# HG changeset patch # User Ross Younger # Date 1406883255 -43200 # Node ID 56fc685b878cc8d80c3afe227f0a68b29c139550 # Parent a9d12f1a0c5bd25fe164f288288d973ca6546165# Parent a1df75458e136955a3270e0108bb2d9a93d2e3c2 Merge from anon-hg diff --git a/doc/ChangeLog b/doc/ChangeLog --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,40 @@ +2014-02-13 Ilija Kocho + + * sgml/doclist: Add Freescale eDMA entry. + +2013-07-01 Ilija Kocho + + * sgml/doclist: Add K60F120M entry (document body provided by Mike Jones) + +2013-06-12 John Dallaway + + * sgml/doclist: Add STM32F4-Discovery documentation. + +2013-05-09 John Dallaway + + * sgml/makemakefile: Update copyright dates. + +2012-05-18 Ilija Kocho + + * sgml/doclist: Add Freescale Kinetis documentation. + +2012-03-13 John Dallaway + + * sgml/doclist: Add Actel SmartFusion documentation. + * sgml/makemakefile: Update copyright dates. + +2011-02-09 John Dallaway + + * sgml/makemakefile: Update copyright dates. + +2011-02-09 Christophe Coutand + + * sgml/doclist: Add EK-LM3S811 documentation. + +2010-11-13 John Dallaway + + * sgml/doclist: Add USB mass storage documentation. + 2010-02-25 John Dallaway * sgml/makemakefile: Update copyright dates. diff --git a/doc/sgml/doclist b/doc/sgml/doclist --- a/doc/sgml/doclist +++ b/doc/sgml/doclist @@ -41,11 +41,22 @@ services/power/common/current/doc/power. io/usb/slave/current/doc/usbs.sgml io/usb/eth/slave/current/doc/usbseth.sgml io/usb/serial/slave/current/doc/usbs_serial.sgml +io/usb/msd/slave/current/doc/usbs_msd.sgml hal/synth/arch/current/doc/synth.sgml hal/m68k/arch/current/doc/m68k.sgml hal/m68k/mcf52xx/var/current/doc/mcf52xx.sgml hal/m68k/mcf52xx/mcf5272/proc/current/doc/mcf5272.sgml hal/m68k/mcf52xx/mcf5272/m5272c3/current/doc/m5272c3.sgml +hal/cortexm/kinetis/var/current/doc/kinetis_begin.sgml +hal/cortexm/kinetis/var/current/doc/kinetis.sgml +hal/cortexm/kinetis/twr_k70f120m/current/doc/twr_k70f120m.sgml +hal/cortexm/kinetis/twr_k60n512/current/doc/twr_k60n512.sgml +hal/cortexm/kinetis/twr_k60f120m/current/doc/twr_k60f120m.sgml +hal/cortexm/kinetis/twr_k40x256/current/doc/twr_k40x256.sgml +hal/cortexm/kinetis/var/current/doc/kinetis_end.sgml +hal/cortexm/a2fxxx/a2f200_eval/current/doc/a2f200e.sgml +hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml +hal/cortexm/stm32/stm32f4discovery/current/doc/stm32f4discovery.sgml hal/sh/sh4_202_md/current/doc/sh4_202_md.sgml devs/usb/sa11x0/current/doc/usbs_sa11x0.sgml devs/usb/nec_upd985xx/current/doc/usbs_upd985xx.sgml @@ -59,3 +70,6 @@ devs/framebuf/synth/current/doc/synth_fr devs/flash/amd/am29xxxxxv2/current/doc/am29xxxxx.sgml devs/flash/intel/stratav2/current/doc/strata.sgml devs/i2c/m68k/mcf52xx/current/doc/mcf52xx_i2c.sgml +hal/misc/freescale/edma/current/doc/freescale_begin.sgml +hal/misc/freescale/edma/current/doc/edma.sgml +hal/misc/freescale/edma/current/doc/freescale_end.sgml diff --git a/doc/sgml/makemakefile b/doc/sgml/makemakefile --- a/doc/sgml/makemakefile +++ b/doc/sgml/makemakefile @@ -20,7 +20,7 @@ cat > makefile <> ecos-ref.sgml <2008 2009 2010 + 2011 + 2012 + 2013 Free Software Foundation, Inc. diff --git a/doc/sgml/user-guide/ChangeLog b/doc/sgml/user-guide/ChangeLog --- a/doc/sgml/user-guide/ChangeLog +++ b/doc/sgml/user-guide/ChangeLog @@ -1,3 +1,9 @@ +2011-08-25 John Dallaway + + * target-setup.sgml: Add instructions for booting with GRUB2. + Patch from Stephen Polkowski. [ Bugzilla 1001254 ] + * user-guide.sgml: Update copyright dates. + 2010-02-17 John Dallaway * introduction.sgml: Mention PPP, lwIP and uSTL. Mention diff --git a/doc/sgml/user-guide/target-setup.sgml b/doc/sgml/user-guide/target-setup.sgml --- a/doc/sgml/user-guide/target-setup.sgml +++ b/doc/sgml/user-guide/target-setup.sgml @@ -9,7 +9,7 @@ - + @@ -2974,7 +2974,7 @@ different disk. -GRUB Bootloader Support +GRUB Bootloader Support (version 0.97) If an application is built with the GRUB startup type, it is configured to be loaded by the GRUB bootloader. @@ -3033,6 +3033,85 @@ version 7.2 and later, you can just add +GRUB 2 Bootloader Support (version 1.98) + +If an application is built with the GRUB startup type, it is +configured to be loaded by the GRUB bootloader. + + +GRUB 2 is an open source boot loader that supports many different +operating systems. GRUB 2 is the sucessor to the legacy GRUB boot +loader. It has been rewritten and requires a new configuration +file that is different from the legacy GRUB loader. +It is available from +http://www.gnu.org/software/grub. +The latest version of GRUB should be downloaded from there and installed. +Cygwin users will need to install the GRand Unified Bootloader package on their +system. + + +To install GRUB 2 on a disk drive from Cygwin you will first need to +format your disk. Begin by launching a windows Command Prompt with +ADMINISTRATOR priviledges. This example assumes that your destination +drive is E and the filesystem type is FAT32. + + +$ format e: /fs:fat32 /q + +The type of the file system is FAT32. +WARNING, ALL DATA ON NON-REMOVABLE DISK +DRIVE E: WILL BE LOST! +Proceed with Format (Y/N)? y +QuickFormatting 512M +Initializing the File Allocation Table (FAT)... +Volume label (11 characters, ENTER for none)? +Format complete. + + +When your drive is finished formatting, Cygwin will automatically +mount the drive under /cygdrive/e. Next, launch a bash shell. +Cygwin users should run their shell as ADMINISTRATOR otherwise +the grub-install program will fail. To install GRUB we need to +know the device name for your disk. A second disk drive is usually +called /dev/sdb. The C: drive is usually called /dev/sda. Determine +your device name by reading the /proc/partitions file. +This example uses /dev/sdb as input to the GRUB install program. + + +$ cat /proc/partitions +major minor #blocks name + 8 0 156290904 sda + 8 1 102400 sda1 + 8 2 156185600 sda2 + 8 16 156290904 sdb + 8 17 524288 sdb1 + +$ grub-install --root-directory=/cygdrive/e /dev/sdb +Installation finished. No error reported. + +$ cp $ECOS_REPOSITORY/packages/hal/i386/pc/current/misc/grub.cfg /cygdrive/e/boot/grub + +$ cp redboot.elf /cygdrive/e/boot + + +After installing GRUB 2, we need to a copy a configuration +file for grub to use. The file grub.cfg is an example +configuration file that loads redboot.elf. You should, of course, customize +this file to load your own application. Alternatively you can use the command-line +interface of GRUB to input commands yourself. Applications can be installed or +updated simply by copying them to the location expected by the +grub.cfg file. In this example the /boot directory is used. + + +When installing GRUB on a hard disk, refer to the GRUB documentation. Be +warned, however, that if you get this wrong it may compromise any +existing bootloader that exists on the hard disk and may make any +other operating systems unbootable. Practice on a spare disk or +sacrificial hard disks first. + + + Debugging FLOPPY and GRUB Applications When RedBoot loads an application it also provides debugging services diff --git a/doc/sgml/user-guide/user-guide.sgml b/doc/sgml/user-guide/user-guide.sgml --- a/doc/sgml/user-guide/user-guide.sgml +++ b/doc/sgml/user-guide/user-guide.sgml @@ -73,7 +73,7 @@ eCos User Guide - 2001, 2002, 2003, 2004, 2009, 2010Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2009, 2010, 2011Free Software Foundation, Inc. Documentation licensing terms diff --git a/host/infra/ChangeLog b/host/infra/ChangeLog --- a/host/infra/ChangeLog +++ b/host/infra/ChangeLog @@ -1,3 +1,8 @@ +2014-03-13 Andy Jackson + + * trace.cxx: Silence "set but unused" variable warnings with + recent GCC. [ Bugzilla 1001949 ] + 2008-08-18 Bart Veer * configure.in, Makefile.am: update host-side configury @@ -177,7 +182,7 @@ 1998-12-24 Bart Veer + + * build.cxx, expr.cxx: Silence "set but unused" variable + warnings with recent GCC. [ Bugzilla 1001949 ] + 2008-09-18 John Dallaway * build.cxx (generate_config_headers): Create Tcl channels for @@ -1006,7 +1011,7 @@ 1999-01-21 Bart Veer second->update(transact, source, source_prop, dest, change); CYG_ASSERTC(handled); + CYG_UNUSED_PARAM(bool, handled); } result = true; diff --git a/host/tools/Utils/ChangeLog b/host/tools/Utils/ChangeLog --- a/host/tools/Utils/ChangeLog +++ b/host/tools/Utils/ChangeLog @@ -1,3 +1,10 @@ +2014-03-13 Andy Jackson + + * common/eCosStd.h: Silence "set but unused" variable warnings with + recent GCC. [ Bugzilla 1001949 ] + * common/Subprocess.cpp: Silence signed/unsigned compiler warning + with recent GCC. [ Bugzilla 1001955 ] + 2006-03-29 John Dallaway * common/eCosSocket.h: Specify CeCosSerial as a friend class to diff --git a/host/tools/Utils/common/Subprocess.cpp b/host/tools/Utils/common/Subprocess.cpp --- a/host/tools/Utils/common/Subprocess.cpp +++ b/host/tools/Utils/common/Subprocess.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2004 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2004, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -638,7 +638,7 @@ bool CSubprocess::PSExtract(CSubprocess: if(dwPidSize/sizeof(DWORD) + #include #include diff --git a/host/tools/configtool/ChangeLog b/host/tools/configtool/ChangeLog --- a/host/tools/configtool/ChangeLog +++ b/host/tools/configtool/ChangeLog @@ -1,3 +1,75 @@ +2014-03-13 Andy Jackson + + * standalone/wxwin/admindlg.cpp, + standalone/wxwin/configtooldoc.cpp, + standalone/wxwin/configtree.cpp: Silence "set but unused" variable + warnings with recent GCC. [ Bugzilla 1001949 ] + * standalone/common/ecosconfig.cxx: Update copyright string. + * standalone/wxwin/configtool.cpp, + standalone/wxwin/configtooldoc.cpp, + standalone/wxwin/configtree.cpp, + standalone/wxwin/configtree.h, + standalone/wxwin/filename.cpp, + standalone/wxwin/packagesdlg.cpp, + standalone/wxwin/propertywin.cpp, + standalone/wxwin/runtestsdlg.cpp, + standalone/wxwin/templatesdlg.cpp: Silence unused variable warnings + with recent GCC. [ Bugzilla 1001950 ] + +2014-02-28 Andy Jackson + + * standalone/wxwin/standalone/wxwin/finddlg.cpp, + standalone/wxwin/msgdlgex.cpp, + standalone/wxwin/packagesdlg.cpp, + standalone/wxwin/packagesdlg.h, + standalone/wxwin/settingsdlg.cpp, + standalone/wxwin/templatesdlg.cpp: Eliminate deprecated wxWidgets + calls. [ Bugzilla 1001947 ] + * standalone/wxwin/appsettings.cpp, + standalone/wxwin/conflictsdlg.cpp: Silence initialization order + compiler warnings with recent GCC. [ Bugzilla 1001948 ] + * standalone/wxwin/appsettings.cpp, + standalone/wxwin/conflictsdlg.cpp, + standalonw/wxwin/docsystem.cpp, + standalone/wxwin/ecutils.cpp, + standalone/wxwin/packagesdlg.cpp: Silence miscellaneous compiler + warnings with recent GCC. [ Bugzilla 1001951 ] + * standalone/wxwin/mainwin.cpp, standalone/wxwin/configtool.cpp: + Update copyright strings. + +2013-03-15 John Dallaway + + * standalone/wxwin/admindlg.cpp: Pass POSIX-style paths to + ecosadmin.tcl for recent versions of Cygwin. [ Bugzilla 1001798 ] + * standalone/wxwin/mainwin.cpp, standalone/wxwin/configtool.cpp: + Update copyright strings. + +2012-06-22 John Dallaway + + * standalone/wxwin/makefile.gnu: Update linker flags for recent + versions of Fedora with modified DSO-linking semantics. Issue + reported by David Fernandez. [ Bugzilla 1001613 ] + +2012-04-23 John Dallaway + + * standalone/wxwin/makefile.gnu: Update build flags for recent + versions of Cygwin. + * standalone/wxwin/configtool.cpp, standalone/wxwin/mainwin.cpp: + Update copyright strings. + +2011-02-07 John Dallaway + + * standalone/wxwin/configitem.cpp: Escape newline chars in CDL + values for display and in-cell editing. [ Bugzilla 1001144 ] + * standalone/wxwin/mainwin.cpp, standalone/wxwin/configtool.cpp: + Update copyright strings. + +2010-09-10 John Dallaway + + * standalone/wxwin/configtooldoc.cpp: Allow import/export of + eCos minimal configuration files with non-standard file suffixes. + Based on patch from Ross Younger. [ Bugzilla 85580 ] + 2010-02-17 John Dallaway * standalone/common/ecosconfig.cxx: Fix compilation on recent diff --git a/host/tools/configtool/standalone/common/ecosconfig.cxx b/host/tools/configtool/standalone/common/ecosconfig.cxx --- a/host/tools/configtool/standalone/common/ecosconfig.cxx +++ b/host/tools/configtool/standalone/common/ecosconfig.cxx @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2010 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2010, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ #include "ecosconfig.hxx" #define TOOL_VERSION "3.net" -#define TOOL_COPYRIGHT "Copyright (c) 2002-2010 Free Software Foundation, Inc." +#define TOOL_COPYRIGHT "Copyright (c) 2002-2014 Free Software Foundation, Inc." #define DEFAULT_SAVE_FILE "ecos.ecc" static const char* tool = "ecosconfig"; diff --git a/host/tools/configtool/standalone/wxwin/admindlg.cpp b/host/tools/configtool/standalone/wxwin/admindlg.cpp --- a/host/tools/configtool/standalone/wxwin/admindlg.cpp +++ b/host/tools/configtool/standalone/wxwin/admindlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2013, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -240,8 +240,7 @@ void ecAdminDialog::OnAdd(wxCommandEvent // extract the licence file wxString strCommand; - strCommand.Printf(wxT("add %s --extract_license"), (const wxChar*) strPathName); - strCommand.Replace(wxT("\\"), wxT("/")); // backslashes -> forward slashes for Tcl_EvalFile + strCommand.Printf(wxT("add %s --extract_license"), (const wxChar*) ecUtils::NativeToPosixPath(strPathName)); EvalTclFile (3, strCommand, _("Adding package")); wxString strLicenseFile = m_strRepository + wxString(wxFILE_SEP_PATH) + wxT("pkgadd.txt"); @@ -277,8 +276,7 @@ void ecAdminDialog::OnAdd(wxCommandEvent // add the contents of the package distribution file - strCommand.Printf (wxT("add %s --accept_license"), (const wxChar*) strPathName); - strCommand.Replace (wxT("\\"), wxT("/")); // backslashes -> forward slashes for Tcl_EvalFile + strCommand.Printf (wxT("add %s --accept_license"), (const wxChar*) ecUtils::NativeToPosixPath(strPathName)); if (! EvalTclFile (3, strCommand, _("Adding package"))) // if not successful { // try the next file @@ -474,6 +472,7 @@ bool ecAdminDialog::PopulatePackageTree // Add a root item wxTreeItemId rootId = m_treeCtrl->AddRoot(_("Packages"), 0, -1); + CYG_UNUSED_PARAM(wxTreeItemId, rootId); // populate the new package tree @@ -521,14 +520,14 @@ bool ecAdminDialog::EvalTclFile(int narg wxString strArgc; strArgc.Printf (wxT("%d"), nargc); - std::string argv0 = ecUtils::UnicodeToStdStr (m_strRepository) + "/ecosadmin.tcl"; + std::string argv0 = ecUtils::UnicodeToStdStr (ecUtils::NativeToPosixPath (m_strRepository)) + "/ecosadmin.tcl"; std::string argv = ecUtils::UnicodeToStdStr (Argv); std::string argc = ecUtils::UnicodeToStdStr (strArgc); Tcl_Interp * interp = Tcl_CreateInterp (); #ifdef __WXMSW__ - Tcl_Channel outchan = Tcl_OpenFileChannel (interp, "nul", "a+", 777); + Tcl_Channel outchan = Tcl_OpenFileChannel (interp, "/dev/null", "a+", 777); Tcl_SetStdChannel (outchan, TCL_STDOUT); // direct standard output to NUL: #endif @@ -536,6 +535,7 @@ bool ecAdminDialog::EvalTclFile(int narg pszStatus = Tcl_SetVar (interp, "argv", (char*) argv.c_str(), 0); pszStatus = Tcl_SetVar (interp, "argc", (char*) argc.c_str(), 0); pszStatus = Tcl_SetVar (interp, "gui_mode", "1", 0); // return errors in result string + CYG_UNUSED_PARAM(const char *, pszStatus); int nStatus = Tcl_EvalFile (interp, (char*) argv0.c_str()); const char* result = Tcl_GetStringResult (interp); diff --git a/host/tools/configtool/standalone/wxwin/appsettings.cpp b/host/tools/configtool/standalone/wxwin/appsettings.cpp --- a/host/tools/configtool/standalone/wxwin/appsettings.cpp +++ b/host/tools/configtool/standalone/wxwin/appsettings.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2006, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2006, 2008, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -351,7 +351,7 @@ bool ecSettings::LoadConfig() #ifdef __WXMSW__ SYSTEM_INFO SystemInfo; GetSystemInfo(&SystemInfo); - m_strMakeOptions.Printf(_T("-j%d"),SystemInfo.dwNumberOfProcessors); + m_strMakeOptions.Printf(_T("-j%ld"),SystemInfo.dwNumberOfProcessors); #else long lProcessors; lProcessors = sysconf(_SC_NPROCESSORS_ONLN); @@ -909,13 +909,13 @@ ecRunTestsSettings::ecRunTestsSettings() m_nDownloadTimeoutType(TIMEOUT_SPECIFIED), m_bRemote(FALSE), m_bSerial(TRUE), - m_strPort(wxT("/dev/ttyS0")), m_nBaud(38400), m_nLocalTCPIPPort(9000), m_nReset(RESET_MANUAL), m_nResourcePort(1), m_nRemotePort(1), - m_bFarmed(TRUE), + m_bFarmed(TRUE), + m_strPort(wxT("/dev/ttyS0")), m_strRemoteHost(wxT("")), m_strResourceHost(wxT("")), m_strLocalTCPIPHost(wxT("")), diff --git a/host/tools/configtool/standalone/wxwin/configitem.cpp b/host/tools/configtool/standalone/wxwin/configitem.cpp --- a/host/tools/configtool/standalone/wxwin/configitem.cpp +++ b/host/tools/configtool/standalone/wxwin/configitem.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2006, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -434,6 +434,7 @@ wxString ecConfigItem::GetDisplayValue() { if (GetCdlValuable()) str = StringValue(); + str.Replace("\n", "\\n"); // escape any newline chars (eg CYGDAT_UITRON_TASK_INITIALIZERS) } break; default: @@ -610,7 +611,9 @@ bool ecConfigItem::TransferDataFromWindo wxASSERT ( GetOptionType() == ecString ); // TODO: do checking - doc->SetValue(*this, win->GetValue()); + wxString str(win->GetValue()); + str.Replace("\\n", "\n"); // remove escaping of newline chars + doc->SetValue(*this, str); } else if (window->IsKindOf(CLASSINFO(ecDoubleEditorCtrl))) { @@ -1380,6 +1383,7 @@ void ecTextEditorCtrl::OnLeftDClick(wxMo ecConfigToolDoc* doc = wxGetApp().GetConfigToolDoc(); wxString initialValue(GetValue()); + initialValue.Replace("\\n", "\n"); // remove escaping of newline chars ecEditStringDialog dialog(initialValue, wxGetApp().GetTopWindow(), ecID_EDIT_STRING_DIALOG); if (dialog.ShowModal() == wxID_OK) diff --git a/host/tools/configtool/standalone/wxwin/configtool.cpp b/host/tools/configtool/standalone/wxwin/configtool.cpp --- a/host/tools/configtool/standalone/wxwin/configtool.cpp +++ b/host/tools/configtool/standalone/wxwin/configtool.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2008, 2009, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -284,7 +284,7 @@ bool ecApp::OnInit() wxLog::SetActiveTarget(new wxLogStderr); #endif wxString msg; - msg.Printf(wxT("eCos Configuration Tool (c) Free Software Foundation, Inc., 1998-2009 Version %s, %s"), ecCONFIGURATION_TOOL_VERSION, __DATE__); + msg.Printf(wxT("eCos Configuration Tool (c) Free Software Foundation, Inc., 1998-2014 Version %s, %s"), ecCONFIGURATION_TOOL_VERSION, __DATE__); wxLogMessage(msg); return FALSE; } @@ -781,6 +781,8 @@ bool ecApp::InitializeHelpController() wxGetApp().GetHelpController().SetBookBasePath(htmlDir); } +#else + CYG_UNUSED_PARAM(ecConfigToolDoc *, doc); #endif return TRUE; } diff --git a/host/tools/configtool/standalone/wxwin/configtooldoc.cpp b/host/tools/configtool/standalone/wxwin/configtooldoc.cpp --- a/host/tools/configtool/standalone/wxwin/configtooldoc.cpp +++ b/host/tools/configtool/standalone/wxwin/configtooldoc.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2006, 2008, 2009, 2010, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -355,6 +355,7 @@ bool ecConfigToolDoc::CanGenerateBuildTr } else return FALSE; + CYG_UNUSED_PARAM(int, nCount); return TRUE; } @@ -382,6 +383,7 @@ bool ecConfigToolDoc::GenerateBuildTree( // copy new MLT files to the build tree as necessary bool rc = generate_build_tree (GetCdlConfig(), ecUtils::UnicodeToStdStr(m_strBuildTree.CygPath()), ecUtils::UnicodeToStdStr(m_strInstallTree.CygPath())); rc = TRUE; + CYG_UNUSED_PARAM(bool, rc); } } @@ -1307,6 +1309,7 @@ CdlInferenceCallbackResult ecConfigToolD wxGetApp().UnlockValues(); } + CYG_UNUSED_PARAM(ecConfigToolDoc *, pDoc); return rc; } @@ -1360,6 +1363,7 @@ void ecConfigToolDoc::CdlTransactionHand (CdlValueSource_Inferred == source) ? "inferred" : (CdlValueSource_Wizard == source) ? "wizard" : "user")); */ + CYG_UNUSED_PARAM(CdlValueSource, source); pControlView->Refresh (strName); } @@ -2144,12 +2148,17 @@ const wxString ecConfigToolDoc::CurrentM bool ecConfigToolDoc::ExportFile() { + wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Export eCos Minimal Configuration"), + wxT(""), wxT(""), +#ifdef __WXMSW__ + wxT("eCos Minimal Configuration Files (*.ecm)|*.ecm|All Files (*.*)|*.*"), +#else + wxT("eCos Minimal Configuration Files (*.ecm)|*.ecm|All Files (*)|*"), +#endif #if wxCHECK_VERSION(2, 6, 0) - wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Export eCos Minimal Configuration"), - wxT(""), wxT(""), wxT("eCos Minimal Configuration (*.ecm)|*.ecm"), wxSAVE|wxOVERWRITE_PROMPT); + wxSAVE|wxOVERWRITE_PROMPT); #else - wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Export eCos Minimal Configuration"), - wxT(""), wxT(""), wxT("eCos Minimal Configuration (*.ecm)|*.ecm"), wxSAVE|wxOVERWRITE_PROMPT|wxHIDE_READONLY); + wxSAVE|wxOVERWRITE_PROMPT|wxHIDE_READONLY); #endif if (dialog.ShowModal() == wxID_OK) @@ -2178,12 +2187,17 @@ bool ecConfigToolDoc::ExportFile() bool ecConfigToolDoc::ImportFile() { + wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Import eCos Minimal Configuration"), + wxT(""), wxT(""), +#ifdef __WXMSW__ + wxT("eCos Minimal Configuration Files (*.ecm)|*.ecm|All Files (*.*)|*.*"), +#else + wxT("eCos Minimal Configuration Files (*.ecm)|*.ecm|All Files (*)|*"), +#endif #if wxCHECK_VERSION(2, 6, 0) - wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Import eCos Minimal Configuration"), - wxT(""), wxT(""), wxT("eCos Minimal Configuration (*.ecm)|*.ecm"), wxOPEN|wxFILE_MUST_EXIST); + wxOPEN|wxFILE_MUST_EXIST); #else - wxFileDialog dialog(wxGetApp().GetTopWindow(), _("Import eCos Minimal Configuration"), - wxT(""), wxT(""), wxT("eCos Minimal Configuration (*.ecm)|*.ecm"), wxOPEN|wxFILE_MUST_EXIST|wxHIDE_READONLY); + wxOPEN|wxFILE_MUST_EXIST|wxHIDE_READONLY); #endif if (dialog.ShowModal() == wxID_OK) @@ -2236,6 +2250,7 @@ bool ecConfigToolDoc::SwitchMemoryLayout // copy default MLT save files for the selected target/platform from the repository to the build tree if they do not already exist CopyMLTFiles(); } + CYG_UNUSED_PARAM(bool, rc); if (m_strBuildTree.IsEmpty ()) // load the memory layout from the repository { diff --git a/host/tools/configtool/standalone/wxwin/configtree.cpp b/host/tools/configtool/standalone/wxwin/configtree.cpp --- a/host/tools/configtool/standalone/wxwin/configtree.cpp +++ b/host/tools/configtool/standalone/wxwin/configtree.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2008, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -408,6 +408,7 @@ void ecValueWindow::OnMouseEvent(wxMouse m_treeCtrl->SelectItem(item); ((ecConfigTreeCtrl*) m_treeCtrl)->GetPropertiesMenu()->SetClientData((void*) TRUE); PopupMenu(((ecConfigTreeCtrl*) m_treeCtrl)->GetPropertiesMenu(), event.GetX(), event.GetY()); + CYG_UNUSED_PARAM(ecConfigItem *, configItem); } else { @@ -717,6 +718,7 @@ void ecSplitterScrolledWindow::OnPropert // or not menu = (wxMenu*) obj; } + CYG_UNUSED_PARAM(wxMenu *, menu); ecConfigTreeCtrl* treeCtrl = (ecConfigTreeCtrl*) FindWindow(ecID_TREE_CTRL); wxASSERT (treeCtrl != NULL) ; @@ -903,6 +905,7 @@ void ecSplitterScrolledWindow::OnUpdateR ecConfigItem* item = ((ecTreeItemData*) treeCtrl->GetItemData(id))->GetConfigItem(); event.Enable( IsChanged(id, TRUE ) ); + CYG_UNUSED_PARAM(ecConfigItem *, item); } } diff --git a/host/tools/configtool/standalone/wxwin/configtree.h b/host/tools/configtool/standalone/wxwin/configtree.h --- a/host/tools/configtool/standalone/wxwin/configtree.h +++ b/host/tools/configtool/standalone/wxwin/configtree.h @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2008, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -105,7 +105,7 @@ public: // enabled/disabled int GetStateCount() const { return m_maxStates; }; - void SetStateCount(int count) { m_maxStates; } + void SetStateCount(int count) { /* m_maxStates; */ } int GetIconId(int state, bool enabled = TRUE) const; void SetIconId(int state, bool enabled, int iconId); diff --git a/host/tools/configtool/standalone/wxwin/conflictsdlg.cpp b/host/tools/configtool/standalone/wxwin/conflictsdlg.cpp --- a/host/tools/configtool/standalone/wxwin/conflictsdlg.cpp +++ b/host/tools/configtool/standalone/wxwin/conflictsdlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -85,11 +85,10 @@ END_EVENT_TABLE() // Frame constructor ecResolveConflictsDialog::ecResolveConflictsDialog(wxWindow* parent, std::list conflicts, CdlTransaction transaction, wxList *parConflictsOfInterest): + m_Map(wxKEY_INTEGER), m_conflicts(conflicts), m_Transaction(transaction), - m_parConflictsOfInterest(parConflictsOfInterest), - m_Map(wxKEY_INTEGER) - + m_parConflictsOfInterest(parConflictsOfInterest) { // Stop values from being changed by other mechanisms during the // duration of this dialog. @@ -313,6 +312,8 @@ void ecResolveConflictsDialog::OnContinu case CdlValueFlavor_Data : str.Printf(_("set %s to %s\n"), (const wxChar*) strName, (const wxChar*) strValue); valuable->set_value (m_Transaction, ecUtils::UnicodeToStdStr (strValue), CdlValueSource_User); + break; + default : break; } } @@ -455,6 +456,8 @@ void ecResolveConflictsDialog::AddConfli break; case CdlValueFlavor_Data : strValue = value.get_value().c_str(); + break; + default : break; } diff --git a/host/tools/configtool/standalone/wxwin/docsystem.cpp b/host/tools/configtool/standalone/wxwin/docsystem.cpp --- a/host/tools/configtool/standalone/wxwin/docsystem.cpp +++ b/host/tools/configtool/standalone/wxwin/docsystem.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2008, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -493,10 +493,11 @@ mainwin=\"eCos Documentation\",\"eCos.hh index.html\n\ \n\ [INFOTYPES]\n" ; - + +/* // When we have the ability to generate a hhk, replace above line with: // mainwin=\"eCos Documentation\",\"eCos.hhc\",\"eCos.hhk\",,\"index.html\",\"http://sources.redhat.com/ecos/\",\"Net Release\",\"http://www.redhat.com/products/ecos/\",\"eCos Product\",0x40060420,,0xc287e,[0,0,762,400],,,,,,,0\n\ - +*/ return TRUE; } diff --git a/host/tools/configtool/standalone/wxwin/ecutils.cpp b/host/tools/configtool/standalone/wxwin/ecutils.cpp --- a/host/tools/configtool/standalone/wxwin/ecutils.cpp +++ b/host/tools/configtool/standalone/wxwin/ecutils.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2008, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -202,7 +202,7 @@ bool ecUtils::StrToItemIntegerType(const const wxString ecUtils::IntToStr(long d,bool bHex) { wxString s; - s.Printf(bHex?wxT("0x%08x"):wxT("%d"),d); + s.Printf(bHex?wxT("0x%08lx"):wxT("%ld"),d); return s; } diff --git a/host/tools/configtool/standalone/wxwin/filename.cpp b/host/tools/configtool/standalone/wxwin/filename.cpp --- a/host/tools/configtool/standalone/wxwin/filename.cpp +++ b/host/tools/configtool/standalone/wxwin/filename.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -220,6 +220,7 @@ void ecFileName::ConcatCopy(const wxStri return; } } + CYG_UNUSED_PARAM(int, nNewLen); } void ecFileName::Normalize() diff --git a/host/tools/configtool/standalone/wxwin/finddlg.cpp b/host/tools/configtool/standalone/wxwin/finddlg.cpp --- a/host/tools/configtool/standalone/wxwin/finddlg.cpp +++ b/host/tools/configtool/standalone/wxwin/finddlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -237,7 +237,11 @@ void ecFindDialog::OnFindNext(wxCommandE rect2 = GetRect(); // screen coords - if (rect2.Inside(topLeft) || rect2.Inside(bottomRight)) +#if wxCHECK_VERSION(2, 8, 0) + if (rect2.Contains(topLeft) || rect2.Contains(bottomRight)) +#else + if (rect2.Inside(topLeft) || rect2.Inside(bottomRight)) +#endif { Move(wxPoint(topLeft.x + rect1.width, rect2.y)); } diff --git a/host/tools/configtool/standalone/wxwin/mainwin.cpp b/host/tools/configtool/standalone/wxwin/mainwin.cpp --- a/host/tools/configtool/standalone/wxwin/mainwin.cpp +++ b/host/tools/configtool/standalone/wxwin/mainwin.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2008, 2009, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -571,7 +571,7 @@ void ecMainFrame::OnAbout(wxCommandEvent int iTclVerMajor, iTclVerMinor, iTclVerPatchLevel; Tcl_GetVersion (&iTclVerMajor, &iTclVerMinor, &iTclVerPatchLevel, NULL); msg.Printf("eCos Configuration Tool %s (%s %s)\n\n" - "Copyright (c) Free Software Foundation, Inc. 1998-2009\n\n" + "Copyright (c) Free Software Foundation, Inc. 1998-2014\n\n" "Using %s %s and Tcl %d.%d.%d", ecCONFIGURATION_TOOL_VERSION, __DATE__, __TIME__, wxPlatformInfo::Get().GetPortIdName().c_str(), wxVERSION_NUM_DOT_STRING, diff --git a/host/tools/configtool/standalone/wxwin/makefile.gnu b/host/tools/configtool/standalone/wxwin/makefile.gnu --- a/host/tools/configtool/standalone/wxwin/makefile.gnu +++ b/host/tools/configtool/standalone/wxwin/makefile.gnu @@ -1,7 +1,7 @@ # ####ECOSHOSTGPLCOPYRIGHTBEGIN#### # ------------------------------------------- # This file is part of the eCos host tools. -# Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005, 2006, 2012 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -59,14 +59,14 @@ EXTRALDFLAGS=-L$(TCLDIR)/lib -L$(INSTALL ifneq (,$(findstring CYGWIN, $(shell uname))) PROGRAM=configtool.exe - CPPFLAGS=`$(WXDIR)/bin/wx-config --cppflags` -D_WIN32 -D__WIN32__ -DSTRICT -D__USE_W32_SOCKETS + CPPFLAGS=`$(WXDIR)/bin/wx-config --cppflags` -DSTRICT -D__USE_W32_SOCKETS LDFLAGS=`$(WXDIR)/bin/wx-config --libs std,gizmos` -lshlwapi -Wl,--subsystem,windows EXTRAOBJECTS=$(CTBUILDDIR)/configtoolres.o RCFLAGS=`$(WXDIR)/bin/wx-config --cppflags` else PROGRAM=configtool CPPFLAGS=`$(WXDIR)/bin/wx-config --cppflags` - LDFLAGS=`$(WXDIR)/bin/wx-config --libs std,gizmos` + LDFLAGS=-lX11 `$(WXDIR)/bin/wx-config --libs std,gizmos` EXTRAOBJECTS= RCFLAGS=`$(WXDIR)/bin/wx-config --cppflags` endif diff --git a/host/tools/configtool/standalone/wxwin/msgdlgex.cpp b/host/tools/configtool/standalone/wxwin/msgdlgex.cpp --- a/host/tools/configtool/standalone/wxwin/msgdlgex.cpp +++ b/host/tools/configtool/standalone/wxwin/msgdlgex.cpp @@ -46,7 +46,10 @@ #include "wx/statbox.h" #include "wx/stattext.h" #include "wx/statbmp.h" -#include "wx/bmpbuttn.h" +#include "wx/bmpbuttn.h" +#if wxCHECK_VERSION(2, 8, 0) +#include "wx/artprov.h" +#endif //---------------------------------------------------------------------------- // wxMessageDialogEx @@ -73,8 +76,13 @@ wxMessageDialogEx::wxMessageDialogEx( wx // 1) icon if (style & wxICON_MASK) { - wxStaticBitmap *icon = new wxStaticBitmap( - this, -1, wxTheApp->GetStdIcon((int)(style & wxICON_MASK))); +#if wxCHECK_VERSION(2, 8, 0) + wxStaticBitmap *icon = new wxStaticBitmap(this, wxID_ANY, + wxArtProvider::GetIcon(wxART_INFORMATION)); +#else + wxStaticBitmap *icon = new wxStaticBitmap( + this, -1, wxTheApp->GetStdIcon((int)(style & wxICON_MASK))); +#endif icon_text->Add( icon, 0, wxCENTER ); } diff --git a/host/tools/configtool/standalone/wxwin/packagesdlg.cpp b/host/tools/configtool/standalone/wxwin/packagesdlg.cpp --- a/host/tools/configtool/standalone/wxwin/packagesdlg.cpp +++ b/host/tools/configtool/standalone/wxwin/packagesdlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2005, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -97,7 +97,11 @@ m_timer(this) m_keywords = wxEmptyString; m_updateLists = FALSE; m_updateInterval = 600; // Milliseconds - wxStartTimer(); +#if wxCHECK_VERSION(2, 8, 0) + m_StopWatch.Start(); +#else + wxStartTimer(); +#endif SetExtraStyle(wxDIALOG_EX_CONTEXTHELP); @@ -362,10 +366,18 @@ void ecPackagesDialog::Fill() // wxGTK doesn't deselect items properly when clearing, I think int i; for (i = 0; i < availableList->GetCount(); i++) - if (availableList->Selected(i)) +#if wxCHECK_VERSION(2, 8, 0) + if (availableList->IsSelected(i)) +#else + if (availableList->Selected(i)) +#endif availableList->Deselect(i); for (i = 0; i < useList->GetCount(); i++) - if (useList->Selected(i)) +#if wxCHECK_VERSION(2, 8, 0) + if (useList->IsSelected(i)) +#else + if (useList->Selected(i)) +#endif useList->Deselect(i); availableList->Clear(); @@ -613,6 +625,8 @@ void ecPackagesDialog::OnClickListBox1(w // TODO: check that this works for multiple-selection listboxes DisplayDescription(availableList->GetString(sel)); } +#else + CYG_UNUSED_PARAM(wxListBox *, availableList); #endif ClearSelections(*useList); @@ -634,6 +648,8 @@ void ecPackagesDialog::OnClickListBox2(w // TODO: check that this works for multiple-selection listboxes DisplayDescription(useList->GetString(sel)); } +#else + CYG_UNUSED_PARAM(wxListBox *, useList); #endif ClearSelections(*availableList); @@ -698,7 +714,11 @@ void ecPackagesDialog::OnClearKeywords(w TransferDataFromWindow(); Fill(); m_updateLists = FALSE; - wxStartTimer(); +#if wxCHECK_VERSION(2, 8, 0) + m_StopWatch.Start(); +#else + wxStartTimer(); +#endif FindWindow( ecID_PACKAGES_DIALOG_KEYWORDS )->SetFocus(); } @@ -713,7 +733,11 @@ void ecPackagesDialog::OnUpdateKeywordTe TransferDataFromWindow(); m_updateLists = TRUE; - wxStartTimer(); +#if wxCHECK_VERSION(2, 8, 0) + m_StopWatch.Start(); +#else + wxStartTimer(); +#endif } void ecPackagesDialog::OnClickOmitHardwarePackages(wxCommandEvent& event) @@ -730,12 +754,20 @@ void ecPackagesDialog::OnClickExactMatch void ecPackagesDialog::OnIdle(wxIdleEvent& event) { - long elapsed = wxGetElapsedTime(FALSE); +#if wxCHECK_VERSION(2, 8, 0) + long elapsed = m_StopWatch.Time(); +#else + long elapsed = wxGetElapsedTime(FALSE); +#endif if (m_updateLists && (elapsed > m_updateInterval)) { m_updateLists = FALSE; Fill(); - wxStartTimer(); +#if wxCHECK_VERSION(2, 8, 0) + m_StopWatch.Start(); +#else + wxStartTimer(); +#endif } } @@ -753,6 +785,8 @@ void ecPackagesDialog::Insert(const wxSt m_added.Add(str); //(added ? useList : availableList) -> Append(str); + CYG_UNUSED_PARAM(wxListBox *, availableList); + CYG_UNUSED_PARAM(wxListBox *, useList); } bool ecPackagesDialog::IsAdded(const wxString& str) @@ -761,7 +795,8 @@ bool ecPackagesDialog::IsAdded(const wxS // return (((wxListBox*) FindWindow( ecID_PACKAGES_DIALOG_USE_LIST ))->FindString(str) > -1) ; } - + +#if 0 static int ecPositionInStringList(const wxStringList& list, const wxString& item) { int i; @@ -772,6 +807,7 @@ static int ecPositionInStringList(const i ++; return -1; } +#endif void ecPackagesDialog::DisplayDescription(const wxString& item) { @@ -937,6 +973,7 @@ void ecPackagesDialog::UpdatePackageDesc m_packageDescription = wxEmptyString; } TransferDataToWindow (); + CYG_UNUSED_PARAM(ecConfigToolDoc *, pDoc); } void ecPackagesDialog::UpdateVersionList () diff --git a/host/tools/configtool/standalone/wxwin/packagesdlg.h b/host/tools/configtool/standalone/wxwin/packagesdlg.h --- a/host/tools/configtool/standalone/wxwin/packagesdlg.h +++ b/host/tools/configtool/standalone/wxwin/packagesdlg.h @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -143,7 +143,10 @@ private: wxString m_keywords; bool m_updateLists; // If true, the keyword changed and we need to update the lists long m_updateInterval; // Interval before display is updated - ecPackagesTimer m_timer; + ecPackagesTimer m_timer; +#if wxCHECK_VERSION(2, 8, 0) + wxStopWatch m_StopWatch; +#endif }; #define ecID_PACKAGES_DIALOG_AVAILABLE_LIST 10066 diff --git a/host/tools/configtool/standalone/wxwin/propertywin.cpp b/host/tools/configtool/standalone/wxwin/propertywin.cpp --- a/host/tools/configtool/standalone/wxwin/propertywin.cpp +++ b/host/tools/configtool/standalone/wxwin/propertywin.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2008, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -296,6 +296,7 @@ void ecPropertyListCtrl::Fill(ecConfigIt // TODO: set the image for a conflict item // CListCtrl::SetItem (nIndex, 0, LVIF_IMAGE, NULL, bConflictItem ? 1 : 0, 0, 0, 0 ); + CYG_UNUSED_PARAM(bool, bConflictItem); } } } @@ -360,6 +361,7 @@ void ecPropertyListCtrl::RefreshValue() // TODO // CListCtrl::SetItem (nItem, 0, LVIF_IMAGE, NULL, bConflictItem ? 1 : 0, 0, 0, 0 ); + CYG_UNUSED_PARAM(bool, bConflictItem); } } diff --git a/host/tools/configtool/standalone/wxwin/runtestsdlg.cpp b/host/tools/configtool/standalone/wxwin/runtestsdlg.cpp --- a/host/tools/configtool/standalone/wxwin/runtestsdlg.cpp +++ b/host/tools/configtool/standalone/wxwin/runtestsdlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -383,7 +383,7 @@ wxString ecRunTestsDialog::TranslatePort void ecRunTestsDialog::SubmitTests() { - int iTest; +// int iTest; int nResources=wxGetApp().GetSettings().GetRunTestsSettings().m_bRemote ? wxMax(1,CTestResource::GetMatchCount (m_ep)):1; if(nResources>CeCosTest::InstanceCount){ if (m_nNextToSubmit >= m_executables->SelectedTestCount()){ @@ -725,6 +725,7 @@ void ecRunTestsExecutablesDialog::Create parent->SetAutoLayout( TRUE ); parent->SetSizer( item0 ); + CYG_UNUSED_PARAM(wxCheckListBox *, listBox); } void ecRunTestsExecutablesDialog::OnCheckAll(wxCommandEvent& event) @@ -1129,6 +1130,8 @@ void ecRunTestsSummaryDialog::AddResult m_List.SetItemText(nItem,1+i,arstr[i]); arstr[i].ReleaseBuffer(); } +#else + CYG_UNUSED_PARAM(int, nLength); #endif } diff --git a/host/tools/configtool/standalone/wxwin/settingsdlg.cpp b/host/tools/configtool/standalone/wxwin/settingsdlg.cpp --- a/host/tools/configtool/standalone/wxwin/settingsdlg.cpp +++ b/host/tools/configtool/standalone/wxwin/settingsdlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2005, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2005, 2008, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -443,7 +443,11 @@ void ecDisplayOptionsDialog::OnChangeFon wxFontData data; data.SetInitialFont(wxGetApp().GetSettings().GetWindowSettings().GetFont(str)); - wxFontDialog dlg(this, & data); +#if wxCHECK_VERSION(2, 8, 0) + wxFontDialog dlg(this, data); +#else + wxFontDialog dlg(this, & data); +#endif if (dlg.ShowModal() == wxID_OK) { wxGetApp().GetSettings().GetWindowSettings().SetFont(str, dlg.GetFontData().GetChosenFont()) ; diff --git a/host/tools/configtool/standalone/wxwin/templatesdlg.cpp b/host/tools/configtool/standalone/wxwin/templatesdlg.cpp --- a/host/tools/configtool/standalone/wxwin/templatesdlg.cpp +++ b/host/tools/configtool/standalone/wxwin/templatesdlg.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -350,8 +350,13 @@ void ecTemplatesDialog::ShowDetails(bool } else { - GetSizer()->Remove(win1); - GetSizer()->Remove(win2); +#if wxCHECK_VERSION(2, 8, 0) + GetSizer()->Detach(win1); + GetSizer()->Detach(win2); +#else + GetSizer()->Remove(win1); + GetSizer()->Remove(win2); +#endif button->SetLabel("&Details >>"); } win1->Show(show); @@ -380,6 +385,7 @@ void ecTemplatesDialog::OnSelHardwareTem UpdateDetails (); // display new hardware packages in details box TransferDataToWindow (); // display new target description + CYG_UNUSED_PARAM(wxChoice *, cdlPackageCtrl); } void ecTemplatesDialog::OnSelPackageTemplates(wxCommandEvent& event) @@ -395,6 +401,7 @@ void ecTemplatesDialog::OnSelPackageTemp m_template = template_i->c_str(); UpdateVersionList (wxT("")); // repopulate template versions combo box and select most recent version + CYG_UNUSED_PARAM(wxComboBox *, cdlHardwareCtrl); } void ecTemplatesDialog::OnSelPackageVersion(wxCommandEvent& event) @@ -447,6 +454,8 @@ void ecTemplatesDialog::UpdateVersionLis // enable the version combo box only if there are multiple versions cdlVersionCtrl->Enable (versions.size () > 1); + CYG_UNUSED_PARAM(wxComboBox *, cdlHardwareCtrl); + CYG_UNUSED_PARAM(wxChoice *, cdlPackageCtrl); } void ecTemplatesDialog::UpdateDetails() diff --git a/host/tools/ecostest/ChangeLog b/host/tools/ecostest/ChangeLog --- a/host/tools/ecostest/ChangeLog +++ b/host/tools/ecostest/ChangeLog @@ -1,3 +1,15 @@ +2014-03-13 Andy Jackson + + * common/eCosTest.cpp: Silence "set but unused" variable warnings + with recent GCC. [ Bugzilla 1001949 ] + * common/eCosTest.cpp: Silence unused variable warnings with recent + GCC. [ Bugzilla 1001950 ] + +2012-04-23 John Dallaway + + * common/eCosTestPlatform.cpp: Include limits.h for PATH_MAX + definition. + 2009-09-25 John Dallaway * common/eCosTestPlatform.cpp (CeCosTestPlatform::LoadFromDir): Use diff --git a/host/tools/ecostest/common/eCosTest.cpp b/host/tools/ecostest/common/eCosTest.cpp --- a/host/tools/ecostest/common/eCosTest.cpp +++ b/host/tools/ecostest/common/eCosTest.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2009, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -869,6 +869,7 @@ void CeCosTest::ConnectSocketToSerialThr } TRACE(_T("ConnectSocketToSerial : done\n")); CeCosSocket::CloseSocket(m_nAuxListenSock); + CYG_UNUSED_PARAM(bool, rc); } static bool CALLBACK DerefBool(void *pParam) @@ -935,6 +936,7 @@ void CeCosTest::AcceptThreadFunc() SetExecutable(m_strExecutable); // to set stripped length and title RunLocal(); _tunlink(m_strExecutable); + CYG_UNUSED_PARAM(bool, bCanRun); } sendResult(); m_pSock->recvInteger(n); // receive an ack @@ -1248,7 +1250,7 @@ BOOL WINAPI HandlerRoutine( DWORD dwCtrlType // control signal type ) { - dwCtrlType; // eliminate compiler warning + CYG_UNUSED_PARAM(DWORD, dwCtrlType); return TRUE; } #endif diff --git a/host/tools/ecostest/common/eCosTestPlatform.cpp b/host/tools/ecostest/common/eCosTestPlatform.cpp --- a/host/tools/ecostest/common/eCosTestPlatform.cpp +++ b/host/tools/ecostest/common/eCosTestPlatform.cpp @@ -1,7 +1,7 @@ // ####ECOSHOSTGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of the eCos host tools. -// Copyright (C) 1998, 1999, 2000, 2003, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2003, 2009, 2012 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ // platform information implementation // //================================================================= +#include #include "eCosTestPlatform.h" #include "eCosTestUtils.h" #include "eCosTrace.h" diff --git a/packages/ChangeLog b/packages/ChangeLog --- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,3 +1,127 @@ +2013-09-11 Uwe Kindler + + * ecos.db: Add CAN driver entry for olcpl2294 target (Olimex + LPC-L2294-1M development board). + +2013-07-01 Mike Jones + + * ecos.db: Add TWR-K60F120M platform HAL package and target + records. + +2013-06-12 John Dallaway + + * ecos.db: Add STM32F4-Discovery platform HAL package and target + records. + +2013-05-2013 Uwe Kindler + + * ecos.db: Add CAN driver entry for olcpe2294 target (Olimex + LPC-E2294 development board). + +2013-04-26 Tomas Frydrych +2013-04-26 Mike Jones + + * ecos.db: Add Freescale I2C driver and I2C driver entries for + Kinetis targets. + +2013-04-14 Jerzy Dyrda + + * ecos.db: Add STM32 Erhernet driver and Ethernet driver entries + to STM3220G-eval and STM3240G-eval boards. + +2012-11-04 Ilija Kocho + + * ecos.db: Add Kinetis internal flash driver contributed by + Nicolas Aujoux. Added flash driver entries + to: TWR-K60N512, TWR-K40X256, TWR-K70F120M and Kwikstik. + +2012-02-22 Ilija Kocho + + * ecos.db: Add TWR-K70F120M bsp and target. + +2012-05-04 Ilija Stanislevik + + * ecos.db: Add Microchip ENC424J600 / ENC624J600 ethernet controller + driver package. + +2012-03-30 Jonathan Larmour + + * NEWS, ecos.db: Add STM3220G-eval and STM3240G-evalW board port and + targets. Contributed by eCosCentric Limited. + +2012-03-30 John Dallaway + + * NEWS, ecos.db: Add Freescale KwikStik HAL package and target. + Patch from Tomas Frydrych. + +2012-03-12 Christophe Coutand + + * ecos.db: Add Actel SmartFusion A2Fvvv variant HAL, board support + package for Actel A2F200 inluding Actel serial, ethernet, spi and + i2c drivers as well as spi flash driver. + +2012-02-22 Ilija Kocho + + * ecos.db: Add TWR-K60N512-FXM, Freescale DSPI driver, + Freescale EDMA library, Micron CellularRAM support. + +2011-10-30 Ilija Kocho + + * NEWS, ecos.db: Add Freescale Kinetis variant HAL, board support + packages for TWR-K60N512 and TWR-K40X256 including Freescale serial + and ethernet drivers. + +2011-05-25 Christophe Coutand + + * NEWS, ecos.db: Add SPI flash driver for SST25xx devices. + +2011-05-25 Christophe Coutand + + * NEWS, ecos.db: Add SPI flash driver for Atmel AT25DFxxx. + +2011-03-13 Ilija Kocho + + * NEWS, ecos.db: Add LPC17XX variant HAL, support for + NXP Cortex M3 LPC17XX CPUs. BSP for Olimex LPC-1766-STK + board including ethernet, serial and wallclock drivers. + +2011-03-13 Ilija Kocho + + * ecos.db: Ethernet, serial, and wallclock drivers for LPC17XX. + (CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX): Fixed alias/description; + (CYGPKG_DEVS_ETH_ARM_LPC2XXX): Ditto. + (CYGPKG_IO_SERIAL_ARM_LPC24XX): Ditto. + +2011-02-22 John Dallaway + + * ecos.db: Add hardware package CYGPKG_DEVS_ADC_ARM_AT91 to + applicable target records: at91sam7sek, at91sam7xek, sam7ex256, + eb55, phycore + +2011-02-18 John Dallaway + + * ecos.db: Remove non-hardware package CYGPKG_IO_ADC from the + ek-lm3s811 target definition and eliminate leading space in alias + string for correct sorting of targets by name. + +2011-02-09 Christophe Coutand + + * NEWS, ecos.db: Add Stellaris Cortex M3 variant HAL, support for + Stellaris Cortex M3 800 series CPUs. BSP for Stellaris EK-LM3S811 + board including ADC and I2C drivers. + +2010-11-12 John Dallaway + + * ecos.db: Add USB mass storage function driver package. + +2010-10-27 John Dallaway + + * ecos.db: Add STM32 USB slave driver package. + +2010-05-30 Christophe Coutand + + * ecos.db: Add AT91 ADC driver. + 2009-11-13 John Dallaway * ecosadmin.tcl: Keep target records containing removed packages @@ -2776,7 +2900,7 @@ 1998-07-23 Bart Veer + + * include/linux/kernel.h (jiffies): Use cyg_current_time(), not + a constant. JFFS2 at least uses it to occasionally vary behaviour. + Fixes bug #1001591. + 2005-09-21 Steven_cheng <05071@alphanetworks.com> * include/linux/types.h: Added unsigned types. diff --git a/packages/compat/linux/current/include/linux/kernel.h b/packages/compat/linux/current/include/linux/kernel.h --- a/packages/compat/linux/current/include/linux/kernel.h +++ b/packages/compat/linux/current/include/linux/kernel.h @@ -1,8 +1,10 @@ #ifndef __LINUX_KERNEL_H__ #define __LINUX_KERNEL_H__ -#include +#include // For diag_printf +#include // For cyg_timestamp +#include // For cyg_current_time -#define jiffies 100 +#define jiffies ((unsigned long)cyg_current_time()) #define ERR_PTR(err) ((void*)(err)) #define PTR_ERR(err) ((unsigned long)(err)) diff --git a/packages/compat/posix/current/ChangeLog b/packages/compat/posix/current/ChangeLog --- a/packages/compat/posix/current/ChangeLog +++ b/packages/compat/posix/current/ChangeLog @@ -1,3 +1,19 @@ +2013-02-03 John Dallaway + + * src/pthread.cxx (pthread_create): Include terminating NUL char + when initializing thread name from template. [ Bugzilla 1001743 ] + +2012-03-08 Sergei Gavrikov + + * src/mqueue.cxx: Fix compiler warnings about variables that are set + but not used. + * tests/signal2.c: Ditto. + +2010-02-08 Jay Foster + + * src/signal.cxx (pthread_kill): Corrected return value for + pthread_kill() to match POSIX standard. + 2009-03-25 John Dallaway * src/signal.cxx (pause): Revert change of 2006-07-18 pending @@ -1111,7 +1127,7 @@ 2000-03-24 Nick Garnett id; - for( int i = 0; name_template[i]; i++ ) name[i] = name_template[i]; + for( int i = 0; ( name[i] = name_template[i] ); i++ ); // dump the id, in hex into the name. for( int i = 15; i >= 8; i-- ) diff --git a/packages/compat/posix/current/src/signal.cxx b/packages/compat/posix/current/src/signal.cxx --- a/packages/compat/posix/current/src/signal.cxx +++ b/packages/compat/posix/current/src/signal.cxx @@ -554,14 +554,14 @@ externC int pthread_kill (pthread_t thre SIGNAL_ENTRY(); if( !SIGNAL_VALID(sig) ) - SIGNAL_RETURN(EINVAL); + SIGNAL_RETURN_VALUE(EINVAL); struct sigevent sev; pthread_info *thread = pthread_info_id(threadid); if( thread == NULL ) - SIGNAL_RETURN(ESRCH); + SIGNAL_RETURN_VALUE(ESRCH); sev.sigev_notify = SIGEV_SIGNAL; sev.sigev_signo = sig; @@ -571,7 +571,7 @@ externC int pthread_kill (pthread_t thre cyg_deliver_signals(); - SIGNAL_RETURN(0); + SIGNAL_RETURN_VALUE(0); } //========================================================================== diff --git a/packages/compat/posix/current/tests/signal2.c b/packages/compat/posix/current/tests/signal2.c --- a/packages/compat/posix/current/tests/signal2.c +++ b/packages/compat/posix/current/tests/signal2.c @@ -125,7 +125,7 @@ cause_illegal_access(void) ); #else - volatile int x; + volatile int x CYGBLD_ATTRIB_UNUSED; volatile CYG_ADDRESS p=(CYG_ADDRESS) &jbuf; do diff --git a/packages/compat/uitron/current/ChangeLog b/packages/compat/uitron/current/ChangeLog --- a/packages/compat/uitron/current/ChangeLog +++ b/packages/compat/uitron/current/ChangeLog @@ -1,3 +1,8 @@ +2013-05-09 John Dallaway + + * doc/uitron.sgml: Update documentation link to uITRON specification. + [ Bug 1001840 ] + 2009-03-02 Nick Garnett * tests/test2.c: @@ -865,7 +870,7 @@ Fri Jul 24 13:02:46 1998 Hugo Tyson - + @@ -52,11 +52,9 @@ porting application software to new proc System for Embedded Systems. The book can be purchased from the IEEE Press, and an ASCII version of the standard can be found online at -http://www.itron.gr.jp/. -The old address - -http://tron.um.u-tokyo.ac.jp/TRON/ITRON/ -still exists as a mirror site. + +http://www.t-engine.org/specifications. + <!-- <index></index> -->µITRON and <EMPHASIS>eCos</EMPHASIS> diff --git a/packages/devs/adc/arm/at91/current/ChangeLog b/packages/devs/adc/arm/at91/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/adc/arm/at91/current/ChangeLog @@ -0,0 +1,31 @@ +2010-05-18 ccoutand + + * AT91 ADC driver package created + * cdl/adc_at91.cdl + * src/adc_at91.c + * include/adc_at91.inl + * tests/at91_adc_test.c + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/adc/arm/at91/current/cdl/adc_at91.cdl b/packages/devs/adc/arm/at91/current/cdl/adc_at91.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/adc/arm/at91/current/cdl/adc_at91.cdl @@ -0,0 +1,355 @@ +# ==================================================================== +# +# adc_at91.cdl +# +# eCos AT91 ADC configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2008 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand@stmi.com +# Contributors: +# Date: 2010-02-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + + +cdl_package CYGPKG_DEVS_ADC_ARM_AT91 { + display "ADC hardware device driver for AT91 family of ARM controllers" + + parent CYGPKG_IO_ADC_DEVICES + active_if CYGPKG_IO_ADC_DEVICES + active_if CYGPKG_HAL_ARM_AT91 + description " + This package provides a generic ADC device driver for the on-chip + ADC peripherals in AT91 processors." + + include_dir cyg/io + compile -library=libextras.a adc_at91.c + + define_proc { + puts $::cdl_system_header "#define CYGDAT_DEVS_ADC_ARM_AT91_INL " + } + + # + # Primary ADC ( ADC0 ) + # + cdl_component CYGPKG_DEVS_ADC_ARM_AT91_ADC0 { + display "Atmel AT91 ADC port 0 driver" + flavor bool + default_value 1 + description " + This option includes the device driver for the on-chip ADC 0 of the + AT91 processors" + + + cdl_interface CYGINT_DEVS_ADC_ARM_AT91_ADC0_CHANNELS { + display "Number of ADC0 channels" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SELECT_TIMER { + display "Interrupt priority" + flavor data + legal_values {0 1 2} + default_value 1 + description " + This option selects the timer channel to be used for + generating the sampling interval. Timer channel 0 can + be assigned as Real Time Kernel clock so timer channel + 1 is set to be the default value." + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_PRESCAL { + display "ADC clock setting" + flavor data + legal_values 0 to 255 + default_value 128 + description " + This option sets the AT91 ADC PRESCAL value. + ADCClock = MCK / ((PRESCAL + 1) * 2)" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_STARTUP_TIME { + display "ADC start-up time" + flavor data + legal_values 0 to 255 + default_value 128 + description " + This option sets the AT91 ADC start-up time value. + ADC start-up time = (STARTUP+1) * 8 / ADCClock" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SHTIM { + display "ADC start up time" + flavor data + legal_values 0 to 15 + default_value 7 + description " + This option sets the AT91 ADC Sample and Hold Time. + Sample and Hold Time = SHTIM / ADCClock" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_INTPRIO { + display "Interrupt priority" + flavor data + legal_values 0 to 15 + default_value 15 + description " + This option selects the interrupt priority for the ADC + interrupts. Timer x is used for generating the sample + clock. So this option configures the interrupt priority + for timer x. There are 16 priority levels corresponding to + the values 0 through 15 decimal, of which 15 is the lowest + priority. The reset value of these registers defaults all + interrupts to the lowest priority, allowing a single write + to elevate the priority of an individual interrupt." + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC0_DEFAULT_RATE { + display "Default sample rate" + flavor data + legal_values 1 to 10000 + default_value 100 + description " + The driver will be initialized with the default sample rate. + If you raise the default sample rate you might need to increase + the buffer size for each channel." + } + + # Support up to 8 ADC channels + for { set ::channel 0 } { $::channel < 8 } { incr ::channel } { + + cdl_component CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL[set ::channel] { + display "Access ADC channel [set ::channel]" + flavor bool + default_value [set ::channel] == 0 + implements CYGINT_DEVS_ADC_ARM_AT91_ADC0_CHANNELS + description " + If the application needs to access the on-chip ADC + channel [set ::channel] via an eCos ADC driver then + this option should be enabled." + + cdl_option CYGDAT_DEVS_ADC_ARM_AT91_ADC0_CHANNEL[set ::channel]_NAME { + display "Device name" + flavor data + default_value [format {"\"/dev/adc0%d\""} $::channel] + description " + This option controls the name that an eCos application + should use to access this device via cyg_io_lookup(), + open(), or similar calls." + } + + cdl_option CYGDAT_DEVS_ADC_ARM_AT91_ADC0_CHANNEL[set ::channel]_BUFSIZE { + display "Size of data buffer" + flavor data + legal_values 0x01 to 0x2000000 + default_value 512 + description " + This option controls the number of samples the + buffer can store. The required RAM depends on the + sample size and on the number of samples. If the + sample size is <= 8 bit the the required RAM = + size of data buffer. If the sample size is 9 or 10 + bit then required RAM = size of data buffer * 2." + } + } + } + } + + # + # ADC1 + # + cdl_component CYGPKG_DEVS_ADC_ARM_AT91_ADC1 { + display "Atmel AT91 ADC port 1 driver" + flavor bool + default_value 0 + + requires { CYGHWR_HAL_ARM_AT91 == "M55800A" } + + description " + This option includes the device driver for the on-chip ADC 1 of the + AT91 processors" + + + cdl_interface CYGINT_DEVS_ADC_ARM_AT91_ADC1_CHANNELS { + display "Number of ADC1 channels" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SELECT_TIMER { + display "Interrupt priority" + flavor data + legal_values {0 1 2} + default_value 2 + description " + This option selects the timer channel to be used for + generating the sampling interval. Timer channel 0 can + be assigned as Real Time Kernel clock so timer channel + 1 is set to be the default value." + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_PRESCAL { + display "ADC clock setting" + flavor data + legal_values 0 to 255 + default_value 128 + description " + This option sets the AT91 ADC PRESCAL value. + ADCClock = MCK / ((PRESCAL + 1) * 2)" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_STARTUP_TIME { + display "ADC start-up time" + flavor data + legal_values 0 to 255 + default_value 128 + description " + This option sets the AT91 ADC start-up time value. + ADC start-up time = (STARTUP+1) * 8 / ADCClock" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SHTIM { + display "ADC start up time" + flavor data + legal_values 0 to 15 + default_value 7 + description " + This option sets the AT91 ADC Sample and Hold Time. + Sample and Hold Time = SHTIM / ADCClock" + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_INTPRIO { + display "Interrupt priority" + flavor data + legal_values 0 to 15 + default_value 15 + description " + This option selects the interrupt priority for the ADC + interrupts. Timer x is used for generating the sample + clock. So this option configures the interrupt priority + for timer x. There are 16 priority levels corresponding to + the values 0 through 15 decimal, of which 15 is the lowest + priority. The reset value of these registers defaults all + interrupts to the lowest priority, allowing a single write + to elevate the priority of an individual interrupt." + } + + cdl_option CYGNUM_DEVS_ADC_ARM_AT91_ADC1_DEFAULT_RATE { + display "Default sample rate" + flavor data + legal_values 1 to 10000 + default_value 100 + description " + The driver will be initialized with the default sample rate. + If you raise the default sample rate you might need to increase + the buffer size for each channel." + } + + # Support up to 8 ADC channels + for { set ::channel 0 } { $::channel < 8 } { incr ::channel } { + + cdl_component CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL[set ::channel] { + display "Access ADC channel [set ::channel]" + flavor bool + default_value [set ::channel] == 0 + implements CYGINT_DEVS_ADC_ARM_AT91_ADC1_CHANNELS + description " + If the application needs to access the on-chip ADC + channel [set ::channel] via an eCos ADC driver then + this option should be enabled." + + cdl_option CYGDAT_DEVS_ADC_ARM_AT91_ADC1_CHANNEL[set ::channel]_NAME { + display "Device name" + flavor data + default_value [format {"\"/dev/adc1%d\""} $::channel] + description " + This option controls the name that an eCos application + should use to access this device via cyg_io_lookup(), + open(), or similar calls." + } + + cdl_option CYGDAT_DEVS_ADC_ARM_AT91_ADC1_CHANNEL[set ::channel]_BUFSIZE { + display "Size of data buffer" + flavor data + legal_values 0x01 to 0x2000000 + default_value 512 + description " + This option controls the number of samples the + buffer can store. The required RAM depends on the + sample size and on the number of samples. If the + sample size is <= 8 bit the the required RAM = + size of data buffer. If the sample size is 9 or 10 + bit then required RAM = size of data buffer * 2." + } + } + } + } + + cdl_option CYGPKG_DEVS_ADC_ARM_AT91_DEBUG_LEVEL { + display "Driver debug output level" + flavor data + legal_values {0 1} + default_value 0 + description " + This option specifies the level of debug data output by + the AT91 ADC device driver. A value of 0 signifies + no debug data output; 1 signifies normal debug data + output. If an overrun occurred then this can only be + detected by debug output messages." + } + + cdl_component CYGSEM_DEVS_ADC_ARM_AT91_SAMPLE_SIZE_LIMIT { + display "Sample size limit" + flavor bool + calculated 1 + requires { ( CYGNUM_IO_ADC_SAMPLE_SIZE == 8 ) + || ( CYGNUM_IO_ADC_SAMPLE_SIZE == 10 ) } + description " + This component forces a limit (or rounds) the sample + size for AT91 ADC channels which in the most are 10-bit." + } + + cdl_option CYGPKG_DEVS_ADC_ARM_AT91_TESTS { + display "Tests for AT91 ADC driver" + flavor data + no_define + calculated { "tests/at91_adc_test" } + description " + This option specifies the set of tests for the AT91 + ADC device driver." + } + +} diff --git a/packages/devs/adc/arm/at91/current/include/adc_at91.inl b/packages/devs/adc/arm/at91/current/include/adc_at91.inl new file mode 100644 --- /dev/null +++ b/packages/devs/adc/arm/at91/current/include/adc_at91.inl @@ -0,0 +1,200 @@ +//========================================================================== +// +// adc_at91.inl +// +// ADC driver for AT91 on chip ADC +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Atmel AT91 on-chip ADC device driver, ccoutand +// +// Contributors: +// Date: 2010-05-27 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef CYGONCE_DEVS_ADC_ARM_AT91_INL +#define CYGONCE_DEVS_ADC_ARM_AT91_INL + +// Some AT91 HAL are defining the timer 0 vector as TC0 and other as TIMER0 +#ifndef CYGNUM_HAL_INTERRUPT_TC0 +#define CYGNUM_HAL_INTERRUPT_TC0 CYGNUM_HAL_INTERRUPT_TIMER0 +#endif + +// Declare ADC0 +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0 + +static at91_adc_info at91_adc0_info = +{ + .adc_base = AT91_ADC, + .timer_base = AT91_TC, + .tc_base = AT91_TC + (AT91_TC_TC_SIZE * CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SELECT_TIMER), + .timer_vector = CYGNUM_HAL_INTERRUPT_TC0 + CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SELECT_TIMER, + .timer_intprio = CYGNUM_DEVS_ADC_ARM_AT91_ADC0_INTPRIO, + .timer_id = CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SELECT_TIMER, + .int_handle = 0, + .adc_prescal = CYGNUM_DEVS_ADC_ARM_AT91_ADC0_PRESCAL, + .adc_startup_time = CYGNUM_DEVS_ADC_ARM_AT91_ADC0_STARTUP_TIME, + .adc_shtim = CYGNUM_DEVS_ADC_ARM_AT91_ADC0_SHTIM, +#if CYGNUM_IO_ADC_SAMPLE_SIZE > 8 + .resolution = AT91_ADC_MR_LOWREC_10BITS, +#else + .resolution = AT91_ADC_MR_LOWRES_8BITS, +#endif + .chan_mask = 0 +}; + +CYG_ADC_DEVICE( at91_adc0_device, + &at91_adc_funs, + &at91_adc0_info, + CYGNUM_DEVS_ADC_ARM_AT91_ADC0_DEFAULT_RATE); + +#define AT91_ADC0_CHANNEL( __chan ) \ +CYG_ADC_CHANNEL( at91_adc0_channel##__chan, \ + __chan, \ + CYGDAT_DEVS_ADC_ARM_AT91_ADC0_CHANNEL##__chan##_BUFSIZE, \ + &at91_adc0_device ); \ + \ +DEVTAB_ENTRY( at91_adc0_channel##__chan##_device, \ + CYGDAT_DEVS_ADC_ARM_AT91_ADC0_CHANNEL##__chan##_NAME, \ + 0, \ + &cyg_io_adc_devio, \ + at91_adc_init, \ + at91_adc_lookup, \ + &at91_adc0_channel##__chan ); + +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL0 +AT91_ADC0_CHANNEL(0); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL1 +AT91_ADC0_CHANNEL(1); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL2 +AT91_ADC0_CHANNEL(2); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL3 +AT91_ADC0_CHANNEL(3); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL4 +AT91_ADC0_CHANNEL(4); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL5 +AT91_ADC0_CHANNEL(5); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL6 +AT91_ADC0_CHANNEL(6); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC0_CHANNEL7 +AT91_ADC0_CHANNEL(7); +#endif + +#endif // CYGPKG_DEVS_ADC_ARM_AT91_ADC0 + + + +// Declare ADC1 +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1 + +static at91_adc_info at91_adc1_info = +{ + .adc_base = AT91_ADC1, + .timer_base = AT91_TC, + .tc_base = AT91_TC + (AT91_TC_TC_SIZE * CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SELECT_TIMER), + .timer_vector = CYGNUM_HAL_INTERRUPT_TC0 + CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SELECT_TIMER, + .timer_intprio = CYGNUM_DEVS_ADC_ARM_AT91_ADC1_INTPRIO, + .timer_id = CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SELECT_TIMER, + .int_handle = 0, + .adc_prescal = CYGNUM_DEVS_ADC_ARM_AT91_ADC1_PRESCAL, + .adc_startup_time = CYGNUM_DEVS_ADC_ARM_AT91_ADC1_STARTUP_TIME, + .adc_shtim = CYGNUM_DEVS_ADC_ARM_AT91_ADC1_SHTIM, +#if CYGNUM_IO_ADC_SAMPLE_SIZE > 8 + .resolution = AT91_ADC_MR_LOWREC_10BITS, +#else + .resolution = AT91_ADC_MR_LOWRES_8BITS, +#endif + .chan_mask = 0 +}; +CYG_ADC_DEVICE( at91_adc1_device, + &at91_adc_funs, + &at91_adc1_info, + CYGNUM_DEVS_ADC_ARM_AT91_ADC1_DEFAULT_RATE); + +#define AT91_ADC1_CHANNEL( __chan ) \ +CYG_ADC_CHANNEL( at91_adc1_channel##__chan, \ + __chan, \ + CYGDAT_DEVS_ADC_ARM_AT91_ADC1_CHANNEL##__chan##_BUFSIZE, \ + &at91_adc1_device ); \ + \ +DEVTAB_ENTRY( at91_adc1_channel##__chan##_device, \ + CYGDAT_DEVS_ADC_ARM_AT91_ADC1_CHANNEL##__chan##_NAME, \ + 0, \ + &cyg_io_adc_devio, \ + at91_adc_init, \ + at91_adc_lookup, \ + &at91_adc1_channel##__chan ); + +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL0 +AT91_ADC1_CHANNEL(0); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL1 +AT91_ADC1_CHANNEL(1); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL2 +AT91_ADC1_CHANNEL(2); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL3 +AT91_ADC1_CHANNEL(3); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL4 +AT91_ADC1_CHANNEL(4); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL5 +AT91_ADC1_CHANNEL(5); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL6 +AT91_ADC1_CHANNEL(6); +#endif +#ifdef CYGPKG_DEVS_ADC_ARM_AT91_ADC1_CHANNEL7 +AT91_ADC1_CHANNEL(7); +#endif + +#endif // CYGPKG_DEVS_ADC_ARM_AT91_ADC1 + +#endif // CYGONCE_DEVS_ADC_ARM_AT91_INL diff --git a/packages/devs/adc/arm/at91/current/src/adc_at91.c b/packages/devs/adc/arm/at91/current/src/adc_at91.c new file mode 100644 --- /dev/null +++ b/packages/devs/adc/arm/at91/current/src/adc_at91.c @@ -0,0 +1,457 @@ +//========================================================================== +// +// adc_at91.c +// +// ADC driver for AT91 on chip ADC +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Uwe Kindler +// Updated for Atmel AT91 device, ccoutand +// Contributors: +// Date: 2010-02-15 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +//========================================================================== +// INCLUDES +//========================================================================== +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if CYGPKG_DEVS_ADC_ARM_AT91_DEBUG_LEVEL > 0 + #define at91_adc_printf(args...) diag_printf(args) +#else + #define at91_adc_printf(args...) +#endif + +#define AT91_ADC_CHER_CHx(_ch_) (0x1 << _ch_) +#define AT91_ADC_CHER_CDRx(_ch_) (_ch_ << 2) + +//========================================================================== +// DATA TYPES +//========================================================================== +typedef struct at91_adc_info +{ + cyg_uint32 adc_base; // base address of ADC peripheral + cyg_uint8 adc_prescal; // ADC prescal value + cyg_uint8 adc_startup_time; // ADC Startup Time value + cyg_uint8 adc_shtim; // ADC SHTIM value + cyg_uint8 timer_id; // select timer + cyg_uint32 timer_base; // base address of Timer peripheral + cyg_uint32 tc_base; // base address of Timer channel + cyg_vector_t timer_vector; // interrupt vector number + int timer_intprio; // interrupt priority of ADC interrupt + cyg_uint32 timer_cnt; // Timer value + cyg_uint8 timer_clk; // Timer clock setting + cyg_uint32 resolution; + cyg_handle_t int_handle; // For initializing the interrupt + cyg_interrupt int_data; + struct cyg_adc_channel *channel[AT91_MAX_ADC_CHAN]; // stores references to channel objects + cyg_uint8 chan_mask; // mask that indicates channels used + // by ADC driver +} at91_adc_info; + + +//========================================================================== +// DECLARATIONS +//========================================================================== +static bool at91_adc_init(struct cyg_devtab_entry *tab); +static Cyg_ErrNo at91_adc_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name); +static void at91_adc_enable( cyg_adc_channel *chan ); +static void at91_adc_disable( cyg_adc_channel *chan ); +static void at91_adc_set_rate( cyg_adc_channel *chan, cyg_uint32 rate ); +static cyg_uint32 at91_adc_isr(cyg_vector_t vector, cyg_addrword_t data); +static void at91_adc_dsr(cyg_vector_t vector, + cyg_ucount32 count, + cyg_addrword_t data); + +// ------------------------------------------------------------------------- +// Driver functions: +CYG_ADC_FUNCTIONS( at91_adc_funs, + at91_adc_enable, + at91_adc_disable, + at91_adc_set_rate ); + + +#include CYGDAT_DEVS_ADC_ARM_AT91_INL // Instantiate ADCs + +//========================================================================== +// This function is called from the device IO infrastructure to initialize +// the device. It should perform any work needed to start up the device, +// short of actually starting the generation of samples. This function will +// be called for each channel, so if there is initialization that only needs +// to be done once, such as creating and interrupt object, then care should +// be taken to do this. This function should also call cyg_adc_device_init() +// to initialize the generic parts of the driver. +//========================================================================== +static bool at91_adc_init(struct cyg_devtab_entry *tab) +{ + cyg_adc_channel *chan = (cyg_adc_channel *)tab->priv; + cyg_adc_device *device = chan->device; + at91_adc_info *info = device->dev_priv; + cyg_uint32 regval; + + if (!info->int_handle) + { + cyg_drv_interrupt_create(info->timer_vector, + info->timer_intprio, + (cyg_addrword_t)device, + &at91_adc_isr, + &at91_adc_dsr, + &(info->int_handle), + &(info->int_data)); + cyg_drv_interrupt_attach(info->int_handle); + cyg_drv_interrupt_mask(info->timer_vector); + + // Reset ADC + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CR), AT91_ADC_CR_SWRST); + + // Disable counter interrupts + HAL_WRITE_UINT32(info->tc_base+AT91_TC_CCR, AT91_TC_CCR_CLKDIS); + HAL_WRITE_UINT32(info->tc_base+AT91_TC_IDR, 0xffffffff); + + // Clear status bit + HAL_READ_UINT32(info->tc_base + AT91_TC_SR, regval); + + // Enable peripheral clocks for TC + HAL_WRITE_UINT32(AT91_PMC+AT91_PMC_PCER, \ + ((AT91_PMC_PCER_TC0) << info->timer_id)); + + // + // Disable all interrupts, all channels + // + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CHDR), \ + AT91_ADC_CHER_CH0 |\ + AT91_ADC_CHER_CH1 |\ + AT91_ADC_CHER_CH2 |\ + AT91_ADC_CHER_CH3 |\ + AT91_ADC_CHER_CH4 |\ + AT91_ADC_CHER_CH5 |\ + AT91_ADC_CHER_CH6 |\ + AT91_ADC_CHER_CH7); + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_IDR), \ + AT91_ADC_CHER_CH0 |\ + AT91_ADC_CHER_CH1 |\ + AT91_ADC_CHER_CH2 |\ + AT91_ADC_CHER_CH3 |\ + AT91_ADC_CHER_CH4 |\ + AT91_ADC_CHER_CH5 |\ + AT91_ADC_CHER_CH6 |\ + AT91_ADC_CHER_CH7); + + // + // setup the default sample rate + // + at91_adc_set_rate(chan, chan->device->config.rate); + + // setup ADC mode + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_MR), \ + ( ( info->adc_prescal << AT91_ADC_MR_PRESCAL_SHIFT ) & \ + AT91_ADC_MR_PRESCAL_MASK ) | \ + ( ( info->adc_startup_time << AT91_ADC_MR_STARTUP_SHIFT ) & \ + AT91_ADC_MR_STARTUP_MASK ) | \ + ( ( info->adc_shtim << AT91_ADC_MR_SHTIM_SHIFT ) & \ + AT91_ADC_MR_SHTIM_MASK ) | \ + AT91_ADC_MR_TRGSEL_TIOA0 | \ + info->resolution); + + + } // if (!info->int_handle) + + cyg_adc_device_init(device); // initialize generic parts of driver + + return true; +} + + +//========================================================================== +// This function is called when a client looks up or opens a channel. It +// should call cyg_adc_channel_init() to initialize the generic part of +// the channel. It should also perform any operations needed to start the +// channel generating samples. +//========================================================================== +static Cyg_ErrNo at91_adc_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name) +{ + cyg_adc_channel *chan = (cyg_adc_channel *)(*tab)->priv; + at91_adc_info *info = chan->device->dev_priv; + + info->channel[chan->channel] = chan; + cyg_adc_channel_init(chan); // initialize generic parts of channel + + // + // The generic ADC manual says: When a channel is first looked up or + // opened, then it is automatically enabled and samples start to + // accumulate - so we start the channel now + // + chan->enabled = true; + at91_adc_enable(chan); + + return ENOERR; +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_ENABLE config operation. +// It should take any steps needed to start the channel generating samples +//========================================================================== +static void at91_adc_enable(cyg_adc_channel *chan) +{ + at91_adc_info *info = chan->device->dev_priv; + + // Enable the channel + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CHER), \ + AT91_ADC_CHER_CHx(chan->channel)); + + // + // Unmask interrupt as soon as 1 channel is enable + // + if (!info->chan_mask) + { + cyg_drv_interrupt_unmask(info->timer_vector); + + // Enable timer interrupt + HAL_WRITE_UINT32(info->tc_base+AT91_TC_IER, AT91_TC_IER_CPC); + + // Enable the clock + HAL_WRITE_UINT32(info->tc_base+AT91_TC_CCR, AT91_TC_CCR_TRIG | AT91_TC_CCR_CLKEN); + + // Start timer + HAL_WRITE_UINT32(info->tc_base+AT91_TC_CCR, AT91_TC_CCR_TRIG); + + // Start ADC sampling + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CR), AT91_ADC_CR_START); + + } + + info->chan_mask |= AT91_ADC_CHER_CHx(chan->channel); + +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_DISABLE config operation. +// It should take any steps needed to stop the channel generating samples. +//========================================================================== +static void at91_adc_disable(cyg_adc_channel *chan) +{ + at91_adc_info *info = chan->device->dev_priv; + cyg_uint32 sr; + + info->chan_mask &= ~ AT91_ADC_CHER_CHx(chan->channel); + + // Disable the channel + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CHDR), \ + AT91_ADC_CHER_CHx(chan->channel)); + + // + // If no channel is enabled the we disable interrupts now + // + if (!info->chan_mask) + { + cyg_drv_interrupt_mask(info->timer_vector); + + // Clear interrupt + HAL_READ_UINT32(info->tc_base+AT91_TC_SR, sr); + + // Disable timer interrupt + HAL_WRITE_UINT32(info->tc_base+AT91_TC_IDR, AT91_TC_IER_CPC); + + // Disable the clock + HAL_WRITE_UINT32(info->tc_base+AT91_TC_CCR, AT91_TC_CCR_CLKDIS); + + } +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_RATE config operation. +// It should take any steps needed to change the sample rate of the channel, +// or of the entire device. +// We use a timer channel to generate the interrupts for sampling the +// analog channels +//========================================================================== +static void at91_adc_set_rate( cyg_adc_channel *chan, cyg_uint32 rate) +{ + cyg_adc_device *device = chan->device; + at91_adc_info *info = (at91_adc_info *)device->dev_priv; + cyg_uint8 timer_clk = AT91_TC_CMR_CLKS_MCK2; + cyg_uint32 tmr_period = CYGNUM_HAL_ARM_AT91_CLOCK_SPEED / ( rate << 1); + + if( tmr_period > 0xffff ) + { + tmr_period = CYGNUM_HAL_ARM_AT91_CLOCK_SPEED / ( rate << 5); + timer_clk = AT91_TC_CMR_CLKS_MCK32; + } + + if( tmr_period > 0xffff ) + { + tmr_period = CYGNUM_HAL_ARM_AT91_CLOCK_SPEED / ( rate << 7); + timer_clk = AT91_TC_CMR_CLKS_MCK128; + } + + if( tmr_period > 0xffff ) + { + tmr_period = CYGNUM_HAL_ARM_AT91_CLOCK_SPEED / ( rate << 10); + timer_clk = AT91_TC_CMR_CLKS_MCK1024; + } + + if( tmr_period > 0xffff ) + { + tmr_period = 0xffff; + timer_clk = AT91_TC_CMR_CLKS_MCK1024; + at91_adc_printf("AT91 ADC timer, rate too high!"); + } + + device->config.rate = rate; + info->timer_clk = timer_clk; + info->timer_cnt = tmr_period; + + // Set timer values + HAL_WRITE_UINT32(info->tc_base+AT91_TC_CMR, AT91_TC_CMR_CPCTRG | info->timer_clk); + HAL_WRITE_UINT32(info->tc_base+AT91_TC_RC, info->timer_cnt); + + at91_adc_printf("AT91 ADC Timer settings %d, %d", info->timer_clk, info->timer_cnt); + + return; +} + + +//========================================================================== +// This function is the ISR attached to the ADC device's interrupt vector. +// It is responsible for reading samples from the channels and passing them +// on to the generic layer. It needs to check each channel for data, and call +// cyg_adc_receive_sample() for each new sample available, and then ready the +// device for the next interrupt. +//========================================================================== +static cyg_uint32 at91_adc_isr(cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_adc_device *device = (cyg_adc_device *) data; + at91_adc_info *info = (at91_adc_info *)device->dev_priv; + cyg_uint32 regval, adc_status; + cyg_uint32 res = 0; + cyg_adc_sample_t adcdata; + cyg_uint32 sr; + + cyg_uint8 active_channels = info->chan_mask; + cyg_uint8 channel_no = 0; + + // Clear timer interrupt + HAL_READ_UINT32(info->tc_base+AT91_TC_SR, sr); + + // Check on channel conversion done + HAL_READ_UINT32(info->adc_base + AT91_ADC_SR, adc_status); + + while (active_channels) + { + if (active_channels & 0x01) + { + // If ADC conversion done, save sample + if(adc_status & AT91_ADC_CHER_CHx(channel_no)) + { + HAL_READ_UINT32((info->adc_base + AT91_ADC_CDR0 + AT91_ADC_CHER_CDRx(channel_no)), regval); + adcdata = regval & 0x3FF; + res |= CYG_ISR_HANDLED + | cyg_adc_receive_sample(info->channel[channel_no], + adcdata); + } + } // if (active_channels & 0x01) + active_channels >>= 1; + channel_no++; + } // while (active_channels) + + // Restart sampling + HAL_WRITE_UINT32((info->adc_base + AT91_ADC_CR), AT91_ADC_CR_START); + + cyg_drv_interrupt_acknowledge(info->timer_vector); + + return res; +} + + +//========================================================================== +// This function is the DSR attached to the ADC device's interrupt vector. +// It is called by the kernel if the ISR return value contains the +// CYG_ISR_HANDLED bit. It needs to call cyg_adc_wakeup() for each channel +// that has its wakeup field set. +//========================================================================== +static void at91_adc_dsr(cyg_vector_t vector, + cyg_ucount32 count, + cyg_addrword_t data) +{ + cyg_adc_device *device = (cyg_adc_device *) data; + at91_adc_info *info = device->dev_priv; + cyg_uint8 active_channels = info->chan_mask; + cyg_uint8 chan_no = 0; + + while (active_channels) + { + if (active_channels & 0x01) + { + if(info->channel[chan_no]->wakeup) + { + cyg_adc_wakeup(info->channel[chan_no]); + } + } + chan_no++; + active_channels >>= 1; + } +} + + +//--------------------------------------------------------------------------- +// eof adc_at91.c diff --git a/packages/devs/adc/arm/at91/current/tests/at91_adc_test.c b/packages/devs/adc/arm/at91/current/tests/at91_adc_test.c new file mode 100644 --- /dev/null +++ b/packages/devs/adc/arm/at91/current/tests/at91_adc_test.c @@ -0,0 +1,290 @@ +//========================================================================== +// +// at91_adc_test.c +// +// ADC driver for AT91 on chip ADC +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Uwe Kindler +// Updated for Atmel AT91 device, ccoutand +// Contributors: +// Date: 2010-02-15 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include // test macros +#include // assertion macros +#include +#include +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL + +// Package requirements +#if defined(CYGPKG_IO_ADC) && defined(CYGPKG_KERNEL) + +#include +#include +#include +#include + +// Package option requirements +#if defined(CYGFUN_KERNEL_API_C) + +#include + +#if CYGINT_DEVS_ADC_ARM_AT91_ADC0_CHANNELS > 0 + +#define MAX_ADC_CHANNEL_TO_TEST 4 + +//=========================================================================== +// DATA TYPES +//=========================================================================== +typedef struct st_thread_data +{ + cyg_thread obj; + long stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; + cyg_handle_t hdl; +} thread_data_t; + + +//=========================================================================== +// LOCAL DATA +//=========================================================================== +cyg_thread_entry_t adc_thread; +thread_data_t adc_thread_data; + + +//=========================================================================== +// ADC THREAD +//=========================================================================== +void adc_thread(cyg_addrword_t data) +{ + int res; + cyg_io_handle_t handle[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + cyg_uint32 sample_cnt[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + cyg_uint32 cfg_data; + cyg_uint32 len; + cyg_uint32 start_time; + cyg_uint32 end_time; + int i; + cyg_uint8 seconds = 0; + float final_seconds; + cyg_uint32 samples_expected; + + + diag_printf("This test reads samples from all enabled ADC channels.\n" + "Each second the number of already acquired samples\n" + "will be printed. After 10 seconds all ADC channels\n" + "will be stopped and each ADC buffer will be read until\n" + "it is empty. If the number of acquired samples is much\n" + "smaller than the number of expected samples, then you\n" + "should lower the sample rate.\n\n"); + + // Get a handle for ADC device 0 channel 0 - 3 (lookup also trigger a channel enable) + res = cyg_io_lookup( "/dev/adc00", &handle[0]); + res = cyg_io_lookup( "/dev/adc01", &handle[1]); + res = cyg_io_lookup( "/dev/adc02", &handle[2]); + res = cyg_io_lookup( "/dev/adc03", &handle[3]); + + // + // switch all channels to non blocking + // + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) + { + if (handle[i]) + { + cfg_data = 0; + len = sizeof(cfg_data); + res = cyg_io_set_config(handle[i], + CYG_IO_SET_CONFIG_READ_BLOCKING, + &cfg_data, + &len); + if (ENOERR != res) + { + CYG_TEST_FAIL_FINISH("Error switching ADC channel to non blocking"); + } + sample_cnt[i] = 0; + } + } + + start_time = cyg_current_time(); + do + { + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) + { + if (handle[i]) + { + cyg_adc_sample_t sample; + + // read a sample from the channel + do + { + cyg_uint32 len = sizeof(sample); + res = cyg_io_read( handle[i], &sample, &len ); + } + while (-EAGAIN == res); + if (ENOERR == res) + { + sample_cnt[i]++; + } + } // if (handle[i]) + } + // + // print number of acquired samples - if one second is expired. + // we expect that the number of acquired samples is nearly the + // sample rate + // + end_time = cyg_current_time(); + if ((end_time - start_time) >= 100) + { + start_time = end_time; + diag_printf("%d\t %d\t %d\t %d\n", + sample_cnt[0], + sample_cnt[1], + sample_cnt[2], + sample_cnt[3]); + seconds++; + } // if ((end_time - start_time) >= 100) + } while (seconds < 10); + + // + // Now stop all channels + // + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) + { + if (handle[i]) + { + res = cyg_io_set_config(handle[i], + CYG_IO_SET_CONFIG_ADC_DISABLE, + 0, + 0); + if (ENOERR != res) + { + CYG_TEST_FAIL_FINISH("Error disabling ADC channel"); + } + } // if (handle[i]) + } + end_time = cyg_current_time(); + end_time = seconds * 1000 + (end_time - start_time) * 10; + final_seconds = end_time / 1000.0; + + // + // Now read all remaining samples from buffer + // + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) + { + if (handle[i]) + { + do + { + cyg_adc_sample_t sample; + cyg_uint32 len = sizeof(sample); + res = cyg_io_read( handle[i], &sample, &len ); + if (ENOERR == res) + { + sample_cnt[i]++; + } + } while (ENOERR == res); + } // if (handle[i]) + } + + diag_printf("\n\n----------------------------------------\n"); + samples_expected = final_seconds * CYGNUM_DEVS_ADC_ARM_AT91_ADC0_DEFAULT_RATE; + diag_printf("Samples expected after %d milliseconds: %d\n", + end_time, samples_expected); + diag_printf("Samples read (per channel):\n"); + diag_printf("%d\t %d\t %d\t %d\n", + sample_cnt[0], + sample_cnt[1], + sample_cnt[2], + sample_cnt[3]); + + CYG_TEST_PASS_FINISH("ADC test OK"); +} + + +void +cyg_start(void) +{ + CYG_TEST_INIT(); + + // + // create the main ADC test thread + // + cyg_thread_create(4, adc_thread, + (cyg_addrword_t) 0, + "at91_adc_thread", + (void *) adc_thread_data.stack, + 1024 * sizeof(long), + &adc_thread_data.hdl, + &adc_thread_data.obj); + + cyg_thread_resume(adc_thread_data.hdl); + + cyg_scheduler_start(); +} +#else // CYGINT_DEVS_ADC_ARM_AT91_CHANNELS > 0 +#define N_A_MSG "Needs at least one enabled ADC channel" +#endif + +#else // CYGFUN_KERNEL_API_C +#define N_A_MSG "Needs kernel C API" +#endif + +#else // CYGPKG_IO_ADC && CYGPKG_KERNEL +#define N_A_MSG "Needs Kernel and ADC support" +#endif + +#ifdef N_A_MSG +void +cyg_start( void ) +{ + CYG_TEST_INIT(); + CYG_TEST_NA(N_A_MSG); +} +#endif // N_A_MSG + + +// EOF can_tx.c + +//--------------------------------------------------------------------------- +// eof at91_adc_test.c diff --git a/packages/devs/adc/cortexm/lm3s/current/ChangeLog b/packages/devs/adc/cortexm/lm3s/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/adc/cortexm/lm3s/current/ChangeLog @@ -0,0 +1,31 @@ +2011-01-18 Christophe Coutand + + * cdl/adc_lm3s.cdl: + * src/adc_lm3s.c: + * include/adc_lm3s.inl: + * tests/lm3s_adc_test.c: + New package -- Stellaris Cortex M3 ADC driver package. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/adc/cortexm/lm3s/current/cdl/adc_lm3s.cdl b/packages/devs/adc/cortexm/lm3s/current/cdl/adc_lm3s.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/adc/cortexm/lm3s/current/cdl/adc_lm3s.cdl @@ -0,0 +1,217 @@ +# ==================================================================== +# +# adc_lm3s.cdl +# +# eCos Stellaris Cortex M3 ADC configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-01-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ADC_CORTEXM_LM3S { + display "ADC driver for Stellaris Cortex M3 microcontroller family" + + parent CYGPKG_IO_ADC_DEVICES + active_if CYGPKG_IO_ADC_DEVICES + active_if CYGPKG_HAL_CORTEXM_LM3S + include_dir cyg/io + description " + This package provides a generic ADC device driver for the on-chip + ADC peripherals in Stellaris microcontroller." + + compile -library=libextras.a adc_lm3s.c + + define_proc { + puts $::cdl_system_header "#define CYGDAT_DEVS_ADC_CORTEXM_LM3S_INL " + } + + # --------------------------------------------------------------------- + # Primary ADC ( ADC0 ) port + + cdl_component CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0 { + display "ADC port 0" + flavor bool + default_value 1 + description " + This option includes the device driver for the on-chip ADC0 + of the Stellaris device." + + cdl_interface CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS { + display "Number of ADC0 channels" + } + + cdl_option CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_SELECT_TIMER { + display "ADC sampling timer" + flavor data + legal_values { 0 1 2 } + default_value 0 + description " + This option selects the timer channel generating the + ADC sampling interval." + } + + cdl_option CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_INTPRIO { + display "ADC Interrupt priority" + flavor data + default_value 0x60 + description " + This option selects the interrupt priority for the ADC + interrupts." + } + + cdl_option CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_DEFAULT_RATE { + display "Default sample rate" + flavor data + legal_values 1 to 10000 + default_value 100 + description " + The driver will be initialized with the default sample + rate. If you raise the default sample rate you might + need to increase the buffer size for each channel." + } + + cdl_option CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING { + display "Sample averaging" + flavor data + legal_values { 0 2 4 8 16 32 64 } + default_value 0 + description " + Select the ADC sample averaging." + } + + cdl_component CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_TEMP_SENSOR { + display "Internal Temperature Sensor" + flavor bool + default_value 0 + description " + Enable one ADC channel for internal temperature sensor + reading." + + cdl_option CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_TEMP_SENSOR_CHANNEL { + display "Select sensor channel" + flavor data + legal_values { 0 to (CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS-1) } + default_value 1 + description " + This option select ADC channel reserved for + temperature sensor reading." + } + } + + # ----------------------------------------------------------------- + # Support up to 8 ADC channels + + for { set ::channel 0 } { $::channel < 8 } { incr ::channel } { + cdl_component CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL[set ::channel] { + display "Access ADC channel [set ::channel]" + flavor bool + default_value [set ::channel] == 0 + implements CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS + description " + If the application needs to access the on-chip ADC0 + channel [set ::channel] via an eCos ADC driver then + this option should be enabled." + + cdl_option CYGDAT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL[set ::channel]_NAME { + display "Device name" + flavor data + default_value [format {"\"/dev/adc0%d\""} $::channel] + description " + This option controls the name that an eCos + application should use to access this device + via cyg_io_lookup(), open(), or similar calls." + } + + cdl_option CYGDAT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL[set ::channel]_BUFSIZE { + display "Size of data buffer" + flavor data + legal_values 0x01 to 0x16 + default_value 0x4 + description " + This option controls the number of samples the + buffer can store. The required RAM depends on the + sample size and on the number of samples. If the + sample size is <= 8 bit the the required RAM = + size of data buffer. If the sample size is 9 or 10 + bit then required RAM = size of data buffer * 2." + } + } + } + } + + cdl_option CYGPKG_DEVS_ADC_CORTEXM_LM3S_DEBUG_LEVEL { + display "Driver debug output level" + flavor data + legal_values { 0 1 } + default_value 0 + description " + This option specifies the level of debug data output by + the Stellaris ADC device driver. A value of 0 signifies no + debug data output; 1 signifies normal debug data output. If + an overrun occurred then this can only be detected by debug + output messages." + } + + cdl_component CYGSEM_DEVS_ADC_CORTEXM_LM3S_SAMPLE_SIZE_LIMIT { + display "Sample size limit" + flavor bool + calculated 1 + requires { ( CYGNUM_IO_ADC_SAMPLE_SIZE == 10 ) } + description " + This component forces a limit (or rounds) the sample size + for Stellaris ADC channels which in the most are 10-bit." + } + + cdl_option CYGPKG_DEVS_ADC_CORTEXM_LM3S_TESTS { + display "Tests for Stellaris 800 Series ADC driver" + flavor data + no_define + active_if CYGPKG_KERNEL + active_if CYGPKG_IO_ADC + calculated { "tests/lm3s_adc_test" } + description " + This option specifies the set of tests for the Stellaris + ADC device driver." + } +} + +# EOF adc_lm3s.cdl diff --git a/packages/devs/adc/cortexm/lm3s/current/include/adc_lm3s.inl b/packages/devs/adc/cortexm/lm3s/current/include/adc_lm3s.inl new file mode 100644 --- /dev/null +++ b/packages/devs/adc/cortexm/lm3s/current/include/adc_lm3s.inl @@ -0,0 +1,140 @@ +//========================================================================== +// +// adc_lm3s.inl +// +// ADC driver for Stellaris Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// +// Contributors: +// Date: 2011-01-08 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef CYGONCE_DEVS_ADC_CORTEXM_LM3S_INL +#define CYGONCE_DEVS_ADC_CORTEXM_LM3S_INL + +// Declare ADC0 +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0 + +static lm3s_adc_info lm3s_adc0_info = +{ + .timer_base = CYGHWR_HAL_LM3S_GPTIM0 + ( 0x1000 * CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_SELECT_TIMER ), + .adc_intprio = CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_INTPRIO, + .adc_vector = CYGNUM_HAL_INTERRUPT_ADC0_S0, + .adc_base = CYGHWR_HAL_LM3S_ADC0, + .adc_periph = CYGHWR_HAL_LM3S_P_ADC0, + .timer_periph = (CYGHWR_HAL_LM3S_SC_RCGC1_TIMER0 << CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_SELECT_TIMER), +#if CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 0 + .adc_avg = 0, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 2 + .adc_avg = 1, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 4 + .adc_avg = 2, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 8 + .adc_avg = 3, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 16 + .adc_avg = 4, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 32 + .adc_avg = 5, +#elif CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_AVERAGING == 64 + .adc_avg = 6, +#endif +#if defined(CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_TEMP_SENSOR) + .sensor_channel = CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_TEMP_SENSOR_CHANNEL, +#else + .sensor_channel = 0xff, +#endif + .max_channel = CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS, + .int_handle = 0, + .chan_mask = 0 +}; + +CYG_ADC_DEVICE( \ + lm3s_adc0_device, \ + &lm3s_adc_funs, \ + &lm3s_adc0_info, \ + CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_DEFAULT_RATE); + +#define LM3S_ADC0_CHANNEL( __chan ) \ +CYG_ADC_CHANNEL( \ + lm3s_adc0_channel##__chan, \ + __chan, \ + CYGDAT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL##__chan##_BUFSIZE, \ + &lm3s_adc0_device ); \ +DEVTAB_ENTRY( \ + lm3s_adc0_channel##__chan##_device, \ + CYGDAT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL##__chan##_NAME, \ + 0, \ + &cyg_io_adc_devio, \ + lm3s_adc_init, \ + lm3s_adc_lookup, \ + &lm3s_adc0_channel##__chan ); + +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL0 +LM3S_ADC0_CHANNEL(0); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL1 +LM3S_ADC0_CHANNEL(1); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL2 +LM3S_ADC0_CHANNEL(2); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL3 +LM3S_ADC0_CHANNEL(3); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL4 +LM3S_ADC0_CHANNEL(4); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL5 +LM3S_ADC0_CHANNEL(5); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL6 +LM3S_ADC0_CHANNEL(6); +#endif +#ifdef CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNEL7 +LM3S_ADC0_CHANNEL(7); +#endif + +#endif // CYGPKG_DEVS_ADC_CORTEXM_LM3S_ADC0 + +#endif // CYGONCE_DEVS_ADC_CORTEXM_LM3S_INL diff --git a/packages/devs/adc/cortexm/lm3s/current/src/adc_lm3s.c b/packages/devs/adc/cortexm/lm3s/current/src/adc_lm3s.c new file mode 100644 --- /dev/null +++ b/packages/devs/adc/cortexm/lm3s/current/src/adc_lm3s.c @@ -0,0 +1,489 @@ +//========================================================================== +// +// adc_lm3s.c +// +// ADC driver for Stellaris Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Uwe Kindler +// Updated for Stellaris device, ccoutand +// Contributors: +// Date: 2011-01-08 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +//========================================================================== +// INCLUDES +//========================================================================== +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if CYGPKG_DEVS_ADC_CORTEXM_LM3S_DEBUG_LEVEL > 0 +# define lm3s_adc_diag(args...) diag_printf(args) +#else +# define lm3s_adc_diag(args...) +#endif + +#define CYGHWR_HAL_LM3S_ADC_MAX_CHAN 8 + +//========================================================================== +// DATA TYPES +//========================================================================== +typedef struct lm3s_adc_info { + cyg_uint32 adc_base; // ADC base address + cyg_uint32 adc_periph; // ADC peripheral mask + cyg_vector_t adc_vector; // Interrupt vector number + cyg_priority_t adc_intprio; // Interrupt priority of ADC interrupt + cyg_uint32 timer_base; // Base address of Timer peripheral + cyg_uint32 timer_interval; // Timer value + cyg_uint32 timer_periph; // Timer peripheral mask + cyg_uint8 sensor_channel; // Temperature sensor channel if any + cyg_uint8 max_channel; // Number of ADC channel + cyg_handle_t int_handle; // For initializing the interrupt + cyg_interrupt int_data; + cyg_uint8 adc_avg; // Sample averaging + // Stores references to channel objects + struct cyg_adc_channel *channel[CYGHWR_HAL_LM3S_ADC_MAX_CHAN]; + cyg_uint8 chan_mask; // Mask that indicates channels used + // by ADC driver +} lm3s_adc_info; + + +//========================================================================== +// DECLARATIONS +//========================================================================== +static bool lm3s_adc_init(struct cyg_devtab_entry *tab); +static Cyg_ErrNo lm3s_adc_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name); +static void lm3s_adc_enable(cyg_adc_channel * chan); +static void lm3s_adc_disable(cyg_adc_channel * chan); +static void lm3s_adc_set_rate(cyg_adc_channel * chan, cyg_uint32 rate); +static cyg_uint32 lm3s_adc_isr(cyg_vector_t vector, cyg_addrword_t data); +static void lm3s_adc_dsr(cyg_vector_t vector, + cyg_ucount32 count, cyg_addrword_t data); + +static void lm3s_adc_disable_sequencer0(cyg_uint32); +static void lm3s_adc_enable_sequencer0(cyg_uint32); +static void lm3s_adc_flush(cyg_uint32); +static void lm3s_adc_update_sequencer0(cyg_adc_channel *); + +// ------------------------------------------------------------------------- +// Driver functions: +CYG_ADC_FUNCTIONS( lm3s_adc_funs, + lm3s_adc_enable, + lm3s_adc_disable, + lm3s_adc_set_rate ); + + +#include CYGDAT_DEVS_ADC_CORTEXM_LM3S_INL // Instantiate ADCs + + +//========================================================================== +// +// The eCos Sellaris ADC drivers uses a single sequencer ( sequencer 0 ). +// The same sequencer is used to sample all channels. +// Sampling of the different channel is triggered from a timer interrupt. +// The ADC driver flexibility does not allow to trigger sampling from +// external GPIO or analog comparator event. It should be noted that enabling +// / disabling an ADC channel disturbs the sampling of other channels since it +// requires to stop sampling to re-organize the sequencer. Also the FIFO +// is flushed to ensure correct sample order out of the sequencer FIFO. +// +//========================================================================== +static bool +lm3s_adc_init(struct cyg_devtab_entry *tab) +{ + cyg_adc_channel *chan = (cyg_adc_channel *) tab->priv; + cyg_adc_device *device = chan->device; + lm3s_adc_info *info = device->dev_priv; + + lm3s_adc_diag("ADC: Init\n"); + + if (!info->int_handle) { + lm3s_adc_diag("ADC: IRQ vect %d, pri %d\n", + info->adc_vector, info->adc_intprio); + + cyg_drv_interrupt_create(info->adc_vector, + info->adc_intprio, + (cyg_addrword_t)device, + &lm3s_adc_isr, + &lm3s_adc_dsr, + &(info->int_handle), &(info->int_data)); + cyg_drv_interrupt_attach(info->int_handle); + cyg_drv_interrupt_mask(info->adc_vector); + + // Enable ADC and sampling timer peripheral + CYGHWR_HAL_LM3S_PERIPH_SET(info->adc_periph, 1); + CYGHWR_HAL_LM3S_PERIPH_SET((CYGHWR_HAL_LM3S_PERIPH_GC1 | info-> + timer_periph), 1); + + // Disable timer + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CTL, 0); + + // Disable / reset sequencer + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_ACTSS, 0); + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_MUX0, 0); + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_CTL0, 0); + + // Trigger sampling from timer + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_EMUX, + CYGHWR_HAL_LM3S_ADC_EMUX_EM_TIMER(0)); + + // Set Averaging + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SAC, + info->adc_avg); + + // Setup timer + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CFG, + CYGHWR_HAL_LM3S_GPTIM_CFG_32BIT); + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_TAMR, + CYGHWR_HAL_LM3S_GPTIM_TAMR_PERIODIC); + + // Setup the default sample rate + lm3s_adc_set_rate(chan, chan->device->config.rate); + + } + + // Initialize generic parts of driver + cyg_adc_device_init(device); + + return true; +} + + +//========================================================================== +// This function is called when a client looks up or opens a channel. It +// should call cyg_adc_channel_init() to initialize the generic part of +// the channel. It should also perform any operations needed to start the +// channel generating samples. +//========================================================================== +static Cyg_ErrNo +lm3s_adc_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, const char *name) +{ + cyg_adc_channel *chan = (cyg_adc_channel *) (*tab)->priv; + lm3s_adc_info *info = chan->device->dev_priv; + + lm3s_adc_diag("ADC: Opening channel %d\n", chan->channel); + + if (chan->channel > info->max_channel) + return ENOENT; + + info->channel[chan->channel] = chan; + + // Initialize generic parts of channel + cyg_adc_channel_init(chan); + + // The generic ADC manual says: When a channel is first looked up or + // opened, then it is automatically enabled and samples start to + // accumulate - so we start the channel now + chan->enabled = true; + lm3s_adc_enable(chan); + + return ENOERR; +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_ENABLE config operation. +// It should take any steps needed to start the channel generating samples +//========================================================================== +static void +lm3s_adc_enable(cyg_adc_channel * chan) +{ + lm3s_adc_info *info = chan->device->dev_priv; + cyg_uint32 ctl = + CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN | CYGHWR_HAL_LM3S_GPTIM_CTL_TAOTE; + cyg_uint32 start = !info->chan_mask; + + // Disable ADC sequencer 0 and timer + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CTL, 0); + lm3s_adc_disable_sequencer0(info->adc_base); + + // Update sequencer + info->chan_mask |= (1 << chan->channel); + lm3s_adc_update_sequencer0(chan); + + // Unmask interrupt as soon as 1 channel is enable + if (start) { + cyg_drv_interrupt_unmask(info->adc_vector); + } + // Enable sequencer and timer + lm3s_adc_enable_sequencer0(info->adc_base); + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CTL, ctl); +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_DISABLE config operation. +// It should take any steps needed to stop the channel generating samples. +//========================================================================== +static void +lm3s_adc_disable(cyg_adc_channel * chan) +{ + lm3s_adc_info *info = chan->device->dev_priv; + cyg_uint32 ctl = + CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN | CYGHWR_HAL_LM3S_GPTIM_CTL_TAOTE; + + // Disable ADC sequencer 0 and timer + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CTL, 0); + lm3s_adc_disable_sequencer0(info->adc_base); + + // Update sequencer + info->chan_mask &= ~(1 << chan->channel); + lm3s_adc_update_sequencer0(chan); + + // Stop scanning when no channel is active + if (!info->chan_mask) { + cyg_drv_interrupt_mask(info->adc_vector); + return; + } + // Enable sequencer and timer + lm3s_adc_enable_sequencer0(info->adc_base); + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_CTL, ctl); +} + + +//========================================================================== +// This function is called from the generic ADC package to enable the +// channel in response to a CYG_IO_SET_CONFIG_ADC_RATE config operation. +// It should take any steps needed to change the sample rate of the channel, +// or of the entire device. +// We use a timer channel to generate the interrupts for sampling the +// analog channels +//========================================================================== +static void +lm3s_adc_set_rate(cyg_adc_channel * chan, cyg_uint32 rate) +{ + cyg_adc_device *device = chan->device; + lm3s_adc_info *info = (lm3s_adc_info *) device->dev_priv; + + info->timer_interval = hal_lm3s_timer_clock() / rate; + + lm3s_adc_diag("ADC: Timer interval %d\n", info->timer_interval); + + HAL_WRITE_UINT32(info->timer_base + CYGHWR_HAL_LM3S_GPTIM_TAILR, + info->timer_interval); +} + + +//========================================================================== +// This function is the ISR attached to the ADC device's interrupt vector. +// It is responsible for reading samples from the channels and passing them +// on to the generic layer. It needs to check each channel for data, and call +// cyg_adc_receive_sample() for each new sample available, and then ready the +// device for the next interrupt. +//========================================================================== +static cyg_uint32 +lm3s_adc_isr(cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_adc_device *device = (cyg_adc_device *) data; + lm3s_adc_info *info = (lm3s_adc_info *) device->dev_priv; + cyg_uint32 regval; + cyg_uint32 res = 0; + cyg_adc_sample_t adcdata; + cyg_uint32 sr; + + cyg_uint8 active_channels = info->chan_mask; + cyg_uint8 channel_no = 0; + + while (active_channels) { + HAL_READ_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_FIFO0_SR, sr); + // Check FIFO Full + if ((sr & CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_FULL)) { + lm3s_adc_diag("ADC: FIFO Full\n"); + } + // Check FIFO Empty + if ((sr & CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_EMPTY)) { + lm3s_adc_diag("ADC: FIFO Empty\n"); + } + if (active_channels & 0x01) { + // If ADC conversion done, save sample + if (!(sr & CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_EMPTY)) { + HAL_READ_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_FIFO0, + regval); + adcdata = regval & 0x3FF; + res |= CYG_ISR_HANDLED + | cyg_adc_receive_sample(info->channel[channel_no], + adcdata); + } + } + active_channels >>= 1; + channel_no++; + } + + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_ISCR, + CYGHWR_HAL_LM3S_ADC_ISCR_IN(0)); + + cyg_drv_interrupt_acknowledge(info->adc_vector); + + return res; +} + + +//========================================================================== +// This function is the DSR attached to the ADC device's interrupt vector. +// It is called by the kernel if the ISR return value contains the +// CYG_ISR_HANDLED bit. It needs to call cyg_adc_wakeup() for each channel +// that has its wakeup field set. +//========================================================================== +static void +lm3s_adc_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + cyg_adc_device *device = (cyg_adc_device *) data; + lm3s_adc_info *info = device->dev_priv; + cyg_uint8 active_channels = info->chan_mask; + cyg_uint8 chan_no = 0; + + while (active_channels) { + if (active_channels & 0x01) { + if (info->channel[chan_no]->wakeup) { + cyg_adc_wakeup(info->channel[chan_no]); + } + } + chan_no++; + active_channels >>= 1; + } +} + + +static void +lm3s_adc_disable_sequencer0(cyg_uint32 base) +{ + cyg_uint32 reg; + + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_ADC_IMR, 0); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_ADC_ISCR, + CYGHWR_HAL_LM3S_ADC_ISCR_IN(0)); + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_ADC_ACTSS, reg); + reg &= ~(CYGHWR_HAL_LM3S_ADC_ACTSS_ASEN(0)); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_ADC_ACTSS, reg); +} + + +static void +lm3s_adc_enable_sequencer0(cyg_uint32 base) +{ + cyg_uint32 reg; + + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_ADC_ACTSS, reg); + reg |= (CYGHWR_HAL_LM3S_ADC_ACTSS_ASEN(0)); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_ADC_ACTSS, reg); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_ADC_IMR, + CYGHWR_HAL_LM3S_ADC_IMR_MASK(0)); +} + + +static void +lm3s_adc_flush(cyg_uint32 base) +{ + volatile cyg_uint32 d; + volatile cyg_uint32 i; + + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_ADC_SS_FIFO0_SR, i); + while (!(i & CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_EMPTY)) { + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_ADC_SS_FIFO0, d); + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_ADC_SS_FIFO0_SR, i); + } +} + + +static void +lm3s_adc_update_sequencer0(cyg_adc_channel * chan) +{ + lm3s_adc_info *info = chan->device->dev_priv; + cyg_uint8 i; + cyg_uint8 cnt = 0; + cyg_uint32 mux = 0; + cyg_uint32 ctl = 0; + + lm3s_adc_diag("ADC: Update sequencer for channel %d\n", chan->channel); + + // Update sequencer + for (i = 0; i < info->max_channel; i++) { + if (!(info->chan_mask & (1 << i))) + continue; + + // Clear and update MUX register + mux &= ~(CYGHWR_HAL_LM3S_ADC_SS_MUX0_M(cnt)); + mux |= CYGHWR_HAL_LM3S_ADC_SS_MUX0_V(i, cnt); + + // Temperature sensor channel + if (i == info->sensor_channel) { + ctl |= CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS(cnt); + lm3s_adc_diag("ADC: Channel %d mapped to temperature sensor\n", + i); + } + + cnt++; + } + + lm3s_adc_diag("ADC: MUX0 Register: 0x%x\n", mux); + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_MUX0, mux); + + if (info->chan_mask) { + ctl |= CYGHWR_HAL_LM3S_ADC_SS_CTL0_END((cnt - 1)); + ctl |= CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE((cnt - 1)); + } + + lm3s_adc_diag("ADC: CTL0 Register: 0x%x\n", ctl); + HAL_WRITE_UINT32(info->adc_base + CYGHWR_HAL_LM3S_ADC_SS_CTL0, ctl); + + lm3s_adc_flush(info->adc_base); +} + + +//--------------------------------------------------------------------------- +// EOF adc_lm3s.c diff --git a/packages/devs/adc/cortexm/lm3s/current/tests/lm3s_adc_test.c b/packages/devs/adc/cortexm/lm3s/current/tests/lm3s_adc_test.c new file mode 100644 --- /dev/null +++ b/packages/devs/adc/cortexm/lm3s/current/tests/lm3s_adc_test.c @@ -0,0 +1,256 @@ +//========================================================================== +// +// lm3s_adc_test.c +// +// ADC driver for Stellaris Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Uwe Kindler +// Updated for Stellaris Cortex microcontroller, ccoutand +// Contributors: +// Date: 2011-01-11 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include // test macros +#include // assertion macros +#include +#include +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL + +#include +#include +#include +#include + +// Package option requirements +#if defined(CYGFUN_KERNEL_API_C) + +# include + +# if CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS > 0 + +# define MAX_ADC_CHANNEL_TO_TEST 4 + +//=========================================================================== +// DATA TYPES +//=========================================================================== +typedef struct st_thread_data { + cyg_thread obj; + int stack[(CYGNUM_HAL_STACK_SIZE_MINIMUM / sizeof(int))]; + cyg_handle_t hdl; +} thread_data_t; + + +//=========================================================================== +// LOCAL DATA +//=========================================================================== +cyg_thread_entry_t adc_thread; +thread_data_t adc_thread_data; + + +//=========================================================================== +// ADC THREAD +//=========================================================================== +void +adc_thread(cyg_addrword_t data) +{ + int res; + cyg_io_handle_t handle[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + cyg_uint32 sample_cnt[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + cyg_uint32 cfg_data; + cyg_uint32 len; + cyg_uint32 start_time; + cyg_uint32 end_time; + int i; + cyg_uint8 seconds = 0; + float final_seconds; + cyg_uint32 samples_expected; + + + diag_printf("This test reads samples from all enabled ADC channels.\n" + "Each second the number of already acquired samples\n" + "will be printed. After 10 seconds all ADC channels\n" + "will be stopped and each ADC buffer will be read until\n" + "it is empty. If the number of acquired samples is much\n" + "smaller than the number of expected samples, then you\n" + "should lower the sample rate.\n\n"); + + // Get a handle for ADC device 0 channel 0 - 3 (lookup also trigger a + // channel enable) + res = cyg_io_lookup("/dev/adc00", &handle[0]); + res = cyg_io_lookup("/dev/adc01", &handle[1]); + res = cyg_io_lookup("/dev/adc02", &handle[2]); + res = cyg_io_lookup("/dev/adc03", &handle[3]); + + // Switch all channels to non blocking + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) { + if (handle[i]) { + cfg_data = 0; + len = sizeof(cfg_data); + res = cyg_io_set_config(handle[i], + CYG_IO_SET_CONFIG_READ_BLOCKING, + &cfg_data, &len); + if (ENOERR != res) { + CYG_TEST_FAIL_FINISH + ("Error switching ADC channel to non blocking"); + } + sample_cnt[i] = 0; + } + } + + start_time = cyg_current_time(); + + do { + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) { + if (handle[i]) { + cyg_adc_sample_t sample; + + // read a sample from the channel + do { + cyg_uint32 len = sizeof(sample); + res = cyg_io_read(handle[i], &sample, &len); + } + while (-EAGAIN == res); + if (ENOERR == res) { + sample_cnt[i]++; + } + } + } + + end_time = cyg_current_time(); + + // Print number of acquired samples - if one second is expired. + // we expect that the number of acquired samples is nearly the + // sample rate. + if ((end_time - start_time) >= 100) { + start_time = end_time; + diag_printf("%d\t %d\t %d\t %d\n", + sample_cnt[0], + sample_cnt[1], sample_cnt[2], sample_cnt[3]); + seconds++; + } + } while (seconds < 10); + + // Now stop all channels + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) { + if (handle[i]) { + res = cyg_io_set_config(handle[i], + CYG_IO_SET_CONFIG_ADC_DISABLE, 0, 0); + if (ENOERR != res) { + CYG_TEST_FAIL_FINISH("Error disabling ADC channel"); + } + } + } + + end_time = cyg_current_time(); + end_time = seconds * 1000 + (end_time - start_time) * 10; + final_seconds = end_time / 1000.0; + + // Now read all remaining samples from buffer + for (i = 0; i < MAX_ADC_CHANNEL_TO_TEST; ++i) { + if (handle[i]) { + do { + cyg_adc_sample_t sample; + cyg_uint32 len = sizeof(sample); + res = cyg_io_read(handle[i], &sample, &len); + if (ENOERR == res) { + sample_cnt[i]++; + } + } while (ENOERR == res); + } + } + + diag_printf("\n\n----------------------------------------\n"); + samples_expected = + final_seconds * CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_DEFAULT_RATE; + diag_printf("Samples expected after %d milliseconds: %d\n", end_time, + samples_expected); + diag_printf("Samples read (per channel):\n"); + diag_printf("%d\t %d\t %d\t %d\n", + sample_cnt[0], sample_cnt[1], sample_cnt[2], sample_cnt[3]); + + CYG_TEST_PASS_FINISH("ADC test OK"); +} + + +void +cyg_start(void) +{ + CYG_TEST_INIT(); + + // Create the main ADC test thread + cyg_thread_create(4, + adc_thread, + (cyg_addrword_t)0, + "lm3s_adc_thread", + (void *)adc_thread_data.stack, + CYGNUM_HAL_STACK_SIZE_MINIMUM, + &adc_thread_data.hdl, + &adc_thread_data.obj + ); + + cyg_thread_resume(adc_thread_data.hdl); + + cyg_scheduler_start(); +} +# else// CYGINT_DEVS_ADC_CORTEXM_LM3S_ADC0_CHANNELS > 0 +# define N_A_MSG "Needs at least one enabled ADC channel" +# endif + +#else // CYGFUN_KERNEL_API_C +# define N_A_MSG "Needs kernel C API" +#endif + +#ifdef N_A_MSG +void +cyg_start(void) +{ + CYG_TEST_INIT(); + CYG_TEST_NA(N_A_MSG); +} +#endif // N_A_MSG + + +//--------------------------------------------------------------------------- +// EOF lm3s_adc_test.c diff --git a/packages/devs/adc/cortexm/stm32/current/ChangeLog b/packages/devs/adc/cortexm/stm32/current/ChangeLog --- a/packages/devs/adc/cortexm/stm32/current/ChangeLog +++ b/packages/devs/adc/cortexm/stm32/current/ChangeLog @@ -1,3 +1,20 @@ +2012-04-13 Christophe Coutand + + * src/adc_stm32.c: + * src/adc1.inl: + * src/adc3.inl: + Peripheral clocks are enable / disable using new + CYGHWR_HAL_STM32_CLOCK_DISABLE / CYGHWR_HAL_STM32_CLOCK_ENABLE + macro supplied from the variant HAL. In addition, make sure timer + clock is enable. + +2011-05-02 Christophe Coutand + + * cdl/adc_stm32.cdl: + * src/adc_stm32.c: + Make sure DMA clock is enabled. Fix ADC clock divider not set in + stm32_adc_init_clock. + 2009-03-05 Simon Kallweit * src/adc_stm32.c: @@ -15,7 +32,7 @@ 2009-02-24 Simon Kallweit -#define adc_diag( __fmt, ... ) diag_printf("ADC: %30s[%4d]: " __fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__ ); +#ifdef CYGPKG_DEVS_ADC_CORTEXM_STM32_TRACE +# include +# define adc_diag( __fmt, ... ) diag_printf("ADC: %30s[%4d]: " __fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__ ); #else -#define adc_diag( __fmt, ... ) +# define adc_diag( __fmt, ... ) #endif @@ -85,6 +85,8 @@ typedef struct stm32_adc_setup { const cyg_uint32 *pins; // ADC associated GPIO pins cyg_uint8 extsel; // ADC EXTSEL value (timer event) cyg_uint32 sample_time; // ADC sampling time in us + cyg_uint32 adc_clkena; // ADC clock enable + cyg_uint32 tim_clkena; // Timer clock enable } stm32_adc_setup; //----------------------------------------------------------------------------- @@ -361,7 +363,7 @@ stm32_dma_isr(cyg_vector_t vector, cyg_a cyg_adc_channel **chan = info->chan; cyg_uint32 isr; cyg_uint32 res = CYG_ISR_HANDLED; - + HAL_READ_UINT32(info->setup->dma_base + CYGHWR_HAL_STM32_DMA_ISR, isr); if (!(isr & CYGHWR_HAL_STM32_DMA_ISR_MASK(info->setup->dma_channel))) return 0; @@ -432,7 +434,7 @@ stm32_adc_init_clock(void) adc_clock = hal_stm32_pclk2 / 8; #endif - HAL_READ_UINT32(rcc + CYGHWR_HAL_STM32_RCC_CFGR, cfgr); + HAL_WRITE_UINT32(rcc + CYGHWR_HAL_STM32_RCC_CFGR, cfgr); } //----------------------------------------------------------------------------- @@ -447,10 +449,13 @@ stm32_adc_init_device(cyg_adc_device *de cyg_uint32 cycles; cyg_uint32 smpr; int i; - + static const cyg_uint32 cycles_table[] = { 15, 75, 135, 285, 415, 555, 715, 2395 }; - + + CYGHWR_HAL_STM32_CLOCK_ENABLE( info->setup->adc_clkena ); + CYGHWR_HAL_STM32_CLOCK_ENABLE( info->setup->tim_clkena ); + // Make sure ADC is powered on cr = CYGHWR_HAL_STM32_ADC_CR2_ADON; HAL_WRITE_UINT32(info->setup->adc_base + CYGHWR_HAL_STM32_ADC_CR2, cr); @@ -470,7 +475,7 @@ stm32_adc_init_device(cyg_adc_device *de } while (cr & CYGHWR_HAL_STM32_ADC_CR2_CAL); // Power off ADC - cr &= CYGHWR_HAL_STM32_ADC_CR2_ADON; + cr &= ~CYGHWR_HAL_STM32_ADC_CR2_ADON; HAL_WRITE_UINT32(info->setup->adc_base + CYGHWR_HAL_STM32_ADC_CR2, cr); // Enable external triggering and DMA @@ -491,9 +496,15 @@ stm32_adc_init_device(cyg_adc_device *de // Enable generation of TRGO event cr = CYGHWR_HAL_STM32_TIM_CR2_MMS_UPDATE; HAL_WRITE_UINT32(info->setup->tim_base + CYGHWR_HAL_STM32_TIM_CR2, cr); - + // Setup DMA channel + // Ensure that the DMA clocks are enabled. + if (info->setup->dma_base == CYGHWR_HAL_STM32_DMA1) + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_DMA1_CLOCK ); + else + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_DMA2_CLOCK ); + HAL_WRITE_UINT32(info->setup->dma_base + CYGHWR_HAL_STM32_DMA_CPAR(info->setup->dma_channel), info->setup->adc_base + CYGHWR_HAL_STM32_ADC_DR); @@ -557,7 +568,7 @@ stm32_adc_update_sequence(cyg_adc_device cyg_uint32 sqr2 = 0; cyg_uint32 sqr3 = 0; - adc_diag("Updateing regular group\n"); + adc_diag("Updating regular group\n"); // Disable ADC HAL_READ_UINT32(info->setup->adc_base + CYGHWR_HAL_STM32_ADC_CR2, cr); diff --git a/packages/devs/can/arm/at91/at91sam7/current/ChangeLog b/packages/devs/can/arm/at91/at91sam7/current/ChangeLog --- a/packages/devs/can/arm/at91/at91sam7/current/ChangeLog +++ b/packages/devs/can/arm/at91/at91sam7/current/ChangeLog @@ -1,3 +1,9 @@ +2012-01-25 Bernard Fouché + + * src/can_at91sam7.c: CYGNUM_CAN_EVENT_OVERRUN_RX_HW instead of + CYGNUM_CAN_EVENT_OVERRUN_RX. CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER & + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT return -EINVAL. [ Bugzilla 1001453 ] + 2007-03-23 Uwe Kindler * AT91SAM7 CAN driver package created diff --git a/packages/devs/can/arm/at91/at91sam7/current/src/can_at91sam7.c b/packages/devs/can/arm/at91/at91sam7/current/src/can_at91sam7.c --- a/packages/devs/can/arm/at91/at91sam7/current/src/can_at91sam7.c +++ b/packages/devs/can/arm/at91/at91sam7/current/src/can_at91sam7.c @@ -947,6 +947,8 @@ static Cyg_ErrNo at91sam7_can_set_config case CYGNUM_CAN_MODE_START : at91sam7_start_module(chan); break; case CYGNUM_CAN_MODE_STANDBY : at91sam7_enter_lowpower_mode(chan); break; case CYGNUM_CAN_MODE_CONFIG : at91sam7_enter_lowpower_mode(chan); break; + case CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER: return -EINVAL; + case CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT: return -EINVAL; } } break; // case CYG_IO_SET_CONFIG_CAN_MODE : @@ -1132,7 +1134,7 @@ static bool at91sam7_can_getevent(can_ch pevent->flags |= CYGNUM_CAN_EVENT_RX; if (msr & MSR_MSG_IGNORED) { - pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX; + pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX_HW; } // diff --git a/packages/devs/can/arm/lpc2xxx/current/ChangeLog b/packages/devs/can/arm/lpc2xxx/current/ChangeLog --- a/packages/devs/can/arm/lpc2xxx/current/ChangeLog +++ b/packages/devs/can/arm/lpc2xxx/current/ChangeLog @@ -1,3 +1,55 @@ +2013-09-17 Uwe Kindler + + * cdl/can_lpc2xxx.cdl: Add CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND + to enable conditional Bus-Off reset mode workaround. [Bug 1001897] + * src/can_lpc2xxx.c: Add function lpc2xxx_reset_error_counters to + reset TX and RX error counters to certain values. Function + lpc2xxx_start_module now clears both error counters. Add some + LPC2XXX_DBG_PRINT statements to lpc2xxx_can_getevent function. Add + function lpc2xxx_print_status to ease printing status register + content. If a bus error condition occures (ICR_BUS_ERR) the function + lpc2xxx_can_getevent now clears the error counters to prevent error + ISR from blocking application and to support recovery from bus off + condition if option CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND is + enabled. + +2013-09-11 Uwe Kindler + + * src/can_accfilt_lpc2xxx.c, src/can_lpc2xxx.c: Fix a compile issue of + the lpc2xxx driver that only occurs if support for extended 29-bit CAN + identifiers is enabled and support for message filtering is disabled. + [ Bugzilla 1001901 ] + +2013-08-29 Uwe Kindler + + * includes/can_lpc2xxx_baudrates.h: Added baudrate table for CAN clock + of 14.745600 MHz. [ Bugzilla 1001900 ] + +2013-06-24 Uwe Kindler + + * src/can_lpc2xxx.c: Add support for new config key + CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS. + +2013-05-06 Uwe Kindler + + * src/can_lpc2xxx.c: Changed return code for message filter + configuration to -ENOSPC if no filters are available to match + documentation change. + +2012-01-25 Bernard Fouché + + * Changes made to support CAN IO package update: + * cdl/can_lpc2xxx.cdl: CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS + replaced by CYG_IO_SET_CONFIG_CAN_RANGE_FILTER. + * include/can_lpc2xxx.h: Commented out unused and not implemented + things. + * src/can_lpc2xxx.c: CYGNUM_CAN_EVENT_OVERRUN_RX_HW instead of + CYGNUM_CAN_EVENT_OVERRUN_RX. CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS + replaced by CYG_IO_SET_CONFIG_CAN_RANGE_FILTER. can_lpc2xxx.h not + required any more. CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER & + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT return -EINVAL. + [ Bugzilla 1001453 ] + 2008-07-21 Uwe Kindler * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make diff --git a/packages/devs/can/arm/lpc2xxx/current/cdl/can_lpc2xxx.cdl b/packages/devs/can/arm/lpc2xxx/current/cdl/can_lpc2xxx.cdl --- a/packages/devs/can/arm/lpc2xxx/current/cdl/can_lpc2xxx.cdl +++ b/packages/devs/can/arm/lpc2xxx/current/cdl/can_lpc2xxx.cdl @@ -84,8 +84,8 @@ cdl_package CYGPKG_DEVS_CAN_LPC2XXX { the configuration key CYG_IO_SET_CONFIG_CAN_MSGBUF is not supported by this driver." - cdl_option CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS { - display "Extended acceptance filtering" + cdl_option CYGOPT_DEVS_CAN_RANGE_FILTERING_CFG_KEYS { + display "Range filtering" flavor bool default_value 0 description " @@ -93,16 +93,12 @@ cdl_package CYGPKG_DEVS_CAN_LPC2XXX { message filters for reception of single CAN messages. The global LPC2xxx acceptance filter supports not only single message filters but also - message groups. A message group is defined by a + message ranges. A message range is defined by a lower bound CAN identifier and an upper bound CAN identifier. The acceptance filter will accept all messages within this range of CAN identifiers. The acceptance filter supports a number of message - groups for each CAN channel. The support of - message filter groups is not conform to the - standard API of the CAN I/O layer and should only - be used for application where portability is not - important." + ranges for each CAN channel." } cdl_option CYGOPT_DEVS_CAN_LPC2XXX_LUT_ERR_SUPP { @@ -333,6 +329,27 @@ cdl_package CYGPKG_DEVS_CAN_LPC2XXX { to the lowest priority 15, allowing a single write to elevate the priority of an individual interrupt." } + + # Enable this by default for "LPX22xx" parts only. + cdl_option CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND { + display "Bus-Off Reset Mode workaround" + flavor bool + default_value { CYGHWR_HAL_ARM_LPC2XXX_VARIANT_VERSION == 2 } + description " + If the Transmit Error counter contains 255 and another + error occurs, the CAN Controller is forced into a state + called Bus-Off. In this state, the following register bits + and register values are set: BS (Bus Off Set) in CANxSR, BEI + (Bus Error Interrupt) and EI (Error Warning Interrupt) in + CANxICR, RM (Reset Mode) in CANxMOD, Transmit Error Counter + is set to 127, Receive Error Counter is cleared. + On some chips RM (Reset Mode) is not set and RX / TX error + counters are not cleared. This may lead to a permanent + re-calling of the Bus-Off error ISR which in turn may block + the application code from running. If this workaround is + active, the Bus-Off error ISR sets RM (Reset Mode), clears + RX / TX error counters." + } cdl_option CYGPKG_DEVS_CAN_LPC2XXX_TESTS { display "CAN LPC2xxx device driver tests" diff --git a/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx.h b/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx.h --- a/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx.h +++ b/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx.h @@ -64,13 +64,14 @@ //-------------------------------------------------------------------------- // Message filter configuration // -#define CYG_IO_SET_CONFIG_LPC2XXX_ACCFILT_GROUP CYG_IO_SET_CONFIG_CAN_ABORT + 0x10 // add message filter group +//#define CYG_IO_SET_CONFIG_LPC2XXX_ACCFILT_GROUP CYG_IO_SET_CONFIG_CAN_ABORT + 0x10 // add message filter group //-------------------------------------------------------------------------- // Mode setup of LPC2XXX // -#define CYGNUM_CAN_MODE_LPC2XXX_LISTEN_ONLY 0x80 // set controller in listen only mode +// NOT IMPLEMENTED! +//#define CYGNUM_CAN_MODE_LPC2XXX_LISTEN_ONLY 0x80 // set controller in listen only mode //========================================================================== @@ -79,12 +80,12 @@ // // structure for configuration of message filter groups // -typedef struct cyg_can_filtergroup_cfg_st -{ - cyg_can_id_type ext; - cyg_uint32 lower_id_bound; - cyg_uint32 upper_id_bound; -} cyg_can_filtergroup_cfg; +//typedef struct cyg_can_filtergroup_cfg_st +//{ +// cyg_can_id_type ext; +// cyg_uint32 lower_id_bound; +// cyg_uint32 upper_id_bound; +//} cyg_can_filtergroup_cfg; //--------------------------------------------------------------------------- diff --git a/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h b/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h --- a/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h +++ b/packages/devs/can/arm/lpc2xxx/current/include/can_lpc2xxx_baudrates.h @@ -185,6 +185,32 @@ static const cyg_uint32 lpc2xxx_br_tbl[] #define HAL_LPC2XXX_BAUD_TBL_DEFINED 1 #endif // CYGNUM_HAL_ARM_LPC2XXX_CAN_CLK == 12000000 +#if CYGNUM_HAL_ARM_LPC2XXX_CAN_CLK == 14745600 +#warning "You can't get exactly the desired CAN bus speeds with the specified CAN clock of 14.7456 MHz" +// +// Table with register values for baudrates at peripheral clock of 14.7456 MHz +// The clock of 14.7456 MHz is not suited for a good CAN bitrate timing because +// you can't get exactly the desired CAN bus speed with the specified CAN +// clock frequency. Be sure to check the error values behind the table entries. +// Settings leading to speed deviations of more than 1.5% should be discarded. +// +static const cyg_uint32 lpc2xxx_br_tbl[] = +{ + //----------brp tseg1 tseg2 sjw sam ------------ + CAN_BR_TBL_ENTRY(58, 20, 2, 0, 1), // 10 kbaud - Timing Error 0.030% + CAN_BR_TBL_ENTRY(66, 8, 0, 0, 1), // 20 kbaud - Timing Error -0.038% + CAN_BR_TBL_ENTRY(13, 17, 1, 0, 1), // 50 kbaud - Timing Error -0.310% + CAN_BR_TBL_ENTRY( 6, 17, 1, 0, 1), // 100 kbaud - Timing Error -0.310% + CAN_BR_TBL_ENTRY(12, 6, 0, 0, 1), // 125 kbaud - Timing Error -0.825% + CAN_BR_TBL_ENTRY( 5, 7, 0, 0, 1), // 250 kbaud - Timing Error 1.696% + CAN_BR_TBL_ENTRY( 2, 7, 0, 0, 0), // 500 kbaud - Timing Error 1.696% + CAN_BR_TBL_ENTRY( 1, 6, 0, 0, 0), // 800 kbaud - Timing Error -2.4% + CAN_BR_TBL_ENTRY( 0, 11, 1, 0, 0), // 1000 kbaud - Timing Error 1.696% + CAN_BR_TBL_ENTRY( 0, 0, 0, 0, 0), // Autobaud - not supported +}; +#define HAL_LPC2XXX_BAUD_TBL_DEFINED 1 +#endif // CYGNUM_HAL_ARM_LPC2XXX_CAN_CLK == 14745600 + //========================================================================== // BIT TIMING MACRO diff --git a/packages/devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.c b/packages/devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.c --- a/packages/devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.c +++ b/packages/devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.c @@ -771,7 +771,7 @@ static void lpc2xxx_can_accfilt_simple_r #ifdef CYGOPT_IO_CAN_STD_CAN_ID cyg_uint8 std_address = 0; // std group entry address #ifdef CYGOPT_IO_CAN_EXT_CAN_ID - cyg_uint8 ext_address = lpc2xxx_global_can_info.init_cnt << 2; + cyg_uint8 ext_address = LPC2XXX_INIT_CNT << 2; #endif #else cyg_uint8 ext_address = 0; diff --git a/packages/devs/can/arm/lpc2xxx/current/src/can_lpc2xxx.c b/packages/devs/can/arm/lpc2xxx/current/src/can_lpc2xxx.c --- a/packages/devs/can/arm/lpc2xxx/current/src/can_lpc2xxx.c +++ b/packages/devs/can/arm/lpc2xxx/current/src/can_lpc2xxx.c @@ -70,7 +70,6 @@ #include #include #include -#include #include @@ -539,8 +538,10 @@ typedef struct lpc2xxx_global_can_info_s #if CYGINT_IO_CAN_CHANNELS > 1 #define LPC2XXX_GET_CAN_CHANNEL(_can_info_, _chan_no_) ((can_channel*)(_can_info_).active_channels[_chan_no_]) +#define LPC2XXX_INIT_CNT lpc2xxx_global_can_info.init_cnt #else #define LPC2XXX_GET_CAN_CHANNEL(_can_info_, _chan_no_) ((can_channel*)(_can_info_).active_channels[0]) +#define LPC2XXX_INIT_CNT 1 #endif // @@ -1167,7 +1168,7 @@ static Cyg_ErrNo lpc2xxx_can_config_msgb // if (!lpc2xxx_can_add_rx_filter(info, filter)) { - return -EPERM; + return -ENOSPC; } } break; //CYGNUM_CAN_MSGBUF_RX_FILTER_ADD @@ -1264,14 +1265,45 @@ static Cyg_ErrNo lpc2xxx_enter_lowpower_ } +#ifdef CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND +//=========================================================================== +// Reset error counters to the given values +//=========================================================================== +static void lpc2xxx_reset_error_counters(lpc2xxx_can_info_t *info, + cyg_uint8 rx_errcnt, cyg_uint8 tx_errcnt) +{ + lsc_buf_t data; + cyg_uint32 regval; + HAL_READ_UINT32(CAN_CTRL_MOD(info), regval); + + HAL_WRITE_UINT32(CAN_CTRL_MOD(info), CANMOD_RESET); + HAL_READ_UINT32(CAN_CTRL_GSR(info), data.dword); + data.bytes[2] = rx_errcnt; // reset RX error counter + data.bytes[3] = tx_errcnt; // reset TX error counter to 0 + HAL_WRITE_UINT32(CAN_CTRL_GSR(info), data.dword); + + HAL_WRITE_UINT32(CAN_CTRL_MOD(info), regval); +} +#endif // #ifdef CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND + + //=========================================================================== // Start CAN module - set CANMOD operational and enable all interrupts //=========================================================================== static void lpc2xxx_start_module(can_channel *chan) { + lsc_buf_t data; cyg_uint32 regval; lpc2xxx_can_info_t *info = (lpc2xxx_can_info_t *)chan->dev_priv; + // before we start CAN module, we clear both error counters to start + // with a clean error counter state + HAL_WRITE_UINT32(CAN_CTRL_MOD(info), CANMOD_RESET); + HAL_READ_UINT32(CAN_CTRL_GSR(info), data.dword); + data.bytes[2] = 0; // reset RX error counter to 0 + data.bytes[3] = 0; // reset TX error counter to 0 + HAL_WRITE_UINT32(CAN_CTRL_GSR(info), data.dword); + HAL_WRITE_UINT32(CAN_CTRL_MOD(info), CANMOD_OPERATIONAL); // // The interrupt enable register is also modified by ISR and DSR so @@ -1298,18 +1330,18 @@ static void lpc2xxx_enter_reset_mode(can } -#ifdef CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS +#ifdef CYGOPT_DEVS_CAN_RANGE_FILTERING_CFG_KEYS //=========================================================================== // Add message filter group //=========================================================================== static Cyg_ErrNo lpc2xxx_can_config_accfilt_group(can_channel *chan, const void* buf, cyg_uint32* len) { bool res; - cyg_can_filtergroup_cfg *filter_grp = (cyg_can_filtergroup_cfg *)buf; + cyg_can_filter_range_cfg *filter_grp = (cyg_can_filter_range_cfg *)buf; lpc2xxx_can_info_t *info = (lpc2xxx_can_info_t *)chan->dev_priv; - if (*len != sizeof(cyg_can_filtergroup_cfg)) + if (*len != sizeof(cyg_can_filter_range_cfg)) { return -EINVAL; } @@ -1337,9 +1369,9 @@ static Cyg_ErrNo lpc2xxx_can_config_accf #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG lpc2xxx_can_accfilt_dbg_dump(); #endif - return res ? ENOERR : -EPERM; + return res ? ENOERR : -ENOSPC; } -#endif // CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS +#endif // CYGOPT_DEVS_CAN_RANGE_FILTERING_CFG_KEYS //=========================================================================== @@ -1380,16 +1412,16 @@ static Cyg_ErrNo lpc2xxx_can_set_config( break; #endif // CYGOPT_IO_CAN_RUNTIME_MBOX_CFG -#ifdef CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS +#ifdef CYGOPT_DEVS_CAN_RANGE_FILTERING_CFG_KEYS // // Add message filter group to acceptance filter // - case CYG_IO_SET_CONFIG_LPC2XXX_ACCFILT_GROUP : + case CYG_IO_SET_CONFIG_CAN_RANGE_FILTER : { return lpc2xxx_can_config_accfilt_group(chan, buf, len); } break; -#endif // CYGOPT_DEVS_CAN_LPC2XXX_EXTENDED_CFG_KEYS +#endif // CYGOPT_DEVS_CAN_RANGE_FILTERING_CFG_KEYS // // Change CAN state of CAN module @@ -1418,6 +1450,8 @@ static Cyg_ErrNo lpc2xxx_can_set_config( case CYGNUM_CAN_MODE_START : lpc2xxx_start_module(chan); break; case CYGNUM_CAN_MODE_STANDBY : lpc2xxx_enter_lowpower_mode(chan); break; case CYGNUM_CAN_MODE_CONFIG : lpc2xxx_enter_reset_mode(chan); break; + case CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER: return -EINVAL; + case CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT: return -EINVAL; } } break; // case CYG_IO_SET_CONFIG_CAN_MODE : @@ -1483,7 +1517,7 @@ static Cyg_ErrNo lpc2xxx_can_get_config( // - // Query hardware description of FlexCAN device driver + // Query hardware description of LPC2xxx CAN device driver // case CYG_IO_GET_CONFIG_CAN_HDI : { @@ -1496,6 +1530,20 @@ static Cyg_ErrNo lpc2xxx_can_get_config( | CYGNUM_CAN_HDI_FULLCAN; } break; + + // + // Read error counters from device hardware + // + case CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS : + { + lsc_buf_t data; + cyg_can_err_count_info* err_info = (cyg_can_err_count_info*)buf; + HAL_READ_UINT32(CAN_CTRL_GSR(info), data.dword); + err_info->rx_err_count = data.bytes[2]; + err_info->tx_err_count = data.bytes[3]; + *len = sizeof(cyg_can_err_count_info); + } + break; default : res = -EINVAL; @@ -1583,6 +1631,27 @@ static bool lpc2xxx_can_putmsg(can_chann } +#ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG +//=========================================================================== +// Print status registers +// This function is only here for debugging purposes to ease printing +// of status register content +//=========================================================================== +static void lpc2xxx_print_status(lpc2xxx_can_info_t *info) +{ + cyg_uint32 regval; + lsc_buf_t data; + + HAL_READ_UINT32(CAN_CTRL_MOD(info), regval); + LPC2XXX_DBG_PRINT("CANREG_MOD: 0x%08x\n", regval); + + HAL_READ_UINT32(CAN_CTRL_GSR(info), data.dword); + LPC2XXX_DBG_PRINT("RXERR: %d\n", data.bytes[2]); + LPC2XXX_DBG_PRINT("TXERR: %d\n", data.bytes[3]); +} +#endif + + //=========================================================================== // Read event from device driver //=========================================================================== @@ -1645,7 +1714,7 @@ static bool lpc2xxx_can_getevent(can_cha HAL_READ_UINT32(CAN_CTRL_GSR(info), regval); if (regval & GSR_DATA_OVR) { - pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX; + pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX_HW; HAL_WRITE_UINT32(CAN_CTRL_CMR(info), CMR_CLEAR_DATA_OVR); } } @@ -1683,15 +1752,18 @@ static bool lpc2xxx_can_getevent(can_cha { pevent->flags |= CYGNUM_CAN_EVENT_WARNING_RX; info->state = CYGNUM_CAN_STATE_BUS_WARN; + LPC2XXX_DBG_PRINT("CYGNUM_CAN_EVENT_WARNING_RX counter (%d) (%p)\n", data.bytes[2], (void*) chan); } else if (data.bytes[3] >= 96) { pevent->flags |= CYGNUM_CAN_EVENT_WARNING_TX; info->state = CYGNUM_CAN_STATE_BUS_WARN; + LPC2XXX_DBG_PRINT("CYGNUM_CAN_EVENT_WARNING_TX counter (%d) (%p)\n", data.bytes[3], (void*) chan); } else { info->state = CYGNUM_CAN_STATE_ACTIVE; + LPC2XXX_DBG_PRINT("CYGNUM_CAN_STATE_ACTIVE (%p)\n", (void*) chan); } LPC2XXX_DBG_PRINT("ICR_ERR_WARN (%p)\n", (void*) chan); } @@ -1720,10 +1792,13 @@ static bool lpc2xxx_can_getevent(can_cha { pevent->flags |= CYGNUM_CAN_EVENT_ERR_PASSIVE; info->state = CYGNUM_CAN_STATE_ERR_PASSIVE; + LPC2XXX_DBG_PRINT("CYGNUM_CAN_EVENT_ERR_PASSIVE (%p)\n", (void*) chan); } else { + pevent->flags |= CYGNUM_CAN_EVENT_ERR_ACTIVE; info->state = CYGNUM_CAN_STATE_ACTIVE; + LPC2XXX_DBG_PRINT("CYGNUM_CAN_EVENT_ERR_ACTIVE (%p)\n", (void*) chan); } LPC2XXX_DBG_PRINT("ICR_ERR_PASSIVE (%p)\n", (void*) chan); } @@ -1741,13 +1816,30 @@ static bool lpc2xxx_can_getevent(can_cha #endif // CYGOPT_DEVS_CAN_LPC2XXX_ALIE // - // 1: Bus Error Interrupt -- this bit is set if the BEIE bit in CANIE is 1, and the CAN - // controller detects an error on the bus. + // 1: Bus Error Interrupt -- this bit is set if the BEIE bit in CANIE + // is 1, and the CAN controller detects an error on the bus. // if (event & ICR_BUS_ERR) { pevent->flags |= CYGNUM_CAN_EVENT_BUS_OFF; LPC2XXX_DBG_PRINT("ICR_BUS_ERR (%p)\n", (void*) chan); + +#ifdef CYGHWR_DEVS_CAN_LPC2XXX_BUSOFF_WORKAROUND + // + // we do exactly here, what is written in the user manual + // 1. we go into reset mode + // 2. we clear the RX error counter and set the TX error counter + // to 127 + // 3. we clear the reset mode + // This ensures, that this ISR does not fire again and again and + // blocks the application while the bus off condition is active. + // Setting the TX error counter to 127 ensures that the controller + // is in TX error passive mode and that it does not flood the CAN + // bus with error messages. This makes it possible for the + // controller to properly recover from a bus off condition + // + lpc2xxx_reset_error_counters(info, 0, 127); +#endif } #ifdef CYGOPT_DEVS_CAN_LPC2XXX_LUT_ERR_SUPP @@ -1834,7 +1926,7 @@ static void lpc2xxx_can_tx_DSR(cyg_vecto { can_channel *chan = (can_channel *)data; cyg_uint32 regval; - lpc2xxx_can_info_t *info = (lpc2xxx_can_info_t *)chan->dev_priv; + CAN_DECLARE_INFO(chan); // // First read the ICR register to acknowledge all interrupts and @@ -2008,8 +2100,8 @@ static void lpc2xxx_can_DSR(cyg_vector_t // Loop through all channels - we need to do this only if we have more // than one channel so we can optimize here for single channel // + cyg_uint8 i = 0; #if CYGINT_IO_CAN_CHANNELS > 1 - cyg_uint8 i = 0; while (lpc2xxx_global_can_info.active_channels[i]) #endif { diff --git a/packages/devs/can/m68k/mcf52xx/current/ChangeLog b/packages/devs/can/m68k/mcf52xx/current/ChangeLog --- a/packages/devs/can/m68k/mcf52xx/current/ChangeLog +++ b/packages/devs/can/m68k/mcf52xx/current/ChangeLog @@ -1,3 +1,9 @@ +2012-01-25 Bernard Fouché + + * src/can_mcf52xx.c CYGNUM_CAN_EVENT_OVERRUN_RX_HW instead of + CYGNUM_CAN_EVENT_OVERRUN_RX. CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER & + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT return -EINVAL. + 2007-03-23 Uwe Kindler * cdl/can_mcf52xx.cdl Removed interfaces diff --git a/packages/devs/can/m68k/mcf52xx/current/src/can_mcf52xx.c b/packages/devs/can/m68k/mcf52xx/current/src/can_mcf52xx.c --- a/packages/devs/can/m68k/mcf52xx/current/src/can_mcf52xx.c +++ b/packages/devs/can/m68k/mcf52xx/current/src/can_mcf52xx.c @@ -1224,6 +1224,10 @@ flexcan_set_config(can_channel *chan, cy case CYGNUM_CAN_MODE_CONFIG : // stop FlexCAN modul for configuration flexcan_stop_chip(chan); break; + + case CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER: + case CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT: + return -EINVAL; } } break; // case CYG_IO_SET_CONFIG_CAN_MODE : @@ -1329,7 +1333,7 @@ static bool flexcan_is_no_self_tx(cyg_ca // if ((pmbox->ctrlstat_shadow & MBOX_RXCODE_OVERRUN) == MBOX_RXCODE_OVERRUN) { - pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX; + pevent->flags |= CYGNUM_CAN_EVENT_OVERRUN_RX_HW; } return true; diff --git a/packages/devs/disk/generic/mmc/current/ChangeLog b/packages/devs/disk/generic/mmc/current/ChangeLog --- a/packages/devs/disk/generic/mmc/current/ChangeLog +++ b/packages/devs/disk/generic/mmc/current/ChangeLog @@ -1,3 +1,19 @@ +2013-02-18 Ilija Stanislevik + + * src/mmc_spi.c: Add support for high capacity SD cards. + * include/mmc_protocol.h: Add definitions of V2 specific commands, + responses and card structure. [ Bugzilla 1001764 ] + +2013-02-21 Mike Jones + + * src/mmc_spi.c (mmc_spi_check_for_disk): Modify DEBUG1 to to show + CHS in partition table. + +2012-05-04 Jonathan Larmour + + * src/mmc_spi.c (mmc_spi_send_init): Silence unused var warning. + Spotted by Ilija Kocho. + 2008-08-19 Andrew Lunn * cdl/devs_disk_mmc.cdl: Renamed the device to /dev/mmcdiskX so diff --git a/packages/devs/disk/generic/mmc/current/include/mmc_protocol.h b/packages/devs/disk/generic/mmc/current/include/mmc_protocol.h --- a/packages/devs/disk/generic/mmc/current/include/mmc_protocol.h +++ b/packages/devs/disk/generic/mmc/current/include/mmc_protocol.h @@ -102,9 +102,17 @@ #define MMC_REQUEST_READ_OCR 0x3A #define MMC_REQUEST_CRC_ON_OFF 0x3B +// SD V2.x specific commands +#define SD_REQUEST_SEND_IF_COND 8 +#define SD_REQUEST_SD_SEND_OP_COND 41 +#define SD_REQUEST_APP_CMD 55 + // Response formats are different for MMC vs. SPI mode, so are defined // in the appropriate source files. +// SD V2.x specific responses +#define SD_ARGUMENT_HCS ( 1 << 30 ) + // The CID register is generally treated as an opaque data structure // used only for unique identification of cards. typedef struct mmc_cid_register { @@ -122,7 +130,7 @@ typedef struct mmc_cid_register { ((_data_)->cid_data[13])) #define MMC_CID_REGISTER_MDT(_data_) ((_data_)->cid_data[14]) #define MMC_CID_REGISTER_CRC(_data_) ((_data_)->cid_data[15] >> 1) - + // The CSD register is just lots of small bitfields. For now keep it // as an array of 16 bytes and provide macros to read the fields. @@ -170,6 +178,19 @@ typedef struct mmc_csd_register { #define MMC_CSD_REGISTER_ECC(_data_) ((_data_)->csd_data[14] & 0x0003) #define MMC_CSD_REGISTER_CRC(_data_) (((_data_)->csd_data[15] & 0xFE) >> 1) +// CSD V2.x structure +#define SD_CSD_V2_REGISTER_C_SIZE(_data_) ((((_data_)->csd_data[7] & 0x007f) << 16) | \ + ((_data_)->csd_data[8] << 8) | \ + ((_data_)->csd_data[9] )) + +// OCR +typedef struct sd_ocr_register { + cyg_uint8 ocr_data[4]; +} sd_ocr_register_t; + +#define SD_OCR_REGISTER_POWER_UP(_data_) (((_data_)->ocr_data[0] & 0x80) >> 7) +// CCS bit denotes Standard (0) or High/Extended (1) capacity +#define SD_OCR_REGISTER_CCS(_data_) (((_data_)->ocr_data[0] & 0x40) >> 6) #endif // ifdef CYGONCE_DEVS_DISK_MMC_PROTOCOL_H diff --git a/packages/devs/disk/generic/mmc/current/src/mmc_spi.c b/packages/devs/disk/generic/mmc/current/src/mmc_spi.c --- a/packages/devs/disk/generic/mmc/current/src/mmc_spi.c +++ b/packages/devs/disk/generic/mmc/current/src/mmc_spi.c @@ -113,6 +113,11 @@ cyg_bool cyg_mmc_spi_polled = false; // ---------------------------------------------------------------------------- // SPI-specific parts of the MMC protocol. // +// Host supply voltage information +#define MMC_SPI_VHS 0x01 // 2.7 - 3.6V +// Check pattern +#define MMC_CMD8_CHECK_PATTERN 0xaa +// // The main response byte. 0 indicates success, other bits // indicate various error conditions. #define MMC_REPLY_SUCCESS 0x00 @@ -163,14 +168,20 @@ static cyg_uint8 mmc_spi_ff_data[ memset(mmc_spi_ff_data, 0x00FF, 512); \ CYG_MACRO_END +typedef enum sd_capacity_e { + STANDARD_CAPACITY, + HIGH_CAPACITY, + EXTENDED_CAPACITY +} sd_capacity_t; + // Details of a specific MMC card typedef struct cyg_mmc_spi_disk_info_t { cyg_spi_device* mmc_spi_dev; cyg_uint32 mmc_saved_baudrate; cyg_uint32 mmc_block_count; -#ifdef MMC_SPI_BACKGROUND_WRITES +#ifdef MMC_SPI_BACKGROUND_WRITES cyg_bool mmc_writing; -#endif +#endif cyg_bool mmc_read_only; cyg_bool mmc_connected; cyg_uint32 mmc_heads_per_cylinder; @@ -178,6 +189,10 @@ typedef struct cyg_mmc_spi_disk_info_t { cyg_uint32 mmc_read_block_length; cyg_uint32 mmc_write_block_length; mmc_cid_register mmc_id; + sd_ocr_register_t sd_ocr; + cyg_uint32 sd_version; + sd_capacity_t sd_capacity; + cyg_uint32 sd_csd_version; } cyg_mmc_spi_disk_info_t; // There is no need for a hardware-specific disk controller structure. @@ -196,12 +211,12 @@ typedef struct cyg_mmc_spi_disk_info_t { static void mmc_spi_send_init(cyg_mmc_spi_disk_info_t* disk) { - cyg_spi_bus *bus; - cyg_spi_device *dev; +#if DEBUG > 1 + cyg_spi_device *dev = disk->mmc_spi_dev; + cyg_spi_bus *bus = dev->spi_bus; +#endif - DEBUG2("mmc_spi_send_init(): dev pointer 0x%p, %d\n", disk->mmc_spi_dev, cyg_mmc_spi_polled ); - dev = disk->mmc_spi_dev; - bus = dev->spi_bus; + DEBUG2("%s(): dev pointer 0x%p, %d\n", __FUNCTION__, disk->mmc_spi_dev, cyg_mmc_spi_polled ); DEBUG2(" : begin pointer %p\n", bus->spi_transaction_begin ); cyg_spi_tick(disk->mmc_spi_dev, cyg_mmc_spi_polled, 10); } @@ -218,7 +233,7 @@ mmc_spi_send_command_start(cyg_mmc_spi_d cyg_uint8 reply; int i; -#ifdef MMC_SPI_BACKGROUND_WRITES +#ifdef MMC_SPI_BACKGROUND_WRITES // If the last operation was a block write, those can take a while // to complete. Rather than wait at the end of the write(), do so // at the beginning of the next operation i.e. here. This also @@ -233,25 +248,29 @@ mmc_spi_send_command_start(cyg_mmc_spi_d // the end, Either way, when the card sends a byte 0xff it should // be ready for the next command. if (disk->mmc_writing) { - DEBUG2("mmc_spi_send_command_start(): polling for completion of previous write\n"); + DEBUG2("%s(): polling for completion of previous write\n", __FUNCTION__); disk->mmc_writing = 0; response[0] = 0x00; for (i = 0; (i < MMC_SPI_WRITE_BUSY_RETRIES) && (0x00FF != response[0]); i++) { cyg_spi_transfer(dev, cyg_mmc_spi_polled, 1, mmc_spi_ff_data, response); } } -#endif - +#endif + request[0] = command | 0x0040; request[1] = (arg >> 24) & 0x00FF; request[2] = (arg >> 16) & 0x00FF; request[3] = (arg >> 8) & 0x00FF; request[4] = arg & 0x00FF; // A CRC is needed for the go-idle-state command, because that - // command switches the device from MMC to SPI mode. That CRC is - // well-known. Once in SPI mode the card will not use CRCs by - // default. - request[5] = (command == 0x00) ? 0x0095 : 0x00ff; + // command switches the device from MMC to SPI mode. Also, a CRC + // is needed in case of CMD8. Here we take for granted that the + // host has 2.7-3.6V range and that the check pattern is 0xaa. + // These CRCs are well-known. Once in SPI mode the card will not + // use CRCs by default. + request[5] = (command == 0x00) ? 0x0095 : + (command == SD_REQUEST_SEND_IF_COND) ? 0x87 : 0xff; + // There will need to be at least one extra byte transfer to get // the card's response, so send that straightaway. Extra // outgoing data like this should be 0xff so that the card @@ -261,13 +280,13 @@ mmc_spi_send_command_start(cyg_mmc_spi_d // Lock the SPI bus. It remains locked until a subsequent call to // mmc_spi_end_command(). cyg_spi_transaction_begin(dev); - + // Transfer the whole command, and try to read the response back // immediately. cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 7, request, response, 0); DEBUG2("Sent command %02x %d: reply bytes %02x %02x %02x %02x %02x %02x %02x\n", command, arg, \ response[0], response[1], response[2], response[3], response[4], response[5], response[6]); - + // The response will be a single byte with the top bit clear. // The remaining bits are error/status flags. If the command // involves an additional response then that will be handled @@ -339,9 +358,9 @@ mmc_spi_read_data(cyg_mmc_spi_disk_info_ for (i = 0; (i < retries) && (0x00FF == response[0]); i++) { cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 1, mmc_spi_ff_data, response, 0); } - + if (MMC_DATA_TOKEN_SUCCESS != response[0]) { - DEBUG1("mmc_spi_read_data(): got error response %02x after %d iterations\n", response[0], i); + DEBUG1("%s(): got error response %02x after %d iterations\n", __FUNCTION__, response[0], i); return response[0]; } @@ -350,27 +369,100 @@ mmc_spi_read_data(cyg_mmc_spi_disk_info_ cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, count, mmc_spi_ff_data, buf, 0); // And the CRC, which can be ignored cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 2, mmc_spi_ff_data, response, 0); - DEBUG2("mmc_spi_read_data(): got data and CRC %02x %02x\n", response[0], response[1]); - + DEBUG2("%s(): got data and CRC %02x %02x\n", __FUNCTION__, response[0], response[1]); + return MMC_DATA_TOKEN_SUCCESS; } +// Determine if card complies with SD Physical Spec. Version 1.x or 2.x +// If it is V1, also set information on capacity. MMC cards are recognized as SD V1. +static Cyg_ErrNo +mmc_spi_check_version(cyg_mmc_spi_disk_info_t* disk) +{ +#define R7_RESPONSE_LENGTH 5 + cyg_uint32 reply; + cyg_uint8 response[R7_RESPONSE_LENGTH]; + cyg_spi_device* dev = disk->mmc_spi_dev; + + disk->sd_version = 0; + reply = mmc_spi_send_command_start(disk, SD_REQUEST_SEND_IF_COND, + ( MMC_SPI_VHS << 8 ) + MMC_CMD8_CHECK_PATTERN); + DEBUG2("SEND_IF_COND (CMD8) reply: %02x\n", reply); + + if (MMC_REPLY_ILLEGAL_COMMAND & reply) { // V1 cards do not understand CMD8 + disk->sd_version = 1; + disk->sd_capacity = STANDARD_CAPACITY; + mmc_spi_end_command(disk); + return ENOERR; + } + disk->sd_version = 2; + if (~MMC_REPLY_IN_IDLE_STATE & reply) { // Anything other than idle state? + DEBUG1("SEND_IF_COND (CMD8) replies error %02x\n", reply); + mmc_spi_end_command(disk); + return -EIO; + } + + // Card gives no error, so the response is R7. Take the rest of it. + cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, + R7_RESPONSE_LENGTH, mmc_spi_ff_data, response, 0); + DEBUG2("%s(): R7: %02x %02x %02x %02x %02x.\n", __FUNCTION__, + response[0], response[1], response[2], response[3], response[4]); + if (0 == (MMC_SPI_VHS & response[2])) { + DEBUG1("%s(): card doesn't accept voltage %02x\n", __FUNCTION__, MMC_SPI_VHS); + mmc_spi_end_command(disk); + return -ENOTSUP; + } + + mmc_spi_end_command(disk); + return ENOERR; +} + +static Cyg_ErrNo +mmc_spi_sd_check_v2_capacity_class(cyg_mmc_spi_disk_info_t* disk) +{ +#define R3_RESPONSE_LENGTH 4 + cyg_uint32 reply; + cyg_spi_device* dev = disk->mmc_spi_dev; + + reply = mmc_spi_send_command_start(disk, MMC_REQUEST_READ_OCR, 0); + if (MMC_REPLY_SUCCESS != reply) { + DEBUG1("READ_OCR (CMD58) replies error %02x\n", reply); + mmc_spi_end_command(disk); + return -EIO; + } + + // Card gives no error. Take the rest of response. + cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, + R3_RESPONSE_LENGTH, mmc_spi_ff_data, disk->sd_ocr.ocr_data, 0); + DEBUG2("%s(): R3: %02x %02x %02x %02x.\n", __FUNCTION__, + disk->sd_ocr.ocr_data[0], disk->sd_ocr.ocr_data[1], disk->sd_ocr.ocr_data[2], + disk->sd_ocr.ocr_data[3]); + mmc_spi_end_command(disk); + + disk->sd_capacity = (SD_OCR_REGISTER_CCS(&(disk->sd_ocr))) ? + HIGH_CAPACITY : STANDARD_CAPACITY ; + + return ENOERR; +} + // Read one of the card registers, e.g. CSD or CID static Cyg_ErrNo mmc_spi_read_register(cyg_mmc_spi_disk_info_t* disk, cyg_uint32 command, cyg_uint8* buf, cyg_uint32 count) { cyg_uint32 reply; - + reply = mmc_spi_send_command_start(disk, command, 0); if (MMC_REPLY_SUCCESS != reply) { - DEBUG1("mmc_spi_read_register(): unexpected response to command %02x, reply code %02x\n", command, reply); + DEBUG1("%s(): unexpected response to command %02x, reply code %02x\n", + __FUNCTION__, command, reply); mmc_spi_end_command(disk); return (0x00FF == reply) ? -ENODEV : -EIO; } reply = mmc_spi_read_data(disk, buf, count, false); mmc_spi_end_command(disk); if (MMC_DATA_TOKEN_SUCCESS != reply) { - DEBUG1("mmc_spi_read_register(): unexpected response to command %02x, expected 0x00FE data token, got %02x\n", command, reply); + DEBUG1("%s(): unexpected response to command %02x, expected 0x00FE data token, got %02x\n", + __FUNCTION__, command, reply); return -EIO; } return ENOERR; @@ -384,12 +476,18 @@ static Cyg_ErrNo mmc_spi_read_disk_block(cyg_mmc_spi_disk_info_t* disk, cyg_uint8* buf, cyg_uint32 block, cyg_bool extra_delay) { cyg_uint32 reply; - + // First the command itself. - DEBUG2("mmc_spi_read_disk_block(%d): sending command\n", block); - reply = mmc_spi_send_command_start(disk, MMC_REQUEST_READ_SINGLE_BLOCK, block * MMC_SPI_BLOCK_SIZE); + DEBUG2("%s(%d): sending command\n", __FUNCTION__, block); + if (STANDARD_CAPACITY == disk->sd_capacity) { + reply = mmc_spi_send_command_start(disk, MMC_REQUEST_READ_SINGLE_BLOCK, block * MMC_SPI_BLOCK_SIZE); + } + else { + reply = mmc_spi_send_command_start(disk, MMC_REQUEST_READ_SINGLE_BLOCK, block); + } if (MMC_REPLY_SUCCESS != reply) { - DEBUG1("mmc_spi_read_disk_block(%d): unexpected response to READ_SINGLE_BLOCK command, code %02x\n", block, reply); + DEBUG1("%s(%d): unexpected response to READ_SINGLE_BLOCK command, code %02x\n", + __FUNCTION__, block, reply); mmc_spi_end_command(disk); // A byte 0xFF indicates the card has been removed. if (0x00FF == reply) { @@ -406,15 +504,16 @@ mmc_spi_read_disk_block(cyg_mmc_spi_disk // else is an I/O error. return -EIO; } - + // Now read back the data block. That code can be shared with other read // operations, e.g. for retrieving registers. - DEBUG2("mmc_spi_read_disk_block(%d): reading data token/data/crc\n", block); + DEBUG2("%s(%d): reading data token/data/crc\n", __FUNCTION__, block); reply = mmc_spi_read_data(disk, buf, MMC_SPI_BLOCK_SIZE, extra_delay); mmc_spi_end_command(disk); if (MMC_DATA_TOKEN_SUCCESS != reply) { - DEBUG1("mmc_spi_read_disk_block(%d): failed to retrieve data, error token %02x\n", block, reply); - + DEBUG1("%s(%d): failed to retrieve data, error token %02x\n", + __FUNCTION__, block, reply); + // Possibilities are password-locked, range error, ECC failure // if the raw data is corrupt, CC error for an internal card // error, or some other error. A byte 0xFF indicates the card @@ -444,12 +543,18 @@ mmc_spi_write_disk_block(cyg_mmc_spi_dis cyg_uint32 reply; cyg_uint8 extra[4]; int i; - + // First, send the command itself and get the initial response - DEBUG2("mmc_spi_write_disk_block(), sending command\n"); - reply = mmc_spi_send_command_start(disk, MMC_REQUEST_WRITE_BLOCK, block * MMC_SPI_BLOCK_SIZE); + DEBUG2("%s(): sending command\n", __FUNCTION__); + if (STANDARD_CAPACITY == disk->sd_capacity) { + reply = mmc_spi_send_command_start(disk, MMC_REQUEST_WRITE_BLOCK, block * MMC_SPI_BLOCK_SIZE); + } + else { + reply = mmc_spi_send_command_start(disk, MMC_REQUEST_WRITE_BLOCK, block ); + } if (MMC_REPLY_SUCCESS != reply) { - DEBUG1("mmc_spi_write_disk_block(): unexpected response to WRITE_BLOCK command, code %02x\n", reply); + DEBUG1("%s(): unexpected response to WRITE_BLOCK command, code %02x\n", + __FUNCTION__, reply); mmc_spi_end_command(disk); if (0x00FF == reply) { return -ENODEV; @@ -469,7 +574,7 @@ mmc_spi_write_disk_block(cyg_mmc_spi_dis // The card is now expecting a data block. This consists of a single byte // 0x00FE, then the data itself, and a dummy CRC. The reply from the card // does not contain any useful information. - DEBUG2("mmc_spi_write_disk_block(): sending data token/data/crc\n"); + DEBUG2("%s(): sending data token/data/crc\n", __FUNCTION__); extra[0] = 0x00FE; cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 1, extra, (cyg_uint8*)0, 0); cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, MMC_SPI_BLOCK_SIZE, buf, (cyg_uint8*)0, 0); @@ -477,13 +582,13 @@ mmc_spi_write_disk_block(cyg_mmc_spi_dis // The card should respond immediately with a data response token. cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 1, mmc_spi_ff_data, extra, 0); - DEBUG2("mmc_spi_write_disk_block(): got data response token %02x\n", extra[0]); + DEBUG2("%s(): got data response token %02x\n", __FUNCTION__, extra[0]); // The bottom five bits contain the response. 00101 indicates success, // anything else is a CRC error. Everything else will have been checked // before the data got transferred. if (0x05 != (extra[0] & 0x1F)) { - DEBUG1("mmc_spi_write_disk_block(): invalid data response token %02x\n", extra[0]); + DEBUG1("%s(): invalid data response token %02x\n", __FUNCTION__, extra[0]); mmc_spi_end_command(disk); if (0x00FF == extra[0]) { return -ENODEV; @@ -491,7 +596,7 @@ mmc_spi_write_disk_block(cyg_mmc_spi_dis return -EIO; } -#ifdef MMC_SPI_BACKGROUND_WRITES +#ifdef MMC_SPI_BACKGROUND_WRITES // Mark the card as writing. The next operation will poll for completion. disk->mmc_writing = true; #else @@ -506,10 +611,10 @@ mmc_spi_write_disk_block(cyg_mmc_spi_dis extra[0] = 0x00; for (i = 0; (i < MMC_SPI_WRITE_BUSY_RETRIES) && (0x00 == extra[0]); i++) { cyg_spi_transaction_transfer(dev, cyg_mmc_spi_polled, 1, mmc_spi_ff_data, extra, 0); - DEBUG2("mmc_spi_write_disk_block(), polling for ! busy, got response %02x\n", extra[0]); + DEBUG2("%s(): polling for ! busy, got response %02x\n", __FUNCTION__, extra[0]); } #endif - + // Assume that the loop did in fact terminate. mmc_spi_end_command(disk); return ENOERR; @@ -544,13 +649,13 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ Cyg_ErrNo code; mmc_csd_register csd; -#ifdef MMC_SPI_BACKGROUND_WRITES +#ifdef MMC_SPI_BACKGROUND_WRITES // If we have unmounted a disk and are remounting it, assume that // any writes have completed. disk->mmc_writing = false; -#endif +#endif reply = 0x00ff; - + for (i = 0; (i < MMC_SPI_GO_IDLE_RETRIES) && (0x01 != reply); i++) { // Allow platform HALs to provide additional initialization, // if the hardware needs it. @@ -564,7 +669,7 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ // been plugged in so there is no guarantee that any previous // init() calls or other traffic will have affected this card. mmc_spi_send_init(disk); - + // Now set the card to idle state. This involves the GO_IDLE_STATE // command which will be accepted irrespective of whether the card is // currently in MMC or SPI mode, and will leave the card in SPI mode. @@ -577,39 +682,74 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ // inconvenient moment. Some dummy traffic is generated in the // hope that this gets things back in sync. if (0x01 != reply) { - DEBUG1("mmc_spi_check_for_disk(): loop %d, card did not enter idle state, code %02x\n", i, reply); + DEBUG1("%s(): loop %d, card did not enter idle state, code %02x\n", + __FUNCTION__, i, reply); if (0x0ff != reply) { cyg_spi_transfer(dev, cyg_mmc_spi_polled, 128, mmc_spi_ff_data, (cyg_uint8*) 0); } } } if (0x0ff == reply) { - DEBUG1("mmc_spi_check_for_disk(): unable to get a response from the MMC card: code %02x\n", reply); + DEBUG1("%s(): unable to get a response from the MMC card: code %02x\n", + __FUNCTION__, reply); // A working card should be returning some data return -ENODEV; } if (0x01 != reply) { - DEBUG1("mmc_spi_check_for_disk(): card did not enter idle state, code %02x\n", reply); + DEBUG1("%s(): card did not enter idle state, code %02x\n", __FUNCTION__, reply); return -EIO; } - + + // Determine if card complies with SD Physical Spec Version 1 or 2 or later. + reply = mmc_spi_check_version(disk); + if (ENOERR != reply) { + DEBUG1("%s(): can't determine card's version, code %02x\n", __FUNCTION__, reply); + return reply; + } + DEBUG2("%s(): card version %u\n", __FUNCTION__, disk->sd_version); + // Next, wait for the card to initialize. This involves repeatedly // trying the SEND_OP_COND command until we get a reply that is - // not idle + // not idle. reply = 0x00ff; for (i = 0; (i < MMC_SPI_OP_COND_RETRIES) && ((0x00ff == reply) || (0 != (MMC_REPLY_IN_IDLE_STATE & reply))); i++) { #ifdef CYGPKG_DEVS_DISK_MMC_SPI_IDLE_RETRIES_WAIT CYGACC_CALL_IF_DELAY_US(CYGPKG_DEVS_DISK_MMC_SPI_IDLE_RETRIES_WAIT); #endif - reply = mmc_spi_send_command(disk, MMC_REQUEST_SEND_OP_COND, 0); + if (1 == disk->sd_version) { + reply = mmc_spi_send_command(disk, MMC_REQUEST_SEND_OP_COND, 0); + } + else { + reply = mmc_spi_send_command(disk, SD_REQUEST_APP_CMD, 0); + reply &= ~MMC_REPLY_IN_IDLE_STATE; + if (MMC_REPLY_SUCCESS != reply) { + DEBUG1("%s(): card doesn't accept APP_CMD: reply code %02x\n", + __FUNCTION__, reply); + return -EIO; + } + reply = mmc_spi_send_command(disk, SD_REQUEST_SD_SEND_OP_COND, SD_ARGUMENT_HCS); + } } if (MMC_REPLY_SUCCESS != reply) { - DEBUG1("mmc_spi_check_for_disk(): card has not entered operational state: reply code %02x\n", reply); + DEBUG1("%s(): card has not entered operational state: reply code %02x\n", + __FUNCTION__, reply); return (0x00FF == reply) ? -ENODEV : -EIO; } // The card has now generated sufficient responses that we don't need to // worry about a missing card anymore. + // In case of V2 card, determine its capacity class + if (2 == disk->sd_version) { + reply = mmc_spi_sd_check_v2_capacity_class(disk); + if (MMC_REPLY_SUCCESS != reply) { + DEBUG1("%s(): can't establish card's capacity class: reply code %02x\n", + __FUNCTION__, reply); + return -EIO; + } + } + DEBUG2("%s capacity card.\n", (STANDARD_CAPACITY == disk->sd_capacity) ? + "Standard" : (HIGH_CAPACITY == disk->sd_capacity) ? "High" : "Extended" ); + // Get hold of the card's unique ID and store it, to allow disk changes // to be detected. code = mmc_spi_read_register(disk, MMC_REQUEST_SEND_CID, (cyg_uint8*) &(disk->mmc_id), 16); @@ -650,7 +790,9 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ csd.csd_data[ 4], csd.csd_data[ 5], csd.csd_data[ 6], csd.csd_data[7], \ csd.csd_data[ 8], csd.csd_data[ 9], csd.csd_data[10], csd.csd_data[11], \ csd.csd_data[12], csd.csd_data[13], csd.csd_data[14], csd.csd_data[15]); - + + disk->sd_csd_version = MMC_CSD_REGISTER_CSD_STRUCTURE(&csd) + 1 ; + // Optionally dump the whole CSD register. This takes a lot of // code but gives a lot of info about the card. If the info looks // correct then we really are interacting properly with an MMC card. @@ -668,6 +810,7 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ } else { DEBUG1(" : Others/Unknown disk, FILE_FORMAT_GROUP 0, FILE_FORMAT 3\n"); } + { static const cyg_uint32 mantissa_speeds_x10[16] = { 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 }; static const cyg_uint32 exponent_speeds_div10[8] = { 10000, 100000, 1000000, 10000000, 0, 0, 0, 0 }; @@ -676,11 +819,15 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ speed /= 1000; DEBUG1(" : TRAN_SPEED %d %d -> %d kbit/s\n", \ MMC_CSD_REGISTER_TRAN_SPEED_MANTISSA(&csd), MMC_CSD_REGISTER_TRAN_SPEED_EXPONENT(&csd), speed); - } + } + DEBUG1(" : READ_BL_LEN block length 2^%d (%d)\n", MMC_CSD_REGISTER_READ_BL_LEN(&csd), \ 0x01 << MMC_CSD_REGISTER_READ_BL_LEN(&csd)); - DEBUG1(" : C_SIZE %d, C_SIZE_MULT %d\n", MMC_CSD_REGISTER_C_SIZE(&csd), MMC_CSD_REGISTER_C_SIZE_MULT(&csd)); - { + + if (1 == disk->sd_csd_version) { + DEBUG1(" : C_SIZE %d, C_SIZE_MULT %d\n", \ + MMC_CSD_REGISTER_C_SIZE(&csd), MMC_CSD_REGISTER_C_SIZE_MULT(&csd)); + { cyg_uint32 block_len = 0x01 << MMC_CSD_REGISTER_READ_BL_LEN(&csd); cyg_uint32 mult = 0x01 << (MMC_CSD_REGISTER_C_SIZE_MULT(&csd) + 2); cyg_uint32 size = block_len * mult * (MMC_CSD_REGISTER_C_SIZE(&csd) + 1); @@ -688,10 +835,22 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ cyg_uint32 sizeM = sizeK / 1024; sizeK -= (sizeM * 1024); DEBUG1(" : total card size %dM%dK\n", sizeM, sizeK); + } } + else { + DEBUG1(" : C_SIZE %d\n", SD_CSD_V2_REGISTER_C_SIZE(&csd)); + { + cyg_uint32 sizeK = 512 * (SD_CSD_V2_REGISTER_C_SIZE(&csd) + 1 ) ; + cyg_uint32 sizeM = sizeK / 1024; + sizeK -= (sizeM * 1024); + DEBUG1(" : total card size %uM%uK\n", sizeM, sizeK); + } + } + DEBUG1(" : WR_BL_LEN block length 2^%d (%d)\n", \ MMC_CSD_REGISTER_WRITE_BL_LEN(&csd), 0x01 << MMC_CSD_REGISTER_WRITE_BL_LEN(&csd)); - { + + if ( 1 == disk->sd_csd_version) { static cyg_uint32 taac_mantissa_speeds_x10[16] = { 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 }; static cyg_uint32 taac_exponent_speeds_div10[8] = { 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 }; cyg_uint32 taac_speed = taac_mantissa_speeds_x10[MMC_CSD_REGISTER_TAAC_MANTISSA(&csd)] * @@ -700,15 +859,18 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ DEBUG1(" : asynchronous read access time TAAC %d %d -> %d ns\n", \ MMC_CSD_REGISTER_TAAC_MANTISSA(&csd), MMC_CSD_REGISTER_TAAC_EXPONENT(&csd), taac_speed); } - DEBUG1(" : synchronous read access time NSAC %d * 100 cycles\n", \ - MMC_CSD_REGISTER_NSAC(&csd)); + if ( 1 == disk->sd_csd_version) { + DEBUG1(" : synchronous read access time NSAC %d * 100 cycles\n", \ + MMC_CSD_REGISTER_NSAC(&csd)); + } DEBUG1(" : typical write program time %d * read time\n", MMC_CSD_REGISTER_R2W_FACTOR(&csd)); DEBUG1(" : CCC command classes 0x%04x\n", MMC_CSD_REGISTER_CCC(&csd)); DEBUG1(" : READ_BL_PARTIAL %d, WRITE_BLK_MISALIGN %d, READ_BLK_MISALIGN %d, DSR_IMP %d\n", \ MMC_CSD_REGISTER_READ_BL_PARTIAL(&csd), MMC_CSD_REGISTER_WRITE_BLK_MISALIGN(&csd), \ MMC_CSD_REGISTER_READ_BLK_MISALIGN(&csd), MMC_CSD_REGISTER_DSR_IMP(&csd)); DEBUG1(" : WR_BL_PARTIAL %d\n", MMC_CSD_REGISTER_WR_BL_PARTIAL(&csd)); - { + + if ( 1 == disk->sd_csd_version) { static cyg_uint8 min_currents[8] = { 1, 1, 5, 10, 25, 35, 60, 100 }; static cyg_uint8 max_currents[8] = { 1, 5, 10, 25, 35, 45, 80, 200 }; DEBUG1(" : read current min %dmA, max %dmA\n", \ @@ -718,26 +880,32 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ min_currents[MMC_CSD_REGISTER_VDD_W_CURR_MIN(&csd)], \ max_currents[MMC_CSD_REGISTER_VDD_W_CURR_MAX(&csd)]); } - DEBUG1(" : erase sector size %d, erase group size %d\n", \ - MMC_CSD_REGISTER_SECTOR_SIZE(&csd) + 1, MMC_CSD_REGISTER_ERASE_GRP_SIZE(&csd) + 1); - DEBUG1(" : write group enable %d, write group size %d\n", \ - MMC_CSD_REGISTER_WR_GRP_ENABLE(&csd), MMC_CSD_REGISTER_WR_GRP_SIZE(&csd) + 1); + if ( 1 == disk->sd_csd_version) { + DEBUG1(" : erase sector size %d, erase group size %d\n", \ + MMC_CSD_REGISTER_SECTOR_SIZE(&csd) + 1, MMC_CSD_REGISTER_ERASE_GRP_SIZE(&csd) + 1); + DEBUG1(" : write group enable %d, write group size %d\n", \ + MMC_CSD_REGISTER_WR_GRP_ENABLE(&csd), MMC_CSD_REGISTER_WR_GRP_SIZE(&csd) + 1); + } DEBUG1(" : copy bit %d\n", MMC_CSD_REGISTER_COPY(&csd)); DEBUG1(" : permanent write protect %d, temporary write protect %d\n", \ MMC_CSD_REGISTER_PERM_WRITE_PROTECT(&csd), MMC_CSD_REGISTER_TMP_WRITE_PROTECT(&csd)); - DEBUG1(" : ecc %d, default ecc %d\n", MMC_CSD_REGISTER_ECC(&csd), MMC_CSD_REGISTER_DEFAULT_ECC(&csd)); + if ( 1 == disk->sd_csd_version) { + DEBUG1(" : ecc %d, default ecc %d\n", MMC_CSD_REGISTER_ECC(&csd), MMC_CSD_REGISTER_DEFAULT_ECC(&csd)); + } DEBUG1(" : crc 0x%08x\n", MMC_CSD_REGISTER_CRC(&csd)); -#endif +#endif - // There is information available about the file format, e.g. - // partitioned vs. simple FAT. With the current version of the - // generic disk code this needs to be known statically, via - // the mbr field of the disk channel structure. If the card - // is inappropriately formatted, reject the mount request. - if ((0 != MMC_CSD_REGISTER_FILE_FORMAT_GROUP(&csd)) || - (0 != MMC_CSD_REGISTER_FILE_FORMAT(&csd))) { - return -ENOTDIR; - } + if ( 1 == disk->sd_csd_version) { + // There is information available about the file format, e.g. + // partitioned vs. simple FAT. With the current version of the + // generic disk code this needs to be known statically, via + // the mbr field of the disk channel structure. If the card + // is inappropriately formatted, reject the mount request. + if ((0 != MMC_CSD_REGISTER_FILE_FORMAT_GROUP(&csd)) || + (0 != MMC_CSD_REGISTER_FILE_FORMAT(&csd))) { + return -ENOTDIR; + } + } // According to Spec V3.01, host should not use these two fields in CSD V2 cards // Look for a write-protect bit (permanent or temporary), and set // the disk as read-only or read-write as appropriate. The @@ -750,15 +918,20 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ disk->mmc_read_only = false; } DEBUG1("Disk read-only flag %d\n", disk->mmc_read_only); - + // Calculate the disk size, primarily for assertion purposes. - // By design MMC cards are limited to 4GB, which still doesn't - // quite fit into 32 bits. - disk->mmc_block_count = (((cyg_uint64)(0x01 << MMC_CSD_REGISTER_READ_BL_LEN(&csd))) * - ((cyg_uint64)(0x01 << (MMC_CSD_REGISTER_C_SIZE_MULT(&csd) + 2))) * - ((cyg_uint64)(MMC_CSD_REGISTER_C_SIZE(&csd) + 1))) / (cyg_uint64)MMC_SPI_BLOCK_SIZE; - DEBUG1("Disk blockcount %d (0x%08x)\n", disk->mmc_block_count, disk->mmc_block_count); - + if ( 1 == disk->sd_csd_version) { + // By design MMC cards are limited to 4GB, which still doesn't + // quite fit into 32 bits. + disk->mmc_block_count = (((cyg_uint64)(0x01 << MMC_CSD_REGISTER_READ_BL_LEN(&csd))) * + ((cyg_uint64)(0x01 << (MMC_CSD_REGISTER_C_SIZE_MULT(&csd) + 2))) * + ((cyg_uint64)(MMC_CSD_REGISTER_C_SIZE(&csd) + 1))) / (cyg_uint64)MMC_SPI_BLOCK_SIZE; + } + else { + disk->mmc_block_count = 1024 * ( SD_CSD_V2_REGISTER_C_SIZE(&csd) + 1 ) ; + } + DEBUG1("Disk blockcount %u (0x%08x)\n", disk->mmc_block_count, disk->mmc_block_count); + // Assume for now that the block length is 512 bytes. This is // probably a safe assumption since we have just got the card // initialized out of idle state. If it ever proves to be a problem @@ -775,7 +948,7 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ static const cyg_uint32 mantissa_speeds_x10[16] = { 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 }; static const cyg_uint32 exponent_speeds_div10[8] = { 10000, 100000, 1000000, 10000000, 0, 0, 0, 0 }; cyg_uint32 speed, len; - + len = sizeof(cyg_uint32); if (cyg_spi_get_config(dev, CYG_IO_GET_CONFIG_SPI_CLOCKRATE, (void*) &disk->mmc_saved_baudrate, &len)) { DEBUG1("Failed to retrieve current SPI device clockrate\n"); @@ -801,7 +974,7 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ cyg_uint8 data[MMC_SPI_BLOCK_SIZE]; cyg_uint8* partition; cyg_uint32 lba_first, lba_size, lba_end, head, cylinder, sector; - + code = mmc_spi_read_disk_block(disk, data, 0, true); if (code) { mmc_spi_restore_baud(disk); @@ -830,14 +1003,16 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ // 0x1be, 0x1ce, 0x1de and 0x1ee. The numbers are stored little-endian for (i = 0; i < 4; i++) { partition = &(data[0x1be + (0x10 * i)]); - DEBUG1("Partition %d: boot %02x, first sector %02x %02x %02x, file system %02x, last sector %02x %02x %02x\n", i, \ - partition[0], partition[1], partition[2], partition[3], partition[4], \ + DEBUG1("Partition %d: boot %02x, first CHS %02x, last CHS %02x, first sector %02x %02x %02x, file system %02x, last sector %02x %02x %02x\n", i, \ + partition[0], \ + ((partition[2] & 0xC0) << 2) | partition[3], ((partition[6] & 0xC0) << 2) | partition[7], \ + partition[1], partition[2], partition[3], partition[4], \ partition[5], partition[6], partition[7]); DEBUG1(" : first sector (linear) %02x %02x %02x %02x, sector count %02x %02x %02x %02x\n", \ partition[11], partition[10], partition[9], partition[8], \ partition[15], partition[14], partition[13], partition[12]); } -#endif +#endif if ((0x0055 != data[0x1fe]) || (0x00aa != data[0x1ff])) { mmc_spi_restore_baud(disk); return -ENOTDIR; @@ -867,7 +1042,7 @@ mmc_spi_check_for_disk(cyg_mmc_spi_disk_ sector = partition[6] & 0x3F; disk->mmc_heads_per_cylinder = ((((lba_end + 1) - sector) / disk->mmc_sectors_per_head) - head) / cylinder; } - + return ENOERR; } @@ -944,9 +1119,9 @@ mmc_spi_disk_lookup(struct cyg_devtab_en cyg_mmc_spi_disk_info_t* disk = (cyg_mmc_spi_disk_info_t*) chan->dev_priv; Cyg_ErrNo result; - DEBUG2("mmc_spi_disk_lookup(): target name=%s\n", name ); + DEBUG2("%s(): target name=%s\n", __FUNCTION__, name ); DEBUG2(" : device name=%s dep_name=%s\n", tab[0]->name, tab[0]->dep_name ); - DEBUG2(" : sub name=%s dep_name=%s\n", sub_tab->name, sub_tab->dep_name ); +// DEBUG2(" : sub name=%s dep_name=%s\n", sub_tab->name, sub_tab->dep_name ); if (disk->mmc_connected) { // There was a card plugged in last time we looked. Is it still there? @@ -974,7 +1149,7 @@ mmc_spi_disk_lookup(struct cyg_devtab_en cyg_uint32 id_data; char* where; int i; - + // The world is consistent and the higher-level code does not // know anything about the current card, if any. Is there a // card? @@ -1014,7 +1189,7 @@ mmc_spi_disk_lookup(struct cyg_devtab_en ident.firmware_rev[1] = id_data - 10 + 'A'; } ident.firmware_rev[2] = '\0'; - + // Model number. There is a six-byte product name in the CID. for (i = 0; i < 6; i++) { if ((disk->mmc_id.cid_data[i + 3] >= 0x20) && (disk->mmc_id.cid_data[i+3] <= 0x7E)) { @@ -1056,9 +1231,10 @@ mmc_spi_disk_read(disk_channel* chan, vo cyg_uint32 i; cyg_uint8* buf = (cyg_uint8*) buf_arg; Cyg_ErrNo code = ENOERR; - - DEBUG1("mmc_spi_disk_read(): first block %d, buf %p, len %lu blocks (%lu bytes)\n", - first_block, buf, (unsigned long)blocks, (unsigned long)blocks*512); + + DEBUG1("%s(): first block %d, buf %p, len %lu blocks (%lu bytes)\n", + __FUNCTION__, first_block, buf, (unsigned long)blocks, + (unsigned long)blocks*512); if (! disk->mmc_connected) { return -ENODEV; @@ -1082,8 +1258,9 @@ mmc_spi_disk_write(disk_channel* chan, c const cyg_uint8* buf = (cyg_uint8*) buf_arg; Cyg_ErrNo code = ENOERR; - DEBUG1("mmc_spi_disk_write(): first block %d, buf %p, len %lu blocks (%lu bytes)\n", - first_block, buf, (unsigned long)blocks, (unsigned long)blocks*512); + DEBUG1("%s(): first block %d, buf %p, len %lu blocks (%lu bytes)\n", + __FUNCTION__, first_block, buf, (unsigned long)blocks, + (unsigned long)blocks*512); if (! disk->mmc_connected) { return -ENODEV; @@ -1111,7 +1288,7 @@ mmc_spi_disk_get_config(disk_channel* ch CYG_UNUSED_PARAM(cyg_uint32, key); CYG_UNUSED_PARAM(const void*, buf); CYG_UNUSED_PARAM(cyg_uint32*, len); - + return -EINVAL; } @@ -1166,9 +1343,9 @@ DISK_FUNS(cyg_mmc_spi_disk_funs, static cyg_mmc_spi_disk_info_t cyg_mmc_spi_disk0_hwinfo = { .mmc_spi_dev = &cyg_spi_mmc_dev0, -#ifdef MMC_SPI_BACKGROUND_WRITES +#ifdef MMC_SPI_BACKGROUND_WRITES .mmc_writing = 0, -#endif +#endif .mmc_connected = 0 }; @@ -1183,7 +1360,7 @@ DISK_CHANNEL(cyg_mmc_spi_disk0_channel, true, /* MBR support */ 1 /* Number of partitions supported */ ); - + BLOCK_DEVTAB_ENTRY(cyg_mmc_spi_disk0_devtab_entry, CYGDAT_DEVS_DISK_MMC_SPI_DISK0_NAME, 0, diff --git a/packages/devs/disk/spi/freescale/dspi/mmc/current/ChangeLog b/packages/devs/disk/spi/freescale/dspi/mmc/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/disk/spi/freescale/dspi/mmc/current/ChangeLog @@ -0,0 +1,29 @@ +2012-01-06 Ilija Kocho + + * cdl/disk_mmc_freescale_dspi.cdl: + * src/freescale_dspi_mmc.c: + New package -- Disk driver fot Freescale DSPI + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/disk/spi/freescale/dspi/mmc/current/cdl/disk_mmc_freescale_dspi.cdl b/packages/devs/disk/spi/freescale/dspi/mmc/current/cdl/disk_mmc_freescale_dspi.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/disk/spi/freescale/dspi/mmc/current/cdl/disk_mmc_freescale_dspi.cdl @@ -0,0 +1,92 @@ +##========================================================================== +## +## disk_mmc_freescale_dspi.cdl +## +## MMC/SD disk instatntiation for Freescale DSPI +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-12-27 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + +cdl_package CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI { + display "MMC/SD disk device for Freescale DSPI" + + active_if CYGPKG_DEVS_DISK_MMC_SPI + requires CYGPKG_DEVS_SPI_FREESCALE_DSPI + requires is_active(CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS) + requires is_active(CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS) + + + parent CYGPKG_DEVS_DISK_MMC_SPI + compile -library=libextras.a freescale_dspi_mmc.c + + cdl_component CYGHWR_DEVS_MMC_SPI_INITIAL_SPEED { + display "Initial nominal SPI clock speed Hz" + flavor data + default_value 400000 + + cdl_option CYGHWR_DEVS_MMC_SPI_USE_DBR { + display "Use double baud rate" + flavor bool + default_value 1 + description " + Double baud rate is a feature of Freescale DSPI + that may provide higher baud rates but duty the cycle may be + different than 50/50 depdent on scaler/prescaler setting + for achieved baud rate." + } + } + + cdl_option CYGHWR_DEVS_DISK_MMC_CS_DELAY { + display "Nominal chip select delays (units)" + flavor data + legal_values { 1 1000 } + default_value 1 + } + + cdl_option CYGHWR_DEVS_DISK_MMC_CS_DELAY_UNIT { + display "Chip select delay unit (ns)" + flavor data + default_value 100 + legal_values { 100 1000 } + } +} diff --git a/packages/devs/disk/spi/freescale/dspi/mmc/current/src/freescale_dspi_mmc.c b/packages/devs/disk/spi/freescale/dspi/mmc/current/src/freescale_dspi_mmc.c new file mode 100644 --- /dev/null +++ b/packages/devs/disk/spi/freescale/dspi/mmc/current/src/freescale_dspi_mmc.c @@ -0,0 +1,99 @@ +//========================================================================== +// +// freescale_dspi_mmc.c +// +// Cortex-M4 Freescale DSPI disk device +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-12-27 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include + +#define MMC_SPI_FRAME_SIZE 8 +#define MMC_SPI_CLOCK_POL 0 +#define MMC_SPI_CLOCK_PHASE 0 +#define MMC_SPI_INITIAL_SPEED CYGHWR_DEVS_MMC_SPI_INITIAL_SPEED +#define MMC_SPI_CSUP_DL CYGHWR_DEVS_DISK_MMC_CS_DELAY +#define MMC_SPI_CSDW_DL CYGHWR_DEVS_DISK_MMC_CS_DELAY +#define MMC_SPI_TRBD_DL CYGHWR_DEVS_DISK_MMC_CS_DELAY +#define MMC_SPI_DELAY_UNIT CYGHWR_DEVS_DISK_MMC_CS_DELAY_UNIT +#ifdef CYGHWR_DEVS_MMC_SPI_USE_DBR +# define MMC_SPI_DBR 1 +#else +# define MMC_SPI_DBR 0 +#endif + + +CYG_DEVS_SPI_FREESCALE_DSPI_DEVICE( + cyg_spi_mmc_dev0, // Device name + CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS, // SPI bus + CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS, // Dev num + MMC_SPI_FRAME_SIZE, // Frame size + MMC_SPI_CLOCK_POL, // Clock pol + MMC_SPI_CLOCK_PHASE, // Clock phase + MMC_SPI_INITIAL_SPEED, // Clock speed (Hz) + MMC_SPI_CSUP_DL, // CS assert delay + MMC_SPI_CSDW_DL, // CS negate delay + MMC_SPI_TRBD_DL, // Delay between transfers + MMC_SPI_DELAY_UNIT, // Delay unit (100 or 1000 ns) + MMC_SPI_DBR // Use double baud rate +); + +//========================================================================== +// EOF freescale_spi_disk.c diff --git a/packages/devs/eth/arm/at91/current/ChangeLog b/packages/devs/eth/arm/at91/current/ChangeLog --- a/packages/devs/eth/arm/at91/current/ChangeLog +++ b/packages/devs/eth/arm/at91/current/ChangeLog @@ -1,3 +1,8 @@ +2010-08-02 John Dallaway + + * src/if_at91.c: Invert test for NSR IDLE bit. Issue reported by + Will Wagner. + 2007-04-08 Uwe Kindler * cdl/at91_eth.cdl: Fixed typo. (Removed AT91RM9200 from @@ -11,19 +16,19 @@ 2007-03-23 John Eigelaar - * src/if_at91.c * include/at91_eth.cdl: Working implementation + * src/if_at91.c, include/at91_eth.cdl: Working implementation of a device driver for the AT91 EMAC device. 2006-06-02 Andrew Lunn - * src/if_at91.c * include/at91_eth.cdl: Partially implementation + * src/if_at91.c, include/at91_eth.cdl: Partially implementation of a device driver for the AT91 EMAC device. //=========================================================================== // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2010 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/devs/eth/arm/at91/current/src/if_at91.c b/packages/devs/eth/arm/at91/current/src/if_at91.c --- a/packages/devs/eth/arm/at91/current/src/if_at91.c +++ b/packages/devs/eth/arm/at91/current/src/if_at91.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -224,7 +224,7 @@ at91_write_phy(int reg_addr, int phy_add HAL_WRITE_UINT32(AT91_EMAC + AT91_EMAC_MAN, val); - /* Wait until IDLE bit in Network Status register is cleared */ + /* Wait until IDLE bit in Network Status register is set */ while (cnt < 1000000) { HAL_READ_UINT32((AT91_EMAC + AT91_EMAC_NSR), val); @@ -252,11 +252,11 @@ at91_read_phy(int reg_addr, int phy_addr HAL_WRITE_UINT32(AT91_EMAC + AT91_EMAC_MAN, val); - /* Wait until IDLE bit in Network Status register is cleared */ + /* Wait until IDLE bit in Network Status register is set */ do { HAL_READ_UINT32((AT91_EMAC + AT91_EMAC_NSR), val); - }while(val & AT91_EMAC_NSR_IDLE); + }while(!(val & AT91_EMAC_NSR_IDLE)); HAL_DELAY_US(50); diff --git a/packages/devs/eth/arm/lpc2xxx/current/ChangeLog b/packages/devs/eth/arm/lpc2xxx/current/ChangeLog --- a/packages/devs/eth/arm/lpc2xxx/current/ChangeLog +++ b/packages/devs/eth/arm/lpc2xxx/current/ChangeLog @@ -1,3 +1,13 @@ +2011-21-21 Ilija Kocho + + * cdl/lpc2xxx_eth.cdl, src/if_lpc2xxx.c: Fixed interrupt priority. + [Bugzilla 1001432 ] + +2011-02-01 Ilija Kocho + + * cdl/lpc2xxx_eth.cdl, src/if_lpc2xxx.c: Added support for + LPC17xx CPUs. + 2008-09-09 Uwe Kindler * LPC2xxx ethernet driver package created @@ -8,7 +18,7 @@ 2008-09-09 Uwe Kindler +# define EMAC_RAM_MEM_SECTION CYGBLD_ATTRIB_SECTION(CYGHWR_HAL_LPC_EMAC_MEM_SECTION) +# define EMAC_RAM_BASE (&emac_ahb_ram) +# define EMAC_RAM_SIZE sizeof(emac_ahb_ram) +# define EMAC_BLOCK_SIZE CYGHWR_HAL_LPC_EMAC_BLOCK_SIZE +#else // Backward compatibility +# define EMAC_RAM_BASE 0x7FE00000 +# define EMAC_RAM_SIZE 0x00004000 +# define EMAC_BLOCK_SIZE 0x600 +#endif // CYGHWR_HAL_LPC_EMAC_RAM_AHB // // EMAC Descriptor TX and RX Control fields @@ -345,6 +353,9 @@ typedef struct eth_ram_cfg_st volatile eth_buf_t rx_buf[CYGNUM_DEVS_ETH_ARM_LPC2XXX_RX_BUFS]; } eth_ram_cfg_t; +#ifdef CYGHWR_HAL_LPC_EMAC_RAM_AHB +volatile static eth_ram_cfg_t emac_ahb_ram EMAC_RAM_MEM_SECTION; +#endif #if CYGPKG_DEVS_ETH_ARM_LPC2XXX_DEBUG_LEVEL < 3 #if CYGPKG_DEVS_ETH_ARM_LPC2XXX_DEBUG_LEVEL > 0 diff --git a/packages/devs/eth/cortexm/a2f200_eval/current/ChangeLog b/packages/devs/eth/cortexm/a2f200_eval/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2f200_eval/current/ChangeLog @@ -0,0 +1,31 @@ + +2011-05-07 Christophe Coutand + + * include/a2fxxx_eval_eth.inl: + * cdl/a2fxxx_eval.cdl + New package --Ethernet driver for Actel Smartfusion Evaluation Board + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/eth/cortexm/a2f200_eval/current/cdl/a2f200_eval.cdl b/packages/devs/eth/cortexm/a2f200_eval/current/cdl/a2f200_eval.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2f200_eval/current/cdl/a2f200_eval.cdl @@ -0,0 +1,121 @@ +# ========================================================================== +# +# a2f200_eval.cdl +# +# Ethernet driver specifics for Actel Smartfusion (A2F200) board +# +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-05-04 +# Purpose: +# Description: Ethernet driver specifics for Actel Smartfusion (A2F200) +# board +# +#####DESCRIPTIONEND#### +# +# ========================================================================== + + +cdl_package CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL { + display "Actel Smartfusion (A2F200) kit Ethernet support" + description " + Ethernet driver specifics for Actel Smartfusion (A2F200) board" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_HAL_CORTEXM + active_if CYGPKG_HAL_CORTEXM_A2FXXX + + requires CYGPKG_DEVS_ETH_CORTEXM_A2FXXX + + include_dir cyg/io + + define_proc { + puts $::cdl_system_header "#define CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_CDL " + puts $::cdl_system_header "#define CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_INL " + } + + cdl_component CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0 { + display "Actel Smartfusion (A2F200) Ethernet port 0 driver" + flavor bool + default_value 1 + description " + This option includes the Ethernet device driver on the + Actel Smartfusion (A2F200) motherboard." + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + + cdl_option CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_NAME { + display "Device name for the Ethernet port 0 driver" + flavor data + default_value {"\"eth0\""} + description " + This option sets the name of the Ethernet device for the + Ethernet port 0." + } + + cdl_option CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_PHY_ADDRESS { + display "Ethernet PHY address of the Ethernet port 0 driver" + flavor data + default_value 0 + description " + This option sets the Ethernet PHY address of the Ethernet device for the + Ethernet port 0." + } + + cdl_component CYGSEM_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_SET_ESA { + display "Set the Ethernet station address" + flavor bool + default_value !CYGPKG_DEVS_ETH_TSEC_ETH_REDBOOT_HOLDS_ESA + description "Enabling this option will allow the Ethernet + station address to be forced to the value set by the + configuration. This may be required if the hardware does + not include a serial EEPROM for the ESA, and if RedBoot's + flash configuration support is not available." + + cdl_option CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_ESA { + display "The Ethernet station address" + flavor data + default_value {"{0x00, 0x20, 0x0E, 0x10, 0x39, 0x89}"} + description "The Ethernet station address" + } + } + } + +} diff --git a/packages/devs/eth/cortexm/a2f200_eval/current/include/a2f200_eval_eth.inl b/packages/devs/eth/cortexm/a2f200_eval/current/include/a2f200_eval_eth.inl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2f200_eval/current/include/a2f200_eval_eth.inl @@ -0,0 +1,129 @@ +//========================================================================== +// +// a2f200_eval.inl +// +// Ethernet driver specifics for Actel Smartfusion (A2F200) board +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-05-04 +// Purpose: +// Description: Ethernet driver specifics for Actel Smartfusion (A2F200) board +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +#ifndef CYGONCE_DEVS_A2F200_EVAL_ETH_INL +#define CYGONCE_DEVS_A2F200_EVAL_ETH_INL + +#include +#include + +// Make sure packet size is multiple of words +#define CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_RX \ + ((CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_RX + 0x00000003) & (0xfffffffc)) + +#define CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_TX \ + ((CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_TX + 0x00000003) & (0xfffffffc)) + +#define RxBUFSIZE ( CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_RxNUM*CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_RX ) +#define TxBUFSIZE ( CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM*CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_TX ) + +#ifdef CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0 + +#ifdef CYGPKG_DEVS_ETH_PHY +ETH_PHY_REG_LEVEL_ACCESS_FUNS(eth0_phy, + a2fxxx_phy_init, + NULL, + a2fxxx_mdio_write, + a2fxxx_mdio_read); +#endif + +// Declare TX / RX buffers +static cyg_uint32 a2fxxx_eth0_rxbufs[ RxBUFSIZE / 4 ]; +static cyg_uint32 a2fxxx_eth0_txbufs[ TxBUFSIZE / 4 ]; + +// Declare BDs +static struct a2fxxx_bd + a2fxxx_eth0_rxring[CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_RxNUM]; +static struct a2fxxx_bd + a2fxxx_eth0_txring[CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM]; + +static struct a2fxxx_eth_info a2fxxx_eth0_info = { +#ifdef CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_ESA + .mac_address = CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_ESA, +#endif + .base = CYGHWR_HAL_A2FXXX_MAC, + .base_bb = CYGHWR_HAL_A2FXXX_MAC_BB, + .if_num = 0, + .init_rxbufs = (cyg_uint8 *) &a2fxxx_eth0_rxbufs[0], + .init_txbufs = (cyg_uint8 *) &a2fxxx_eth0_txbufs[0], + .init_rxring = &a2fxxx_eth0_rxring[0], + .init_txring = &a2fxxx_eth0_txring[0], +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + .vector = CYGNUM_HAL_INTERRUPT_MAC0, +#endif +#ifdef CYGPKG_DEVS_ETH_PHY + .phy = ð0_phy, +#endif +}; + +ETH_DRV_SC(a2fxxx_eth0_sc, + &a2fxxx_eth0_info, + CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_NAME, + a2fxxx_eth_start, + a2fxxx_eth_stop, + a2fxxx_eth_control, + a2fxxx_eth_can_send, + a2fxxx_eth_send, + a2fxxx_eth_recv, + a2fxxx_eth_deliver, + a2fxxx_eth_poll, + a2fxxx_eth_int_vector); + +NETDEVTAB_ENTRY(a2fxxx_netdev0, + "a2fxxx_" CYGDAT_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0_NAME, + a2fxxx_eth_init, + &a2fxxx_eth0_sc); + +#endif// CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL_ETH0 + +#endif diff --git a/packages/devs/eth/cortexm/a2fxxx/current/ChangeLog b/packages/devs/eth/cortexm/a2fxxx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2fxxx/current/ChangeLog @@ -0,0 +1,31 @@ + +2011-05-07 Christophe Coutand + + * src/if_a2fxxx.c: + * cdl/a2fxxx_eth.cdl + New package -- Ethernet driver for Actel Smartfusion + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/eth/cortexm/a2fxxx/current/cdl/a2fxxx_eth.cdl b/packages/devs/eth/cortexm/a2fxxx/current/cdl/a2fxxx_eth.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2fxxx/current/cdl/a2fxxx_eth.cdl @@ -0,0 +1,152 @@ +#========================================================================== +# +# a2fxxx_eth.cdl +# +# Ethernet drivers for Actel AF2xxx Controller +# +#========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +#========================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-05-04 +# Purpose: +# Description: +# +#####DESCRIPTIONEND#### +# +#========================================================================*/ + +cdl_package CYGPKG_DEVS_ETH_CORTEXM_A2FXXX { + display "Actel Smartfusion Ethernet driver" + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_HAL_CORTEXM_A2FXXX + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + + include_dir net + description " + Ethernet drivers for Actel AF2xxx Controller." + + compile -library=libextras.a if_a2fxxx.c + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_PROMISCUOUS { + display "Promiscuous Mode" + flavor bool + default_value 0 + description " + Selecting this option will set the Ethernet MAC in promiscuous mode, all Ethernet + packets will be delivered to the application layer." + } + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_CHATTER { + display "Display status messages during Ethernet operations" + flavor bool + default_value 0 + description " + Selecting this option will cause the Ethernet driver to print status + messages as various Ethernet operations are undertaken." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ISR_PRIORITY { + display "Ethernet interrupt ISR priority" + flavor data + default_value CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ISR_SP + description " + Set the Ethernet controller ISR priority." + } + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS { + display "Maintain statistics at the MAC layer" + flavor bool + default_value 0 + description " + Selecting this option will cause the Ethernet driver to accumulate statistics + provided from the MAC layer." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_TX { + display "Buffer size" + flavor data + default_value 1536 + description " + This option specifies the size of the internal transmit buffers used + for the Actel A2Fxxx/Ethernet device." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_RX { + display "Buffer size" + flavor data + default_value 1536 + description " + This option specifies the size of the internal receive buffers used + for the Actel A2Fxxx/Ethernet device." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM { + display "Number of output buffers" + flavor data + legal_values 2 to 8 + default_value 4 + description " + This option specifies the number of output buffer packets + to be used for the Actel A2Fxxx/Ethernet device." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_RxNUM { + display "Number of input buffers" + flavor data + legal_values 2 to 8 + default_value 4 + description " + This option specifies the number of input buffer packets + to be used for the Actel A2Fxxx/Ethernet device." + } + + cdl_option CYGPKG_DEVS_ETH_CORTEXM_A2FXXX_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the Actel A2Fxxx Ethernet driver package. + These flags are used in addition to the set of global flags." + } +} + +# EOF a2fxxx_eth.cdl diff --git a/packages/devs/eth/cortexm/a2fxxx/current/src/if_a2fxxx.c b/packages/devs/eth/cortexm/a2fxxx/current/src/if_a2fxxx.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/a2fxxx/current/src/if_a2fxxx.c @@ -0,0 +1,1088 @@ +//========================================================================== +// +// if_a2fxxx.c +// +// Ethernet driver for Actel A2Fxxx device family +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-05-05 +// Purpose: Ethernet driver for Actel A2Fxxx device family +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include + +#ifdef CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_CDL +# include CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_CDL +#endif + +#include + +#ifdef CYGPKG_NET +# include +#endif + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef CYGPKG_DEVS_ETH_PHY +# include +#endif + +#include +#include + +static unsigned char enaddr[6]; + +// Buffer descriptor +struct a2fxxx_bd { + cyg_uint32 des0; + cyg_uint32 des1; + cyg_uint32 des2; + cyg_uint32 des3; + cyg_uint32 private; +}; + +// Some statistics +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS +typedef struct { + cyg_uint32 rx_mcast; + cyg_uint32 rx_des_err; + cyg_uint32 rx_collision; + cyg_uint32 rx_crc_err; + cyg_uint32 rx_too_long; + cyg_uint32 tx_fifo_underflow; + cyg_uint32 tx_frame_deferred; + cyg_uint32 tx_late_collision; + cyg_uint32 tx_no_carrier; + cyg_uint32 tx_loss_carrier; +} a2fxxx_eth_stats; +#endif + +// Internal data structure +struct a2fxxx_eth_info { + volatile struct a2fxxx_bd *txbd, + *rxbd; // Next Tx,Rx descriptor to use + volatile struct a2fxxx_bd *tbase, + *rbase; // First Tx,Rx descriptor + volatile struct a2fxxx_bd *tnext, + *rnext; // Next descriptor to check for interrupt + cyg_uint8 txactive; // Count of active Tx buffers + unsigned long txkey[CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM]; + cyg_uint8 mac_address[6]; // mac (hardware) address + cyg_uint8 *init_rxbufs; // Initial base pointer of RX buffers + cyg_uint8 *init_txbufs; // Initial base pointer of TX buffers + volatile struct a2fxxx_bd *init_rxring; // Initial base pointer of RX ring + volatile struct a2fxxx_bd *init_txring; // Initial base pointer of TX ring + cyg_uint32 rx_mac[48]; // Setup frame (192) bytes + cyg_uint32 valid_mac; +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS + a2fxxx_eth_stats stats; // MAC statistics +#endif + cyg_uint32 base; // MAC base address + cyg_uint32 base_bb; // MAC base address (bit-band) + cyg_uint8 if_num; +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_uint8 vector; + cyg_interrupt interrupt; + cyg_handle_t interrupt_handle; +#endif +#ifdef CYGPKG_DEVS_ETH_PHY + eth_phy_access_t *phy; +#endif +}; + +static void a2fxxx_phy_init(void); +static bool a2fxxx_mdio_read(cyg_int32, cyg_int32, cyg_uint16 *); +static void a2fxxx_mdio_write(cyg_int32, cyg_int32, cyg_uint16); + +static void a2fxxx_eth_int(struct eth_drv_sc *data); + +#ifdef CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_INL +# include CYGDAT_DEVS_CORTEXM_A2FXXX_ETH_INL +#endif + +#include + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_CHATTER +# define a2fxxx_eth_printf(args...) diag_printf(args) +#else +# define a2fxxx_eth_printf(args...) /* NOOP */ +#endif + +// For fetching the ESA from RedBoot +#include +#ifndef CONFIG_ESA +# define CONFIG_ESA 6 +#endif + +// ---------------------------------------------------------------- +// Definition +// +// + +#define RESET_FULL_DUPLEX 0x00000001 +#define RESET_100MB 0x00000002 + +#define MDIO_PREAMBLE_SEQ 0xffffffff +#define MDIO_START_SEQ 0x01 +#define MDIO_WRITE_SEQ 0x01 +#define MDIO_READ_SEQ 0x02 +#define MDIO_STOP_WRITE_SEQ 0x02 +#define MDIO_STOP_READ_SEQ 0x00 + +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TI_BB(_base_) \ + ( _base_ + ( CYGHWR_HAL_A2FXXX_MAC_CSR5 << 5 ) + ( 0*sizeof(cyg_uint32) ) ) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RI_BB(_base_) \ + ( _base_ + ( CYGHWR_HAL_A2FXXX_MAC_CSR5 << 5 ) + ( 6*sizeof(cyg_uint32) ) ) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_NIS_BB(_base_) \ + ( _base_ + ( CYGHWR_HAL_A2FXXX_MAC_CSR5 << 5 ) + ( 16*sizeof(cyg_uint32) ) ) + +#define CYGHWR_HAL_A2FXXX_MAC_PRIVATE_SENT BIT_(0) + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS +# define A2FXXX_INC_STATS(_x_) (qi->stats._x_++) +#endif + +// ---------------------------------------------------------------- +// MDIO API +// +// + +#define MDIO_XFER_BITS( reg, reg_val, sequence, length ) \ +{ \ + cyg_uint32 i; \ + for (i = (1 << (length-1)); i != 0; ) { \ + reg_val &= ~CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC; \ + HAL_WRITE_UINT32( reg, reg_val ); \ + HAL_DELAY_US(1); \ + if( i & sequence ) \ + reg_val |= ( CYGHWR_HAL_A2FXXX_MAC_CSR9_MDO ); \ + else \ + reg_val &= ( ~CYGHWR_HAL_A2FXXX_MAC_CSR9_MDO ); \ + HAL_WRITE_UINT32( reg, reg_val ); \ + reg_val |= CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC; \ + HAL_WRITE_UINT32( reg, reg_val ); \ + HAL_DELAY_US(1); \ + i = i >> 1; \ + } \ +} + +// +// Setup IOs +// +static void +a2fxxx_phy_init(void) +{ + a2fxxx_eth_printf("ETH A2Fxxx - PHY Init\n"); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_MDIO); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_MDC); +} + +// +// Start MDIO transfer -> 32 bits of preamble ('1'), start bits, +// transfer type bits, phy address and register address bits +// +static void +a2fxxx_mdio_xfer_start(cyg_bool rd, cyg_uint8 phy_addr, cyg_uint8 addr) +{ + cyg_uint32 csr9_reg = + (CYGHWR_HAL_A2FXXX_MAC + CYGHWR_HAL_A2FXXX_MAC_CSR9); + cyg_uint32 csr9_data, + bit_sequence; + + // Enable MDIO write + HAL_READ_UINT32(csr9_reg, csr9_data); + csr9_data |= + (CYGHWR_HAL_A2FXXX_MAC_CSR9_MDEN | CYGHWR_HAL_A2FXXX_MAC_CSR9_MDO | + CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC); + HAL_WRITE_UINT32(csr9_reg, csr9_data); + HAL_DELAY_US(1); + + // Send preamble bits + bit_sequence = MDIO_PREAMBLE_SEQ; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 32); + + // Send 2 start bits + bit_sequence = MDIO_START_SEQ; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 2); + + // Send transfer type bits + bit_sequence = (rd == true) ? MDIO_READ_SEQ : MDIO_WRITE_SEQ; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 2); + + // Send PHY address + bit_sequence = (cyg_uint32)phy_addr; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 5); + + // Send register address + bit_sequence = (cyg_uint32)addr; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 5); + + // Send TA sequence + if (rd == true) { + bit_sequence = MDIO_STOP_READ_SEQ; + csr9_data &= ~(CYGHWR_HAL_A2FXXX_MAC_CSR9_MDEN); + HAL_WRITE_UINT32(csr9_reg, csr9_data); + } else { + bit_sequence = MDIO_STOP_WRITE_SEQ; + } + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 2); + + // now we can read or write the 16 bits data ... +} + +// +// Read 16 bits data from MDIO interface +// +static cyg_bool +a2fxxx_mdio_xfer_read(cyg_uint16 *data) +{ + cyg_uint32 csr9_reg = + (CYGHWR_HAL_A2FXXX_MAC + CYGHWR_HAL_A2FXXX_MAC_CSR9); + cyg_uint32 csr9_data; + *data = 0; + int i; + + // Read MDIO register + HAL_READ_UINT32(csr9_reg, csr9_data); + + // Clock in the RX data + for (i = (1 << 15); i != 0;) { + csr9_data &= ~CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC; + HAL_WRITE_UINT32(csr9_reg, csr9_data); + HAL_DELAY_US(1); + HAL_READ_UINT32(csr9_reg, csr9_data); + if (csr9_data & CYGHWR_HAL_A2FXXX_MAC_CSR9_MDI) + *data |= i; + csr9_data |= CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC; + HAL_WRITE_UINT32(csr9_reg, csr9_data); + HAL_DELAY_US(1); + i = i >> 1; + } + + return true; +} + +// +// Write 16 bits data to MDIO interface +// +static bool +a2fxxx_mdio_xfer_write(cyg_uint16 data) +{ + cyg_uint32 csr9_reg = + (CYGHWR_HAL_A2FXXX_MAC + CYGHWR_HAL_A2FXXX_MAC_CSR9); + cyg_uint32 csr9_data, + bit_sequence; + + // Read MDIO register + HAL_READ_UINT32(csr9_reg, csr9_data); + + // Write data + bit_sequence = (cyg_uint32)data; + MDIO_XFER_BITS(csr9_reg, csr9_data, bit_sequence, 16); + + // Set back clock to low + csr9_data &= ~CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC; + HAL_WRITE_UINT32(csr9_reg, csr9_data); + + return true; +} + +// +// MDIO read register +// +static bool +a2fxxx_mdio_read(cyg_int32 addr, cyg_int32 phy_addr, cyg_uint16 *data) +{ + bool res; + a2fxxx_mdio_xfer_start(true, phy_addr, addr); + res = a2fxxx_mdio_xfer_read(data); + a2fxxx_eth_printf("ETH A2Fxxx - PHY %x(%x) - RX data %x\n", phy_addr, addr, + *data); + return res; +} + +// +// MDIO write register +// +static void +a2fxxx_mdio_write(cyg_int32 addr, cyg_int32 phy_addr, cyg_uint16 data) +{ + a2fxxx_mdio_xfer_start(false, phy_addr, addr); + a2fxxx_eth_printf("ETH A2Fxxx - PHY %x(%x) - TX data %x\n", phy_addr, addr, + data); + a2fxxx_mdio_xfer_write(data); +} + + +// ---------------------------------------------------------------- +// Ethernet driver +// +// +#define A2FXXX_RESET_MAC( qi ) \ +{ \ + cyg_uint32 swr_addr = \ + qi->base_bb + (CYGHWR_HAL_A2FXXX_MAC_CSR0 << 5); \ + cyg_uint32 swr_data = 0x1; \ + HAL_WRITE_UINT32(swr_addr, swr_data); \ + do { \ + HAL_READ_UINT32(swr_addr, swr_data); \ + } while (swr_data); \ +} + +// +// Deliver function (ex-DSR) handles the Ethernet [logical] processing +// +static void +a2fxxx_eth_deliver(struct eth_drv_sc *sc) +{ +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *)sc->driver_private; +#endif + a2fxxx_eth_int(sc); +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + // Allow interrupts to happen again + cyg_drv_interrupt_unmask(qi->vector); +#endif +} + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +// +// This ISR is called when the Ethernet interrupt occurs +// +static int +a2fxxx_eth_isr(cyg_vector_t vector, cyg_addrword_t data, + HAL_SavedRegisters * regs) +{ + a2fxxx_eth_printf("ETH A2Fxxx - ISR\n"); + cyg_drv_interrupt_mask(vector); + cyg_drv_interrupt_acknowledge(vector); + + return (CYG_ISR_HANDLED | CYG_ISR_CALL_DSR); // Run the DSR +} + +void +a2fxxx_eth_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + a2fxxx_eth_deliver((struct eth_drv_sc *)data); + // Allow interrupts to happen again + cyg_drv_interrupt_unmask(vector); +} +#endif + +// +// This function add MAC address to the list of allowed MAC address +// that the MAC layer can deliver to the application layer +// +static bool +a2fxxx_eth_add_mac ( struct eth_drv_sc *sc, cyg_uint8 *mac ) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *)sc->driver_private; + cyg_uint8 idx = 12; + struct a2fxxx_bd setup_bd; + cyg_uint32 i, csr4, csr5, csr6, csr7; + + // If no MAC to be added, just re-send the setup frame + if( mac != NULL ) + { + // no more room + if( qi->valid_mac == (cyg_uint32) -1 ) + return false; + + // Search empty spot + while( qi->valid_mac & i ){ + i = i << 1; + idx += 12; + } + + qi->rx_mac[idx+0] = mac[0]; + qi->rx_mac[idx+1] = mac[1]; + qi->rx_mac[idx+4] = mac[2]; + qi->rx_mac[idx+5] = mac[3]; + qi->rx_mac[idx+8] = mac[4]; + qi->rx_mac[idx+9] = mac[6]; + } + + a2fxxx_eth_printf("ETH A2Fxxx - Send setup frame for %s\n", sc->dev_name); + + // Stop TX + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + csr6 &= ~( CYGHWR_HAL_A2FXXX_MAC_CSR6_ST ); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + + // Wait until controller is halted + do { + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR5), csr5); + } while( ((csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_MASK) + != CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_STOP) ); + + // Backup the current BD / interrupt mask + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR4), csr4); + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR7), csr7); + + // Disable interrupt + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR7), 0); + + // Setup descriptor for setup frame + setup_bd.des0 = CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN; + setup_bd.des1 = CYGHWR_HAL_A2FXXX_MAC_TDES1_TER | + CYGHWR_HAL_A2FXXX_MAC_TDES1_SET | + CYGHWR_HAL_A2FXXX_MAC_TDES1_TBS1(192); + setup_bd.des2 = (cyg_uint32) &qi->rx_mac[0]; + setup_bd.des3 = (cyg_uint32) NULL; + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR4), + (cyg_uint32) &setup_bd); + + // Start transmission + csr6 |= ( CYGHWR_HAL_A2FXXX_MAC_CSR6_ST ); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + + // Poll for transmission completed + do { + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR5), csr5); + } while( ((csr5 & A2FXXX_MAC_TX_STATE_MASK) != A2FXXX_MAC_TX_STATE(SUSPEND)) ); + + // Stop transmission + csr6 &= ~( CYGHWR_HAL_A2FXXX_MAC_CSR6_ST ); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + + // Wait until controller is halted + do { + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR5), csr5); + } while( ((csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_MASK) + != CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_STOP) ); + + // Restore BD + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR4), csr4); + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_TI_BB(qi->base_bb), 1); + + // Restore interrupt mask + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR7), csr7); + + return true; +} + +// +// [re]Initialize the Ethernet controller +// Done separately since shutting down the device requires a +// full reconfiguration when re-enabling. +// when +static bool +a2fxxx_eth_setup(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + volatile struct a2fxxx_bd *rxbd, *txbd; + cyg_uint8 *RxBUF, *TxBUF; + cyg_uint32 csr0, csr6 = 0, csr11; + int i = 0; + + qi->valid_mac = 0; + qi->rx_mac[5] = enaddr[0]; + qi->rx_mac[4] = enaddr[1]; + qi->rx_mac[3] = enaddr[2]; + qi->rx_mac[2] = enaddr[3]; + qi->rx_mac[1] = enaddr[4]; + qi->rx_mac[0] = enaddr[5]; + + txbd = qi->init_txring; + rxbd = qi->init_rxring; + + /* Init Rx / Tx ring base */ + qi->tbase = qi->txbd = qi->tnext = txbd; + qi->rbase = qi->rxbd = qi->rnext = rxbd; + qi->txactive = 0; + + RxBUF = qi->init_rxbufs; + TxBUF = qi->init_txbufs; + + /* Initialize Rx BDs */ + for (i = 0; i < CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_RxNUM; i++) + { + rxbd->des0 = CYGHWR_HAL_A2FXXX_MAC_RDES0_OWN; + rxbd->des1 = + CYGHWR_HAL_A2FXXX_MAC_RDES1_RBS1(CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_RX); + rxbd->des2 = (cyg_uint32) RxBUF; + rxbd->des3 = (cyg_uint32) NULL; + RxBUF += CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_RX; + rxbd++; + } + rxbd--; + rxbd->des1 |= CYGHWR_HAL_A2FXXX_MAC_RDES1_RER; // Last buffer + + /* Initialize Tx BDs */ + for (i = 0; i < CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM; i++) + { + txbd->des1 = 0; + txbd->des2 = (cyg_uint32) TxBUF; + rxbd->des3 = (cyg_uint32) NULL; + txbd->private = 0; + TxBUF += CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ALIGN_BUFSIZE_TX; + txbd++; + } + txbd--; + txbd->des1 |= CYGHWR_HAL_A2FXXX_MAC_TDES1_TER; // Last buffer + + // Setup automatic polling + csr0 = CYGHWR_HAL_A2FXXX_MAC_CSR0_CLEAR | CYGHWR_HAL_A2FXXX_MAC_CSR0_TAP(3) | + CYGHWR_HAL_A2FXXX_MAC_CSR0_DSL(1); + + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR0), + (cyg_uint32) csr0); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR3), + (cyg_uint32) (qi->rbase)); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR4), + (cyg_uint32) (qi->tbase)); + + csr11 = CYGHWR_HAL_A2FXXX_MAC_CSR11_TT(7) | + CYGHWR_HAL_A2FXXX_MAC_CSR11_NTP(1) | + CYGHWR_HAL_A2FXXX_MAC_CSR11_RT(7) | + CYGHWR_HAL_A2FXXX_MAC_CSR11_NRP(1); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR11), (cyg_uint32) csr11); + + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + csr6 |= CYGHWR_HAL_A2FXXX_MAC_CSR6_CLEAR; + + csr6 |= ((flags & RESET_100MB) ? CYGHWR_HAL_A2FXXX_MAC_CSR6_TTM : 0x0) | + ((flags & RESET_FULL_DUPLEX) ? CYGHWR_HAL_A2FXXX_MAC_CSR6_FD : 0x0); + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_PROMISCUOUS + csr6 |= CYGHWR_HAL_A2FXXX_MAC_CSR6_PR; +#endif + + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + + return true; +} + +// +// This function is called to shut down the interface. +// +static void +a2fxxx_eth_stop(struct eth_drv_sc *sc) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *)sc->driver_private; + cyg_uint32 csr6, csr5; + + a2fxxx_eth_printf("ETH A2Fxxx - Stop\n"); + + // Stop RX / TX + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + csr6 &= ~( CYGHWR_HAL_A2FXXX_MAC_CSR6_SR | CYGHWR_HAL_A2FXXX_MAC_CSR6_ST ); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + + // Stall until controller is halted + do { + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR5), csr5); + } while( ((csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_MASK) != CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_STOP) && + ((csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_MASK) != CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_STOP)); + +} + +// +// Setup Ethernet IOs. +// +static void +a2fxxx_eth_io(void) +{ + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_TXD0); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_TXD1); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_RXD0); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_RXD1); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_TXEN); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_CRSDV); + CYGHWR_HAL_A2FXXX_GPIO_SET(CYGHWR_HAL_A2FXXX_MAC0_RXER); +} + +// +// Initialize the interface - performed at system startup +// This function must set up the interface, including arranging to +// handle interrupts, etc, so that it may be "started" cheaply later. +// +static bool +a2fxxx_eth_init(struct cyg_netdevtab_entry *tab) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance; + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *)sc->driver_private; + cyg_uint32 speed100 = 0, full_duplex = 0; + bool esa_ok; + cyg_uint16 phy_state = 0; + cyg_uint32 istate, csr7; + bool ret = true; + + a2fxxx_eth_printf("ETH A2Fxxx - Initialization for %s\n", sc->dev_name); + + // Release MAC controller + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE(CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(MAC)); + + // Setup IOs + a2fxxx_eth_io(); + + // Reset MAC + A2FXXX_RESET_MAC( qi ); + + HAL_DISABLE_INTERRUPTS(istate); + + a2fxxx_eth_stop(sc); + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_drv_interrupt_create(qi->vector, + CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ISR_PRIORITY, + (cyg_addrword_t)sc, // Data item passed to interrupt handler + (cyg_ISR_t *)a2fxxx_eth_isr, + (cyg_DSR_t *)eth_drv_dsr, + &qi->interrupt_handle, &qi->interrupt); + cyg_drv_interrupt_attach(qi->interrupt_handle); + cyg_drv_interrupt_unmask(qi->vector); +#endif + + esa_ok = CYGACC_CALL_IF_FLASH_CFG_OP(CYGNUM_CALL_IF_FLASH_CFG_GET, + "a2fxxx_esa", enaddr, CONFIG_ESA); + + if (!esa_ok) { + a2fxxx_eth_printf("ETH A2Fxxx - Warning! ESA unknown for %s\n", sc->dev_name); + memcpy(&enaddr, &qi->mac_address, sizeof(enaddr)); + } + +#ifdef CYGPKG_DEVS_ETH_PHY + if (!_eth_phy_init(qi->phy)) { + a2fxxx_eth_printf("ETH A2Fxxx - Failed to initialize PHY of %s\n", + sc->dev_name); + ret = false; + goto exit; + } + phy_state = _eth_phy_state(qi->phy); + + if (phy_state & ETH_PHY_STAT_100MB) + speed100 = 1; + if (phy_state & ETH_PHY_STAT_FDX) + full_duplex = 1; + if (phy_state & ETH_PHY_STAT_LINK) { + a2fxxx_eth_printf("Ethernet Mode (%s): %sMbps/%s\n", + sc->dev_name, + (speed100 ? "100" : "10"), + (full_duplex ? "Full" : "Half")); + } else { + a2fxxx_eth_printf("ETH A2Fxxx - NO LINK on %s\n", sc->dev_name); + } +#else + a2fxxx_eth_printf("ETH A2Fxxx - No PHY interface specified for %s\n", + sc->dev_name); + ret = false; + goto exit; +#endif + + if (!a2fxxx_eth_setup(sc, enaddr, (full_duplex ? RESET_FULL_DUPLEX + : 0x00000000) | (speed100 ? RESET_100MB : 0x00000000))) + { + ret = false; + goto exit; + } + + a2fxxx_eth_add_mac( sc, NULL ); + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_RI_BB(qi->base_bb), 1); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_TI_BB(qi->base_bb), 1); + + csr7 = ( CYGHWR_HAL_A2FXXX_MAC_CSR7_TIE | CYGHWR_HAL_A2FXXX_MAC_CSR7_RIE | + CYGHWR_HAL_A2FXXX_MAC_CSR7_NIE); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR7), csr7); + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_NIS_BB(qi->base_bb), + (cyg_uint32) 0x1); + + // Call upper layer initialization + (sc->funs->eth_drv->init)(sc, (unsigned char *) &enaddr); + +exit: + HAL_RESTORE_INTERRUPTS(istate); + return ret; +} + +// +// This function is called to "start up" the interface. It may be called +// multiple times, even when the hardware is already running. It will be +// called whenever something "hardware oriented" changes and should leave +// the hardware ready to send/receive packets. +// +static void +a2fxxx_eth_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *)sc->driver_private; + cyg_uint32 csr6; + + a2fxxx_eth_printf("ETH A2Fxxx - Start\n"); + + // Stop RX / TX + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); + csr6 |= ( CYGHWR_HAL_A2FXXX_MAC_CSR6_SR | CYGHWR_HAL_A2FXXX_MAC_CSR6_ST ); + HAL_WRITE_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR6), csr6); +} + +// +// This function is called for low level "control" operations +// +static int +a2fxxx_eth_control(struct eth_drv_sc *sc, unsigned long key, + void *data, int length) +{ + switch (key) + { + case ETH_DRV_SET_MAC_ADDRESS: + return 0; + break; +#ifdef ETH_DRV_SET_MC_ALL + case ETH_DRV_SET_MC_ALL: + case ETH_DRV_SET_MC_LIST: + // TODO + return 0; + break; +#endif + default: + return 1; + break; + } +} + +// +// This function is called to see if another packet can be sent. +// It should return the number of packets which can be handled. +// Zero should be returned if the interface is busy and can not send any more. +// +static int +a2fxxx_eth_can_send(struct eth_drv_sc *sc) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + + return (qi->txactive < CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM); +} + +// +// This routine is called to send data to the hardware. +static void +a2fxxx_eth_send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, + int sg_len, int total_len, unsigned long key) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + volatile struct a2fxxx_bd *txbd, *txfirst; + cyg_uint32 des1 = CYGHWR_HAL_A2FXXX_MAC_TDES1_TBS1(total_len); + volatile cyg_uint8 *bp; + cyg_int32 i, txindex, istate; + + a2fxxx_eth_printf("ETH A2Fxxx - transmit pkt, length %d\n", total_len); + + // Continue from current descriptor + txbd = txfirst = qi->txbd; + + if ( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN) == CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN ) { + a2fxxx_eth_printf("ETH A2Fxxx - Fatal error, no free BD for %s\n", + sc->dev_name); + a2fxxx_eth_printf("ETH A2Fxxx - Cannot transmit packet, active pkt in queue:%d\n", + qi->txactive); + return; + } + + // Set up buffer + bp = (cyg_uint8 *) txbd->des2; + for (i = 0; i < sg_len; i++) { + memcpy((void *) bp, (void *) sg_list[i].buf, sg_list[i].len); + bp += sg_list[i].len; + } + + if (txbd->des1 & CYGHWR_HAL_A2FXXX_MAC_TDES1_TER) { + des1 |= CYGHWR_HAL_A2FXXX_MAC_TDES1_TER; + } + txbd->des1 = + ( des1 | CYGHWR_HAL_A2FXXX_MAC_TDES1_LS | CYGHWR_HAL_A2FXXX_MAC_TDES1_FS | + CYGHWR_HAL_A2FXXX_MAC_TDES1_IC ); + txindex = ((unsigned long) txbd - (unsigned long) qi->tbase) + / sizeof(*txbd); + qi->txkey[txindex] = key; + + qi->txactive++; + + HAL_DISABLE_INTERRUPTS(istate); + // Give ownership to the MAC + txbd->des0 = CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN; + txbd->private = CYGHWR_HAL_A2FXXX_MAC_PRIVATE_SENT; + + // Remember the next buffer to try + if (qi->txbd->des1 & CYGHWR_HAL_A2FXXX_MAC_TDES1_TER){ + qi->txbd = qi->tbase; + } + else { + qi->txbd++; + } + HAL_RESTORE_INTERRUPTS(istate); +} + +// +// This function is called for low level "control" operations +// +static void +a2fxxx_eth_TxEvent(struct eth_drv_sc *sc) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + volatile struct a2fxxx_bd *txbd; + int key, txindex; + + txbd = qi->tnext; + + while ( ( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN ) == 0) && + (txbd->private & CYGHWR_HAL_A2FXXX_MAC_PRIVATE_SENT) ) + { + txindex = ((unsigned long) txbd - (unsigned long) qi->tbase) + / sizeof(*txbd); + if ((key = qi->txkey[txindex]) != 0) + { + qi->txkey[txindex] = 0; + (sc->funs->eth_drv->tx_done)(sc, key, 0); + } + qi->txactive--; +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS + if( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_LC) ) { + A2FXXX_INC_STATS(tx_late_collision); + } + if( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_NC) ) { + A2FXXX_INC_STATS(tx_no_carrier); + } + if( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_LO) ) { + A2FXXX_INC_STATS(tx_loss_carrier); + } + if( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_DE) ) { + A2FXXX_INC_STATS(tx_frame_deferred); + } + if( (txbd->des0 & CYGHWR_HAL_A2FXXX_MAC_TDES0_UF) ) { + A2FXXX_INC_STATS(tx_fifo_underflow); + } +#endif + txbd->private &= ~CYGHWR_HAL_A2FXXX_MAC_PRIVATE_SENT; + if (txbd->des1 & CYGHWR_HAL_A2FXXX_MAC_TDES1_TER){ + txbd = qi->tbase; + } else { + txbd++; + } + } + // Remember where we left off + qi->tnext = (struct a2fxxx_bd *) txbd; +} + +// +// Interrupt vector +// +static int +a2fxxx_eth_int_vector(struct eth_drv_sc *sc) +{ +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + return (qi->vector); +#else + return 0; +#endif +} + +// +// This function is called when a packet has been received. It's job is +// to prepare to unload the packet from the hardware. Once the length of +// the packet is known, the upper layer of the driver can be told. When +// the upper layer is ready to unload the packet, the internal function +// 'fec_eth_recv' will be called to actually fetch it from the hardware. +// +static void +a2fxxx_eth_RxEvent(struct eth_drv_sc *sc) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + volatile struct a2fxxx_bd *rxbd, *rxfirst; + int cnt_bd = 0; + cyg_int32 len; + + rxbd = rxfirst = qi->rnext; + while ((rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_OWN) == 0) + { + cnt_bd++; + qi->rxbd = rxbd; // Save for callback + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS + if( (rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_CE) ) { + A2FXXX_INC_STATS(rx_crc_err); + } + if( (rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_CS) ) { + A2FXXX_INC_STATS(rx_collision); + } + if( (rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_TL) ) { + A2FXXX_INC_STATS(rx_too_long); + } + if( (rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_MF) ) { + A2FXXX_INC_STATS(rx_mcast); + } + if( (rxbd->des0 & CYGHWR_HAL_A2FXXX_MAC_RDES0_DE) ) { + A2FXXX_INC_STATS(rx_des_err); + } +#endif + + len = (rxbd->des0 >> 16) & 0x3fff; + a2fxxx_eth_printf("ETH A2Fxxx - Receive pkt, length %d\n", len); + + (sc->funs->eth_drv->recv)(sc, len - 4); + if (rxbd->des1 & CYGHWR_HAL_A2FXXX_MAC_RDES1_RER){ + rxbd = qi->rbase; + } else { + rxbd++; + } + } + // Remember where we left off + qi->rnext = (struct a2fxxx_bd *) rxbd; +} + +// +// Interrupt processing +// +static void +a2fxxx_eth_int(struct eth_drv_sc *sc) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + cyg_uint32 csr5; + + // Check interrupt status + HAL_READ_UINT32( (qi->base + CYGHWR_HAL_A2FXXX_MAC_CSR5), csr5); + + if (( csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_TI ) != 0) + { + a2fxxx_eth_printf("%s - Transmit packet irq\n", sc->dev_name); + a2fxxx_eth_TxEvent(sc); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_TI_BB(qi->base_bb), 1); + } + + if (( csr5 & CYGHWR_HAL_A2FXXX_MAC_CSR5_RI ) != 0) + { + a2fxxx_eth_printf("%s - Receive packet irq\n", sc->dev_name); + a2fxxx_eth_RxEvent(sc); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MAC_CSR5_RI_BB(qi->base_bb), 1); + } +} + +// +// Polling function +// +static void +a2fxxx_eth_poll(struct eth_drv_sc *sc) +{ + a2fxxx_eth_int(sc); + CYGACC_CALL_IF_DELAY_US(500); +} + +static void +a2fxxx_eth_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + cyg_uint8 *bp; + int i; + + bp = (cyg_uint8 *) qi->rxbd->des2; + for (i = 0; i < sg_len; i++) + { + if (sg_list[i].buf != 0) + { + memcpy((void *) sg_list[i].buf, bp, sg_list[i].len); + bp += sg_list[i].len; + } + } + qi->rxbd->des0 |= CYGHWR_HAL_A2FXXX_MAC_RDES0_OWN; +} + + +// +// Display ETH statistics +// +#ifdef CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS +externC void +a2fxxx_disp_stats(struct eth_drv_sc *sc , char flag ) +{ + struct a2fxxx_eth_info *qi = (struct a2fxxx_eth_info *) sc->driver_private; + + diag_printf("Ethernet Statistics\n"); + + diag_printf("%17s %10d\n", + "RX MCAST", + qi->stats.rx_mcast); + diag_printf("%17s %10d\n", + "RX DESC ERR", + qi->stats.rx_des_err); + diag_printf("%17s %10d\n", + "RX COLLISION", + qi->stats.rx_collision); + diag_printf("%17s %10d\n", + "RX CRC ERR", + qi->stats.rx_crc_err); + diag_printf("%17s %10d\n", + "RX TOO LONG", + qi->stats.rx_too_long); + diag_printf("%17s %10d\n", + "TX FIFO UNDERFLOW", + qi->stats.tx_fifo_underflow); + diag_printf("%17s %10d\n", + "TX FRAME DEFERRED", + qi->stats.tx_frame_deferred); + diag_printf("%17s %10d\n", + "TX LATE COLLISION", + qi->stats.tx_late_collision); + diag_printf("%17s %10d\n", + "TX NO CARRIER", + qi->stats.tx_no_carrier); + diag_printf("%17s %10d\n", + "TX LOSS CARRIER", + qi->stats.tx_loss_carrier); +} +#endif + +// EOF if_a2fxxx.c diff --git a/packages/devs/eth/cortexm/stm32/current/ChangeLog b/packages/devs/eth/cortexm/stm32/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/stm32/current/ChangeLog @@ -0,0 +1,29 @@ +2010-11-04 Jerzy Dyrda + + * cdl/stm32_eth.cdl: + * src/if_stm32.c: + STM32 ETH driver package created. [ Bugzilla 1001219 ] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/eth/cortexm/stm32/current/cdl/stm32_eth.cdl b/packages/devs/eth/cortexm/stm32/current/cdl/stm32_eth.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/stm32/current/cdl/stm32_eth.cdl @@ -0,0 +1,241 @@ +#========================================================================== +# +# stm32_eth.cdl +# +# Ethernet drivers for ST STM32 Cores +# +#========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +#========================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Jerzy Dyrda (jerzdy@gmail.com) +# Contributors: +# Date: 2010-11-04 +# Purpose: +# Description: +# +#####DESCRIPTIONEND#### +# +#========================================================================*/ + +cdl_package CYGPKG_DEVS_ETH_CORTEXM_STM32 { + display "ST STM32 ethernet driver" + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_HAL_CORTEXM_STM32 + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + + include_dir net + description " + Ethernet driver for ST STM32 controler." + + compile -library=libextras.a if_stm32.c + + cdl_option CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL { + display "Driver debug output level" + flavor data + legal_values {0 1 2 3} + default_value 0 + description " + This option specifies the level of debug data output by + the STM32 ethernet device driver. A value of 0 signifies + no debug data output; 1 signifies normal debug data + output; 2 signifies extended debug data output; + and 3 signifies maximum debug data output (not + suitable when GDB and application are sharing an ethernet + port)." + } + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_STM32_INTF { + display "Type of interface to PHY" + flavor data + default_value {"RMII"} + legal_values {"MII" "RMII"} + description " + Type of interface used to connect with PHY : MII or RMII" + } + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_STM32_REMAP_PINS { + display "MII/RMII pins remapped" + flavor bool + default_value 0 + description " + MII/RMII interface signals are remapped" + } + + cdl_option CYGHWR_DEVS_ETH_CORTEXM_STM32_PHY_CLK_MCO { + display "Configure MCO as PHY clock" + default_value 0 + description " + Enable the MCO clock signals as clock for PHY." + } + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_STM32_RX_BUFS { + display "Number of RX buffers" + flavor data + default_value 6 + legal_values 2 to 16 + description " + Number of receive buffers. Each buffer is 1520 bytes in size" + } + + cdl_component CYGSEM_DEVS_ETH_CORTEXM_STM32_CHECKSUM { + display "TCP/IP checksums" + flavor none + no_define + active_if { is_active (CYGPKG_LWIP_CHECKSUMS) } + description " + STM32 Ethernet controller provides for hardware TCP/IP + header checksum generation and check." + + active_if CYGPKG_NET_LWIP + requires CYGPKG_LWIP_CHECKSUMS + + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN { + display "Generating the checksum for transmitting packets" + flavor bool + default_value 1 + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_GEN_IP } + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_GEN_UDP } + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_GEN_TCP } + description " + Generating and inserting the checksum of the IP, UDP, TCP + and ICMP protocols by hardware for transmitting packets." + } + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_STM32_RX_CHECKSUM_VER { + display "Verifying the checksum for receiving packets" + flavor bool + default_value 1 + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_CHECK_IP } + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_CHECK_UDP } + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + 0 == CYGIMP_LWIP_CHECKSUM_CHECK_TCP } + description " + Verifying the checksum of the IP, UDP, TCP and ICMP + protocols by hardware for receiving packets." + } + + cdl_option CYGSEM_ETH_LWIP_CHECKSUMS { + display "lwIP Checksum calculation" + flavor none + no_define + description " + Re-enable lwIP software checksum generation/check if + hardware generation/check is disabled." + + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN implies + CYGIMP_LWIP_CHECKSUM_GEN_IP == 1 } + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN implies + CYGIMP_LWIP_CHECKSUM_GEN_TCP == 1 } + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN implies + CYGIMP_LWIP_CHECKSUM_GEN_UDP == 1 } + + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_RX_CHECKSUM_VER implies + CYGIMP_LWIP_CHECKSUM_CHECK_IP == 1 } + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_RX_CHECKSUM_VER implies + CYGIMP_LWIP_CHECKSUM_CHECK_TCP == 1 } + requires { !CYGSEM_DEVS_ETH_CORTEXM_STM32_RX_CHECKSUM_VER implies + CYGIMP_LWIP_CHECKSUM_CHECK_UDP == 1 } + } + } + + cdl_component CYGPKG_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA { + display "RedBoot manages ESA initialization data" + flavor bool + default_value 0 + + active_if CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + active_if (CYGPKG_REDBOOT || CYGSEM_HAL_USE_ROM_MONITOR) + + description " + Enabling this option will allow the ethernet station + address to be acquired from RedBoot's configuration data, + stored in flash memory. It can be overridden individually + by the 'Set the ethernet station address' option for each + interface." + + + cdl_component CYGPKG_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA_VARS { + display "Export RedBoot command to set ESA in FLASH config" + flavor none + no_define + description " + This component contains options which, when enabled, allow + RedBoot to support the setting of the ESA in the FLASH + configuration. This can then subsequently be accessed by + applications using virtual vector calls if those applications + are also built with + CYGPKG_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA enabled." + + cdl_option CYGSEM_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA_ETH0 { + display "RedBoot manages ESA for eth0" + flavor bool + default_value 1 + active_if CYGSEM_REDBOOT_FLASH_CONFIG + active_if CYGPKG_REDBOOT_NETWORKING + } + } + } + + cdl_option CYGPKG_DEVS_ETH_CORTEXM_STM32_MACADDR { + display "Ethernet station (MAC) address for eth0" + flavor data + default_value {"0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC"} + description "The default ethernet station address. This is the + MAC address used when no value is found in the + RedBoot FLASH configuration field." + } + + cdl_option CYGPKG_DEVS_ETH_CORTEXM_STM32_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the ST STM32 ethernet driver package. + These flags are used in addition to the set of global flags." + } +} + +# EOF stm32_eth.cdl diff --git a/packages/devs/eth/cortexm/stm32/current/src/if_stm32.c b/packages/devs/eth/cortexm/stm32/current/src/if_stm32.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cortexm/stm32/current/src/if_stm32.c @@ -0,0 +1,1030 @@ +//========================================================================== +// +// if_stm32.c +// +// Fast ethernet device driver for ST STM32 controller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Jerzy Dyrda +// Contributors: +// Date: 2010-10-05 +// Purpose: +// Description: hardware driver for STM32 ETH +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include +#include +#if defined(CYGPKG_REDBOOT) + #include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//----------------------------------------------------------------------------- +// Maintenance and debug macros. + +// Set up the level of debug output +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 +#define DIAG_PRINTF(__fmt, ... ) \ + diag_printf("if_stm32:%s[%d]:" \ + _fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__ ); +#else +#define DIAG_PRINTF( __fmt, ... ) \ + while(0){} +#endif + +#define IF_STM32_INC_DESC(_curr_desc_, _max_desc_) \ + _curr_desc_++; \ + if (_curr_desc_ >= _max_desc_) { \ + _curr_desc_ = 0; \ + } + +//--------------------------------------------------------------------- +// Shorthand for some of the configuration options. +#define ETH_BASE CYGHWR_HAL_STM32_ETH +#define TDES_NUM (CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE >> 1) +#define RDES_NUM CYGNUM_DEVS_ETH_CORTEXM_STM32_RX_BUFS +#define ETH_MAX_PACKET_SIZE 1520 + +// Bits in status register of tx descriptor which are set up during +// initialization and remain unchanged while sending process +#define ETH_DMA_TDES_INIT_MASK \ + (CYGHWR_HAL_STM32_ETH_TDES0_TER | CYGHWR_HAL_STM32_ETH_TDES0_CIC_HPP) + +//Driver interface callbacks +#define _eth_drv_init(sc,mac) \ + (sc->funs->eth_drv->init)(sc,(unsigned char *)mac) +#define _eth_drv_tx_done(sc,key,status) \ + (sc->funs->eth_drv->tx_done)(sc,key,status) +#define _eth_drv_recv(sc,len) \ + (sc->funs->eth_drv->recv)(sc,len) + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +static cyg_uint32 stm32_eth_isr (cyg_vector_t vector, cyg_addrword_t data); +#endif + +// -------------------------------------------------------------- +// RedBoot configuration options for managing ESAs for us + +// Decide whether to have redboot config vars for it +#if defined(CYGSEM_REDBOOT_FLASH_CONFIG) && defined(CYGPKG_REDBOOT_NETWORKING) + #include + #include + + #ifdef CYGSEM_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA_ETH0 +RedBoot_config_option("Network hardware address [MAC] for eth0", + eth0_esa_data, + ALWAYS_ENABLED, true, + CONFIG_ESA, 0); + #endif + +#endif // CYGPKG_REDBOOT_NETWORKING && CYGSEM_REDBOOT_FLASH_CONFIG + +// and initialization code to read them +// - independent of whether we are building RedBoot right now: +#ifdef CYGPKG_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA + + #include + + #ifndef CONFIG_ESA + #define CONFIG_ESA (6) + #endif + + #define CYGHWR_DEVS_ETH_CORTEXM_STM32_GET_ESA( mac_address, ok ) \ + CYG_MACRO_START \ + ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET, \ + "eth0_esa_data", \ + mac_address, \ + CONFIG_ESA); \ + CYG_MACRO_END + +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_REDBOOT_HOLDS_ESA + +//============================================================================ + +// Private Data +typedef struct stm32_eth_dma_des_s { + cyg_uint32 status; // DES0 : Own and Status + cyg_uint32 ctrl_len; // DES1 : Ctrl/Buffer1 and Buffer2 length + cyg_uint32 buff1_addr; // DES2 : Buffer1 address + cyg_uint32 buff2_addr; // DES3 : Buffer2 address +} stm32_eth_dma_des_t; + +static cyg_uint8 __attribute__ ((aligned (4))) + rx_buff[RDES_NUM][ETH_MAX_PACKET_SIZE]; +static stm32_eth_dma_des_t __attribute__ ((aligned (4))) rdes[RDES_NUM]; + +static stm32_eth_dma_des_t __attribute__ ((aligned (4))) tdes[TDES_NUM]; + +// STM32 Ethernet private data +typedef struct stm32_eth_priv_s +{ + cyg_uint32 intr_vector; + char * esa_key; // RedBoot 'key' for device ESA + eth_phy_access_t *phy; + unsigned long tx_key[TDES_NUM]; + cyg_uint32 curr_tdes_idx; + cyg_uint32 prev_tdes_idx; + cyg_uint32 curr_rdes_idx; +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_interrupt intr; + cyg_handle_t intr_handle; +#endif +} stm32_eth_priv_t; + +__externC cyg_uint32 hal_stm32_hclk; +static cyg_uint32 mdc_clock_div; + +//============================================================================ +// PHY access bits and pieces + +static void stm32_init_phy(void) +{ + int stm32_hclk_mhz = hal_stm32_hclk / 1000000; + mdc_clock_div = 0; + + CYG_ASSERTC(CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ_CHECK(stm32_hclk_mhz)); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("init phy: hclk %d MHz\n", stm32_hclk_mhz); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + if (CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ_CHECK(stm32_hclk_mhz)) + mdc_clock_div = CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ(stm32_hclk_mhz); +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + else + DIAG_PRINTF("init phy : clk for ETH module out of supported range\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 +} + +// Write one of the PHY registers via the MII bus + +static void stm32_write_phy(int reg_addr, int phy_addr, unsigned short data) +{ + cyg_uint32 addr = 0; + volatile cyg_uint32 reg_val; + + CYG_ASSERTC(reg_addr >= 0 && reg_addr < 32); + CYG_ASSERTC(phy_addr >= 0 && phy_addr < 32); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("write phy: addr %d, reg %d, data 0x%x\n", + phy_addr, reg_addr, data); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + /* Prepare the ENET MIIA address */ + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_PA(phy_addr); + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_MR(reg_addr); + addr |= mdc_clock_div; + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_MW; + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_MB; + + do + { + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIAR, reg_val); + } while (reg_val & CYGHWR_HAL_STM32_ETH_MACMIIAR_MB); + + // Lauch MDIO transaction + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIDR, data); + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIAR, addr); +} + +// Read one of the PHY registers via the MII bus + +static bool stm32_read_phy(int reg_addr, int phy_addr, unsigned short *data) +{ + cyg_uint32 addr = 0; + volatile cyg_uint32 reg_val; + + CYG_ASSERTC(reg_addr >= 0 && reg_addr < 32); + CYG_ASSERTC(phy_addr >= 0 && phy_addr < 32); + + /* Prepare the ENET MIIA address */ + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_PA(phy_addr); + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_MR(reg_addr); + addr |= mdc_clock_div; + addr |= CYGHWR_HAL_STM32_ETH_MACMIIAR_MB; + + do + { + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIAR, reg_val); + } while (reg_val & CYGHWR_HAL_STM32_ETH_MACMIIAR_MB); + + // Lauch MDIO transaction + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIAR, addr); + + do + { + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIAR, reg_val); + } while (reg_val & CYGHWR_HAL_STM32_ETH_MACMIIAR_MB); + + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACMIIDR, *data); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("read phy: addr %d, reg %d, data 0x%x\n", + phy_addr, reg_addr, *data); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + return (true); +} + +ETH_PHY_REG_LEVEL_ACCESS_FUNS(stm32_phy, + stm32_init_phy, + NULL, + stm32_write_phy, + stm32_read_phy); + +//====================================================================== +// Receiver buffer handling + +// Initialize the receiver buffers and descriptors in ring mode + +static void stm32_rdes_init(void) +{ + int ii; + + for (ii = 0; ii < RDES_NUM; ii++) { + rdes[ii].status = (cyg_uint32) CYGHWR_HAL_STM32_ETH_RDES0_OWN; + rdes[ii].ctrl_len = (cyg_uint32) ETH_MAX_PACKET_SIZE; + rdes[ii].buff1_addr = (cyg_uint32) &rx_buff[ii][0]; + } + + // End of ring + rdes[RDES_NUM - 1].ctrl_len |= + (cyg_uint32) CYGHWR_HAL_STM32_ETH_RDES1_RER; + + /* Set Receive Desciptor List Address Register */ + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMARDLAR, + ((cyg_uint32) &rdes[0])); +} + +//====================================================================== +// Transmit buffer handling + +// Initialize the transmit buffer descriptors in ring mode + +static void stm32_tdes_init(void) +{ + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN + int ii; + + for (ii = 0; ii < TDES_NUM; ii++) { + tdes[ii].status = (cyg_uint32) CYGHWR_HAL_STM32_ETH_TDES0_CIC_HPP; + } +#endif + + // End of ring + tdes[TDES_NUM - 1].status |= (cyg_uint32) CYGHWR_HAL_STM32_ETH_TDES0_TER; + + /* Set Receive Desciptor List Address Register */ + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMATDLAR, + ((cyg_uint32) &tdes[0])); +} + +//====================================================================== +// Initialization code + +// Set a specific address match to a given address. Packets received which +// match this address will be passed on. + +static void stm32_set_mac(cyg_uint8 * enaddr) +{ + cyg_uint32 hi, lo; + + lo = ((enaddr[3] << 24) | (enaddr[2] << 16) | + (enaddr[1] << 8) | (enaddr[0])); + + hi = ((enaddr[5] << 8) | (enaddr[4])); + + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACA0LR, lo); + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_MACA0HR, hi); +} + +// Enable and Disable of the receiver and transmitter. +// Initialize the interface. This configures the interface ready for use. +// Interrupts are grabbed etc. This means the start function has +// little to do except enable the receiver + +static bool stm32_eth_init(struct cyg_netdevtab_entry *tab) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance; + stm32_eth_priv_t *priv = (stm32_eth_priv_t *)sc->driver_private; +#ifdef CYGHWR_DEVS_ETH_ARM_STM32_GET_ESA + bool esa_ok = false; +#endif + unsigned char enaddr[6] = { CYGPKG_DEVS_ETH_CORTEXM_STM32_MACADDR}; + volatile cyg_uint32 reg_val; + unsigned short phy_state = 0; + +#ifdef CYGHWR_DEVS_ETH_CORTEXM_STM32_PHY_CLK_MCO + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MCO); +#endif + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Initialising ETH module\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + // Enable clock for ETH module + HAL_READ_UINT32(CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_AHB1ENR, reg_val); + reg_val |= BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMAC) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACTX) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACRX) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACPTP); + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_AHB1ENR, reg_val); + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + HAL_READ_UINT32(CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_APB2ENR, reg_val); + reg_val |= BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_SYSCFG); + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_APB2ENR, reg_val); +#endif + hal_delay_us(100); + + // Configure the GPIO ports +#ifdef CYGSEM_DEVS_ETH_CORTEXM_STM32_INTF_MII + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Initialise MII interface\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + // Configure MAC interface in MII mode +#ifdef CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + HAL_READ_UINT32(CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_AFIO_MAPR, reg_val); + reg_val &= ~CYGHWR_HAL_STM32_AFIO_MAPR_ETH_RMII; + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_AFIO_MAPR, reg_val); +#else + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_SYSCFG + CYGHWR_HAL_STM32_SYSCFG_PMC, + CYGHWR_HAL_STM32_SYSCFG_PMC_MII); +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TX_CLK); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RX_CLK); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_MDIO); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_MDC); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_COL); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TX_CRS); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TX_EN); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TXD0); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TXD1); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TXD2); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_TXD3); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RX_ER); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RX_DV); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RXD0); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RXD1); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RXD2); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_MII_RXD3); +#elif defined(CYGSEM_DEVS_ETH_CORTEXM_STM32_INTF_RMII) + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Initialise RMII interface\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + // Configure MAC interface in RMII mode +#ifdef CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + HAL_READ_UINT32(CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_AFIO_MAPR, reg_val); + reg_val |= CYGHWR_HAL_STM32_AFIO_MAPR_ETH_RMII; + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_AFIO_MAPR, reg_val); +#else + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_SYSCFG + CYGHWR_HAL_STM32_SYSCFG_PMC, + CYGHWR_HAL_STM32_SYSCFG_PMC_RMII); +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_REF_CLK); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_MDIO); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_MDC); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_TX_EN); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_TXD0); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_TXD1); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_CRS_DV); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_RXD0); + CYGHWR_HAL_STM32_GPIO_SET(CYGHWR_HAL_STM32_ETH_RMII_RXD1); +#else +#error "Neither MII nor RMII interface defined" +#endif // CYGSEM_DEVS_ETH_CORTEXM_STM32_INTF_MII + +#ifdef CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + HAL_WRITE_UINT32 (CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_RCC_AHBRSTR, + CYGHWR_HAL_STM32_RCC_AHBRSTR_ETHMACRST); + hal_delay_us(1000); + HAL_WRITE_UINT32 (CYGHWR_HAL_STM32_AFIO + CYGHWR_HAL_STM32_RCC_AHBRSTR, 0); +#else + HAL_WRITE_UINT32 (CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_AHB1RSTR, + CYGHWR_HAL_STM32_RCC_AHB1RSTR_ETHMACRST); + hal_delay_us(1000); + HAL_WRITE_UINT32 (CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_AHB1RSTR, 0); +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Reset ETH DMA module\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + // Software reset of ETH module and wait until it will be done + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMABMR, + CYGHWR_HAL_STM32_ETH_DMABMR_SR); + + do { + hal_delay_us(100); + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMABMR, reg_val); + } while (reg_val & CYGHWR_HAL_STM32_ETH_DMABMR_SR); + + // Setup the PHY + CYG_ASSERTC(priv->phy); + + if (!_eth_phy_init(priv->phy)) + { + return (false); + } + + reg_val = 0; + + // Get the current mode and print it + phy_state = _eth_phy_state(priv->phy); + + if ((phy_state & ETH_PHY_STAT_LINK) != 0) { + //Connection mode + if((phy_state & ETH_PHY_STAT_FDX)) { +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Link type : Full Duplex\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + reg_val |= CYGHWR_HAL_STM32_ETH_MACCR_DM; + } else { +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Link type : Half Duplex\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + reg_val &= ~(CYGHWR_HAL_STM32_ETH_MACCR_DM); + } + //Connection speed + if((phy_state & ETH_PHY_STAT_100MB)) { +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Link speed : 100Mbits/s\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + reg_val |= CYGHWR_HAL_STM32_ETH_MACCR_FES; + } else { +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Link speed : 10Mbits/s\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + reg_val &= ~(CYGHWR_HAL_STM32_ETH_MACCR_FES); + } + } else { +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("No Link\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + } + // ------------------- Configure MAC module ------------------- + + reg_val |= CYGHWR_HAL_STM32_ETH_MACCR_RD; + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_STM32_RX_CHECKSUM_VER + reg_val |= CYGHWR_HAL_STM32_ETH_MACCR_IPCO; +#endif + + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACCR, reg_val); + + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACFFR, + (CYGHWR_HAL_STM32_ETH_MACFFR_HU | + CYGHWR_HAL_STM32_ETH_MACFFR_HM | + CYGHWR_HAL_STM32_ETH_MACFFR_HPF)); + + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACHTHR, 0); + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACHTLR, 0); + + // Give the MAC its ethernet address + stm32_set_mac(enaddr); + + // ------------------- Configure DMA module ------------------- + +#ifdef CYGSEM_DEVS_ETH_CORTEXM_STM32_TX_CHECKSUM_GEN + // The checksum generation is enabled only if the + // Transmit FIFO is configured for Store-and-forward mode + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, + CYGHWR_HAL_STM32_ETH_DMAOMR_TSF); +#else + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, + CYGHWR_HAL_STM32_ETH_DMAOMR_TTC(3) /* TTC = 256 */); +#endif + + // Clear any pending interrupt and disable it + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, 0x1FFFF); + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAIER, 0x0); + + // If we are building an interrupt enabled version, install the + // interrupt handler +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Installing Interrupts on IRQ %d\n", priv->intr_vector); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + cyg_drv_interrupt_create(priv->intr_vector, + 4, + (cyg_addrword_t)sc, + stm32_eth_isr, + eth_drv_dsr, + &priv->intr_handle, + &priv->intr); + + cyg_drv_interrupt_attach(priv->intr_handle); + cyg_drv_interrupt_unmask(priv->intr_vector); +#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + +#ifdef CYGHWR_DEVS_ETH_ARM_STM32_GET_ESA + // Get MAC address from RedBoot configuration variables + CYGHWR_DEVS_ETH_ARM_STM32_GET_ESA(&enaddr[0], esa_ok); + // If this call fails myMacAddr is unchanged and MAC address from + // CDL is used + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + if (!esa_ok) + { + // Can't figure out ESA + DIAG_PRINTF("Warning! ESA unknown\n"); + } +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 +#endif // CYGHWR_DEVS_ETH_ARM_STM32_GET_ESA + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("MAC addr: %02x:%02x:%02x:%02x:%02x:%02x\n", + enaddr[0],enaddr[1],enaddr[2], + enaddr[3],enaddr[4],enaddr[5]); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + + // Initialize Rx/Tx Descriptors list + stm32_tdes_init(); + stm32_rdes_init(); + + // Enable transmit and receive state machine of the MAC + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACCR, reg_val); + reg_val |= CYGHWR_HAL_STM32_ETH_MACCR_TE | + CYGHWR_HAL_STM32_ETH_MACCR_RE; + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_MACCR, reg_val); + + // Flush Transmit FIFO + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); + reg_val |= CYGHWR_HAL_STM32_ETH_DMAOMR_FTF; + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); + + do { + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); + } while (reg_val & CYGHWR_HAL_STM32_ETH_DMAOMR_FTF); + + // Initialize the upper layer driver +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Initialize the upper layer driver\n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + _eth_drv_init(sc,enaddr); + + return (true); +} + +// This function is called to stop the interface. + +static void stm32_eth_stop(struct eth_drv_sc *sc) +{ + volatile cyg_uint32 reg_val; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Stoping \n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, 0x1FFFF); + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAIER, 0x0); + + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); + reg_val &= ~(CYGHWR_HAL_STM32_ETH_DMAOMR_SR | + CYGHWR_HAL_STM32_ETH_DMAOMR_ST); + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); +} + +// This function is called to "start up" the interface. It may be called +// multiple times, even when the hardware is already running. + +static void stm32_eth_start(struct eth_drv_sc *sc, unsigned char *enaddr, + int flags) +{ + volatile cyg_uint32 reg_val; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("Starting \n"); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + + // Enable the interrupts we are interested in + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAIER, + (CYGHWR_HAL_STM32_ETH_DMAIER_RIE | + CYGHWR_HAL_STM32_ETH_DMAIER_TIE | + CYGHWR_HAL_STM32_ETH_DMAIER_NISE)); + + // Start DMA transmission and reception + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); + reg_val |= CYGHWR_HAL_STM32_ETH_DMAOMR_SR | + CYGHWR_HAL_STM32_ETH_DMAOMR_ST; + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMAOMR, reg_val); +} + +// This function is called for low level "control" operations + +static int stm32_eth_control(struct eth_drv_sc *sc, unsigned long key, + void *data, int length) +{ + switch (key) + { + case ETH_DRV_SET_MAC_ADDRESS: + if(length >= ETHER_ADDR_LEN) { + stm32_eth_stop(sc); + cyg_uint8 * enaddr = (cyg_uint8 *)data; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("Change MAC addr: %02x:%02x:%02x:%02x:%02x:%02x\n", + enaddr[0],enaddr[1],enaddr[2], + enaddr[3],enaddr[4],enaddr[5]); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + stm32_set_mac(enaddr); + stm32_eth_start(sc,enaddr,0); + return 0; + } + return 1; + +#ifdef CYGPKG_NET + case ETH_DRV_GET_IF_STATS: + { + // todo + return 1; + } +#endif + + default: +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Unsupported key %lx\n", key); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + return 1; + } +} + +// This routine is called to receive data from the hardware + +static void stm32_eth_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, + int sg_len) +{ + stm32_eth_priv_t *priv = (stm32_eth_priv_t *)sc->driver_private; + int ii, rx_frame_length; + cyg_uint32 rx_buffer_pos = 0, data_to_copy; + cyg_uint8 * psg_buf, * prx_buff; + + prx_buff = (cyg_uint8 *) rx_buff[priv->curr_rdes_idx]; + rx_frame_length = + CYGHWR_HAL_STM32_ETH_RDES0_FL(rdes[priv->curr_rdes_idx].status) - 4; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("current rx desc %d, sg_len %d, total_len %d\n", + priv->curr_rdes_idx, sg_len, rx_frame_length); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + for(ii = 0; (ii < sg_len) && (rx_frame_length > 0); ii++) { + psg_buf = (cyg_uint8 *)(sg_list[ii].buf); + data_to_copy = rx_frame_length > sg_list[ii].len ? + sg_list[ii].len : rx_frame_length; + memcpy(psg_buf, &prx_buff[rx_buffer_pos], data_to_copy); + // frame copied + rx_buffer_pos += data_to_copy; + rx_frame_length -= data_to_copy; + } +} + +// This function is called to see if another packet can be sent. + +static int stm32_eth_can_send(struct eth_drv_sc *sc) +{ + stm32_eth_priv_t *priv = (stm32_eth_priv_t *)sc->driver_private; + + return ((tdes[priv->curr_tdes_idx].status & + CYGHWR_HAL_STM32_ETH_TDES0_OWN) ? 0 : 1); +} + +// This routine is called to send data to the hardware - zero copying version + +static void stm32_eth_send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, + int sg_len, int total_len, unsigned long key) +{ + stm32_eth_priv_t *priv = (stm32_eth_priv_t *) sc->driver_private; + cyg_uint8 sg_item = 0, sg_len_even, sg_len_rest; + volatile cyg_uint32 reg_val; + + CYG_ASSERT(total_len <= ETH_MAX_PACKET_SIZE, "packet too long"); + + sg_len_even = sg_len / 2; + sg_len_rest = sg_len % 2; + + // Look if it's enough numer of free descriptors + CYG_ASSERT((sg_len_even + sg_len_rest) < + ((priv->curr_tdes_idx >= priv->prev_tdes_idx) ? + (TDES_NUM - (priv->curr_tdes_idx - priv->prev_tdes_idx)) : + (priv->prev_tdes_idx - priv->curr_tdes_idx)), + "not enough number of descriptors"); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("current tx desc %d, sg_len %d, total_len %d\n", + priv->curr_tdes_idx, sg_len, total_len); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + for(sg_item = 0; sg_item < 2 * sg_len_even; sg_item += 2) { + tdes[priv->curr_tdes_idx].status &= ETH_DMA_TDES_INIT_MASK; + tdes[priv->curr_tdes_idx].buff1_addr = sg_list[sg_item].buf; + tdes[priv->curr_tdes_idx].ctrl_len = + CYGHWR_HAL_STM32_ETH_TDES1_TBS1(sg_list[sg_item].len); + tdes[priv->curr_tdes_idx].buff2_addr = sg_list[sg_item + 1].buf; + tdes[priv->curr_tdes_idx].ctrl_len |= + CYGHWR_HAL_STM32_ETH_TDES1_TBS2(sg_list[sg_item + 1].len); + + if (sg_item == 0) + tdes[priv->curr_tdes_idx].status |= + CYGHWR_HAL_STM32_ETH_TDES0_FS; + + if ((sg_item == sg_len - 2) && !sg_len_rest) { + tdes[priv->curr_tdes_idx].status |= + CYGHWR_HAL_STM32_ETH_TDES0_IC | + CYGHWR_HAL_STM32_ETH_TDES0_LS; + } + // All flags set thus gives the buffer back to DMA + tdes[priv->curr_tdes_idx].status |= + CYGHWR_HAL_STM32_ETH_TDES0_OWN; + priv->tx_key[priv->curr_tdes_idx] = key; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("tx desc %d : status %x, len1 %d, len2 %d\n", + priv->curr_tdes_idx, tdes[priv->curr_tdes_idx].status, + sg_list[sg_item].len, sg_list[sg_item + 1].len); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + IF_STM32_INC_DESC(priv->curr_tdes_idx, TDES_NUM); + } + + if (sg_len_rest) { + tdes[priv->curr_tdes_idx].status &= ETH_DMA_TDES_INIT_MASK; + tdes[priv->curr_tdes_idx].buff1_addr = sg_list[sg_item].buf; + tdes[priv->curr_tdes_idx].ctrl_len = + CYGHWR_HAL_STM32_ETH_TDES1_TBS1(sg_list[sg_item].len); + tdes[priv->curr_tdes_idx].buff2_addr = 0; + if (sg_item == 0) // Only one sg element to send + tdes[priv->curr_tdes_idx].status |= + CYGHWR_HAL_STM32_ETH_TDES0_FS; + + // All flags set thus gives the buffer back to DMA + tdes[priv->curr_tdes_idx].status |= + CYGHWR_HAL_STM32_ETH_TDES0_OWN | + CYGHWR_HAL_STM32_ETH_TDES0_IC | + CYGHWR_HAL_STM32_ETH_TDES0_LS; + priv->tx_key[priv->curr_tdes_idx] = key; + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("tx desc %d : status %x, len1 %d\n", + priv->curr_tdes_idx, tdes[priv->curr_tdes_idx].status, + sg_list[sg_item].len); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + IF_STM32_INC_DESC(priv->curr_tdes_idx, TDES_NUM); + } + + // Starts desc refetch by DMA + HAL_READ_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, reg_val); + if (reg_val & CYGHWR_HAL_STM32_ETH_DMASR_TBUS) { + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, + CYGHWR_HAL_STM32_ETH_DMASR_TBUS); + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMATPDR, 0); + } + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("packets put into dma - number of used desc %d\n", + sg_len_even + sg_len_rest); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 +} + +//====================================================================== + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +static cyg_uint32 stm32_eth_isr (cyg_vector_t vector, cyg_addrword_t data) +{ + volatile cyg_uint32 status_reg; + cyg_uint32 status = CYG_ISR_HANDLED; + + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, status_reg); + if (status_reg & CYGHWR_HAL_STM32_ETH_DMASR_NIS) { + cyg_interrupt_mask(vector); + status |= CYG_ISR_CALL_DSR; + } +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + // It seems that comes other eth int even it's nothing more + // enabled than Trans/Recv interrupt + else { + DIAG_PRINTF("unexpected eth int - reason 0x%x\n", + status_reg); + } +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + + cyg_interrupt_acknowledge(vector); + + return(status); +} +#endif + +static void stm32_eth_deliver(struct eth_drv_sc *sc) +{ + stm32_eth_priv_t *priv = (stm32_eth_priv_t *) sc->driver_private; + volatile cyg_uint32 status_reg; + cyg_uint32 rx_frame_length; + + // Get the interrupt status + HAL_READ_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, status_reg); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + DIAG_PRINTF("DMA status 0x%x\n", status_reg); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 1 + + if (status_reg & CYGHWR_HAL_STM32_ETH_DMASR_RS) { + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, + CYGHWR_HAL_STM32_ETH_DMASR_NIS | + CYGHWR_HAL_STM32_ETH_DMASR_RS); + + // check if desc is ready to service - just in case + while (!(rdes[priv->curr_rdes_idx].status & + CYGHWR_HAL_STM32_ETH_RDES0_OWN)) { + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("New packet in rx desc %d\n", + priv->curr_rdes_idx); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + // and eth frame is ok + if (((rdes[priv->curr_rdes_idx].status & + CYGHWR_HAL_STM32_ETH_RDES0_ES) == 0) && + ((rdes[priv->curr_rdes_idx].status & + CYGHWR_HAL_STM32_ETH_RDES0_FS) != 0) && + ((rdes[priv->curr_rdes_idx].status & + CYGHWR_HAL_STM32_ETH_RDES0_LS) != 0) && + (CYGHWR_HAL_STM32_ETH_RDES0_FL( + rdes[priv->curr_rdes_idx].status) != 0)) { + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("Rcv packet status 0x%x\n", + rdes[priv->curr_rdes_idx].status); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + rx_frame_length = + CYGHWR_HAL_STM32_ETH_RDES0_FL( + rdes[priv->curr_rdes_idx].status) - 4; + _eth_drv_recv(sc, rx_frame_length); + } +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + else { + DIAG_PRINTF("Error in rcv frame - reason 0x%x\n", + rdes[priv->curr_rdes_idx].status); + } +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + + // Starts desc refetch by DMA + if (status_reg & CYGHWR_HAL_STM32_ETH_DMASR_RBUS) { + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, + CYGHWR_HAL_STM32_ETH_DMASR_RBUS); + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMARPDR, 0); + } + + // Desc handeled + rdes[priv->curr_rdes_idx].status = CYGHWR_HAL_STM32_ETH_RDES0_OWN; + IF_STM32_INC_DESC(priv->curr_rdes_idx, RDES_NUM); + } + } + + if (status_reg & CYGHWR_HAL_STM32_ETH_DMASR_TS) { + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, + CYGHWR_HAL_STM32_ETH_DMASR_NIS | CYGHWR_HAL_STM32_ETH_DMASR_TS); + + // Walk throug descriptor list until find serviced last segment + while ((priv->prev_tdes_idx != priv->curr_tdes_idx) && + !(tdes[priv->prev_tdes_idx].status & + CYGHWR_HAL_STM32_ETH_TDES0_OWN)) { + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + DIAG_PRINTF("Sent packet (key 0x%x) from desc %d with status 0x%x\n", + (cyg_uint32) priv->tx_key[priv->prev_tdes_idx], + priv->prev_tdes_idx, tdes[priv->prev_tdes_idx].status); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 2 + + // Starts desc refetch by DMA if it happens error during transmit + if (tdes[priv->prev_tdes_idx].status & + CYGHWR_HAL_STM32_ETH_TDES0_ES) { + HAL_WRITE_UINT32(ETH_BASE + CYGHWR_HAL_STM32_ETH_DMASR, + CYGHWR_HAL_STM32_ETH_DMASR_TUS); + HAL_WRITE_UINT32 (ETH_BASE + CYGHWR_HAL_STM32_ETH_DMATPDR, 0); + +#if CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + DIAG_PRINTF("Error in sending - reason 0x%x\n", + tdes[priv->prev_tdes_idx].status); +#endif // CYGPKG_DEVS_ETH_CORTEXM_STM32_DEBUG_LEVEL > 0 + } + + if (tdes[priv->prev_tdes_idx].status & + CYGHWR_HAL_STM32_ETH_TDES0_LS) { + if (!(tdes[priv->prev_tdes_idx].status & + CYGHWR_HAL_STM32_ETH_TDES0_ES)) + _eth_drv_tx_done(sc, + priv->tx_key[priv->prev_tdes_idx], 0); + else + _eth_drv_tx_done(sc, + priv->tx_key[priv->prev_tdes_idx], -1); + } + IF_STM32_INC_DESC(priv->prev_tdes_idx, TDES_NUM); + } + } + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_interrupt_unmask(priv->intr_vector); +#endif +} + +// routine called to handle ethernet controller in polled mode +static void stm32_eth_poll(struct eth_drv_sc *sc) +{ + /* Service the buffers */ + stm32_eth_deliver(sc); +} + +static int stm32_eth_int_vector(struct eth_drv_sc *sc) +{ + return(CYGNUM_HAL_INTERRUPT_ETH); +} + +stm32_eth_priv_t stm32_priv_data = +{ + .intr_vector = CYGNUM_HAL_INTERRUPT_ETH, + .phy = &stm32_phy +}; + +ETH_DRV_SC(stm32_sc, + &stm32_priv_data, // Driver specific data + "eth0", // Name for this interface + stm32_eth_start, + stm32_eth_stop, + stm32_eth_control, + stm32_eth_can_send, + stm32_eth_send, + stm32_eth_recv, + stm32_eth_deliver, + stm32_eth_poll, + stm32_eth_int_vector); + +NETDEVTAB_ENTRY(stm32_netdev, + "stm32", + stm32_eth_init, + &stm32_sc); + +// EOF if_stm32.c diff --git a/packages/devs/eth/freescale/enet/current/ChangeLog b/packages/devs/eth/freescale/enet/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/eth/freescale/enet/current/ChangeLog @@ -0,0 +1,47 @@ +2013-04-01 Ilija Kocho + + * src/if_freescale_enet.c: Add clock gating enable. [ Bugzilla 1001814 ] + +2012-05-04 Ilija Kocho + + * cdl/eth_freescale_enet.cdl: + * src/if_freescale_enet.c: + Add optional non-cached regions for TCD and buffers [Bugzilla 1001579] + +2012-01-06 Ilija Kocho + + * cdl/eth_freescale_enet.cdl: + * src/if_freescale_enet.c: + Add Redboot ESA support [Bugzilla 1001450] + +2011-08-26 Ilija Kocho + + * cdl/eth_freescale_enet.cdl: + * include/if_freescale_enet_bd.h: + * include/if_freescale_enet_io.h: + * src/if_freescale_enet.c: + New package -- Freescale ENET Ethernet driver. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/eth/freescale/enet/current/cdl/eth_freescale_enet.cdl b/packages/devs/eth/freescale/enet/current/cdl/eth_freescale_enet.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/freescale/enet/current/cdl/eth_freescale_enet.cdl @@ -0,0 +1,453 @@ +#========================================================================== +# +# eth_freescale_enet.cdl +# +# Ethernet driver for Freescale ENET controller +# +#========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +#========================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Ilija Kocho +# Contributors: +# Date: 2011-06-14 +# +#####DESCRIPTIONEND#### +# +#======================================================================== + + +cdl_package CYGPKG_DEVS_ETH_FREESCALE_ENET { + display "Freescale ENET ethernet driver" + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + + requires CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK + + include_dir cyg/io/eth + description " + Ethernet driver for Freescale ENET controller. Freescale ENET + Ethernet controller is found on some Freescale families of + controllers such as Kinetis and ColdFire+." + + compile -library=libextras.a if_freescale_enet.c + + # ENET0 Configuration options -------------------------------------------- + cdl_option CYGDAT_IO_ETH_IF_FREESCALE_ENET0_NAME { + display "Device name for Freescale ENET0 interface" + flavor data + default_value { "\"eth0\"" } + description " + This option specifies the device name for Freescale ENET0 + interface." + } + + cdl_option CYGPKG_DEVS_ETH_FREESCALE_ENET0_MACADDR { + display "Ethernet station (MAC) address for eth0" + flavor data + default_value {"0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC"} + description " + The default ethernet station address." + } + + cdl_option CYGPKG_DEVS_ETH_FREESCALE_ENET0_INTPRIO { + display "Interrupt priority" + flavor data + default_value CYGNUM_DEVS_ETH_FREESCALE_ENET0_INTPRIO_SP + description " + This option selects the interrupt priority for the EMAC + interrupts." + } + + cdl_component CYGHWR_DEVS_ETH_FREESCALE_ENET0_FLOW_CONTROL { + display "Congestion control" + flavor none + no_define + + cdl_option CYGSEM_ETH_FREESCALE_ENET0_RCR_FCE { + display "Rx Flow control enable" + flavor data + legal_values { 0 1 } + default_value 0 + description " + If enabled ENET shall regard pause frames requests from peer." + } + + cdl_option CYGNUM_ETH_FREESCALE_ENET0_OPD_PAUSE_DUR { + display "Tx flow control pause duration" + flavor data + legal_values 0 to 255 + default_value 0 + description " + Flow control pause legth in pause quanta asked from peer. + 1 pause quant equals to 512 bit time increments." + } + } + + cdl_component CYGHWR_DEVS_ETH_FREESCALE_ENET0_BUFFS { + display "Buffers" + flavor none + no_define + description "Rx and Tx buffers" + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_MAX_FRAME_LEN { + display "Maximal frame length" + flavor data + default_value 1518 + legal_values 64 to 1522 + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_RX_BUFS { + display "Number of RX buffers" + flavor data + default_value 8 + legal_values 2 to 64 + description " + Number of buffers for receiving. The number of receive + buffers also defines the number of descriptors in the + descriptor array." + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_RXBUF_SIZE { + display "Rx buffer size" + flavor data + requires { (CYGNUM_DEVS_ETH_FREESCALE_ENET0_RXBUF_SIZE % + CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN) == 0 + } + legal_values 16 to 1536 + default_value { + ((CYGNUM_DEVS_ETH_FREESCALE_ENET0_MAX_FRAME_LEN + + CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN-1)/ + (CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN ? + CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN : 1)) * + CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN + } + description "Rx buffer size must be evenly divisible by 16." + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS { + display "Number of TX descriptors (buffers)" + flavor data + default_value ( CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY ? 8 : \ + CYGPKG_IO_ETH_DRIVERS_NET ? 8 : 2 ) + legal_values 2 to 64 + description " + Number of transmit buffers or descriptors. We need one + descriptor/buffer for each element in the scatter/gather list. + If NoCopy is selected then only buffer descriptors are allocated. + If Copying is selected (NoCopy == 0) then a buffer is allocated + for every buffer descriptor." + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_TXBUF_SIZE { + display "Tx buffer size" + flavor data + active_if { !CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY } + requires { (CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_SIZE % + CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN) == 0 + } + + legal_values { 16 to 1536 } + default_value { + ((CYGNUM_DEVS_ETH_FREESCALE_ENET0_MAX_FRAME_LEN + + CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN-1)/ + (CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN ? + CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN : 1)) * + CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN + } + } + } + + # END of ENET0 specific configuration options. --------------------------- + + # Common ENET options. --------------------------------------------------- + # Following configuration options are common to all ENET instances + + cdl_option CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED { + display "Enhanced buffer descriptors" + flavor bool + default_value 0 + } + + cdl_component CYGHWR_DEVS_ETH_FREESCALE_ENET_ALIGN { + display "Buffer/descriptor memory alignment" + flavor none + no_define + description " + ENET conatins internal DMA controller that + requires certain memory alighment" + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBD_ALIGN { + display "Rx buffer descriptor alignment" + flavor data + default_value 8 + legal_values { 8 16 } + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN { + display "Rx buffer alignment" + flavor data + default_value 16 + legal_values { 16 } + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBD_ALIGN { + display "Tx buffer descriptor alignment" + flavor data + default_value 8 + legal_values { 8 16 } + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN { + display "Tx buffer alignment" + flavor data + default_value 8 + legal_values { 8 16 } + } + } + + cdl_component CYGSEM_DEVS_ETH_FREESCALE_ENET_PHY { + display "RMII or MII Phy" + flavor data + default_value { "RMII" } + legal_values { "RMII" "MII" } + + cdl_option CYGOPT_DEVS_ETH_FREESCALE_ENET_PHY_RXER_USE { + display "Enable PHY Rx Error signal" + flavor bool + default_value 1 + } + } + + cdl_component CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL { + display "TCP/IP acceleration" + flavor none + no_define + description " + Freescale ENET provides for hardware TCP/IP header checksum + generation and check." + + active_if CYGPKG_NET_LWIP + requires CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + requires CYGPKG_LWIP_CHECKSUMS + + cdl_component CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_IP { + display "IP Checksum generation" + flavor bool + default_value 1 + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_GEN_IP == 0) } + + cdl_option CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_PROT { + display "TCP and UDP Checksum generation" + flavor bool + default_value 1 + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_GEN_TCP == 0) } + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_GEN_UDP == 0) } + } + } + + cdl_component CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_IP { + display "IP Checksum check" + flavor bool + default_value 1 + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_CHECK_IP == 0) } + + cdl_option CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_PROT { + display "TCP and UDP checksum check" + flavor bool + default_value 1 + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_CHECK_TCP == 0) } + + requires { is_active(CYGPKG_LWIP_CHECKSUMS) implies + (CYGIMP_LWIP_CHECKSUM_CHECK_UDP == 0) } + } + } + + cdl_option CYGSEM_ENET_LWIP_CHECKSUMS { + display "lwIP Checksum calculation" + flavor none + no_define + description " + Re-enable lwIP software checksum generation/check if + hardware generation/check is disabled." + + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_IP implies + CYGIMP_LWIP_CHECKSUM_GEN_IP == 1 } + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_PROT implies + CYGIMP_LWIP_CHECKSUM_GEN_TCP == 1 } + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_PROT implies + CYGIMP_LWIP_CHECKSUM_GEN_UDP == 1 } + + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_IP implies + CYGIMP_LWIP_CHECKSUM_CHECK_IP == 1 } + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_PROT implies + CYGIMP_LWIP_CHECKSUM_CHECK_TCP == 1 } + requires { !CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_PROT implies + CYGIMP_LWIP_CHECKSUM_CHECK_UDP == 1 } + } + } + + cdl_component CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 { + display "IEEE 1588 timers" + requires CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + flavor bool + default_value 0 + } + + cdl_component CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS { + display "ENET Error statistics" + flavor bool + default_value 0 + + cdl_option CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS_DEBUG { + display "Debug print ENET error statistics" + flavor bool + default_value 0 + } + } + + cdl_option CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY { + display "NullCopy send" + flavor bool + default_value 0 + active_if (CYGPKG_NET_LWIP) + + requires { is_active(CYGPKG_NET_LWIP) implies + (CYGNUM_LWIP_MEM_ALIGNMENT >= + CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN) } + + description " + ENET driver can send buffers 'out of place' + (wihout making a private copy), offloading CPU from + copying data and saving space for Tx buffers . This is + 'NullCopy' option, opposite to 'Copying' option where ENET + driver has private Tx buffers and requires additional copying + operation (by CPU). + On the pther hand, 'Copying' option needs no Tx IRQ which may + make it better choice than NullCopy if system dominantly sends + short messages. Also, ENET has some requiresments for buffer + alignment, therefore if upper layer networking stack / + application can not guarantee for boundary alignment then + 'Copying' should be used." + } + + cdl_option CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK { + display "Fast IRQ masking" + flavor bool + default_value 1 + + description " + Fast (un)masking operates on bits in ENET's EIR + register instead of calling cyg_drv_interrupt_(un)mask. + This allows sumultaneous (un)masking of both Tx and Rx + interrupts and is prefered mode, but case of compatibility + problems disable fast IRQ mask." + } + + cdl_component CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA { + display "RedBoot manages ESA initialization data" + flavor bool + default_value 0 + + active_if CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + active_if (CYGPKG_REDBOOT || CYGSEM_HAL_USE_ROM_MONITOR) + + description " + Enabling this option will allow the ethernet station + address to be acquired from RedBoot's configuration data, + stored in flash memory. It can be overridden individually + by the 'Set the ethernet station address' option for each + interface." + + + cdl_component CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA_VARS { + display "Export RedBoot command to set ESA in FLASH config" + flavor none + no_define + description " + This component contains options which, when enabled, allow + RedBoot to support the setting of the ESA in the FLASH + configuration. This can then subsequently be accessed by + applications using virtual vector calls if those applications + are also built with + CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA enabled." + + cdl_option CYGSEM_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA_ETH0 { + display "RedBoot manages ESA for eth0" + flavor bool + default_value 1 + active_if CYGSEM_REDBOOT_FLASH_CONFIG + active_if CYGPKG_REDBOOT_NETWORKING + } + } + } + + cdl_option CYGPKG_DEVS_ETH_FREESCALE_ENET_DEBUG_LEVEL { + display "Driver debug output level" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + description " + This option specifies the level of debug data output by + the Freescale ENET ethernet device driver. A value of 0 signifies + no debug data output; 1 signifies normal debug data + output; and 2 signifies maximum debug data output." + } + + cdl_option CYGPKG_DEVS_ETH_FREESCALE_ENET_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the Freescale ENET ethernet driver package. + These flags are used in addition to the set of global flags." + } +} + +# EOF eth_freescale_enet.cdl diff --git a/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_bd.h b/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_bd.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_bd.h @@ -0,0 +1,209 @@ +#ifndef CYGONCE_FREESCALE_ENET_BD_H +#define CYGONCE_FREESCALE_ENET_BD_H +//============================================================================= +// +// freescale_enet_bd.h +// +// Variant specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-06-05 +// Purpose: Freescale ENET buffer descriptors +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//--------------------------------------------------------------------------- +// ENET Buffer Descriptors +// All mrmbers except key must be big endian +typedef volatile struct enet_bd_s { + cyg_uint16 ctrl; // 00 + cyg_uint16 len; // 02 + cyg_uint8 *buffer_p; // 04 +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + cyg_uint32 ebd_ctrl; // 08 + cyg_uint16 hlen_proto; // 0c + cyg_uint16 payload_csum; // 0e + cyg_uint32 bdu; // 10 + cyg_uint32 timestamp_1588; // 14 + cyg_uint32 reserved[2]; // 18 +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED +} enet_bd_t; + + +#if (CYG_BYTEORDER == CYG_LSBFIRST) +//====================================================================== +// Little Endian +//---------------------------------------------------------------------- + +// ---------------------------------------------------------------------- +// TX Buffer Descriptor Bit Definitions + +# define ENET_TXBD_R 0x0080 +# define ENET_TXBD_TO1 0x0040 +# define ENET_TXBD_W 0x0020 +# define ENET_TXBD_TO2 0x0010 +# define ENET_TXBD_L 0x0008 +# define ENET_TXBD_TC 0x0004 +# define ENET_TXBD_ABC 0x0002 + +// ---------------------------------------------------------------------- +// TX Enhanced BD Bit Definitions + +# define ENET_TXBD_INT 0x00000040 +# define ENET_TXBD_TS 0x00000020 +# define ENET_TXBD_PINS 0x00000010 +# define ENET_TXBD_IINS 0x00000008 +# define ENET_TXBD_TXE 0x00800000 +# define ENET_TXBD_UE 0x00200000 +# define ENET_TXBD_EE 0x00100000 +# define ENET_TXBD_FE 0x00080000 +# define ENET_TXBD_LCE 0x00040000 +# define ENET_TXBD_OE 0x00020000 +# define ENET_TXBD_TSE 0x00010000 + +# define ENET_TXBD_BDU 0x00000080 + +// ---------------------------------------------------------------------- +// RX Buffer Descriptor Bit Definitions +// Offset 0 flags - ctrl +# define ENET_RXBD_E 0x0080 +# define ENET_RXBD_R01 0x0040 +# define ENET_RXBD_W 0x0020 +# define ENET_RXBD_R02 0x0010 +# define ENET_RXBD_L 0x0008 +# define ENET_RXBD_M 0x0001 +# define ENET_RXBD_BC 0x8000 +# define ENET_RXBD_MC 0x4000 +# define ENET_RXBD_LG 0x2000 +# define ENET_RXBD_NO 0x1000 +# define ENET_RXBD_CR 0x0400 +# define ENET_RXBD_OV 0x0200 +# define ENET_RXBD_TR 0x0100 + +// ---------------------------------------------------------------------- +// RX Enhanced BD Bit Definitions + +# define ENET_RXBD_ME 0x00000080 +# define ENET_RXBD_PE 0x00000004 +# define ENET_RXBD_CE 0x00000002 +# define ENET_RXBD_UC 0x00000001 + +# define ENET_RXBD_INT 0x00008000 + +# define ENET_RXBD_ICE 0x20000000 +# define ENET_RXBD_PCR 0x10000000 +# define ENET_RXBD_VLAN 0x04000000 +# define ENET_RXBD_IPV6 0x02000000 +# define ENET_RXBD_FRAG 0x01000000 + +# define ENET_RXBD_BDU 0x00000080 + +#else //(CYG_BYTEORDER == CYG_LSBFIRST) +//====================================================================== +// Big Endian +//---------------------------------------------------------------------- + +// ---------------------------------------------------------------------- +// TX Buffer Descriptor Bit Definitions + +# define ENET_TXBD_R 0x8000 +# define ENET_TXBD_TO1 0x4000 +# define ENET_TXBD_W 0x2000 +# define ENET_TXBD_TO2 0x1000 +# define ENET_TXBD_L 0x0800 +# define ENET_TXBD_TC 0x0400 +# define ENET_TXBD_ABC 0x0200 + +// ---------------------------------------------------------------------- +// TX Enhanced BD Bit Definitions + +# define ENET_TXBD_INT 0x40000000 +# define ENET_TXBD_TS 0x20000000 +# define ENET_TXBD_PINS 0x10000000 +# define ENET_TXBD_IINS 0x08000000 +# define ENET_TXBD_TXE 0x00008000 +# define ENET_TXBD_UE 0x00002000 +# define ENET_TXBD_EE 0x00001000 +# define ENET_TXBD_FE 0x00000800 +# define ENET_TXBD_LCE 0x00000400 +# define ENET_TXBD_OE 0x00000200 +# define ENET_TXBD_TSE 0x00000100 + +# define ENET_TXBD_BDU 0x80000000 + +// ---------------------------------------------------------------------- +// RX Buffer Descriptor Bit Definitions +// Offset 0 flags - ctrl +# define ENET_RXBD_E 0x8000 +# define ENET_RXBD_R01 0x4000 +# define ENET_RXBD_W 0x2000 +# define ENET_RXBD_R02 0x1000 +# define ENET_RXBD_L 0x0800 +# define ENET_RXBD_M 0x0100 +# define ENET_RXBD_BC 0x0080 +# define ENET_RXBD_MC 0x0040 +# define ENET_RXBD_LG 0x0020 +# define ENET_RXBD_NO 0x0010 +# define ENET_RXBD_CR 0x0004 +# define ENET_RXBD_OV 0x0002 +# define ENET_RXBD_TR 0x0001 + +// ---------------------------------------------------------------------- +// RX Enhanced BD Bit Definitions + +# define ENET_RXBD_ME 0x80000000 +# define ENET_RXBD_PE 0x04000000 +# define ENET_RXBD_CE 0x02000000 +# define ENET_RXBD_UC 0x01000000 +# define ENET_RXBD_INT 0x00800000 +# define ENET_RXBD_ICE 0x00000020 +# define ENET_RXBD_PCR 0x00000010 +# define ENET_RXBD_VLAN 0x00000004 +# define ENET_RXBD_IPV6 0x00000002 +# define ENET_RXBD_FRAG 0x00000001 + +# define ENET_RXBD_BDU 0x80000000 + +#endif // (CYG_BYTEORDER == CYG_LSBFIRST) + +// EOF freescale_enet_bd.h +#endif // CYGONCE_FREESCALE_ENET_BD_H diff --git a/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_io.h b/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_io.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/freescale/enet/current/include/if_freescale_enet_io.h @@ -0,0 +1,685 @@ +#ifndef CYGONCE_IF_FREESCALE_ENET_IO_H +#define CYGONCE_IF_FREESCALE_ENET_IO_H +//============================================================================= +// +// if_freescale_enet_io.h +// +// Variant specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-06-05 +// Purpose: Freescale ENET specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + +//============================================================================= +// Freescale ENET Ethernet controller + +// ENET Register offsets relative to CYGADDR_IO_ETH_FREESCALE_ENET_BASE +// Note: CYGADDR_IO_ETH_FREESCALE_ENET_BASE is provided by HAL. +// Typically you can find CYGADDR_IO_ETH_FREESCALE_ENET_BASE in var_io.h +//----------------------------------------------------------------------------- +// Interrupt Event Register +#define FREESCALE_ENET_REG_EIR 0x004 +// Interrupt Mask Register +#define FREESCALE_ENET_REG_EIMR 0x008 +// Receive Descriptor Active Register +#define FREESCALE_ENET_REG_RDAR 0x010 +// Transmit Descriptor Active Register +#define FREESCALE_ENET_REG_TDAR 0x014 +// Ethernet Control Register +#define FREESCALE_ENET_REG_ECR 0x024 +// MII Management Frame Register +#define FREESCALE_ENET_REG_MMFR 0x040 +// MII Speed Control Register +#define FREESCALE_ENET_REG_MSCR 0x044 +// MIB Control Register +#define FREESCALE_ENET_REG_MIBC 0x064 +// Receive Control Register +#define FREESCALE_ENET_REG_RCR 0x084 +// Transmit Control Register +#define FREESCALE_ENET_REG_TCR 0x0C4 +// Physical Address Lower Register +#define FREESCALE_ENET_REG_PALR 0x0E4 +// Physical Address Upper Register +#define FREESCALE_ENET_REG_PAUR 0x0E8 +// Opcode/Pause Duration Register +#define FREESCALE_ENET_REG_OPD 0x0EC +// Descriptor Individual Upper Address Register +#define FREESCALE_ENET_REG_IAUR 0x118 +// Descriptor Individual Lower Address Register +#define FREESCALE_ENET_REG_IALR 0x11C +// Descriptor Group Upper Address Register +#define FREESCALE_ENET_REG_GAUR 0x120 +// Descriptor Group Lower Address Register +#define FREESCALE_ENET_REG_GALR 0x124 +// Transmit FIFO Watermark Register +#define FREESCALE_ENET_REG_TFWR 0x144 +// Receive Descriptor Ring Start Register +#define FREESCALE_ENET_REG_RDSR 0x180 +// Transmit Buffer Descriptor Ring Start Register +#define FREESCALE_ENET_REG_TDSR 0x184 +// Maximum Receive Buffer Size Register +#define FREESCALE_ENET_REG_MRBR 0x188 +// Receive FIFO Section Full Threshold +#define FREESCALE_ENET_REG_RSFL 0x190 +// Receive FIFO Section Empty Threshold +#define FREESCALE_ENET_REG_RSEM 0x194 +// Receive FIFO Almost Empty Threshold +#define FREESCALE_ENET_REG_RAEM 0x198 +// Receive FIFO Almost Full Threshold +#define FREESCALE_ENET_REG_RAFL 0x19C +// Transmit FIFO Section Empty Threshold +#define FREESCALE_ENET_REG_TSEM 0x1A0 +// Transmit FIFO Almost Empty Threshold +#define FREESCALE_ENET_REG_TAEM 0x1A4 +// Transmit FIFO Almost Full Threshold +#define FREESCALE_ENET_REG_TAFL 0x1A8 +// Transmit Inter-Packet Gap +#define FREESCALE_ENET_REG_TIPG 0x1AC +// Frame Truncation Length +#define FREESCALE_ENET_REG_FTRL 0x1B0 +// Transmit Accelerator Function Configuration +#define FREESCALE_ENET_REG_TACC 0x1C0 +// Receive Accelerator Function Configuration +#define FREESCALE_ENET_REG_RACC 0x1C4 +// Count of frames not counted correctly (RMON_T_DROP). +// NOTE: Counter not implemented (read 0 always) as not applicable. +#define FREESCALE_ENET_REG_RMON_T_DROP 0x200 +// RMON Tx packet count (RMON_T_PACKETS) +#define FREESCALE_ENET_REG_RMON_T_PACKETS 0x204 +// RMON Tx Broadcast Packets (RMON_T_BC_PKT) +#define FREESCALE_ENET_REG_RMON_T_BC_PKT 0x208 +// RMON Tx Multicast Packets (RMON_T_MC_PKT) +#define FREESCALE_ENET_REG_RMON_T_MC_PKT 0x20C +// RMON Tx Packets w CRC/Align error (RMON_T_CRC_ALIGN) +#define FREESCALE_ENET_REG_RMON_T_CRC_ALIGN 0x210 +// RMON Tx Packets < 64 bytes +#define FREESCALE_ENET_REG_RMON_T_UNDERSIZE 0x214 +// RMON Tx Packets > MAX_FL bytes +#define FREESCALE_ENET_REG_RMON_T_OVERSIZE 0x218 +// RMON Tx Packets < 64 bytes +#define FREESCALE_ENET_REG_RMON_T_FRAG 0x21C +// RMON Tx Packets > MAX_FL bytes +#define FREESCALE_ENET_REG_RMON_T_JAB 0x220 +// RMON Tx collision count (RMON_T_COL) +#define FREESCALE_ENET_REG_RMON_T_COL 0x224 +// RMON Tx 64 byte packets (RMON_T_P64) +#define FREESCALE_ENET_REG_RMON_T_P64 0x228 +// RMON Tx 65 to 127 byte packets (RMON_T_P65TO127) +#define FREESCALE_ENET_REG_RMON_T_P65TO127 0x22C +// RMON Tx 128 to 255 byte packets (RMON_T_P128TO255) +#define FREESCALE_ENET_REG_RMON_T_P128TO255 0x230 +// RMON Tx 256 to 511 byte packets (RMON_T_P256TO511) +#define FREESCALE_ENET_REG_RMON_T_P256TO511 0x234 +// RMON Tx 512 to 1023 byte packets (RMON_T_P512TO1023) +#define FREESCALE_ENET_REG_RMON_T_P512TO1023 0x238 +// RMON Tx 1024 to 2047 byte packets (RMON_T_P1024TO2047) +#define FREESCALE_ENET_REG_RMON_T_P1024TO2047 0x23C +// RMON Tx packets w > 2048 bytes (RMON_T_P_GTE2048) +#define FREESCALE_ENET_REG_RMON_T_P_GTE2048 0x240 +// RMON Tx Octets (RMON_T_OCTETS) +#define FREESCALE_ENET_REG_RMON_T_OCTETS 0x244 +// Count of frames not counted correctly (IEEE_T_DROP). +// NOTE: Counter not implemented (read 0 always) as not applicable. +#define FREESCALE_ENET_REG_IEEE_T_DROP 0x248 +// Frames Transmitted OK (IEEE_T_FRAME_OK) +#define FREESCALE_ENET_REG_IEEE_T_FRAME_OK 0x24C +// Frames Transmitted with Single Collision (IEEE_T_1COL) +#define FREESCALE_ENET_REG_IEEE_T_1COL 0x250 +// Frames Transmitted with Multiple Collisions (IEEE_T_MCOL) +#define FREESCALE_ENET_REG_IEEE_T_MCOL 0x254 +// Frames Transmitted after Deferral Delay (IEEE_T_DEF) +#define FREESCALE_ENET_REG_IEEE_T_DEF 0x258 +// Frames Transmitted with Late Collision (IEEE_T_LCOL) +#define FREESCALE_ENET_REG_IEEE_T_LCOL 0x25C +// Frames Transmitted with Excessive Collisions (IEEE_T_EXCOL) +#define FREESCALE_ENET_REG_IEEE_T_EXCOL 0x260 +// Frames Transmitted with Tx FIFO Underrun (IEEE_T_MACERR) +#define FREESCALE_ENET_REG_IEEE_T_MACERR 0x264 +// Frames Transmitted with Carrier Sense Error (IEEE_T_CSERR) +#define FREESCALE_ENET_REG_IEEE_T_CSERR 0x268 +// Frames Transmitted with SQE Error (IEEE_T_SQE). +// NOTE: Counter not implemented (read 0 always) +// as no SQE information is available. +#define FREESCALE_ENET_REG_IEEE_T_SQE 0x26C +// Flow Control Pause frames transmitted (IEEE_T_FDXFC) +#define FREESCALE_ENET_REG_IEEE_T_FDXFC 0x270 +// Octet count for Frames Transmitted w/o Error (IEEE_T_OCTETS_OK). +// NOTE: Counts total octets (includes header and FCS fields). +#define FREESCALE_ENET_REG_IEEE_T_OCTETS_OK 0x274 +// RMON Rx packet count (RMON_R_PACKETS) +#define FREESCALE_ENET_REG_RMON_R_PACKETS 0x284 +// RMON Rx Broadcast Packets (RMON_R_BC_PKT) +#define FREESCALE_ENET_REG_RMON_R_BC_PKT 0x288 +// RMON Rx Multicast Packets (RMON_R_MC_PKT) +#define FREESCALE_ENET_REG_RMON_R_MC_PKT 0x28C +// RMON Rx Packets w CRC/Align error (RMON_R_CRC_ALIGN) +#define FREESCALE_ENET_REG_RMON_R_CRC_ALIGN 0x290 +// RMON Rx Packets < 64 bytes +#define FREESCALE_ENET_REG_RMON_R_UNDERSIZE 0x294 +// RMON Rx Packets > MAX_FL bytes +#define FREESCALE_ENET_REG_RMON_R_OVERSIZE 0x298 +// RMON Rx Packets < 64 bytes +#define FREESCALE_ENET_REG_RMON_R_FRAG 0x29C +// RMON Rx Packets > MAX_FL bytes +#define FREESCALE_ENET_REG_RMON_R_JAB 0x2A0 +// Reserved (RMON_R_RESVD_0) +#define FREESCALE_ENET_REG_RMON_R_RESVD_0 0x2A4 +// RMON Rx 64 byte packets (RMON_R_P64) +#define FREESCALE_ENET_REG_RMON_R_P64 0x2A8 +// RMON Rx 65 to 127 byte packets (RMON_R_P65TO127) +#define FREESCALE_ENET_REG_RMON_R_P65TO127 0x2AC +// RMON Rx 128 to 255 byte packets (RMON_R_P128TO255) +#define FREESCALE_ENET_REG_RMON_R_P128TO255 0x2B0 +// RMON Rx 256 to 511 byte packets (RMON_R_P256TO511) +#define FREESCALE_ENET_REG_RMON_R_P256TO511 0x2B4 +// RMON Rx 512 to 1023 byte packets (RMON_R_P512TO1023) +#define FREESCALE_ENET_REG_RMON_R_P512TO1023 0x2B8 +// RMON Rx 1024 to 2047 byte packets (RMON_R_P1024TO2047) +#define FREESCALE_ENET_REG_RMON_R_P1024TO2047 0x2BC +// RMON Rx packets w > 2048 bytes (RMON_R_P_GTE2048) +#define FREESCALE_ENET_REG_RMON_R_P_GTE2048 0x2C0 +// RMON Rx Octets (RMON_R_OCTETS) +#define FREESCALE_ENET_REG_RMON_R_OCTETS 0x2C4 +// Count of frames not counted correctly (IEEE_R_DROP). +// NOTE: Counter increments if a frame with valid/ +// missing SFD character is detected and has been dropped. +// None of the other counters increments if +// this counter increments. +#define FREESCALE_ENET_REG_RMON_R_DROP 0x2C8 +// Frames Received OK (IEEE_R_FRAME_OK) +#define FREESCALE_ENET_REG_RMON_R_FRAME_OK 0x2CC +// Frames Received with CRC Error (IEEE_R_CRC) +#define FREESCALE_ENET_REG_IEEE_R_CRC 0x2D0 +// Frames Received with Alignment Error (IEEE_R_ALIGN) +#define FREESCALE_ENET_REG_IEEE_R_ALIGN 0x2D4 +// Receive Fifo Overflow count (IEEE_R_MACERR) +#define FREESCALE_ENET_REG_IEEE_R_MACERR 0x2D8 +// Flow Control Pause frames received (IEEE_R_FDXFC) +#define FREESCALE_ENET_REG_IEEE_R_FDXFC 0x2DC +// Octet count for Frames Rcvd w/o Error (IEEE_R_OCTETS_OK). +// Counts total octets (includes header and FCS fields). +#define FREESCALE_ENET_REG_IEEE_R_OCTETS_OK 0x2E0 +// Timer Control Register +#define FREESCALE_ENET_REG_ATCR 0x400 +// Timer Value Register +#define FREESCALE_ENET_REG_ATVR 0x404 +// Timer Offset Register +#define FREESCALE_ENET_REG_ATOFF 0x408 +// Timer Period Register +#define FREESCALE_ENET_REG_ATPER 0x40C +// Timer Correction Register +#define FREESCALE_ENET_REG_ATCOR 0x410 +// Time-Stamping Clock Period Register +#define FREESCALE_ENET_REG_ATINC 0x414 +// Timestamp of Last Transmitted Frame +#define FREESCALE_ENET_REG_ATSTMP 0x418 +// Timer Global Status Register +#define FREESCALE_ENET_REG_TGSR 0x604 + +// IEEE 1588 Timers +// Timer 0 Control Status Register +#define FREESCALE_ENET_REG_TCSR0 0x608 +// Timer 0Control Capture Register +#define FREESCALE_ENET_REG_TCCR0 0x60c +// Timer 1 Control Status Register +#define FREESCALE_ENET_REG_TCSR1 0x610 +// Timer 1 Control Capture Register +#define FREESCALE_ENET_REG_TCCR1 0x614 +// Timer 2 Control Status Register +#define FREESCALE_ENET_REG_TCSR2 0x618 +// Timer 2 Control Capture Register +#define FREESCALE_ENET_REG_TCCR2 0x61C +// Timer 3 Control Status Register +#define FREESCALE_ENET_REG_TCSR3 0x620 +// Timer 3 Control Capture Register +#define FREESCALE_ENET_REG_TCCR3 0x624 + + + +// ---------------------------------------------------------------------------- +// ENET Register Masks + +// EIR Bit Fields +#define FREESCALE_ENET_EIR_TS_TIMER_M 0x8000 +#define FREESCALE_ENET_EIR_TS_TIMER_S 15 +#define FREESCALE_ENET_EIR_TS_AVAIL_M 0x10000 +#define FREESCALE_ENET_EIR_TS_AVAIL_S 16 +#define FREESCALE_ENET_EIR_WAKEUP_M 0x20000 +#define FREESCALE_ENET_EIR_WAKEUP_S 17 +#define FREESCALE_ENET_EIR_PLR_M 0x40000 +#define FREESCALE_ENET_EIR_PLR_S 18 +#define FREESCALE_ENET_EIR_UN_M 0x80000 +#define FREESCALE_ENET_EIR_UN_S 19 +#define FREESCALE_ENET_EIR_RL_M 0x100000 +#define FREESCALE_ENET_EIR_RL_S 20 +#define FREESCALE_ENET_EIR_LC_M 0x200000 +#define FREESCALE_ENET_EIR_LC_S 21 +#define FREESCALE_ENET_EIR_EBERR_M 0x400000 +#define FREESCALE_ENET_EIR_EBERR_S 22 +#define FREESCALE_ENET_EIR_MII_M 0x800000 +#define FREESCALE_ENET_EIR_MII_S 23 +#define FREESCALE_ENET_EIR_RXB_M 0x1000000 +#define FREESCALE_ENET_EIR_RXB_S 24 +#define FREESCALE_ENET_EIR_RXF_M 0x2000000 +#define FREESCALE_ENET_EIR_RXF_S 25 +#define FREESCALE_ENET_EIR_TXB_M 0x4000000 +#define FREESCALE_ENET_EIR_TXB_S 26 +#define FREESCALE_ENET_EIR_TXF_M 0x8000000 +#define FREESCALE_ENET_EIR_TXF_S 27 +#define FREESCALE_ENET_EIR_GRA_M 0x10000000 +#define FREESCALE_ENET_EIR_GRA_S 28 +#define FREESCALE_ENET_EIR_BABT_M 0x20000000 +#define FREESCALE_ENET_EIR_BABT_S 29 +#define FREESCALE_ENET_EIR_BABR_M 0x40000000 +#define FREESCALE_ENET_EIR_BABR_S 30 +// EIMR Bit Fields +#define FREESCALE_ENET_EIMR_TS_TIMER_M 0x8000 +#define FREESCALE_ENET_EIMR_TS_TIMER_S 15 +#define FREESCALE_ENET_EIMR_TS_AVAIL_M 0x10000 +#define FREESCALE_ENET_EIMR_TS_AVAIL_S 16 +#define FREESCALE_ENET_EIMR_WAKEUP_M 0x20000 +#define FREESCALE_ENET_EIMR_WAKEUP_S 17 +#define FREESCALE_ENET_EIMR_PLR_M 0x40000 +#define FREESCALE_ENET_EIMR_PLR_S 18 +#define FREESCALE_ENET_EIMR_UN_M 0x80000 +#define FREESCALE_ENET_EIMR_UN_S 19 +#define FREESCALE_ENET_EIMR_RL_M 0x100000 +#define FREESCALE_ENET_EIMR_RL_S 20 +#define FREESCALE_ENET_EIMR_LC_M 0x200000 +#define FREESCALE_ENET_EIMR_LC_S 21 +#define FREESCALE_ENET_EIMR_EBERR_M 0x400000 +#define FREESCALE_ENET_EIMR_EBERR_S 22 +#define FREESCALE_ENET_EIMR_MII_M 0x800000 +#define FREESCALE_ENET_EIMR_MII_S 23 +#define FREESCALE_ENET_EIMR_RXB_M 0x1000000 +#define FREESCALE_ENET_EIMR_RXB_S 24 +#define FREESCALE_ENET_EIMR_RXF_M 0x2000000 +#define FREESCALE_ENET_EIMR_RXF_S 25 +#define FREESCALE_ENET_EIMR_TXB_M 0x4000000 +#define FREESCALE_ENET_EIMR_TXB_S 26 +#define FREESCALE_ENET_EIMR_TXF_M 0x8000000 +#define FREESCALE_ENET_EIMR_TXF_S 27 +#define FREESCALE_ENET_EIMR_GRA_M 0x10000000 +#define FREESCALE_ENET_EIMR_GRA_S 28 +#define FREESCALE_ENET_EIMR_BABT_M 0x20000000 +#define FREESCALE_ENET_EIMR_BABT_S 29 +#define FREESCALE_ENET_EIMR_BABR_M 0x40000000 +#define FREESCALE_ENET_EIMR_BABR_S 30 +// RDAR Bit Fields +#define FREESCALE_ENET_RDAR_RDAR_M 0x1000000 +#define FREESCALE_ENET_RDAR_RDAR_S 24 +// TDAR Bit Fields +#define FREESCALE_ENET_TDAR_TDAR_M 0x1000000 +#define FREESCALE_ENET_TDAR_TDAR_S 24 +// ECR Bit Fields +#define FREESCALE_ENET_ECR_RESET_M 0x1 +#define FREESCALE_ENET_ECR_RESET_S 0 +#define FREESCALE_ENET_ECR_ETHEREN_M 0x2 +#define FREESCALE_ENET_ECR_ETHEREN_S 1 +#define FREESCALE_ENET_ECR_MAGICEN_M 0x4 +#define FREESCALE_ENET_ECR_MAGICEN_S 2 +#define FREESCALE_ENET_ECR_SLEEP_M 0x8 +#define FREESCALE_ENET_ECR_SLEEP_S 3 +#define FREESCALE_ENET_ECR_EN1588_M 0x10 +#define FREESCALE_ENET_ECR_EN1588_S 4 +#define FREESCALE_ENET_ECR_DBGEN_M 0x40 +#define FREESCALE_ENET_ECR_DBGEN_S 6 +#define FREESCALE_ENET_ECR_STOPEN_M 0x80 +#define FREESCALE_ENET_ECR_STOPEN_S 7 +// MMFR Bit Fields +#define FREESCALE_ENET_MMFR_DATA_M 0xFFFF +#define FREESCALE_ENET_MMFR_DATA_S 0 +#define FREESCALE_ENET_MMFR_DATA(__val) \ + VALUE_(FREESCALE_ENET_MMFR_DATA_S, __val) +#define FREESCALE_ENET_MMFR_TA_M 0x30000 +#define FREESCALE_ENET_MMFR_TA_S 16 +#define FREESCALE_ENET_MMFR_TA(__val) \ + VALUE_(FREESCALE_ENET_MMFR_TA_S, __val) +#define FREESCALE_ENET_MMFR_RA_M 0x7C0000 +#define FREESCALE_ENET_MMFR_RA_S 18 +#define FREESCALE_ENET_MMFR_RA(__val) \ + VALUE_(FREESCALE_ENET_MMFR_RA_S, __val) +#define FREESCALE_ENET_MMFR_PA_M 0xF800000 +#define FREESCALE_ENET_MMFR_PA_S 23 +#define FREESCALE_ENET_MMFR_PA(__val) \ + VALUE_(FREESCALE_ENET_MMFR_PA_S, __val) +#define FREESCALE_ENET_MMFR_OP_M 0x30000000 +#define FREESCALE_ENET_MMFR_OP_S 28 +#define FREESCALE_ENET_MMFR_OP(__val) \ + VALUE_(FREESCALE_ENET_MMFR_OP_S, __val) +#define FREESCALE_ENET_MMFR_ST_M 0xC0000000 +#define FREESCALE_ENET_MMFR_ST_S 30 +#define FREESCALE_ENET_MMFR_ST(__val) \ + VALUE_(FREESCALE_ENET_MMFR_ST_S, __val) +// MSCR Bit Fields +#define FREESCALE_ENET_MSCR_MII_SPEED_M 0x7E +#define FREESCALE_ENET_MSCR_MII_SPEED_S 1 +#define FREESCALE_ENET_MSCR_MII_SPEED(__val) \ + VALUE_(FREESCALE_ENET_MSCR_MII_SPEED_S, __val) +#define FREESCALE_ENET_MSCR_DIS_PRE_M 0x80 +#define FREESCALE_ENET_MSCR_DIS_PRE_S 7 +#define FREESCALE_ENET_MSCR_HOLDTIME_M 0x700 +#define FREESCALE_ENET_MSCR_HOLDTIME_S 8 +#define FREESCALE_ENET_MSCR_HOLDTIME(__val) \ + VALUE_(FREESCALE_ENET_MSCR_HOLDTIME_S, __val) +// MIBC Bit Fields +#define FREESCALE_ENET_MIBC_MIB_CLEAR_M 0x20000000 +#define FREESCALE_ENET_MIBC_MIB_CLEAR_S 29 +#define FREESCALE_ENET_MIBC_MIB_IDLE_M 0x40000000 +#define FREESCALE_ENET_MIBC_MIB_IDLE_S 30 +#define FREESCALE_ENET_MIBC_MIB_DIS_M 0x80000000 +#define FREESCALE_ENET_MIBC_MIB_DIS_S 31 +// RCR Bit Fields +#define FREESCALE_ENET_RCR_LOOP_M 0x1 +#define FREESCALE_ENET_RCR_LOOP_S 0 +#define FREESCALE_ENET_RCR_DRT_M 0x2 +#define FREESCALE_ENET_RCR_DRT_S 1 +#define FREESCALE_ENET_RCR_MII_MODE_M 0x4 +#define FREESCALE_ENET_RCR_MII_MODE_S 2 +#define FREESCALE_ENET_RCR_PROM_M 0x8 +#define FREESCALE_ENET_RCR_PROM_S 3 +#define FREESCALE_ENET_RCR_BC_REJ_M 0x10 +#define FREESCALE_ENET_RCR_BC_REJ_S 4 +#define FREESCALE_ENET_RCR_FCE_M 0x20 +#define FREESCALE_ENET_RCR_FCE_S 5 +#define FREESCALE_ENET_RCR_RMII_MODE_M 0x100 +#define FREESCALE_ENET_RCR_RMII_MODE_S 8 +#define FREESCALE_ENET_RCR_RMII_10T_M 0x200 +#define FREESCALE_ENET_RCR_RMII_10T_S 9 +#define FREESCALE_ENET_RCR_PADEN_M 0x1000 +#define FREESCALE_ENET_RCR_PADEN_S 12 +#define FREESCALE_ENET_RCR_PAUFWD_M 0x2000 +#define FREESCALE_ENET_RCR_PAUFWD_S 13 +#define FREESCALE_ENET_RCR_CRCFWD_M 0x4000 +#define FREESCALE_ENET_RCR_CRCFWD_S 14 +#define FREESCALE_ENET_RCR_CFEN_M 0x8000 +#define FREESCALE_ENET_RCR_CFEN_S 15 +#define FREESCALE_ENET_RCR_MAX_FL_M 0x3FFF0000 +#define FREESCALE_ENET_RCR_MAX_FL_S 16 +#define FREESCALE_ENET_RCR_MAX_FL(__val) \ + VALUE_(FREESCALE_ENET_RCR_MAX_FL_S, __val) +#define FREESCALE_ENET_RCR_NLC_M 0x40000000 +#define FREESCALE_ENET_RCR_NLC_S 30 +#define FREESCALE_ENET_RCR_GRS_M 0x80000000 +#define FREESCALE_ENET_RCR_GRS_S 31 +// TCR Bit Fields +#define FREESCALE_ENET_TCR_GTS_M 0x1 +#define FREESCALE_ENET_TCR_GTS_S 0 +#define FREESCALE_ENET_TCR_FDEN_M 0x4 +#define FREESCALE_ENET_TCR_FDEN_S 2 +#define FREESCALE_ENET_TCR_TFC_PAUSE_M 0x8 +#define FREESCALE_ENET_TCR_TFC_PAUSE_S 3 +#define FREESCALE_ENET_TCR_RFC_PAUSE_M 0x10 +#define FREESCALE_ENET_TCR_RFC_PAUSE_S 4 +#define FREESCALE_ENET_TCR_ADDSEL_M 0xE0 +#define FREESCALE_ENET_TCR_ADDSEL_S 5 +#define FREESCALE_ENET_TCR_ADDSEL(__val) \ + VALUE_(FREESCALE_ENET_TCR_ADDSEL_S, __val) +#define FREESCALE_ENET_TCR_ADDINS_M 0x100 +#define FREESCALE_ENET_TCR_ADDINS_S 8 +#define FREESCALE_ENET_TCR_CRCFWD_M 0x200 +#define FREESCALE_ENET_TCR_CRCFWD_S 9 +// PALR Bit Fields +#define FREESCALE_ENET_PALR_PADDR1_M 0xFFFFFFFF +#define FREESCALE_ENET_PALR_PADDR1_S 0 +#define FREESCALE_ENET_PALR_PADDR1(__val) \ + VALUE_(FREESCALE_ENET_PALR_PADDR1_S, __val) +// PAUR Bit Fields +#define FREESCALE_ENET_PAUR_TYPE_M 0xFFFF +#define FREESCALE_ENET_PAUR_TYPE_S 0 +#define FREESCALE_ENET_PAUR_TYPE(__val) \ + VALUE_(FREESCALE_ENET_PAUR_TYPE_S, __val) +#define FREESCALE_ENET_PAUR_PADDR2_M 0xFFFF0000 +#define FREESCALE_ENET_PAUR_PADDR2_S 16 +#define FREESCALE_ENET_PAUR_PADDR2(__val) \ + VALUE_(FREESCALE_ENET_PAUR_PADDR2_S, __val) +// OPD Bit Fields +#define FREESCALE_ENET_OPD_PAUSE_DUR_M 0xFFFF +#define FREESCALE_ENET_OPD_PAUSE_DUR_S 0 +#define FREESCALE_ENET_OPD_PAUSE_DUR(__val) \ + VALUE_(FREESCALE_ENET_OPD_PAUSE_DUR_S, __val) +#define FREESCALE_ENET_OPD_OPCODE_M 0xFFFF0000 +#define FREESCALE_ENET_OPD_OPCODE_S 16 +#define FREESCALE_ENET_OPD_OPCODE(__val) \ + VALUE_(FREESCALE_ENET_OPD_OPCODE_S, __val) +// IAUR Bit Fields +#define FREESCALE_ENET_IAUR_IADDR1_M 0xFFFFFFFF +#define FREESCALE_ENET_IAUR_IADDR1_S 0 +#define FREESCALE_ENET_IAUR_IADDR1(__val) \ + VALUE_(FREESCALE_ENET_IAUR_IADDR1_S, __val) +// IALR Bit Fields +#define FREESCALE_ENET_IALR_IADDR2_M 0xFFFFFFFF +#define FREESCALE_ENET_IALR_IADDR2_S 0 +#define FREESCALE_ENET_IALR_IADDR2(__val) \ + VALUE_(FREESCALE_ENET_IALR_IADDR2_S, __val) +// GAUR Bit Fields +#define FREESCALE_ENET_GAUR_GADDR1_M 0xFFFFFFFF +#define FREESCALE_ENET_GAUR_GADDR1_S 0 +#define FREESCALE_ENET_GAUR_GADDR1(__val) \ + VALUE_(FREESCALE_ENET_GAUR_GADDR1_S, __val) +// GALR Bit Fields +#define FREESCALE_ENET_GALR_GADDR2_M 0xFFFFFFFF +#define FREESCALE_ENET_GALR_GADDR2_S 0 +#define FREESCALE_ENET_GALR_GADDR2(__val) \ + VALUE_(FREESCALE_ENET_GALR_GADDR2_S, __val) +// TFWR Bit Fields +#define FREESCALE_ENET_TFWR_TFWR_M 0x3F +#define FREESCALE_ENET_TFWR_TFWR_S 0 +#define FREESCALE_ENET_TFWR_TFWR(__val) \ + VALUE_(FREESCALE_ENET_TFWR_TFWR_S, __val) +#define FREESCALE_ENET_TFWR_STRFWD_M 0x100 +#define FREESCALE_ENET_TFWR_STRFWD_S 8 + +#define FREESCALE_ENET_TFWR_TFWR_64 0x0 +#define FREESCALE_ENET_TFWR_TFWR_64A 0x1 +#define FREESCALE_ENET_TFWR_TFWR_128 0x2 +#define FREESCALE_ENET_TFWR_TFWR_192 0x3 +#define FREESCALE_ENET_TFWR_TFWR_4032 0x3F +// RDSR Bit Fields +#define FREESCALE_ENET_RDSR_R_DES_START_M 0xFFFFFFF8 +#define FREESCALE_ENET_RDSR_R_DES_START_S 3 +#define FREESCALE_ENET_RDSR_R_DES_START(__val) \ + VALUE_(FREESCALE_ENET_RDSR_R_DES_S, __val) +// TDSR Bit Fields +#define FREESCALE_ENET_TDSR_X_DES_START_M 0xFFFFFFF8 +#define FREESCALE_ENET_TDSR_X_DES_START_S 3 +#define FREESCALE_ENET_TDSR_X_DES_START(__val) \ + VALUE_(FREESCALE_ENET_TDSR_X_DES_S, __val) +// MRBR Bit Fields +#define FREESCALE_ENET_MRBR_R_BUF_SIZE_M 0x3FF0 +#define FREESCALE_ENET_MRBR_R_BUF_SIZE_S 4 +#define FREESCALE_ENET_MRBR_R_BUF_SIZE(__val) \ + VALUE_(FREESCALE_ENET_MRBR_R_BUF_S, __val) +// RSFL Bit Fields +#define FREESCALE_ENET_RSFL_RX_SECTION_FULL_M 0xFF +#define FREESCALE_ENET_RSFL_RX_SECTION_FULL_S 0 +#define FREESCALE_ENET_RSFL_RX_SECTION_FULL(__val) \ + VALUE_(FREESCALE_ENET_RSFL_RX_S, __val) +// RSEM Bit Fields +#define FREESCALE_ENET_RSEM_RX_SECTION_EMPTY_M 0xFF +#define FREESCALE_ENET_RSEM_RX_SECTION_EMPTY_S 0 +#define FREESCALE_ENET_RSEM_RX_SECTION_EMPTY(__val) \ + VALUE_(FREESCALE_ENET_RSEM_RX_S, __val) +// RAEM Bit Fields +#define FREESCALE_ENET_RAEM_RX_ALMOST_EMPTY_M 0xFF +#define FREESCALE_ENET_RAEM_RX_ALMOST_EMPTY_S 0 +#define FREESCALE_ENET_RAEM_RX_ALMOST_EMPTY(__val) \ + VALUE_(FREESCALE_ENET_RAEM_RX_ALMOST_EMPTY_S, __val) +// RAFL Bit Fields +#define FREESCALE_ENET_RAFL_RX_ALMOST_FULL_M 0xFF +#define FREESCALE_ENET_RAFL_RX_ALMOST_FULL_S 0 +#define FREESCALE_ENET_RAFL_RX_ALMOST_FULL(__val) \ + VALUE_(FREESCALE_ENET_RAFL_RX_ALMOST_FULL_S, __val) +// TSEM Bit Fields +#define FREESCALE_ENET_TSEM_TX_SECTION_EMPTY_M 0xFF +#define FREESCALE_ENET_TSEM_TX_SECTION_EMPTY_S 0 +#define FREESCALE_ENET_TSEM_TX_SECTION_EMPTY(__val) \ + VALUE_(FREESCALE_ENET_TSEM_TX_S, __val) +// TAEM Bit Fields +#define FREESCALE_ENET_TAEM_TX_ALMOST_EMPTY_M 0xFF +#define FREESCALE_ENET_TAEM_TX_ALMOST_EMPTY_S 0 +#define FREESCALE_ENET_TAEM_TX_ALMOST_EMPTY(__val) \ + VALUE_(FREESCALE_ENET_TAEM_TX_ALMOST_EMPTY_S, __val) +// TAFL Bit Fields +#define FREESCALE_ENET_TAFL_TX_ALMOST_FULL_M 0xFF +#define FREESCALE_ENET_TAFL_TX_ALMOST_FULL_S 0 +#define FREESCALE_ENET_TAFL_TX_ALMOST_FULL(__val) \ + VALUE_(FREESCALE_ENET_TAFL_TX_ALMOST_FULL_S, __val) +// TIPG Bit Fields +#define FREESCALE_ENET_TIPG_IPG_M 0x1F +#define FREESCALE_ENET_TIPG_IPG_S 0 +#define FREESCALE_ENET_TIPG_IPG(__val) \ + VALUE_(FREESCALE_ENET_TIPG_IPG_S, __val) +// FTRL Bit Fields +#define FREESCALE_ENET_FTRL_TRUNC_FL_M 0x3FFF +#define FREESCALE_ENET_FTRL_TRUNC_FL_S 0 +#define FREESCALE_ENET_FTRL_TRUNC_FL(__val) \ + VALUE_(FREESCALE_ENET_FTRL_TRUNC_FL_S, __val) +// TACC Bit Fields +#define FREESCALE_ENET_TACC_S16_M 0x1 +#define FREESCALE_ENET_TACC_S16_S 0 +#define FREESCALE_ENET_TACC_IPCHK_M 0x8 +#define FREESCALE_ENET_TACC_IPCHK_S 3 +#define FREESCALE_ENET_TACC_PROCHK_M 0x10 +#define FREESCALE_ENET_TACC_PROCHK_S 4 +// RACC Bit Fields +#define FREESCALE_ENET_RACC_PADREM_M 0x1 +#define FREESCALE_ENET_RACC_PADREM_S 0 +#define FREESCALE_ENET_RACC_IPDIS_M 0x2 +#define FREESCALE_ENET_RACC_IPDIS_S 1 +#define FREESCALE_ENET_RACC_PRODIS_M 0x4 +#define FREESCALE_ENET_RACC_PRODIS_S 2 +#define FREESCALE_ENET_RACC_LINEDIS_M 0x40 +#define FREESCALE_ENET_RACC_LINEDIS_S 6 +#define FREESCALE_ENET_RACC_S16_M 0x80 +#define FREESCALE_ENET_RACC_S16_S 7 +// ATCR Bit Fields +#define FREESCALE_ENET_ATCR_EN_M 0x1 +#define FREESCALE_ENET_ATCR_EN_S 0 +#define FREESCALE_ENET_ATCR_OFFEN_M 0x4 +#define FREESCALE_ENET_ATCR_OFFEN_S 2 +#define FREESCALE_ENET_ATCR_OFFRST_M 0x8 +#define FREESCALE_ENET_ATCR_OFFRST_S 3 +#define FREESCALE_ENET_ATCR_PEREN_M 0x10 +#define FREESCALE_ENET_ATCR_PEREN_S 4 +#define FREESCALE_ENET_ATCR_PINPER_M 0x80 +#define FREESCALE_ENET_ATCR_PINPER_S 7 +#define FREESCALE_ENET_ATCR_RESTART_M 0x200 +#define FREESCALE_ENET_ATCR_RESTART_S 9 +#define FREESCALE_ENET_ATCR_CAPTURE_M 0x800 +#define FREESCALE_ENET_ATCR_CAPTURE_S 11 +#define FREESCALE_ENET_ATCR_SLAVE_M 0x2000 +#define FREESCALE_ENET_ATCR_SLAVE_S 13 +// ATVR Bit Fields +#define FREESCALE_ENET_ATVR_ATIME_M 0xFFFFFFFF +#define FREESCALE_ENET_ATVR_ATIME_S 0 +#define FREESCALE_ENET_ATVR_ATIME(__val) \ + VALUE_(FREESCALE_ENET_ATVR_ATIME_S, __val) +// ATOFF Bit Fields +#define FREESCALE_ENET_ATOFF_OFFSET_M 0xFFFFFFFF +#define FREESCALE_ENET_ATOFF_OFFSET_S 0 +#define FREESCALE_ENET_ATOFF_OFFSET(__val) \ + VALUE_(FREESCALE_ENET_ATOFF_OFFSET_S, __val) +// ATPER Bit Fields +#define FREESCALE_ENET_ATPER_PERIOD_M 0xFFFFFFFF +#define FREESCALE_ENET_ATPER_PERIOD_S 0 +#define FREESCALE_ENET_ATPER_PERIOD(__val) \ + VALUE_(FREESCALE_ENET_ATPER_PERIOD_S, __val) +// ATCOR Bit Fields +#define FREESCALE_ENET_ATCOR_COR_M 0x7FFFFFFF +#define FREESCALE_ENET_ATCOR_COR_S 0 +#define FREESCALE_ENET_ATCOR_COR(__val) \ + VALUE_(FREESCALE_ENET_ATCOR_COR_S, __val) +// ATINC Bit Fields +#define FREESCALE_ENET_ATINC_INC_M 0x7F +#define FREESCALE_ENET_ATINC_INC_S 0 +#define FREESCALE_ENET_ATINC_INC(__val) \ + VALUE_(FREESCALE_ENET_ATINC_INC_S, __val) +#define FREESCALE_ENET_ATINC_INC_CORR_M 0x7F00 +#define FREESCALE_ENET_ATINC_INC_CORR_S 8 +#define FREESCALE_ENET_ATINC_INC_CORR(__val) \ + VALUE_(FREESCALE_ENET_ATINC_INC_CORR_S, __val) +// ATSTMP Bit Fields +#define FREESCALE_ENET_ATSTMP_TIMESTAMP_M 0xFFFFFFFF +#define FREESCALE_ENET_ATSTMP_TIMESTAMP_S 0 +#define FREESCALE_ENET_ATSTMP_TIMESTAMP(__val) \ + VALUE_(FREESCALE_ENET_ATSTMP_TIMESTAMP_S, __val) +// TGSR Bit Fields +#define FREESCALE_ENET_TGSR_TF0_M 0x1 +#define FREESCALE_ENET_TGSR_TF0_S 0 +#define FREESCALE_ENET_TGSR_TF1_M 0x2 +#define FREESCALE_ENET_TGSR_TF1_S 1 +#define FREESCALE_ENET_TGSR_TF2_M 0x4 +#define FREESCALE_ENET_TGSR_TF2_S 2 +#define FREESCALE_ENET_TGSR_TF3_M 0x8 +#define FREESCALE_ENET_TGSR_TF3_S 3 +// TCSR Bit Fields +#define FREESCALE_ENET_TCSR_TDRE_M 0x1 +#define FREESCALE_ENET_TCSR_TDRE_S 0 +#define FREESCALE_ENET_TCSR_TMODE_M 0x3C +#define FREESCALE_ENET_TCSR_TMODE_S 2 +#define FREESCALE_ENET_TCSR_TMODE(__val) \ + VALUE_(FREESCALE_ENET_TCSR_TMODE_S, __val) +#define FREESCALE_ENET_TCSR_TIE_M 0x40 +#define FREESCALE_ENET_TCSR_TIE_S 6 +#define FREESCALE_ENET_TCSR_TF_M 0x80 +#define FREESCALE_ENET_TCSR_TF_S 7 +// TCCR Bit Fields +#define FREESCALE_ENET_TCCR_TCC_M 0xFFFFFFFF +#define FREESCALE_ENET_TCCR_TCC_S 0 +#define FREESCALE_ENET_TCCR_TCC(__val) \ + VALUE_(FREESCALE_ENET_TCCR_TCC_S, __val) + +#define FREESCALE_ENET_EIR_ERROR \ + (FREESCALE_ENET_EIR_PLR_M | \ + FREESCALE_ENET_EIR_UN_M | \ + FREESCALE_ENET_EIR_RL_M | \ + FREESCALE_ENET_EIR_LC_M | \ + FREESCALE_ENET_EIR_EBERR_M | \ + FREESCALE_ENET_EIR_BABT_M | \ + FREESCALE_ENET_EIR_BABR_M) + +// EOF if_freescale_enet_io.h +#endif // CYGONCE_IF_FREESCALE_ENET_IO_H diff --git a/packages/devs/eth/freescale/enet/current/src/if_freescale_enet.c b/packages/devs/eth/freescale/enet/current/src/if_freescale_enet.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/freescale/enet/current/src/if_freescale_enet.c @@ -0,0 +1,1616 @@ +//========================================================================== +// +// if_freescale_enet.c +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-06-04 +// Description: Hardware driver for Freescale ENET peripheral +// +// This driver was originally written for Kinetis and may +// require some modifications to work on other Freescale +// families such as ColdFire+. +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + + +#include +#include +#include +#include + +#if defined(CYGPKG_REDBOOT) +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_NET +# include +# include //Needed for struct ifnet +#endif + +#include +#include +#include + +#if defined CYGHWR_HAL_ENET_TCD_SECTION || defined CYGHWR_HAL_ENET_BUF_SECTION +# include +#endif +// Some debugging helpers --------------------------------------------------- + +#define DEBUG_ENET CYGPKG_DEVS_ETH_FREESCALE_ENET_DEBUG_LEVEL + +#if DEBUG_ENET >= 3 +# define debug3_printf(args...) diag_printf(args) +#else +# define debug3_printf(args...) +#endif + +#if DEBUG_ENET >= 2 +# define debug2_printf(args...) diag_printf(args) +#else +# define debug2_printf(args...) +#endif + +#if DEBUG_ENET >= 1 +# define debug1_printf(args...) diag_printf(args) +#else +# define debug1_printf(args...) +#endif + + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#define enet_eth_send enet_eth_send_nocopy +#define enet_eth_deliver enet_eth_deliver_nocopy +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#define enet_eth_send enet_eth_send_copying +#define enet_eth_deliver enet_eth_deliver_copying +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + + +// Some delay macros ------------------------------------------------------ +// Busy waiting delay +#define ENET_WAIT_US(__us) HAL_DELAY_US(__us) +// Delays / Timeouts +#define FREESCALE_ENET_RESET_DELAY 1 // Enet reset [us] +#define FREESCALE_ENET_ENABLE_DELAY 1 // Enet eneble [us] + +#define FREESCALE_ENET_PHY_INIT_TOUT 100 // Phy start up [ms] +#define FREESCALE_ENET_MII_WRITE_TOUT 2000 // Phy write timeout [us] +#define FREESCALE_ENET_MII_READ_TOUT 2000 // Phy read timeout [us] + +#ifndef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +// If kernel is available ENET_ETH_WAIT should be a normal, +// not a busy-waiting delay. +# ifdef CYGFUN_KERNEL_API_C +# define ENET_ETH_WAIT(__tick) cyg_thread_delay(__tick) +# elif !defined(CYGPKG_KERNEL) +# define ENET_ETH_WAIT(__ms) HAL_DELAY_US(__ms * 1000) +# else +# error Can not define ENET_ETH_WAIT(). +# endif +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Resources provided by HAL ============================================== +// Ethernet RAM and DMA configuration -------------------------------------- + +// Buffer descriptor memory section +#ifdef CYGHWR_HAL_ENET_TCD_SECTION +# define ENET_RAM_TCD_SECTION CYGBLD_ATTRIB_SECTION(CYGHWR_HAL_ENET_TCD_SECTION) +#else +# define ENET_RAM_TCD_SECTION +#endif // CYGHWR_HAL_ENET_TCD_SECTION + +// Buffer memory section +#ifdef CYGHWR_HAL_ENET_BUF_SECTION +# define ENET_RAM_BUF_SECTION CYGBLD_ATTRIB_SECTION(CYGHWR_HAL_ENET_BUF_SECTION) +#else +# define ENET_RAM_BUF_SECTION +#endif // CYGHWR_HAL_ENET_BUF_SECTION + +// IRQ masking -------------------------------------------------------------- +// + +#define FREESCALE_ENET_EIR_MASK_M (FREESCALE_ENET_EIR_TXF_M | \ + FREESCALE_ENET_EIR_TXB_M | FREESCALE_ENET_EIR_RXF_M | \ + FREESCALE_ENET_EIR_RXB_M) + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define FREESCALE_ENET_EIMR_MASK_M (FREESCALE_ENET_EIMR_RXF_M | \ + FREESCALE_ENET_EIMR_TXF_M) +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define FREESCALE_ENET_EIMR_MASK_M FREESCALE_ENET_EIMR_RXF_M +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + + +// Buffer configuration macros ---------------------------------------------------- +// + +#define ENET_RXBD_ALIGN \ + CYGBLD_ATTRIB_ALIGN(CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBD_ALIGN) +#define ENET_TXBD_ALIGN \ + CYGBLD_ATTRIB_ALIGN(CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBD_ALIGN) +#define ENET_RXBUF_ALIGN \ + CYGBLD_ATTRIB_ALIGN(CYGNUM_DEVS_ETH_FREESCALE_ENET_RXBUF_ALIGN) +#define ENET_TXBUF_ALIGN \ + CYGBLD_ATTRIB_ALIGN(CYGNUM_DEVS_ETH_FREESCALE_ENET_TXBUF_ALIGN) + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define ENET_TXKEY_FLAG ENET_TXBD_TO2 +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + + +// ENET statistics ---------------------------------------------------- +// + +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS_DEBUG +# define ENET_STAT_PRINTF(args...) diag_printf(args) +#else //CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS_DEBUG +# define ENET_STAT_PRINTF(args...) +#endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS_DEBUG + +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS +typedef struct freescale_enet_stats_s { + cyg_uint32 TR; // Truncated + cyg_uint32 CR; // CRC or frame error + cyg_uint32 OV; // Overrun + cyg_uint32 LG; // Frame length violation + cyg_uint32 NO; // Non octet aligned frame +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + cyg_uint32 ME; // MAC error + cyg_uint32 CE; // Receive CRC error + cyg_uint32 PE; // PHY error + cyg_uint32 FRAG; // IPv4 Fragment + cyg_uint32 ICE; // IP header chechsum error + cyg_uint32 PCR; // Protocol checksum error +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED +} freescale_enet_stats_t; + +void freescale_enet_stats_init(freescale_enet_stats_t *stats_p) { + stats_p->TR = 0; + stats_p->CR = 0; + stats_p->OV = 0; + stats_p->LG = 0; + stats_p->NO = 0; +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + stats_p->ME = 0; + stats_p->CE = 0; + stats_p->PE = 0; + stats_p->FRAG = 0; + stats_p->ICE = 0; + stats_p->PCR = 0; +#endif //CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED +} + +# define FREESCALE_ENET_STATS_INIT(__poin) freescale_enet_stats_init(__poin) +# define FREESCALE_ENET_STAT_COUNT(__poin,__val) (__poin->enet_stats.__val++) + +# define FREESCALE_ENET_STAT_DO(__ctrl,__poin,__val) \ +CYG_MACRO_START \ + if(__ctrl & ENET_RXBD_##__val){ \ + FREESCALE_ENET_STAT_COUNT(__poin,__val); \ + ENET_STAT_PRINTF(#__val "(%d) ", __poin->enet_stats.__val); \ + } \ +CYG_MACRO_END + +#else + +# define FREESCALE_ENET_STATS_INIT(__poin) +# define FREESCALE_ENET_STAT_COUNT(_poin,_val) +# define FREESCALE_ENET_STAT_DO(__ctrl,__poin,__val) + +#endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS + +// -------------------------------------------------------------- +// RedBoot configuration options for managing ESAs for us + +// Decide whether to have redboot config vars for it... +#if defined(CYGSEM_REDBOOT_FLASH_CONFIG) && defined(CYGPKG_REDBOOT_NETWORKING) +#include +#include + +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA_ETH0 +RedBoot_config_option("Network hardware address [MAC] for eth0", + eth0_esa_data, + ALWAYS_ENABLED, true, + CONFIG_ESA, 0); +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA_ETH0 +#endif // CYGPKG_REDBOOT_NETWORKING && CYGSEM_REDBOOT_FLASH_CONFIG + +// and initialization code to read them +// - independent of whether we are building RedBoot right now: +#ifdef CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA +#include +#ifndef CONFIG_ESA + #define CONFIG_ESA (6) +#endif + +#define CYGHWR_DEVS_ETH_FREESCALE_ENET_GET_ESA( mac_address, ok ) \ + CYG_MACRO_START \ + ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET, \ + "eth0_esa_data", \ + mac_address, \ + CONFIG_ESA); \ + CYG_MACRO_END +#endif // CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA + + +// ENET device =============================================================== +// Freescale ENET driver private data ---------------------------------------- + +typedef struct freescale_enet_priv_t { + CYG_ADDRWORD enet_base; // ENET base address + eth_phy_access_t *phy_p; // PHY access + cyg_uint16 max_frame_len; // Maximal frame length + cyg_uint8 rxbd_num; // Number of Rx buffer descriptors + cyg_uint8 txbd_num; // Number of Tx buffer descriptors + cyg_uint8 pins_n; // Number of (R)MII pins +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint8 txbd_avail; // Avalable Tx buffer descriptors + cyg_uint8 txkey_num; // Number of Tx key entries + cyg_uint8 txbd_can_send_min; // Minimal number of avail +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint8 res0; // Reserved + cyg_uint16 txbuf_size; // Tx buffer size + cyg_uint8 *txbuf_p; // Tx buffer pool +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint16 rxbuf_size; // Rx buffer size + cyg_uint8 fc_pause; // Flow control pause length + cyg_uint8 flags; // Various flags + cyg_uint8 *rxbuf_p; // Rx buffer pool + enet_bd_t *rxbd_pool_p; // Rx buffer descriptor pool + enet_bd_t *txbd_pool_p; // TX buffer descriptor poll + enet_bd_t *rxbd_p; // Current Rx BD + enet_bd_t *txbd_head_p; // Current Tx BD head + enet_bd_t *txbd_tail_p; // Current Tx BD tail +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint32 *txkey_pool_p; // Tx key queue pool + cyg_uint32 *txkey_head_p; // Last Txkey entry + cyg_uint32 *txkey_tail_p; // Last Txkey released +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint32 clock; // Clock gating + const cyg_uint32 *pins_p; // (R)MII pin configuration data + cyg_uint8 *enaddr; // Default ethernet (MAC) address + cyg_uint32 rx_intr_vector; + cyg_uint32 rx_intr_prio; +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_interrupt rx_interrupt; + cyg_handle_t rx_interrupt_handle; +#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_uint32 tx_intr_vector; + cyg_uint32 tx_intr_prio; +# ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_interrupt tx_interrupt; + cyg_handle_t tx_interrupt_handle; +# endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS + freescale_enet_stats_t enet_stats; +#endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS +} freescale_enet_priv_t; + +// Forward declarations ====================================================== + +static void enet_write_phy(int reg_addr, int phy_addr, unsigned short data); +static bool enet_read_phy(int reg_addr, int phy_addr, unsigned short *data_p); +static void enet_init_phy(void); +static void enet_eth_phy_set(freescale_enet_priv_t *enet_priv_p); +static bool eth_phy_init_wait(eth_phy_access_t *phy_p, cyg_uint32 ms); +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +static cyg_uint32 enet_eth_isr(cyg_vector_t vector, cyg_addrword_t data); +#endif + +// Device instances =========================================================== +// + +// ENET0 ====================================================================== +// (R)MII pins - Provided by HAL ---------------------------------------------- + +static const cyg_uint32 const enet0_pins[] = { + // Both RMII and MII interface + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDIO, + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDC, +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_PHY_RXER_USE + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXER, +#endif + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD1, + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD0, + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXEN, + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD0, + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD1, +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_PHY_RMII + // RMII interface only + CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_CRS_DV +#else + // MII interface only + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD3, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD2, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXCLK, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD2, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXCLK, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD3, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_CRS, + CYGHWR_IO_FREESCALE_ENET0_PIN_MIIO_TXER, + CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_COL +#endif +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + , + // IEEE 1588 timers + CYGHWR_IO_FREESCALE_ENET0_PIN_1588_CLKIN, + + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3, + + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2, + CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 +#endif +}; + +// Buffer and buffer descriptor memory -------------------------------------- + +// Buffer descriptors +enet_bd_t enet0_rxbd_pool[CYGNUM_DEVS_ETH_FREESCALE_ENET0_RX_BUFS] +ENET_RAM_TCD_SECTION ENET_RXBD_ALIGN; +enet_bd_t enet0_txbd_pool[CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS] + ENET_RAM_TCD_SECTION ENET_TXBD_ALIGN; + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +// Tx key queue +cyg_uint32 enet0_txkey_pool[CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS] + ENET_RAM_TCD_SECTION; +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Buffers +cyg_uint8 enet0_rxbuf[CYGNUM_DEVS_ETH_FREESCALE_ENET0_RX_BUFS * + CYGNUM_DEVS_ETH_FREESCALE_ENET0_RXBUF_SIZE] + ENET_RXBUF_ALIGN ENET_RAM_BUF_SECTION; +#ifndef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +cyg_uint8 enet0_txbuf[CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS * + CYGNUM_DEVS_ETH_FREESCALE_ENET0_TXBUF_SIZE] + ENET_TXBUF_ALIGN ENET_RAM_BUF_SECTION; +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# if CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS >= 8 +# define ENET0_TXBD_CAN_SEND_MIN 3 +# elif CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS >= 6 +# define ENET0_TXBD_CAN_SEND_MIN 2 +# else +# define ENET0_TXBD_CAN_SEND_MIN 1 +# endif +#endif + +// PHY interface entry ----------------------------------------------------- +static cyg_uint8 enet0_macaddr[16] = + {CYGPKG_DEVS_ETH_FREESCALE_ENET0_MACADDR}; + +// + +ETH_PHY_REG_LEVEL_ACCESS_FUNS(freescale_enet0_phy, + enet_init_phy, + NULL, + enet_write_phy, + enet_read_phy); + +// ENET0 device private data ------------------------------------------------- +freescale_enet_priv_t enet0_eth0_priv = { + .enet_base = CYGADDR_IO_ETH_FREESCALE_ENET0_BASE, + .phy_p = &freescale_enet0_phy, + .max_frame_len = CYGNUM_DEVS_ETH_FREESCALE_ENET0_MAX_FRAME_LEN, + .rxbd_num = CYGNUM_DEVS_ETH_FREESCALE_ENET0_RX_BUFS, + .rxbuf_size = CYGNUM_DEVS_ETH_FREESCALE_ENET0_RXBUF_SIZE, + .rxbuf_p = enet0_rxbuf, + .txbd_num = CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS, + .rxbd_pool_p = enet0_rxbd_pool, + .txbd_pool_p = enet0_txbd_pool, + .rxbd_p = NULL, + .txbd_head_p = NULL, + .txbd_tail_p = NULL, + .fc_pause = CYGNUM_ETH_FREESCALE_ENET0_OPD_PAUSE_DUR, + .flags = CYGSEM_ETH_FREESCALE_ENET0_RCR_FCE, +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + .txbd_avail = CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS, + .txkey_pool_p = enet0_txkey_pool, + .txkey_num = CYGNUM_DEVS_ETH_FREESCALE_ENET0_TX_BUFS, + .txbd_can_send_min = ENET0_TXBD_CAN_SEND_MIN, + .txkey_head_p = NULL, + .txkey_tail_p = NULL, +#else + .txbuf_size = CYGNUM_DEVS_ETH_FREESCALE_ENET0_TXBUF_SIZE, + .txbuf_p = enet0_txbuf, +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + .clock = CYGHWR_IO_FREESCALE_ENET0_CLOCK, + .pins_p = enet0_pins, + .pins_n = sizeof(enet0_pins)/sizeof(enet0_pins[0]), + .enaddr = enet0_macaddr, + .rx_intr_vector = CYGNUM_FREESCALE_ENET0_RECEIVE_INT_VECTOR, + .rx_intr_prio = CYGPKG_DEVS_ETH_FREESCALE_ENET0_INTPRIO +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + , .tx_intr_vector = CYGNUM_FREESCALE_ENET0_TRANSMIT_INT_VECTOR, + .tx_intr_prio = CYGPKG_DEVS_ETH_FREESCALE_ENET0_INTPRIO +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +}; + +// Ethernet interface entry ------------------------------------------------- +ETH_DRV_SC(enet0_eth0_sc, + &enet0_eth0_priv, // Driver specific data + CYGDAT_IO_ETH_IF_FREESCALE_ENET0_NAME, // Name for this interface + enet_eth_start, + enet_eth_stop, + enet_eth_control, + enet_eth_can_send, + enet_eth_send, + enet_eth_recv, + enet_eth_deliver, + enet_eth_poll, + enet_eth_int_vector); + +NETDEVTAB_ENTRY(enet0_netdev, + "enet0_eth", + enet_eth_init, + &enet0_eth0_sc); + +// End ENET0 ================================================================= + + +// Driver code =============================================================== +// + +// Buffer and buffer descriptor (BD) macros ================================== +// BD Iterators -------------------------------------------------------------- + +// Generic BD iterator template used by Rx and Tx iterators +#define ENET_NEXT_BD(__bd_p,__priv_p,__wrap,__pool) \ +CYG_MACRO_START \ + __bd_p = __bd_p->ctrl & __wrap ? \ + __priv_p->__pool##_pool_p : __bd_p + 1; \ +CYG_MACRO_END + +// Rx BD Iterator ------------------------------------------ +#define ENET_RXBD_NEXT(__bd_p,__priv_p) \ + ENET_NEXT_BD(__bd_p, __priv_p, ENET_RXBD_W, rxbd) + +// Tx BD Iterator +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +// Tx BD Iterator - NoCopy option -------------------------- +# define ENET_BD_AVAIL_INC(__priv_p) (__priv_p->txbd_avail++) +# define ENET_BD_AVAIL_DEC(__priv_p) (__priv_p->txbd_avail--) + +# define ENET_TXBD_ALLOC(__bd_p,__priv_p) \ +CYG_MACRO_START \ + ENET_NEXT_BD(__bd_p, __priv_p, ENET_TXBD_W, txbd); \ + ENET_BD_AVAIL_DEC(__priv_p); \ +CYG_MACRO_END + +# define ENET_TXBD_FREE(__bd_p,__priv_p) \ +CYG_MACRO_START \ + ENET_NEXT_BD(__bd_p, __priv_p, ENET_TXBD_W, txbd); \ + ENET_BD_AVAIL_INC(__priv_p); \ +CYG_MACRO_END + +# define ENET_TXBD_TRYFREE(__bd_p,__priv_p) \ +CYG_MACRO_START \ + ENET_NEXT_BD(__bd_p, __priv_p, ENET_TXBD_W, txbd); \ +CYG_MACRO_END + +// Tx key iterator ----------------------------------------- +# define ENET_TXKEY_NEXT(__bd_p,__priv_p) \ +CYG_MACRO_START \ + __bd_p = (__bd_p == (__priv_p->txkey_pool_p + __priv_p->txkey_num-1)) ? \ + __priv_p->txkey_pool_p : __bd_p + 1; \ +CYG_MACRO_END + +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Tx BD Iterator - Copying option ------------------------- +# define ENET_TXBD_NEXT(__bd_p,__priv_p) \ + ENET_NEXT_BD(__bd_p, __priv_p, ENET_TXBD_W, txbd) + +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Buffer descriptor initialization functions ================================ +// + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define ENET_RESET_BD_TX(__priv_p) \ +CYG_MACRO_START \ + __priv_p->txbd_head_p = __priv_p->txbd_pool_p + __priv_p->txbd_num - 1; \ + __priv_p->txbd_tail_p = __priv_p->txbd_head_p; \ + __priv_p->txbd_avail = __priv_p->txbd_num; \ + __priv_p->txkey_head_p = __priv_p->txkey_pool_p + __priv_p->txkey_num - 1; \ + __priv_p->txkey_tail_p = __priv_p->txkey_head_p; \ +CYG_MACRO_END +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define ENET_RESET_BD_TX(__priv_p) \ +CYG_MACRO_START \ + __priv_p->txbd_head_p = __priv_p->txbd_pool_p + __priv_p->txbd_num - 1; \ + __priv_p->txbd_tail_p = __priv_p->txbd_head_p; \ +CYG_MACRO_END +#endif // + +#define ENET_INIT_BD_TX(__priv_p) ENET_RESET_BD_TX(__priv_p) + + +// Initialize a buffer descriptor -------------------------------------------- +// Generic function for initialization of a buffer descriptor + +static void +enet_init_bd(enet_bd_t *bd_p, cyg_uint32 bd_size, cyg_uint16 cntrl_init, + cyg_uint16 cntrl_wrap, cyg_uint8 *buff_p, cyg_uint32 buf_size +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + , cyg_uint32 *key_p +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + , cyg_uint32 ebd_ctrl +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + ) +{ + enet_bd_t *bd_end; + debug1_printf("ENET: Inint_bd:\n"); + for(bd_end = bd_p + bd_size; bd_p < bd_end; bd_p++){ + debug1_printf("ENET: %p -> ", bd_p); + bd_p->ctrl = cntrl_init; + bd_p->len = 0; + bd_p->buffer_p = (cyg_uint8 *)CYG_CPU_TO_BE32((cyg_uint32)buff_p); + debug1_printf("cntrl=0x%04x len=%d buffer=%p[%p]", + bd_p->ctrl, bd_p->len, bd_p->buffer_p, buff_p); + buff_p += (buf_size); +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + bd_p->ebd_ctrl = ebd_ctrl; + bd_p->hlen_proto = 0; + bd_p->payload_csum = 0; + bd_p->bdu = ENET_TXBD_BDU; + bd_p->timestamp_1588 = 0; + bd_p->reserved[0] = 0; + bd_p->reserved[1] = 0; +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + if(key_p) { + *key_p = 0; + debug1_printf(" tx_key[%p]=%x", key_p, *key_p); + key_p++; + } +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + debug1_printf("\n"); + } + debug1_printf("ENET: end, bd_p=%p\n", bd_p); + bd_p--; + bd_p->ctrl |= cntrl_wrap; + debug1_printf("ENET: %p -> ", bd_p); + debug1_printf("cntrl=0x%04x len=%d buffer=%p\n", + bd_p->ctrl, bd_p->len, bd_p->buffer_p); +} + + +// Initialize buffer descriptors and buffers -------------------------------- +// + +static void +enet_init_buffers(freescale_enet_priv_t *enet_priv_p) +{ + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + + // Initialize receive descriptor ring + enet_priv_p->rxbd_p = enet_priv_p->rxbd_pool_p; + enet_init_bd(enet_priv_p->rxbd_pool_p, enet_priv_p->rxbd_num, + ENET_RXBD_E, ENET_RXBD_W, enet_priv_p->rxbuf_p, enet_priv_p->rxbuf_size +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + , NULL +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + , ENET_RXBD_INT +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + ); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RDSR, + (cyg_uint32)enet_priv_p->rxbd_pool_p); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_MRBR, enet_priv_p->rxbuf_size); + + // Initialize transmit descriptor ring + ENET_INIT_BD_TX(enet_priv_p); +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + enet_init_bd(enet_priv_p->txbd_pool_p, enet_priv_p->txbd_num, 0, ENET_TXBD_W, + NULL, 0, enet_priv_p->txkey_pool_p +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + enet_init_bd(enet_priv_p->txbd_pool_p, enet_priv_p->txbd_num, 0, ENET_TXBD_W, + enet_priv_p->txbuf_p, enet_priv_p->txbuf_size +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + , ENET_TXBD_INT +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_IP + | ENET_TXBD_IINS +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_IP +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_PROT + | ENET_TXBD_PINS +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_TX_PROT +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + | ENET_TXBD_TS +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + ); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_TDSR, + (cyg_uint32)enet_priv_p->txbd_pool_p); + enet_priv_p->txbd_tail_p = enet_priv_p->txbd_head_p; +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_TFWR, + FREESCALE_ENET_TFWR_STRFWD_M); +#else //CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_TFWR, + FREESCALE_ENET_TFWR_TFWR(FREESCALE_ENET_TFWR_TFWR_192)); +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + +} + +// Hardware initialization functions ========================================= + +// Configure ENET (R)MII pins ------------------------------------------------ +// Note: pin acces uses services from HAL. + +static void +enet_cfg_pins(freescale_enet_priv_t *enet_priv_p) +{ + const cyg_uint32 *pin_p; + + if((pin_p = enet_priv_p->pins_p)) { + for(; + pin_p < enet_priv_p->pins_p + enet_priv_p->pins_n; + CYGHWR_IO_FREESCALE_ENET_PIN(*pin_p++)); + } +} + +// Set a MAC address match. ------------------------------------------------- +// Packets received which match this address will be passed on. + +void +enet_set_mac_addr (CYG_ADDRWORD enet_base, const cyg_uint8 *addr_p) +{ + cyg_uint32 regval; + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_PALR, + (cyg_uint32)((addr_p[0]<<24) + (addr_p[1]<<16) + + (addr_p[2]<<8) + addr_p[3])); + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_PAUR, regval); + regval &= 0x0000ffff; + regval |= (cyg_uint32)((addr_p[4]<<24) + (addr_p[5]<<16)); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_PAUR, regval); +} + + +// Initialize ENET device ---------------------------------------------------- +// + +static bool +enet_eth_init(struct cyg_netdevtab_entry *tab) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance; + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *) sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; +#ifdef CYGHWR_DEVS_ETH_FREESCALE_ENET_GET_ESA + bool esa_ok = false; +#endif + // Bring clock to the sevice + CYGHWR_IO_CLOCK_ENABLE(enet_priv_p->clock); + // Assign pins + enet_cfg_pins(enet_priv_p); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, 0); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, 0xFFFFFFFF); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_ECR, + FREESCALE_ENET_ECR_RESET_M); + ENET_WAIT_US(FREESCALE_ENET_RESET_DELAY); + +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_ECR, + FREESCALE_ENET_ECR_EN1588_M); +#else // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_ECR, 0); +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_drv_interrupt_create(enet_priv_p->rx_intr_vector, + enet_priv_p->rx_intr_prio, + (cyg_addrword_t)sc, + (cyg_ISR_t *)enet_eth_isr, + (cyg_DSR_t *)eth_drv_dsr, + &enet_priv_p->rx_interrupt_handle, + &enet_priv_p->rx_interrupt); + cyg_drv_interrupt_attach(enet_priv_p->rx_interrupt_handle); +# ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_drv_interrupt_create(enet_priv_p->tx_intr_vector, + enet_priv_p->tx_intr_prio, + (cyg_addrword_t)sc, + (cyg_ISR_t *)enet_eth_isr, + (cyg_DSR_t *)eth_drv_dsr, + &enet_priv_p->tx_interrupt_handle, + &enet_priv_p->tx_interrupt); + cyg_drv_interrupt_attach(enet_priv_p->tx_interrupt_handle); +# endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + +#ifdef CYGHWR_DEVS_ETH_FREESCALE_ENET_GET_ESA + // Get MAC address from RedBoot configuration variables + CYGHWR_DEVS_ETH_FREESCALE_ENET_GET_ESA(&enet_priv_p->enaddr[0], esa_ok); + // If this call fails myMacAddr is unchanged and MAC address from + // CDL is used + if (!esa_ok) { + // Can't figure out ESA + debug1_printf("Freescale ENET - Warning! ESA unknown\n"); + } +#endif + // Set the source address for the controller + enet_set_mac_addr (enet_base, enet_priv_p->enaddr); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_IALR, 0x00000000); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_IAUR, 0x00000000); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_GALR, 0x00000000); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_GAUR, 0x00000000); + + if(eth_phy_init_wait(enet_priv_p->phy_p, FREESCALE_ENET_PHY_INIT_TOUT)) { + // Initialize upper level driver. + (sc->funs->eth_drv->init)(sc, (cyg_uint8 *)enet_priv_p->enaddr); + return true; + } else { + return false; + } +} + +// Start ENET ---------------------------------------------------------------- + +static void +enet_eth_start(struct eth_drv_sc *sc, unsigned char *enaddr_p, int flags) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + cyg_uint32 enet_reg; + + + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_ECR, enet_reg); + if(!(enet_reg & FREESCALE_ENET_ECR_ETHEREN_M)) { + // Set Speed, duplex, etc. + enet_eth_phy_set(enet_priv_p); + + // Init Buffers + enet_init_buffers(enet_priv_p); + + // Enable the device! + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_MASK_M); +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_drv_interrupt_unmask(enet_priv_p->rx_intr_vector); +# ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_drv_interrupt_unmask(enet_priv_p->tx_intr_vector); +# endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, + FREESCALE_ENET_EIMR_MASK_M); +#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + + // Flow controll + if(enet_priv_p->flags & CYGSEM_ETH_FREESCALE_ENET0_RCR_FCE) { + debug1_printf("ENET: Flow control: RCR enabled.\n"); + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_RCR, enet_reg); + enet_reg |= FREESCALE_ENET_RCR_FCE_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RCR, enet_reg); + } else { + debug1_printf("ENET: Flow control: RCR disabled.\n"); + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_RCR, enet_reg); + enet_reg &= ~FREESCALE_ENET_RCR_FCE_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RCR, enet_reg); + } + debug1_printf("ENET: Flow control: RCR 0x%08x.\n", enet_reg); + + // Flow controll pause duration + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_OPD, enet_reg); + enet_reg &= 0xffff000; + enet_reg |= enet_priv_p->fc_pause; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_OPD, enet_reg); + debug1_printf("ENET: Flow control: pause %08x\n", enet_reg); + + // Enable ENET... + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_ECR, enet_reg); + enet_reg |= FREESCALE_ENET_ECR_ETHEREN_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_ECR, enet_reg); + // ...and wait a bit to settle + ENET_WAIT_US(FREESCALE_ENET_ENABLE_DELAY); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RDAR, + FREESCALE_ENET_RDAR_RDAR_M); +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS + FREESCALE_ENET_STATS_INIT(&enet_priv_p->enet_stats); +#endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_STATS + } +} + +// Stop ENET ---------------------------------------------------------------- + +static void +enet_eth_stop(struct eth_drv_sc *sc) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + cyg_uint32 ecr; +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + enet_bd_t *tx_bd_head_p, *tx_bd_tail_p; + cyg_uint32 *tx_key_tail_p; + void (*tx_done)(struct eth_drv_sc *sc, CYG_ADDRESS key, int status); +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_drv_interrupt_mask(enet_priv_p->rx_intr_vector); +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_drv_interrupt_mask(enet_priv_p->tx_intr_vector); +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, 0x00000000); +#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_MASK_M); + + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_ECR, ecr); + ecr &= ~FREESCALE_ENET_ECR_ETHEREN_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_ECR, ecr); + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + // Free eventual unsent buffers. + tx_bd_head_p = enet_priv_p->txbd_head_p; + tx_bd_tail_p = enet_priv_p->txbd_tail_p; + tx_key_tail_p = enet_priv_p->txkey_tail_p; + tx_done = sc->funs->eth_drv->tx_done; + while(tx_bd_tail_p != tx_bd_head_p) { + ENET_TXBD_FREE(tx_bd_tail_p, enet_priv_p); + if(tx_bd_tail_p->ctrl & ENET_TXKEY_FLAG) { + tx_bd_tail_p->ctrl &= ~ENET_TXKEY_FLAG; + (tx_done)(sc, *tx_key_tail_p, 0); + *tx_key_tail_p = 0; + ENET_TXKEY_NEXT(tx_key_tail_p, enet_priv_p); + } + } + enet_priv_p->txbd_tail_p = tx_bd_tail_p; + enet_priv_p->txkey_tail_p = tx_key_tail_p; +#endif //CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +} + +// ENET processing functions ================================================= +// ENET control function ----------------------------------------------------- + +static int +enet_eth_control(struct eth_drv_sc *sc, unsigned long key, + void *data_p, int length) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + int retcode = 1; + + switch (key) { + case ETH_DRV_SET_MAC_ADDRESS: + if(length >= ETHER_ADDR_LEN) { + enet_eth_stop(sc); + enet_set_mac_addr(enet_base, (cyg_uint8 *)data_p); + enet_eth_start(sc, (cyg_uint8 *)data_p, 0); + retcode = 0; + } + break; + default: + break; + } + return retcode; +} + +// Can send ------------------------------------------------------------------ +// NoCopy: returns number of free Tx buffer descriprors +// Copying: returns 1 if there is at least 1 free Tx buffer descriotor + +static int +enet_eth_can_send(struct eth_drv_sc *sc) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + cyg_int32 avail = enet_priv_p->txbd_avail; +# if DEBUG_ENET >= 2 + if(avail < enet_priv_p->txbd_can_send_min) + diag_printf("ENET can_send: available = %d buffer descriptors.\n", + avail); +# endif // DEBUG_ENET + return (int) avail < enet_priv_p->txbd_can_send_min ? 0 : avail; +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + enet_bd_t *tx_bd_p = enet_priv_p->txbd_head_p; + + ENET_TXBD_NEXT(tx_bd_p, enet_priv_p); + debug2_printf("ENET: can send: %d\n", !(tx_bd_p->ctrl & ENET_TXBD_R)); + if(!(tx_bd_p->ctrl & ENET_TXBD_R)) + return 1; + else + return 0; +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +} + +// Send ---------------------------------------------------------------------- +// +// Trigger ENET for sending -------------------------------------------------- + +static void inline +enet_eth_send_trigger(freescale_enet_priv_t *enet_priv_p) +{ + cyg_uint32 tdar; + + do { + HAL_READ_UINT32(enet_priv_p->enet_base + FREESCALE_ENET_REG_TDAR, tdar); + } while(tdar & FREESCALE_ENET_TDAR_TDAR_M); + tdar = FREESCALE_ENET_TDAR_TDAR_M; + HAL_WRITE_UINT32(enet_priv_p->enet_base + FREESCALE_ENET_REG_TDAR, tdar); +} + +#define ENET_ETH_SEND_RDY(__bd_p,_ad_flag) \ +CYG_MACRO_START \ + cyg_uint16 ctrl; \ + ctrl = __bd_p->ctrl & ENET_TXBD_W; \ + ctrl |= ENET_TXBD_R | ENET_TXBD_TC | (_ad_flag); \ + __bd_p->ctrl = ctrl; \ +CYG_MACRO_END + +// There different send functios for NoCopy and Copying driver options. +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Send - NoCopy version. +// This version does not copy SG buffer but writes SG buf pointer +// in ENET BD. +// Note: ENET requires that buf pointer is evenly divisible by 8. + +static void +enet_eth_send_nocopy(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, + int sg_len, int total_len, unsigned long key) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + enet_bd_t *tx_bd_p; + enet_bd_t *tx_bd0_p=NULL; + cyg_uint32 *tx_key_p; + struct eth_drv_sg *sg_list_z; + + if(enet_priv_p->txbd_avail < sg_len) { + debug1_printf("ENET Send: Error! sg_len %d avail %d\n", sg_len, enet_priv_p->txbd_avail); + (sc->funs->eth_drv->tx_done)(sc, key, 0); + return; + } + debug3_printf("ENET Send: sg_len %d avail %d\n", sg_len, enet_priv_p->txbd_avail); + tx_bd_p=enet_priv_p->txbd_head_p; + for(sg_list_z=sg_list+sg_len; sg_listbuffer_p=(cyg_uint8 *)CYG_CPU_TO_BE32(sg_list->buf); + tx_bd_p->len=CYG_CPU_TO_BE16(sg_list->len); +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + tx_bd_p->bdu = 0; +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + if(tx_bd0_p) { + ENET_ETH_SEND_RDY(tx_bd_p, 0); + } else { + tx_bd0_p=tx_bd_p; + } + } + tx_key_p=enet_priv_p->txkey_head_p; + *tx_key_p = key; + ENET_TXKEY_NEXT(tx_key_p, enet_priv_p); + if(tx_bd_p != tx_bd0_p) { + debug3_printf("ENET Send2: Key[%p] = 0x%x\n", tx_key_p, key); + tx_bd_p->ctrl |= (ENET_TXBD_L | ENET_TXKEY_FLAG); // is last and has key + ENET_ETH_SEND_RDY(tx_bd0_p, 0); + } else { + debug3_printf("ENET Send1: Key[%p] = 0x%x\n", tx_key_p, key); + ENET_ETH_SEND_RDY(tx_bd0_p, ENET_TXBD_L | ENET_TXKEY_FLAG); + } + enet_priv_p->txkey_head_p = tx_key_p; + enet_priv_p->txbd_head_p = tx_bd_p; + enet_eth_send_trigger(enet_priv_p); +} + +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Send - Copying version. +// This version physically copies SG buf(s) in private ENET buffer(s). +// This version is usefull if upper layer stack does not guarantee +// buffers aligned to 8 byte boundary. +// Also requires no Tx interrupts. + +static void +enet_eth_send_copying(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, + int sg_len, int total_len, unsigned long key) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + enet_bd_t *tx_bd_p; + struct eth_drv_sg *sg_list_z; + cyg_uint16 ctrl; + cyg_uint8* txbuf_p; + cyg_uint32 txbuf_k; + enet_bd_t *tx_bd_save_p; + + tx_bd_p=enet_priv_p->txbd_head_p; +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + while(!(tx_bd_p->bdu & ENET_TXBD_BDU)){ + debug1_printf("ENET Send: Waiting for BDU %p\n", tx_bd_p); + } +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + debug2_printf("ENET Send: sg_len %d total_len %d\n", sg_len, total_len); + tx_bd_save_p=tx_bd_p; + ENET_TXBD_NEXT(tx_bd_p, enet_priv_p); + txbuf_p = (cyg_uint8 *)CYG_CPU_TO_BE32((cyg_uint32)tx_bd_p->buffer_p); + txbuf_k = 0; + for(sg_list_z=sg_list+sg_len; sg_listlen) > enet_priv_p->txbuf_size) { + debug1_printf("ENET Send: Buffer overflow: %d (max = %d)\n", txbuf_k, + enet_priv_p->txbuf_size); + enet_priv_p->txbd_head_p = tx_bd_save_p; + (sc->funs->eth_drv->tx_done)(sc, key, 0); + return; + } + memcpy(txbuf_p, (cyg_uint8 *)sg_list->buf, sg_list->len); + txbuf_p += sg_list->len; + } + tx_bd_p->len=CYG_CPU_TO_BE16(total_len); + ctrl = tx_bd_p->ctrl & ENET_TXBD_W; + ctrl |= ENET_TXBD_R | ENET_TXBD_TC | ENET_TXBD_L; +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + tx_bd_p->bdu = 0; +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + tx_bd_p->ctrl = ctrl; + enet_priv_p->txbd_head_p = tx_bd_p; + debug2_printf("ENET Send: trigger, done.\n"); + enet_eth_send_trigger(enet_priv_p); + (sc->funs->eth_drv->tx_done)(sc, key, 0); +} + +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Receive ------------------------------------------------------------------ + +static void +enet_eth_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + cyg_uint8 *rxbuffer_p; + struct eth_drv_sg *sg_list_z; + enet_bd_t *rx_bd_p; + + debug3_printf("ENET recv: sg_len=%d first len=%d\n", sg_len, sg_list->len); + rx_bd_p=enet_priv_p->rxbd_p; + rxbuffer_p=(cyg_uint8 *)CYG_CPU_TO_BE32((cyg_uint32)rx_bd_p->buffer_p); + for(sg_list_z=sg_list+sg_len; sg_listbuf) { + memcpy((cyg_uint8 *)sg_list->buf, rxbuffer_p, sg_list->len); + rxbuffer_p+=sg_list->len; + } + } +} + +// Reception error check ----------------------------------------------------- + +static inline bool +enet_eth_recv_error(enet_bd_t *rx_bd_p, freescale_enet_priv_t *enet_priv_p) +{ + bool errcod=false; + cyg_uint32 ctrl = rx_bd_p->ctrl; + + if(ctrl & ENET_RXBD_TR) { + ENET_STAT_PRINTF("ENET: Ethernet trunc error ctrl = 0x%04x\n", + rx_bd_p->ctrl); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, TR); + errcod = true; + } else if(ctrl & ENET_RXBD_L) { + if(ctrl & (ENET_RXBD_CR | ENET_RXBD_OV | ENET_RXBD_LG | ENET_RXBD_NO)) + { + // Ethernet fault processing + ENET_STAT_PRINTF("ENET: Ethernet error ctrl = 0x%04x => ", + rx_bd_p->ctrl); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, CR); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, OV); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, LG); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, NO); + ENET_STAT_PRINTF("\n"); + errcod = true; + } + +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + ctrl = rx_bd_p->ebd_ctrl; + if(ctrl & (ENET_RXBD_ME | ENET_RXBD_PE | ENET_RXBD_CE | ENET_RXBD_FRAG +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_IP + | ENET_RXBD_ICE +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_PROT + | ENET_RXBD_PCR +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_PROT +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_ACCEL_RX_IP + )) + { + cyg_uint32 head_len = (rx_bd_p->hlen_proto >> 11) & 0x1f; + if(head_len || (ctrl & (ENET_RXBD_ME | ENET_RXBD_PE | + ENET_RXBD_CE | ENET_RXBD_FRAG ))) + { + // Enhanced bd fault processing + ENET_STAT_PRINTF("ENET: Enhanced bd error ctrl = 0x%08x => ", + rx_bd_p->ebd_ctrl); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, ME); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, PE); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, CE); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, FRAG); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, ICE); + FREESCALE_ENET_STAT_DO(ctrl, enet_priv_p, PCR); + ENET_STAT_PRINTF("\n"); + ENET_STAT_PRINTF("ENET: HeadLen=%d[0x%x] Proto=%d[0x%x]\n", + head_len, head_len, + rx_bd_p->hlen_proto & 0xff, + rx_bd_p->hlen_proto & 0xff); + errcod = true; + } + } +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + } + if(errcod) { +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + debug2_printf("ENET: Bad msg ctrl = 0x%04x ebd_ctrl = 0x%08x\n", + rx_bd_p->ctrl, rx_bd_p->ebd_ctrl); +#else // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + debug2_printf("ENET: Bad msg ctrl = 0x%04x\n", rx_bd_p->ctrl); +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + } + return errcod; +} + +// Deliver ------------------------------------------------------------------- +#define ENET_DELIVER_NEED_SERVICE_RX FREESCALE_ENET_EIMR_RXF_M +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define ENET_DELIVER_NEED_SERVICE_TX FREESCALE_ENET_EIMR_TXF_M +# define ENET_DELIVER_NEED_SERVICE (ENET_DELIVER_NEED_SERVICE_RX | \ + ENET_DELIVER_NEED_SERVICE_TX) +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY +# define ENET_DELIVER_NEED_SERVICE (ENET_DELIVER_NEED_SERVICE_RX) +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +#define ENET_DELIVER_NEED_SERVICE_SET(__var,__rt) \ +CYG_MACRO_START \ + __var |= ENET_DELIVER_NEED_SERVICE_##__rt; \ +CYG_MACRO_END + +#define ENET_DELIVER_NEED_SERVICE_CLEAR(__var,__rt) \ +CYG_MACRO_START \ + __var &= ~ENET_DELIVER_NEED_SERVICE_##__rt; \ +CYG_MACRO_END + +// There different deliver functios for NoCopy and Copying driver options. + +#ifdef CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Deliver - NoCopy varsion +// This deliver vresion is compatible with NoCopy send version. + +static void +enet_eth_deliver_nocopy(struct eth_drv_sc * sc) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + enet_bd_t *tx_bd_tail_p, *tx_bd_tail_save_p; + cyg_uint32 *tx_key_tail_p; + enet_bd_t *rx_bd_p; + cyg_uint16 ctrl; + cyg_uint32 eir; + cyg_uint32 need_service; + void (*recv)(struct eth_drv_sc *sc, int total_len); + void (*tx_done)(struct eth_drv_sc *sc, CYG_ADDRESS key, int status); + + recv = sc->funs->eth_drv->recv; + tx_done = sc->funs->eth_drv->tx_done; + + tx_bd_tail_p = enet_priv_p->txbd_tail_p; + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + need_service = eir & ENET_DELIVER_NEED_SERVICE; + do { + //Clear all ENET Interrupt events + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_MASK_M); + if(eir & FREESCALE_ENET_EIR_ERROR) { + debug2_printf("ENET: EIR Error 0x%08x\n", + eir & FREESCALE_ENET_EIR_ERROR); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_ERROR); + } + + // RX Event processing + if(need_service & ENET_DELIVER_NEED_SERVICE_RX) { + rx_bd_p=enet_priv_p->rxbd_p; + ctrl=rx_bd_p->ctrl; + if(ctrl & ENET_RXBD_E) { + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, RX); + } else { + if(!enet_eth_recv_error(rx_bd_p, enet_priv_p)) { + (recv)(sc, CYG_CPU_TO_BE16(rx_bd_p->len)); + } + ctrl &= ENET_RXBD_W; + ctrl |= ENET_RXBD_E; + rx_bd_p->ctrl = ctrl; +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + rx_bd_p->bdu = 0; +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + // Inform ENET that free Rx buffers have beeen freed. + HAL_WRITE_UINT32(enet_priv_p->enet_base + + FREESCALE_ENET_REG_RDAR, + FREESCALE_ENET_RDAR_RDAR_M); + + ENET_RXBD_NEXT(rx_bd_p, enet_priv_p); + enet_priv_p->rxbd_p=rx_bd_p; + + if(rx_bd_p->ctrl & ENET_RXBD_E) { + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, RX); + } + } + } + + // TX Event processing + if(need_service & ENET_DELIVER_NEED_SERVICE_TX) { + if(enet_priv_p->txbd_num == enet_priv_p->txbd_avail) { + debug2_printf("ENET: Tx nothing to send\n"); + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, TX); + } else { + tx_bd_tail_save_p=tx_bd_tail_p; + ENET_TXBD_TRYFREE(tx_bd_tail_p, enet_priv_p); + ctrl = tx_bd_tail_p->ctrl; + if(ctrl & ENET_TXBD_R){ + tx_bd_tail_p=tx_bd_tail_save_p; + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, TX); + } else { + ENET_BD_AVAIL_INC(enet_priv_p); + if(ctrl & ENET_TXKEY_FLAG){ +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + while(!(tx_bd_tail_p->bdu & ENET_TXBD_BDU)){ + debug1_printf("ENET Send: Waiting for BDU %p\n", tx_bd_tail_p); + } +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + tx_key_tail_p = enet_priv_p->txkey_tail_p; + debug3_printf("ENET Deliver: Key[%p] = 0x%x\n", + tx_key_tail_p, *tx_key_tail_p); + ENET_TXKEY_NEXT(tx_key_tail_p, enet_priv_p); + enet_priv_p->txkey_tail_p = tx_key_tail_p; + ctrl &= ~ENET_TXKEY_FLAG; + tx_bd_tail_p->ctrl = ctrl; + (tx_done)(sc, *tx_key_tail_p, 0); + } + if(enet_priv_p->txbd_avail == enet_priv_p->txbd_num) { + debug3_printf("ENET: Tx All sent.\n"); + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, TX); + } + } + } + } + + // Check if Interrupt had arrived in meantime + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + need_service |= eir & ENET_DELIVER_NEED_SERVICE; + } while(need_service); + debug3_printf("ENET: Delivered.\n"); + enet_priv_p->txbd_tail_p = tx_bd_tail_p; +# ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +# ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + //Unmask all ENET interrupts + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, + FREESCALE_ENET_EIMR_MASK_M); +# else // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + cyg_drv_interrupt_unmask(enet_priv_p->tx_intr_vector); + cyg_drv_interrupt_unmask(enet_priv_p->rx_intr_vector); +# endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK +# endif //CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +} + +#else // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Deliver - Copying varsion +// This deliver vresion is compatible with Copying send version. + +static void +enet_eth_deliver_copying(struct eth_drv_sc * sc) +{ + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + enet_bd_t *rx_bd_p; + cyg_uint16 ctrl; + cyg_uint32 eir; + cyg_uint32 need_service; + void (*recv)(struct eth_drv_sc *sc, int total_len); + + recv = sc->funs->eth_drv->recv; + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + need_service = eir & ENET_DELIVER_NEED_SERVICE; + do { + //Clear all ENET Interrupt events + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_MASK_M); + if(eir & FREESCALE_ENET_EIR_ERROR) { + debug2_printf("ENET: EIR Error 0x%08x\n", + eir & FREESCALE_ENET_EIR_ERROR); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, + FREESCALE_ENET_EIR_ERROR); + } + + // RX Event processing + if(need_service & ENET_DELIVER_NEED_SERVICE_RX) { + rx_bd_p=enet_priv_p->rxbd_p; + ctrl=rx_bd_p->ctrl; + if(ctrl & ENET_RXBD_E) { + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, RX); + } else { + if(!enet_eth_recv_error(rx_bd_p, enet_priv_p)) { + (recv)(sc, CYG_CPU_TO_BE16(rx_bd_p->len)); + } + ctrl &= ENET_RXBD_W; + ctrl |= ENET_RXBD_E; + rx_bd_p->ctrl = ctrl; +# ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + rx_bd_p->bdu = 0; +# endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_BD_ENHANCED + // Inform ENET that Rx buffers have been freed. + HAL_WRITE_UINT32(enet_priv_p->enet_base + + FREESCALE_ENET_REG_RDAR, + FREESCALE_ENET_RDAR_RDAR_M); + + ENET_RXBD_NEXT(rx_bd_p, enet_priv_p); + enet_priv_p->rxbd_p=rx_bd_p; + + if(rx_bd_p->ctrl & ENET_RXBD_E) { + ENET_DELIVER_NEED_SERVICE_CLEAR(need_service, RX); + } + } + } + + // Check if Interrupt had arrived in meantime + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + need_service |= eir & ENET_DELIVER_NEED_SERVICE; + } while(need_service); + +# ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +# ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + //Unmask all ENET interrupts + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, + FREESCALE_ENET_EIMR_MASK_M); +# else // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK +// cyg_drv_interrupt_unmask(enet_priv_p->tx_intr_vector); + cyg_drv_interrupt_unmask(enet_priv_p->rx_intr_vector); +# endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK +# endif //CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +} + +#endif // CYGOPT_ETH_FREESCALE_ENET_TX_NOCOPY + +// Poll --------------------------------------------------------------------- +static void +enet_eth_poll(struct eth_drv_sc *sc) +{ + enet_eth_deliver(sc); +} + +// ISR ---------------------------------------------------------------------- +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +static cyg_uint32 +enet_eth_isr(cyg_vector_t vector, cyg_addrword_t data) +{ +#ifdef CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + struct eth_drv_sc *sc = (struct eth_drv_sc *)data; + freescale_enet_priv_t *enet_priv_p = + (freescale_enet_priv_t *)sc->driver_private; + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + + //Mask ENET Interrupts + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIMR, 0x00000000); +#else // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + cyg_drv_interrupt_mask(vector); +#endif // CYGOPT_DEVS_ETH_FREESCALE_ENET_IRQ_FASTMASK + cyg_drv_interrupt_acknowledge(vector); + + return CYG_ISR_CALL_DSR; +} + +#endif //CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + +static int +enet_eth_int_vector(struct eth_drv_sc *sc) +{ + return CYGNUM_FREESCALE_ENET0_RECEIVE_INT_VECTOR; +} + +// PHY related stuff ========================================================= +// MDIO interface + +// Polling based waiting function for MDIO transactions +static bool +freescale_enet_busywait_mii(CYG_ADDRWORD enet_base, cyg_uint32 counter) +{ + cyg_uint32 eir; + bool done=0; + + for(; counter; counter--) { + ENET_WAIT_US(2); + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + if(eir & FREESCALE_ENET_EIR_MII_M) { + eir |= FREESCALE_ENET_EIR_MII_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + done=1; + break; + } + } + return done; +} + +// Write a PHY register via the MDIO interface ------------------------------- + +static void +enet_write_phy(int reg_addr, int phy_addr, unsigned short data) +{ + CYG_ADDRWORD enet_base = enet0_eth0_priv.enet_base; + cyg_uint32 eir; + + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + eir |= FREESCALE_ENET_EIR_MII_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_MMFR, + FREESCALE_ENET_MMFR_ST(01) | + FREESCALE_ENET_MMFR_OP(01) | + FREESCALE_ENET_MMFR_PA(phy_addr) | + FREESCALE_ENET_MMFR_RA(reg_addr) | + FREESCALE_ENET_MMFR_TA(02) | + FREESCALE_ENET_MMFR_DATA(data)); + freescale_enet_busywait_mii(enet_base, FREESCALE_ENET_MII_WRITE_TOUT); +} + +// Read a PHY register via the MDIO interface -------------------------------- + +static bool +enet_read_phy(int reg_addr, int phy_addr, unsigned short *data_p) +{ + bool done = 0; + volatile cyg_uint32 mmfr; + CYG_ADDRWORD enet_base = enet0_eth0_priv.enet_base; + cyg_uint32 eir; + + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + eir |= FREESCALE_ENET_EIR_MII_M; + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_EIR, eir); + + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_MMFR, + FREESCALE_ENET_MMFR_ST(01) | + FREESCALE_ENET_MMFR_OP(02) | + FREESCALE_ENET_MMFR_PA(phy_addr) | + FREESCALE_ENET_MMFR_RA(reg_addr) | + FREESCALE_ENET_MMFR_TA(02)); + if((done = freescale_enet_busywait_mii(enet_base, + FREESCALE_ENET_MII_READ_TOUT))) { + HAL_READ_UINT32(enet_base + FREESCALE_ENET_REG_MMFR, mmfr); + *data_p = (unsigned short)(mmfr & FREESCALE_ENET_MMFR_DATA_M); + } + return done; +} + + +// PHY initialization functions ---------------------------------------------- +// Init ENET device for phy access ------------------------------------------- +// +static void +enet_init_phy(void) +{ + CYG_ADDRWORD enet_base = enet0_eth0_priv.enet_base; + cyg_uint32 mii_speed; + + mii_speed = (2 * CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK / 5000000 + 1); + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_MSCR, + FREESCALE_ENET_MSCR_MII_SPEED(mii_speed) | + FREESCALE_ENET_MSCR_HOLDTIME(0) + ); +} + +// Set ENET device according to PHY stat ------------------------------------- +// +static void +enet_eth_phy_set(freescale_enet_priv_t *enet_priv_p) +{ + CYG_ADDRWORD enet_base = enet_priv_p->enet_base; + unsigned short phy_state = 0; + cyg_uint32 regval; + + phy_state=_eth_phy_state(enet_priv_p->phy_p); +#ifdef CYGSEM_DEVS_ETH_FREESCALE_ENET_PHY_RMII + regval = FREESCALE_ENET_RCR_MAX_FL(enet_priv_p->max_frame_len) + | FREESCALE_ENET_RCR_RMII_MODE_M | FREESCALE_ENET_RCR_MII_MODE_M; + if((phy_state & ETH_PHY_STAT_LINK) && !(phy_state & ETH_PHY_STAT_100MB)) { + // Operate in 10MB mode + regval |= FREESCALE_ENET_RCR_RMII_10T_M; + } + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RCR, regval); +#else // CYGSEM_DEVS_ETH_FREESCALE_ENET_PHY_RMII + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_RCR, + FREESCALE_ENET_RCR_MAX_FL(enet_priv_p->max_frame_len) | + FREESCALE_ENET_RCR_MII_MODE_M); +#endif // CYGSEM_DEVS_ETH_FREESCALE_ENET_PHY_RMII + if(phy_state & ETH_PHY_STAT_FDX) { // Operate in full-duplex mode + HAL_WRITE_UINT32(enet_base + FREESCALE_ENET_REG_TCR, + FREESCALE_ENET_TCR_FDEN_M); + } +} + + +// PHY may need some start-up time ------------------------------------------- +// + +static bool +eth_phy_init_wait(eth_phy_access_t *phy_p, cyg_uint32 ms) +{ + cyg_uint32 cnt; + + for(cnt=0; cnt + + * cdl/enc424j600_eth_drivers.cdl: + * host/enc424j600_eth_drivers.cdl: + * include/enc424j600_eth.h: + * src/enc424j600_spi.h: + * src/enc424j600_spi.c: + * tests/netconn_test_server.c: + New package [Bugzilla ID #1000910]. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/eth/microchip/enc424j600/current/cdl/enc424j600_eth_drivers.cdl b/packages/devs/eth/microchip/enc424j600/current/cdl/enc424j600_eth_drivers.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/eth/microchip/enc424j600/current/cdl/enc424j600_eth_drivers.cdl @@ -0,0 +1,271 @@ +# ==================================================================== +# +# enc424j600_eth_drivers.cdl +# +# Ethernet driver for Microchip ENC424J600 controller +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2009, 2010 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Ilija Stanislevik +# Contributors: +# Date: 2010-11-23 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_ENC424J600 { + display "Microchip ENC424J600 / ENC624J600 ethernet controller" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + implements CYGINT_IO_ETH_MULTICAST + + active_if CYGPKG_IO_SPI + + requires { CYGINT_IO_ETH_INT_SUPPORT_REQUIRED implies + (CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR != "") + } + + requires { CYGINT_IO_ETH_INT_SUPPORT_REQUIRED implies + (CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_PRIORITY != "") + } + + include_dir cyg/io/eth + description " + Driver for Microchip ENC424J600 and ENC624J600 Ethernet controllers, + connected to the platform with an SPI interface." + + compile -library=libextras.a enc424j600_spi.c + + define_proc { + puts $::cdl_header "#include " + } + + cdl_component CYGPKG_DEVS_ETH_ENC424J600_OPTIONS { + display "Microchip ENC424J600 driver build options" + flavor none + no_define + + cdl_option CYGPKG_DEVS_ETH_ENC424J600_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the ENC424J600 ethernet driver package. + These flags are used in addition + to the set of global flags." + } + + } + + cdl_option CYGDAT_IO_ETH_ENC424J600_NAME { + display "Ethernet device name" + flavor data + default_value { "\"eth0\"" } + } + + cdl_component CYGSEM_DEVS_ETH_ENC424J600_NO_AUTO_NEGOTIATION { + display "No auto negotiation of speed and duplex" + default_value 0 + description " + Enable this component in order to manually configure the link speed + and duplex configuration. Otherwise the chip will automatically + negotiate them with the peer." + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_SPEED { + display "Ethernet speed in megabit per second" + flavor data + legal_values { 100 10 } + default_value 100 + } + + cdl_option CYGSEM_DEVS_ETH_ENC424J600_FULL_DUPLEX { + display "Full duplex" + default_value 1 + } + } + + cdl_component CYGSEM_DEVS_ETH_ENC424J600_SET_ESA { + display "Set the Ethernet station address" + flavor bool + default_value 0 + description " + Enabling this option will override the ENC424J600 + factory set ethernet station address (MAC address)." + + cdl_option CYGDAT_DEVS_ETH_ENC424J600_ESA { + display "Ethernet station address" + flavor data + default_value { " { 0x00, 0x04, 0xa3, 0x10, 0x08, 0x3e } "} + description "The ethernet station address" + } + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE { + display "Largest acceptable packet size" + flavor data + legal_values 60 to 9600 + default_value 1518 + description " + This option configures the size in bytes of the largest + packet expected to be sent or received. The chip will + truncate any received or transmitted packet to this + size. This size excludes any space required for the + Preamble, Start of Frame Delimiter and the Frame Check + Sequence (CRC)." + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_TXBUF_SIZE { + display "Size of transmit buffer" + flavor data + legal_values CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE to (0x6000 - CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE -2) + default_value CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE + description " + The 0x6000 bytes of on-chip RAM are divided between transmit + buffer and receive buffer. This parameter impacts the sizes of + both. The transmit buffer must be large enough to hold one + transmit packet." + } + + cdl_option CYGSEM_DEVS_ETH_ENC424J600_FLOWC { + display "Flow control" + flavor data + default_value { "None" } + legal_values { "None" "OnChip" } + description " + Enabling flow control prevents overflow of the input buffer if + received packets are not processed fast enough." + } + + cdl_component CYGNUM_DEVS_ETH_ENC424J600_FLOW_CONTROL_PARAMETERS { + display "Flow control parameters" + active_if { CYGSEM_DEVS_ETH_ENC424J600_FLOWC != "None" } + flavor none + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_FLOWC_UPPER_WATERMARK { + display "Upper threshold for flow control" + flavor data + default_value 16 + legal_values 2 to 255 + description " + This threshold is measured in multiples of blocks of + 96 bytes. When this number of blocks have been used + in the on-chip receive buffer, the device considers its + receive buffer full and initiates flow control." + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_FLOWC_LOWER_WATERMARK { + display "Lower threshold for flow control" + flavor data + default_value 15 + legal_values 1 to (CYGNUM_DEVS_ETH_ENC424J600_FLOWC_UPPER_WATERMARK - 1) + description " + This threshold is measured in multiples of blocks of + 96 bytes. If flow control has been activated, then + when the number of occupied blocks in the on-chip + receive buffer falls below this level, the device + considers the buffer to be empty enough to receive + more data and therefore disengages flow control." + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_FLOWC_PAUSE { + display "Duration of flow control pause" + flavor data + default_value { 0x1000 } + legal_values 0 to 0xffff + description " + Duration of flow control pause in units of 512 bit times. Valid for full-duplex + operation only." + } + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_CLOCKOUT_FREQUENCY { + display "Frequency of clock output at the CLKOUT pin" + flavor data + default_value { "0" } + legal_values { + "0" "33M33" "25M00" + "20M00" "16M67" "12M50" "10M00" + "8M333" "8M000" "6M250" "5M000" + "4M000" "3M125" + "0M0" "100K" "50K" + } + description " + The ENC424J600 has a clock output which can be used by + other parts of the system. M stands for megahertz, K for + kilohertz, and where these letters are used stands for the + position of a decimal point. Values 0 and 0M0 both mean + DC output, or, in other words, no clock output. This + driver does not make use of the clock output facility + itself. Control of the clock output frequency is provided + here as a convenience." + } + + cdl_component CYGPKG_DEVS_ETH_ENC424J600_INTERRUPT { + display "Interrupt configuration" + flavor none + no_define + active_if CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + description " + Configuration options related to interrupt handling." + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_PRIORITY { + display "Interrupt priority" + flavor data + default_value { is_active(CYGNUM_HAL_SPIETH_INTERRUPT_PRIORITY) ? CYGNUM_HAL_SPIETH_INTERRUPT_PRIORITY : "\"\"" } + description " + Interrupt priority for the ENC424J600. The default value + is typically set by the platform HAL." + } + + cdl_option CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR { + display "Interrupt vector" + flavor data + default_value { is_active(CYGNUM_ETH_SPIETH_HAL_INTERRUPT_VECTOR) ? CYGNUM_ETH_SPIETH_HAL_INTERRUPT_VECTOR : "\"\"" } + description " + Interrupt vector for the ENC424J600. The default value is + typically set by the platform HAL." + } + } +} + +# End of enc424j600_eth_drivers.cdl diff --git a/packages/devs/eth/microchip/enc424j600/current/host/test_tcp_client.c b/packages/devs/eth/microchip/enc424j600/current/host/test_tcp_client.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/microchip/enc424j600/current/host/test_tcp_client.c @@ -0,0 +1,198 @@ +//================================================================= +// +// test_tcp_client.c +// +// TCP/Ethernet testing - host-side +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Stanislevik +// Date: 2010-02-10 +//####DESCRIPTIONEND#### +//========================================================================== + +/* + The target hardware runs a listener/server application. The server + calculates checksum on recived packets for the whole duration of + connection. Once conection ends, it displays the checksum. + + The host client generates pseudorandom data and sends it to the target. + Before sending, it calculates checksum. Once data sent, it dispalys + the checksum for comparison with the checksum at target side. + + For now, no attempts has been made to employ a host other than Linux. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define NUM_ARG 4 + +struct addrinfo * hostaddr_p; +int socket_d; +struct sockaddr serv_addr; + +void print_syntax(char *name) +{ + printf("Syntax: %s ip_address port bytes_to_send\n", name); + printf(" Format ip_address as d1.d2.d3.d4, where dx is integer 0-255\n\n"); +} + +int main(int argc, char *argv[]) +{ + int retval; + struct addrinfo hint_s; + struct addrinfo *p; + char ipstr[INET6_ADDRSTRLEN]; + unsigned long int msg_len; + unsigned long int left_to_send; + unsigned long int i; + unsigned long int csum; + char *msg_p = NULL; + char *fill_p; + unsigned char value; + + if(NUM_ARG != argc) + { + printf("\nError: Wrong number of arguments %d instead of %d.\n", argc-1, NUM_ARG-1); + print_syntax(argv[0]); + return EXIT_FAILURE; + } + + memset(&hint_s, 0, sizeof(struct addrinfo)); + hint_s.ai_family = AF_INET; + hint_s.ai_socktype = SOCK_STREAM; + hint_s.ai_flags = AI_NUMERICSERV; + hint_s.ai_protocol = 0; /* Any protocol */ + hint_s.ai_canonname = NULL; + hint_s.ai_addr = NULL; + hint_s.ai_next = NULL; + retval = getaddrinfo(argv[1], argv[2], &hint_s, &hostaddr_p); + if(0 != retval) + { + printf("\nError: %s\n", gai_strerror(retval)); + print_syntax(argv[0]); + return EXIT_FAILURE; + } + + printf("IP addresses for %s:\n", argv[1]); + + for(p = hostaddr_p; p != NULL; p = p->ai_next) + { + void *addr; + char *ipver; + // get the pointer to the address itself, + // different fields in IPv4 and IPv6: + if (p->ai_family == AF_INET) + { // IPv4 + struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; + addr = &(ipv4->sin_addr); + ipver = "IPv4"; + } + else + { // IPv6 + struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr; + addr = &(ipv6->sin6_addr); + ipver = "IPv6"; + } + // convert the IP to a string and print it: + inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr); + printf(" %s: %s\n", ipver, ipstr); + } + + socket_d = socket(hostaddr_p->ai_family, hostaddr_p->ai_socktype, hostaddr_p->ai_protocol); + if(-1 == socket_d) + { + printf("Error: Can't get socket. errno %d\n", errno); + return EXIT_FAILURE; + } + + retval = connect(socket_d, hostaddr_p->ai_addr, hostaddr_p->ai_addrlen); + if(0 != retval) + { + perror("\nError: Failed connect()\n"); + return EXIT_FAILURE; + } + + // Prepare message to send + msg_len = strtoul(argv[3], NULL, 0); + msg_len &= ~0x3; + if (0 == msg_len) + { + printf("Nothing to do (bytes_to_send == 0). Exiting.\n"); + return EXIT_SUCCESS; + } + else + { + printf("Preparing to send %lu bytes.\n", msg_len); + } + + msg_p = malloc(msg_len); + if(NULL == msg_p) + { + printf("Error: Can't allocate %lu bytes.\n", msg_len); + return EXIT_FAILURE; + } + + fill_p = msg_p; + csum = 0; + + for(i=0; i + +// Ethernet flow control options +enum enc424j600_flow_control_e +{ + ENC424J600_NO_FC, // No flow control + ENC424J600_ONCHIP_AUTO_FC // On-chip automatic flow control. Not tested yet. +}; + +// enc424j600 clock out frequencies +enum enc424j600_clkout_e +{ + ENC424J600_CLKO_0, // DC + ENC424J600_CLKO_33M33, ENC424J600_CLKO_25M00, ENC424J600_CLKO_20M00, + ENC424J600_CLKO_16M67, ENC424J600_CLKO_12M50, ENC424J600_CLKO_10M00, + ENC424J600_CLKO_8M333, ENC424J600_CLKO_8M000, ENC424J600_CLKO_6M250, + ENC424J600_CLKO_5M000, ENC424J600_CLKO_4M000, ENC424J600_CLKO_3M125, + ENC424J600_CLKO_0M0, // DC + ENC424J600_CLKO_100K, ENC424J600_CLKO_50K +}; + +struct enc424j600_priv_data_s; +typedef cyg_bool (*provide_esa_t)(struct enc424j600_priv_data_s*); + +typedef struct enc424j600_priv_data_s +{ + // Configurable data + cyg_spi_device *spi_service_device; // SPI device used to communicate + // with the Ethernet chip + provide_esa_t provide_esa; + bool hardwired_esa; + unsigned char esa[ETHER_ADDR_LEN]; + cyg_handle_t interrupt_handle; + cyg_interrupt interrupt_object; + struct cyg_netdevtab_entry *tab; + + // Really private data + cyg_uint16 NextPacketPointer; + enum { ENC424J600_LINK_OFF, ENC424J600_LINK_ON } link_status; + bool txbusy; + unsigned long txkey; +} enc424j600_priv_data_t; + +#endif /* CYGONCE_DEVS_ETH_ENC424J600_ETH_H_ */ + +// End of enc424j600_eth.h diff --git a/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.c b/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.c @@ -0,0 +1,1340 @@ +//========================================================================== +// +// enc424j600_spi.c +// +// Microchip enc424j600 Ethernet chip +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Stanislevik +// Contributors: +// Date: 2010-11-23 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include // Common SPI API + +#include "enc424j600_spi.h" +#include + +// Set ENC424J600_DEBUG to: +// 0 to suppress all printout +// 1 to print error reports +// 2 to print interrupt tracing +// 4 printout _init() progress +// 8 to print progress tracing data +// 0x10 for test with dummy stack +// 0x20 to printout status registers +#define ENC424J600_DEBUG (0) + +#define ENC424J600_DONT_DROP_CS (0) +#define ENC424J600_DO_DROP_CS (1) +#define ENC424J600_TXBUF_START (0) + +#define ENC424J600_RXBUF_START (ENC424J600_TXBUF_START + CYGNUM_DEVS_ETH_ENC424J600_TXBUF_SIZE) + +#ifndef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +# define SPI_POLLING true +#else +# define SPI_POLLING false +#endif + +static enc424j600_priv_data_t eth0_enc424j600_priv_data; + +ETH_DRV_SC(eth0_spi_sc, + ð0_enc424j600_priv_data, // Driver specific data. + CYGDAT_IO_ETH_ENC424J600_NAME, + enc424j600_spi_start, + enc424j600_spi_stop, + enc424j600_spi_control, + enc424j600_spi_can_send, + enc424j600_spi_send, + enc424j600_spi_recv, + enc424j600_spi_deliver, + enc424j600_spi_poll, + enc424j600_spi_int_vector +); + +NETDEVTAB_ENTRY(eth0_spi_netdev, + "eth_spi", + enc424j600_spi_init, + ð0_spi_sc); + +// Local service functions + +// Interface for enc424j600 "single byte instruction". +static void +simple_operation(enc424j600_priv_data_t *dpd, enum enc424j600_spi_opcode_1_e opcode) +{ + cyg_spi_transaction_begin(dpd->spi_service_device); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 1, + & opcode, + NULL, // not interested in answer + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(dpd->spi_service_device); + + return; +} + +// Interface for enc424j600 "banked N-byte instructions". +// Banked read, write, bit set or bit clear operation with control register +static int +banked_register_operation(enc424j600_priv_data_t *cpd, + enum enc424j600_spi_opcode_e opcode, + cyg_uint8 address, + cyg_uint16 length, + cyg_uint8 *buffer) +{ + if ((NULL == buffer) || (0 == length)) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Wrong parm buffer=0x%x or length=%d.\n", (int)buffer, length); +#endif + return -1; + } + + if ((ENC424J600_ECON1H < address) || (opcode & ENC424J600_ECON1H)) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Wrong address=0x%02x or opcode=0x%02x for banked operation.\n", + address, opcode); +#endif + return -1; + } + + address |= opcode; // combine them in single byte + cyg_spi_transaction_begin(cpd->spi_service_device); + // Send the opcode and address, + cyg_spi_transaction_transfer(cpd->spi_service_device, + SPI_POLLING, + 1, + & address, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + // then the data. + cyg_spi_transaction_transfer(cpd->spi_service_device, + SPI_POLLING, + length, + (ENC424J600_READCR == opcode) ? NULL : buffer, + (ENC424J600_READCR == opcode) ? buffer : NULL, + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(cpd->spi_service_device); + + return 0; +} + +// Interface for enc424j600 "unbanked N-byte instructions". +// Unbanked read, write, bit set or bit clear operation with control register +static int +unbanked_register_operation(enc424j600_priv_data_t *cpd, + enum enc424j600_spi_opcode_u_e opcode, + cyg_uint8 address, + cyg_uint16 length, + cyg_uint8 *buffer) +{ + if ((NULL == buffer) || (0 == length)) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Wrong parm buffer=0x%x or length=%d.\n", (int)buffer, length); +#endif + return -1; + } + + cyg_spi_transaction_begin(cpd->spi_service_device); + // Send the opcode, + cyg_spi_transaction_transfer(cpd->spi_service_device, + SPI_POLLING, + 1, + & opcode, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + // then the address + cyg_spi_transaction_transfer(cpd->spi_service_device, + SPI_POLLING, + 1, + & address, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + // and finally the data. + cyg_spi_transaction_transfer(cpd->spi_service_device, + SPI_POLLING, + length, + (ENC424J600_READCRU == opcode) ? NULL : buffer, + (ENC424J600_READCRU == opcode) ? buffer : NULL, + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(cpd->spi_service_device); + + return 0; +} + +// Get ESA from the Ethernet chip, unbanked +static int +read_esa_u(enc424j600_priv_data_t *cpd, cyg_uint8 *esa_buf) +{ + int retval = -1; + cyg_uint8 response_msg[ETHER_ADDR_LEN]; + +#if ENC424J600_DEBUG & 8 + diag_printf("read_esa_u()...\n"); +#endif + if (NULL == esa_buf) + { + return -1; + } + + retval = unbanked_register_operation(cpd, ENC424J600_READCRU, ENC424J600_MAADR3_U, ETHER_ADDR_LEN, + &response_msg[0]); + if (0 != retval) + { + return retval; + } + *esa_buf++ = response_msg[4]; + *esa_buf++ = response_msg[5]; + *esa_buf++ = response_msg[2]; + *esa_buf++ = response_msg[3]; + *esa_buf++ = response_msg[0]; + *esa_buf = response_msg[1]; + + return 0; +} + +// Set ESA into Ethernet chip, unbanked +static int +write_esa_u(enc424j600_priv_data_t *dpd, cyg_uint8 *esa_buf) +{ + int retval = -1; + cyg_uint8 msg[8]; + +#if ENC424J600_DEBUG & 8 + diag_printf("write_esa_u()...1...\n"); +#endif + if (NULL == esa_buf) + { + return -1; + } + + msg[4] = *esa_buf++; + msg[5] = *esa_buf++; + msg[2] = *esa_buf++; + msg[3] = *esa_buf++; + msg[0] = *esa_buf++; + msg[1] = *esa_buf; + + retval = unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MAADR3_U, 6, &msg[0]); + if (0 != retval) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Writing ESA into chip failed.\n"); +#endif + return retval; + } + + return 0; +} + +#if ENC424J600_DEBUG & 0x20 +// Read data from PHY register +static void +read_phy(enc424j600_priv_data_t *dpd, + const enum enc424j600_pr_address_e pr_address, + cyg_uint16 *retval_p) +{ + cyg_uint8 aux[2] = {pr_address, 0x01}; + cyg_uint8 status; + + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MIREGADR_U, 2, &aux[0]); + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MICMD_U, 2, &aux[0]); + aux[0] |= ENC424J600_MIIRD; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MICMD_U, 2, &aux[0]); + CYGACC_CALL_IF_DELAY_US(26); + do + { // Check and busy wait for read operation to complete + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MISTAT_U, 1, &status); + } while(0 != (status & ENC424J600_MISTAT_BUSY)); + + aux[0] &= !ENC424J600_MIIRD; // Clear ENC424J600_MIIRD bit + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MICMD_U, 2, &aux[0]); + + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MIRD_U, 2, &aux[0]); + *retval_p = aux[0] + 256 * aux[1]; + + return; +} +#endif + +// Write data to PHY register +static void +write_phy(enc424j600_priv_data_t *dpd, + const enum enc424j600_pr_address_e pr_address, + const cyg_uint16 value) +{ + cyg_uint8 aux[2] = {pr_address, 0x01}; + + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MIREGADR_U, 2, &aux[0]); + aux[0] = value & 0xff; + aux[1] = (value >> 8) & 0xff; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MIWR_U, 2, &aux[0]); + + return; + // There must be no other MIIM operation in the following 25.6 us! +} + +// Write value for on-chip pointer. +static void +set_pointer(enc424j600_priv_data_t *dpd, + enum enc424j600_spi_bufferp_e oc_pointer, + cyg_uint16 value + ) +{ + cyg_spi_transaction_begin(dpd->spi_service_device); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 1, + & oc_pointer, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 2, + (cyg_uint8 *) & value, + NULL, // not interested in answer + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(dpd->spi_service_device); + return; +} + +static inline void +write_to_tx_buffer(enc424j600_priv_data_t *dpd, + cyg_uint16 length, + cyg_uint8 *buffer) +{ + cyg_uint8 oc_pointer = ENC424J600_WGPDATA; // We use General Purpose Buffer + + cyg_spi_transaction_begin(dpd->spi_service_device); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 1, + & oc_pointer, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + length, + buffer, + NULL, + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(dpd->spi_service_device); + + return; +} + +static int +read_from_rx_buffer(enc424j600_priv_data_t *dpd, + cyg_uint16 length, + cyg_uint8 *buffer) +{ + cyg_uint8 oc_pointer = ENC424J600_RRXDATA; + +// if ((0 == length) || (NULL == buffer)) + if (0 == length) + { + return -1; + } + cyg_spi_transaction_begin(dpd->spi_service_device); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 1, + & oc_pointer, + NULL, // not interested in answer + ENC424J600_DONT_DROP_CS); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + length, + NULL, + buffer, + ENC424J600_DO_DROP_CS); + cyg_spi_transaction_end(dpd->spi_service_device); + + return 0; +} + +static void +set_MAC(enc424j600_priv_data_t *dpd, + cyg_uint8 ethernet_status // As read from upper byte of ESTAT register + ) +{ + cyg_uint8 aux[2]; + + if (0 != (ethernet_status & ENC424J600_PHYDPX)) + { // Full duplex +#if ENC424J600_DEBUG & 0x20 + diag_printf("Full duplex\n"); +#endif + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MACON2_U, 2, &aux[0]); + aux[0] |= ENC424J600_FULDPX; // Set MAC to full duplex + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MACON2_U, 2, &aux[0]); + + aux[1] = 0; + aux[0] = 0x15; // Inter-packet gap + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MABBIPG_U, 2, &aux[0]); + } + else + { // Half duplex +#if ENC424J600_DEBUG & 0x20 + diag_printf("Half duplex\n"); +#endif + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MACON2_U, 2, &aux[0]); + aux[0] &= !ENC424J600_FULDPX; // Set MAC to half duplex + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MACON2_U, 2, &aux[0]); + + aux[1] = 0; + aux[0] = 0x12; // Inter-packet gap + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MABBIPG_U, 2, &aux[0]); + } + + return; +} + +static void +enc424j600_spi_LINKevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 iflag = ENC424J600_LINKIF; + cyg_uint8 aux[2]; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_LINKevent()....\n"); +#endif + + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ESTATL, 2, &aux[0]); +#if ENC424J600_DEBUG & 0x20 + diag_printf("ESTAT %02x%02x Link ", aux[1], aux[0]); +#endif + if (0 != (aux[1] & ENC424J600_PHYLNK)) + { + dpd->link_status = ENC424J600_LINK_ON; + +#if ENC424J600_DEBUG & 0x20 + diag_printf("ON\n"); +#endif + // Link is just established. Set up the MAC + set_MAC(dpd, aux[1]); + } + else + { + dpd->link_status = ENC424J600_LINK_OFF; + +#if ENC424J600_DEBUG & 0x20 + diag_printf("OFF\n"); +#endif + } +#if ENC424J600_DEBUG & 0x20 + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MACON1_U, 2, &aux[0]); + diag_printf("MACON1 %02x%02x\n", aux[1], aux[0]); + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MACON2_U, 2, &aux[0]); + diag_printf("MACON2 %02x%02x\n", aux[1], aux[0]); + read_phy(dpd, ENC424J600_PHSTAT1, (cyg_uint16 *) &aux[0]); + diag_printf("PHSTAT1 %02x%02x\n", aux[1], aux[0]); + read_phy(dpd, ENC424J600_PHSTAT3, (cyg_uint16 *) &aux[0]); + diag_printf("PHSTAT3 %02x%02x\n", aux[1], aux[0]); + read_phy(dpd, ENC424J600_PHANLPA, (cyg_uint16 *) &aux[0]); + diag_printf("PHANLPA %02x%02x\n", aux[1], aux[0]); + read_phy(dpd, ENC424J600_PHANA, (cyg_uint16 *) &aux[0]); + diag_printf("PHANA %02x%02x\n", aux[1], aux[0]); + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ECON1L, 2, &aux[0]); + diag_printf("ECON1 %02x%02x\n", aux[1], aux[0]); + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_ECON2_U, 2, &aux[0]); + diag_printf("ECON2 %02x%02x\n", aux[1], aux[0]); + +#endif + + // Clear Link interrupt flag + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRH, 1, &iflag); +} + +static void +enc424j600_spi_PCFULevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 flags = ENC424J600_PCFULIF; + +#if ENC424J600_DEBUG & 8 + diag_printf("\nenc424j600_spi_PCFULevent()....\n\n"); +#endif + simple_operation(dpd, ENC424J600_SETPKTDEC); // Decrement received packet counter + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRL, 1, &flags); +} + +static void +enc424j600_spi_RXABTevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 flags = ENC424J600_RXABTIF; + +#if ENC424J600_DEBUG & 8 + diag_printf("\nenc424j600_spi_RXABTevent()....\n\n"); +#endif + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRL, 1, &flags); +} + +static void +enc424j600_spi_TXevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 iflag = ENC424J600_TXIF; + +#if ENC424J600_DEBUG & 8 + diag_printf("TX event.\n"); +#endif + + dpd->txbusy = false; + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRL, 1, &iflag); +} + +static void +enc424j600_spi_TXABTevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 iflag = ENC424J600_TXABTIF; + +#if ENC424J600_DEBUG & 8 + diag_printf("TXABT event.\n"); +#endif + + dpd->txbusy = false; + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRL, 1, &iflag); +} + +static void +enc424j600_spi_RXevent(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 pkcnt; // Local copy of the packet counter + cyg_uint8 rsv[2]; + cyg_uint16 packet_length; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_RXevent()....\n"); +#endif + + // Take info on single received packet + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ESTATL, 1, &pkcnt); + if (0 != pkcnt) + { +#if ENC424J600_DEBUG & 8 + diag_printf("There are %u packets pending in receive buffer.\n", pkcnt); +#endif + // Prepare on-chip read pointer + set_pointer(dpd, ENC424J600_RXRDPT, dpd->NextPacketPointer); + // The two bytes to read next point to the next packet + read_from_rx_buffer(dpd, 2, (cyg_uint8 *) & dpd->NextPacketPointer); + + // Next 6 bytes to read are the Read Status Vector. We need only the first two. + read_from_rx_buffer(dpd, 2, & rsv[0]); + read_from_rx_buffer(dpd, 4, NULL); + packet_length = rsv[0] + rsv[1] * 256; + sc->funs->eth_drv->recv(sc, packet_length); + } + + return; +} + +// - End of local service functions ------------------------- + +// - Higher level interface functions ----------------------- + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +// This ISR is called when the Ethernet interrupt occurs +static cyg_uint32 +enc424j600_spi_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) +{ + cyg_drv_interrupt_mask(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR); + cyg_drv_interrupt_acknowledge(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR); + + return (CYG_ISR_HANDLED|CYG_ISR_CALL_DSR); // Run the DSR +} + +static void +enc424j600_spi_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)data; + struct cyg_netdevtab_entry *ndp = (struct cyg_netdevtab_entry *)(dpd->tab); + struct eth_drv_sc *sc = (struct eth_drv_sc *)(ndp->device_instance); +#if (ENC424J600_DEBUG & 2) + diag_printf("DSR: Interrupt! count %u\n", count); +#endif + +#if (ENC424J600_DEBUG & 0x10) + extern void fake_eth_drv_dsr(cyg_vector_t vector, + cyg_ucount32 count, + cyg_addrword_t data); + + fake_eth_drv_dsr( vector, count, (cyg_addrword_t)sc ); +#else + eth_drv_dsr( vector, count, (cyg_addrword_t)sc ); +#endif + + return; +} +#endif // #ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + +// Initialization of driver and chip + +#define ENC424J600_INIT_SPI_READY_RETRY 100 +#define ENC424J600_INIT_CLK_READY_RETRY 100 +#define ENC424J600_INIT_RETRY_PERIOD_US 100 + +static bool +enc424j600_spi_init(struct cyg_netdevtab_entry *tab) +{ + int retval; + cyg_uint8 aux_8[2]; + cyg_bool esa_configured = false; +#ifdef CYGSEM_DEVS_ETH_ENC424J600_SET_ESA + cyg_uint8 esa_from_cdl[ETHER_ADDR_LEN] = CYGDAT_DEVS_ETH_ENC424J600_ESA; +#endif + unsigned int i; // loop counter + + struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance; + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + + dpd->tab = tab; + + CYG_DEVS_ETH_ENC424J600_PLF_INIT(tab); // Platform HAL should define this macro + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + // Install interrupt handler. + cyg_drv_interrupt_create(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR, + CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_PRIORITY, + (cyg_addrword_t)dpd, // Data item passed to interrupt handler + (cyg_ISR_t *)enc424j600_spi_isr, + (cyg_DSR_t *)enc424j600_spi_dsr, + &dpd->interrupt_handle, + &dpd->interrupt_object); + cyg_drv_interrupt_attach(dpd->interrupt_handle); + cyg_drv_interrupt_configure(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR, + ENC424J600_ETH_INTERRUPT_LEVEL_LOW, ENC424J600_ETH_INTERRUPT_EDGE_FALLING); + cyg_drv_interrupt_acknowledge(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR); + cyg_drv_interrupt_unmask(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR); +#if ENC424J600_DEBUG & 4 + diag_printf("%s(): Interrupt handler is installed.\n", __FUNCTION__); +#endif +#endif // #ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + + // Check if the Ethernet chip is connected and listening + for (i=0; i <= ENC424J600_INIT_SPI_READY_RETRY; i++) + { + aux_8[1] = (cyg_uint8)0x12; // Test pattern + aux_8[0] = (cyg_uint8)0x34; + banked_register_operation(dpd, ENC424J600_WRITECR, ENC424J600_EUDASTL, 2, &aux_8[0]); + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_EUDASTL, 2, &aux_8[0]); + // Verify the test pattern + if ((0x12 == aux_8[1]) && (0x34 == aux_8[0])) + { // verified + break; + } + CYGACC_CALL_IF_DELAY_US(ENC424J600_INIT_RETRY_PERIOD_US); + } + + if (i > ENC424J600_INIT_SPI_READY_RETRY) + { + CYG_FAIL("enc424j600 SPI is not ready!\n"); + return false; + } + +#if ENC424J600_DEBUG & 4 + diag_printf("enc424j600 SPI is there.\n"); +#endif + + // Check if ENC424J600_CLKRDY flag is set + for (i=0; i <= ENC424J600_INIT_CLK_READY_RETRY; i++) + { + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ESTATL, 2, &aux_8[0]); + if (0 == (aux_8[1] & ENC424J600_CLKRDY)) + { + i++; + } + else + { // clock is ready + break; + } + CYGACC_CALL_IF_DELAY_US(ENC424J600_INIT_RETRY_PERIOD_US); + } + if (i > ENC424J600_INIT_CLK_READY_RETRY) + { + CYG_FAIL("enc424j600 clock is not ready!\n"); + return false; + } + +#if ENC424J600_DEBUG & 4 + diag_printf("enc424j600 clock is ready.\n"); +#endif + + // Issue a System Reset for Ethernet chip + aux_8[0] = ENC424J600_ETHRST; + unbanked_register_operation(dpd, ENC424J600_BITFIELDSETU, ENC424J600_ECON2_U, 1, &aux_8[0]); + CYGACC_CALL_IF_DELAY_US(25); + // Check if the reset really happened + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_EUDASTL, 2, &aux_8[0]); + if ((0 != aux_8[0]) || (0 != aux_8[1])) + { + CYG_FAIL("enc424j600 is not reset!\n"); + return false; + } +#if ENC424J600_DEBUG & 4 + diag_printf("Successful reset of the Ethernet chip.\n"); +#endif + + CYGACC_CALL_IF_DELAY_US(256); + +#define CLOCKOUT_CODE(_freq_) CLOCKOUT_LABEL(_freq_) +#define CLOCKOUT_LABEL(_freq_) (ENC424J600_CLKO_##_freq_) + + // Set clock output frequency. External hardware may need it. + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_ECON2_U + 1, 1, &aux_8[1]); + aux_8[1] &= 0xf0; + aux_8[1] |= (cyg_uint8)CLOCKOUT_CODE(CYGNUM_DEVS_ETH_ENC424J600_CLOCKOUT_FREQUENCY); +#if ENC424J600_DEBUG & 4 + diag_printf("Setting clock out, ECON2H 0x%02x\n", aux_8[1]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ECON2_U + 1, 1, &aux_8[1]); + + + // Find ESA - check possible sources in sequence and stop when + // one provides the ESA: + // RedBoot option (via provide_esa) + // Set by application + // Set by configuration option + // Ethernet chip (manufacture-time set) + + if (NULL != dpd->provide_esa) + { + esa_configured = dpd->provide_esa(dpd); +# if ENC424J600_DEBUG & 4 + if (esa_configured) + diag_printf("Got ESA from RedBoot option\n"); +# endif + } + if (!esa_configured && dpd->hardwired_esa) + { + // ESA is already set in dpd->esa[] +#if ENC424J600_DEBUG & 4 + diag_printf("Got hardcoded ESA\n"); +#endif + esa_configured = true; + } +#ifdef CYGSEM_DEVS_ETH_ENC424J600_SET_ESA + else + { + memcpy(dpd->esa, esa_from_cdl, ETHER_ADDR_LEN); + esa_configured = true; +# if ENC424J600_DEBUG & 4 + diag_printf("Got ESA from CDL.\n"); +# endif + } +#endif // #ifdef CYGSEM_DEVS_ETH_ENC424J600_SET_ESA + + if (!esa_configured) + { +# if ENC424J600_DEBUG & 4 + diag_printf("ESA is not provided. Getting it from the chip.\n"); +# endif + retval = read_esa_u(dpd, &(dpd->esa[0])); + if (0 != retval) + { + CYG_FAIL("Reading ESA from chip failed.\n"); + return false; + } + } + else + { +# if ENC424J600_DEBUG & 4 + diag_printf("Setting ESA into chip. Will last till next reset.\n"); +# endif + retval = write_esa_u(dpd, &(dpd->esa[0])); + if (0 != retval) + { + CYG_FAIL("Writing ESA into chip failed.\n"); + return false; + } + } + +# if ENC424J600_DEBUG & 4 + cyg_uint8 cesa[ETHER_ADDR_LEN] = {0,0,0,0,0,0}; + diag_printf("ESA %02x:%02x:%02x:%02x:%02x:%02x\n", + dpd->esa[0], dpd->esa[1], dpd->esa[2], + dpd->esa[3], dpd->esa[4], dpd->esa[5]); + retval = read_esa_u(dpd, &cesa[0]); + if (0 != retval) + { + diag_printf("Reading ESA from chip failed.\n"); + } + diag_printf("Control reading from chip: "); + diag_printf("%02x:%02x:%02x:%02x:%02x:%02x\n", + cesa[0], cesa[1], cesa[2], + cesa[3], cesa[4], cesa[5]); +# endif + + // Set receive filters + aux_8[0] = ENC424J600_BCEN | ENC424J600_UCEN | ENC424J600_RUNTEN | ENC424J600_CRCEN; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXFCON_U, 1, &aux_8[0]); + +#ifdef CYGSEM_DEVS_ETH_ENC424J600_FLOWC_OnChip +#if ENC424J600_DEBUG & 4 + diag_printf("eth_spi_enc424j600_init() Setting auto flow control\n"); +#endif + // Duration of pause + aux_8[0] = CYGNUM_DEVS_ETH_ENC424J600_FLOWC_PAUSE & 0xff; + aux_8[1] = (CYGNUM_DEVS_ETH_ENC424J600_FLOWC_PAUSE >> 8 ) & 0xff; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_EPAUS_U, 2, &aux_8[0]); + + // Thresholds for flow control + aux_8[0] = CYGNUM_DEVS_ETH_ENC424J600_FLOWC_LOWER_WATERMARK; + aux_8[1] = CYGNUM_DEVS_ETH_ENC424J600_FLOWC_UPPER_WATERMARK; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXWM_U, 2, &aux_8[0]); + + aux_8[0] = ENC424J600_AUTOFC; // Enable automatic flow control + unbanked_register_operation(dpd, ENC424J600_BITFIELDSETU, ENC424J600_ECON2_U, 1, &aux_8[0]); + +#else + // No flow control + simple_operation(dpd, ENC424J600_FCDISABLE); +#endif + + // Set PHY speed and duplex + aux_8[0] = aux_8[1] = 0; +#ifndef CYGNUM_DEVS_ETH_ENC424J600_NO_AUTO_NEGOTIATION + aux_8[1] = ENC424J600_ANEN; // Enable auto negotiation +#else +# if(CYGNUM_DEVS_ETH_ENC424J600_SPEED == 100) + aux_8[1] |= ENC424J600_SPD100; +# endif +# ifdef CYGSEM_DEVS_ETH_ENC424J600_FULL_DUPLEX + aux_8[1] |= ENC424J600_PFULDPX; +# endif +#endif +#if ENC424J600_DEBUG & 4 + diag_printf("Writing PHCON1 0x%02x%02x\n", aux_8[1], aux_8[0]); +#endif + write_phy(dpd, ENC424J600_PHCON1, (aux_8[1] << 8) + aux_8[0]); + CYGACC_CALL_IF_DELAY_US(26); + + // Compose and set PHY capabilities advertisement register + aux_8[1] = 0; + aux_8[0] = ENC424J600_IEEE802_3STD; +#ifdef CYGNUM_DEVS_ETH_ENC424J600_FLOWC_ENC424J600_ONCHIP_AUTO_FC + aux_8[1] |= ENC424J600_ADPAUS_SYMM; +#endif + +#ifdef CYGNUM_DEVS_ETH_ENC424J600_NO_AUTO_NEGOTIATION +# ifdef CYGSEM_DEVS_ETH_ENC424J600_FULL_DUPLEX +# if(CYGNUM_DEVS_ETH_ENC424J600_SPEED == 100) + aux_8[1] |= ENC424J600_AD100FD; +# else + aux_8[0] |= ENC424J600_AD10FD; +# endif +# else +# if(CYGNUM_DEVS_ETH_ENC424J600_SPEED == 100) + aux_8[0] |= ENC424J600_AD100; +# else + aux_8[0] |= ENC424J600_AD10; +# endif +# endif +#else + aux_8[1] |= ENC424J600_AD100FD; + aux_8[0] |= ENC424J600_AD100 | ENC424J600_AD10FD | ENC424J600_AD10; +#endif + + write_phy(dpd, ENC424J600_PHANA, (aux_8[1] << 8) + aux_8[0]); + +#if ENC424J600_DEBUG & 4 + diag_printf("Setting CRC generation\n"); +#endif + + // Set ENC424J600_TXCRCEN, PADCFG + unbanked_register_operation(dpd, ENC424J600_READCRU, ENC424J600_MACON2_U, 2, &aux_8[0]); + aux_8[0] = 0xa0; // Pad VLAN frames to 64bytes, others to 60 + aux_8[0] |= ENC424J600_TXCRCEN; // Calculate and append CRC in transmit frames + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MACON2_U, 2, &aux_8[0]); + +#if ENC424J600_DEBUG & 4 + diag_printf("Setting acceptable packet size\n"); +#endif + // Set acceptable packet size + aux_8[0] = CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE & 0xff; + aux_8[1] = (CYGNUM_DEVS_ETH_ENC424J600_ACCEPTABLE_PACKET_SIZE >> 8) & 0xff; + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_MAMXFL_U, 2, &aux_8[0]); + +#if ENC424J600_DEBUG & 2 + diag_printf("Initializing upper level driver\n"); +#endif + (sc->funs->eth_drv->init)(sc, dpd->esa); + +#if ENC424J600_DEBUG & 4 + diag_printf("End of _init().\n"); +#endif + + return true; +} + +// +// This function is called to "start up" the interface. It may be called +// multiple times, even when the hardware is already running. It will be +// called whenever something "hardware oriented" changes and should leave +// the hardware ready to send/receive packets. +// +static void +enc424j600_spi_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 aux[2]; + cyg_uint8 pkcnt; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_start() begin.\n"); +#endif + // Disable packet reception + simple_operation(dpd, ENC424J600_DISABLERX); + + // Enable interrupts in Ethernet chip + simple_operation(dpd, ENC424J600_CLREIE); // First disable interrupts globally + + aux[0] = ENC424J600_PKTIE | ENC424J600_TXIE | ENC424J600_TXABTIE | ENC424J600_RXABTIE | ENC424J600_PCFULIE; // then set the desired ones + aux[1] = ENC424J600_LINKIE; + unbanked_register_operation(dpd, ENC424J600_BITFIELDSETU, ENC424J600_EIE_U, 2, &aux[0]); + + // Are there any packets left in receive buffer? + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ESTATL, 1, &pkcnt); + + while (0 < pkcnt--) + { + simple_operation(dpd, ENC424J600_SETPKTDEC); // Decrement on-chip packet counter + } // This clears ENC424J600_PKTIF, if set. + + // Set the chip's receive buffer start address and buffer head. + aux[0] = ENC424J600_RXBUF_START & 0xfe; // make it even, just in case it's not + aux[1] = (ENC424J600_RXBUF_START >> 8) & 0x7f; // clear the MSB +#if ENC424J600_DEBUG & 8 + diag_printf("Setting receive buffer start address, ERXST 0x%02x%02x.\n", + aux[1], aux[0]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXST_U, 2, &aux[0]); + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXHEAD_U, 2, &aux[0]); + + // Next packet will be received at the buffer start address + *(cyg_uint8 *) & dpd->NextPacketPointer = ENC424J600_RXBUF_START & 0xff; + *(((cyg_uint8 *)&dpd->NextPacketPointer) + 1) = (ENC424J600_RXBUF_START >> 8 ) & 0xff; + + // Set receive buffer tail + aux[1] = 0x5f; // just bellow the end of on-chip SRAM + aux[0] = 0xfe; +#if ENC424J600_DEBUG & 8 + diag_printf("Setting receive buffer tail, ERXTAIL 0x%02x%02x.\n", + aux[1], aux[0]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXTAIL_U, 2, &aux[0]); + + // Abort any pending transmission + aux[0] = ENC424J600_TXRTS; + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_ECON1L, 1, &aux[0]); + dpd->txbusy = false; + + // Set start of transmit buffer + aux[0] = ENC424J600_TXBUF_START & 0xff; + aux[1] = (ENC424J600_TXBUF_START >> 8 ) & 0xff; +#if ENC424J600_DEBUG & 8 + diag_printf("Writing ETXST 0x%02x%02x.\n", aux[1], aux[0]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ETXST_U, 2, &aux[0]); + + // Clear any remaining interrupt flags + aux[0] = ENC424J600_TXIF | ENC424J600_TXABTIF | ENC424J600_RXABTIF | ENC424J600_PCFULIF; + aux[1] = ENC424J600_LINKIF; + banked_register_operation(dpd, ENC424J600_BITFIELDCLEAR, ENC424J600_EIRL, 2, &aux[0]); + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + simple_operation(dpd, ENC424J600_SETEIE); // Enable interrupts +#endif + + // Enable packet reception + simple_operation(dpd, ENC424J600_ENABLERX); + + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_ESTATL, 2, &aux[0]); + if (0 != (aux[1] & ENC424J600_PHYLNK)) + { + if (ENC424J600_LINK_ON != dpd->link_status) + { + dpd->link_status = ENC424J600_LINK_ON; + set_MAC(dpd, aux[1]); + } + } + else + { + dpd->link_status = ENC424J600_LINK_OFF; + } + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_start() end.\n"); +#endif + + return; +} + +// Stop receiving and sending packets +static void +enc424j600_spi_stop(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 aux[2]; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_stop() begin.\n"); +#endif + // Disable packet reception + simple_operation(dpd, ENC424J600_DISABLERX); + + // Disable interrupts in Ethernet chip + aux[1] = ENC424J600_INTIE; + aux[0] = ENC424J600_PKTIE | ENC424J600_TXIE | ENC424J600_TXABTIE | ENC424J600_RXABTIE | ENC424J600_PCFULIE; + unbanked_register_operation(dpd, ENC424J600_BITFIELDCLEARU, ENC424J600_EIE_U, 2, &aux[0]); + + return; +} + +static void +enc424j600_spi_deliver(struct eth_drv_sc *sc) +{ + + enc424j600_spi_poll(sc); + + return; +} + +// Special control operations +static int +enc424j600_spi_control(struct eth_drv_sc *sc, unsigned long key, void *data, + int data_length) +{ + enc424j600_priv_data_t *dpd; + unsigned char *esa; + struct eth_drv_mc_list *mc_list; + cyg_uint8 aux; + + if ((NULL == sc) || (NULL == data)) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Wrong parameter(s) for enc424j600_spi_control().\n"); +#endif + return -1; + } + dpd = (enc424j600_priv_data_t *)sc->driver_private; + switch (key) + { + case ETH_DRV_SET_MAC_ADDRESS: + if (ETHER_ADDR_LEN != data_length) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Wrong data length for ETH_DRV_SET_MAC_ADDRESS.\n"); +#endif + return -1; + } + esa = (unsigned char *)data; + // Write ESA in the chip. Will last till the next reset. + return write_esa_u(dpd, esa); + +#ifdef ETH_DRV_GET_MAC_ADDRESS + case ETH_DRV_GET_MAC_ADDRESS: + if (ETHER_ADDR_LEN > data_length) + { +#if ENC424J600_DEBUG & 1 + diag_printf("Too small data length for ETH_DRV_GET_MAC_ADDRESS.\n"); +#endif + return -1; + } + esa = (unsigned char *)data; + // Get ESA from the chip + return read_esa_u(dpd, esa); +#endif + + case ETH_DRV_SET_MC_LIST: + case ETH_DRV_SET_MC_ALL: + // Note: this code always affects all multicast addresses if any + // are desired. + mc_list = data; + simple_operation(dpd, ENC424J600_DISABLERX); + aux = ENC424J600_MCEN; + if (0 == mc_list->len) + { // Disable reception of multicast packets + unbanked_register_operation(dpd, + ENC424J600_BITFIELDCLEARU, ENC424J600_ERXFCON_U, 1, &aux); + } + else + { // Enable reception of multicast packets + unbanked_register_operation(dpd, + ENC424J600_BITFIELDSETU, ENC424J600_ERXFCON_U, 1, &aux); + } + simple_operation(dpd, ENC424J600_ENABLERX); + + return 0; + + default: +#if ENC424J600_DEBUG & 1 + diag_printf("Unsupported key %lx for enc424j600_spi_control().\n", key); +#endif + return -1; + } +} + +// Continue transfer from chip's buffer where the enc424j600_spi_RXevent() stopped. +// Take one packet. +static void +enc424j600_spi_recv(struct eth_drv_sc *sc, + struct eth_drv_sg *sg_list, + int chunks) +{ + int chunk; + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint16 rbuf_tail; + cyg_uint8 * aux_p; + cyg_uint8 aux[2]; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_recv()...\n"); +#endif + + for(chunk = 0; chunk < chunks; chunk++) + { + read_from_rx_buffer(dpd, (*sg_list).len, (cyg_uint8 *)(*sg_list).buf); + sg_list++; + } + aux_p = (cyg_uint8 *) & dpd->NextPacketPointer; + rbuf_tail = *aux_p + *(aux_p+1) * (cyg_uint16)256 ; + rbuf_tail -= 2; + if (rbuf_tail == ENC424J600_RXBUF_START) + { // Wrap over + rbuf_tail = 0x5ffe; + } + aux[0] = rbuf_tail & 0xff; + aux[1] = (rbuf_tail >> 8) & 0xff; +#if ENC424J600_DEBUG & 8 + diag_printf("Setting receive buffer tail, ERXTAIL 0x%02x%02x.\n", + aux[1], aux[0]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ERXTAIL_U, 2, &aux[0]); + + simple_operation(dpd, ENC424J600_SETPKTDEC); // Decrement packet count. If zeroed, + // ENC424J600_PKTIF interrupt flag will be reset. + + return; +} + +// This routine is called to see if it is possible to send another packet. +// It will return non-zero if a transmit is possible, zero otherwise. +static int +enc424j600_spi_can_send(struct eth_drv_sc *sc) +{ + if (((enc424j600_priv_data_t *)sc->driver_private)->txbusy) + { + return 0; + } + else + { + return 1; + } +} + +// This routine is called to send data to the hardware. +static void +enc424j600_spi_send(struct eth_drv_sc *sc, + struct eth_drv_sg *sg_list, + int sg_len, + int total, + unsigned long key) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + int block; + cyg_uint8 aux[2]; + cyg_uint8 opcode = ENC424J600_WGPDATA; + + if (0 >= sg_len) return; + + // Check if there is enough room in transmit buffer + if (total > ENC424J600_RXBUF_START - ENC424J600_TXBUF_START) + { + sc->funs->eth_drv->tx_done(sc, (CYG_ADDRESS)key, 0); +#if ENC424J600_DEBUG & 1 + diag_printf("enc424j600_spi_send(): Packet to send is too large (%d bytes).\n", + total); +#endif + return; + } + + dpd->txbusy = true; + dpd->txkey = key; + + aux[0] = ENC424J600_TXBUF_START & 0xff; + aux[1] = (((cyg_uint8)ENC424J600_TXBUF_START) >> 8) & 0xff; + set_pointer(dpd, ENC424J600_GPBWRPT, (aux[1] << 8) + aux[0]); + +#if ENC424J600_DEBUG & 8 + diag_printf("Starting SPI transaction to send a packet.\n"); +#endif + cyg_spi_transaction_begin(dpd->spi_service_device); + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + 1, + & opcode, + NULL, + ENC424J600_DONT_DROP_CS); + + for (block = 0; block < sg_len; block++) + { + cyg_spi_transaction_transfer(dpd->spi_service_device, + SPI_POLLING, + sg_list->len, + (cyg_uint8 *)sg_list->buf, + NULL, + (block == sg_len) ? ENC424J600_DO_DROP_CS : ENC424J600_DONT_DROP_CS ); + sg_list++; + } + cyg_spi_transaction_end(dpd->spi_service_device); + + aux[0] = total & 0xff; + aux[1] = (total >> 8 ) & 0xff; +#if ENC424J600_DEBUG & 8 + diag_printf("Writing ETXLEN 0x%02x%02x.\n", aux[1], aux[0]); +#endif + unbanked_register_operation(dpd, ENC424J600_WRITECRU, ENC424J600_ETXLEN_U, 2, &aux[0]); + +#if ENC424J600_DEBUG & 8 + diag_printf("Setting request to send.\n"); +#endif + simple_operation(dpd, ENC424J600_SETTXRTS); + + sc->funs->eth_drv->tx_done(sc, (CYG_ADDRESS)key, 0); + + return; +} + +static void +enc424j600_spi_poll(struct eth_drv_sc *sc) +{ + enc424j600_priv_data_t *dpd = (enc424j600_priv_data_t *)sc->driver_private; + cyg_uint8 aux[2]; + cyg_uint16 iflags; + +#if ENC424J600_DEBUG & 8 + diag_printf("enc424j600_spi_poll(%x)...\n", (cyg_uint32)sc); +#endif + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + // Globally disable interrupt source in Ethernet chip + simple_operation(dpd, ENC424J600_CLREIE); +#endif + do + { + // Figure out what caused the interrupt + banked_register_operation(dpd, ENC424J600_READCR, ENC424J600_EIRL, 2, &aux[0]); + aux[1] &= ENC424J600_LINKIF; + aux[0] &= (ENC424J600_PKTIF | ENC424J600_TXIF | ENC424J600_TXABTIF | ENC424J600_RXABTIF | ENC424J600_PCFULIF); + iflags = aux[0] + (cyg_uint16)256 * aux[1]; + if (0 != (aux[0] & ENC424J600_PKTIF)) + { // Packets are pending in chip's receive buffer + enc424j600_spi_RXevent(sc); + } + if ( 0 != (aux[1] & ENC424J600_LINKIF)) + { // Link status changed + enc424j600_spi_LINKevent(sc); + } + if (0 != (aux[0] & ENC424J600_TXIF)) + { // Packet has been sent + enc424j600_spi_TXevent(sc); + } + if (0 != (aux[0] & ENC424J600_TXABTIF)) + { // Packet send has been aborted + enc424j600_spi_TXABTevent(sc); + } + if ( 0 != (aux[0] & ENC424J600_PCFULIF)) + { // Packet counter overflow + enc424j600_spi_PCFULevent(sc); + } + if ( 0 != (aux[0] & ENC424J600_RXABTIF)) + { // Incoming packet rejected due to buffer or counter overflow + enc424j600_spi_RXABTevent(sc); + } + } while(0 != iflags); + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_drv_interrupt_unmask(CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR); + + // Globally enable interrupt source in Ethernet chip + simple_operation(dpd, ENC424J600_SETEIE); +#endif + + return; +} + +static int +enc424j600_spi_int_vector(struct eth_drv_sc *sc) +{ +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + return CYGNUM_DEVS_ETH_ENC424J600_INTERRUPT_VECTOR; +#else + return 0; +#endif +} + +// - End of higher level interface ----------------------------- + +// End of enc424j600_spi.c diff --git a/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.h b/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/microchip/enc424j600/current/src/enc424j600_spi.h @@ -0,0 +1,344 @@ +#ifndef CYGONCE_DEVS_ETH_ENC424J600_SPI_H_ +#define CYGONCE_DEVS_ETH_ENC424J600_SPI_H_ +//========================================================================== +// +// enc424j600_spi.h +// +// Microchip enc424j600 Ethernet chip +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Stanislevik +// Contributors: +// Date: 2010-11-23 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// Addresses of enc424j600 registers, banked access +// Banks 0, 1, 2 & 3 +#define ENC424J600_EUDASTL (0X16) +#define ENC424J600_EUDASTH (0X17) +#define ENC424J600_EUDANDL (0X18) +#define ENC424J600_EUDANDH (0X19) +#define ENC424J600_ESTATL (0x1a) +#define ENC424J600_ESTATH (0x1b) +#define ENC424J600_EIRL (0x1c) +#define ENC424J600_EIRH (0x1d) +#define ENC424J600_ECON1L (0x1e) +#define ENC424J600_ECON1H (0x1f) + +// Only bank 0 +#define ENC424J600_ETXSTL (0x00) +#define ENC424J600_ETXSTH (0x01) +#define ENC424J600_ETXLENL (0x02) +#define ENC424J600_ETXLENH (0x03) +#define ENC424J600_ERXSTL (0x04) +#define ENC424J600_ERXSTH (0x05) +#define ENC424J600_ERXTAILL (0x06) +#define ENC424J600_ERXTAILH (0x07) +#define ENC424J600_ERXHEADL (0x08) +#define ENC424J600_ERXHEADH (0x09) + +// Only bank 1 +#define ENC424J600_ERXFCONL (0x14) +#define ENC424J600_ERXFCONH (0x15) + +// Only bank 2 +#define ENC424J600_MACON1L (0x00) +#define ENC424J600_MACON1H (0x01) +#define ENC424J600_MACON2L (0x02) +#define ENC424J600_MACON2H (0x03) +#define ENC424J600_MABBIPGL (0x04) +#define ENC424J600_MABBIPGH (0x05) +#define ENC424J600_MAMXFLL (0x0a) +#define ENC424J600_MAMXFLH (0x0b) +#define ENC424J600_MICMDL (0x12) +#define ENC424J600_MICMDH (0x13) +#define ENC424J600_MIREGADRL (0x14) +#define ENC424J600_MIREGADRH (0x15) +#define ENC424J600_EIRL (0x1c) +#define ENC424J600_EIRH (0x1d) +#define ENC424J600_ECON1L (0x1e) +#define ENC424J600_ECON1H (0x1f) + +// Only bank 3 +#define ENC424J600_MAADR3L (0x00) +#define ENC424J600_MIWRL (0x06) +#define ENC424J600_MIWRH (0x07) +#define ENC424J600_MIRDL (0x08) +#define ENC424J600_MIRDH (0x09) +#define ENC424J600_MISTATL (0x0a) +#define ENC424J600_MISTATH (0x0b) +#define ENC424J600_EPAUSL (0x0c) +#define ENC424J600_EPAUSH (0x0d) +#define ENC424J600_ECON2L (0x0e) +#define ENC424J600_ECON2H (0x0f) +#define ENC424J600_ERXWML (0x10) +#define ENC424J600_ERXWMH (0x11) +#define ENC424J600_EIEL (0x12) +#define ENC424J600_EIEH (0x13) + +// Addresses of enc424j600 registers, unbanked access +// Bank 0 +#define ENC424J600_BANK0_Of (0) +#define ENC424J600_ETXST_U (ENC424J600_ETXSTL + ENC424J600_BANK0_Of) +#define ENC424J600_ETXLEN_U (ENC424J600_ETXLENL + ENC424J600_BANK0_Of) +#define ENC424J600_EUDAST_U (ENC424J600_EUDASTL + ENC424J600_BANK0_Of) +#define ENC424J600_EUDAND_U (ENC424J600_EUDANDL + ENC424J600_BANK0_Of) +#define ENC424J600_ESTAT_U (ENC424J600_ESTATL + ENC424J600_BANK0_Of) +#define ENC424J600_ERXST_U (ENC424J600_ERXSTL + ENC424J600_BANK0_Of) +#define ENC424J600_ERXTAIL_U (ENC424J600_ERXTAILL + ENC424J600_BANK0_Of) +#define ENC424J600_ERXHEAD_U (ENC424J600_ERXHEADL + ENC424J600_BANK0_Of) + +// Bank 1 +#define ENC424J600_BANK1_Of (0x20) +#define ENC424J600_ERXFCON_U ( ENC424J600_ERXFCONL + ENC424J600_BANK1_Of) + +// Bank 2 +#define ENC424J600_BANK2_Of (0x40) +#define ENC424J600_MACON1_U (ENC424J600_MACON1L + ENC424J600_BANK2_Of) +#define ENC424J600_MACON2_U (ENC424J600_MACON2L + ENC424J600_BANK2_Of) +#define ENC424J600_MABBIPG_U (ENC424J600_MABBIPGL + ENC424J600_BANK2_Of) +#define ENC424J600_MAMXFL_U (ENC424J600_MAMXFLL + ENC424J600_BANK2_Of) +#define ENC424J600_MICMD_U (ENC424J600_MICMDL + ENC424J600_BANK2_Of) +#define ENC424J600_MIREGADR_U (ENC424J600_MIREGADRL + ENC424J600_BANK2_Of) +#define ENC424J600_EIR_U (ENC424J600_EIRL + ENC424J600_BANK2_Of) +#define ENC424J600_ECON1_U (ENC424J600_ECON1L + ENC424J600_BANK2_Of) + +// Bank 3 +#define ENC424J600_BANK3_Of (0x60) +#define ENC424J600_MAADR3_U (ENC424J600_MAADR3L + ENC424J600_BANK3_Of) +#define ENC424J600_MIWR_U (ENC424J600_MIWRL + ENC424J600_BANK3_Of) +#define ENC424J600_MIRD_U (ENC424J600_MIRDL + ENC424J600_BANK3_Of) +#define ENC424J600_MISTAT_U (ENC424J600_MISTATL + ENC424J600_BANK3_Of) +#define ENC424J600_EPAUS_U (ENC424J600_EPAUSL + ENC424J600_BANK3_Of) +#define ENC424J600_ECON2_U (ENC424J600_ECON2L + ENC424J600_BANK3_Of) +#define ENC424J600_ERXWM_U (ENC424J600_ERXWML + ENC424J600_BANK3_Of) +#define ENC424J600_EIE_U (ENC424J600_EIEL + ENC424J600_BANK3_Of) + +// Addresses of enc424j600 PHY registers, special access + +enum enc424j600_pr_address_e +{ + ENC424J600_PHCON1 = 0, + ENC424J600_PHSTAT1 = 1, + ENC424J600_PHANA = 4, + ENC424J600_PHANLPA = 5, + ENC424J600_PHANE = 6, + ENC424J600_PHCON2 = 0x11, + ENC424J600_PHSTST2 = 0x1b, + ENC424J600_PHSTAT3 = 0x1f +}; + +//---------- end of register addresses -------------------------------------------------- + +//---------- definitions of bits in control registers ----------------------------------- + +// Interrupt flags (EIR register) higher byte +#define ENC424J600_MODEXIF (0x40) +#define ENC424J600_HASHIF (0x20) +#define ENC424J600_AESIF (0x10) +#define ENC424J600_LINKIF (0x08) // PHY status has changed + +// Interrupt flags (EIR register) lower byte +#define ENC424J600_PKTIF (0x40) // RX packet(s) pending +#define ENC424J600_DMAIF (0x20) +#define ENC424J600_TXIF (0x08) // Transmit done +#define ENC424J600_TXABTIF (0x04) // Packet transmission aborted due to an error +#define ENC424J600_RXABTIF (0x02) // RX packet rejected due to lack of space / to many + // pending packets +#define ENC424J600_PCFULIF (0x01) // To many pending packets + +// Interrupt enable bits (EIE register) higher byte +#define ENC424J600_INTIE (0x80) // Global interrupt enable +#define ENC424J600_MODEXIE (0x40) +#define ENC424J600_HASHIE (0x20) +#define ENC424J600_AESIE (0x10) +#define ENC424J600_LINKIE (0x08) // PHY status has changed + +// Interrupt enable bits (EIE register) lower byte +#define ENC424J600_PKTIE (0x40) // RX packet(s) pending +#define ENC424J600_DMAIE (0x20) +#define ENC424J600_TXIE (0x08) // Transmit done +#define ENC424J600_TXABTIE (0x04) // Packet transmission aborted due to an error +#define ENC424J600_RXABTIE (0x02) // RX packet rejected due to lack of space / too many + // pending packets +#define ENC424J600_PCFULIE (0x01) // Too many pending packets + +// MICMD +#define ENC424J600_MIIRD (0x01) +#define ENC424J600_MIISCAN (0x02) + +// MISTAT +#define ENC424J600_MISTAT_BUSY (0x01) +#define ENC424J600_MISTAT_SCAN (0x02) +#define ENC424J600_MISTAT_NVALID (0x04) + +//ESTAT upper byte +#define ENC424J600_PHYLNK (0x01) +#define ENC424J600_PHYDPX (0x04) +#define ENC424J600_CLKRDY (0x10) +#define ENC424J600_RXBUSY (0x20) +#define ENC424J600_FCIDLE (0x40) +#define ENC424J600_INT (0x80) + +// ECON1 lower byte +#define ENC424J600_TXRTS (0x02) + +//ECON2 upper byte +#define ENC424J600_STRCH (0x40) +#define ENC424J600_ETHEN (0x80) + +// ECON2 lower byte +#define ENC424J600_ETHRST (0x10) +#define ENC424J600_AUTOFC (0x80) + +// MACON2 upper byte +#define ENC424J600_NOBKOFF (0x10) +#define ENC424J600_BPEN (0x20) +#define ENC424J600_DEFER (0x40) + +// MACON2 lower byte +#define ENC424J600_FULDPX (0x01) +#define ENC424J600_HFRMEN (0x04) +#define ENC424J600_PHDREN (0x08) +#define ENC424J600_TXCRCEN (0x10) + +// ERXFCON lower byte +#define ENC424J600_BCEN (0x01) // accept broadcast packets +#define ENC424J600_MCEN (0x02) // accept multicast packets +#define ENC424J600_UCEN (0x08) // accept packets destined for local MAC address +#define ENC424J600_RUNTEN (0x10) // discard runt packets +#define ENC424J600_CRCEN (0x40) // discard packets with invalid CRC + +// PHCON1 upper byte +#define ENC424J600_PFULDPX (0x01) // full duplex +#define ENC424J600_RENEG (0x02) // restart negotiation +#define ENC424J600_ANEN (0x10) // auto negotiation enable +#define ENC424J600_SPD100 (0x20) // 100Mb/s + +// PHANA upper byte +#define ENC424J600_ADPAUS_BOTH (0x0c) // both symmetric and asymmetric flow control +#define ENC424J600_ADPAUS_ASYM (0x08) // asymmetric flow control towards link partner +#define ENC424J600_ADPAUS_SYMM (0x04) // symmetric flow control +#define ENC424J600_ADPAUS_NONE (0x00) // no flow control +#define ENC424J600_AD100FD (0x01) + +// PHANA lower byte +#define ENC424J600_AD100 (0x80) +#define ENC424J600_AD10FD (0x40) +#define ENC424J600_AD10 (0x20) +#define ENC424J600_IEEE802_3STD (0x01) // IEEE Standard Selector Field bits + +//---------- end of definitions of bits in control registers ------------------------- + +// enc424j600 SPI instructions opcodes + +// Single byte instructions +enum enc424j600_spi_opcode_1_e +{ + ENC424J600_SETETHRST = 0xca, // Issue System Reset + ENC424J600_SETPKTDEC = 0xcc, // Decrement packet counter + ENC424J600_SETTXRTS = 0xd4, // Send a packet + ENC424J600_FCDISABLE = 0xe0, // Disable flow control + ENC424J600_FCSINGLE = 0xe2, // Send a single pause frame + ENC424J600_FCMULTIPLE = 0xe4, // Keep sending pause frames + ENC424J600_FCCLEAR = 0xe6, // Send the final pause frame + ENC424J600_ENABLERX = 0xe8, // Enable receiver + ENC424J600_DISABLERX = 0xea, // Disable receiver + ENC424J600_SETEIE = 0xec, // Enable interrupts + ENC424J600_CLREIE = 0xee, // Disable interrupts +}; + +// Pointer definitions for 3-byte instructions +enum enc424j600_spi_bufferp_e +{ + ENC424J600_GPBRDPT = 0x60, // General purpose buffer read pointer + ENC424J600_RXRDPT = 0x64, // Receive buffer read pointer + ENC424J600_UDARDPT = 0x68, // User-defined area read pointer + ENC424J600_GPBWRPT = 0x6c, // General purpose buffer write pointer + ENC424J600_RXWRPT = 0x70, // Receive buffer write pointer + ENC424J600_UDAWRPT = 0x74, // User-defined area write pointer + +}; + +enum enc424j600_spi_opcode_3_e +{ + ENC424J600_WRITE3 = 0x00, // Pointer writing + ENC424J600_READ3 = 0x02 // Pointer reading + +}; + +// N-byte unbanked SFR instructions +enum enc424j600_spi_opcode_u_e +{ + ENC424J600_READCRU = 0x20, // Read Control Register, Unbanked + ENC424J600_WRITECRU = 0x22, // Write Control Register, Unbanked + ENC424J600_BITFIELDSETU = 0x24, // Bit Field Set, Unbanked + ENC424J600_BITFIELDCLEARU = 0x26 // Bit Field Clear, Unbanked +}; + +// N-byte banked SFR instructions +enum enc424j600_spi_opcode_e +{ + ENC424J600_READCR = 0x00, // Read Control Register, Banked + ENC424J600_WRITECR = 0x40, // Write Control Register, Banked + ENC424J600_BITFIELDSET = 0x80, // Bit Field Set, Banked + ENC424J600_BITFIELDCLEAR = 0xa0 // Bit Field Clear, Banked +}; + +// N-byte SRAM instructions +enum enc424j600_spi_opcode_sram_e +{ + ENC424J600_RGPDATA = 0x28, // Read from General Purpose buffer + ENC424J600_WGPDATA = 0x2a, // Write to General Purpose buffer + ENC424J600_RRXDATA = 0x2c, // Read from Rx buffer + ENC424J600_WRXDATA = 0x2e // Write to Rx buffer +}; + +#define ENC424J600_ETH_INTERRUPT_LEVEL_HIGH (true) +#define ENC424J600_ETH_INTERRUPT_LEVEL_LOW (false) +#define ENC424J600_ETH_INTERRUPT_EDGE_RISING (true) +#define ENC424J600_ETH_INTERRUPT_EDGE_FALLING (false) + +//#define ETH_DRV_GET_MAC_ADDRESS (0x1100) + +#endif /* ifndef CYGONCE_DEVS_ETH_ENC424J600_SPI_H_ */ +// End of enc424j600_spi.h diff --git a/packages/devs/eth/microchip/enc424j600/current/tests/netconn_test_server.c b/packages/devs/eth/microchip/enc424j600/current/tests/netconn_test_server.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/microchip/enc424j600/current/tests/netconn_test_server.c @@ -0,0 +1,354 @@ +//========================================================================== +// +// netconn_test_server.c +// +// Utility to test enc424j600 Ethernet driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Stanislevik +// Contributors: +// Date: 2010-08-04 +// Purpose: +// Description: Utility to test enc424j600 (or any other) Ethernet driver +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include // Test macros +#include // Assertion macros +#include // Diagnostic output +#include +#include + +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL +#include + +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include +#include + +#define PORTNUM 2000 + +// Threads' data structures +typedef struct thread_s +{ + cyg_uint8 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]; + cyg_thread data; + cyg_handle_t handle; +} thread_s_t; + +typedef struct +{ + struct netconn * connection_p; + cyg_uint32 id; +} server_argument_t; + +//#define INIT_PRIORITY 5 +#define INIT_PRIORITY 12 +#define LISTENER_PRIORITY INIT_PRIORITY+1 +#define SERVER_PRIORITY LISTENER_PRIORITY-1 + +// Init thread + +thread_s_t init_thread; + +void run_init(void) +{ + diag_printf("i: Initializing network stack...\n"); + cyg_lwip_sequential_init(); +} + +// Server thread + +void server(cyg_addrword_t arg_p) +{ + struct netconn *newconn = NULL; + struct netbuf *income_buffer = NULL; + struct ip_addr from_addr; + struct ip_addr my_addr; + cyg_uint16 from_port = 0; + cyg_uint16 my_port = 0; + cyg_uint8 *addr_byte_p = NULL; + cyg_uint16 total_len; + cyg_uint8 * data_buf = NULL; + cyg_int32 retval; + cyg_uint32 id; + cyg_uint32 csum; + + newconn = ((server_argument_t *)arg_p) -> connection_p; + id = ((server_argument_t *)arg_p) -> id; + + retval = netconn_addr(newconn, &my_addr, &my_port); + if(0 != retval) + { + diag_printf("%u: netconn_addr() return %d. Exiting.\n", id, retval); + netconn_delete(newconn); + cyg_thread_exit(); + } + + retval = netconn_peer(newconn, &from_addr, &from_port); + if(0 != retval) + { + diag_printf("%u: netconn_peer() return %d. Exiting.\n", id, retval); + netconn_delete(newconn); + cyg_thread_exit(); + } + + addr_byte_p = (cyg_uint8 *) & from_addr.addr; + diag_printf("%u: Connected to remote peer %u.%u.%u.%u port %u, at my port %u\n", id, + *addr_byte_p, *(addr_byte_p+1), *(addr_byte_p+2), *(addr_byte_p+3), + from_port, my_port); + diag_printf("newconn %x\n", (unsigned)newconn); + + csum =0; + + while((income_buffer = netconn_recv(newconn)) != NULL) + { + total_len = netbuf_len(income_buffer); + if(0 != total_len) + { + data_buf = malloc(total_len); + if(NULL == data_buf) + { + diag_printf("%u: Can not allocate %u bytes. Exiting.\n", id, total_len); + netconn_delete(newconn); + cyg_thread_exit(); + } + + cyg_uint8 *local_data_p = data_buf; + do + { + cyg_uint8 *in_data_p; + cyg_uint16 len; + int i; + + netbuf_data(income_buffer, (void **)&in_data_p, &len); + for(i=0; i= 0); + diag_printf("\nReceived %u bytes\n", total_len); + + free(data_buf); + } + netbuf_delete(income_buffer); + } + + diag_printf("Checksum %08x\n", csum); + + retval = netconn_close(newconn); + if( 0 != retval) + { + diag_printf("%u: netconn_close(%x) return %d.\n", id, (unsigned)newconn, retval); + } + + retval = netconn_delete(newconn); + if( 0 != retval) + { + diag_printf("%u: netconn_delete(%x) return %d. Exiting.\n", id, (unsigned)newconn, retval); + cyg_thread_exit(); + } + + diag_printf("%u: TCP connection closed.\n", id); + +} + +// Listener thread + +thread_s_t listener_thread; + +void listener(void) +{ + struct netconn *conn = NULL; + struct netconn *newconn = NULL; + struct netif *mynetif = NULL; + server_argument_t server_launch_args_s; + cyg_uint32 server_id = 0; + thread_s_t * new_thread_data = NULL; + char server_name[20]; + cyg_int32 retval; + + // This large malloc is just for testing +// new_thread_data = malloc(150 * sizeof(thread_s_t)); + + cyg_thread_delay(500); // Sleep over the initialization of network + + mynetif = netif_find("et0"); + diag_printf("l: netif_find(et0) return %x\n", (unsigned int)mynetif); + retval = netif_is_up(mynetif); + diag_printf("l: netif_is_up() return %u\n", retval); + + diag_printf("l: Creating TCP connection...\n"); + conn = netconn_new(NETCONN_TCP); + if (NULL == conn) + { + diag_printf("l: netconn_new() return NULL. Exiting.\n"); + cyg_thread_exit(); + } + diag_printf("l: Binding to port %d...\n", PORTNUM); + retval = netconn_bind(conn, NULL, PORTNUM); + if (0 != retval) + { + diag_printf("l: netconn_bind() return %d. Exiting.\n", retval); + cyg_thread_exit(); + } + + diag_printf("l: Setting up for listening...\n"); + retval = netconn_listen(conn); + if( 0!= retval) + { + diag_printf("l: netconn_listen() return %d. Exiting.\n", retval); + cyg_thread_exit(); + } + + do + { + diag_printf("l: Waiting for a new connection...\n"); + newconn = netconn_accept(conn); + if (NULL == newconn) + { + diag_printf("l: netconn_accept() return NULL. Exiting.\n"); + cyg_thread_exit(); + } + + // It's time to start a server thread + + new_thread_data = malloc(sizeof(thread_s_t)); + if(NULL == new_thread_data) + { + diag_printf("l: Can't allocate memory for another server.\n"); + netconn_close(newconn); + netconn_delete(newconn); + continue; + } + /* + * Thread data is never freed after the thread exit. + * After a number of connections made, it will be impossible to + * allocate memory for additional servers. + */ + + server_launch_args_s.connection_p = newconn; + server_launch_args_s.id = ++server_id; + sprintf(server_name, "s%u", server_id); + + diag_printf("l: Starting %s...\n", server_name); + + cyg_thread_create( + SERVER_PRIORITY, + (cyg_thread_entry_t*) server, + (cyg_addrword_t)&server_launch_args_s, + server_name, + &(new_thread_data->stack[0]), + CYGNUM_HAL_STACK_SIZE_TYPICAL, + &(new_thread_data->handle), + &(new_thread_data->data) + ); + cyg_thread_resume(new_thread_data->handle); + + } while(true); +} + +//--------------------------------------------------------------------------- +void show_threads(void) +{ + cyg_handle_t thread = 0; + cyg_uint16 id = 0; + + while( cyg_thread_get_next( &thread, &id ) ) + { + cyg_thread_info info; + + if( !cyg_thread_get_info( thread, id, &info ) ) + break; + + diag_printf("ID: %04x name: %10s pri: %d\n", + info.id, info.name?info.name:"----", info.set_pri ); + diag_printf(" stack_base %x stack_size %d\n", info.stack_base, info.stack_size); + } +} + +void cyg_user_start(void) +{ + diag_printf("%u: Starting initializer...\n", __LINE__); + cyg_thread_create( + INIT_PRIORITY, + (cyg_thread_entry_t*) run_init, + 0, + "initializer", + &init_thread.stack[0], + CYGNUM_HAL_STACK_SIZE_TYPICAL, + &init_thread.handle, + &init_thread.data + ); + cyg_thread_resume(init_thread.handle); + + diag_printf("%u: Starting listener...\n", __LINE__); + + cyg_thread_create( + LISTENER_PRIORITY, + (cyg_thread_entry_t*) listener, + 0, + "listener", + &listener_thread.stack[0], + CYGNUM_HAL_STACK_SIZE_TYPICAL, + &listener_thread.handle, + &listener_thread.data + ); + cyg_thread_resume(listener_thread.handle); + + show_threads(); + + diag_printf("%u: Starting scheduler...\n", __LINE__); + cyg_scheduler_start(); +} + +//============================================================================= + diff --git a/packages/devs/eth/phy/current/ChangeLog b/packages/devs/eth/phy/current/ChangeLog --- a/packages/devs/eth/phy/current/ChangeLog +++ b/packages/devs/eth/phy/current/ChangeLog @@ -1,3 +1,23 @@ +2011-07-22 Christophe Coutand and sergeig + + * cdl/phy_eth_drivers.cdl: Use CYGHWR_DEVS_ETH_PHY_DP8384X name + instead CYGHWR_DEVS_ETH_PHY_DP83847 + * src/DP83847.c: Renamed stat() function, add new PHY DP83848C + Update due renaming CYGHWR_DEVS_ETH_PHY_DP83847 to + CYGHWR_DEVS_ETH_PHY_DP8384X. [ Bugzilla 1001235 ] + +2011-07-02 Ilija Kocho + + * src/KSZ8041.c: More silicon revisions. [Bugzilla 1001274] + +2010-06-10 Christophe Coutand + + * doc/eth_phy.sgml, include/eth_phy.h: Add Ethernet Gigabit Mode + * cdl/phy_eth_drivers.cdl: Add new PHY support + * src/IP101A.c, src/IP101A.h: Contributed by Edgar Grimberg + * src/VSC8244.c, src/VSC8244.h: Contributed by Christophe Coutand + * src/VSC8641.c, src/VSC8641.h: Contributed by Sachin Sushil Chaddha + 2008-12-30 John Dallaway * cdl/phy_eth_drivers.cdl: Reference per-package documentation. @@ -80,7 +100,7 @@ 2003-08-19 Gary Thomas - + @@ -157,9 +157,10 @@ this information may be useful to the MA provide data, etc. The status bitmask contains these bits: -#define ETH_PHY_STAT_LINK 0x0001 // Link up/down -#define ETH_PHY_STAT_100MB 0x0002 // Connection is 100Mb/10Mb -#define ETH_PHY_STAT_FDX 0x0004 // Connection is full/half duplex +#define ETH_PHY_STAT_LINK 0x0001 // Link up/down +#define ETH_PHY_STAT_100MB 0x0002 // Connection is 100Mb/10Mb +#define ETH_PHY_STAT_FDX 0x0004 // Connection is full/half duplex +#define ETH_PHY_STAT_1000MB 0x0008 // Connection is 1Gb Note: the usage here is that if the bit is set, then the condition exists. For example, if the diff --git a/packages/devs/eth/phy/current/include/eth_phy.h b/packages/devs/eth/phy/current/include/eth_phy.h --- a/packages/devs/eth/phy/current/include/eth_phy.h +++ b/packages/devs/eth/phy/current/include/eth_phy.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2003 Free Software Foundation, Inc. +// Copyright (C) 2003, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -84,9 +84,10 @@ static eth_phy_access_t _l = {PHY_BIT_LE static eth_phy_access_t _l = {PHY_REG_LEVEL_ACCESS_TYPE, false, _init, _reset, \ {.reg_level_ops = {_put_reg, _get_reg}}} -#define ETH_PHY_STAT_LINK 0x0001 // Link up/down -#define ETH_PHY_STAT_100MB 0x0002 // Connection is 100Mb/10Mb -#define ETH_PHY_STAT_FDX 0x0004 // Connection is full/half duplex +#define ETH_PHY_STAT_LINK 0x0001 // Link up/down +#define ETH_PHY_STAT_100MB 0x0002 // Connection is 100Mb/10Mb +#define ETH_PHY_STAT_FDX 0x0004 // Connection is full/half duplex +#define ETH_PHY_STAT_1000MB 0x0008 // Connection is 1Gb externC bool _eth_phy_init(eth_phy_access_t *f); externC void _eth_phy_reset(eth_phy_access_t *f); diff --git a/packages/devs/eth/phy/current/src/DP83847.c b/packages/devs/eth/phy/current/src/DP83847.c --- a/packages/devs/eth/phy/current/src/DP83847.c +++ b/packages/devs/eth/phy/current/src/DP83847.c @@ -40,10 +40,10 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): gthomas -// Contributors: +// Contributors: ccoutand // Date: 2003-08-01 // Purpose: -// Description: Support for ethernet NS DP83847 PHY +// Description: Support for ethernet NS DP8384X PHY // // //####DESCRIPTIONEND#### @@ -63,7 +63,7 @@ #include #include -static bool dp83847_stat(eth_phy_access_t *f, int *state) +static bool dp8384x_stat(eth_phy_access_t *f, int *state) { unsigned short phy_state; int tries; @@ -94,4 +94,5 @@ static bool dp83847_stat(eth_phy_access_ return false; } -_eth_phy_dev("National Semiconductor DP83847", 0x20005c30, dp83847_stat) +_eth_phy_dev("National Semiconductor DP83847", 0x20005c30, dp8384x_stat) +_eth_phy_dev("National Semiconductor DP83848C", 0x20005c90, dp8384x_stat) diff --git a/packages/devs/eth/phy/current/src/IP101A.c b/packages/devs/eth/phy/current/src/IP101A.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/IP101A.c @@ -0,0 +1,117 @@ +//========================================================================== +// +// phy/ip101a.c +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Edgar Grimberg +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: hardware driver for Ethernet PHY IC+ IP101A +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include "IP101A.h" + +static bool ip101a_stat(eth_phy_access_t *f, int *state) +{ + unsigned short phy_state; + int tries; + int auto_completed = 1; + + // Read negotiated state from the Quick Poll Detailed Status Register + if (_eth_phy_read(f, MII_STAT_REG, f->phy_addr, &phy_state)) + { + if ((phy_state & IP101A_AUTO_COMPLETED) == 0) + { + auto_completed = 0; + eth_phy_printf("... waiting for auto-negotiation"); + for (tries = 0; tries < CYGINT_DEVS_ETH_PHY_AUTO_NEGOTIATION_TIME; tries++) + { + if (_eth_phy_read(f, MII_STAT_REG, f->phy_addr, &phy_state)) + { + if ((phy_state & IP101A_AUTO_COMPLETED) != 0) + { + auto_completed = 1; + break; + } + } + CYGACC_CALL_IF_DELAY_US(1000000); // 1 second + eth_phy_printf("."); + } + eth_phy_printf("\n"); + } + + if(auto_completed) + { + _eth_phy_read(f, MII_PHY_STAT_REG, f->phy_addr, &phy_state); + + if(phy_state & IP101A_LINK_STATUS2) + *state |= ETH_PHY_STAT_LINK; + if(phy_state & IP101A_SPEED_100MB) + *state |= ETH_PHY_STAT_100MB; + if(phy_state & IP101A_DUPLEX_MODE) + *state |= ETH_PHY_STAT_FDX; + return true; + } + + } + return false; +} + + +_eth_phy_dev("IC+ IP101A", 0x02430c54, ip101a_stat) + diff --git a/packages/devs/eth/phy/current/src/IP101A.h b/packages/devs/eth/phy/current/src/IP101A.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/IP101A.h @@ -0,0 +1,92 @@ +#ifndef CYGONCE_PHY_IP101A_HEADER_ +#define CYGONCE_PHY_IP101A_HEADER_ +//========================================================================== +// +// phy/ip101a.h +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Edgar Grimberg +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: Hardware driver for Ethernet PHY IC+ IP101A +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define MII_CTRL_REG 0x00 +#define MII_STAT_REG 0x01 +#define MII_PHY_ID1_REG 0x02 +#define MII_PHY_ID2_REG 0x03 +#define MII_AUTO_NEG_ADV_REG 0x04 +#define MII_AUTO_NEG_LPA_REG 0x05 +#define MII_AUTO_NEG_EXP_REG 0x06 +#define MII_PHY_CTRL_REG 0x10 +#define MII_PHY_IRQ_REG 0x11 +#define MII_PHY_STAT_REG 0x12 +#define MII_PHY_CTRL2_REG 0x1E + +#define MII_PHY_IRQ_INTR 0x8000 +#define MII_PHY_IRQ_ALL_MASK 0x0800 +#define MII_PHY_IRQ_SPEED_MASK 0x0400 +#define MII_PHY_IRQ_DUPLEX_MASK 0x0200 +#define MII_PHY_IRQ_LINK_MASK 0x0100 +#define MII_PHY_IRQ_ARBITER_MASK 0x0080 +#define MII_PHY_IRQ_ARBITER_CHANGE 0x0040 +#define MII_PHY_IRQ_SPEED_CHANGE 0x0004 +#define MII_PHY_IRQ_DUPLEX_CHANGE 0x0002 +#define MII_PHY_IRQ_LINK_CHANGE 0x0001 + +#define IP101A_CTRL_DUPLEX 0x0100 +#define IP101A_CTRL_100MB 0x2000 +#define IP101A_CTRL_AUTO_NEG 0x1000 +#define IP101A_CTRL_AUTO_NEG_RST 0x0200 + +#define IP101A_LINK_STATUS 0x0004 +#define IP101A_AUTO_COMPLETED 0x20 + +#define IP101A_DUPLEX_MODE 0x2000 +#define IP101A_SPEED_100MB 0x4000 +#define IP101A_LINK_STATUS2 0x0400 + +#endif // CYGONCE_PHY_IP101A_HEADER_ + diff --git a/packages/devs/eth/phy/current/src/KSZ8041.c b/packages/devs/eth/phy/current/src/KSZ8041.c --- a/packages/devs/eth/phy/current/src/KSZ8041.c +++ b/packages/devs/eth/phy/current/src/KSZ8041.c @@ -185,3 +185,4 @@ ksz8041_stat (eth_phy_access_t * f, int } _eth_phy_dev ("Micrel KSZ8041", 0x00221512, ksz8041_stat) +_eth_phy_dev ("Micrel KSZ8041", 0x00221513, ksz8041_stat) diff --git a/packages/devs/eth/phy/current/src/VSC8244.c b/packages/devs/eth/phy/current/src/VSC8244.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/VSC8244.c @@ -0,0 +1,122 @@ +//========================================================================== +// +// phy/VSC8244.c +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: Hardware driver for Ethernet PHY Vitesse VSC8244 +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include "VSC8244.h" + +static bool VSC8244_stat(eth_phy_access_t *f, int *state) +{ + unsigned short phy_state; + int tries; + int auto_completed = 1; + int link_up = 0; + + // Read negotiated state from the Quick Poll Detailed Status Register + if (_eth_phy_read(f, VSC8244_MII_STAT_REG, f->phy_addr, &phy_state)) + { + + if ((phy_state & VSC8244_AUTO_COMPLETED) == 0) + { + auto_completed = 0; + eth_phy_printf("... waiting for auto-negotiation"); + for (tries = 0; tries < CYGINT_DEVS_ETH_PHY_AUTO_NEGOTIATION_TIME; tries++) + { + if (_eth_phy_read(f, VSC8244_MII_STAT_REG, f->phy_addr, &phy_state)) + { + if ((phy_state & VSC8244_AUTO_COMPLETED) != 0) + { + auto_completed = 1; + break; + } + } + CYGACC_CALL_IF_DELAY_US(1000000); // 1 second + eth_phy_printf("."); + } + eth_phy_printf("\n"); + } + + if(phy_state & VSC8244_MII_PHY_STAT_LINK_UP) + link_up = 1; + + if(auto_completed) + { + _eth_phy_read(f, VSC8244_MII_PHY_STAT_REG, f->phy_addr, &phy_state); + + if(link_up) + *state |= ETH_PHY_STAT_LINK; + if(phy_state & VSC8244_MII_PHY_STAT_1000MB ) + *state |= ETH_PHY_STAT_1000MB; + if(phy_state & VSC8244_MII_PHY_STAT_100MB) + *state |= ETH_PHY_STAT_100MB; + if(phy_state & VSC8244_MII_PHY_STAT_DUPLEX_FULL) + *state |= ETH_PHY_STAT_FDX; + return true; + } + + } + return false; +} + +_eth_phy_dev("Vitesse VSC8244", 0x000FC6C2, VSC8244_stat) diff --git a/packages/devs/eth/phy/current/src/VSC8244.h b/packages/devs/eth/phy/current/src/VSC8244.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/VSC8244.h @@ -0,0 +1,67 @@ +#ifndef CYGONCE_PHY_VSC8244_HEADER_ +#define CYGONCE_PHY_VSC8244_HEADER_ +//========================================================================== +// +// phy/VSC8244.h +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: Hardware driver for Ethernet PHY Vitesse VSC8244 +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define VSC8244_MII_PHY_STAT_DUPLEX_FULL 0x20 +#define VSC8244_MII_PHY_STAT_1000MB 0x10 +#define VSC8244_MII_PHY_STAT_100MB 0x08 + +#define VSC8244_MII_PHY_STAT_LINK_UP 0x04 + +#define VSC8244_MII_STAT_REG 0x01 +#define VSC8244_MII_PHY_STAT_REG 0x1C + +#define VSC8244_AUTO_COMPLETED 0x20 + +#endif // CYGONCE_PHY_VSC8244_HEADER_ diff --git a/packages/devs/eth/phy/current/src/VSC8641.c b/packages/devs/eth/phy/current/src/VSC8641.c new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/VSC8641.c @@ -0,0 +1,123 @@ +//========================================================================== +// +// phy/VSC8641.c +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Sachin Sushil Chaddha +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: Hardware driver for Ethernet PHY Vitesse VSC8641 +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include "VSC8641.h" + +static bool VSC8641_stat(eth_phy_access_t *f, int *state) +{ + unsigned short phy_state; + int tries; + int auto_completed = 1; + int link_up = 0; + + // Read negotiated state from the Quick Poll Detailed Status Register + if (_eth_phy_read(f, VSC8641_MII_STAT_REG, f->phy_addr, &phy_state)) + { + + if ((phy_state & VSC8641_AUTO_COMPLETED) == 0) + { + auto_completed = 0; + eth_phy_printf("... waiting for auto-negotiation"); + for (tries = 0; tries < CYGINT_DEVS_ETH_PHY_AUTO_NEGOTIATION_TIME; tries++) + { + if (_eth_phy_read(f, VSC8641_MII_STAT_REG, f->phy_addr, &phy_state)) + { + if ((phy_state & VSC8641_AUTO_COMPLETED) != 0) + { + auto_completed = 1; + break; + } + } + CYGACC_CALL_IF_DELAY_US(1000000); // 1 second + eth_phy_printf("."); + } + eth_phy_printf("\n"); + } + + if(phy_state & VSC8641_MII_PHY_STAT_LINK_UP) + link_up = 1; + + if(auto_completed) + { + _eth_phy_read(f, VSC8641_MII_PHY_STAT_REG, f->phy_addr, &phy_state); + + if(link_up) + *state |= ETH_PHY_STAT_LINK; + if(phy_state & VSC8641_MII_PHY_STAT_1000MB ) + *state |= ETH_PHY_STAT_1000MB; + if(phy_state & VSC8641_MII_PHY_STAT_100MB) + *state |= ETH_PHY_STAT_100MB; + if(phy_state & VSC8641_MII_PHY_STAT_DUPLEX_FULL) + *state |= ETH_PHY_STAT_FDX; + return true; + } + + } + return false; +} + + +_eth_phy_dev("Vitesse VSC8641", 0x00070431, VSC8641_stat) diff --git a/packages/devs/eth/phy/current/src/VSC8641.h b/packages/devs/eth/phy/current/src/VSC8641.h new file mode 100644 --- /dev/null +++ b/packages/devs/eth/phy/current/src/VSC8641.h @@ -0,0 +1,86 @@ +#ifndef CYGONCE_PHY_VSC8641_HEADER_ +#define CYGONCE_PHY_VSC8641_HEADER_ +//========================================================================== +// +// phy/VSC8641.h +// +// Ethernet PHY driver +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +// 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2009-11-01 +// Purpose: +// Description: Hardware driver for Ethernet PHY Vitesse VSC8641 +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define VSC8641_MII_MDE_CTRL_REG 0x00 +#define VSC8641_MII_STAT_REG 0x01 +#define VSC8641_MII_AUTO_NEG_ADV_REG 0x04 +#define VSC8641_MII_AUTO_NEG_NXT_REG 0x07 +#define VSC8641_MII_PHY_IRQ_MSK_REG 0x19 + +#define VSC8641_MII_PHY_STAT_REG 0x1C +#define VSC8641_MII_INT_STAT_REG 0x1A + +#define VSC8641_MII_PHY_EPA 0x1F +#define VSC8641_MII_PHY_RGMII_SKEW 0x1C + +#define VSC8641_AUTO_COMPLETED 0x20 + +#define VSC8641_CTRL_AUTO_NEG 0x1000 +#define VSC8641_CTRL_AUTO_NEG_RST 0x0200 +#define VSC8641_CTRL_1000MB 0x0040 +#define VSC8641_CTRL_100MB 0x2000 +#define VSC8641_CTRL_FULL_DUPLEX 0x0100 + +#define VSC8641_IRQ_SPEED_CHANGE 0x4000 +#define VSC8641_IRQ_FDX_STATE_CHANGE 0x1000 +#define VSC8641_IRQ_LINK_CHANGE 0x2000 + +#define VSC8641_MII_PHY_STAT_DUPLEX_FULL 0x20 +#define VSC8641_MII_PHY_STAT_1000MB 0x10 +#define VSC8641_MII_PHY_STAT_100MB 0x08 + +#define VSC8641_MII_PHY_STAT_LINK_UP 0x04 + +#endif // CYGONCE_PHY_VSC8641_HEADER_ diff --git a/packages/devs/eth/powerpc/moab/current/ChangeLog b/packages/devs/eth/powerpc/moab/current/ChangeLog --- a/packages/devs/eth/powerpc/moab/current/ChangeLog +++ b/packages/devs/eth/powerpc/moab/current/ChangeLog @@ -1,3 +1,9 @@ +2011-07-22 Sergei Gavrikov + + * cdl/moab_eth_drivers.cdl: + Update due renaming CYGHWR_DEVS_ETH_PHY_DP83847 to + CYGHWR_DEVS_ETH_PHY_DP8384X. [ Bugzilla 1001235 ] + 2005-07-18 David Vrabel * include/moab_eth_dp83816.inl: Remove unneeded _h2le and _le2h diff --git a/packages/devs/eth/powerpc/moab/current/cdl/moab_eth_drivers.cdl b/packages/devs/eth/powerpc/moab/current/cdl/moab_eth_drivers.cdl --- a/packages/devs/eth/powerpc/moab/current/cdl/moab_eth_drivers.cdl +++ b/packages/devs/eth/powerpc/moab/current/cdl/moab_eth_drivers.cdl @@ -58,7 +58,7 @@ cdl_package CYGPKG_DEVS_ETH_POWERPC_MOAB active_if CYGPKG_HAL_POWERPC_PPC40x requires CYGPKG_DEVS_ETH_POWERPC_PPC405 - requires CYGHWR_DEVS_ETH_PHY_DP83847 + requires CYGHWR_DEVS_ETH_PHY_DP8384X requires CYGPKG_HAL_POWERPC_MOAB # FIXME: This really belongs in the NS DP83816 package diff --git a/packages/devs/eth/via/rhine/current/ChangeLog b/packages/devs/eth/via/rhine/current/ChangeLog --- a/packages/devs/eth/via/rhine/current/ChangeLog +++ b/packages/devs/eth/via/rhine/current/ChangeLog @@ -1,3 +1,10 @@ +2011-08-28 Stephen Polkowski + Sergei Gavrikov + + * src/via_rhine.h: Fix some compiler warning. + * src/if_rhine.c (via_rhine_init): Manage ESA with HAL_PCI_IO* macros. + [ Bugzilla 1001269 ] + 2004-08-12 Jani Monoses * src/if_rhine.c: Fix builing with lwip. diff --git a/packages/devs/eth/via/rhine/current/src/if_rhine.c b/packages/devs/eth/via/rhine/current/src/if_rhine.c --- a/packages/devs/eth/via/rhine/current/src/if_rhine.c +++ b/packages/devs/eth/via/rhine/current/src/if_rhine.c @@ -538,14 +538,12 @@ via_rhine_init(struct cyg_netdevtab_entr // Prepare ESA if (cpd->hardwired_esa) { // Force the NIC to use the specified ESA - p = cpd->base + RHINE_PAR0; for (i = 0; i < 6; i++) - *p++ = cpd->esa[i]; + HAL_PCI_IO_WRITE_UINT8(cpd->base + RHINE_PAR0 + i, cpd->esa[i]); } else { // Use the address from the serial EEPROM - p = cpd->base + RHINE_PAR0; for (i = 0; i < 6; i++) - cpd->esa[i] = *p++; + HAL_PCI_IO_READ_UINT8(cpd->base + RHINE_PAR0 + i, cpd->esa[i]); } #if DEBUG & 8 diag_printf("RHINE - %s ESA: %02x:%02x:%02x:%02x:%02x:%02x\n", diff --git a/packages/devs/eth/via/rhine/current/src/via_rhine.h b/packages/devs/eth/via/rhine/current/src/via_rhine.h --- a/packages/devs/eth/via/rhine/current/src/via_rhine.h +++ b/packages/devs/eth/via/rhine/current/src/via_rhine.h @@ -464,5 +464,5 @@ typedef struct rhine_priv_data { } rhine_priv_data; // ------------------------------------------------------------------------ -#endif CYGONCE_DEVS_ETH_VIA_RHINE_H +#endif // CYGONCE_DEVS_ETH_VIA_RHINE_H // EOF via_rhine.h diff --git a/packages/devs/flash/amd/am29xxxxx/current/ChangeLog b/packages/devs/flash/amd/am29xxxxx/current/ChangeLog --- a/packages/devs/flash/amd/am29xxxxx/current/ChangeLog +++ b/packages/devs/flash/amd/am29xxxxx/current/ChangeLog @@ -1,3 +1,14 @@ +2010-07-14 Christophe Coutand + + * include/flash_am29xxxxx_parts.inl [CYGHWR_DEVS_FLASH_AMD_AM29LV640M]: + * cdl/flash_amd_am29xxxxx.cdl: Add AM29LV640M part + + * include/flash_am29xxxxx_parts.inl [CYGHWR_DEVS_FLASH_AMD_S29GL512P]: + * cdl/flash_amd_am29xxxxx.cdl: Add Spansion S29GL512P part + + * include/flash_am29xxxxx_parts.inl [CYGHWR_DEVS_FLASH_AMD_S29GL01GP]: + * cdl/flash_amd_am29xxxxx.cdl: Add Spansion S29GL01GP part + 2009-02-17 Lars Povlsen * include/flash_am29xxxxx_parts.inl: diff --git a/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl b/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl --- a/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl +++ b/packages/devs/flash/amd/am29xxxxx/current/cdl/flash_amd_am29xxxxx.cdl @@ -237,6 +237,16 @@ cdl_package CYGPKG_DEVS_FLASH_AMD_AM29XX part in the family." } + cdl_option CYGHWR_DEVS_FLASH_AMD_AM29LV640M { + display "AMD AM29LV640M flash memory support" + default_value 0 + implements CYGINT_DEVS_FLASH_AMD_VARIANTS + description " + When this option is enabled, the AMD flash driver will be + able to recognize and handle the AM29LV640M + part in the family." + } + cdl_option CYGHWR_DEVS_FLASH_AMD_AM29F800 { display "AMD AM29F800 flash memory support" default_value 0 @@ -396,4 +406,24 @@ cdl_package CYGPKG_DEVS_FLASH_AMD_AM29XX part in the family." } + cdl_option CYGHWR_DEVS_FLASH_AMD_S29GL512P { + display "AMD/SPANSION S29GL512P flash memory support" + default_value 0 + implements CYGINT_DEVS_FLASH_AMD_VARIANTS + description " + When this option is enabled, the AMD/SPANSION flash driver will be + able to recognize and handle the S29GL512P + part in the family." + } + + cdl_option CYGHWR_DEVS_FLASH_AMD_S29GL01GP { + display "AMD/SPANSION S29GL01GP flash memory support" + default_value 0 + implements CYGINT_DEVS_FLASH_AMD_VARIANTS + description " + When this option is enabled, the AMD/SPANSION flash driver will be + able to recognize and handle the S29GL01GP + part in the family." + } + } diff --git a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl --- a/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl +++ b/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx_parts.inl @@ -1245,6 +1245,18 @@ bufsiz : 1 }, #endif +#ifdef CYGHWR_DEVS_FLASH_AMD_AM29LV640M + { // MBM29LV640xx + device_id : FLASHWORD(0x227e), + block_size : 0x10000 * CYGNUM_FLASH_INTERLEAVE, + block_count: 128, + device_size: 0x800000 * CYGNUM_FLASH_INTERLEAVE, + base_mask : ~(0x800000 * CYGNUM_FLASH_INTERLEAVE - 1), + bootblock : false, + banked : false, + bufsiz : 1 + }, +#endif #ifdef CYGHWR_DEVS_FLASH_AMD_TC58FVB800 { // Toshiba TC58FVB800 (compatible with AM29LV800-B except for IDs.) device_id : FLASHWORD(0xCE), @@ -1499,6 +1511,36 @@ bufsiz : 16, }, #endif +#ifdef CYGHWR_DEVS_FLASH_AMD_S29GL512P + { // AMD/SPANSION S29GL512P + long_device_id: true, + device_id : FLASHWORD(0x227e), + device_id2 : FLASHWORD(0x2223), + device_id3 : FLASHWORD(0x2201), + block_size : 0x20000 * CYGNUM_FLASH_INTERLEAVE, + block_count: 512, + device_size: 0x4000000 * CYGNUM_FLASH_INTERLEAVE, + base_mask : ~(0x4000000 * CYGNUM_FLASH_INTERLEAVE - 1), + bootblock : false, + banked : false, + bufsiz : 32, + }, +#endif +#ifdef CYGHWR_DEVS_FLASH_AMD_S29GL01GP + { // AMD/SPANSION S29GL01GP + long_device_id: true, + device_id : FLASHWORD(0x227e), + device_id2 : FLASHWORD(0x2228), + device_id3 : FLASHWORD(0x2201), + block_size : 0x20000 * CYGNUM_FLASH_INTERLEAVE, + block_count: 1024, + device_size: 0x8000000 * CYGNUM_FLASH_INTERLEAVE, + base_mask : ~(0x8000000 * CYGNUM_FLASH_INTERLEAVE - 1), + bootblock : false, + banked : false, + bufsiz : 32, + }, +#endif #endif // 16 bit devices diff --git a/packages/devs/flash/arm/olpcx2294/current/ChangeLog b/packages/devs/flash/arm/olpcx2294/current/ChangeLog --- a/packages/devs/flash/arm/olpcx2294/current/ChangeLog +++ b/packages/devs/flash/arm/olpcx2294/current/ChangeLog @@ -1,3 +1,7 @@ +2010-11-24 Sergei Gavrikov + + * cdl/flash_olpcx2294.cdl: Add support for Olimex LPC-L2294-8M board. + 2008-08-31 Sergei Gavrikov * Flash driver for LPC-E2294, LPC-H2294, LPC-L2294-1M boards diff --git a/packages/devs/flash/arm/olpcx2294/current/cdl/flash_olpcx2294.cdl b/packages/devs/flash/arm/olpcx2294/current/cdl/flash_olpcx2294.cdl --- a/packages/devs/flash/arm/olpcx2294/current/cdl/flash_olpcx2294.cdl +++ b/packages/devs/flash/arm/olpcx2294/current/cdl/flash_olpcx2294.cdl @@ -67,16 +67,14 @@ cdl_package CYGPKG_DEVS_FLASH_ARM_OLPCX2 cdl_option CYGSEM_DEVS_FLASH_INTEL_28F320C3_PARTS { display "Intel 28F320C3 parts used" flavor bool - calculated 1 - active_if (CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 || \ - CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294) + calculated { CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 || CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294 || (CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_VARIANT == "OLPCL2294_8M") } requires CYGHWR_DEVS_FLASH_INTEL_28F320C3 } cdl_option CYGSEM_DEVS_FLASH_INTEL_28F160C3_PARTS { display "Intel 28F160C3 parts used" flavor bool - calculated 1 + calculated { (CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_VARIANT == "OLPCL2294_1M") } active_if CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 requires CYGHWR_DEVS_FLASH_INTEL_28F160C3B } diff --git a/packages/devs/flash/arm/olpcx2294v2/current/ChangeLog b/packages/devs/flash/arm/olpcx2294v2/current/ChangeLog --- a/packages/devs/flash/arm/olpcx2294v2/current/ChangeLog +++ b/packages/devs/flash/arm/olpcx2294v2/current/ChangeLog @@ -1,3 +1,7 @@ +2010-11-03 JF Argentino + + * src/arm_olpcx2294_flash.c: Add support for LPC-L2294-8M board. + 2008-11-22 Sergei Gavrikov * Flash driver v2 for LPC-E2294, LPC-H2294, LPC-L2294-1M boards diff --git a/packages/devs/flash/arm/olpcx2294v2/current/src/arm_olpcx2294_flash.c b/packages/devs/flash/arm/olpcx2294v2/current/src/arm_olpcx2294_flash.c --- a/packages/devs/flash/arm/olpcx2294v2/current/src/arm_olpcx2294_flash.c +++ b/packages/devs/flash/arm/olpcx2294v2/current/src/arm_olpcx2294_flash.c @@ -64,7 +64,8 @@ // Olimex LPC-E2294 development board and Olimex LPC-H2294 header board both // have 28F320C3-B flash memory part, Olimex LPC-L2294-1M development board has -// 28F160C3-B flash memory part. All boards have 16-bit access to it's flash +// 28F160C3-B flash memory part and Olimex LPC-L2294-8M development board has +// 28F320C3-B flash memory part. All boards have 16-bit access to it's flash // devices. static const CYG_FLASH_FUNS(hal_olpcx2294_flash_strata_funs, &cyg_strata_init_check_devid_16, @@ -77,14 +78,14 @@ static const CYG_FLASH_FUNS(hal_olpcx229 static const cyg_strata_dev hal_olpcx2294_flash_priv = { .manufacturer_code = CYG_FLASH_STRATA_MANUFACTURER_INTEL, -#ifdef CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 +#if defined(CYGHWR_OLIMEX_BOARD_OLPCL2294_1M) .device_code = 0x88c3, /* 16-Mbit x 16-B, 28F160C3-B */ #else .device_code = 0x88c5, /* 32-Mbit x 16-B, 28F320C3-B */ #endif .bufsize = 1, .block_info = { -#ifdef CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 +#if defined(CYGHWR_OLIMEX_BOARD_OLPCL2294_1M) { 0x00002000, 8 },/* boot bottom 8 x 8K blocks */ { 0x00010000, 31 } /* 31 x 64K blocks */ #else @@ -94,19 +95,27 @@ static const cyg_strata_dev hal_olpcx229 } }; +#if defined(CYGHWR_OLIMEX_BOARD_OLPCL2294_1M) CYG_FLASH_DRIVER(hal_olpcx2294_flash, &hal_olpcx2294_flash_strata_funs, 0, 0x80000000, -#ifdef CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 0x801fffff, -#else - 0x803fffff, -#endif 2, hal_olpcx2294_flash_priv.block_info, &hal_olpcx2294_flash_priv ); +#else +CYG_FLASH_DRIVER(hal_olpcx2294_flash, + &hal_olpcx2294_flash_strata_funs, + 0, + 0x80000000, + 0x803fffff, + 2, + hal_olpcx2294_flash_priv.block_info, + &hal_olpcx2294_flash_priv +); +#endif #endif//CYGPKG_DEVS_FLASH_STRATA_V2 // ------------------------------------------------------------------------ diff --git a/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/ChangeLog b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/ChangeLog @@ -0,0 +1,31 @@ + +2011-04-13 Christophe Coutand + + * cdl/flash_a2f200_eval.cdl: + * src/flash_a2f200_eval.c: + New package - Flash support for Actel Smartfusion evaluation board. + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/cdl/flash_a2f200_eval.cdl b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/cdl/flash_a2f200_eval.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/cdl/flash_a2f200_eval.cdl @@ -0,0 +1,62 @@ +# ==================================================================== +# +# flash_a2f200_eval.cdl +# +# Flash programming for Atmel device on Actel SmartFusion Board +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Date: 2011-05-05 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_CORTEXM_A2F200_EVAL { + display "Actel SmartFusion board FLASH memory support" + description "FLASH memory device support for Actel SmartFusion board" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + requires CYGPKG_HAL_CORTEXM_A2FXXX + requires CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1 + implements CYGHWR_DEVS_FLASH_SPI_AT25DFXXX_DEVICE + + compile -library=libextras.a flash_a2f200_eval.c +} + +# EOF flash_a2f200_eval.cdl diff --git a/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/src/flash_a2f200_eval.c b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/src/flash_a2f200_eval.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/cortexm/a2fxxx/a2f200_eval/current/src/flash_a2f200_eval.c @@ -0,0 +1,78 @@ +//========================================================================== +// +// flash_a2f200_eval.c +// +// Flash programming for Atmel device on Actel SmartFusion Board +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-05-05 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// ------------------------------------------------------------------------ +// There is an AT25DF161 DataFlash on the SPI bus + +#include +#include + +#if defined(CYGPKG_IO_SPI) && defined(CYGPKG_DEVS_FLASH_SPI_AT25DFXXX) + +#include +#include +#include + +// Declare Device on SPI bus 1, Use GPIO 19 for chip select, Motorola protocol (mode 0) +CYG_DEVS_SPI_CORTEXM_A2FXXX_DEVICE ( + at25dfxxx_spi_device, 1, 19, true, A2FXXX_SPI_MOTOROLA, 0, 0, 5000000, 1, 1, 1 +); + +//----------------------------------------------------------------------------- +// Instantiate the AT25DFxxx device driver. + +CYG_DEVS_FLASH_SPI_AT25DFXXX_DRIVER ( + at25dfxxx_flash_device, CYGNUM_DEVS_FLASH_SPI_AT25XXX_DEV0_MAP_ADDR, &at25dfxxx_spi_device +); + +#endif + +// ------------------------------------------------------------------------ +// EOF flash_a2f200_eval.c diff --git a/packages/devs/flash/cortexm/stm32/current/ChangeLog b/packages/devs/flash/cortexm/stm32/current/ChangeLog --- a/packages/devs/flash/cortexm/stm32/current/ChangeLog +++ b/packages/devs/flash/cortexm/stm32/current/ChangeLog @@ -1,3 +1,33 @@ +2012-03-15 James Smith + + * src/stm32_flash.c: Add support for F4 family devices, and + explicit flash size support for specific F4xxx[EG] devices. + + * include/stm32_flash.h: + * cdl/flash_stm32.cdl (CYGNUM_DEVS_FLASH_STM32_PARALLELISM): + Support for F4 devices. + +2012-02-29 James Smith + + * src/stm32_flash.c (stm32_flash_hw_program): Compilation fixes to + use renamed WAIT_FOR_FLASH_NOT_BUSY macro and to add missing + semi-colon + +2011-12-15 Jonathan Larmour + + * cdl/flash_stm32.cdl (CYGNUM_DEVS_FLASH_STM32_PARALLELISM): New + option. Configures program/erase width on F2 processors. + * include/stm32_flash.h: Make private device driver data const - it + doesn't change so shouldn't be in RAM. Support multiple flash regions + for F2. + * src/stm32_flash.c: Substantial changes to support F2 processors. + Also improve error checking, timeout detection and general robustness. + +2009-07-03 Nick Garnett + + * src/stm32_flash.c (stm32_flash_init): Add tests for connectivity + line devices. + 2009-04-06 Simon Kallweit * src/stm32_flash.c: @@ -27,7 +57,7 @@ 2008-10-07 Nick Garnett +#include +#include +#include + +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +# define STM32_FLASH_MAXBLOCKINFOS 1 +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +# define STM32_FLASH_MAXBLOCKINFOS 3 +#endif + // The driver-specific data, pointed at by the priv field in a // a cyg_flash_dev structure. typedef struct cyg_stm32_dev { - cyg_flash_block_info_t block_info[1]; - + cyg_flash_block_info_t block_info[STM32_FLASH_MAXBLOCKINFOS]; } cyg_stm32_flash_dev; +// The instantiation of that data. +__externC const cyg_stm32_flash_dev hal_stm32_flash_priv; + //========================================================================*/ // Exported function pointers. @@ -65,4 +78,4 @@ typedef struct cyg_stm32_dev //========================================================================*/ #endif // CYGONCE_DEVS_FLASH_STM32_H -// End +// End of stm32_flash.h diff --git a/packages/devs/flash/cortexm/stm32/current/src/stm32_flash.c b/packages/devs/flash/cortexm/stm32/current/src/stm32_flash.c --- a/packages/devs/flash/cortexm/stm32/current/src/stm32_flash.c +++ b/packages/devs/flash/cortexm/stm32/current/src/stm32_flash.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2011, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -68,9 +68,43 @@ #include CYGHWR_MEMORY_LAYOUT_H +// Does this look like an F1 or F2/F4 device? It makes a difference to sizing and operation. +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +# define F1STYLE 1 +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +# define F2STYLE 1 +#endif + +// ---------------------------------------------------------------------------- + +#if defined(F1STYLE) +typedef cyg_uint16 STM32_TYPE; +#elif defined(F2STYLE) +// F2/F4's alignment requirements depend on parallelism config, so we treat as +// bytes for now. +typedef cyg_uint8 STM32_TYPE; +#endif + // ---------------------------------------------------------------------------- -typedef cyg_uint16 STM32_TYPE; +// How many loops before we consider this a timeout. +#define STM32_FLASH_TIMEOUT 1000000 + +// A quick helper macro to avoid repetition. +#define WAIT_FOR_FLASH_NOT_BUSY(_timeout_) \ + CYG_MACRO_START \ + (_timeout_) = STM32_FLASH_TIMEOUT; \ + do { \ + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_SR, sr ); \ + } while( (sr & CYGHWR_HAL_STM32_FLASH_SR_BSY) && (_timeout_)-- > 0 ); \ + CYG_MACRO_END + +// ---------------------------------------------------------------------------- + +// Note that although the F2/F4 parts need special treatment for the Flash's +// built-in icache and dcache, that doesn't matter for suspend/resume +// because no-one should expect any part of the Flash in the area being +// erased/programmed to be any particular value. # define STM32_INTSCACHE_STATE int _saved_ints_ # define STM32_INTSCACHE_BEGIN() HAL_DISABLE_INTERRUPTS(_saved_ints_) @@ -85,8 +119,8 @@ typedef cyg_uint16 STM32_TYPE; static int stm32_enable_hsi(void); static void stm32_disable_hsi(void); -static int stm32_flash_hw_erase(cyg_flashaddr_t addr) __attribute__((section (".2ram.stm32_flash_hw_erase"))); -static int stm32_flash_hw_program( volatile STM32_TYPE* addr, const cyg_uint16* buf, cyg_uint32 count) __attribute__((section (".2ram.stm32_flash_hw_program"))); +static int stm32_flash_hw_erase(cyg_flashaddr_t addr, cyg_uint16 block_num) __attribute__((section (".2ram.stm32_flash_hw_erase"))); +static int stm32_flash_hw_program( volatile STM32_TYPE* addr, const STM32_TYPE *buf, cyg_uint32 count) __attribute__((section (".2ram.stm32_flash_hw_program"))); // ---------------------------------------------------------------------------- // Diagnostic routines. @@ -100,66 +134,203 @@ static int stm32_flash_hw_program( volat #endif // ---------------------------------------------------------------------------- +// Select Flash geometry + +#if defined(CYGHWR_HAL_CORTEXM_STM32_F103RC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103VC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103ZC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F105RC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F105RC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F105VC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F107VC) + + // High-density device with 256K flash (2K blocks) +#define STM32_FLASH_SIZE 0x40000 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F103RD) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103VD) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103ZD) + + // High-density device with 384K flash (2K blocks) +#define STM32_FLASH_SIZE 0x60000 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F103RE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F103ZE) + + // High-density device with 512K flash (2K blocks) +#define STM32_FLASH_SIZE 0x80000 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F205RB) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205VB) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205ZB) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207VB) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207ZB) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207IB) +// 128K +#define STM32_FLASH_SIZE (128*1024) +#define xxxSTM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 } } } // guesswork at present - documentation is elusive +#define STM32_FLASH_NUM_BLOCK_INFOS 2 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F205RC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205VC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205ZC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207VC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207ZC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207IC) +// 256K +#define STM32_FLASH_SIZE (256*1024) +#define xxxSTM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 }, { 128*1024, 1 } } } // guesswork at present - documentation is elusive +#define STM32_FLASH_NUM_BLOCK_INFOS 3 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F205RE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205ZE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207ZE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207IE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407IE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407ZE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417IE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417ZE) +// 512K +#define STM32_FLASH_SIZE (512*1024) +#define xxxSTM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 }, { 128*1024, 3 } } } // guesswork at present - documentation is elusive +#define STM32_FLASH_NUM_BLOCK_INFOS 3 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F205RF) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205VF) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205ZF) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207VF) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207ZF) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207IF) +// 768K +#define STM32_FLASH_SIZE (768*1024) +#define xxxSTM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 }, { 128*1024, 5 } } } // guesswork at present - documentation is elusive +#define STM32_FLASH_NUM_BLOCK_INFOS 3 + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_F205RG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205VG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F205ZG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207VG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207ZG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F207IG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F405RG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F405VG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F405ZG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407IG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407VG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F407ZG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417IG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417VG) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F417ZG) + +// 1024K +#define STM32_FLASH_SIZE (1024*1024) +#define STM32_FLASH_BLOCK_INFO { { { 16*1024, 4 } , { 64*1024, 1 }, { 128*1024, 7 } } } +#define STM32_FLASH_NUM_BLOCK_INFOS 3 + +#else +#error Unknown STM32 microprocessor variant. +#endif + +#ifdef F1STYLE +// Always 2K blocks +#define STM32_FLASH_BLOCK_SIZE 0x800 +#endif + +// If there's just one block size, it's straightforward. +#if defined(STM32_FLASH_BLOCK_SIZE) +const cyg_stm32_flash_dev hal_stm32_flash_priv = { { STM32_FLASH_BLOCK_SIZE, STM32_FLASH_SIZE / STM32_FLASH_BLOCK_SIZE } }; +#elif defined(STM32_FLASH_BLOCK_INFO) +const cyg_stm32_flash_dev hal_stm32_flash_priv = STM32_FLASH_BLOCK_INFO; +#else +# error Incomplete STM32 variant details. It needs filling in. +#endif + +// ---------------------------------------------------------------------------- + +#ifdef CYGNUM_DEVS_FLASH_STM32_PARALLELISM +# define CR_PSIZE_MAX CYGHWR_HAL_STM32_FLASH_CR_PSIZE(CYGNUM_DEVS_FLASH_STM32_PARALLELISM) +# define PARALLEL_BYTES (CYGNUM_DEVS_FLASH_STM32_PARALLELISM/8) +# define PARALLEL_ALIGN_MASK (PARALLEL_BYTES - 1) +#endif + +// ---------------------------------------------------------------------------- +// Translate our error values into eCos flash driver error values + +// Some little helper macros for this function to make it shorter/simpler +#define _SRBIT(_x_) CYGHWR_HAL_STM32_FLASH_SR_##_x_ +#define _FERR(_x_) CYG_FLASH_ERR_##_x_ +#define DECODE_SR_ERROR(_srbit_, _code_) if ( sr & _SRBIT(_srbit_) ) result = _FERR(_code_) + +static int +stm32_flash_decode_error( int sr ) +{ + int result = CYG_FLASH_ERR_OK; + + // -1 can never be a valid sr value so we use it to indicate a timeout + if ( -1 == sr ) + return CYG_FLASH_ERR_DRV_TIMEOUT; + +#if defined(F1STYLE) + DECODE_SR_ERROR( PGERR, PROGRAM ); + DECODE_SR_ERROR( WRPRTERR, PROTECT ); +#elif defined(F2STYLE) + // OPERR is probably unnecessary really, but just in case. + // Do it before others though so they can override with a better value. + DECODE_SR_ERROR( OPERR, HWR ); + DECODE_SR_ERROR( WRPERR, PROTECT ); + DECODE_SR_ERROR( PGAERR, INVALID ); + DECODE_SR_ERROR( PGPERR, PROTOCOL ); + DECODE_SR_ERROR( PGSERR, PROTOCOL ); +#endif + return result; +} + +static void stm32_flash_clear_sr_err(void) +{ + cyg_uint32 sr; +#if defined(F1STYLE) + sr = CYGHWR_HAL_STM32_FLASH_SR_PGERR | CYGHWR_HAL_STM32_FLASH_SR_WRPRTERR; +#elif defined(F2STYLE) + sr = CYGHWR_HAL_STM32_FLASH_SR_OPERR | + CYGHWR_HAL_STM32_FLASH_SR_WRPERR | + CYGHWR_HAL_STM32_FLASH_SR_PGAERR | + CYGHWR_HAL_STM32_FLASH_SR_PGPERR | + CYGHWR_HAL_STM32_FLASH_SR_PGSERR; +#endif + HAL_WRITE_UINT32( CYGHWR_HAL_STM32_FLASH + CYGHWR_HAL_STM32_FLASH_SR, sr ); +} + +// ---------------------------------------------------------------------------- // Initialize the flash. static int stm32_flash_init(struct cyg_flash_dev* dev) { - cyg_stm32_flash_dev *stm32_dev = (cyg_stm32_flash_dev *)dev->priv; - CYG_ADDRESS base = CYGHWR_HAL_STM32_FLASH; - cyg_uint32 flash_size, block_size = 0; - // Set up the block info entries. - dev->block_info = &stm32_dev->block_info[0]; - dev->num_block_infos = 1; + dev->block_info = &hal_stm32_flash_priv.block_info[0]; +#if defined(STM32_FLASH_NUM_BLOCK_INFOS) + dev->num_block_infos = STM32_FLASH_NUM_BLOCK_INFOS; +#else + dev->num_block_infos = sizeof(hal_stm32_flash_priv.block_info) / sizeof(hal_stm32_flash_priv.block_info[0]); +#endif // As stated in the errata sheet, the debug register can only be read in - // debug mode and is therfore not accessible by user software. + // debug mode and is therefore not accessible by user software. + + // Set end address + dev->end = dev->start + STM32_FLASH_SIZE - 1; -#if defined(CYGHWR_HAL_CORTEXM_STM32_F103RC) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103VC) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103ZC) - - // High-density device with 256K flash (2K blocks) - flash_size = 0x40000; - block_size = 0x800; - -#elif defined(CYGHWR_HAL_CORTEXM_STM32_F103RD) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103VD) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103ZD) - - // High-density device with 384K flash (2K blocks) - flash_size = 0x60000; - block_size = 0x800; - -#elif defined(CYGHWR_HAL_CORTEXM_STM32_F103RE) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103VE) || \ - defined(CYGHWR_HAL_CORTEXM_STM32_F103ZE) - - // High-density device with 512K flash (2K blocks) - flash_size = 0x80000; - block_size = 0x800; + stf_diag("block_size %d size %08x end %08x\n", dev->block_info[0].block_size, STM32_FLASH_SIZE, dev->end ); -#else - -#error Unknown STM32 microprocessor variant. - -#endif - - stm32_dev->block_info[0].blocks = flash_size/block_size; - stm32_dev->block_info[0].block_size = block_size; - - // Set end address - dev->end = dev->start+flash_size-1; - - stf_diag("block_size %d size %08x end %08x\n", block_size, flash_size, dev->end ); - - // Unlock the flash control registers - - HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY1 ); - HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY2 ); + // Ensure there's nothing hanging over from before us. + stm32_flash_clear_sr_err(); return CYG_FLASH_ERR_OK; } @@ -178,31 +349,46 @@ stm32_flash_query(struct cyg_flash_dev* // Get info about the current block, i.e. base and size. static void -stm32_flash_get_block_info(struct cyg_flash_dev* dev, const cyg_flashaddr_t addr, cyg_flashaddr_t* block_start, size_t* block_size) +stm32_flash_get_block_info(struct cyg_flash_dev* dev, const cyg_flashaddr_t addr, cyg_flashaddr_t* block_start, + size_t* block_size, cyg_uint16 *block_num) { size_t offset = addr - dev->start; + cyg_ucount8 i; + cyg_uint32 bi_size_passed = 0; + cyg_uint16 blocks_passed = 0; - *block_start = dev->start + (offset & ~(dev->block_info[0].block_size-1)); - *block_size = dev->block_info[0].block_size; + // This loop has the termination condition commented out to silence a + // warning. It should never be reached anyway, so that's fine, although + // that is checked with an assert. + + for ( i=0; /* i < dev->num_block_info */ ; i++ ) +{ + const cyg_flash_block_info_t *bi = &dev->block_info[i]; + cyg_uint32 bi_size = bi->blocks * bi->block_size; + + CYG_ASSERTC( i < dev->num_block_infos ); + + if ( offset < bi_size) + { + *block_start = dev->start + bi_size_passed + (offset & ~(bi->block_size-1)); + *block_size = bi->block_size; + while (offset >= bi->block_size) + { + offset -= bi->block_size; + blocks_passed++; +} + *block_num = blocks_passed; + break; + } + bi_size_passed += bi_size; + offset -= bi_size; + blocks_passed += bi->blocks; + } } // ---------------------------------------------------------------------------- static int -stm32_flash_decode_error( int sr ) -{ - int result = CYG_FLASH_ERR_OK; - - if( sr & CYGHWR_HAL_STM32_FLASH_SR_PGERR ) - result = CYG_FLASH_ERR_PROGRAM; - - if( sr & CYGHWR_HAL_STM32_FLASH_SR_WRPRTERR ) - result = CYG_FLASH_ERR_PROTECT; - - return result; -} - -static int stm32_enable_hsi(void) { CYG_ADDRESS rcc = CYGHWR_HAL_STM32_RCC; @@ -239,61 +425,191 @@ stm32_disable_hsi(void) // points at the start of the sector. static int -stm32_flash_hw_erase(cyg_flashaddr_t addr) +stm32_flash_hw_erase(cyg_flashaddr_t addr, cyg_uint16 block_num) { cyg_uint32 base = CYGHWR_HAL_STM32_FLASH; - cyg_uint32 sr, cr = 0; - cyg_uint32 timeout = 100000; + cyg_uint32 sr, cr; + cyg_uint32 timeout; - cr |= CYGHWR_HAL_STM32_FLASH_CR_PER; +#ifdef CYGDBG_USE_ASSERTS + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_SR, sr ); + CYG_ASSERT( 0 == (sr & CYGHWR_HAL_STM32_FLASH_SR_BSY), + "Flash busy at start of erase, but it shouldn't be" ); +#endif + + // Unlock the flash control registers + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY1 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY2 ); + +#if defined(F1STYLE) + cr = CYGHWR_HAL_STM32_FLASH_CR_PER; HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, cr ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_AR, addr ); + cr |= CYGHWR_HAL_STM32_FLASH_CR_STRT; +#elif defined(F2STYLE) + cr = CYGHWR_HAL_STM32_FLASH_CR_SER | + CR_PSIZE_MAX | + CYGHWR_HAL_STM32_FLASH_CR_SNB(block_num) | + CYGHWR_HAL_STM32_FLASH_CR_STRT; +#endif - HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_AR, addr ); - - cr |= CYGHWR_HAL_STM32_FLASH_CR_STRT; HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, cr ); - do + WAIT_FOR_FLASH_NOT_BUSY( timeout ); + + // Lock CR again (and clear other bits) + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, CYGHWR_HAL_STM32_FLASH_CR_LOCK ); + +#ifdef F2STYLE + // For F2 parts, we need to disable and reset the icache and dcache in the ACR. { - HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_SR, sr ); - } while( (sr & CYGHWR_HAL_STM32_FLASH_SR_BSY) && timeout-- > 0); + cyg_uint32 acr; - HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, 0 ); + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // disable + acr &= ~(CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // reset + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCRST|CYGHWR_HAL_STM32_FLASH_ACR_ICRST; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // re-enable + acr &= ~(CYGHWR_HAL_STM32_FLASH_ACR_DCRST|CYGHWR_HAL_STM32_FLASH_ACR_ICRST); + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + } +#endif + + if (0 == timeout) + return -1; return sr; } // ---------------------------------------------------------------------------- -// Write data to flash, using individual word writes. The destination -// address will be aligned in a way suitable for the bus. The source -// address need not be aligned. The count is in STM32_TYPE's, not in -// bytes. +// Write data to flash, using individual word writes on F1, or something more +// complicated on F2. On F1, the destination address will be aligned in a way suitable +// for the bus. The source address need not be aligned. The count is in STM32_TYPE's on +// F1, bytes on F2. static int -stm32_flash_hw_program( volatile STM32_TYPE* addr, const cyg_uint16* buf, cyg_uint32 count) +stm32_flash_hw_program( volatile STM32_TYPE* addr, const STM32_TYPE* buf, cyg_uint32 count) { cyg_uint32 base = CYGHWR_HAL_STM32_FLASH; cyg_uint32 sr = 0, cr = 0; + cyg_uint32 timeout = 1; // Have to set timeout to non-zero to avoid confusing tests later. +#ifdef CYGDBG_USE_ASSERTS + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_SR, sr ); + CYG_ASSERT( 0 == (sr & CYGHWR_HAL_STM32_FLASH_SR_BSY), + "Flash busy at start of program, but it shouldn't be" ); +#endif + + // Unlock the flash control registers + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY1 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_KEYR, CYGHWR_HAL_STM32_FLASH_KEYR_KEY2 ); + +#if defined(F1STYLE) cr |= CYGHWR_HAL_STM32_FLASH_CR_PG; HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, cr ); while( count-- ) { - cyg_uint32 timeout = 100000; - HAL_WRITE_UINT16( addr, *buf ); - addr++; buf++; - do - { - HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_SR, sr ); - } while( (sr & CYGHWR_HAL_STM32_FLASH_SR_BSY) && timeout-- > 0 ); + WAIT_FOR_FLASH_NOT_BUSY(timeout); + if ( 0 == timeout ) + break; } - HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, 0 ); + +#elif defined(F2STYLE) + // F2 is more complicated because the alignment depends on the parallelism. + // So we "simplify" by writing bytes until we've reached the desired alignment. + + { + CYG_ADDRESS addr_max = (CYG_ADDRESS)addr + PARALLEL_ALIGN_MASK; + addr_max &= ~PARALLEL_ALIGN_MASK; + + byte_write: + cr = CYGHWR_HAL_STM32_FLASH_CR_PG | CYGHWR_HAL_STM32_FLASH_CR_PSIZE_8; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, cr ); + + while (count && ((CYG_ADDRESS)addr < addr_max)) + { + HAL_WRITE_UINT8( addr, *buf ); + addr++; + buf++; + count--; + WAIT_FOR_FLASH_NOT_BUSY(timeout); + if (0 == timeout) + break; + } + + if ( count && timeout ) + { + // Now we should be aligned to the required parallelism boundary + // But we have to make sure we stop at an aligned addr too. + addr_max += count; + addr_max &= ~PARALLEL_ALIGN_MASK; + + cr = CYGHWR_HAL_STM32_FLASH_CR_PG | CR_PSIZE_MAX; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, cr ); + while ((CYG_ADDRESS)addr < addr_max) + { +#if (CYGNUM_DEVS_FLASH_STM32_PARALLELISM == 8) + HAL_WRITE_UINT8( addr, *buf ); +#elif (CYGNUM_DEVS_FLASH_STM32_PARALLELISM == 16) + cyg_uint16 wbuf = *(cyg_uint16*)buf; + HAL_WRITE_UINT16( addr, wbuf ); +#elif (CYGNUM_DEVS_FLASH_STM32_PARALLELISM == 32) + cyg_uint32 wbuf = *(cyg_uint32*)buf; + HAL_WRITE_UINT32( addr, wbuf ); +#elif (CYGNUM_DEVS_FLASH_STM32_PARALLELISM == 64) + cyg_uint64 wbuf = *(cyg_uint64*)buf; + HAL_WRITE_UINT64( addr, wbuf ); +#endif + addr += PARALLEL_BYTES; + buf += PARALLEL_BYTES; + count -= PARALLEL_BYTES; + WAIT_FOR_FLASH_NOT_BUSY(timeout); + if (0 == timeout) + break; + } // while + } // if + + if ( count && timeout ) + { + // Still have some bytes left to write. Take a shortcut with goto, to save code. + addr_max = (CYG_ADDRESS)addr+count; + goto byte_write; + } // if + } + + // For F2 parts, we need to disable and reset the icache and dcache in the ACR. + { + cyg_uint32 acr; + + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // disable + acr &= ~(CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // reset + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCRST|CYGHWR_HAL_STM32_FLASH_ACR_ICRST; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + // re-enable + acr &= ~(CYGHWR_HAL_STM32_FLASH_ACR_DCRST|CYGHWR_HAL_STM32_FLASH_ACR_ICRST); + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + } +#endif // elif defined(F2STYLE) + + // Lock CR again (and clear other bits) + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_CR, CYGHWR_HAL_STM32_FLASH_CR_LOCK ); + + if (0 == timeout) + return -1; return sr; } @@ -305,9 +621,10 @@ stm32_flash_hw_program( volatile STM32_T static int stm32_flash_erase(struct cyg_flash_dev* dev, cyg_flashaddr_t dest) { - int (*erase_fn)(cyg_uint32); + int (*erase_fn)(cyg_uint32, cyg_uint16); cyg_flashaddr_t block_start; size_t block_size; + cyg_uint16 block_num; int result; int hsi; STM32_INTSCACHE_STATE; @@ -316,18 +633,19 @@ stm32_flash_erase(struct cyg_flash_dev* CYG_CHECK_DATA_PTR(dev, "valid flash device pointer required"); CYG_ASSERT((dest >= dev->start) && (dest <= dev->end), "flash address out of device range"); - stm32_flash_get_block_info(dev, dest, &block_start, &block_size); + stm32_flash_get_block_info(dev, dest, &block_start, &block_size, &block_num); stf_diag("block_start %p block_size %d\n", (void *) block_start, block_size); CYG_ASSERT(dest == block_start, "erase address should be the start of a flash block"); - erase_fn = (int (*)(cyg_uint32)) cyg_flash_anonymizer( & stm32_flash_hw_erase ); + erase_fn = (int (*)(cyg_uint32, cyg_uint16)) cyg_flash_anonymizer( & stm32_flash_hw_erase ); hsi = stm32_enable_hsi(); STM32_INTSCACHE_BEGIN(); - result = (*erase_fn)(block_start); + result = (*erase_fn)(block_start, block_num); result = stm32_flash_decode_error( result ); + stm32_flash_clear_sr_err(); STM32_INTSCACHE_END(); @@ -345,9 +663,9 @@ stm32_flash_erase(struct cyg_flash_dev* int stm32_flash_program(struct cyg_flash_dev* dev, cyg_flashaddr_t dest, const void* src, size_t len) { - int (*program_fn)(volatile STM32_TYPE*, const cyg_uint16*, cyg_uint32); + int (*program_fn)(volatile STM32_TYPE*, const STM32_TYPE*, cyg_uint32); volatile STM32_TYPE* uncached; - const cyg_uint16* data; + const STM32_TYPE* data; size_t to_write; int result = CYG_FLASH_ERR_OK; int hsi; @@ -358,15 +676,17 @@ stm32_flash_program(struct cyg_flash_dev CYG_CHECK_DATA_PTR(dev, "valid flash device pointer required"); CYG_ASSERT((dest >= dev->start) && ((CYG_ADDRESS)dest <= dev->end), "flash address out of device range"); +#ifdef F1STYLE // Source and destination must be 16-bit aligned. if( (0 != ((CYG_ADDRESS)dest & 1)) || (0 != ((CYG_ADDRESS)src & 1)) ) return CYG_FLASH_ERR_INVALID; +#endif uncached = STM32_UNCACHED_ADDRESS(dest); - data = (const cyg_uint16*) src; - to_write = len / sizeof(STM32_TYPE); // Number of words, not bytes - program_fn = (int (*)(volatile STM32_TYPE*, const cyg_uint16*, cyg_uint32)) cyg_flash_anonymizer( & stm32_flash_hw_program ); + data = (const STM32_TYPE*) src; + to_write = len / sizeof(STM32_TYPE); // For F1: Number of words, not bytes. For F2: STM32_TYPE is a byte. + program_fn = (int (*)(volatile STM32_TYPE*, const STM32_TYPE*, cyg_uint32)) cyg_flash_anonymizer( & stm32_flash_hw_program ); hsi = stm32_enable_hsi(); @@ -393,6 +713,7 @@ stm32_flash_program(struct cyg_flash_dev STM32_INTSCACHE_RESUME(); } } + stm32_flash_clear_sr_err(); STM32_INTSCACHE_END(); if (hsi) diff --git a/packages/devs/flash/freescale/dspi/sst25xx/current/ChangeLog b/packages/devs/flash/freescale/dspi/sst25xx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/dspi/sst25xx/current/ChangeLog @@ -0,0 +1,35 @@ +2013-06-01 Ilija Kocho + + * src/sst25_freescale_dspi.c: + Fix double-baud rate define. Bug spotted and patch provided by Mike Jones. + [ Bugzilla 1001855 ] + +2012-01-06 Ilija Kocho + + * cdl/flash_sst25xx_freescale_dspi.cdl + * src/sst25_freescale_dspi.c: + New package -- Disk driver for Freescale DSPI [Bugzilla 1001450] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012, 2013 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/freescale/dspi/sst25xx/current/cdl/flash_sst25xx_freescale_dspi.cdl b/packages/devs/flash/freescale/dspi/sst25xx/current/cdl/flash_sst25xx_freescale_dspi.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/dspi/sst25xx/current/cdl/flash_sst25xx_freescale_dspi.cdl @@ -0,0 +1,100 @@ +##========================================================================== +## +## flash_sst25xx_freescale_dspi.cdl +## +## SST25XX FLASH instatntiation for Freescale DSPI +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-12-27 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_DEVS_FLASH_SST25XX_FREESCALE_DSPI { + display "Driver for SST25XX flash over Freescale DSPI" + parent CYGPKG_DEVS_FLASH_SPI_SST25XX + + cdl_component CYGHWR_DEVS_FLASH_SPI_SST25XX_DEV0 { + display "Use SST25XX flash device 0" + flavor bool + default_value 0 + no_define + + requires CYGPKG_DEVS_FLASH_SPI_SST25XX + requires CYGPKG_DEVS_SPI_FREESCALE_DSPI + implements CYGHWR_DEVS_FLASH_SPI_SST25XX_DEVICE + + requires CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_BUS + requires CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_CS + requires CYGNUM_DEVS_FLASH_SPI_SST25XX_DEV0_MAP_ADDR + + compile -library=libextras.a sst25xx_freescale_dspi.c + + cdl_component CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPEED { + display "Nominal clock speed Hz" + flavor data + default_value 25000000 + + cdl_option CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_USE_DBR { + display "Use double baud rate" + flavor bool + default_value 0 + description " + Double baud rate is a feature of Freescale DSPI + that may provide higher baud rates but duty the cycle may be + different than 50/50 depdent on scaler/prescaler setting + for achieved baud rate." + } + } + + cdl_option CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY { + display "Nominal chip select delays (units)" + flavor data + legal_values { 1 10 } + default_value 1 + } + + cdl_option CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY_UN { + display "Chip select delay unit (ns)" + flavor data + default_value 100 + legal_values { 100 1000 } + } + } +} diff --git a/packages/devs/flash/freescale/dspi/sst25xx/current/src/sst25xx_freescale_dspi.c b/packages/devs/flash/freescale/dspi/sst25xx/current/src/sst25xx_freescale_dspi.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/dspi/sst25xx/current/src/sst25xx_freescale_dspi.c @@ -0,0 +1,99 @@ +//========================================================================== +// +// sst25xx_freescale_dspi.c +// +// SST25XX FLASH device over Freescale DSPI +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-12-14 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +#include +#if defined(CYGPKG_IO_SPI) && defined(CYGPKG_DEVS_FLASH_SPI_SST25XX) +// ------------------------------------------------------------------------ +// There is an SST25XX serial flash on the SPI bus +//#include +#include +#include +#include +#include + +// SPI bus device configuration +#define SST25XX_SPI_FRAME_SIZE 8 +#define SST25XX_SPI_CLOCK_POL 0 +#define SST25XX_SPI_CLOCK_PHASE 0 + +#ifdef CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_USE_DBR +# define SST25XX_SPI_DBR_DEV0 1 +#else +# define SST25XX_SPI_DBR_DEV0 0 +#endif + +// Underlaying Freescale DSPI device +CYG_DEVS_SPI_FREESCALE_DSPI_DEVICE( + sst25xx_spi_dev0, // Device name + CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_BUS, // SPI bus + CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_CS, // Dev num (CS) + SST25XX_SPI_FRAME_SIZE, // Frame size + SST25XX_SPI_CLOCK_POL, // Clock pol + SST25XX_SPI_CLOCK_PHASE, // Clock phase + CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPEED, // Clock speed (Hz) + CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY, // CS assert delay + CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY, // CS negate delay + CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY, // Delay between transfers + CYGHWR_DEVS_FLASH_SST25XX_DEV0_CS_DLY_UN,// Delay unit (100 or 1000 ns) + SST25XX_SPI_DBR_DEV0 // Use double baud rate +); + +//----------------------------------------------------------------------------- +// Instantiate the SST25xx device driver. + +CYG_DEVS_FLASH_SPI_SST25XX_DRIVER(sst25xx_flash_dev0, + CYGNUM_DEVS_FLASH_SPI_SST25XX_DEV0_MAP_ADDR, + &sst25xx_spi_dev0); + +#endif // defined(CYGPKG_IO_SPI) && defined(CYGPKG_DEVS_FLASH_SPI_SST25XX) + +//========================================================================== +// EOF sst25xx_freescale_dspi.c diff --git a/packages/devs/flash/freescale/kinetis/current/ChangeLog b/packages/devs/flash/freescale/kinetis/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/kinetis/current/ChangeLog @@ -0,0 +1,30 @@ +2012-04-26 Nicolas Aujoux + + * cdl/kinetis_flash.cdl + * include/kinetis_flash.h + * src/kinetis_flash.c + New package : Freescale Kinetis flash driver. [Bugzilla 1001561] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/freescale/kinetis/current/cdl/kinetis_flash.cdl b/packages/devs/flash/freescale/kinetis/current/cdl/kinetis_flash.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/kinetis/current/cdl/kinetis_flash.cdl @@ -0,0 +1,104 @@ +## ==================================================================== +## +## kinetis_flash.cdl +## +## FLASH memory - Hardware support for kinetis on-chip flash +## +## ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +## ==================================================================== +######DESCRIPTIONBEGIN#### +## +## Author(s): Nicolas Aujoux +## Date: 2012-03-19 +## +#####DESCRIPTIONEND#### +## +## ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_KINETIS { + display "Kinetis FLASH memory support" + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + implements CYGHWR_IO_FLASH_DEVICE + + include_dir cyg/io + + description " + Flash memory support for kinetis" + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_FLASH { + display "Use Kinetis Flash driver" + flavor bool + default_value 1 + + compile -library=libextras.a kinetis_flash.c + + cdl_option CYGNUM_DEVS_KINETIS_FLASH_LOGIC_ERROR_BUG { + display "Disable cache aliasing and speculation logic" + flavor bool + default_value { 1 } + description " + There is a logical error which prevent from accessing flash + properly if cache or prefetch options are enable in the Flash + Memory Controler register. + The prefetch option is not supported on program flash only or + program flash only with swap feature devices. + The cache aliasing is not supported on 512 KB and 384 KB + program flash. This option disables this two features." + } + + cdl_option CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE { + display "Block size" + flavor data + legal_values { 0 0x800 0x1000 } + default_value 0x800 + description " + Size of a flash block (called sector in freescale datasheets) : + 0x800 (2KB for k60 with 100M clock and ?) + 0x1000 (4KB for k60 with 120M and 150M clock and ?)" + } + + cdl_option CYGNUM_DEVS_KINETIS_FLASH_LONGWORD_SIZE { + display "Longword/phrase size" + flavor data + legal_values { 4 8 } + default_value 4 + description " + Size of a flash writing word, called LONGWORD (4 bytes) + or PHRASE (8 bytes) freescale datasheets." + } + } +} + +# End of kinetis_flash.cdl diff --git a/packages/devs/flash/freescale/kinetis/current/include/kinetis_flash.h b/packages/devs/flash/freescale/kinetis/current/include/kinetis_flash.h new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/kinetis/current/include/kinetis_flash.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_DEVS_FLASH_KINETIS_H +#define CYGONCE_DEVS_FLASH_KINETIS_H + +//========================================================================== +// +// kinetis_flash.h +// +// kinetis internal flash driver definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Nicolas Aujoux +// Date: 2012-03-19 +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +// Required data structures. +#include + + +// The driver-specific data, pointed at by the priv field in a +// a cyg_flash_dev structure. + +typedef struct cyg_kinetis_dev +{ +} cyg_kinetis_flash_dev; + +#endif //CYGONCE_DEVS_FLASH_KINETIS_H diff --git a/packages/devs/flash/freescale/kinetis/current/src/kinetis_flash.c b/packages/devs/flash/freescale/kinetis/current/src/kinetis_flash.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/freescale/kinetis/current/src/kinetis_flash.c @@ -0,0 +1,395 @@ +//================================================================= +// +// kinetis_flash.c +// +// kinetis internal flash driver +// +//================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Nicolas Aujoux +// Date: 2012-03-19 +// +//####DESCRIPTIONEND#### + + +#include +#include + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +// Include memory access routines +#include + +// For tests +#include + +#include + +#include CYGHWR_MEMORY_LAYOUT_H + +#define LONGWORD_SIZE (CYGNUM_DEVS_KINETIS_FLASH_LONGWORD_SIZE) + +// Flash command parameters +#define FLASH_ERASE_BLOCK 0x08 +#define FLASH_ERASE_ALL_BLOCKS 0X44 +#define FLASH_ERASE_SECTOR 0x09 +#define FLASH_PROGRAM_LONGWORD 0x06 +#define FLASH_PROGRAM_PHRASE 0x07 + +cyg_uint32 defaultRegisterPFB0CR, defaultRegisterPFB1CR; + +static int __attribute__((__long_call__)) flash_command_sequence(void) + __attribute__((section(".2ram.flashing"))); + +static void __attribute__((__long_call__)) enable_flash_acceleration (void) + __attribute__((section(".2ram.flashing"))); +static void __attribute__((__long_call__)) disable_flash_acceleration (void) + __attribute__((section(".2ram.flashing"))); + +static void __attribute__((__long_call__)) cache_on(cyg_uint32 *cachestate) __attribute__((section(".2ram.flashing"))); +static void __attribute__((__long_call__)) cache_off(cyg_uint32 *cachestate) __attribute__((section(".2ram.flashing"))); + +// =================================================================== +// Flash API functions +// =================================================================== + +static int kinetis_flash_init (struct cyg_flash_dev* dev) +{ + HAL_READ_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB0CR, defaultRegisterPFB0CR); + HAL_READ_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB1CR, defaultRegisterPFB1CR); + + // SIM_SCGC6: FTFL=1 + CYGHWR_HAL_KINETIS_SIM_P->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_M; + + return CYG_FLASH_ERR_OK; +} + +static size_t kinetis_flash_query (struct cyg_flash_dev* dev, + void* data, size_t len) +{ + static const char query[] = "Kinetis Flash"; + if (sizeof(query) < len) + len = sizeof(query); + memcpy( data, query, len); + return sizeof(query); +} + +static int kinetis_flash_erase_sector (struct cyg_flash_dev* dev, + cyg_flashaddr_t block_base) +{ + cyg_uint32 cachestate; + cyghwr_hal_kinetis_flash_t* flashRegister = CYGHWR_HAL_KINETIS_FLASH_P; + int returnValue = CYG_FLASH_ERR_OK; + + // Check if the block_base is sector aligned + if((block_base % CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE) != 0) + return CYG_FLASH_ERR_INVALID; + + // Check for valid range of the address + if(block_base < dev->start || (block_base + + CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE - 1) > dev->end) + return CYG_FLASH_ERR_INVALID; + + cache_off(&cachestate); + + // Create parameters to erase a flash sector + flashRegister->fccob0 = FLASH_ERASE_SECTOR; + flashRegister->fccob1 = (cyg_uint8)(block_base >> 16); + flashRegister->fccob2 = (cyg_uint8)((block_base >> 8) & 0xFF); + flashRegister->fccob3 = (cyg_uint8)(block_base & 0xFF); + returnValue = flash_command_sequence(); + + cache_on(&cachestate); + + return returnValue; +} + +static int kinetis_flash_program (struct cyg_flash_dev* dev, + cyg_flashaddr_t _base, + const void* _data, + size_t _len) +{ + cyghwr_hal_kinetis_flash_t* flashRegister = CYGHWR_HAL_KINETIS_FLASH_P; + cyg_uint32 endAddress; + int returnValue = CYG_FLASH_ERR_OK; + cyg_flashaddr_t base = _base; + const cyg_uint32* data = _data; + size_t len = _len; + cyg_uint32 currentData; + cyg_uint8 fccob0; + cyg_uint32 cachestate; + + endAddress = base + len; + + // Base and data have to be 16-bit aligned + if( (((CYG_ADDRESS)base & 1) != 0) || (((CYG_ADDRESS)data & 1) != 0)) + return CYG_FLASH_ERR_INVALID; + + // Check for valid range of the addresse + if((base < dev->start) || ((endAddress - 1) > dev->end)) + return CYG_FLASH_ERR_INVALID; + + cache_off(&cachestate); + + while(len > 0) + { + flashRegister->fccob0 = fccob0 = (4 == LONGWORD_SIZE) ? + FLASH_PROGRAM_LONGWORD : + FLASH_PROGRAM_PHRASE; + flashRegister->fccob1 = (cyg_uint8)((base >> 16) & 0xFF); + flashRegister->fccob2 = (cyg_uint8)((base >> 8) & 0xFF); + flashRegister->fccob3 = (cyg_uint8)(base & 0xFF); + + currentData = *data++; + flashRegister->fccob4 = (cyg_uint8)((currentData >> 24) & 0xFF); + flashRegister->fccob5 = (cyg_uint8)((currentData >> 16) & 0xFF); + flashRegister->fccob6 = (cyg_uint8)((currentData >> 8) & 0xFF); + flashRegister->fccob7 = (cyg_uint8)((currentData) & 0xFF); + + if(FLASH_PROGRAM_PHRASE == fccob0) + { + currentData = *data++; + flashRegister->fccob8 = (cyg_uint8)((currentData >> 24) & 0xFF); + flashRegister->fccob9 = (cyg_uint8)((currentData >> 16) & 0xFF); + flashRegister->fccobA = (cyg_uint8)((currentData >> 8) & 0xFF); + flashRegister->fccobB = (cyg_uint8)((currentData) & 0xFF); + } + + returnValue = flash_command_sequence(); + if(returnValue != CYG_FLASH_ERR_OK) + { + break; + } + else + { + // Compute the next destination address + base += LONGWORD_SIZE; + + // Compute size for the next command + len -= LONGWORD_SIZE; + } + } + + cache_on(&cachestate); + + return returnValue; +} + +static int __attribute__((__long_call__)) flash_command_sequence(void) +{ + cyghwr_hal_kinetis_flash_t* flashRegister = CYGHWR_HAL_KINETIS_FLASH_P; + cyg_uint8 registerValue; + int returnValue; + + while((flashRegister->fstat & CYGHWR_HAL_KINETIS_FLASH_FSTAT_CCIF_M) + == false) + { + // We wait for the end of the previous command ->CCIF bit=0 when finished + } + + // clear RDCOLERR & ACCERR & FPVIOL flag in flash status register + flashRegister->fstat = (CYGHWR_HAL_KINETIS_FLASH_FSTAT_RDCOLERR_M | + CYGHWR_HAL_KINETIS_FLASH_FSTAT_ACCERR_M | + CYGHWR_HAL_KINETIS_FLASH_FSTAT_FPVIOL_M); + + // Load FFCOB registers with command and paramaters for flash operations + // We clear the CCIF bit to start the command + HAL_REORDER_BARRIER(); + flashRegister->fstat = CYGHWR_HAL_KINETIS_FLASH_FSTAT_CCIF_M; + + // We wait the end of the process + while((flashRegister->fstat & CYGHWR_HAL_KINETIS_FLASH_FSTAT_CCIF_M) + == false){} + + // Check if any error happened + // First we read the flash status register + registerValue = flashRegister->fstat; + + // Access error + if((registerValue & CYGHWR_HAL_KINETIS_FLASH_FSTAT_ACCERR_M) != 0) + returnValue = CYG_FLASH_ERR_PROGRAM; + // Protection error + else if((registerValue & CYGHWR_HAL_KINETIS_FLASH_FSTAT_FPVIOL_M) != 0) + returnValue = CYG_FLASH_ERR_PROTECT; + // MGSTAT0 non-correctable error + else if ((registerValue & CYGHWR_HAL_KINETIS_FLASH_FSTAT_MGSTAT0_M) != 0) + returnValue = CYG_FLASH_ERR_PROTOCOL; + // No error detected + else + returnValue = CYG_FLASH_ERR_OK; + + return returnValue; +} + +#if 0 + +static void kinetis_flash_read(struct cyg_flash_dev *dev, + const cyg_flashaddr_t base, + void *data, + size_t len) +{ + memcpy(data, (void*)base, len); +} + +# define KINETIS_FLASH_READ + +#endif + +// =================================================================== +// Flash accelerator and cache control functions +// =================================================================== + + +static void __attribute__((__long_call__)) enable_flash_acceleration () +{ + HAL_WRITE_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB0CR, defaultRegisterPFB0CR); + HAL_WRITE_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB1CR, defaultRegisterPFB1CR); + __asm__ volatile( "dsb" ); + __asm__ volatile( "isb" ); +} + +static void __attribute__((__long_call__)) disable_flash_acceleration () +{ + cyg_uint32 registerValue; + + // Flash Bank 0 register + HAL_READ_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB0CR, registerValue); + // We disable data and instruction prefetch + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BIPE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BDPE; + // We disable data and instruction cache and single entry buffer + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BSEBE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BICE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BDCE; + HAL_WRITE_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB0CR, registerValue); + __asm__ volatile( "dsb" ); + __asm__ volatile( "isb" ); + + // Flash Bank 1 register + HAL_READ_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB1CR, registerValue); + // We disable data and instruction prefetch + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BIPE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BDPE; + // We disable data and instruction cache and single entry buffer + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BSEBE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BICE; + registerValue &= ~CYGHWR_HAL_KINETIS_FMC_PFBCR_BDCE; + HAL_WRITE_UINT32(CYGHWR_HAL_KINETIS_FMC_PFB1CR, registerValue); + __asm__ volatile( "dsb" ); + __asm__ volatile( "isb" ); +} + +static void __attribute__((__long_call__)) +cache_off( cyg_uint32 *cachestate ) { + cyg_uint32 intstate, dcachestate, icachestate; + + HAL_DISABLE_INTERRUPTS(intstate); + HAL_DCACHE_IS_ENABLED(dcachestate); + HAL_ICACHE_IS_ENABLED(icachestate); + *cachestate = (dcachestate ? 1 : 0) | (icachestate ? 2 : 0); + if (dcachestate) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + if (icachestate) { + HAL_ICACHE_DISABLE(); + } +#ifdef CYGNUM_DEVS_KINETIS_FLASH_LOGIC_ERROR_BUG + disable_flash_acceleration(); +#endif + HAL_RESTORE_INTERRUPTS(intstate); +} + +static void __attribute__((__long_call__)) +cache_on( cyg_uint32 *cachestate ) { +#ifdef CYGNUM_DEVS_KINETIS_FLASH_LOGIC_ERROR_BUG + enable_flash_acceleration(); +#endif + if (*cachestate & 1) + HAL_DCACHE_ENABLE(); + if (*cachestate & 2) + HAL_ICACHE_ENABLE(); +} + +// =================================================================== +// Function table +// =================================================================== + +const CYG_FLASH_FUNS ( + cyg_kinetis_flash_funs, + &kinetis_flash_init, + &kinetis_flash_query, + &kinetis_flash_erase_sector, + &kinetis_flash_program, +#ifdef KINETIS_FLASH_READ + &kinetis_flash_read, +#else + NULL, +#endif + cyg_flash_devfn_lock_nop, + cyg_flash_devfn_unlock_nop); + +// Add the flash driver to the HAL TABLE cyg_flashdev + +cyg_kinetis_flash_dev hal_kinetis_flash_priv; +static const cyg_flash_block_info_t cyg_flash_kinetis_block_info[1] = {{ + CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE, + (CYGMEM_REGION_flash_SIZE) / CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE }}; + +CYG_FLASH_DRIVER(hal_kinetis_flash, + &cyg_kinetis_flash_funs, + 0, + CYGMEM_REGION_flash, + (CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1), + 1, //number of block info + cyg_flash_kinetis_block_info, + &hal_kinetis_flash_priv); + +// ---------------------------------------------------------------------------- +// End of kinetis_flash.c diff --git a/packages/devs/flash/intel/stratav2/current/ChangeLog b/packages/devs/flash/intel/stratav2/current/ChangeLog --- a/packages/devs/flash/intel/stratav2/current/ChangeLog +++ b/packages/devs/flash/intel/stratav2/current/ChangeLog @@ -1,3 +1,9 @@ +2012-03-21 Sergei Gavrikov + Jonathan Larmour + + * src/strata_aux.c (strata_hw_cfi): Fix compiler warnings that + variable is set but not used. [ Bugzilla 1001541 ] + 2009-04-21 Bart Veer * src/strata.c: Added set of parentheses around macro parameters diff --git a/packages/devs/flash/intel/stratav2/current/src/strata_aux.c b/packages/devs/flash/intel/stratav2/current/src/strata_aux.c --- a/packages/devs/flash/intel/stratav2/current/src/strata_aux.c +++ b/packages/devs/flash/intel/stratav2/current/src/strata_aux.c @@ -163,7 +163,7 @@ STRATA_FNNAME(strata_hw_cfi)(struct cyg_ int dev_size; int i; int erase_regions; - cyg_uint8 writebuffer_lsb, writebuffer_msb; + cyg_uint8 writebuffer_lsb; cyg_uint32 writebuffer; sf_diag("addr %08x %d cmd %08x\n",addr, sizeof(STRATA_TYPE), STRATA_COMMAND_CFI); @@ -210,7 +210,7 @@ STRATA_FNNAME(strata_hw_cfi)(struct cyg_ } writebuffer_lsb = STRATA_UNSWAP(addr[STRATA_OFFSET_CFI_WRITE_BUFFER_LSB]) & 0x00FF; - writebuffer_msb = STRATA_UNSWAP(addr[STRATA_OFFSET_CFI_WRITE_BUFFER_MSB]) & 0x00FF; + /* No need to include MSB, it would never be as large as 2^256 ! */ writebuffer = 1 << writebuffer_lsb; strata_dev->bufsize = writebuffer / sizeof(STRATA_TYPE); diff --git a/packages/devs/flash/spi/at25dfxxx/current/ChangeLog b/packages/devs/flash/spi/at25dfxxx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/at25dfxxx/current/ChangeLog @@ -0,0 +1,37 @@ + +2012-01-05 Christophe Coutand + * cdl/at25dfxxx.cdl: + * tests/at25dfxxx_test.c: + Added Atmel AT25DFxxx driver test application. + [Bugzilla 1001449] + +2011-04-13 Christophe Coutand + + * cdl/at25dfxxx.cdl: + * include/at25dfxxx.h: + * src/at25dfxxx.c: + New package - SPI flash driver for Atmel AT25DFxxx devices. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/spi/at25dfxxx/current/cdl/flash_at25dfxxx.cdl b/packages/devs/flash/spi/at25dfxxx/current/cdl/flash_at25dfxxx.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/at25dfxxx/current/cdl/flash_at25dfxxx.cdl @@ -0,0 +1,133 @@ +##============================================================================= +## +## flash_at25dfxxx..cdl +## +## AT25DFxxx SPI flash driver configuration options. +## +##============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## +## Author(s): ccoutand, updated for Atmel AT95DFxxx flash +## Original(s): Chris Holgate +## Date: 2011-04-25 +## Purpose: Configure AT95DFxxx SPI flash driver. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +cdl_package CYGPKG_DEVS_FLASH_SPI_AT25DFXXX { + display "Atmel AT25DFxxx flash memory support" + parent CYGPKG_IO_FLASH + + active_if { CYGPKG_IO_FLASH && CYGPKG_IO_SPI } + implements CYGHWR_IO_FLASH_DEVICE + implements CYGHWR_IO_FLASH_INDIRECT_READS + implements CYGHWR_IO_FLASH_BLOCK_LOCKING + + include_dir cyg/io + compile at25dfxxx.c + + description " + Flash memory support for Atmel AT95DFxxx SPI flash devices + and compatibles. This driver implements the V2 flash driver API." + + cdl_interface CYGHWR_DEVS_FLASH_SPI_AT25DFXXX_DEVICE { + display "Hardware AT25DFxxx FLASH device drivers" + description " + This calculated option gives the number of AT25DFxxx flash + devices on the current platform." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE { + display "Flash block size in bytes" + legal_values { 4096 32768 65536 } + flavor data + default_value { 4096 } + + description " + Most Atmel AT95DFxxx SPI flash devices can use block size of + 4KB, 32K or 64KB. This option allow users to select the flash + geometry to use. For device such as AT25F512 not supporting + 64K, selecting a wrong geometry will force the driver to + abort the initialization process." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_READ_MODE { + display "Flash read transaction" + legal_values { "FAST" "SLOW" "RAPIDS"} + flavor data + default_value { "FAST" } + + description " + Atmel AT95DFxxx SPI flash devices differentiate read access + according to the throughput required for this operation. The + driver allows fast and slow reading operation. Some parts + also supports the Atmel RapidS protocol." + } + + cdl_option CYGNUM_DEVS_FLASH_SPI_AT25DFXXX_READ_BLOCK_SIZE { + display "Maximum read block size" + flavor data + default_value 0 + + description " + In theory it is possible to read back the entire flash + contents using a single SPI transaction. However, some SPI + bus drivers have a maximum transaction size - for example + transactions may be limited to the length of a DMA bounce + buffer. Setting this option to a non-zero value specifies + the maximum SPI bus transfer size which will be used when + reading back data. Read requests for areas larger than + this block size will automatically be split into a series + of smaller SPI bus transactions." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_TESTS { + display "SPI flash driver tests for Atmel AT95DFxxx flash" + active_if CYGPKG_KERNEL + active_if CYGPKG_IO_SPI + requires { CYGHWR_DEVS_FLASH_SPI_AT25DFXXX_DEVICE >= 1 } + flavor data + no_define + calculated { "tests/at25dfxxx_test.c" } + description " + This option specifies the set of tests for the Atmel AT95DFxxx + SPI flash." + } +} + +# EOF flash_at25dfxxx.cdl diff --git a/packages/devs/flash/spi/at25dfxxx/current/include/at25dfxxx.h b/packages/devs/flash/spi/at25dfxxx/current/include/at25dfxxx.h new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/at25dfxxx/current/include/at25dfxxx.h @@ -0,0 +1,78 @@ +#ifndef CYGONCE_DEVS_FLASH_SPI_AT25DFXXX_H +#define CYGONCE_DEVS_FLASH_SPI_AT25DFXXX_H + +//============================================================================= +// +// at25dfxxx.h +// +// SPI flash driver for Atmel AT95DFxxx devices and compatibles. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Atmel AT95DFxxx flash +// Original(s): Chris Holgate +// Purpose: Atmel AT95DFxxx SPI flash driver implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Required data structures. +#include + +// Exported handle on the driver function table. +externC struct cyg_flash_dev_funs cyg_devs_flash_spi_at25dfxxx_funs; + +//----------------------------------------------------------------------------- +// Macro used to generate a flash device object with the default AT25DFXXX +// settings. Even though the block info data structure is declared here, the +// details are not filled in until the device type is inferred during +// initialization. This also applies to the 'end' field which is calculated +// using the _start_ address and the inferred size of the device. +// _name_ is the root name of the instantiated data structures. +// _start_ is the base address of the device - for SPI based devices this can +// have an arbitrary value, since the device is not memory mapped. +// _spidev_ is a pointer to a SPI device object of type cyg_spi_device. This +// is not typechecked during compilation so be careful! + +#define CYG_DEVS_FLASH_SPI_AT25DFXXX_DRIVER(_name_, _start_, _spidev_) \ +struct cyg_flash_block_info _name_ ##_block_info; \ +CYG_FLASH_DRIVER(_name_, &cyg_devs_flash_spi_at25dfxxx_funs, 0, \ + _start_, _start_, 1, & _name_ ##_block_info, (void*) _spidev_) + +//----------------------------------------------------------------------------- +#endif // CYGONCE_DEVS_FLASH_SPI_AT25DFXXX_H +// EOF atd25dfxxx.h diff --git a/packages/devs/flash/spi/at25dfxxx/current/src/at25dfxxx.c b/packages/devs/flash/spi/at25dfxxx/current/src/at25dfxxx.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/at25dfxxx/current/src/at25dfxxx.c @@ -0,0 +1,648 @@ +//============================================================================= +// +// at25dfxxx.c +// +// SPI flash driver for Atmel AT25DFxxx devices and compatibles. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Atmel AT95DFxxx flash +// Original(s): Chris Holgate +// Date: 2011-04-25 +// Purpose: Atmel AT95DFxxx SPI flash driver implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include + +#include +#include + +#include + +#include + +//----------------------------------------------------------------------------- +// Enable polled SPI operation for non-kernel builds. + +#ifdef CYGPKG_KERNEL +# define AT25DFXXX_POLLED false +#else +# define AT25DFXXX_POLLED true +#endif + +//----------------------------------------------------------------------------- +// Implement delay functions for kernel and non-kernel builds. The kernel +// build assumes that the API calls are made in the thread context. + +#ifdef CYGPKG_KERNEL +# define AT25DFXXX_DELAY_MS(_msdelay_) cyg_thread_delay \ + (1 + ((1000 * _msdelay_ * CYGNUM_HAL_RTC_DENOMINATOR) / (CYGNUM_HAL_RTC_NUMERATOR / 1000))) + +#else +# define AT25DFXXX_DELAY_MS(_msdelay_) CYGACC_CALL_IF_DELAY_US (_msdelay_ * 1000) +#endif + +//----------------------------------------------------------------------------- +// Maintenance and debug macros. + +#define ASSERT_AT25DFXXX(_test_, _msg_) CYG_ASSERT(_test_, "FAIL (AT25DFXXX) : " _msg_) +#define TRACE_AT25DFXXX(_msg_, _args_...) if (dev->pf) dev->pf ("AT25DFXXX : " _msg_, ##_args_) + +//============================================================================= +// Define AT25DFxxx SPI protocol. +//============================================================================= + +typedef enum at25dfxxx_cmd { + AT25DFXXX_CMD_WREN = 0x06, // Write enable. + AT25DFXXX_CMD_WDRI = 0x04, // Write disable. + AT25DFXXX_CMD_RDID = 0x9F, // Read identification. + AT25DFXXX_CMD_RDSR1 = 0x05, // Read status register. + AT25DFXXX_CMD_RDSR2 = 0x31, // Read status register. + AT25DFXXX_CMD_WRSR = 0x01, // Write status register. + AT25DFXXX_CMD_SREAD = 0x03, // Read data (slow transaction). + AT25DFXXX_CMD_READ = 0x0B, // Read data. + AT25DFXXX_CMD_FREAD = 0x1B, // Read data (fast transaction). + AT25DFXXX_CMD_PP = 0x02, // Page program. + AT25DFXXX_CMD_SE_4K = 0x20, // 4K sector erase. + AT25DFXXX_CMD_SE_32K = 0x52, // 32K sector erase. + AT25DFXXX_CMD_SE_64K = 0xD8, // 64K sector erase. + AT25DFXXX_CMD_BE = 0xC7, // Chip erase. + AT25DFXXX_CMD_LOCK = 0x36, // Protect sector + AT25DFXXX_CMD_UNLOCK = 0x39, // Unprotect sector +} at25dfxxx_cmd; + +// Status register bitfields. +#define AT25DFXXX_STATUS_BSY 0x01 /* Operation in progress. */ +#define AT25DFXXX_STATUS_WEL 0x02 /* Write enable latch. */ +#define AT25DFXXX_STATUS_BP0 0x04 /* Global protect 0. */ +#define AT25DFXXX_STATUS_BP1 0x08 /* Global protect 1. */ +#define AT25DFXXX_STATUS_BP2 0x10 /* Global protect 2. */ +#define AT25DFXXX_STATUS_SPRL 0x80 /* Sector Protect Register Lock. */ + +// Page size of 256 bytes appears to be common for all devices. +#define AT25DFXXX_PAGE_SIZE 256 + +// A few helper constants +#ifndef SZ_1K +# define SZ_1K 0x00000400 +# define SZ_2K 0x00000800 +# define SZ_4K 0x00001000 +# define SZ_8K 0x00002000 +# define SZ_16K 0x00004000 +# define SZ_32K 0x00008000 +# define SZ_64K 0x00010000 +#endif + +// Select read OPCODE +#if defined(CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_READ_MODE_SLOW) +# define AT25DFXXX_CMD_READ_LEN 4 +# define AT25DFXXX_CMD_READ_OPCODE AT25DFXXX_CMD_SREAD +#elif defined(CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_READ_MODE_FAST) +# define AT25DFXXX_CMD_READ_LEN 5 +# define AT25DFXXX_CMD_READ_OPCODE AT25DFXXX_CMD_READ +#elif defined(CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_READ_MODE_RAPIDS) +# define AT25DFXXX_CMD_READ_LEN 6 +# define AT25DFXXX_CMD_READ_OPCODE AT25DFXXX_CMD_FREAD +#endif + +// Select sector size +#if CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE == SZ_64K +# define AT25DFXXX_CMD_SE AT25DFXXX_CMD_SE_64K +#elif CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE == SZ_32K +# define AT25DFXXX_CMD_SE AT25DFXXX_CMD_SE_32K +#elif CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE == SZ_4K +# define AT25DFXXX_CMD_SE AT25DFXXX_CMD_SE_4K +#endif + +//============================================================================= +// Array containing a list of supported devices. This allows the device +// parameters to be dynamically detected on initialization. +//============================================================================= + +typedef struct at25dfxxx_params { + // Atmel AT25DFxxx SPI flash can be used with 4K, 32K or 64K sector size. + // sector_size, sector_count are defined as array, allowing + // to describe the geometry of the device for all supported sector size. + cyg_uint32 sector_size[4]; // Supported sector size(s) in Byte + cyg_uint16 sector_count[4]; // Number of sectors on device. + cyg_bool support_rapids; // Atmel RapidS protocol support + cyg_uint32 jedec_id; // 3 byte JEDEC identifier +} at25dfxxx_params; + + +static const at25dfxxx_params at25dfxxx_supported_devices [] = { + // Some Atmel AT25DFxxx part (Atmel JEDEC code: 0x1f) + // Consider removing the revision number from the Manufacturer / + // Device ID for larger chip coverage. + + { // Support for Atmel 64 MBit devices (AT25DF641). + sector_count : {2048, 256, 128, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : true, + jedec_id : 0x001f4800 + }, + { // Support for Atmel 32 MBit devices (AT25DF321A). + sector_count : {1024, 128, 64, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : true, + jedec_id : 0x001f4701 + }, + { // Support for Atmel 16 MBit devices (AT25DF161). + sector_count : {512, 64, 32, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : true, + jedec_id : 0x001f4602 + }, + { // Support for Atmel 8 MBit devices (AT25DF081A). + sector_count : {256, 32, 16, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : true, + jedec_id : 0x001f4501 + }, + { // Support for Atmel 4 MBit devices (AT25DF041A). + sector_count : {128, 16, 8, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : false, + jedec_id : 0x001f4400 + }, + { // Support for Atmel 2 MBit devices (AT25DF021). + sector_count : {64, 8, 4, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + support_rapids : false, + jedec_id : 0x001f4300 + }, + { // Support for Atmel 512 KBit devices (AT25F512B). + sector_count : {8, 1, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + support_rapids : false, + jedec_id : 0x001f6500 + }, + { // Null terminating entry. + sector_count : {0}, + sector_size : {0}, + support_rapids : false, + jedec_id : 0 + } +}; +//============================================================================= +// Utility functions for address calculations. +//============================================================================= + +//----------------------------------------------------------------------------- +// Strips out any device address offset to give address within device. + +static cyg_bool +at25dfxxx_to_local_addr(struct cyg_flash_dev *dev, cyg_flashaddr_t * addr) +{ + cyg_bool retval = false; + + // Range check address before modifying it. + if ((*addr >= dev->start) && (*addr <= dev->end)) { + *addr -= dev->start; + retval = true; + } + return retval; +} + +//============================================================================= +// Wrapper functions for various SPI transactions. +//============================================================================= + +//----------------------------------------------------------------------------- +// Read back the 3-byte JEDEC ID, returning it as a 32-bit integer. +// This function is called during flash initialisation, which can often be +// called from the startup/idle thread. This means that we should always use +// SPI polled mode in order to prevent the thread from attempting to sleep. + +static inline cyg_uint32 +at25dfxxx_spi_rdid(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { AT25DFXXX_CMD_RDID, 0x0, 0x0, 0x0 }; + cyg_uint8 rx_buf[4]; + cyg_uint32 retval = 0; + + // Carry out SPI transfer. + cyg_spi_transfer(spi_device, true, 4, tx_buf, rx_buf); + + // Convert 3-byte ID to 32-bit integer. + retval |= ((cyg_uint32)rx_buf[1]) << 16; + retval |= ((cyg_uint32)rx_buf[2]) << 8; + retval |= ((cyg_uint32)rx_buf[3]); + + return retval; +} + +//----------------------------------------------------------------------------- +// Send write enable command. + +static inline void +at25dfxxx_spi_wren(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[1] = { AT25DFXXX_CMD_WREN }; + cyg_spi_transfer(spi_device, AT25DFXXX_POLLED, 1, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Send sector erase command. The address parameter is a device local address +// within the sector to be erased. + +static inline void +at25dfxxx_spi_se(struct cyg_flash_dev *dev, cyg_flashaddr_t addr) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + cyg_uint8 tx_buf[4] = { AT25DFXXX_CMD_SE, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + cyg_spi_transfer(spi_device, AT25DFXXX_POLLED, 4, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Send sector erase command. The address parameter is a device local address +// within the sector to be erased. + +static inline void +at25dfxxx_spi_lock(struct cyg_flash_dev *dev, cyg_flashaddr_t addr) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { AT25DFXXX_CMD_LOCK, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + cyg_spi_transfer(spi_device, AT25DFXXX_POLLED, 4, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Send sector erase command. The address parameter is a device local address +// within the sector to be erased. + +static inline void +at25dfxxx_spi_unlock(struct cyg_flash_dev *dev, cyg_flashaddr_t addr) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { AT25DFXXX_CMD_UNLOCK, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + cyg_spi_transfer(spi_device, AT25DFXXX_POLLED, 4, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Read and return the 8-bit device status register. + +static inline cyg_uint8 +at25dfxxx_spi_rdsr(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[2] = { AT25DFXXX_CMD_RDSR1, 0 }; + cyg_uint8 rx_buf[2]; + + // Carry out SPI transfer and return the status byte. + cyg_spi_transfer(spi_device, AT25DFXXX_POLLED, 2, tx_buf, rx_buf); + + return rx_buf[1]; +} + +//----------------------------------------------------------------------------- +// Program a single page. + +static inline void +at25dfxxx_spi_pp(struct cyg_flash_dev *dev, cyg_flashaddr_t addr, + cyg_uint8 *wbuf, cyg_uint32 wbuf_len) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { AT25DFXXX_CMD_PP, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + + // Implement the program operation as a multistage SPI transaction. + cyg_spi_transaction_begin(spi_device); + cyg_spi_transaction_transfer(spi_device, AT25DFXXX_POLLED, 4, tx_buf, + NULL, false); + cyg_spi_transaction_transfer(spi_device, AT25DFXXX_POLLED, wbuf_len, wbuf, + NULL, false); + cyg_spi_transaction_end(spi_device); +} + +//----------------------------------------------------------------------------- +// Implement reads to the specified buffer. + +static inline void +at25dfxxx_spi_read(struct cyg_flash_dev *dev, cyg_flashaddr_t addr, + cyg_uint8 *rbuf, cyg_uint32 rbuf_len) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[6] = { AT25DFXXX_CMD_READ_OPCODE, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr), 0, + 0 + }; + + // Implement the read operation as a multistage SPI transaction. + cyg_spi_transaction_begin(spi_device); + cyg_spi_transaction_transfer(spi_device, AT25DFXXX_POLLED, + AT25DFXXX_CMD_READ_LEN, tx_buf, NULL, false); + cyg_spi_transaction_transfer(spi_device, AT25DFXXX_POLLED, rbuf_len, NULL, + rbuf, false); + cyg_spi_transaction_end(spi_device); +} + +//============================================================================= +// Standard Flash device API. All the following functions assume that a valid +// SPI device handle is passed in the 'priv' reference of the flash device +// data structure. +//============================================================================= + +//----------------------------------------------------------------------------- +// Initialize the SPI flash, reading back the flash parameters. + +static int +at25dfxxx_init(struct cyg_flash_dev *dev) +{ + at25dfxxx_params *dev_params = + (at25dfxxx_params *) at25dfxxx_supported_devices; + cyg_uint32 device_id; + int retval = FLASH_ERR_INVALID; + cyg_uint8 i = 0; + + // Find the device in the supported devices list. + device_id = at25dfxxx_spi_rdid(dev); + while ((dev_params->jedec_id != 0) && (dev_params->jedec_id != device_id)) { + dev_params++; + } + + // Found supported device - update device parameters. AT25DFXXX devices + // have a uniform sector distribution, so only 1 block info record is + // required. + if (dev_params->jedec_id != 0) { + + while ((dev_params->sector_size[i] != + CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE) + && (dev_params->sector_size[i] != 0)) + i++; + + // Verify that the device supports the wanted geometry + if (dev_params->sector_size[i] != + CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE) { + TRACE_AT25DFXXX("Init device with JEDEC ID 0x%06X\n", + dev_params->jedec_id); + TRACE_AT25DFXXX + ("SPI Flash Error, not supporting %dK sector size\n", + CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_BLOCK_SIZE); + return retval; + } + +#if defined(CYGPKG_DEVS_FLASH_SPI_AT25DFXXX_READ_MODE_RAPIDS) + if (dev_params->support_rapids != true) { + TRACE_AT25DFXXX("Init device with JEDEC ID 0x%06X\n", + dev_params->jedec_id); + TRACE_AT25DFXXX + ("SPI Flash Error, not supporting RapidS Opcode\n"); + return retval; + } +#endif + + ASSERT_AT25DFXXX(dev->num_block_infos == 1, + "Only 1 block info record required."); + ASSERT_AT25DFXXX(dev->block_info != NULL, + "Null pointer to block info record."); + + if ((dev->num_block_infos == 1) && (dev->block_info != NULL)) { + TRACE_AT25DFXXX("Init device with JEDEC ID 0x%06X.\n", device_id); + + dev->end = + dev->start + + ((cyg_flashaddr_t) dev_params->sector_size[i] * + (cyg_flashaddr_t) (dev_params->sector_count[i])) - 1; + + // Strictly speaking the block info fields are 'read only'. + // However, we have a legitimate reason for updating the contents + // here and can cast away the const. + ((cyg_flash_block_info_t *) dev->block_info)->block_size = + (size_t)(dev_params->sector_size[i]); + ((cyg_flash_block_info_t *) dev->block_info)->blocks = + (cyg_uint32)(dev_params->sector_count[i]); + + retval = FLASH_ERR_OK; + } + } + return retval; +} + +//----------------------------------------------------------------------------- +// Erase a single sector of the flash. + +static int +at25dfxxx_erase_block(struct cyg_flash_dev *dev, cyg_flashaddr_t block_base) +{ + cyg_flashaddr_t local_base = block_base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 dev_status; + + // Fix up the block address and send the sector erase command. + if (at25dfxxx_to_local_addr(dev, &local_base)) { + at25dfxxx_spi_wren(dev); + at25dfxxx_spi_se(dev, local_base); + + // Spin waiting for the erase to complete. + do { + AT25DFXXX_DELAY_MS(1); + dev_status = at25dfxxx_spi_rdsr(dev); + } while (dev_status & AT25DFXXX_STATUS_BSY); + + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Program an arbitrary number of pages into flash and verify written data. + +static int +at25dfxxx_program(struct cyg_flash_dev *dev, cyg_flashaddr_t base, + const void *data, size_t len) +{ + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_OK; + cyg_uint8 *tx_ptr = (cyg_uint8 *)data; + cyg_uint32 tx_bytes_left = (cyg_uint32)len; + cyg_uint32 tx_bytes; + cyg_uint8 dev_status; + + // Fix up the block address. + if (!at25dfxxx_to_local_addr(dev, &local_base)) { + retval = FLASH_ERR_INVALID; + goto out; + } + // The start of the transaction may not be page aligned, so we need to work + // out how many bytes to transmit before we hit the first page boundary. + tx_bytes = + AT25DFXXX_PAGE_SIZE - + (((cyg_uint32)local_base) & (AT25DFXXX_PAGE_SIZE - 1)); + if (tx_bytes > tx_bytes_left) + tx_bytes = tx_bytes_left; + + // Perform page program operations. + while (tx_bytes_left) { + at25dfxxx_spi_wren(dev); + at25dfxxx_spi_pp(dev, local_base, tx_ptr, tx_bytes); + + // Spin waiting for write to complete. This can take up to 5ms, so + // we use a polling interval of 1ms - which may get rounded up to the + // RTC tick granularity. + do { + AT25DFXXX_DELAY_MS(1); + dev_status = at25dfxxx_spi_rdsr(dev); + } while (dev_status & AT25DFXXX_STATUS_BSY); + + // Update counters and data pointers for the next page. + tx_bytes_left -= tx_bytes; + tx_ptr += tx_bytes; + local_base += tx_bytes; + tx_bytes = + (tx_bytes_left > + AT25DFXXX_PAGE_SIZE) ? AT25DFXXX_PAGE_SIZE : tx_bytes_left; + } + +out: + return retval; +} + +//----------------------------------------------------------------------------- +// Read back an arbitrary amount of data from flash. + +static int +at25dfxxx_read(struct cyg_flash_dev *dev, const cyg_flashaddr_t base, + void *data, size_t len) +{ + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 *rx_ptr = (cyg_uint8 *)data; + cyg_uint32 rx_bytes_left = (cyg_uint32)len; + cyg_uint32 rx_bytes; + + // Determine the maximum transfer size to use. + cyg_uint32 rx_block_size = + (CYGNUM_DEVS_FLASH_SPI_AT25DFXXX_READ_BLOCK_SIZE == + 0) ? 0xFFFFFFFF : CYGNUM_DEVS_FLASH_SPI_AT25DFXXX_READ_BLOCK_SIZE; + + // Fix up the block address and fill the read buffer. + if (at25dfxxx_to_local_addr(dev, &local_base)) { + while (rx_bytes_left) { + rx_bytes = + (rx_bytes_left < + rx_block_size) ? rx_bytes_left : rx_block_size; + at25dfxxx_spi_read(dev, local_base, rx_ptr, rx_bytes); + + // Update counters and data pointers for next read block. + rx_bytes_left -= rx_bytes; + rx_ptr += rx_bytes; + local_base += rx_bytes; + } + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Lock sector + +static int +at25dfxxx_lock(struct cyg_flash_dev *dev, cyg_flashaddr_t base) +{ + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 dev_status; + + // Fix up the block address and send the sector erase command. + if (at25dfxxx_to_local_addr(dev, &local_base)) { + at25dfxxx_spi_wren(dev); + at25dfxxx_spi_lock(dev, local_base); + + // Spin waiting for the lock operation to complete. + do { + AT25DFXXX_DELAY_MS(1); + dev_status = at25dfxxx_spi_rdsr(dev); + } while (dev_status & AT25DFXXX_STATUS_BSY); + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Unlock sector + +static int +at25dfxxx_unlock(struct cyg_flash_dev *dev, cyg_flashaddr_t base) +{ + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 dev_status; + + // Fix up the block address and send the sector erase command. + if (at25dfxxx_to_local_addr(dev, &local_base)) { + at25dfxxx_spi_wren(dev); + at25dfxxx_spi_unlock(dev, local_base); + + // Spin waiting for the unlock operation to complete. + do { + AT25DFXXX_DELAY_MS(1); + dev_status = at25dfxxx_spi_rdsr(dev); + } while (dev_status & AT25DFXXX_STATUS_BSY); + retval = FLASH_ERR_OK; + } + return retval; +} + +//============================================================================= +// Fill in the driver data structures. +//============================================================================= + +CYG_FLASH_FUNS( + cyg_devs_flash_spi_at25dfxxx_funs, // Exported name of function pointers + at25dfxxx_init, // Flash initialization + cyg_flash_devfn_query_nop, // Query operations not supported + at25dfxxx_erase_block, // Sector erase + at25dfxxx_program, // Program multiple pages + at25dfxxx_read, // Read arbitrary amount of data + at25dfxxx_lock, // Locking + at25dfxxx_unlock); + +//----------------------------------------------------------------------------- +// EOF at25dfxxx.c diff --git a/packages/devs/flash/spi/at25dfxxx/current/tests/at25dfxxx_test.c b/packages/devs/flash/spi/at25dfxxx/current/tests/at25dfxxx_test.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/at25dfxxx/current/tests/at25dfxxx_test.c @@ -0,0 +1,398 @@ +//============================================================================= +// +// at25dfxxx_test.c +// +// SPI flash driver tests for Atmel AT95DFxxx flash +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Atmel AT95DFxxx flash +// Original(s): Chris Holgate +// Date: 2011-04-25 +// Purpose: Atmel AT95DFxxx SPI flash driver stress tests. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include +#include // Test macros +#include // Assertion macros +#include // Diagnostic output + +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL +#include +#include + +#include +#include +#include + +// Required data structures. +#include + +#include + +#include CYGHWR_MEMORY_LAYOUT_H + +static cyg_flash_info_t at25dfxxx_flash_info; + +//----------------------------------------------------------------------------- +// Thread data structures. + +static cyg_uint32 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL / 4]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; + +//----------------------------------------------------------------------------- +// Data transfer buffers. + +#define BUF_SIZE 1024 + +static cyg_uint8 wbuf [BUF_SIZE]; +static cyg_uint8 rbuf [BUF_SIZE]; + +//----------------------------------------------------------------------------- +// Print out version information. + +void do_version (void) +{ + char *version = CYGACC_CALL_IF_MONITOR_VERSION(); + if (version != NULL) diag_printf("%s", version); +#ifdef HAL_PLATFORM_CPU + diag_printf("\nPlatform: %s (%s) %s\n", + HAL_PLATFORM_BOARD, HAL_PLATFORM_CPU, HAL_PLATFORM_EXTRA); +#endif + diag_printf("RAM: %p-%p, ", + (void*)(CYGMEM_REGION_ram), (void*)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 1)); + diag_printf("(HEAP: %p-%p)\n", + (void*)(CYGMEM_SECTION_heap1), (void*)(CYGMEM_SECTION_heap1 + CYGMEM_SECTION_heap1_SIZE - 1)); +} + +//----------------------------------------------------------------------------- +// Run checkerboard and inverse checkerboard writes over each sector in turn. + +cyg_uint32 run_test_1 + (void) +{ + int status; + cyg_uint32 i, j; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 1 - write and verify checkerboard and inverse checkerboard.\n"); + + // Iterate over all flash sectors. + for (i = 0; i < at25dfxxx_flash_info.block_info->blocks; i++) { + base_addr = at25dfxxx_flash_info.start + + (i * at25dfxxx_flash_info.block_info->block_size); + + // Unlock block. + status = cyg_flash_unlock (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Set up buffer with checkerboard. + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = 0x55; + wbuf [j++] = 0xAA; + } + + // Write the checkerboard to the entire sector. + for (j = 0; j < at25dfxxx_flash_info.block_info->block_size ; j += BUF_SIZE) { + status = cyg_flash_program (base_addr + j, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + + // Read back the checkerboard and verify. + for (j = 0; j < at25dfxxx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_read (base_addr + j, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr + j, base_addr + j + BUF_SIZE - 1); + errors ++; + } + } + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Set up buffer with inverse checkerboard. + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = 0xAA; + wbuf [j++] = 0x55; + } + + // Write the checkerboard to the entire sector. + for (j = 0; j < at25dfxxx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_program (base_addr + j, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + + // Read back the checkerboard and verify. + for (j = 0; j < at25dfxxx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_read (base_addr + j, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr + j, base_addr + j + BUF_SIZE - 1); + errors ++; + } + } + } + return errors; +} + +//----------------------------------------------------------------------------- +// Write and verify counting sequence over all device. + +cyg_uint32 run_test_2 + (void) +{ + int status; + cyg_uint32 i, j; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 2 - write and verify counting sequence.\n"); + + // Erase all flash sectors. + for (i = 0; i < at25dfxxx_flash_info.block_info->blocks; i++) { + base_addr = at25dfxxx_flash_info.start + + (i * at25dfxxx_flash_info.block_info->block_size); + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + + // Write counting sequence. + base_addr = at25dfxxx_flash_info.start; + for (i = 0; i < (at25dfxxx_flash_info.end - at25dfxxx_flash_info.start) / 4;) { + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = (cyg_uint8) ((i >> 0) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 8) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 16) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 24) & 0xFF); + i++; + } + status = cyg_flash_program (base_addr, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + base_addr += BUF_SIZE; + } + + // Verify counting sequence. + base_addr = at25dfxxx_flash_info.start; + for (i = 0; i < (at25dfxxx_flash_info.end - at25dfxxx_flash_info.start) / 4;) { + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = (cyg_uint8) ((i >> 0) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 8) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 16) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 24) & 0xFF); + i++; + } + status = cyg_flash_read (base_addr, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr, base_addr + BUF_SIZE - 1); + errors ++; + } + base_addr += BUF_SIZE; + } + return errors; +} + +//----------------------------------------------------------------------------- +// Perform non-aligned buffer read/write tests, spanning sector boundaries. + +cyg_uint32 run_test_3 + (void) +{ + int status; + cyg_uint32 i, count; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 3 - test non-aligned writes and reads.\n"); + + // Fill the write buffer with a basic counting sequence. + count = 0; + for (i = 0; i < BUF_SIZE;) { + wbuf [i++] = (cyg_uint8) ((count >> 0) & 0xFF); + wbuf [i++] = (cyg_uint8) ((count >> 8) & 0xFF); + count++; + } + + // Assuming 256 byte pages gives 256 possible alignments. + base_addr = at25dfxxx_flash_info.start + at25dfxxx_flash_info.block_info->block_size; + for (i = 1; i <= 256; i++) { + + // Erase sectors either side of sector boundary. + status = cyg_flash_erase (base_addr - 1, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Write data spanning sector boundary. + status = cyg_flash_program (base_addr - i, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Verify data spanning sector boundary. + status = cyg_flash_read (base_addr - i, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr - i, base_addr - i + BUF_SIZE - 1); + errors ++; + } + + // Use next sector boundary for next test. + base_addr += at25dfxxx_flash_info.block_info->block_size; + if (base_addr >= at25dfxxx_flash_info.end) + base_addr = at25dfxxx_flash_info.start + at25dfxxx_flash_info.block_info->block_size; + } + return errors; +} + +//----------------------------------------------------------------------------- +// Run all M25Pxx SPI interface loopback tests. + +void run_tests + (void) +{ + cyg_uint32 errors = 0; + + do_version(); + + diag_printf ("----\nChecking for AT25DFxxx compatible devices.\n"); + cyg_flash_set_global_printf((cyg_flash_printf *)&diag_printf); + cyg_flash_init(NULL); + + cyg_flash_get_info_addr(CYGNUM_DEVS_FLASH_SPI_AT25XXX_DEV0_MAP_ADDR, + &at25dfxxx_flash_info); + + // Check that the device is intialised. + if (at25dfxxx_flash_info.start == at25dfxxx_flash_info.end) { + diag_printf ("AT25DFxxx device not initialised.\n"); + errors ++; + goto out; + } + + // Run the tests. + errors += run_test_1 (); + errors += run_test_2 (); + errors += run_test_3 (); + +out: + diag_printf ("----\nTests complete - detected %d errors in total.\n", errors); + if (errors == 0) + CYG_TEST_PASS_FINISH ("AT25DFxxx driver tests ran OK."); + else + CYG_TEST_FAIL_FINISH ("AT25DFxxx driver test FAILED."); +} + +//----------------------------------------------------------------------------- +// User startup - tests are run in their own thread. + +void cyg_user_start + (void) +{ + CYG_TEST_INIT(); + cyg_thread_create( + 10, // Arbitrary priority + (cyg_thread_entry_t*) run_tests, // Thread entry point + 0, // + "test_thread", // Thread name + (cyg_uint8*) stack, // Stack + CYGNUM_HAL_STACK_SIZE_TYPICAL, // Stack size + &thread_handle, // Thread handle + &thread_data // Thread data structure + ); + cyg_thread_resume(thread_handle); + cyg_scheduler_start(); +} + +//============================================================================= diff --git a/packages/devs/flash/spi/m25pxx/current/ChangeLog b/packages/devs/flash/spi/m25pxx/current/ChangeLog --- a/packages/devs/flash/spi/m25pxx/current/ChangeLog +++ b/packages/devs/flash/spi/m25pxx/current/ChangeLog @@ -1,3 +1,7 @@ +2011-05-25 Sergei Gavrikov + + * cdl/flash_m25pxx.cdl: fix active_if goal expression. + 2009-02-20 Jonathan Larmour * test/m25pxx_test.c (cyg_user_start): Call cyg_flash_init() with diff --git a/packages/devs/flash/spi/m25pxx/current/cdl/flash_m25pxx.cdl b/packages/devs/flash/spi/m25pxx/current/cdl/flash_m25pxx.cdl --- a/packages/devs/flash/spi/m25pxx/current/cdl/flash_m25pxx.cdl +++ b/packages/devs/flash/spi/m25pxx/current/cdl/flash_m25pxx.cdl @@ -50,7 +50,7 @@ cdl_package CYGPKG_DEVS_FLASH_SPI_M25PXX { display "M25PXX flash memory support" parent CYGPKG_IO_FLASH - active_if CYGPKG_IO_FLASH CYGPKG_IO_SPI + active_if { CYGPKG_IO_FLASH && CYGPKG_IO_SPI } implements CYGHWR_IO_FLASH_DEVICE implements CYGHWR_IO_FLASH_INDIRECT_READS include_dir cyg/io diff --git a/packages/devs/flash/spi/sst25xx/current/ChangeLog b/packages/devs/flash/spi/sst25xx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/sst25xx/current/ChangeLog @@ -0,0 +1,38 @@ +2012-02-06 Ilija Kocho + + * cdl/flash_sst25xx.cdl + * src/sst25xx.c: + * tests/flash_sst25xx_test.c: New file + Added tests [Bugzilla 1001450] + +2011-04-13 Christophe Coutand + + * cdl/sst25xx.cdl: + * include/sst25xx.h: + * src/sst25xx.c: + New package - SPI flash driver for Silicon Storage Technology, + SST25xx devices. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/spi/sst25xx/current/cdl/flash_sst25xx.cdl b/packages/devs/flash/spi/sst25xx/current/cdl/flash_sst25xx.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/sst25xx/current/cdl/flash_sst25xx.cdl @@ -0,0 +1,145 @@ +##============================================================================= +## +## flash_sst25xx.cdl +## +## SST25xx SPI flash driver configuration options. +## +##============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## +## Author(s): ccoutand, updated for Silicon Storage Technology +## SST25xx flash +## Original(s): Chris Holgate +## Date: 2011-04-25 +## Purpose: Configure SST25xx SPI flash driver. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +cdl_package CYGPKG_DEVS_FLASH_SPI_SST25XX { + display "Silicon Storage Technology SST25xx flash memory support" + parent CYGPKG_IO_FLASH + active_if { CYGPKG_IO_FLASH && CYGPKG_IO_SPI } + implements CYGHWR_IO_FLASH_DEVICE + implements CYGHWR_IO_FLASH_BLOCK_LOCKING + implements CYGHWR_IO_FLASH_INDIRECT_READS + + include_dir cyg/io + compile -library=libextras.a sst25xx.c + + description " + Flash memory support for the Silicon Storage Technology SST25xx + SPI flash devices and compatibles. This driver implements the + V2 flash driver API" + + cdl_interface CYGHWR_DEVS_FLASH_SPI_SST25XX_DEVICE { + display "Hardware SST25xx FLASH device drivers" + description " + This calculated option gives the number of SST25xx flash + devices on the current platform." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_SST25XX_SUPPORT_JEDECID { + display "Device supports JEDEC ID" + flavor bool + default_value 0 + + description " + Allow probing of the SPI flash(s) on the bus using the + JededID Opcode. Some device do not support this command + (SST25VF010A, SST25VF512A etc.)." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE { + display "Flash block size in bytes" + flavor data + legal_values { 4096 32768 65536 } + default_value { 4096 } + + description " + Most SST25xx SPI flash devices can use block size of 4KB, + 32K or 64KB. This option allow users to select which flash + geometry to use. For device such as AT25F512 not supporting + 64K, selecting a wrong geometry will force the driver to + abort the initialization process." + } + + cdl_option CYGPKG_DEVS_FLASH_SPI_SST25XX_READ_MODE { + display "Flash read transaction" + flavor data + legal_values { "FAST" "SLOW" } + default_value { "FAST" } + + description " + The SST25xx SPI flash devices differentiate read access + according to the throughput required for this operation. The + driver allows both fast and slow reading operation. The + option requires the physical layer to use the appropriate + SPI bus clock frequency." + } + + cdl_option CYGNUM_DEVS_FLASH_SPI_SST25XX_READ_BLOCK_SIZE { + display "Maximum read block size" + flavor data + default_value 0 + + description " + In theory it is possible to read back the entire flash + contents using a single SPI transaction. However, some SPI + bus drivers have a maximum transaction size - for example + transactions may be limited to the length of a DMA bounce + buffer. Setting this option to a non-zero value specifies + the maximum SPI bus transfer size which will be used when + reading back data. Read requests for areas larger than + this block size will automatically be split into a series + of smaller SPI bus transactions." + } + + cdl_component CYGPKG_DEVS_FLASH_SPI_SST25XX_TESTS { + display "SST25xx tests" + flavor data + active_if CYGPKG_KERNEL + active_if CYGPKG_IO_SPI + active_if { CYGHWR_DEVS_FLASH_SPI_SST25XX_DEVICE >= 1 } + no_define + calculated { "tests/flash_sst25xx_test.c" } + description " + This option specifies the set of tests for sst25 driver." + } +} + +# EOF flash_sst25xx.cdl diff --git a/packages/devs/flash/spi/sst25xx/current/include/sst25xx.h b/packages/devs/flash/spi/sst25xx/current/include/sst25xx.h new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/sst25xx/current/include/sst25xx.h @@ -0,0 +1,83 @@ +#ifndef CYGONCE_DEVS_FLASH_SPI_SST25XX_H +#define CYGONCE_DEVS_FLASH_SPI_SST25XX_H + +//============================================================================= +// +// sst25xx.h +// +// SPI flash driver for Silicon Storage Technology SST25xx devices +// and compatibles. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Silicon Storage Technology SST25xx +// flash +// Original(s): Chris Holgate +// Purpose: Silicon Storage Technology SST25xxx SPI flash driver +// implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Required data structures. +#include + +// Exported handle on the driver function table. +externC struct cyg_flash_dev_funs cyg_devs_flash_spi_sst25xx_funs; + +//----------------------------------------------------------------------------- +// Macro used to generate a flash device object with the default SST25XX +// settings. Even though the block info data structure is declared here, the +// details are not filled in until the device type is inferred during +// initialization. This also applies to the 'end' field which is calculated +// using the _start_ address and the inferred size of the device. +// _name_ is the root name of the instantiated data structures. +// _start_ is the base address of the device - for SPI based devices this can +// have an arbitrary value, since the device is not memory mapped. +// _spidev_ is a pointer to a SPI device object of type cyg_spi_device. This +// is not typechecked during compilation so be careful! + +#define CYG_DEVS_FLASH_SPI_SST25XX_DRIVER(_name_, _start_, _spidev_) \ +struct cyg_flash_block_info _name_ ##_block_info; \ +CYG_FLASH_DRIVER(_name_, &cyg_devs_flash_spi_sst25xx_funs, 0, \ + _start_, _start_, 1, & _name_ ##_block_info, (void*) _spidev_) + +//============================================================================= + +//----------------------------------------------------------------------------- +#endif // CYGONCE_DEVS_FLASH_SPI_SST25XX_H +// EOF sst25xx.h diff --git a/packages/devs/flash/spi/sst25xx/current/src/sst25xx.c b/packages/devs/flash/spi/sst25xx/current/src/sst25xx.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/sst25xx/current/src/sst25xx.c @@ -0,0 +1,709 @@ +//============================================================================= +// +// sst25xx.c +// +// SPI flash driver for Silicon Storage Technology SST25xx devices +// and compatibles. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Silicon Storage Technology SST25xx +// flash +// Original(s): Chris Holgate +// Date: 2011-04-25 +// Purpose: Silicon Storage Technology SST25xx SPI flash driver +// implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#include + +//----------------------------------------------------------------------------- +// Enable polled SPI operation for non-kernel builds. + +#ifdef CYGPKG_KERNEL +# define SST25XX_POLLED false +#else +# define SST25XX_POLLED true +#endif + +//----------------------------------------------------------------------------- +// Implement delay functions for kernel and non-kernel builds. The kernel +// build assumes that the API calls are made in the thread context. + +#ifdef CYGPKG_KERNEL +#define SST25XX_DELAY_MS(_msdelay_) cyg_thread_delay \ + (1 + ((1000 * _msdelay_ * CYGNUM_HAL_RTC_DENOMINATOR) / (CYGNUM_HAL_RTC_NUMERATOR / 1000))) + +#else +#define SST25XX_DELAY_MS(_msdelay_) CYGACC_CALL_IF_DELAY_US (_msdelay_ * 1000) +#endif + +// Byte / word programming takes 10 us max +#define SST25XX_WAIT_CHIP_READY( dev ) \ +{ \ + cyg_uint8 dev_status; \ + do { \ + HAL_DELAY_US (10); \ + dev_status = sst25xx_spi_rdsr ( dev ); \ + } while ( dev_status & SST25XX_STATUS_BSY ); \ +} + +//----------------------------------------------------------------------------- +// Maintenance and debug macros. + +#define ASSERT_SST25XX(_test_, _msg_) CYG_ASSERT(_test_, "FAIL (SST25XX) : " _msg_) +#define TRACE_SST25XX(_msg_, _args_...) if (dev->pf) dev->pf ("SST25XX : " _msg_, ##_args_) + +//============================================================================= +// Define SST25VFxxx SPI protocol. +//============================================================================= + +typedef enum sst25xx_cmd { + SST25XX_CMD_WREN = 0x06, // Write enable. + SST25XX_CMD_WDRI = 0x04, // Write disable. + SST25XX_CMD_RDJID = 0x9F, // Read JEDEC identification. + SST25XX_CMD_RDID = 0x90, // Read Manufacturer / Device identification. + SST25XX_CMD_RDSR = 0x05, // Read status register. + SST25XX_CMD_WRSR = 0x01, // Write status register. + SST25XX_CMD_READ = 0x03, // Read data + SST25XX_CMD_FREAD = 0x0B, // Read data (fast). + SST25XX_CMD_BP = 0x02, // Byte program. + SST25XX_CMD_AAI = 0xAD, // Word program (with address increment). + SST25XX_CMD_SE_4K = 0x20, // 4K sector erase. + SST25XX_CMD_SE_32K = 0x52, // 32K sector erase. + SST25XX_CMD_SE_64K = 0xD8, // 64K sector erase. + SST25XX_CMD_BE = 0xC7, // Chip erase. +} sst25xx_cmd; + +// Status register bitfields. +#define SST25XX_STATUS_BSY 0x01 /* Operation in progress. */ +#define SST25XX_STATUS_WEL 0x02 /* Write enable latch. */ +#define SST25XX_STATUS_BP0 0x04 /* Block Write Protect 0. */ +#define SST25XX_STATUS_BP1 0x08 /* Block Write Protect 1. */ +#define SST25XX_STATUS_BP2 0x10 /* Block Write Protect 2. */ +#define SST25XX_STATUS_BP3 0x20 /* Block Write Protect 3. */ +#define SST25XX_STATUS_AAI 0x40 /* Auto Address Increment Programming Status */ +#define SST25XX_STATUS_SPRL 0x80 /* Sector Protect Register Bit Lock. */ + +#define SST25XX_LOCK_BITS ( SST25XX_STATUS_BP0 | SST25XX_STATUS_BP1 | \ + SST25XX_STATUS_BP2 | SST25XX_STATUS_BP3 ) + +#define SST25XX_MEMORY_ID 0x25 + +// A few helper constants +#ifndef SZ_1K +# define SZ_1K 0x00000400 +# define SZ_2K 0x00000800 +# define SZ_4K 0x00001000 +# define SZ_8K 0x00002000 +# define SZ_16K 0x00004000 +# define SZ_32K 0x00008000 +# define SZ_64K 0x00010000 +#endif + +// Select read OPCODE +#if defined(CYGPKG_DEVS_FLASH_SPI_SST25XX_READ_MODE_SLOW) +# define SST25XX_CMD_READ_LEN 4 +# define SST25XX_CMD_READ_OPCODE SST25XX_CMD_READ +#elif defined(CYGPKG_DEVS_FLASH_SPI_SST25XX_READ_MODE_FAST) +# define SST25XX_CMD_READ_LEN 5 +# define SST25XX_CMD_READ_OPCODE SST25XX_CMD_FREAD +#endif + +// Select sector size +#if CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE == SZ_64K +# define SST25XX_CMD_SE SST25XX_CMD_SE_64K +#elif CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE == SZ_32K +# define SST25XX_CMD_SE SST25XX_CMD_SE_32K +#elif CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE == SZ_4K +# define SST25XX_CMD_SE SST25XX_CMD_SE_4K +#endif + +//============================================================================= +// Array containing a list of supported devices. This allows the device +// parameters to be dynamically detected on initialization. +//============================================================================= + +typedef struct sst25xx_params { + cyg_uint16 sector_count[4]; // Number of sectors on device. + cyg_uint32 sector_size[4]; // Supported sector size(s) in Byte + cyg_uint32 jedec_id; // 3 byte JEDEC identifier for this device. +} sst25xx_params; + + +static const sst25xx_params sst25xx_supported_devices [] = { + // Some Silicon Storage Technology parts. + // Note1: Some part do not support the Read Jedec ID Opcode, instead, + // the Read ID Opcode is used which is backward compatible with all + // parts + // Note2: Not all parts can support sector size of 4, 32 or 64 KBytes + { // Support for SST 64 MBit devices (SST25VF064C). + sector_count : {2048, 256, 128, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf254B + }, + { // Support for SST 32 MBit devices (SST25VF032B). + sector_count : {1024, 128, 64, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf254a + }, + { // Support for SST 16 MBit devices (SST25VF016B). + sector_count : {512, 64, 32, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf2541 + }, + { // Support for SST 8 MBit devices (SST25VF080B). + sector_count : {256, 32, 16, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf258E + }, + { // Support for SST 4 MBit devices (SST25VF040B). + sector_count : {128, 16, 8, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf258D + }, + { // Support for SST 2 MBit devices (SST25VF020B). + sector_count : {64, 8, 4, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf258C + }, + { // Support for SST 2 MBit devices (SST25LF020A). + sector_count : {64, 8, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + // Constructed Jedec ID from ID (0xBF43) + jedec_id : 0x00bf2543 + }, + { // Support for SST 1 MBit devices (SST25VF010A). + sector_count : {32, 4, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + // Constructed Jedec ID from ID (0xBF49) + jedec_id : 0x00bf2549 + }, + { // Support for SST 512 KBit devices (SST25VF512A). + sector_count : {16, 2, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + // Constructed Jedec ID from ID (0xBF48) + jedec_id : 0x00bf2548 + }, + { // Support for SST 512 KBit devices (SST25WF512). + sector_count : {16, 2, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + jedec_id : 0x00bf2501 + }, + { // Support for SST 1 MBit devices (SST25WF010). + sector_count : {32, 4, 0}, + sector_size : {SZ_4K, SZ_32K, 0}, + jedec_id : 0x00bf2502 + }, + { // Support for SST 2 MBit devices (SST25WF020). + sector_count : {64, 8, 4}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf2503 + }, + { // Support for SST 4 MBit devices (SST25WF040). + sector_count : {128, 16, 8, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf2504 + }, + { // Support for SST 8 MBit devices (SST25WF080). + sector_count : {256, 32, 16, 0}, + sector_size : {SZ_4K, SZ_32K, SZ_64K, 0}, + jedec_id : 0x00bf2505 + }, + { // Null terminating entry. + sector_count : {0}, + sector_size : {0}, + jedec_id : 0 + } +}; + +//============================================================================= +// Utility functions for address calculations. +//============================================================================= + +//----------------------------------------------------------------------------- +// Strips out any device address offset to give address within device. + +static cyg_bool +sst25xx_to_local_addr(struct cyg_flash_dev *dev, cyg_flashaddr_t * addr) +{ + cyg_bool retval = false; + + // Range check address before modifying it. + if ((*addr >= dev->start) && (*addr <= dev->end)) { + *addr -= dev->start; + retval = true; + } + return retval; +} + +//============================================================================= +// Wrapper functions for various SPI transactions. +//============================================================================= + +//----------------------------------------------------------------------------- +// Read back the 3-byte JEDEC ID, returning it as a 32-bit integer. +// This function is called during flash initialization, which can often be +// called from the startup/idle thread. This means that we should always use +// SPI polled mode in order to prevent the thread from attempting to sleep. + +#if defined(CYGPKG_DEVS_FLASH_SPI_SST25XX_SUPPORT_JEDECID) + +static inline cyg_uint32 +sst25xx_spi_rdid(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { SST25XX_CMD_RDJID, 0x0, 0x0, 0x0 }; + cyg_uint8 rx_buf[4]; + cyg_uint32 retval = 0; + + // Carry out SPI transfer. + cyg_spi_transfer(spi_device, true, 4, tx_buf, rx_buf); + + // Convert 3-byte ID to 32-bit integer. + retval |= ((cyg_uint32)rx_buf[1]) << 16; + retval |= ((cyg_uint32)rx_buf[2]) << 8; + retval |= ((cyg_uint32)rx_buf[3]); + + return retval; +} + +#else + +static inline cyg_uint32 +sst25xx_spi_rdid(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[6] = { SST25XX_CMD_RDID, 0x0, 0x0, 0x0, 0x0, 0x0 }; + cyg_uint8 rx_buf[6]; + cyg_uint32 retval = 0; + + // Carry out SPI transfer. + cyg_spi_transfer(spi_device, true, 6, tx_buf, rx_buf); + + // Convert 2-byte ID to 32-bit Jedec ID. + retval |= ((cyg_uint32)rx_buf[4]) << 16; + retval |= (SST25XX_MEMORY_ID << 8); + retval |= ((cyg_uint32)rx_buf[5]); + + return retval; +} + +#endif + +//----------------------------------------------------------------------------- +// Send write enable command. + +static inline void +sst25xx_spi_wren(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[1] = { SST25XX_CMD_WREN }; + cyg_spi_transfer(spi_device, SST25XX_POLLED, 1, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Send write disable command. + +static inline void +sst25xx_spi_wrdis(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[1] = { SST25XX_CMD_WDRI }; + cyg_spi_transfer(spi_device, SST25XX_POLLED, 1, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Send sector erase command. The address parameter is a device local address +// within the sector to be erased. + +static inline void +sst25xx_spi_se(struct cyg_flash_dev *dev, cyg_flashaddr_t addr) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + cyg_uint8 tx_buf[4] = { SST25XX_CMD_SE, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + cyg_spi_transfer(spi_device, SST25XX_POLLED, 4, tx_buf, NULL); +} + +//----------------------------------------------------------------------------- +// Read and return the 8-bit device status register. + +static inline cyg_uint8 +sst25xx_spi_rdsr(struct cyg_flash_dev *dev) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[2] = { SST25XX_CMD_RDSR, 0 }; + cyg_uint8 rx_buf[2]; + + // Carry out SPI transfer and return the status byte. + cyg_spi_transfer(spi_device, SST25XX_POLLED, 2, tx_buf, rx_buf); + + return rx_buf[1]; +} + +//----------------------------------------------------------------------------- +// Program a single byte. + +static inline void +sst25xx_spi_pbyte(struct cyg_flash_dev *dev, cyg_flashaddr_t addr, + cyg_uint8 *wbuf) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { SST25XX_CMD_BP, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + + // Implement the program operation as a multistage SPI transaction. + cyg_spi_transaction_begin(spi_device); + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, 4, tx_buf, NULL, + false); + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, 1, wbuf, NULL, + false); + cyg_spi_transaction_end(spi_device); +} + +//----------------------------------------------------------------------------- +// Program word with automatic address increment + +static inline void +sst25xx_spi_pword(struct cyg_flash_dev *dev, cyg_flashaddr_t addr, + cyg_uint8 *wbuf, cyg_bool first) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[4] = { SST25XX_CMD_AAI, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr) + }; + + // Implement the program operation as a multistage SPI transaction. + cyg_spi_transaction_begin(spi_device); + // Only convey the address with the first transaction. In the following + // transfers, address will be incremented internally by the SPI flash + if (first == true) { + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, 4, tx_buf, + NULL, false); + } else { + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, 1, tx_buf, + NULL, false); + } + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, 2, wbuf, NULL, + false); + cyg_spi_transaction_end(spi_device); +} + +//----------------------------------------------------------------------------- +// Implement reads to the specified buffer. + +static inline void +sst25xx_spi_read(struct cyg_flash_dev *dev, cyg_flashaddr_t addr, + cyg_uint8 *rbuf, cyg_uint32 rbuf_len) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + const cyg_uint8 tx_buf[5] = { SST25XX_CMD_READ_OPCODE, + (cyg_uint8)(addr >> 16), (cyg_uint8)(addr >> 8), (cyg_uint8)(addr), 0 + }; + + // Implement the read operation as a multistage SPI transaction. + cyg_spi_transaction_begin(spi_device); + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, + SST25XX_CMD_READ_LEN, tx_buf, NULL, false); + cyg_spi_transaction_transfer(spi_device, SST25XX_POLLED, rbuf_len, NULL, + rbuf, false); + cyg_spi_transaction_end(spi_device); +} + + +//============================================================================= +// Standard Flash device API. All the following functions assume that a valid +// SPI device handle is passed in the 'priv' reference of the flash device +// data structure. +//============================================================================= + +//----------------------------------------------------------------------------- +// Initialize the SPI flash, reading back the flash parameters. + +static int +sst25xx_init(struct cyg_flash_dev *dev) +{ + sst25xx_params *dev_params = (sst25xx_params *) sst25xx_supported_devices; + cyg_uint32 device_id; + cyg_uint8 i = 0; + int retval = FLASH_ERR_INVALID; + + // Find the device in the supported devices list. + device_id = sst25xx_spi_rdid(dev); + + while ((dev_params->jedec_id != 0) && (dev_params->jedec_id != device_id)) { + dev_params++; + } + + // Found supported device - update device parameters. SST25XX devices have + // a uniform sector distribution, so only 1 block info record is required. + if (dev_params->jedec_id != 0) { + + // Find out is the wanted sector size is supported by the device + while ((dev_params->sector_size[i] != + CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE) + && (dev_params->sector_size[i] != 0)) + i++; + + if (dev_params->sector_size[i] != + CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE) { + TRACE_SST25XX("Init device with JEDEC ID 0x%06X\n", + dev_params->jedec_id); + TRACE_SST25XX("SPI Flash Error, not supporting %dK sector size\n", + CYGPKG_DEVS_FLASH_SPI_SST25XX_BLOCK_SIZE); + return retval; + } + + ASSERT_SST25XX(dev->num_block_infos == 1, + "Only 1 block info record required."); + ASSERT_SST25XX(dev->block_info != NULL, + "Null pointer to block info record."); + + if ((dev->num_block_infos == 1) && (dev->block_info != NULL)) { + TRACE_SST25XX("Init device with JEDEC ID 0x%06X.\n", device_id); + dev->end = + dev->start + + ((cyg_flashaddr_t) dev_params->sector_size[i] * + (cyg_flashaddr_t) (dev_params->sector_count[i])) - 1; + + // Strictly speaking the block info fields are 'read only'. + // However, we have a legitimate reason for updating the contents + // here and can cast away the const. + ((cyg_flash_block_info_t *) dev->block_info)->block_size = + (size_t)(dev_params->sector_size[i]); + ((cyg_flash_block_info_t *) dev->block_info)->blocks = + (cyg_uint32)(dev_params->sector_count[i]); + + retval = FLASH_ERR_OK; + } + + } + return retval; +} + +//----------------------------------------------------------------------------- +// Erase a single sector of the flash. + +static int +sst25xx_erase_block(struct cyg_flash_dev *dev, cyg_flashaddr_t block_base) +{ + cyg_flashaddr_t local_base = block_base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 dev_status; + + // Fix up the block address and send the sector erase command. + if (sst25xx_to_local_addr(dev, &local_base)) { + sst25xx_spi_wren(dev); + sst25xx_spi_se(dev, local_base); + + // Spin waiting for the erase to complete. Erasing takes around + // 25 ms + do { + SST25XX_DELAY_MS(10); + dev_status = sst25xx_spi_rdsr(dev); + } while (dev_status & SST25XX_STATUS_BSY); + + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Program an arbitrary number of pages into flash and verify written data. + +static int +sst25xx_program(struct cyg_flash_dev *dev, cyg_flashaddr_t base, + const void *data, size_t len) +{ + cyg_uint8 *tx_ptr = (cyg_uint8 *)data; + cyg_flashaddr_t local_base = base; + cyg_flashaddr_t end; + size_t tx_len = len; + cyg_bool start_wxfer = true; + int retval = FLASH_ERR_OK; + + // Fix up the block address. + if (!sst25xx_to_local_addr(dev, &local_base)) { + retval = FLASH_ERR_INVALID; + goto out; + } + end = local_base + len - 1; + + // Start with a byte programming if the destination is not + // 16 bits aligned + if (local_base & (cyg_flashaddr_t) 0x1) { + sst25xx_spi_wren(dev); + sst25xx_spi_pbyte(dev, local_base, tx_ptr); + SST25XX_WAIT_CHIP_READY(dev); + sst25xx_spi_wrdis(dev); + tx_ptr += 1; + tx_len -= 1; + local_base = local_base + 1; + } + // Write word(s) + if (tx_len > 1) { + sst25xx_spi_wren(dev); + while (tx_len > 1) { + sst25xx_spi_pword(dev, local_base, tx_ptr, start_wxfer); + tx_ptr += 2; + tx_len -= 2; + start_wxfer = false; + SST25XX_WAIT_CHIP_READY(dev); + } + sst25xx_spi_wrdis(dev); + } + // Write last byte + if (tx_len) { + sst25xx_spi_wren(dev); + sst25xx_spi_pbyte(dev, end, tx_ptr); + SST25XX_WAIT_CHIP_READY(dev); + sst25xx_spi_wrdis(dev); + } + +out: + return retval; +} + +//----------------------------------------------------------------------------- +// Read back an arbitrary amount of data from flash. + +static int +sst25xx_read(struct cyg_flash_dev *dev, const cyg_flashaddr_t base, + void *data, size_t len) +{ + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + cyg_uint8 *rx_ptr = (cyg_uint8 *)data; + cyg_uint32 rx_bytes_left = (cyg_uint32)len; + cyg_uint32 rx_bytes; + + // Determine the maximum transfer size to use. + cyg_uint32 rx_block_size = + (CYGNUM_DEVS_FLASH_SPI_SST25XX_READ_BLOCK_SIZE == + 0) ? 0xFFFFFFFF : CYGNUM_DEVS_FLASH_SPI_SST25XX_READ_BLOCK_SIZE; + + // Fix up the block address and fill the read buffer. + if (sst25xx_to_local_addr(dev, &local_base)) { + while (rx_bytes_left) { + rx_bytes = + (rx_bytes_left < + rx_block_size) ? rx_bytes_left : rx_block_size; + sst25xx_spi_read(dev, local_base, rx_ptr, rx_bytes); + + // Update counters and data pointers for next read block. + rx_bytes_left -= rx_bytes; + rx_ptr += rx_bytes; + local_base += rx_bytes; + } + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Lock device + +static int +sst25xx_lock(struct cyg_flash_dev *dev, cyg_flashaddr_t base) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + const cyg_uint8 tx_buf[2] = { SST25XX_CMD_WRSR, SST25XX_LOCK_BITS }; + + if (sst25xx_to_local_addr(dev, &local_base)) { + sst25xx_spi_wren(dev); + cyg_spi_transfer(spi_device, SST25XX_POLLED, 2, tx_buf, NULL); + retval = FLASH_ERR_OK; + } + return retval; +} + +//----------------------------------------------------------------------------- +// Unlock device + +static int +sst25xx_unlock(struct cyg_flash_dev *dev, cyg_flashaddr_t base) +{ + cyg_spi_device *spi_device = (cyg_spi_device *) dev->priv; + cyg_flashaddr_t local_base = base; + int retval = FLASH_ERR_INVALID; + const cyg_uint8 tx_buf[2] = { SST25XX_CMD_WRSR, 0x0 }; + + if (sst25xx_to_local_addr(dev, &local_base)) { + sst25xx_spi_wren(dev); + cyg_spi_transfer(spi_device, SST25XX_POLLED, 2, tx_buf, NULL); + retval = FLASH_ERR_OK; + } + return retval; +} + +//============================================================================= +// Fill in the driver data structures. +//============================================================================= + +CYG_FLASH_FUNS ( + cyg_devs_flash_spi_sst25xx_funs, // Exported name of function pointers. + sst25xx_init, // Flash initialization. + cyg_flash_devfn_query_nop, // Query operations not supported. + sst25xx_erase_block, // Sector erase. + sst25xx_program, // Program multiple pages. + sst25xx_read, // Read arbitrary amount of data. + sst25xx_lock, // Locking (lock the whole device). + sst25xx_unlock +); + +//----------------------------------------------------------------------------- +// EOF sst25xx.c diff --git a/packages/devs/flash/spi/sst25xx/current/tests/flash_sst25xx_test.c b/packages/devs/flash/spi/sst25xx/current/tests/flash_sst25xx_test.c new file mode 100644 --- /dev/null +++ b/packages/devs/flash/spi/sst25xx/current/tests/flash_sst25xx_test.c @@ -0,0 +1,430 @@ +//============================================================================= +// +// flash_sst25xx_test.c +// +// SPI flash driver tests for SST25XX SPI FLASH +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak, updated for SST25xx flash +// Original(s): Chris Holgate, Christian Coutand +// Date: 2011-04-25 +// Purpose: SST25xx SPI flash driver stress tests. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include +#include // Test macros +#include // Assertion macros +#include // Diagnostic output + +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL +#include +#include + +#include +#include +#include + +// Required data structures. +#include + +#include + +#include CYGHWR_MEMORY_LAYOUT_H + +cyg_flash_info_t sst25xx_flash_info; +//----------------------------------------------------------------------------- +// Thread data structures. + +static cyg_uint32 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL / 4]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; + +//----------------------------------------------------------------------------- +// Data transfer buffers. + +//#define BUF_SIZE 1024 +#define BUF_SIZE 128 + +static cyg_uint8 wbuf [BUF_SIZE]; +static cyg_uint8 rbuf [BUF_SIZE]; + +//----------------------------------------------------------------------------- +// Print out version information. + +void do_version (void) +{ + char *version = CYGACC_CALL_IF_MONITOR_VERSION(); + if (version != NULL) diag_printf("%s", version); +#ifdef HAL_PLATFORM_CPU + diag_printf("\nPlatform: %s (%s) %s\n", + HAL_PLATFORM_BOARD, HAL_PLATFORM_CPU, HAL_PLATFORM_EXTRA); +#endif + diag_printf("RAM: %p-%p, ", + (void*)(CYGMEM_REGION_ram), + (void*)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 1)); + diag_printf("(HEAP: %p-%p)\n", + (void*)(CYGMEM_SECTION_heap1), + (void*)(CYGMEM_SECTION_heap1 + CYGMEM_SECTION_heap1_SIZE - 1)); +} + +//----------------------------------------------------------------------------- +// Run checkerboard and inverse checkerboard writes over each sector in turn. + +cyg_uint32 run_test_1 + (void) +{ + int status; + cyg_uint32 i, j; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 1 - write and verify checkerboard and inverse checkerboard.\n"); + diag_printf (" Flash device at %p, block_info at %p start = 0x%08x, blocks = %d[0x%x]\n", + &sst25xx_flash_info, + sst25xx_flash_info.block_info, sst25xx_flash_info.start, + sst25xx_flash_info.block_info->blocks, + sst25xx_flash_info.block_info->blocks); + + // Iterate over all flash sectors. + for (i = 0; i < sst25xx_flash_info.block_info->blocks; i++) { + base_addr = sst25xx_flash_info.start + + (i * sst25xx_flash_info.block_info->block_size); + if(!(i % 64)) + diag_printf("\n%5d 0x%08x: ", i, base_addr-sst25xx_flash_info.start); + diag_printf("."); + // Unlock block. + status = cyg_flash_unlock (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Set up buffer with checkerboard. + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = 0x55; + wbuf [j++] = 0xAA; + } + + // Write the checkerboard to the entire sector. + for (j = 0; j < sst25xx_flash_info.block_info->block_size ; j += BUF_SIZE) { + status = cyg_flash_program (base_addr + j, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + + // Read back the checkerboard and verify. + for (j = 0; j < sst25xx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_read (base_addr + j, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr + j, base_addr + j + BUF_SIZE - 1); + errors ++; + } + } + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Set up buffer with inverse checkerboard. + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = 0xAA; + wbuf [j++] = 0x55; + } + + // Write the checkerboard to the entire sector. + for (j = 0; j < sst25xx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_program (base_addr + j, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + + // Read back the checkerboard and verify. + for (j = 0; j < sst25xx_flash_info.block_info->block_size; j += BUF_SIZE) { + status = cyg_flash_read (base_addr + j, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr + j, base_addr + j + BUF_SIZE - 1); + errors ++; + } + } + } + diag_printf("\n"); + return errors; +} + +//----------------------------------------------------------------------------- +// Write and verify counting sequence over all device. + +cyg_uint32 run_test_2 + (void) +{ + int status; + cyg_uint32 i, j; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 2 - write and verify counting sequence.\n"); + + // Erase all flash sectors. + diag_printf("Erase all flash sectors\n"); + for (i = 0; i < sst25xx_flash_info.block_info->blocks; i++) { + base_addr = sst25xx_flash_info.start + + (i * sst25xx_flash_info.block_info->block_size); + if(!(i % 64)) + diag_printf("\n%5d: ", i); + diag_printf("."); + + // Erase block. + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + } + diag_printf("\n"); + + // Write counting sequence. + diag_printf("Writing counting sequence\n"); + base_addr = sst25xx_flash_info.start; + for (i = 0; i < (sst25xx_flash_info.end - sst25xx_flash_info.start) / 4;) { + if(!(i % (64*1024))) + diag_printf("\n%7d: ", i); + if(!(i % (32*64))) + diag_printf("."); + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = (cyg_uint8) ((i >> 0) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 8) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 16) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 24) & 0xFF); + i++; + } + status = cyg_flash_program (base_addr, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + base_addr += BUF_SIZE; + } + diag_printf("\n"); + + // Verify counting sequence. + diag_printf("Verifying counting sequence\n"); + base_addr = sst25xx_flash_info.start; + for (i = 0; i < (sst25xx_flash_info.end - sst25xx_flash_info.start) / 4;) { + if(!(i % (64*1024))) + diag_printf("\n%7d: ", i); + if(!(i % (32*64))) + diag_printf("."); + for (j = 0; j < BUF_SIZE;) { + wbuf [j++] = (cyg_uint8) ((i >> 0) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 8) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 16) & 0xFF); + wbuf [j++] = (cyg_uint8) ((i >> 24) & 0xFF); + i++; + } + status = cyg_flash_read (base_addr, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr, base_addr + BUF_SIZE - 1); + errors ++; + } + base_addr += BUF_SIZE; + } + diag_printf("\n"); + return errors; +} + +//----------------------------------------------------------------------------- +// Perform non-aligned buffer read/write tests, spanning sector boundaries. + +cyg_uint32 run_test_3 + (void) +{ + int status; + cyg_uint32 i, count; + cyg_uint32 errors = 0; + cyg_flashaddr_t base_addr, err_addr; + + diag_printf ("Test 3 - test non-aligned writes and reads.\n"); + + // Fill the write buffer with a basic counting sequence. + count = 0; + for (i = 0; i < BUF_SIZE;) { + wbuf [i++] = (cyg_uint8) ((count >> 0) & 0xFF); + wbuf [i++] = (cyg_uint8) ((count >> 8) & 0xFF); + count++; + } + // Assuming 256 byte pages gives 256 possible alignments. + base_addr = sst25xx_flash_info.start + sst25xx_flash_info.block_info->block_size; + for (i = 1; i <= 256; i++) { + if(!(i % 32)) + diag_printf("\n%5d: ", i); + diag_printf("."); + + // Erase sectors either side of sector boundary. + status = cyg_flash_erase (base_addr - 1, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + status = cyg_flash_erase (base_addr, 1, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash erase error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Write data spanning sector boundary. + status = cyg_flash_program (base_addr - i, wbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash write error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + + // Verify data spanning sector boundary. + status = cyg_flash_read (base_addr - i, rbuf, BUF_SIZE, &err_addr); + if (status != FLASH_ERR_OK) { + diag_printf ("Flash read error : %s\n", cyg_flash_errmsg (status)); + errors ++; + } + else if (memcmp (rbuf, wbuf, BUF_SIZE) != 0) { + diag_printf ("Flash read data corruption (0x%08X - 0x%08X).\n", + base_addr - i, base_addr - i + BUF_SIZE - 1); + diag_printf ("Flash read data corruption %d.\n", i); + errors ++; + } + + // Use next sector boundary for next test. + base_addr += sst25xx_flash_info.block_info->block_size; + if (base_addr >= sst25xx_flash_info.end) + base_addr = sst25xx_flash_info.start + sst25xx_flash_info.block_info->block_size; + } + diag_printf("\n\n"); + return errors; +} + +//----------------------------------------------------------------------------- +// Run all SST25xx SPI interface loopback tests. + +void run_tests + (void) +{ + cyg_uint32 errors = 0; + + do_version(); + + // diag_printf ("----\nChecking for SST25xx compatible devices at %p\n", &sst25xx_flash_device); + diag_printf ("----\nChecking for SST25xx compatible devices.\n"); + cyg_flash_set_global_printf((cyg_flash_printf *)&diag_printf); + cyg_flash_init(NULL); + + cyg_flash_get_info_addr(CYGNUM_DEVS_FLASH_SPI_SST25XX_DEV0_MAP_ADDR, &sst25xx_flash_info); + + // Check that the device is intialised. + if (sst25xx_flash_info.start == sst25xx_flash_info.end) { + diag_printf ("SST25xx device not initialised.\n"); + errors ++; + goto out; + } + + // Run the tests. + errors += run_test_1 (); + errors += run_test_2 (); +// errors += run_test_3 (); + +out: + diag_printf ("----\nTests complete - detected %d errors in total.\n", errors); + if (errors == 0) + CYG_TEST_PASS_FINISH ("SST25xx driver tests ran OK."); + else + CYG_TEST_FAIL_FINISH ("SST25xx driver test FAILED."); +} + +//----------------------------------------------------------------------------- +// User startup - tests are run in their own thread. + +void cyg_user_start + (void) +{ + CYG_TEST_INIT(); + cyg_thread_create( + 10, // Arbitrary priority + (cyg_thread_entry_t*) run_tests, // Thread entry point + 0, // + "test_thread", // Thread name + (cyg_uint8*) stack, // Stack + CYGNUM_HAL_STACK_SIZE_TYPICAL, // Stack size + &thread_handle, // Thread handle + &thread_data // Thread data structure + ); + cyg_thread_resume(thread_handle); + cyg_scheduler_start(); +} + +//============================================================================= + diff --git a/packages/devs/i2c/cortexm/a2fxxx/current/ChangeLog b/packages/devs/i2c/cortexm/a2fxxx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/a2fxxx/current/ChangeLog @@ -0,0 +1,31 @@ +2011-04-01 Christophe Coutand + + * cdl/i2c_a2fxxx.cdl: + * include/i2c_a2fxxx.h: + * src/i2c_a2fxxx.c: + New package -- Smartfusion Cortex-M3 I2C driver package. + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/i2c/cortexm/a2fxxx/current/cdl/i2c_a2fxxx.cdl b/packages/devs/i2c/cortexm/a2fxxx/current/cdl/i2c_a2fxxx.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/a2fxxx/current/cdl/i2c_a2fxxx.cdl @@ -0,0 +1,113 @@ +# ==================================================================== +# +# i2c_a2fxxx.cdl +# +# eCos Smartfusion Cortex-M3 I2C configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-01-18 +# +#####DESCRIPTIONEND#### +# ==================================================================== + +cdl_package CYGPKG_DEVS_I2C_CORTEXM_A2FXXX { + display "Actel Smartfusion I2C driver" + parent CYGPKG_IO_I2C + active_if CYGPKG_IO_I2C + active_if CYGPKG_HAL_CORTEXM_A2FXXX + include_dir cyg/io + description " + This package provides a generic I2C device driver for the on-chip + I2C modules in Smartfusion Cortex-M3 microcontroller." + + compile -library=libextras.a i2c_a2fxxx.c + + cdl_option CYGNUM_HAL_CORTEXM_A2FXXX_I2C_CLK_DIV { + display "I2C channel clock divider" + flavor data + default_value { 256 } + legal_values { 8 60 120 160 192 960 224 256 960} + description " + Set the I2C clock divider." + } + + cdl_option CYGDBG_DEVS_I2C_CORTEXM_A2FXXX_TRACE { + display "Display status messages during I2C operations" + flavor bool + default_value 0 + description " + Selecting this option will cause the I2C driver to print status + messages as various I2C operations are undertaken." + } + + cdl_component CYGPKG_DEVS_I2C_CORTEXM_A2FXXX_OPTIONS { + display "I2C driver build options" + flavor none + active_if { CYGINT_DEVS_I2C_CORTEXM_A2FXXX_BUS_DEVICES > 0 } + description " + Package specific build options including control over + compiler flags used only in building the Smartfusion Cortex-M3 + I2C bus driver." + + cdl_option CYGPKG_DEVS_I2C_CORTEXM_A2FXXX_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Smartfusion Cortex-M3 I2C bus driver. These + flags are used in addition to the set of global flags." + } + + cdl_option CYGPKG_DEVS_I2C_CORTEXM_A2FXXX_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Smartfusion Cortex-M3 I2C bus driver. These + flags are removed from the set of global flags if + present." + } + } +} + +# EOF i2c_a2fxxx.cdl diff --git a/packages/devs/i2c/cortexm/a2fxxx/current/include/i2c_a2fxxx.h b/packages/devs/i2c/cortexm/a2fxxx/current/include/i2c_a2fxxx.h new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/a2fxxx/current/include/i2c_a2fxxx.h @@ -0,0 +1,128 @@ +//========================================================================== +// +// i2c_a2fxxx.h +// +// I2C driver for Smartfusion Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Original: Bart Veer +// I2C driver for motorola coldfire processor +// Description: I2C driver for Smartfusion Cortex M3 microcontroller +//####DESCRIPTIONEND#### +//========================================================================== + +#ifndef CYGONCE_I2C_A2FXXX_H +# define CYGONCE_I2C_A2FXXX_H + +# include +# include +# include + +typedef enum a2fxxx_i2c_xfer_mode { + A2FXXX_I2C_XFER_MODE_INVALID = 0x00, + A2FXXX_I2C_XFER_MODE_TX = 0x01, + A2FXXX_I2C_XFER_MODE_RX = 0x02 +} a2fxxx_i2c_xfer_mode; + +typedef struct a2fxxx_i2c_extra { + cyg_uint32 i2c_base; // I2C base address + cyg_uint32 i2c_base_bb; // I2C base address (Bit-band) + cyg_uint32 i2c_periph; // I2C peripheral bit mask + cyg_uint8 i2c_owner; // We have bus ownership + cyg_uint8 i2c_lost_arb; // Error condition leading to loss of + // bus ownership + cyg_uint8 i2c_send_nack; // As per rx send_nack argument + cyg_uint8 i2c_got_nack; // The last tx resulted in a nack + cyg_uint8 i2c_completed; // Set by DSR, checked by thread + + union { + const cyg_uint8 *i2c_tx_data; + cyg_uint8 *i2c_rx_data; + } i2c_data; // The current buffer for rx or tx + cyg_uint32 i2c_count; // Number of bytes left in buffer + a2fxxx_i2c_xfer_mode i2c_mode; // TX, RX, ... + + cyg_bool send_stop; + cyg_bool send_start; + cyg_uint8 slave_addr; + cyg_drv_mutex_t i2c_lock; // For synchronizing between DSR and + // foreground + cyg_drv_cond_t i2c_wait; + // For initializing the interrupt + cyg_handle_t i2c_interrupt_handle; + cyg_interrupt i2c_interrupt_data; + cyg_uint32 i2c_isr_id; + cyg_uint32 i2c_isr_pri; + cyg_uint32 i2c_isr_mask; +} a2fxxx_i2c_extra; + +externC void a2fxxx_i2c_init(struct cyg_i2c_bus *); +externC cyg_uint32 a2fxxx_i2c_tx(const cyg_i2c_device *, cyg_bool, + const cyg_uint8 *, cyg_uint32, cyg_bool); +externC cyg_uint32 a2fxxx_i2c_rx(const cyg_i2c_device *, cyg_bool, + cyg_uint8 *, cyg_uint32, cyg_bool, cyg_bool); +externC void a2fxxx_i2c_stop(const cyg_i2c_device *); + +# define CYG_A2FXXX_I2C_BUS( \ + _name_, \ + _init_fn_, \ + _base_, \ + _base_bb_, \ + _periph_, \ + _isr_vec_, \ + _isr_pri_) \ + static a2fxxx_i2c_extra _name_ ## _extra = { \ + .i2c_base = _base_, \ + .i2c_base_bb = _base_bb_, \ + .i2c_periph = _periph_, \ + .i2c_isr_id = _isr_vec_, \ + .i2c_isr_pri = _isr_pri_ \ + }; \ + CYG_I2C_BUS(_name_, \ + _init_fn_, \ + a2fxxx_i2c_tx, \ + a2fxxx_i2c_rx, \ + a2fxxx_i2c_stop, \ + (void*) & ( _name_ ## _extra)) ; + +#endif // CYGONCE_I2C_A2FXXX_H + +// ------------------------------------------------------------------------- +// EOF i2c_a2fxxx.h diff --git a/packages/devs/i2c/cortexm/a2fxxx/current/src/i2c_a2fxxx.c b/packages/devs/i2c/cortexm/a2fxxx/current/src/i2c_a2fxxx.c new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/a2fxxx/current/src/i2c_a2fxxx.c @@ -0,0 +1,450 @@ +//========================================================================== +// +// i2c_a2fxxx.c +// +// I2C driver for Smartfusion Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Original: Uwe Kindler, Bart Veer +// I2C driver for motorola coldfire processor +// Description: I2C driver for Smartfusion Cortex M3 microcontroller +// The RX part of the driver has not been tested. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGDBG_DEVS_I2C_CORTEXM_A2FXXX_TRACE +# define I2C_TRACE(args...) diag_printf(args) +#else +# define I2C_TRACE(args...) +#endif + +#define I2C_DAT(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_DATA) +#define I2C_ADR(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_ADDR) +#define I2C_SR(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_STATUS) +#define I2C_CR(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_CTRL) +#define I2C_FREQ(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_FREQ) +#define I2C_SMBUS(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_SMBUS) +#define I2C_GLITCH(_base_) (_base_ + CYGHWR_HAL_A2FXXX_I2C_GLITCH) + +// Bit-band definition +#define I2C_CR_CR0(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 0*sizeof(cyg_uint32) ) ) +#define I2C_CR_CR1(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 1*sizeof(cyg_uint32) ) ) +#define I2C_CR_AA(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 2*sizeof(cyg_uint32) ) ) +#define I2C_CR_SI(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 3*sizeof(cyg_uint32) ) ) +#define I2C_CR_STO(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 4*sizeof(cyg_uint32) ) ) +#define I2C_CR_STA(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 5*sizeof(cyg_uint32) ) ) +#define I2C_CR_ENS1(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 6*sizeof(cyg_uint32) ) ) +#define I2C_CR_CR2(_base_) (_base_ + ( CYGHWR_HAL_A2FXXX_I2C_CTRL << 5 ) + \ + ( 7*sizeof(cyg_uint32) ) ) + +#define I2C_MTX_STATE(x) CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_##x +#define I2C_MRX_STATE(x) CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_##x + +// Divider coefficient +static const unsigned int i2c_div[] = { + 256, + 224, + 192, + 160, + 960, + 120, + 60, + 8, + 0 +}; + +static cyg_uint32 +a2fxxx_i2c_isr(cyg_vector_t vec, cyg_addrword_t data) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) data; + cyg_uint32 result = CYG_ISR_HANDLED; + cyg_uint32 sr, + dr; + cyg_uint8 tx_data = *extra->i2c_data.i2c_tx_data; + cyg_uint32 cr = 0; + + // Read the current status of the I2C + HAL_READ_UINT32(I2C_SR(extra->i2c_base), sr); + HAL_READ_UINT32(I2C_CR(extra->i2c_base), cr); + + // What to do next depends on the current transfer mode. + if (A2FXXX_I2C_XFER_MODE_TX == extra->i2c_mode) { + I2C_TRACE("I2C: TX IRQ handling -> 0x%x\n", sr); + switch (sr) { + // Start/Repeated start, write the slave address and clear the + // START and SI bits + case I2C_MTX_STATE(START): + case I2C_MTX_STATE(REPEAT_START): + HAL_WRITE_UINT32(I2C_DAT(extra->i2c_base), extra->slave_addr); + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_STA; + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + break; + // ACK is received for the address or data, keep sending + // START and SI bits + case I2C_MTX_STATE(ADDR_ACK): + case I2C_MTX_STATE(DATA_ACK): + if (0 == extra->i2c_count) { + if (extra->send_stop) { + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_STO; + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + } else { + // For repeated start, we must disable interrupt + extra->i2c_isr_mask = true; + } + // No more bytes to send. + result |= CYG_ISR_CALL_DSR; + } else { + // Send byte + HAL_WRITE_UINT32(I2C_DAT(extra->i2c_base), + (cyg_uint32)tx_data); + extra->i2c_data.i2c_tx_data += 1; + extra->i2c_count -= 1; + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + } + break; + case I2C_MTX_STATE(ARBLOST): + case I2C_MTX_STATE(DATA_NACK): + // Lost the bus, abort the transfer. count has already been + // decremented. Assume the byte did not actually arrive. + extra->i2c_count += 1; + case I2C_MTX_STATE(ADDR_NACK): + // For all error type, clear interrupt and send stop bit + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_STO; + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + extra->i2c_got_nack = 1; + result |= CYG_ISR_CALL_DSR; + break; + default: + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + return result; + } + } else if (A2FXXX_I2C_XFER_MODE_RX == extra->i2c_mode) { + I2C_TRACE("I2C: RX IRQ handling -> 0x%x\n", sr); + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_AA; + switch (sr) { + // Start/Repeated start, write the slave address and clear the + // START and SI bits + case I2C_MRX_STATE(START): + case I2C_MRX_STATE(REPEAT_START): + HAL_WRITE_UINT32(I2C_DAT(extra->i2c_base), extra->slave_addr); + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_STA; + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + break; + // ACK is received for the address + case I2C_MRX_STATE(ADDR_ACK): + if (extra->i2c_count > 1) { + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_AA; + } + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + break; + // Receive data + case I2C_MRX_STATE(DATA_ACK): + case I2C_MRX_STATE(DATA_NACK): + cr &= ~CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + if (extra->i2c_count > 2) { + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_AA; + } + if (1 == extra->i2c_count) { + if (extra->send_stop) { + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_STO; + } else { + // For repeated start, we must disable interrupt + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_SI; + extra->i2c_isr_mask = true; + } + // Received the last byte. + result |= CYG_ISR_CALL_DSR; + } + HAL_READ_UINT32(I2C_DAT(extra->i2c_base), dr); + *(extra->i2c_data.i2c_rx_data) = (cyg_uint8)dr; + extra->i2c_data.i2c_rx_data += 1; + extra->i2c_count -= 1; + break; + case I2C_MRX_STATE(ARBLOST): + case I2C_MRX_STATE(ADDR_NACK): + // Lost the bus? Maybe a spurious stop + cr |= CYGHWR_HAL_A2FXXX_I2C_CTRL_STO; + result |= CYG_ISR_CALL_DSR; + break; + default: + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + return result; + } + } else { + // Invalid state? Some kind of spurious interrupt? + // Just ignore it. + I2C_TRACE("I2C spurious interrupt\n"); + } + + HAL_WRITE_UINT32(I2C_CR(extra->i2c_base), cr); + + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + + if (extra->i2c_isr_mask) + HAL_INTERRUPT_MASK(extra->i2c_isr_id); + + return result; +} + + +static void +a2fxxx_i2c_dsr(cyg_vector_t vec, cyg_ucount32 count, cyg_addrword_t data) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) data; + extra->i2c_completed = 1; + cyg_drv_cond_signal(&(extra->i2c_wait)); +} + + +// A transfer has been started. Wait for completion +static inline void +a2fxxx_i2c_doit(a2fxxx_i2c_extra * extra) +{ + cyg_drv_mutex_lock(&(extra->i2c_lock)); + cyg_drv_dsr_lock(); + while (!extra->i2c_completed) { + cyg_drv_cond_wait(&(extra->i2c_wait)); + } + cyg_drv_dsr_unlock(); + cyg_drv_mutex_unlock(&(extra->i2c_lock)); +} + + +static inline void +a2fxxx_i2c_stopit(a2fxxx_i2c_extra * extra) +{ + extra->i2c_lost_arb = 0; + extra->i2c_owner = 0; + extra->i2c_mode = A2FXXX_I2C_XFER_MODE_INVALID; +} + + +void +a2fxxx_i2c_stop(const cyg_i2c_device * dev) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) dev->i2c_bus->i2c_extra; + a2fxxx_i2c_stopit(extra); +} + + +cyg_uint32 +a2fxxx_i2c_tx(const cyg_i2c_device * dev, cyg_bool send_start, + const cyg_uint8 *tx_data, cyg_uint32 count, cyg_bool send_stop) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) dev->i2c_bus->i2c_extra; + extra->send_stop = send_stop; + extra->send_start = send_start; + extra->i2c_count = count; + extra->slave_addr = ((dev->i2c_address << 1) | 0x00); + cyg_uint32 si = 0; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_mode = A2FXXX_I2C_XFER_MODE_TX; + + if (send_start || !extra->i2c_got_nack) { + I2C_TRACE + ("I2C: TX to %2x, data %2x, count: %4d, START flag: %s, STOP flag: %s\n", + dev->i2c_address, *tx_data, count, + (send_start == true) ? "true" : "false", + (send_stop == true) ? "true" : "false"); + extra->i2c_data.i2c_tx_data = tx_data; + HAL_READ_UINT32(I2C_CR_SI(extra->i2c_base_bb), si); + // Set start bit + HAL_WRITE_UINT32(I2C_CR_STA(extra->i2c_base_bb), + CYGHWR_HAL_A2FXXX_BITSET); + // For repeated start, we need to clear the interrupt + if (si != 0) { + HAL_WRITE_UINT32(I2C_CR_SI(extra->i2c_base_bb), + CYGHWR_HAL_A2FXXX_BITCLEAR); + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + } + // For repeated start, we need to un-mask the interrupt + if (extra->i2c_isr_mask) { + extra->i2c_isr_mask = false; + HAL_INTERRUPT_UNMASK(extra->i2c_isr_id); + } + a2fxxx_i2c_doit(extra); + } + + } + if (send_stop) { + I2C_TRACE("I2C: TX send stop\n"); + a2fxxx_i2c_stopit(extra); + } + + I2C_TRACE("I2C: TX count %d\n", extra->i2c_count); + + // tx() should return the number of bytes actually transmitted. + // ISR() increments extra->count after a failure, which leads to + // an edge condition when send_start and there is no acknowledgment + // of the address byte. + if (extra->i2c_count > count) { + return 0; + } + + return count - extra->i2c_count; +} + + +cyg_uint32 +a2fxxx_i2c_rx(const cyg_i2c_device * dev, cyg_bool send_start, + cyg_uint8 *rx_data, cyg_uint32 count, cyg_bool send_nack, + cyg_bool send_stop) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) dev->i2c_bus->i2c_extra; + extra->i2c_send_nack = send_nack; + extra->i2c_count = count; + extra->send_stop = send_stop; + extra->send_start = send_start; + extra->slave_addr = ((dev->i2c_address << 1) | 0x01); + cyg_uint32 si = 0; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_data.i2c_rx_data = rx_data; + extra->i2c_mode = A2FXXX_I2C_XFER_MODE_RX; + I2C_TRACE + ("I2C: RX to %2x, count: %4d, START flag: %s, STOP flag: %s\n", + dev->i2c_address, count, (send_start == true) ? "true" : "false", + (send_stop == true) ? "true" : "false"); + HAL_READ_UINT32(I2C_CR_SI(extra->i2c_base_bb), si); + // Set start bit + HAL_WRITE_UINT32(I2C_CR_STA(extra->i2c_base_bb), + CYGHWR_HAL_A2FXXX_BITSET); + // For repeated start, we need to clear the interrupt + if (si != 0) { + HAL_WRITE_UINT32(I2C_CR_SI(extra->i2c_base_bb), + CYGHWR_HAL_A2FXXX_BITCLEAR); + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + } + // For repeated start, we need to un-mask the interrupt + if (extra->i2c_isr_mask) { + extra->i2c_isr_mask = false; + HAL_INTERRUPT_UNMASK(extra->i2c_isr_id); + } + a2fxxx_i2c_doit(extra); + } + + if (send_stop) { + I2C_TRACE("I2C: RX send stop\n"); + a2fxxx_i2c_stopit(extra); + } + + return count - extra->i2c_count; +} + + +// ---------------------------------------------------------------------------- +// The functions needed for all I2C devices. + +void +a2fxxx_i2c_init(struct cyg_i2c_bus *bus) +{ + a2fxxx_i2c_extra *extra = (a2fxxx_i2c_extra *) bus->i2c_extra; + cyg_uint8 div = 0; +#ifdef CYGDBG_DEVS_I2C_CORTEXM_A2FXXX_TRACE + cyg_uint32 i2c_freq = + ((hal_a2fxxx_i2c_clock(extra->i2c_base) / + CYGNUM_HAL_CORTEXM_A2FXXX_I2C_CLK_DIV)); +#endif + + while ((i2c_div[div] != CYGNUM_HAL_CORTEXM_A2FXXX_I2C_CLK_DIV) && + i2c_div[div] != 0) { + div++; + } + + I2C_TRACE("\nI2C INIT, divider: %d(%d), frequency: %d\n", i2c_div[div], + div, i2c_freq); + + cyg_drv_mutex_init(&extra->i2c_lock); + cyg_drv_cond_init(&extra->i2c_wait, &extra->i2c_lock); + cyg_drv_interrupt_create(extra->i2c_isr_id, + extra->i2c_isr_pri, + (cyg_addrword_t)extra, + &a2fxxx_i2c_isr, + &a2fxxx_i2c_dsr, + &(extra->i2c_interrupt_handle), + &(extra->i2c_interrupt_data)); + cyg_drv_interrupt_attach(extra->i2c_interrupt_handle); + + // Enable I2C peripheral + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE(extra->i2c_periph); + + // Set I2C bus speed + HAL_WRITE_UINT32(I2C_CR_ENS1(extra->i2c_base_bb), + CYGHWR_HAL_A2FXXX_BITSET); + + HAL_WRITE_UINT32(I2C_CR_CR0(extra->i2c_base_bb), + ((div & 0x1) ? CYGHWR_HAL_A2FXXX_BITSET : + CYGHWR_HAL_A2FXXX_BITCLEAR)); + HAL_WRITE_UINT32(I2C_CR_CR1(extra->i2c_base_bb), + ((div & 0x2) ? CYGHWR_HAL_A2FXXX_BITSET : + CYGHWR_HAL_A2FXXX_BITCLEAR)); + HAL_WRITE_UINT32(I2C_CR_CR2(extra->i2c_base_bb), + ((div & 0x4) ? CYGHWR_HAL_A2FXXX_BITSET : + CYGHWR_HAL_A2FXXX_BITCLEAR)); + + // Interrupts can now be safely unmasked + HAL_INTERRUPT_UNMASK(extra->i2c_isr_id); +} + +//--------------------------------------------------------------------------- +// EOF i2c_a2fxxx.c diff --git a/packages/devs/i2c/cortexm/lm3s/current/ChangeLog b/packages/devs/i2c/cortexm/lm3s/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/lm3s/current/ChangeLog @@ -0,0 +1,30 @@ +2011-01-18 Christophe Coutand + + * cdl/i2c_lm3s.cdl: + * include/i2c_lm3s.h: + * src/i2c_lm3s.c: + New package -- Stellaris Cortex M3 I2C driver package. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/i2c/cortexm/lm3s/current/cdl/i2c_lm3s.cdl b/packages/devs/i2c/cortexm/lm3s/current/cdl/i2c_lm3s.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/lm3s/current/cdl/i2c_lm3s.cdl @@ -0,0 +1,113 @@ +# ==================================================================== +# +# i2c_lm3s.cdl +# +# eCos Stellaris Cortex M3 I2C configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-01-18 +# +#####DESCRIPTIONEND#### +# ==================================================================== + +cdl_package CYGPKG_DEVS_I2C_CORTEXM_LM3S { + display "I2C driver for Stellaris Cortex M3 microcontroller family" + parent CYGPKG_IO_I2C + active_if CYGPKG_IO_I2C + active_if CYGPKG_HAL_CORTEXM_LM3S + include_dir cyg/io + description " + This package provides a generic I2C device driver for the on-chip + I2C modules in Stellaris Cortex M3 microcontroller." + + compile -library=libextras.a i2c_lm3s.c + + cdl_option CYGNUM_HAL_CORTEXM_LM3S_I2C_CLK_SPEED { + display "I2C channel clock" + flavor data + default_value { 100000 } + legal_values { 100000 400000 } + description " + Set the I2C clock speed. Slow mode (100KHz) or fast mode + (400KHz)" + } + + cdl_option CYGPKG_DEVS_I2C_CORTEXM_LM3S_TRACE { + display "I2C trace" + flavor bool + default_value 0 + description " + Enable I2C transaction trace. Select to debug the driver." + } + + cdl_component CYGPKG_DEVS_I2C_CORTEXM_LM3S_OPTIONS { + display "I2C driver build options" + flavor none + active_if { CYGINT_DEVS_I2C_CORTEXM_LM3S_BUS_DEVICES > 0 } + description " + Package specific build options including control over + compiler flags used only in building the Stellaris Cortex M3 + I2C bus driver." + + cdl_option CYGPKG_DEVS_I2C_CORTEXM_LM3S_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Stellaris Cortex M3 I2C bus driver. These + flags are used in addition to the set of global flags." + } + + cdl_option CYGPKG_DEVS_I2C_CORTEXM_LM3S_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Stellaris Cortex M3 I2C bus driver. These + flags are removed from the set of global flags if + present." + } + } +} + +# EOF i2c_lm3s.cdl diff --git a/packages/devs/i2c/cortexm/lm3s/current/include/i2c_lm3s.h b/packages/devs/i2c/cortexm/lm3s/current/include/i2c_lm3s.h new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/lm3s/current/include/i2c_lm3s.h @@ -0,0 +1,124 @@ +//========================================================================== +// +// i2c_lm3s8xx.h +// +// I2C driver for Stellaris Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Original: Bart Veer +// I2C driver for motorola coldfire processor +// Description: I2C driver for Stellaris Cortex M3 microcontroller +//####DESCRIPTIONEND#### +//========================================================================== + +#ifndef CYGONCE_I2C_LM3S_H +#define CYGONCE_I2C_LM3S_H + +#include +#include +#include + +typedef enum lm3s_i2c_xfer_mode { + LM3S_I2C_XFER_MODE_INVALID = 0x00, + LM3S_I2C_XFER_MODE_TX = 0x01, + LM3S_I2C_XFER_MODE_RX = 0x02 +} lm3s_i2c_xfer_mode; + +typedef struct lm3s_i2c_extra { + cyg_uint32 i2c_base; // I2C base address + cyg_uint32 i2c_periph; // I2C peripheral bit mask + cyg_uint8 i2c_owner; // We have bus ownership + cyg_uint8 i2c_lost_arb; // Error condition leading to loss of + // bus ownership + cyg_uint8 i2c_send_nack; // As per rx send_nack argument + cyg_uint8 i2c_got_nack; // The last tx resulted in a nack + cyg_uint8 i2c_completed; // Set by DSR, checked by thread + + union { + const cyg_uint8 *i2c_tx_data; + cyg_uint8 *i2c_rx_data; + } i2c_data; // The current buffer for rx or tx + cyg_uint32 i2c_count; // Number of bytes left in buffer + lm3s_i2c_xfer_mode i2c_mode; // TX, RX, ... + + cyg_bool send_stop; + cyg_bool send_start; + cyg_drv_mutex_t i2c_lock; // For synchronizing between DSR and + // foreground + cyg_drv_cond_t i2c_wait; + // For initializing the interrupt + cyg_handle_t i2c_interrupt_handle; + cyg_interrupt i2c_interrupt_data; + cyg_uint32 i2c_isr_id; + cyg_uint32 i2c_isr_pri; +} lm3s_i2c_extra; + +externC void lm3s_i2c_init(struct cyg_i2c_bus *); +externC cyg_uint32 lm3s_i2c_tx(const cyg_i2c_device *, cyg_bool, + const cyg_uint8 *, cyg_uint32, cyg_bool); +externC cyg_uint32 lm3s_i2c_rx(const cyg_i2c_device *, cyg_bool, cyg_uint8 *, + cyg_uint32, cyg_bool, cyg_bool); +externC void lm3s_i2c_stop(const cyg_i2c_device *); + +#define CYG_LM3S_I2C_BUS( \ + _name_, \ + _init_fn_, \ + _base_, \ + _periph_, \ + _isr_vec_, \ + _isr_pri_, \ + _fdr_) \ + static lm3s_i2c_extra _name_ ## _extra = { \ + .i2c_base = _base_, \ + .i2c_periph = _periph_, \ + .i2c_isr_id = _isr_vec_, \ + .i2c_isr_pri= _isr_pri_ \ + }; \ + CYG_I2C_BUS(_name_, \ + _init_fn_, \ + lm3s_i2c_tx, \ + lm3s_i2c_rx, \ + lm3s_i2c_stop, \ + (void*) & ( _name_ ## _extra)) ; + +#endif // CYGONCE_I2C_LM3S_H + +// ------------------------------------------------------------------------- +// EOF i2c_lm3s.h diff --git a/packages/devs/i2c/cortexm/lm3s/current/src/i2c_lm3s.c b/packages/devs/i2c/cortexm/lm3s/current/src/i2c_lm3s.c new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/cortexm/lm3s/current/src/i2c_lm3s.c @@ -0,0 +1,389 @@ +//========================================================================== +// +// i2c_lm3s.c +// +// I2C driver for Stellaris Cortex M3 microcontroller +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Original: Uwe Kindler, Bart Veer +// I2C driver for motorola coldfire processor +// Description: I2C driver for Stellaris Cortex M3 microcontroller +// The RX part of the driver has not been tested. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_DEVS_I2C_CORTEXM_LM3S_TRACE +# define I2C_TRACE(args...) diag_printf(args) +#else +# define I2C_TRACE(args...) +#endif + +#define I2C_DAT(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MDR) +#define I2C_ADR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MSA) +#define I2C_SR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MCS) +#define I2C_CR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MCS) +#define I2C_MCR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MCR) +#define I2C_MTPR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MTPR) +#define I2C_MCR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MCR) +#define I2C_IMR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MIMR) +#define I2C_ICR(_extra_) (_extra_ + CYGHWR_HAL_LM3S_I2C_MICR) + +#define WAIT_BUS_READY( __sr__, __extra__ ) \ +{ \ + if (!__extra__->i2c_owner) { \ + __extra__->i2c_got_nack = 0; \ + __extra__->i2c_owner = 1; \ + HAL_READ_UINT32(I2C_SR(__extra__->i2c_base), __sr__); \ + while (__sr__ & CYGHWR_HAL_LM3S_I2C_MCS_BUSBSY) { \ + HAL_READ_UINT32(I2C_SR(__extra__->i2c_base),__sr__); \ + } \ + } \ +} + + +static cyg_uint32 +lm3s_i2c_isr(cyg_vector_t vec, cyg_addrword_t data) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) data; + cyg_uint32 sr, + dr; + cyg_uint32 result = CYG_ISR_HANDLED; + cyg_uint32 reg = CYGHWR_HAL_LM3S_I2C_MCS_RUN; + cyg_uint8 tx_data = *extra->i2c_data.i2c_tx_data; + + // Read the current status, then clear the interrupt + HAL_READ_UINT32(I2C_SR(extra->i2c_base), sr); + HAL_WRITE_UINT32(I2C_ICR(extra->i2c_base), 1); + + // What to do next depends on the current transfer mode. + if (LM3S_I2C_XFER_MODE_TX == extra->i2c_mode) { + I2C_TRACE("I2C: TX IRQ handling\n"); + if (sr & CYGHWR_HAL_LM3S_I2C_MCS_ERR) { + // Lost the bus, abort the transfer. count has already been + // decremented. Assume the byte did not actually arrive. + extra->i2c_count += 1; + // Arbitration lost, stop + if (sr & CYGHWR_HAL_LM3S_I2C_MCS_ARBLST) { + reg = CYGHWR_HAL_LM3S_I2C_MCS_STOP; + HAL_WRITE_UINT32(I2C_CR(extra->i2c_base), reg); + } + // This byte has been sent but the device cannot accept + // any more. The nack must be remembered. Otherwise if + // we got a nack for the last byte in a tx then the + // calling code will think the entire tx succeeded, + // and there will be problems if the next call is + // another tx without a repeated start. + if ((sr & CYGHWR_HAL_LM3S_I2C_MCS_ADRACK) | + (sr & CYGHWR_HAL_LM3S_I2C_MCS_DATACK)) { + extra->i2c_got_nack = 1; + } + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + I2C_TRACE("I2C TX, bus arbitration error\n"); + } else if (0 == extra->i2c_count) { + // No more bytes to send. + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } else { + // Send byte + HAL_WRITE_UINT32(I2C_DAT(extra->i2c_base), (cyg_uint32)tx_data); + extra->i2c_data.i2c_tx_data += 1; + extra->i2c_count -= 1; + // Last byte + if ((0 == extra->i2c_count) && extra->send_stop) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_STOP; + } + HAL_WRITE_UINT32(I2C_CR(extra->i2c_base), reg); + } + } else if (LM3S_I2C_XFER_MODE_RX == extra->i2c_mode) { + I2C_TRACE("I2C: RX IRQ handling\n"); + if (sr & CYGHWR_HAL_LM3S_I2C_MCS_ERR) { + // Lost the bus? Maybe a spurious stop + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } else { + if (2 == extra->i2c_count) { + // Received one, one more to go, + // and that one should be nacked. + if (!extra->i2c_send_nack) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_ACK; + } + if (extra->send_stop) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_STOP; + } + HAL_WRITE_UINT32(I2C_CR(extra->i2c_base), reg); + } else if (1 == extra->i2c_count) { + // Received the last byte. + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } + HAL_READ_UINT32(I2C_DAT(extra->i2c_base), dr); + *(extra->i2c_data.i2c_rx_data) = (cyg_uint8)dr; + extra->i2c_data.i2c_rx_data += 1; + extra->i2c_count -= 1; + } + } else { + // Invalid state? Some kind of spurious interrupt? + // Just ignore it. + I2C_TRACE("I2C spurious interrupt\n"); + } + + HAL_INTERRUPT_ACKNOWLEDGE(extra->i2c_isr_id); + + return result; +} + + +static void +lm3s_i2c_dsr(cyg_vector_t vec, cyg_ucount32 count, cyg_addrword_t data) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) data; + extra->i2c_completed = 1; + cyg_drv_cond_signal(&(extra->i2c_wait)); +} + + +// A transfer has been started. Wait for completion +static inline void +lm3s_i2c_doit(lm3s_i2c_extra * extra) +{ + cyg_drv_mutex_lock(&(extra->i2c_lock)); + cyg_drv_dsr_lock(); + while (!extra->i2c_completed) { + cyg_drv_cond_wait(&(extra->i2c_wait)); + } + cyg_drv_dsr_unlock(); + cyg_drv_mutex_unlock(&(extra->i2c_lock)); +} + + +static inline void +lm3s_i2c_stopit(lm3s_i2c_extra * extra) +{ + extra->i2c_lost_arb = 0; + extra->i2c_owner = 0; + extra->i2c_mode = LM3S_I2C_XFER_MODE_INVALID; +} + + +void +lm3s_i2c_stop(const cyg_i2c_device * dev) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) dev->i2c_bus->i2c_extra; + lm3s_i2c_stopit(extra); +} + + +static cyg_bool +lm3s_i2c_handle_xfer(lm3s_i2c_extra * extra, int address) +{ + cyg_uint32 sr; + cyg_uint8 data = *extra->i2c_data.i2c_tx_data; + cyg_uint32 reg = CYGHWR_HAL_LM3S_I2C_MCS_RUN; + + // Nothing to send or receive + if (extra->i2c_count == 0) + return 0; + + // Take the bus ownership + WAIT_BUS_READY(sr, extra); + + // This can be a start or repeated start + if (extra->send_start) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_START; + HAL_WRITE_UINT32(I2C_ADR(extra->i2c_base), address); + } + // TX transfer + if (extra->i2c_mode == LM3S_I2C_XFER_MODE_TX) { + extra->i2c_data.i2c_tx_data += 1; + extra->i2c_count -= 1; + HAL_WRITE_UINT32(I2C_DAT(extra->i2c_base), (cyg_uint32)data); + + // Single byte transfer + if (extra->send_stop && (extra->i2c_count == 0)) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_STOP; + } + } else { + // Single byte transfer, set the STOP bit + if (extra->send_stop && (extra->i2c_count == 1)) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_STOP; + } + // Do not ACK last byte per user request + if (!extra->i2c_send_nack || !(extra->i2c_count == 1)) { + reg |= CYGHWR_HAL_LM3S_I2C_MCS_ACK; + } + } + + HAL_WRITE_UINT32(I2C_CR(extra->i2c_base), reg); + + return 1; +} + + +cyg_uint32 +lm3s_i2c_tx(const cyg_i2c_device * dev, cyg_bool send_start, + const cyg_uint8 *tx_data, cyg_uint32 count, cyg_bool send_stop) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) dev->i2c_bus->i2c_extra; + extra->send_stop = send_stop; + extra->send_start = send_start; + extra->i2c_count = count; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_mode = LM3S_I2C_XFER_MODE_TX; + + if (send_start || !extra->i2c_got_nack) { + I2C_TRACE + ("I2C: TX to %2x, data %2x, count: %4d, START flag: %s\n", + dev->i2c_address, *tx_data, count, + (send_start == true) ? "true" : "false"); + extra->i2c_data.i2c_tx_data = tx_data; + if (!lm3s_i2c_handle_xfer(extra, (dev->i2c_address << 1) | 0x00)) { + return 0; + } + lm3s_i2c_doit(extra); + } + + } + if (send_stop) { + I2C_TRACE("I2C: TX send stop\n"); + lm3s_i2c_stopit(extra); + } + + I2C_TRACE("I2C: TX count %d\n", extra->i2c_count); + + // tx() should return the number of bytes actually transmitted. + // ISR() increments extra->count after a failure, which leads to + // an edge condition when send_start and there is no acknowledgment + // of the address byte. + if (extra->i2c_count > count) { + return 0; + } + + return count - extra->i2c_count; +} + + +cyg_uint32 +lm3s_i2c_rx(const cyg_i2c_device * dev, cyg_bool send_start, + cyg_uint8 *rx_data, cyg_uint32 count, cyg_bool send_nack, + cyg_bool send_stop) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) dev->i2c_bus->i2c_extra; + extra->i2c_count = count; + extra->i2c_send_nack = send_nack; + extra->send_stop = send_stop; + extra->send_start = send_start; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_data.i2c_rx_data = rx_data; + extra->i2c_mode = LM3S_I2C_XFER_MODE_RX; + I2C_TRACE("I2C: RX to %2x, count: %4d, START flag: %s\n", + dev->i2c_address, count, + (send_start == true) ? "true" : "false"); + if (!lm3s_i2c_handle_xfer(extra, (dev->i2c_address << 1) | 0x01)) { + return 0; + } + lm3s_i2c_doit(extra); + } + + if (send_stop) { + I2C_TRACE("I2C: RX send stop\n"); + lm3s_i2c_stopit(extra); + } + + return count - extra->i2c_count; +} + + +// ---------------------------------------------------------------------------- +// The functions needed for all I2C devices. + +void +lm3s_i2c_init(struct cyg_i2c_bus *bus) +{ + lm3s_i2c_extra *extra = (lm3s_i2c_extra *) bus->i2c_extra; + cyg_uint32 tpr = + ((hal_lm3s_i2c_clock() / + (20 * CYGNUM_HAL_CORTEXM_LM3S_I2C_CLK_SPEED)) - 1); + + I2C_TRACE("I2C INIT, TPR register: %d\n", tpr); + + cyg_drv_mutex_init(&extra->i2c_lock); + cyg_drv_cond_init(&extra->i2c_wait, &extra->i2c_lock); + cyg_drv_interrupt_create(extra->i2c_isr_id, + extra->i2c_isr_pri, + (cyg_addrword_t)extra, + &lm3s_i2c_isr, + &lm3s_i2c_dsr, + &(extra->i2c_interrupt_handle), + &(extra->i2c_interrupt_data)); + cyg_drv_interrupt_attach(extra->i2c_interrupt_handle); + + // Enable I2C peripheral, it is left to the variant/platform HAL to + // configure the SDA and SCL IOs. + CYGHWR_HAL_LM3S_PERIPH_SET(extra->i2c_periph, 1); + + // Enable Master mode + HAL_WRITE_UINT32(I2C_MCR(extra->i2c_base), CYGHWR_HAL_LM3S_I2C_MCR_MFE); + + // Set I2C bus speed + HAL_WRITE_UINT32(I2C_MTPR(extra->i2c_base), tpr); + + // Enable Interrupt + HAL_WRITE_UINT32(I2C_IMR(extra->i2c_base), 1); + + // Interrupts can now be safely unmasked + HAL_INTERRUPT_UNMASK(extra->i2c_isr_id); +} + +//--------------------------------------------------------------------------- +// EOF i2c_lm3s.c diff --git a/packages/devs/i2c/freescale/i2c/current/ChangeLog b/packages/devs/i2c/freescale/i2c/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/freescale/i2c/current/ChangeLog @@ -0,0 +1,39 @@ +2013-04-30 Ilija Kocho + + * src/i2c_freescale.cdl: Add requirement of CYGPKG_KERNEL. + [ Bugzilla 1001397 ] + +2011-11-20 Tomas Frydrych +2013-03-21 Mike Jones + + * cdl/i2c_freescale.cdl: + * include/i2c_freescale.h: + * src/i2c_freescale.c: + Tomas: New package -- Freescale I2C driver package. [Bugzilla 1001397] + Mike: Made adjustments to state machine behavior to prevent race conditions + that led to lockup. Debugged data rate code provided by Ilija Kocho. + Fully tested with large PMBus application and verified clock rates. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/i2c/freescale/i2c/current/cdl/i2c_freescale.cdl b/packages/devs/i2c/freescale/i2c/current/cdl/i2c_freescale.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/freescale/i2c/current/cdl/i2c_freescale.cdl @@ -0,0 +1,183 @@ +# ==================================================================== +# +# i2c_freescale.cdl +# +# eCos Freescale Kinetis and ColdFire+ I2C configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Tomas Frydrych +# Contributors: +# Date: 2011-11-20 +# +#####DESCRIPTIONEND#### +# ==================================================================== + +cdl_interface CYGINT_IO_FREESCALE_I2C_BUS { + display "Number of I2C buses" +} + +cdl_package CYGPKG_DEVS_I2C_FREESCALE_I2C { + display "Freescale I2C driver" + parent CYGPKG_IO_I2C + requires CYGPKG_IO_I2C + active_if CYGPKG_KERNEL + requires CYGPKG_HAL_CORTEXM_KINETIS + include_dir cyg/io + description " + This package provides a generic I2C device driver for the on-chip + I2C modules in Freescale Kinetis and ColdFire+ chips." + + compile -library=libextras.a i2c_freescale.c + + for { set ::bus 0 } { $::bus < 2 } { incr ::bus } { + + cdl_interface CYGINT_IO_FREESCALE_I2C[set ::bus] { + display "I2C bus [set ::bus] is present" + } + + cdl_component CYGHWR_DEVS_FREESCALE_I2C[set ::bus] { + display "I2C bus [set ::bus]" + flavor bool + description "Enable I2C bus [set ::bus]" + requires CYGPKG_DEVS_I2C_FREESCALE_I2C + active_if CYGINT_IO_FREESCALE_I2C[set ::bus] + implements CYGINT_IO_FREESCALE_I2C_BUS + default_value 0 + + cdl_component CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK { + display "Default I2C bus frequency" + flavor data + description " + The default frequency setting for I2C[set ::bus]. + If bit 31 is set then the least significant byte contains + pre-calculeted frequency divider register setting. + Otherwise other bits contain frequency setpoint in \[Hz\]." + + requires (CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK > 0 && \ + CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK <= 268435455) || \ + (CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK >= 0x80000000 && \ + CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK <= 0x800000FF) + + default_value 100000 + + cdl_option CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK_FIT { + display "Fit" + flavor data + legal_values 1 2 3 + default_value 1 + description " + For a given clock frequency there are several divider + register that fit. This option is hints on which fit to end lookup" + } + + cdl_option CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_CLOCK_AGR { + display "Aggressive clocking" + flavor data + legal_values 0 1 + default_value 0 + description " + If the setpoint bus frequency is not available, then if + this option is 1 the closest available frequency is + picked even if it overclocks. If 0 the closest available + frequency frequency not higher than setpoint is picked." + } + } + + cdl_component CYGOPT_DEVS_FREESCALE_I2C[set ::bus]_C2 { + display "C2 register options" + flavor data + calculated 0x0 | \ + CYGOPT_DEVS_FREESCALE_I2C[set ::bus]_C2_HDRS << 5 + + cdl_option CYGOPT_DEVS_FREESCALE_I2C[set ::bus]_C2_HDRS { + display "High drive select" + flavor bool + no_define + default_value 0 + } + } + + cdl_option CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_FLT { + display "Glitch filter" + flavor data + default_value 0 + legal_values { 0 to 31 } + } + } + } + + cdl_option CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE { + display "I2C trace" + flavor bool + default_value 0 + description " + Enable I2C transaction trace. Select to debug the driver." + } + + cdl_component CYGPKG_DEVS_I2C_FREESCALE_I2C_OPTIONS { + display "I2C driver build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building the Freescale I2C bus driver." + + cdl_option CYGPKG_DEVS_I2C_FREESCALE_I2C_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Freescale I2C bus driver. These + flags are used in addition to the set of global flags." + } + + cdl_option CYGPKG_DEVS_I2C_FREESCALE_I2C_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Freescale I2C bus driver. These + flags are removed from the set of global flags if + present." + } + } +} + +# EOF i2c_freescale.cdl diff --git a/packages/devs/i2c/freescale/i2c/current/include/i2c_freescale.h b/packages/devs/i2c/freescale/i2c/current/include/i2c_freescale.h new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/freescale/i2c/current/include/i2c_freescale.h @@ -0,0 +1,254 @@ +//========================================================================== +// +// i2c_freescale.h +// +// I2C driver for Freescale Kinetis and ColdFire+ microcontrollers +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Contributors: +// Date: 2011-11-20 +// Original: ccoutand +// I2C driver for Stellaris Cortex M3 microcontroller +// Description: I2C driver for Freescale Kinetis and ColdFire+ +// microcontrollers +//####DESCRIPTIONEND#### +//========================================================================== + +#ifndef CYGONCE_I2C_FREESCALE_H +#define CYGONCE_I2C_FREESCALE_H + +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +// i2c memory structure +typedef volatile struct freescale_i2c_s { + cyg_uint8 a1; + cyg_uint8 f; + cyg_uint8 c1; + cyg_uint8 s; + cyg_uint8 d; + cyg_uint8 c2; + cyg_uint8 flt; + cyg_uint8 ra; + cyg_uint8 smb; + cyg_uint8 a2; + cyg_uint8 slth; + cyg_uint8 sltl; +} freescale_i2c_t; + +// I2C register base pointers +#define FREESCALE_I2C_P(__base) ((freescale_i2c_t*)(__base)) + +// Modes +// Master write +#define FREESCALE_I2C_MODE_MW 0x0u +// Master read +#define FREESCALE_I2C_MODE_MR 0x1u + +// Bit Fields +#define FREESCALE_I2C_A1_AD_M 0xFEu +#define FREESCALE_I2C_A1_AD_S 1 +// adress register from address and mode +#define FREESCALE_I2C_A1_AD(__a, __m) \ + ((((cyg_uint8)(((cyg_uint8)(__a))<_BASE +// -Interrupt vector number and priority +// CYGNUM_DEVS_INTERRUPT_I2C<_bus_> +// CYGNUM_DEVS_FREESCALE_I2C<_bus_>_IRQ_PRIORITY +// -I2C pin configuration: +// CYGHWR_IO_I2C_FREESCALE_I2C<_bus_>_PIN_SDA +// CYGHWR_IO_I2C_FREESCALE_I2C<_bus_>_PIN_SCL +// -Clock gating +// CYGHWR_IO_FREESCALE_I2C<_bus_>_CLK + +#define CYG_FREESCALE_I2C_BUS(_bus_) \ +static const freescale_i2c_extra_hal_t cyg_i2c ## _bus_ ## _extra_hal = { \ + .pin_sda = CYGHWR_IO_I2C_FREESCALE_I2C ## _bus_ ## _PIN_SDA, \ + .pin_scl = CYGHWR_IO_I2C_FREESCALE_I2C ## _bus_ ## _PIN_SCL, \ + .clock = CYGHWR_IO_FREESCALE_I2C ## _bus_ ## _CLK \ +}; \ + \ +static freescale_i2c_extra cyg_i2c ## _bus_ ## _bus_extra = { \ + .i2c_base = CYGADDR_IO_I2C_FREESCALE_I2C ## _bus_ ## _BASE, \ + .i2c_bus_number = _bus_, \ + .i2c_delay = CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _CLOCK & 0x80000000 ? \ + CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _CLOCK : \ + FREESCALE_I2C_DELAY_CFG(1000000000 / \ + CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _CLOCK, \ + CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _CLOCK_FIT - 1, \ + CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _CLOCK_AGR), \ + .i2c_isr_id = CYGNUM_HAL_INTERRUPT_I2C ## _bus_, \ + .i2c_isr_pri = CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _IRQ_PRIORITY, \ + .c2_cfg = CYGOPT_DEVS_FREESCALE_I2C ## _bus_ ## _C2, \ + .flt_cfg = CYGNUM_DEVS_FREESCALE_I2C ## _bus_ ## _FLT, \ + .hal_p = &(cyg_i2c ## _bus_ ## _extra_hal) \ +}; \ + \ +CYG_I2C_BUS(cyg_i2c ## _bus_ ## _bus, \ + freescale_i2c_init, \ + freescale_i2c_tx, \ + freescale_i2c_rx, \ + freescale_i2c_stop, \ + (void*) & (cyg_i2c ## _bus_ ## _bus_extra)) ; + +#endif // CYGONCE_I2C_FREESCALE_BUSES_INL + +//----------------------------------------------------------------------------- +// I2C bus instances +// +#ifdef CYGHWR_DEVS_FREESCALE_I2C0 +CYG_FREESCALE_I2C_BUS(0); +#endif + +#ifdef CYGHWR_DEVS_FREESCALE_I2C1 +CYG_FREESCALE_I2C_BUS(1); +#endif +// ------------------------------------------------------------------------- +// EOF i2c_freescale_buses.inl diff --git a/packages/devs/i2c/freescale/i2c/current/src/i2c_freescale.c b/packages/devs/i2c/freescale/i2c/current/src/i2c_freescale.c new file mode 100644 --- /dev/null +++ b/packages/devs/i2c/freescale/i2c/current/src/i2c_freescale.c @@ -0,0 +1,839 @@ +//========================================================================== +// +// i2c_freescale.c +// +// I2C driver for Freescale Kinetis and ColdFire+ microcontrollers +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Contributors: Mike Jones +// Ilija Kocho +// Date: 2011-11-20 +// Original: ccoutand +// I2C driver for Stellaris Cortex M3 microcontroller +// Description: Driver for Freescale I2C controller +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include + +#include +#include +#include +#define CYGBLD_I2C_DEVICE_CONST +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE +# define I2C_TRACE(args...) diag_printf(args) +#else +# define I2C_TRACE(args...) +#endif + +#ifndef CYGNUM_DEV_I2C_SPIN_PRIO +#define CYGNUM_DEV_I2C_SPIN_PRIO (CYGNUM_KERNEL_SCHED_PRIORITIES - 2) +#endif + +#ifndef CYGNUM_DEV_I2C_SPIN_TIMEOUT +#define CYGNUM_DEV_I2C_SPIN_TIMEOUT 30 +#endif + +#define CYGOPT_FREESCALE_I2C_FREQ_FAST_EXIT 0 + +#define I2C_STOP(__i2c) \ +CYG_MACRO_START \ + __i2c->c1 &= ~FREESCALE_I2C_C1_MST_M; \ + __i2c->c1 &= ~FREESCALE_I2C_C1_TX_M; \ +CYG_MACRO_END + +#define I2C_START(__i2c) \ +CYG_MACRO_START \ + __i2c->c1 |= FREESCALE_I2C_C1_TX_M; \ + __i2c->c1 |= FREESCALE_I2C_C1_MST_M; \ +CYG_MACRO_END + +#define I2C_REPEAT_START(__i2c) \ +CYG_MACRO_START \ + __i2c->c1 |= FREESCALE_I2C_C1_RSTA_M; \ +CYG_MACRO_END + + +#define I2C_CLEAR(__i2c, __mask) \ +CYG_MACRO_START \ + __i2c->s |= __mask; \ +CYG_MACRO_END + +// Clock rate calculator + +#define I2C_DEBUG_CLOCK 0 + +#define I2C_CLOCK_NORM 1000 +#define I2C_CLOCK_NORMLL 1000LL + +// dev_i2c_freescale_freq_table[] entries and +// dev_i2c_freescale_frequency_entry_t (typedef of cyg_uint16 or cyg_uint32) +// type are provided be provided by HAL +static const dev_i2c_freescale_frequency_entry_t dev_i2c_freescale_freq_table[] + = { CYGHWR_IO_FREESCALE_I2C_FREQUENCY_TABLE }; +static const cyg_uint32 dev_i2c_freescale_freq_table_size = + sizeof(dev_i2c_freescale_freq_table) / + sizeof(dev_i2c_freescale_freq_table[0]); + +// Frequency divider setting calculator +// Calculate F register setting. The input parameter period_sp is encodded: +// If most significant bit (31) is 1, than the least significant byte contains +// explicit F refister value. If most significant bit (31) is 0 then: +// - bits 27-0: clock period in [ns]; +// - bits 30,29: fit (see CDL) +// - bit 28: +// 1) aggressive look up - closest matching period +// 0) consrvative look up - closest matching period not shorter than setpoint + +static cyg_uint8 +freescale_i2c_freq_div_calc(cyg_uint32 period_sp) +{ + cyg_uint32 sys_clk_per; + cyg_uint32 period, the_period = 0xffffffff, agr; + cyg_uint32 mult, the_mult = 4; + cyg_int32 icr_i, the_icr_i = dev_i2c_freescale_freq_table_size - 1; + cyg_uint16 icr; + cyg_uint8 i2cf = 0xff; + + cyg_uint32 fit; + +#if I2C_DEBUG_CLOCK + I2C_TRACE("Period setpont: 0x%08x\n", period_sp); +#endif + // Extract period and fit + fit = period_sp >> FREESCALE_I2C_DELAY_FIT_S; + agr = FREEDCALE_I2C_DELAY_IS_AGRESIVE(period_sp); + period_sp &= FREESCALE_I2C_DELAY_M; + sys_clk_per = ((1000000000 * I2C_CLOCK_NORMLL) / CYGHWR_IO_I2C_FREESCALE_I2C_CLOCK); + period_sp *= I2C_CLOCK_NORM; + +#if I2C_DEBUG_CLOCK + I2C_TRACE("Period %d.%d[ns] [0x%08x] fit %d agr 0x%08x\n", period_sp/I2C_CLOCK_NORM, + period_sp%I2C_CLOCK_NORM, period_sp, fit, agr); +#endif + + for(mult = 4; mult > 0; mult /= 2) { + +#if I2C_DEBUG_CLOCK >= 3 + I2C_TRACE("mult = %d icr_n=%d\n", mult, dev_i2c_freescale_freq_table_size); +#endif + + for(icr_i = dev_i2c_freescale_freq_table_size - 1; icr_i >= 0; icr_i--) { + icr = dev_i2c_freescale_freq_table[icr_i]; + period = sys_clk_per * (icr * mult); + +#if I2C_DEBUG_CLOCK >= 3 + I2C_TRACE("sys_clk_per=%d the_mult = %d icr[0x%02x]=%d, period = %d.%d (sp = %d.%d)\n", + sys_clk_per, the_mult, icr_i, icr, + period/I2C_CLOCK_NORM, period%I2C_CLOCK_NORM, + period_sp/I2C_CLOCK_NORM, period_sp%I2C_CLOCK_NORM); +#endif + + if (period == period_sp) { + + I2C_TRACE ("FreqDiv EQ: [0x%02x] the_mult = %d, icr[0x%02x] = %d\n", + i2cf, the_mult, the_icr_i, dev_i2c_freescale_freq_table[the_icr_i]); + + return FREESCALE_I2C_F(mult / 2, icr_i); + } else if (period < period_sp) { + if(0 == fit) { + if(agr && ((period_sp - period) < period - the_period )) { + the_mult = mult; + the_icr_i = icr_i; + the_period = period; + } + i2cf = FREESCALE_I2C_F(the_mult / 2, the_icr_i); + +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + I2C_TRACE ("FreqDiv LT: [0x%02x] the_mult = %d, icr[0x%02x] = %d\n", + i2cf, the_mult, the_icr_i, dev_i2c_freescale_freq_table[the_icr_i]); + icr = dev_i2c_freescale_freq_table[the_icr_i]; + period = (sys_clk_per * (icr * the_mult)); + I2C_TRACE (" Actual: period = %d.%d[ns], frequency = %d[Hz]\n", + period/I2C_CLOCK_NORM, period%I2C_CLOCK_NORM, + (cyg_uint32)((1000000000 * I2C_CLOCK_NORMLL) / period)); +#endif + + return i2cf; + break; + } else { + +#if I2C_DEBUG_CLOCK >= 1 + icr = dev_i2c_freescale_freq_table[the_icr_i]; + period = (sys_clk_per * (icr * mult)); + + I2C_TRACE (" Fits left %d: period = %d.%d[ns], frequency = %d[Hz]\n", + fit, period/I2C_CLOCK_NORM, period%I2C_CLOCK_NORM, + (cyg_uint32)((1000000000 * I2C_CLOCK_NORMLL) / period)); +#endif + + fit --; + break; + } + } else { // period > period_sp + the_period = period; + the_mult = mult; + the_icr_i = icr_i; + i2cf = FREESCALE_I2C_F(mult / 2, the_icr_i); + +#if I2C_DEBUG_CLOCK >= 2 + I2C_TRACE ("FreqDiv FIT %d: [0x%02x] the_mult = %d, icr[0x%02x] = %d\n", 3-fit, + i2cf, the_mult, the_icr_i, dev_i2c_freescale_freq_table[the_icr_i]); +#endif + + } + } + } + + I2C_TRACE ("FreqDiv EX: [0x%02x] the_mult = %d, icr[0x%02x] = %d\n", + i2cf, the_mult, the_icr_i, dev_i2c_freescale_freq_table[the_icr_i]); + +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + icr = dev_i2c_freescale_freq_table[the_icr_i]; + period = (sys_clk_per * (icr * the_mult)); + I2C_TRACE (" Actual: period = %d[ns], frequency = %d[Hz]\n", + period, (cyg_uint32)((1000000000 * I2C_CLOCK_NORMLL) / period)); +#endif + + return i2cf; +} + +// Set frequency divider. +// If frequency divider setting is cached simply return the value else +// calculate one by means of freescale_i2c_freq_div_calc() and cache it. + +static inline cyg_uint8 +freescale_i2c_freq_div(cyg_uint32 *period_p) +{ + cyg_uint32 period; + cyg_uint8 freq; + + if((period = *period_p) & FREESCALE_I2C_DELAY_F_IS_CACHED_M) { +#if I2C_DEBUG_CLOCK + I2C_TRACE("Cached/pre-calculated divider setting: 0x%08x\n", period); +#endif + freq = period & FREESCALE_I2C_DELAY_F_CACHE_M; + } else { + freq = freescale_i2c_freq_div_calc(period); + *period_p = freq | FREESCALE_I2C_DELAY_F_IS_CACHED_M; + } + return freq; +} + +// Wait untill the bus is free or timeout expires +// This function performes busy-wait In order to prevent blocking +// other processes it lowers thread priority prior to entering the spin loop. +// After the spin loop the original thread priority is restored. + +static bool +wait_bus_ready(freescale_i2c_extra* extra) +{ + freescale_i2c_t *i2c_s; + bool bus_ready; + cyg_priority_t i2c_prio; + cyg_tick_count_t time; + cyg_handle_t i2c_thread; +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + cyg_priority_t i2c_cur_prio; + cyg_uint8 __sr; + +#endif + + if (!extra->i2c_owner) { + I2C_TRACE ("I2C bus ready: 0:\n"); + i2c_s = FREESCALE_I2C_P (extra->i2c_base); + if(( +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + __sr = +#endif + i2c_s->s) & FREESCALE_I2C_S_BUSY_M) + { + bus_ready = false; + // Decrease priority before busy-waiting. + i2c_thread = cyg_thread_self(); + i2c_prio = cyg_thread_get_priority(i2c_thread); +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + i2c_cur_prio = cyg_thread_get_current_priority(i2c_thread); +#endif + I2C_TRACE ("I2C bus ready: 1: priority %d, current priority %d\n", + i2c_prio, i2c_cur_prio); + // FIXME: What about current thread priority? + I2C_TRACE ("I2C bus ready: 2: sr 0x%02x, cr 0x%02x\n", __sr, i2c_s->c1); + + cyg_thread_set_priority(i2c_thread, CYGNUM_DEV_I2C_SPIN_PRIO); + + I2C_TRACE ("I2C bus ready: 3: priority %d, current priority %d\n", + cyg_thread_get_priority(i2c_thread), + cyg_thread_get_current_priority(i2c_thread)); + for (time = cyg_current_time(); + (cyg_current_time() - time) < CYGNUM_DEV_I2C_SPIN_TIMEOUT;) + { + if(!(i2c_s->s & FREESCALE_I2C_S_BUSY_M)) { + bus_ready = true; + break; + } + } + cyg_thread_set_priority(i2c_thread, i2c_prio); + + I2C_TRACE ("I2C bus ready: 4: priority %d, current priority %d\n", + cyg_thread_get_priority(i2c_thread), + cyg_thread_get_current_priority(i2c_thread)); + } else { + bus_ready = true; + } + if(bus_ready) { + extra->i2c_got_nack = 0; + extra->i2c_owner = 1; + } + } else { + bus_ready = true; + } + + I2C_TRACE ("I2C bus ready: Z bus_ready = %d\n", bus_ready); + + return bus_ready; +} + +// Interrupt service routine +static cyg_uint32 +freescale_i2c_isr(cyg_vector_t vec, cyg_addrword_t data) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) data; + freescale_i2c_t *i2c_s = FREESCALE_I2C_P (extra->i2c_base); + cyg_uint8 sr; + cyg_uint32 result = CYG_ISR_HANDLED; + cyg_uint8 tx_data = *extra->i2c_data.i2c_tx_data; + + I2C_TRACE ("I2C ISR\n"); + + // Read current status + sr = i2c_s->s; + + // clear interrupt + i2c_s->s |= FREESCALE_I2C_S_IICIF_M; + + if (FREESCALE_I2C_XFER_MODE_TX == extra->i2c_mode) { + I2C_TRACE("I2C: TX IRQ handling, sr 0x%02x\n", sr); + + // check for error conditions + if (sr & FREESCALE_I2C_S_ARBL_M) { + /* + * Arbitration lost + * + * Lost the bus, abort the transfer. count has already been + * decremented. Assume the byte did not actually arrive. + */ + extra->i2c_count += 1; + + I2C_STOP(i2c_s); + I2C_CLEAR(i2c_s, FREESCALE_I2C_S_ARBL_M); + + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + I2C_TRACE("I2C: TX, bus arbitration error\n"); + } else if (sr & FREESCALE_I2C_S_RXAK_M) { + /* + * NACK + * Transfer failed. Handled upon exit from the dsr. + */ + extra->i2c_got_nack = 1; + I2C_STOP(i2c_s); + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + I2C_TRACE("I2C: TX, got NACK\n"); + } else if (0 == extra->i2c_count) { + // No more bytes to send. + I2C_TRACE("I2C: TX, no more bytes\n"); + + // Last byte + if ((0 == extra->i2c_count) && extra->send_stop) + I2C_STOP(i2c_s); + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } else { + // Send byte + I2C_TRACE("I2C: TX, sending 0x%02x\n", tx_data); + i2c_s->d = tx_data; + extra->i2c_data.i2c_tx_data += 1; + extra->i2c_count -= 1; + + } + } else if (FREESCALE_I2C_XFER_MODE_RX == extra->i2c_mode) { + I2C_TRACE("I2C: RX IRQ handling, sr 0x%02x\n", sr); + + /* + * check the actual bus mode, RX transaction starts with initial TX + * to transmit the slave address. + */ + if (i2c_s->c1 & FREESCALE_I2C_C1_TX_M) { + /* + * In TX mode, should be getting an acknowledgement of the slave + * address write + */ + if (sr & FREESCALE_I2C_S_ARBL_M) { + // Arbitration lost, stop + I2C_STOP(i2c_s); + I2C_CLEAR(i2c_s, FREESCALE_I2C_S_ARBL_M); + + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + I2C_TRACE("I2C: RX, initial bus arbitration error\n"); + } else if (sr & FREESCALE_I2C_S_RXAK_M) { + // nack + extra->i2c_got_nack = 1; + I2C_STOP(i2c_s); + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + I2C_TRACE("I2C: RX, got initial NACK\n"); + } else { + /* + * The slave address was transmitted successfully, now switch + * the bus to RX + */ + volatile cyg_uint8 dummy_read __attribute__((unused)); + + I2C_TRACE("I2C: RX, switching bus to RX\n"); + i2c_s->c1 &= ~FREESCALE_I2C_C1_TX_M; + + // ACK if more bytes + if (extra->i2c_count != 1) + i2c_s->c1 &= ~FREESCALE_I2C_C1_TXAK_M; + // NACK if asked to + else if (extra->i2c_send_nack) + i2c_s->c1 |= FREESCALE_I2C_C1_TXAK_M; + // ACK if last btye but not asked to NACK, + // meaning there will be another read + else + i2c_s->c1 &= ~FREESCALE_I2C_C1_TXAK_M; + + // do a dummy read to get things going + dummy_read = i2c_s->d; + } + } + /* + * Already in RX mode ... + */ + else if (sr & FREESCALE_I2C_S_ARBL_M) { + // Lost the bus? Maybe a spurious stop + I2C_CLEAR(i2c_s, FREESCALE_I2C_S_ARBL_M); + I2C_TRACE("I2C: RX, bus arbitration error\n"); + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } else { + I2C_TRACE("I2C: RX, got some data, count %d\n", extra->i2c_count); + if (2 == extra->i2c_count) { + // One more byte to go, and it should be NACKed. + I2C_TRACE("I2C: RX, penultimate byte\n"); + if (extra->i2c_send_nack) + i2c_s->c1 |= FREESCALE_I2C_C1_TXAK_M; + } else if (1 == extra->i2c_count) { + // Received the last byte. + I2C_TRACE("I2C: RX, last byte\n"); + + if (extra->send_stop) + I2C_STOP(i2c_s); + + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } else if (0 == extra->i2c_count) { + /* + * Data beyond last byte ... this should never happen, but see + * the comment in freescale_i2c_handle_xfer() + */ + CYG_FAIL("I2C: RX sender sending data beyond last byte\n"); + + // Forcefully stop the bus and quit + I2C_STOP(i2c_s); + + result = CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + + HAL_INTERRUPT_ACKNOWLEDGE (extra->i2c_isr_id); + + return result; + } + + // extract data + *(extra->i2c_data.i2c_rx_data) = i2c_s->d; + I2C_TRACE("I2C: RX, data: 0x%02x\n", + *(extra->i2c_data.i2c_rx_data)); + + extra->i2c_data.i2c_rx_data += 1; + extra->i2c_count -= 1; + } + } else { + /* + * Invalid state? Some kind of spurious interrupt? Ignore it. + */ + I2C_TRACE("I2C spurious interrupt\n"); + } + + HAL_INTERRUPT_ACKNOWLEDGE (extra->i2c_isr_id); + + return result; +} + +// Deferred interrupt service routine +static void +freescale_i2c_dsr(cyg_vector_t vec, cyg_ucount32 count, cyg_addrword_t data) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) data; + + I2C_TRACE ("I2C DSR -- finishing off\n"); + + extra->i2c_completed = 1; + cyg_drv_cond_signal(&(extra->i2c_wait)); +} + +// A transfer has been started. Wait for completion +static inline void +freescale_i2c_doit(freescale_i2c_extra * extra) +{ + cyg_drv_mutex_lock(&(extra->i2c_lock)); + cyg_drv_dsr_lock(); + + while (!extra->i2c_completed) { + I2C_TRACE ("Waiting ...\n"); + cyg_drv_cond_wait(&(extra->i2c_wait)); + } + + cyg_drv_dsr_unlock(); + cyg_drv_mutex_unlock(&(extra->i2c_lock)); +} + +static inline void +freescale_i2c_stopit(freescale_i2c_extra * extra) +{ + extra->i2c_lost_arb = 0; + extra->i2c_owner = 0; + extra->i2c_mode = FREESCALE_I2C_XFER_MODE_INVALID; +} + +void +freescale_i2c_stop(const cyg_i2c_device * dev) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) dev->i2c_bus->i2c_extra; + freescale_i2c_t *i2c_s = FREESCALE_I2C_P (extra->i2c_base); + + I2C_STOP(i2c_s); + + freescale_i2c_stopit(extra); +} + +static cyg_bool +freescale_i2c_handle_xfer(cyg_i2c_device * dev, int address) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) dev->i2c_bus->i2c_extra; + cyg_uint8 data = *extra->i2c_data.i2c_tx_data; + freescale_i2c_t *i2c_s = FREESCALE_I2C_P (extra->i2c_base); + cyg_uint8 freq; + + // Nothing to do + if (extra->i2c_count == 0) + return false; + + // Take the bus ownership + if(!wait_bus_ready (extra)) + return false; + + // set the bus frequency + freq = freescale_i2c_freq_div(dev->i2c_delay ? + &dev->i2c_delay : + &extra->i2c_delay); + + i2c_s->f = freq; + I2C_TRACE("Set f = 0x%02x\n", i2c_s->f); + + if (extra->send_start) { + I2C_TRACE ("Doing start: restart: %s\n", + i2c_s->c1 & FREESCALE_I2C_C1_MST_M ? "yes" : "no"); + + /* + * If we are the current master, use repeat start + */ + if (i2c_s->c1 & FREESCALE_I2C_C1_MST_M) { + I2C_REPEAT_START(i2c_s); + } else { +#if 0 + i2c_s->c1 &= ~0x3fu; +#endif + I2C_START(i2c_s); + } + + I2C_TRACE ("STATUS: sr 0x%02x, cr 0x%02x\n", i2c_s->s, i2c_s->c1); + + /* + * Write the address out and wait for interrupt + */ + I2C_TRACE ("Address: %d [0x%x]\n", address, address); + i2c_s->d = address; + return true; + } else if (extra->i2c_mode == FREESCALE_I2C_XFER_MODE_TX) { + // TX transfer without a start + I2C_TRACE ("TX transfer without start\n"); + + extra->i2c_data.i2c_tx_data += 1; + extra->i2c_count -= 1; + i2c_s->d = data; + + // Single byte transfer + if (extra->send_stop && (extra->i2c_count == 0)) + I2C_STOP(i2c_s); + } else { + // RX transfer without a start +#if 0 + /* + * This is how it would be done in theory; in practice, because the + * actual reading is IRQ driven, we are stuck in the isr handler until + * such time the sender will stop sending data, but since the sender + * will continue sending data until it receives the stop signal from us, + * if someone makes an RX call with the 'don't send stop' flag, the + * incoming data stream will never stop (until there is an error). + * + * And since we can never allow an RX call with the 'don't send stop' + * flag, we can never do send without explicit start either. + */ + I2C_TRACE ("RX transfer without start\n"); + // Single byte transfer, set the STOP bit + if (extra->send_stop && (extra->i2c_count == 1)) + I2C_STOP(i2c_s); + + // Do not ACK last byte per user request + if (!extra->i2c_send_nack && (extra->i2c_count == 1)) { + I2C_TRACE ("RX: NACK for last byte in single byte transfer\n"); + i2c_s->c1 |= FREESCALE_I2C_C1_TXAK_M; + } +#else + CYG_FAIL( "I2C driver does not support piecemeal RX\n" ); +#endif + } + + return true; +} + +cyg_uint32 +freescale_i2c_tx(cyg_i2c_device * dev, cyg_bool send_start, + const cyg_uint8 *tx_data, cyg_uint32 count, cyg_bool send_stop) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) dev->i2c_bus->i2c_extra; + extra->send_stop = send_stop; + extra->send_start = send_start; + extra->i2c_count = count; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_mode = FREESCALE_I2C_XFER_MODE_TX; + + if (send_start || !extra->i2c_got_nack) { + I2C_TRACE + ("I2C: TX to %2x, data %2x, count: %4d, START flag: %s\n", + dev->i2c_address, *tx_data, count, + (send_start == true) ? "true" : "false"); + extra->i2c_data.i2c_tx_data = tx_data; + if (!freescale_i2c_handle_xfer (dev, FREESCALE_I2C_A1_AD (dev->i2c_address, + FREESCALE_I2C_MODE_MW)) + ) + { + return 0; + } + + /* + * Now block till we are done + */ + freescale_i2c_doit(extra); + } + + } + + if (send_stop) { + I2C_TRACE("I2C: TX send stop\n"); + freescale_i2c_stopit(extra); + } + + I2C_TRACE("I2C: TX count %d\n", extra->i2c_count); + + /* + * tx() should return the number of bytes actually transmitted. + * ISR() increments extra->count after a failure, which leads to + * an edge condition when send_start and there is no acknowledgment + * of the address byte. + */ + if (extra->i2c_count > count) + return 0; + + return count - extra->i2c_count; +} + +cyg_uint32 +freescale_i2c_rx(cyg_i2c_device * dev, cyg_bool send_start, + cyg_uint8 *rx_data, cyg_uint32 count, cyg_bool send_nack, + cyg_bool send_stop) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) dev->i2c_bus->i2c_extra; + + /* + * see comments in freescale_i2c_handle_xfer() as to why this assert. + */ + CYG_ASSERT( send_start && send_stop, + "I2C driver does not support piecemeal RX, i.e., the " + "send_start and send_stop parameters must always be set to " + "true\n"); + + extra->i2c_count = count; + extra->i2c_send_nack = send_nack; + extra->send_stop = send_stop; + extra->send_start = send_start; + + if (!extra->i2c_lost_arb) { + extra->i2c_completed = 0; + extra->i2c_data.i2c_rx_data = rx_data; + extra->i2c_mode = FREESCALE_I2C_XFER_MODE_RX; + I2C_TRACE("I2C: RX to %2x, count: %4d, START flag: %s\n", + dev->i2c_address, count, + (send_start == true) ? "true" : "false"); + + if (!freescale_i2c_handle_xfer (dev, FREESCALE_I2C_A1_AD (dev->i2c_address, + FREESCALE_I2C_MODE_MR)) + ) + { + return 0; + } + + /* + * Now block till we are done + */ + freescale_i2c_doit(extra); + } + + if (send_stop) { + I2C_TRACE("I2C: RX send stop\n"); + freescale_i2c_stopit(extra); + } + + return count - extra->i2c_count; +} + +// ---------------------------------------------------------------------------- +// The functions needed for all I2C devices. + +void +freescale_i2c_init(struct cyg_i2c_bus *bus) +{ + freescale_i2c_extra *extra = (freescale_i2c_extra *) bus->i2c_extra; + freescale_i2c_t *i2c_s = FREESCALE_I2C_P (extra->i2c_base); + cyg_uint32 freq; + + I2C_TRACE("I2C INIT0 bus base 0x%08x Pins: 0x%08x, 0x%08x Clock 0x%08x\n", + extra->i2c_base, extra->hal_p->pin_sda, extra->hal_p->pin_scl, + extra->hal_p->clock); + + // Bring clock to the sevice + CYGHWR_IO_CLOCK_ENABLE(extra->hal_p->clock); + // setup SDA/SCL pins, the I2C driver to take care of the rest. + CYGHWR_IO_FREESCALE_I2C_PIN(extra->hal_p->pin_sda); + CYGHWR_IO_FREESCALE_I2C_PIN(extra->hal_p->pin_scl); + + cyg_drv_mutex_init(&extra->i2c_lock); + cyg_drv_cond_init(&extra->i2c_wait, &extra->i2c_lock); + cyg_drv_interrupt_create(extra->i2c_isr_id, + extra->i2c_isr_pri, + (cyg_addrword_t)extra, + &freescale_i2c_isr, + &freescale_i2c_dsr, + &(extra->i2c_interrupt_handle), + &(extra->i2c_interrupt_data)); + cyg_drv_interrupt_attach(extra->i2c_interrupt_handle); + + if (!extra->i2c_owner) { +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + cyg_uint8 cr; +#endif + cyg_uint8 sr; + + extra->i2c_got_nack = 0; + extra->i2c_owner = 1; + sr = i2c_s->s; +#ifdef CYGPKG_DEVS_I2C_FREESCALE_I2C_TRACE + cr = i2c_s->c1; +#endif + + I2C_TRACE ("BUS: INIT sr 0x%02x, cr 0x%02x\n", sr, cr); + + while (sr & FREESCALE_I2C_S_BUSY_M) { + sr = i2c_s->s; + } + } + +#if 1 + i2c_s->c2 = extra->c2_cfg; // some options set in CDL + i2c_s->flt = extra->flt_cfg; // glitch filter +#endif + + /* + * bus speed: set the frequency divider + * + * The bus can run up to clock/20, but can only achieve full loads + * under 100kHz + */ + I2C_TRACE("I2C INIT1: extra->i2c_delay = %d\n", extra->i2c_delay); + + freq = freescale_i2c_freq_div(&extra->i2c_delay); + + I2C_TRACE("I2C INIT2: -> extra->i2c_delay = 0x%08x\n", extra->i2c_delay); + + i2c_s->f = freq; + + /* + * Signal start -- selects master mode + * Enable I2C + * Enable Interrupt + */ + i2c_s->c1 |= (FREESCALE_I2C_C1_IICEN_M | FREESCALE_I2C_C1_IICIE_M); + + // Interrupts can now be safely unmasked + HAL_INTERRUPT_UNMASK(extra->i2c_isr_id); +} + +//----------------------------------------------------------------------------- +// Bus instances. + +#include + +//--------------------------------------------------------------------------- +// EOF i2c_freescale.c diff --git a/packages/devs/serial/arm/lpc24xx/current/ChangeLog b/packages/devs/serial/arm/lpc24xx/current/ChangeLog --- a/packages/devs/serial/arm/lpc24xx/current/ChangeLog +++ b/packages/devs/serial/arm/lpc24xx/current/ChangeLog @@ -1,3 +1,14 @@ +2011-12-21 Ilija Kocho + + * cdl/ser_arm_lpc24xx.cdl: + Fixed interrupt priority. [ Bugzilla 1001432 ] + +2010-12-29 Ilija Kocho + + * cdl/ser_arm_lpc24xx.cdl: + * include/arm_lpc24xx_ser.inl: + Added support for LPC17XX CPUs. + 2008-07-07 Uwe Kindler * include/arm_lpc24xx_ser.inl: diff --git a/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl b/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl --- a/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl +++ b/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl @@ -2,13 +2,13 @@ # # ser_arm_lpc24xx.cdl # -# eCos serial ARM/LPC24XX configuration data +# eCos serial ARM LPC24XX / Cortex-M LPC17XX configuration data # # ==================================================================== ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2011 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -39,9 +39,9 @@ # ==================================================================== ######DESCRIPTIONBEGIN#### # -# Author(s): Uwe Kindler +# Author(s): Uwe Kindler # Original data: gthomas, jskov -# Contributors: +# Contributors: ilijak # Date: 2008-07-06 # #####DESCRIPTIONEND#### @@ -49,18 +49,18 @@ # ==================================================================== cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX { - display "ARM LPC24xx serial device drivers" + display "ARM LPC24XX / Cortex-M LPC17XX serial device drivers" parent CYGPKG_IO_SERIAL_DEVICES active_if CYGPKG_IO_SERIAL - active_if CYGPKG_HAL_ARM_LPC24XX + active_if ( CYGPKG_HAL_ARM_LPC24XX || CYGPKG_HAL_CORTEXM_LPC17XX ) implements CYGINT_IO_SERIAL_GENERIC_16X5X_CHAN_INTPRIO requires CYGPKG_ERROR include_dir cyg/io description " - This option enables the serial device drivers for the - ARM LPC24xx." + This option enables the serial device drivers for the ARM + LPC24XX and Cortex-M LPC17XX." # FIXME: This really belongs in the GENERIC_16X5X package cdl_interface CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED { @@ -70,6 +70,10 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX puts $::cdl_header "#define CYGPRI_IO_SERIAL_GENERIC_16X5X_STEP 4" } + requires { + is_active(CYGPKG_HAL_CORTEXM_LPC17XX) + implies CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME == "1" + } define_proc { puts $::cdl_system_header "/***** serial driver proc output start *****/" @@ -77,53 +81,64 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG " puts $::cdl_system_header "/***** serial driver proc output end *****/" } - + + # For backward compatibility with LPC24XX platforms + cdl_option CYGNUM_IO_SERIAL_IRQ_PRIORITY_MIN { + display "Interrupt priority levels" + flavor data + calculated { CYGNUM_HAL_IRQ_PRIORITY_MIN ? CYGNUM_HAL_IRQ_PRIORITY_MIN : 15 } + description " + For backward compatibility with LPC 24XX plarforms that + do not have CYGNUM_HAL_IRQ_PRIORITY_MIN defined." + } + # Support up to 4 on-chip UART modules. The number may vary between # processor variants so it is easy to update this here for { set ::channel 0 } { $::channel < 4 } { incr ::channel } { - + cdl_interface CYGINT_IO_SERIAL_LPC24XX_UART[set ::channel] { - display "Platform provides UART [set ::channel]" - flavor bool - description " - This interface will be implemented if the specific LPC24xx - processor being used has on-chip UART [set ::channel], and if - that UART is accessible on the target hardware." + display "Platform provides UART [set ::channel]" + flavor bool + description " + This interface will be implemented if the specific + LPC24XX / LPC17XX processor being used has on-chip UART + [set ::channel], and if that UART is accessible on the + target hardware." } cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel] { - display "ARM LPC24cxx UART [set ::channel] driver" + display "ARM LPC24XX / Cortex LPC17XX UART [set ::channel] driver" flavor bool active_if CYGINT_IO_SERIAL_LPC24XX_UART[set ::channel] default_value 1 - implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED - implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW - implements CYGINT_IO_SERIAL_LINE_STATUS_HW + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW - description " - This option includes the serial device driver for the ARM - LPC24xx UART [set ::channel]." + description " + This option includes the serial device driver for the + ARM LPC24XX / LPC17XX UART [set ::channel]." cdl_option CYGDAT_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_NAME { display "Device name for UART [set ::channel]" flavor data - default_value [format {"\"/dev/ser%d\""} $::channel] + default_value [format {"\"/dev/ser%d\""} $::channel] description " This option specifies the name of the serial device - for the ARM LPC24xx UART [set ::channel]." + for the ARM LPC24XX / LPC17XX UART [set ::channel]." } cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_BAUD { display "Baud rate for UART [set ::channel]" flavor data - legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 + legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 4800 7200 9600 14400 19200 38400 57600 115200 230400 } default_value 38400 description " This option specifies the default baud rate (speed) - for the ARM LPC24xx UART [set ::channel]." + for the ARM LPC24XX / LPC17XX UART [set ::channel]." } cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_BUFSIZE { @@ -133,28 +148,25 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX default_value 128 description " This option specifies the size of the internal buffers - used for the ARM LPC24xx UART [set ::channel]." + used for the ARM LPC24XX / LPC17XX UART [set ::channel]." } - + cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_INTPRIO { display "Interrupt priority of UART [set ::channel]" flavor data - legal_values 0 to 15 - default_value 15 + legal_values 0 to CYGNUM_IO_SERIAL_IRQ_PRIORITY_MIN + default_value CYGNUM_IO_SERIAL_IRQ_PRIORITY_MIN description " - This option selects the interupt priority for the - UART [set ::channel] interrupts. There are 16 - priority levels corresponding to the values 0 - through 15 decimal, of which 15 is the lowest - priority. The reset value of these registers - defaults all interrupt to the lowest priority, - allowing a single write to elevate the priority of - an individual interrupt." + This option selects the interupt priority for + the UART [set ::channel] interrupts. The + reset value of these registers defaults all interrupt + to the lowest priority, allowing a single write to + elevate the priority of an individual interrupt." } } } - cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_TESTING { + cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_TESTING { display "Testing parameters" flavor bool calculated 1 @@ -163,7 +175,7 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX implements CYGINT_IO_SERIAL_TEST_SKIP_9600 implements CYGINT_IO_SERIAL_TEST_SKIP_115200 implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN - + cdl_option CYGPRI_SER_TEST_SER_DEV { display "Serial device used for testing" flavor data diff --git a/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl b/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl --- a/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl +++ b/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl @@ -2,7 +2,7 @@ // // io/serial/arm/arm_lpc24xx_ser.inl // -// ARM LPC24XX Serial I/O definitions +// ARM LPC24XX / Cortex-M LPC17XX Serial I/O definitions // //========================================================================== // ####ECOSGPLCOPYRIGHTBEGIN#### @@ -40,10 +40,10 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): Uwe Kindler -// Contributors: gthomas, jlarmour +// Contributors: gthomas, jlarmour, ilijak // Date: 2008-06-07 -// Purpose: LPC24XX Serial I/O module (interrupt driven version) -// Description: +// Purpose: LPC24XX and LPC17XX Serial I/O module (interrupt driven version) +// Description: // //####DESCRIPTIONEND#### // @@ -54,8 +54,12 @@ // INCLUDES //========================================================================== #include -#include +#ifdef CYGPKG_HAL_CORTEXM_LPC17XX +# include +#else +# include +#endif //========================================================================== // STATIC DATA diff --git a/packages/devs/serial/cortexm/a2fxxx/current/ChangeLog b/packages/devs/serial/cortexm/a2fxxx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/serial/cortexm/a2fxxx/current/ChangeLog @@ -0,0 +1,30 @@ +2011-03-20 Christophe Coutand + + * cdl/ser_cortexm_a2fxxx.cdl + * include/ser_cortexm_a2fxxx.inl + New package -- Actel smartfusion Serial Driver + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/serial/cortexm/a2fxxx/current/cdl/ser_cortexm_a2fxxx.cdl b/packages/devs/serial/cortexm/a2fxxx/current/cdl/ser_cortexm_a2fxxx.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/cortexm/a2fxxx/current/cdl/ser_cortexm_a2fxxx.cdl @@ -0,0 +1,219 @@ +# ==================================================================== +# +# ser_cortexm_a2fxxx.cdl +# +# eCos serial Cortex-M3/Actel Smartfusion configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Original data: gthomas +# Contributors: +# Date: 2011-03-20 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_IO_SERIAL_CORTEXM_A2FXXX { + display "Cortex-M3/Actel Smartfusion serial device drivers" + + parent CYGPKG_IO_SERIAL_DEVICES + active_if CYGPKG_IO_SERIAL + active_if CYGPKG_HAL_CORTEXM_A2FXXX + implements CYGINT_IO_SERIAL_GENERIC_16X5X_CHAN_INTPRIO + + + requires CYGPKG_ERROR + include_dir cyg/io + + description " + This option enables the serial device drivers for the + Cortex-M3/Actel Smartfusion." + + # FIXME: This really belongs in the GENERIC_16X5X package + cdl_interface CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED { + display "Generic 16x5x serial driver required" + } + define_proc { + puts $::cdl_header "#define CYGPRI_IO_SERIAL_GENERIC_16X5X_STEP 4" + } + + requires { CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME == "1" } + + define_proc { + puts $::cdl_system_header "/***** serial driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_INL " + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG " + puts $::cdl_system_header "/***** serial driver proc output end *****/" + } + + cdl_component CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0 { + display "Cortex-M3/Actel Smartfusion serial port 0 driver" + flavor bool + default_value 1 + + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + description " + This option includes the serial device driver for the + Cortex-M3/Actel Smartfusion port 0." + + cdl_option CYGDAT_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_NAME { + display "Device name for the serial port 0 driver" + flavor data + default_value {"\"/dev/ser0\""} + description " + This option specifies the name of the serial device + for the Cortex-M3/Actel Smartfusion port 0." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BAUD { + display "Baud rate for the serial port 0 driver" + flavor data + legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 + 3600 4800 7200 9600 14400 19200 38400 + 57600 115200 230400 } + default_value 38400 + description " + This option specifies the default baud rate (speed) + for the Cortex-M3/Actel Smartfusion port 0." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BUFSIZE { + display "Buffer size for the serial port 0 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers + used for the Cortex-M3/Actel Smartfusion port 0." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_INTPRIO { + display "Interrupt priority of the serial port 0 ISR" + flavor data + default_value { CYGNUM_DEVS_SERIAL_CORTEXM_A2FXXX_SERIAL0_ISR_SP } + requires { is_active(CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_INTPRIO) + implies CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_INTPRIO != + CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_INTPRIO } + description " + This option specifies the interrupt priority of the + ISR of the serial port 1 interrupt in the NVIC." + } + + } + + cdl_component CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1 { + display "Cortex-M3/Actel Smartfusion serial port 1 driver" + flavor bool + default_value 0 + + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + description " + This option includes the serial device driver for the + Cortex-M3/Actel Smartfusion port 1." + + cdl_option CYGDAT_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_NAME { + display "Device name for the serial port 1 driver" + flavor data + default_value {"\"/dev/ser1\""} + description " + This option specifies the name of the serial device + for the Cortex-M3/Actel Smartfusion port 1." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BAUD { + display "Baud rate for the serial port 1 driver" + flavor data + legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 + 3600 4800 7200 9600 14400 19200 38400 + 57600 115200 230400 } + default_value 38400 + description " + This option specifies the default baud rate (speed) + for the Cortex-M3/Actel Smartfusion port 1." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BUFSIZE { + display "Buffer size for the serial port 1 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal + buffers used for the Cortex-M3/Actel Smartfusion port 1." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_INTPRIO { + display "Interrupt priority of the serial port 1 ISR" + flavor data + default_value { CYGNUM_DEVS_SERIAL_CORTEXM_A2FXXX_SERIAL0_ISR_SP } + description " + This option specifies the interrupt priority of the + ISR of the serial port 1 interrupt in the NVIC." + } + } + + cdl_component CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0 + + implements CYGINT_IO_SERIAL_TEST_SKIP_9600 + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"a2fxxx\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } +} + +# EOF ser_cortexm_a2fxx.cdl diff --git a/packages/devs/serial/cortexm/a2fxxx/current/include/ser_cortexm_a2fxxx.inl b/packages/devs/serial/cortexm/a2fxxx/current/include/ser_cortexm_a2fxxx.inl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/cortexm/a2fxxx/current/include/ser_cortexm_a2fxxx.inl @@ -0,0 +1,210 @@ +//========================================================================== +// +// ser_cortexm_a2fxxx.inl +// +// eCos serial Cortex-M3/Actel Smartfusion I/O definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-03-20 +// Purpose: Cortex-M3/Actel Smartfusion Serial I/O module (interrupt driven version) +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//----------------------------------------------------------------------------- +// Baud rate specification + +// Baud rate specification +static const unsigned int select_baud[] = +{ + 9999, // Unused + 50, + 75, + 110, + 134.5, + 150, + 200, + 300, + 600, + 1200, + 1800, + 2400, + 3600, + 4800, + 7200, + 9600, + 14400, + 19200, + 38400, + 57600, + 115200, + 230400 +}; + + +//----------------------------------------------------------------------------- +// Return baudrate devisor for certain baudrate + +unsigned short a2fxxx_baud_generator(pc_serial_info *ser_chan, + cyg_serial_baud_rate_t baud) +{ + cyg_uint8 pclk_id = 0; + switch (ser_chan->base) + { + case CYGHWR_HAL_A2FXXX_UART0: + pclk_id = 0; + break; + + case CYGHWR_HAL_A2FXXX_UART1: + pclk_id = 1; + break; + default: + CYG_FAIL("Invalid UART base address"); + } // (ser_chan->base) + + return CYG_HAL_CORTEXM_A2FXXX_BAUD_GENERATOR(pclk_id, select_baud[baud]); +} + + +#define CYG_IO_SERIAL_GENERIC_16X5X_CHAN_BAUD_GENERATOR(_ser_chan_, _baud_) \ + a2fxxx_baud_generator((_ser_chan_), (_baud_)) + + +#ifdef CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0 +static pc_serial_info a2fxxx_serial_info0 = + { CYGHWR_HAL_A2FXXX_UART0, + CYGNUM_HAL_INTERRUPT_UART0, + CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_INTPRIO + }; + +#if CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BUFSIZE > 0 +static unsigned char +a2fxxx_serial_out_buf0[CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BUFSIZE]; +static unsigned char +a2fxxx_serial_in_buf0[CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(a2fxxx_serial_channel0, + pc_serial_funs, + a2fxxx_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &a2fxxx_serial_out_buf0[0], + sizeof(a2fxxx_serial_out_buf0), + &a2fxxx_serial_in_buf0[0], + sizeof(a2fxxx_serial_in_buf0) + ); +#else +static SERIAL_CHANNEL(a2fxxx_serial_channel0, + pc_serial_funs, + a2fxxx_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(a2fxxx_serial_io0, + CYGDAT_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0_NAME, + 0, // Does not depend on a lower + // level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &a2fxxx_serial_channel0 + ); +#endif // CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0 + +#ifdef CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1 +static pc_serial_info a2fxxx_serial_info1 = + { CYGHWR_HAL_A2FXXX_UART1, + CYGNUM_HAL_INTERRUPT_UART1, + CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_INTPRIO + }; +#if CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BUFSIZE > 0 +static unsigned char +a2fxxx_serial_out_buf1[CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BUFSIZE]; +static unsigned char +a2fxxx_serial_in_buf1[CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(a2fxxx_serial_channel1, + pc_serial_funs, + a2fxxx_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &a2fxxx_serial_out_buf1[0], + sizeof(a2fxxx_serial_out_buf1), + &a2fxxx_serial_in_buf1[0], + sizeof(a2fxxx_serial_in_buf1) + ); +#else +static SERIAL_CHANNEL(a2fxxx_serial_channel1, + pc_serial_funs, + a2fxxx_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(a2fxxx_serial_io1, + CYGDAT_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1_NAME, + 0, // Does not depend on a lower + // level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &a2fxxx_serial_channel1 + ); +#endif // CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1 + +// EOF ser_cortexm_a2fxxx.inl diff --git a/packages/devs/serial/cortexm/stm32/current/ChangeLog b/packages/devs/serial/cortexm/stm32/current/ChangeLog --- a/packages/devs/serial/cortexm/stm32/current/ChangeLog +++ b/packages/devs/serial/cortexm/stm32/current/ChangeLog @@ -1,3 +1,42 @@ +2012-04-02 Jonathan Larmour + + * src/stm32_serial.h: Revert unnecessary change in previous + commit, reinstating previous code. + * src/stm32_serial.c (stm32_serial_config_port): Ditto. + +2011-12-15 Jonathan Larmour + + * cdl/ser_cortexm_stm32.cdl: Default baud rates to the HAL + diag console channel. Add support for serial port 5 + (USART6 in STM32 speak). Select serial/tty test devices better + according to the configuration. + * src/stm32_serial.c: Support serial port 5. Make use of AFIO + remap specific to F1 processors. + +2010-12-31 John Dallaway + + * src/stm32_serial.c, src/stm32_serial.h: Set the M bit when + configuring for 8 data bits + parity bit. [ Bugzilla 1001068 ] + +2009-12-03 Nick Garnett + + * cdl/ser_cortexm_stm32.cdl: + * src/stm32_serial.c (stm32_serial_info, stm32_serial_info0) + (stm32_serial_info1, stm32_serial_info2, stm32_serial_info3) + (stm32_serial_info4, stm32_serial_init): + Add configuration options to set serial ISR interrupt priorities. + +2009-07-02 Nick Garnett + + * src/stm32_serial.c (stm32_serial_info) + (stm32_serial_config_port): Add support for UART pin remap. + +2009-06-29 Nick Garnett + + * src/stm32_serial.c (stm32_serial_info) + (stm32_serial_config_port): Add support for individual clock + enable on each UART. + 2008-10-07 Nick Garnett * cdl/ser_cortexm_stm32.cdl: @@ -10,7 +49,7 @@ 2008-10-07 Nick Garnett 0 + description " + This option includes the serial device driver for the ST STM32 + port 5." + + cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME { + display "Device name for ST STM32 serial port 5 driver" + flavor data + default_value {"\"/dev/ser5\""} + description " + This option specifies the name of the serial device for the + ST STM32 port 5." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BAUD { + display "Baud rate for the ST STM32 serial port 5 driver" + flavor data + legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + 4800 7200 9600 14400 19200 38400 57600 115200 230400 + } + default_value CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + description " + This option specifies the default baud rate (speed) for the + ST STM32 port 5." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE { + display "Buffer size for the ST STM32 serial port 5 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers used + for the ST STM32 port 5." + } + + cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_INT_PRI { + display "Interrupt priority for STM32 serial port 5" + flavor data + default_value 128 + legal_values 0 to 255 + } } @@ -312,13 +394,23 @@ cdl_component CYGPKG_IO_SERIAL_CORTEXM_S cdl_option CYGPRI_SER_TEST_SER_DEV { display "Serial device used for testing" flavor data - default_value { "\"/dev/ser1\"" } + default_value { CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : \ + CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME } } cdl_option CYGPRI_SER_TEST_TTY_DEV { display "TTY-mode serial device used for testing" flavor data - default_value { "\"/dev/tty1\"" } + default_value { CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : \ + CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : \ + "\"/dev/tty5\"" } } define_proc { diff --git a/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.c b/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.c --- a/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.c +++ b/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998-2002, 2004-2006, 2008-2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -79,10 +79,15 @@ typedef struct stm32_serial_info CYG_WORD uart; CYG_ADDRWORD base; CYG_WORD int_num; + cyg_int32 int_pri; cyg_int32 rx_pin; cyg_int32 tx_pin; cyg_int32 rts_pin; cyg_int32 cts_pin; + cyg_int32 clk_enable; +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + cyg_int32 remap; +#endif cyg_bool tx_active; @@ -102,7 +107,8 @@ static bool stm32_serial_putc_interrupt( || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE == 0) \ - || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) \ + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE == 0) static bool stm32_serial_putc_polled(serial_channel *chan, unsigned char c); #endif static Cyg_ErrNo stm32_serial_lookup(struct cyg_devtab_entry **tab, @@ -113,7 +119,8 @@ static unsigned char stm32_serial_getc_i || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE == 0) \ - || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) \ + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE == 0) static unsigned char stm32_serial_getc_polled(serial_channel *chan); #endif static Cyg_ErrNo stm32_serial_set_config(serial_channel *chan, cyg_uint32 key, @@ -130,7 +137,8 @@ static void stm32_serial_DSR(cyg_v || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE > 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE > 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE > 0) \ - || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE > 0) + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE > 0) \ + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE > 0) static SERIAL_FUNS(stm32_serial_funs_interrupt, stm32_serial_putc_interrupt, stm32_serial_getc_interrupt, @@ -144,7 +152,8 @@ static SERIAL_FUNS(stm32_serial_funs_int || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE == 0) \ || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE == 0) \ - || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE == 0) \ + || (defined(CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5) && CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE == 0) static SERIAL_FUNS(stm32_serial_funs_polled, stm32_serial_putc_polled, stm32_serial_getc_polled, @@ -161,10 +170,15 @@ static stm32_serial_info stm32_serial_in uart : 0, base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART1, int_num : CYGNUM_HAL_INTERRUPT_UART1, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_INT_PRI, rx_pin : CYGHWR_HAL_STM32_UART1_RX, tx_pin : CYGHWR_HAL_STM32_UART1_TX, rts_pin : CYGHWR_HAL_STM32_UART1_RTS, cts_pin : CYGHWR_HAL_STM32_UART1_CTS, + clk_enable : CYGHWR_HAL_STM32_UART1_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART1_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART1_REMAP_CONFIG, +#endif }; #if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_BUFSIZE > 0 @@ -211,10 +225,15 @@ static stm32_serial_info stm32_serial_in uart : 1, base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART2, int_num : CYGNUM_HAL_INTERRUPT_UART2, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_INT_PRI, rx_pin : CYGHWR_HAL_STM32_UART2_RX, tx_pin : CYGHWR_HAL_STM32_UART2_TX, rts_pin : CYGHWR_HAL_STM32_UART2_RTS, cts_pin : CYGHWR_HAL_STM32_UART2_CTS, + clk_enable : CYGHWR_HAL_STM32_UART2_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART2_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART2_REMAP_CONFIG, +#endif }; #if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE > 0 @@ -261,10 +280,15 @@ static stm32_serial_info stm32_serial_in uart : 2, base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART3, int_num : CYGNUM_HAL_INTERRUPT_UART3, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_INT_PRI, rx_pin : CYGHWR_HAL_STM32_UART3_RX, tx_pin : CYGHWR_HAL_STM32_UART3_TX, rts_pin : CYGHWR_HAL_STM32_UART3_RTS, cts_pin : CYGHWR_HAL_STM32_UART3_CTS, + clk_enable : CYGHWR_HAL_STM32_UART3_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART3_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART3_REMAP_CONFIG, +#endif }; #if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE > 0 @@ -311,10 +335,15 @@ static stm32_serial_info stm32_serial_in uart : 3, base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART4, int_num : CYGNUM_HAL_INTERRUPT_UART4, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_INT_PRI, rx_pin : CYGHWR_HAL_STM32_UART4_RX, tx_pin : CYGHWR_HAL_STM32_UART4_TX, rts_pin : CYGHWR_HAL_STM32_UART4_RTS, cts_pin : CYGHWR_HAL_STM32_UART4_CTS, + clk_enable : CYGHWR_HAL_STM32_UART4_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART4_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART4_REMAP_CONFIG, +#endif }; #if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE > 0 @@ -361,10 +390,15 @@ static stm32_serial_info stm32_serial_in uart : 4, base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART5, int_num : CYGNUM_HAL_INTERRUPT_UART5, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_INT_PRI, rx_pin : CYGHWR_HAL_STM32_UART5_RX, tx_pin : CYGHWR_HAL_STM32_UART5_TX, rts_pin : CYGHWR_HAL_STM32_UART5_RTS, cts_pin : CYGHWR_HAL_STM32_UART5_CTS, + clk_enable : CYGHWR_HAL_STM32_UART5_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART5_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART5_REMAP_CONFIG, +#endif }; #if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE > 0 @@ -406,6 +440,62 @@ DEVTAB_ENTRY(stm32_serial_io4, //========================================================================== + +#ifdef CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 +static stm32_serial_info stm32_serial_info5 = { + uart : 5, + base : (CYG_ADDRWORD) CYGHWR_HAL_STM32_UART6, + int_num : CYGNUM_HAL_INTERRUPT_UART6, + int_pri : CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_INT_PRI, + rx_pin : CYGHWR_HAL_STM32_UART6_RX, + tx_pin : CYGHWR_HAL_STM32_UART6_TX, + rts_pin : CYGHWR_HAL_STM32_UART6_RTS, + cts_pin : CYGHWR_HAL_STM32_UART6_CTS, + clk_enable : CYGHWR_HAL_STM32_UART6_CLOCK, +#ifdef CYGHWR_HAL_STM32_UART6_REMAP_CONFIG + remap : CYGHWR_HAL_STM32_UART6_REMAP_CONFIG, +#endif +}; + +#if CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE > 0 +static unsigned char stm32_serial_out_buf5[CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE]; +static unsigned char stm32_serial_in_buf5[CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(stm32_serial_channel5, + stm32_serial_funs_interrupt, + stm32_serial_info5, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &stm32_serial_out_buf5[0], sizeof(stm32_serial_out_buf5), + &stm32_serial_in_buf5[0], sizeof(stm32_serial_in_buf5) + ); +#else +static SERIAL_CHANNEL(stm32_serial_channel5, + stm32_serial_funs_polled, + stm32_serial_info5, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(stm32_serial_io5, + CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME, + 0, // Does not depend on a lower level interface + &cyg_io_serial_devio, + stm32_serial_init, + stm32_serial_lookup, // Serial driver may need initializing + &stm32_serial_channel5 + ); +#endif // CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 + + +//========================================================================== // Internal function to actually configure the hardware to desired baud // rate, etc. @@ -415,7 +505,9 @@ stm32_serial_config_port(serial_channel stm32_serial_info * const stm32_chan = (stm32_serial_info *)chan->dev_priv; const CYG_ADDRWORD base = stm32_chan->base; cyg_uint32 parity = select_parity[new_config->parity]; - cyg_uint32 word_length = select_word_length[new_config->word_length-CYGNUM_SERIAL_WORD_LENGTH_5]; + cyg_uint32 word_length = ((new_config->word_length == CYGNUM_SERIAL_WORD_LENGTH_8) && + (new_config->parity != CYGNUM_SERIAL_PARITY_NONE)) ? + CYGHWR_HAL_STM32_UART_CR1_M_9 : CYGHWR_HAL_STM32_UART_CR1_M_8; cyg_uint32 stop_bits = select_stop_bits[new_config->stop]; cyg_uint32 cr1 = 0; cyg_uint32 cr2 = 0; @@ -430,6 +522,22 @@ stm32_serial_config_port(serial_channel CYGHWR_HAL_STM32_GPIO_SET( stm32_chan->rts_pin ); CYGHWR_HAL_STM32_GPIO_SET( stm32_chan->cts_pin ); + // Enable clock + CYGHWR_HAL_STM32_CLOCK_ENABLE( stm32_chan->clk_enable ); + + // Handle any pin remapping +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + if( stm32_chan->remap != 0 ) + { + CYG_ADDRESS afio = CYGHWR_HAL_STM32_AFIO; + cyg_uint32 mapr; + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_AFIO_CLOCK ); + HAL_READ_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + mapr |= stm32_chan->remap; + HAL_WRITE_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + } +#endif + // Select line parameters cr1 |= parity|word_length; cr2 |= stop_bits; @@ -488,7 +596,7 @@ stm32_serial_init(struct cyg_devtab_entr (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices if (chan->out_cbuf.len != 0) { cyg_drv_interrupt_create(stm32_chan->int_num, - 0x80, + stm32_chan->int_pri, (cyg_addrword_t)chan, stm32_serial_ISR, stm32_serial_DSR, diff --git a/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.h b/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.h --- a/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.h +++ b/packages/devs/serial/cortexm/stm32/current/src/stm32_serial.h @@ -54,16 +54,6 @@ #include // Register definitions // ==================================================================== -// Translate system word length selector into local values. - -static cyg_uint32 select_word_length[] = { - 0, - 0, - 0, - CYGHWR_HAL_STM32_UART_CR1_M_8 -}; - -// ==================================================================== // Translate system stop bit selector into control register bits. static cyg_uint32 select_stop_bits[] = { diff --git a/packages/devs/serial/freescale/uart/drv/current/ChangeLog b/packages/devs/serial/freescale/uart/drv/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/ChangeLog @@ -0,0 +1,43 @@ +2013-04-01 Ilija Kocho + + * include/ser_freescale_uart_chan.inl. include/ser_freescale_uart.c: + Add clock gating enable. [ Bugzilla 1001814 ] + +2012-02-07 Ilija Kocho + + * cdl/ser_freescale_uart.cdl: + Add consolidated Interrupt Priority Scheme [Bugzilla 1001450] + +2011-03-26 Ilija Kocho + + * cdl/ser_freescale_uart.cdl: + * src/ser_freescale_uart.c: + * include/ser_freescale_uart_chan.inl: + * include/ser_freescale_uart_tty_add.inl: + * include/ser_freescale_uart_termiostty_add.inl: + + New package -- Freescale UART driver. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/serial/freescale/uart/drv/current/cdl/ser_freescale_uart.cdl b/packages/devs/serial/freescale/uart/drv/current/cdl/ser_freescale_uart.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/cdl/ser_freescale_uart.cdl @@ -0,0 +1,269 @@ +# ==================================================================== +# +# ser_freescale_uart.cdl +# +# eCos serial Freescale UART configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Ilija Kocho +# Original data: +# Contributors: +# Date: 2011-02-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_IO_SERIAL_FREESCALE_UART { + display "Freescale UART device driver" + + parent CYGPKG_IO_SERIAL_DEVICES + active_if CYGPKG_IO_SERIAL + requires CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + requires CYGPKG_ERROR + + include_dir cyg/io + + description " + This option enables the serial device drivers for the + Freescale UART, an on-chip serial controller found on some + freescale microcontrollers such as Kinetis, etc." + + compile -library=libextras.a ser_freescale_uart.c + + define_proc { + puts $::cdl_system_header "/***** serial driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_DEVICE_HEADER " + puts $::cdl_system_header "/***** serial driver proc output end *****/" + } + + # Support up to 6 on-chip UART modules. The number may vary between + # processor variants so it is easy to update this here + for { set ::channel 0 } { $::channel < 6 } { incr ::channel } { + + cdl_interface CYGINT_IO_SERIAL_FREESCALE_UART[set ::channel] { + display "Platform provides UART [set ::channel]" + flavor bool + description " + This interface will be implemented if the specific + controller being used has on-chip UART [set ::channel], and if + that UART is accessible on the target hardware." + } + + cdl_component CYGPKG_IO_SERIAL_FREESCALE_UART[set ::channel] { + display "Freescale UART port [set ::channel] driver" + flavor bool + active_if CYGINT_IO_SERIAL_FREESCALE_UART[set ::channel] + default_value CYGINT_IO_SERIAL_FREESCALE_UART[set ::channel] + implements CYGINT_IO_SERIAL_TTY_TTY[set ::channel] + description " + This option includes the serial device driver for Freescale + UART port [set ::channel]." + + cdl_option CYGDAT_IO_SERIAL_FREESCALE_UART[set ::channel]_NAME { + display "Device name for Freescale UART port [set ::channel]" + flavor data + default_value [ format {"\"/dev/ser%d\""} $::channel ] + description " + This option specifies the device name for + Freescale UART port [set ::channel]." + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART[set ::channel]_BAUD { + display "Baud rate for the Freescale UART port [set ::channel] driver" + flavor data + legal_values { 300 600 1200 2400 4800 9600 14400 19200 38400 + 57600 115200 230400 } + default_value 38400 + description " + This option specifies the default baud rate for the + UART port [set ::channel]." + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART[set ::channel]_BUFSIZE { + display "Buffer size for the Freescale UART port [set ::channel] driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers used + for Freescale UART port [set ::channel]." + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART[set ::channel]_INT_PRIORITY { + display "Freescale UART port [set ::channel] interrupt priority" + flavor data + default_value CYGNUM_IO_SERIAL_FREESCALE_UART[set ::channel]_INT_PRIORITY_SP + description " + This option selects the interupt priority for the + UART [set ::channel] interrupts." + } + } + } + + cdl_component CYGDAT_IO_SERIAL_TTY_ADD_INL { + display "Freescale TTY devices beyond #3" + parent CYGPKG_IO_SERIAL + active_if CYGPKG_IO_SERIAL_TTY + flavor data + calculated { "" } + + + cdl_component CYGPKG_IO_SERIAL_TTY_TTY4 { + display "TTY mode channel #4" + flavor bool + parent CYGPKG_IO_SERIAL_TTY + active_if CYGPKG_IO_SERIAL_TTY + default_value 0 + description " + This option causes '/dev/tty4', which is provided by Freescale + UART, to be included in the standard drivers." + + cdl_option CYGDAT_IO_SERIAL_TTY_TTY4_DEV { + display "TTY mode channel #4 device" + flavor data + default_value { "\"/dev/ser4\"" } + description " + This option selects the physical device to use for + '/dev/tty4'." + } + } + + cdl_component CYGPKG_IO_SERIAL_TTY_TTY5 { + display "TTY mode channel #5" + flavor bool + parent CYGPKG_IO_SERIAL_TTY + active_if CYGPKG_IO_SERIAL_TTY + default_value 0 + description " + This option causes '/dev/tty5', which is provided by Freescale + UART, to be included in the standard drivers." + + cdl_option CYGDAT_IO_SERIAL_TTY_TTY5_DEV { + display "TTY mode channel #5 device" + flavor data + default_value { "\"/dev/ser5\"" } + description " + This option selects the physical device to use for + '/dev/tty5'." + } + } + } + + cdl_component CYGDAT_IO_SERIAL_TERMIOS_ADD_INL { + display "Freescale TERMIOS devices beyond #3" + parent CYGPKG_IO_SERIAL + active_if CYGPKG_IO_SERIAL_TERMIOS + flavor data + calculated { "" } + + cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS4 { + display "Termios TTY channel #4" + flavor bool + default_value 0 + implements CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY + parent CYGPKG_IO_SERIAL_TERMIOS + active_if CYGPKG_IO_SERIAL_TERMIOS + description " + This option causes '/dev/termios4' to be included in the + standard drivers." + + cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS4_DEV { + display "Termios TTY channel #4 device" + flavor data + default_value {"\"/dev/ser4\""} + description " + This option selects the physical device to use for + '/dev/termios4'." + } + } + + cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS5 { + display "Termios TTY channel #5" + flavor bool + default_value 0 + implements CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY + parent CYGPKG_IO_SERIAL_TERMIOS + active_if CYGPKG_IO_SERIAL_TERMIOS + description " + This option causes '/dev/termios5' to be included in the + standard drivers." + + cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS5_DEV { + display "Termios TTY channel #5 device" + flavor data + default_value {"\"/dev/ser5\""} + description " + This option selects the physical device to use for + '/dev/termios5'." + } + } + } + + cdl_component CYGPKG_IO_SERIAL_FREESCALE_UART_OPTIONS { + display "Serial device driver build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + cdl_option CYGPKG_IO_SERIAL_FREESCALE_UART_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building these serial device drivers. These flags are + used in addition to the set of global flags." + } + + cdl_option CYGPKG_IO_SERIAL_FREESCALE_UART_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building these serial device drivers. These flags are + removed from the set of global flags if present." + } + } +} + +# EOF ser_freescale_uart.cdl diff --git a/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_chan.inl b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_chan.inl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_chan.inl @@ -0,0 +1,378 @@ +//========================================================================== +// +// ser_freescale_uart.inl +// +// Freescale UART Serial channel definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-02-10 +// Purpose: Freescale UART Serial I/O module (interrupt driven version) +// Description: +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART0 +static const uart_pins_t uart0_pins = { + rx : CYGHWR_IO_FREESCALE_UART0_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART0_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART0_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART0_PIN_CTS +}; +static uart_serial_info uart_serial_info0 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART0_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART0_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART0_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART0_CLOCK, + pins_p : &uart0_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART0_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf0[CYGNUM_IO_SERIAL_FREESCALE_UART0_BUFSIZE]; +static unsigned char + uart_serial_in_buf0[CYGNUM_IO_SERIAL_FREESCALE_UART0_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS( + uart_serial_channel0, + uart_serial_funs, + uart_serial_info0, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf0[0], + sizeof(uart_serial_out_buf0), + &uart_serial_in_buf0[0], + sizeof(uart_serial_in_buf0)); +#else +static +SERIAL_CHANNEL(uart_serial_channel0, + uart_serial_funs, + uart_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io0, + CYGDAT_IO_SERIAL_FREESCALE_UART0_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel0); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART0 + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART1 +static const uart_pins_t uart1_pins = { + rx : CYGHWR_IO_FREESCALE_UART1_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART1_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART1_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART1_PIN_CTS +}; +static uart_serial_info uart_serial_info1 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART1_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART1_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART1_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART1_CLOCK, + pins_p : &uart1_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART1_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf1[CYGNUM_IO_SERIAL_FREESCALE_UART1_BUFSIZE]; +static unsigned char + uart_serial_in_buf1[CYGNUM_IO_SERIAL_FREESCALE_UART1_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS(uart_serial_channel1, + uart_serial_funs, + uart_serial_info1, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf1[0], + sizeof(uart_serial_out_buf1), + &uart_serial_in_buf1[0], + sizeof(uart_serial_in_buf1)); +#else +static +SERIAL_CHANNEL(uart_serial_channel1, + uart_serial_funs, + uart_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io1, + CYGDAT_IO_SERIAL_FREESCALE_UART1_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel1); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART1 + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART2 +static const uart_pins_t uart2_pins = { + rx : CYGHWR_IO_FREESCALE_UART2_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART2_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART2_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART2_PIN_CTS +}; +static uart_serial_info uart_serial_info2 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART2_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART2_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART2_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART2_CLOCK, + pins_p : &uart2_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART2_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf2[CYGNUM_IO_SERIAL_FREESCALE_UART2_BUFSIZE]; +static unsigned char + uart_serial_in_buf2[CYGNUM_IO_SERIAL_FREESCALE_UART2_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS(uart_serial_channel2, + uart_serial_funs, + uart_serial_info2, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART2_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf2[0], + sizeof(uart_serial_out_buf2), + &uart_serial_in_buf2[0], + sizeof(uart_serial_in_buf2)); +#else +static +SERIAL_CHANNEL(uart_serial_channel2, + uart_serial_funs, + uart_serial_info2, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART2_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io2, + CYGDAT_IO_SERIAL_FREESCALE_UART2_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel2); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART2 + + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART3 +static const uart_pins_t uart3_pins = { + rx : CYGHWR_IO_FREESCALE_UART3_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART3_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART3_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART3_PIN_CTS +}; +static uart_serial_info uart_serial_info3 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART3_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART3_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART3_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART3_CLOCK, + pins_p : &uart3_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART3_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf3[CYGNUM_IO_SERIAL_FREESCALE_UART3_BUFSIZE]; +static unsigned char + uart_serial_in_buf3[CYGNUM_IO_SERIAL_FREESCALE_UART3_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS(uart_serial_channel3, + uart_serial_funs, + uart_serial_info3, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART3_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf3[0], + sizeof(uart_serial_out_buf3), + &uart_serial_in_buf3[0], + sizeof(uart_serial_in_buf3)); +#else +static +SERIAL_CHANNEL(uart_serial_channel3, + uart_serial_funs, + uart_serial_info3, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART3_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io3, + CYGDAT_IO_SERIAL_FREESCALE_UART3_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel3); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART3 + + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART4 +static const uart_pins_t uart4_pins = { + rx : CYGHWR_IO_FREESCALE_UART4_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART4_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART4_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART4_PIN_CTS +}; +static uart_serial_info uart_serial_info4 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART4_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART4_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART4_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART4_CLOCK, + pins_p : &uart4_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART4_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf4[CYGNUM_IO_SERIAL_FREESCALE_UART4_BUFSIZE]; +static unsigned char + uart_serial_in_buf4[CYGNUM_IO_SERIAL_FREESCALE_UART4_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS(uart_serial_channel4, + uart_serial_funs, + uart_serial_info4, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART4_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf4[0], + sizeof(uart_serial_out_buf4), + &uart_serial_in_buf4[0], + sizeof(uart_serial_in_buf4)); +#else +static +SERIAL_CHANNEL(uart_serial_channel4, + uart_serial_funs, + uart_serial_info4, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART4_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io4, + CYGDAT_IO_SERIAL_FREESCALE_UART4_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel4); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART4 + + +#if defined CYGPKG_IO_SERIAL_FREESCALE_UART5 +static const uart_pins_t uart5_pins = { + rx : CYGHWR_IO_FREESCALE_UART5_PIN_RX, + tx : CYGHWR_IO_FREESCALE_UART5_PIN_TX, + rts : CYGHWR_IO_FREESCALE_UART5_PIN_RTS, + cts : CYGHWR_IO_FREESCALE_UART5_PIN_CTS +}; +static uart_serial_info uart_serial_info5 = { + uart_base : CYGADDR_IO_SERIAL_FREESCALE_UART5_BASE, + interrupt_num : CYGNUM_IO_SERIAL_FREESCALE_UART5_INT_VECTOR, + interrupt_priority : CYGNUM_IO_SERIAL_FREESCALE_UART5_INT_PRIORITY, + clock : CYGHWR_IO_FREESCALE_UART5_CLOCK, + pins_p : &uart5_pins +}; +#if CYGNUM_IO_SERIAL_FREESCALE_UART5_BUFSIZE > 0 +static unsigned char + uart_serial_out_buf5[CYGNUM_IO_SERIAL_FREESCALE_UART5_BUFSIZE]; +static unsigned char + uart_serial_in_buf5[CYGNUM_IO_SERIAL_FREESCALE_UART5_BUFSIZE]; + +static +SERIAL_CHANNEL_USING_INTERRUPTS(uart_serial_channel5, + uart_serial_funs, + uart_serial_info5, + CYG_SERIAL_BAUD_RATE( + CYGNUM_IO_SERIAL_FREESCALE_UART5_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &uart_serial_out_buf5[0], + sizeof(uart_serial_out_buf5), + &uart_serial_in_buf5[0], + sizeof(uart_serial_in_buf5)); +#else +static +SERIAL_CHANNEL(uart_serial_channel5, + uart_serial_funs, + uart_serial_info5, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_UART5_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT); +#endif +DEVTAB_ENTRY(uart_serial_io5, + CYGDAT_IO_SERIAL_FREESCALE_UART5_NAME, + 0, // does not depend on a lower level device driver + &cyg_io_serial_devio, + uart_serial_init, + uart_serial_lookup, + &uart_serial_channel5); +#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_UART5 diff --git a/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_termiostty_add.inl b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_termiostty_add.inl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_termiostty_add.inl @@ -0,0 +1,79 @@ +#ifndef CYGONCE_SER_FREESCALE_UART_TERMIOS_ADD_INL +#define CYGONCE_SER_FREESCALE_UART_TERMIOS_ADD_INL +//============================================================================= +// +// ser_freescale_uart_termiostty_add.inl +// +// Termios definitions beyond #3. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-03-28 +// Purpose: Termios definitions beyond #3. +// Description: +// Usage: This file is included by pkgconf/io/serial.h +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + +#ifdef CYGPKG_IO_SERIAL_TERMIOS_TERMIOS4 +static struct termios_private_info termios_private_info4; +DEVTAB_ENTRY(termios_io4, + "/dev/termios4", + CYGDAT_IO_SERIAL_TERMIOS_TERMIOS4_DEV, + &termios_devio, + termios_init, + termios_lookup, + &termios_private_info4); +#endif + +#ifdef CYGPKG_IO_SERIAL_TERMIOS_TERMIOS5 +static struct termios_private_info termios_private_info5; +DEVTAB_ENTRY(termios_io5, + "/dev/termios5", + CYGDAT_IO_SERIAL_TERMIOS_TERMIOS5_DEV, + &termios_devio, + termios_init, + termios_lookup, + &termios_private_info5); +#endif +//----------------------------------------------------------------------------- +// end of ser_freescale_uart_termiostty_add.inl +#endif // CYGONCE_SER_FREESCALE_UART_TERMIOS_ADD_INL diff --git a/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_tty_add.inl b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_tty_add.inl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/include/ser_freescale_uart_tty_add.inl @@ -0,0 +1,79 @@ +#ifndef CYGONCE_SER_FREESCALE_UART_TTY_ADD_INL +#define CYGONCE_SER_FREESCALE_UART_TTY_ADD_INL +//============================================================================= +// +// ser_freescale_uart_tty_add.inl +// +// TTY definitions beyond #3. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-03-28 +// Purpose: TTY definitions beyond 3. +// Description: +// Usage: This file is included by pkgconf/io/serial.h +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + +#ifdef CYGPKG_IO_SERIAL_TTY_TTY4 +static struct tty_private_info tty_private_info4; +DEVTAB_ENTRY(tty_io4, + "/dev/tty4", + CYGDAT_IO_SERIAL_TTY_TTY4_DEV, + &tty_devio, + tty_init, + tty_lookup, // Execute this when device is being looked up + &tty_private_info4); +#endif + +#ifdef CYGPKG_IO_SERIAL_TTY_TTY5 +static struct tty_private_info tty_private_info5; +DEVTAB_ENTRY(tty_io5, + "/dev/tty5", + CYGDAT_IO_SERIAL_TTY_TTY5_DEV, + &tty_devio, + tty_init, + tty_lookup, // Execute this when device is being looked up + &tty_private_info5); +#endif +//----------------------------------------------------------------------------- +// end of ser_freescale_uart_tty_add.inl +#endif // CYGONCE_SER_FREESCALE_UART_TTY_ADD_INL diff --git a/packages/devs/serial/freescale/uart/drv/current/src/ser_freescale_uart.c b/packages/devs/serial/freescale/uart/drv/current/src/ser_freescale_uart.c new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/drv/current/src/ser_freescale_uart.c @@ -0,0 +1,397 @@ +//========================================================================== +// +// ser_freescale_uart.c +// +// Freescale UART Serial I/O Interface Module (interrupt driven) +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-02-10 +// Purpose: Freescale UART Serial I/O module (interrupt driven version) +// Description: +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Only build this driver for if Freescale UART is needed. +#ifdef CYGPKG_IO_SERIAL_FREESCALE_UART + +typedef struct uart_pins_s { + cyg_uint32 rx; + cyg_uint32 tx; + cyg_uint32 rts; + cyg_uint32 cts; +} uart_pins_t; + + +typedef struct uart_serial_info { + CYG_ADDRWORD uart_base; // Base address of the uart port + CYG_WORD interrupt_num; // NVIC interrupt vector + cyg_priority_t interrupt_priority; // NVIC interupt priority + const uart_pins_t *pins_p; // Rx, Tx, etc. + cyg_uint32 clock; // Clock gate + cyg_bool tx_active; + cyg_interrupt interrupt_obj; // Interrupt object + cyg_handle_t interrupt_handle; // Interrupt handle +} uart_serial_info; + +static bool uart_serial_init(struct cyg_devtab_entry * tab); +static bool uart_serial_putc(serial_channel * chan, unsigned char c); +static Cyg_ErrNo uart_serial_lookup(struct cyg_devtab_entry ** tab, + struct cyg_devtab_entry * sub_tab, + const char * name); +static unsigned char uart_serial_getc(serial_channel *chan); +static Cyg_ErrNo uart_serial_set_config(serial_channel *chan, cyg_uint32 key, + const void *xbuf, cyg_uint32 *len); +static void uart_serial_start_xmit(serial_channel *chan); +static void uart_serial_stop_xmit(serial_channel *chan); + +// Interrupt servers +static cyg_uint32 uart_serial_ISR(cyg_vector_t vector, cyg_addrword_t data); +static void uart_serial_DSR(cyg_vector_t vector, cyg_ucount32 count, + cyg_addrword_t data); + +static SERIAL_FUNS(uart_serial_funs, + uart_serial_putc, + uart_serial_getc, + uart_serial_set_config, + uart_serial_start_xmit, + uart_serial_stop_xmit); + +// Available baud rates +static cyg_int32 select_baud[] = { + 0, // Unused + 50, // 50 + 75, // 75 + 110, // 110 + 0, // 134.5 + 150, // 150 + 200, // 200 + 300, // 300 + 600, // 600 + 1200, // 1200 + 1800, // 1800 + 2400, // 2400 + 3600, // 3600 + 4800, // 4800 + 7200, // 7200 + 9600, // 9600 + 14400, // 14400 + 19200, // 19200 + 38400, // 38400 + 57600, // 57600 + 115200, // 115200 + 230400, // 230400 +}; + +#include + +//---------------------------------------------------------------------------- +// Internal function to actually configure the hardware to desired +// baud rate, etc. +//---------------------------------------------------------------------------- +static bool +uart_serial_config_port(serial_channel * chan, cyg_serial_info_t * new_config, + bool init) +{ + cyg_uint32 regval; + uart_serial_info * uart_chan = (uart_serial_info *)(chan->dev_priv); + cyg_addrword_t uart_base = uart_chan->uart_base; + cyg_uint32 baud_rate = select_baud[new_config->baud]; + + if(!baud_rate) return false; // Invalid baud rate selected + + // Bring clock to the sevice + CYGHWR_IO_CLOCK_ENABLE(uart_chan->clock); + // Configure PORT pins + CYGHWR_IO_FREESCALE_UART_PIN(uart_chan->pins_p->rx); + CYGHWR_IO_FREESCALE_UART_PIN(uart_chan->pins_p->tx); + + CYGHWR_IO_FREESCALE_UART_BAUD_SET(uart_base, baud_rate); + + if(new_config->word_length != 8) + return false; + + switch(new_config->parity) { + case CYGNUM_SERIAL_PARITY_NONE: + regval = 0; + break; + case CYGNUM_SERIAL_PARITY_EVEN: + regval = CYGHWR_DEV_FREESCALE_UART_C1_PE; + break; + case CYGNUM_SERIAL_PARITY_ODD: + regval = CYGHWR_DEV_FREESCALE_UART_C1_PE | + CYGHWR_DEV_FREESCALE_UART_C1_PT; + break; + default: return false; + } + + HAL_WRITE_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C1, regval); + + if(init) { // Enable the receiver interrupt + regval = CYGHWR_DEV_FREESCALE_UART_C2_RIE; + } else { // Restore the old interrupt state + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, regval); + } + + // Enable the device + regval |= CYGHWR_DEV_FREESCALE_UART_C2_TE | + CYGHWR_DEV_FREESCALE_UART_C2_RE; + + HAL_WRITE_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, regval); + + uart_chan->tx_active = false; + + if(new_config != &chan->config) + chan->config = *new_config; + + return true; +} + +//-------------------------------------------------------------- +// Function to initialize the device. Called at bootstrap time. +//-------------------------------------------------------------- +static bool +uart_serial_init(struct cyg_devtab_entry * tab) +{ + serial_channel * chan = (serial_channel *)tab->priv; + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + + // Really only required for interrupt driven devices + (chan->callbacks->serial_init)(chan); + if(chan->out_cbuf.len != 0) { + cyg_drv_interrupt_create(uart_chan->interrupt_num, + uart_chan->interrupt_priority, + // Data item passed to interrupt handler + (cyg_addrword_t)chan, + uart_serial_ISR, + uart_serial_DSR, + &uart_chan->interrupt_handle, + &uart_chan->interrupt_obj); + + cyg_drv_interrupt_attach(uart_chan->interrupt_handle); + cyg_drv_interrupt_unmask(uart_chan->interrupt_num); + } + return uart_serial_config_port(chan, &chan->config, true); +} + +//---------------------------------------------------------------------- +// This routine is called when the device is "looked" up (i.e. attached) +//---------------------------------------------------------------------- +static Cyg_ErrNo +uart_serial_lookup(struct cyg_devtab_entry ** tab, + struct cyg_devtab_entry * sub_tab, const char * name) +{ + serial_channel * chan = (serial_channel *)(*tab)->priv; + // Really only required for interrupt driven devices + (chan->callbacks->serial_init)(chan); + + return ENOERR; +} + +//----------------------------------------------------------------- +// Send a character to Tx +//----------------------------------------------------------------- +static bool +uart_serial_putc(serial_channel * chan, unsigned char ch_out) +{ + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + cyg_addrword_t uart_base = uart_chan->uart_base; + cyg_uint32 uart_sr; + + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_S1, uart_sr); + if(uart_sr & CYGHWR_DEV_FREESCALE_UART_S1_TDRE) { + HAL_WRITE_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_D, ch_out); + return true; + } else { + return false; + } +} + + +//--------------------------------------------------------------------- +// Fetch a character Rx (for polled operation only) +//--------------------------------------------------------------------- +static unsigned char +uart_serial_getc(serial_channel * chan) +{ + cyg_uint8 ch_in; + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + cyg_addrword_t uart_base = uart_chan->uart_base; + + cyg_uint32 uart_sr; + + do { + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_S1, uart_sr); + } while(uart_sr & CYGHWR_DEV_FREESCALE_UART_S1_RDRF); + + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_D, ch_in); + + return ch_in; +} + + +//--------------------------------------------------- +// Set up the device characteristics; baud rate, etc. +//--------------------------------------------------- +static bool +uart_serial_set_config(serial_channel * chan, cyg_uint32 key, + const void *xbuf, cyg_uint32 * len) +{ + switch(key) { + case CYG_IO_SET_CONFIG_SERIAL_INFO: { + cyg_serial_info_t *config = (cyg_serial_info_t *)xbuf; + if(*len < sizeof(cyg_serial_info_t)) { + return -EINVAL; + } + *len = sizeof(cyg_serial_info_t); + if(true != uart_serial_config_port(chan, config, false)) + return -EINVAL; + } + break; + default: + return -EINVAL; + } + return ENOERR; +} + +//------------------------------------- +// Enable the transmitter on the device +//------------------------------------- +static void uart_serial_start_xmit(serial_channel * chan) +{ + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + cyg_addrword_t uart_base = uart_chan->uart_base; + cyg_uint32 uart_cr12; + + if(!uart_chan->tx_active) { + uart_chan->tx_active = true; + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, uart_cr12); + uart_cr12 |= CYGHWR_DEV_FREESCALE_UART_C2_TIE; + HAL_WRITE_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, uart_cr12); + } +} + +//-------------------------------------- +// Disable the transmitter on the device +//-------------------------------------- +static void uart_serial_stop_xmit(serial_channel * chan) +{ + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + + cyg_addrword_t uart_base = uart_chan->uart_base; + cyg_uint32 uart_cr12; + + if(uart_chan->tx_active) { + uart_chan->tx_active = false; + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, uart_cr12); + uart_cr12 &= ~CYGHWR_DEV_FREESCALE_UART_C2_TIE; + HAL_WRITE_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_C2, uart_cr12); + } +} + +//----------------------------------------- +// The low level interrupt handler +//----------------------------------------- +static +cyg_uint32 uart_serial_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + serial_channel * chan = (serial_channel *)data; + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + + cyg_drv_interrupt_mask(uart_chan->interrupt_num); + cyg_drv_interrupt_acknowledge(uart_chan->interrupt_num); + + return CYG_ISR_CALL_DSR; // cause the DSR to run +} + + +//------------------------------------------ +// The high level interrupt handler +//------------------------------------------ + +#define CYGHWR_DEV_FREESCALE_UART_S1_ERRORS \ + (CYGHWR_DEV_FREESCALE_UART_S1_OR | \ + CYGHWR_DEV_FREESCALE_UART_S1_NF | \ + CYGHWR_DEV_FREESCALE_UART_S1_FE | \ + CYGHWR_DEV_FREESCALE_UART_S1_PF) + +static void +uart_serial_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + serial_channel * chan = (serial_channel *)data; + uart_serial_info * uart_chan = (uart_serial_info *)chan->dev_priv; + cyg_addrword_t uart_base = uart_chan->uart_base; + volatile cyg_uint32 uart_sr; + cyg_uint8 uart_dr; + + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_S1, uart_sr); + if(uart_sr & (CYGHWR_DEV_FREESCALE_UART_S1_RDRF | + CYGHWR_DEV_FREESCALE_UART_S1_ERRORS)) { + // Receiver full or errors + HAL_READ_UINT8(uart_base + CYGHWR_DEV_FREESCALE_UART_D, uart_dr); + if(uart_sr & CYGHWR_DEV_FREESCALE_UART_S1_ERRORS) { + // Check for receive error + } else { // No errors, get the character + (chan->callbacks->rcv_char)(chan, (cyg_uint8)uart_dr); + } + } + + if(uart_chan->tx_active && (uart_sr & CYGHWR_DEV_FREESCALE_UART_S1_TDRE)){ + //Transmitter empty + (chan->callbacks->xmt_char)(chan); + } + + cyg_drv_interrupt_unmask(uart_chan->interrupt_num); +} + +#endif // CYGPKG_IO_SERIAL_FREESCALE_UART +// EOF ser_freescale_uart.c diff --git a/packages/devs/serial/freescale/uart/hdr/current/ChangeLog b/packages/devs/serial/freescale/uart/hdr/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/hdr/current/ChangeLog @@ -0,0 +1,34 @@ +2013-04-01 Ilija Kocho + + * include/ser_freescale_uart.h: Add clock gating comment. + [ Bugzilla 1001814 ] + +2011-03-26 Ilija Kocho + + * cdl/ser_freescale_uart_hdr.cdl: + * include/ser_freescale_uart.h: + New package -- Freescale UART header. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/serial/freescale/uart/hdr/current/cdl/ser_freescale_uart_hdr.cdl b/packages/devs/serial/freescale/uart/hdr/current/cdl/ser_freescale_uart_hdr.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/hdr/current/cdl/ser_freescale_uart_hdr.cdl @@ -0,0 +1,68 @@ +# ==================================================================== +# +# ser_freescale_uart_h.cdl +# +# eCos serial Freescale UART configuration data +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2006 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Ilija Kocho +# Original data: +# Contributors: +# Date: 2011-02-05 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_IO_SERIAL_FREESCALE_UART_HDR { + display "Freescale UART header" + + include_dir cyg/io + description " + This pacckage provides header file with definitions and macros for + Freescale UART. Same header is used by Freescale UART serial driver + as well as by HAL. Freescale UART is on-chip serial controller found + on some Freescale micro-controllers such as Kinetis familly, etc." + + define_proc { + puts $::cdl_system_header "/***** serial driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_DEVICE_HDR_HEADER " + puts $::cdl_system_header "/***** serial driver proc output end *****/" + } +} + +# EOF ser_freescale_uart_h.cdl diff --git a/packages/devs/serial/freescale/uart/hdr/current/include/ser_freescale_uart.h b/packages/devs/serial/freescale/uart/hdr/current/include/ser_freescale_uart.h new file mode 100644 --- /dev/null +++ b/packages/devs/serial/freescale/uart/hdr/current/include/ser_freescale_uart.h @@ -0,0 +1,144 @@ +#ifndef CYGONCE_DEVS_SERIAL_FREESCALE_UART_H +#define CYGONCE_DEVS_SERIAL_FREESCALE_UART_H +//========================================================================== +// +// ser_freescale_uart.h +// +// Freescale UART I/O definitions. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-02-05 +// Purpose: Freescale UART I/O definitions. +// Description: +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +enum { + CYGHWR_DEV_FREESCALE_UART_BDH, // UART Baud Rate Register High + CYGHWR_DEV_FREESCALE_UART_BDL, // UART Baud Rate Register Low + CYGHWR_DEV_FREESCALE_UART_C1, // UART Control Register 1 + CYGHWR_DEV_FREESCALE_UART_C2, // UART Control Register 2 + CYGHWR_DEV_FREESCALE_UART_S1, // UART Status Register 1 + CYGHWR_DEV_FREESCALE_UART_S2, // UART Status Register 2 + CYGHWR_DEV_FREESCALE_UART_C3, // UART Control Register 3 + CYGHWR_DEV_FREESCALE_UART_D, // UART Data Register + CYGHWR_DEV_FREESCALE_UART_MA1, // UART Match Address Registers 1 + CYGHWR_DEV_FREESCALE_UART_MA2, // UART Match Address Registers 2 + CYGHWR_DEV_FREESCALE_UART_C4, // UART Control Register 4 + CYGHWR_DEV_FREESCALE_UART_C5, // UART Control Register 5 + CYGHWR_DEV_FREESCALE_UART_ED, // UART Extended Data Register + CYGHWR_DEV_FREESCALE_UART_MODEM, // UART Modem Register + CYGHWR_DEV_FREESCALE_UART_IR, // UART Infrared Register + CYGHWR_DEV_FREESCALE_UART_Res_0, + CYGHWR_DEV_FREESCALE_UART_PFIFO, // UART FIFO Parameters + CYGHWR_DEV_FREESCALE_UART_CFIFO, // UART FIFO Control Register + CYGHWR_DEV_FREESCALE_UART_SFIFO, // UART FIFO Status Register + CYGHWR_DEV_FREESCALE_UART_TWFIFO, // UART FIFO Transmit Watermark + CYGHWR_DEV_FREESCALE_UART_TCFIFO, // UART FIFO Transmit Count + CYGHWR_DEV_FREESCALE_UART_RWFIFO, // UART FIFO Receive Watermark + CYGHWR_DEV_FREESCALE_UART_RCFIFO, // UART FIFO Receive Count + CYGHWR_DEV_FREESCALE_UART_Res_1, + CYGHWR_DEV_FREESCALE_UART_C7816, // UART 7816 Control Register + CYGHWR_DEV_FREESCALE_UART_IE7816, // UART 7816 Interrupt Enable Register + CYGHWR_DEV_FREESCALE_UART_IS7816, // UART 7816 Interrupt Status Register + CYGHWR_DEV_FREESCALE_UART_WP7816_T0T1, // UART 7816 Wait Parameter Register + CYGHWR_DEV_FREESCALE_UART_WN7816, // UART 7816 Wait N Register + CYGHWR_DEV_FREESCALE_UART_WF7816, // UART 7816 Wait FD Register + CYGHWR_DEV_FREESCALE_UART_ET7816, // UART 7816 Error Threshold Register + CYGHWR_DEV_FREESCALE_UART_TL7816 // UART 7816 Transmit Length Register +}; + +// CYGHWR_IO_FREESCALE_UART_BAUD_SET(__uart_p, _baud_) should be provided by HAL. +// CYGHWR_IO_FREESCALE_UART_PIN(__pin) should be provided by HAL. +// CYGHWR_IO_FREESCALE_UARTn_CLOCK should be provided by HAL. +// CYGHWR_IO_FREESCALE_UARTn_PIN_RX should be provided by HAL. +// CYGHWR_IO_FREESCALE_UARTn_PIN_TX should be provided by HAL. +// CYGHWR_IO_FREESCALE_UARTn_PIN_RTS should be provided by HAL. +// CYGHWR_IO_FREESCALE_UARTn_PIN_CTS should be provided by HAL. + + +#define CYGHWR_DEV_FREESCALE_UART_C1_LOOPS (0x80) +#define CYGHWR_DEV_FREESCALE_UART_C1_UARTSWAI (0x40) +#define CYGHWR_DEV_FREESCALE_UART_C1_RSRC (0x20) +#define CYGHWR_DEV_FREESCALE_UART_C1_M (0x10) +#define CYGHWR_DEV_FREESCALE_UART_C1_WAKE (0x08) +#define CYGHWR_DEV_FREESCALE_UART_C1_ILT (0x04) +#define CYGHWR_DEV_FREESCALE_UART_C1_PE (0x02) +#define CYGHWR_DEV_FREESCALE_UART_C1_PT (0x01) + +#define CYGHWR_DEV_FREESCALE_UART_C2_TIE (0x80) +#define CYGHWR_DEV_FREESCALE_UART_C2_TCIE (0x40) +#define CYGHWR_DEV_FREESCALE_UART_C2_RIE (0x20) +#define CYGHWR_DEV_FREESCALE_UART_C2_ILIE (0x10) +#define CYGHWR_DEV_FREESCALE_UART_C2_TE (0x08) +#define CYGHWR_DEV_FREESCALE_UART_C2_RE (0x04) +#define CYGHWR_DEV_FREESCALE_UART_C2_RWU (0x02) +#define CYGHWR_DEV_FREESCALE_UART_C2_SBK (0x01) + +#define CYGHWR_DEV_FREESCALE_UART_S1_TDRE (0x80) +#define CYGHWR_DEV_FREESCALE_UART_S1_TC (0x40) +#define CYGHWR_DEV_FREESCALE_UART_S1_RDRF (0x20) +#define CYGHWR_DEV_FREESCALE_UART_S1_IDLE (0x10) +#define CYGHWR_DEV_FREESCALE_UART_S1_OR (0x08) +#define CYGHWR_DEV_FREESCALE_UART_S1_NF (0x04) +#define CYGHWR_DEV_FREESCALE_UART_S1_FE (0x02) +#define CYGHWR_DEV_FREESCALE_UART_S1_PF (0x01) + +#define CYGHWR_DEV_FREESCALE_UART_S2_LBKDIF (0x80) +#define CYGHWR_DEV_FREESCALE_UART_S2_RXEDGIF (0x40) +#define CYGHWR_DEV_FREESCALE_UART_S2_MSBF (0x20) +#define CYGHWR_DEV_FREESCALE_UART_S2_RXINV (0x10) +#define CYGHWR_DEV_FREESCALE_UART_S2_RWUID (0x08) +#define CYGHWR_DEV_FREESCALE_UART_S2_BRK13 (0x04) +#define CYGHWR_DEV_FREESCALE_UART_S2_LBKDE (0x02) +#define CYGHWR_DEV_FREESCALE_UART_S2_RAF (0x01) + +#define CYGHWR_DEV_FREESCALE_UART_C3_R8 (0x80) +#define CYGHWR_DEV_FREESCALE_UART_C3_T8 (0x40) +#define CYGHWR_DEV_FREESCALE_UART_C3_TXDIR (0x20) +#define CYGHWR_DEV_FREESCALE_UART_C3_TXINV (0x10) +#define CYGHWR_DEV_FREESCALE_UART_C3_ORIE (0x08) +#define CYGHWR_DEV_FREESCALE_UART_C3_NEIE (0x04) +#define CYGHWR_DEV_FREESCALE_UART_C3_FEIE (0x02) +#define CYGHWR_DEV_FREESCALE_UART_C3_PEIE (0x01) + + +#endif // CYGONCE_DEVS_SERIAL_FREESCALE_UART_H diff --git a/packages/devs/serial/generic/16x5x/current/ChangeLog b/packages/devs/serial/generic/16x5x/current/ChangeLog --- a/packages/devs/serial/generic/16x5x/current/ChangeLog +++ b/packages/devs/serial/generic/16x5x/current/ChangeLog @@ -1,3 +1,8 @@ +2012-02-07 Bernard Fouché + + * src/ser_16x5x.c (serial_config_port): Clear potential Overrun Error + condition at init by always reading RHR. + 2009-02-17 Rene Schipp von Branitz Nielsen * src/ser_16x5x.c: diff --git a/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c b/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c --- a/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c +++ b/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2006 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -332,6 +332,8 @@ serial_config_port(serial_channel *chan, CYGNUM_IO_SERIAL_GENERIC_16X5X_FIFO_TX_SIZE; // Enable and clear FIFO HAL_WRITE_UINT8(base+REG_fcr, _fcr_thresh); + // Read RHR to clear potential Overrun Error + HAL_READ_UINT8(base+REG_rhr, b); } else { ser_chan->tx_fifo_size = 1; diff --git a/packages/devs/serial/powerpc/quicc/current/ChangeLog b/packages/devs/serial/powerpc/quicc/current/ChangeLog --- a/packages/devs/serial/powerpc/quicc/current/ChangeLog +++ b/packages/devs/serial/powerpc/quicc/current/ChangeLog @@ -1,3 +1,8 @@ +2010-12-06 Mark Retallack + + * src/quicc_smc_serial.c: Wait for CPM Busy Flag to clear on write to + CP Command Register + 2006-01-27 Will Wagner * src/quicc_smc_serial.h: Removed unused structure diff --git a/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c b/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c --- a/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c +++ b/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c @@ -339,6 +339,11 @@ quicc_smc_serial_config_port(serial_chan volatile struct smc_regs *ctl = (volatile struct smc_regs *)smc_chan->ctl; if (baud_divisor == 0) return false; + // Stop transmitter while changing baud rate + eppc->cp_cr = smc_chan->channel | QUICC_SMC_CMD_Go | QUICC_SMC_CMD_StopTx; + while (eppc->cp_cr & QUICC_SMC_CMD_Go ) + continue; + HAL_IO_BARRIER(); // Inforce I/O ordering // Disable channel during setup ctl->smc_smcmr = QUICC_SMCMR_UART; // Disabled, UART mode HAL_IO_BARRIER(); // Inforce I/O ordering @@ -346,8 +351,6 @@ quicc_smc_serial_config_port(serial_chan _lcr = QUICC_SMCMR_CLEN(new_config->word_length + ((new_config->parity == CYGNUM_SERIAL_PARITY_NONE)? 0: 1) + ((new_config->stop == CYGNUM_SERIAL_STOP_2)? 2: 1)) | smc_select_stop_bits[new_config->stop] | smc_select_parity[new_config->parity]; - // Stop transmitter while changing baud rate - eppc->cp_cr = smc_chan->channel | QUICC_SMC_CMD_Go | QUICC_SMC_CMD_StopTx; HAL_IO_BARRIER(); // Inforce I/O ordering // Set baud rate generator *smc_chan->brg = 0x10000 | (UART_BITRATE(baud_divisor)<<1); @@ -356,6 +359,8 @@ quicc_smc_serial_config_port(serial_chan ctl->smc_smcmr = QUICC_SMCMR_UART|QUICC_SMCMR_TEN|QUICC_SMCMR_REN|_lcr; HAL_IO_BARRIER(); // Inforce I/O ordering eppc->cp_cr = smc_chan->channel | QUICC_SMC_CMD_Go | QUICC_SMC_CMD_RestartTx; + while (eppc->cp_cr & QUICC_SMC_CMD_Go ) + continue; if (new_config != &chan->config) { chan->config = *new_config; } @@ -453,6 +458,8 @@ quicc_smc_serial_init_info(quicc_sxx_ser */ HAL_IO_BARRIER(); // Inforce I/O ordering eppc->cp_cr = smc_chan->channel | QUICC_SMC_CMD_Go | QUICC_SMC_CMD_InitTxRx; + while (eppc->cp_cr & QUICC_SMC_CMD_Go ) + continue; HAL_IO_BARRIER(); // Inforce I/O ordering /* * Clear any previous events. Enable interrupts. @@ -491,7 +498,8 @@ quicc_scc_serial_config_port(serial_chan */ HAL_IO_BARRIER(); // Inforce I/O ordering eppc->cp_cr = QUICC_CPM_CR_INIT_TXRX | scc_chan->channel | QUICC_CPM_CR_BUSY; - + while (eppc->cp_cr & QUICC_CPM_CR_BUSY ) + continue; HAL_IO_BARRIER(); // Inforce I/O ordering regs->scc_gsmr_l |= (QUICC_SCC_GSMR_L_Tx | QUICC_SCC_GSMR_L_Rx); // Enable Rx, Tx if (new_config != &chan->config) { @@ -603,6 +611,8 @@ quicc_scc_serial_init_info(quicc_sxx_ser */ HAL_IO_BARRIER(); // Inforce I/O ordering eppc->cp_cr = scc_chan->channel | QUICC_SMC_CMD_Go | QUICC_SMC_CMD_InitTxRx; + while (eppc->cp_cr & QUICC_SMC_CMD_Go ) + continue; /* * Clear any previous events. Enable interrupts. * (Section 16.15.7.14 and 16.15.7.15) diff --git a/packages/devs/spi/cortexm/a2fxxx/current/ChangeLog b/packages/devs/spi/cortexm/a2fxxx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/spi/cortexm/a2fxxx/current/ChangeLog @@ -0,0 +1,35 @@ +2012-01-04 Christophe Coutand + * src/spi_a2fxxx.c: + Fix compiler warning, used uninitialized variable in a2fxxx_spi_set_ss(). + +2011-04-13 Christophe Coutand + + * cdl/spi_a2fxxx.cdl: + * include/spi_a2fxxx.h: + * src/spi_a2fxxx.c: + New package -- Smartfusion Cortex-M3 SPI driver package. + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/spi/cortexm/a2fxxx/current/cdl/spi_a2fxxx.cdl b/packages/devs/spi/cortexm/a2fxxx/current/cdl/spi_a2fxxx.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/spi/cortexm/a2fxxx/current/cdl/spi_a2fxxx.cdl @@ -0,0 +1,175 @@ +##============================================================================= +## +## spi_a2fxxx.cdl +## +## Smartfusion Cortex-M3 SPI driver configuration options. +## +##============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand, updated for Smartfusion Cortex-M3 +## Original(s): Chris Holgate +## Date: 2011-04-25 +## Purpose: Configure Smartfusion Cortex-M3 SPI driver. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +cdl_package CYGPKG_DEVS_SPI_CORTEXM_A2FXXX { + display "Actel Smartfusion SPI driver" + description " + This package provides SPI driver support for the Smartfusion Cortex-M3 + series of microcontrollers. + " + parent CYGPKG_IO_SPI + active_if CYGPKG_IO_SPI + requires CYGPKG_HAL_CORTEXM_A2FXXX + hardware + include_dir cyg/io + compile -library=libextras.a spi_a2fxxx.c + + cdl_option CYGDBG_DEVS_SPI_CORTEXM_A2FXXX_TRACE { + display "Display status messages during SPI operations" + flavor bool + default_value 0 + description " + Selecting this option will cause the SPI driver to print status + messages as various SPI operations are undertaken." + } + + cdl_component CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1 { + display "Actel Smartfusion SPI bus 1" + description " + Enable SPI bus 1 on the A2FXXX device. + " + flavor bool + default_value false + + cdl_option CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_TX_DMA { + display "Transmit DMA channel number" + flavor data + default_value 0 + } + + cdl_option CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_RX_DMA { + display "Receive DMA channel number" + flavor data + default_value 1 + } + + cdl_option CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS1_TX_DMA_PRI { + display "Transmit DMA channel priority" + legal_values { "HIGH" "LOW" } + flavor data + default_value { "HIGH" } + } + + cdl_option CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS1_RX_DMA_PRI { + display "Receive DMA channel priority" + legal_values { "HIGH" "LOW" } + flavor data + default_value { "HIGH" } + } + } + + cdl_component CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS2 { + display "Actel Smartfusion SPI bus 2" + description " + Enable SPI bus 2 on the A2FXXX device. + " + flavor bool + default_value false + + cdl_option CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_TX_DMA { + display "Transmit DMA channel number" + flavor data + default_value 2 + } + + cdl_option CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_RX_DMA { + display "Receive DMA channel number" + flavor data + default_value 3 + } + + cdl_option CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS2_TX_DMA_PRI { + display "Transmit DMA channel priority" + legal_values { "HIGH" "LOW" } + flavor data + default_value { "HIGH" } + } + + cdl_option CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS2_RX_DMA_PRI { + display "Receive DMA channel priority" + legal_values { "HIGH" "LOW" } + flavor data + default_value { "HIGH" } + } + } + + cdl_component CYGPKG_DEVS_SPI_CORTEXM_A2FXXX_OPTIONS { + display "Actel Smartfusion SPI driver build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + cdl_option CYGPKG_DEVS_SPI_CORTEXM_A2FXXX_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the A2FXXX SPI driver. These flags are used in addition + to the set of global flags." + } + + cdl_option CYGPKG_DEVS_SPI_CORTEXM_A2FXXX_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the A2FXXX SPI driver. These flags are removed from + the set of global flags if present." + } + } + +} +# EOF spi_a2fxxx.cdl diff --git a/packages/devs/spi/cortexm/a2fxxx/current/include/spi_a2fxxx.h b/packages/devs/spi/cortexm/a2fxxx/current/include/spi_a2fxxx.h new file mode 100644 --- /dev/null +++ b/packages/devs/spi/cortexm/a2fxxx/current/include/spi_a2fxxx.h @@ -0,0 +1,195 @@ +#ifndef CYGONCE_DEVS_SPI_CORTEXM_STM32_H +# define CYGONCE_DEVS_SPI_CORTEXM_STM32_H +//============================================================================= +// +// spi_a2fxxx.h +// +// Header definitions for Smartfusion Cortex-M3 SPI driver. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Smartfusion Cortex-M3 +// Original(s): Chris Holgate +// Date: 2011-04-25 +// Purpose: Smartfusion Cortex-M3 SPI driver definitions. +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +# include +# include +# include + +# include +# include +# include + +__externC cyg_uint32 a2fxxx_dma_ch_attach(cyg_uint8, cyg_ISR_t *, cyg_DSR_t *, + cyg_addrword_t); + +typedef enum a2fxxx_spi_mode { + A2FXXX_SPI_MOTOROLA = 0x00, + A2FXXX_SPI_TI_SYNC_SERIAL = 0x01, + A2FXXX_SPI_NS_MICROWIRE = 0x02 +} a2fxxx_spi_mode; + +//----------------------------------------------------------------------------- +// Macro for defining a SPI device and attaching it to the appropriate bus. +// +// _name_ is the name of the SPI device. This will be used to reference a +// data structure of type cyg_spi_device which can be passed to the +// SPI driver API without needing a cast. +// _bus_ is the bus number to which this device is attached (1, 2 or 3). +// _csnum_ when _csgpio_ is set to false : is the chip select line used for +// this device, numbered from 0. +// when _csgpio_ is set to true : is the GPIO number used to drive the +// device chip select line. +// _csgpio_ when set to false, the device chip select line is controlled by the +// SPI controller. +// when set to true, the device chip select line is a GPIO of the processor +// control by the SPI driver. +// _proto_ is the SPI bus protocol: +// 0 -> Motorola SPI Protocol (_clpol_ and _clpha_ are valid in this mode) +// 1 -> National Semiconductor MICROWIRE Protocol +// 2 -> Texas Instruments (TI) Synchronous Serial Protocol +// _clpol_ is the SPI bus clock polarity used by the device. This must be +// set to 1 if a clock line pullup resistor is used and 0 if a +// clock line pulldown resistor is used. +// _clpha_ is the SPI bus clock phase used by the device. +// _brate_ is the SPI bus clock baud rate used by the device, measured in Hz. +// _csup_dly_ is the minimum delay between chip select assert and transfer +// start, measured in microseconds. +// _csdw_dly_ is the minimum delay between transfer end and chip select deassert, +// measured in microseconds. +// _trbt_dly_ is the minimum delay between consecutive transfers. + +# define CYG_DEVS_SPI_CORTEXM_A2FXXX_DEVICE( \ + _name_, _bus_, _csnum_, _csgpio_, _proto_, _clpol_, _clpha_, _brate_, _csup_dly_, _csdw_dly_, _trbt_dly_\ +) \ +cyg_spi_cortexm_a2fxxx_device_t _name_ ##_a2fxxx CYG_SPI_DEVICE_ON_BUS(_bus_) = { \ +{ .spi_bus = (cyg_spi_bus*) &cyg_spi_a2fxxx_bus## _bus_ }, \ + .dev_num = _csnum_, \ + .cs_gpio = _csgpio_, \ + .cs_gpio_n = _csnum_, \ + .proto = _proto_, \ + .cl_pol = _clpol_, \ + .cl_pha = _clpha_, \ + .cl_brate = _brate_, \ + .cs_up_udly = _csup_dly_, \ + .cs_dw_udly = _csdw_dly_, \ + .tr_bt_udly = _trbt_dly_, \ + .spi_cr_val = 0, \ +}; \ +extern cyg_spi_device _name_ __attribute__((alias ( #_name_ "_a2fxxx" ))); + +//----------------------------------------------------------------------------- +// A2FXXX SPI bus configuration and state. + +typedef struct cyg_spi_cortexm_a2fxxx_bus_setup_s { + cyg_uint32 apb_freq; // Peripheral bus frequency (fp). + cyg_haladdress spi_reg_base; // Base address of SPI register block. + cyg_haladdress dma_reg_base; // Base address of DMA register block. + cyg_uint8 dma_tx_channel; // TX DMA channel for this bus. + cyg_uint8 dma_rx_channel; // RX DMA channel for this bus. + cyg_uint8 cs_gpio_num; // Number of chip selects for this bus. + const cyg_uint8 *cs_gpio_list; // List of GPIOs used as chip selects. + const cyg_uint8 *spi_gpio_list; // List of GPIOs used by the SPI interface. + cyg_bool dma_tx_pri; // Priority for DMA transmit. + cyg_bool dma_rx_pri; // Priority for DMA receive. + cyg_haladdress *rx_dma_null; + cyg_haladdress *tx_dma_null; +} cyg_spi_cortexm_a2fxxx_bus_setup_t; + +typedef struct cyg_spi_cortexm_a2fxxx_bus_s { + // ---- Upper layer data ---- + cyg_spi_bus spi_bus; // Upper layer SPI bus data. + + // ---- Bus configuration constants ---- + const cyg_spi_cortexm_a2fxxx_bus_setup_t *setup; + + // ---- Driver state (private) ---- + cyg_interrupt tx_intr_data; // DMA interrupt data (TX). + cyg_interrupt rx_intr_data; // DMA interrupt data (RX). + cyg_handle_t tx_intr_handle; // DMA interrupt handle (TX). + cyg_handle_t rx_intr_handle; // DMA interrupt handle (RX). + cyg_drv_mutex_t mutex; // Transfer mutex. + cyg_drv_cond_t condvar; // Transfer condition variable. + cyg_bool tx_dma_done; // Flags used to signal completion. + cyg_bool rx_dma_done; // Flags used to signal completion. + cyg_bool cs_up; // Chip select asserted flag. + +} cyg_spi_cortexm_a2fxxx_bus_t; + +//----------------------------------------------------------------------------- +// A2FXXX SPI device. + +typedef struct cyg_spi_cortexm_a2fxxx_device_s { + // ---- Upper layer data ---- + cyg_spi_device spi_device; // Upper layer SPI device data. + + // ---- Device setup (user configurable) ---- + cyg_uint8 dev_num; // Device number. + a2fxxx_spi_mode proto; // Protocol + cyg_bool cs_gpio; // True = use GPIO to control CS line + cyg_uint32 cs_gpio_n; // GPIO # + cyg_uint8 cl_pol; // Clock polarity (0 or 1). + cyg_uint8 cl_pha; // Clock phase (0 or 1). + cyg_uint32 cl_brate; // Clock baud rate. + cyg_uint16 cs_up_udly; // Minimum delay in us between CS up and transfer start. + cyg_uint16 cs_dw_udly; // Minimum delay in us between transfer end and CS down. + cyg_uint16 tr_bt_udly; // Minimum delay in us between two transfers. + + // ---- Device state (private) ---- + cyg_uint32 spi_cr_val; // SPI configuration register (initialised to 0). + +} cyg_spi_cortexm_a2fxxx_device_t; + +//----------------------------------------------------------------------------- +// Exported bus data structures. + +# ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1 +externC cyg_spi_cortexm_a2fxxx_bus_t cyg_spi_a2fxxx_bus1; +# endif + +# ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS2 +externC cyg_spi_cortexm_a2fxxx_bus_t cyg_spi_a2fxxx_bus2; +# endif + +//============================================================================= +#endif // CYGONCE_DEVS_SPI_CORTEXM_A2FXXX_H diff --git a/packages/devs/spi/cortexm/a2fxxx/current/src/spi_a2fxxx.c b/packages/devs/spi/cortexm/a2fxxx/current/src/spi_a2fxxx.c new file mode 100644 --- /dev/null +++ b/packages/devs/spi/cortexm/a2fxxx/current/src/spi_a2fxxx.c @@ -0,0 +1,638 @@ +//============================================================================= +// +// spi_a2fxxx.c +// +// SPI driver implementation for Smartfusion Cortex-M3 +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand, updated for Smartfusion Cortex-M3 +// Original(s): Chris Holgate +// Date: 2011-04-25 +// Purpose: Smartfusion Cortex-M3 SPI driver implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#include + +#if defined(CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1) || \ + defined(CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS2) + +#ifdef CYGDBG_DEVS_SPI_CORTEXM_A2FXXX_TRACE +# define SPI_TRACE(args...) diag_printf(args) +#else +# define SPI_TRACE(args...) +#endif + +//----------------------------------------------------------------------------- +// API function call forward references. + +static void a2fxxx_transaction_begin (cyg_spi_device*); +static void a2fxxx_transaction_transfer (cyg_spi_device*, cyg_bool, cyg_uint32, const cyg_uint8*, cyg_uint8*, cyg_bool); +static void a2fxxx_transaction_tick (cyg_spi_device*, cyg_bool, cyg_uint32); +static void a2fxxx_transaction_end (cyg_spi_device*); +static int a2fxxx_get_config (cyg_spi_device*, cyg_uint32, void*, cyg_uint32*); +static int a2fxxx_set_config (cyg_spi_device*, cyg_uint32, const void*, cyg_uint32*); + +//----------------------------------------------------------------------------- +// Instantiate the bus state data structures. + +#ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1 + +static cyg_haladdress rx1_dma_null = 0x0; +static cyg_haladdress tx1_dma_null = 0x0; + +static const cyg_spi_cortexm_a2fxxx_bus_setup_t bus1_setup = { + .spi_reg_base = CYGHWR_HAL_A2FXXX_SPI0, + .dma_reg_base = CYGHWR_HAL_A2FXXX_DMA, + .dma_tx_channel = CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_TX_DMA, + .dma_rx_channel = CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_RX_DMA, +#ifdef CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS1_TX_DMA_PRI_HIGH + .dma_tx_pri = true, +#else + .dma_tx_pri = false, +#endif +#ifdef CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS1_RX_DMA_PRI_HIGH + .dma_rx_pri = true, +#else + .dma_rx_pri = false, +#endif + .rx_dma_null = &rx1_dma_null, + .tx_dma_null = &tx1_dma_null, +}; + +cyg_spi_cortexm_a2fxxx_bus_t cyg_spi_a2fxxx_bus1 = { + .spi_bus.spi_transaction_begin = a2fxxx_transaction_begin, + .spi_bus.spi_transaction_transfer = a2fxxx_transaction_transfer, + .spi_bus.spi_transaction_tick = a2fxxx_transaction_tick, + .spi_bus.spi_transaction_end = a2fxxx_transaction_end, + .spi_bus.spi_get_config = a2fxxx_get_config, + .spi_bus.spi_set_config = a2fxxx_set_config, + .setup = &bus1_setup, + .cs_up = false +}; +#endif + +#ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS2 + +static cyg_haladdress rx2_dma_null = 0x0; +static cyg_haladdress tx2_dma_null = 0x0; + +static const cyg_spi_cortexm_a2fxxx_bus_setup_t bus2_setup = { + .spi_reg_base = CYGHWR_HAL_A2FXXX_SPI1, + .dma_reg_base = CYGHWR_HAL_A2FXXX_DMA, + .dma_tx_channel = CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_TX_DMA, + .dma_rx_channel = CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_RX_DMA, +#ifdef CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS2_TX_DMA_PRI_HIGH + .dma_tx_pri = true, +#else + .dma_tx_pri = false, +#endif +#ifdef CYGDAT_DEVS_SPI_CORTEXM_A2FXXX_BUS2_RX_DMA_PRI_HIGH + .dma_rx_pri = true, +#else + .dma_rx_pri = false, +#endif + .rx_dma_null = &rx2_dma_null, + .tx_dma_null = &tx2_dma_null, +}; + +cyg_spi_cortexm_a2fxxx_bus_t cyg_spi_a2fxxx_bus2 = { + .spi_bus.spi_transaction_begin = a2fxxx_transaction_begin, + .spi_bus.spi_transaction_transfer = a2fxxx_transaction_transfer, + .spi_bus.spi_transaction_tick = a2fxxx_transaction_tick, + .spi_bus.spi_transaction_end = a2fxxx_transaction_end, + .spi_bus.spi_get_config = a2fxxx_get_config, + .spi_bus.spi_set_config = a2fxxx_set_config, + .setup = &bus2_setup, + .cs_up = false +}; +#endif + + +//----------------------------------------------------------------------------- +// Implement DMA ISRs. These clear the DMA channel interrupts and +// schedule their respective DSRs. + +static cyg_uint32 a2fxxx_tx_ISR + (cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) data; + cyg_uint8 chan = a2fxxx_bus->setup->dma_tx_channel; + SPI_TRACE("SPI : Handle TX ISR\n"); + a2fxxx_dma_clear_interrupt ( chan ); + return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); +} + +static cyg_uint32 a2fxxx_rx_ISR + (cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) data; + cyg_uint8 chan = a2fxxx_bus->setup->dma_rx_channel; + SPI_TRACE("SPI : Handle RX ISR\n"); + a2fxxx_dma_clear_interrupt ( chan ); + return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); +} + +//----------------------------------------------------------------------------- +// Implement DMA DSRs. These clear down the interrupt conditions and assert +// their respective 'transaction complete' flags. + +static void a2fxxx_tx_DSR + (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) data; + SPI_TRACE("SPI : Handle TX DSR\n"); + cyg_drv_dsr_lock (); + a2fxxx_bus->tx_dma_done = true; + cyg_drv_cond_signal (&a2fxxx_bus->condvar); + cyg_drv_dsr_unlock (); +} + +static void a2fxxx_rx_DSR + (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) data; + SPI_TRACE("SPI : Handle RX DSR\n"); + cyg_drv_dsr_lock (); + a2fxxx_bus->rx_dma_done = true; + cyg_drv_cond_signal (&a2fxxx_bus->condvar); + cyg_drv_dsr_unlock (); +} + +//----------------------------------------------------------------------------- +// Set up a new SPI bus on initialization. + +static void a2fxxx_spi_bus_setup + (cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus) +{ + cyg_uint8 dma_tx_type, dma_rx_type; + + if( a2fxxx_bus->setup->spi_reg_base == CYGHWR_HAL_A2FXXX_SPI1 ){ + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI1_DO ); + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI1_DI ); + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI1_CLK ); + dma_tx_type = CYGHWR_HAL_A2FXXX_DMA_XFER(TO_SPI1); + dma_rx_type = CYGHWR_HAL_A2FXXX_DMA_XFER(FROM_SPI1); + } + else { + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI0_DO ); + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI0_DI ); + CYGHWR_HAL_A2FXXX_GPIO_SET( CYGHWR_HAL_A2FXXX_SPI0_CLK ); + dma_tx_type = CYGHWR_HAL_A2FXXX_DMA_XFER(TO_SPI0); + dma_rx_type = CYGHWR_HAL_A2FXXX_DMA_XFER(FROM_SPI0); + } + + // Initialize the synchronization primitives. + cyg_drv_mutex_init (&a2fxxx_bus->mutex); + cyg_drv_cond_init (&a2fxxx_bus->condvar, &a2fxxx_bus->mutex); + + // Setup DMA channel + a2fxxx_dma_ch_setup(a2fxxx_bus->setup->dma_tx_channel, dma_tx_type, + CYGHWR_HAL_A2FXXX_DMA_OUTBOUND, sizeof(cyg_uint8), 0, + a2fxxx_bus->setup->dma_tx_pri, 9); + a2fxxx_dma_ch_setup(a2fxxx_bus->setup->dma_rx_channel, dma_rx_type, + CYGHWR_HAL_A2FXXX_DMA_INBOUND, 0, sizeof(cyg_uint8), + a2fxxx_bus->setup->dma_rx_pri, 9); + + // Register ISR /DSR + a2fxxx_dma_ch_attach(a2fxxx_bus->setup->dma_tx_channel, + a2fxxx_tx_ISR, a2fxxx_tx_DSR, (cyg_addrword_t) a2fxxx_bus); + + a2fxxx_dma_ch_attach(a2fxxx_bus->setup->dma_rx_channel, + a2fxxx_rx_ISR, a2fxxx_rx_DSR, (cyg_addrword_t) a2fxxx_bus); + + // Call upper layer bus init. + CYG_SPI_BUS_COMMON_INIT(&a2fxxx_bus->spi_bus); +} + +//----------------------------------------------------------------------------- +// Drive a GPIO pin as a SPI chip select line. + +static inline void a2fxxx_spi_chip_select + (cyg_spi_device* device, cyg_bool assert) +{ + cyg_spi_cortexm_a2fxxx_device_t* a2fxxx_device = + (cyg_spi_cortexm_a2fxxx_device_t*) device; + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) device->spi_bus; + + // CS is driven from GPIO + if( a2fxxx_device->cs_gpio == true) { + if (assert == true) + CYGHWR_HAL_A2FXXX_GPIO_OUT( a2fxxx_device->cs_gpio_n, 0 ); + else + CYGHWR_HAL_A2FXXX_GPIO_OUT( a2fxxx_device->cs_gpio_n, 1 ); + } + // CS is driven from controller + else { + cyg_uint32 reg_addr = a2fxxx_bus->setup->spi_reg_base + + CYGHWR_HAL_A2FXXX_SPI_SLAVE_SEL; + cyg_uint32 reg_data; + HAL_READ_UINT32 (reg_addr, reg_data); + if (assert == true) + reg_data |= CYGHWR_HAL_A2FXXX_SPI_CS_SEL(a2fxxx_device->dev_num); + else + reg_data &= ~CYGHWR_HAL_A2FXXX_SPI_CS_SEL(a2fxxx_device->dev_num); + HAL_WRITE_UINT32 (reg_addr, reg_data); + } +} + +//----------------------------------------------------------------------------- +// Configure build-in SPI chip select line + +static inline void a2fxxx_spi_set_ss + (cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus, cyg_uint8 ss_num) +{ + cyg_uint32 ss; + + if( a2fxxx_bus->setup->spi_reg_base == CYGHWR_HAL_A2FXXX_SPI0 ){ + if ( ss_num == 0 ) { + ss = CYGHWR_HAL_A2FXXX_SPI0_SS0; + } else if( ss_num == 1 ) { + ss = CYGHWR_HAL_A2FXXX_SPI0_SS1; + } else if( ss_num == 2 ) { + ss = CYGHWR_HAL_A2FXXX_SPI0_SS2; + } else if( ss_num == 3 ) { + ss = CYGHWR_HAL_A2FXXX_SPI0_SS3; + } else { + CYG_ASSERT (ss < 4, "SPI : SPI0 SS out of range."); + return; + } + } + else { + if ( ss_num == 0 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS0; + } else if( ss_num == 1 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS1; + } else if( ss_num == 2 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS2; + } else if( ss_num == 3 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS3; + } else if( ss_num == 4 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS4; + } else if( ss_num == 5 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS5; + } else if( ss_num == 6 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS6; + } else if( ss_num == 7 ) { + ss = CYGHWR_HAL_A2FXXX_SPI1_SS7; + } else { + CYG_ASSERT (ss < 8, "SPI : SPI1 SS out of range."); + return; + } + } + + CYGHWR_HAL_A2FXXX_GPIO_SET( ss ); +} + +//----------------------------------------------------------------------------- +// Initiate a DMA transfer over the SPI interface. + +static void spi_transaction_dma + (cyg_spi_device* device, cyg_bool tick_only, cyg_bool polled, cyg_uint32 count, + const cyg_uint8* tx_data, cyg_uint8* rx_data, cyg_bool drop_cs) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) device->spi_bus; + cyg_spi_cortexm_a2fxxx_device_t* a2fxxx_device = + (cyg_spi_cortexm_a2fxxx_device_t*) device; + cyg_haladdress reg_addr; + cyg_uint32 spi_cr_val = a2fxxx_device->spi_cr_val; + cyg_haladdress spi_reg_base = a2fxxx_bus->setup->spi_reg_base; + + SPI_TRACE("SPI : Transfer start\n"); + + // Drive chip select low, either from GPIO or build in SS signal + if( !a2fxxx_bus->cs_up && !tick_only ){ + SPI_TRACE("SPI : Setup CS\n"); + CYGACC_CALL_IF_DELAY_US (a2fxxx_device->tr_bt_udly); + a2fxxx_spi_chip_select (device, true); + CYGACC_CALL_IF_DELAY_US (a2fxxx_device->cs_up_udly); + a2fxxx_bus->cs_up = true; + } + + // Disable the SPI controller. + reg_addr = spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_CTRL; + HAL_WRITE_UINT32 (reg_addr, a2fxxx_device->spi_cr_val); + + // Write down transfer count + spi_cr_val |= CYGHWR_HAL_A2FXXX_SPI_CTRL_COUNT( count ); + reg_addr = spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_CTRL; + HAL_WRITE_UINT32 (reg_addr, spi_cr_val); + + // + // Setup DMA channels + // For null source or destination pointer, replace the buffer with the SPI driver + // dummy buffer and set the DMA address increment to 0 + // + if(tx_data == NULL) + a2fxxx_dma_update_incr(a2fxxx_bus->setup->dma_tx_channel, false, 0); + else + a2fxxx_dma_update_incr(a2fxxx_bus->setup->dma_tx_channel, false, + sizeof(cyg_uint8)); + + if(rx_data == NULL) + a2fxxx_dma_update_incr(a2fxxx_bus->setup->dma_rx_channel, true, 0); + else + a2fxxx_dma_update_incr(a2fxxx_bus->setup->dma_rx_channel, true, + sizeof(cyg_uint8)); + + a2fxxx_bus->tx_dma_done = false; + a2fxxx_dma_xfer (a2fxxx_bus->setup->dma_tx_channel, polled, count, + ((tx_data == NULL) ? (cyg_uint8*) a2fxxx_bus->setup->tx_dma_null : + (cyg_uint8*) tx_data), + (cyg_uint8*)(a2fxxx_bus->setup->spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_TX)); + + a2fxxx_bus->rx_dma_done = false; + a2fxxx_dma_xfer (a2fxxx_bus->setup->dma_rx_channel, polled, count, + (cyg_uint8*)(a2fxxx_bus->setup->spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_RX), + ((rx_data == NULL) ? (cyg_uint8*) a2fxxx_bus->setup->rx_dma_null : + (cyg_uint8*) rx_data)); + + // + // Run the DMA (polling for completion). + // + if (polled) + { + // Enable the SPI controller. + SPI_TRACE("SPI : Control Register 0x%x, 0x%x, %d\n", reg_addr, + spi_cr_val, count); + HAL_WRITE_UINT32 (reg_addr, spi_cr_val | CYGHWR_HAL_A2FXXX_SPI_CTRL_EN); + + // Wait transfer completed. + do { + if(a2fxxx_dma_get_comp_flag(a2fxxx_bus->setup->dma_rx_channel)) + a2fxxx_bus->rx_dma_done = true; + if(a2fxxx_dma_get_comp_flag(a2fxxx_bus->setup->dma_tx_channel)) + a2fxxx_bus->tx_dma_done = true; + } while ( !(a2fxxx_bus->tx_dma_done && a2fxxx_bus->rx_dma_done) ); + + // Acknowledge transfer + a2fxxx_dma_clear_interrupt (a2fxxx_bus->setup->dma_rx_channel); + a2fxxx_dma_clear_interrupt (a2fxxx_bus->setup->dma_tx_channel); + + } else { + cyg_drv_mutex_lock (&a2fxxx_bus->mutex); + cyg_drv_dsr_lock (); + + // Enable the SPI controller. + SPI_TRACE("SPI : Control Register 0x%x, 0x%x, %d\n", reg_addr, + spi_cr_val, count); + HAL_WRITE_UINT32 (reg_addr, spi_cr_val | CYGHWR_HAL_A2FXXX_SPI_CTRL_EN); + + // Sit back and wait for the ISR/DSRs to signal completion. + do { + cyg_drv_cond_wait (&a2fxxx_bus->condvar); + } while (!(a2fxxx_bus->tx_dma_done && a2fxxx_bus->rx_dma_done)); + + cyg_drv_dsr_unlock (); + cyg_drv_mutex_unlock (&a2fxxx_bus->mutex); + } + + SPI_TRACE("SPI : Transfer completed\n"); + + if (drop_cs && !tick_only) { + SPI_TRACE("SPI : Release chip select\n"); + CYGACC_CALL_IF_DELAY_US (a2fxxx_device->cs_dw_udly); + a2fxxx_spi_chip_select (device, false); + a2fxxx_bus->cs_up = false; + } +} + +//----------------------------------------------------------------------------- +// Initialize SPI interfaces on startup. + +static void CYGBLD_ATTRIB_C_INIT_PRI(CYG_INIT_BUS_SPI) +a2fxxx_spi_init(void) +{ + hal_dma_init(); + +#ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS1 + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(SPI0) ); + a2fxxx_spi_bus_setup (&cyg_spi_a2fxxx_bus1); +#endif + +#ifdef CYGHWR_DEVS_SPI_CORTEXM_A2FXXX_BUS2 + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(SPI1) ); + a2fxxx_spi_bus_setup (&cyg_spi_a2fxxx_bus2); +#endif +} + +//----------------------------------------------------------------------------- +// Start a SPI transaction. + +static void a2fxxx_transaction_begin + (cyg_spi_device* device) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) device->spi_bus; + cyg_spi_cortexm_a2fxxx_device_t* a2fxxx_device = + (cyg_spi_cortexm_a2fxxx_device_t*) device; + + cyg_haladdress reg_addr; + cyg_uint32 reg_data, divided_clk, br, cs_gpio_n; + + SPI_TRACE("SPI : Transfer begin\n"); + SPI_TRACE("SPI : Device baud rate = %d\n", a2fxxx_device->cl_brate); + SPI_TRACE("SPI : Device clock polarity = %d\n", a2fxxx_device->cl_pol); + SPI_TRACE("SPI : Device clock phase = %d\n", a2fxxx_device->cl_pha); + + // On the first transaction, generate the values to be programmed into the + // SPI configuration registers for this device and cache them. This avoids + // having to recalculate the values for every transaction. + if (!a2fxxx_device->spi_cr_val) { + + // SPI bus protocol + switch( a2fxxx_device->proto ) { + case A2FXXX_SPI_TI_SYNC_SERIAL: + reg_data = CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_TI; + break; + case A2FXXX_SPI_NS_MICROWIRE: + reg_data = CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_NS; + break; + default: + reg_data = CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_MOTOROLA; + break; + } + + // Bus polarity + if (a2fxxx_device->cl_pol) + reg_data |= CYGHWR_HAL_A2FXXX_SPI_CTRL_SPO; + if (a2fxxx_device->cl_pha) + reg_data |= CYGHWR_HAL_A2FXXX_SPI_CTRL_SPH; + + // Master mode + reg_data |= CYGHWR_HAL_A2FXXX_SPI_CTRL_MASTER; + + // Calculate the maximum viable bus speed. + divided_clk = hal_a2fxxx_spi_clock(a2fxxx_bus->setup->spi_reg_base) >> 1; + for (br = 0; (br < 7) && (divided_clk > a2fxxx_device->cl_brate); br++) + divided_clk >>= 1; + + CYG_ASSERT (divided_clk <= a2fxxx_device->cl_brate, + "A2FXXX SPI : Cannot run bus slowly enough for peripheral."); + + SPI_TRACE("SPI : Clock divider = %d\n", divided_clk); + + reg_addr = a2fxxx_bus->setup->spi_reg_base + + CYGHWR_HAL_A2FXXX_SPI_CLK_GEN; + HAL_WRITE_UINT32 (reg_addr, br); + + // Set transfer size (byte mode) + reg_addr = a2fxxx_bus->setup->spi_reg_base + + CYGHWR_HAL_A2FXXX_SPI_TXRXDF_SIZE; + HAL_WRITE_UINT32 (reg_addr, 8); + + // Cache the configuration register settings. + a2fxxx_device->spi_cr_val = reg_data; + + // Configure GPIO as chip select + if(a2fxxx_device->cs_gpio == true) { + cs_gpio_n = a2fxxx_device->cs_gpio_n; + SPI_TRACE("SPI : Setup GPIO for CS => %d\n", cs_gpio_n); + a2fxxx_device->cs_gpio_n = + CYGHWR_HAL_A2FXXX_CS_GPIO( cs_gpio_n, OUT, cs_gpio_n, DISABLE ); + CYGHWR_HAL_A2FXXX_GPIO_SET( a2fxxx_device->cs_gpio_n ); + CYGHWR_HAL_A2FXXX_GPIO_OUT( a2fxxx_device->cs_gpio_n, 1); + } + // Configure build-in SPI chip select line + else { + SPI_TRACE("SPI : Setup SPI SS => %d\n", a2fxxx_device->dev_num); + a2fxxx_spi_set_ss(a2fxxx_bus, a2fxxx_device->dev_num); + } + } + + // Set up the SPI controller. + reg_addr = a2fxxx_bus->setup->spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_CTRL; + HAL_WRITE_UINT32 (reg_addr, a2fxxx_device->spi_cr_val); +} + +//----------------------------------------------------------------------------- +// Run a transaction transfer. + +static void a2fxxx_transaction_transfer + (cyg_spi_device* device, cyg_bool polled, cyg_uint32 count, + const cyg_uint8* tx_data, cyg_uint8* rx_data, cyg_bool drop_cs) +{ + // Check for unsupported transactions. + CYG_ASSERT (count > 0, "A2FXXX SPI : Null transfer requested."); + + // Perform transfer + spi_transaction_dma (device, false, polled, count, tx_data, rx_data, drop_cs); +} + +//----------------------------------------------------------------------------- +// Carry out a bus tick operation - this just pushes the required number of +// zeros onto the bus, leaving the chip select in its current state. + +static void a2fxxx_transaction_tick + (cyg_spi_device* device, cyg_bool polled, cyg_uint32 count) +{ + // Check for unsupported transactions. + CYG_ASSERT (count > 0, "A2FXXX SPI : Null transfer requested."); + + SPI_TRACE("SPI : Transfer tick\n"); + + // Perform null transfer. + spi_transaction_dma (device, true, polled, count, NULL, NULL, false); +} + +//----------------------------------------------------------------------------- +// Terminate a SPI transaction, disabling the SPI controller. + +static void a2fxxx_transaction_end + (cyg_spi_device* device) +{ + cyg_spi_cortexm_a2fxxx_bus_t* a2fxxx_bus = + (cyg_spi_cortexm_a2fxxx_bus_t*) device->spi_bus; + cyg_spi_cortexm_a2fxxx_device_t* a2fxxx_device = + (cyg_spi_cortexm_a2fxxx_device_t*) device; + cyg_haladdress reg_addr; + + SPI_TRACE("SPI : Transfer end\n"); + + // De-assert chip select + if( a2fxxx_bus->cs_up == true ){ + SPI_TRACE("SPI : Release chip select\n"); + CYGACC_CALL_IF_DELAY_US (a2fxxx_device->cs_dw_udly); + a2fxxx_spi_chip_select (device, false); + a2fxxx_bus->cs_up = false; + } + + // Disable controller + reg_addr = a2fxxx_bus->setup->spi_reg_base + CYGHWR_HAL_A2FXXX_SPI_CTRL; + HAL_WRITE_UINT32 (reg_addr, a2fxxx_device->spi_cr_val); +} + +//----------------------------------------------------------------------------- +// Note that no dynamic configuration options are currently defined. + +static int a2fxxx_get_config + (cyg_spi_device* dev, cyg_uint32 key, void* buf, cyg_uint32* len) +{ + return -1; +} + +static int a2fxxx_set_config + (cyg_spi_device* dev, cyg_uint32 key, const void* buf, cyg_uint32* len) +{ + return -1; +} + +#endif + +//============================================================================= diff --git a/packages/devs/spi/cortexm/stm32/current/ChangeLog b/packages/devs/spi/cortexm/stm32/current/ChangeLog --- a/packages/devs/spi/cortexm/stm32/current/ChangeLog +++ b/packages/devs/spi/cortexm/stm32/current/ChangeLog @@ -1,8 +1,84 @@ +2012-03-28 Jonathan Larmour + + * src/spi_stm32.c (bus3_rx_bbuf): Fix typo in attribute. + +2012-03-23 James Smith + + * src/spi_stm32.c (CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPEED_SPI): + Rename CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPI to allow the same + SPEED_SPI value to be used for F1 and F2/F4 targets. + (SPI_CS): Use new wrapper macros to provide a single common SPI_CS + manifest. + +2012-03-15 James Smith + + * src/spi_stm32.c: Use HIPERFORMANCE manifest to allow F2 and F4 + device GPIO initialisation support. + (dma_channel_setup): Avoid compiler pointer type warning. + +2012-03-05 James Smith + + * src/spi_stm32.c (spi_transaction_dma): Avoid race condition by + seting the TX and RX DMA done flags to false prior to configuring + (and starting) the DMA transfer. + +2012-01-12 Nick Garnett + + * cdl/spi_stm32.cdl: Select pin toggle rate based on STM32 + family. Define interrupt priorities to include DMA channel + priorities. Undo 2011-12-09 change, F2 now supported. + + * include/spi_stm32.h (cyg_spi_cortexm_stm32_bus_s): + * src/spi_stm32.c: Substantial reorganization to use DMA API. + NOTE: Currently only fully tested on F2 parts. + +2011-12-09 Jonathan Larmour + + * cdl/spi_stm32.cdl: For now, only allow this package to be + active with F1 family processors. + +2011-09-27 Ilija Stanislevik + + * src/spi_stm32.c: Add support for CYG_IO_GET_CONFIG_SPI_CLOCKRATE and + CYG_IO_SET_CONFIG_SPI_CLOCKRATE (possibility to retrieve and to set + the SPI clockrate). + +2011-03-10 John Dallaway + + * cdl/spi_stm32.cdl: Add build options for CFLAGS and loopback test. + +2009-10-22 Nick Garnett + + * cdl/spi_stm32.cdl: Fix descriptions for chip select + options. Only build local test if SPI bus 1 is active. + + * include/spi_stm32.h (cyg_spi_cortexm_stm32_bus_setup_s): Add + spi_gpio_remap field. + + * src/spi_stm32.c (bus1_setup, bus2_setup, bus3_setup): Fix CS + number calculation, add remap to each bus. + (stm32_spi_bus_setup): Move enables to correct place. Add code to + remap SPI pins if defined. + 2009-08-24 Simon Kallweit * cdl/spi_stm32.cdl: added testcase. * include/spi_stm32.h: initializing spi_cr1_val with zero. +2009-06-29 Nick Garnett + + * cdl/spi_stm32.cdl: + * include/spi_stm32.h (cyg_spi_cortexm_stm32_bus_setup_s): + * src/spi_stm32.c: Add support for individual device clock + enables. Also change mechanism for specifying CS lines that is + more in keeping with other devices. + +2009-03-23 Nick Garnett + + * cdl/spi_stm32.cdl: Fix up a few oddities. + + * src/spi_stm32.c (spi_diag): Add some diagnostics. + 2009-02-10 Bart Veer * src/spi_stm32.c (cyg_spi_cortexm_stm32_init): mark as @@ -43,7 +119,7 @@ 2009-01-30 Nick Garnett #include +#include + //----------------------------------------------------------------------------- // Macro for defining a SPI device and attaching it to the appropriate bus. // @@ -102,16 +104,14 @@ extern cyg_spi_device _name_ __attribute typedef struct cyg_spi_cortexm_stm32_bus_setup_s { - cyg_uint32 apb_freq; // Peripheral bus frequency (fp). + cyg_uint32 *apb_freq; // Peripheral bus frequency. cyg_haladdress spi_reg_base; // Base address of SPI register block. - cyg_haladdress dma_reg_base; // Base address of DMA register block. - cyg_uint8 dma_tx_channel; // TX DMA channel for this bus. - cyg_uint8 dma_rx_channel; // RX DMA channel for this bus. + + cyg_uint32 spi_enable; // SPI bus clock enable cyg_uint8 cs_gpio_num; // Number of chip selects for this bus. - const cyg_uint8* cs_gpio_list; // List of GPIOs used as chip selects. - const cyg_uint8* spi_gpio_list; // List of GPIOs used by the SPI interface. - cyg_vector_t dma_tx_intr; // Interrupt used for DMA transmit. - cyg_vector_t dma_rx_intr; // Interrupt used for DMA receive. + const cyg_uint32* cs_gpio_list; // List of GPIOs used as chip selects. + const cyg_uint32* spi_gpio_list; // List of GPIOs used by the SPI interface. + cyg_uint32 spi_gpio_remap; // Remap GPIO lines to alternate pins. cyg_priority_t dma_tx_intr_pri; // Interrupt priority for DMA transmit. cyg_priority_t dma_rx_intr_pri; // Interrupt priority for DMA receive. cyg_uint32 bbuf_size; // Size of bounce buffers. @@ -129,10 +129,9 @@ typedef struct cyg_spi_cortexm_stm32_bus const cyg_spi_cortexm_stm32_bus_setup_t* setup; // ---- Driver state (private) ---- - cyg_interrupt tx_intr_data; // DMA interrupt data (TX). - cyg_interrupt rx_intr_data; // DMA interrupt data (RX). - cyg_handle_t tx_intr_handle; // DMA interrupt handle (TX). - cyg_handle_t rx_intr_handle; // DMA interrupt handle (RX). + + hal_stm32_dma_stream dma_tx_stream; // TX DMA stream for this bus. + hal_stm32_dma_stream dma_rx_stream; // RX DMA stream for this bus. cyg_drv_mutex_t mutex; // Transfer mutex. cyg_drv_cond_t condvar; // Transfer condition variable. cyg_bool tx_dma_done; // Flags used to signal completion. diff --git a/packages/devs/spi/cortexm/stm32/current/src/spi_stm32.c b/packages/devs/spi/cortexm/stm32/current/src/spi_stm32.c --- a/packages/devs/spi/cortexm/stm32/current/src/spi_stm32.c +++ b/packages/devs/spi/cortexm/stm32/current/src/spi_stm32.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2011, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -39,7 +39,7 @@ //============================================================================= //#####DESCRIPTIONBEGIN#### // -// Author(s): Chris Holgate +// Author(s): Chris Holgate, nickg // Date: 2008-11-27 // Purpose: STM32 SPI driver implementation // @@ -64,12 +64,21 @@ #include //----------------------------------------------------------------------------- -// Work out the bus clock frequencies. +// Diagnostics -#define APB1_FREQ ((CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL) / \ - (CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV)) -#define APB2_FREQ ((CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL) / \ - (CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV)) +#if 0 +#define spi_diag( __fmt, ... ) diag_printf("SPI: %30s[%3d]: " __fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__ ); +#define spi_dump_buf( __addr, __size ) diag_dump_buf( __addr, __size ) +#else +#define spi_diag( __fmt, ... ) +#define spi_dump_buf( __addr, __size ) +#endif + +//----------------------------------------------------------------------------- +// Bus frequencies + +__externC cyg_uint32 hal_stm32_pclk1; +__externC cyg_uint32 hal_stm32_pclk2; //----------------------------------------------------------------------------- // API function call forward references. @@ -82,6 +91,12 @@ static int stm32_get_config ( static int stm32_set_config (cyg_spi_device*, cyg_uint32, const void*, cyg_uint32*); //----------------------------------------------------------------------------- +// DMA callbacks + +static void stm32_dma_tx_callback( hal_stm32_dma_stream *stream, cyg_uint32 count, CYG_ADDRWORD data ); +static void stm32_dma_rx_callback( hal_stm32_dma_stream *stream, cyg_uint32 count, CYG_ADDRWORD data ); + +//----------------------------------------------------------------------------- // Null data source and sink must be placed in the on-chip SRAM. This is // either done explicitly (bounce buffers instantiated) or implicitly (no // bounce buffers implies that the data area is already on SRAM). @@ -98,11 +113,61 @@ static cyg_uint16 dma_rx_null = 0xFFFF; #endif //----------------------------------------------------------------------------- +// Useful GPIO macros for 'dynamic' pin setup. + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +#if (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 2) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPEED_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 10) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPEED_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 50) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPEED_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ + +#else +#error "Invalid SPI bus toggle rate." +#endif + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#if (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 2) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SPEED_SPI CYGHWR_HAL_STM32_GPIO_OSPEED_2MHZ + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 25) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SPEED_SPI CYGHWR_HAL_STM32_GPIO_OSPEED_25MHZ + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 50) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SPEED_SPI CYGHWR_HAL_STM32_GPIO_OSPEED_50MHZ + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 80) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SPEED_SPI CYGHWR_HAL_STM32_GPIO_OSPEED_HIGH + +#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 100) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SPEED_SPI CYGHWR_HAL_STM32_GPIO_OSPEED_HIGH + +#else +#error "Invalid SPI bus toggle rate." +#endif + +#else + +#error "Unknown STM32 family" + +#endif + +#define SPI_CS( __port, __bit ) CYGHWR_HAL_STM32_PIN_OUT( __port, __bit, PUSHPULL, NONE, SPEED_SPI ) + +//----------------------------------------------------------------------------- + // Instantiate the bus state data structures. #ifdef CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS1 -static const cyg_uint8 bus1_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS1_CS_GPIOS }; -static const cyg_uint8 bus1_spi_gpio_list[] = { 0x05, 0x06, 0x07 }; +static const cyg_uint32 bus1_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS1_CS_GPIOS }; +static const cyg_uint32 bus1_spi_gpio_list[] = { CYGHWR_HAL_STM32_SPI1_SCK, + CYGHWR_HAL_STM32_SPI1_MISO, + CYGHWR_HAL_STM32_SPI1_MOSI }; #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_BBUF_SIZE > 0) static cyg_uint8 bus1_tx_bbuf [CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_BBUF_SIZE] @@ -112,18 +177,16 @@ static cyg_uint8 bus1_rx_bbuf [CYGNUM_DE #endif static const cyg_spi_cortexm_stm32_bus_setup_t bus1_setup = { - .apb_freq = APB2_FREQ, + .apb_freq = &hal_stm32_pclk2, .spi_reg_base = CYGHWR_HAL_STM32_SPI1, - .dma_reg_base = CYGHWR_HAL_STM32_DMA1, - .dma_tx_channel = 3, - .dma_rx_channel = 2, - .cs_gpio_num = sizeof (bus1_cs_gpio_list), + .spi_enable = CYGHWR_HAL_STM32_SPI1_CLOCK, + .cs_gpio_num = sizeof (bus1_cs_gpio_list)/sizeof(cyg_uint32), .cs_gpio_list = bus1_cs_gpio_list, .spi_gpio_list = bus1_spi_gpio_list, - .dma_tx_intr = CYGNUM_HAL_INTERRUPT_DMA1_CH3, - .dma_rx_intr = CYGNUM_HAL_INTERRUPT_DMA1_CH2, + .spi_gpio_remap = CYGHWR_HAL_STM32_SPI1_REMAP_CONFIG, .dma_tx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_TXINTR_PRI, .dma_rx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_RXINTR_PRI, + #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_BBUF_SIZE > 0) .bbuf_size = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS1_BBUF_SIZE, .bbuf_tx = bus1_tx_bbuf, @@ -141,13 +204,26 @@ cyg_spi_cortexm_stm32_bus_t cyg_spi_stm3 .spi_bus.spi_get_config = stm32_get_config, .spi_bus.spi_set_config = stm32_set_config, .setup = &bus1_setup, - .cs_up = false + .cs_up = false, + + .dma_tx_stream.desc = CYGHWR_HAL_STM32_SPI1_DMA_TX, + .dma_tx_stream.callback = stm32_dma_tx_callback, + .dma_tx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus1, + + .dma_rx_stream.desc = CYGHWR_HAL_STM32_SPI1_DMA_RX, + .dma_rx_stream.callback = stm32_dma_rx_callback, + .dma_rx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus1, + + + }; #endif #ifdef CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS2 -static const cyg_uint8 bus2_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS2_CS_GPIOS }; -static const cyg_uint8 bus2_spi_gpio_list[] = { 0x1D, 0x1E, 0x1F }; +static const cyg_uint32 bus2_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS2_CS_GPIOS }; +static const cyg_uint32 bus2_spi_gpio_list[] = { CYGHWR_HAL_STM32_SPI2_SCK, + CYGHWR_HAL_STM32_SPI2_MISO, + CYGHWR_HAL_STM32_SPI2_MOSI }; #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_BBUF_SIZE > 0) static cyg_uint8 bus2_tx_bbuf [CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_BBUF_SIZE] @@ -157,18 +233,16 @@ static cyg_uint8 bus2_rx_bbuf [CYGNUM_DE #endif static const cyg_spi_cortexm_stm32_bus_setup_t bus2_setup = { - .apb_freq = APB1_FREQ, + .apb_freq = &hal_stm32_pclk1, .spi_reg_base = CYGHWR_HAL_STM32_SPI2, - .dma_reg_base = CYGHWR_HAL_STM32_DMA1, - .dma_tx_channel = 5, - .dma_rx_channel = 4, - .cs_gpio_num = sizeof (bus2_cs_gpio_list), + .spi_enable = CYGHWR_HAL_STM32_SPI2_CLOCK, + .cs_gpio_num = sizeof (bus2_cs_gpio_list)/sizeof(cyg_uint32), .cs_gpio_list = bus2_cs_gpio_list, .spi_gpio_list = bus2_spi_gpio_list, - .dma_tx_intr = CYGNUM_HAL_INTERRUPT_DMA1_CH5, - .dma_rx_intr = CYGNUM_HAL_INTERRUPT_DMA1_CH4, + .spi_gpio_remap = CYGHWR_HAL_STM32_SPI2_REMAP_CONFIG, .dma_tx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_TXINTR_PRI, .dma_rx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_RXINTR_PRI, + #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_BBUF_SIZE > 0) .bbuf_size = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS2_BBUF_SIZE, .bbuf_tx = bus2_tx_bbuf, @@ -186,34 +260,44 @@ cyg_spi_cortexm_stm32_bus_t cyg_spi_stm3 .spi_bus.spi_get_config = stm32_get_config, .spi_bus.spi_set_config = stm32_set_config, .setup = &bus2_setup, - .cs_up = false + .cs_up = false, + + .dma_tx_stream.desc = CYGHWR_HAL_STM32_SPI2_DMA_TX, + .dma_tx_stream.callback = stm32_dma_tx_callback, + .dma_tx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus2, + + .dma_rx_stream.desc = CYGHWR_HAL_STM32_SPI2_DMA_RX, + .dma_rx_stream.callback = stm32_dma_rx_callback, + .dma_rx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus2, + + }; #endif #ifdef CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS3 -static const cyg_uint8 bus3_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS3_CS_GPIOS }; -static const cyg_uint8 bus3_spi_gpio_list[] = { 0x13, 0x14, 0x15 }; +static const cyg_uint32 bus3_cs_gpio_list[] = { CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS3_CS_GPIOS }; +static const cyg_uint32 bus3_spi_gpio_list[] = { CYGHWR_HAL_STM32_SPI3_SCK, + CYGHWR_HAL_STM32_SPI3_MISO, + CYGHWR_HAL_STM32_SPI3_MOSI }; #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_BBUF_SIZE > 0) static cyg_uint8 bus3_tx_bbuf [CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_BBUF_SIZE] __attribute__((aligned (2), section (".sram"))) = { 0 }; static cyg_uint8 bus3_rx_bbuf [CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_BBUF_SIZE] - __attribute__((alugned (2), section (".sram"))) = { 0 }; + __attribute__((aligned (2), section (".sram"))) = { 0 }; #endif static const cyg_spi_cortexm_stm32_bus_setup_t bus3_setup = { - .apb_freq = APB1_FREQ, + .apb_freq = &hal_stm32_pclk1, .spi_reg_base = CYGHWR_HAL_STM32_SPI3, - .dma_reg_base = CYGHWR_HAL_STM32_DMA2, - .dma_tx_channel = 2, - .dma_rx_channel = 1, - .cs_gpio_num = sizeof (bus3_cs_gpio_list), + .spi_enable = CYGHWR_HAL_STM32_SPI3_CLOCK, + .cs_gpio_num = sizeof (bus3_cs_gpio_list)/sizeof(cyg_uint32), .cs_gpio_list = bus3_cs_gpio_list, .spi_gpio_list = bus3_spi_gpio_list, - .dma_tx_intr = CYGNUM_HAL_INTERRUPT_DMA2_CH2, - .dma_rx_intr = CYGNUM_HAL_INTERRUPT_DMA2_CH1, + .spi_gpio_remap = CYGHWR_HAL_STM32_SPI3_REMAP_CONFIG, .dma_tx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_TXINTR_PRI, .dma_rx_intr_pri = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_RXINTR_PRI, + #if (CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_BBUF_SIZE > 0) .bbuf_size = CYGNUM_DEVS_SPI_CORTEXM_STM32_BUS3_BBUF_SIZE, .bbuf_tx = bus3_tx_bbuf, @@ -231,39 +315,18 @@ cyg_spi_cortexm_stm32_bus_t cyg_spi_stm3 .spi_bus.spi_get_config = stm32_get_config, .spi_bus.spi_set_config = stm32_set_config, .setup = &bus3_setup, - .cs_up = false -}; -#endif - -//----------------------------------------------------------------------------- -// Useful GPIO macros for 'dynamic' pin setup. + .cs_up = false, -static const cyg_uint32 stm32_gpio_port_offsets[] = { - CYGHWR_HAL_STM32_GPIOA - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOB - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOC - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOD - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOE - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOF - CYGHWR_HAL_STM32_GPIOA, - CYGHWR_HAL_STM32_GPIOG - CYGHWR_HAL_STM32_GPIOA -}; + .dma_tx_stream.desc = CYGHWR_HAL_STM32_SPI3_DMA_TX, + .dma_tx_stream.callback = stm32_dma_tx_callback, + .dma_tx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus3, -#define STM32_GPIO_PINSPEC(__port, __bit, __mode, __cnf ) \ - (stm32_gpio_port_offsets[__port] | (__bit<<16) | \ - (CYGHWR_HAL_STM32_GPIO_MODE_##__mode) | \ - (CYGHWR_HAL_STM32_GPIO_CNF_##__cnf)) - -#if (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 2) -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ + .dma_rx_stream.desc = CYGHWR_HAL_STM32_SPI3_DMA_RX, + .dma_rx_stream.callback = stm32_dma_rx_callback, + .dma_rx_stream.data = (CYG_ADDRWORD)&cyg_spi_stm32_bus3, -#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 10) -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ -#elif (CYGNUM_DEVS_SPI_CORTEXM_STM32_PIN_TOGGLE_RATE == 50) -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_SPI CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ - -#else -#error "Invalid SPI bus toggle rate." +}; #endif //----------------------------------------------------------------------------- @@ -272,17 +335,8 @@ static const cyg_uint32 stm32_gpio_port_ static inline void stm32_spi_gpio_cs_setup (cyg_uint32 gpio_num) { - cyg_uint32 port, pin, pinspec; - - // Check that the pin number is in range (16 pins per port). - pin = gpio_num & 0xF; - port = gpio_num >> 4; - CYG_ASSERT (port < 7, "STM32 SPI : Invalid GPIO number in chip select list."); - - // Generate the pin setup specification and configure it. - pinspec = STM32_GPIO_PINSPEC (port, pin, OUT_SPI, OUT_PUSHPULL); - CYGHWR_HAL_STM32_GPIO_SET (pinspec); - CYGHWR_HAL_STM32_GPIO_OUT (pinspec, 1); + CYGHWR_HAL_STM32_GPIO_SET (gpio_num); + CYGHWR_HAL_STM32_GPIO_OUT (gpio_num, 1); } //----------------------------------------------------------------------------- @@ -291,74 +345,15 @@ static inline void stm32_spi_gpio_cs_set static inline void stm32_spi_chip_select (cyg_uint32 gpio_num, cyg_bool assert) { - cyg_uint32 port, pin, pinspec; - - // Check that the pin number is in range (16 pins per port). - pin = gpio_num & 0xF; - port = gpio_num >> 4; - CYG_ASSERT (port < 7, "STM32 SPI : Invalid GPIO number in chip select list."); - - // Generate the pin setup specification and drive it. - pinspec = STM32_GPIO_PINSPEC (port, pin, OUT_SPI, OUT_PUSHPULL); - CYGHWR_HAL_STM32_GPIO_OUT (pinspec, assert ? 0 : 1); + CYGHWR_HAL_STM32_GPIO_OUT( gpio_num, assert ? 0 : 1); } //----------------------------------------------------------------------------- -// Implement DMA ISRs. These disable the DMA channel, mask the interrupt -// condition and schedule their respective DSRs. - -static cyg_uint32 stm32_tx_ISR - (cyg_vector_t vector, cyg_addrword_t data) -{ - cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) data; - cyg_uint32 chan = stm32_bus->setup->dma_tx_channel; - cyg_haladdress reg_addr; - - // Disable the DMA channel. - cyg_drv_isr_lock (); - reg_addr = stm32_bus->setup->dma_reg_base + CYGHWR_HAL_STM32_DMA_CCR (chan); - HAL_WRITE_UINT32 (reg_addr, 0); - - // Clear down the interrupts. - reg_addr = stm32_bus->setup->dma_reg_base + CYGHWR_HAL_STM32_DMA_IFCR; - HAL_WRITE_UINT32 (reg_addr, CYGHWR_HAL_STM32_DMA_IFCR_MASK (chan)); - - cyg_drv_interrupt_acknowledge (vector); - cyg_drv_interrupt_mask (vector); - cyg_drv_isr_unlock (); - - return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); -} +// DMA Callbacks. The DMA driver has disabled the DMA channel and +// masked the interrupt condition, here we need to wake up the client +// thread. -static cyg_uint32 stm32_rx_ISR - (cyg_vector_t vector, cyg_addrword_t data) -{ - cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) data; - cyg_uint32 chan = stm32_bus->setup->dma_rx_channel; - cyg_haladdress reg_addr; - - // Disable the DMA channel. - cyg_drv_isr_lock (); - reg_addr = stm32_bus->setup->dma_reg_base + CYGHWR_HAL_STM32_DMA_CCR (chan); - HAL_WRITE_UINT32 (reg_addr, 0); - - // Clear down the interrupts. - reg_addr = stm32_bus->setup->dma_reg_base + CYGHWR_HAL_STM32_DMA_IFCR; - HAL_WRITE_UINT32 (reg_addr, CYGHWR_HAL_STM32_DMA_IFCR_MASK (chan)); - - cyg_drv_interrupt_acknowledge (vector); - cyg_drv_interrupt_mask (vector); - cyg_drv_isr_unlock (); - - return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); -} - -//----------------------------------------------------------------------------- -// Implement DMA DSRs. These clear down the interrupt conditions and assert -// their respective 'transaction complete' flags. - -static void stm32_tx_DSR - (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +static void stm32_dma_tx_callback( hal_stm32_dma_stream *stream, cyg_uint32 count, CYG_ADDRWORD data ) { cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) data; @@ -368,8 +363,7 @@ static void stm32_tx_DSR cyg_drv_dsr_unlock (); } -static void stm32_rx_DSR - (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +static void stm32_dma_rx_callback( hal_stm32_dma_stream *stream, cyg_uint32 count, CYG_ADDRWORD data ) { cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) data; @@ -387,56 +381,47 @@ static void stm32_spi_bus_setup { int i; cyg_haladdress reg_addr; - cyg_uint32 pin, pinspec, reg_data; + cyg_uint32 reg_data; + spi_diag("bus %p\n", stm32_bus ); // Set up the GPIOs for use as chip select lines. for (i = 0; i < stm32_bus->setup->cs_gpio_num; i ++) { stm32_spi_gpio_cs_setup (stm32_bus->setup->cs_gpio_list[i]); } - // Configure the SPI clock output pin. - pin = stm32_bus->setup->spi_gpio_list[0]; - pinspec = STM32_GPIO_PINSPEC ((pin >> 4), (pin & 0xF), OUT_SPI, ALT_PUSHPULL); - CYGHWR_HAL_STM32_GPIO_SET (pinspec); +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + // Remap GPIO pins if required + if( stm32_bus->setup->spi_gpio_remap ) + { + CYG_ADDRESS afio = CYGHWR_HAL_STM32_AFIO; + cyg_uint32 mapr; + spi_diag("remap %08x\n", stm32_bus->setup->spi_gpio_remap ); + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_AFIO_CLOCK ); + HAL_READ_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + mapr |= stm32_bus->setup->spi_gpio_remap; + HAL_WRITE_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + } +#endif + + CYGHWR_HAL_STM32_GPIO_SET( stm32_bus->setup->spi_gpio_list[0] ); + CYGHWR_HAL_STM32_GPIO_SET( stm32_bus->setup->spi_gpio_list[1] ); + CYGHWR_HAL_STM32_GPIO_SET( stm32_bus->setup->spi_gpio_list[2] ); - // Configure the SPI MISO input. - pin = stm32_bus->setup->spi_gpio_list[1]; - pinspec = STM32_GPIO_PINSPEC ((pin >> 4), (pin & 0xF), IN, PULLUP); - CYGHWR_HAL_STM32_GPIO_SET (pinspec); - - // Configure the SPI MOSI output. - pin = stm32_bus->setup->spi_gpio_list[2]; - pinspec = STM32_GPIO_PINSPEC ((pin >> 4), (pin & 0xF), OUT_SPI, ALT_PUSHPULL); - CYGHWR_HAL_STM32_GPIO_SET (pinspec); + CYGHWR_HAL_STM32_CLOCK_ENABLE( stm32_bus->setup->spi_enable ); + //CYGHWR_HAL_STM32_CLOCK_ENABLE( stm32_bus->setup->dma_enable ); // Set up SPI default configuration. reg_addr = stm32_bus->setup->spi_reg_base + CYGHWR_HAL_STM32_SPI_CR2; reg_data = CYGHWR_HAL_STM32_SPI_CR2_TXDMAEN | CYGHWR_HAL_STM32_SPI_CR2_RXDMAEN; HAL_WRITE_UINT32 (reg_addr, reg_data); - // Ensure that the DMA clocks are enabled. - reg_addr = CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_AHBENR; - HAL_READ_UINT32 (reg_addr, reg_data); - if (stm32_bus->setup->dma_reg_base == CYGHWR_HAL_STM32_DMA1) - reg_data |= CYGHWR_HAL_STM32_RCC_AHBENR_DMA1; - else - reg_data |= CYGHWR_HAL_STM32_RCC_AHBENR_DMA2; - HAL_WRITE_UINT32 (reg_addr, reg_data); - // Initialise the synchronisation primitivies. cyg_drv_mutex_init (&stm32_bus->mutex); cyg_drv_cond_init (&stm32_bus->condvar, &stm32_bus->mutex); - // Hook up the ISRs and DSRs. - cyg_drv_interrupt_create (stm32_bus->setup->dma_tx_intr, stm32_bus->setup->dma_tx_intr_pri, - (cyg_addrword_t) stm32_bus, stm32_tx_ISR, stm32_tx_DSR, &stm32_bus->tx_intr_handle, - &stm32_bus->tx_intr_data); - cyg_drv_interrupt_attach (stm32_bus->tx_intr_handle); - - cyg_drv_interrupt_create (stm32_bus->setup->dma_rx_intr, stm32_bus->setup->dma_rx_intr_pri, - (cyg_addrword_t) stm32_bus, stm32_rx_ISR, stm32_rx_DSR, &stm32_bus->rx_intr_handle, - &stm32_bus->rx_intr_data); - cyg_drv_interrupt_attach (stm32_bus->rx_intr_handle); + // Initialize DMA streams + hal_stm32_dma_init( &stm32_bus->dma_tx_stream, stm32_bus->setup->dma_tx_intr_pri ); + hal_stm32_dma_init( &stm32_bus->dma_rx_stream, stm32_bus->setup->dma_rx_intr_pri ); // Call upper layer bus init. CYG_SPI_BUS_COMMON_INIT(&stm32_bus->spi_bus); @@ -450,59 +435,22 @@ static void dma_channel_setup { cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) device->spi_bus; cyg_spi_cortexm_stm32_device_t* stm32_device = (cyg_spi_cortexm_stm32_device_t*) device; - - cyg_uint32 chan, reg_data; - cyg_haladdress dma_reg_base, spi_reg_base, dma_addr, reg_addr; + hal_stm32_dma_stream *stream = is_tx ? &stm32_bus->dma_tx_stream : &stm32_bus->dma_rx_stream; - // Extract address and channel information. - dma_reg_base = stm32_bus->setup->dma_reg_base; - spi_reg_base = stm32_bus->setup->spi_reg_base; - chan = is_tx ? stm32_bus->setup->dma_tx_channel : stm32_bus->setup->dma_rx_channel; + hal_stm32_dma_configure( stream, + stm32_device->bus_16bit ? 16 : 8, + (data_buf==NULL), + polled ); - // Default options for the DMA channel. - reg_data = CYGHWR_HAL_STM32_DMA_CCR_EN; - - // Do not enable interrupts in polled mode. - if (!polled) - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_TCIE | CYGHWR_HAL_STM32_DMA_CCR_TEIE; - - // Set DMA channel direction and priority level. The receive channel has higher - // priority so that the inbound buffer is always cleared first. - if (is_tx) - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_DIR | CYGHWR_HAL_STM32_DMA_CCR_PLMEDIUM; - else - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_PLHIGH; + if( data_buf == NULL ) + data_buf = (cyg_uint8 *)(is_tx ? &dma_tx_null : &dma_rx_null); + + hal_stm32_dma_start( stream, + data_buf, + stm32_bus->setup->spi_reg_base+CYGHWR_HAL_STM32_SPI_DR, + count ); - // Set the correct transfer size. - if (stm32_device->bus_16bit) - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_PSIZE16 | CYGHWR_HAL_STM32_DMA_CCR_MSIZE16; - else - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_PSIZE8 | CYGHWR_HAL_STM32_DMA_CCR_MSIZE8; - - // Do not use memory address incrementing for dummy data. - if (data_buf != NULL) { - reg_data |= CYGHWR_HAL_STM32_DMA_CCR_MINC; - dma_addr = (cyg_haladdress) data_buf; - } - else - dma_addr = (cyg_haladdress) (is_tx ? &dma_tx_null : &dma_rx_null); - - // Program up the DMA memory address. - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CMAR (chan); - HAL_WRITE_UINT32 (reg_addr, dma_addr); - - // Program up the peripheral memory address. - dma_addr = spi_reg_base + CYGHWR_HAL_STM32_SPI_DR; - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CPAR (chan); - HAL_WRITE_UINT32 (reg_addr, dma_addr); - - // Program up the data buffer size. - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CNDTR (chan); - HAL_WRITE_UINT32 (reg_addr, count); - - // Enable the DMA via the configuration register. - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CCR (chan); - HAL_WRITE_UINT32 (reg_addr, reg_data); + hal_stm32_dma_show( stream ); } //----------------------------------------------------------------------------- @@ -516,11 +464,10 @@ static void spi_transaction_dma cyg_spi_cortexm_stm32_device_t* stm32_device = (cyg_spi_cortexm_stm32_device_t*) device; cyg_haladdress reg_addr; - cyg_uint32 chan, reg_data; - cyg_haladdress dma_reg_base = stm32_bus->setup->dma_reg_base; cyg_haladdress spi_reg_base = stm32_bus->setup->spi_reg_base; + spi_diag("device %p\n", device ); // Ensure the chip select is asserted, inserting inter-transaction guard // time if required. Note that when ticking the device we do not touch the CS. if (!stm32_bus->cs_up && !tick_only) { @@ -530,58 +477,30 @@ static void spi_transaction_dma CYGACC_CALL_IF_DELAY_US (stm32_device->cs_up_udly); } + // Clear done flags prior to configuring DMA: + stm32_bus->tx_dma_done = false; + stm32_bus->rx_dma_done = false; + // Set up the DMA channels. dma_channel_setup (device, (cyg_uint8*) tx_data, count, true, polled); dma_channel_setup (device, rx_data, count, false, polled); // Run the DMA (polling for completion). if (polled) { - cyg_bool transfer_done = false; - // Enable the SPI controller. reg_addr = spi_reg_base + CYGHWR_HAL_STM32_SPI_CR1; HAL_WRITE_UINT32 (reg_addr, stm32_device->spi_cr1_val | CYGHWR_HAL_STM32_SPI_CR1_SPE); - // Spin waiting on both DMA status flags. Trap bus errors and assert in - // debug builds or return garbage in production builds. - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_ISR; - do { - HAL_READ_UINT32 (reg_addr, reg_data); - if ((reg_data & CYGHWR_HAL_STM32_DMA_ISR_TEIF (stm32_bus->setup->dma_tx_channel)) || - (reg_data & CYGHWR_HAL_STM32_DMA_ISR_TEIF (stm32_bus->setup->dma_rx_channel))) { - CYG_ASSERT (false, "STM32 SPI : DMA bus fault - enable bounce buffers."); - transfer_done = true; - } - if ((reg_data & CYGHWR_HAL_STM32_DMA_ISR_TCIF (stm32_bus->setup->dma_tx_channel)) && - (reg_data & CYGHWR_HAL_STM32_DMA_ISR_TCIF (stm32_bus->setup->dma_rx_channel))) { - transfer_done = true; - } - } while (!transfer_done); - - // Disable the DMA channels on completion and clear the status flags. - chan = stm32_bus->setup->dma_tx_channel; - reg_data = CYGHWR_HAL_STM32_DMA_IFCR_MASK (chan); - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CCR (chan); - HAL_WRITE_UINT32 (reg_addr, 0); - - chan = stm32_bus->setup->dma_rx_channel; - reg_data |= CYGHWR_HAL_STM32_DMA_IFCR_MASK (chan); - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_CCR (chan); - HAL_WRITE_UINT32 (reg_addr, 0); - - reg_addr = dma_reg_base + CYGHWR_HAL_STM32_DMA_IFCR; - HAL_WRITE_UINT32 (reg_addr, reg_data); + while( !(stm32_bus->tx_dma_done && stm32_bus->rx_dma_done) ) + { + hal_stm32_dma_poll( &stm32_bus->dma_tx_stream ); + hal_stm32_dma_poll( &stm32_bus->dma_rx_stream ); + } } - // Run the DMA (interrupt driven). else { cyg_drv_mutex_lock (&stm32_bus->mutex); cyg_drv_dsr_lock (); - stm32_bus->tx_dma_done = false; - stm32_bus->rx_dma_done = false; - - cyg_drv_interrupt_unmask (stm32_bus->setup->dma_tx_intr); - cyg_drv_interrupt_unmask (stm32_bus->setup->dma_rx_intr); // Enable the SPI controller. reg_addr = spi_reg_base + CYGHWR_HAL_STM32_SPI_CR1; @@ -596,6 +515,7 @@ static void spi_transaction_dma cyg_drv_mutex_unlock (&stm32_bus->mutex); } + // Disable the SPI controller. reg_addr = spi_reg_base + CYGHWR_HAL_STM32_SPI_CR1; HAL_WRITE_UINT32 (reg_addr, stm32_device->spi_cr1_val); @@ -609,11 +529,30 @@ static void spi_transaction_dma } //----------------------------------------------------------------------------- +// Calculate BR bits for SPI_CR1. +static int calculate_br_bits + (cyg_spi_cortexm_stm32_bus_t* bus, cyg_uint32 *target_clockrate, cyg_uint32 *br) +{ + cyg_uint32 divided_clk; + + // Calculate the maximum viable bus speed. + divided_clk = *bus->setup->apb_freq / 2; + for (*br = 0; (*br < 7) && (divided_clk > *target_clockrate); (*br)++) + divided_clk >>= 1; + + if ( divided_clk <= *target_clockrate ) + return 0; + + return -1; +} + +//----------------------------------------------------------------------------- // Initialise SPI interfaces on startup. static void CYGBLD_ATTRIB_C_INIT_PRI(CYG_INIT_BUS_SPI) stm32_spi_init(void) { + spi_diag("\n"); #if defined(CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS3) && \ defined(CYGHWR_DEVS_SPI_CORTEXM_STM32_BUS3_DISABLE_DEBUG_PORT) // Disable debug port, freeing up SPI bus 3 pins. @@ -647,8 +586,9 @@ static void stm32_transaction_begin cyg_spi_cortexm_stm32_device_t* stm32_device = (cyg_spi_cortexm_stm32_device_t*) device; cyg_haladdress reg_addr; - cyg_uint32 reg_data, divided_clk, br; + cyg_uint32 reg_data, br; + spi_diag("\n"); // On the first transaction, generate the values to be programmed into the // SPI configuration registers for this device and cache them. This avoids // having to recalculate the prescaler for every transaction. @@ -662,12 +602,10 @@ static void stm32_transaction_begin if (stm32_device->bus_16bit) reg_data |= CYGHWR_HAL_STM32_SPI_CR1_DFF; - // Calculate the maximum viable bus speed. - divided_clk = stm32_bus->setup->apb_freq / 2; - for (br = 0; (br < 7) && (divided_clk > stm32_device->cl_brate); br++) - divided_clk >>= 1; - CYG_ASSERT (divided_clk <= stm32_device->cl_brate, - "STM32 SPI : Cannot run bus slowly enough for peripheral."); + // Get divider bits + if ( 0 != calculate_br_bits(stm32_bus, (cyg_uint32 *)&(stm32_device->cl_brate), &br) ) + CYG_ASSERT (false, "STM32 SPI : Cannot run bus slowly enough for peripheral."); + reg_data |= CYGHWR_HAL_STM32_SPI_CR1_BR (br); // Cache the configuration register settings. @@ -692,6 +630,9 @@ static void stm32_transaction_transfer // Check for unsupported transactions. CYG_ASSERT (count > 0, "STM32 SPI : Null transfer requested."); + spi_diag("count %d\n", count); + if( tx_data ) spi_dump_buf(tx_data, count ); + // We check that the buffers are half-word aligned and that count is a // multiple of two in order to carry out the 16-bit transfer. if (stm32_device->bus_16bit) { @@ -727,6 +668,10 @@ static void stm32_transaction_transfer else { spi_transaction_dma (device, false, polled, count, tx_data, rx_data, drop_cs); } + + spi_diag("done\n"); + if( rx_data ) spi_dump_buf(rx_data, count ); + } //----------------------------------------------------------------------------- @@ -741,6 +686,8 @@ static void stm32_transaction_tick // Check for unsupported transactions. CYG_ASSERT (count > 0, "STM32 SPI : Null transfer requested."); + spi_diag("count %d\n", count); + // We check that count is a multiple of two in order to carry out the 16-bit transfer. if (stm32_device->bus_16bit) { CYG_ASSERT (!(count & 1), @@ -762,6 +709,7 @@ static void stm32_transaction_end cyg_haladdress reg_addr; + spi_diag("\n"); // Ensure that the chip select is deasserted. if (stm32_bus->cs_up) { CYGACC_CALL_IF_DELAY_US (stm32_device->cs_dw_udly); @@ -775,18 +723,83 @@ static void stm32_transaction_end } //----------------------------------------------------------------------------- -// Note that no dynamic configuration options are currently defined. +static int stm32_get_config + (cyg_spi_device* device, cyg_uint32 key, void* buf, cyg_uint32* len) +{ + cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) device->spi_bus; + cyg_spi_cortexm_stm32_device_t* stm32_device = (cyg_spi_cortexm_stm32_device_t*) device; + cyg_uint32* data_p = buf; -static int stm32_get_config - (cyg_spi_device* dev, cyg_uint32 key, void* buf, cyg_uint32* len) -{ - return -1; + switch (key) + { + case CYG_IO_GET_CONFIG_SPI_CLOCKRATE : + // Sanity check + if (NULL == len) { + CYG_ASSERT (false, "STM32 SPI : Null pointer as len argument for stm32_get_config()."); + return -1; + } + if (sizeof(cyg_uint32) != *len) { + CYG_ASSERT (false, "STM32 SPI : Invalid length with stm32_get_config()."); + return -1; + } + if (NULL == buf) { + CYG_ASSERT (false, "STM32 SPI : Null poiter as buf argument for stm32_get_config()."); + return -1; + } + + *data_p = *stm32_bus->setup->apb_freq >> ((( stm32_device->spi_cr1_val >> 3 ) & 7) + 1 ) ; + return 0; + + default : + break; + } + + return -1; } -static int stm32_set_config - (cyg_spi_device* dev, cyg_uint32 key, const void* buf, cyg_uint32* len) +//----------------------------------------------------------------------------- +static int stm32_set_config + (cyg_spi_device* device, cyg_uint32 key, const void* buf, cyg_uint32* len) { - return -1; + cyg_spi_cortexm_stm32_bus_t* stm32_bus = (cyg_spi_cortexm_stm32_bus_t*) device->spi_bus; + cyg_spi_cortexm_stm32_device_t* stm32_device = (cyg_spi_cortexm_stm32_device_t*) device; + + cyg_uint32 br; + + switch (key) + { + case CYG_IO_SET_CONFIG_SPI_CLOCKRATE : + // Sanity check + if (NULL == len) { + CYG_ASSERT (false, "STM32 SPI : Null pointer as len argument for stm32_set_config()."); + return -1; + } + if (sizeof(cyg_uint32) != *len) { + CYG_ASSERT (false, "STM32 SPI : Invalid length with stm32_set_config()."); + return -1; + } + if (NULL == buf) { + CYG_ASSERT (false, "STM32 SPI : Null pointer as buf argument for stm32_set_config()."); + return -1; + } + + // Get divider bits + if ( 0 != calculate_br_bits(stm32_bus, (cyg_uint32 *)buf, &br) ) { + CYG_ASSERT (false, "STM32 SPI : Cannot run bus as slowly as requested."); + return -1; + } + + // Update the cache of the configuration register settings. + stm32_device->spi_cr1_val &= ~CYGHWR_HAL_STM32_SPI_CR1_BR(7); + stm32_device->spi_cr1_val |= CYGHWR_HAL_STM32_SPI_CR1_BR(br); + + return 0; + + default : + break; + } + + return -1; } //============================================================================= diff --git a/packages/devs/spi/freescale/dspi/current/ChangeLog b/packages/devs/spi/freescale/dspi/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/ChangeLog @@ -0,0 +1,79 @@ +2013-07-09 Mike Jones + + * src/spi_freescale_dspi.c: Fix: Kinetis DSPI infinite polling + [ Bugzilla 10011879 ] + +2013-05-08 Ilija Kocho + + * src/spi_freescale_dspi.cdl: Add CYGINT_DEVS_SPI_DMA_USE + * src/spi_freescale_dspi.c: Fix: Disable DMA requests for transfers + that don't use DMA. [ Bugzilla 1001815 ] + +2013-04-01 Ilija Kocho + + * include/spi_freescale_dspi.h, include/spi_freescale_busses.inl + * include/spi_freescale_dspi_io.h, src/spi_freescale_dspi.c: + Optimised receiving of messages that fit in FIFO. Add clock gating. + Fix race condition bug in dspi_transaction_end(). [ Bugzilla 1001815 ] + +2013-02-06 Stefan Singer + Ilija Kocho + + * include/spi_freescale_dspi.h, include/spi_freescale_busses.inl + * include/spi_freescale_dspi_io.h, include/spi_freescale_dspi_bd.h, + * src/spi_freescale_dspi.c: + enhanced endianness support for devices with big and little endian + added support for MPC5xxx in addition to Kinetis + extended support for up to 8 DSPIs + (see Bugzilla 1001752). + +2012-12-28 Ilija Kocho + + * cdl/spi_freescale_dspi.cdl, src/spi_freescale_dspi.c: + Tick-only now has option to beehive like other drivers + rather than RM (see Bugzilla 1001676). + Fixed bug with dropping CS. Chip select options consolidated in a for loop. + + * tests/spi_loopback.c: New file. Add looback test. + [Bugzilla 1001719] + +2012-05-04 Ilija Kocho + + * cdl/spi_freescale_dspi.cdl: + * include/spi_freescale_dspi_buses.inl + * src/spi_freescale_dspi.c: + Add: support for 32 channel eDMA, support for cached memory. + [Bugzilla 1001579] + +2012-01-06 Ilija Kocho + + * cdl/spi_freescale_dspi.cdl: + * include/spi_freescale_dspi.h + * include/spi_freescale_dspi_io.h: + * include/spi_freescale_dspi_buses.inl + * src/spi_freescale_dspi.c: + New package -- Freescale DSPI SPI driver. [Bugzilla 1001450] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl b/packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/cdl/spi_freescale_dspi.cdl @@ -0,0 +1,387 @@ +##============================================================================= +## +## spi_freescale_dspi.cdl +## +## Freescale DSPI driver configuration options. +## +##============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-11-03 +## Purpose: Configure Freescale DSPI driver. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +cdl_package CYGPKG_DEVS_SPI_FREESCALE_DSPI { + display "Freescale DSPI driver" + description " + This package provides SPI driver support for the Freescale + microcontrollers that employ DSPI interface." + + parent CYGPKG_IO_SPI + active_if CYGPKG_IO_SPI + requires CYGPKG_HAL_CORTEXM_KINETIS || CYGPKG_HAL_POWERPC_MPC5xxx + + hardware + include_dir cyg/io + compile spi_freescale_dspi.c + + cdl_option CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE { + display "DSPI FIFO size" + flavor data + default_value 4 + legal_values { 4 5 6 7 8 } + } + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI_CTAR_NUM { + display "CTAR registers" + flavor data + calculated 2 + + description "DSPI can have from 2 to 8 CTAR registers that keep + transfer communication settings. In eCos CTAR0 is used for + all normal transfers while CTAR1 is used as auxiliary for + 'transaction end' (non)transfer." + + cdl_component CYGHWR_DEVS_SPI_FREESCALEDSPI_DSPI_CTAR1_AUX { + display "CTAR1 Aux settings" + flavor none + no_define + + cdl_component CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_SPEED { + display "Nominal clock speed Hz" + flavor data + default_value 25000000 + + cdl_option CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_USE_DBR { + display "Use double baud rate" + flavor bool + default_value 1 + description "Double baud rate is a feature of Freescale DSPI + that may provide higher baud rates but duty the cycle may be + different than 50/50 depdent on scaler/prescaler setting + for achieved baud rate." + } + } + + cdl_option CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_CS_DELAY { + display "Nominal chip select delay (units)" + flavor data + legal_values { 1 to 1000 } + default_value 1 + } + + cdl_option CYGHWR_DEVS_FREESCALE_DSPI_DSPI_CTAR1_AUX_DELAY_UNIT { + display "Chip select delay unit (ns)" + flavor data + calculated 100 + } + } + } + + cdl_interface CYGINT_DEVS_SPI_DSPI_DMA_USE { + display "DSPI DMA use" + flavor data + description "Number of DMA channels used by DSPI buses." + } + + for { set ::spibus 0 } { $::spibus < 8 } { incr ::spibus } { + + cdl_interface CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus] { + display "Number of devices using DSPI bus [set ::spibus]" + } + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus] { + display "Freescale DSPI bus [set ::spibus]" + description "Enable DSPI bus [set :: spibus]." + flavor bool + default_value CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus] + active_if CYGINT_DEVS_SPI_FREESCALE_DSPI[set ::spibus] + + implements CYGINT_HAL_DMA + requires CYGPKG_HAL_FREESCALE_EDMA + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_CS { + display "Chip-selects" + flavor none + no_define + cdl_option CYHGWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PCSS { + display "Chip-select Strobe enable" + flavor bool + default_value 0 + + requires CYHGWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PCSS == 1 \ + implies CYGHWR_FREESCALE_DSPI[set ::spibus]_CS5 == 0 + } + + for { set ::spics 0 } { $::spics < 5 } { incr ::spics } { + cdl_interface CYGINT_FREESCALE_DSPI[set ::spibus]_CS[set ::spics] { + flavor bool + requires CYGHWR_FREESCALE_DSPI[set ::spibus]_CS[set ::spics] == 1 + display "Use CS[set ::spics]" + } + + cdl_component CYGHWR_FREESCALE_DSPI[set ::spibus]_CS[set ::spics] { + display "CS[set ::spics]" + flavor bool + default_value 0 + cdl_option CYGHWR_FREESCALE_DSPI[set ::spibus]_CS[set ::spics]_IS { + display "CS[set ::spics] Inactive state Hi(1) Lo(0)" + flavor data + no_define + default_value { 1 } + legal_values { 0 1 } + } + } + } + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PCSIS { + display "Peripheral CS inactive states" + flavor data + calculated (0x0 + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS0_IS) == 1 ? 1 : 0) + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS1_IS) == 1 ? 2 : 0) + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS2_IS) == 1 ? 4 : 0) + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS3_IS) == 1 ? 8 : 0) + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS4_IS) == 1 ? 16 : 0) + \ + (get_data(CYGHWR_FREESCALE_DSPI[set ::spibus]_CS5_IS) == 1 ? 32 : 0)) + } + } + + cdl_interface CYGINT_FREESCALE_DSPI[set ::spibus]_HAS_MASS { + description "SPI bus serves mass data device(s)." + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PUSHQUE_SIZE { + display "Queue buffer size" + description " + DSPI requires a command for every transfer so output + data must be re-packed in additional buffer prior to + being submitted to DMA. + If Queue capacity is same as DSPI FIFO size, the minimal + legal value, the DMA is not needed so no buffer memory + is allocated. Note: For every entry, byte (8 bit transfer) + or half word (16 bit transfer) a whole 32 bit word + is being allocated." + + legal_values { CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE to 2048 } + flavor data + default_value CYGINT_FREESCALE_DSPI[set ::spibus]_HAS_MASS ? 128 : \ + CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE + } + + cdl_interface CYGINT_DEVS_SPI_DSPI[set ::spibus]_USES_DMA { + flavor bool + } + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_TX_DMA_CHAN { + display "TX DMA channel" + flavor data + implements CYGINT_DEVS_SPI_DSPI_DMA_USE + implements CYGINT_DEVS_SPI_DSPI[set ::spibus]_USES_DMA + + active_if CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PUSHQUE_SIZE > \ + CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE + default_value 4 + [set ::spibus] * 2 + legal_values { 0 to (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM-1) } + description "DMA channel assigned to the trasmitter of SPI bus" + + cdl_component CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_TX_DMA_PRI { + display "Transmit DMA channel priority" + flavor data + legal_values { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 255 } + default_value 255 + description " + DMA can work in either round robin or preeptve arbitration + mode. In preemptive mode, DMA each channel has unique priority, + lower number meaning lower priority. + 255 is a phony meaning \"default channel priority\"." + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_TX_DMA_ECP { + display "Enable channel preemption" + flavor data + legal_values { 0 1 } + default_value 0 + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_TX_DMA_DPA { + display "Disable preempt ability" + flavor data + legal_values { 0 1 } + default_value 0 + } + + } + + cdl_option CYGOPT_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_TCD_SECTION { + display "DMA TCD section" + flavor data + default_value CYGHWR_HAL_EDMA_TCD_SECTION + + description " + Section in which will be DMA Transfer Control + Descriptors shall reside" + } + } + + cdl_component CYGHWR_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_RX_DMA_CHAN { + display "RX DMA channel" + flavor data + implements CYGINT_DEVS_SPI_DSPI_DMA_USE + implements CYGINT_DEVS_SPI_DSPI[set ::spibus]_USES_DMA + + active_if CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_PUSHQUE_SIZE > \ + CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE + default_value 5 + [set ::spibus] * 2 + legal_values { 0 to (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM-1) } + description "DMA channel assigned to the receiver of SPI bus" + + cdl_component CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_RX_DMA_PRI { + display "Receive DMA channel priority" + flavor data + legal_values { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 255 } + default_value 255 + description " + DMA can work in either round robin or preeptve arbitration + mode. In preemptive mode, DMA each channel has unique priority, + lower number meaning lower priority. + 255 is a phony meaning \"default channel priority\"." + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_RX_DMA_ECP { + display "Enable channel preemption" + flavor data + legal_values { 0 1 } + default_value 0 + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_RX_DMA_DPA { + display "Disable preempt ability" + flavor data + legal_values { 0 1 } + default_value 0 + } + } + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_ISR_PRI { + display "Interrupt priority" + flavor data + requires CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_ISR_PRI_SP + calculated CYGNUM_DEVS_SPI_FREESCALE_DSPI[set ::spibus]_ISR_PRI_SP + description "Interrupt priority set-point is provided by HAL" + } + } + } + + cdl_option CYGOPT_DEVS_SPI_FREESCALE_DSPI_TICK_ONLY_DROPS_CS { + display "Tick-only drops CS" + default_value 0 + + description " + eCos Reference Manual states that CS should drop prior to sending ticks, + but other drivers (so far) do not touch the CS. This option selects + between conformance with manual or compatibility with other drivers." + } + + cdl_option CYGPKG_DEVS_SPI_FREESCALE_DSPI_DEBUG_LEVEL { + display "Driver debug output level" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + description " + This option specifies the level of debug data output by + the Freescale DSPI device driver. A value of 0 signifies + no debug data output; 1 signifies normal debug data + output; and 2 signifies maximum debug data output." + } + + + cdl_component CYGPKG_DEVS_SPI_FREESCALE_DSPI_OPTIONS { + display "Freescale DSPI driver build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + cdl_option CYGPKG_DEVS_SPI_FREESCALE_DSPI_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Freescale DSPI driver. These flags are used in addition + to the set of global flags." + } + + cdl_option CYGPKG_DEVS_SPI_FREESCALE_DSPI_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Freescale DSPI driver. These flags are removed from + the set of global flags if present." + } + + } + + cdl_component CYGPKG_DEVS_SPI_FREESCALE_DSPI_TESTS { + display "Freescale DSPI tests" + flavor data + no_define + calculated { CYGBLD_DEVS_SPI_FREESCALE_DSPI_LOOPBACK_TEST ? "tests/spi_loopback" : "" } + + cdl_option CYGBLD_DEVS_SPI_FREESCALE_DSPI_LOOPBACK_TEST { + display "Build Freescale DSPI loopback test" + flavor bool + no_define + default_value 0 + requires { CYGHWR_DEVS_SPI_FREESCALE_DSPI0 || + CYGHWR_DEVS_SPI_FREESCALE_DSPI1 || + CYGHWR_DEVS_SPI_FREESCALE_DSPI2 } + description " + This option enables the building of the Freescale DSPI loopback test. + Refer to the comments in tests/loopback.c for details of how to + use this test." + } + } +} +# EOF spi_freescale_dspi.cdl diff --git a/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi.h b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi.h new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi.h @@ -0,0 +1,207 @@ +#ifndef CYGONCE_DEVS_SPI_FREESCALE_DSPI_H +#define CYGONCE_DEVS_SPI_FREESCALE_DSPI_H +//============================================================================= +// +// spi_freescale_dspi.h +// +// Header definitions for Freescale DSPI driver. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-11-03 +// Purpose: Freescale DSPI driver definitions. +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +//----------------------------------------------------------------------------- +// Macro for defining a SPI device and attaching it to the appropriate bus. +// +// _name_ is the name of the SPI device. This will be used to reference a +// data structure of type cyg_spi_device which can be passed to the +// SPI driver API without needing a cast. +// _bus_ is the bus number to which this device is attached (0, 1 or 2). +// _csnum_ is the chip select line used for this device, numbered from 0. +// _fmsz_ is set device SPI frame size (bits) +// _clpol_ is the SPI bus clock polarity used by the device. This must be +// set to 1 if clock inactive state is high, 0 if clock inactive +// state is low. +// _clpha_ is the SPI bus clock phase used by the device. +// _brate_ is the SPI bus clock baud rate used by the device, measured in Hz. +// _csup_dly_ is the minimum delay between chip select assert and transfer +// start, measured in microseconds. +// _csdw_dly_ is the minimum delay between transfer end and chip select deassert, +// measured in delay units. +// _trbt_dly_ is the minimum delay between consecutive transfers. +// _dlu_ is delay unit in ns +// _dbr_ is enabling double baud rate feature + + +#define CYGNUM_DSPI_DELAY_UNIT(__val) (__val/10) + +#define CYG_SPI_BUS_NAME(_b_) cyg_spi_dspi_bus ## _b_ + +#define CYG_DEVS_SPI_FREESCALE_DSPI_DEVICE( \ + _name_, _bus_, _csnum_, _fmsz_, _clpol_, _clpha_, _brate_, _csup_dly_, _csdw_dly_, _trbt_dly_, _dlu_, _dbr_ \ +) \ + cyg_spi_freescale_dspi_device_t _name_ ##_fs_dspi CYG_SPI_DEVICE_ON_BUS(_bus_) = { \ +{ .spi_bus = (cyg_spi_bus*) &CYG_SPI_BUS_NAME(_bus_) }, \ + .dev_num = _csnum_, \ + .clocking.bus_16bit = _fmsz_ > 8 ? 1 : 0, \ + .clocking.frame_size = _fmsz_, \ + .clocking.cl_pol = _clpol_, \ + .clocking.cl_pha = _clpha_, \ + .clocking.cl_brate = _brate_, \ + .clocking.cs_up_udly = _csup_dly_, \ + .clocking.cs_dw_udly = _csdw_dly_, \ + .clocking.tr_bt_udly = _trbt_dly_, \ + .clocking.dl_unit = CYGNUM_DSPI_DELAY_UNIT(_dlu_), \ + .clocking.cl_dbr = _dbr_, \ + .clocking.dspi_ctar = 0 \ +}; \ +extern cyg_spi_device _name_ __attribute__((alias ( #_name_ "_fs_dspi" ))) + +enum { SPI_DMA_CHAN_TX_I, SPI_DMA_CHAN_RX_I }; + +//----------------------------------------------------------------------------- +// Freescale DSPI bus configuration and state. + +typedef struct cyg_spi_freescale_dspi_bus_setup_s +{ + cyghwr_devs_freescale_dspi_t* dspi_p; // Base address of SPI register block. + cyghwr_hal_freescale_dma_set_t* dma_set_p; // DMA configuration block. + cyg_vector_t intr_num; // DSPI interrupt vector + cyg_priority_t intr_prio; // Interrupt priority + cyg_uint32 mcr_opt ; // Module Configuratyon Register options + const cyg_uint32* spi_pin_list_p; // List of GPIOs used by the SPI interface. + const cyg_uint32* cs_pin_list_p; // List of GPIOs used as chip selects. + cyg_uint16 clk_gate; // Clock gate + cyg_uint8 cs_pin_num; // Number of chip selects for this bus. +} cyg_spi_freescale_dspi_bus_setup_t; + +#define SPI_DMA_CHAN_I(__dma_set,__rt) (__dma_set->chan_p[SPI_DMA_CHAN_ ## __rt ## _I].dma_chan_i) + +typedef struct cyg_spi_freescale_dspi_bus_s +{ + // ---- Upper layer data ---- + cyg_spi_bus spi_bus; // Upper layer SPI bus data. + + // ---- Bus configuration constants ---- + const cyg_spi_freescale_dspi_bus_setup_t* setup_p; + // ---- Driver state (private) ---- + // DMA transfer control descriptors + const cyghwr_hal_freescale_edma_tcd_t* tx_dma_tcd_ini_p; // TCD init. + const cyghwr_hal_freescale_edma_tcd_t* rx_dma_tcd_ini_p; // data + volatile cyghwr_hal_freescale_edma_tcd_t* rx_dma_tcd_p; // DMA TCD (RX) + volatile cyghwr_hal_freescale_edma_tcd_t* tx_dma_tcd_p; // DMA TCD (TX) + volatile cyg_uint32* pushque_p; // Tx command queue + cyg_uint16 pushque_n; // Tx command buffer size + cyg_uint8 txfifo_n; // TxFIFO size + cyg_uint8 rxfifo_n; // RxFIFO size + cyg_interrupt intr_data; // Interrupt state + cyg_handle_t intr_handle; // Interrupt handle + cyg_drv_mutex_t transfer_mutex; // Transfer mutex. + cyg_drv_cond_t transfer_done; // Transfer condition variable. + cyg_uint32 clock_freq; // Clock provided by hal +} cyg_spi_freescale_dspi_bus_t; + +//----------------------------------------------------------------------------- +// Freescale DSPI device. + +typedef struct cyg_freescale_dspi_clocking_s { + cyg_uint32 dspi_ctar; // DSPI Clock and Transfer Attributes Rregister shadow. + cyg_uint32 cl_brate; // Clock baud rate. + cyg_uint8 bus_16bit; // Use 16 bit (1) or 8 bit (0) transfers. + cyg_uint8 cl_pol; // Clock polarity (0 or 1). + cyg_uint8 cl_pha; // Clock phase (0 or 1). + cyg_uint8 cl_dbr; // Use double baud-rate feature if needed + cyg_uint8 cs_up_udly; // Minimum delay in us/ns between CS up and transfer start. + cyg_uint8 cs_dw_udly; // Minimum delay in us/ns between transfer end and CS down. + cyg_uint8 tr_bt_udly; // Minimum delay in us/ns between two transfers. + cyg_uint8 dl_unit; // Delay unit (1/10 * ns) + cyg_uint8 lsb_first; // LSbit shifted first. + cyg_uint8 frame_size; // Device SPI frame size (bits). +} cyg_freescale_dspi_clocking_t;; + +typedef struct cyg_spi_freescale_dspi_device_s +{ + // ---- Upper layer data ---- + cyg_spi_device spi_device; // Upper layer SPI device data. + + // ---- Device setup (user configurable) ---- + cyg_freescale_dspi_clocking_t clocking; + cyg_uint8 dev_num; // Device SPI select. + cyg_uint8 chip_sel; + // ---- Device state (private) ---- +} cyg_spi_freescale_dspi_device_t; + +//----------------------------------------------------------------------------- +// Exported bus data structures. + +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI0 +externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus0; +#endif + +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI1 +externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus1; +#endif + +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI2 +externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus2; +#endif + +__externC void cyghwr_devs_freescale_dspi_diag(cyg_spi_freescale_dspi_bus_t* spi_bus_p); +__externC void cyghwr_devs_freescale_dspi_diag_array(char* name_p, + volatile cyg_uint32* fifo_p, + cyg_uint32 fifo_n); + +//============================================================================= +#endif // CYGONCE_DEVS_SPI_FREESCALE_DSPI_H diff --git a/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_buses.inl @@ -0,0 +1,586 @@ +#ifndef SPI_FREESCALE_DSPI_BUSES_INL +#define SPI_FREESCALE_DSPI_BUSES_INL +//============================================================================= +// +// spi_freescale_dspi_buses.inl +// +// SPI bus instantiation for Freescale DSPI +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-11-09 +// Purpose: Freescale DSPI DSPI bus instantiation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#define PUSHQUE_ALIGN CYGBLD_ATTRIB_ALIGN(4) + +#define DSPI_DMA_BANDWIDTH FREESCALE_EDMA_CSR_BWC_0 + +//----------------------------------------------------------------------------- +// Instantiate the bus state data structures. + +// Some auxiliary macros + +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian +#define EDMA_TCD_SADDR(__bus) \ + .saddr = (void *)(((unsigned int)&CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->popr) + 3) +#else // AKA Little endian +#define EDMA_TCD_SADDR(__bus) \ + .saddr = (cyg_uint32 *)&CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->popr +#endif + +#define DSPI_EDMA_CHAN_SET(__bus) \ +static volatile cyg_uint32 \ +dspi ## __bus ## _pushque[CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PUSHQUE_SIZE+4] \ +PUSHQUE_ALIGN EDMA_RAM_BUF_SECTION; \ + \ +static const cyghwr_hal_freescale_dma_chan_set_t dspi ## __bus ## _dma_chan[2] = \ +{ \ + { \ + .dma_src = FREESCALE_DMAMUX_SRC_SPI ## __bus ## _TX \ + | FREESCALE_DMAMUX_CHCFG_ENBL_M, \ + .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_CHAN, \ + .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_PRI, \ + }, \ + { \ + .dma_src = FREESCALE_DMAMUX_SRC_SPI ## __bus ## _RX \ + | FREESCALE_DMAMUX_CHCFG_ENBL_M, \ + .dma_chan_i = CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_CHAN, \ + .dma_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_PRI, \ + } \ +}; \ + \ +static cyghwr_hal_freescale_dma_set_t dspi ## __bus ## _dma_set = { \ + .chan_p = dspi ## __bus ## _dma_chan, \ + .chan_n = 2 \ +}; \ + \ +static const cyghwr_hal_freescale_edma_tcd_t dspi ## __bus ## _dma_tcd_tx_ini = \ +{ \ + .saddr = (cyg_uint32 *) dspi ## __bus ## _pushque, \ + .soff = 4, \ + .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) | \ + FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) | \ + FREESCALE_EDMA_ATTR_SMOD(0) | \ + FREESCALE_EDMA_ATTR_DMOD(0), \ + .daddr = (cyg_uint32 *) \ + &CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P->pushr, \ + .doff = 0, \ + .nbytes.mlno = 4, \ + .slast = 0, \ + .citer.elinkno = 1, \ + .dlast_sga.dlast = 0, \ + .biter.elinkno = 1, \ + .csr = DSPI_DMA_BANDWIDTH \ +}; \ + \ +static const cyghwr_hal_freescale_edma_tcd_t dspi ## __bus ## _dma_tcd_rx_ini = \ +{ \ + EDMA_TCD_SADDR(__bus), \ + .soff = 0, \ + .attr = FREESCALE_EDMA_ATTR_SSIZE(FREESCALE_EDMA_ATTR_SIZE_32) | \ + FREESCALE_EDMA_ATTR_DSIZE(FREESCALE_EDMA_ATTR_SIZE_32) | \ + FREESCALE_EDMA_ATTR_SMOD(0) | \ + FREESCALE_EDMA_ATTR_DMOD(0), \ + .daddr = NULL, \ + .doff = 4, \ + .nbytes.mlno = 4, \ + .slast = 0, \ + .citer.elinkno = 1, \ + .dlast_sga.dlast = 0, \ + .biter.elinkno = 1, \ + .csr = DSPI_DMA_BANDWIDTH \ +} + +#define DSPI_EDMA_SET_P_YES(__bus) .dma_set_p = &dspi ## __bus ## _dma_set +#define DSPI_EDMA_SET_P_NULL(__bus) .dma_set_p = NULL + +#define DSPI_EDMA_TCD_YES(__bus) \ + .tx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P-> \ + tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _TX_DMA_CHAN], \ + .rx_dma_tcd_p = &CYGHWR_IO_FREESCALE_EDMA0_P-> \ + tcd[CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _RX_DMA_CHAN], \ + .tx_dma_tcd_ini_p = &dspi ## __bus ## _dma_tcd_tx_ini, \ + .rx_dma_tcd_ini_p = &dspi ## __bus ## _dma_tcd_rx_ini, \ + .pushque_p = dspi ## __bus ## _pushque + +#define DSPI_EDMA_TCD_NULL(__bus) \ + .tx_dma_tcd_p = NULL, \ + .rx_dma_tcd_p = NULL, \ + .tx_dma_tcd_ini_p = NULL, \ + .rx_dma_tcd_ini_p = NULL, \ + .pushque_p = NULL + +// End DSPI_EDMA + +#define DSPI_BUS_SETUP(__bus) \ +static const cyg_spi_freescale_dspi_bus_setup_t dspi ## __bus ## _setup = { \ + .dspi_p = CYGADDR_IO_SPI_FREESCALE_DSPI ## __bus ## _P, \ + .intr_num = CYGNUM_HAL_INTERRUPT_SPI ## __bus, \ + .intr_prio = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _ISR_PRI, \ + .spi_pin_list_p = spi ## __bus ## _pins, \ + .cs_pin_list_p = spi ## __bus ## _cs_pins, \ + .clk_gate = CYGHWR_IO_FREESCALE_DSPI ## __bus ## _CLK, \ + .cs_pin_num = sizeof(spi ## __bus ## _cs_pins)/ \ + sizeof(spi ## __bus ## _cs_pins[0]), \ + .mcr_opt = CYGHWR_FREESCALE_DSPI ## __bus ## _MCR_PCSSE | \ + FREESCALE_DSPI_MCR_PCSIS( \ + CYGHWR_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PCSIS), \ + DSPI ## __bus ## _EDMA_SET_P \ +} + +#define DSPI_BUS(__bus) \ +cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus ## __bus = { \ + .spi_bus.spi_transaction_begin = dspi_transaction_begin, \ + .spi_bus.spi_transaction_transfer = dspi_transaction_transfer, \ + .spi_bus.spi_transaction_tick = dspi_transaction_tick, \ + .spi_bus.spi_transaction_end = dspi_transaction_end, \ + .spi_bus.spi_get_config = dspi_get_config, \ + .spi_bus.spi_set_config = dspi_set_config, \ + .setup_p = &dspi ## __bus ## _setup, \ + DSPI ## __bus ## _EDMA_TCD, \ + .pushque_n = CYGNUM_DEVS_SPI_FREESCALE_DSPI ## __bus ## _PUSHQUE_SIZE, \ + .txfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE, \ + .rxfifo_n = CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE \ +} + +#define DSPI_BUS_PINS(__bus) \ +static const cyg_uint32 spi ## __bus ## _pins[] = { \ + CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SIN, \ + CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SOUT, \ + CYGHWR_IO_FREESCALE_SPI ## __bus ## _PIN_SCK \ +} + +// DSPI BUS Instances ======================================================= + +// DSPI BUS 0 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI0 + +#define CYGBLD_DSPI0_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI0_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI0_PCSS +#define CYGHWR_FREESCALE_DSPI0_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI0_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi0_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI0_CS0 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI0_CS1 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI0_CS2 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI0_CS3 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI0_CS4 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI0_CS5 + CYGHWR_IO_FREESCALE_SPI0_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI0_USES_DMA + DSPI_EDMA_CHAN_SET(0); +# define DSPI0_EDMA_SET_P DSPI_EDMA_SET_P_YES(0) +# define DSPI0_EDMA_TCD DSPI_EDMA_TCD_YES(0) +#else +# define DSPI0_EDMA_SET_P DSPI_EDMA_SET_P_NULL(0) +# define DSPI0_EDMA_TCD DSPI_EDMA_TCD_NULL(0) +#endif // CYGINT_DEVS_SPI_DSPI0_USES_DMA + +DSPI_BUS_PINS(0); +DSPI_BUS_SETUP(0); +DSPI_BUS(0); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI0 + +// DSPI BUS 1 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI1 + +#define CYGBLD_DSPI1_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI1_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI1_PCSS +#define CYGHWR_FREESCALE_DSPI1_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI1_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi1_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI1_CS0 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI1_CS1 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI1_CS2 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI1_CS3 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI1_CS4 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI1_CS5 + CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI1_USES_DMA + DSPI_EDMA_CHAN_SET(1); +# define DSPI1_EDMA_SET_P DSPI_EDMA_SET_P_YES(1) +# define DSPI1_EDMA_TCD DSPI_EDMA_TCD_YES(1) +#else +# define DSPI1_EDMA_SET_P DSPI_EDMA_SET_P_NULL(1) +# define DSPI1_EDMA_TCD DSPI_EDMA_TCD_NULL(1) +#endif // CYGINT_DEVS_SPI_DSPI1_USES_DMA + +DSPI_BUS_PINS(1); +DSPI_BUS_SETUP(1); +DSPI_BUS(1); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI1 + +// DSPI BUS 2 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI2 + +#define CYGBLD_DSPI2_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI2_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI2_PCSS +#define CYGHWR_FREESCALE_DSPI2_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI2_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi2_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI2_CS0 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI2_CS1 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI2_CS2 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI2_CS3 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI2_CS4 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI2_CS5 + CYGHWR_IO_FREESCALE_SPI2_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI2_USES_DMA + DSPI_EDMA_CHAN_SET(2); +# define DSPI2_EDMA_SET_P DSPI_EDMA_SET_P_YES(2) +# define DSPI2_EDMA_TCD DSPI_EDMA_TCD_YES(2) +#else +# define DSPI2_EDMA_SET_P DSPI_EDMA_SET_P_NULL(2) +# define DSPI2_EDMA_TCD DSPI_EDMA_TCD_NULL(2) +#endif // CYGINT_DEVS_SPI_DSPI2_USES_DMA + +DSPI_BUS_PINS(2); +DSPI_BUS_SETUP(2); +DSPI_BUS(2); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI2 + +// DSPI BUS 3 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI3 + +#define CYGBLD_DSPI3_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI3_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI3_PCSS +#define CYGHWR_FREESCALE_DSPI3_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI3_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi3_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI3_CS0 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI3_CS1 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI3_CS2 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI3_CS3 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI3_CS4 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI3_CS5 + CYGHWR_IO_FREESCALE_SPI3_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI3_USES_DMA + DSPI_EDMA_CHAN_SET(3); +# define DSPI3_EDMA_SET_P DSPI_EDMA_SET_P_YES(3) +# define DSPI3_EDMA_TCD DSPI_EDMA_TCD_YES(3) +#else +# define DSPI3_EDMA_SET_P DSPI_EDMA_SET_P_NULL(3) +# define DSPI3_EDMA_TCD DSPI_EDMA_TCD_NULL(3) +#endif // CYGINT_DEVS_SPI_DSPI3_USES_DMA + +DSPI_BUS_PINS(3); +DSPI_BUS_SETUP(3); +DSPI_BUS(3); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI3 + +// DSPI BUS 4 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI4 + +#define CYGBLD_DSPI4_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI4_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI4_PCSS +#define CYGHWR_FREESCALE_DSPI4_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI4_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi4_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI4_CS0 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI4_CS1 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI4_CS2 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI4_CS3 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI4_CS4 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI4_CS5 + CYGHWR_IO_FREESCALE_SPI4_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI4_USES_DMA + DSPI_EDMA_CHAN_SET(4); +# define DSPI4_EDMA_SET_P DSPI_EDMA_SET_P_YES(4) +# define DSPI4_EDMA_TCD DSPI_EDMA_TCD_YES(4) +#else +# define DSPI4_EDMA_SET_P DSPI_EDMA_SET_P_NULL(4) +# define DSPI4_EDMA_TCD DSPI_EDMA_TCD_NULL(4) +#endif // CYGINT_DEVS_SPI_DSPI4_USES_DMA + +DSPI_BUS_PINS(4); +DSPI_BUS_SETUP(4); +DSPI_BUS(4); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI4 + +// DSPI BUS 5 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI5 + +#define CYGBLD_DSPI5_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI5_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI5_PCSS +#define CYGHWR_FREESCALE_DSPI5_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI5_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi5_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI5_CS0 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI5_CS1 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI5_CS2 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI5_CS3 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI5_CS4 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI5_CS5 + CYGHWR_IO_FREESCALE_SPI5_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI5_USES_DMA + DSPI_EDMA_CHAN_SET(5); +# define DSPI5_EDMA_SET_P DSPI_EDMA_SET_P_YES(5) +# define DSPI5_EDMA_TCD DSPI_EDMA_TCD_YES(5) +#else +# define DSPI5_EDMA_SET_P DSPI_EDMA_SET_P_NULL(5) +# define DSPI5_EDMA_TCD DSPI_EDMA_TCD_NULL(5) +#endif // CYGINT_DEVS_SPI_DSPI5_USES_DMA + +DSPI_BUS_PINS(5); +DSPI_BUS_SETUP(5); +DSPI_BUS(5); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI5 + +// DSPI BUS 6 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI6 + +#define CYGBLD_DSPI6_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI6_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI6_PCSS +#define CYGHWR_FREESCALE_DSPI6_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI6_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi6_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI6_CS0 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI6_CS1 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI6_CS2 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI6_CS3 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI6_CS4 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI6_CS5 + CYGHWR_IO_FREESCALE_SPI6_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI6_USES_DMA + DSPI_EDMA_CHAN_SET(6); +# define DSPI6_EDMA_SET_P DSPI_EDMA_SET_P_YES(6) +# define DSPI6_EDMA_TCD DSPI_EDMA_TCD_YES(6) +#else +# define DSPI6_EDMA_SET_P DSPI_EDMA_SET_P_NULL(6) +# define DSPI6_EDMA_TCD DSPI_EDMA_TCD_NULL(6) +#endif // CYGINT_DEVS_SPI_DSPI6_USES_DMA + +DSPI_BUS_PINS(6); +DSPI_BUS_SETUP(6); +DSPI_BUS(6); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI6 + +// DSPI BUS 7 ================================================================ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI7 + +#define CYGBLD_DSPI7_TCD_SECTION \ + CYGBLD_ATTRIB_SECTION(CYGOPT_DEVS_SPI_FREESCALE_DSPI7_TCD_SECTION) + +#ifdef CYHGWR_DEVS_SPI_FREESCALE_DSPI7_PCSS +#define CYGHWR_FREESCALE_DSPI7_MCR_PCSSE FREESCALE_DSPI_MCR_PCSSE_M +#else +#define CYGHWR_FREESCALE_DSPI7_MCR_PCSSE 0 +#endif + +// SPI chip select pins. +static const cyg_uint32 spi7_cs_pins[] = { +#ifdef CYGHWR_FREESCALE_DSPI7_CS0 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS0, +#endif +#ifdef CYGHWR_FREESCALE_DSPI7_CS1 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS1, +#endif +#ifdef CYGHWR_FREESCALE_DSPI7_CS2 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS2, +#endif +#ifdef CYGHWR_FREESCALE_DSPI7_CS3 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS3, +#endif +#ifdef CYGHWR_FREESCALE_DSPI7_CS4 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS4, +#endif +#ifdef CYGHWR_FREESCALE_DSPI7_CS5 + CYGHWR_IO_FREESCALE_SPI7_PIN_CS5 +#endif +}; + +#ifdef CYGINT_DEVS_SPI_DSPI7_USES_DMA + DSPI_EDMA_CHAN_SET(7); +# define DSPI7_EDMA_SET_P DSPI_EDMA_SET_P_YES(7) +# define DSPI7_EDMA_TCD DSPI_EDMA_TCD_YES(7) +#else +# define DSPI7_EDMA_SET_P DSPI_EDMA_SET_P_NULL(7) +# define DSPI7_EDMA_TCD DSPI_EDMA_TCD_NULL(7) +#endif // CYGINT_DEVS_SPI_DSPI7_USES_DMA + +DSPI_BUS_PINS(7); +DSPI_BUS_SETUP(7); +DSPI_BUS(7); + +#endif // CYGHWR_DEVS_SPI_FREESCALE_DSPI7 + +//============================================================================= +#endif // SPI_FREESCALE_DSPI_BUSES_INL diff --git a/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_io.h b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_io.h new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/include/spi_freescale_dspi_io.h @@ -0,0 +1,292 @@ +#ifndef CYGONCE_DEVS_SPI_FREESCALE_DSPI_IO_H +#define CYGONCE_DEVS_SPI_FREESCALE_DSPI_IO_H +//============================================================================= +// +// spi_freescale_dspi_io.h +// +// IO definitions for Freescale DSPI. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-11-03 +// Purpose: Freescale DSPI I/O definitions. +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + +// ---------------------------------------------------------------------------- +// DSPI + +typedef volatile struct cyghwr_devs_freescale_dspi_s { + cyg_uint32 mcr; // Module Configuration Register + cyg_uint32 reserved_0; + cyg_uint32 tcr; // Transfer Count Register + // Clock and Transfer Attributes Register + cyg_uint32 ctar[CYGHWR_DEVS_SPI_FREESCALE_DSPI_CTAR_NUM]; +#if CYGHWR_DEVS_SPI_FREESCALE_DSPI_CTAR_NUM < 8 + cyg_uint32 reserved_1[8-CYGHWR_DEVS_SPI_FREESCALE_DSPI_CTAR_NUM]; +#endif + cyg_uint32 sr; // Status Register + cyg_uint32 rser; // DMA/IRQ Request Select and Enable Register + cyg_uint32 pushr; // TX FIFO PUSH Register + cyg_uint32 popr; // RX FIFO POP Register + // Transmit FIFO Registers + cyg_uint32 txfr[CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE]; +#if CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE < 16 + cyg_uint32 reserved_2[16-CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE]; +#endif + // Receive FIFO Registers + cyg_uint32 rxfr[CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE]; +#if CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE < 16 + cyg_uint32 reserved_3[16-CYGHWR_DEVS_SPI_FREESCALE_DSPI_FIFO_SIZE]; +#endif +} cyghwr_devs_freescale_dspi_t; + +// MCR Bit Fields +#define FREESCALE_DSPI_MCR_HALT_M 0x1 +#define FREESCALE_DSPI_MCR_HALT_S 0 +#define FREESCALE_DSPI_MCR_SMPL_PT_M 0x300 +#define FREESCALE_DSPI_MCR_SMPL_PT_S 8 +#define FREESCALE_DSPI_MCR_SMPL_PT(__val) \ + VALUE_(FREESCALE_DSPI_MCR_SMPL_PT_S, __val) +#define FREESCALE_DSPI_MCR_CLR_RXF_M 0x400 +#define FREESCALE_DSPI_MCR_CLR_RXF_S 10 +#define FREESCALE_DSPI_MCR_CLR_TXF_M 0x800 +#define FREESCALE_DSPI_MCR_CLR_TXF_S 11 +#define FREESCALE_DSPI_MCR_DIS_RXF_M 0x1000 +#define FREESCALE_DSPI_MCR_DIS_RXF_S 12 +#define FREESCALE_DSPI_MCR_DIS_TXF_M 0x2000 +#define FREESCALE_DSPI_MCR_DIS_TXF_S 13 +#define FREESCALE_DSPI_MCR_MDIS_M 0x4000 +#define FREESCALE_DSPI_MCR_MDIS_S 14 +#define FREESCALE_DSPI_MCR_DOZE_M 0x8000 +#define FREESCALE_DSPI_MCR_DOZE_S 15 +#define FREESCALE_DSPI_MCR_PCSIS_M 0x3F0000 +#define FREESCALE_DSPI_MCR_PCSIS_S 16 +#define FREESCALE_DSPI_MCR_PCSIS(__val) \ + VALUE_(FREESCALE_DSPI_MCR_PCSIS_S, __val) +#define FREESCALE_DSPI_MCR_ROOE_M 0x1000000 +#define FREESCALE_DSPI_MCR_ROOE_S 24 +#define FREESCALE_DSPI_MCR_PCSSE_M 0x2000000 +#define FREESCALE_DSPI_MCR_PCSSE_S 25 +#define FREESCALE_DSPI_MCR_MTFE_M 0x4000000 +#define FREESCALE_DSPI_MCR_MTFE_S 26 +#define FREESCALE_DSPI_MCR_FRZ_M 0x8000000 +#define FREESCALE_DSPI_MCR_FRZ_S 27 +#define FREESCALE_DSPI_MCR_DCONF_M 0x30000000 +#define FREESCALE_DSPI_MCR_DCONF_S 28 +#define FREESCALE_DSPI_MCR_DCONF(__val) \ + VALUE_(FREESCALE_DSPI_MCR_DCONF_S, __val) +#define FREESCALE_DSPI_MCR_CONT_SCKE_M 0x40000000 +#define FREESCALE_DSPI_MCR_CONT_SCKE_S 30 +#define FREESCALE_DSPI_MCR_MSTR_M 0x80000000 +#define FREESCALE_DSPI_MCR_MSTR_S 31 +// TCR Bit Fields +#define FREESCALE_DSPI_TCR_DSPI_TCNT_M 0xFFFF0000 +#define FREESCALE_DSPI_TCR_DSPI_TCNT_S 16 +#define FREESCALE_DSPI_TCR_DSPI_TCNT(__val) \ + VALUE_(FREESCALE_DSPI_TCR_DSPI_TCNT_S, __val) +// CTAR Bit Fields +#define FREESCALE_DSPI_CTAR_BR_M 0xF +#define FREESCALE_DSPI_CTAR_BR_S 0 +#define FREESCALE_DSPI_CTAR_BR(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_BR_S, __val) +#define FREESCALE_DSPI_CTAR_DT_M 0xF0 +#define FREESCALE_DSPI_CTAR_DT_S 4 +#define FREESCALE_DSPI_CTAR_DT(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_DT_S, __val) +#define FREESCALE_DSPI_CTAR_ASC_M 0xF00 +#define FREESCALE_DSPI_CTAR_ASC_S 8 +#define FREESCALE_DSPI_CTAR_ASC(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_ASC_S, __val) +#define FREESCALE_DSPI_CTAR_CSSCK_M 0xF000 +#define FREESCALE_DSPI_CTAR_CSSCK_S 12 +#define FREESCALE_DSPI_CTAR_CSSCK(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_CSSCK_S, __val) +#define FREESCALE_DSPI_CTAR_PBR_M 0x30000 +#define FREESCALE_DSPI_CTAR_PBR_S 16 +#define FREESCALE_DSPI_CTAR_PBR(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_PBR_S, __val) +#define FREESCALE_DSPI_CTAR_PDT_M 0xC0000 +#define FREESCALE_DSPI_CTAR_PDT_S 18 +#define FREESCALE_DSPI_CTAR_PDT(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_PDT_S, __val) +#define FREESCALE_DSPI_CTAR_PASC_M 0x300000 +#define FREESCALE_DSPI_CTAR_PASC_S 20 +#define FREESCALE_DSPI_CTAR_PASC(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_PASC_S, __val) +#define FREESCALE_DSPI_CTAR_PCSSCK_S 22 +#define FREESCALE_DSPI_CTAR_PCSSCK(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_PCSSCK_S, __val) +#define FREESCALE_DSPI_CTAR_LSBFE_S 24 +#define FREESCALE_DSPI_CTAR_LSBFE_M 0x1000000 + +#define FREESCALE_DSPI_CTAR_FMSZ_M 0x78000000 +#define FREESCALE_DSPI_CTAR_FMSZ_S 27 +#define FREESCALE_DSPI_CTAR_FMSZ(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_FMSZ_S, __val) +#define FREESCALE_DSPI_CTAR_DBR_M 0x80000000 +#define FREESCALE_DSPI_CTAR_DBR_S 31 +// CTAR_SLAVE Bit Fields +#define FREESCALE_DSPI_CTAR_SLAVE_CPHA_M 0x2000000 +#define FREESCALE_DSPI_CTAR_SLAVE_CPHA_S 25 +#define FREESCALE_DSPI_CTAR_SLAVE_CPOL_M 0x4000000 +#define FREESCALE_DSPI_CTAR_SLAVE_CPOL_S 26 +#define FREESCALE_DSPI_CTAR_SLAVE_FMSZ_M 0xF8000000 +#define FREESCALE_DSPI_CTAR_SLAVE_FMSZ_S 27 +#define FREESCALE_DSPI_CTAR_SLAVE_FMSZ(__val) \ + VALUE_(FREESCALE_DSPI_CTAR_SLAVE_FMSZ_S, __val) +// SR Bit Fields +#define FREESCALE_DSPI_SR_POPNXTPTR_M 0xF +#define FREESCALE_DSPI_SR_POPNXTPTR_S 0 +#define FREESCALE_DSPI_SR_POPNXTPTR(__val) \ + VALUE_(FREESCALE_DSPI_SR_POPNXTPTR_S, __val) +#define FREESCALE_DSPI_SR_RXCTR_M 0xF0 +#define FREESCALE_DSPI_SR_RXCTR_S 4 +#define FREESCALE_DSPI_SR_RXCTR(__val) \ + VALUE_(FREESCALE_DSPI_SR_RXCTR_S, __val) +#define FREESCALE_DSPI_SR_TXNXTPTR_M 0xF00 +#define FREESCALE_DSPI_SR_TXNXTPTR_S 8 +#define FREESCALE_DSPI_SR_TXNXTPTR(__val) \ + VALUE_(FREESCALE_DSPI_SR_TXNXTPTR_S, __val) +#define FREESCALE_DSPI_SR_TXCTR_M 0xF000 +#define FREESCALE_DSPI_SR_TXCTR_S 12 +#define FREESCALE_DSPI_SR_TXCTR(__val) \ + VALUE_(FREESCALE_DSPI_SR_TXCTR_S, __val) +#define FREESCALE_DSPI_SR_RFDF_M 0x20000 +#define FREESCALE_DSPI_SR_RFDF_S 17 +#define FREESCALE_DSPI_SR_RFOF_M 0x80000 +#define FREESCALE_DSPI_SR_RFOF_S 19 +#define FREESCALE_DSPI_SR_TFFF_M 0x2000000 +#define FREESCALE_DSPI_SR_TFFF_S 25 +#define FREESCALE_DSPI_SR_TFUF_M 0x8000000 +#define FREESCALE_DSPI_SR_TFUF_S 27 +#define FREESCALE_DSPI_SR_EOQF_M 0x10000000 +#define FREESCALE_DSPI_SR_EOQF_S 28 +#define FREESCALE_DSPI_SR_TXRXS_M 0x40000000 +#define FREESCALE_DSPI_SR_TXRXS_S 30 +#define FREESCALE_DSPI_SR_TCF_M 0x80000000 +#define FREESCALE_DSPI_SR_TCF_S 31 + +#define FREESCALE_DSPI_CLEAR_FIFOS (FREESCALE_DSPI_SR_TFUF_M |\ + FREESCALE_DSPI_SR_RFOF_M) + +// RSER Bit Fields +#define FREESCALE_DSPI_RSER_RFDF_DIRS_M 0x10000 +#define FREESCALE_DSPI_RSER_RFDF_DIRS_S 16 +#define FREESCALE_DSPI_RSER_RFDF_RE_M 0x20000 +#define FREESCALE_DSPI_RSER_RFDF_RE_S 17 +#define FREESCALE_DSPI_RSER_RFOF_RE_M 0x80000 +#define FREESCALE_DSPI_RSER_RFOF_RE_S 19 +#define FREESCALE_DSPI_RSER_TFFF_DIRS_M 0x1000000 +#define FREESCALE_DSPI_RSER_TFFF_DIRS_S 24 +#define FREESCALE_DSPI_RSER_TFFF_RE_M 0x2000000 +#define FREESCALE_DSPI_RSER_TFFF_RE_S 25 +#define FREESCALE_DSPI_RSER_TFUF_RE_M 0x8000000 +#define FREESCALE_DSPI_RSER_TFUF_RE_S 27 +#define FREESCALE_DSPI_RSER_EOQF_RE_M 0x10000000 +#define FREESCALE_DSPI_RSER_EOQF_RE_S 28 +#define FREESCALE_DSPI_RSER_TCF_RE_M 0x80000000 +#define FREESCALE_DSPI_RSER_TCF_RE_S 31 +// PUSHR Bit Fields +#define FREESCALE_DSPI_PUSHR_TXDATA_M 0xFFFF +#define FREESCALE_DSPI_PUSHR_TXDATA_S 0 +#define FREESCALE_DSPI_PUSHR_TXDATA(__val) \ + VALUE_(FREESCALE_DSPI_PUSHR_TXDATA_S, __val) +#define FREESCALE_DSPI_PUSHR_PCS_M 0x3F0000 +#define FREESCALE_DSPI_PUSHR_PCS_S 16 +#define FREESCALE_DSPI_PUSHR_PCS(__val) VALUE_(FREESCALE_DSPI_PUSHR_PCS_S, __val) +#define FREESCALE_DSPI_PUSHR_CTCNT_M 0x4000000 +#define FREESCALE_DSPI_PUSHR_CTCNT_S 26 +#define FREESCALE_DSPI_PUSHR_EOQ_M 0x8000000 +#define FREESCALE_DSPI_PUSHR_EOQ_S 27 +#define FREESCALE_DSPI_PUSHR_CTAS_M 0x70000000 +#define FREESCALE_DSPI_PUSHR_CTAS_S 28 +#define FREESCALE_DSPI_PUSHR_CTAS(__val) \ + VALUE_(FREESCALE_DSPI_PUSHR_CTAS_S, __val) +#define FREESCALE_DSPI_PUSHR_CONT_M 0x80000000 +#define FREESCALE_DSPI_PUSHR_CONT_S 31 +// PUSHR_SLAVE Bit Fields +#define FREESCALE_DSPI_PUSHR_SLAVE_TXDATA_M 0xFFFFFFFF +#define FREESCALE_DSPI_PUSHR_SLAVE_TXDATA_S 0 +#define FREESCALE_DSPI_PUSHR_SLAVE_TXDATA(__val) \ +VALUE_(FREESCALE_DSPI_PUSHR_SLAVE_TXDATA_S, __val) + +#define FREESCALE_DSPI_PUSHR_PCS_CLEAR(__val)\ +CYG_MACRO_START\ + __val &= ~FREESCALE_DSPI_PUSHR_PCS_M; \ +CYG_MACRO_END + +// POPR Bit Fields +#define FREESCALE_DSPI_POPR_RXDATA_M 0xFFFFFFFF +#define FREESCALE_DSPI_POPR_RXDATA_S 0 +#define FREESCALE_DSPI_POPR_RXDATA(__val) \ + VALUE_(FREESCALE_DSPI_POPR_RXDATA_S, __val) +// TXFR Bit Fields +#define FREESCALE_DSPI_TXFR_TXDATA_M 0xFFFF +#define FREESCALE_DSPI_TXFR_TXDATA_S 0 +#define FREESCALE_DSPI_TXFR_TXCMD_TXDATA_M 0xFFFF0000 +#define FREESCALE_DSPI_TXFR_TXCMD_TXDATA_S 16 +#define FREESCALE_DSPI_TXFR_TXCMD_TXDATA(__fr,__val) \ + VALUE_(FREESCALE_DSPI_TXFR##__fr##_TXCMD_TXDATA_S, __val) +// RXFR Bit Fields +#define FREESCALE_DSPI_RXFR_RXDATA_M 0xFFFFFFFF +#define FREESCALE_DSPI_RXFR_RXDATA_S 0 +#define FREESCALE_DSPI_RXFR_RXDATA(__fr,__val) \ + VALUE_(FREESCALE_DSPI_RXFR##_fr##_RXDATA_S, __val) + +// Borrow following macros from HAL + +// CYGADDR_IO_SPI_FREESCALE_DSPIx_P + +// CYGHWR_IO_CLOCK_ENABLE(__clkgate) +// CYGHWR_IO_FREESCALE_DSPIx_CLK + +// CYGHWR_IO_FREESCALE_DSPI_PIN(__pin) + +// CYGHWR_IO_FREESCALE_SPIx_PIN_SIN +// CYGHWR_IO_FREESCALE_SPIx_PIN_SOUT +// CYGHWR_IO_FREESCALE_SPIx_PIN_SCK + +// CYGHWR_IO_FREESCALE_SPIx_PIN_CSn + +//============================================================================= +#endif // CYGONCE_DEVS_SPI_FREESCALE_DSPI_IO_H diff --git a/packages/devs/spi/freescale/dspi/current/src/spi_freescale_dspi.c b/packages/devs/spi/freescale/dspi/current/src/spi_freescale_dspi.c new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/src/spi_freescale_dspi.c @@ -0,0 +1,1190 @@ +//============================================================================= +// +// spi_freescale_dspi.c +// +// SPI driver implementation for Freescale DSPI +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-11-04 +// Purpose: Freescale DSPI SPI driver implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#if defined(CYGHWR_DEVS_SPI_FREESCALE_DSPI0) || \ + defined(CYGHWR_DEVS_SPI_FREESCALE_DSPI1) || \ + defined(CYGHWR_DEVS_SPI_FREESCALE_DSPI2) + +#include + + +#define DEBUG_SPI CYGPKG_DEVS_SPI_FREESCALE_DSPI_DEBUG_LEVEL + +#if DEBUG_SPI >= 3 +# define DEBUG3_PRINTF(args...) diag_printf(args) +#else +# define DEBUG3_PRINTF(args...) +#endif + +#if DEBUG_SPI >= 2 +# define DEBUG2_PRINTF(args...) diag_printf(args) +#else +# define DEBUG2_PRINTF(args...) +#endif + +#if DEBUG_SPI >= 1 +# define DEBUG1_PRINTF(args...) diag_printf(args) +#else +# define DEBUG1_PRINTF(args...) +#endif + +# define DEBUG0_PRINTF(args...) diag_printf(args) + +#define PUSHR_NULL (0xFFFF) + +//----------------------------------------------------------------------------- +// API function call forward references. + +static void dspi_transaction_begin (cyg_spi_device*); +static void dspi_transaction_transfer (cyg_spi_device*, cyg_bool, cyg_uint32, + const cyg_uint8*, cyg_uint8*, cyg_bool); +static void dspi_transaction_tick (cyg_spi_device*, cyg_bool, cyg_uint32); +static void dspi_transaction_end (cyg_spi_device*); +static int dspi_get_config (cyg_spi_device*, cyg_uint32, + void*, cyg_uint32*); +static int dspi_set_config (cyg_spi_device*, cyg_uint32, + const void*, cyg_uint32*); + +//----------------------------------------------------------------------------- +// Instantiate the bus state data structures. + +#include + +// Some hardware manipulation inline functions and macros + +static inline void dspi_disable(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->mcr |= FREESCALE_DSPI_MCR_MDIS_M; +} + +static inline void dspi_enable(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->mcr &= ~FREESCALE_DSPI_MCR_MDIS_M; +} + +static inline void dspi_halt(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->mcr |= FREESCALE_DSPI_MCR_HALT_M; +} + +static inline void dspi_tlah(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->mcr &= ~FREESCALE_DSPI_MCR_HALT_M; +} + +static inline void +dspi_irq_enable(cyghwr_devs_freescale_dspi_t* dspi_p, cyg_uint32 irq_mask) +{ + dspi_p->rser |= irq_mask; +} + +static inline void +dspi_irq_disable(cyghwr_devs_freescale_dspi_t* dspi_p, cyg_uint32 irq_mask) +{ + dspi_p->rser &= ~irq_mask; +} + +static inline void +dspi_status_clear(cyghwr_devs_freescale_dspi_t* dspi_p, cyg_uint32 sr_mask) +{ + dspi_p->sr |= sr_mask; +} + +static inline void +dspi_fifo_clear(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->mcr |= FREESCALE_DSPI_MCR_CLR_RXF_M | FREESCALE_DSPI_MCR_CLR_TXF_M; +} + +static inline void +dspi_fifo_drain(cyghwr_devs_freescale_dspi_t* dspi_p) +{ + dspi_p->sr |= FREESCALE_DSPI_SR_RFDF_M; +} + + +#define DSPI_IRQ_ENABLE(__dspi_p) \ + dspi_irq_enable(__dspi_p, FREESCALE_DSPI_RSER_EOQF_RE_M) +#define DSPI_IRQ_DISABLE(__dspi_p) \ + dspi_irq_disable(__dspi_p, FREESCALE_DSPI_RSER_EOQF_RE_M) +#define DSPI_EOQ_CLEAR(__dspi_p) \ + dspi_status_clear(__dspi_p, FREESCALE_DSPI_SR_EOQF_M | \ + FREESCALE_DSPI_SR_TCF_M | \ + FREESCALE_DSPI_SR_RFDF_M) +#define DSPI_TXRX_ENABLE(__dspi_p) \ + dspi_status_clear(__dspi_p, FREESCALE_DSPI_SR_TXRXS_M) + +// Alternate clocking for spi_transaction_end() +// Used to initialize CTAR1. +static const cyg_freescale_dspi_clocking_t aux_clocking = +{ + .frame_size = 4, + .cl_pol = 0, + .cl_pha = 0, + .cl_brate = CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_SPEED, + .cs_up_udly = CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_CS_DELAY, + .cs_dw_udly = CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_CS_DELAY, + .tr_bt_udly =CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_CS_DELAY, + .dl_unit = CYGNUM_DSPI_DELAY_UNIT( + CYGHWR_DEVS_FREESCALE_DSPI_DSPI_CTAR1_AUX_DELAY_UNIT), + .cl_dbr = CYGHWR_DEVS_FREESCALEDSPI_DSPI_CTAR1_AUX_USE_DBR +}; + +//----------------------------------------------------------------------------- +// Implement DSPI ISRs. + +// ISR for DSPI with DMA +// Disable DSPI IRQ and Tx DMA channel and schedule DSR. +static cyg_uint32 dspi_dma_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus_p = + (cyg_spi_freescale_dspi_bus_t*) data; + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus_p->setup_p->dspi_p; + cyghwr_hal_freescale_dma_set_t *dma_set_p = dspi_bus_p->setup_p->dma_set_p; + cyghwr_hal_freescale_edma_t *edma_p; + edma_p = dma_set_p->edma_p; + + cyg_drv_isr_lock(); + + // Disable the Tx DMA channel and DSPI IRQ. + hal_freescale_edma_erq_disable(edma_p, SPI_DMA_CHAN_I(dma_set_p, TX)); + DSPI_IRQ_DISABLE(dspi_p); + + cyg_drv_interrupt_acknowledge(vector); + cyg_drv_isr_unlock(); + return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); +} + +// ISR for DSPI without DMA +// Disable DSPI IRQ and schedule DSR. +static cyg_uint32 dspi_nodma_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus_p = + (cyg_spi_freescale_dspi_bus_t*) data; + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus_p->setup_p->dspi_p; + + cyg_drv_isr_lock(); + + // Disable the DSPI IRQ. + DSPI_IRQ_DISABLE(dspi_p); + + cyg_drv_interrupt_acknowledge(vector); + cyg_drv_isr_unlock(); + return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); +} + +// DSPI DSR +static void dspi_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus = (cyg_spi_freescale_dspi_bus_t*) data; + + cyg_drv_dsr_lock(); + cyg_drv_cond_signal(&dspi_bus->transfer_done); + cyg_drv_dsr_unlock(); +} + +//----------------------------------------------------------------------------- +// Calculate best fit CTAR baud rate setting (using some brute force). +// Best fit is considered the highest frequency that is not highe than set point. + +static const cyg_uint16 ctar_br[16] = { 2/2, 4/2, 6/2, 8/2, 16/2, 32/2, 64/2, + 128/2, 256/2, 512/2, 1024/2, 2048/2, 4096/2, 8192/2, 16384/2, 32768/2 }; +static const cyg_uint8 ctar_pbr[4] = { 2, 3, 5, 7 }; + +static const cyg_uint16 ctar_cssck[16] = { 2/2, 4/2, 8/2, 16/2, 32/2, 64/2, + 128/2, 256/2, 512/2, 1024/2, 2048/2, 4096/2, 8192/2, 16384/2, 32768/2, + 65536/2 }; +static const cyg_uint8 ctar_pcssck[4] = { 1, 3, 5, 7 }; + +typedef struct ctar_br_s { + cyg_uint8 valid; + cyg_uint8 br; + cyg_uint8 dbr; + cyg_uint8 pbr; +} ctar_br_t; + +static int dspi_ctar_brbf (const cyg_freescale_dspi_clocking_t* spi_cocking, + ctar_br_t* brs_p, const cyg_uint16* br_p, + const cyg_uint8* pbr_p, cyg_uint32* alt_brate, + cyg_uint32 sys_clk) +{ + cyg_uint32 pbr_i; + cyg_uint32 br_i; + cyg_uint32 dbr; + cyg_uint32 clk; + cyg_uint32 baud_bf = 0; // Best fit + cyg_uint32 baud_tmp; + cyg_uint32 baud_sp = alt_brate ? *alt_brate : + spi_cocking->cl_brate; // Set point + + // Calculate the maximal viable bus speed. + clk = sys_clk; + // Desired baud rate very high, use DBR if allowed + dbr = (baud_sp > (clk / 4)) && spi_cocking->cl_dbr && (br_p == ctar_br); + + for(pbr_i = 0; pbr_i < 3; pbr_i++) { + for(br_i = 0; br_i < 15; br_i++) { + if((baud_tmp = (clk * (1+dbr)) / (pbr_p[pbr_i] * (2*br_p[br_i]))) + <= baud_sp) + { + if(baud_tmp > baud_bf) { + DEBUG3_PRINTF("DSPI Baud:" + " SP=%d pbr=0x%x br=0x%x dbr=%d Temp=%d (SysClk=%d)\n", + baud_sp, pbr_i, br_i, dbr, baud_tmp, clk); + brs_p->br = br_i; + brs_p->pbr = pbr_i; + brs_p->valid = 1; + baud_bf = baud_tmp; + if(baud_tmp == baud_sp) + goto baud_found; + } + } + } + } + if(!brs_p->valid) { + pbr_i = 3; + br_i = 15; + DEBUG1_PRINTF("DSPI Baud too low:" + " SP=%d pbr=0x%x br=0x%x Actual=%d (SysClk=%d)\n", + baud_sp, pbr_i, br_i, + (clk * (1+dbr)) / (pbr_p[pbr_i] * (2*br_p[br_i])), clk); + brs_p->br = br_i; + brs_p->pbr = pbr_i; + + return -1; + } else { +baud_found: + brs_p->dbr = dbr; + DEBUG1_PRINTF("DSPI Baud found:" + " SP=%d pbr=0x%x br=0x%x dbr=%d Actual=%dHz (%dns) (SysClk=%d)\n", + baud_sp, brs_p->pbr, brs_p->br, dbr, baud_bf, 1000000000/baud_bf, clk); + + return 0; + } +} + +// Set Clock and Transfer Attributes Register +#define CYG_ASSERT_LOW_FREQ \ + CYG_ASSERT (false, "Freescale DSPI: Cannot run bus as slowly as requested.") +cyg_uint32 +dspi_calc_ctar(const cyg_freescale_dspi_clocking_t* spi_clocking, cyg_uint32 sys_clk) +{ + cyg_uint32 regval; + ctar_br_t brs; + cyg_uint32 delay_brate; + + regval = FREESCALE_DSPI_CTAR_FMSZ(spi_clocking->frame_size - 1); + if(spi_clocking->cl_pol) + regval |= FREESCALE_DSPI_CTAR_SLAVE_CPOL_M; + if(spi_clocking->cl_pha) + regval |= FREESCALE_DSPI_CTAR_SLAVE_CPHA_M; + if(spi_clocking->lsb_first) + regval |= FREESCALE_DSPI_CTAR_LSBFE_M; + + // Get divider bits + // Baud rate + brs.dbr = 0; + if (!dspi_ctar_brbf(spi_clocking, &brs, ctar_br, ctar_pbr, NULL, sys_clk)) + { + regval |= FREESCALE_DSPI_CTAR_BR(brs.br) | + FREESCALE_DSPI_CTAR_PBR(brs.pbr) | + (brs.dbr ? FREESCALE_DSPI_CTAR_DBR_M : 0); + } else + CYG_ASSERT_LOW_FREQ; + + delay_brate = 100000000 / (spi_clocking->dl_unit * spi_clocking->cs_up_udly); + if (!dspi_ctar_brbf(spi_clocking, &brs, ctar_cssck, ctar_pcssck, + &delay_brate, sys_clk)) + { + regval |= FREESCALE_DSPI_CTAR_CSSCK(brs.br) | + FREESCALE_DSPI_CTAR_PCSSCK(brs.pbr); + } else + CYG_ASSERT_LOW_FREQ; + + // Delay between clock and CS negation + delay_brate = 100000000 / (spi_clocking->dl_unit * spi_clocking->cs_dw_udly); + if (!dspi_ctar_brbf(spi_clocking, &brs, ctar_cssck, ctar_pcssck, + &delay_brate, sys_clk)) + { + regval |= FREESCALE_DSPI_CTAR_ASC(brs.br) | + FREESCALE_DSPI_CTAR_PASC(brs.pbr); + } else + CYG_ASSERT_LOW_FREQ; + + // Delay between clock and CS negation and assertion + delay_brate = 100000000 / (spi_clocking->dl_unit * spi_clocking->tr_bt_udly); + if (!dspi_ctar_brbf(spi_clocking, &brs, ctar_cssck, ctar_pcssck, + &delay_brate, sys_clk)) + { + regval |= FREESCALE_DSPI_CTAR_DT(brs.br) | + FREESCALE_DSPI_CTAR_PDT(brs.pbr); + } else + CYG_ASSERT_LOW_FREQ; + return regval; +} + +//---------------------------------------------------------------------------- +//Set up SPI bus pins + +static void dspi_pin_setup(const cyg_uint32* spi_pins_p, + const cyg_uint32* cs_pins_p, cyg_uint32 cs_pin_n) +{ + const cyg_uint32* pin_p; + + for(pin_p = spi_pins_p; + pin_p < spi_pins_p + 3; + CYGHWR_IO_FREESCALE_DSPI_PIN(*pin_p++)); + + for(pin_p = cs_pins_p; + pin_p < cs_pins_p + cs_pin_n; + CYGHWR_IO_FREESCALE_DSPI_PIN(*pin_p++)); +} + +//----------------------------------------------------------------------------- +// Set up a new SPI bus on initialisation. + +static void dspi_bus_setup(cyg_spi_freescale_dspi_bus_t* spi_bus_p) +{ + cyghwr_devs_freescale_dspi_t* dspi_p = spi_bus_p->setup_p->dspi_p; + cyghwr_hal_freescale_dma_set_t* dma_set_p; + cyghwr_hal_freescale_edma_t* edma_p; + cyg_uint32 dma_chan_i; + + // Set up the clocking. + CYGHWR_IO_CLOCK_ENABLE(spi_bus_p->setup_p->clk_gate); + spi_bus_p->clock_freq = CYGHWR_IO_SPI_FREESCALE_DSPI_CLOCK; + DEBUG1_PRINTF("DSPI BUS %p: SysClk=%d\n", spi_bus_p, spi_bus_p->clock_freq); + + // Set up the pins. + dspi_pin_setup(spi_bus_p->setup_p->spi_pin_list_p, + spi_bus_p->setup_p->cs_pin_list_p, + spi_bus_p->setup_p->cs_pin_num); + + // Set up default SPI configuration. + dspi_p->mcr = spi_bus_p->setup_p->mcr_opt | FREESCALE_DSPI_MCR_MSTR_M | + FREESCALE_DSPI_MCR_CLR_RXF_M | FREESCALE_DSPI_MCR_CLR_TXF_M | + FREESCALE_DSPI_MCR_MDIS_M; + + // Enable DSPI controller. + dspi_enable(dspi_p); + + if((dma_set_p=spi_bus_p->setup_p->dma_set_p)) { + // Initialize DMA channels + hal_freescale_edma_init_chanset(dma_set_p); +#if DEBUG_SPI >= 1 + hal_freescale_edma_diag(dma_set_p, 0xffff); + cyghwr_devs_freescale_dspi_diag(spi_bus_p); +#endif + // Set up DMA transfer control descriptors + edma_p = dma_set_p->edma_p; + dma_chan_i = dma_set_p->chan_p[SPI_DMA_CHAN_TX_I].dma_chan_i; + hal_freescale_edma_transfer_init(edma_p, dma_chan_i, + spi_bus_p->tx_dma_tcd_ini_p); +#if DEBUG_SPI >= 1 + hal_freescale_edma_transfer_diag(edma_p, dma_chan_i, true); +#endif + dma_chan_i = dma_set_p->chan_p[SPI_DMA_CHAN_RX_I].dma_chan_i; + hal_freescale_edma_transfer_init(edma_p, dma_chan_i, + spi_bus_p->rx_dma_tcd_ini_p); +#if DEBUG_SPI >= 1 + hal_freescale_edma_transfer_diag(edma_p, dma_chan_i, true); +#endif + } +#if DEBUG_SPI >= 1 + cyghwr_devs_freescale_dspi_diag(spi_bus_p); +#endif + // Initialise the synchronisation primitivies. + cyg_drv_mutex_init (&spi_bus_p->transfer_mutex); + cyg_drv_cond_init (&spi_bus_p->transfer_done, &spi_bus_p->transfer_mutex); + + // Hook up the ISR and DSR. + cyg_drv_interrupt_create (spi_bus_p->setup_p->intr_num, + spi_bus_p->setup_p->intr_prio, + (cyg_addrword_t) spi_bus_p, + dma_set_p ? dspi_dma_ISR : dspi_nodma_ISR, + dspi_DSR, &spi_bus_p->intr_handle, + &spi_bus_p->intr_data); + cyg_drv_interrupt_attach (spi_bus_p->intr_handle); + + dspi_p->ctar[1] = dspi_calc_ctar(&aux_clocking, spi_bus_p->clock_freq); + + // Call upper layer bus init. + CYG_SPI_BUS_COMMON_INIT(&spi_bus_p->spi_bus); +} + +//----------------------------------------------------------------------------- +// Set up Rx DMA channel +static void +rx_dma_channel_setup(cyghwr_hal_freescale_dma_set_t *dma_set_p, + cyg_uint8* data_buf, cyg_uint32 bus_16bit, + volatile cyghwr_hal_freescale_edma_tcd_t *tcd_p) +{ + cyg_uint32 step, sdsize; + static cyg_uint8 popr_sink; + + // Set the correct transfer size. + if(bus_16bit) { + step = 2; + sdsize = FREESCALE_EDMA_ATTR_SIZE_16; + } else { + step = 1; + sdsize = FREESCALE_EDMA_ATTR_SIZE_8; + } + if(data_buf) { + tcd_p->doff = step; + tcd_p->daddr = data_buf; + } else { + tcd_p->doff = 0; + tcd_p->daddr = &popr_sink; + } + tcd_p->nbytes.mlno = step; + tcd_p->attr = FREESCALE_EDMA_ATTR_SSIZE(sdsize) | + FREESCALE_EDMA_ATTR_DSIZE(sdsize) | + FREESCALE_EDMA_ATTR_SMOD(0) | + FREESCALE_EDMA_ATTR_DMOD(0); +#if DEBUG_SPI >= 3 + hal_freescale_edma_tcd_diag(tcd_p, -1, "[DSPI Rx]"); +#endif +} + +//---------------------------------------------------------------------------- +// Set up Tx FIFO queue +// Set up Tx FIFO command queue +// DSPI requires sending command for every transfer. +// Used for transfers that fit within DSPI FIFO. + +#if DEBUG_SPI >= 2 +static const char debug_format[] = "BUFF %dbit %s: %p 0x%08x remain %d:\n"; +static const char debug_format1[] = "PUSHR 0x%08x %s: %p 0x%08x remain %d:\n"; +#endif + +static inline volatile cyg_uint32 +fifo_pushque_fill(cyg_spi_freescale_dspi_bus_t* dspi_bus, cyg_uint8* + data_p, cyg_uint32 count, cyg_bool bus_16bit, cyg_uint32 pushr, + cyg_bool drop_cs) +{ + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus->setup_p->dspi_p; + cyg_uint32 txfifo_n = dspi_bus->txfifo_n; + + if(data_p) { + if(!bus_16bit) { + for(; count > 1; count--) { + if(!(--txfifo_n)) { + dspi_p->pushr = pushr |= *data_p | FREESCALE_DSPI_PUSHR_EOQ_M; + count--; + DEBUG2_PRINTF(debug_format, 8, "FBK", data_p, + pushr | *data_p, count); + return count; + } + DEBUG3_PRINTF(debug_format, 8, "FAD", data_p, + pushr | *data_p, count-1); + dspi_p->pushr = pushr | *data_p++; + } + pushr |= *data_p; + } else { + cyg_uint16* data16_p = (cyg_uint16 *)data_p; + cyg_uint16 data_word; + + for(; count > 2; count-=2) { + if(!(--txfifo_n)) { + dspi_p->pushr = pushr |= *data16_p | FREESCALE_DSPI_PUSHR_EOQ_M; + count-=2; + DEBUG2_PRINTF(debug_format, 16, "FBK", data_p, + pushr, count); + return count; + } + DEBUG3_PRINTF(debug_format, 16, "FAD", data16_p, + pushr | *data16_p, (count-1)*2); + data_word = *data16_p++; + dspi_p->pushr = pushr | data_word; + } + data_word = *data16_p; + pushr |= data_word; + } + } else { + pushr |= PUSHR_NULL; + for(; count > 1; count--) { + if(!(--txfifo_n)) { + dspi_p->pushr = pushr |= FREESCALE_DSPI_PUSHR_EOQ_M; + count--; + DEBUG2_PRINTF(debug_format, 0, "FBK", &dspi_p->pushr, + pushr, count); + return count; + } + dspi_p->pushr = pushr; + DEBUG3_PRINTF(debug_format, 0, "FAD", &dspi_p->pushr, pushr, + count-1); + } + } + if(drop_cs) + pushr &= ~FREESCALE_DSPI_PUSHR_CONT_M; + dspi_p->pushr = pushr |= FREESCALE_DSPI_PUSHR_EOQ_M; + DEBUG2_PRINTF(data_p ? debug_format : debug_format1, data_p ? (bus_16bit ? 16 :8) : pushr, + (drop_cs ? "FEN" : "FSG"), data_p /*&dspi_p->pushr*/, pushr, 0); + return 0; +} + +//---------------------------------------------------------------------------- +// Set up Tx +// Set up Tx DMA command queue +// DSPI requires sending command for every transfer. +// Used for transfers larger than DSPI FIFO + +static inline volatile cyg_uint32 +dma_pushque_fill(cyg_spi_freescale_dspi_bus_t* dspi_bus, cyg_uint8* data_p, + cyg_uint32 count, cyg_bool bus_16bit, cyg_uint32 pushr, + cyg_bool drop_cs) +{ + volatile cyg_uint32* pushque_p; + volatile cyg_uint32* pushque_end; + + pushque_p = dspi_bus->pushque_p; + pushque_end = pushque_p + (dspi_bus->pushque_n - (bus_16bit ? 2 : 1)); + pushque_p = dspi_bus->pushque_p; + if(data_p) { + if(!bus_16bit) { + do { + if(pushque_p == pushque_end) { + *pushque_p = pushr | *data_p | FREESCALE_DSPI_PUSHR_EOQ_M; + count--; + + DEBUG2_PRINTF(debug_format, 8, "BRK", pushque_p, + pushque_p[0], count); + return count; + } + *pushque_p++ = pushr | *data_p++; + DEBUG3_PRINTF(debug_format, 8, "ADD", pushque_p-1, + pushque_p[-1], count-1); + } while(--count > 1); + pushr |= *data_p; + } else { + cyg_uint16* data16_p = (cyg_uint16 *)data_p; + cyg_uint16 data_word; + do { + if(pushque_p == pushque_end) { + data_word = *data16_p; + *pushque_p = pushr | data_word | FREESCALE_DSPI_PUSHR_EOQ_M; + count-=2; + + DEBUG2_PRINTF(debug_format, 16, "BRK", pushque_p, + pushque_p[0], count); + return count; + } + data_word = *data16_p++; + *pushque_p++ = pushr | data_word; + DEBUG3_PRINTF(debug_format, 16, "ADD", pushque_p-1, + pushque_p[-1], count-2); + } while((count -= 2) > 2); + data_word = *data16_p; + pushr |= data_word; + } + } else { + pushr |= PUSHR_NULL; + do { + if(pushque_p == pushque_end) { + *pushque_p = pushr | FREESCALE_DSPI_PUSHR_EOQ_M; + count--; + + DEBUG2_PRINTF(debug_format, 0, "BRK", pushque_p, + pushque_p[0], count); + return count; + } + *pushque_p++ = pushr; + DEBUG3_PRINTF(debug_format, 0, "ADD", pushque_p-1, pushque_p[-1], + count-1); + } while(--count > 1); + } + if(drop_cs) pushr &= ~FREESCALE_DSPI_PUSHR_CONT_M; + *pushque_p = pushr |= FREESCALE_DSPI_PUSHR_EOQ_M; + DEBUG2_PRINTF(debug_format, data_p ? (bus_16bit ? 16 :8) : 0, + (drop_cs ? "END" : "SGM"), pushque_p, pushque_p[0], 0); + + return 0; +} + +// Set up Tx DMA channel +// Used for transfers larger than DSPI FIFO + +static inline cyg_uint32 +tx_dma_channel_setup(cyg_spi_freescale_dspi_bus_t* dspi_bus, + cyg_uint8* data_buf, cyg_uint32 count, + cyg_bool bus_16bit, + cyg_uint32 pushr, cyg_bool drop_cs) +{ + cyghwr_hal_freescale_dma_set_t *dma_set_p = dspi_bus->setup_p->dma_set_p; + cyghwr_hal_freescale_edma_t *edma_p = dma_set_p->edma_p; + volatile cyghwr_hal_freescale_edma_tcd_t *tcd_p; + cyg_uint32 remain=0; + cyg_uint32 dma_chan_i; + + remain = dma_pushque_fill(dspi_bus, data_buf, count, bus_16bit, pushr, drop_cs); + dma_chan_i = SPI_DMA_CHAN_I(dma_set_p, TX); + tcd_p = &edma_p->tcd[dma_chan_i]; + tcd_p->saddr = dspi_bus->pushque_p; + DEBUG2_PRINTF("DSPI: Tx channel setup\n"); +#if DEBUG_SPI >= 3 + hal_freescale_edma_transfer_diag(edma_p, dma_chan_i, true); +#endif + return remain; +} + +//----------------------------------------------------------------------------- +// Set SPI peripheral chip select. + +static inline cyg_uint32 +dspi_chip_select_set(cyg_int32 cs_i, cyg_bool pccse, cyg_bool assert) +{ + cyg_uint32 spi_pushr; + + if(cs_i < 0) { + spi_pushr = 0; + } else { + if(pccse) { + spi_pushr = cs_i; + } else { + if(cs_i < 5) { + if(assert) { + cs_i = 1 << cs_i; + spi_pushr = FREESCALE_DSPI_PUSHR_PCS(cs_i); + } else + spi_pushr = 0; + } else { + CYG_ASSERT(1, "DSPI: Peripheral Chip Select out of range.\n"); + spi_pushr = 1 << 5; + } + } + } + return spi_pushr; +} + +//----------------------------------------------------------------------------- +// Execute SPI transaction. + +static void spi_transaction_do (cyg_spi_device* device, cyg_bool tick_only, + cyg_bool polled, cyg_uint32 count, + const cyg_uint8* tx_data, cyg_uint8* rx_data, + cyg_bool drop_cs) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus = + (cyg_spi_freescale_dspi_bus_t*) device->spi_bus; + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + cyg_bool bus_16bit = dspi_device->clocking.bus_16bit; + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus->setup_p->dspi_p; + + cyghwr_hal_freescale_dma_set_t* dma_set_p; + cyghwr_hal_freescale_edma_t* edma_p = NULL; + + cyg_uint32 count_down; + cyg_uint32 txfifo_n = dspi_bus->txfifo_n; + cyg_uint32 pushr; + cyg_uint32 pushque_n; + cyg_uint32 dma_chan_rx_i = 0; + cyg_uint32 dma_chan_tx_i = 0; + cyg_uint8* rx_data0; + +#if DEBUG_SPI >= 2 + cyg_uint32 first_turn = 1; +#endif + + DEBUG2_PRINTF("DSPI: transaction: count=%d drop_cs=%d tick_only=%d\n", + count, drop_cs, tick_only); + + // Set up peripheral CS field. DSPI automatically asserts and deasserts CS + pushr = +#ifndef CYGOPT_DEVS_SPI_FREESCALE_DSPI_TICK_ONLY_DROPS_CS + // Compatibility option + // eCos Reference Manual states that CS should drop prior to sending + // ticks, but other SPI drivers do not touch the CS. + tick_only ? dspi_p->pushr & 0x87FF0000 : +#endif + dspi_chip_select_set( +#ifdef CYGOPT_DEVS_SPI_FREESCALE_DSPI_TICK_ONLY_DROPS_CS + // Compatibility option. See comment above. + tick_only ? -1 : +#endif + dspi_device->dev_num, + dspi_p->mcr & FREESCALE_DSPI_MCR_PCSSE_M, true); + pushr |= FREESCALE_DSPI_PUSHR_CONT_M; + + dspi_fifo_clear(dspi_p); + + pushque_n = dspi_bus->pushque_n; + if(bus_16bit) + txfifo_n *= 2; + + dma_set_p = dspi_bus->setup_p->dma_set_p; + if((count > txfifo_n) && dma_set_p) { + rx_data0 = rx_data; + edma_p = dma_set_p->edma_p; + // Set up the DMA channels. + dma_chan_rx_i = SPI_DMA_CHAN_I(dma_set_p, RX); + dma_chan_tx_i = SPI_DMA_CHAN_I(dma_set_p, TX); + rx_dma_channel_setup(dma_set_p, (cyg_uint8*) rx_data, + bus_16bit, &edma_p->tcd[dma_chan_rx_i]); + hal_freescale_edma_erq_enable(edma_p, dma_chan_rx_i); + dspi_irq_enable(dspi_p, + FREESCALE_DSPI_RSER_TFFF_RE_M | + FREESCALE_DSPI_RSER_RFDF_RE_M | + FREESCALE_DSPI_RSER_TFFF_DIRS_M | + FREESCALE_DSPI_RSER_RFDF_DIRS_M); + } else { + rx_data0 = NULL; + // If byte count fits in the FIFO don't bother with DMA. + if(dma_set_p) { + edma_p = dma_set_p->edma_p; + hal_freescale_edma_erq_disable(edma_p, SPI_DMA_CHAN_I(dma_set_p, RX)); + } + dma_set_p = NULL; + dspi_irq_disable(dspi_p, + FREESCALE_DSPI_RSER_TFFF_RE_M | + FREESCALE_DSPI_RSER_RFDF_RE_M | + FREESCALE_DSPI_RSER_TFFF_DIRS_M | + FREESCALE_DSPI_RSER_RFDF_DIRS_M); + } + + if(!polled) + cyg_drv_interrupt_unmask(dspi_bus->setup_p->intr_num); + count_down = count; + while(count_down) { +#if DEBUG_SPI >= 2 + if(first_turn) { + if(dspi_bus->pushque_p) + dspi_bus->pushque_p[0] |= FREESCALE_DSPI_PUSHR_CTCNT_M; + first_turn = 0; + } +#endif + if(dma_set_p && (count_down > txfifo_n)) { + // Transfer size is larger than DSPI FIFO + // Use DMA Tx + count_down = tx_dma_channel_setup(dspi_bus, (cyg_uint8*) tx_data, + count_down, bus_16bit, + pushr, drop_cs); +#if DEBUG_SPI >= 3 + hal_freescale_edma_transfer_diag(edma_p, dma_chan_rx_i, true); +#endif + // Enable the Tx DMA / SPI controller. + hal_freescale_edma_erq_enable(edma_p, dma_chan_tx_i); + DSPI_EOQ_CLEAR(dspi_p); + } else { + // Transfer size fits within DSPI FIFO + // No need for DMA Tx + DSPI_EOQ_CLEAR(dspi_p); + count_down = fifo_pushque_fill(dspi_bus, (cyg_uint8*) tx_data, + count_down, bus_16bit, + pushr, drop_cs); +#if DEBUG_SPI >= 3 + cyghwr_devs_freescale_dspi_diag(dspi_bus); +#endif + } + + if(polled) { + DEBUG2_PRINTF("DSPI Polled:\n"); + // Busy-wait for DSPI/DMA (polling for completion). + while(!(dspi_p->sr & FREESCALE_DSPI_SR_EOQF_M)); + + if(dma_set_p) { + // Disable the Tx DMA channel on completion. + hal_freescale_edma_erq_disable(edma_p, dma_chan_tx_i); + } + } else { + // Wait for DSPI/DMA completion. (interrupt driven). + cyg_drv_mutex_lock(&dspi_bus->transfer_mutex); + cyg_drv_dsr_lock(); + + DSPI_IRQ_ENABLE(dspi_p); + DEBUG2_PRINTF("DSPI IRQ: Enabled\n"); + + // Sit back and wait for the ISR/DSRs to signal completion. + cyg_drv_cond_wait (&dspi_bus->transfer_done); + + cyg_drv_dsr_unlock(); + cyg_drv_mutex_unlock(&dspi_bus->transfer_mutex); + } + + if(dma_set_p) { + // Make sure that Rx has been drained by DMA. + while((dspi_p->sr & FREESCALE_DSPI_SR_RFDF_M)); + DEBUG2_PRINTF("Fifo Drained by DMA 0x%08x\n", dspi_p->sr); + if(count_down <= txfifo_n && count_down > 0) { + hal_freescale_edma_erq_disable(edma_p, dma_chan_rx_i); + dma_set_p = NULL; + } + } else { + // No DMA - "manually" drain Rx FIFO + DEBUG2_PRINTF("DSPI FIFO: 'Manually' drain Rx fifo rx_data=%p bus_16bit=%d\n", + rx_data, bus_16bit); +#if DEBUG_SPI >= 3 + cyghwr_devs_freescale_dspi_diag(dspi_bus); +#endif + if(rx_data) { + if(bus_16bit) { + cyg_uint16* rx_data16 = (cyg_uint16*) rx_data; + while(dspi_p->sr & FREESCALE_DSPI_SR_RXCTR_M) { + DEBUG2_PRINTF(" Fifo Pull16 at %p\n", rx_data16); + *rx_data16++ = dspi_p->popr; + } + rx_data = (cyg_uint8*) rx_data16; + } else { + while(dspi_p->sr & FREESCALE_DSPI_SR_RXCTR_M) { + DEBUG2_PRINTF(" Fifo Pull at %p\n", rx_data); + *rx_data++ = dspi_p->popr; + } + } + } + dspi_fifo_drain(dspi_p); + } + dspi_fifo_clear(dspi_p); + // Prepare for next iteration + if(tx_data) { + tx_data += pushque_n; + if(bus_16bit) + tx_data += pushque_n; + } + } + if(rx_data0) { + // Rx buffer may be out of sync with cache. + DEBUG2_PRINTF("DSPI DMA: Flush cache %p len=%d\n", rx_data0, count); + HAL_DCACHE_INVALIDATE(rx_data0, count); + DEBUG2_PRINTF("DSPI DMA: Cache flushed\n"); + } + + if(!polled) + cyg_drv_interrupt_mask(dspi_bus->setup_p->intr_num); + + dspi_device->chip_sel = !drop_cs; + DEBUG2_PRINTF("cyg_transaction_do() chip_sel = %d drop_cs = %d\n", dspi_device->chip_sel, drop_cs); +} + +//----------------------------------------------------------------------------- +// Initialise SPI interfaces on startup. + +static void CYGBLD_ATTRIB_C_INIT_PRI(CYG_INIT_BUS_SPI) +dspi_spi_init(void) +{ +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI0 + dspi_bus_setup (&cyg_spi_dspi_bus0); +#endif + +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI1 + dspi_bus_setup (&cyg_spi_dspi_bus1); +#endif + +#ifdef CYGHWR_DEVS_SPI_FREESCALE_DSPI2 + dspi_bus_setup (&cyg_spi_dspi_bus2); +#endif +} + + +//----------------------------------------------------------------------------- +// Start a SPI transaction. + +static void dspi_transaction_begin(cyg_spi_device* device) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus = + (cyg_spi_freescale_dspi_bus_t*) device->spi_bus; + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + + // On the first transaction, generate the values to be programmed into the + // SPI configuration registers for this device and cache them. This avoids + // having to recalculate the prescaler for every transaction. + if(!(dspi_device->clocking.dspi_ctar)) + dspi_device->clocking.dspi_ctar = dspi_calc_ctar(&dspi_device->clocking, + dspi_bus->clock_freq); + // Set up the SPI controller. + dspi_bus->setup_p->dspi_p->ctar[0] = dspi_device->clocking.dspi_ctar; +#if DEBUG_SPI >= 2 + cyghwr_devs_freescale_dspi_diag(dspi_bus); +#endif +} + +//----------------------------------------------------------------------------- +// Run a transaction transfer. + +static void dspi_transaction_transfer(cyg_spi_device* device, cyg_bool polled, + cyg_uint32 count, + const cyg_uint8* tx_data, + cyg_uint8* rx_data, + cyg_bool drop_cs) +{ + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + + DEBUG2_PRINTF("Transaction rx_data = %p tx_data = %p count=%d\n", rx_data, tx_data, count); + + // Check for unsupported transactions. + CYG_ASSERT (count > 0, "DSPI: Null transfer requested."); + + // We check that the buffers are half-word aligned and that count is a + // multiple of two in order to carry out the 16-bit transfer. + if (dspi_device->clocking.bus_16bit) { + CYG_ASSERT (!(count & 1) && !((cyg_uint32) tx_data & 1) && + !((cyg_uint32) rx_data & 1), + "DSPI: Misaligned data in 16-bit transfer."); + } + spi_transaction_do (device, false, polled, count, tx_data, rx_data, drop_cs); +} + +//----------------------------------------------------------------------------- +// Carry out a bus tick operation - this drops chip select then pushes the +// required number of NULL frames onto the bus. + +static void dspi_transaction_tick(cyg_spi_device* device, cyg_bool polled, + cyg_uint32 count) +{ + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + + // Check for unsupported transactions. + CYG_ASSERT (count > 0, "DSPI: Null transfer requested."); + + // We check that count is a multiple of two in order + // to carry out the 16-bit transfer. + if (dspi_device->clocking.bus_16bit) { + CYG_ASSERT (!(count & 1), + "DSPI: Misaligned data in 16-bit transfer."); + } + + // Perform null transfer + DEBUG2_PRINTF("cyg_transaction_tick()\n"); + spi_transaction_do (device, true, polled, count, NULL, NULL, false); +} + +//----------------------------------------------------------------------------- +// Terminate a SPI transaction, disabling the SPI controller. + +static void dspi_transaction_end(cyg_spi_device* device) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus = + (cyg_spi_freescale_dspi_bus_t*) device->spi_bus; + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + + const cyghwr_hal_freescale_dma_set_t *dma_set_p = dspi_bus->setup_p->dma_set_p; + cyghwr_hal_freescale_edma_t *edma_p; + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus->setup_p->dspi_p; + + DEBUG2_PRINTF("cyg_transaction_end() chip_sel = %d\n", dspi_device->chip_sel); + if(dma_set_p) { + edma_p = dma_set_p->edma_p; + hal_freescale_edma_erq_disable(edma_p, SPI_DMA_CHAN_I(dma_set_p, TX)); + hal_freescale_edma_erq_disable(edma_p, SPI_DMA_CHAN_I(dma_set_p, RX)); + } + + if(dspi_device->chip_sel){ + // Clear peripheral CS by executing a dummy 4 bit transfer. + dspi_p->pushr = PUSHR_NULL | FREESCALE_DSPI_PUSHR_EOQ_M | + FREESCALE_DSPI_PUSHR_CTAS(1); + while(!(dspi_p->sr & FREESCALE_DSPI_SR_EOQF_M)); + DSPI_EOQ_CLEAR(dspi_p); + dspi_fifo_drain(dspi_p); + dspi_device->chip_sel = 0; + } +} + +//----------------------------------------------------------------------------- +// Get DSPI configuration parameter + +static int dspi_get_config (cyg_spi_device* device, cyg_uint32 key, + void* buf, cyg_uint32* len) +{ + cyg_spi_freescale_dspi_bus_t* dspi_bus = + (cyg_spi_freescale_dspi_bus_t*) device->spi_bus; + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + cyg_uint32* data_p = buf; + + switch (key) { + case CYG_IO_GET_CONFIG_SPI_CLOCKRATE : + // Sanity check + if (NULL == len) { + CYG_ASSERT (false, "Freescale DSPI:" + " Null pointer as len argument for dspi_get_config()."); + return -1; + } else if (sizeof(cyg_uint32) != *len) { + CYG_ASSERT (false, "Freescale DSPI:" + " Invalid length with dspi_get_config()."); + return -1; + } else if (NULL == buf) { + CYG_ASSERT (false, "Freescale DSPI:" + " Null poiter as buf argument for dspi_get_config()."); + return -1; + } else { + cyg_uint32 ctar, dbr, br, pbr; + + ctar = dspi_device->clocking.dspi_ctar; + dbr = (ctar & FREESCALE_DSPI_CTAR_DBR_M) >> + FREESCALE_DSPI_CTAR_DBR_S; + br = (ctar & FREESCALE_DSPI_CTAR_BR_M) >> + FREESCALE_DSPI_CTAR_BR_S; + pbr = (ctar & FREESCALE_DSPI_CTAR_PBR_M) >> + FREESCALE_DSPI_CTAR_PBR_S; + *data_p = (dspi_bus->clock_freq * (1+dbr)) / (pbr * br); + + DEBUG2_PRINTF("DSPI Get Config: baud = %d\n", *data_p); + + return 0; + } + + default : + break; + } + return -1; +} + +//----------------------------------------------------------------------------- +// Change some SPI device configuration parameters + +static int dspi_set_config(cyg_spi_device* device, cyg_uint32 key, + const void* buf, cyg_uint32* len) +{ + cyg_spi_freescale_dspi_device_t* dspi_device = + (cyg_spi_freescale_dspi_device_t*) device; + cyg_spi_freescale_dspi_bus_t* dspi_bus = + (cyg_spi_freescale_dspi_bus_t*) device->spi_bus; + + cyg_uint32 regval; + ctar_br_t brs; + + switch (key) { + case CYG_IO_SET_CONFIG_SPI_CLOCKRATE : + // Sanity check + if (NULL == len) { + CYG_ASSERT (false, "Freescale DSPI:" + " Null pointer as len argument for dspi_set_config()."); + return -1; + } else if (sizeof(cyg_uint32) != *len) { + CYG_ASSERT (false, "Freescale DSPI:" + " Invalid length with dspi_set_config()."); + return -1; + } else if (NULL == buf) { + CYG_ASSERT (false, "Freescale DSPI:" + " Null pointer as buf argument for dspi_set_config()."); + return -1; + } else { + // Get divider bits + if (!dspi_ctar_brbf(&dspi_device->clocking, &brs, + ctar_br, ctar_pbr, (cyg_uint32 *)buf, dspi_bus->clock_freq)) + { + // Update the cache of the configuration register settings. + regval = dspi_device->clocking.dspi_ctar; + regval &= ~(FREESCALE_DSPI_CTAR_BR_M | + FREESCALE_DSPI_CTAR_PBR_M); + regval |= FREESCALE_DSPI_CTAR_BR(brs.br) | + FREESCALE_DSPI_CTAR_PBR(brs.pbr); + dspi_device->clocking.dspi_ctar = regval; + + return 0; + + } else { + CYG_ASSERT (false, "Freescale DSPI:" + " Cannot run bus as slowly as requested."); + return -1; + } + } + default : + break; + } + return -1; +} + +#if DEBUG_SPI +//---------------------------------------------------------------------------- +// Print out a DSPI array state +// Helper for cyghwr_devs_freescale_dspi_diag() + +void cyghwr_devs_freescale_dspi_diag_array(char* name_p, + volatile cyg_uint32* array_p, + cyg_uint32 array_n) +{ + diag_printf("%s %p[%u]: ", name_p, array_p, array_n); + for(; array_n; array_n--) { + diag_printf(" 0x%08x", *array_p++); + } + diag_printf("\n"); +} + +//---------------------------------------------------------------------------- +// Print out DSPI state + +void cyghwr_devs_freescale_dspi_diag(cyg_spi_freescale_dspi_bus_t* dspi_bus_p) +{ + cyghwr_devs_freescale_dspi_t* dspi_p = dspi_bus_p->setup_p->dspi_p; + + diag_printf("DSPI %p\n", dspi_p); + diag_printf(" MCR = 0x%08x TCR = 0x%08x\n", dspi_p->mcr, dspi_p->tcr); + cyghwr_devs_freescale_dspi_diag_array(" CTAR", dspi_p->ctar, + CYGHWR_DEVS_SPI_FREESCALE_DSPI_CTAR_NUM); + diag_printf(" SR = 0x%08x RSER = 0x%08x PUSHR = 0x%08x POPR = 0x%08x\n", + dspi_p->sr, dspi_p->rser, dspi_p->pushr, dspi_p->popr); + cyghwr_devs_freescale_dspi_diag_array(" TXFR", dspi_p->txfr, dspi_bus_p->txfifo_n); + cyghwr_devs_freescale_dspi_diag_array(" RXFR", dspi_p->rxfr, dspi_bus_p->rxfifo_n); +} +#endif // DEBUG_SPI + +#endif // defined(CYGHWR_DEVS_SPI_FREESCALE_DSPIx) + +//============================================================================= diff --git a/packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c b/packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c new file mode 100644 --- /dev/null +++ b/packages/devs/spi/freescale/dspi/current/tests/spi_loopback.c @@ -0,0 +1,285 @@ +//============================================================================= +// +// spi_loopback.c +// +// Standalone SPI loopback test. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Original: Chris Holgate +// Date: 2012-12-27 +// Purpose: Freescale DSPI loopback test +// Description: Standalone SPI loopback test. +// Usage: Compile as a standalone application. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//============================================================================= +// This is a quick loopback test for the Freescale DSPI SPI driver. It only checks +// the data transfer functionality - chip select handling will require +// testing with external devices. In order to run the test, the MOSI and +// MISO pins for the test port need to be shorted together to provide an +// external loopback. Don't do this on a bus which has external devices +// attached unless you first make sure that none of them are connected to +// the chip select used by the test harness. +// The default port and chip select used for this test are SPI bus 1, +// chip select 0. These can be changed by editing the loopback_device +// data structure directly. +// Note that this is intended to be run as a standalone test and not as part +// of the standard board tests since it requires a hardware modification. +//============================================================================= + +#include +#include // Test macros + +#include // Assertion macros +#include // Diagnostic output + +#include // CYGNUM_HAL_STACK_SIZE_TYPICAL +#include + +#include // Common SPI API +#include // Freescale DSPI data structures + +#include + +//--------------------------------------------------------------------------- +// Thread data structures. + +cyg_uint8 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL]; +cyg_thread thread_data; +cyg_handle_t thread_handle; + +externC cyg_spi_freescale_dspi_bus_t cyg_spi_dspi_bus1; + +//--------------------------------------------------------------------------- +// SPI loopback device driver data structures. + +CYG_DEVS_SPI_FREESCALE_DSPI_DEVICE( + loopback_device, // Device name + 1, //SPI bus + 0, // Dev num + 8, // Frame size + 0, // Clock pol + 0, // Clock phase + 6000000, // Clock speed + 1, // CS assert delay + 1, // CS negate delay + 1, // Delay between transfers + 1000, // Delay unit [ns] + 0 // Double baud rate +); + +//--------------------------------------------------------------------------- + +static int errors = 0; + +const char tx_data0[] = "0123456789a123456789b123456789c123456789d123456789e"; +const char tx_data1[] = "Performing extended API test first transaction..|"; +const char tx_data2[] = "Testing extended API for a second transaction!"; + +char rx_data [256]; +char rx_data1 [256]; +char rx_data2 [256]; + +static void memclr(char *dest_p, cyg_uint32 byte_n) +{ + while(byte_n--) { + *dest_p++ = 0; + } +} + + +//--------------------------------------------------------------------------- +// Run single loopback transaction using simple transfer API call. + +void run_test_tick (cyg_bool polled, cyg_uint32 count) +{ + diag_printf ("Test 0 : Tick (polled = %d).\n", polled ? 1 : 0); + cyg_spi_tick(&loopback_device, polled, count); + diag_printf (" Tick end\n"); +} + +void run_test_1 (cyg_bool polled, const char* tx_data_p, cyg_uint32 count) +{ + diag_printf ("Test 1 : Simple transfer test polled = %d, count=%d\n", + polled ? 1 : 0, count); + memclr(rx_data1, sizeof(rx_data1)); + memclr(rx_data2, sizeof(rx_data1)); + cyg_spi_transfer (&loopback_device, polled, count, + (const cyg_uint8*) tx_data_p, (cyg_uint8*) &rx_data[0]); + diag_printf (" Tx data : %s\n", tx_data_p); + diag_printf (" Rx data : %s 0x%02x\n", rx_data, rx_data[0]); + + if (memcmp (tx_data_p, rx_data, count) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data.\n"); + } +} + +//--------------------------------------------------------------------------- +// Run two loopback transactions using extended transfer API. + +void run_test_2 (cyg_bool polled) +{ + diag_printf ("Test 2 : Extended API test (polled = %d).\n", polled ? 1 : 0); + memclr(rx_data1, sizeof(rx_data1)); + memclr(rx_data2, sizeof(rx_data1)); + cyg_spi_transaction_begin (&loopback_device); + cyg_spi_transaction_transfer (&loopback_device, polled, sizeof (tx_data1), + (const cyg_uint8*) &tx_data1[0], (cyg_uint8*) &rx_data1[0], false); + cyg_spi_transaction_transfer (&loopback_device, polled, sizeof (tx_data2), + (const cyg_uint8*) &tx_data2[0], (cyg_uint8*) &rx_data2[0], true); + cyg_spi_transaction_end (&loopback_device); + + diag_printf (" Tx data 1 (%u Bytes): %s\n", sizeof(tx_data1), tx_data1); + diag_printf (" Rx data 1 : %s\n", rx_data1); + diag_printf (" Tx data 2 (%u Bytes): %s\n", sizeof(tx_data2), tx_data2); + diag_printf (" Rx data 2 : %s\n", rx_data2); + if (memcmp (tx_data1, rx_data1, sizeof (tx_data1)) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data (transfer 1).\n"); + } + if (memcmp (tx_data2, rx_data2, sizeof (tx_data2)) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data (transfer 2).\n"); + } +} + +void run_test_3 (cyg_bool polled) +{ + diag_printf ("Test 3 : Extended API test (polled = %d).\n", polled ? 1 : 0); + memclr(rx_data1, sizeof(rx_data1)); + memclr(rx_data2, sizeof(rx_data1)); + + cyg_spi_transaction_begin (&loopback_device); + cyg_spi_transaction_transfer (&loopback_device, polled, sizeof (tx_data1), + (const cyg_uint8*) &tx_data1[0], (cyg_uint8*) &rx_data1[0], false); + cyg_spi_transaction_transfer (&loopback_device, polled, sizeof (tx_data2), + (const cyg_uint8*) &tx_data2[0], (cyg_uint8*) &rx_data2[0], true); + cyg_spi_transaction_end (&loopback_device); + diag_printf (" Tx data 1 (%u Bytes): %s\n", sizeof(tx_data1), tx_data1); + diag_printf (" Rx data 31 : %s\n", rx_data1); + diag_printf (" Tx data 2 (%u Bytes): %s\n", sizeof(tx_data2), tx_data2); + diag_printf (" Rx data 32 : %s\n", rx_data2); + + if (memcmp (tx_data1, rx_data1, sizeof (tx_data1)) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data (transfer 1).\n"); + } + if (memcmp (tx_data2, rx_data2, sizeof (tx_data2)) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data (transfer 2).\n"); + } +} + +void run_test_4 (cyg_bool polled) +{ + diag_printf ("Test 4 : Extended API test NULL transfer (polled = %d).\n", polled ? 1 : 0); + memclr(rx_data1, sizeof(rx_data1)); + memclr(rx_data2, sizeof(rx_data1)); + + cyg_spi_transaction_begin (&loopback_device); + cyg_spi_transaction_transfer (&loopback_device, polled, sizeof (tx_data1), + (const cyg_uint8*) NULL, NULL, true); + cyg_spi_transaction_end (&loopback_device); + diag_printf (" Tx data 41 (%u Bytes): %s\n", sizeof(tx_data1), tx_data1); + diag_printf (" Rx data 1 : %s\n", rx_data1); + diag_printf (" Tx data 42 (%u Bytes): %s\n", sizeof(tx_data2), tx_data2); + diag_printf (" Rx data 2 : %s\n", rx_data2); + + if (memcmp (rx_data1, rx_data2, sizeof (tx_data1)) != 0) { + errors++; + diag_printf("Simple transfer loopback failed - mismatched data.\n"); + errors++; + } +} + + +//--------------------------------------------------------------------------- +// Run all SPI interface loopback tests. + + +void run_tests (void) +{ + bool polled = true; + diag_printf ("Running Freescale Kinetis/MPC5xxx DSPI driver loopback tests.\n"); + + diag_printf ("\nPolled\n"); + run_test_tick (polled, 1024); + run_test_1 (polled, &tx_data0[3], 4); + run_test_2 (polled); + run_test_3 (polled); + run_test_4 (polled); + + polled = false; + diag_printf ("\nInterrupt driven.\n"); + run_test_tick (polled,2048); + run_test_1 (polled, &tx_data0[7], 10); + run_test_2 (polled); + run_test_3 (polled); + run_test_4 (polled); + + if(errors) + CYG_TEST_FAIL("Errors detected"); + else + CYG_TEST_PASS_FINISH ("Loopback tests ran OK"); +} + +//--------------------------------------------------------------------------- +// User startup - tests are run in their own thread. + +void cyg_user_start(void) +{ + CYG_TEST_INIT(); + cyg_thread_create( + 10, // Arbitrary priority + (cyg_thread_entry_t*) run_tests, // Thread entry point + 0, // + "test_thread", // Thread name + &stack[0], // Stack + CYGNUM_HAL_STACK_SIZE_TYPICAL, // Stack size + &thread_handle, // Thread handle + &thread_data // Thread data structure + ); + cyg_thread_resume(thread_handle); + cyg_scheduler_start(); +} + +//============================================================================= diff --git a/packages/devs/usb/at91/current/ChangeLog b/packages/devs/usb/at91/current/ChangeLog --- a/packages/devs/usb/at91/current/ChangeLog +++ b/packages/devs/usb/at91/current/ChangeLog @@ -1,3 +1,12 @@ +2010-11-12 Christophe Coutand + + * src/usbs_at91.c : Complete support for halting endpoints + * cdl/usbs_at91.cdl : Add option + CYGSEM_DEVS_USB_AT91_ZERO_LENGTH_PACKET_TERMINATION. When data + transfer length is known from both side, sending an empty packet + at the end of the transfer is not required. + Add devtab entry for endpoints 4 to 7. + 2008-11-17 Gabor Toeroek * src/usbs_at91.c (usbs_at91_set_pullup): Fix typo introduced by @@ -101,7 +110,7 @@ 2006-03-06 Oliver Munz // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/devs/usb/at91/current/cdl/usbs_at91.cdl b/packages/devs/usb/at91/current/cdl/usbs_at91.cdl --- a/packages/devs/usb/at91/current/cdl/usbs_at91.cdl +++ b/packages/devs/usb/at91/current/cdl/usbs_at91.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 2006 Free Software Foundation, Inc. +## Copyright (C) 2006, 2010 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -41,7 +41,7 @@ # # Author(s): Oliver Munz, Andrew Lunn # Original data: bartv -# Contributors: +# Contributors: ccoutand # Date: 2006-02-25 # #####DESCRIPTIONEND#### @@ -143,6 +143,17 @@ cdl_package CYGPKG_DEVS_USB_AT91 { This option indicates that the power detect pin should be inverted. ie VDD is active, VCC is inactive." } + + cdl_option CYGSEM_DEVS_USB_AT91_ZERO_LENGTH_PACKET_TERMINATION { + display "Allow USB driver to end data transfer with an empty data packet." + flavor bool + default_value 1 + description " + This option allows the USB driver to automatically signal the + end of a data transmission with an empty packet, if the last packet + fragment is equal to the endpoint buffer size." + } + } cdl_component CYGPKG_DEVS_USB_AT91_DEVTAB_ENTRIES { @@ -203,21 +214,73 @@ cdl_package CYGPKG_DEVS_USB_AT91 { application intends to access the endpoint by means of open and read calls then a devtab entry is needed." } - - cdl_option CYGDAT_DEVS_USB_AT91_DEVTAB_BASENAME { - display "Base name for devtab entries" - flavor data - default_value { "\"/dev/usbs\"" } - description " - If the uAT91 USB device driver package provides devtab - entries for any of the endpoints then this option gives - control over the names of these entries. By default the - endpoints will be called \"/dev/usbs0c\", \"/dev/usbs3w\" - and \"/dev/usbs4r\" (assuming all three endpoints are - enabled. The common part \"/dev/usbs\" is determined - by this configuration option. It may be necessary to - change this if there are multiple USB slave-side - devices on the target hardware to prevent a name clash." - } + + cdl_option CYGVAR_DEVS_USB_AT91_EP4_DEVTAB_ENTRY { + display "Provide a devtab entry for endpoint 4" + flavor bool + default_value 0 + requires CYGPKG_IO + description " + If this endpoint will only be accessed via the low-level + USB-specific calls then there is no need for an entry + in the device table, saving some memory. If the + application intends to access the endpoint by means + of open and read calls then a devtab entry is needed." + } + + cdl_option CYGVAR_DEVS_USB_AT91_EP5_DEVTAB_ENTRY { + display "Provide a devtab entry for endpoint 5" + flavor bool + default_value 0 + requires CYGPKG_IO + description " + If this endpoint will only be accessed via the low-level + USB-specific calls then there is no need for an entry + in the device table, saving some memory. If the + application intends to access the endpoint by means + of open and read calls then a devtab entry is needed." + } + + cdl_option CYGVAR_DEVS_USB_AT91_EP6_DEVTAB_ENTRY { + display "Provide a devtab entry for endpoint 6" + flavor bool + default_value 0 + requires CYGPKG_IO + description " + If this endpoint will only be accessed via the low-level + USB-specific calls then there is no need for an entry + in the device table, saving some memory. If the + application intends to access the endpoint by means + of open and read calls then a devtab entry is needed." + } + + cdl_option CYGVAR_DEVS_USB_AT91_EP7_DEVTAB_ENTRY { + display "Provide a devtab entry for endpoint 7" + flavor bool + default_value 0 + requires CYGPKG_IO + description " + If this endpoint will only be accessed via the low-level + USB-specific calls then there is no need for an entry + in the device table, saving some memory. If the + application intends to access the endpoint by means + of open and read calls then a devtab entry is needed." + } + + cdl_option CYGDAT_DEVS_USB_AT91_DEVTAB_BASENAME { + display "Base name for devtab entries" + flavor data + default_value { "\"/dev/usbs\"" } + description " + If the uAT91 USB device driver package provides devtab + entries for any of the endpoints then this option gives + control over the names of these entries. By default the + endpoints will be called \"/dev/usbs0c\", \"/dev/usbs3w\" + and \"/dev/usbs4r\" (assuming all three endpoints are + enabled. The common part \"/dev/usbs\" is determined + by this configuration option. It may be necessary to + change this if there are multiple USB slave-side + devices on the target hardware to prevent a name clash." + } } } diff --git a/packages/devs/usb/at91/current/src/usbs_at91.c b/packages/devs/usb/at91/current/src/usbs_at91.c --- a/packages/devs/usb/at91/current/src/usbs_at91.c +++ b/packages/devs/usb/at91/current/src/usbs_at91.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -40,7 +40,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): Oliver Munz, -// Contributors: Andrew Lunn, bartv +// Contributors: Andrew Lunn, bartv, ccoutand // Date: 2006-02-22 // // This code implements support for the on-chip USB port on the AT91 @@ -524,7 +524,7 @@ usbs_state_notify (usbs_control_endpoint } if (pcep->state_change_fn) { - (*pcep->state_change_fn) (pcep, 0, pcep->state, old_state); + (*pcep->state_change_fn) (pcep, pcep->state_change_data, pcep->state, old_state); } old_state = pcep->state; @@ -579,22 +579,35 @@ usbs_at91_endpoint_set_halted (usbs_rx_e { int epn = usbs_at91_pep_to_number(pep); cyg_addrword_t pCSR = pCSRn(epn); - + cyg_uint32 reg; + cyg_drv_dsr_lock (); - if (pep->halted != new_value) { + if (pep->halted != new_value) { /* There is something is to do */ pep->halted = new_value; + + if ( new_value ) { - if (new_value && BITS_ARE_SET (pIMR, 1 << epn)) { - /* Ready to transmit */ + /* Halt endpoint */ + SET_BITS (pCSR, AT91_UDP_CSR_FORCESTALL); + + } else { + /* Restart endpoint */ + CLEAR_BITS (pCSR, AT91_UDP_CSR_FORCESTALL); + + // Reset Fifo + HAL_READ_UINT32 (AT91_UDP + AT91_UDP_RST_EP, reg); + reg |= (1 << epn); + HAL_WRITE_UINT32 (AT91_UDP + AT91_UDP_RST_EP, reg); + reg &= ~(1 << epn); + HAL_WRITE_UINT32 (AT91_UDP + AT91_UDP_RST_EP, reg); + + // Ready to use if (pep->complete_fn) { - (*pep->complete_fn) (pep->complete_data, -EAGAIN); + (*pep->complete_fn) (pep->complete_data, ENOERR); } - usbs_at91_endpoint_interrupt_enable (epn, false); - SET_BITS (pCSR, AT91_UDP_CSR_FORCESTALL); - } else { - CLEAR_BITS (pCSR, AT91_UDP_CSR_FORCESTALL); + } } cyg_drv_dsr_unlock (); @@ -726,11 +739,14 @@ usbs_at91_endpoint_start (usbs_rx_endpoi return; } + // Is this endpoint currently stalled? If so then a size of 0 can + // be used to block until the stall condition is clear, anything + // else should result in an immediate callback. if (pep->halted) { /* Halted means nothing to do */ cyg_drv_dsr_unlock (); - if (pep->complete_fn) { + if (pep->complete_fn && pep->buffer_size != 0) { (*pep->complete_fn) (pep->complete_data, -EAGAIN); } return; @@ -753,9 +769,12 @@ usbs_at91_endpoint_start (usbs_rx_endpoi if (BITS_ARE_SET (pCSR, 0x400)) { /* IN: tx_endpoint */ space = (cyg_uint32) * ppend - (cyg_uint32) * ppbegin; + +#ifdef CYGSEM_DEVS_USB_AT91_ZERO_LENGTH_PACKET_TERMINATION if (space == endpoint_size) { *ppend = *ppbegin; /* Send zero-packet */ } +#endif *ppbegin = write_fifo_uint8 (pFDR, *ppbegin, @@ -786,26 +805,32 @@ usbs_at91_endpoint_isr_tx(cyg_uint8 epn) CLEAR_BITS (pCSR, AT91_UDP_CSR_TXCOMP); - if (BITS_ARE_CLEARED (pCSR, AT91_UDP_CSR_TXPKTRDY)) { + if (BITS_ARE_CLEARED (pCSR, AT91_UDP_CSR_TXPKTRDY)) { /* Ready to transmit ? */ if (*ppend > *ppbegin) { /* Something to send */ space = (cyg_uint32) * ppend - (cyg_uint32) * ppbegin; + +#ifdef CYGSEM_DEVS_USB_AT91_ZERO_LENGTH_PACKET_TERMINATION if (space == endpoint_size) { *ppend = *ppbegin; /* Send zero-packet */ } +#endif *ppbegin = write_fifo_uint8 (pFDR, *ppbegin, (cyg_uint8 *) ((cyg_uint32) * ppbegin + MIN (space, endpoint_size))); SET_BITS (pCSR, AT91_UDP_CSR_TXPKTRDY); - + if (*ppend == *ppbegin) { /* Last packet ? */ *ppend = *ppbegin - 1; /* The packet isn't sent yet */ } + } else { + +#ifdef CYGSEM_DEVS_USB_AT91_ZERO_LENGTH_PACKET_TERMINATION if (*ppend + 1 == *ppbegin) { *ppend = *ppbegin; /* Flag for DSR */ return true; @@ -813,6 +838,11 @@ usbs_at91_endpoint_isr_tx(cyg_uint8 epn) *ppend = *ppbegin - 1; /* Flag for zero-packet */ SET_BITS (pCSR, AT91_UDP_CSR_TXPKTRDY); /* Send no data */ } +#else + *ppend = *ppbegin; /* Flag for DSR */ + return true; +#endif + } } @@ -887,6 +917,11 @@ usbs_at91_endpoint_isr (cyg_uint8 epn) CYG_ASSERT (AT91_USB_ENDPOINTS > epn && epn, "Invalid end point"); + // Host has acknowledged the endpoint being stall + if (BITS_ARE_SET (pCSR, AT91_UDP_CSR_ISOERROR)) { + CLEAR_BITS (pCSR, AT91_UDP_CSR_ISOERROR); + } + if (BITS_ARE_SET (pCSR, 0x400)) { /* IN: tx_endpoint */ if (usbs_at91_endpoint_isr_tx(epn)) return true; // Call the DSR @@ -920,12 +955,15 @@ usbs_at91_endpoint_dsr (cyg_uint8 epn) if (*ppend == *ppbegin) { /* Transmitted/Received ? */ pep->buffer_size = (cyg_uint32) * ppbegin - (cyg_uint32) pep->buffer; - if (pep->buffer_size && pep->complete_fn) { - if (!pep->halted) { - (*pep->complete_fn) (pep->complete_data, pep->buffer_size); - } else { - (*pep->complete_fn) (pep->complete_data, -EAGAIN); - } + if (pep->complete_fn) + { + /* Do not check on pep->buffer_size != 0, user should + * be allowed to send empty packet */ + if (!pep->halted) { + (*pep->complete_fn) (pep->complete_data, pep->buffer_size); + } else { + (*pep->complete_fn) (pep->complete_data, -EAGAIN); + } } usbs_at91_endpoint_interrupt_enable (epn, false); } @@ -1018,6 +1056,8 @@ usbs_at91_control_setup_set_feature(void ep0_low_level_status_t status; usb_devreq *req = (usb_devreq *)usbs_at91_ep0.control_buffer; cyg_uint8 recipient = req->type & USB_DEVREQ_RECIPIENT_MASK; + usbs_rx_endpoint * pep; + cyg_uint8 ep_num = req->index_lo & 0x0F; usbs_at91_control_setup_send_ack(); status = EP0_LL_SEND_READY; @@ -1030,18 +1070,24 @@ usbs_at91_control_setup_set_feature(void // Nothing to do break; case USB_DEVREQ_RECIPIENT_ENDPOINT: - if ((usbs_at91_ep0.state == USBS_STATE_CONFIGURED) && - (req->index_lo > 0) && - (req->index_lo < AT91_USB_ENDPOINTS)) { + if ((usbs_at91_ep0.state == USBS_STATE_CONFIGURED) && + (ep_num > 0) && + (ep_num < AT91_USB_ENDPOINTS)) { cyg_uint32 CSR; - - HAL_READ_UINT32(pCSRn(req->index_lo), CSR); - if (CSR & AT91_UDP_CSR_EPEDS) { - /* TODO */ + + HAL_READ_UINT32(pCSRn(ep_num), CSR); + pep = (usbs_rx_endpoint *) usbs_at91_endpoints[ep_num]; + if ( (CSR & AT91_UDP_CSR_EPEDS) ) { + usbs_at91_endpoint_set_halted ( pep , true ); } - } else { + else + status = EP0_LL_STALL; + + } + else { status = EP0_LL_STALL; } + break; default: status = EP0_LL_STALL; } @@ -1055,6 +1101,8 @@ usbs_at91_control_setup_clear_feature(vo ep0_low_level_status_t status; usb_devreq *req = (usb_devreq *)usbs_at91_ep0.control_buffer; cyg_uint8 recipient = req->type & USB_DEVREQ_RECIPIENT_MASK; + usbs_rx_endpoint * pep; + cyg_uint8 ep_num = req->index_lo & 0x0F; usbs_at91_control_setup_send_ack(); status = EP0_LL_SEND_READY; @@ -1067,18 +1115,24 @@ usbs_at91_control_setup_clear_feature(vo // Nothing to do break; case USB_DEVREQ_RECIPIENT_ENDPOINT: - if ((usbs_at91_ep0.state == USBS_STATE_CONFIGURED) && - (req->index_lo > 0) && - (req->index_lo < AT91_USB_ENDPOINTS)) { + if ((usbs_at91_ep0.state == USBS_STATE_CONFIGURED) && + (ep_num > 0) && + (ep_num < AT91_USB_ENDPOINTS)) { cyg_uint32 CSR; - - HAL_READ_UINT32(pCSRn(req->index_lo), CSR); - if (CSR & AT91_UDP_CSR_EPEDS) { - /* TODO */ + + HAL_READ_UINT32(pCSRn(ep_num), CSR); + pep = (usbs_rx_endpoint *) usbs_at91_endpoints[ep_num]; + if ( (CSR & AT91_UDP_CSR_EPEDS) && pep->halted ) { + usbs_at91_endpoint_set_halted ( pep , false ); } - } else { + else + status = EP0_LL_STALL; + + } + else { status = EP0_LL_STALL; } + break; default: status = EP0_LL_STALL; } diff --git a/packages/devs/usb/cortexm/stm32/current/ChangeLog b/packages/devs/usb/cortexm/stm32/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/usb/cortexm/stm32/current/ChangeLog @@ -0,0 +1,41 @@ +2012-04-13 Christophe Coutand + + * src/usb_stm32.c (cyg_usbs_cortexm_stm32_init): + Peripheral clocks are enable / disable using new + CYGHWR_HAL_STM32_CLOCK_DISABLE / CYGHWR_HAL_STM32_CLOCK_ENABLE + macro supplied from the variant HAL + +2012-04-03 Jonathan Larmour + + * src/usb_stm32.c (cyg_usbs_cortexm_stm32_init): + CYGHWR_HAL_STM32_RCC_APB1ENR_CAN was renamed to + CYGHWR_HAL_STM32_RCC_APB1ENR_CAN1 in variant HAL. + +2010-10-27 Chris Holgate + + * src/usb_stm32.c, include/usb_stm32.h, cdl/usb_stm32.cdl: New + STM32 USB slave driver. [ Bugzilla 1001024 ] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/usb/cortexm/stm32/current/cdl/usb_stm32.cdl b/packages/devs/usb/cortexm/stm32/current/cdl/usb_stm32.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/usb/cortexm/stm32/current/cdl/usb_stm32.cdl @@ -0,0 +1,325 @@ +##============================================================================= +## +## usb_stm32.cdl +## +## STM32 USB driver configuration options. +## +##============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): Chris Holgate +## Date: 2009-05-19 +## Purpose: Configure STM32 USB driver. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +# +# TODO: Needs to check that the PLL is running off the HSE clock source and +# is set up to run at 48MHz or 72MHz. +# + +cdl_package CYGPKG_DEVS_USB_CORTEXM_STM32 { + display "ST STM32 USB driver" + description " + This package provides USB device side driver support for the ST + STM32 series of microcontrollers. + " + parent CYGPKG_IO_USB + active_if CYGPKG_IO_USB + hardware + include_dir "cyg/io/usb" + + # Make sure that we are running on the right hardware. + requires CYGPKG_HAL_CORTEXM_STM32 + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_EP0 { + display "Enable the control endpoint 0" + default_value CYGINT_IO_USB_SLAVE_CLIENTS + requires CYGPKG_IO_USB_SLAVE + requires !CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES + compile usb_stm32.c + description " + Enable support for endpoint 0. If this support is disabled + then the entire USB port is unusable. Note that this driver does + not support slave side devtab entries." + } + + cdl_option CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM { + display "Max IN endpoints" + description " + Specify the maximum number of IN (transmit) endpoints supported by the device. + The total number of standard IN and OUT endpoints should not exceed 7. + " + flavor data + default_value { 2 } + legal_values { 0 to (7 - CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + } + + cdl_option CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM { + display "Max OUT endpoints" + description " + Specify the maximum number of OUT (receive) endpoints supported by the device. + The total number of standard IN and OUT endpoints should not exceed 7. + " + flavor data + default_value { 2 } + legal_values { 0 to (7 - CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + } + + cdl_option CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE { + display "Control endpoint buffer size" + description " + Selects the size of the control endpoint data buffer, which sets the maximum size + of the control endpoint data phase transactions. + " + flavor data + default_value { 128 } + legal_values { 8 to 256 } + } + + cdl_option CYGHWR_DEVS_USB_CORTEXM_STM32_SELF_POWERED { + display "Self powered" + description " + If set, the USB device will report itself to the host as being self-powered. + There is no support for dynamically detecting the power state for dual powered + devices. + " + flavor bool + default_value false + } + + cdl_option CYGHWR_DEVS_USB_CORTEXM_STM32_BULK_TERM_ZLP { + display "Variable length bulk transfers" + description " + Some USB device classes (eg. CDC ATM) require support for variable length bulk + messages. This is implemented by terminating bulk transfers using a short or + zero length packet. Selecting this option enables this form of variable length + bulk message transfer for all bulk endpoints. Note that this option is incompatible + with the standard eCos USB test framework. + " + flavor bool + default_value false + } + + cdl_option CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN { + display "USB disconnect pin" + description " + This is the GPIO which is used to control the USB bus D+ pullup resistor, which + allows the USB bus connection status to be changed under software control. + For the purposes of specifying which GPIO to use, pins are numbered consecutively + from 0 (A0) through 16 (B0) to 111 (G15). + " + flavor data + default_value { 30 } + } + + cdl_option CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN_ACT_LOW { + display "Active low USB disconnect" + description " + The USB disconnect pin is normally treated as active high - so that when set high + the device will be disconnected from the bus. Select this option for boards where + the USB disconnect pin is wired as active low. + " + flavor bool + default_value false + } + + cdl_option CYGNUM_DEVS_USB_CORTEXM_STM32_ISR_PRIORITY { + display "ISR priority" + description " + Sets the ISR priority level used by the USB driver. + " + flavor data + default_value { 4 } + } + + cdl_option CYGBLD_DEVS_USB_CORTEXM_STM32_DEBUG_TRACE { + display "Debug trace enable" + description " + Enables debug tracing for the USB driver. + " + flavor bool + default_value false + } + + cdl_component CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_CONFIG { + display "Physical endpoint configuration." + description " + This is the automatically generated physical endpoint configuration for the + STM32 USB device. Note that the physical endpoint numbering is only used + internally to the driver and has no bearing on the logical endpoint numbers + which may be specified in a given device configuration. + " + flavor none + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_CTRLEP0 { + display "Physical endpoint 0 CTRL" + flavor bool + active_if { (CYGFUN_DEVS_USB_CORTEXM_STM32_EP0) } + calculated { (CYGFUN_DEVS_USB_CORTEXM_STM32_EP0) } + implements CYGHWR_IO_USB_SLAVE + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP1 { + display "Physical endpoint 1 IN" + flavor bool + active_if { (1 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (1 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP2 { + display "Physical endpoint 2 IN" + flavor bool + active_if { (2 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (2 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP3 { + display "Physical endpoint 3 IN" + flavor bool + active_if { (3 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (3 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP4 { + display "Physical endpoint 4 IN" + flavor bool + active_if { (4 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (4 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP5 { + display "Physical endpoint 5 IN" + flavor bool + active_if { (5 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (5 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP6 { + display "Physical endpoint 6 IN" + flavor bool + active_if { (6 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (6 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_TXEP7 { + display "Physical endpoint 7 IN" + flavor bool + active_if { (7 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + calculated { (7 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP1 { + display "Physical endpoint 1 OUT" + flavor bool + active_if { (1 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (1 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (1 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (1 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP2 { + display "Physical endpoint 2 OUT" + flavor bool + active_if { (2 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (2 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (2 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (2 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP3 { + display "Physical endpoint 3 OUT" + flavor bool + active_if { (3 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (3 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (3 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (3 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP4 { + display "Physical endpoint 4 OUT" + flavor bool + active_if { (4 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (4 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (4 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (4 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP5 { + display "Physical endpoint 5 OUT" + flavor bool + active_if { (5 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (5 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (5 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (5 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP6 { + display "Physical endpoint 6 OUT" + flavor bool + active_if { (6 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (6 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (6 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (6 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + + cdl_option CYGFUN_DEVS_USB_CORTEXM_STM32_PHY_RXEP7 { + display "Physical endpoint 7 OUT" + flavor bool + active_if { (7 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (7 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + calculated { (7 > CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) && + (7 <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) } + implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS + } + } +} + +# EOF usb_stm32.cdl diff --git a/packages/devs/usb/cortexm/stm32/current/include/usb_stm32.h b/packages/devs/usb/cortexm/stm32/current/include/usb_stm32.h new file mode 100644 --- /dev/null +++ b/packages/devs/usb/cortexm/stm32/current/include/usb_stm32.h @@ -0,0 +1,56 @@ +#ifndef CYGONCE_DEVS_USB_CORTEXM_STM32_H +#define CYGONCE_DEVS_USB_CORTEXM_STM32_H + +//============================================================================= +// +// usb_stm32.h +// +// USB slave driver for STM32 +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Chris Holgate +// Date: 2009-05-19 +// Purpose: STM32 USB slave driver +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Provide external access to the common endpoint 0 data structure. +extern usbs_control_endpoint cyg_usbs_cortexm_stm32_ep0c; + +#endif // CYGONCE_DEVS_USB_CORTEXM_STM32_H diff --git a/packages/devs/usb/cortexm/stm32/current/src/usb_stm32.c b/packages/devs/usb/cortexm/stm32/current/src/usb_stm32.c new file mode 100644 --- /dev/null +++ b/packages/devs/usb/cortexm/stm32/current/src/usb_stm32.c @@ -0,0 +1,2456 @@ +//============================================================================= +// +// usb_stm32.c +// +// USB slave driver implementation for STM32 +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Chris Holgate +// Date: 2009-05-19 +// Purpose: STM32 USB slave driver implementation +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +//----------------------------------------------------------------------------- +// Maintenance and debug macros. + +#define TODO_USB(_msg_) CYG_ASSERT(false, "TODO (USB) : " _msg_) +#define FAIL_USB(_msg_) CYG_ASSERT(false, "FAIL (USB) : " _msg_) +#define ASSERT_USB(_test_, _msg_) CYG_ASSERT(_test_, "FAIL (USB) : " _msg_) + +#if defined(CYGBLD_DEVS_USB_CORTEXM_STM32_DEBUG_TRACE) +#define TRACE_USB(_msg_, _args_...) diag_printf ("STM32 USB : " _msg_, ##_args_) +#else +#define TRACE_USB(_msg_, _args_...) while(0){} +#endif + +//----------------------------------------------------------------------------- +// Shorthand for some of the configuration options. + +#define USB_BASE CYGHWR_HAL_STM32_USB +#define USB_RAM_BASE CYGHWR_HAL_STM32_USB_CAN_SRAM +#define USB_RAM_SIZE 512 +#define USB_EPNUM (1 + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) + +//----------------------------------------------------------------------------- +// Work out the bus clock frequencies and external timing constraints. +// NOTE: These require that the clock source is set to HSE, which should be +// forced by the CDL. + +#define PLL_FREQ (CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL) + +#define APB1_FREQ ((CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL) / \ + (CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV * CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV)) + +#define USB_TSTARTUP 1 + +//----------------------------------------------------------------------------- +// Provide macros for accessing the buffer layout pseudo-registers. + +// Pseudo-registers for single buffer configurations. +#define USB_RAM_SB_TXADDR(__ep) ((__ep)*16) +#define USB_RAM_SB_TXCOUNT(__ep) ((__ep)*16+4) +#define USB_RAM_SB_RXADDR(__ep) ((__ep)*16+8) +#define USB_RAM_SB_RXCOUNT(__ep) ((__ep)*16+12) + +// Pseudo-registers for double buffer configurations. +#define USB_RAM_DB_TXADDR(__ep,__buf) ((__ep)*16+(__buf)*8) +#define USB_RAM_DB_TXCOUNT(__ep,__buf) ((__ep)*16+(__buf)*8+4) +#define USB_RAM_DB_RXADDR(__ep,__buf) ((__ep)*16+(__buf)*8) +#define USB_RAM_DB_RXCOUNT(__ep,__buf) ((__ep)*16+(__buf)*8+4) + +#define USB_RAM_XX_RXCOUNT_BLOCKS(__x) VALUE_(10,__x) +#define USB_RAM_XX_RXCOUNT_COUNT_MASK VALUE_(0, 0x03FF) + +//----------------------------------------------------------------------------- +// Set up USB I/O pin configurations. + +#if (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x10) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (A, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x20) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (B, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x30) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (C, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x40) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (D, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x50) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (E, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x60) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (F, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) + +#elif (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN < 0x70) +#define USB_DISC_PIN CYGHWR_HAL_STM32_GPIO \ + (G, (CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN & 0x0F), OUT_2MHZ, OUT_PUSHPULL) +#endif + +#define USB_DP_PIN CYGHWR_HAL_STM32_GPIO (A, 12, IN, AIN) +#define USB_DM_PIN CYGHWR_HAL_STM32_GPIO (A, 11, IN, AIN) + +//============================================================================= +// Define USB transmit endpoint data structures. +//============================================================================= + +typedef enum { + TXTR_FLAGS_NONE = 0x00, // No flags set. + TXTR_FLAGS_ZLPKT = 0x01, // Set to enable zero length packet termination. + TXTR_FLAGS_DBUF = 0x02, // Set to enable doubtle buffered operation. +} txtr_flags; + +typedef enum { + TXTR_STATE_RESET, // TX transaction reset state. + TXTR_STATE_IDLE, // TX transaction idle (between transactions). + TXTR_STATE_SB_NEXT_PKT, // TX transaction send next packet (single buffer). + TXTR_STATE_SB_ZERO_PKT, // TX transaction send zero length packet (single buffer). + TXTR_STATE_SB_DONE, // TX transaction complete (single buffer). + TXTR_STATE_DB_FIRST_PKT, // TX transaction queue first packet (double buffer). + TXTR_STATE_DB_NEXT_PKT, // TX transaction queue next packet (double buffer). + TXTR_STATE_DB_ZERO_PKT, // TX transaction queue zero length packet (double buffer). + TXTR_STATE_DB_LAST_PKT, // TX transaction send last queued packet (double buffer). + TXTR_STATE_DB_DONE, // TX transaction complete (double buffer). +} txtr_state; + +typedef struct txtr_impl { + txtr_state state; // Current transaction state. + txtr_flags flags; // Transaction flags. + cyg_uint16 status; // Return status. + cyg_uint8 ep_num; // Endpoint number. + const cyg_uint8* buf_ptr; // Pointer to next user buffer location. + cyg_uint32 buf_size; // Size of user transmit buffer. + cyg_uint32 bytes_sent; // Track number of bytes sent. +} txtr_impl; + +typedef struct txep_impl { + usbs_tx_endpoint common; // High level driver data. + txtr_impl txtr; // Transaction data. +} txep_impl; + +//============================================================================= +// Define USB receive endpoint data structures. +//============================================================================= + +typedef enum { + RXTR_FLAGS_NONE = 0x00, // No flags set. + RXTR_FLAGS_ZLPKT = 0x01, // Set to enable zero length packet termination. + RXTR_FLAGS_DBUF = 0x02, // Set to enable doubtle buffered operation. +} rxtr_flags; + +typedef enum { + RXTR_STATE_RESET, // RX transaction reset state. + RXTR_STATE_IDLE, // RX transaction idle (between transactions). + RXTR_STATE_SB_NEXT_PKT, // RX transaction get next packet (single buffer). + RXTR_STATE_DB_NEXT_PKT, // RX transaction get next packet (double buffer). +} rxtr_state; + +typedef struct rxtr_impl { + rxtr_state state; // Current transaction state. + rxtr_flags flags; // Transaction flags. + cyg_uint16 status; // Return status. + cyg_uint8 ep_num; // Endpoint number. + cyg_uint8* buf_ptr; // Pointer to next user buffer location. + cyg_uint32 buf_size; // Size of receive buffer. + cyg_uint32 bytes_rcvd; // Track number of bytes received. +} rxtr_impl; + +typedef struct rxep_impl { + usbs_rx_endpoint common; // High level driver data. + rxtr_impl rxtr; // Transaction data. +} rxep_impl; + +//============================================================================= +// Instantiate USB control endpoint data structure. +//============================================================================= + +static void stm32_usb_start (usbs_control_endpoint*); +static void stm32_usb_poll (usbs_control_endpoint*); +static usbs_rx_endpoint* stm32_usb_get_rxep (usbs_control_endpoint*, cyg_uint8); +static usbs_tx_endpoint* stm32_usb_get_txep (usbs_control_endpoint*, cyg_uint8); + +// Track the control endpoint state. +typedef enum { + CTRLEP_MSG_STATE_IDLE, + CTRLEP_MSG_STATE_IN_DATA, + CTRLEP_MSG_STATE_IN_STATUS, + CTRLEP_MSG_STATE_OUT_DATA, + CTRLEP_MSG_STATE_OUT_STATUS, + CTRLEP_MSG_STATE_CTRL_ACK, +} ctrlep_msg_states; + +// Provide the control message buffer. +static cyg_uint8 ctrlep_msg_buffer [CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE]; + +// Provide STM32 control endpoint implementation. +typedef struct ctrlep_impl { + usbs_control_endpoint common; // High level driver data. + txtr_impl txtr; // Transmit transaction data. + rxtr_impl rxtr; // Receive transaction data. + ctrlep_msg_states msg_state; // Control endpoint messaging state. +} ctrlep_impl; + +// Instantiate control endpoint data structure. +static ctrlep_impl ctrlep = { + { // Set up data for common high level driver. + state : USBS_STATE_POWERED, + enumeration_data : (usbs_enumeration_data*) 0, + start_fn : &stm32_usb_start, + poll_fn : &stm32_usb_poll, + interrupt_vector : CYGNUM_HAL_INTERRUPT_USB_LP, + control_buffer : { 0, 0, 0, 0, 0, 0, 0, 0 }, + state_change_fn : 0, + state_change_data : 0, + standard_control_fn : 0, + standard_control_data : 0, + class_control_fn : 0, + class_control_data : 0, + vendor_control_fn : 0, + vendor_control_data : 0, + reserved_control_fn : 0, + reserved_control_data : 0, + buffer : 0, + buffer_size : 0, + fill_buffer_fn : 0, + fill_data : 0, + fill_index : 0, + complete_fn : 0, + get_rxep_fn : &stm32_usb_get_rxep, + get_txep_fn : &stm32_usb_get_txep, + }, + { // Initialise transmit transaction data. + state : TXTR_STATE_RESET, + flags : TXTR_FLAGS_ZLPKT, + status : ENOERR, + ep_num : 0, + }, + { // Initialise receive transaction data. + state : RXTR_STATE_RESET, + flags : RXTR_FLAGS_ZLPKT, + status : ENOERR, + ep_num : 0, + }, + msg_state : CTRLEP_MSG_STATE_IDLE, +}; + +extern usbs_control_endpoint cyg_usbs_cortexm_stm32_ep0c __attribute__((alias ("ctrlep"))); + +//============================================================================= +// ISR/DSR shared data structure. All data which is shared between ISR and +// DSR contexts is wrapped up in this data structure to make synchronisation +// between the two more manageable. +//============================================================================= + +typedef enum { + ISR_FLAGS_CLEARED = 0x00, // No flags set. + ISR_FLAGS_SETUP_READY = 0x01, // Setup packet ready in staging buffer. + ISR_FLAGS_DEVICE_RESET = 0x02, // Device reset detected. +} isr_flags; + +typedef struct isr_shared_data { + isr_flags flags; // Flags indicating events pending. + cyg_uint8 txtr_done; // Flags for indicating TX complete. + cyg_uint8 rxtr_done; // Flags for indicating RX complete. +} isr_shared_data; + +static isr_shared_data isr_shared = { + flags : ISR_FLAGS_CLEARED, + txtr_done : 0, + rxtr_done : 0, +}; + +//============================================================================= +// USB driver internal state variables. +//============================================================================= + +// Buffer management. +static cyg_uint16 stm32_usb_buf_offset; +static cyg_uint16 stm32_usb_buf_sizes [USB_EPNUM]; + +// Endpoint descriptors. +static txep_impl txep_list [CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM]; +static rxep_impl rxep_list [CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM]; +static txep_impl* txep_map [15]; +static rxep_impl* rxep_map [15]; + +// Interrupts and synchronisation primitives. +static cyg_interrupt interrupt_data; +static cyg_handle_t interrupt_handle; +static cyg_uint32 interrupt_mask_count; + +//============================================================================= +// Provide inlineable functions for implementing counted interrupt masking. +//============================================================================= + +//----------------------------------------------------------------------------- +// Mask interrupts if not already masked. + +static inline void stm32_usb_request_intr_mask + (void) +{ + cyg_scheduler_lock(); + if (interrupt_mask_count++ == 0) { + cyg_drv_interrupt_mask (CYGNUM_HAL_INTERRUPT_USB_LP); + } + cyg_scheduler_unlock(); +} + +//----------------------------------------------------------------------------- +// Release interrupt mask. Interrupts will be unmasked once all mask requests +// have been released. + +static inline void stm32_usb_release_intr_mask + (void) +{ + cyg_scheduler_lock(); + if (interrupt_mask_count == 0) { + FAIL_USB ("Interrupt mask counter decremented through 0."); + } + else if (--interrupt_mask_count == 0) { + cyg_drv_interrupt_unmask (CYGNUM_HAL_INTERRUPT_USB_LP); + } + cyg_scheduler_unlock(); +} + +//============================================================================= +// Provide inlineable functions for setting the 'flip bit' register values. +//============================================================================= + +//----------------------------------------------------------------------------- +// Set the transmit status bits to the desired value. + +static inline void stm32_usb_set_txep_status + (cyg_uint32 ep, cyg_uint32 txep_status) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + reg_val ^= txep_status & CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK; + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); +} + +//----------------------------------------------------------------------------- +// Set the receive status bits to the desired value. + +static inline void stm32_usb_set_rxep_status + (cyg_uint32 ep, cyg_uint32 rxep_status) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + reg_val ^= rxep_status & CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK; + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); +} + +//----------------------------------------------------------------------------- +// Assign conventional bits in the endpoint status registers without touching +// the flip-bit values. + +static inline void stm32_usb_assign_epxr + (cyg_uint32 ep, cyg_uint32 epxr_val) +{ + epxr_val &= ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK | CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | + CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), epxr_val); +} + +//----------------------------------------------------------------------------- +// Set specified conventional bits in the endpoint status registers. + +static inline void stm32_usb_set_epxr_bits + (cyg_uint32 ep, cyg_uint32 epxr_mask) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val |= epxr_mask; + stm32_usb_assign_epxr (ep, reg_val); +} + +//----------------------------------------------------------------------------- +// Clear specified conventional bits in the endpoint status registers. + +static inline void stm32_usb_clear_epxr_bits + (cyg_uint32 ep, cyg_uint32 epxr_mask) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= ~epxr_mask; + stm32_usb_assign_epxr (ep, reg_val); +} + +//----------------------------------------------------------------------------- +// Set specified toggle bits in the endpoint status registers. + +static inline void stm32_usb_set_epxr_toggle + (cyg_uint32 ep, cyg_uint32 epxr_mask) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= epxr_mask | ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK | CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | + CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + reg_val ^= epxr_mask; + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); +} + +//----------------------------------------------------------------------------- +// Clear specified toggle bits in the endpoint status registers. + +static inline void stm32_usb_clear_epxr_toggle + (cyg_uint32 ep, cyg_uint32 epxr_mask) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= epxr_mask | ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK | CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | + CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); +} + +//----------------------------------------------------------------------------- +// Flip specified toggle bits in the endpoint status registers. + +static inline void stm32_usb_flip_epxr_toggle + (cyg_uint32 ep, cyg_uint32 epxr_mask) +{ + cyg_uint32 reg_val; + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); + reg_val &= ~((cyg_uint32) (CYGHWR_HAL_STM32_USB_EPXR_STATTX_MASK | + CYGHWR_HAL_STM32_USB_EPXR_STATRX_MASK | CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | + CYGHWR_HAL_STM32_USB_EPXR_DTOGRX)); + reg_val |= epxr_mask; + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (ep), reg_val); +} + +//============================================================================= +// The following set of functions provide buffer management capabilities for +// allocating and then accessing USB buffers in the dual-port buffer RAM. +//============================================================================= + +//----------------------------------------------------------------------------- +// Get the allocated buffer size for a specified endpoint. + +static inline cyg_uint32 stm32_usb_buf_get_size + (cyg_uint32 ep) +{ + return (stm32_usb_buf_sizes[ep]); +} + +//----------------------------------------------------------------------------- +// Add a new set of endpoint buffers for the specified endpoint. + +static cyg_bool stm32_usb_buf_add_ep + (cyg_uint32 ep, cyg_uint32 ep_buf_size, cyg_bool is_tx, cyg_bool is_rx, cyg_bool is_db) +{ + cyg_uint32 alloc_size; + cyg_uint32 rx_blocks; + + // Check for valid configuration. + if ((is_db && is_tx && is_rx) || !(is_tx || is_rx)) { + FAIL_USB ("Invalid buffer configuration."); + goto failed; + } + + // Round up the allocation size so that it matches a valid RX block size. + alloc_size = (ep_buf_size & 1) ? ep_buf_size + 1 : ep_buf_size; + if ((alloc_size > 62) && (alloc_size & 31)) { + alloc_size &= ~31; + alloc_size += 32; + } + + // Check to see if there is enough RAM available. + if (is_db || (is_tx && is_rx)) { + if (stm32_usb_buf_offset + 2 * alloc_size > USB_RAM_SIZE) { + FAIL_USB ("Insufficient endpoint RAM for configuration."); + goto failed; + } + } + else { + if (stm32_usb_buf_offset + alloc_size > USB_RAM_SIZE) { + FAIL_USB ("Insufficient endpoint RAM for configuration."); + goto failed; + } + } + + // Calculate the blocks (size + num) field for the receive count register. + rx_blocks = (alloc_size <= 62) ? (alloc_size / 2) : (31 + alloc_size / 32); + stm32_usb_buf_sizes[ep] = (cyg_uint16) ep_buf_size; + + // Program up the pseudo-registers for double buffered transmit. + if (is_db && is_tx) { + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXADDR (ep, 0), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXCOUNT (ep, 0), 0); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXADDR (ep, 1), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXCOUNT (ep, 1), 0); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + } + + // Program up the pseudo-registers for double buffered receive. + else if (is_db) { + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXADDR (ep, 0), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXCOUNT (ep, 0), USB_RAM_XX_RXCOUNT_BLOCKS (rx_blocks)); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXADDR (ep, 1), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXCOUNT (ep, 1), USB_RAM_XX_RXCOUNT_BLOCKS (rx_blocks)); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + } + + // Program up the pseudo-registers for single buffered transmit/receive. + else { + if (is_tx) { + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_SB_TXADDR (ep), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_SB_TXCOUNT (ep), 0); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + } + if (is_rx) { + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_SB_RXADDR (ep), stm32_usb_buf_offset); + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_SB_RXCOUNT (ep), USB_RAM_XX_RXCOUNT_BLOCKS (rx_blocks)); + stm32_usb_buf_offset += (cyg_uint16) alloc_size; + } + } + + // Exit on success or failure. + return true; +failed : + return false; +} + +//----------------------------------------------------------------------------- +// Clear the buffer RAM layout for non-control endpoints, prior to setting a +// new configuration. + +static inline void stm32_usb_buf_clear_config + (void) +{ + cyg_uint32 i; + + // Clear buffer size table for non-control endpoints. + for (i = 1; i < USB_EPNUM; i++) + stm32_usb_buf_sizes[i] = 0; + + // Update the free pointer to point to the end of the control endpoint buffers. + stm32_usb_buf_offset = 8 * USB_EPNUM + 2 * stm32_usb_buf_sizes[0]; +} + +//----------------------------------------------------------------------------- +// Reset the buffer RAM layout, preallocating the requested buffer area for +// control endpoint 0. + +static inline cyg_bool stm32_usb_buf_reset_ep0 + (cyg_uint32 ep0_buf_size) +{ + cyg_uint32 i; + + // The buffer descriptor table is placed at the start of the dual-port RAM. + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_BTABLE, 0); + stm32_usb_buf_offset = 8 * USB_EPNUM; + + // Clear buffer size table prior to adding endpoint 0. A zero in this table + // essentially prevents any host-side access to a given endpoint buffer. + for (i = 0; i < USB_EPNUM; i++) + stm32_usb_buf_sizes[i] = 0; + return stm32_usb_buf_add_ep (0, ep0_buf_size, true, true, false); +} + +//----------------------------------------------------------------------------- +// Copy data from user memory to a specified USB buffer (double buffered). +// Returns the number of bytes transferred, which is capped at the buffer +// size. + +static cyg_uint32 __attribute__((hot)) stm32_usb_copy_to_dbuf + (const cyg_uint8* src, cyg_uint32 size, cyg_uint32 ep, cyg_uint32 buf) +{ + cyg_uint32 data, i; + cyg_haladdress waddr; + + // Truncate the size parameter to the buffer length. + if (size > stm32_usb_buf_sizes[ep]) + size = stm32_usb_buf_sizes[ep]; + + // Get the offset of the start of the buffer from the buffer tables + // and convert it into a host-side address. + HAL_READ_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXADDR (ep, buf), data); + waddr = USB_RAM_BASE + data * 2; + + // Copy over the data, remembering to skip the half-word gaps. If the size + // is not an integer number of half-words, we stick garbage in the last byte. + for (i = (size + 1) >> 1; i != 0; i--) { + data = *(src++); + data |= ((cyg_uint32) *(src++)) << 8; + HAL_WRITE_UINT32 (waddr, data); + waddr += 4; + } + + // Update the buffer count field and return the buffer size. + HAL_WRITE_UINT32 (USB_RAM_BASE + USB_RAM_DB_TXCOUNT (ep, buf), size); + return size; +} + +//----------------------------------------------------------------------------- +// Copy data from user memory to transmit buffer (single buffered endpoint). +// Returns the number of bytes transferred, which is capped at the buffer +// size. + +static inline cyg_uint32 stm32_usb_copy_to_sbuf + (const cyg_uint8* src, cyg_uint32 size, cyg_uint32 ep) +{ + return stm32_usb_copy_to_dbuf (src, size, ep, 0); +} + +//----------------------------------------------------------------------------- +// Copy data from a specified USB buffer to user memory (double buffered). +// Returns the number of bytes held by the buffer. Will not write beyond the +// end of the user buffer, but if the user buffer is not large enough to hold +// the received data (returned value > size) this implies an error condition. + +static cyg_uint32 __attribute__((hot)) stm32_usb_copy_from_dbuf + (cyg_uint8* dest, cyg_uint32 size, cyg_uint32 ep, cyg_uint32 buf) +{ + cyg_uint32 data, bufsize, i; + cyg_haladdress raddr; + + // Get the receive buffer size. + HAL_READ_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXCOUNT (ep, buf), bufsize); + bufsize &= USB_RAM_XX_RXCOUNT_COUNT_MASK; + + // Determine the actual amount of data to transfer. + if (bufsize > size) + FAIL_USB ("Receive buffer overflow detected."); + else + size = bufsize; + + // Get the offset of the start of the buffer from the buffer tables + // and convert it into a host-side address. + HAL_READ_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXADDR (ep, buf), data); + raddr = USB_RAM_BASE + data * 2; + + // Copy over the half-word aligned data. + for (i = size; i > 1; i -= 2) { + HAL_READ_UINT32 (raddr, data); + *(dest++) = (cyg_uint8) data; + *(dest++) = (cyg_uint8) (data >> 8); + raddr += 4; + } + + // Copy over the trailing byte if present. + if (i) { + HAL_READ_UINT32 (raddr, data); + *(dest) = (cyg_uint8) data; + } + return bufsize; +} + +//----------------------------------------------------------------------------- +// Copy data from a receive buffer to user memory (single buffered endpoint). +// Returns the number of bytes held by the buffer. Will not write beyond the +// end of the user buffer, but if the user buffer is not large enough to hold +// the received data (returned value > size) this implies an error condition. + +static inline cyg_uint32 stm32_usb_copy_from_sbuf + (cyg_uint8* dest, cyg_uint32 size, cyg_uint32 ep) +{ + return stm32_usb_copy_from_dbuf (dest, size, ep, 1); +} + +//============================================================================= +// The following set of functions provide support for managing multi-packet +// USB transactions. +//============================================================================= + +//----------------------------------------------------------------------------- +// Implement transmit transaction state machine. This is called on transaction +// start and then on all applicable interrupt events in order to progress the +// transmit transaction. + +static cyg_bool stm32_usb_txtr_run + (txtr_impl* txtr) +{ + cyg_bool completed = false; + cyg_uint32 tx_bytes_req, tx_bytes_sent, buf_sel, reg_val; + + switch (txtr->state) { + + // Send next packet (single buffer transfers). + case TXTR_STATE_SB_NEXT_PKT: + tx_bytes_req = txtr->buf_size - txtr->bytes_sent; + tx_bytes_sent = stm32_usb_copy_to_sbuf (txtr->buf_ptr, tx_bytes_req, txtr->ep_num); + txtr->buf_ptr += tx_bytes_sent; + txtr->bytes_sent += tx_bytes_sent; + + // All bytes sent - see if we need a zero length termination packet. + if (txtr->bytes_sent == txtr->buf_size) { + if ((tx_bytes_sent == stm32_usb_buf_get_size (txtr->ep_num)) && (txtr->flags & TXTR_FLAGS_ZLPKT)) + txtr->state = TXTR_STATE_SB_ZERO_PKT; + else + txtr->state = TXTR_STATE_SB_DONE; + } + + // Set buffer valid via the endpoint control register. + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_VALID); + break; + + // Send zero length termination packet (single buffer transfers). + case TXTR_STATE_SB_ZERO_PKT : + txtr->state = TXTR_STATE_SB_DONE; + stm32_usb_copy_to_sbuf (txtr->buf_ptr, 0, txtr->ep_num); + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_VALID); + break; + + // Complete transaction (single buffer transfers). + case TXTR_STATE_SB_DONE : + txtr->state = TXTR_STATE_IDLE; + completed = true; + break; + + // Sets up the first queued packet. Start by clearing the data toggle + // bits and leaving the endpoint in valid state. + case TXTR_STATE_DB_FIRST_PKT : + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (txtr->ep_num), reg_val); + buf_sel = (reg_val & CYGHWR_HAL_STM32_USB_EPXR_DTOGTX) ? 1 : 0; + goto queue_packet; + + // Commit the next queued packet for transmission then queue the next + // packet in the CPU-side buffer. + case TXTR_STATE_DB_NEXT_PKT : + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (txtr->ep_num), reg_val); + buf_sel = (reg_val & CYGHWR_HAL_STM32_USB_EPXR_DTOGTX) ? 0 : 1; + stm32_usb_flip_epxr_toggle (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_SWBUFTX); + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_VALID); + + // This section is common to both DB_NEXT_PKT and DB_FIRST_PKT states. + // However, a straight fallthrough won't work and we have to resort to goto. + queue_packet: + tx_bytes_req = txtr->buf_size - txtr->bytes_sent; + tx_bytes_sent = stm32_usb_copy_to_dbuf (txtr->buf_ptr, tx_bytes_req, txtr->ep_num, buf_sel); + txtr->buf_ptr += tx_bytes_sent; + txtr->bytes_sent += tx_bytes_sent; + + // All bytes queued - see if we need a zero length termination packet. + if (txtr->bytes_sent == txtr->buf_size) { + if ((tx_bytes_sent == stm32_usb_buf_get_size (txtr->ep_num)) && (txtr->flags & TXTR_FLAGS_ZLPKT)) + txtr->state = TXTR_STATE_DB_ZERO_PKT; + else + txtr->state = TXTR_STATE_DB_LAST_PKT; + } + + // More data remaining - send next packet. + else { + txtr->state = TXTR_STATE_DB_NEXT_PKT; + } + break; + + // Commit the next queued packet for transmission then queue a + // zero length packet in the CPU-side buffer. + case TXTR_STATE_DB_ZERO_PKT : + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (txtr->ep_num), reg_val); + buf_sel = (reg_val & CYGHWR_HAL_STM32_USB_EPXR_DTOGTX) ? 0 : 1; + stm32_usb_flip_epxr_toggle (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_SWBUFTX); + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_VALID); + stm32_usb_copy_to_dbuf (txtr->buf_ptr, 0, txtr->ep_num, buf_sel); + txtr->state = TXTR_STATE_DB_LAST_PKT; + break; + + // Commit the final queued packet for transmission. + case TXTR_STATE_DB_LAST_PKT : + stm32_usb_flip_epxr_toggle (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_SWBUFTX); + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_VALID); + txtr->state = TXTR_STATE_DB_DONE; + break; + + // Complete transaction (double buffer transfers). + case TXTR_STATE_DB_DONE : + stm32_usb_set_txep_status (txtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_NAK); + txtr->state = TXTR_STATE_IDLE; + completed = true; + break; + + // Unknown state - driver error. + default : + FAIL_USB ("TX transaction in invalid state."); + txtr->state = TXTR_STATE_IDLE; + txtr->status = EIO; + completed = true; + break; + } + return completed; +} + +//----------------------------------------------------------------------------- +// Initiate a data transmit transaction. This sets up a new transaction, +// priming the buffers and then kicking the state machine for the first time. + +static cyg_bool stm32_usb_txtr_start + (txtr_impl* txtr, cyg_bool int_safe) +{ + cyg_bool completed; + + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + + // Set up double buffer transactions. We need to prime the buffers which + // requires two ticks of the state machine. + if (txtr->flags & TXTR_FLAGS_DBUF) { + txtr->status = ENOERR; + txtr->bytes_sent = 0; + txtr->state = TXTR_STATE_DB_FIRST_PKT; + stm32_usb_txtr_run (txtr); + } + + // Set up single buffer transactions. + else { + txtr->status = ENOERR; + txtr->bytes_sent = 0; + txtr->state = TXTR_STATE_SB_NEXT_PKT; + } + + // Run the state machine for the first step. + completed = stm32_usb_txtr_run (txtr); + + // Exit critical section. + if (!int_safe) stm32_usb_release_intr_mask (); + return completed; +} + +//----------------------------------------------------------------------------- +// Halt a transmit endpoint. This places the endpoint in the stall condition +// and cancels any outstanding transaction, resetting the transaction state +// machine. + +static void stm32_usb_txep_halt + (txep_impl* txep, cyg_bool int_safe) +{ + cyg_bool call_completion; + + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + stm32_usb_set_txep_status (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_DIS); + + // Reset the transaction state. + call_completion = ((txep->txtr.state != TXTR_STATE_IDLE) && + (txep->txtr.state != TXTR_STATE_RESET)) ? true : false; + txep->txtr.state = TXTR_STATE_RESET; + txep->common.halted = true; + stm32_usb_clear_epxr_bits (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_CTRTX); + + // Exit critical section. + stm32_usb_set_txep_status (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_STALL); + if (!int_safe) stm32_usb_release_intr_mask (); + + // Indicate error via the completion callback. + if (call_completion) { + if (txep->common.complete_fn) + (*txep->common.complete_fn) (txep->common.complete_data, -EIO); + TRACE_USB ("TX Transaction cancelled on halt.\n"); + } +} + +//----------------------------------------------------------------------------- +// Take a transmit endpoint out of halted state. This takes the endpoint out +// of the halted state and resets the endpoint. Note that according to the +// spec, the endpoint should also be reset and the toggle bits cleared if +// 'clear halted' is called while in normal operation. + +static void stm32_usb_txep_unhalt + (txep_impl* txep, cyg_bool int_safe) +{ + cyg_bool call_completion; + + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + stm32_usb_set_txep_status (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_DIS); + + // Reset the transaction state. + call_completion = ((txep->txtr.state != TXTR_STATE_IDLE) && + (txep->txtr.state != TXTR_STATE_RESET)) ? true : false; + txep->txtr.state = TXTR_STATE_IDLE; + txep->common.halted = false; + stm32_usb_clear_epxr_bits (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_CTRTX); + stm32_usb_clear_epxr_toggle (txep->txtr.ep_num, + CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | CYGHWR_HAL_STM32_USB_EPXR_SWBUFTX); + + // Exit critical section. + stm32_usb_set_txep_status (txep->txtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATTX_NAK); + if (!int_safe) stm32_usb_release_intr_mask (); + + // Indicate error via the completion callback. + if (call_completion) { + if (txep->common.complete_fn) + (*txep->common.complete_fn) (txep->common.complete_data, -EIO); + TRACE_USB ("TX Transaction cancelled on resume.\n"); + } +} + +//----------------------------------------------------------------------------- +// Implement receive transaction state machine. This is called on all +// applicable interrupt events in order to progress the transaction. + +static cyg_bool stm32_usb_rxtr_run + (rxtr_impl* rxtr) +{ + cyg_bool completed = false; + cyg_uint32 rx_bytes_req, rx_bytes_rcvd, buf_sel, reg_val; + + switch (rxtr->state) { + + // Receive new packet (single buffer transfers). + case RXTR_STATE_SB_NEXT_PKT: + rx_bytes_req = rxtr->buf_size - rxtr->bytes_rcvd; + rx_bytes_rcvd = stm32_usb_copy_from_sbuf (rxtr->buf_ptr, rx_bytes_req, rxtr->ep_num); + + // Check for buffer overflow condition before updating buffer pointer. + if (rx_bytes_rcvd > rx_bytes_req) { + FAIL_USB ("RX message exceeds allocated buffer size."); + rxtr->state = RXTR_STATE_IDLE; + rxtr->status = EMSGSIZE; + completed = true; + break; + } + rxtr->buf_ptr += rx_bytes_rcvd; + rxtr->bytes_rcvd += rx_bytes_rcvd; + + // Short packet received - transaction complete. + if (rx_bytes_rcvd < stm32_usb_buf_get_size (rxtr->ep_num)) { + rxtr->state = RXTR_STATE_IDLE; + completed = true; + break; + } + + // All bytes received - see if we need a zero length termination packet. + // Note that zero length packets can be treated as normal short packets + // here, so an additional state transition is not required. + if (rxtr->bytes_rcvd == rxtr->buf_size) { + if (!((rx_bytes_rcvd == stm32_usb_buf_get_size (rxtr->ep_num)) && (rxtr->flags & RXTR_FLAGS_ZLPKT))) { + rxtr->state = RXTR_STATE_IDLE; + completed = true; + break; + } + } + + // Set buffer clear via the endpoint control register. + stm32_usb_set_rxep_status (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_VALID); + break; + + // Receive new packet (double buffer transfers). Start by switching buffers. + case RXTR_STATE_DB_NEXT_PKT: + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (rxtr->ep_num), reg_val); + buf_sel = (reg_val & CYGHWR_HAL_STM32_USB_EPXR_DTOGRX) ? 0 : 1; + + // Get the receive buffer size. + HAL_READ_UINT32 (USB_RAM_BASE + USB_RAM_DB_RXCOUNT (rxtr->ep_num, buf_sel), rx_bytes_rcvd); + rx_bytes_req = rxtr->buf_size - rxtr->bytes_rcvd; + rx_bytes_rcvd &= USB_RAM_XX_RXCOUNT_COUNT_MASK; + + // Check for buffer overflow condition before updating buffer pointer. + if (rx_bytes_rcvd > rx_bytes_req) { + FAIL_USB ("RX message exceeds allocated buffer size."); + rxtr->state = RXTR_STATE_IDLE; + rxtr->status = EMSGSIZE; + completed = true; + break; + } + + // Short packet received - transaction complete. + if (rx_bytes_rcvd < stm32_usb_buf_get_size (rxtr->ep_num)) { + rxtr->state = RXTR_STATE_IDLE; + completed = true; + } + + // All bytes received - see if we need a zero length termination packet. + // Note that zero length packets can be treated as normal short packets + // here, so an additional state transition is not required. + if (rxtr->bytes_rcvd + rx_bytes_rcvd == rxtr->buf_size) { + if (!((rx_bytes_rcvd == stm32_usb_buf_get_size (rxtr->ep_num)) && (rxtr->flags & RXTR_FLAGS_ZLPKT))) { + rxtr->state = RXTR_STATE_IDLE; + completed = true; + } + } + + // Only enable the next receive buffer if this is not the last packet. + if (!completed) { + stm32_usb_flip_epxr_toggle (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_SWBUFRX); + stm32_usb_set_rxep_status (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_VALID); + } + + // Set the endpoint to NAK on completion. + else { + stm32_usb_set_rxep_status (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_NAK); + } + + // Copy the received data to our local buffer. + rx_bytes_rcvd = stm32_usb_copy_from_dbuf (rxtr->buf_ptr, rx_bytes_req, rxtr->ep_num, buf_sel); + rxtr->bytes_rcvd += rx_bytes_rcvd; + rxtr->buf_ptr += rx_bytes_rcvd; + break; + + // Unknown state - driver error. + default : + FAIL_USB ("RX transaction in invalid state."); + rxtr->state = RXTR_STATE_IDLE; + rxtr->status = EIO; + completed = true; + break; + + } + return completed; +} + +//----------------------------------------------------------------------------- +// Initiate a data receive transaction. This sets up a new transaction, +// enabling the receive buffers and then waiting for incoming data. + +static cyg_bool stm32_usb_rxtr_start + (rxtr_impl* rxtr, cyg_bool int_safe) +{ + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + + // Set up double buffer transactions. + if (rxtr->flags & RXTR_FLAGS_DBUF) { + rxtr->state = RXTR_STATE_DB_NEXT_PKT; + rxtr->status = ENOERR; + rxtr->bytes_rcvd = 0; + stm32_usb_flip_epxr_toggle (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_SWBUFRX); + stm32_usb_set_rxep_status (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_VALID); + } + + // Set up single buffer transactions. + else { + rxtr->state = RXTR_STATE_SB_NEXT_PKT; + rxtr->status = ENOERR; + rxtr->bytes_rcvd = 0; + stm32_usb_set_rxep_status (rxtr->ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_VALID); + } + + // Exit critical section. + if (!int_safe) stm32_usb_release_intr_mask (); + return false; +} + +//----------------------------------------------------------------------------- +// Halt a receive endpoint. This places the endpoint in the stall condition +// and cancels any outstanding transaction, resetting the transaction state +// machine. + +static void stm32_usb_rxep_halt + (rxep_impl* rxep, cyg_bool int_safe) +{ + cyg_bool call_completion; + + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + stm32_usb_set_rxep_status (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_DIS); + + // Reset the transaction state. + call_completion = ((rxep->rxtr.state != RXTR_STATE_IDLE) && + (rxep->rxtr.state != RXTR_STATE_RESET)) ? true : false; + rxep->rxtr.state = RXTR_STATE_RESET; + rxep->common.halted = true; + stm32_usb_clear_epxr_bits (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + + // Exit critical section. + stm32_usb_set_rxep_status (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_STALL); + if (!int_safe) stm32_usb_release_intr_mask (); + + // Indicate error via the completion callback. + if (call_completion) { + if (rxep->common.complete_fn) + (*rxep->common.complete_fn) (rxep->common.complete_data, -EIO); + TRACE_USB ("RX Transaction cancelled on halt.\n"); + } +} + +//----------------------------------------------------------------------------- +// Take a receive endpoint out of halted state. This takes the endpoint out +// of the halted state and resets the endpoint. Note that according to the +// spec, the endpoint should also be reset and the toggle bits cleared if +// 'clear halted' is called while in normal operation. + +static void stm32_usb_rxep_unhalt + (rxep_impl* rxep, cyg_bool int_safe) +{ + cyg_bool call_completion; + + // Critical section - avoid races with the ISR. + if (!int_safe) stm32_usb_request_intr_mask (); + stm32_usb_set_rxep_status (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_DIS); + + // Reset the transaction state. + call_completion = ((rxep->rxtr.state != RXTR_STATE_IDLE) && + (rxep->rxtr.state != RXTR_STATE_RESET)) ? true : false; + rxep->rxtr.state = RXTR_STATE_IDLE; + rxep->common.halted = false; + stm32_usb_clear_epxr_bits (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + stm32_usb_clear_epxr_toggle (rxep->rxtr.ep_num, + CYGHWR_HAL_STM32_USB_EPXR_DTOGRX | CYGHWR_HAL_STM32_USB_EPXR_SWBUFRX); + + // Exit critical section. + stm32_usb_set_rxep_status (rxep->rxtr.ep_num, CYGHWR_HAL_STM32_USB_EPXR_STATRX_NAK); + if (!int_safe) stm32_usb_release_intr_mask (); + + // Indicate error via the completion callback. + if (call_completion) { + if (rxep->common.complete_fn) + (*rxep->common.complete_fn) (rxep->common.complete_data, -EIO); + TRACE_USB ("RX Transaction cancelled on resume.\n"); + } +} + +//============================================================================= +// Implement control endpoint protocol handling. +//============================================================================= + +//----------------------------------------------------------------------------- +// Forward endpoint 0 state change notifications. + +static void stm32_usb_ctrl_update_state + (int new_state, usbs_state_change state_change) +{ + int old_state = ctrlep.common.state; + ctrlep.common.state = new_state; + if (ctrlep.common.state_change_fn) + (*ctrlep.common.state_change_fn) (&ctrlep.common, + ctrlep.common.state_change_data, state_change, old_state); +} + +// -------------------------------------------------------------------------- +// Called on completion of an endpoint 0 control request transaction. + +static void stm32_usb_ctrl_completed + (int status) +{ + ctrlep.msg_state = CTRLEP_MSG_STATE_IDLE; + if (ctrlep.common.complete_fn) + (*ctrlep.common.complete_fn) (&cyg_usbs_cortexm_stm32_ep0c, -status); + if (status != 0) + TRACE_USB ("Transaction failed (status %d).\n", status); +} + +//----------------------------------------------------------------------------- +// Clear endpoint configuration. This disables all non-control endpoints, +// resetting their state. + +static void stm32_usb_ctrl_clear_config + (void) +{ + cyg_uint32 i; + txep_impl* txep = txep_list; + rxep_impl* rxep = rxep_list; + + // Disable all non-control endpoints, clearing any outstanding interrupts. + // This also ensures that the toggle bits are reset to 0. + for (i = 1; i < 8; i++) { + stm32_usb_set_txep_status (i, CYGHWR_HAL_STM32_USB_EPXR_STATTX_DIS); + stm32_usb_set_rxep_status (i, CYGHWR_HAL_STM32_USB_EPXR_STATRX_DIS); + stm32_usb_clear_epxr_toggle (i, + CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | CYGHWR_HAL_STM32_USB_EPXR_DTOGRX); + stm32_usb_clear_epxr_bits (i, 0xFFFF); + } + + // Reset the transaction state for all transmit endpoints. + for (i = 0; i < CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM; i++) { + txep->common.halted = true; + txep->txtr.state = TXTR_STATE_RESET; + txep++; + } + + // Reset the transaction state for all receive endpoints. + for (i = 0; i < CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM; i++) { + rxep->common.halted = true; + rxep->rxtr.state = RXTR_STATE_RESET; + rxep++; + } + + // Clear the logical to physical endpoint mappings. + for (i = 0; i < 15; i++) { + txep_map [i] = NULL; + rxep_map [i] = NULL; + } + + // Clear buffer RAM for non-control endpoints (preseverves endpoint 0). + stm32_usb_buf_clear_config (); +} + +//----------------------------------------------------------------------------- +// Reset the control endpoint - placing the device in the 'default' state. + +static void stm32_usb_ctrl_reset + (void) +{ + // Re-enable the device on address 0 only. + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_DADDR, CYGHWR_HAL_STM32_USB_DADDR_EF); + + // Reset the buffer RAM layout, allocating only the endpoint 0 buffers. + stm32_usb_buf_reset_ep0 (ctrlep.common.enumeration_data->device.max_packet_size); + + // Clear the previous endpoint configuration. + stm32_usb_ctrl_clear_config (); + + // Ensure endpoint 0 is assigned the correct endpoint type. + stm32_usb_assign_epxr (0, CYGHWR_HAL_STM32_USB_EPXR_EPTYPE_CTRL); + + // Reset endpoint 0, leaving it configured for valid incoming packets. + stm32_usb_set_txep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATTX_NAK); + stm32_usb_set_rxep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATRX_VALID); + stm32_usb_clear_epxr_toggle (0, + CYGHWR_HAL_STM32_USB_EPXR_DTOGTX | CYGHWR_HAL_STM32_USB_EPXR_DTOGRX); + stm32_usb_clear_epxr_bits (0, + CYGHWR_HAL_STM32_USB_EPXR_CTRTX | CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + + // Enter default state. + stm32_usb_ctrl_update_state (USBS_STATE_DEFAULT, USBS_STATE_CHANGE_RESET); +} + +//----------------------------------------------------------------------------- +// Fill the transmit control message buffer. This function is used to +// assemble control response messages for transmission to the host. + +static cyg_uint32 stm32_usb_ctrl_fill_msg_buffer + (void) +{ + cyg_uint32 msg_length = 0; + + // Deal with commands which place their data directly into the staging buffer. + if (ctrlep.common.buffer == ctrlep_msg_buffer) { + msg_length = ctrlep.common.buffer_size; + } + + // Loop until there are no more message segments to append. For buffer + // overflows, debug builds will assert and production builds will send a + // truncated message. + else do { + if (ctrlep.common.buffer_size != 0) { + if (msg_length + ctrlep.common.buffer_size <= CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE) { + memcpy (ctrlep_msg_buffer + msg_length, ctrlep.common.buffer, ctrlep.common.buffer_size); + msg_length += ctrlep.common.buffer_size; + } + else { + FAIL_USB ("Endpoint 0 transmit buffer overflow."); + break; + } + + // Get the next message segment, if available. + if (ctrlep.common.fill_buffer_fn) + (*ctrlep.common.fill_buffer_fn) (&cyg_usbs_cortexm_stm32_ep0c); + } + } while (ctrlep.common.fill_buffer_fn); + + return msg_length; +} + +//----------------------------------------------------------------------------- +// Handle set configuration setup packets. This is implemented in the low +// level driver because this is the point at which we need to configure the +// endpoint RAM and realise the endpoints. It 'falls through' to the high +// level handlers so that they can deal with notifying the application. +// Note: Only a single (default) interface is supported per configuration. + +static usbs_control_return stm32_usb_ctrl_set_config + (cyg_uint32 config_id) +{ + cyg_uint32 i, j; + cyg_uint32 start_interface, start_endpoint, num_endpoints; + cyg_uint32 total_interfaces, total_endpoints; + cyg_uint32 txep_count = 0; + cyg_uint32 rxep_count = 0; + cyg_bool alloc_ok; + const usb_configuration_descriptor* configurations; + const usb_interface_descriptor* interfaces; + const usb_endpoint_descriptor* endpoints; + + // Check for valid config. + if ((config_id <= 0) || + (config_id > ctrlep.common.enumeration_data->device.number_configurations)) + return USBS_CONTROL_RETURN_UNKNOWN; + + // Clear the previous endpoint configuration. + stm32_usb_ctrl_clear_config (); + + // Get the base pointers for the descriptor tables. + configurations = ctrlep.common.enumeration_data->configurations; + interfaces = ctrlep.common.enumeration_data->interfaces; + endpoints = ctrlep.common.enumeration_data->endpoints; + + start_interface = 0; + start_endpoint = 0; + num_endpoints = 0; + total_interfaces = ctrlep.common.enumeration_data->total_number_interfaces; + total_endpoints = ctrlep.common.enumeration_data->total_number_endpoints; + + // Skip over the descriptors until we get to the ones we want. + for (i = 0; i < (config_id-1); i++) { + ASSERT_USB (start_interface + configurations[i].number_interfaces <= total_interfaces, + "Invalid number of interfaces in enumeration data."); + for (j = 0; j < configurations[i].number_interfaces; j++) { + start_endpoint += interfaces[start_interface+j].number_endpoints; + ASSERT_USB (start_endpoint < total_endpoints, + "Invalid number of endpoints in enumeration data."); + } + start_interface += configurations[i].number_interfaces; + } + + // Determine the number of endpoint descriptors which need to be included for + // all interfaces within the specified configuration. + ASSERT_USB (start_interface + configurations[i].number_interfaces <= total_interfaces, + "Invalid number of interfaces in enumeration data."); + for (j = 0; j < configurations[i].number_interfaces; j++) { + num_endpoints += interfaces[start_interface+j].number_endpoints; + ASSERT_USB (start_endpoint + num_endpoints <= total_endpoints, + "Invalid number of endpoints in enumeration data."); + } + TRACE_USB ("Found %d interfaces and %d endpoints for configuration %d.\n", + configurations[i].number_interfaces, num_endpoints, config_id); + + // Realise the endpoints for the specified interfaces. Set up the buffer + // RAM and configure them to NAK the host until the higher layer application + // is ready to initiate transfers. Failures to allocate the endpoint buffers + // will put the endpoints in the stalled state. + for (i = 0; i < num_endpoints; i++) { + const usb_endpoint_descriptor* ep_desc = endpoints + start_endpoint + i; + cyg_uint32 pkt_size = ep_desc->max_packet_lo + (((cyg_uint32) ep_desc->max_packet_hi) << 8); + + // Deal with transmit (input) endpoints. + if (ep_desc->endpoint & USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN) { + if ((ep_desc->endpoint & 0x7F) < 1 || (ep_desc->endpoint & 0x7F) > 15) { + FAIL_USB ("Invalid endpoint ID in configuration."); + goto out; + } + if (txep_count >= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) { + FAIL_USB ("Too many TX endpoints in configuration."); + goto out; + } + + // Set up transmit (input) buffers. + if (ep_desc->attributes == USB_ENDPOINT_DESCRIPTOR_ATTR_BULK) { + alloc_ok = stm32_usb_buf_add_ep (txep_count + 1, pkt_size, true, false, true); + stm32_usb_set_epxr_bits (txep_count + 1, + CYGHWR_HAL_STM32_USB_EPXR_EPTYPE_BULK | CYGHWR_HAL_STM32_USB_EPXR_EPKIND); +#ifdef CYGHWR_DEVS_USB_CORTEXM_STM32_BULK_TERM_ZLP + (txep_list + txep_count)->txtr.flags = TXTR_FLAGS_ZLPKT | TXTR_FLAGS_DBUF; +#else + (txep_list + txep_count)->txtr.flags = TXTR_FLAGS_DBUF; +#endif + TRACE_USB ("Configured BULK IN endpoint ID %d.\n", ep_desc->endpoint & 0x7F); + } + else if (ep_desc->attributes == USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT) { + alloc_ok = stm32_usb_buf_add_ep (txep_count + 1, pkt_size, true, false, false); + (txep_list + txep_count)->txtr.flags = TXTR_FLAGS_NONE; + stm32_usb_set_epxr_bits (txep_count + 1, CYGHWR_HAL_STM32_USB_EPXR_EPTYPE_INTR); + TRACE_USB ("Configured INTERRUPT IN endpoint ID %d.\n", ep_desc->endpoint & 0x7F); + } + else { + FAIL_USB ("Isochronous endpoints are not currently supported."); + goto out; + } + + // Enable endpoints if buffer allocation was OK - stall them otherwise. + if (alloc_ok) { + txep_map [(ep_desc->endpoint & 0x7F) - 1] = txep_list + txep_count; + (txep_list + txep_count)->common.halted = false; + (txep_list + txep_count)->txtr.state = TXTR_STATE_IDLE; + stm32_usb_set_txep_status (txep_count + 1, CYGHWR_HAL_STM32_USB_EPXR_STATTX_NAK); + } + else { + stm32_usb_set_txep_status (txep_count + 1, CYGHWR_HAL_STM32_USB_EPXR_STATTX_STALL); + } + stm32_usb_set_epxr_bits (txep_count + 1, (ep_desc->endpoint & 0xF)); + txep_count++; + } + + // Deal with receive (output) endpoints. + else { + if ((ep_desc->endpoint & 0x7F) < 1 || (ep_desc->endpoint & 0x7F) > 15) { + FAIL_USB ("Invalid endpoint ID in configuration."); + goto out; + } + if (rxep_count >= CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM) { + FAIL_USB ("Too many RX endpoints in configuration."); + goto out; + } + + // Set up receive (output) buffers. + if (ep_desc->attributes == USB_ENDPOINT_DESCRIPTOR_ATTR_BULK) { + alloc_ok = stm32_usb_buf_add_ep (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + pkt_size, false, true, true); + stm32_usb_set_epxr_bits (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + CYGHWR_HAL_STM32_USB_EPXR_EPTYPE_BULK | CYGHWR_HAL_STM32_USB_EPXR_EPKIND); +#ifdef CYGHWR_DEVS_USB_CORTEXM_STM32_BULK_TERM_ZLP + (rxep_list + rxep_count)->rxtr.flags = RXTR_FLAGS_ZLPKT | RXTR_FLAGS_DBUF; +#else + (rxep_list + rxep_count)->rxtr.flags = RXTR_FLAGS_DBUF; +#endif + TRACE_USB ("Configured BULK OUT endpoint ID %d.\n", ep_desc->endpoint & 0x7F); + } + else if (ep_desc->attributes == USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT) { + alloc_ok = stm32_usb_buf_add_ep (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + pkt_size, false, true, false); + (rxep_list + rxep_count)->rxtr.flags = RXTR_FLAGS_NONE; + stm32_usb_set_epxr_bits (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + CYGHWR_HAL_STM32_USB_EPXR_EPTYPE_INTR); + TRACE_USB ("Configured INTERRUPT OUT endpoint ID %d.\n", ep_desc->endpoint & 0x7F); + } + else { + FAIL_USB ("Isochronous endpoints are not currently supported."); + goto out; + } + + // Enable endpoints if buffer allocation was OK - stall them otherwise. + if (alloc_ok) { + rxep_map [(ep_desc->endpoint & 0x7F) - 1] = rxep_list + rxep_count; + (rxep_list + rxep_count)->common.halted = false; + (rxep_list + rxep_count)->rxtr.state = RXTR_STATE_IDLE; + stm32_usb_set_rxep_status (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + CYGHWR_HAL_STM32_USB_EPXR_STATRX_NAK); + } + else { + stm32_usb_set_rxep_status (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + CYGHWR_HAL_STM32_USB_EPXR_STATRX_STALL); + } + stm32_usb_set_epxr_bits (rxep_count + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1, + (ep_desc->endpoint & 0xF)); + rxep_count++; + } + } + + // Pass up to higher layers. +out: + return USBS_CONTROL_RETURN_UNKNOWN; +} + +//----------------------------------------------------------------------------- +// Handle get status setup packets. This function places the status +// information directly into the staging buffer. We deal with the device +// and endpoint status responses here. The interface status request is +// dealt with in the common USB slave layer. +// TODO - should #define the return fields in usb.h. + +static inline usbs_control_return stm32_usb_ctrl_get_status + (cyg_uint32 recipient, cyg_uint32 ep_sel) +{ + cyg_uint8 dev_state = ctrlep.common.state & USBS_STATE_MASK; + usbs_control_return result = USBS_CONTROL_RETURN_UNKNOWN; + + // Device status requests are valid in addressed and configured states. + // TODO - remote wakeup is not currently supported by this driver. + if (recipient == USB_DEVREQ_RECIPIENT_DEVICE) { + if (dev_state == USBS_STATE_ADDRESSED || dev_state == USBS_STATE_CONFIGURED) { +#ifdef CYGHWR_DEVS_USB_CORTEXM_STM32_SELF_POWERED + ctrlep_msg_buffer[0] = 0x01; +#else + ctrlep_msg_buffer[0] = 0x00; +#endif + ctrlep_msg_buffer[1] = 0x00; + result = USBS_CONTROL_RETURN_HANDLED; + } + } + + // Endpoint 0 status requests are valid in addressed and configured states. + // Endpoint 0 cannot be halted. Endpoint number is in the lower 4 bits of the ID. + else if (recipient == USB_DEVREQ_RECIPIENT_ENDPOINT && (ep_sel & USB_DEVREQ_INDEX_ENDPOINT_MASK) == 0) { + if (dev_state == USBS_STATE_ADDRESSED || dev_state == USBS_STATE_CONFIGURED) { + ctrlep_msg_buffer[0] = 0x00; + ctrlep_msg_buffer[1] = 0x00; + result = USBS_CONTROL_RETURN_HANDLED; + } + } + + // Non-control endpoint status requests are only valid in the configured state. + // Returns the halted state of the requested endpoint. + else if (recipient == USB_DEVREQ_RECIPIENT_ENDPOINT) { + if (dev_state == USBS_STATE_CONFIGURED) { + + // Transmit (IN) endpoint IDs have the top bit set. + if ((ep_sel & USB_DEVREQ_INDEX_DIRECTION_MASK) == USB_DEVREQ_INDEX_DIRECTION_IN) { + ep_sel = (ep_sel & USB_DEVREQ_INDEX_ENDPOINT_MASK) - 1; + if (txep_map[ep_sel] != NULL) { + ctrlep_msg_buffer[0] = (txep_map[ep_sel]->common.halted) ? 0x01 : 0x00; + ctrlep_msg_buffer[1] = 0x00; + result = USBS_CONTROL_RETURN_HANDLED; + } + } + + // Receive (OUT) endpoint IDs have the top bit clear. + else { + ep_sel = (ep_sel & USB_DEVREQ_INDEX_ENDPOINT_MASK) - 1; + if (rxep_map[ep_sel] != NULL) { + ctrlep_msg_buffer[0] = (rxep_map[ep_sel]->common.halted) ? 0x01 : 0x00; + ctrlep_msg_buffer[1] = 0x00; + result = USBS_CONTROL_RETURN_HANDLED; + } + } + } + } + + // Point the endpoint 0 response buffer at the staging buffer. + if (result != USBS_CONTROL_RETURN_UNKNOWN) { + ctrlep.common.buffer_size = 2; + ctrlep.common.buffer = ctrlep_msg_buffer; + } + return result; +} + +//----------------------------------------------------------------------------- +// Handle set and clear feature commands. Since remote wakeup support is not +// implemented and interface features are dealt with at a higher layer we only +// implement endpoint halting here. This will only ever be called from within +// the DSR so is interrupt safe. + +static usbs_control_return stm32_usb_ctrl_set_feature + (cyg_uint32 recipient, cyg_uint32 ep_sel, cyg_uint32 feature, cyg_bool set) +{ + cyg_uint8 dev_state = ctrlep.common.state & USBS_STATE_MASK; + usbs_control_return result = USBS_CONTROL_RETURN_UNKNOWN; + + // Non-control endpoint feature control is valid in the configured state. + if (recipient == USB_DEVREQ_RECIPIENT_ENDPOINT && + dev_state == USBS_STATE_CONFIGURED && feature == USB_DEVREQ_FEATURE_ENDPOINT_HALT) { + + // Transmit (IN) endpoint IDs have the top bit set. + if ((ep_sel & USB_DEVREQ_INDEX_DIRECTION_MASK) == USB_DEVREQ_INDEX_DIRECTION_IN) { + ep_sel = (ep_sel & USB_DEVREQ_INDEX_ENDPOINT_MASK) - 1; + if (txep_map[ep_sel] != NULL) { + if (set) + stm32_usb_txep_halt (txep_map[ep_sel], true); + else + stm32_usb_txep_unhalt (txep_map[ep_sel], true); + result = USBS_CONTROL_RETURN_HANDLED; + } + } + + // Receive (OUT) endpoint IDs have the top bit clear. + else { + ep_sel = (ep_sel & USB_DEVREQ_INDEX_ENDPOINT_MASK) - 1; + if (rxep_map[ep_sel] != NULL) { + if (set) + stm32_usb_rxep_halt (rxep_map[ep_sel], true); + else + stm32_usb_rxep_unhalt (rxep_map[ep_sel], true); + result = USBS_CONTROL_RETURN_HANDLED; + } + } + } + return result; +} + +//----------------------------------------------------------------------------- +// Process standard endpoint 0 setup packets. + +static usbs_control_return stm32_usb_ctrl_setup_standard + (void) +{ + usb_devreq* req = (usb_devreq*) &ctrlep.common.control_buffer[0]; + usbs_control_return result = USBS_CONTROL_RETURN_UNKNOWN; + cyg_uint32 recipient = req->type & USB_DEVREQ_RECIPIENT_MASK; + + switch (req->request) { + + // Assign device address. We can't actually update the address register + // until after the full bus handshake has completed, otherwise the ACK + // packet gets lost. + case USB_DEVREQ_SET_ADDRESS : + result = USBS_CONTROL_RETURN_HANDLED; + break; + + // Set device configuration. + case USB_DEVREQ_SET_CONFIGURATION : + TRACE_USB ("Setting USB configuration = %d\n", (cyg_uint32) req->value_lo); + result = stm32_usb_ctrl_set_config (req->value_lo); + break; + + // TODO: Interfaces with multiple settings are not currently supported. + // If a device only supports a default setting for a specified interface + // the spec says a stall should be sent. + case USB_DEVREQ_SET_INTERFACE : + TRACE_USB ("Using default interface settings.\n"); + result = USBS_CONTROL_RETURN_STALL; + break; + + // Get device status. + case USB_DEVREQ_GET_STATUS : + result = stm32_usb_ctrl_get_status (recipient, req->index_lo); + break; + + // Control endpoint halting. Halt on 'set feature'. + case USB_DEVREQ_SET_FEATURE : + result = stm32_usb_ctrl_set_feature (recipient, req->index_lo, req->value_lo, true); + break; + + // Control endpoint halting. Resume on 'clear feature'. + case USB_DEVREQ_CLEAR_FEATURE : + result = stm32_usb_ctrl_set_feature (recipient, req->index_lo, req->value_lo, false); + break; + + // Pass up to the user supplied handler, if present. + default : + if (ctrlep.common.standard_control_fn) + result = (*ctrlep.common.standard_control_fn) + (&ctrlep.common, ctrlep.common.standard_control_data); + break; + } + + // If not already handled, pass up to the high level driver. + if (result == USBS_CONTROL_RETURN_UNKNOWN) + result = usbs_handle_standard_control (&ctrlep.common); + + return result; +} + +//----------------------------------------------------------------------------- +// Perform initial processing of endpoint 0 setup packets. + +static void stm32_usb_ctrl_setup_handler + (void) +{ + cyg_uint32 req_length, req_type, req_dir; + usb_devreq* req = (usb_devreq*) &ctrlep.common.control_buffer[0]; + usbs_control_return result = USBS_CONTROL_RETURN_UNKNOWN; + + // Extract the required fields from the setup packet. + req_length = 8 * (cyg_uint32) req->length_hi + req->length_lo; + req_type = req->type & USB_DEVREQ_TYPE_MASK; + req_dir = req->type & USB_DEVREQ_DIRECTION_MASK; + + // Always fail the transaction if the requested data stage exceeds the + // allocated buffer area. + if ((req_dir == USB_DEVREQ_DIRECTION_OUT) && + (req_length > CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE)) { + FAIL_USB ("Requested control data stage exceeds message buffer size."); + result = USBS_CONTROL_RETURN_STALL; + } + + // Pass standard requests to the standard handlers. + else if (req_type == USB_DEVREQ_TYPE_STANDARD) { + result = stm32_usb_ctrl_setup_standard (); + } + + // Hand off non-standard requests to their respective handlers. + else { + usbs_control_return (*callback_fn) (usbs_control_endpoint*, void*); + void* callback_arg; + + if (req_type == USB_DEVREQ_TYPE_CLASS) { + callback_fn = ctrlep.common.class_control_fn; + callback_arg = ctrlep.common.class_control_data; + } + else if (req_type == USB_DEVREQ_TYPE_VENDOR) { + callback_fn = ctrlep.common.vendor_control_fn; + callback_arg = ctrlep.common.vendor_control_data; + } + else { + callback_fn = ctrlep.common.reserved_control_fn; + callback_arg = ctrlep.common.reserved_control_data; + } + + result = (callback_fn) ? (*callback_fn) (&ctrlep.common, callback_arg) + : USBS_CONTROL_RETURN_STALL; + } + + // If correctly handled, initiate the data transfer phase. This is only + // called from within the DSR, so the transaction start is interrupt safe. + if (result == USBS_CONTROL_RETURN_HANDLED) { + + // ACK the transfer by sending a zero length packet. + if (req_length == 0) { + ctrlep.msg_state = CTRLEP_MSG_STATE_CTRL_ACK; + ctrlep.txtr.state = TXTR_STATE_IDLE; + ctrlep.txtr.buf_ptr = ctrlep_msg_buffer; + ctrlep.txtr.buf_size = 0; + stm32_usb_txtr_start (&ctrlep.txtr, true); + } + + // Send the inbound data. + else if (req_dir == USB_DEVREQ_DIRECTION_IN) { + ctrlep.msg_state = CTRLEP_MSG_STATE_IN_DATA; + ctrlep.txtr.state = TXTR_STATE_IDLE; + ctrlep.txtr.buf_ptr = ctrlep_msg_buffer; + ctrlep.txtr.buf_size = stm32_usb_ctrl_fill_msg_buffer (); + stm32_usb_txtr_start (&ctrlep.txtr, true); + } + + // Receive outbound data from the host. + else { + ctrlep.msg_state = CTRLEP_MSG_STATE_OUT_DATA; + ctrlep.rxtr.state = RXTR_STATE_IDLE; + ctrlep.rxtr.buf_ptr = ctrlep_msg_buffer; + ctrlep.rxtr.buf_size = CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE; + stm32_usb_rxtr_start (&ctrlep.rxtr, true); + } + } + + // Stall endpoint on request. + else if (result == USBS_CONTROL_RETURN_STALL) { + stm32_usb_set_txep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATTX_STALL); + stm32_usb_set_rxep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATRX_STALL); + } + + // Unsupported setup commands also stall the control endpoint. + else { + TRACE_USB ("Stall EP0 on UNKNOWN control message : %02X %02X %02X %02X %02X %02X %02X %02X\n", + ctrlep.common.control_buffer[0], ctrlep.common.control_buffer[1], + ctrlep.common.control_buffer[2], ctrlep.common.control_buffer[3], + ctrlep.common.control_buffer[4], ctrlep.common.control_buffer[5], + ctrlep.common.control_buffer[6], ctrlep.common.control_buffer[7]); + stm32_usb_set_txep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATTX_STALL); + stm32_usb_set_rxep_status (0, CYGHWR_HAL_STM32_USB_EPXR_STATRX_STALL); + } +} + +//----------------------------------------------------------------------------- +// Completion of control endpoint data transmit phase. + +static inline void stm32_usb_ctrl_txtr_done + (void) +{ + cyg_uint32 reg_val; + usb_devreq* req = (usb_devreq*) &ctrlep.common.control_buffer[0]; + + // If this is confirmation that an ACK packet has been sent, complete the + // transaction. We also take the opportunity to update the device address + // here if required. + if (ctrlep.msg_state == CTRLEP_MSG_STATE_CTRL_ACK) { + if (req->request == USB_DEVREQ_SET_ADDRESS) { + TRACE_USB ("Setting USB device address = %d\n", (cyg_uint32) req->value_lo); + reg_val = CYGHWR_HAL_STM32_USB_DADDR_EF; + reg_val |= CYGHWR_HAL_STM32_USB_DADDR_ADD ((cyg_uint32) req->value_lo); + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_DADDR, reg_val); + stm32_usb_ctrl_update_state (USBS_STATE_ADDRESSED, USBS_STATE_CHANGE_ADDRESSED); + } + stm32_usb_ctrl_completed (ctrlep.txtr.status); + } + + // Complete after transmitting the output status handshake. + else if (ctrlep.msg_state == CTRLEP_MSG_STATE_OUT_STATUS) { + stm32_usb_ctrl_completed (ctrlep.txtr.status); + } + + // If all packets in an inbound transaction have been sent, wait for status + // response from the host. Called from DSR so is interrupt safe. + else if (ctrlep.msg_state == CTRLEP_MSG_STATE_IN_DATA) { + if (ctrlep.txtr.status == ENOERR) { + ctrlep.msg_state = CTRLEP_MSG_STATE_IN_STATUS; + ctrlep.rxtr.state = RXTR_STATE_IDLE; + ctrlep.rxtr.buf_ptr = ctrlep_msg_buffer; + ctrlep.rxtr.buf_size = 0; + stm32_usb_rxtr_start (&ctrlep.rxtr, true); + } + else { + stm32_usb_ctrl_completed (ctrlep.txtr.status); + } + } +} + +//----------------------------------------------------------------------------- +// Completion of control endpoint data receive phase. + +static inline void stm32_usb_ctrl_rxtr_done + (void) +{ + // If waiting for a status response, we should get a zero length packet. + if (ctrlep.msg_state == CTRLEP_MSG_STATE_IN_STATUS) { + stm32_usb_ctrl_completed (ctrlep.rxtr.status); + } + + // Handle conventional data packets. Incoming packets on endpoint 0 can + // be overwritten by setup packets. Called from DSR so is interrupt safe. + else if (ctrlep.msg_state == CTRLEP_MSG_STATE_OUT_DATA) { + if (ctrlep.rxtr.status == ENOERR) { + ctrlep.msg_state = CTRLEP_MSG_STATE_OUT_STATUS; + ctrlep.txtr.state = TXTR_STATE_IDLE; + ctrlep.txtr.buf_ptr = ctrlep_msg_buffer; + ctrlep.txtr.buf_size = 0; + stm32_usb_txtr_start (&ctrlep.txtr, true); + } + else { + stm32_usb_ctrl_completed (ctrlep.rxtr.status); + } + } +} + +//============================================================================= +// Implement ISRs for low level data transfer. +//============================================================================= + +//----------------------------------------------------------------------------- +// ISR for handling control endpoint interrupts. + +static inline cyg_bool stm32_usb_ctrlep_ISR + (void) +{ + cyg_bool completed; + cyg_bool call_dsr = false; + cyg_uint32 usb_epxr; + + // Process packet transmit events. + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EP0R, usb_epxr); + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRTX) { + stm32_usb_clear_epxr_bits (0, CYGHWR_HAL_STM32_USB_EPXR_CTRTX); + + completed = stm32_usb_txtr_run (&ctrlep.txtr); + if (completed) { + isr_shared.txtr_done |= (1 << 0); + call_dsr = true; + } + } + + // Deal with incoming setup packets. These are copied directly to the + // staging buffer in the ISR/DSR shared area for subsequent handling in + // DSR context. + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRRX) { + stm32_usb_clear_epxr_bits (0, CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_SETUP) { + stm32_usb_copy_from_sbuf (ctrlep.common.control_buffer, 8, 0); + isr_shared.flags |= ISR_FLAGS_SETUP_READY; + call_dsr = true; + } + + // Handle conventional incoming packets. + else { + completed = stm32_usb_rxtr_run (&ctrlep.rxtr); + if (completed) { + isr_shared.rxtr_done |= (1 << 0); + call_dsr = true; + } + } + } + return call_dsr; +} + +//----------------------------------------------------------------------------- +// ISR for handling transmit endpoint interrupts. + +static inline cyg_bool stm32_usb_txep_ISR + (cyg_uint32 txep_id) +{ + cyg_bool completed; + cyg_bool call_dsr = false; + cyg_uint32 usb_epxr; + txep_impl* txep = txep_list + txep_id - 1; + + // Receive events for a transmit endpoint are an error - discard them. + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (txep_id), usb_epxr); + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRRX) { + FAIL_USB ("Received RX interrupt for TX endpoint."); + stm32_usb_clear_epxr_bits (txep_id, CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + } + + // Handle transmit interrupt events. + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRTX) { + stm32_usb_clear_epxr_bits (txep_id, CYGHWR_HAL_STM32_USB_EPXR_CTRTX); + completed = stm32_usb_txtr_run (&txep->txtr); + if (completed) { + isr_shared.txtr_done |= (1 << txep_id); + call_dsr = true; + } + } + return call_dsr; +} + +//----------------------------------------------------------------------------- +// ISR for handling receive endpoint interrupts. + +static inline cyg_bool stm32_usb_rxep_ISR + (cyg_uint32 rxep_id) +{ + cyg_bool completed; + cyg_bool call_dsr = false; + cyg_uint32 usb_epxr; + rxep_impl* rxep = rxep_list + rxep_id - CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM - 1; + + // Transmit events for a receive endpoint are an error - discard them. + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_EPXR (rxep_id), usb_epxr); + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRTX) { + FAIL_USB ("Received TX interrupt for RX endpoint."); + stm32_usb_clear_epxr_bits (rxep_id, CYGHWR_HAL_STM32_USB_EPXR_CTRTX); + } + + // Handle receive interrupt events. + if (usb_epxr & CYGHWR_HAL_STM32_USB_EPXR_CTRRX) { + stm32_usb_clear_epxr_bits (rxep_id, CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + completed = stm32_usb_rxtr_run (&rxep->rxtr); + if (completed) { + isr_shared.rxtr_done |= (1 << rxep_id); + call_dsr = true; + } + } + return call_dsr; +} + +//----------------------------------------------------------------------------- +// Main ISR for handling interrupt events. The interrupt generation for the +// USB endpoints is a little strange, with endpoint interrupts effectively being +// queued through the same interrupt status register. Clearing the interrupt +// condition has the effect of popping an endpoint interrupt from the queue so +// that the next endpoint can be serviced. This means that serialising the +// interrupt processing between ISR and DSR would carry an unacceptable latency +// penalty - which is why we have to do the buffer copies within the ISR. + +static cyg_uint32 stm32_usb_ISR + (cyg_vector_t vector, cyg_addrword_t data) +{ + cyg_bool call_dsr = false; + cyg_uint32 usb_istr, ep_id; + cyg_uint32 ret_val = CYG_ISR_HANDLED; + + // Check for device interrupts first. + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_ISTR, usb_istr); + + // Detect reset event and hand it up to the DSR. Note that these will not + // be merged with other events for DSR processing. + if (usb_istr & CYGHWR_HAL_STM32_USB_ISTR_RESET) { + usb_istr &= ~((cyg_uint32) CYGHWR_HAL_STM32_USB_ISTR_RESET); + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_ISTR, usb_istr); + isr_shared.flags |= ISR_FLAGS_DEVICE_RESET; + call_dsr = true; + } + + // TODO: Support for suspend and wake events can be added here if required. + + // Check for endpoint interrupts. These are indicated by the CTR flag. + // The endpoint direction is inferred from the endpoint number, since + // transmit endpoints are enumerated before receive endpoints. + else while (usb_istr & CYGHWR_HAL_STM32_USB_ISTR_CTR) { + ep_id = usb_istr & CYGHWR_HAL_STM32_USB_ISTR_EPID_MASK; + + // Service the control endpoint. + if (ep_id == 0) + call_dsr |= stm32_usb_ctrlep_ISR (); + + // Service transmit endpoints. + else if (ep_id <= CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM) + call_dsr |= stm32_usb_txep_ISR (ep_id); + + // Service receive endpoints. + else if (ep_id < USB_EPNUM) + call_dsr |= stm32_usb_rxep_ISR (ep_id); + + // Invalid endpoint. Fail in debug, clear down in production builds. + else { + FAIL_USB ("Interrupt for invalid endpoint detected."); + stm32_usb_clear_epxr_bits (ep_id, + CYGHWR_HAL_STM32_USB_EPXR_CTRTX | CYGHWR_HAL_STM32_USB_EPXR_CTRRX); + } + + // Check for all endpoints having been serviced. + HAL_READ_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_ISTR, usb_istr); + } + + // If interrupt has been handled, acknowledge it and return. Leave the + // interrupt unmasked until the DSR is called, since intervening ISR calls + // will safely post their events to the event masks. + cyg_drv_interrupt_acknowledge (vector); + if (call_dsr) { + ret_val |= CYG_ISR_CALL_DSR; + } + return ret_val; +} + +//============================================================================= +// Implement DSRs for handling high-level interrupt responses. +//============================================================================= + +//----------------------------------------------------------------------------- +// Main DSR for high-level interrupt processing. Information about the +// interrupt conditions is passed up via the ISR shared data area. + +static void stm32_usb_DSR + (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + cyg_uint32 i; + + // Disable interrupts on entry to the DSR to avoid further events getting + // added to the event masks. + stm32_usb_request_intr_mask (); + + // Process device reset notifications. + if (isr_shared.flags & ISR_FLAGS_DEVICE_RESET) { + stm32_usb_ctrl_reset (); + } + + // Process control endpoint message transmit completions. + if (isr_shared.txtr_done & 1) { + stm32_usb_ctrl_txtr_done (); + } + + // Process control endpoint message receive completions. + if (isr_shared.rxtr_done & 1) { + stm32_usb_ctrl_rxtr_done (); + } + + // Process non-control endpoint message transmit completions. + if (isr_shared.txtr_done) { + for (i = 1; i < 8; i++) { + if (isr_shared.txtr_done & (1 << i)) { + txep_impl* txep = txep_list + i - 1; + int retval = (txep->txtr.status != ENOERR) ? -txep->txtr.status : txep->txtr.bytes_sent; + if (txep->common.complete_fn) + (*txep->common.complete_fn) (txep->common.complete_data, retval); + if (retval < 0) + TRACE_USB ("TX transaction failed (endpoint %d, status %d).\n", txep->txtr.ep_num, retval); + } + } + } + + // Process non-control endpoint message received completions. + if (isr_shared.rxtr_done) { + for (i = 1; i < 8; i++) { + if (isr_shared.rxtr_done & (1 << i)) { + rxep_impl* rxep = rxep_list + i - CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM - 1; + int retval = (rxep->rxtr.status != ENOERR) ? -rxep->rxtr.status : rxep->rxtr.bytes_rcvd; + if (rxep->common.complete_fn) + (*rxep->common.complete_fn) (rxep->common.complete_data, retval); + if (retval < 0) + TRACE_USB ("RX transaction failed (endpoint %d, status %d).\n", rxep->rxtr.ep_num, retval); + } + } + } + + // Process setup packets after ensuring that all outstanding EP0 completions + // associated with a previous setup transaction have been dealt with. + if (isr_shared.flags & ISR_FLAGS_SETUP_READY) { + stm32_usb_ctrl_setup_handler (); + } + + // Clear the ISR shared flags before unmasking the interrupt - they should + // all have been dealt with. + isr_shared.flags = ISR_FLAGS_CLEARED; + isr_shared.txtr_done = 0; + isr_shared.rxtr_done = 0; + + // Release the interrupt mask if possible. + stm32_usb_release_intr_mask (); +} + +//============================================================================= +// Provide standard USB driver API entry points. +//============================================================================= + +//----------------------------------------------------------------------------- +// API entry point for endpoint transmit requests. + +static void stm32_usb_tx_start + (usbs_tx_endpoint* usbs_txep) +{ + txep_impl* txep = (txep_impl*) usbs_txep; + txtr_impl* txtr = &txep->txtr; + cyg_int32 status = -EIO; + + // Check to see whether a transaction is in progress. + if (txtr->state != TXTR_STATE_IDLE) { + FAIL_USB ("Endpoint TX request when endpoint already busy."); + status = -EBUSY; + goto out; + } + + // Do a sanity check on the descriptor. + if (!txep->common.complete_fn) { + FAIL_USB ("Endpoint TX requires a completion function."); + goto out; + } + if (!txep->common.buffer) { + FAIL_USB ("Endpoint TX requires a valid transmit buffer."); + goto out; + } + if (stm32_usb_buf_get_size (txtr->ep_num) == 0) { + FAIL_USB ("TX request when endpoint buffers not allocated."); + goto out; + } + + // Attempt to start a transmit transaction and extract error status if it + // completes too early. This is not an interrupt safe call. + txtr->buf_ptr = txep->common.buffer; + txtr->buf_size = (cyg_uint32) txep->common.buffer_size; + if (stm32_usb_txtr_start (txtr, false)) + status = -txtr->status; + else + status = -ENOERR; + + // If the transaction failed to start, fire the completion handler. +out: + if ((status < 0) && (txep->common.complete_fn)) { + txep->common.complete_fn (txep->common.complete_data, status); + } +} + +//----------------------------------------------------------------------------- +// API entry point for endpoint receive requests. + +static void stm32_usb_rx_start + (usbs_rx_endpoint* usbs_rxep) +{ + rxep_impl* rxep = (rxep_impl*) usbs_rxep; + rxtr_impl* rxtr = &rxep->rxtr; + cyg_int32 status = -EIO; + + // Check to see whether a transaction is in progress. + if (rxtr->state != RXTR_STATE_IDLE) { + FAIL_USB ("Endpoint RX request when endpoint already busy."); + status = -EBUSY; + goto out; + } + + // Do a sanity check on the descriptor. + if (!rxep->common.complete_fn) { + FAIL_USB ("Endpoint RX requires a completion function."); + goto out; + } + if (!rxep->common.buffer) { + FAIL_USB ("Endpoint RX requires a valid receive buffer."); + goto out; + } + if (stm32_usb_buf_get_size (rxtr->ep_num) == 0) { + FAIL_USB ("RX request when endpoint buffers not allocated."); + goto out; + } + + // Attempt to start a receive transaction and extract error status if it + // completes too early. This is not an interrupt safe call. + rxtr->buf_ptr = rxep->common.buffer; + rxtr->buf_size = (cyg_uint32) rxep->common.buffer_size; + if (stm32_usb_rxtr_start (rxtr, false)) + status = -rxtr->status; + else + status = -ENOERR; + + // If the transaction failed to start, fire the completion handler. +out: + if ((status < 0) && (rxep->common.complete_fn)) { + rxep->common.complete_fn (rxep->common.complete_data, status); + } +} + +//----------------------------------------------------------------------------- +// API entry point for setting transmit endpoint halted state. + +static void stm32_usb_set_txep_halted + (usbs_tx_endpoint* txep, cyg_bool halted) +{ + if (halted) + stm32_usb_txep_halt ((txep_impl*) txep, false); + else + stm32_usb_txep_unhalt ((txep_impl*) txep, false); +} + +//----------------------------------------------------------------------------- +// API entry point for setting receive endpoint halted state. + +static void stm32_usb_set_rxep_halted + (usbs_rx_endpoint* rxep, cyg_bool halted) +{ + if (halted) + stm32_usb_rxep_halt ((rxep_impl*) rxep, false); + else + stm32_usb_rxep_unhalt ((rxep_impl*) rxep, false); +} + +//============================================================================= +// Initialise and reset the USB device. +//============================================================================= + +//----------------------------------------------------------------------------- +// One-time initialisation. This function is called during device startup +// in order to bring up the USB peripheral ready for operation. + +static void CYGBLD_ATTRIB_C_INIT_PRI(CYG_INIT_DEV_CHAR) cyg_usbs_cortexm_stm32_init + (void) +{ + cyg_uint32 reg_data; + + // First ensure that the APB bus is being clocked fast enough. + ASSERT_USB (APB1_FREQ > 8000000, "APB1 must be clocked faster than 8MHz."); + + // Check that the endpoint configuration is sane. + ASSERT_USB (CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM < 8, + "Too many hardware endpoints allocated in configuration."); + + // Make sure that the CAN controller is disabled and held in reset. + // TODO: If a CAN driver is to be added to the standard distribution, this + // should check for USB/CAN configuration clashes. + CYGHWR_HAL_STM32_CLOCK_DISABLE( CYGHWR_HAL_STM32_CAN1_CLOCK ); + + // Configure the IO pins for USB operation. + CYGHWR_HAL_STM32_GPIO_SET (USB_DISC_PIN); + CYGHWR_HAL_STM32_GPIO_SET (USB_DP_PIN); + CYGHWR_HAL_STM32_GPIO_SET (USB_DM_PIN); +#ifdef CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN_ACT_LOW + CYGHWR_HAL_STM32_GPIO_OUT (USB_DISC_PIN, 0); +#else + CYGHWR_HAL_STM32_GPIO_OUT (USB_DISC_PIN, 1); +#endif + + // Ensure that the USB clock is disabled prior to setting prescaler. + CYGHWR_HAL_STM32_CLOCK_DISABLE( CYGHWR_HAL_STM32_USB_CLOCK ); + + // Set up the USB 48MHz serial clock. There are only 2 valid prescaler + // settings which correspond to 72MHz and 48MHz PLL clock outputs. + HAL_READ_UINT32 (CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_CFGR, reg_data); +#if (PLL_FREQ == 72000000) + reg_data &= ~((cyg_uint32) CYGHWR_HAL_STM32_RCC_CFGR_USBPRE); +#elif (PLL_FREQ == 48000000) + reg_data |= CYGHWR_HAL_STM32_RCC_CFGR_USBPRE; +#else +#error "SMT32 PLL clock must be set to 48MHz or 72MHz for correct USB operation." +#endif + HAL_WRITE_UINT32 (CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_CFGR, reg_data); + + // Activate the USB clock after setting prescaler. + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_USB_CLOCK ); + + // Take USB transceiver out of powerdown state, but leave it in reset until we + // are ready to start. Leave interrupts disabled at source. + reg_data = CYGHWR_HAL_STM32_USB_CNTR_FRES; + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_CNTR, reg_data); + CYGACC_CALL_IF_DELAY_US (USB_TSTARTUP); + + // Initialise interrupt mask request counter. + interrupt_mask_count = 0; + + // Attach USB interrupts. Everything is done via the standard interrupt - the + // high priority interrupt is not used. + cyg_drv_interrupt_mask (CYGNUM_HAL_INTERRUPT_USB_HP); + cyg_drv_interrupt_create (CYGNUM_HAL_INTERRUPT_USB_LP, CYGNUM_DEVS_USB_CORTEXM_STM32_ISR_PRIORITY, + 0, stm32_usb_ISR, stm32_usb_DSR, &interrupt_handle, &interrupt_data); + cyg_drv_interrupt_attach (interrupt_handle); +} + +//----------------------------------------------------------------------------- +// Device endpoint 0 startup. This function is called once the application +// code has set up the desired USB control endpoint configuration. + +static void stm32_usb_start + (usbs_control_endpoint* endpoint) +{ + cyg_uint32 i; + txep_impl* txep = txep_list; + rxep_impl* rxep = rxep_list; + + // Fill in the generic endpoint data structures. + for (i = 0; i < CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM; i++) { + txep->common.start_tx_fn = stm32_usb_tx_start; + txep->common.set_halted_fn = stm32_usb_set_txep_halted; + txep->common.halted = true; + txep->txtr.state = TXTR_STATE_RESET; + txep->txtr.ep_num = i + 1; + txep++; + } + for (i = 0; i < CYGNUM_DEVS_USB_CORTEXM_STM32_RXEP_NUM; i++) { + rxep->common.start_rx_fn = stm32_usb_rx_start; + rxep->common.set_halted_fn = stm32_usb_set_rxep_halted; + rxep->common.halted = true; + rxep->rxtr.state = RXTR_STATE_RESET; + rxep->rxtr.ep_num = i + CYGNUM_DEVS_USB_CORTEXM_STM32_TXEP_NUM + 1; + rxep++; + } + + // Take the USB driver out of reset and cancel any spurious interrupts. + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_CNTR, 0); + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_ISTR, 0); + + // Enable interrupts at source. + HAL_WRITE_UINT32 (USB_BASE + CYGHWR_HAL_STM32_USB_CNTR, + CYGHWR_HAL_STM32_USB_CNTR_CTRM | CYGHWR_HAL_STM32_USB_CNTR_RESETM); + + // Reconnect the device to the USB bus if required. +#ifdef CYGHWR_DEVS_USB_CORTEXM_STM32_DISC_PIN_ACT_LOW + CYGHWR_HAL_STM32_GPIO_OUT (USB_DISC_PIN, 1); +#else + CYGHWR_HAL_STM32_GPIO_OUT (USB_DISC_PIN, 0); +#endif + stm32_usb_ctrl_update_state (USBS_STATE_POWERED, USBS_STATE_CHANGE_POWERED); + + // Allow interrupts to run - the bus reset must be driven by the host. + cyg_drv_interrupt_unmask (CYGNUM_HAL_INTERRUPT_USB_LP); +} + +//----------------------------------------------------------------------------- +// Device endpoint 0 poll. Polled operation just calls the ISR followed by +// the DSR. TODO: Polled operation needs further testing. + +static void stm32_usb_poll + (usbs_control_endpoint* endpoint) +{ + cyg_uint32 isr_retval; + isr_retval = stm32_usb_ISR (CYGNUM_HAL_INTERRUPT_USB_LP, 0); + if (isr_retval & CYG_ISR_CALL_DSR) + stm32_usb_DSR (CYGNUM_HAL_INTERRUPT_USB_LP, 1, 0); +} + +//----------------------------------------------------------------------------- +// Get a handle on the specified transmit (in) endpoint. + +static usbs_tx_endpoint* stm32_usb_get_txep + (usbs_control_endpoint* control_endpoint, cyg_uint8 ep_id) +{ + txep_impl* txep = NULL; + + // Map from endpoint ID to physical endpoint. + if (ep_id > 0 && ep_id < 16) + txep = txep_map [ep_id - 1]; + + // Return endpoint handle or null pointer for invalid endpoint. + if (txep == NULL) { + FAIL_USB ("Invalid endpoint ID when accessing transmit (in) endpoint."); + return NULL; + } + return (usbs_tx_endpoint*) txep; +} + +//----------------------------------------------------------------------------- +// Get a handle on the specified receive (out) endpoint. + +static usbs_rx_endpoint* stm32_usb_get_rxep + (usbs_control_endpoint* control_endpoint, cyg_uint8 ep_id) +{ + rxep_impl* rxep = NULL; + + // Map from endpoint ID to physical endpoint. + if (ep_id > 0 && ep_id < 16) + rxep = rxep_map [ep_id - 1]; + + // Return endpoint handle or null pointer for invalid endpoint. + if (rxep == NULL) { + FAIL_USB ("Invalid endpoint ID when accessing receive (out) endpoint."); + return NULL; + } + return (usbs_rx_endpoint*) rxep; +} + +//============================================================================= +// Instantiate the test endpoint data structures if required. This creates a +// single endpoint of each supported type - bulk transmit, bulk receive, +// interrupt transmit and interrupt receive. +//============================================================================= + +#ifdef CYGBLD_IO_USB_SLAVE_USBTEST + +usbs_testing_endpoint usbs_testing_endpoints[] = { + + { // Control endpoint. + endpoint_type : USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL, + endpoint_number : 0, + endpoint_direction : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN, + endpoint : (void*) &ctrlep, + devtab_entry : 0, + min_size : 1, + max_size : CYGNUM_DEVS_USB_CORTEXM_STM32_EPO_MAX_MSG_SIZE, + max_in_padding : 0, + alignment : 0 + }, + + { // Bulk transmit (input) endpoint. + endpoint_type : USB_ENDPOINT_DESCRIPTOR_ATTR_BULK, + endpoint_number : 1, + endpoint_direction : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN, + endpoint : (void*) &txep_list[0], + devtab_entry : 0, + min_size : 0, + max_size : 0x1000, // 4k max for testing. + max_in_padding : 0, + alignment : 0 + }, + + { // Bulk receive (output) endpoint. + endpoint_type : USB_ENDPOINT_DESCRIPTOR_ATTR_BULK, + endpoint_number : 2, + endpoint_direction : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT, + endpoint : (void*) &rxep_list[0], + devtab_entry : 0, + min_size : 0, + max_size : 0x1000, // 4k max for testing. + max_in_padding : 0, + alignment : 0 + }, + + { // Interrupt transmit (input) endpoint + endpoint_type : USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT, + endpoint_number : 3, + endpoint_direction : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN, + endpoint : (void*) &txep_list[1], + devtab_entry : 0, + min_size : 0, + max_size : 8, // Maximum for low speed devices. + max_in_padding : 0, + alignment : 0 + }, + + { // Interrupt receive (output) endpoint. + endpoint_type : USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT, + endpoint_number : 4, + endpoint_direction : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT, + endpoint : (void*) &rxep_list[1], + devtab_entry : 0, + min_size : 0, + max_size : 8, // Maximum for low speed devices. + max_in_padding : 0, + alignment : 0 + }, + + USBS_TESTING_ENDPOINTS_TERMINATOR +}; + +#endif + +//============================================================================= diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog b/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog --- a/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog +++ b/packages/devs/wallclock/arm/lpc2xxx/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-15 Ilija Kocho + + * cdl/lpc2xxx_wallclock.cdl: + * src/lpc2xxx_wallclock.cxx: Added support for LPC17XX CPUs. + 2008-11-01 Uwe Kindler * cdl/lpc2xxx_wallclock.cdl: Moved CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl b/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl --- a/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl +++ b/packages/devs/wallclock/arm/lpc2xxx/current/cdl/lpc2xxx_wallclock.cdl @@ -2,7 +2,7 @@ # # lpc2xxx_wallclock.cdl # -# eCos configuration data for LPC2xxx internal RTC +# eCos configuration data for LPC2xxx, LPC17xx internal RTC # # ==================================================================== ## ####ECOSGPLCOPYRIGHTBEGIN#### @@ -40,7 +40,7 @@ ######DESCRIPTIONBEGIN#### # # Author(s): Hans Rosenfeld -# Contributors: jskov +# Contributors: jskov, ilijak # Date: 2007-06-19 # #####DESCRIPTIONEND#### @@ -48,12 +48,13 @@ # ==================================================================== cdl_package CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX { - display "LPC2xxx Real-time clock" - description "RTC driver for the LPC2xxx controller" + display "Real-time clock" + description "RTC driver for the LPC2XXX, LPC17XX CPUs" parent CYGPKG_IO_WALLCLOCK active_if CYGPKG_IO_WALLCLOCK - active_if CYGPKG_HAL_ARM_LPC2XXX || CYGPKG_HAL_ARM_LPC24XX + active_if { CYGPKG_HAL_ARM_LPC2XXX || CYGPKG_HAL_ARM_LPC24XX || + CYGPKG_HAL_CORTEXM_LPC17XX } requires { CYGHWR_HAL_ARM_LPC2XXX_IDLE_PWRSAVE == 0 } compile lpc2xxx_wallclock.cxx diff --git a/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx b/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx --- a/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx +++ b/packages/devs/wallclock/arm/lpc2xxx/current/src/lpc2xxx_wallclock.cxx @@ -2,7 +2,7 @@ // // lpc2xxx_wallclock.cxx // -// Wallclock implementation for LPC2xxx and LPC24xxx +// Wallclock implementation for LPC2xxx and LPC17xx CPUs // //========================================================================== // ####ECOSGPLCOPYRIGHTBEGIN#### @@ -40,9 +40,9 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): Hans Rosenfeld -// Contributors: Uwe Kindler ccr = 0x2; rtc->ciir = 0x0; rtc->amr = 0xf; - + // initialize prescaler - if the RTC id driven by an external 32.768 crystal // clock then initializing the prescaler is not required but writing the // registers here should not cause any trouble +#ifndef CYGHWR_HAL_LPC_RTC_32768HZ rtc->preint = CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREINT; rtc->prefrac = CYGNUM_HAL_ARM_LPC2XXX_RTCDEV_PREFRAC; - +#endif + #ifndef CYGSEM_WALLCLOCK_SET_GET_MODE /* reset time to the Unix Epoch */ rtc->time.year = 1970; @@ -142,12 +146,12 @@ Cyg_WallClock::init_hw_seconds(void) rtc->time.min = 0; rtc->time.sec = 0; #endif - + /* reset alarm */ rtc->alarm.year = rtc->alarm.month = rtc->alarm.dom = rtc->alarm.doy = - rtc->alarm.dow = rtc->alarm.hour = rtc->alarm.min = + rtc->alarm.dow = rtc->alarm.hour = rtc->alarm.min = rtc->alarm.sec = 0; - + /* start clock */ rtc->ccr = 0x1; } @@ -168,10 +172,10 @@ void Cyg_WallClock::set_hw_seconds(cyg_uint32 secs) { cyg_uint32 year, month, dom, hour, min, sec; - + /* halt clock, reset counter */ rtc->ccr = 0x2; - + /* set time */ _simple_mkdate(secs, &year, &month, &dom, &hour, &min, &sec); rtc->time.year = year; @@ -180,8 +184,11 @@ Cyg_WallClock::set_hw_seconds(cyg_uint32 rtc->time.hour = hour; rtc->time.min = min; rtc->time.sec = sec; - + /* restart clock */ rtc->ccr = 0x1; } -#endif +#endif // CYGSEM_WALLCLOCK_SET_GET_MODE + +//========================================================================== +// EOF lpc2xxx_wallclock.cxx diff --git a/packages/devs/wallclock/cortexm/stm32/current/ChangeLog b/packages/devs/wallclock/cortexm/stm32/current/ChangeLog --- a/packages/devs/wallclock/cortexm/stm32/current/ChangeLog +++ b/packages/devs/wallclock/cortexm/stm32/current/ChangeLog @@ -1,3 +1,13 @@ +2012-01-19 Jonathan Larmour + + * cdl/wallclock_stm32.cdl: Ensure this driver is only active for F1 + parts. + +2009-06-29 Nick Garnett + + * src/stm32_wallclock.cxx (Cyg_WallClock::init_hw_seconds): Add + enables for clocks of devices used by this device. + 2008-11-12 Simon Kallweit * src/stm32_wallclock.cxx: Using new CYGHWR_HAL_STM32_BD_PROTECT diff --git a/packages/devs/wallclock/cortexm/stm32/current/cdl/wallclock_stm32.cdl b/packages/devs/wallclock/cortexm/stm32/current/cdl/wallclock_stm32.cdl --- a/packages/devs/wallclock/cortexm/stm32/current/cdl/wallclock_stm32.cdl +++ b/packages/devs/wallclock/cortexm/stm32/current/cdl/wallclock_stm32.cdl @@ -50,12 +50,12 @@ cdl_package CYGPKG_DEVS_WALLCLOCK_STM32 { display "STM32 RTC wallclock support" description " - Wallclock support for on-chip RTC on STM32 devices.driver for the - STM32 controller and compatibles" + Wallclock support for on-chip RTC on STM32 devices." parent CYGPKG_IO_WALLCLOCK active_if CYGPKG_IO_WALLCLOCK active_if CYGPKG_HAL_CORTEXM_STM32 + active_if { CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1" } compile stm32_wallclock.cxx @@ -77,3 +77,5 @@ cdl_package CYGPKG_DEVS_WALLCLOCK_STM32 legal_values { "LSE" "LSI" "HSE_128" } } } + +# End of wallclock_stm32.cdl diff --git a/packages/devs/wallclock/cortexm/stm32/current/src/stm32_wallclock.cxx b/packages/devs/wallclock/cortexm/stm32/current/src/stm32_wallclock.cxx --- a/packages/devs/wallclock/cortexm/stm32/current/src/stm32_wallclock.cxx +++ b/packages/devs/wallclock/cortexm/stm32/current/src/stm32_wallclock.cxx @@ -129,6 +129,10 @@ Cyg_WallClock::init_hw_seconds(void) cyg_uint32 bdcr, csr; cyg_uint32 prescaler = CYGHWR_DEVS_WALLCLOCK_STM32_CLOCK - 1; + // Enable backup domain and power control + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_CLOCK_BKP ); + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_CLOCK_PWR ); + // Reset the backup domain if clock source does not match as // RTCSEL can only be written to backup domain once HAL_READ_UINT32( rcc+CYGHWR_HAL_STM32_RCC_BDCR, bdcr ); diff --git a/packages/devs/wallclock/freescale/kinetis/current/ChangeLog b/packages/devs/wallclock/freescale/kinetis/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/freescale/kinetis/current/ChangeLog @@ -0,0 +1,29 @@ +2011-04-24 Ilija Kocho + + * cdl/wallclock_kinetis_rtc.cdl: + * src/wallclock_kinetis_rtc.cxx: + New wallclock driver + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/wallclock/freescale/kinetis/current/cdl/wallclock_kinetis_rtc.cdl b/packages/devs/wallclock/freescale/kinetis/current/cdl/wallclock_kinetis_rtc.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/freescale/kinetis/current/cdl/wallclock_kinetis_rtc.cdl @@ -0,0 +1,70 @@ +# ==================================================================== +# +# wallclock_kinetis_rtc.cdl +# +# eCos configuration data for Kinetis RTC +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ilijak +# Contributors: +# Date: 2011-04-23 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC { + display "Real-time clock" + + description "Driver for the Kinetis RTC" + + parent CYGPKG_IO_WALLCLOCK + active_if CYGPKG_IO_WALLCLOCK + + compile wallclock_kinetis_rtc.cxx + + implements CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + active_if CYGIMP_WALLCLOCK_HARDWARE + implements CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED + + cdl_option CYGIMP_WALLCLOCK_HARDWARE { + parent CYGPKG_IO_WALLCLOCK_IMPLEMENTATION + display "Hardware wallclock" + default_value 1 + implements CYGINT_WALLCLOCK_IMPLEMENTATIONS + } +} diff --git a/packages/devs/wallclock/freescale/kinetis/current/src/wallclock_kinetis_rtc.cxx b/packages/devs/wallclock/freescale/kinetis/current/src/wallclock_kinetis_rtc.cxx new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/freescale/kinetis/current/src/wallclock_kinetis_rtc.cxx @@ -0,0 +1,105 @@ +//========================================================================== +// +// wallclock_kinetis_rtc.cxx +// +// Wallclock implementation for Kinetis RTC module +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-04-23 +// Purpose: Wallclock driver for Kinetis RTC module +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include +#include +#include + +#include + +void +Cyg_WallClock::init_hw_seconds(void) +{ + volatile cyghwr_hal_kinetis_rtc_t *rtc_p = CYGHWR_HAL_KINETIS_RTC_P; +#ifdef CYGSEM_WALLCLOCK_SET_GET_MODE + // if RTC is disabled (e.g. due to power loss) initialize it. + if(!(rtc_p->sr &CYGHWR_HAL_KINETIS_RTC_SR_TCE)) +#endif + { + // halt clock, reset + rtc_p->sr &= ~CYGHWR_HAL_KINETIS_RTC_SR_TCE; + // set time + rtc_p->tpr = 0; + rtc_p->tsr = 0; + // restart clock + rtc_p->sr |= CYGHWR_HAL_KINETIS_RTC_SR_TCE; + } +} + +cyg_uint32 +Cyg_WallClock::get_hw_seconds(void) +{ + volatile cyghwr_hal_kinetis_rtc_t *rtc_p = CYGHWR_HAL_KINETIS_RTC_P; + + return rtc_p->tsr; +} + +#ifdef CYGSEM_WALLCLOCK_SET_GET_MODE +void +Cyg_WallClock::set_hw_seconds(cyg_uint32 secs) +{ + volatile cyghwr_hal_kinetis_rtc_t *rtc_p = CYGHWR_HAL_KINETIS_RTC_P; + + // halt clock, reset + rtc_p->sr &= ~CYGHWR_HAL_KINETIS_RTC_SR_TCE; + // set time + rtc_p->tpr = 0; + rtc_p->tsr = secs; + // restart clock + rtc_p->sr |= CYGHWR_HAL_KINETIS_RTC_SR_TCE; +} +#endif // CYGSEM_WALLCLOCK_SET_GET_MODE + +//========================================================================== +// EOF wallclock_kinetis_rtc.cxx diff --git a/packages/ecos.db b/packages/ecos.db --- a/packages/ecos.db +++ b/packages/ecos.db @@ -1,6976 +1,7629 @@ -#============================================================================= -# -# ecos.db -# -# This file is a temporary database for eCos package information. -# It replaces the old packages and targets files, and will in turn -# be subsumed by another file containing more inormation. -# -#============================================================================= -## ####ECOSGPLCOPYRIGHTBEGIN#### -## ------------------------------------------- -## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2008, 2009 Free Software Foundation, Inc. -## -## eCos is free software; you can redistribute it and/or modify it under -## the terms of the GNU General Public License as published by the Free -## Software Foundation; either version 2 or (at your option) any later -## version. -## -## eCos 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 General Public License -## for more details. -## -## You should have received a copy of the GNU General Public License -## along with eCos; if not, write to the Free Software Foundation, Inc., -## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -## -## As a special exception, if other files instantiate templates or use -## macros or inline functions from this file, or you compile this file -## and link it with other works to produce a work based on this file, -## this file does not by itself cause the resulting work to be covered by -## the GNU General Public License. However the source code for this file -## must still be made available in accordance with section (3) of the GNU -## General Public License v2. -## -## This exception does not invalidate any other reasons why a work based -## on this file might be covered by the GNU General Public License. -## ------------------------------------------- -## ####ECOSGPLCOPYRIGHTEND#### -#============================================================================= -######DESCRIPTIONBEGIN#### -# -# Author(s): bartv -# Date: 1999-06-13 -# -# This file contains three lots of information. It details the packages -# in the component repository, the target boards supported by those -# packages, and a set of templates that can be used to instantiate -# configuration. -# -#####DESCRIPTIONEND#### -#=============================================================================== - -package CYGPKG_HAL { - alias { "eCos common HAL" hal hal_common } - directory hal/common - script hal.cdl - description " -The eCos HAL package provide a porting layer for higher-level parts of -the system such as the kernel and the C library. Each installation -should have HAL packages for one or more architectures, and for each -architecture there may be one or more supported platforms. It is -necessary to select one target architecture and one platform for that -architecture. There are also a number of configuration options that -are common to all HAL packages." -} - -package CYGPKG_INFRA { - alias { Infrastructure infra } - directory infra - script infra.cdl - description " -Common types and useful macros. -Tracing and assertion facilities. -Package startup options." -} - -package CYGPKG_IO { - alias { "I/O sub-system" io } - directory io/common - script io.cdl - description " - The eCos system is supplied with a number of different - device drivers. This package contains the basic I/O system - support which is the basis for all drivers." -} - -package CYGPKG_IO_SERIAL { - alias { "Serial device drivers" serial io_serial } - directory io/serial - script io_serial.cdl - description " - This package contains drivers for basic I/O services on - serial devices." -} - -package CYGPKG_IO_CAN { - alias { "CAN device drivers" can io_can } - directory io/can - script io_can.cdl - description " - This package contains drivers for basic I/O services on - CAN devices." -} - -package CYGPKG_DEVS_CAN_MCF52xx_FLEXCAN { - alias { "MCF52xx FlexCAN device drivers" - devs_can_mcf52xx_flexcan mcf52xx_flexcan_serial_driver } - hardware - directory devs/can/m68k/mcf52xx - script can_mcf52xx.cdl - description "Generic CAN device driver for the on-chip - FlexCAN modules in MCF52xx ColdFire processors." -} - -package CYGPKG_DEVS_CAN_AT91SAM7 { - alias { "AT91SAM7 CAN device drivers" - devs_can_at91sam7 at91sam7_can_driver } - hardware - directory devs/can/arm/at91/at91sam7 - script can_at91sam7.cdl - description "Atmel AT91SAM7 on-chip CAN device driver." -} - -package CYGPKG_DEVS_CAN_LPC2XXX { - alias { "LPC2xxx CAN device drivers" - devs_can_lpc2xxx lpc2xxx_can_driver } - hardware - directory devs/can/arm/lpc2xxx - script can_lpc2xxx.cdl - description "LPC2xxx on-chip CAN device driver." -} - -package CYGPKG_DEVS_CAN_LOOP { - alias { "Loop CAN device drivers" - devs_can_loop loop_can_driver } - directory devs/can/loop - script can_loop.cdl - description "Loopback CAN device driver." -} - - -package CYGPKG_IO_PCMCIA { - alias { "PCMCIA & Compact Flash support" pcmcia io_pcmcia cf } - directory io/pcmcia - script io_pcmcia.cdl - description " - This package contains basic card services support for PCMCIA - and Compact Flash devices." -} - -package CYGPKG_DEVS_PCMCIA_ASSABET { - alias { "SA11x0/Assabet PCMCIA & Compact Flash support" pcmcia_assabet assabet_pcmcia assabet_cf io_assabet_pcmcia} - directory devs/pcmcia/arm/assabet - script pcmcia_assabet.cdl - hardware - description " - This package contains hardware support for PCMCIA - and Compact Flash devices on the SA11x0/Assabet board." -} - -package CYGPKG_DEVS_PCMCIA_CERF { - alias { "SA11x0/Cerf PCMCIA & Compact Flash support" pcmcia_cerf cerf_pcmcia cerf_cf io_cerf_pcmcia} - directory devs/pcmcia/arm/cerf - script pcmcia_cerf.cdl - hardware - description " - This package contains hardware support for PCMCIA - and Compact Flash devices on the SA11x0/Cerf board." -} - -package CYGPKG_DEVS_PCMCIA_CERFPDA { - alias { "SA11x0/Cerfpda PCMCIA & Compact Flash support" pcmcia_cerfpda cerfpda_pcmcia cerfpda_cf io_cerfpda_pcmcia} - directory devs/pcmcia/arm/cerfpda - script pcmcia_cerfpda.cdl - hardware - description " - This package contains hardware support for PCMCIA - and Compact Flash devices on the SA11x0/Cerfpda." -} - -package CYGPKG_DEVS_PCMCIA_IPAQ { - alias { "SA11x0/iPAQ PCMCIA & Compact Flash support" pcmcia_ipaq ipaq_pcmcia ipaq_cf io_ipaq_pcmcia} - directory devs/pcmcia/arm/ipaq - script pcmcia_ipaq.cdl - hardware - description " - This package contains hardware support for PCMCIA - and Compact Flash devices on the Compaq iPAQ pocket PC." -} - -package CYGPKG_IO_FLASH { - alias { "Generic FLASH memory support" flash } - directory io/flash - script io_flash.cdl - description " - This package contains generic support for FLASH memory." -} - -package CYGPKG_DEVS_FLASH_ARM_AAED2000 { - alias { "Support for flash memory on Agilent AAED2000 board" flash_aaed2000 } - directory devs/flash/arm/aaed2000 - script flash_arm_aaed2000.cdl - hardware - description " - This package contains hardware support for flash memory - on the Agilent AAED2000 platform." -} - -package CYGPKG_DEVS_FLASH_AMD_AM29XXXXX { - alias { "Support for AMD AM29xxxxx flash memory (deprecated)" flash_amd_am29xxxxx } - directory devs/flash/amd/am29xxxxx - script flash_amd_am29xxxxx.cdl - hardware - description " - This package contains hardware support for AMD AM29xxxxx - flash memory devices." -} - -package CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 { - alias { "Support for AMD AM29xxxxx flash memory" flash_amd_am29xxxxx_v2 } - directory devs/flash/amd/am29xxxxxv2 - script flash_am29xxxxx_v2.cdl - hardware - description " - This package contains hardware support for AMD AM29xxxxx - flash memory devices." -} - -package CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX { - alias { "Support for Atmel AT29Cxxxx flash memory" flash_atmel_at29cxxxx } - directory devs/flash/atmel/at29cxxxx - script flash_atmel_at29cxxxx.cdl - hardware - description " - This package contains hardware support for Atmel AT29Cxxxx - flash memory devices." -} - -package CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX { - alias { "Support for Atmel AT49xxxx flash memory" flash_atmel_at49xxxx } - directory devs/flash/atmel/at49xxxx - script flash_atmel_at49xxxx.cdl - hardware - description " - This package contains hardware support for Atmel AT49xxxx - flash memory devices." -} - -package CYGPKG_DEVS_FLASH_ATMEL_DATAFLASH { - alias { "Atmel DataFlash support" flash_dataflash dataflash } - directory devs/flash/atmel/dataflash - script devs_flash_atmel_dataflash.cdl - hardware - description "This package contains hardware support for Atmel DataFlash." -} - -package CYGPKG_DEVS_FLASH_SPI_M25PXX { - alias { "M25Pxx SPI Flash" flash_spi_m25pxx } - directory devs/flash/spi/m25pxx - script flash_m25pxx.cdl - hardware - description " - Support for M25Pxx SPI flash devices." -} - -package CYGPKG_DEVS_FLASH_ARM_PID { - alias { "Support for flash memory on ARM/PID board" flash_arm_pid } - directory devs/flash/arm/pid - script flash_arm_pid.cdl - hardware - description " - This package contains hardware support for flash memory - on the ARM PID platform." -} - -package CYGPKG_DEVS_FLASH_ARM_E7T { - alias { "FLASH memory support for the ARM Evaluator-7T" flash_e7t } - directory devs/flash/arm/e7t - script flash_e7t.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the ARM Evaluator-7T platform." -} - -package CYGPKG_DEVS_FLASH_EA2468 { - alias { "FLASH memory support for EA LPC2468 OEM board" flash_ea2468 } - directory devs/flash/arm/ea2468 - script flash_ea2468.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Embedded Artists LCP2468 OEM board." -} - -package CYGPKG_DEVS_FLASH_SH_EDK7708 { - alias { "Support for flash memory on Hitachi/EDK7708 board" flash_sh_edk7708 } - directory devs/flash/sh/edk7708 - script flash_sh_edk7708.cdl - hardware - description " - This package contains hardware support for flash memory - on the Hitachi EDK7708 platform." -} - -package CYGPKG_DEVS_FLASH_CQ7750 { - alias { "Support for flash memory on CqREEK SH7750 board" flash_cq7750 } - directory devs/flash/sh/cq7750 - script flash_cq7750.cdl - hardware - description " - This package contains hardware support for flash memory - on the CqREEK SH7750 platform." -} - -package CYGPKG_DEVS_FLASH_MIPS_OCELOT { - alias { "Support for flash memory on PMC-Sierra/Ocelot board" flash_qed_ocelot } - directory devs/flash/mips/ocelot - script flash_mips_ocelot.cdl - hardware - description " - This package contains hardware support for flash memory - on the PMC-Sierra Ocelot platform." -} - -package CYGPKG_DEVS_FLASH_MIPS_VRC437X { - alias { "Support for flash memory on VRC437X boards" flash_vrc437x } - directory devs/flash/mips/vrc437x - script flash_mips_vrc437x.cdl - hardware - description " - This package contains hardware support for flash memory - on the VRC437X platform." -} - -package CYGPKG_DEVS_FLASH_MIPS_REFIDT334 { - alias { "MIPS IDT 79RC32334 reference platform flash support" flash_refidt334 } - directory devs/flash/mips/idt79s334a - script flash_mips_refidt334.cdl - hardware - description " - This package contains hardware support for flash memory - on the IDT MIPS 334a reference platform." -} - -package CYGPKG_DEVS_FLASH_SH_HS7729PCI { - alias { "Hitachi SH/HS7729PCI FLASH memory support" flash_hs7729pci } - directory devs/flash/sh/hs7729pci - script flash_sh_hs7729pci.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Hitachi/HS7729PCI platform." -} - -package CYGPKG_DEVS_FLASH_SH_SE77X9 { - alias { "Hitachi SH/SE77X9 FLASH memory support" flash_se77x9 } - directory devs/flash/sh/se77x9 - script flash_sh_se77x9.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Hitachi/SE77X9 platform." -} - -package CYGPKG_DEVS_FLASH_SH_SE7751 { - alias { "Hitachi SH/SE7751 FLASH memory support" flash_se7751 } - directory devs/flash/sh/se7751 - script flash_sh_se7751.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Hitachi/SE7751 platform." -} - -package CYGPKG_DEVS_FLASH_SH_MICRODEV { - alias { "SuperH SH4-202 MicroDev CPU board FLASH memory support" flash_microdev } - directory devs/flash/sh/microdev - script flash_microdev.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the SuperH SH4-202 MicroDev CPU board platform." -} - -package CYGPKG_DEVS_FLASH_EBSA285 { - alias { "FLASH memory support for StrongARM EBSA-285" flash_ebsa285 } - directory devs/flash/arm/ebsa285 - script flash_ebsa285.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the StrongARM EBSA-285 platform." -} - -package CYGPKG_DEVS_FLASH_SA1100MM { - alias { "FLASH memory support for StrongARM SA1100 Multimedia" flash_sa1100mm } - directory devs/flash/arm/sa1100mm - script flash_sa1100mm.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the StrongARM SA1100 Multimedia platform." -} - -package CYGPKG_DEVS_FLASH_EDB7XXX { - alias { "FLASH support for Cirrus Logic EP7xxx based boards" flash_edb7xxx } - directory devs/flash/arm/edb7xxx - script flash_edb7xxx.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Cirrus Logic EP7xxx based platform(s)." -} - -package CYGPKG_DEVS_FLASH_AT91 { - alias { "FLASH memory support for Atmel AT91 EFC" flash_at91 } - directory devs/flash/arm/at91 - script flash_at91.cdl - hardware - description " - This package contains hardware support for Embedded FLASH - controller as found in the AT91SAM7S platform" -} - -package CYGPKG_DEVS_FLASH_EB40 { - alias { "FLASH memory support for Atmel AT91/EB40" flash_eb40 } - directory devs/flash/arm/eb40 - script flash_eb40.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Atmel AT91/EB40 platform(s)." -} - -package CYGPKG_DEVS_FLASH_EB40A { - alias { "FLASH memory support for Atmel AT91/EB40A" flash_eb40a } - directory devs/flash/arm/eb40a - script flash_eb40a.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Atmel AT91/EB40A platform(s)." -} - -package CYGPKG_DEVS_FLASH_EB42 { - alias { "FLASH memory support for Atmel AT91/EB42" flash_eb42 } - directory devs/flash/arm/eb42 - script flash_eb42.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Atmel AT91/EB42 platform(s)." -} - -package CYGPKG_DEVS_FLASH_EB55 { - alias { "FLASH memory support for Atmel AT91/EB55" flash_eb55 } - directory devs/flash/arm/eb55 - script flash_eb55.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Atmel AT91/EB55 platform(s)." -} - -package CYGPKG_DEVS_FLASH_JTST { - alias { "FLASH memory support for Atmel JTST" flash_jtst } - directory devs/flash/arm/jtst - script flash_jtst.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Atmel JTST platform(s)." -} - -package CYGPKG_DEVS_FLASH_PHYCORE { - alias { "FLASH memory support for PHYTEC phyCORE AT91M55800A" flash_phycore } - directory devs/flash/arm/phycore - script flash_phycore.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the PHYTEC phyCORE AT91M55800A platform(s)." -} - -package CYGPKG_DEVS_FLASH_PHYCORE229X { - alias { "FLASH memory support for Phytec phyCORE-LPC229x" flash_phycore229x } - directory devs/flash/arm/phycore229x - script flash_phycore229x.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Phytec phyCORE-LPC229x platform(s)." -} - -package CYGPKG_DEVS_FLASH_ASSABET { - alias { "FLASH memory support for Intel SA1110 (Assabet)" flash_assabet } - directory devs/flash/arm/assabet - script flash_assabet.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Intel StrongARM SA-1110 Assabet platform." -} - -package CYGPKG_DEVS_FLASH_CERF { - alias { "FLASH memory support for Intrinsyc SA1110 (Cerf)" flash_cerf } - directory devs/flash/arm/cerf - script flash_cerf.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Intrinsyc SA1110 Cerf board." -} - -package CYGPKG_DEVS_FLASH_CERFPDA { - alias { "FLASH memory support for Intrinsyc SA1110 (Cerfpda)" flash_cerfpda } - directory devs/flash/arm/cerfpda - script flash_cerfpda.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Intrinsyc SA1110 Cerfpda." -} - -package CYGPKG_DEVS_FLASH_IPAQ { - alias { "FLASH memory support for Intel SA1110 (Ipaq)" flash_ipaq } - directory devs/flash/arm/ipaq - script flash_ipaq.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Intel StrongARM SA-1110 iPAQ platform." -} - -package CYGPKG_DEVS_FLASH_FLEXANET { - alias { "FLASH memory support for Flexanet" flash_flexanet } - directory devs/flash/arm/flexanet - script flash_flexanet.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the SA-1100 Flexanet platform." -} - -package CYGPKG_DEVS_FLASH_MPC50 { - alias { "FLASH memory support for MPC 5.0" flash_mpc50 } - directory devs/flash/arm/mpc50 - script flash_mpc50.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the MPC 5.0." -} - -package CYGPKG_DEVS_FLASH_MALTA { - alias { "FLASH memory support for MIPS Malta board" flash_malta } - directory devs/flash/mips/malta - script flash_malta.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the MIPS Malta platform." -} - -package CYGPKG_DEVS_FLASH_ARM_EXCALIBUR { - alias { "FLASH memory support for Altera ARM9/Excalibur board" flash_excalibur } - directory devs/flash/arm/excalibur - script flash_excalibur.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Altera Excalibur platform." -} - -package CYGPKG_DEVS_FLASH_ARM_SMDK2410 { - alias { "FLASH memory support for Samsung ARM9/SMDK2410 board" flash_smdk2410 } - directory devs/flash/arm/smdk2410 - script flash_smdk2410.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Samsung smdk2410 platform." -} - -package CYGPKG_DEVS_FLASH_ARM_INNOVATOR { - alias { "FLASH memory support for the Innovator" flash_innovator } - directory devs/flash/arm/innovator - script flash_innovator.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Innovator platform." -} - -package CYGPKG_DEVS_FLASH_ARM_AIM711 { - alias { "Support for flash memory on AIM 711 board" flash_arm_snds } - directory devs/flash/arm/aim711 - script flash_arm_aim711.cdl - hardware - description " - This package contains hardware support for flash memory - on the ARM Industrial Module AIM 711 platform." -} - -package CYGPKG_DEVS_FLASH_NANO { - alias { "FLASH memory support for Intel SA1110 nanoEngine" flash_nano } - directory devs/flash/arm/nano - script flash_nano.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the StrongARM SA-1110 nanoEngine platform." -} - -package CYGPKG_DEVS_FLASH_STRATA { - alias { "Generic FLASH memory support for Intel StrataFLASH (deprecated)" strata } - directory devs/flash/intel/strata - script flash_strata.cdl - hardware - description " - This package contains generic hardware support for Intel - StrataFLASH memory devices." -} - -package CYGPKG_DEVS_FLASH_STRATA_V2 { - alias { "Generic FLASH memory support for Intel StrataFLASH" strata_v2 } - directory devs/flash/intel/stratav2 - script flash_strata_v2.cdl - hardware - description " - This package contains generic hardware support for Intel - StrataFLASH memory devices using the V2 device API." -} - -package CYGPKG_DEVS_FLASH_SST_39VFXXX { - alias { "Support for SST 39VFXXX flash memory" flash_sst_39vfXXX } - directory devs/flash/sst/39vfxxx - script flash_sst_39vfxxx.cdl - hardware - description " - This package contains hardware support for SST 39VFxxx - flash memory devices. Until now it supports SST 39VF080, - 39VF016 and 39VF400 devices." -} - -package CYGPKG_DEVS_FLASH_INTEL_28FXXX { - alias { "Generic FLASH memory support for Intel 28Fxxx Flash parts" flashfile } - directory devs/flash/intel/28fxxx - script flash_intel_28fxxx.cdl - hardware - description " - This package contains generic hardware support for Intel - Flash memory devices." -} - -package CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 { - alias { "FLASH memory support for Cyclone IQ80310" flash_iq80310 } - directory devs/flash/arm/iq80310 - script flash_iq80310.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Cyclone IQ80310 platform." -} - -package CYGPKG_DEVS_FLASH_IQ80321 { - alias { "FLASH memory support for IQ80321" flash_iq80321 } - directory devs/flash/arm/iq80321 - script flash_iq80321.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the IQ80321 platform." -} - -package CYGPKG_DEVS_FLASH_IXDP425 { - alias { "FLASH memory support for IXDP425" flash_ixdp425 } - directory devs/flash/arm/ixdp425 - script flash_ixdp425.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the IXDP425 platform." -} - -package CYGPKG_DEVS_FLASH_XSENGINE { - alias { "FLASH memory support for XSEngine" flash_xsengine } - directory devs/flash/arm/xsengine - script flash_xsengine.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the XSEngine platform." -} - -package CYGPKG_DEVS_FLASH_GRG { - alias { "FLASH memory support for GRG" flash_grg } - directory devs/flash/arm/grg - script flash_grg.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Intel Generic Residential Gateway platform." -} - -package CYGPKG_DEVS_FLASH_PRPMC1100 { - alias { "FLASH memory support for PrPMC1100" flash_prpmc1100 } - directory devs/flash/arm/prpmc1100 - script flash_prpmc1100.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Motorola PrPMC1100 platform." -} - -package CYGPKG_DEVS_FLASH_ARM_INTEGRATOR { - alias { "FLASH memory support for ARM INTEGRATOR" flash_integrator } - directory devs/flash/arm/integrator - script flash_integrator.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the ARM INTEGRATOR platform." -} - -package CYGPKG_DEVS_FLASH_MBX { - alias { "FLASH memory support for Motorola PowerPC/860 MBX" flash_mbx } - directory devs/flash/powerpc/mbx - script flash_mbx.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Motorola PowerPC/860 MBX platform." -} - -package CYGPKG_DEVS_FLASH_TS6 { - alias { "FLASH memory support for Delphi Communication Systems, Inc. TigerSHARC6 Board" flash_ts6 } - directory devs/flash/powerpc/ts6 - script flash_ts6.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Delphi Communication Systems TigerSHARC6 platform." -} - -package CYGPKG_DEVS_FLASH_VADS { - alias { "FLASH memory support for Motorola MPC8260 Voyager ADS board" flash_vads } - directory devs/flash/powerpc/vads - script flash_vads.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Motorola MPC8260 Voyager ADS platform." -} - -package CYGPKG_DEVS_FLASH_CME555 { - alias { "FLASH memory support for Axiom's CME555" flash_cme555 } - directory devs/flash/powerpc/cme555 - script flash_cme555.cdl - hardware - description " - This package contains hardware support for FLASH memory - on Axiom's CME555 board." -} - -package CYGPKG_DEVS_FLASH_EC555 { - alias { "FLASH memory support for ec555 board" flash_ec555 } - directory devs/flash/powerpc/ec555 - script flash_ec555.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the ec555 board." -} - -package CYGPKG_DEVS_FLASH_PATI { - alias { "FLASH memory support for PowerPC PATI board" flash_pati } - directory devs/flash/powerpc/pati - script flash_pati.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the PowerPC PATI platform." -} - -package CYGPKG_DEVS_FLASH_VIPER { - alias { "FLASH memory support for A&M Viper PowerPC/8xx" flash_viper } - directory devs/flash/powerpc/viper - script flash_viper.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the A&M PowerPC/8xx VIPER platform." -} - -package CYGPKG_DEVS_FLASH_MN10300_STB { - alias { "FLASH memory support for Matsushita MN10300 STB" flash_stb } - directory devs/flash/mn10300/stb - script flash_stb.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Matsushita MN10300 STB platform (SRAM2 socket)." -} - -package CYGPKG_DEVS_FLASH_MN10300_ASB2303 { - alias { "FLASH memory support for Matsushita ASB2303" flash_asb2303 } - directory devs/flash/mn10300/asb2303 - script flash_asb2303.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Matsushita MN10300 ASB2303 platform (system flash socket)." -} - -package CYGPKG_DEVS_FLASH_MN10300_ASB2305 { - alias { "FLASH memory support for Matsushita ASB2305" flash_asb2305 } - directory devs/flash/mn10300/asb2305 - script flash_asb2305.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Matsushita MN10300 ASB2305 platform (system flash socket)." -} - -package CYGPKG_DEVS_FLASH_ATLAS { - alias { "FLASH memory support for MIPS Atlas" flash_atlas } - directory devs/flash/mips/atlas - script flash_atlas.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the MIPS Atlas platform." -} -package CYGPKG_DEVS_FLASH_SYNTH { - alias { "Synthetic FLASH memory support (legacy)" synth_flash flash_synth } - directory devs/flash/synth - script flash_synth.cdl - hardware - description " - FLASH memory device support for Synthetic target" -} - -package CYGPKG_DEVS_FLASH_SYNTH_V2 { - alias { "Synthetic FLASH memory support" synth_flashv2 flash_synthv2 } - directory devs/flash/synthv2 - script flash_synth.cdl - hardware - description " - FLASH memory device support for Synthetic target using the new API" -} - -package CYGPKG_DEVS_FLASH_TOSHIBA_TC58XXX { - alias { "Support for Toshiba TC58xxx flash memory" flash_toshiba_tc58xxx } - directory devs/flash/toshiba/tc58xxx - script flash_toshiba_tc58xxx.cdl - hardware - description " - This package contains hardware support for Toshiba TC58xxx - NAND flash memory devices." -} - -package CYGPKG_DEVS_FLASH_FRV_FRV400 { - alias { "Fujitsu FRV400 FLASH memory support" flash_frv400 } - directory devs/flash/frv/frv400 - script flash_frv_frv400.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Fujitsu FRV400 platform." -} - -package CYGPKG_DEVS_FLASH_FRV_PDK403 { - alias { "Fujitsu MB93093 FLASH memory support" flash_mb93093 } - directory devs/flash/frv/pdk403 - script flash_frv_pdk403.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Fujitsu MB93093-PD00 Portable Development Kit." -} - -package CYGPKG_DEVS_FLASH_ARM_LPC2XXX { - alias { "Support for the internal flash memory of LPC2xxx devices" flash_arm_lpc2xxx } - directory devs/flash/arm/lpc2xxx - script flash_arm_lpc2xxx.cdl - hardware - description " - This package contains hardware support for the internal - flash memory of the LPC2xxx devices." -} - -package CYGPKG_DEVS_FLASH_ARM_OLPCX2294 { - alias { "Support for Flash memory on Olimex LPC-E2294, LPC-H2294, LPC-L2294-1M boards" flash_olpcx2294 } - directory devs/flash/arm/olpcx2294 - script flash_olpcx2294.cdl - hardware - description " - This package contains hardware support for flash memory parts - on the Olimex LPC-E2294, LPC-H2294 LPC-L2294-1M platforms." - -} - -package CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 { - alias { "External Flash memory support for OLPCE2294, OLPCH2294, OLPCL2294" flash_olpcx2294_v2 } - directory devs/flash/arm/olpcx2294v2 - script flash_olpcx2294.cdl - hardware - description " - The flash_olpcx2294_v2 provides hardware support for external - flash memory parts on the Olimex LPC-E2294, LPC-H2294, - and LPC-L2294-1M boards. It uses eCos Flash v2 API." -} - -package CYGPKG_DEVS_TOUCH_IPAQ { - alias { "Touch screen support for iPAQ" touch_ipaq } - directory devs/touch/arm/ipaq - script touch_ipaq.cdl - hardware - description " - This package contains hardware support for the touch screen - on the Compaq iPAQ Pocket PC." -} - -package CYGPKG_DEVS_KBD_IPAQ { - alias { "Keypad/button support for iPAQ" kbd_ipaq } - directory devs/kbd/arm/ipaq - script kbd_ipaq.cdl - hardware - description " - This package contains hardware support for the keyboard buttons - on the Compaq iPAQ Pocket PC." -} - -package CYGPKG_DEVS_TOUCH_AAED2000 { - alias { "Touch screen support for Agilent AAED2000" touch_aaed2000 } - directory devs/touch/arm/aaed2000 - script touch_aaed2000.cdl - hardware - description " - This package contains hardware support for the touch screen - on the Agilent AAED2000 prototype." -} - -package CYGPKG_DEVS_KBD_AAED2000 { - alias { "Keyboard support for Agilent AAED2000" kbd_aaed2000 } - directory devs/kbd/arm/aaed2000 - script kbd_aaed2000.cdl - hardware - description " - This package contains hardware support for the keyboard - on the Agilent AAED2000 prototype." -} - -package CYGPKG_IO_SERIAL_ARM_EBSA285 { - alias { "Intel EBSA285 serial driver" - devs_serial_arm_ebsa285 ebsa285_serial_driver } - hardware - directory devs/serial/arm/ebsa285 - script ser_arm_ebsa285.cdl - description "Intel StrongARM/EBSA285 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_XSCALE_PXA2X0 { - alias { "Intel XScale PXA2X0 serial driver" - devs_serial_arm_xscale_pxa pxa_serial_driver } - hardware - directory devs/serial/arm/pxa2x0 - script ser_arm_xscale_pxa2x0.cdl - description "Intel XScale/PXA2X0 serial device drivers" -} - - -package CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 { - alias { "Intel XScale IOP310 serial driver" - devs_serial_arm_iop310 iop310_serial_driver } - hardware - directory devs/serial/arm/iop310 - script ser_arm_iop310.cdl - description "Intel XScale IOP310 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_IQ80321 { - alias { "Intel XScale IQ80321 serial driver" - devs_serial_arm_iq80321 iq80321_serial_driver } - hardware - directory devs/serial/arm/iq80321 - script ser_arm_iq80321.cdl - description "Intel XScale/IQ80321 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_SA11X0 { - alias { "Intel StrongARM SA11x0 serial driver" - devs_serial_arm_sa11x0 sa11x0_serial_driver } - hardware - directory devs/serial/arm/sa11x0 - script ser_arm_sa11x0.cdl - description "Intel StrongARM/SA11x0 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_PID { - alias { "ARM PID serial device drivers" - devs_serial_arm_pid pid_serial_driver } - hardware - directory devs/serial/arm/pid - script ser_arm_pid.cdl - description "ARM PID serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_CERFPDA { - alias { "Cerfpda 16x5x serial device drivers" - devs_serial_arm_cerfpda cerfpda_serial_driver } - hardware - directory devs/serial/arm/cerfpda - script ser_arm_cerfpda.cdl - description "Cerfpda serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_AEB { - alias { "ARM AEB-1 serial device drivers" - devs_serial_arm_aeb aeb_serial_driver } - hardware - directory devs/serial/arm/aeb - script ser_arm_aeb.cdl - description "ARM AEB-1 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_AAED2000 { - alias { "Agilent AAED2000 serial device drivers" - devs_serial_arm_aaed2000 aaed2000_serial_driver } - hardware - directory devs/serial/arm/aaed2000 - script ser_arm_aaed2000.cdl - description "Agilent AAED2000 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_SMDK2410 { - alias { "Samsung ARM9/SMDK2410 board serial device drivers" - devs_serial_arm_smdk2410 smdk2410_serial_driver } - hardware - directory devs/serial/arm/smdk2410 - script ser_arm_smdk2410.cdl - description "Samsung ARM9/SMDK2410 board serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_EDB7XXX { - alias { "Cirrus Logic ARM based board serial device drivers" - devs_serial_arm_edb7xxx edb7xxx_serial_driver } - hardware - directory devs/serial/arm/edb7xxx - script ser_arm_edb7xxx.cdl - description "Cirrus Logic ARM based development board serial - device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_CMA230 { - alias { "Cogent ARM/CMA230 serial device drivers" - devs_serial_arm_cma230 cma230_serial_driver } - hardware - directory devs/serial/arm/cma230 - script ser_arm_cma230.cdl - description "Cogent ARM/CMA230 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_E7T { - alias { "ARM AEB-2 (E7T) serial device drivers" - devs_serial_arm_e7t e7t_serial_driver } - hardware - directory devs/serial/arm/e7t - script ser_arm_e7t.cdl - description "ARM AEB-2 (E7T) serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_S3C4510 { - alias { "Generig ARM S3C4510 serial device driver" - devs_serial_arm_s3c4510 s3c4510_serial_driver } - hardware - directory devs/serial/arm/s3c4510 - script ser_arm_s3c4510.cdl - description "Generic serial device driver for the internal - serial interface of the S3C4510" -} - -package CYGPKG_IO_SERIAL_ARM_AIM711 { - alias { "AIM 711 serial device drivers" - devs_serial_arm_aim711 aim711_serial_driver } - hardware - directory devs/serial/arm/aim711 - script ser_arm_aim711.cdl - description "ARM Industral Module AIM 711 serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_INTEGRATOR { - alias { "ARM INTEGRATOR serial device drivers" - devs_serial_arm_integrator integrator_serial_driver } - hardware - directory devs/serial/arm/integrator - script ser_arm_integrator.cdl - description "ARM INTEGRATOR serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_AT91 { - alias { "Atmel AT91 serial device driver" - devs_serial_arm_at91 at91_serial_driver } - hardware - directory devs/serial/arm/at91 - script ser_arm_at91.cdl - description "Atmel AT91 on-chip serial device driver." -} - -package CYGPKG_IO_SERIAL_ARM_LPC2XXX { - alias { "ARM LPC2XXX serial device drivers" - devs_serial_arm_lpc2xxx lpc2xxx_serial_driver } - hardware - directory devs/serial/arm/lpc2xxx - script ser_arm_lpc2xxx.cdl - description "ARM LPC2XXX serial device drivers" -} - -package CYGPKG_IO_SERIAL_ARM_LPC24XX { - alias { "ARM LPC24XX serial device drivers" - devs_serial_arm_lpc24xx lpc24xx_serial_driver } - hardware - directory devs/serial/arm/lpc24xx - script ser_arm_lpc24xx.cdl - description "ARM LPC24XX serial device drivers" -} - -package CYGPKG_IO_SERIAL_POWERPC_COGENT { - alias { "Cogent PowerPC serial device drivers" - devs_serial_powerpc_cogent cogent_serial_driver } - hardware - directory devs/serial/powerpc/cogent - script ser_powerpc_cogent.cdl - description "Cogent PowerPC serial device drivers" -} - -package CYGPKG_IO_SERIAL_POWERPC_MPC555 { - alias { "mpc555 PowerPC serial device drivers" - devs_serial_powerpc_mpc555 mpc555_serial_driver } - hardware - directory devs/serial/powerpc/mpc555 - script ser_powerpc_mpc555.cdl - description "mpc555 PowerPC serial device drivers" -} - -package CYGPKG_IO_SERIAL_FREESCALE_ESCI_H { - alias { "ESCI serial device header" - devs_serial_freescale_esci_h esci_serial_header } - hardware - directory devs/serial/freescale/esci/hdr - script ser_freescale_esci_h.cdl - description "Freescale eSCI - Enhanced Serial Communications Interface header. - Needed by hal_diag and ser_esci drivers." -} - -package CYGPKG_IO_SERIAL_FREESCALE_ESCI { - alias { "ESCI serial device driver" - devs_serial_freescale_esci esci_serial_driver } - hardware - directory devs/serial/freescale/esci/drv - script ser_freescale_esci.cdl - description "Freescale eSCI - Enhanced Serial Communications Interface serial device driver" -} - -package CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC { - alias { "PowerPC QUICC/SMC serial device drivers" - devs_serial_quicc_smc quicc_smc_serial_driver - devs_serial_powerpc_quicc_smc - devs_serial_powerpc_quicc quicc_serial_driver } - hardware - directory devs/serial/powerpc/quicc - script ser_quicc_smc.cdl - description "PowerPC QUICC/SMC serial device drivers" -} - -package CYGPKG_IO_SERIAL_POWERPC_MPC8XXX { - alias { "PowerPC MPC8XXX (QUICC-II) serial device drivers" - devs_serial_powerpc_mpc8xxx mpc8xxx_serial_driver } - hardware - directory devs/serial/powerpc/mpc8xxx - script ser_mpc8xxx.cdl - description "PowerPC MPC8XXX (QUICC-II) serial device drivers" -} - -package CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC { - alias { "PowerPC VADS QUICC2/SCC serial device drivers" - devs_serial_quicc2_scc quicc2_scc_serial_driver - devs_serial_powerpc_quicc2_scc - devs_serial_powerpc_quicc2 quicc2_serial_driver } - hardware - directory devs/serial/powerpc/quicc2 - script ser_quicc2_scc.cdl - description "PowerPC VADS QUICC2/SCC serial device drivers" -} - -package CYGPKG_IO_SERIAL_POWERPC_PPC405 { - alias { "PowerPC PPC405GP serial device drivers" devs_serial_ppc405 } - hardware - directory devs/serial/powerpc/ppc405 - script ser_powerpc_ppc405.cdl - description "PowerPC PPC405GP serial device drivers" -} - -package CYGPKG_IO_SERIAL_SPARCLITE_SLEB { - alias { "SPARClite SLEB serial device drivers" - devs_serial_sparclite_sleb sleb_serial_driver } - hardware - directory devs/serial/sparclite/sleb - script ser_sparclite_sleb.cdl - description "SPARClite SLEB serial device drivers" -} - -package CYGPKG_IO_SERIAL_TX39_JMR3904 { - alias { "TX39 JMR3904 serial device drivers" - devs_serial_tx39_jmr3904 jmr3904_serial_driver - devs_serial_mips_jmr3904 tx3904_serial_driver } - hardware - directory devs/serial/mips/jmr3904 - script ser_mips_jmr3904.cdl - description "TX39 JMR3904 serial device drivers" -} - -package CYGPKG_IO_SERIAL_MIPS_ATLAS { - alias { "Atlas serial device drivers" - devs_serial_atlas atlas_serial_driver - devs_serial_mips_atlas mips_atlas_serial_driver } - hardware - directory devs/serial/mips/atlas - script ser_mips_atlas.cdl - description "Atlas serial device drivers" -} - -package CYGPKG_IO_SERIAL_MIPS_REF4955 { - alias { "TX49 REF4955 serial device drivers" - devs_serial_mips_ref4955 ref4955_serial_driver } - hardware - directory devs/serial/mips/ref4955 - script ser_mips_ref4955.cdl - description "TX49 REF4955 serial device drivers" -} - -package CYGPKG_IO_SERIAL_MIPS_VRC437X { - alias { "VRC437X serial device drivers" - devs_serial_mips_vrc437x vrc437x_serial_driver } - hardware - directory devs/serial/mips/vrc437x - script ser_mips_vrc437x.cdl - description "VRC437X serial device drivers" -} - -package CYGPKG_IO_SERIAL_MN10300 { - alias { "MN10300 serial device drivers" - devs_serial_mn10300_mn10300 - devs_serial_mn10300 mn10300_serial_driver } - hardware - directory devs/serial/mn10300/mn10300 - script ser_mn10300.cdl - description "MN10300 serial device drivers" -} - -package CYGPKG_IO_SERIAL_I386_PC { - alias { "PC serial device drivers" - devs_serial_i386_pc pc_serial_driver } - hardware - directory devs/serial/i386/pc - script ser_i386_pc.cdl - description "PC serial device drivers" -} - -package CYGPKG_IO_SERIAL_GENERIC_16X5X { - alias { "16x5x compatible serial device drivers" - devs_serial_generic_16x5x 16x5x_serial_driver } - hardware - directory devs/serial/generic/16x5x - script ser_generic_16x5x.cdl - description "16x5x compatible serial device drivers" -} - -package CYGPKG_IO_SERIAL_SH_SCI { - alias { "SH SCI serial device drivers" - devs_serial_sh_sci sh_sci_serial_driver } - hardware - directory devs/serial/sh/sci - script ser_sh_sci.cdl - description "SH SCI serial device drivers" -} - -package CYGPKG_IO_SERIAL_SH_SCIF { - alias { "SH SCIF serial device drivers" - devs_serial_sh_scif scif_serial_driver } - hardware - directory devs/serial/sh/scif - script ser_sh_scif.cdl - description "SH SCIF serial device drivers" -} - -package CYGPKG_DEVS_ETH_PHY { - alias { "Generic PHY support" eth_phy_support } - hardware - directory devs/eth/phy - script phy_eth_drivers.cdl - description "PHY (ethernet physical transciever) API." -} - -package CYGPKG_DEVS_ETH_ARM_CERF { - alias { "Crystal LAN ethernet driver for Cerf boards" cerf_eth_driver } - hardware - directory devs/eth/arm/cerf - script cerf_eth_drivers.cdl - description "Ethernet driver for Crystal LAN on Cerf based - development boards." -} - -package CYGPKG_DEVS_ETH_ARM_CERFPDA { - alias { "Crystal LAN ethernet driver for the Cerfpda" cerfpda_eth_driver } - hardware - directory devs/eth/arm/cerfpda - script cerfpda_eth_drivers.cdl - description "Ethernet driver for Crystal LAN on the Cerfpda." -} - -package CYGPKG_DEVS_ETH_ARM_NETARM { - alias { "Ethernet driver for the NETARM" NETARM_eth_driver } - hardware - directory devs/eth/arm/netarm - script netarm_eth_driver.cdl - description "Ethernet driver for NETARM." -} - -package CYGPKG_DEVS_ETH_ARM_PHYCORE229X { - alias { "Ethernet driver for phyCORE-LPC229x board" devs_eth_arm_phycore229x } - hardware - directory devs/eth/arm/phycore229x - script phycore229x_eth_drivers.cdl - description "Ethernet device driver for phyCORE-LPC229x board" -} - -package CYGPKG_DEVS_ETH_ARM_OLPCE2294 { - alias { "Ethernet driver for Olimex LPC-E2294 board" olpce2294_eth_driver } - hardware - directory devs/eth/arm/olpce2294 - script olpce2294_eth_drivers.cdl - description " - Ethernet device driver for Olimex LPC-E2294 board." -} - -package CYGPKG_DEVS_ETH_ARM_OLPCL2294 { - alias { "Ethernet driver for Olimex LPC-L2294-1MB board" olpcl2294_eth_driver } - hardware - directory devs/eth/arm/olpcl2294 - script olpcl2294_eth_drivers.cdl - description " - Ethernet device driver for Olimex LPC-L2294-1MB board." -} - -package CYGPKG_IO_SERIAL_SH_EDK7708 { - alias { "SH3 EDK7708 serial device drivers" - devs_serial_sh3_edk7708 - devs_serial_sh_edk7708 edk7708_serial_driver } - hardware - directory devs/serial/sh/edk7708 - script ser_sh_edk7708.cdl - description "SH3 EDK7708 serial device drivers" -} - -package CYGPKG_IO_SERIAL_SH_CQ7708 { - alias { "SH3 cq7708 serial device drivers" - devs_serial_sh3_cq7708 - devs_serial_sh_cq7708 cq7708_serial_driver } - hardware - directory devs/serial/sh/cq7708 - script ser_sh_cq7708.cdl - description "SH3 cq7708 serial device drivers" -} - -package CYGPKG_IO_SERIAL_SH_SE77X9 { - alias { "SH3 SE77X9 serial device driver" - devs_serial_sh3_se77x9 se77x9_serial_driver } - hardware - directory devs/serial/sh/se77x9 - script ser_sh_se77x9.cdl - description "SH3 SE77x9 serial device driver" -} - -package CYGPKG_IO_SERIAL_SH_SH4_202_MD { - alias { "SH4-202 MicroDev serial device driver" - devs_serial_sh4_202_md sh4_202_md_serial_driver } - hardware - directory devs/serial/sh/sh4_202_md - script ser_sh4_202_md.cdl - description "This option enables the serial device drivers for the - SuperH SH4-202 MicroDev board, based on the generic SH SCIF driver." -} - -package CYGPKG_IO_SERIAL_V85X_V850 { - alias { "NEC V850 serial device drivers" - devs_serial_v85x_v850 v850_serial_driver } - hardware - directory devs/serial/v85x/v850 - script ser_v85x_v850.cdl - description "Serial device drivers for systems based on NEC V850 - SA1 (70F3017) or SB1 (70F3033) processors." -} - -package CYGPKG_IO_SERIAL_MIPS_UPD985XX { - alias { "NEC MIPS uPD985xx serial driver" - devs_serial_mips_upd985xx upd985xx_serial_driver } - hardware - directory devs/serial/mips/upd985xx - script ser_mips_upd985xx.cdl - description "NEC MIPS uPD985xx serial device drivers" -} - -package CYGPKG_IO_SERIAL_MIPS_IDT79S334A { - alias { "MIPS IDT 79RC32334 reference platform serial device drivers" - devs_serial_idt79s334a idt79s334a_serial_driver - devs_serial_mips_idt79s334 mips_idt79s334a_serial_driver } - hardware - directory devs/serial/mips/idt79s334a - script ser_mipsidt_334a.cdl - description "IDT 334a reference platform serial device drivers" -} - -package CYGPKG_IO_SERIAL_H8300_SCI { - alias { "H8/300 SCI serial device drivers" - devs_serial_h8300h_sci h8300h_sci_serial_driver } - hardware - directory devs/serial/h8300/h8300h - script serial_h8300.cdl - description "H8/300 SCI serial device drivers" -} - -package CYGPKG_IO_SERIAL_MCF5272_UART { - alias { "MCF5272 Serial UART Drivers" - devs_MCF5272_uart_driver } - hardware - directory devs/serial/mcf52xx/mcf5272 - script ser_mcf5272_uart.cdl - description "Serial MCF5272 UART Drivers." -} - -package CYGPKG_IO_SERIAL_LOOP { - alias { "Loop serial device drivers" - devs_serial_loop loop_serial_driver } - directory devs/serial/loop - script ser_loop.cdl - description "Loopback serial device driver." -} - -package CYGPKG_IO_FILEIO { - alias { "File IO" fileio io_file } - directory io/fileio - script fileio.cdl - description " - This package contains the infrastructure for doing POSIX compliant - file IO." -} - -package CYGPKG_FS_RAM { - alias { "RAM Filesystem" ramfs ram_fs fs_ram } - directory fs/ram - script ramfs.cdl - description " - This package contains a RAM resident filesystem." -} - -package CYGPKG_FS_ROM { - alias { "ROM Filesystem" romfs rom_fs fs_rom } - directory fs/rom - script romfs.cdl - description " - This package contains a ROM resident filesystem." -} - -package CYGPKG_FS_JFFS2 { - alias { "JFFS2 Filesystem" jffs2 } - directory fs/jffs2 - script jffs2.cdl - description " - This package contains the JFFS2 filesystem." -} - -package CYGPKG_LINUX_COMPAT { - alias { "Linux compatibility" linux_compat linuxcompat } - directory compat/linux - script linux.cdl - description " -eCos supports a basic Linux compatibility Layer providing various -functions, equivalents or stubs expected by Linux kernel code, for -assistance in porting drivers and file system code from Linux. -Note this does not provide Linux compatibility to applications." -} - -package CYGPKG_IO_ETH_DRIVERS { - alias { "Common ethernet support" net_drivers eth_drivers CYGPKG_NET_ETH_DRIVERS } - directory io/eth - script eth_drivers.cdl - description "Platform independent ethernet support." -} - -package CYGPKG_IO_USB { - alias { "Generic USB support" usb } - hardware - directory io/usb/common - script usb.cdl - description "Generic USB support" -} - -package CYGPKG_IO_USB_SLAVE { - alias { "Generic USB slave-side support" usbs } - hardware - directory io/usb/slave - script usbs.cdl - description "Generic USB slave-side support" -} - -package CYGPKG_IO_USB_SLAVE_ETH { - alias { "USB slave-side ethernet class drivers" usbs_eth } - directory io/usb/eth/slave - script usbs_eth.cdl - description "Support for USB peripherals that provide an ethernet-class function" -} - -package CYGPKG_IO_USB_SLAVE_SERIAL { - alias { "USB slave-side serial drivers" usbs_serial } - directory io/usb/serial/slave - script usbs_serial.cdl - description "Support for USB peripherals that present themselves - as serial devices to the host." -} - -package CYGPKG_DEVS_USB_SA11X0 { - alias { "Device-driver for the SA11X0 on-chip USB support" usb_sa11x0 } - hardware - directory devs/usb/sa11x0 - script usbs_sa11x0.cdl - description "A device driver for the SA11X0 on-chip USB slave port" -} - -package CYGPKG_DEVS_USB_UPD985XX { - alias { usb_upd985xx } - hardware - directory devs/usb/nec_upd985xx - script usbs_upd985xx.cdl - description "A device driver for the NEC uPD985xx on-chip USB device" -} - -package CYGPKG_DEVS_USB_AT91 { - alias { usb_at91 } - hardware - directory devs/usb/at91 - script usbs_at91.cdl - description "A device driver for the ATMEL AT91 on-chip USB device" -} - -package CYGPKG_DEVS_USB_D12 { - alias { usb_d12 } - hardware - directory devs/usb/d12 - script usbs_d12.cdl - description "A device driver for the Philips PDIUSBD12 full speed USB peripheral chip." -} - -package CYGPKG_DEVS_USB_I386_SOROD12 { - alias { usb_sorod12 } - hardware - directory devs/usb/i386/SoRoD12 - script usbs_i386_sorod12.cdl - description "A device driver for the SoRo PC/104 D12 USB Slave Board." -} - -package CYGPKG_NET { - alias { "Networking" net } - directory net/common - script net.cdl - description "Generic networking support, including TCP/IP." -} - -package CYGPKG_NET_AUTOTEST { - alias { "Network Autotesting" autotest net_autotest } - directory net/autotest - script net_autotest.cdl - description "Automated network testing support." -} - -package CYGPKG_NET_OPENBSD_STACK { - alias { "OpenBSD Stack" openbsd_net } - directory net/tcpip - script openbsd_net.cdl - description "TCP/IP stack from OpenBSD." -} - -package CYGPKG_NET_FREEBSD_STACK { - alias { "FreeBSD Stack" freebsd_net } - directory net/bsd_tcpip - script freebsd_net.cdl - description "TCP/IP stack from FreeBSD, including KAME IPv6." -} - -package CYGPKG_NET_FTPCLIENT { - alias { "FTP Client" ftpclient } - directory net/ftpclient - script ftpclient.cdl - description "FTP client support for get and put of files." -} - -package CYGPKG_SNMPLIB { - alias { "SNMP library" snmplib } - directory net/snmp/lib - script snmplib.cdl - description "UCD SNMP library." -} - -package CYGPKG_SNMPAGENT { - alias { "SNMP agent" snmpagent } - directory net/snmp/agent - script snmpagent.cdl - description "UCD SNMP agent." -} - -package CYGPKG_HTTPD { - alias { "HTTP server" httpd } - directory net/httpd - script httpd.cdl - description "HTTP server." -} - -package CYGPKG_NS_DNS { - alias { "DNS" dns } - directory net/ns/dns - script dns.cdl - description "DNS client support." -} - -package CYGPKG_NET_SNTP { - alias { "SNTP support" sntp } - directory net/sntp - script sntp.cdl - description " -This package provides a SNTP client which can recieve broadcast time -information and set the system clock." -} - -package CYGPKG_PPP { - alias { "PPP support" ppp } - directory net/ppp - script ppp.cdl - description "PPP support." -} - -package CYGPKG_NET_IPSEC_LIBIPSEC { - alias { "libipsec support" libipsec } - directory net/ipsec/libipsec - script libipsec.cdl - description " -This package provides the libipsec library used by racoon etc for -configuring IPSEC" -} - -package CYGPKG_DEVS_ETH_ARM_EDB7XXX { - alias { "Cirrus Logic ethernet driver for EP7xxx boards" edb7xxx_eth_driver } - hardware - directory devs/eth/arm/edb7xxx - script edb7xxx_eth_drivers.cdl - description "Ethernet driver for Cirrus Logic EP7xxx based - development boards." -} - -package CYGPKG_DEVS_ETH_ARM_KS32C5000 { - alias { "Samsung KS32C5000 ethernet driver" eth_ks32c5000 } - hardware - directory devs/eth/arm/ks32c5000 - script ks32c5000_eth.cdl - description "Ethernet driver for Samsung ks32c5000/S3c4510." -} - - -package CYGPKG_DEVS_ETH_ARM_AAED2000 { - alias { "Ethernet driver for Agilent AAED2000 board" aaed2000_eth_driver } - hardware - directory devs/eth/arm/aaed2000 - script aaed2000_eth_drivers.cdl - description "Ethernet driver for Agilent AAED2000 - development boards." -} -package CYGPKG_DEVS_ETH_AMD_PCNET { - alias { "AMD PCNET ethernet driver" pcnet_eth_driver } - hardware - directory devs/eth/amd/pcnet - script amd_pcnet_eth_drivers.cdl - description "Ethernet driver for AMD PCNET controller." -} - -package CYGPKG_DEVS_ETH_AMD_LANCEPCI { - alias { "AMD Lance PCI ethernet driver" lancepci_eth_driver } - hardware - directory devs/eth/amd/lancepci - script amd_lancepci_eth_drivers.cdl - description "Ethernet driver for AMD Lance PCI controller (vmWare)." -} - -package CYGPKG_DEVS_ETH_DAVICOM_DM9000 { - alias { "Davicom DM9000 ethernet driver" dm9000_eth_driver } - hardware - directory devs/eth/davicom/dm9000 - script davicom_dm9000_eth_drivers.cdl - description "Ethernet driver for Davicom DM9000 controller." -} - -package CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA { - alias { "MIPS Malta board ethernet driver" malta_eth_driver } - hardware - directory devs/eth/mips/malta - script mips_mips32_malta_eth_drivers.cdl - description "Ethernet driver for MIPS Malta board." -} - -package CYGPKG_DEVS_ETH_MN10300_ASB2305 { - alias { "MN10300 ASB2305 board ethernet driver" asb2305_eth_driver } - hardware - directory devs/eth/mn10300/asb2305 - script mn10300_asb2305_eth.cdl - description "Ethernet driver for MN10300 ASB2305 board." -} - -package CYGPKG_DEVS_ETH_VIA_RHINE { - alias { "VIA Rhine ethernet driver" rhine_eth_driver } - hardware - directory devs/eth/via/rhine - script via_rhine_eth_drivers.cdl - description "Ethernet driver for VIA Rhine controller." -} - -package CYGPKG_DEVS_ETH_SH_HS7729PCI { - alias { "HS7729PCI ethernet driver" hs7729pci_eth_driver } - hardware - directory devs/eth/sh/hs7729pci - script sh_hs7729pci_eth_drivers.cdl - description "Ethernet driver for HS7729PCI development boards." -} - -package CYGPKG_DEVS_ETH_SH_SE77X9 { - alias { "SE77X9 ethernet driver" se77x9_eth_driver } - hardware - directory devs/eth/sh/se77x9 - script sh_se77x9_eth_drivers.cdl - description "Ethernet driver for SE77x9 development boards." -} - -package CYGPKG_DEVS_ETH_SH_SE7751 { - alias { "SE7751 ethernet driver" se7751_eth_driver } - hardware - directory devs/eth/sh/se7751 - script sh_se7751_eth_drivers.cdl - description "Ethernet driver for SE7751 board." -} - -package CYGPKG_DEVS_ETH_SH_ETHERC { - alias { "SH2 etherc driver" etherc_eth_driver } - hardware - directory devs/eth/sh/etherc - script sh_etherc_eth_drivers.cdl - description "Ethernet driver for SH2 etherc controller." -} - -package CYGPKG_DEVS_ETH_SH_MICRODEV { - alias { "SH4-202 MicroDev onboard ethernet support" devs_eth_sh_md } - hardware - directory devs/eth/sh/sh4_202_md - script sh4_202_md_eth_drivers.cdl - description "This package contains hardware support for onboard SMC91C111 - ethernet device on the MicroDev board." -} - -package CYGPKG_DEVS_ETH_ARM_EBSA285 { - alias { "Intel EBSA285 with PRO/100+ ethernet driver" - devs_eth_arm_ebsa285 ebsa285_eth_driver } - hardware - directory devs/eth/arm/ebsa285 - script ebsa285_eth_drivers.cdl - description "Ethernet driver for Intel EBSA285 with PRO/100+ boards." -} - -package CYGPKG_DEVS_ETH_ARM_FLEXANET { - alias { "SA11x0/Flexanet onboard ethernet support" devs_eth_arm_flexanet } - hardware - directory devs/eth/arm/flexanet - script flexanet_eth_drivers.cdl - description "This package contains hardware support for onboard SMC91C96 - ethernet device on the Flexanet board." -} - -package CYGPKG_DEVS_ETH_ARM_INNOVATOR { - alias { "OMAP Innovator onboard ethernet support" devs_eth_arm_innovator } - hardware - directory devs/eth/arm/innovator - script innovator_eth_drivers.cdl - description "This package contains hardware support for onboard SMC91C96 - ethernet device on the Innovator board." -} - -package CYGPKG_DEVS_ETH_ARM_INTEGRATOR { - alias { "ARM INTEGRATOR with Intel PRO/100+ ethernet driver" - devs_eth_arm_integrator integrator_eth_driver } - hardware - directory devs/eth/arm/integrator - script integrator_eth_drivers.cdl - description "Ethernet driver for Intel PRO/100+ boards on ARM INTEGRATOR." -} - -package CYGPKG_DEVS_ETH_POWERPC_QUICC { - alias { "QUICC ethernet driver" quicc_eth_driver } - hardware - directory devs/eth/powerpc/quicc - script quicc_eth_drivers.cdl - description "Ethernet driver for PowerPC QUICC (MPC8xx) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_MBX { - alias { "MBX ethernet driver specifics" mbx_eth_driver } - hardware - directory devs/eth/powerpc/mbx - script mbx_eth_drivers.cdl - description "Ethernet driver specifics for Motorola MBX PowerPC (MPC8xx) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_QUICC2 { - alias { "QUICC2 ethernet driver" quicc2_eth_driver } - hardware - directory devs/eth/powerpc/quicc2 - script quicc2_eth_drivers.cdl - description "Fast ethernet driver for PowerPC QUICC2 (MPC8260) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_FEC { - alias { "FEC ethernet driver" fec_eth_driver } - hardware - directory devs/eth/powerpc/fec - script fec_eth_drivers.cdl - description "Ethernet driver for PowerPC FEC (MPC8xxT) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_FCC { - alias { "FCC ethernet driver" fcc_eth_driver } - hardware - directory devs/eth/powerpc/fcc - script fcc_eth_drivers.cdl - description "Fast ethernet driver for PowerPC MPCxxx based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_PPC405 { - alias { "PPC405 ethernet driver" ppc405_eth_driver } - hardware - directory devs/eth/powerpc/ppc405 - script ppc405_eth_drivers.cdl - description "Ethernet driver for PowerPC 405GP based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_VIPER { - alias { "A&M Viper ethernet driver" viper_eth_driver } - hardware - directory devs/eth/powerpc/viper - script viper_eth_drivers.cdl - description "Ethernet driver specifics for A&M Viper (MPC8xxT) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_EC555 { - alias { "Crystal LAN ethernet driver for ec555 boards" ec555_eth_driver } - hardware - directory devs/eth/powerpc/ec555 - script ec555_eth_drivers.cdl - description "Ethernet driver for Crystal LAN on ec555 board." -} - -package CYGPKG_DEVS_ETH_INTEL_I82559 { - alias { "Intel 82559 ethernet driver" - devs_eth_intel_i82559 i82559_eth_driver } - hardware - directory devs/eth/intel/i82559 - script intel_i82559_eth_drivers.cdl - description "Ethernet driver for Intel 82559 NIC." -} - -package CYGPKG_DEVS_ETH_INTEL_I82544 { - alias { "Intel 82544 ethernet driver" - devs_eth_intel_i82544 i82544_eth_driver } - hardware - directory devs/eth/intel/i82544 - script intel_i82544_eth_drivers.cdl - description "Ethernet driver for Intel 82544 NIC." -} - -package CYGPKG_DEVS_ETH_INTEL_I21143 { - alias { "Intel 21143 ethernet driver" - devs_eth_intel_i21143 i21143_eth_driver } - hardware - directory devs/eth/intel/i21143 - script intel_i21143_eth_drivers.cdl - description "Ethernet driver for Intel \[DEC\] 21143 NIC." -} - -package CYGPKG_DEVS_ETH_MIPS_VRC4375 { - alias { "NEC MIPS VRC4375 ethernet driver" - devs_eth_mips_vrc4375 vrc4375_eth_driver } - hardware - directory devs/eth/mips/vrc4375 - script vrc4375_eth_drivers.cdl - description "Ethernet driver for NEC MIPS VRC4375 'Blue Nile' - board with Intel \[ex Digital Equipment\] - i21143 ethernet interface." -} - -package CYGPKG_DEVS_ETH_MIPS_RM7000_OCELOT { - alias { "Ocelot ethernet drivers" - devs_eth_mips_rm7000_ocelot ocelot_eth_driver } - hardware - directory devs/eth/mips/ocelot - script mips_rm7000_ocelot_eth_drivers.cdl - description "Ethernet driver for PMC-Sierra Ocelot board." -} - -package CYGPKG_DEVS_ETH_ARM_IQ80321 { - alias { "Intel IQ80321 with onboard 82544 ethernet driver" - devs_eth_arm_iq80321 iq80321_eth_driver } - hardware - directory devs/eth/arm/iq80321 - script iq80321_eth_drivers.cdl - description "Ethernet driver for Intel IQ80321 with onboard 82544 NIC." -} - -package CYGPKG_DEVS_ETH_ARM_XSCALE_IQ80310 { - alias { "Intel IQ80310 with onboard 82559 ethernet driver" - devs_eth_arm_iq80310 iq80310_eth_driver } - hardware - directory devs/eth/arm/iq80310 - script iq80310_eth_drivers.cdl - description "Ethernet driver for Intel IQ80310 with onboard 82559 NIC." -} - -package CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 { - alias { "IXDP425 (PCI) / Intel 82559 ethernet driver" - devs_eth_arm_ixdp425_i82559 } - hardware - directory devs/eth/arm/ixdp425/i82559 - script ixdp425_i82559_eth_driver.cdl - description "Ethernet driver for IXDP425 with Intel 82559 PCI NIC." -} - -package CYGPKG_DEVS_ETH_ARM_XSCALE_XSENGINE { - alias { "XSEngine SMC91C111 ethernet driver" devs_eth_arm_xsengine } - hardware - directory devs/eth/arm/xsengine - script xsengine_eth_drivers.cdl - description "Ethernet driver for XSEngine board." -} - -package CYGPKG_DEVS_ETH_ARM_GRG_I82559 { - alias { "GRG / Intel 82559 ethernet driver" - devs_eth_arm_grg_i82559 } - hardware - directory devs/eth/arm/grg/i82559 - script grg_i82559_eth_driver.cdl - description "Ethernet driver for GRG with Intel 82559 PCI NIC." -} - -package CYGPKG_DEVS_ETH_I386_PC_I82559 { - alias { "Standard PC with EtherPro 10/100 ethernet device" - devs_eth_i386_pc_i82559 pc_etherpro } - hardware - directory devs/eth/i386/pc/i82559 - script i386_pc_i82559_eth_drivers.cdl - description "Ethernet driver for standard PC with Intel 82559 NIC. This is - essentially support for a EtherPro 10/100 PCI card." -} - -package CYGPKG_DEVS_ETH_I386_PC_I82544 { - alias { "Standard PC with Intel Gigabit ethernet device" - devs_eth_i386_pc_i82544 pc_ether_giga } - hardware - directory devs/eth/i386/pc/i82544 - script i386_pc_i82544_eth_drivers.cdl - description "Ethernet driver for standard PC with Intel 82544 Gigabit NIC." -} - -package CYGPKG_DEVS_ETH_I386_PC_LANCEPCI { - alias { "Standard PC with AMD Lance PCI device" - devs_eth_i386_pc_lancepci pc_ether_lancepci } - hardware - directory devs/eth/i386/pc/lancepci - script i386_pc_lancepci_eth_drivers.cdl - description "Ethernet driver for standard PC with AMD Lance NIC (vmWare)." -} - -package CYGPKG_DEVS_ETH_MIPS_ATLAS { - alias { "MIPS Atlas with onboard SAA9730 ethernet driver" - devs_eth_mips_atlas atlas_eth_driver } - hardware - directory devs/eth/mips/atlas - script atlas_eth_drivers.cdl - description "Ethernet driver for MIPS Atlas with onboard SAA9730 NIC." -} - -package CYGPKG_DEVS_ETH_NS_DP83902A { - alias { "NS DP83902A ethernet driver" dp83902a_eth_driver } - hardware - directory devs/eth/ns/dp83902a - script ns_dp83902a_eth_drivers.cdl - description "Ethernet driver for NS DP83902A controller." -} - -package CYGPKG_DEVS_ETH_NS_DP83816 { - alias { "NS DP83816 ethernet driver" dp83816_eth_driver } - hardware - directory devs/eth/ns/dp83816 - script ns_dp83816_eth_drivers.cdl - description "Ethernet driver for NS DP83816 controller." -} - -package CYGPKG_DEVS_ETH_CL_CS8900A { - alias { "Cirrus Logic CS8900A ethernet driver" cs8900a_eth_driver } - hardware - directory devs/eth/cl/cs8900a - script cl_cs8900a_eth_drivers.cdl - description "Ethernet driver for Cirrus Logic CS8900A controller." -} - -package CYGPKG_DEVS_ETH_MIPS_UPD985XX { - alias { "NEC uPD985xx ethernet driver" uPD985xx_eth_driver } - hardware - directory devs/eth/mips/upd985xx - script upd985xx_eth_drivers.cdl - description "NEC uPD985xx ethernet driver" -} - -package CYGPKG_DEVS_ETH_MIPS_REFIDT334 { - alias { "MIPS IDT 79RC32334 reference platform ethernet driver" - devs_eth_refidt334 refidt334_eth_driver } - hardware - directory devs/eth/mips/idt79s334a - script refidt334_eth_drivers.cdl - description "Ethernet driver for MIPS IDT 79RC32334 reference platform." -} - -# Not sure whether this should be "hardware"; if so, it should be mentioned -# in all targets that can use it. -package CYGPKG_DEVS_ETH_CF { - alias { "PCMCIA (Compact Flash) ethernet drivers" cf_eth_drivers } - directory devs/eth/cf - script cf_eth_drivers.cdl - hardware - description "Ethernet drivers for PCMCIA (Compact Flash) cardss." -} - -package CYGPKG_DEVS_ETH_H8300_AKI3068NET { - alias { "Akizuki H8/3068 Board ethernet driver" aki3068net_eth_drivers } - directory devs/eth/h8300/aki3068net - script h8300_aki3068net_eth_drivers.cdl - hardware - description "Ethernet drivers for Akizuki H8/3068 Network - micom board." -} - -package CYGPKG_DEVS_ETH_H8300_H8MAX { - alias { "H8MAX Board ethernet driver" h8max_eth_drivers } - directory devs/eth/h8300/h8max - script h8300_h8max_eth_drivers.cdl - hardware - description "Ethernet drivers for H8MAX board." -} - -package CYGPKG_DEVS_ETH_H8300_EDOSK2674 { - alias { "EDOSK-2674 Board ethernet driver" edosk2674_eth_drivers } - directory devs/eth/h8300/edosk2674 - script h8300_edosk2674_eth_drivers.cdl - hardware - description "Ethernet drivers for EDOSK-2674 board." -} - -package CYGPKG_DEVS_ETH_MCF5272 { - alias { "MCF5272 Fast Ethernet Controller driver" mcf5272_eth_driver} - hardware - directory devs/eth/mcf52xx/mcf5272 - script mcf5272_eth_driver.cdl - description "Ethernet driver for the MCF5272." -} - - -package CYGPKG_DEVS_ETH_ECOSYNTH { - alias { "Synthetic target ethernet driver" ecosyntheth ecosynth_eth_driver } - directory devs/eth/synth/ecosynth - script syntheth.cdl - hardware - description "Ethernet driver for the synthetic target" -} - -package CYGPKG_IO_PCI { - alias { "PCI configuration library" io_pci } - directory io/pci - script io_pci.cdl - hardware - description " - This package contains the PCI configuration library." -} - -package CYGPKG_IO_WALLCLOCK { - alias { "Wallclock device framework" wallclock io_wallclock devices_wallclock device_wallclock } - directory io/wallclock - script wallclock.cdl - description " - This package provides a wallclock device framework. It is - also necessary to select an actual driver implementation." -} - -package CYGPKG_DEVICES_WALLCLOCK_SH3 { - alias { "Wallclock driver for SH3 RTC module" devices_wallclock_sh3 device_wallclock_sh3 } - directory devs/wallclock/sh/sh3 - script wallclock_sh3.cdl - hardware - description " - This package provides a wallclock driver implementation for the - Hitachi SH3 CPU's RTC module." -} - -package CYGPKG_DEVICES_WALLCLOCK_MPC5xx { - alias { "Wallclock driver for mpc5xx RTC module" devices_wallclock_mpc5xx device_wallclock_mpc5xx } - directory devs/wallclock/powerpc/mpc5xx - script wallclock_mpc5xx.cdl - hardware - description " - This package provides a wallclock driver implementation for the - Motorola mpc5xx CPU's RTC module." -} - -package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 { - alias { "Wallclock driver for Dallas 1307" devices_wallclock_ds1307 device_wallclock_ds1307 } - directory devs/wallclock/dallas/ds1307 - script wallclock_ds1307.cdl - hardware - description " - This package provides a driver implementation for - the Dallas 1307 wallclock." -} - -package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 { - alias { "Wallclock driver for Dallas 1742" devices_wallclock_ds1742 device_wallclock_ds1742 } - directory devs/wallclock/dallas/ds1742 - script wallclock_ds1742.cdl - hardware - description " - This package provides a driver implementation for - the Dallas 1742 wallclock." -} - -package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 { - alias { "Wallclock driver for Dallas 12887" devices_wallclock_ds12887 device_wallclock_ds12887 } - directory devs/wallclock/dallas/ds12887 - script wallclock_ds12887.cdl - hardware - description " - This package provides a driver implementation for - the Dallas 12887 wallclock." -} - -package CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 { - alias { "Wallclock driver for REF4955 board" devices_wallclock_ref4955 device_wallclock_ref4955 } - directory devs/wallclock/mips/ref4955 - script wallclock_ref4955.cdl - hardware - description " - This package provides a wallclock driver implementation for the - Toshiba REF4955 board." -} - -package CYGPKG_DEVICES_WALLCLOCK_I386_PC { - alias { "Standard PC RTC device" devs_wallclock_i386_pc_ds12887 pc_rtc } - hardware - directory devs/wallclock/i386/pc - script i386_pc_wallclock_drivers.cdl - description " - RTC driver for standard PC. This is essentially support for a - Dallas DS12887 RTC." -} - -package CYGPKG_DEVICES_WALLCLOCK_SH_HS7729PCI { - alias { "Wallclock driver for HS7729PCI board" devices_wallclock_hs7729pci device_wallclock_hs7729pci } - directory devs/wallclock/sh/hs7729pci - script wallclock_hs7729pci.cdl - hardware - description " - This package provides a wallclock driver implementation for the - Hitachi HS7729PCI board." -} - -package CYGPKG_DEVS_WALLCLOCK_SYNTH { - alias { "Wallclock driver for synthetic target" devs_wallclock_synth wallclock_synth } - directory devs/wallclock/synth - script wallclock_synth.cdl - hardware - description " - This package provides a wallclock driver implementation for the - synthetic target." -} - -package CYGPKG_DEVICES_WALLCLOCK_ARM_AIM711 { - alias { "Wallclock driver for AIM 711" devs_wallclock_arm_aim711 aim711_rt -c } - directory devs/wallclock/arm/aim711 - script aim711_wallclock_drivers.cdl - hardware - description " - This package provides a wallclock driver implementation for the - ARM Industrial Module AIM 711." -} - -package CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX { - alias { "Wallclock driver for LPC2xxx RTC module" } - directory devs/wallclock/arm/lpc2xxx - script lpc2xxx_wallclock.cdl - hardware - description " - This package provides a wallclock driver implementation for the - LPC2xxx RTC module." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_AEB { - alias { "Watchdog driver for ARM/AEB board" devices_watchdog_aeb device_watchdog_aeb } - directory devs/watchdog/arm/aeb - script watchdog_aeb.cdl - hardware - description " - This package provides a watchdog driver implementation for the - ARM/AEB board." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_AT91 { - alias { "Watchdog driver for ARM AT91 CPU" devices_watchdog_at91 device_watchdog_at91 } - directory devs/watchdog/arm/at91 - script watchdog_at91.cdl - hardware - description " - This package provides a watchdog driver implementation for the - ARM AT91 CPU." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC { - alias { "Watchdog driver for ARM AT91 WDTC" devices_watchdog_at91wdtc device_watchdog_at91wdtc } - directory devs/watchdog/arm/at91wdtc - script watchdog_at91wdtc.cdl - hardware - description " - This package provides a watchdog driver implementation for the - ARM AT91 CPUs which have the Watchdog Timer Controller." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX { - alias { "Watchdog driver for ARM LPC2XXX CPU" devices_watchdog_lpc2xxx device_watchdog_lpc2xxx } - directory devs/watchdog/arm/lpc2xxx - script watchdog_lpc2xxx.cdl - hardware - description " - This package provides a watchdog driver implementation for the - ARM LPC2XXX CPU." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 { - alias { "Watchdog driver for ARM/EBSA285 board" devices_watchdog_ebsa285 device_watchdog_ebsa285 } - directory devs/watchdog/arm/ebsa285 - script watchdog_ebsa285.cdl - hardware - description " - This package provides a watchdog driver implementation for the - ARM/EBSA285 board." -} - -package CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 { - alias { "Watchdog driver for StrongARM SA11x0 devices" devices_watchdog_sa11x0 device_watchdog_sa11x0 } - directory devs/watchdog/arm/sa11x0 - script watchdog_sa11x0.cdl - hardware - description " - This package provides a watchdog driver implementation for - Intel StrongARM SA11x0 integrated devices." -} - -package CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 { - alias { "Watchdog driver for MN10300 chip" devices_watchdog_mn10300 device_watchdog_mn10300 } - directory devs/watchdog/mn10300/mn10300 - script watchdog_mn10300.cdl - hardware - description " - This package provides a watchdog driver implementation for the - MN10300 chip." -} - -package CYGPKG_DEVICES_WATCHDOG_MPC5xx { - alias { "Watchdog driver for mpc5xx processor" devices_watchdog_mpc5xx device_watchdog_mpc5xx } - directory devs/watchdog/powerpc/mpc5xx - script watchdog_mpc5xx.cdl - hardware - description " - This package provides a watchdog driver implementation for the - mpc5xx processor family." -} - -package CYGPKG_DEVICES_WATCHDOG_SH_SH3 { - alias { "Watchdog driver for the Hitachi SH3 chip" devices_watchdog_sh3 device_watchdog_sh3 } - directory devs/watchdog/sh/sh3 - script watchdog_sh3.cdl - hardware - description " - This package provides a watchdog driver implementation for the - Hitachi SH3 chip." -} - -package CYGPKG_DEVICES_WATCHDOG_H8300_H8300H { - alias { "Watchdog driver for the Hitachi H8/300H chip" devices_watchdog_h8300h device_watchdog_h8300h } - directory devs/watchdog/h8300/h8300h - script watchdog_h8300h.cdl - hardware - description " - This package provides a watchdog driver implementation for the - Hitachi H8/300H chip." -} - -package CYGPKG_DEVS_WATCHDOG_SYNTH { - alias { "Watchdog driver for the synthetic target" devices_watchdog_synth device_watchdog_synth } - directory devs/watchdog/synth - script synth_watchdog.cdl - hardware - description " - This package provides a watchdog driver for the eCos - synthetic target." -} - -package CYGPKG_IO_WATCHDOG { - alias { "Watchdog IO device" watchdog io_watchdog } - directory io/watchdog - script watchdog.cdl - description " - This package provides a watchdog device." -} - -package CYGPKG_DEVS_SPI_ARM_AT91 { - alias { "Atmel AT91 SPI device driver" devs_spi_arm_at91 spi_at91_driver } - hardware - directory devs/spi/arm/at91 - script spi_at91.cdl - description "Atmel AT91 on-chip spi device driver." -} - -package CYGPKG_DEVS_SPI_ARM_EB55 { - alias { "Atmel AT91EB55 SPI devices" devs_spi_arm_eb55 spi_eb55_devices } - hardware - directory devs/spi/arm/eb55 - script spi_eb55.cdl - description "Atmel AT91EB55 spi devices." -} - -package CYGPKG_DEVS_SPI_ARM_LPC2XXX { - alias { "LPC2xxx SPI driver" } - hardware - directory devs/spi/arm/lpc2xxx - script spi_lpc2xxx.cdl - description "This package provides a driver for the SPI unit of the LPC2xxx - controller family." -} - -package CYGPKG_IO_SPI { - alias { "Generic SPI support" spi io_spi spi_io } - directory io/spi - script spi.cdl - hardware - description " - The generic SPI package provides an API for accessing devices - attached to an SPI bus. It also provides support for writing - bus drivers and for defining SPI device structures." -} - -package CYGPKG_IO_I2C { - alias { "Generic I2C support" i2c io_i2c i2c_io } - directory io/i2c - script i2c.cdl - hardware - description " - The generic I2C package provides an API for accessing devices - attached to an I2C bus. It specifies how I2C bus drivers should - be written and how I2C devices should be defined. There is also - support for bit-banged I2C buses." -} - -package CYGPKG_DEVS_I2C_MCF52xx { - alias { "MCF52xx I2C driver" devs_i2c_mcf52xx mcf52xx_i2c_driver } - hardware - directory devs/i2c/m68k/mcf52xx - script i2c_mcf52xx.cdl - description " - This packages provides an I2C driver for the on-chip - device provided by the MCF52xx coldfire processor family." -} - -package CYGPKG_DEVS_I2C_ARM_LPC2XXX { - alias { "LPC2xxx I2C driver" } - hardware - directory devs/i2c/arm/lpc2xxx - script i2c_lpc2xxx.cdl - description "This package provides a driver for the I2C unit of the LPC2xxx - controller family." -} - -package CYGPKG_DEVS_ADC_ARM_LPC24XX { - alias { "LPC24xx ADC driver" } - hardware - directory devs/adc/arm/lpc24xx - script adc_lpc24xx.cdl - description " - This packages provides an ADC driver for the on-chip - ADC provided by the LPC24xx processor family." -} - -package CYGPKG_DEVS_ADC_SYNTH { - alias { "Synthethic ADC driver" adc_synth } - hardware - directory devs/adc/synth - script adc_synth.cdl - description " - This package provides an ADC driver for the Synthethic target." -} - -package CYGPKG_IO_ADC { - alias { "Generic ADC support" adc io_adc } - directory io/adc - script io_adc.cdl - description " - This package contains drivers for basic I/O services on - adc devices." -} - -package CYGPKG_KERNEL { - alias { "eCos kernel" kernel } - directory kernel - script kernel.cdl - description " -This package contains the core functionality of the eCos kernel. It -relies on functionality provided by various HAL packages and by the -eCos infrastructure. In turn the eCos kernel provides support for -other packages such as the device drivers and the uITRON compatibility -layer." -} - -package CYGPKG_MEMALLOC { - alias { "Dynamic memory allocation" memalloc malloc } - directory services/memalloc/common - script memalloc.cdl - description " -This package provides memory allocator infrastructure required for -dynamic memory allocators, including the ISO standard malloc -interface. It also contains some sample implementations." -} - -package CYGPKG_LOADER { - alias { "Dynamic loader" loader dload } - directory services/loader - script loader.cdl - description " -This package provides support for the dynamic executable and -library loader." -} - -package CYGPKG_OBJLOADER { - alias { "Object file loader" objloader } - directory services/objloader - script objloader.cdl - description " -This package provides support for the object file loader and relocator." -} - -package CYGPKG_COMPRESS_ZLIB { - alias { "Zlib compress/decompress" zlib_compress compress_zlib zlib } - directory services/compress/zlib - script compress_zlib.cdl - description " -This package provides zlib compression and decompression support." -} - -package CYGPKG_POWER { - alias { "Power Management support" power } - directory services/power/common - script power.cdl - description " -This package provides some generic support for power management." -} - -package CYGPKG_CRC { - alias { "CRC support" crc } - directory services/crc - script crc.cdl - description " -This package provides support for CRC functions, including the -POSIX 1003 defined CRC algorithm." -} - -package CYGPKG_CPULOAD { - alias { "cpuload support" cpuload } - directory services/cpuload - script cpuload.cdl - description " -This package measures the CPU load over the last 100ms, 1second -and 10 second. All loads are returned as a percentage, ie 0-100. -This is only a rough measure." -} - -package CYGPKG_PROFILE_GPROF { - alias { "Application profile support" profile_gprof gprof_profile } - directory services/profile/gprof - script profile_gprof.cdl - description " -This package instruments applications to collect profiling data, -using a methodology compatible with the gprof utility." -} - -package CYGPKG_EZXML { - alias { "ezXML" XML ezxml } - directory services/ezxml - script ezxml.cdl - description "ezXML, Simple XML Parser" -} - -package CYGPKG_PDCURSES { - alias { "PDCurses" pdcurses } - directory services/curses/pdcurses - script pdcurses.cdl - description "Public Domain Curses." -} - -package CYGPKG_UITRON { - alias { "uITRON compatibility" uitron } - directory compat/uitron - script uitron.cdl - description " -eCos supports a uITRON Compatibility Layer, providing full Level S -(Standard) compliance with Version 3.02 of the uITRON Standard, plus -many Level E (Extended) features. uITRON is the premier Japanese -embedded RTOS standard." -} - -package CYGPKG_ISOINFRA { - alias { "ISO C and POSIX infrastructure" isoinfra } - directory isoinfra - script isoinfra.cdl - description " -eCos supports implementations of ISO C libraries and POSIX implementations. -This package provides infrastructure used by all such implementations." -} - -package CYGPKG_POSIX { - alias { "POSIX compatibility" posix } - directory compat/posix - script posix.cdl - description " -This package enables compatibility with the ISO/IEEE 1003.1 POSIX -standard. This allows the user application to use a well known -standard API, and starts a thread to invoke the user function -main()" -} - -package CYGPKG_LIBC { - alias { "C library" libc clib clibrary } - directory language/c/libc/common - script libc.cdl - description " -The packages under this package enable compatibility with the ISO C -standard - ISO/IEC 9899:1990. This allows the user application to use -well known standard C library functions, and in eCos starts a thread -to invoke the user function main(). This package is a top-level placeholder -to contain the implementations." -} - -package CYGPKG_LIBC_I18N { - alias { "ISO C library internationalization" libc_i18n } - directory language/c/libc/i18n - script i18n.cdl - description " -This package provides internationalization functions specified by the -ISO C standard - ISO/IEC 9899:1990." -} - -package CYGPKG_LIBC_SETJMP { - alias { "ISO C library non-local jumps" libc_setjmp } - directory language/c/libc/setjmp - script setjmp.cdl - description " -This package provides non-local jump functionality specified by the -ISO C standard - ISO/IEC 9899:1990." -} - -package CYGPKG_LIBC_SIGNALS { - alias { "ISO C library signals" libc_signals } - directory language/c/libc/signals - script signals.cdl - description " -This component controls signal functionality, as implemented in -ISO/IEC 9899:1990 chapter 7.7 with the signal() and raise() functions. -As well as allowing a program to send itself signals, it is also -possible to cause hardware exceptions to be signalled to the program -in a similar way." -} - -package CYGPKG_LIBC_STARTUP { - alias { "ISO environment startup/termination" libc_startup } - directory language/c/libc/startup - script startup.cdl - description " - This package manages the control of the - environment (in the general sense) that an - application would require for full ISO C / POSIX - compatibility, including a main() entry point - supplied with arguments and an environment - (as retrievable by the getenv() function). - It also includes at the other end of things, - what happens when main() returns or exit() is - called." -} - -package CYGPKG_LIBC_STDIO { - alias { "ISO C library standard input/output functions" libc_stdio } - directory language/c/libc/stdio - script stdio.cdl - description " -This package provides standard input/output functions associated -with the header file as specified by the -ISO C standard - ISO/IEC 9899:1990." -} - -package CYGPKG_LIBC_STDLIB { - alias { "ISO C library general utility functions" libc_stdlib } - directory language/c/libc/stdlib - script stdlib.cdl - description " -This package provides general utility functions associated -with the header file as specified by the -ISO C standard - ISO/IEC 9899:1990." -} - -package CYGPKG_LIBC_STRING { - alias { "ISO C library string functions" libc_string } - directory language/c/libc/string - script string.cdl - description " -This package provides string functions specified by the ISO C standard -- ISO/IEC 9899:1990." -} - -package CYGPKG_LIBC_TIME { - alias { "ISO C library date/time functions" libc_time } - directory language/c/libc/time - script time.cdl - description " -This package provides date and time manipulation functionality specified -by the ISO C standard - ISO/IEC 9899:1990." -} - -package CYGPKG_LIBM { - alias { "Math library" libm mathlib mathlibrary } - directory language/c/libm - script libm.cdl - description " -ISO standard floating point mathematical library containing many -useful functions for mathematical calculations." -} - -package CYGPKG_USTL { - alias { "uSTL library" ustl } - directory language/cxx/ustl - script ustl.cdl - description " +#============================================================================= +# +# ecos.db +# +# This file is a temporary database for eCos package information. +# It replaces the old packages and targets files, and will in turn +# be subsumed by another file containing more inormation. +# +#============================================================================= +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +#============================================================================= +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Date: 1999-06-13 +# +# This file contains three lots of information. It details the packages +# in the component repository, the target boards supported by those +# packages, and a set of templates that can be used to instantiate +# configuration. +# +#####DESCRIPTIONEND#### +#=============================================================================== + +package CYGPKG_HAL { + alias { "eCos common HAL" hal hal_common } + directory hal/common + script hal.cdl + description " +The eCos HAL package provide a porting layer for higher-level parts of +the system such as the kernel and the C library. Each installation +should have HAL packages for one or more architectures, and for each +architecture there may be one or more supported platforms. It is +necessary to select one target architecture and one platform for that +architecture. There are also a number of configuration options that +are common to all HAL packages." +} + +package CYGPKG_INFRA { + alias { Infrastructure infra } + directory infra + script infra.cdl + description " +Common types and useful macros. +Tracing and assertion facilities. +Package startup options." +} + +package CYGPKG_IO { + alias { "I/O sub-system" io } + directory io/common + script io.cdl + description " + The eCos system is supplied with a number of different + device drivers. This package contains the basic I/O system + support which is the basis for all drivers." +} + +package CYGPKG_IO_SERIAL { + alias { "Serial device drivers" serial io_serial } + directory io/serial + script io_serial.cdl + description " + This package contains drivers for basic I/O services on + serial devices." +} + +package CYGPKG_IO_CAN { + alias { "CAN device drivers" can io_can } + directory io/can + script io_can.cdl + description " + This package contains drivers for basic I/O services on + CAN devices." +} + +package CYGPKG_DEVS_CAN_MCF52xx_FLEXCAN { + alias { "MCF52xx FlexCAN device drivers" + devs_can_mcf52xx_flexcan mcf52xx_flexcan_serial_driver } + hardware + directory devs/can/m68k/mcf52xx + script can_mcf52xx.cdl + description "Generic CAN device driver for the on-chip + FlexCAN modules in MCF52xx ColdFire processors." +} + +package CYGPKG_DEVS_CAN_AT91SAM7 { + alias { "AT91SAM7 CAN device drivers" + devs_can_at91sam7 at91sam7_can_driver } + hardware + directory devs/can/arm/at91/at91sam7 + script can_at91sam7.cdl + description "Atmel AT91SAM7 on-chip CAN device driver." +} + +package CYGPKG_DEVS_CAN_LPC2XXX { + alias { "LPC2xxx CAN device drivers" + devs_can_lpc2xxx lpc2xxx_can_driver } + hardware + directory devs/can/arm/lpc2xxx + script can_lpc2xxx.cdl + description "LPC2xxx on-chip CAN device driver." +} + +package CYGPKG_DEVS_CAN_LOOP { + alias { "Loop CAN device drivers" + devs_can_loop loop_can_driver } + directory devs/can/loop + script can_loop.cdl + description "Loopback CAN device driver." +} + + +package CYGPKG_IO_PCMCIA { + alias { "PCMCIA & Compact Flash support" pcmcia io_pcmcia cf } + directory io/pcmcia + script io_pcmcia.cdl + description " + This package contains basic card services support for PCMCIA + and Compact Flash devices." +} + +package CYGPKG_DEVS_PCMCIA_ASSABET { + alias { "SA11x0/Assabet PCMCIA & Compact Flash support" pcmcia_assabet assabet_pcmcia assabet_cf io_assabet_pcmcia} + directory devs/pcmcia/arm/assabet + script pcmcia_assabet.cdl + hardware + description " + This package contains hardware support for PCMCIA + and Compact Flash devices on the SA11x0/Assabet board." +} + +package CYGPKG_DEVS_PCMCIA_CERF { + alias { "SA11x0/Cerf PCMCIA & Compact Flash support" pcmcia_cerf cerf_pcmcia cerf_cf io_cerf_pcmcia} + directory devs/pcmcia/arm/cerf + script pcmcia_cerf.cdl + hardware + description " + This package contains hardware support for PCMCIA + and Compact Flash devices on the SA11x0/Cerf board." +} + +package CYGPKG_DEVS_PCMCIA_CERFPDA { + alias { "SA11x0/Cerfpda PCMCIA & Compact Flash support" pcmcia_cerfpda cerfpda_pcmcia cerfpda_cf io_cerfpda_pcmcia} + directory devs/pcmcia/arm/cerfpda + script pcmcia_cerfpda.cdl + hardware + description " + This package contains hardware support for PCMCIA + and Compact Flash devices on the SA11x0/Cerfpda." +} + +package CYGPKG_DEVS_PCMCIA_IPAQ { + alias { "SA11x0/iPAQ PCMCIA & Compact Flash support" pcmcia_ipaq ipaq_pcmcia ipaq_cf io_ipaq_pcmcia} + directory devs/pcmcia/arm/ipaq + script pcmcia_ipaq.cdl + hardware + description " + This package contains hardware support for PCMCIA + and Compact Flash devices on the Compaq iPAQ pocket PC." +} + +package CYGPKG_IO_FLASH { + alias { "Generic FLASH memory support" flash } + directory io/flash + script io_flash.cdl + description " + This package contains generic support for FLASH memory." +} + +package CYGPKG_DEVS_FLASH_ARM_AAED2000 { + alias { "Support for flash memory on Agilent AAED2000 board" flash_aaed2000 } + directory devs/flash/arm/aaed2000 + script flash_arm_aaed2000.cdl + hardware + description " + This package contains hardware support for flash memory + on the Agilent AAED2000 platform." +} + +package CYGPKG_DEVS_FLASH_AMD_AM29XXXXX { + alias { "Support for AMD AM29xxxxx flash memory (deprecated)" flash_amd_am29xxxxx } + directory devs/flash/amd/am29xxxxx + script flash_amd_am29xxxxx.cdl + hardware + description " + This package contains hardware support for AMD AM29xxxxx + flash memory devices." +} + +package CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 { + alias { "Support for AMD AM29xxxxx flash memory" flash_amd_am29xxxxx_v2 } + directory devs/flash/amd/am29xxxxxv2 + script flash_am29xxxxx_v2.cdl + hardware + description " + This package contains hardware support for AMD AM29xxxxx + flash memory devices." +} + +package CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX { + alias { "Support for Atmel AT29Cxxxx flash memory" flash_atmel_at29cxxxx } + directory devs/flash/atmel/at29cxxxx + script flash_atmel_at29cxxxx.cdl + hardware + description " + This package contains hardware support for Atmel AT29Cxxxx + flash memory devices." +} + +package CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX { + alias { "Support for Atmel AT49xxxx flash memory" flash_atmel_at49xxxx } + directory devs/flash/atmel/at49xxxx + script flash_atmel_at49xxxx.cdl + hardware + description " + This package contains hardware support for Atmel AT49xxxx + flash memory devices." +} + +package CYGPKG_DEVS_FLASH_ATMEL_DATAFLASH { + alias { "Atmel DataFlash support" flash_dataflash dataflash } + directory devs/flash/atmel/dataflash + script devs_flash_atmel_dataflash.cdl + hardware + description "This package contains hardware support for Atmel DataFlash." +} + +package CYGPKG_DEVS_FLASH_SPI_AT25DFXXX { + alias { "AT25DFxxx SPI Flash" flash_spi_at25dfxxx } + directory devs/flash/spi/at25dfxxx + script flash_at25dfxxx.cdl + hardware + description " + Support for AT25DFxxx SPI flash devices from Atmel." +} + +package CYGPKG_DEVS_FLASH_SPI_M25PXX { + alias { "M25Pxx SPI Flash" flash_spi_m25pxx } + directory devs/flash/spi/m25pxx + script flash_m25pxx.cdl + hardware + description " + Support for M25Pxx SPI flash devices." +} + +package CYGPKG_DEVS_FLASH_SPI_SST25XX { + alias { "SST25xx SPI Flash" flash_spi_sst25xx } + directory devs/flash/spi/sst25xx + script flash_sst25xx.cdl + hardware + description " + Support for SST25xx SPI flash devices from Silicon Storage + Technology." +} + +package CYGPKG_DEVS_FLASH_SST25XX_FREESCALE_DSPI { + alias { "SST25XX FLASH over Freescale DSPI" } + + directory devs/flash/freescale/dspi/sst25xx + script flash_sst25xx_freescale_dspi.cdl + description " + This package provides a driver for SST25XX serial FLASH + attached to a Freescale DSPI interfaces." +} + +package CYGPKG_DEVS_FLASH_ARM_PID { + alias { "Support for flash memory on ARM/PID board" flash_arm_pid } + directory devs/flash/arm/pid + script flash_arm_pid.cdl + hardware + description " + This package contains hardware support for flash memory + on the ARM PID platform." +} + +package CYGPKG_DEVS_FLASH_ARM_E7T { + alias { "FLASH memory support for the ARM Evaluator-7T" flash_e7t } + directory devs/flash/arm/e7t + script flash_e7t.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the ARM Evaluator-7T platform." +} + +package CYGPKG_DEVS_FLASH_EA2468 { + alias { "FLASH memory support for EA LPC2468 OEM board" flash_ea2468 } + directory devs/flash/arm/ea2468 + script flash_ea2468.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Embedded Artists LCP2468 OEM board." +} + +package CYGPKG_DEVS_FLASH_SH_EDK7708 { + alias { "Support for flash memory on Hitachi/EDK7708 board" flash_sh_edk7708 } + directory devs/flash/sh/edk7708 + script flash_sh_edk7708.cdl + hardware + description " + This package contains hardware support for flash memory + on the Hitachi EDK7708 platform." +} + +package CYGPKG_DEVS_FLASH_CQ7750 { + alias { "Support for flash memory on CqREEK SH7750 board" flash_cq7750 } + directory devs/flash/sh/cq7750 + script flash_cq7750.cdl + hardware + description " + This package contains hardware support for flash memory + on the CqREEK SH7750 platform." +} + +package CYGPKG_DEVS_FLASH_MIPS_OCELOT { + alias { "Support for flash memory on PMC-Sierra/Ocelot board" flash_qed_ocelot } + directory devs/flash/mips/ocelot + script flash_mips_ocelot.cdl + hardware + description " + This package contains hardware support for flash memory + on the PMC-Sierra Ocelot platform." +} + +package CYGPKG_DEVS_FLASH_MIPS_VRC437X { + alias { "Support for flash memory on VRC437X boards" flash_vrc437x } + directory devs/flash/mips/vrc437x + script flash_mips_vrc437x.cdl + hardware + description " + This package contains hardware support for flash memory + on the VRC437X platform." +} + +package CYGPKG_DEVS_FLASH_MIPS_REFIDT334 { + alias { "MIPS IDT 79RC32334 reference platform flash support" flash_refidt334 } + directory devs/flash/mips/idt79s334a + script flash_mips_refidt334.cdl + hardware + description " + This package contains hardware support for flash memory + on the IDT MIPS 334a reference platform." +} + +package CYGPKG_DEVS_FLASH_SH_HS7729PCI { + alias { "Hitachi SH/HS7729PCI FLASH memory support" flash_hs7729pci } + directory devs/flash/sh/hs7729pci + script flash_sh_hs7729pci.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Hitachi/HS7729PCI platform." +} + +package CYGPKG_DEVS_FLASH_SH_SE77X9 { + alias { "Hitachi SH/SE77X9 FLASH memory support" flash_se77x9 } + directory devs/flash/sh/se77x9 + script flash_sh_se77x9.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Hitachi/SE77X9 platform." +} + +package CYGPKG_DEVS_FLASH_SH_SE7751 { + alias { "Hitachi SH/SE7751 FLASH memory support" flash_se7751 } + directory devs/flash/sh/se7751 + script flash_sh_se7751.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Hitachi/SE7751 platform." +} + +package CYGPKG_DEVS_FLASH_SH_MICRODEV { + alias { "SuperH SH4-202 MicroDev CPU board FLASH memory support" flash_microdev } + directory devs/flash/sh/microdev + script flash_microdev.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the SuperH SH4-202 MicroDev CPU board platform." +} + +package CYGPKG_DEVS_FLASH_EBSA285 { + alias { "FLASH memory support for StrongARM EBSA-285" flash_ebsa285 } + directory devs/flash/arm/ebsa285 + script flash_ebsa285.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the StrongARM EBSA-285 platform." +} + +package CYGPKG_DEVS_FLASH_SA1100MM { + alias { "FLASH memory support for StrongARM SA1100 Multimedia" flash_sa1100mm } + directory devs/flash/arm/sa1100mm + script flash_sa1100mm.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the StrongARM SA1100 Multimedia platform." +} + +package CYGPKG_DEVS_FLASH_EDB7XXX { + alias { "FLASH support for Cirrus Logic EP7xxx based boards" flash_edb7xxx } + directory devs/flash/arm/edb7xxx + script flash_edb7xxx.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Cirrus Logic EP7xxx based platform(s)." +} + +package CYGPKG_DEVS_FLASH_AT91 { + alias { "FLASH memory support for Atmel AT91 EFC" flash_at91 } + directory devs/flash/arm/at91 + script flash_at91.cdl + hardware + description " + This package contains hardware support for Embedded FLASH + controller as found in the AT91SAM7S platform" +} + +package CYGPKG_DEVS_FLASH_EB40 { + alias { "FLASH memory support for Atmel AT91/EB40" flash_eb40 } + directory devs/flash/arm/eb40 + script flash_eb40.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Atmel AT91/EB40 platform(s)." +} + +package CYGPKG_DEVS_FLASH_EB40A { + alias { "FLASH memory support for Atmel AT91/EB40A" flash_eb40a } + directory devs/flash/arm/eb40a + script flash_eb40a.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Atmel AT91/EB40A platform(s)." +} + +package CYGPKG_DEVS_FLASH_EB42 { + alias { "FLASH memory support for Atmel AT91/EB42" flash_eb42 } + directory devs/flash/arm/eb42 + script flash_eb42.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Atmel AT91/EB42 platform(s)." +} + +package CYGPKG_DEVS_FLASH_EB55 { + alias { "FLASH memory support for Atmel AT91/EB55" flash_eb55 } + directory devs/flash/arm/eb55 + script flash_eb55.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Atmel AT91/EB55 platform(s)." +} + +package CYGPKG_DEVS_FLASH_JTST { + alias { "FLASH memory support for Atmel JTST" flash_jtst } + directory devs/flash/arm/jtst + script flash_jtst.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Atmel JTST platform(s)." +} + +package CYGPKG_DEVS_FLASH_PHYCORE { + alias { "FLASH memory support for PHYTEC phyCORE AT91M55800A" flash_phycore } + directory devs/flash/arm/phycore + script flash_phycore.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the PHYTEC phyCORE AT91M55800A platform(s)." +} + +package CYGPKG_DEVS_FLASH_PHYCORE229X { + alias { "FLASH memory support for Phytec phyCORE-LPC229x" flash_phycore229x } + directory devs/flash/arm/phycore229x + script flash_phycore229x.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Phytec phyCORE-LPC229x platform(s)." +} + +package CYGPKG_DEVS_FLASH_ASSABET { + alias { "FLASH memory support for Intel SA1110 (Assabet)" flash_assabet } + directory devs/flash/arm/assabet + script flash_assabet.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intel StrongARM SA-1110 Assabet platform." +} + +package CYGPKG_DEVS_FLASH_CERF { + alias { "FLASH memory support for Intrinsyc SA1110 (Cerf)" flash_cerf } + directory devs/flash/arm/cerf + script flash_cerf.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intrinsyc SA1110 Cerf board." +} + +package CYGPKG_DEVS_FLASH_CERFPDA { + alias { "FLASH memory support for Intrinsyc SA1110 (Cerfpda)" flash_cerfpda } + directory devs/flash/arm/cerfpda + script flash_cerfpda.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intrinsyc SA1110 Cerfpda." +} + +package CYGPKG_DEVS_FLASH_IPAQ { + alias { "FLASH memory support for Intel SA1110 (Ipaq)" flash_ipaq } + directory devs/flash/arm/ipaq + script flash_ipaq.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intel StrongARM SA-1110 iPAQ platform." +} + +package CYGPKG_DEVS_FLASH_FLEXANET { + alias { "FLASH memory support for Flexanet" flash_flexanet } + directory devs/flash/arm/flexanet + script flash_flexanet.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the SA-1100 Flexanet platform." +} + +package CYGPKG_DEVS_FLASH_MPC50 { + alias { "FLASH memory support for MPC 5.0" flash_mpc50 } + directory devs/flash/arm/mpc50 + script flash_mpc50.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the MPC 5.0." +} + +package CYGPKG_DEVS_FLASH_MALTA { + alias { "FLASH memory support for MIPS Malta board" flash_malta } + directory devs/flash/mips/malta + script flash_malta.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the MIPS Malta platform." +} + +package CYGPKG_DEVS_FLASH_ARM_EXCALIBUR { + alias { "FLASH memory support for Altera ARM9/Excalibur board" flash_excalibur } + directory devs/flash/arm/excalibur + script flash_excalibur.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Altera Excalibur platform." +} + +package CYGPKG_DEVS_FLASH_ARM_SMDK2410 { + alias { "FLASH memory support for Samsung ARM9/SMDK2410 board" flash_smdk2410 } + directory devs/flash/arm/smdk2410 + script flash_smdk2410.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Samsung smdk2410 platform." +} + +package CYGPKG_DEVS_FLASH_ARM_INNOVATOR { + alias { "FLASH memory support for the Innovator" flash_innovator } + directory devs/flash/arm/innovator + script flash_innovator.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Innovator platform." +} + +package CYGPKG_DEVS_FLASH_ARM_AIM711 { + alias { "Support for flash memory on AIM 711 board" flash_arm_snds } + directory devs/flash/arm/aim711 + script flash_arm_aim711.cdl + hardware + description " + This package contains hardware support for flash memory + on the ARM Industrial Module AIM 711 platform." +} + +package CYGPKG_DEVS_FLASH_NANO { + alias { "FLASH memory support for Intel SA1110 nanoEngine" flash_nano } + directory devs/flash/arm/nano + script flash_nano.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the StrongARM SA-1110 nanoEngine platform." +} + +package CYGPKG_DEVS_FLASH_STRATA { + alias { "Generic FLASH memory support for Intel StrataFLASH (deprecated)" strata } + directory devs/flash/intel/strata + script flash_strata.cdl + hardware + description " + This package contains generic hardware support for Intel + StrataFLASH memory devices." +} + +package CYGPKG_DEVS_FLASH_STRATA_V2 { + alias { "Generic FLASH memory support for Intel StrataFLASH" strata_v2 } + directory devs/flash/intel/stratav2 + script flash_strata_v2.cdl + hardware + description " + This package contains generic hardware support for Intel + StrataFLASH memory devices using the V2 device API." +} + +package CYGPKG_DEVS_FLASH_SST_39VFXXX { + alias { "Support for SST 39VFXXX flash memory" flash_sst_39vfXXX } + directory devs/flash/sst/39vfxxx + script flash_sst_39vfxxx.cdl + hardware + description " + This package contains hardware support for SST 39VFxxx + flash memory devices. Until now it supports SST 39VF080, + 39VF016 and 39VF400 devices." +} + +package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + alias { "Generic FLASH memory support for Intel 28Fxxx Flash parts" flashfile } + directory devs/flash/intel/28fxxx + script flash_intel_28fxxx.cdl + hardware + description " + This package contains generic hardware support for Intel + Flash memory devices." +} + +package CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 { + alias { "FLASH memory support for Cyclone IQ80310" flash_iq80310 } + directory devs/flash/arm/iq80310 + script flash_iq80310.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Cyclone IQ80310 platform." +} + +package CYGPKG_DEVS_FLASH_IQ80321 { + alias { "FLASH memory support for IQ80321" flash_iq80321 } + directory devs/flash/arm/iq80321 + script flash_iq80321.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the IQ80321 platform." +} + +package CYGPKG_DEVS_FLASH_IXDP425 { + alias { "FLASH memory support for IXDP425" flash_ixdp425 } + directory devs/flash/arm/ixdp425 + script flash_ixdp425.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the IXDP425 platform." +} + +package CYGPKG_DEVS_FLASH_XSENGINE { + alias { "FLASH memory support for XSEngine" flash_xsengine } + directory devs/flash/arm/xsengine + script flash_xsengine.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the XSEngine platform." +} + +package CYGPKG_DEVS_FLASH_GRG { + alias { "FLASH memory support for GRG" flash_grg } + directory devs/flash/arm/grg + script flash_grg.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intel Generic Residential Gateway platform." +} + +package CYGPKG_DEVS_FLASH_PRPMC1100 { + alias { "FLASH memory support for PrPMC1100" flash_prpmc1100 } + directory devs/flash/arm/prpmc1100 + script flash_prpmc1100.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Motorola PrPMC1100 platform." +} + +package CYGPKG_DEVS_FLASH_ARM_INTEGRATOR { + alias { "FLASH memory support for ARM INTEGRATOR" flash_integrator } + directory devs/flash/arm/integrator + script flash_integrator.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the ARM INTEGRATOR platform." +} + +package CYGPKG_DEVS_FLASH_MBX { + alias { "FLASH memory support for Motorola PowerPC/860 MBX" flash_mbx } + directory devs/flash/powerpc/mbx + script flash_mbx.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Motorola PowerPC/860 MBX platform." +} + +package CYGPKG_DEVS_FLASH_TS6 { + alias { "FLASH memory support for Delphi Communication Systems, Inc. TigerSHARC6 Board" flash_ts6 } + directory devs/flash/powerpc/ts6 + script flash_ts6.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Delphi Communication Systems TigerSHARC6 platform." +} + +package CYGPKG_DEVS_FLASH_VADS { + alias { "FLASH memory support for Motorola MPC8260 Voyager ADS board" flash_vads } + directory devs/flash/powerpc/vads + script flash_vads.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Motorola MPC8260 Voyager ADS platform." +} + +package CYGPKG_DEVS_FLASH_CME555 { + alias { "FLASH memory support for Axiom's CME555" flash_cme555 } + directory devs/flash/powerpc/cme555 + script flash_cme555.cdl + hardware + description " + This package contains hardware support for FLASH memory + on Axiom's CME555 board." +} + +package CYGPKG_DEVS_FLASH_EC555 { + alias { "FLASH memory support for ec555 board" flash_ec555 } + directory devs/flash/powerpc/ec555 + script flash_ec555.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the ec555 board." +} + +package CYGPKG_DEVS_FLASH_PATI { + alias { "FLASH memory support for PowerPC PATI board" flash_pati } + directory devs/flash/powerpc/pati + script flash_pati.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the PowerPC PATI platform." +} + +package CYGPKG_DEVS_FLASH_VIPER { + alias { "FLASH memory support for A&M Viper PowerPC/8xx" flash_viper } + directory devs/flash/powerpc/viper + script flash_viper.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the A&M PowerPC/8xx VIPER platform." +} + +package CYGPKG_DEVS_FLASH_MN10300_STB { + alias { "FLASH memory support for Matsushita MN10300 STB" flash_stb } + directory devs/flash/mn10300/stb + script flash_stb.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Matsushita MN10300 STB platform (SRAM2 socket)." +} + +package CYGPKG_DEVS_FLASH_MN10300_ASB2303 { + alias { "FLASH memory support for Matsushita ASB2303" flash_asb2303 } + directory devs/flash/mn10300/asb2303 + script flash_asb2303.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Matsushita MN10300 ASB2303 platform (system flash socket)." +} + +package CYGPKG_DEVS_FLASH_MN10300_ASB2305 { + alias { "FLASH memory support for Matsushita ASB2305" flash_asb2305 } + directory devs/flash/mn10300/asb2305 + script flash_asb2305.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Matsushita MN10300 ASB2305 platform (system flash socket)." +} + +package CYGPKG_DEVS_FLASH_ATLAS { + alias { "FLASH memory support for MIPS Atlas" flash_atlas } + directory devs/flash/mips/atlas + script flash_atlas.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the MIPS Atlas platform." +} +package CYGPKG_DEVS_FLASH_SYNTH { + alias { "Synthetic FLASH memory support (legacy)" synth_flash flash_synth } + directory devs/flash/synth + script flash_synth.cdl + hardware + description " + FLASH memory device support for Synthetic target" +} + +package CYGPKG_DEVS_FLASH_SYNTH_V2 { + alias { "Synthetic FLASH memory support" synth_flashv2 flash_synthv2 } + directory devs/flash/synthv2 + script flash_synth.cdl + hardware + description " + FLASH memory device support for Synthetic target using the new API" +} + +package CYGPKG_DEVS_FLASH_TOSHIBA_TC58XXX { + alias { "Support for Toshiba TC58xxx flash memory" flash_toshiba_tc58xxx } + directory devs/flash/toshiba/tc58xxx + script flash_toshiba_tc58xxx.cdl + hardware + description " + This package contains hardware support for Toshiba TC58xxx + NAND flash memory devices." +} + +package CYGPKG_DEVS_FLASH_FRV_FRV400 { + alias { "Fujitsu FRV400 FLASH memory support" flash_frv400 } + directory devs/flash/frv/frv400 + script flash_frv_frv400.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Fujitsu FRV400 platform." +} + +package CYGPKG_DEVS_FLASH_FRV_PDK403 { + alias { "Fujitsu MB93093 FLASH memory support" flash_mb93093 } + directory devs/flash/frv/pdk403 + script flash_frv_pdk403.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Fujitsu MB93093-PD00 Portable Development Kit." +} + +package CYGPKG_DEVS_FLASH_ARM_LPC2XXX { + alias { "Support for the internal flash memory of LPC2xxx devices" flash_arm_lpc2xxx } + directory devs/flash/arm/lpc2xxx + script flash_arm_lpc2xxx.cdl + hardware + description " + This package contains hardware support for the internal + flash memory of the LPC2xxx devices." +} + +package CYGPKG_DEVS_FLASH_ARM_OLPCX2294 { + alias { "Support for Flash memory on Olimex LPC-E2294, LPC-H2294, LPC-L2294-1M boards" flash_olpcx2294 } + directory devs/flash/arm/olpcx2294 + script flash_olpcx2294.cdl + hardware + description " + This package contains hardware support for flash memory parts + on the Olimex LPC-E2294, LPC-H2294 LPC-L2294-1M platforms." + +} + +package CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 { + alias { "External Flash memory support for OLPCE2294, OLPCH2294, OLPCL2294" flash_olpcx2294_v2 } + directory devs/flash/arm/olpcx2294v2 + script flash_olpcx2294.cdl + hardware + description " + The flash_olpcx2294_v2 provides hardware support for external + flash memory parts on the Olimex LPC-E2294, LPC-H2294, + and LPC-L2294-1M boards. It uses eCos Flash v2 API." +} + +package CYGPKG_DEVS_FLASH_KINETIS { + alias { "Internal FLASH memory support for freescale kinetis" } + directory devs/flash/freescale/kinetis + script kinetis_flash.cdl + hardware + description " + This package contains hardware support for the internal FLASH memory + on kinetis devices." +} + +package CYGPKG_DEVS_RAM_MICRON_CELLULARRAM { + alias { "Micron CellularRam 1.5 support" } + directory hal/misc/ram/micron/cellularram + script ram_micron_cellularram.cdl + hardware + description " + This package contains hardware support for Micron + CellularRam memory devices." +} + +package CYGPKG_DEVS_TOUCH_IPAQ { + alias { "Touch screen support for iPAQ" touch_ipaq } + directory devs/touch/arm/ipaq + script touch_ipaq.cdl + hardware + description " + This package contains hardware support for the touch screen + on the Compaq iPAQ Pocket PC." +} + +package CYGPKG_DEVS_KBD_IPAQ { + alias { "Keypad/button support for iPAQ" kbd_ipaq } + directory devs/kbd/arm/ipaq + script kbd_ipaq.cdl + hardware + description " + This package contains hardware support for the keyboard buttons + on the Compaq iPAQ Pocket PC." +} + +package CYGPKG_DEVS_TOUCH_AAED2000 { + alias { "Touch screen support for Agilent AAED2000" touch_aaed2000 } + directory devs/touch/arm/aaed2000 + script touch_aaed2000.cdl + hardware + description " + This package contains hardware support for the touch screen + on the Agilent AAED2000 prototype." +} + +package CYGPKG_DEVS_KBD_AAED2000 { + alias { "Keyboard support for Agilent AAED2000" kbd_aaed2000 } + directory devs/kbd/arm/aaed2000 + script kbd_aaed2000.cdl + hardware + description " + This package contains hardware support for the keyboard + on the Agilent AAED2000 prototype." +} + +package CYGPKG_IO_SERIAL_ARM_EBSA285 { + alias { "Intel EBSA285 serial driver" + devs_serial_arm_ebsa285 ebsa285_serial_driver } + hardware + directory devs/serial/arm/ebsa285 + script ser_arm_ebsa285.cdl + description "Intel StrongARM/EBSA285 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_XSCALE_PXA2X0 { + alias { "Intel XScale PXA2X0 serial driver" + devs_serial_arm_xscale_pxa pxa_serial_driver } + hardware + directory devs/serial/arm/pxa2x0 + script ser_arm_xscale_pxa2x0.cdl + description "Intel XScale/PXA2X0 serial device drivers" +} + + +package CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 { + alias { "Intel XScale IOP310 serial driver" + devs_serial_arm_iop310 iop310_serial_driver } + hardware + directory devs/serial/arm/iop310 + script ser_arm_iop310.cdl + description "Intel XScale IOP310 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_IQ80321 { + alias { "Intel XScale IQ80321 serial driver" + devs_serial_arm_iq80321 iq80321_serial_driver } + hardware + directory devs/serial/arm/iq80321 + script ser_arm_iq80321.cdl + description "Intel XScale/IQ80321 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_SA11X0 { + alias { "Intel StrongARM SA11x0 serial driver" + devs_serial_arm_sa11x0 sa11x0_serial_driver } + hardware + directory devs/serial/arm/sa11x0 + script ser_arm_sa11x0.cdl + description "Intel StrongARM/SA11x0 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_PID { + alias { "ARM PID serial device drivers" + devs_serial_arm_pid pid_serial_driver } + hardware + directory devs/serial/arm/pid + script ser_arm_pid.cdl + description "ARM PID serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_CERFPDA { + alias { "Cerfpda 16x5x serial device drivers" + devs_serial_arm_cerfpda cerfpda_serial_driver } + hardware + directory devs/serial/arm/cerfpda + script ser_arm_cerfpda.cdl + description "Cerfpda serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_AEB { + alias { "ARM AEB-1 serial device drivers" + devs_serial_arm_aeb aeb_serial_driver } + hardware + directory devs/serial/arm/aeb + script ser_arm_aeb.cdl + description "ARM AEB-1 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_AAED2000 { + alias { "Agilent AAED2000 serial device drivers" + devs_serial_arm_aaed2000 aaed2000_serial_driver } + hardware + directory devs/serial/arm/aaed2000 + script ser_arm_aaed2000.cdl + description "Agilent AAED2000 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_SMDK2410 { + alias { "Samsung ARM9/SMDK2410 board serial device drivers" + devs_serial_arm_smdk2410 smdk2410_serial_driver } + hardware + directory devs/serial/arm/smdk2410 + script ser_arm_smdk2410.cdl + description "Samsung ARM9/SMDK2410 board serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_EDB7XXX { + alias { "Cirrus Logic ARM based board serial device drivers" + devs_serial_arm_edb7xxx edb7xxx_serial_driver } + hardware + directory devs/serial/arm/edb7xxx + script ser_arm_edb7xxx.cdl + description "Cirrus Logic ARM based development board serial + device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_CMA230 { + alias { "Cogent ARM/CMA230 serial device drivers" + devs_serial_arm_cma230 cma230_serial_driver } + hardware + directory devs/serial/arm/cma230 + script ser_arm_cma230.cdl + description "Cogent ARM/CMA230 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_E7T { + alias { "ARM AEB-2 (E7T) serial device drivers" + devs_serial_arm_e7t e7t_serial_driver } + hardware + directory devs/serial/arm/e7t + script ser_arm_e7t.cdl + description "ARM AEB-2 (E7T) serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_S3C4510 { + alias { "Generig ARM S3C4510 serial device driver" + devs_serial_arm_s3c4510 s3c4510_serial_driver } + hardware + directory devs/serial/arm/s3c4510 + script ser_arm_s3c4510.cdl + description "Generic serial device driver for the internal + serial interface of the S3C4510" +} + +package CYGPKG_IO_SERIAL_ARM_AIM711 { + alias { "AIM 711 serial device drivers" + devs_serial_arm_aim711 aim711_serial_driver } + hardware + directory devs/serial/arm/aim711 + script ser_arm_aim711.cdl + description "ARM Industral Module AIM 711 serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_INTEGRATOR { + alias { "ARM INTEGRATOR serial device drivers" + devs_serial_arm_integrator integrator_serial_driver } + hardware + directory devs/serial/arm/integrator + script ser_arm_integrator.cdl + description "ARM INTEGRATOR serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_AT91 { + alias { "Atmel AT91 serial device driver" + devs_serial_arm_at91 at91_serial_driver } + hardware + directory devs/serial/arm/at91 + script ser_arm_at91.cdl + description "Atmel AT91 on-chip serial device driver." +} + +package CYGPKG_IO_SERIAL_ARM_LPC2XXX { + alias { "ARM LPC2XXX serial device drivers" + devs_serial_arm_lpc2xxx lpc2xxx_serial_driver } + hardware + directory devs/serial/arm/lpc2xxx + script ser_arm_lpc2xxx.cdl + description "ARM LPC2XXX serial device drivers" +} + +package CYGPKG_IO_SERIAL_ARM_LPC24XX { + alias { "ARM LPC24XX/LPC17XX serial device drivers" } + hardware + directory devs/serial/arm/lpc24xx + script ser_arm_lpc24xx.cdl + description "ARM LPC24XX/LPC17XX serial device drivers" +} + +package CYGPKG_IO_SERIAL_CORTEXM_A2FXXX { + alias { "Cortex-M3/Actel Smartfusion (A2Fxxx) serial device drivers" + devs_serial_cortexm_a2fxxx a2fxxx_serial_driver } + hardware + directory devs/serial/cortexm/a2fxxx + script ser_cortexm_a2fxxx.cdl + description "Cortex-M3/Actel Smartfusion serial device drivers" +} + +package CYGPKG_IO_SERIAL_POWERPC_COGENT { + alias { "Cogent PowerPC serial device drivers" + devs_serial_powerpc_cogent cogent_serial_driver } + hardware + directory devs/serial/powerpc/cogent + script ser_powerpc_cogent.cdl + description "Cogent PowerPC serial device drivers" +} + +package CYGPKG_IO_SERIAL_POWERPC_MPC555 { + alias { "mpc555 PowerPC serial device drivers" + devs_serial_powerpc_mpc555 mpc555_serial_driver } + hardware + directory devs/serial/powerpc/mpc555 + script ser_powerpc_mpc555.cdl + description "mpc555 PowerPC serial device drivers" +} + +package CYGPKG_IO_SERIAL_FREESCALE_ESCI_H { + alias { "ESCI serial device header" + devs_serial_freescale_esci_h esci_serial_header } + hardware + directory devs/serial/freescale/esci/hdr + script ser_freescale_esci_h.cdl + description "Freescale eSCI - Enhanced Serial Communications Interface header. + Needed by hal_diag and ser_esci drivers." +} + +package CYGPKG_IO_SERIAL_FREESCALE_ESCI { + alias { "ESCI serial device driver" + devs_serial_freescale_esci esci_serial_driver } + hardware + directory devs/serial/freescale/esci/drv + script ser_freescale_esci.cdl + description "Freescale eSCI - Enhanced Serial Communications Interface serial device driver" +} + +package CYGPKG_IO_SERIAL_FREESCALE_UART_HDR { + alias { "Freescale UART serial device header" + devs_serial_freescale_uart_hdr freescale_uart_serial_header } + hardware + directory devs/serial/freescale/uart/hdr + script ser_freescale_uart_hdr.cdl + description "Freescale UART header. + Needed by hal_diag and ser_freescale_uart drivers." +} + +package CYGPKG_IO_SERIAL_FREESCALE_UART { + alias { "Freescale UART serial device driver" + devs_serial_freescale_uart freescale_uart_serial_driver } + hardware + directory devs/serial/freescale/uart/drv + script ser_freescale_uart.cdl + description "Freescale UART driver." +} + +package CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC { + alias { "PowerPC QUICC/SMC serial device drivers" + devs_serial_quicc_smc quicc_smc_serial_driver + devs_serial_powerpc_quicc_smc + devs_serial_powerpc_quicc quicc_serial_driver } + hardware + directory devs/serial/powerpc/quicc + script ser_quicc_smc.cdl + description "PowerPC QUICC/SMC serial device drivers" +} + +package CYGPKG_IO_SERIAL_POWERPC_MPC8XXX { + alias { "PowerPC MPC8XXX (QUICC-II) serial device drivers" + devs_serial_powerpc_mpc8xxx mpc8xxx_serial_driver } + hardware + directory devs/serial/powerpc/mpc8xxx + script ser_mpc8xxx.cdl + description "PowerPC MPC8XXX (QUICC-II) serial device drivers" +} + +package CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC { + alias { "PowerPC VADS QUICC2/SCC serial device drivers" + devs_serial_quicc2_scc quicc2_scc_serial_driver + devs_serial_powerpc_quicc2_scc + devs_serial_powerpc_quicc2 quicc2_serial_driver } + hardware + directory devs/serial/powerpc/quicc2 + script ser_quicc2_scc.cdl + description "PowerPC VADS QUICC2/SCC serial device drivers" +} + +package CYGPKG_IO_SERIAL_POWERPC_PPC405 { + alias { "PowerPC PPC405GP serial device drivers" devs_serial_ppc405 } + hardware + directory devs/serial/powerpc/ppc405 + script ser_powerpc_ppc405.cdl + description "PowerPC PPC405GP serial device drivers" +} + +package CYGPKG_IO_SERIAL_SPARCLITE_SLEB { + alias { "SPARClite SLEB serial device drivers" + devs_serial_sparclite_sleb sleb_serial_driver } + hardware + directory devs/serial/sparclite/sleb + script ser_sparclite_sleb.cdl + description "SPARClite SLEB serial device drivers" +} + +package CYGPKG_IO_SERIAL_TX39_JMR3904 { + alias { "TX39 JMR3904 serial device drivers" + devs_serial_tx39_jmr3904 jmr3904_serial_driver + devs_serial_mips_jmr3904 tx3904_serial_driver } + hardware + directory devs/serial/mips/jmr3904 + script ser_mips_jmr3904.cdl + description "TX39 JMR3904 serial device drivers" +} + +package CYGPKG_IO_SERIAL_MIPS_ATLAS { + alias { "Atlas serial device drivers" + devs_serial_atlas atlas_serial_driver + devs_serial_mips_atlas mips_atlas_serial_driver } + hardware + directory devs/serial/mips/atlas + script ser_mips_atlas.cdl + description "Atlas serial device drivers" +} + +package CYGPKG_IO_SERIAL_MIPS_REF4955 { + alias { "TX49 REF4955 serial device drivers" + devs_serial_mips_ref4955 ref4955_serial_driver } + hardware + directory devs/serial/mips/ref4955 + script ser_mips_ref4955.cdl + description "TX49 REF4955 serial device drivers" +} + +package CYGPKG_IO_SERIAL_MIPS_VRC437X { + alias { "VRC437X serial device drivers" + devs_serial_mips_vrc437x vrc437x_serial_driver } + hardware + directory devs/serial/mips/vrc437x + script ser_mips_vrc437x.cdl + description "VRC437X serial device drivers" +} + +package CYGPKG_IO_SERIAL_MN10300 { + alias { "MN10300 serial device drivers" + devs_serial_mn10300_mn10300 + devs_serial_mn10300 mn10300_serial_driver } + hardware + directory devs/serial/mn10300/mn10300 + script ser_mn10300.cdl + description "MN10300 serial device drivers" +} + +package CYGPKG_IO_SERIAL_I386_PC { + alias { "PC serial device drivers" + devs_serial_i386_pc pc_serial_driver } + hardware + directory devs/serial/i386/pc + script ser_i386_pc.cdl + description "PC serial device drivers" +} + +package CYGPKG_IO_SERIAL_GENERIC_16X5X { + alias { "16x5x compatible serial device drivers" + devs_serial_generic_16x5x 16x5x_serial_driver } + hardware + directory devs/serial/generic/16x5x + script ser_generic_16x5x.cdl + description "16x5x compatible serial device drivers" +} + +package CYGPKG_IO_SERIAL_SH_SCI { + alias { "SH SCI serial device drivers" + devs_serial_sh_sci sh_sci_serial_driver } + hardware + directory devs/serial/sh/sci + script ser_sh_sci.cdl + description "SH SCI serial device drivers" +} + +package CYGPKG_IO_SERIAL_SH_SCIF { + alias { "SH SCIF serial device drivers" + devs_serial_sh_scif scif_serial_driver } + hardware + directory devs/serial/sh/scif + script ser_sh_scif.cdl + description "SH SCIF serial device drivers" +} + +package CYGPKG_DEVS_ETH_PHY { + alias { "Generic PHY support" eth_phy_support } + hardware + directory devs/eth/phy + script phy_eth_drivers.cdl + description "PHY (ethernet physical transciever) API." +} + +package CYGPKG_DEVS_ETH_ARM_CERF { + alias { "Crystal LAN ethernet driver for Cerf boards" cerf_eth_driver } + hardware + directory devs/eth/arm/cerf + script cerf_eth_drivers.cdl + description "Ethernet driver for Crystal LAN on Cerf based + development boards." +} + +package CYGPKG_DEVS_ETH_ARM_CERFPDA { + alias { "Crystal LAN ethernet driver for the Cerfpda" cerfpda_eth_driver } + hardware + directory devs/eth/arm/cerfpda + script cerfpda_eth_drivers.cdl + description "Ethernet driver for Crystal LAN on the Cerfpda." +} + +package CYGPKG_DEVS_ETH_ARM_NETARM { + alias { "Ethernet driver for the NETARM" NETARM_eth_driver } + hardware + directory devs/eth/arm/netarm + script netarm_eth_driver.cdl + description "Ethernet driver for NETARM." +} + +package CYGPKG_DEVS_ETH_ARM_PHYCORE229X { + alias { "Ethernet driver for phyCORE-LPC229x board" devs_eth_arm_phycore229x } + hardware + directory devs/eth/arm/phycore229x + script phycore229x_eth_drivers.cdl + description "Ethernet device driver for phyCORE-LPC229x board" +} + +package CYGPKG_DEVS_ETH_ARM_OLPCE2294 { + alias { "Ethernet driver for Olimex LPC-E2294 board" olpce2294_eth_driver } + hardware + directory devs/eth/arm/olpce2294 + script olpce2294_eth_drivers.cdl + description " + Ethernet device driver for Olimex LPC-E2294 board." +} + +package CYGPKG_DEVS_ETH_ARM_OLPCL2294 { + alias { "Ethernet driver for Olimex LPC-L2294-1MB board" olpcl2294_eth_driver } + hardware + directory devs/eth/arm/olpcl2294 + script olpcl2294_eth_drivers.cdl + description " + Ethernet device driver for Olimex LPC-L2294-1MB board." +} + +package CYGPKG_DEVS_ETH_FREESCALE_ENET { + alias { "Freescale ENET Ethernet driver" } + directory devs/eth/freescale/enet + script eth_freescale_enet.cdl + hardware + description "Ethernet driver for the Freescale ENET ethernet controller." +} + +package CYGPKG_DEVS_ETH_CORTEXM_A2FXXX { + alias { "Cortex-M3/Actel Smartfusion (A2Fxxx) ethernet driver" a2fxxx_eth_driver } + directory devs/eth/cortexm/a2fxxx + script a2fxxx_eth.cdl + hardware + description "Actel A2Fxxx Ethernet driver for Cortex-M3 A2Fxxx based boards." +} + +package CYGPKG_IO_SERIAL_SH_EDK7708 { + alias { "SH3 EDK7708 serial device drivers" + devs_serial_sh3_edk7708 + devs_serial_sh_edk7708 edk7708_serial_driver } + hardware + directory devs/serial/sh/edk7708 + script ser_sh_edk7708.cdl + description "SH3 EDK7708 serial device drivers" +} + +package CYGPKG_IO_SERIAL_SH_CQ7708 { + alias { "SH3 cq7708 serial device drivers" + devs_serial_sh3_cq7708 + devs_serial_sh_cq7708 cq7708_serial_driver } + hardware + directory devs/serial/sh/cq7708 + script ser_sh_cq7708.cdl + description "SH3 cq7708 serial device drivers" +} + +package CYGPKG_IO_SERIAL_SH_SE77X9 { + alias { "SH3 SE77X9 serial device driver" + devs_serial_sh3_se77x9 se77x9_serial_driver } + hardware + directory devs/serial/sh/se77x9 + script ser_sh_se77x9.cdl + description "SH3 SE77x9 serial device driver" +} + +package CYGPKG_IO_SERIAL_SH_SH4_202_MD { + alias { "SH4-202 MicroDev serial device driver" + devs_serial_sh4_202_md sh4_202_md_serial_driver } + hardware + directory devs/serial/sh/sh4_202_md + script ser_sh4_202_md.cdl + description "This option enables the serial device drivers for the + SuperH SH4-202 MicroDev board, based on the generic SH SCIF driver." +} + +package CYGPKG_IO_SERIAL_V85X_V850 { + alias { "NEC V850 serial device drivers" + devs_serial_v85x_v850 v850_serial_driver } + hardware + directory devs/serial/v85x/v850 + script ser_v85x_v850.cdl + description "Serial device drivers for systems based on NEC V850 + SA1 (70F3017) or SB1 (70F3033) processors." +} + +package CYGPKG_IO_SERIAL_MIPS_UPD985XX { + alias { "NEC MIPS uPD985xx serial driver" + devs_serial_mips_upd985xx upd985xx_serial_driver } + hardware + directory devs/serial/mips/upd985xx + script ser_mips_upd985xx.cdl + description "NEC MIPS uPD985xx serial device drivers" +} + +package CYGPKG_IO_SERIAL_MIPS_IDT79S334A { + alias { "MIPS IDT 79RC32334 reference platform serial device drivers" + devs_serial_idt79s334a idt79s334a_serial_driver + devs_serial_mips_idt79s334 mips_idt79s334a_serial_driver } + hardware + directory devs/serial/mips/idt79s334a + script ser_mipsidt_334a.cdl + description "IDT 334a reference platform serial device drivers" +} + +package CYGPKG_IO_SERIAL_H8300_SCI { + alias { "H8/300 SCI serial device drivers" + devs_serial_h8300h_sci h8300h_sci_serial_driver } + hardware + directory devs/serial/h8300/h8300h + script serial_h8300.cdl + description "H8/300 SCI serial device drivers" +} + +package CYGPKG_IO_SERIAL_MCF5272_UART { + alias { "MCF5272 Serial UART Drivers" + devs_MCF5272_uart_driver } + hardware + directory devs/serial/mcf52xx/mcf5272 + script ser_mcf5272_uart.cdl + description "Serial MCF5272 UART Drivers." +} + +package CYGPKG_IO_SERIAL_LOOP { + alias { "Loop serial device drivers" + devs_serial_loop loop_serial_driver } + directory devs/serial/loop + script ser_loop.cdl + description "Loopback serial device driver." +} + +package CYGPKG_IO_FILEIO { + alias { "File IO" fileio io_file } + directory io/fileio + script fileio.cdl + description " + This package contains the infrastructure for doing POSIX compliant + file IO." +} + +package CYGPKG_FS_RAM { + alias { "RAM Filesystem" ramfs ram_fs fs_ram } + directory fs/ram + script ramfs.cdl + description " + This package contains a RAM resident filesystem." +} + +package CYGPKG_FS_ROM { + alias { "ROM Filesystem" romfs rom_fs fs_rom } + directory fs/rom + script romfs.cdl + description " + This package contains a ROM resident filesystem." +} + +package CYGPKG_FS_JFFS2 { + alias { "JFFS2 Filesystem" jffs2 } + directory fs/jffs2 + script jffs2.cdl + description " + This package contains the JFFS2 filesystem." +} + +package CYGPKG_LINUX_COMPAT { + alias { "Linux compatibility" linux_compat linuxcompat } + directory compat/linux + script linux.cdl + description " +eCos supports a basic Linux compatibility Layer providing various +functions, equivalents or stubs expected by Linux kernel code, for +assistance in porting drivers and file system code from Linux. +Note this does not provide Linux compatibility to applications." +} + +package CYGPKG_IO_ETH_DRIVERS { + alias { "Common ethernet support" net_drivers eth_drivers CYGPKG_NET_ETH_DRIVERS } + directory io/eth + script eth_drivers.cdl + description "Platform independent ethernet support." +} + +package CYGPKG_IO_USB { + alias { "Generic USB support" usb } + hardware + directory io/usb/common + script usb.cdl + description "Generic USB support" +} + +package CYGPKG_IO_USB_SLAVE { + alias { "Generic USB slave-side support" usbs } + hardware + directory io/usb/slave + script usbs.cdl + description "Generic USB slave-side support" +} + +package CYGPKG_IO_USB_SLAVE_ETH { + alias { "USB slave-side ethernet class drivers" usbs_eth } + directory io/usb/eth/slave + script usbs_eth.cdl + description "Support for USB peripherals that provide an ethernet-class function" +} + +package CYGPKG_IO_USB_SLAVE_SERIAL { + alias { "USB slave-side serial drivers" usbs_serial } + directory io/usb/serial/slave + script usbs_serial.cdl + description "Support for USB peripherals that present themselves + as serial devices to the host." +} + +package CYGPKG_IO_USB_SLAVE_MSD { + alias { "USB slave-side mass-storage drivers" usbs_msd } + directory io/usb/msd/slave + script usbs_msd.cdl + description "Support for USB peripherals that present themselves + as mass storage devices to the host." +} + +package CYGPKG_DEVS_USB_SA11X0 { + alias { "Device-driver for the SA11X0 on-chip USB support" usb_sa11x0 } + hardware + directory devs/usb/sa11x0 + script usbs_sa11x0.cdl + description "A device driver for the SA11X0 on-chip USB slave port" +} + +package CYGPKG_DEVS_USB_UPD985XX { + alias { usb_upd985xx } + hardware + directory devs/usb/nec_upd985xx + script usbs_upd985xx.cdl + description "A device driver for the NEC uPD985xx on-chip USB device" +} + +package CYGPKG_DEVS_USB_AT91 { + alias { usb_at91 } + hardware + directory devs/usb/at91 + script usbs_at91.cdl + description "A device driver for the ATMEL AT91 on-chip USB device" +} + +package CYGPKG_DEVS_USB_D12 { + alias { usb_d12 } + hardware + directory devs/usb/d12 + script usbs_d12.cdl + description "A device driver for the Philips PDIUSBD12 full speed USB peripheral chip." +} + +package CYGPKG_DEVS_USB_I386_SOROD12 { + alias { usb_sorod12 } + hardware + directory devs/usb/i386/SoRoD12 + script usbs_i386_sorod12.cdl + description "A device driver for the SoRo PC/104 D12 USB Slave Board." +} + +package CYGPKG_NET { + alias { "Networking" net } + directory net/common + script net.cdl + description "Generic networking support, including TCP/IP." +} + +package CYGPKG_NET_AUTOTEST { + alias { "Network Autotesting" autotest net_autotest } + directory net/autotest + script net_autotest.cdl + description "Automated network testing support." +} + +package CYGPKG_NET_OPENBSD_STACK { + alias { "OpenBSD Stack" openbsd_net } + directory net/tcpip + script openbsd_net.cdl + description "TCP/IP stack from OpenBSD." +} + +package CYGPKG_NET_FREEBSD_STACK { + alias { "FreeBSD Stack" freebsd_net } + directory net/bsd_tcpip + script freebsd_net.cdl + description "TCP/IP stack from FreeBSD, including KAME IPv6." +} + +package CYGPKG_NET_FTPCLIENT { + alias { "FTP Client" ftpclient } + directory net/ftpclient + script ftpclient.cdl + description "FTP client support for get and put of files." +} + +package CYGPKG_SNMPLIB { + alias { "SNMP library" snmplib } + directory net/snmp/lib + script snmplib.cdl + description "UCD SNMP library." +} + +package CYGPKG_SNMPAGENT { + alias { "SNMP agent" snmpagent } + directory net/snmp/agent + script snmpagent.cdl + description "UCD SNMP agent." +} + +package CYGPKG_HTTPD { + alias { "HTTP server" httpd } + directory net/httpd + script httpd.cdl + description "HTTP server." +} + +package CYGPKG_NS_DNS { + alias { "DNS" dns } + directory net/ns/dns + script dns.cdl + description "DNS client support." +} + +package CYGPKG_NET_SNTP { + alias { "SNTP support" sntp } + directory net/sntp + script sntp.cdl + description " +This package provides a SNTP client which can recieve broadcast time +information and set the system clock." +} + +package CYGPKG_PPP { + alias { "PPP support" ppp } + directory net/ppp + script ppp.cdl + description "PPP support." +} + +package CYGPKG_NET_IPSEC_LIBIPSEC { + alias { "libipsec support" libipsec } + directory net/ipsec/libipsec + script libipsec.cdl + description " +This package provides the libipsec library used by racoon etc for +configuring IPSEC" +} + +package CYGPKG_DEVS_ETH_ARM_EDB7XXX { + alias { "Cirrus Logic ethernet driver for EP7xxx boards" edb7xxx_eth_driver } + hardware + directory devs/eth/arm/edb7xxx + script edb7xxx_eth_drivers.cdl + description "Ethernet driver for Cirrus Logic EP7xxx based + development boards." +} + +package CYGPKG_DEVS_ETH_ARM_KS32C5000 { + alias { "Samsung KS32C5000 ethernet driver" eth_ks32c5000 } + hardware + directory devs/eth/arm/ks32c5000 + script ks32c5000_eth.cdl + description "Ethernet driver for Samsung ks32c5000/S3c4510." +} + + +package CYGPKG_DEVS_ETH_ARM_AAED2000 { + alias { "Ethernet driver for Agilent AAED2000 board" aaed2000_eth_driver } + hardware + directory devs/eth/arm/aaed2000 + script aaed2000_eth_drivers.cdl + description "Ethernet driver for Agilent AAED2000 + development boards." +} +package CYGPKG_DEVS_ETH_AMD_PCNET { + alias { "AMD PCNET ethernet driver" pcnet_eth_driver } + hardware + directory devs/eth/amd/pcnet + script amd_pcnet_eth_drivers.cdl + description "Ethernet driver for AMD PCNET controller." +} + +package CYGPKG_DEVS_ETH_AMD_LANCEPCI { + alias { "AMD Lance PCI ethernet driver" lancepci_eth_driver } + hardware + directory devs/eth/amd/lancepci + script amd_lancepci_eth_drivers.cdl + description "Ethernet driver for AMD Lance PCI controller (vmWare)." +} + +package CYGPKG_DEVS_ETH_DAVICOM_DM9000 { + alias { "Davicom DM9000 ethernet driver" dm9000_eth_driver } + hardware + directory devs/eth/davicom/dm9000 + script davicom_dm9000_eth_drivers.cdl + description "Ethernet driver for Davicom DM9000 controller." +} + +package CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA { + alias { "MIPS Malta board ethernet driver" malta_eth_driver } + hardware + directory devs/eth/mips/malta + script mips_mips32_malta_eth_drivers.cdl + description "Ethernet driver for MIPS Malta board." +} + +package CYGPKG_DEVS_ETH_MN10300_ASB2305 { + alias { "MN10300 ASB2305 board ethernet driver" asb2305_eth_driver } + hardware + directory devs/eth/mn10300/asb2305 + script mn10300_asb2305_eth.cdl + description "Ethernet driver for MN10300 ASB2305 board." +} + +package CYGPKG_DEVS_ETH_VIA_RHINE { + alias { "VIA Rhine ethernet driver" rhine_eth_driver } + hardware + directory devs/eth/via/rhine + script via_rhine_eth_drivers.cdl + description "Ethernet driver for VIA Rhine controller." +} + +package CYGPKG_DEVS_ETH_SH_HS7729PCI { + alias { "HS7729PCI ethernet driver" hs7729pci_eth_driver } + hardware + directory devs/eth/sh/hs7729pci + script sh_hs7729pci_eth_drivers.cdl + description "Ethernet driver for HS7729PCI development boards." +} + +package CYGPKG_DEVS_ETH_SH_SE77X9 { + alias { "SE77X9 ethernet driver" se77x9_eth_driver } + hardware + directory devs/eth/sh/se77x9 + script sh_se77x9_eth_drivers.cdl + description "Ethernet driver for SE77x9 development boards." +} + +package CYGPKG_DEVS_ETH_SH_SE7751 { + alias { "SE7751 ethernet driver" se7751_eth_driver } + hardware + directory devs/eth/sh/se7751 + script sh_se7751_eth_drivers.cdl + description "Ethernet driver for SE7751 board." +} + +package CYGPKG_DEVS_ETH_SH_ETHERC { + alias { "SH2 etherc driver" etherc_eth_driver } + hardware + directory devs/eth/sh/etherc + script sh_etherc_eth_drivers.cdl + description "Ethernet driver for SH2 etherc controller." +} + +package CYGPKG_DEVS_ETH_SH_MICRODEV { + alias { "SH4-202 MicroDev onboard ethernet support" devs_eth_sh_md } + hardware + directory devs/eth/sh/sh4_202_md + script sh4_202_md_eth_drivers.cdl + description "This package contains hardware support for onboard SMC91C111 + ethernet device on the MicroDev board." +} + +package CYGPKG_DEVS_ETH_ARM_EBSA285 { + alias { "Intel EBSA285 with PRO/100+ ethernet driver" + devs_eth_arm_ebsa285 ebsa285_eth_driver } + hardware + directory devs/eth/arm/ebsa285 + script ebsa285_eth_drivers.cdl + description "Ethernet driver for Intel EBSA285 with PRO/100+ boards." +} + +package CYGPKG_DEVS_ETH_ARM_FLEXANET { + alias { "SA11x0/Flexanet onboard ethernet support" devs_eth_arm_flexanet } + hardware + directory devs/eth/arm/flexanet + script flexanet_eth_drivers.cdl + description "This package contains hardware support for onboard SMC91C96 + ethernet device on the Flexanet board." +} + +package CYGPKG_DEVS_ETH_ARM_INNOVATOR { + alias { "OMAP Innovator onboard ethernet support" devs_eth_arm_innovator } + hardware + directory devs/eth/arm/innovator + script innovator_eth_drivers.cdl + description "This package contains hardware support for onboard SMC91C96 + ethernet device on the Innovator board." +} + +package CYGPKG_DEVS_ETH_ARM_INTEGRATOR { + alias { "ARM INTEGRATOR with Intel PRO/100+ ethernet driver" + devs_eth_arm_integrator integrator_eth_driver } + hardware + directory devs/eth/arm/integrator + script integrator_eth_drivers.cdl + description "Ethernet driver for Intel PRO/100+ boards on ARM INTEGRATOR." +} + +package CYGPKG_DEVS_ETH_POWERPC_QUICC { + alias { "QUICC ethernet driver" quicc_eth_driver } + hardware + directory devs/eth/powerpc/quicc + script quicc_eth_drivers.cdl + description "Ethernet driver for PowerPC QUICC (MPC8xx) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_MBX { + alias { "MBX ethernet driver specifics" mbx_eth_driver } + hardware + directory devs/eth/powerpc/mbx + script mbx_eth_drivers.cdl + description "Ethernet driver specifics for Motorola MBX PowerPC (MPC8xx) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_QUICC2 { + alias { "QUICC2 ethernet driver" quicc2_eth_driver } + hardware + directory devs/eth/powerpc/quicc2 + script quicc2_eth_drivers.cdl + description "Fast ethernet driver for PowerPC QUICC2 (MPC8260) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_FEC { + alias { "FEC ethernet driver" fec_eth_driver } + hardware + directory devs/eth/powerpc/fec + script fec_eth_drivers.cdl + description "Ethernet driver for PowerPC FEC (MPC8xxT) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_FCC { + alias { "FCC ethernet driver" fcc_eth_driver } + hardware + directory devs/eth/powerpc/fcc + script fcc_eth_drivers.cdl + description "Fast ethernet driver for PowerPC MPCxxx based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_PPC405 { + alias { "PPC405 ethernet driver" ppc405_eth_driver } + hardware + directory devs/eth/powerpc/ppc405 + script ppc405_eth_drivers.cdl + description "Ethernet driver for PowerPC 405GP based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_VIPER { + alias { "A&M Viper ethernet driver" viper_eth_driver } + hardware + directory devs/eth/powerpc/viper + script viper_eth_drivers.cdl + description "Ethernet driver specifics for A&M Viper (MPC8xxT) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_EC555 { + alias { "Crystal LAN ethernet driver for ec555 boards" ec555_eth_driver } + hardware + directory devs/eth/powerpc/ec555 + script ec555_eth_drivers.cdl + description "Ethernet driver for Crystal LAN on ec555 board." +} + +package CYGPKG_DEVS_ETH_INTEL_I82559 { + alias { "Intel 82559 ethernet driver" + devs_eth_intel_i82559 i82559_eth_driver } + hardware + directory devs/eth/intel/i82559 + script intel_i82559_eth_drivers.cdl + description "Ethernet driver for Intel 82559 NIC." +} + +package CYGPKG_DEVS_ETH_INTEL_I82544 { + alias { "Intel 82544 ethernet driver" + devs_eth_intel_i82544 i82544_eth_driver } + hardware + directory devs/eth/intel/i82544 + script intel_i82544_eth_drivers.cdl + description "Ethernet driver for Intel 82544 NIC." +} + +package CYGPKG_DEVS_ETH_INTEL_I21143 { + alias { "Intel 21143 ethernet driver" + devs_eth_intel_i21143 i21143_eth_driver } + hardware + directory devs/eth/intel/i21143 + script intel_i21143_eth_drivers.cdl + description "Ethernet driver for Intel \[DEC\] 21143 NIC." +} + +package CYGPKG_DEVS_ETH_MIPS_VRC4375 { + alias { "NEC MIPS VRC4375 ethernet driver" + devs_eth_mips_vrc4375 vrc4375_eth_driver } + hardware + directory devs/eth/mips/vrc4375 + script vrc4375_eth_drivers.cdl + description "Ethernet driver for NEC MIPS VRC4375 'Blue Nile' + board with Intel \[ex Digital Equipment\] + i21143 ethernet interface." +} + +package CYGPKG_DEVS_ETH_MIPS_RM7000_OCELOT { + alias { "Ocelot ethernet drivers" + devs_eth_mips_rm7000_ocelot ocelot_eth_driver } + hardware + directory devs/eth/mips/ocelot + script mips_rm7000_ocelot_eth_drivers.cdl + description "Ethernet driver for PMC-Sierra Ocelot board." +} + +package CYGPKG_DEVS_ETH_ARM_IQ80321 { + alias { "Intel IQ80321 with onboard 82544 ethernet driver" + devs_eth_arm_iq80321 iq80321_eth_driver } + hardware + directory devs/eth/arm/iq80321 + script iq80321_eth_drivers.cdl + description "Ethernet driver for Intel IQ80321 with onboard 82544 NIC." +} + +package CYGPKG_DEVS_ETH_ARM_XSCALE_IQ80310 { + alias { "Intel IQ80310 with onboard 82559 ethernet driver" + devs_eth_arm_iq80310 iq80310_eth_driver } + hardware + directory devs/eth/arm/iq80310 + script iq80310_eth_drivers.cdl + description "Ethernet driver for Intel IQ80310 with onboard 82559 NIC." +} + +package CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 { + alias { "IXDP425 (PCI) / Intel 82559 ethernet driver" + devs_eth_arm_ixdp425_i82559 } + hardware + directory devs/eth/arm/ixdp425/i82559 + script ixdp425_i82559_eth_driver.cdl + description "Ethernet driver for IXDP425 with Intel 82559 PCI NIC." +} + +package CYGPKG_DEVS_ETH_ARM_XSCALE_XSENGINE { + alias { "XSEngine SMC91C111 ethernet driver" devs_eth_arm_xsengine } + hardware + directory devs/eth/arm/xsengine + script xsengine_eth_drivers.cdl + description "Ethernet driver for XSEngine board." +} + +package CYGPKG_DEVS_ETH_ARM_GRG_I82559 { + alias { "GRG / Intel 82559 ethernet driver" + devs_eth_arm_grg_i82559 } + hardware + directory devs/eth/arm/grg/i82559 + script grg_i82559_eth_driver.cdl + description "Ethernet driver for GRG with Intel 82559 PCI NIC." +} + +package CYGPKG_DEVS_ETH_I386_PC_I82559 { + alias { "Standard PC with EtherPro 10/100 ethernet device" + devs_eth_i386_pc_i82559 pc_etherpro } + hardware + directory devs/eth/i386/pc/i82559 + script i386_pc_i82559_eth_drivers.cdl + description "Ethernet driver for standard PC with Intel 82559 NIC. This is + essentially support for a EtherPro 10/100 PCI card." +} + +package CYGPKG_DEVS_ETH_I386_PC_I82544 { + alias { "Standard PC with Intel Gigabit ethernet device" + devs_eth_i386_pc_i82544 pc_ether_giga } + hardware + directory devs/eth/i386/pc/i82544 + script i386_pc_i82544_eth_drivers.cdl + description "Ethernet driver for standard PC with Intel 82544 Gigabit NIC." +} + +package CYGPKG_DEVS_ETH_I386_PC_LANCEPCI { + alias { "Standard PC with AMD Lance PCI device" + devs_eth_i386_pc_lancepci pc_ether_lancepci } + hardware + directory devs/eth/i386/pc/lancepci + script i386_pc_lancepci_eth_drivers.cdl + description "Ethernet driver for standard PC with AMD Lance NIC (vmWare)." +} + +package CYGPKG_DEVS_ETH_MIPS_ATLAS { + alias { "MIPS Atlas with onboard SAA9730 ethernet driver" + devs_eth_mips_atlas atlas_eth_driver } + hardware + directory devs/eth/mips/atlas + script atlas_eth_drivers.cdl + description "Ethernet driver for MIPS Atlas with onboard SAA9730 NIC." +} + +package CYGPKG_DEVS_ETH_NS_DP83902A { + alias { "NS DP83902A ethernet driver" dp83902a_eth_driver } + hardware + directory devs/eth/ns/dp83902a + script ns_dp83902a_eth_drivers.cdl + description "Ethernet driver for NS DP83902A controller." +} + +package CYGPKG_DEVS_ETH_NS_DP83816 { + alias { "NS DP83816 ethernet driver" dp83816_eth_driver } + hardware + directory devs/eth/ns/dp83816 + script ns_dp83816_eth_drivers.cdl + description "Ethernet driver for NS DP83816 controller." +} + +package CYGPKG_DEVS_ETH_CL_CS8900A { + alias { "Cirrus Logic CS8900A ethernet driver" cs8900a_eth_driver } + hardware + directory devs/eth/cl/cs8900a + script cl_cs8900a_eth_drivers.cdl + description "Ethernet driver for Cirrus Logic CS8900A controller." +} + +package CYGPKG_DEVS_ETH_MIPS_UPD985XX { + alias { "NEC uPD985xx ethernet driver" uPD985xx_eth_driver } + hardware + directory devs/eth/mips/upd985xx + script upd985xx_eth_drivers.cdl + description "NEC uPD985xx ethernet driver" +} + +package CYGPKG_DEVS_ETH_MIPS_REFIDT334 { + alias { "MIPS IDT 79RC32334 reference platform ethernet driver" + devs_eth_refidt334 refidt334_eth_driver } + hardware + directory devs/eth/mips/idt79s334a + script refidt334_eth_drivers.cdl + description "Ethernet driver for MIPS IDT 79RC32334 reference platform." +} + +# Not sure whether this should be "hardware"; if so, it should be mentioned +# in all targets that can use it. +package CYGPKG_DEVS_ETH_CF { + alias { "PCMCIA (Compact Flash) ethernet drivers" cf_eth_drivers } + directory devs/eth/cf + script cf_eth_drivers.cdl + hardware + description "Ethernet drivers for PCMCIA (Compact Flash) cardss." +} + +package CYGPKG_DEVS_ETH_H8300_AKI3068NET { + alias { "Akizuki H8/3068 Board ethernet driver" aki3068net_eth_drivers } + directory devs/eth/h8300/aki3068net + script h8300_aki3068net_eth_drivers.cdl + hardware + description "Ethernet drivers for Akizuki H8/3068 Network + micom board." +} + +package CYGPKG_DEVS_ETH_H8300_H8MAX { + alias { "H8MAX Board ethernet driver" h8max_eth_drivers } + directory devs/eth/h8300/h8max + script h8300_h8max_eth_drivers.cdl + hardware + description "Ethernet drivers for H8MAX board." +} + +package CYGPKG_DEVS_ETH_H8300_EDOSK2674 { + alias { "EDOSK-2674 Board ethernet driver" edosk2674_eth_drivers } + directory devs/eth/h8300/edosk2674 + script h8300_edosk2674_eth_drivers.cdl + hardware + description "Ethernet drivers for EDOSK-2674 board." +} + +package CYGPKG_DEVS_ETH_MCF5272 { + alias { "MCF5272 Fast Ethernet Controller driver" mcf5272_eth_driver} + hardware + directory devs/eth/mcf52xx/mcf5272 + script mcf5272_eth_driver.cdl + description "Ethernet driver for the MCF5272." +} + + +package CYGPKG_DEVS_ETH_ECOSYNTH { + alias { "Synthetic target ethernet driver" ecosyntheth ecosynth_eth_driver } + directory devs/eth/synth/ecosynth + script syntheth.cdl + hardware + description "Ethernet driver for the synthetic target" +} + +package CYGPKG_DEVS_ETH_ENC424J600 { + alias { "Microchip ENC424J600 / ENC624J600 ethernet controller driver" enc424j600_eth_driver } + directory devs/eth/microchip/enc424j600 + script enc424j600_eth_drivers.cdl + description "Driver for Microchip ENC424J600 and ENC624J600 Ethernet controllers." +} + +package CYGPKG_IO_PCI { + alias { "PCI configuration library" io_pci } + directory io/pci + script io_pci.cdl + hardware + description " + This package contains the PCI configuration library." +} + +package CYGPKG_IO_WALLCLOCK { + alias { "Wallclock device framework" wallclock io_wallclock devices_wallclock device_wallclock } + directory io/wallclock + script wallclock.cdl + description " + This package provides a wallclock device framework. It is + also necessary to select an actual driver implementation." +} + +package CYGPKG_DEVICES_WALLCLOCK_SH3 { + alias { "Wallclock driver for SH3 RTC module" devices_wallclock_sh3 device_wallclock_sh3 } + directory devs/wallclock/sh/sh3 + script wallclock_sh3.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Hitachi SH3 CPU's RTC module." +} + +package CYGPKG_DEVICES_WALLCLOCK_MPC5xx { + alias { "Wallclock driver for mpc5xx RTC module" devices_wallclock_mpc5xx device_wallclock_mpc5xx } + directory devs/wallclock/powerpc/mpc5xx + script wallclock_mpc5xx.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Motorola mpc5xx CPU's RTC module." +} + +package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 { + alias { "Wallclock driver for Dallas 1307" devices_wallclock_ds1307 device_wallclock_ds1307 } + directory devs/wallclock/dallas/ds1307 + script wallclock_ds1307.cdl + hardware + description " + This package provides a driver implementation for + the Dallas 1307 wallclock." +} + +package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 { + alias { "Wallclock driver for Dallas 1742" devices_wallclock_ds1742 device_wallclock_ds1742 } + directory devs/wallclock/dallas/ds1742 + script wallclock_ds1742.cdl + hardware + description " + This package provides a driver implementation for + the Dallas 1742 wallclock." +} + +package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 { + alias { "Wallclock driver for Dallas 12887" devices_wallclock_ds12887 device_wallclock_ds12887 } + directory devs/wallclock/dallas/ds12887 + script wallclock_ds12887.cdl + hardware + description " + This package provides a driver implementation for + the Dallas 12887 wallclock." +} + +package CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 { + alias { "Wallclock driver for REF4955 board" devices_wallclock_ref4955 device_wallclock_ref4955 } + directory devs/wallclock/mips/ref4955 + script wallclock_ref4955.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Toshiba REF4955 board." +} + +package CYGPKG_DEVICES_WALLCLOCK_I386_PC { + alias { "Standard PC RTC device" devs_wallclock_i386_pc_ds12887 pc_rtc } + hardware + directory devs/wallclock/i386/pc + script i386_pc_wallclock_drivers.cdl + description " + RTC driver for standard PC. This is essentially support for a + Dallas DS12887 RTC." +} + +package CYGPKG_DEVICES_WALLCLOCK_SH_HS7729PCI { + alias { "Wallclock driver for HS7729PCI board" devices_wallclock_hs7729pci device_wallclock_hs7729pci } + directory devs/wallclock/sh/hs7729pci + script wallclock_hs7729pci.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Hitachi HS7729PCI board." +} + +package CYGPKG_DEVS_WALLCLOCK_SYNTH { + alias { "Wallclock driver for synthetic target" devs_wallclock_synth wallclock_synth } + directory devs/wallclock/synth + script wallclock_synth.cdl + hardware + description " + This package provides a wallclock driver implementation for the + synthetic target." +} + +package CYGPKG_DEVICES_WALLCLOCK_ARM_AIM711 { + alias { "Wallclock driver for AIM 711" devs_wallclock_arm_aim711 aim711_rt +c } + directory devs/wallclock/arm/aim711 + script aim711_wallclock_drivers.cdl + hardware + description " + This package provides a wallclock driver implementation for the + ARM Industrial Module AIM 711." +} + +package CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX { + alias { "Wallclock driver for LPC2xxx/LPC17xx RTC module" } + directory devs/wallclock/arm/lpc2xxx + script lpc2xxx_wallclock.cdl + hardware + description " + This package provides a wallclock driver implementation for the + LPC2xxx/LPC17xx RTC module." +} + +package CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC { + alias { "Wallclock driver for Kinetis RTC module" } + directory devs/wallclock/freescale/kinetis + script wallclock_kinetis_rtc.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Kinetis RTC module." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_AEB { + alias { "Watchdog driver for ARM/AEB board" devices_watchdog_aeb device_watchdog_aeb } + directory devs/watchdog/arm/aeb + script watchdog_aeb.cdl + hardware + description " + This package provides a watchdog driver implementation for the + ARM/AEB board." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_AT91 { + alias { "Watchdog driver for ARM AT91 CPU" devices_watchdog_at91 device_watchdog_at91 } + directory devs/watchdog/arm/at91 + script watchdog_at91.cdl + hardware + description " + This package provides a watchdog driver implementation for the + ARM AT91 CPU." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC { + alias { "Watchdog driver for ARM AT91 WDTC" devices_watchdog_at91wdtc device_watchdog_at91wdtc } + directory devs/watchdog/arm/at91wdtc + script watchdog_at91wdtc.cdl + hardware + description " + This package provides a watchdog driver implementation for the + ARM AT91 CPUs which have the Watchdog Timer Controller." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX { + alias { "Watchdog driver for ARM LPC2XXX CPU" devices_watchdog_lpc2xxx device_watchdog_lpc2xxx } + directory devs/watchdog/arm/lpc2xxx + script watchdog_lpc2xxx.cdl + hardware + description " + This package provides a watchdog driver implementation for the + ARM LPC2XXX CPU." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 { + alias { "Watchdog driver for ARM/EBSA285 board" devices_watchdog_ebsa285 device_watchdog_ebsa285 } + directory devs/watchdog/arm/ebsa285 + script watchdog_ebsa285.cdl + hardware + description " + This package provides a watchdog driver implementation for the + ARM/EBSA285 board." +} + +package CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 { + alias { "Watchdog driver for StrongARM SA11x0 devices" devices_watchdog_sa11x0 device_watchdog_sa11x0 } + directory devs/watchdog/arm/sa11x0 + script watchdog_sa11x0.cdl + hardware + description " + This package provides a watchdog driver implementation for + Intel StrongARM SA11x0 integrated devices." +} + +package CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 { + alias { "Watchdog driver for MN10300 chip" devices_watchdog_mn10300 device_watchdog_mn10300 } + directory devs/watchdog/mn10300/mn10300 + script watchdog_mn10300.cdl + hardware + description " + This package provides a watchdog driver implementation for the + MN10300 chip." +} + +package CYGPKG_DEVICES_WATCHDOG_MPC5xx { + alias { "Watchdog driver for mpc5xx processor" devices_watchdog_mpc5xx device_watchdog_mpc5xx } + directory devs/watchdog/powerpc/mpc5xx + script watchdog_mpc5xx.cdl + hardware + description " + This package provides a watchdog driver implementation for the + mpc5xx processor family." +} + +package CYGPKG_DEVICES_WATCHDOG_SH_SH3 { + alias { "Watchdog driver for the Hitachi SH3 chip" devices_watchdog_sh3 device_watchdog_sh3 } + directory devs/watchdog/sh/sh3 + script watchdog_sh3.cdl + hardware + description " + This package provides a watchdog driver implementation for the + Hitachi SH3 chip." +} + +package CYGPKG_DEVICES_WATCHDOG_H8300_H8300H { + alias { "Watchdog driver for the Hitachi H8/300H chip" devices_watchdog_h8300h device_watchdog_h8300h } + directory devs/watchdog/h8300/h8300h + script watchdog_h8300h.cdl + hardware + description " + This package provides a watchdog driver implementation for the + Hitachi H8/300H chip." +} + +package CYGPKG_DEVS_WATCHDOG_SYNTH { + alias { "Watchdog driver for the synthetic target" devices_watchdog_synth device_watchdog_synth } + directory devs/watchdog/synth + script synth_watchdog.cdl + hardware + description " + This package provides a watchdog driver for the eCos + synthetic target." +} + +package CYGPKG_IO_WATCHDOG { + alias { "Watchdog IO device" watchdog io_watchdog } + directory io/watchdog + script watchdog.cdl + description " + This package provides a watchdog device." +} + +package CYGPKG_DEVS_SPI_ARM_AT91 { + alias { "Atmel AT91 SPI device driver" devs_spi_arm_at91 spi_at91_driver } + hardware + directory devs/spi/arm/at91 + script spi_at91.cdl + description "Atmel AT91 on-chip spi device driver." +} + +package CYGPKG_DEVS_SPI_ARM_EB55 { + alias { "Atmel AT91EB55 SPI devices" devs_spi_arm_eb55 spi_eb55_devices } + hardware + directory devs/spi/arm/eb55 + script spi_eb55.cdl + description "Atmel AT91EB55 spi devices." +} + +package CYGPKG_DEVS_SPI_ARM_LPC2XXX { + alias { "LPC2xxx SPI driver" } + hardware + directory devs/spi/arm/lpc2xxx + script spi_lpc2xxx.cdl + description "This package provides a driver for the SPI unit of the LPC2xxx + controller family." +} + +package CYGPKG_DEVS_SPI_FREESCALE_DSPI { + alias { "Freescale DSPI driver" } + hardware + directory devs/spi/freescale/dspi + script spi_freescale_dspi.cdl + description " + This package provides a driver for the Freescale DSPI interfaces." +} + +package CYGPKG_DEVS_SPI_CORTEXM_A2FXXX { + alias { "Cortex-M3/Actel Smartfusion (A2Fxxx) SPI driver" } + hardware + directory devs/spi/cortexm/a2fxxx + script spi_a2fxxx.cdl + description "This package provides a driver for the SPI peripheral of Actel Smartfusion (A2Fxxx) + controller family." +} + +package CYGPKG_IO_SPI { + alias { "Generic SPI support" spi io_spi spi_io } + directory io/spi + script spi.cdl + hardware + description " + The generic SPI package provides an API for accessing devices + attached to an SPI bus. It also provides support for writing + bus drivers and for defining SPI device structures." +} + +package CYGPKG_IO_I2C { + alias { "Generic I2C support" i2c io_i2c i2c_io } + directory io/i2c + script i2c.cdl + hardware + description " + The generic I2C package provides an API for accessing devices + attached to an I2C bus. It specifies how I2C bus drivers should + be written and how I2C devices should be defined. There is also + support for bit-banged I2C buses." +} + +package CYGPKG_DEVS_I2C_MCF52xx { + alias { "MCF52xx I2C driver" devs_i2c_mcf52xx mcf52xx_i2c_driver } + hardware + directory devs/i2c/m68k/mcf52xx + script i2c_mcf52xx.cdl + description " + This packages provides an I2C driver for the on-chip + device provided by the MCF52xx coldfire processor family." +} + +package CYGPKG_DEVS_I2C_ARM_LPC2XXX { + alias { "LPC2xxx I2C driver" } + hardware + directory devs/i2c/arm/lpc2xxx + script i2c_lpc2xxx.cdl + description "This package provides a driver for the I2C unit of the LPC2xxx + controller family." +} + +package CYGPKG_DEVS_I2C_CORTEXM_LM3S { + alias { "Stellaris Cortex-M3 I2C driver" lm3s_i2c lm3s_i2c_driver i2c_lm3s} + hardware + directory devs/i2c/cortexm/lm3s + script i2c_lm3s.cdl + description " + This package provides a driver for the I2C unit of the Stellaris + Cortex-M3 controller family." +} + +package CYGPKG_DEVS_I2C_CORTEXM_A2FXXX { + alias { "Cortex-M3/Actel Smartfusion (A2Fxxx) I2C driver" a2fxxx_i2c a2fxxx_i2c_driver i2c_a2fxxx} + hardware + directory devs/i2c/cortexm/a2fxxx + script i2c_a2fxxx.cdl + description "This package provides a driver for the I2C peripheral of the Actel Smartfusion (A2Fxxx) + controller family." +} + +package CYGPKG_DEVS_I2C_FREESCALE_I2C { + alias { "Freescale I2C driver" freescale_i2c i2c_freescale kinetis_i2c i2c_kinetis} + hardware + directory devs/i2c/freescale/i2c + script i2c_freescale.cdl + description " + This package provides a driver for the I2C unit of the Freescale chips, such as the Kinetis MCU family." +} + + +package CYGPKG_DEVS_ADC_ARM_LPC24XX { + alias { "LPC24xx ADC driver" } + hardware + directory devs/adc/arm/lpc24xx + script adc_lpc24xx.cdl + description " + This packages provides an ADC driver for the on-chip + ADC provided by the LPC24xx processor family." +} + +package CYGPKG_DEVS_ADC_ARM_AT91 { + alias { "AT91 ADC driver" } + hardware + directory devs/adc/arm/at91 + script adc_at91.cdl + description " + This packages provides an ADC driver for the on-chip + ADC provided by the Atmel AT91 processor family." +} + +package CYGPKG_DEVS_ADC_CORTEXM_LM3S { + alias { "Stellaris Cortex M3 ADC driver" lm3s_adc } + hardware + directory devs/adc/cortexm/lm3s + script adc_lm3s.cdl + description " + This packages provides an ADC driver for the on-chip ADC provided + by the Stellaris Cortex M3 controller family." +} + +package CYGPKG_DEVS_ADC_SYNTH { + alias { "Synthethic ADC driver" adc_synth } + hardware + directory devs/adc/synth + script adc_synth.cdl + description " + This package provides an ADC driver for the Synthethic target." +} + +package CYGPKG_IO_ADC { + alias { "Generic ADC support" adc io_adc } + directory io/adc + script io_adc.cdl + description " + This package contains drivers for basic I/O services on + adc devices." +} + +package CYGPKG_KERNEL { + alias { "eCos kernel" kernel } + directory kernel + script kernel.cdl + description " +This package contains the core functionality of the eCos kernel. It +relies on functionality provided by various HAL packages and by the +eCos infrastructure. In turn the eCos kernel provides support for +other packages such as the device drivers and the uITRON compatibility +layer." +} + +package CYGPKG_MEMALLOC { + alias { "Dynamic memory allocation" memalloc malloc } + directory services/memalloc/common + script memalloc.cdl + description " +This package provides memory allocator infrastructure required for +dynamic memory allocators, including the ISO standard malloc +interface. It also contains some sample implementations." +} + +package CYGPKG_LOADER { + alias { "Dynamic loader" loader dload } + directory services/loader + script loader.cdl + description " +This package provides support for the dynamic executable and +library loader." +} + +package CYGPKG_OBJLOADER { + alias { "Object file loader" objloader } + directory services/objloader + script objloader.cdl + description " +This package provides support for the object file loader and relocator." +} + +package CYGPKG_COMPRESS_ZLIB { + alias { "Zlib compress/decompress" zlib_compress compress_zlib zlib } + directory services/compress/zlib + script compress_zlib.cdl + description " +This package provides zlib compression and decompression support." +} + +package CYGPKG_POWER { + alias { "Power Management support" power } + directory services/power/common + script power.cdl + description " +This package provides some generic support for power management." +} + +package CYGPKG_CRC { + alias { "CRC support" crc } + directory services/crc + script crc.cdl + description " +This package provides support for CRC functions, including the +POSIX 1003 defined CRC algorithm." +} + +package CYGPKG_CPULOAD { + alias { "cpuload support" cpuload } + directory services/cpuload + script cpuload.cdl + description " +This package measures the CPU load over the last 100ms, 1second +and 10 second. All loads are returned as a percentage, ie 0-100. +This is only a rough measure." +} + +package CYGPKG_PROFILE_GPROF { + alias { "Application profile support" profile_gprof gprof_profile } + directory services/profile/gprof + script profile_gprof.cdl + description " +This package instruments applications to collect profiling data, +using a methodology compatible with the gprof utility." +} + +package CYGPKG_EZXML { + alias { "ezXML" XML ezxml } + directory services/ezxml + script ezxml.cdl + description "ezXML, Simple XML Parser" +} + +package CYGPKG_PDCURSES { + alias { "PDCurses" pdcurses } + directory services/curses/pdcurses + script pdcurses.cdl + description "Public Domain Curses." +} + +package CYGPKG_UITRON { + alias { "uITRON compatibility" uitron } + directory compat/uitron + script uitron.cdl + description " +eCos supports a uITRON Compatibility Layer, providing full Level S +(Standard) compliance with Version 3.02 of the uITRON Standard, plus +many Level E (Extended) features. uITRON is the premier Japanese +embedded RTOS standard." +} + +package CYGPKG_ISOINFRA { + alias { "ISO C and POSIX infrastructure" isoinfra } + directory isoinfra + script isoinfra.cdl + description " +eCos supports implementations of ISO C libraries and POSIX implementations. +This package provides infrastructure used by all such implementations." +} + +package CYGPKG_POSIX { + alias { "POSIX compatibility" posix } + directory compat/posix + script posix.cdl + description " +This package enables compatibility with the ISO/IEEE 1003.1 POSIX +standard. This allows the user application to use a well known +standard API, and starts a thread to invoke the user function +main()" +} + +package CYGPKG_LIBC { + alias { "C library" libc clib clibrary } + directory language/c/libc/common + script libc.cdl + description " +The packages under this package enable compatibility with the ISO C +standard - ISO/IEC 9899:1990. This allows the user application to use +well known standard C library functions, and in eCos starts a thread +to invoke the user function main(). This package is a top-level placeholder +to contain the implementations." +} + +package CYGPKG_LIBC_I18N { + alias { "ISO C library internationalization" libc_i18n } + directory language/c/libc/i18n + script i18n.cdl + description " +This package provides internationalization functions specified by the +ISO C standard - ISO/IEC 9899:1990." +} + +package CYGPKG_LIBC_SETJMP { + alias { "ISO C library non-local jumps" libc_setjmp } + directory language/c/libc/setjmp + script setjmp.cdl + description " +This package provides non-local jump functionality specified by the +ISO C standard - ISO/IEC 9899:1990." +} + +package CYGPKG_LIBC_SIGNALS { + alias { "ISO C library signals" libc_signals } + directory language/c/libc/signals + script signals.cdl + description " +This component controls signal functionality, as implemented in +ISO/IEC 9899:1990 chapter 7.7 with the signal() and raise() functions. +As well as allowing a program to send itself signals, it is also +possible to cause hardware exceptions to be signalled to the program +in a similar way." +} + +package CYGPKG_LIBC_STARTUP { + alias { "ISO environment startup/termination" libc_startup } + directory language/c/libc/startup + script startup.cdl + description " + This package manages the control of the + environment (in the general sense) that an + application would require for full ISO C / POSIX + compatibility, including a main() entry point + supplied with arguments and an environment + (as retrievable by the getenv() function). + It also includes at the other end of things, + what happens when main() returns or exit() is + called." +} + +package CYGPKG_LIBC_STDIO { + alias { "ISO C library standard input/output functions" libc_stdio } + directory language/c/libc/stdio + script stdio.cdl + description " +This package provides standard input/output functions associated +with the header file as specified by the +ISO C standard - ISO/IEC 9899:1990." +} + +package CYGPKG_LIBC_STDLIB { + alias { "ISO C library general utility functions" libc_stdlib } + directory language/c/libc/stdlib + script stdlib.cdl + description " +This package provides general utility functions associated +with the header file as specified by the +ISO C standard - ISO/IEC 9899:1990." +} + +package CYGPKG_LIBC_STRING { + alias { "ISO C library string functions" libc_string } + directory language/c/libc/string + script string.cdl + description " +This package provides string functions specified by the ISO C standard +- ISO/IEC 9899:1990." +} + +package CYGPKG_LIBC_TIME { + alias { "ISO C library date/time functions" libc_time } + directory language/c/libc/time + script time.cdl + description " +This package provides date and time manipulation functionality specified +by the ISO C standard - ISO/IEC 9899:1990." +} + +package CYGPKG_LIBM { + alias { "Math library" libm mathlib mathlibrary } + directory language/c/libm + script libm.cdl + description " +ISO standard floating point mathematical library containing many +useful functions for mathematical calculations." +} + +package CYGPKG_USTL { + alias { "uSTL library" ustl } + directory language/cxx/ustl + script ustl.cdl + description " This package provides the uSTL library. uSTL is a partial implementation of the STL specification intended to reduce code size of the derivative programs. This allows the user application to use well known standard C++ STL library -containers, streams, iterators, algorithms and functors." -} - -package CYGPKG_ERROR { - alias { "Common error code support" error errors } - directory error - script error.cdl - description " -This package contains the common list of error and status codes. It is -held centrally to allow packages to interchange error codes and status -codes in a common way, rather than each package having its own -conventions for error/status reporting. The error codes are modelled -on the POSIX style naming e.g. EINVAL etc. This package also provides -the standard strerror() function to convert error codes to textual -representation, as well as an implementation of the errno idiom." -} -package CYGPKG_CYGMON { - alias { "CygMon support via eCos" cygmon } - directory cygmon - script cygmon.cdl - description " - This package supports the CygMon \[stand-alone debug monitor\] - using eCos as the underlying board support mechanism." -} - -package CYGPKG_REDBOOT { - alias { "RedBoot ROM monitor" redboot } - directory redboot - script redboot.cdl - description " - This package creates the RedBoot \[stand-alone bootstrap & debug monitor\] - using eCos as the underlying board support mechanism." -} - -package CYGPKG_MICROWINDOWS { - alias { "Microwindows" mw } - directory services/gfx/mw - script microwindows.cdl - description "Microwindows." -} - -package CYGPKG_HAL_SH_SH7750_DREAMCAST { - alias { "SEGA Dreamcast" hal_sh_dreamcast sh_dreamcast_hal } - directory hal/sh/dreamcast - script hal_sh_sh7750_dreamcast.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on SEGA Dreamcast." -} - -# -------------------------------------------------------------------------- -# ARM packages -package CYGPKG_HAL_ARM { - alias { "ARM common HAL" hal_arm arm_hal arm_arch_hal } - directory hal/arm/arch - script hal_arm.cdl - hardware - description " -The ARM architecture HAL package provides generic support for this -processor architecture. It is also necessary to select a specific -target platform HAL package." -} - -package CYGPKG_HAL_ARM_PID { - alias { "ARM development board (PID)" hal_arm_pid arm_pid_hal } - directory hal/arm/pid - script hal_arm_pid.cdl - hardware - description " -The pid HAL package provides the support needed to run eCos on a ARM -PID eval board." -} - -package CYGPKG_HAL_ARM_AEB { - alias { "ARM evaluation board (AEB-1)" hal_arm_aeb arm_aeb_hal } - directory hal/arm/aeb - script hal_arm_aeb.cdl - hardware - description " -The aeb HAL package provides the support needed to run eCos on a ARM -AEB-1 eval board." -} - -package CYGPKG_HAL_ARM_E7T { - alias { "ARM Evaluator7T board (AEB-2)" hal_arm_e7t arm_e7t_hal } - directory hal/arm/e7t - script hal_arm_e7t.cdl - hardware - description " -The e7t HAL package provides the support needed to run eCos on a ARM -Evaluator7T board (aka the AEB-2)." -} - -package CYGPKG_HAL_ARM_INTEGRATOR { - alias { "ARM development board (INTEGRATOR)" hal_arm_integrator arm_integrator_hal } - directory hal/arm/integrator - script hal_arm_integrator.cdl - hardware - description " - The INTEGRATOR HAL package provides the support needed to - run eCos on a ARM INTEGRATOR eval board." -} - -package CYGPKG_HAL_ARM_AT91 { - alias { "Atmel AT91 variant HAL" hal_arm_at91 arm_at91_hal } - directory hal/arm/at91/var - script hal_arm_at91.cdl - hardware - description " - The at91 HAL package provides the support needed to run eCos on Atmel - AT91 based targets." -} - -package CYGPKG_HAL_ARM_AT91_JTST { - alias { "Atmel AT572D740 (diopsis) evaluation board (jtst)" hal_arm_at91_jtst arm_at91_jtst_hal } - directory hal/arm/at91/jtst - script hal_arm_at91_jtst.cdl - hardware - description " - The JTST HAL package provides the support needed to run eCos on - the Atmel evaluation board AT572D74-DK1." -} - -package CYGPKG_HAL_ARM_AT91SAM7 { - alias { "Atmel AT91SAM7" hal_arm_at91sam7 arm_at91_sam7 } - directory hal/arm/at91/at91sam7s - script hal_arm_at91sam7s.cdl - hardware - description " - The at91sam7 HAL package provides the support needed to run eCos on - an Atmel AT91SAM7 family of CPUs." -} - -package CYGPKG_HAL_ARM_AT91SAM7SEK { - alias { "Atmel AT91SAM7S" hal_arm_at91sam7sek arm_at91_sam7sek } - directory hal/arm/at91/at91sam7sek - script hal_arm_at91sam7sek.cdl - hardware - description " - The at91sam7sek HAL package provides the support needed to run eCos on - an Atmel AT91SAM7S-EK development board." -} - -package CYGPKG_HAL_ARM_AT91SAM7XEK { - alias { "Atmel AT91SAM7X" hal_arm_at91sam7xek arm_at91_sam7xek } - directory hal/arm/at91/at91sam7xek - script hal_arm_at91sam7xek.cdl - hardware - description " - The at91sam7xek HAL package provides the support needed to run eCos on - an Atmel AT91SAM7X-EK development board." -} - -package CYGPKG_HAL_ARM_SAM7EX256 { - alias { "Olimex SAM7EX256" hal_arm_sam7ex256 arm_sam7_ex256 } - directory hal/arm/at91/sam7ex256 - script hal_arm_sam7ex256.cdl - hardware - description " - The SAM7EX256 HAL package provides the support needed to run eCos on - an Olimex SAM7-EX256 development board." -} - -package CYGPKG_HAL_ARM_AT91_EB40 { - alias { "Atmel evaluation board (EB40)" hal_arm_at91_eb40 arm_at91_eb40_hal } - directory hal/arm/at91/eb40 - script hal_arm_at91_eb40.cdl - hardware - description " - The eb40 HAL package provides the support needed to run eCos on an Atmel - evaluation board (EB40)." -} - -package CYGPKG_HAL_ARM_AT91_EB40A { - alias { "Atmel evaluation board (EB40A)" hal_arm_at91_eb40a arm_at91_eb40a_hal } - directory hal/arm/at91/eb40a - script hal_arm_at91_eb40a.cdl - hardware - description " - The eb40a HAL package provides the support needed to run eCos on an Atmel - evaluation board (EB40A)." -} - -package CYGPKG_HAL_ARM_AT91_EB42 { - alias { "Atmel evaluation board (EB42)" hal_arm_at91_eb42 arm_at91_eb42_hal } - directory hal/arm/at91/eb42 - script hal_arm_at91_eb42.cdl - hardware - description " - The eb42 HAL package provides the support needed to run eCos on an Atmel - evaluation board (EB42)." -} - -package CYGPKG_HAL_ARM_AT91_EB55 { - alias { "Atmel evaluation board (EB55)" hal_arm_at91_eb55 arm_at91_eb55_hal } - directory hal/arm/at91/eb55 - script hal_arm_at91_eb55.cdl - hardware - description " - The eb55 HAL package provides the support needed to run eCos on an - Atmel evaluation board (EB55)." -} - -package CYGPKG_HAL_ARM_AT91_PHYCORE { - alias { "PHYTEC evaluation board (phyCORE AT91M55800A)" hal_arm_at91_phycore arm_at91_phycore_hal } - directory hal/arm/at91/phycore - script hal_arm_at91_phycore.cdl - hardware - description " - The phyCORE HAL package provides the support needed to run eCos on - an PHYTEC evaluation board (phyCORE AT91M55800A based on HD200)." -} - -package CYGPKG_HAL_ARM_LPC2XXX { - alias { "Philips LPC2XXX variant HAL" hal_arm_lpc2xxx arm_lpc2xxx_hal } - directory hal/arm/lpc2xxx/var - script hal_arm_lpc2xxx.cdl - hardware - description " - The LPC2XXX HAL package provides the support needed to run eCos on - Philips LPC2XXX based targets." -} - -package CYGPKG_HAL_ARM_LPC24XX { - alias { "NXP LPC24XX variant HAL" hal_arm_lpc24xx arm_lpc24xx_hal } - directory hal/arm/lpc24xx/var - script hal_arm_lpc24xx.cdl - hardware - description " - The LPC24XX HAL package provides the support needed to run eCos on - NXP LPC24XX based targets." -} - -package CYGPKG_HAL_ARM_LPC2XXX_MCB2100 { - alias { "Keil evaluation board MCB2100 " hal_mcb2100_arm } - directory hal/arm/lpc2xxx/mcb2100 - script hal_arm_lpc2xxx_mcb2100.cdl - hardware - description " - The mcb2100 HAL package provides the support needed to run eCos on an - the MCB2100 evaluation board from Keil." -} - -package CYGPKG_HAL_ARM_LPC2XXX_P2106 { - alias { "Olimex evaluation board LPC-P2106 " hal_p2106_arm } - directory hal/arm/lpc2xxx/p2106 - script hal_arm_lpc2xxx_p2106.cdl - hardware - description " - The p2106 HAL package provides the support needed to run eCos on an the - LPC-2106 evaluation board from Olimex." -} - -package CYGPKG_HAL_ARM_LPC2XXX_PHYCORE229X { - alias { "phyCORE-LPC229x development board" arm_lpc2xxx_phycore229x } - directory hal/arm/lpc2xxx/phycore229x - script hal_arm_lpc2xxx_phycore229x.cdl - hardware - description " - The Phycore HAL package provides the support needed to run eCos - on a Phytec phyCORE-LPC229x development board." -} - -package CYGPKG_HAL_ARM_LPC24XX_EA2468 { - alias { "Embedded Artists LPC2468 OEM board" arm_lpc2xxx_ea2468 } - directory hal/arm/lpc24xx/ea2468 - script hal_arm_lpc24xx_ea2468.cdl - hardware - description " - The Embedded Artists LPC2468 HAL package provides the support needed - to run eCos on a Embbeded Artists LPC2468 OEM board." -} - -package CYGPKG_HAL_ARM_LPC2XXX_LPCMT { - alias { "Olimex evaluation board LPC-MT " hal_lpcmt_arm } - directory hal/arm/lpc2xxx/lpcmt - script hal_arm_lpc2xxx_lpcmt.cdl - hardware - description " - The lpcmt HAL package provides the support needed to run eCos on an the - LPC-MT evaluation board from Olimex." -} - -package CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294 { - alias { "Olimex LPC-H2294 header board" hal_olpch2294_arm } - directory hal/arm/lpc2xxx/olpch2294 - script hal_arm_lpc2xxx_olpch2294.cdl - hardware - description " - The olpch2294 HAL package provides the support needed to - run eCos on the Olimex LPC-H2294 header board." -} - -package CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 { - alias { "Olimex LPC-E2294 development board" hal_olpce2294_arm } - directory hal/arm/lpc2xxx/olpce2294 - script hal_arm_lpc2xxx_olpce2294.cdl - hardware - description " - The olpce2294 HAL package provides the support needed to - run eCos on Olimex LPC-E2294 development board." -} - -package CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 { - alias { "Olimex LPC-L2294-1MB development board" hal_olpcl2294_arm } - directory hal/arm/lpc2xxx/olpcl2294 - script hal_arm_lpc2xxx_olpcl2294.cdl - hardware - description " - The olpcl2294 HAL package provides the support needed to run - eCos on Olimex LPC-L2294-1MB development board." -} - -package CYGPKG_HAL_ARM_MAC7100 { - alias { "Freescale MAC7100 variant HAL" hal_arm_mac7100 arm_mac7100_hal } - directory hal/arm/mac7100/var - script hal_arm_mac7100.cdl - hardware - description " - The mac7100 HAL package provides the support needed to run eCos on Freescale - MAC7100 based targets." -} - -package CYGPKG_HAL_ARM_MAC7100_MACE1 { - alias { "MAC7100 evaluation board (MACE1)" hal_arm_mac7100_mace1 arm_mac7100_mace1_hal } - directory hal/arm/mac7100/mace1 - script hal_arm_mac7100_mace1.cdl - hardware - description " - The MACE1 HAL package provides the support needed to run eCos on an - MAC7100 evaluation board (MACE1)." -} - -package CYGPKG_HAL_ARM_MAC7100_MAC7100EVB { - alias { "MAC7100EVB evaluation board (Freescale)" hal_arm_mac7100_mac7100evb arm_mac7100_mac7100evb_hal } - directory hal/arm/mac7100/mac7100evb - script hal_arm_mac7100_mac7100evb.cdl - hardware - description " - The MAC7100EVB HAL package provides the support needed to run eCos on an - MAC7100 evaluation board (MAC7100EVB)." -} - -package CYGPKG_HAL_ARM_EBSA285 { - alias { "Intel EBSA285 StrongARM board" hal_arm_ebsa285 arm_ebsa285_hal } - directory hal/arm/ebsa285 - script hal_arm_ebsa285.cdl - hardware - description " - The EBSA285 HAL package provides the support needed to run - eCos on a Intel EBSA285 StrongARM eval board." -} - -package CYGPKG_HAL_ARM_ARM9 { - alias { "ARM9 variant" hal_arm_arm9 } - directory hal/arm/arm9/var - script hal_arm_arm9.cdl - hardware - description " - The ARM9 HAL package provides the support needed to run - eCos on a ARM9 based systems." -} - - -package CYGPKG_HAL_ARM_ARM9_AAED2000 { - alias { "Agilent AAED2000 unit" hal_arm_arm9_aaed } - directory hal/arm/arm9/aaed2000 - script hal_arm_arm9_aaed2000.cdl - hardware - description " - The AAED2000 HAL package provides the support needed to run - eCos on an Agilent AAED2000 board." -} - -package CYGPKG_HAL_ARM_ARM9_EXCALIBUR { - alias { "Altera Excalibur ARM9 board" hal_arm_arm9_excalibur } - directory hal/arm/arm9/excalibur - script hal_arm_arm9_excalibur.cdl - hardware - description " - The Excalibur HAL package provides the support needed to run - eCos on an Altera Excalibur ARM9 board." -} - -package CYGPKG_HAL_ARM_ARM9_SMDK2410 { - alias { "Samsung ARM9/SMDK2410 development board" hal_arm_arm9_smdk2410 } - directory hal/arm/arm9/smdk2410 - script hal_arm_arm9_smdk2410.cdl - hardware - description " - The SMDK2410 HAL package provides the support needed to run - eCos on Samsung SMDK2410 and S3c2410x (ARM9) based development boards." -} - -package CYGPKG_HAL_ARM_ARM9_INNOVATOR { - alias { "Innovator (ARM)" hal_arm_arm9_innovator } - directory hal/arm/arm9/innovator - script hal_arm_arm9_innovator.cdl - hardware - description " - The Innovator HAL package provides the support needed to run - RedBoot on the ARM processor of the Innovator. - - NOTE: Full support for eCos is not provided yet. This HAL - contains only the minimum amount necessary to run RedBoot - on the Innovator. In particular, interrupts are not yet - supported. Watch this space for more details in the near - future." -} - -package CYGPKG_HAL_ARM_SA11X0 { - alias { "Intel SA11X0 Chipset" hal_arm_sa11x0 } - directory hal/arm/sa11x0/var - script hal_arm_sa11x0.cdl - hardware - description " - The SA11X0 HAL package provides the support needed to run - eCos on a Intel StrongARM SA11X0 based systems." -} - -package CYGPKG_HAL_ARM_SA11X0_ASSABET { - alias { "Intel SA1110 Assabet eval board" hal_arm_sa11x0_assabet } - directory hal/arm/sa11x0/assabet - script hal_arm_sa11x0_assabet.cdl - hardware - description " - The ASSABET HAL package provides the support needed to run - eCos on a Intel StrongARM SA1110 evaluation board (assabet)." -} - -package CYGPKG_HAL_ARM_SA11X0_CERF { - alias { "Intrinsyc Cerf board" hal_arm_sa11x0_cerf } - directory hal/arm/sa11x0/cerf - script hal_arm_sa11x0_cerf.cdl - hardware - description " - The CERF HAL package provides the support needed to run - eCos on a Intrinsyc StrongARM SA1110 Cerf board." -} - -package CYGPKG_HAL_ARM_SA11X0_CERFPDA { - alias { "Intrinsyc Cerfpda" hal_arm_sa11x0_cerfpda } - directory hal/arm/sa11x0/cerfpda - script hal_arm_sa11x0_cerfpda.cdl - hardware - description " - The CERFPDA HAL package provides the support needed to run - eCos on a Intrinsyc StrongARM SA1110 Cerfpda." -} - -package CYGPKG_HAL_ARM_SA11X0_IPAQ { - alias { "Compaq iPAQ Pocket PC" hal_arm_sa11x0_ipaq } - directory hal/arm/sa11x0/ipaq - script hal_arm_sa11x0_ipaq.cdl - hardware - description " - The IPAQ HAL package provides the support needed to run - eCos on a Intel StrongARM SA1110 pocket PC (Compaq iPAQ)." -} - -package CYGPKG_HAL_ARM_SA11X0_FLEXANET { - alias { "SA1110 Flexanet board" hal_arm_sa11x0_flexanet } - directory hal/arm/sa11x0/flexanet - script hal_arm_sa11x0_flexanet.cdl - hardware - description " - The FLEXANET HAL package provides the support needed to run - eCos on an SA1110 Flexanet board." -} - -package CYGPKG_HAL_ARM_SNDS { - alias { "Samsung SNDS" hal_arm_snds arm_snds_hal} - directory hal/arm/snds - script hal_arm_snds.cdl - hardware - description " - The SNDS HAL package provides the support needed to run eCos on a - Samsung SNDS eval board" -} - -package CYGPKG_DEVS_ETH_SMSC_LAN91CXX { - alias { "SMSC LAN91CXX ethernet driver" lan91cxx_eth_driver lan9000_eth_driver } - hardware - directory devs/eth/smsc/lan91cxx - script smsc_lan91cxx_eth_drivers.cdl - description "Ethernet driver for SMSC LAN91CXX (LAN9000) controller." -} - - -package CYGPKG_HAL_ARM_SA11X0_NANO { - alias { "Intel SA1110 nanoEngine eval board" hal_arm_sa11x0_nano } - directory hal/arm/sa11x0/nano - script hal_arm_sa11x0_nano.cdl - hardware - description " - The nanoEngine HAL package provides the support needed to run - eCos on the Bright Star Engineering nanoEngine StrongARM SA1110 board." -} - -package CYGPKG_DEVS_ETH_ARM_NANO { - alias { "BSE nanoEngine with 82559 ethernet driver" - devs_eth_arm_nano nano_eth_driver } - hardware - directory devs/eth/arm/nano - script nano_eth_drivers.cdl - description "Ethernet driver for SA11x0 nanoEngine with Intel - i82559 ethernet interfaces." -} - -package CYGPKG_HAL_ARM_SA11X0_BRUTUS { - alias { "Intel SA1100 Brutus eval board" hal_arm_sa11x0_brutus } - directory hal/arm/sa11x0/brutus - script hal_arm_sa11x0_brutus.cdl - hardware - description " - The BRUTUS HAL package provides the support needed to run - eCos on a Intel StrongARM SA1110 evaluation board (brutus)." -} - -package CYGPKG_HAL_ARM_SA11X0_SA1100MM { - alias { "Intel SA1100 Multimedia eval board" hal_arm_sa11x0_sa1100mm } - directory hal/arm/sa11x0/sa1100mm - script hal_arm_sa11x0_sa1100mm.cdl - hardware - description " - The MULTIMEDIA HAL package provides the support needed to run - eCos on a Intel StrongARM SA1110 Multimedia evaluation board." -} - -package CYGPKG_HAL_ARM_EDB7XXX { - alias { "Cirrus Logic ARM7 based development boards" hal_arm_edb7xxx arm_edb7xxx_hal } - directory hal/arm/edb7xxx - script hal_arm_edb7xxx.cdl - hardware - description " -The EDB7XXX HAL package provides the support needed to run eCos on Cirrus Logic CL-PS7111 and EP7xxx based development boards." -} - -package CYGPKG_HAL_ARM_CMA230 { - alias { "Cogent CMA230/222 board" hal_arm_cma230 arm_cma230_hal } - directory hal/arm/cma230 - script hal_arm_cma230.cdl - hardware - description " -The cma230 HAL package provides the support needed to run eCos on a Cogent -CMA230 (ARM7TDMI) or CMA222 (ARM710T) eval board." -} - -package CYGPKG_HAL_ARM_AIM711 { - alias { "ARM Industial Module AIM 711" hal_arm_aim711 arm_aim711_hal} - directory hal/arm/aim711 - script hal_arm_aim711.cdl - hardware - description " - The ARM Industial Module AIM 711 HAL package provides the support - needed to run eCos on a ARM Industial Module AIM 711 from - Vision Systems GmbH." -} - -package CYGPKG_HAL_ARM_XSCALE_CORE { - alias { "Intel XScale Core" hal_arm_xscale_core } - directory hal/arm/xscale/cores - script hal_arm_xscale_core.cdl - hardware - description " - The XScale core HAL package provides the support needed to run eCos - on all Intel XScale based systems." -} - -package CYGPKG_HAL_ARM_XSCALE_IOP310 { - alias { "Intel IOP8310 (IQ80200/IQ80310) XScale chipset" hal_arm_iop310 arm_iop310_hal } - directory hal/arm/xscale/iop310 - script hal_arm_xscale_iop310.cdl - hardware - description " - The IOP310 HAL package provides the support needed to run - eCos on a system using the Intel XScale IOP310 (IQ80200/80310) chipset." -} - -package CYGPKG_HAL_ARM_XSCALE_IQ80310 { - alias { "Intel IQ80310 (Cyclone) eval board" hal_arm_xscale_iq80310 hal_arm_xscale_cyclone } - directory hal/arm/xscale/iq80310 - script hal_arm_xscale_iq80310.cdl - hardware - description " - The IQ80310 HAL package provides the support needed to run - eCos on an Intel Cyclone evaluation board, utilizing an Intel XScale - IQ80200/80310 chipset." -} - -package CYGPKG_HAL_ARM_XSCALE_NPWR { - alias { "NPWR Linux Engine" hal_arm_xscale_npwr } - directory hal/arm/xscale/npwr - script hal_arm_xscale_npwr.cdl - hardware - description " - The NPWR HAL package provides the support needed to run - eCos on a NPWR Linux Engine, utilizing an Intel XScale - IQ80200/80310 chipset." -} - -package CYGPKG_DEVS_ETH_ARM_XSCALE_NPWR { - alias { "NPWR Linux Engine ethernet drivers" devs_eth_arm_xscale_npwr } - hardware - directory devs/eth/arm/npwr - script npwr_eth_drivers.cdl - description "Ethernet drivers for NPWR Linux Engine via 82544 NIC." -} - -package CYGPKG_HAL_ARM_XSCALE_VERDE { - alias { "Intel XScale 80320 I/O Processor" hal_arm_xscale_verde } - directory hal/arm/xscale/verde - script hal_arm_xscale_verde.cdl - hardware - description " - The XSCALE HAL package provides the support needed to run - eCos on Intel 80320 based systems." -} - -package CYGPKG_HAL_ARM_XSCALE_IQ80321 { - alias { "Intel XScale IQ80321 eval board" hal_arm_xscale_iq80321 } - directory hal/arm/xscale/iq80321 - script hal_arm_xscale_iq80321.cdl - hardware - description " - The IQ80321 HAL package provides the support needed to run - eCos on an Intel XScale IQ80321 evaluation board." -} - -package CYGPKG_HAL_ARM_XSCALE_IXP425 { - alias { "Intel XScale IXP425 Network Processor" hal_arm_xscale_ixp425 } - directory hal/arm/xscale/ixp425 - script hal_arm_xscale_ixp425.cdl - hardware - description " - The XScale IXP425 HAL package provides the support needed to run - eCos on Intel XScale IXP425 network processor based systems." -} - -package CYGPKG_HAL_ARM_XSCALE_XSENGINE { - alias { "Exys XSEngine" hal_arm_xscale_xsengine } - directory hal/arm/xscale/xsengine - script hal_arm_xscale_xsengine.cdl - hardware - description " - The XSEngine HAL package provides the support needed to run - eCos on an Exys XSEngine board." -} - -package CYGPKG_HAL_ARM_XSCALE_IXDP425 { - alias { "Intel XScale IXDP425 Network Processor eval board" hal_arm_xscale_ixdp425 } - directory hal/arm/xscale/ixdp425 - script hal_arm_xscale_ixdp425.cdl - hardware - description " - The IXDP425 HAL package provides the support needed to run - eCos on an Intel XScale IXDP425 network processor evaluation board." -} - -package CYGPKG_HAL_ARM_XSCALE_GRG { - alias { "Intel XScale Generic Residential Gateway" hal_arm_xscale_grg } - directory hal/arm/xscale/grg - script hal_arm_xscale_grg.cdl - hardware - description " - The GRG HAL package provides the support needed to run eCos on an - Intel Generic Residential Gateway evaluation board." -} - -package CYGPKG_HAL_ARM_XSCALE_PRPMC1100 { - alias { "Motorola PrPMC1100 PMC for Intel XScale IXC1100" hal_arm_xscale_prpmc1100 } - directory hal/arm/xscale/prpmc1100 - script hal_arm_xscale_prpmc1100.cdl - hardware - description " - The PrPMC1100 HAL package provides the support needed to run eCos on an - Motorola PrPMC1100 evaluation board." -} - -package CYGPKG_HAL_ARM_XSCALE_PXA2X0 { - alias { "Intel PXA2X0" hal_arm_xscale_pxa2x0 } - directory hal/arm/xscale/pxa2x0 - script hal_arm_xscale_pxa2x0.cdl - hardware - description " - The PXA2X0 HAL package provides the support needed to run - eCos on Intel PXA2X0 based systems." -} - -package CYGPKG_HAL_ARM_XSCALE_MPC50 { - alias { "MICROPLEX Printer Controller 5.0" hal_arm_xscale_mpc50 } - directory hal/arm/xscale/mpc50 - script hal_arm_xscale_mpc50.cdl - hardware - description " - The MPC50 HAL package provides the support needed to run - eCos on a MPC 5.0." -} - -# -------------------------------------------------------------------------- -# SH packages -package CYGPKG_HAL_SH { - alias { "SH common HAL" hal_sh sh_hal sh_arch_hal } - directory hal/sh/arch - script hal_sh.cdl - hardware - description " - The SH (SuperH) architecture HAL package provides generic - support for this processor architecture. It is also - necessary to select variant and target platform HAL - packages." -} - -package CYGPKG_HAL_SH_SH2 { - alias { "SH2 architecture" hal_sh_sh2 } - directory hal/sh/sh2 - script hal_sh_sh2.cdl - hardware - description " - The SH2 (SuperH 2) variant HAL package provides generic - support for SH2 variant CPUs." -} - -package CYGPKG_HAL_SH_SH3 { - alias { "SH3 architecture" hal_sh_sh3 } - directory hal/sh/sh3 - script hal_sh_sh3.cdl - hardware - description " - The SH3 (SuperH 3) variant HAL package provides generic - support for SH3 variant CPUs." -} - -package CYGPKG_HAL_SH_SH4 { - alias { "SH4 architecture" hal_sh_sh4 } - directory hal/sh/sh4 - script hal_sh_sh4.cdl - hardware - description " - The SH4 (SuperH 4) variant HAL package provides generic - support for SH4 variant CPUs." -} - -package CYGPKG_HAL_SH_EDK7708 { - alias { "Hitachi SH7708 board" hal_sh_edk sh_edk_hal } - directory hal/sh/edk7708 - script hal_sh_edk7708.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a Hitachi SH3 EDK7708 board." -} - -package CYGPKG_HAL_SH_SH7708_CQ7708 { - alias { "CqREEK SH7708 board" hal_sh_cq sh_cq_hal } - directory hal/sh/cq7708 - script hal_sh_sh7708_cq7708.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a CqREEK SH7708 board." -} - -package CYGPKG_HAL_SH_SH7750_CQ7750 { - alias { "CqREEK SH7750 board" hal_sh_cqsh4 sh_cqsh4_hal } - directory hal/sh/cq7750 - script hal_sh_sh7750_cq7750.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a CqREEK SH7750 board." -} - - -package CYGPKG_HAL_SH_SH7729_HS7729PCI { - alias { "Hitachi HS7729PCI board" hal_sh_sh7729_hs7729pci sh_sh7729_hs7729pci_hal } - directory hal/sh/hs7729pci - script hal_sh_sh7729_hs7729pci.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a Hitachi HS7729PCI board." -} - -package CYGPKG_HAL_SH_SH77X9_SE77X9 { - alias { "Hitachi SE77x9 board" hal_sh_sh77x9_se77x9 sh_sh77x9_se77x9_hal } - directory hal/sh/se77x9 - script hal_sh_sh77x9_se77x9.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a Hitachi Solution Engine 77x9 board." -} - -package CYGPKG_HAL_SH_SH7751_SE7751 { - alias { "Hitachi SE7751 board" hal_sh_sh7751_se7751 sh_sh7751_se7751_hal } - directory hal/sh/se7751 - script hal_sh_sh7751_se7751.cdl - hardware - description " - This SH HAL package provides the support needed to run - eCos on a Hitachi Solution Engine 7751 board." -} - -package CYGPKG_HAL_SH_SH4_202_MD { - alias { "SuperH SH4-202 MicroDev CPU Board" hal_sh_sh4_202_md } - directory hal/sh/sh4_202_md - script hal_sh_sh4_202_md.cdl - hardware - description " - The SH4-202 HAL package provides generic - support for the SuperH SH4-202 MicroDev CPU board." -} - -# -------------------------------------------------------------------------- -# H8/300 packages -package CYGPKG_HAL_H8300 { - alias { "Hitachi H8300 common HAL" hal_h8300 h8300_hal} - directory hal/h8300/arch - script hal_h8300.cdl - hardware - description " -The Hitachi H8/300 architecture HAL package provides generic support for this -processor architecture. It is also necessary to select a specific -target platform HAL package." -} - -package CYGPKG_HAL_H8300_H8300H { - alias { "Hitachi H8300H variant HAL" hal_h8300h h8300h_hal} - directory hal/h8300/h8300h - script hal_h8300_h8300h.cdl - hardware - description " -The H8/300H HAL package provides the support needed to run eCos on a Hitachi -H8/300H processor." -} - -package CYGPKG_HAL_H8300_H8S { - alias { "Hitachi H8S variant HAL" hal_h8s h8s_hal} - directory hal/h8300/h8s - script hal_h8300_h8s.cdl - hardware - description " -The H8S HAL package provides the support needed to run eCos on a Hitachi -H8S processor." -} - -package CYGPKG_HAL_H8300_H8300H_SIM { - alias { "H8/300H simulator" hal_h8300h_sim h8300h_sim_hal } - directory hal/h8300/sim - script hal_h8300_h8300h_sim.cdl - hardware - description " - The minimal simulator HAL package is provided for use when - only a simple simulation of the processor architecture is - desired, as opposed to detailed simulation of any specific - board. In particular it is not possible to simulate any of - the I/O devices, so device drivers cannot be used." -} - -package CYGPKG_HAL_H8300_H8300H_AKI3068NET { - alias { "Akizuki H8/3068 board" hal_h8300h_aki3068net h8300h_aki3068net_hal } - directory hal/h8300/aki3068net - script hal_h8300_h8300h_aki3068net.cdl - hardware - description " - The aki3068net HAL package provides the support needed to run - eCos on a Akizuki H8/3068 Network micom board." -} - -package CYGPKG_HAL_H8300_H8300H_H8MAX { - alias { "H8MAX board" hal_h8300h_h8max h8300h_h8max_hal } - directory hal/h8300/h8max - script hal_h8300_h8300h_h8max.cdl - hardware - description " - The h8max HAL package provides the support needed to run - eCos on a H8MAX board." -} - -package CYGPKG_HAL_H8300_H8S_SIM { - alias { "H8S simulator" hal_h8s_sim h8s_sim_hal } - directory hal/h8300/sim_s - script hal_h8300_h8s_sim.cdl - hardware - description " - The minimal simulator HAL package is provided for use when - only a simple simulation of the processor architecture is - desired, as opposed to detailed simulation of any specific - board. In particular it is not possible to simulate any of - the I/O devices, so device drivers cannot be used." -} - -package CYGPKG_HAL_H8300_H8S_EDOSK2674 { - alias { "EDOSK-2674 board" hal_h8s_edosk2674 h8s_edosk2674_hal } - directory hal/h8300/edosk2674 - script hal_h8300_h8s_edosk2674.cdl - hardware - description " - The edosk2674 HAL package provides the support needed to run - eCos on a Hitachi Micro System Europe EDOSK-2674 Evalution board." -} - -# ========================================================================== -# -------------------------------------------------------------------------- -# i386 packages -package CYGPKG_HAL_I386 { - alias { "i386 common HAL" hal_i386 i386_hal i386_arch_hal } - directory hal/i386/arch - script hal_i386.cdl - hardware - description " - The i386 architecture HAL package provides generic - support for this processor architecture. It is also - necessary to select a specific target platform HAL - package." -} - -package CYGPKG_HAL_I386_GENERIC { - alias { "i386 generic target" hal_i386_generic } - directory hal/i386/generic - script hal_i386_generic.cdl - hardware - description " - The i386 generic Target HAL package provides support - for generic IA32 processors, from the 80386 to the latest - Pentium/Athlon." - -} -package CYGPKG_HAL_I386_PCMB { - alias { "i386 PC Motherboard" hal_i386_pcmb } - directory hal/i386/pcmb - script hal_i386_pcmb.cdl - hardware - description " - The i386 PC Motherboard HAL package provides the - support needed to run eCos binaries on a standard i386 - PC motherboard. This is a support package for various - actual platform specific targets." -} -package CYGPKG_HAL_I386_PC { - alias { "i386 PC target" hal_i386_pc } - directory hal/i386/pc - script hal_i386_pc.cdl - hardware - description " - The i386 PC Target HAL package provides the - support needed to run eCos binaries on a standard i386 - PC." -} - -# -------------------------------------------------------------------------- -# Synthetic target. -package CYGPKG_HAL_SYNTH { - alias { "Linux synthetic target" linux } - directory hal/synth/arch - script hal_synth.cdl - hardware - description " - The Linux Synthetic Target HAL package provides the - support needed to run eCos binaries on top of the i386 - Linux kernel." -} - -package CYGPKG_HAL_SYNTH_I386 { - alias { "Linux/i386 synthetic target" i386_linux } - directory hal/synth/i386linux - script hal_synth_i386.cdl - hardware - description " - i386 processor-specific support for the Linux synthetic target" -} - -# -------------------------------------------------------------------------- -# SPARClite packages -package CYGPKG_HAL_SPARCLITE { - alias { "SPARClite common HAL" hal_sparclite sparclite_hal sparclite_arch_hal } - directory hal/sparclite/arch - script hal_sparclite.cdl - hardware - description " - The SPARClite architecture HAL package provides generic support - for this processor architecture. It is also necessary to select - a specific target platform HAL package." -} - -package CYGPKG_HAL_SPARCLITE_SLEB { - alias { "Fujitsu MB86800-MA01 board" hal_sparclite_sleb sparclite_sleb_hal } - directory hal/sparclite/sleb - script hal_sparclite_sleb.cdl - hardware - description " - The SPARClite evaluation board HAL package is provided for use - with the Fujitsu MB8683x boards." -} - -package CYGPKG_HAL_SPARCLITE_SIM { - alias { "SPARClite simulator" hal_sparclite_sim sparclite_sim_hal } - directory hal/sparclite/sim - script hal_sparclite_sim.cdl - hardware - description " - The SPARClite simulator HAL package is provided for use - with the SPARClite simulator." -} - -# -------------------------------------------------------------------------- -# SPARC V7/V8 packages -package CYGPKG_HAL_SPARC { - alias { "SPARC V7/V8 common HAL" hal_sparc sparc_hal sparc_arch_hal } - directory hal/sparc/arch - script hal_sparc.cdl - hardware - description " - The SPARC V7/V8 architecture HAL package provides generic support - for this processor architecture. It is also necessary to select - a specific target platform HAL package." -} - -package CYGPKG_HAL_SPARC_ERC32 { - alias { "ERC32 processor" hal_sparc_erc32 sparc_erc32_hal } - directory hal/sparc/erc32 - script hal_sparc_erc32.cdl - hardware - description " - The ERC32 processor HAL package is provided for use - with both real hardware and the TSIM/ERC32 simulator." -} - -package CYGPKG_HAL_SPARC_LEON { - alias { "LEON processor" hal_sparc_leon sparc_leon_hal } - directory hal/sparc/leon - script hal_sparc_leon.cdl - hardware - description " - The LEON processor HAL package is provided for use - with both real hardware and the TSIM/LEON simulator." -} - -# -------------------------------------------------------------------------- -# PowerPC packages -package CYGPKG_HAL_POWERPC { - alias { "PowerPC common HAL" hal_powerpc powerpc_hal powerpc_arch_hal } - directory hal/powerpc/arch - script hal_powerpc.cdl - hardware - description " - The PowerPC architecture HAL package provides generic - support for this processor architecture. It is also necessary to - select a CPU variant and a specific target platform HAL - package." -} - -package CYGPKG_HAL_POWERPC_MPC8260 { - alias { "PowerPC MPC8260 variant HAL" hal_mpc8260 } - directory hal/powerpc/mpc8260/ - script hal_powerpc_mpc8260.cdl - hardware - description " - The PowerPC MPC8260 PowerQUICCII variant HAL package provides - support for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_MPC8XXX { - alias { "PowerPC MPC8XXX variant HAL" hal_mpc8xxx } - directory hal/powerpc/mpc8xxx/ - script hal_powerpc_mpc8xxx.cdl - hardware - description " - The PowerPC MPC8XXX PowerQUICCII variant HAL package provides - support for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_MPC8xx { - alias { "PowerPC 8xx variant HAL" hal_mpc8xx mpc8xx_hal mpc8xx_arch_hal } - directory hal/powerpc/mpc8xx/ - script hal_powerpc_mpc8xx.cdl - hardware - description " - The PowerPC 8xx variant HAL package provides generic support - for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_PPC60x { - alias { "PowerPC 60x variant HAL" hal_ppc60x ppc60x_hal ppc60x_arch_hal } - directory hal/powerpc/ppc60x/ - script hal_powerpc_ppc60x.cdl - hardware - description " - The PowerPC 60x variant HAL package provides generic support - for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_MPC5xx { - alias { "PowerPC 5xx variant HAL" hal_mpc5xx mpc5xx_hal mpc5xx_arch_hal } - directory hal/powerpc/mpc5xx/ - script hal_powerpc_mpc5xx.cdl - hardware - description " - The PowerPC 5xx variant HAL package provides generic support - for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_PPC40x { - alias { "PowerPC 40x variant HAL" hal_ppc40x ppc40x_hal ppc40x_arch_hal } - directory hal/powerpc/ppc40x/ - script hal_powerpc_ppc40x.cdl - hardware - description " - The PowerPC 40x variant HAL package provides generic support - for this processor variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_POWERPC_COGENT { - alias { "Cogent CMA286/287 board" hal_powerpc_cogent powerpc_cogent_hal } - directory hal/powerpc/cogent - script hal_powerpc_cogent.cdl - hardware - description " - The cogent HAL package provides the support needed to run - eCos on a Cogent board equipped with a PowerPC processor." -} - -package CYGPKG_HAL_POWERPC_CME555 { - alias { "Axiom's CME555 evaluation board" hal_powerpc_cme555 powerpc_cme555_hal } - directory hal/powerpc/cme555 - script hal_powerpc_cme555.cdl - hardware - description " - The CME555 HAL package provides the support needed to run - eCos on a CME555 evaluation board from Axiom Manufacturing." -} - -package CYGPKG_HAL_POWERPC_EC555 { - alias { "Wuerz development board" hal_powerpc_ec555 powerpc_ec555_hal } - directory hal/powerpc/ec555 - script hal_powerpc_ec555.cdl - hardware - description " - The EC555 HAL package provides the support needed to run - eCos on an EC555 development board from Wuerz elektronik." -} - -package CYGPKG_HAL_POWERPC_PATI { - alias { "MPL PATI PC/104+ board" hal_powerpc_pati powerpc_pati_hal } - directory hal/powerpc/pati - script hal_powerpc_pati.cdl - hardware - description " - The PATI HAL package provides the support needed to run - eCos on an PATI PC/104+ board from MPL elektronik." -} - -package CYGPKG_HAL_POWERPC_FADS { - alias { "Motorola MPC8xxFADS board" hal_powerpc_fads powerpc_fads_hal } - directory hal/powerpc/fads - script hal_powerpc_fads.cdl - hardware - description " - The FADS HAL package provides the support needed to run - eCos on a Motorola FADS board equipped with a PowerPC processor." -} -package CYGPKG_HAL_POWERPC_MBX { - alias { "Motorola MBX860/821 board" hal_powerpc_mbx powerpc_mbx_hal } - directory hal/powerpc/mbx - script hal_powerpc_mbx.cdl - hardware - description " - The MBX HAL package provides the support needed to run - eCos on a Motorola MBX board equipped with a PowerPC processor." -} - -package CYGPKG_HAL_POWERPC_VIPER { - alias { "A&M Viper PPC860 board" hal_powerpc_viper powerpc_viper_hal } - directory hal/powerpc/viper - script hal_powerpc_viper.cdl - hardware - description " - The VIPER HAL package provides the support needed to run - eCos on a A&M VIPER board equipped with a PowerPC processor." -} - -package CYGPKG_HAL_POWERPC_TS6 { - alias { "Delphi TigerSHARC-6 board" hal_powerpc_ts6 powerpc_ts6_hal } - directory hal/powerpc/ts6 - script hal_powerpc_ts6.cdl - hardware - description " - The TS6 HAL package provides the support needed to run - eCos on a Delphi TigerSHARC-6 board equipped with a - PowerPC processor." -} - -package CYGPKG_HAL_POWERPC_VADS { - alias { "Motorola MPC8260 VADS board" hal_powerpc_vads powerpc_vads_hal } - directory hal/powerpc/vads - script hal_powerpc_vads.cdl - hardware - description " - The VADS HAL package provides the support needed to run - eCos on a Motorola MPC8260 VADS board equipped with a - PowerPC processor." -} - -package CYGPKG_HAL_QUICC { - alias { "Motorola MPC8xx QUICC support" hal_quicc quicc_hal quicc } - directory hal/powerpc/quicc - script hal_powerpc_quicc.cdl - hardware - description " - The QUICC package provides some of the support needed - to run eCos on a Motorola MPC8xx processors, using the QUICC - communications subsystem." -} - -package CYGPKG_HAL_POWERPC_SIM { - alias { "PowerPC simulator" hal_powerpc_sim powerpc_sim_hal } - directory hal/powerpc/sim - script hal_powerpc_sim.cdl - hardware - description " - The minimal simulator HAL package is provided for use when - only a simple simulation of the processor architecture is - desired, as opposed to detailed simulation of any specific - board. In particular it is not possible to simulate any of - the I/O devices, so device drivers cannot be used." -} - -# -------------------------------------------------------------------------- -# MIPS packages - -package CYGPKG_HAL_MIPS { - alias { "MIPS common HAL" hal_mips mips_hal mips_arch_hal } - directory hal/mips/arch/ - script hal_mips.cdl - hardware - description " - The MIPS architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a CPU variant and a specific target platform HAL - package." -} - -package CYGPKG_HAL_MIPS_SIM { - alias { "MIPS simulator" hal_mips_sim mips_sim_hal } - directory hal/mips/sim - script hal_mips_sim.cdl - hardware - description " - The minimal simulator HAL package is provided for when only - a simple simulation of the processor architecture is - desired, as opposed to detailed simulation of any specific - board. To use this minimal simulator the command - `target sim --board=jmr3904pal' should be used from inside - gdb. It is not possible to use any of the eCos device - drivers when the simulator is running in this mode" -} - -package CYGPKG_HAL_MIPS_TX39 { - alias { "TX39 chip HAL" hal_tx39 tx39_hal tx39_arch_hal } - directory hal/mips/tx39/ - script hal_mips_tx39.cdl - hardware - description " - The TX39 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_TX39_JMR3904 { - alias { "Toshiba JMR-TX3904 board" hal_tx39_jmr3904 tx39_jmr3904_hal } - directory hal/mips/jmr3904 - script hal_mips_tx39_jmr3904.cdl - hardware - description " - The JMR3904 HAL package should be used when targetting the - actual hardware. The same package can also be used when - running on the full simulator, since this provides an - accurate simulation of the hardware including I/O devices. - To use the simulator in this mode the command - `target sim --board=jmr3904' should be used from inside gdb." -} - -package CYGPKG_HAL_MIPS_MIPS32 { - alias { "MIPS32 HAL" hal_mips32 mips32_hal mips32_arch_hal } - directory hal/mips/mips32/ - script hal_mips_mips32.cdl - hardware - description " - The MIPS 32 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_MIPS64 { - alias { "MIPS64 HAL" hal_mips64 mips64_hal mips64_arch_hal } - directory hal/mips/mips64/ - script hal_mips_mips64.cdl - hardware - description " - The MIPS 64 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_ATLAS { - alias { "MIPS Atlas board" hal_atlas atlas_hal } - directory hal/mips/atlas - script hal_mips_atlas.cdl - hardware - description " - The Atlas HAL package should be used when targetting the - actual hardware. " -} -package CYGPKG_HAL_MIPS_MALTA { - alias { "MIPS Malta board" hal_malta malta_hal } - directory hal/mips/malta - script hal_mips_malta.cdl - hardware - description " - The Malta HAL package should be used when targetting the - actual hardware. " -} - -package CYGPKG_HAL_MIPS_TX49 { - alias { "TX49 chip HAL" hal_tx49 tx49_hal tx49_arch_hal } - directory hal/mips/tx49/ - script hal_mips_tx49.cdl - hardware - description " - The TX49 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_TX49_REF4955 { - alias { "Toshiba TX4955 reference platform" hal_tx49_ref4955 tx49_ref4955_hal } - directory hal/mips/ref4955 - script hal_mips_tx49_ref4955.cdl - hardware - description " - The REF4955 HAL package should be used when targetting the - actual hardware." -} - -package CYGPKG_HAL_MIPS_RM7000 { - alias { "RM7000 chip HAL" hal_rm7000 rm7000_hal rm7000_arch_hal } - directory hal/mips/rm7000/var - script hal_mips_rm7000.cdl - hardware - description " - The RM7000 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_RM7000_OCELOT { - alias { "PMC-Sierra Ocelot platform" hal_rm7000_ocelot rm7000_ocelot_hal } - directory hal/mips/rm7000/ocelot - script hal_mips_rm7000_ocelot.cdl - hardware - description " - The Ocelot HAL package should be used when targetting the - actual hardware." -} - -package CYGPKG_HAL_MIPS_VR4300 { - alias { "VR4300 chip HAL" hal_vr4300 vr4300_hal vr4300_arch_hal } - directory hal/mips/vr4300/ - script hal_mips_vr4300.cdl - hardware - description " - The VR4300 variant HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} -package CYGPKG_HAL_MIPS_VR4300_VRC4373 { - alias { "NEC VRC4373 board" hal_vrc4373 vrc4373_hal } - directory hal/mips/vrc4373 - script hal_mips_vr4300_vrc4373.cdl - hardware - description " - The VRC4373 HAL package should be used when targetting the - actual hardware." -} - -package CYGPKG_HAL_MIPS_VR4300_VRC4375 { - alias { "NEC VRC4375 board" hal_vrc4375 vrc4375_hal } - directory hal/mips/vrc4375 - script hal_mips_vr4300_vrc4375.cdl - hardware - description " - The VRC4375 HAL package should be used when targetting the - actual hardware." -} - -package CYGPKG_HAL_MIPS_VR4300_VRC437X { - alias { "NEC VRC437X support" hal_vrc437x vrc437x_hal } - directory hal/mips/vrc437x - script hal_mips_vr4300_vrc437x.cdl - hardware - description " - The VRC437X HAL package should be used when targetting harware - that contains either a VRC437X companion chip." -} - -package CYGPKG_HAL_MIPS_UPD985XX { - alias { "upd985xx chip HAL" hal_upd985xx upd985xx_hal upd985xx_arch_hal } - directory hal/mips/upd985xx/ - script hal_mips_upd985xx.cdl - hardware - description " - The UPD985XX variant HAL package provides generic support - for this NEC system-on-chip processor architecture, uPD985xx. - It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_IDT32334 { - alias { "MIPS IDT32334 variant HAL" hal_idt32334 idt32334_hal idt32334_arch_hal } - directory hal/mips/idt32334 - script hal_mips_idt32334.cdl - hardware - description " - The IDT32334 variant HAL package provides generic support - for platforms based on this variant. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_MIPS_IDT32334_REFIDT334 { - alias { "MIPS IDT79S334A reference platform" hal_idt32334_refIDT334 idt32334_refIDT334_hal } - directory hal/mips/idt79s334a - script hal_mips_idt32334_refidt334.cdl - hardware - description " - The REFIDT334 HAL package should be used when targetting the - actual hardware." -} - -# -------------------------------------------------------------------------- -# MN10300 packages - -package CYGPKG_HAL_MN10300 { - alias { "MN10300 common HAL" hal_mn10300 mn10300_hal mn10300_arch_hal } - directory hal/mn10300/arch - script hal_mn10300.cdl - hardware - description " - The MN10300 architecture HAL package provides generic - support for this processor architecture. It is also - necessary to select a specific target platform HAL - package." -} - -package CYGPKG_HAL_MN10300_AM31 { - alias { "MN10300 AM31 variant HAL" hal_mn10300_am31 mn10300_am31_hal } - directory hal/mn10300/am31 - script hal_mn10300_am31.cdl - hardware - description " - The MN10300 AM31 variant HAL package provides generic - support for this processor architecture. It is also - necessary to select a specific target platform HAL - package." -} - -package CYGPKG_HAL_MN10300_AM31_SIM { - alias { "MN10300 simulator" hal_mn10300_sim mn10300_sim_hal } - directory hal/mn10300/sim - script hal_mn10300_am31_sim.cdl - hardware - description " - The minimal simulator HAL package is provided for use when - only a simple simulation of the processor architecture is - desired, as opposed to detailed simulation of any specific - board. In particular it is not possible to simulate any of - the I/O devices, so device drivers cannot be used." -} - -package CYGPKG_HAL_MN10300_AM31_STDEVAL1 { - alias { "Matsushita stdeval1 board" hal_mn10300_stdeval1 mn10300_stdeval1_hal } - directory hal/mn10300/stdeval1 - script hal_mn10300_am31_stdeval1.cdl - hardware - description " - The stdeval1 HAL package should be used when targetting the - actual hardware. The same package can also be used when - running on the full MN10300 simulator, since this provides - an accurate simulation of the full hardware including I/O - devices." -} -package CYGPKG_HAL_MN10300_AM33 { - alias { "MN10300 AM33 variant HAL" hal_mn10300_am33 mn10300_am33_hal } - directory hal/mn10300/am33 - script hal_mn10300_am33.cdl - hardware - description " - The MN10300 AM33 variant HAL package provides generic - support for this processor architecture. It is also - necessary to select a specific target platform HAL - package." -} - -package CYGPKG_HAL_MN10300_AM33_STB { - alias { "Matsushita STB board" hal_mn10300_am33_stb mn10300_am33_stb_hal } - directory hal/mn10300/stb - script hal_mn10300_am33_stb.cdl - hardware - description " - The STB HAL package should be used when targetting the - actual hardware for the AM33 STB evaluation board." -} - -package CYGPKG_HAL_MN10300_AM33_ASB { - alias { "Matsushita ASB2303 board" hal_mn10300_am33_asb mn10300_am33_asb_hal } - directory hal/mn10300/asb - script hal_mn10300_am33_asb.cdl - hardware - description " - The ASB2303 HAL package should be used when targetting the - actual hardware for the AM33 ASB2303 evaluation board." -} - -package CYGPKG_HAL_MN10300_AM33_ASB2305 { - alias { "Matsushita ASB2305 board" hal_mn10300_am33_asb2305 - mn10300_am33_asb2305_hal } - directory hal/mn10300/asb2305 - script hal_mn10300_am33_asb2305.cdl - hardware - description " - The ASB2305 HAL package should be used when targetting the - actual hardware for the AM33 ASB2305 evaluation board." -} - -# -------------------------------------------------------------------------- -# NEC packages -package CYGPKG_HAL_V85X { - alias { "NEC V85x common HAL" hal_v85x nec_arch_hal } - directory hal/v85x/arch - script hal_v85x.cdl - hardware - description " -The NEC V85x architecture HAL package provides generic support for this -processor architecture. It is also necessary to select a specific -target platform HAL package." -} - -package CYGPKG_HAL_V85X_V850 { - alias { "NEC V850 variant HAL" hal_v85x_v850 nec_v850_hal } - directory hal/v85x/v850 - script hal_v85x_v850.cdl - hardware - description " -The V850 HAL package provides the support needed to run eCos on a NEC V850 -processor." -} - -package CYGPKG_HAL_V85X_V850_CEB { - alias { "Cosmo CEB-V850/SA1 board" hal_v85x_v850_ceb nec_v850_ceb_hal } - directory hal/v85x/ceb_v850 - script hal_v85x_ceb_v850.cdl - hardware - description " -The CEB-V850/SA1 HAL package provides the support needed to run eCos on a Cosmo CEB-V850/SA1 -evaluation board." -} - -# -------------------------------------------------------------------------- -# m68k packages - -package CYGPKG_HAL_M68K { - alias { "M68K common HAL" hal_m68k m68k_hal m68k_arch_hal } - directory hal/m68k/arch - script hal_m68k.cdl - hardware - - description "The M68K architecture HAL package provides generic - support for this architecture." -} - -package CYGPKG_HAL_M68K_MCFxxxx { - alias { "M68K/ColdFire variant HAL" hal_m68k_mcfxxxx m68k_mcfxxxx_hal } - directory hal/m68k/mcf52xx/var - script hal_m68k_mcf52xx.cdl - hardware - - description "The M68k/ColdFire variant HAL package provides generic - support for Freescale ColdFire cores." -} - -package CYGPKG_HAL_M68K_MCF5272 { - alias { "mcf5272 68k/ColdFire processor variant HAL" hal_m68k_mcf5272 m68k_mcf5272_hal } - directory hal/m68k/mcf52xx/mcf5272/proc - script hal_m68k_mcf5272.cdl - hardware - - description "The mcf5272 processor variant HAL package provides generic - support for this processor." -} - -package CYGPKG_HAL_M68K_M5272C3 { - alias { "Freescale m5272c3 evaluation board platform HAL" - hal_m68k_m5272c3 m68k_m5272c3_hal } - directory hal/m68k/mcf52xx/mcf5272/m5272c3 - script hal_m68k_m5272c3.cdl - hardware - - description "The Freescale m5272c3 evaluation board platform HAL - package should be used when targeting the actual hardware - for the Freescale m5272c3 evaluation board platform." -} - -package CYGPKG_DEVS_ETH_MCFxxxx { - alias { "MCFxxxx ethernet driver" devs_eth_mcfxxxx mcfxxxx_eth_driver } - hardware - directory devs/eth/m68k/mcf5272 - script mcf5272_eth.cdl - description " - This packages provides an ethernet driver for the on-chip - device provided by MCFxxxx ColdFire processors." -} - -package CYGPKG_DEVS_SERIAL_MCFxxxx { - alias { "MCFxxxx serial device driver" devs_serial_mcfxxxx mcfxxxx_serial_driver } - hardware - directory devs/serial/m68k/mcf52xx - script ser_mcf52xx.cdl - description " - This package provides serial drivers for the on-chip UART's - provided by MCFxxxx ColdFire processors." -} - -# -------------------------------------------------------------------------- -# CalmRISC16 packages - -package CYGPKG_HAL_CALM16 { - alias { "CalmRISC16 common HAL" hal_calm16 calm16_hal calm16_arch_hal } - directory hal/calmrisc16/arch/ - script hal_calm16.cdl - hardware - description " - The CalmRISC16 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a CPU variant and a specific target platform HAL - package." -} - -package CYGPKG_HAL_CALM16_CORE { - alias { "CalmRISC16 Core HAL" hal_calm16core calm16core_hal calm16core_arch_hal } - directory hal/calmrisc16/core/ - script hal_calm16_core.cdl - hardware - description " - The CalmRISC16 Core architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a specific target platform HAL package." -} - -package CYGPKG_HAL_CALM16_CEB { - alias { "CalmRISC16 Core eval board" hal_calm16_ceb calm16_ceb_hal } - directory hal/calmrisc16/ceb - script hal_calm16_ceb.cdl - hardware - description " - The CalmRISC16 HAL package should be used when targetting the - actual hardware. " -} -# -------------------------------------------------------------------------- -# CalmRISC32 packages - -package CYGPKG_HAL_CALM32 { - alias { "CalmRISC32 common HAL" hal_calm32 calm32_hal calm32_arch_hal } - directory hal/calmrisc32/arch/ - script hal_calm32.cdl - hardware - description " - The CalmRISC32 architecture HAL package provides generic support - for this processor architecture. It is also necessary to - select a CPU variant and a specific target platform HAL - package." -} - -package CYGPKG_HAL_CALM32_CORE { - alias { "CalmRISC32 Core HAL" hal_calm32core calm32core_hal calm32core_arch_hal } - directory hal/calmrisc32/core/ - script hal_calm32_core.cdl - hardware -} - -package CYGPKG_HAL_CALM32_CEB { - alias { "CalmRISC32 Core eval board" hal_calm32_ceb calm32_ceb_hal hal_commo } - directory hal/calmrisc32/ceb - script hal_calm32_ceb.cdl - hardware - description " - The CalmRISC32 HAL package should be used when targetting the - actual hardware. " -} - - -# -------------------------------------------------------------------------- -# FUJITSU packages -package CYGPKG_HAL_FRV { - alias { "FR-V (Fujitsu) common HAL" hal_frv frv_hal frv_arch_hal } - directory hal/frv/arch - script hal_frv.cdl - hardware - description " -The FRV architecture HAL package provides generic support for this -processor architecture. It is also necessary to select a specific -target platform HAL package." -} - -package CYGPKG_HAL_FRV_FRV400 { - alias { "FUJITSU development board (FR-V 400)" hal_frv_frv400 frv_frv400_hal } - directory hal/frv/frv400 - script hal_frv_frv400.cdl - hardware - description " -The FRV400 HAL package provides the support needed to run eCos on a FUJITSU -MB93091 (FR-V 400) eval board." -} - -package CYGPKG_HAL_FRV_MB93091 { - alias { "FUJITSU development board (FR-V)" mb93091 } - directory hal/frv/mb93091 - script hal_frv_mb93091.cdl - hardware - description " -The FRV Generic HAL package provides the support needed to run eCos on -various FUJITSU FR-V eval boards." -} - -package CYGPKG_HAL_FRV_MB93093 { - alias { "FUJITSU MB93093-PD00 Portable Development Kit (FR-V)" mb93093 } - directory hal/frv/mb93093 - script hal_frv_mb93093.cdl - hardware - description " -The MB93093 HAL package provides the support needed to run eCos on -the Fujitsu MB93093-PD00 Portable Development Kit board." -} - -package CYGPKG_DEVS_ETH_FRV_FRV400 { - alias { "Fujitsu FR-V 400 with 82559 ethernet driver" - devs_eth_frv_frv400 frv400_eth_driver } - hardware - directory devs/eth/frv/frv400 - script frv400_eth_drivers.cdl - description "Ethernet driver for Fujitsu FR-V 400 with Intel - i82559 ethernet interfaces." -} - -package CYGPKG_DEVS_ETH_FRV_PDK403 { - alias { "Fujitsu MB93093-PD00 with AXL88796 ethernet driver" - devs_eth_frv_pdk403 pdk403_eth_driver } - hardware - directory devs/eth/frv/pdk403 - script pdk403_eth_drivers.cdl - description "Ethernet driver for Fujitsu MB93093-PD00 Portable - Demonstration Kit with AXL88796 Ethernet device" -} - -package CYGPKG_DEVS_ETH_FRV_CB70 { - alias { "Fujitsu FR-V 405 with DM9000 ethernet driver" - devs_eth_frv_cb70 cb70_eth_driver } - hardware - directory devs/eth/frv/cb70 - script cb70_eth_driver.cdl - description "Ethernet driver for Fujitsu FR-V 405 CB70 CPU card with - Davicom DM9000 ethernet interface." -} - -# FR30 packages - -package CYGPKG_HAL_FR30 { - alias { "Fujitsu FR30 architecture (FR30/FR50/FR60)" hal_fr30 - fr30_hal } - directory hal/fr30/arch - script hal_fr30.cdl - hardware - description " -The Fujitsu FR30 HAL package provides the generic support needed to run eCos on -a FR30 based microcontroller. FR50 and FR60 architectures should also select -this one." -} - -package CYGPKG_HAL_FR30_MB91301 { - alias { "Fujitsu MB31301 variant (FR60)" hal_fr30_mb91301 - fr30_mb91301_hal } - directory hal/fr30/mb91301 - script hal_fr30_mb91301.cdl - hardware - description " -The Fujitsu MB91301 HAL package provides the support needed to run eCos on -the Fujitsu Starterkit MB91302 Evaluation board. It contains a MB91302A -Microcontroller from Fujitsu with a FR60 Core. So FR30 support is also needed." -} - -package CYGPKG_HAL_FR30_MB91301_SKMB91302 { - alias { "Fujitsu Starterkit MB91302 board" hal_fr30_skmb91302 - fr30_skmb91302_hal } - directory hal/fr30/skmb91302 - script hal_fr30_skmb91302.cdl - hardware - description " -The SKMB91302 HAL package provides the support needed to run eCos on -the Fujitsu Starterkit MB91302 board. It contains a MB91302 -Microcontroller from Fujitsu with a FR60 Core. So FR30 support is needed." -} - -package CYGPKG_DEVS_FLASH_FR30_SKMB91302 { - alias { "Fujitsu Starterkit MB91302 FLASH memory support" flash_skmb91302 } - directory devs/flash/fr30/skmb91302 - script flash_skmb91302.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Fujitsu Starterkit MB91302 platform. - (AMD 29DL640E-90 Device)" -} - -package CYGPKG_DEVS_ETH_ARM_AT91 { - alias { "AT91 Ethernet driver" at91_eth_driver } - directory devs/eth/arm/at91 - script at91_eth.cdl - hardware - description "Ethernet driver for the AT91 family of chips" -} - -package CYGPKG_DEVS_ETH_ARM_LPC2XXX { - alias { "LPC2xxx Ethernet driver" lpc2xxx_eth_driver } - directory devs/eth/arm/lpc2xxx - script lpc2xxx_eth.cdl - hardware - description "Ethernet driver for the LPC2xxx family of chips" -} - - -# -------------------------------------------------------------------------- - -# ========================================================================== - -# -------------------------------------------------------------------------- -# FRV targets -target frv400 { - alias { "Fujitsu development board (FR-V 400)" FRV400 } - packages { CYGPKG_HAL_FRV - CYGPKG_HAL_FRV_FRV400 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_FRV_FRV400 - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_FLASH_FRV_FRV400 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " -The frv400 target provides the packages needed to run eCos on a Fujistu -development board (FR-V 400)." -} - -target mb93091 { - alias { "Fujitsu MB93091 development board (FR-V 4xx,5xx)" MB93091 } - packages { CYGPKG_HAL_FRV - CYGPKG_HAL_FRV_MB93091 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_FRV_FRV400 - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_ETH_FRV_CB70 - CYGPKG_DEVS_ETH_DAVICOM_DM9000 - CYGPKG_DEVS_FLASH_FRV_FRV400 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " -The MB93091 target provides the packages needed to run eCos on a Fujitsu -MB93091 development board (FR-V 400 etc.)." -} - -target mb93093 { - alias { "Fujitsu development board (FR-V 400)" MB93093 } - packages { CYGPKG_HAL_FRV - CYGPKG_HAL_FRV_MB93093 - CYGPKG_DEVS_ETH_FRV_PDK403 - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_FLASH_FRV_PDK403 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " -The MB93093 target provides the packages needed to run eCos on a Fujitsu -MB93090-PD00 Portable Development Kit." -} - -# FR30 Targets - -target skmb91302 { - alias { "Fujitsu Starterkit MB91302 board" } - packages { CYGPKG_HAL_FR30 - CYGPKG_HAL_FR30_MB91301 - CYGPKG_HAL_FR30_MB91301_SKMB91302 - CYGPKG_DEVS_FLASH_FR30_SKMB91302 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX -} - description " -The Starterkit MB91302 HAL package provides the support needed to run -eCos on the Fujitsu Starterkit MB91302 board. It contains a MB91302 -Microcontroller from Fujitsu with a FR60 Core. So FR30 support is -included." -} - -# -------------------------------------------------------------------------- -# ARM Targets - -target pid { - alias { "ARM development board (PID)" PID } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_PID - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_PID - CYGPKG_DEVS_FLASH_ARM_PID - CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX - } - description " -The pid target provides the packages needed to run eCos on an ARM -development board (formerly known as PID)." -} - -target aeb { - alias { "ARM evaluation board (AEB-1)" aeb1 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AEB - CYGPKG_IO_SERIAL_ARM_AEB - CYGPKG_DEVICES_WATCHDOG_ARM_AEB - } - description " -The aeb target provides the packages needed to run eCos on an ARM -evaluation board (AEB-1)." -} - -target e7t { - alias { "ARM Evaluator7T board (AEB-2)" aeb2 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_E7T - CYGPKG_DEVS_FLASH_ARM_E7T - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_SST_39VFXXX - CYGPKG_IO_SERIAL_ARM_E7T - CYGPKG_DEVS_ETH_ARM_KS32C5000 - } - description " - The e7t target provides the packages needed to run eCos on an ARM - Evaluator7T board (aka AEB-2)." -} - -target integrator_arm7 { - alias { "ARM INTEGRATOR development board w/ ARM7TDMI" integrator } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_INTEGRATOR - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_ARM_INTEGRATOR - CYGPKG_DEVS_FLASH_INTEL_28FXXX - CYGPKG_DEVS_FLASH_ARM_INTEGRATOR - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_ARM_INTEGRATOR - } - description " - The INTEGRATOR_ARM7 target provides the packages needed to - run eCos on an ARM development board with an ARM7TDMI core - module installed." -} - -target integrator_arm9 { - alias { "ARM INTEGRATOR development board w/ ARM966" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_ARM9 - CYGPKG_HAL_ARM_INTEGRATOR - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_ARM_INTEGRATOR - CYGPKG_DEVS_FLASH_INTEL_28FXXX - CYGPKG_DEVS_FLASH_ARM_INTEGRATOR - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_ARM_INTEGRATOR - } - description " - The INTEGRATOR_ARM9 target provides the packages needed to - run eCos on an ARM development board with an ARM966 core - module installed." -} - -target eb40 { - alias { "Atmel evaluation board (EB40)" at91 at91_eb40 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_EB40 - CYGPKG_DEVS_FLASH_EB40 - CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91 - } - description " - The eb40 target provides the packages needed to run eCos on an Atmel - evaluation board (EB40)." -} - -target jtst { - alias { "Atmel Diopsis evaluation board (jtst)" at91_jtst } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_JTST - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVS_FLASH_JTST - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_DEVICES_WATCHDOG_ARM_AT91 - } - description " - The jtst target provides the packages needed to run eCos on an Atmel - Diospsis evaluation board (jtst)." -} - -target at91sam7sek { - alias { "Atmel AT91SAM7SEK evaluation board" at91_at91sam7sek } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91SAM7 - CYGPKG_HAL_ARM_AT91SAM7SEK - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVS_FLASH_AT91 - CYGPKG_IO_SPI - CYGPKG_DEVS_SPI_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_AT91 - } - description " - The at91sam7sek target provides the packages needed to run eCos on an - Atmel AT91SAM7S-EK evaluation board." -} - -target at91sam7xek { - alias { "Atmel AT91SAM7XEK evaluation board" at91_at91sam7xek } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91SAM7 - CYGPKG_HAL_ARM_AT91SAM7XEK - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVS_FLASH_AT91 - CYGPKG_IO_SPI - CYGPKG_DEVS_SPI_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_AT91 - CYGPKG_DEVS_ETH_PHY - CYGPKG_DEVS_ETH_ARM_AT91 - } - description " - The at91sam7xek target provides the packages needed to run eCos on an - Atmel AT91SAM7X-EK evaluation board." -} - -target sam7ex256 { - alias { "Olimex SAM7-EX256 evaluation board" at91_sam7ex256 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91SAM7 - CYGPKG_HAL_ARM_SAM7EX256 - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVS_FLASH_AT91 - CYGPKG_IO_SPI - CYGPKG_DEVS_SPI_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_AT91 - CYGPKG_DEVS_ETH_PHY - CYGPKG_DEVS_ETH_ARM_AT91 - CYGPKG_DEVS_CAN_AT91SAM7 - } - description " - The SAM7EX256 target provides the packages needed to run eCos on an - Olimex SAM7-EX256 evaluation board." -} - -target eb40a { - alias { "Atmel evaluation board (EB40A)" at91_eb40a } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_EB40A - CYGPKG_DEVS_FLASH_EB40A - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91 - } - description " - The eb40a target provides the packages needed to run eCos on an Atmel - evaluation board (EB40A)." -} - -target eb42 { - alias { "Atmel evaluation board (EB42)" at91_eb42 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_EB42 - CYGPKG_DEVS_FLASH_EB42 - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_IO_SERIAL_ARM_AT91 - } - description " - The eb42 target provides the packages needed to run eCos on an Atmel - evaluation board (EB42)." -} - -target eb55 { - alias { "Atmel evaluation board (EB55)" at91_eb55 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_EB55 - CYGPKG_DEVS_FLASH_EB55 - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_DEVS_FLASH_ATMEL_DATAFLASH - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_IO_SPI - CYGPKG_DEVS_SPI_ARM_EB55 - CYGPKG_DEVS_SPI_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91 - } - description " - The eb55 target provides the packages needed to run eCos on an Atmel - evaluation board (EB55)." -} - -target phycore { - alias { "PHYTEC evaluation board (phyCORE AT91M55800A)" at91_phycore } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AT91 - CYGPKG_HAL_ARM_AT91_PHYCORE - CYGPKG_DEVS_FLASH_PHYCORE - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_ARM_AT91 - CYGPKG_DEVICES_WATCHDOG_ARM_AT91 - } - description " - The phyCORE AT91M55800A target provides the packages needed to - run eCos on an PHYTEC evaluation board (phycore AT91M55800A based - on HD200)." -} - -target mcb2100 { - alias { "Keil evaluation board MCB2100" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_MCB2100 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The mcb2100 target provides the packages needed to run eCos on the - MCB2100 evaluation board from Keil." -} - -target p2106 { - alias { "Olimex evaluation board LPC-P2106" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_P2106 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The p2106 target provides the packages needed to run eCos on the - LPC-P2106 evaluation board from Olimex." -} - -target lpcmt { - alias { "Olimex evaluation board LPC-LPCMT" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_LPCMT - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The lpcmt target provides the packages needed to run eCos on the - LPC-LPCMT evaluation board from Olimex." -} - -target phycore229x { - alias { "phyCORE-LPC2294/92 development board HAL" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_PHYCORE229X - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_PHYCORE229X - CYGPKG_DEVS_ETH_ARM_PHYCORE229X - CYGPKG_DEVS_ETH_SMSC_LAN91CXX - CYGPKG_DEVS_CAN_LPC2XXX - } - description " - The phyCORE-LPC229x HAL package provides the support - needed to run eCos on a Phytec phyCORE-LPC2294/2 - development board." -} - -target ea2468 { - alias { "Embedded Artists LPC2468 OEM board HAL" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC24XX - CYGPKG_HAL_ARM_LPC24XX_EA2468 - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC24XX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - CYGPKG_DEVS_CAN_LPC2XXX - CYGPKG_DEVS_FLASH_EA2468 - CYGPKG_DEVS_FLASH_SST_39VFXXX - CYGPKG_DEVS_ETH_PHY - CYGPKG_DEVS_ETH_ARM_LPC2XXX - CYGPKG_IO_I2C - CYGPKG_DEVS_I2C_ARM_LPC2XXX - CYGPKG_DEVS_ADC_ARM_LPC24XX - CYGPKG_DEVS_NAND_SAMSUNG_K9 - } - description " - The Embedded Artists LPC2468 HAL package provides the support - needed to run eCos on an Embedded Artists LPC2468 OEM board." -} - -target olpch2294 { - alias { "Olimex LPC-H2294 header board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294 - CYGPKG_DEVS_FLASH_STRATA_V2 - CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The olpch2294 target provides the packages needed to run - eCos on Olimex LPC-H2294 header board." -} - - -target olpce2294 { - alias { "Olimex LPC-E2294 development board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 - CYGPKG_DEVS_FLASH_STRATA_V2 - CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 - CYGPKG_DEVS_ETH_CL_CS8900A - CYGPKG_DEVS_ETH_ARM_OLPCE2294 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The olpce2294 target provides the packages needed to run - eCos on Olimex LPC-E2294 development board." -} - -target olpcl2294 { - alias { "Olimex LPC-L2294-1MB development board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_LPC2XXX - CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 - CYGPKG_DEVS_FLASH_STRATA_V2 - CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 - CYGPKG_DEVS_ETH_CL_CS8900A - CYGPKG_DEVS_ETH_ARM_OLPCL2294 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_LPC2XXX - CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX - } - description " - The olpcl2294 target provides the packages needed to run - eCos on Olimex LPC-L2294-1MB development board." -} - -target mace1 { - alias { "MACE1 - a MAC7100 evaluation board" mac7100_mace1 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_MAC7100 - CYGPKG_HAL_ARM_MAC7100_MACE1 - CYGPKG_IO_SERIAL_FREESCALE_ESCI_H - CYGPKG_IO_SERIAL_FREESCALE_ESCI - } - description " - The mace1 target provides the packages needed to run eCos - on MAC7100 evaluation board (MACE1). " -} - -target mac7100evb { - alias { "MAC7100EVB - Freescale MAC7100 evaluation board" mac7100_mac7100evb } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_MAC7100 - CYGPKG_HAL_ARM_MAC7100_MAC7100EVB - CYGPKG_IO_SERIAL_FREESCALE_ESCI_H - CYGPKG_IO_SERIAL_FREESCALE_ESCI - } - description " - The MAC7100EVB target provides the packages needed to run eCos - on Freescale MAC7100EVB evaluation board. " -} - -target ebsa285 { - alias { "Intel EBSA285 StrongARM board" ebsa } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_EBSA285 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_ARM_EBSA285 - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_IO_SERIAL_ARM_EBSA285 - CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 - CYGPKG_DEVS_FLASH_EBSA285 - } - description " - The ebsa285 target provides the packages needed to run - eCos on an Intel EBSA285 StrongARM board." -} - - -target aaed2000 { - alias { "Agilent AAED2000 unit" aaed } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_ARM9 - CYGPKG_HAL_ARM_ARM9_AAED2000 - CYGPKG_DEVS_FLASH_ARM_AAED2000 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_ETH_CL_CS8900A - CYGPKG_DEVS_ETH_ARM_AAED2000 - CYGPKG_DEVS_KBD_AAED2000 - CYGPKG_DEVS_TOUCH_AAED2000 - } - description " - The AAED2000 target provides the packages needed to run - eCos on an Agilent AAED2000 board." -} - -target excalibur_arm9 { - alias { "Altera ARM9/Excalibur board" epxa10 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_ARM9 - CYGPKG_HAL_ARM_ARM9_EXCALIBUR - CYGPKG_DEVS_FLASH_INTEL_28FXXX - CYGPKG_DEVS_FLASH_ARM_EXCALIBUR - } - description " - The Excalibur target provides the packages needed to run - eCos on an Altera Excalibur board." -} - -target smdk2410 { - alias { "Samsung ARM9/SMDK2410 development board" s3c2410x } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_ARM9 - CYGPKG_HAL_ARM_ARM9_SMDK2410 - CYGPKG_IO_SERIAL_ARM_SMDK2410 - CYGPKG_DEVS_FLASH_ARM_SMDK2410 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " - The SMDK2410 target provides the packages needed to run eCos on - Samsung S3c2410x (ARM920T) based development boards (SMDK2410)." -} - -target innovator { - alias { "Innovator (ARM) board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_ARM9 - CYGPKG_HAL_ARM_ARM9_INNOVATOR - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_ARM_INNOVATOR - CYGPKG_DEVS_ETH_SMSC_LAN91CXX - CYGPKG_DEVS_ETH_ARM_INNOVATOR - } - description " - The Innovator HAL package provides the support needed to run - RedBoot on the ARM processor of the Innovator. - - NOTE: Full support for eCos is not provided yet. This HAL - contains only the minimum amount necessary to run RedBoot - on the Innovator. In particular, interrupts are not yet - supported. Watch this space for more details in the near - future." -} - -target assabet { - alias { "Intel StrongARM SA1110 board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_ASSABET - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_PCMCIA_ASSABET - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_ASSABET - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_SA11X0 - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - CYGPKG_DEVS_ETH_CF - CYGPKG_DEVS_ETH_NS_DP83902A - } - description " - The assabet target provides the packages needed to run - eCos on an Intel StrongARM SA1110 evaluation board." -} - -target cerf { - alias { "Intrinsyc SA1110 Cerf board" cerf_cube } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_CERF - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_PCMCIA_CERF - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_CERF - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_SA11X0 - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - CYGPKG_DEVS_ETH_CF - CYGPKG_DEVS_ETH_ARM_CERF - CYGPKG_DEVS_ETH_CL_CS8900A - } - description " - The cerf target provides the packages needed to run - eCos on an Intrinsyc SA1110 Cerf board." -} - -target cerfpda { - alias { "Intrinsyc SA1110 Cerfpda" cerf_pda } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_CERFPDA - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_CERFPDA - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_PCMCIA_CERFPDA - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_CERFPDA - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_SA11X0 - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - CYGPKG_DEVS_ETH_CF - CYGPKG_DEVS_ETH_ARM_CERFPDA - CYGPKG_DEVS_ETH_CL_CS8900A - } - description " - The cerfpda target provides the packages needed to run - eCos on an Intrinsyc SA1110 cerfpda." -} - -target ipaq { - alias { "Compaq iPAQ Pocket PC" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_IPAQ - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_PCMCIA_IPAQ - CYGPKG_DEVS_FLASH_IPAQ - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - CYGPKG_DEVS_TOUCH_IPAQ - CYGPKG_DEVS_KBD_IPAQ - CYGPKG_DEVS_ETH_CF - CYGPKG_DEVS_ETH_NS_DP83902A - } - description " - The IPAQ target provides the packages needed to run - eCos on an Intel StrongARM SA1110 Pocket PC (Compaq iPAQ)." -} - - -target nano { - alias { "nanoEngine StrongARM SA1110 board" nanoEngine } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_NANO - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_FLASH_NANO - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_ARM_NANO - CYGPKG_DEVS_ETH_INTEL_I82559 - } - description " - The nanoEngine target provides the packages needed to run - eCos on a Bright Star Engineering nanoEngine StrongARM SA1110 board." -} - -target flexanet { - alias { "Flexanet StrongARM SA1110 platform" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_FLEXANET - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_FLEXANET - CYGPKG_DEVS_ETH_SMSC_LAN91CXX - CYGPKG_DEVS_ETH_ARM_FLEXANET - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_SA11X0 - CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 - } - description " - The Flexanet target provides the packages needed to run - eCos on an SA1110 Flexanet board." -} - -target brutus { - alias { "Intel StrongARM SA1100 board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_BRUTUS - CYGPKG_IO_SERIAL_ARM_SA11X0 - } - description " - The brutus target provides the packages needed to run - eCos on an Intel StrongARM SA1100 evaluation board." -} - -target sa1100mm { - alias { "Intel StrongARM SA1100 Multimedia board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SA11X0 - CYGPKG_HAL_ARM_SA11X0_SA1100MM - CYGPKG_IO_SERIAL_ARM_SA11X0 - CYGPKG_DEVS_FLASH_SA1100MM - } - description " - The sa1100mm target provides the packages needed to run - eCos on an Intel StrongARM SA1100 Multimedia evaluation board." -} - -target iq80310 { - alias { "Intel IQ80310 XScale board" cyclone } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_IOP310 - CYGPKG_HAL_ARM_XSCALE_IQ80310 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_ARM_XSCALE_IQ80310 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 - CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 - } - description " - The iq80310 target provides the packages needed to run - eCos on a Cyclone IQ80310 board." -} - -target npwr { - alias { "NPWR Linux Engine (Intel XScale)" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_IOP310 - CYGPKG_HAL_ARM_XSCALE_NPWR - CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 - CYGPKG_DEVS_ETH_INTEL_I82544 - CYGPKG_DEVS_ETH_ARM_XSCALE_NPWR - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 - } - description " - The npwr target provides the packages needed to run - eCos on a NPWR Linux Engine." -} - -target iq80321 { - alias { "Intel XScale IQ80321 Board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_VERDE - CYGPKG_HAL_ARM_XSCALE_IQ80321 - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_ARM_IQ80321 - CYGPKG_DEVS_ETH_INTEL_I82544 - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_IQ80321 - CYGPKG_DEVS_ETH_ARM_IQ80321 - } - description " - The IQ80321 target provides the packages needed to run - eCos on an Intel XScale IQ80321 board." -} - -target ixdp425 { - alias { "IXDP425 board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_IXP425 - CYGPKG_HAL_ARM_XSCALE_IXDP425 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 - CYGPKG_DEVS_FLASH_STRATA_V2 - } - description " - The ixdp425 target provides the packages needed to run - eCos on an Intel network processor evaluation board." -} - -target XSEngine { - alias { "Exys XSEngine Board" xsengine } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_PXA2X0 - CYGPKG_HAL_ARM_XSCALE_XSENGINE - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_XSENGINE - CYGPKG_DEVS_ETH_SMSC_LAN91CXX - CYGPKG_DEVS_ETH_ARM_XSCALE_XSENGINE - } - description " - The XSEngine target provides the packages needed to run - eCos on an Exys XSEngine board." -} - -target grg { - alias { "Generic Residential Gateway" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_IXP425 - CYGPKG_HAL_ARM_XSCALE_GRG - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_ARM_GRG_I82559 - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_GRG - } - description " - The grg target provides the packages needed to run - eCos on an Intel Generic Residential Gateway board." -} - -target prpmc1100 { - alias { "Motorola PrPMC1100" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_IXP425 - CYGPKG_HAL_ARM_XSCALE_PRPMC1100 - CYGPKG_IO_PCI - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_PRPMC1100 - } - description " - The prpmc1100 target provides the packages needed to run - eCos on a Motorola PrPMC1100." -} - -target edb7xxx { - alias { "Cirrus Logic EDB7xxx development board" edb7211 eb7xxx eb7211 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_EDB7XXX - CYGPKG_DEVS_ETH_ARM_EDB7XXX - CYGPKG_DEVS_ETH_CL_CS8900A - CYGPKG_IO_SERIAL_ARM_EDB7XXX - CYGPKG_DEVS_FLASH_EDB7XXX - } - description " -The edb7xxx target provides the packages needed to run eCos on the Cirrus Logic EDB7xxx development boards." - } - -target pati { - alias { "MPL PATI" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC5xx - CYGPKG_HAL_POWERPC_PATI - CYGPKG_IO_SERIAL_POWERPC_MPC555 - CYGPKG_DEVICES_WALLCLOCK_MPC5xx - CYGPKG_DEVS_FLASH_PATI - CYGPKG_DEVS_FLASH_INTEL_28FXXX - } - description " - The pati target provides the packages needed to run - eCos on a PATI MPC555 PC/104+ board from MLP - elektronik." -} - -target cma230 { - alias { "Cogent CMA230/222 board" cma222 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_CMA230 - CYGPKG_IO_SERIAL_ARM_CMA230 - } - description " -The cma230 target provides the packages needed to run eCos on a Cogent -CMA230 (ARM7TDMI) or CMA222 (ARM710T) board." - } - - -target snds { - alias { "Samsung SNDS" SNDS snds100 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_SNDS - CYGPKG_DEVS_ETH_ARM_KS32C5000 - } - enable { CYGHWR_HAL_ARM_BIGENDIAN } - description " - The snds target provides the packages needed to run eCos on a - Samsung SNDS eval board." -} - -target aim711 { - alias { "ARM Industrial Module AIM 711" AIM711 } - packages { - CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_AIM711 - CYGPKG_DEVS_FLASH_SST_39VFXXX - CYGPKG_DEVS_FLASH_ARM_AIM711 - CYGPKG_DEVS_ETH_ARM_KS32C5000 - CYGPKG_IO_SERIAL_ARM_AIM711 - CYGPKG_IO_SERIAL_ARM_S3C4510 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVICES_WALLCLOCK_ARM_AIM711 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 - } - description " - The aim711 target provides the packages needed to run eCos on a - ARM Industrial Module AIM 711." - } - - -target mpc50 { - alias { "MICROPLEX Printer Controller 5.0" } - packages { - CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_PXA2X0 - CYGPKG_HAL_ARM_XSCALE_MPC50 - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_MPC50 - } - description " - MICROPLEX Printer Controller 5.0" -} - -# -------------------------------------------------------------------------- -# SH targets - -target sh7708 { - alias { "Hitachi EDK/SH7708 board" edk7708 } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH3 - CYGPKG_HAL_SH_EDK7708 - CYGPKG_DEVICES_WALLCLOCK_SH3 - CYGPKG_IO_SERIAL_SH_SCI - CYGPKG_IO_SERIAL_SH_EDK7708 - CYGPKG_DEVICES_WATCHDOG_SH_SH3 - CYGPKG_DEVS_FLASH_SH_EDK7708 - CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX - } - description " - The sh7708 target provides the packages needed to run - eCos on a Hitachi EDK/SH7708 board." -} -target cq7708 { - alias { "CqREEK SH7708 board" } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH3 - CYGPKG_HAL_SH_SH7708_CQ7708 - CYGPKG_IO_SERIAL_SH_SCI - CYGPKG_IO_SERIAL_SH_CQ7708 - } - description " - The cq7708 target provides the packages needed to run - eCos on a CqREEK SH7708 board." -} - -target cq7750 { - alias { "CqREEK SH7750 board" cqsh4 } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH4 - CYGPKG_HAL_SH_SH7750_CQ7750 - CYGPKG_DEVS_FLASH_CQ7750 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_SH_SCIF } - description " - The sh7750 target provides the packages needed to run - eCos on a CqREEK SH7750 board." -} - -target hs7729pci { - alias { "Hitachi HS7729PCI board" hs7729 } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH3 - CYGPKG_HAL_SH_SH7729_HS7729PCI - CYGPKG_DEVS_FLASH_SH_HS7729PCI - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_SH_HS7729PCI - CYGPKG_DEVS_ETH_VIA_RHINE - CYGPKG_DEVICES_WATCHDOG_SH_SH3 - CYGPKG_DEVICES_WALLCLOCK_SH_HS7729PCI - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - } - description " - The hs7729pci target provides the packages needed to run - eCos on a Hitachi HS7729PCI board." -} - -target se77x9 { - alias { "Hitachi SE77x9 board" } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH3 - CYGPKG_HAL_SH_SH77X9_SE77X9 - CYGPKG_DEVS_FLASH_SH_SE77X9 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_ETH_SH_SE77X9 - CYGPKG_IO_SERIAL_SH_SE77X9 - CYGPKG_IO_SERIAL_SH_SCIF - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVICES_WATCHDOG_SH_SH3 - } - description " - The se77x9 target provides the packages needed to run - eCos on a Hitachi Solution Engine 77x9 board." -} - -target se7751 { - alias { "Hitachi SE7751 board" } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH4 - CYGPKG_HAL_SH_SH7751_SE7751 - CYGPKG_IO_PCI - CYGPKG_DEVS_FLASH_SH_SE7751 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_SH_SCIF - CYGPKG_DEVICES_WATCHDOG_SH_SH3 - CYGPKG_DEVS_ETH_SH_SE7751 - CYGPKG_DEVS_ETH_AMD_PCNET - } - description " - The se7751 target provides the packages needed to run - eCos on a Hitachi Solution Engine 7751 board." -} - -target dreamcast { - alias { "SEGA Dreamcast" } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH4 - CYGPKG_HAL_SH_SH7750_DREAMCAST - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_RLTK_8139 - CYGPKG_DEVS_ETH_SH_DREAMCAST_RLTK8139 - CYGPKG_IO_SERIAL_SH_SCIF } - description " - The sh7750 target provides the packages needed to run - eCos on SEGA Dreamcast." -} - -target sh4_202_md { - alias { "SuperH SH4-202 MicroDev CPU board" } - packages { CYGPKG_HAL_SH - CYGPKG_HAL_SH_SH4 - CYGPKG_HAL_SH_SH4_202_MD - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_SH_MICRODEV - CYGPKG_IO_SERIAL_SH_SCIF - CYGPKG_IO_SERIAL_SH_SH4_202_MD - CYGPKG_DEVS_ETH_SH_MICRODEV - CYGPKG_DEVS_ETH_SMSC_LAN91CXX - } - description " - The sh4_202_md target provides the packages needed to run - eCos on a SuperH SH4-202 MicroDev CPU board." -} - -# -------------------------------------------------------------------------- -# i386 targets -target pc_i82559 { - alias { "i386 PC target with i82559 ethernet" pc } - packages { CYGPKG_HAL_I386 - CYGPKG_HAL_I386_GENERIC - CYGPKG_HAL_I386_PC - CYGPKG_HAL_I386_PCMB - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_I386_PC - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_I386_PC_I82559 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - CYGPKG_DEVICES_WALLCLOCK_I386_PC - } - description " - The pc_i82559 target provides the - packages needed to run eCos binaries on a standard i386 - PC motherboard with an Intel 82559 based ethernet interface." -} - -target pc_i82544 { - alias { "i386 PC target with i82544 gigabit ethernet" pc_giga } - packages { CYGPKG_HAL_I386 - CYGPKG_HAL_I386_GENERIC - CYGPKG_HAL_I386_PC - CYGPKG_HAL_I386_PCMB - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_I386_PC - CYGPKG_DEVS_ETH_INTEL_I82544 - CYGPKG_DEVS_ETH_I386_PC_I82544 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - CYGPKG_DEVICES_WALLCLOCK_I386_PC - } - description " - The pc_i82544 target provides the packages needed to run eCos binaries - on a standard i386 PC motherboard with an Intel 82543/82544 based - gigabit ethernet interface." -} - -target pc_vmWare { - alias { "i386 PC target (vmWare)" } - packages { CYGPKG_HAL_I386 - CYGPKG_HAL_I386_GENERIC - CYGPKG_HAL_I386_PC - CYGPKG_HAL_I386_PCMB - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_I386_PC - CYGPKG_DEVS_ETH_AMD_LANCEPCI - CYGPKG_DEVS_ETH_I386_PC_LANCEPCI - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - CYGPKG_DEVICES_WALLCLOCK_I386_PC - } - description " - The pc_vmWare target provides the packages needed to run eCos binaries - on a standard i386 PC under wmWare." -} - - -target pc_usb_d12 { - alias { "i386 PC target with SoRo PC/104 D12 USB Slave" } - packages { CYGPKG_HAL_I386 - CYGPKG_HAL_I386_GENERIC - CYGPKG_HAL_I386_PC - CYGPKG_HAL_I386_PCMB - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_I386_PC - CYGPKG_IO_USB - CYGPKG_IO_USB_SLAVE - CYGPKG_DEVS_USB_D12 - CYGPKG_DEVS_USB_I386_SOROD12 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - CYGPKG_DEVICES_WALLCLOCK_I386_PC - } - description " - Provides the packages needed to run eCos binaries - on a standard i386 PC motherboard with USB Slave support for the - Philips D12 chip." -} - -# -------------------------------------------------------------------------- -# Synthetic targets. -target linux { - alias { "Linux synthetic target" i386linux } - packages { CYGPKG_HAL_SYNTH - CYGPKG_HAL_SYNTH_I386 - CYGPKG_DEVS_FLASH_SYNTH_V2 - CYGPKG_DEVS_ETH_ECOSYNTH - CYGPKG_DEVS_WATCHDOG_SYNTH - CYGPKG_DEVS_WALLCLOCK_SYNTH - CYGPKG_DEVS_FRAMEBUF_SYNTH - CYGPKG_DEVS_ADC_SYNTH - CYGPKG_DEVS_NAND_SYNTH - } - description " - The linux target provides the - packages needed to run eCos binaries on top of the i386 - Linux kernel." -} - -# -------------------------------------------------------------------------- -# SPARClite targets - -target sleb { - alias { "Fujitsu MB86800-MA01 board" } - packages { CYGPKG_HAL_SPARCLITE - CYGPKG_HAL_SPARCLITE_SLEB - CYGPKG_IO_SERIAL_SPARCLITE_SLEB - } - description " - The sleb target provides the packages need to run eCos - on a Fujitsu MB86800-MA01 board." -} - -target sparclite_sim { - alias { "SPARClite simulator" sl_sim sparcl_sim } - packages { CYGPKG_HAL_SPARCLITE - CYGPKG_HAL_SPARCLITE_SIM - } - description " - The sparclite_sim target provides the packages need to run eCos - on the SPARClite simulator." -} - -# -------------------------------------------------------------------------- -# SPARC V7/V8 targets - -target sparc_erc32 { - alias { "ERC32 processor" erc32 } - packages { CYGPKG_HAL_SPARC - CYGPKG_HAL_SPARC_ERC32 - } - description " - The sparc_erc32 target provides the packages need to run eCos - on the ERC32 processor or TSIM/ERC32 simulator." -} - -target sparc_leon { - alias { "LEON processor" leon } - packages { CYGPKG_HAL_SPARC - CYGPKG_HAL_SPARC_LEON - } - description " - The sparc_leon target provides the packages need to run eCos - on the LEON processor or TSIM/LEON simulator." -} - -# -------------------------------------------------------------------------- -# PowerPC targets -target cme555 { - alias { "Axiom's CME555 board" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC5xx - CYGPKG_HAL_POWERPC_CME555 - CYGPKG_DEVS_FLASH_CME555 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_POWERPC_MPC555 - CYGPKG_DEVICES_WALLCLOCK_MPC5xx - } - description " - The cme555 target provides the packages needed to run - eCos on a CME555 MPC555 evaluation board from Axiom - Manufacturing." -} - -target ec555 { - alias { "Wuerz ec555" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC5xx - CYGPKG_HAL_POWERPC_EC555 - CYGPKG_DEVS_FLASH_EC555 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_POWERPC_MPC555 - CYGPKG_DEVICES_WALLCLOCK_MPC5xx - } - description " - The ec555 target provides the packages needed to run - eCos on a EC555 MPC555 development board from Wuerz - elektronik." -} - -target cma28x { - alias { "Cogent CMA286/287 board" cma286 cma287 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_COGENT - CYGPKG_IO_SERIAL_POWERPC_COGENT - } - description " - The cma28x target provides the packages needed to run - eCos on a Cogent CMA286 or CMA287 board." -} - -target fads { - alias { "Motorola MPC8xxFADS board" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_FADS - } - description " - The fads target provides the packages needed to run - eCos on a Motorola MPC8xxFADS board." -} - -target mbx { - alias { "Motorola MBX860/821 board" mbx860 mbx821 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_MBX - CYGPKG_HAL_QUICC - CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC - CYGPKG_DEVS_ETH_POWERPC_QUICC - CYGPKG_DEVS_ETH_POWERPC_MBX - CYGPKG_DEVS_FLASH_MBX - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " - The mbx target provides the packages needed to run - eCos on a Motorola MBX860 or MBX821 board." -} - -target ts6 { - alias { "Delphi TigerSHARC-6 board" Pleiades sixpack } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8260 - CYGPKG_HAL_POWERPC_TS6 - CYGPKG_DEVS_ETH_POWERPC_QUICC2 - CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC - CYGPKG_DEVS_FLASH_TS6 - CYGPKG_DEVS_FLASH_INTEL_28FXXX - } - description " - The ts6 target provides the packages needed to run - eCos on a Delphi TigerSHARC-6 board." -} - -target vads { - alias { "Motorola MPC8260 VADS board" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8260 - CYGPKG_HAL_POWERPC_VADS - CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC - CYGPKG_DEVS_ETH_POWERPC_QUICC2 - CYGPKG_DEVS_FLASH_VADS - CYGPKG_DEVS_FLASH_INTEL_28FXXX - } - description " - The vads target provides the packages needed to run - eCos on a Motorola MPC8260 VADS board." -} - -target viper { - alias { "A&M Viper PPC860 board" viper860 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_VIPER - CYGPKG_HAL_QUICC - CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC - CYGPKG_DEVS_ETH_POWERPC_FEC - CYGPKG_DEVS_ETH_POWERPC_VIPER - CYGPKG_DEVS_FLASH_VIPER - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - } - description " - The viper target provides the packages needed to run - eCos on a A&M Viper PPC860 board." -} - -target psim { - alias { "PowerPC simulator" ppc_sim powerpc_sim } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_PPC60x - CYGPKG_HAL_POWERPC_SIM - } - description " - The psim target provides the packages needed to run - eCos in the PSIM simulator." -} - -##------------------------------------------------------------------------------------------- -## Cogent CSB281 (PowerPC 8245) packages -## -package CYGPKG_HAL_POWERPC_CSB281 { - alias { "Cogent PowerPC 8245 board" hal_powerpc_csb281 } - directory hal/powerpc/csb281 - script hal_powerpc_csb281.cdl - hardware - description " - The CSB281 HAL package provides the support needed to run - eCos on a Cogent PowerPC 8245 board." -} - -package CYGPKG_DEVS_FLASH_CSB281 { - alias { "FLASH memory support for Cogent PowerPC 8245 board" flash_csb281 } - directory devs/flash/powerpc/csb281 - script flash_csb281.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Cogent CSB281 (PowerPC 8245) board." -} - -package CYGPKG_DEVS_ETH_CSB281 { - alias { "Cogent CSB281 (PowerPC 8245) 82559 ethernet driver" - devs_eth_csb281 } - hardware - directory devs/eth/powerpc/csb281 - script csb281_eth_drivers.cdl - description "Ethernet driver for Cogent CSB281 (PowerPC 8245) - with Intel i82559 ethernet interfaces." -} - -target csb281 { - alias { "Cogent PowerPC 8245" cogent8245 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_PPC60x - CYGPKG_HAL_POWERPC_CSB281 - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_CSB281 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_CSB281 - CYGPKG_DEVS_ETH_INTEL_I82559 - } - description " - The csb281 target provides the packages needed to run - eCos on the Cogent CSB281 (8245) board." -} -##------------------------------------------------------------------------------------------- - -# -------------------------------------------------------------------------- -# MIPS targets - -target jmr3904 { - alias { "Toshiba JMR-TX3904 board" jmr tx39 } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_TX39 - CYGPKG_HAL_MIPS_TX39_JMR3904 - CYGPKG_IO_SERIAL_TX39_JMR3904 - } - description " - The jmr3904 target provides the packages needed to run - eCos on a Toshiba JMR-TX3904 board. This target can also - be used when running in the full simulator, since the simulator provides an - accurate simulation of the hardware including I/O devices. - To use the simulator in this mode the command - `target sim --board=jmr3904' should be used from inside gdb." -} - -target atlas_mips32_4kc { - alias { "MIPS Atlas board with Mips32 4Kc processor" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_MIPS32 - CYGPKG_HAL_MIPS_ATLAS - CYGPKG_IO_SERIAL_MIPS_ATLAS - CYGPKG_DEVS_FLASH_ATLAS - CYGPKG_DEVS_ETH_MIPS_ATLAS - CYGPKG_IO_PCI - } - set_value CYGHWR_HAL_MIPS_MIPS32_CORE "4Kc" - description " - The atlas_mips32_4Kc target provides the packages needed to run - eCos on a MIPS Atlas board with a Mips32 4Kc processor." -} - -target atlas_mips64_5kc { - alias { "MIPS Atlas board with Mips64 5Kc processor" ruby } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_MIPS64 - CYGPKG_HAL_MIPS_ATLAS - CYGPKG_IO_SERIAL_MIPS_ATLAS - CYGPKG_DEVS_FLASH_ATLAS - CYGPKG_DEVS_ETH_MIPS_ATLAS - } - set_value CYGHWR_HAL_MIPS_MIPS64_CORE "5K" - description " - The atlas_mips32_5Kc target provides the packages needed to run - eCos on a MIPS Atlas board with a Mips64 5Kc processor." -} -target malta_mips32_4kc { - alias { "MIPS Malta board with Mips32 4Kc processor" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_MIPS32 - CYGPKG_HAL_MIPS_MALTA - CYGPKG_DEVS_FLASH_INTEL_28FXXX - CYGPKG_DEVS_FLASH_MALTA - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_AMD_PCNET - CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA - } - set_value CYGHWR_HAL_MIPS_MIPS32_CORE "4Kc" - description " - The malta_mips32_4Kc target provides the packages needed to run - eCos on a MIPS Malta board with a Mips32 4Kc processor." -} - -target malta_mips64_5kc { - alias { "MIPS Malta board with Mips64 5Kc processor" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_MIPS64 - CYGPKG_HAL_MIPS_MALTA - CYGPKG_DEVS_FLASH_INTEL_28FXXX - CYGPKG_DEVS_FLASH_MALTA - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_AMD_PCNET - CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA - } - set_value CYGHWR_HAL_MIPS_MIPS64_CORE "5K" - description " - The malta_mips64_5Kc target provides the packages needed to run - eCos on a MIPS Malta board with a Mips64 5Kc processor." -} -target tx39_sim { - alias { "TX39 minimal simulator" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_TX39 - CYGPKG_HAL_MIPS_SIM - } - description " - The tx39_sim target provides the packages needed to run - eCos in the TX39 minimal simulator. To use this minimal - simulator the command `target sim --board=jmr3904pal' - should be used from inside gdb. It is not possible to - use any of the eCos device drivers when the simulator - is running in this mode." -} -target ref4955 { - alias { "Toshiba TX4955 reference platform" tx49 } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_TX49 - CYGPKG_HAL_MIPS_TX49_REF4955 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_MIPS_REF4955 - CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 - } - description " - The ref4955 target provides the packages needed to run - eCos on a Toshiba TX4955 reference platform." -} - -target ocelot { - alias { "PMC-Sierra Ocelot platform" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_RM7000 - CYGPKG_HAL_MIPS_RM7000_OCELOT - CYGPKG_IO_PCI - CYGPKG_DEVS_FLASH_MIPS_OCELOT - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_MIPS_RM7000_OCELOT - } - description " - The ocelot target provides the packages needed to run - eCos on a PMC-Sierra Ocelot Hot-Swap Computer." -} - -target vrc4373 { - alias { "NEC VRC4373 board" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_VR4300 - CYGPKG_HAL_MIPS_VR4300_VRC4373 - CYGPKG_HAL_MIPS_VR4300_VRC437X - CYGPKG_IO_SERIAL_MIPS_VRC437X - CYGPKG_DEVS_FLASH_MIPS_VRC437X - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_PCI - } - description " - The vrc4373 target provides the packages needed to run - eCos on an NEC VRC4373 board." -} -target vrc4375 { - alias { "NEC VRC4375 board" } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_VR4300 - CYGPKG_HAL_MIPS_VR4300_VRC4375 - CYGPKG_HAL_MIPS_VR4300_VRC437X - CYGPKG_IO_SERIAL_MIPS_VRC437X - CYGPKG_DEVS_FLASH_MIPS_VRC437X - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_INTEL_I21143 - CYGPKG_DEVS_ETH_MIPS_VRC4375 - } - description " - The vrc4375 target provides the packages needed to run - eCos on an NEC VRC4375 board." -} - -target refidt334 { - alias { "MIPS IDT79S334A reference platform" idt32334 } - packages { CYGPKG_HAL_MIPS - CYGPKG_HAL_MIPS_IDT32334 - CYGPKG_HAL_MIPS_IDT32334_REFIDT334 - CYGPKG_IO_PCI - CYGPKG_DEVS_ETH_INTEL_I82559 - CYGPKG_DEVS_ETH_MIPS_REFIDT334 - CYGPKG_DEVS_FLASH_MIPS_REFIDT334 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_IO_SERIAL_MIPS_IDT79S334A - } - description " - The refidt334 target provides the packages needed to run - eCos on a MIPS IDT IDT79S334A reference board." -} - -# -------------------------------------------------------------------------- -# MN10300 targets - -target am31_sim { - alias { "MN10300 AM31 minimal simulator" } - packages { CYGPKG_HAL_MN10300 - CYGPKG_HAL_MN10300_AM31 - CYGPKG_HAL_MN10300_AM31_SIM - } - description " - The am31_sim target provides the packages need to run - eCos in the MN10300 minimal simulator. It is not possible to - use any of the eCos device drivers when the simulator - is running in this mode." -} - -target stdeval1 { - alias { "Matsushita stdeval1 board" } - packages { CYGPKG_HAL_MN10300 - CYGPKG_HAL_MN10300_AM31_STDEVAL1 - CYGPKG_HAL_MN10300_AM31 - CYGPKG_IO_SERIAL_MN10300 - CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 - } - description " - The stdeval1 target provides the packages needed to run - eCos on a Matsushita stdeval1 board. This target can also - be used when running in the full simulator, since the simulator provides an - accurate simulation of the hardware including I/O devices." -} -target stb { - alias { "Matsushita STB board" } - packages { CYGPKG_HAL_MN10300 - CYGPKG_HAL_MN10300_AM33_STB - CYGPKG_HAL_MN10300_AM33 - CYGPKG_IO_SERIAL_MN10300 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_MN10300_STB - CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 - } - description " - The stb target provides the packages needed to run - eCos on a Matsushita STB board." -} - -target asb { - alias { "Matsushita ASB2303 board" } - packages { CYGPKG_HAL_MN10300 - CYGPKG_HAL_MN10300_AM33_ASB - CYGPKG_HAL_MN10300_AM33 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_MN10300_ASB2303 - } - description " - The asb target provides the packages needed to run - eCos on a Matsushita ASB2303 board." -} - -target asb2305 { - alias { "Matsushita ASB2305 board" } - packages { CYGPKG_HAL_MN10300 - CYGPKG_HAL_MN10300_AM33_ASB2305 - CYGPKG_HAL_MN10300_AM33 - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_FLASH_MN10300_ASB2305 - } - description " - The asb2305 target provides the packages needed to run - eCos on a Matsushita ASB2305 board." -} - -# -------------------------------------------------------------------------- -# NEC targets - -target ceb_v850 { - alias { "Cosmo CEB-V850 board" CEB ceb_v850_sa1 } - packages { CYGPKG_HAL_V85X - CYGPKG_HAL_V85X_V850 - CYGPKG_HAL_V85X_V850_CEB - CYGPKG_IO_SERIAL_V85X_V850 - } - description " -The ceb_v850 target provides the packages needed to run eCos on a -Cosmo CEB-V850 evaluation board fitted with a NEC V850/SA1 or NEC V850/SB1." -} - -# -------------------------------------------------------------------------- -# m68k targets - -target m5272c3 { - alias { "Freescale m5272c3 evaluation board" } - packages { - CYGPKG_HAL_M68K - CYGPKG_HAL_M68K_MCFxxxx - CYGPKG_HAL_M68K_MCF5272 - CYGPKG_HAL_M68K_M5272C3 - CYGPKG_DEVS_ETH_MCFxxxx - CYGPKG_DEVS_SERIAL_MCFxxxx - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 - } - - description "The m5272c3 target provides the packages needed to run - eCos on the Freescale m5272c3 evaluation board." -} - -# -------------------------------------------------------------------------- -# H8 targets - -target h8300h_sim { - alias { "H8/300H minimal simulator" } - packages { CYGPKG_HAL_H8300 - CYGPKG_HAL_H8300_H8300H - CYGPKG_HAL_H8300_H8300H_SIM - CYGPKG_IO_SERIAL_H8300_SCI - } - description " - The h8300h_sim target provides the packages need to run - eCos in the H8/300H minimal simulator. It is not possible to - use any of the eCos device drivers when the simulator - is running in this mode." -} - -target h8s_sim { - alias { "H8S minimal simulator" } - packages { CYGPKG_HAL_H8300 - CYGPKG_HAL_H8300_H8S - CYGPKG_HAL_H8300_H8S_SIM - CYGPKG_IO_SERIAL_H8300_SCI - } - description " - The h8300h_sim target provides the packages need to run - eCos in the H8/300H minimal simulator. It is not possible to - use any of the eCos device drivers when the simulator - is running in this mode." -} - -target aki3068net { - alias { "Akizuki H8/3068 Network board" } - packages { CYGPKG_HAL_H8300 - CYGPKG_HAL_H8300_H8300H - CYGPKG_HAL_H8300_H8300H_AKI3068NET - CYGPKG_IO_SERIAL_H8300_SCI - CYGPKG_DEVS_ETH_H8300_AKI3068NET - CYGPKG_DEVICES_WATCHDOG_H8300_H8300H - } - description " - The aki3068net target provides the packages need to run - eCos in the Akizuki H8/3068 Network board." -} - -target h8max { - alias { "H8MAX" } - packages { CYGPKG_HAL_H8300 - CYGPKG_HAL_H8300_H8300H - CYGPKG_HAL_H8300_H8300H_H8MAX - CYGPKG_IO_SERIAL_H8300_SCI - CYGPKG_DEVS_ETH_H8300_H8MAX - CYGPKG_DEVICES_WATCHDOG_H8300_H8300H - } - description " - The h8max target provides the packages need to run - eCos in the strawberry-linux.com H8MAX board." -} - -target edosk2674 { - alias { "EDOSK-2674" } - packages { CYGPKG_HAL_H8300 - CYGPKG_HAL_H8300_H8S - CYGPKG_HAL_H8300_H8S_EDOSK2674 - CYGPKG_IO_SERIAL_H8300_SCI - CYGPKG_DEVS_ETH_H8300_EDOSK2674 - } - description " - The h8max target provides the packages need to run - eCos in the Hitachi Micro System Europe EDOSK-2674 Evalution board." -} - -# -------------------------------------------------------------------------- -# CalmRISC16 targets - -target calm16_ceb { - alias { "CalmRISC16 Core Eval Board" } - packages { CYGPKG_HAL_CALM16 - CYGPKG_HAL_CALM16_CORE - CYGPKG_HAL_CALM16_CEB - } - description " - The calm16_ceb target provides the packages needed to run - eCos on the CalmRISC16 Core Evaluation Board." -} -# -------------------------------------------------------------------------- -# CalmRISC32 targets - -target calm32_ceb { - alias { "CalmRISC32 Core Eval Board" } - packages { CYGPKG_HAL_CALM32 - CYGPKG_HAL_CALM32_CORE - CYGPKG_HAL_CALM32_CEB - } - description " - The calm32_ceb target provides the packages needed to run - eCos on the CalmRISC32 Core Evaluation Board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_HAL_POWERPC_TS1000 { - alias { "Allied Telesyn TS1000 board" hal_powerpc_ts1000 } - directory hal/powerpc/ts1000 - script hal_powerpc_ts1000.cdl - hardware - description " - The TS1000 HAL package provides the support needed to run - eCos on a Allied Telesyn TS1000 board equipped with a PowerPC processor." -} - -package CYGPKG_DEVS_FLASH_POWERPC_TS1000 { - alias { "FLASH memory support for Allied Telesyn TS1000 (PPC855) board" flash_ts1000 } - directory devs/flash/powerpc/ts1000 - script flash_ts1000.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the Allied Telesyn TS1000 (PPC855) platform." -} - -package CYGPKG_DEVS_ETH_POWERPC_TS1000 { - alias { "Allied Telesyn TS1000 ethernet driver" ts1000_eth_driver } - hardware - directory devs/eth/powerpc/ts1000 - script ts1000_eth_drivers.cdl - description "Ethernet driver specifics for Allied Telesyn TS1000 (MPC855T) based boards." -} - -target ts1000 { - alias { "Allied Telesyn TS1000 board" ts1000_855 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_TS1000 - CYGPKG_HAL_QUICC - CYGPKG_DEVS_FLASH_POWERPC_TS1000 - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_ETH_POWERPC_FEC - CYGPKG_DEVS_ETH_POWERPC_TS1000 - CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC - } - description " - The ts1000 target provides the packages needed to run - eCos on a Allied Telesyn TS1000 (PPC855T) board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_DEVS_FLASH_UE250 { - alias { "FLASH memory support for uE250" flash_uE250 } - directory devs/flash/arm/uE250 - script flash_uE250.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the uE250 platform." -} - -package CYGPKG_DEVS_ETH_ARM_XSCALE_UE250 { - alias { "NMI uE250 PCI ethernet driver" devs_eth_arm_ue250 } - hardware - directory devs/eth/arm/uE250 - script uE250_eth_drivers.cdl - description "Ethernet driver for NMI uE250 via PCI card." -} - -package CYGPKG_HAL_ARM_XSCALE_UE250 { - alias { "NMI uEngine uE250" hal_arm_xscale_uE250 } - directory hal/arm/xscale/uE250 - script hal_arm_xscale_uE250.cdl - hardware - description " - The UE250 HAL package provides the support needed to run - eCos on an NMI uEngine u250 board." -} - -target uE250 { - alias { "NMI uEngine uE250 Board" ue250 } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_PXA2X0 - CYGPKG_HAL_ARM_XSCALE_UE250 - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_UE250 - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_ETH_ARM_XSCALE_UE250 - } - description " - The uE250 target provides the packages needed to run - eCos on an NMI uEngine uE250 board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_DEVS_FLASH_PICASSO { - alias { "FLASH memory support for picasso" flash_picasso } - directory devs/flash/arm/picasso - script flash_picasso.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the picasso platform." -} - -package CYGPKG_DEVS_ETH_ARM_XSCALE_PICASSO { - alias { "NMI picasso PCI ethernet driver" devs_eth_arm_picasso } - hardware - directory devs/eth/arm/picasso - script picasso_eth_drivers.cdl - description "Ethernet driver for NMI picasso via PCI card." -} - -package CYGPKG_HAL_ARM_XSCALE_PICASSO { - alias { "NMI uEngine picasso" hal_arm_xscale_picasso } - directory hal/arm/xscale/picasso - script hal_arm_xscale_picasso.cdl - hardware - description " - The PICASSO HAL package provides the support needed to run - eCos on an NMI uEngine u250 board." -} - -target picasso { - alias { "NMI uEngine picasso Board" } - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_XSCALE_CORE - CYGPKG_HAL_ARM_XSCALE_PXA2X0 - CYGPKG_HAL_ARM_XSCALE_PICASSO - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_DEVS_FLASH_STRATA - CYGPKG_DEVS_FLASH_PICASSO - CYGPKG_DEVS_ETH_NS_DP83902A - CYGPKG_DEVS_ETH_ARM_XSCALE_PICASSO - } - description " - The picasso target provides the packages needed to run - eCos on an NMI uEngine picasso board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_HAL_POWERPC_ADDER { - alias { "A&M Adder PPC85x board" hal_powerpc_adder powerpc_adder_hal } - directory hal/powerpc/adder - script hal_powerpc_adder.cdl - hardware - description " - The ADDER HAL package provides the support needed to run - eCos on a A&M ADDER board equipped with a PowerPC processor." -} - -package CYGPKG_DEVS_FLASH_POWERPC_ADDER { - alias { "FLASH memory support for A&M Adder PowerPC/85x" flash_adder } - directory devs/flash/powerpc/adder - script flash_adder.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the A&M PowerPC/8xx ADDER platforms." -} - -package CYGPKG_DEVS_ETH_POWERPC_ADDER { - alias { "A&M Adder ethernet driver" adder_eth_driver } - hardware - directory devs/eth/powerpc/adder - script adder_eth_drivers.cdl - description "Ethernet driver specifics for A&M Adder (MPC85x) based boards." -} - -package CYGPKG_DEVS_ETH_POWERPC_ADDERII { - alias { "A&M AdderII ethernet driver" adderII_eth_driver } - hardware - directory devs/eth/powerpc/adderII - script adderII_eth_drivers.cdl - description "Ethernet driver specifics for A&M AdderII (MPC852T) based boards." -} - -target adder { - alias { "A&M Adder PPC850 board" adder850 } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_ADDER - CYGPKG_HAL_QUICC - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 - CYGPKG_DEVS_ETH_POWERPC_QUICC - CYGPKG_DEVS_ETH_POWERPC_ADDER - CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC - } - enable { CYGHWR_HAL_POWERPC_ADDER_I } - description " - The adder target provides the packages needed to run - eCos on a A&M Adder PPC850 board." -} - -target adderII { - alias { "A&M Adder PPC852T board" adder852T } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8xx - CYGPKG_HAL_POWERPC_ADDER - CYGPKG_HAL_QUICC - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 - CYGPKG_DEVS_ETH_POWERPC_FEC - CYGPKG_DEVS_ETH_POWERPC_ADDERII - CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC - } - enable { CYGHWR_HAL_POWERPC_ADDER_II } - description " - The adderII target provides the packages needed to run - eCos on a A&M Adder PPC852T board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_HAL_POWERPC_RATTLER { - alias { "A&M Rattler MPC8250 board" hal_powerpc_rattler powerpc_rattler_hal } - directory hal/powerpc/rattler - script hal_powerpc_rattler.cdl - hardware - description " - The RATTLER HAL package provides the support needed to run - eCos on a A&M RATTLER board equipped with a PowerPC processor." -} - -package CYGPKG_DEVS_ETH_POWERPC_RATTLER { - alias { "A&M Rattler ethernet driver" rattler_eth_driver } - hardware - directory devs/eth/powerpc/rattler - script rattler_eth_drivers.cdl - description "Ethernet driver specifics for A&M Rattler (MPC8250) based boards." -} - -package CYGPKG_DEVS_FLASH_POWERPC_RATTLER { - alias { "FLASH memory support for A&M Rattler (MPC8250)" flash_rattler } - directory devs/flash/powerpc/rattler - script flash_rattler.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the A&M Rattler (MPC8250) platforms." -} - -target rattler { - alias { "A&M Rattler (8250) board" } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_MPC8XXX - CYGPKG_HAL_POWERPC_RATTLER - CYGPKG_DEVS_FLASH_POWERPC_RATTLER - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX - CYGPKG_DEVS_ETH_POWERPC_FCC - CYGPKG_DEVS_ETH_POWERPC_RATTLER - CYGPKG_DEVS_ETH_PHY - CYGPKG_IO_SERIAL_POWERPC_MPC8XXX - } - description " - The rattler target provides the packages needed to run - eCos on an Analogue & Micro Rattler (MPC8250) board." -} - -##------------------------------------------------------------------------------------------- -## TAMS MOAB (PowerPC 405GPr) packages -## -package CYGPKG_HAL_POWERPC_MOAB { - alias { "TAMS PowerPC 405GP board" hal_powerpc_moab } - directory hal/powerpc/moab - script hal_powerpc_moab.cdl - hardware - description " - The MOAB HAL package provides the support needed to run - eCos on a TAMS PowerPC 405GP board." -} - -package CYGPKG_DEVS_FLASH_POWERPC_MOAB { - alias { "FLASH memory support for MOAB" flash_moab } - directory devs/flash/powerpc/moab - script flash_moab.cdl - hardware - description " - This package contains hardware support for both the boot FLASH - and NAND (main) memory on the MOAB platform." -} - -package CYGPKG_DEVS_ETH_POWERPC_MOAB { - alias { "TAMS PowerPC 405GP ethernet support" moab_eth_driver } - hardware - directory devs/eth/powerpc/moab - script moab_eth_drivers.cdl - description "Ethernet driver specifics for TAMS MOAB (PPC405GP) based boards." -} - -package CYGPKG_DEVICES_WALLCLOCK_POWERPC_MOAB { - alias { "MOAB RTC device" devs_wallclock_moab_ds1307 moab_rtc } - hardware - directory devs/wallclock/powerpc/moab - script moab_wallclock_drivers.cdl - description " - RTC driver for MOAB (PowerPC PPC405GPr) using a - Dallas DS1307 RTC." -} - -target moab { - alias { "TAMS PowerPC 405GPr" moab405GPr } - packages { CYGPKG_HAL_POWERPC - CYGPKG_HAL_POWERPC_PPC40x - CYGPKG_HAL_POWERPC_MOAB - CYGPKG_DEVS_FLASH_POWERPC_MOAB - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_DEVS_FLASH_TOSHIBA_TC58XXX - CYGPKG_DEVS_ETH_POWERPC_MOAB - CYGPKG_DEVS_ETH_POWERPC_PPC405 - CYGPKG_DEVS_ETH_NS_DP83816 - CYGPKG_DEVS_ETH_PHY - CYGPKG_IO_PCI - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 - CYGPKG_DEVICES_WALLCLOCK_POWERPC_MOAB - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_POWERPC_PPC405 - } - description " - The moab target provides the packages needed to run - eCos on the TAMS MOAB (405GPr) board." -} -##------------------------------------------------------------------------------------------- - -# -------------------------------------------------------------------------- - -# Realtek 8139 (PCI) Ethernet driver -package CYGPKG_DEVS_ETH_RLTK_8139 { - alias { "Realtek 8139 ethernet driver" rltk8139_eth_driver } - hardware - directory devs/eth/rltk/8139 - script rltk_8139_eth_drivers.cdl - description "Ethernet driver for Realtek 8139 (PCI) card." -} - -package CYGPKG_DEVS_ETH_I386_PC_RLTK8139 { - alias { "Intel PC with Realtek 8139 ethernet driver" pc_rltk8139_eth_driver } - hardware - directory devs/eth/i386/pc/rltk8139 - script i386_pc_rltk8139_eth_drivers.cdl - description "Intel PC using Realtek 8139 (PCI) card." -} - -package CYGPKG_DEVS_ETH_SH_DREAMCAST_RLTK8139 { - alias { "SEGA Dreamcast with BroadBandAdapter driver" dreamcast_rltk8139_eth_driver } - hardware - directory devs/eth/sh/dreamcast - script sh_dreamcast_rltk8139_eth_drivers.cdl - description "SEGA Dreamcast with BroadBandAdapter." -} - -target pc_rltk8139 { - alias { "i386 PC target with RTL8139 ethernet" } - packages { CYGPKG_HAL_I386 - CYGPKG_HAL_I386_GENERIC - CYGPKG_HAL_I386_PC - CYGPKG_HAL_I386_PCMB - CYGPKG_IO_PCI - CYGPKG_IO_SERIAL_GENERIC_16X5X - CYGPKG_IO_SERIAL_I386_PC - CYGPKG_DEVS_ETH_RLTK_8139 - CYGPKG_DEVS_ETH_I386_PC_RLTK8139 - CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 - CYGPKG_DEVICES_WALLCLOCK_I386_PC - } - description " - The pc_rltk8139 target provides the packages needed to run eCos binaries - on a standard i386 PC motherboard, using a Realtek 8139 network card." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_HAL_ARM_GPS4020 { - alias { "GPS4020" hal_gps4020 } - directory hal/arm/gps4020 - script hal_arm_gps4020.cdl - hardware - description " - The GPS4020 HAL package provides the support needed to run - eCos on a GPS 4020 board using the Firefly MF1 (ARM) processor." -} - -package CYGPKG_DEVS_FLASH_GPS4020 { - alias { "FLASH memory support for GPS4020" flash_gps4020 } - directory devs/flash/arm/gps4020 - script flash_gps4020.cdl - hardware - description " - This package contains hardware support for FLASH memory - on the GPS4020 platform." -} - -package CYGPKG_IO_SERIAL_ARM_GPS4020 { - alias { "GPS4020 serial device drivers" - devs_serial_arm_gps4020 gps4020_serial_driver } - hardware - directory devs/serial/arm/gps4020 - script ser_arm_gps4020.cdl - description "GPS4020 serial device drivers" -} - -target gps4020 { - alias { "GPS 4020" gps_4020 gps} - packages { CYGPKG_HAL_ARM - CYGPKG_HAL_ARM_GPS4020 - CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX - CYGPKG_DEVS_FLASH_GPS4020 - CYGPKG_IO_SERIAL_ARM_GPS4020 - } - description " - The gps4020 target provides the packages needed to run - eCos on a GPS-4020 board." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_VNC_SERVER { - alias { "VNC server" vnc_server } - directory net/vnc_server - script vnc-server.cdl - description "VNC server." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_DEVS_DISK_V85X_EDB_V850 { - alias { "Elatec v850 development board disk driver" edb_v850_disk } - directory devs/disk/v85x/edb_v850 - script v85x_edb_v850_disk.cdl - hardware - description "Disk driver for the Elatec v850 development board." -} - -package CYGPKG_DEVS_DISK_ECOSYNTH { - alias { "Synthetic target disk driver" ecosynthdisk ecosynth_disk_driver } - directory devs/disk/synth - script synthdisk.cdl - hardware - description "Disk driver for the synthetic target." -} - -package CYGPKG_DEVS_DISK_IDE { - alias { "Generic IDE disk driver" ide_disk } - directory devs/disk/ide - script ide_disk.cdl - description "Disk driver for generic IDE interface." -} - -package CYGPKG_DEVS_DISK_MMC { - alias { "Disk driver for MMC cards" mmcdisk mmc_disk_driver } - directory devs/disk/generic/mmc - script devs_disk_mmc.cdl - hardware - description "Disk driver for MMC cards" -} - -package CYGPKG_IO_DISK { - alias { "Disk device drivers" disk io_disk } - directory io/disk - script io_disk.cdl - description " - This package contains drivers for basic I/O services on - disk devices." -} - -package CYGPKG_BLOCK_LIB { - alias { "Block cache and access library" blib block_lib } - directory services/blib - script blib.cdl - description " - This package contains the block cache and access library." -} - -package CYGPKG_FS_FAT { - alias { "FAT Filesystem" fatfs fat_fs fs_fat } - directory fs/fat - script fatfs.cdl - description " - This package contains a FAT filesystem implementation." -} - - -# -------------------------------------------------------------------------- - -package CYGPKG_IO_FRAMEBUF { - alias { "Frame buffer support" framebuf framebuffer io_framebuf framebuf_io } - directory io/framebuf - script framebuf.cdl - description " - The generic frame buffer package provides an API for accessing - frame buffer devices. It also provides support for writing - the corresponding the device drivers." -} - -package CYGPKG_DEVS_FRAMEBUF_SYNTH { - alias { "Synthetic target framebuffer device driver" devs_framebuf_synth synth_framebuf_driver } - hardware - directory devs/framebuf/synth - script framebuf_synth.cdl - - description " - This package provides a framebuffer device driver for the - synthetic target." -} - -# -------------------------------------------------------------------------- - -package CYGPKG_NET_LWIP { - alias {"lwIP" lwip} - directory net/lwip_tcpip - script cdl/lwip_net.cdl - description "Lightweight TCP/IP stack: lwIP" -} - -package CYGPKG_ATHTTPD { - alias { "ATHTTP server" athttpd } - directory net/athttpd - script httpd.cdl - description "Another Tiny HTTP server." -} - - -# ========================================================================== -# Cortex-M architecture support - -package CYGPKG_HAL_CORTEXM { - alias { "Cortex-M common HAL" hal_cortexm cortexm_hal cortexm_arch_hal } - directory hal/cortexm/arch - script hal_cortexm.cdl - hardware - description " - The CortexM architecture HAL package provides generic support for the ARM - Cortex-M processor architecture. It is also necessary to select - variant and platform HAL packages." -} - -package CYGPKG_HAL_CORTEXM_STM32 { - alias { "ST STM32 variant HAL" hal_cortexm_stm32 } - directory hal/cortexm/stm32/var - script hal_cortexm_stm32.cdl - hardware - description " - The STM32 HAL package provides the support needed to run - eCos and RedBoot on targets based on the ST STM32 - family of microcontrollers." -} - -package CYGPKG_HAL_CORTEXM_STM32_STM3210E_EVAL { - alias { "ST STM3210E EVAL HAL" hal_cortexm_stm3210e_eval } - directory hal/cortexm/stm32/stm3210e_eval - script hal_cortexm_stm32_stm3210e_eval.cdl - hardware - description " - The stm3210e_eval HAL package provides the support needed to run - eCos on the ST STM3210E EVAL board." -} - -package CYGPKG_IO_SERIAL_CORTEXM_STM32 { - alias { "ST STM32 serial device drivers" - devs_serial_cortexm_stm32 stm32_serial_driver } - hardware - directory devs/serial/cortexm/stm32 - script ser_cortexm_stm32.cdl - description "ST STM32 serial device driver" -} - -package CYGPKG_DEVS_FLASH_STM32 { - alias { "Internal FLASH memory support for ST STM32" flash_stm32 } - directory devs/flash/cortexm/stm32 - script flash_stm32.cdl - hardware - description " - This package contains hardware support for the internal FLASH memory - on the ST STM32 devices." -} - -package CYGPKG_DEVS_SPI_CORTEXM_STM32 { - alias { "STM32 SPI driver" } - hardware - directory devs/spi/cortexm/stm32 - script spi_stm32.cdl - description "This package provides a driver for the SPI interfaces found on - the ST STM32 microcontroller family." -} - -package CYGPKG_DEVS_WALLCLOCK_STM32 { - alias { "ST STM32 RTC wallclock support" wallclock_stm32 } - directory devs/wallclock/cortexm/stm32 - script wallclock_stm32.cdl - hardware - description " - Wallclock support for on-chip RTC on STM32 devices.driver for the - STM32 controller and compatibles" -} - -package CYGPKG_DEVS_ADC_CORTEXM_STM32 { - alias { "STM32 ADC driver" adc_stm32 } - hardware - directory devs/adc/cortexm/stm32 - script adc_stm32.cdl - description " - This package provides a driver for the ADC interfaces found on the - ST STM32 microcontroller family." -} - -target stm3210e_eval { - alias { "ST STM3210E EVAL board" stm3210e } - packages { CYGPKG_HAL_CORTEXM - CYGPKG_HAL_CORTEXM_STM32 - CYGPKG_HAL_CORTEXM_STM32_STM3210E_EVAL - CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 - CYGPKG_DEVS_FLASH_STM32 - CYGPKG_DEVS_FLASH_SPI_M25PXX - CYGPKG_IO_SERIAL_CORTEXM_STM32 - CYGPKG_DEVS_WALLCLOCK_STM32 - CYGPKG_IO_SPI - CYGPKG_DEVS_SPI_CORTEXM_STM32 - CYGPKG_DEVS_ADC_CORTEXM_STM32 - CYGPKG_DEVS_NAND_ST_NANDXXXX3A - } - description "The stm3210e_eval target provides the packages needed - to run eCos on the STM3210E EVAL board." -} - -# ========================================================================== -# NAND packages - -package CYGPKG_IO_NAND { - alias { "NAND flash memory support" nand io_nand } - directory io/nand - script nand.cdl - description " - This package provides the NAND flash access library. - Further platform-specific package(s) are required to implement - support for the specific devices present." -} - -package CYGPKG_DEVS_NAND_SAMSUNG_K9 { - alias { "Samsung K9 NAND chip family support" nand_samsung_k9 } - directory devs/nand/samsung_k9 - script k9fxx08x0a.cdl - description " - This package provides support for the Samsung K9Fxx08x0A family of NAND - flash devices." -} - -package CYGPKG_DEVS_NAND_SYNTH { - alias { "Synthetic NAND device" nand_synth } - directory devs/nand/synth - script nand_synth.cdl - description " - This package provides a synthetic NAND device, for testing purposes." -} - -package CYGPKG_DEVS_NAND_ST_NANDXXXX3A { - alias { "ST Microelectronics NANDxxxx3A chip family support" nand_st_nandxxxx3a } - directory devs/nand/st/nandxxxx3a - script nandxxxx3a.cdl - description " - This package provides support for the ST Microelectronics family of - NANDxxxx3A flash devices." -} - -package CYGPKG_DEVS_NAND_MICRON_MT29F { - alias { "Micron MT29F NAND chip family support" nand_micron_mt29f } - directory devs/nand/micron_mt29 - script mt29f.cdl - hardware - description " - This package provides support for the Micron MT29F family of NAND - flash devices." -} - -package CYGPKG_DEVS_NAND_ARM_AT91SAM9 { - alias { "Common NAND support for the AT91SAM926X family" nand_at91sam926x } - directory devs/nand/arm/at91sam9 - script devs_nand_arm_at91sam9.cdl - hardware - description "Common support definitions and code for the NAND support - hardware found on the Atmel AT91SAM926X chip family." -} - -# ========================================================================== -# End of ecos.db +containers, streams, iterators, algorithms and functors." +} + +package CYGPKG_ERROR { + alias { "Common error code support" error errors } + directory error + script error.cdl + description " +This package contains the common list of error and status codes. It is +held centrally to allow packages to interchange error codes and status +codes in a common way, rather than each package having its own +conventions for error/status reporting. The error codes are modelled +on the POSIX style naming e.g. EINVAL etc. This package also provides +the standard strerror() function to convert error codes to textual +representation, as well as an implementation of the errno idiom." +} +package CYGPKG_CYGMON { + alias { "CygMon support via eCos" cygmon } + directory cygmon + script cygmon.cdl + description " + This package supports the CygMon \[stand-alone debug monitor\] + using eCos as the underlying board support mechanism." +} + +package CYGPKG_REDBOOT { + alias { "RedBoot ROM monitor" redboot } + directory redboot + script redboot.cdl + description " + This package creates the RedBoot \[stand-alone bootstrap & debug monitor\] + using eCos as the underlying board support mechanism." +} + +package CYGPKG_MICROWINDOWS { + alias { "Microwindows" mw } + directory services/gfx/mw + script microwindows.cdl + description "Microwindows." +} + +package CYGPKG_HAL_SH_SH7750_DREAMCAST { + alias { "SEGA Dreamcast" hal_sh_dreamcast sh_dreamcast_hal } + directory hal/sh/dreamcast + script hal_sh_sh7750_dreamcast.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on SEGA Dreamcast." +} + +# -------------------------------------------------------------------------- +# ARM packages +package CYGPKG_HAL_ARM { + alias { "ARM common HAL" hal_arm arm_hal arm_arch_hal } + directory hal/arm/arch + script hal_arm.cdl + hardware + description " +The ARM architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + +package CYGPKG_HAL_ARM_PID { + alias { "ARM development board (PID)" hal_arm_pid arm_pid_hal } + directory hal/arm/pid + script hal_arm_pid.cdl + hardware + description " +The pid HAL package provides the support needed to run eCos on a ARM +PID eval board." +} + +package CYGPKG_HAL_ARM_AEB { + alias { "ARM evaluation board (AEB-1)" hal_arm_aeb arm_aeb_hal } + directory hal/arm/aeb + script hal_arm_aeb.cdl + hardware + description " +The aeb HAL package provides the support needed to run eCos on a ARM +AEB-1 eval board." +} + +package CYGPKG_HAL_ARM_E7T { + alias { "ARM Evaluator7T board (AEB-2)" hal_arm_e7t arm_e7t_hal } + directory hal/arm/e7t + script hal_arm_e7t.cdl + hardware + description " +The e7t HAL package provides the support needed to run eCos on a ARM +Evaluator7T board (aka the AEB-2)." +} + +package CYGPKG_HAL_ARM_INTEGRATOR { + alias { "ARM development board (INTEGRATOR)" hal_arm_integrator arm_integrator_hal } + directory hal/arm/integrator + script hal_arm_integrator.cdl + hardware + description " + The INTEGRATOR HAL package provides the support needed to + run eCos on a ARM INTEGRATOR eval board." +} + +package CYGPKG_HAL_ARM_AT91 { + alias { "Atmel AT91 variant HAL" hal_arm_at91 arm_at91_hal } + directory hal/arm/at91/var + script hal_arm_at91.cdl + hardware + description " + The at91 HAL package provides the support needed to run eCos on Atmel + AT91 based targets." +} + +package CYGPKG_HAL_ARM_AT91_JTST { + alias { "Atmel AT572D740 (diopsis) evaluation board (jtst)" hal_arm_at91_jtst arm_at91_jtst_hal } + directory hal/arm/at91/jtst + script hal_arm_at91_jtst.cdl + hardware + description " + The JTST HAL package provides the support needed to run eCos on + the Atmel evaluation board AT572D74-DK1." +} + +package CYGPKG_HAL_ARM_AT91SAM7 { + alias { "Atmel AT91SAM7" hal_arm_at91sam7 arm_at91_sam7 } + directory hal/arm/at91/at91sam7s + script hal_arm_at91sam7s.cdl + hardware + description " + The at91sam7 HAL package provides the support needed to run eCos on + an Atmel AT91SAM7 family of CPUs." +} + +package CYGPKG_HAL_ARM_AT91SAM7SEK { + alias { "Atmel AT91SAM7S" hal_arm_at91sam7sek arm_at91_sam7sek } + directory hal/arm/at91/at91sam7sek + script hal_arm_at91sam7sek.cdl + hardware + description " + The at91sam7sek HAL package provides the support needed to run eCos on + an Atmel AT91SAM7S-EK development board." +} + +package CYGPKG_HAL_ARM_AT91SAM7XEK { + alias { "Atmel AT91SAM7X" hal_arm_at91sam7xek arm_at91_sam7xek } + directory hal/arm/at91/at91sam7xek + script hal_arm_at91sam7xek.cdl + hardware + description " + The at91sam7xek HAL package provides the support needed to run eCos on + an Atmel AT91SAM7X-EK development board." +} + +package CYGPKG_HAL_ARM_SAM7EX256 { + alias { "Olimex SAM7EX256" hal_arm_sam7ex256 arm_sam7_ex256 } + directory hal/arm/at91/sam7ex256 + script hal_arm_sam7ex256.cdl + hardware + description " + The SAM7EX256 HAL package provides the support needed to run eCos on + an Olimex SAM7-EX256 development board." +} + +package CYGPKG_HAL_ARM_AT91_EB40 { + alias { "Atmel evaluation board (EB40)" hal_arm_at91_eb40 arm_at91_eb40_hal } + directory hal/arm/at91/eb40 + script hal_arm_at91_eb40.cdl + hardware + description " + The eb40 HAL package provides the support needed to run eCos on an Atmel + evaluation board (EB40)." +} + +package CYGPKG_HAL_ARM_AT91_EB40A { + alias { "Atmel evaluation board (EB40A)" hal_arm_at91_eb40a arm_at91_eb40a_hal } + directory hal/arm/at91/eb40a + script hal_arm_at91_eb40a.cdl + hardware + description " + The eb40a HAL package provides the support needed to run eCos on an Atmel + evaluation board (EB40A)." +} + +package CYGPKG_HAL_ARM_AT91_EB42 { + alias { "Atmel evaluation board (EB42)" hal_arm_at91_eb42 arm_at91_eb42_hal } + directory hal/arm/at91/eb42 + script hal_arm_at91_eb42.cdl + hardware + description " + The eb42 HAL package provides the support needed to run eCos on an Atmel + evaluation board (EB42)." +} + +package CYGPKG_HAL_ARM_AT91_EB55 { + alias { "Atmel evaluation board (EB55)" hal_arm_at91_eb55 arm_at91_eb55_hal } + directory hal/arm/at91/eb55 + script hal_arm_at91_eb55.cdl + hardware + description " + The eb55 HAL package provides the support needed to run eCos on an + Atmel evaluation board (EB55)." +} + +package CYGPKG_HAL_ARM_AT91_PHYCORE { + alias { "PHYTEC evaluation board (phyCORE AT91M55800A)" hal_arm_at91_phycore arm_at91_phycore_hal } + directory hal/arm/at91/phycore + script hal_arm_at91_phycore.cdl + hardware + description " + The phyCORE HAL package provides the support needed to run eCos on + an PHYTEC evaluation board (phyCORE AT91M55800A based on HD200)." +} + +package CYGPKG_HAL_ARM_LPC2XXX { + alias { "Philips LPC2XXX variant HAL" hal_arm_lpc2xxx arm_lpc2xxx_hal } + directory hal/arm/lpc2xxx/var + script hal_arm_lpc2xxx.cdl + hardware + description " + The LPC2XXX HAL package provides the support needed to run eCos on + Philips LPC2XXX based targets." +} + +package CYGPKG_HAL_ARM_LPC24XX { + alias { "NXP LPC24XX variant HAL" hal_arm_lpc24xx arm_lpc24xx_hal } + directory hal/arm/lpc24xx/var + script hal_arm_lpc24xx.cdl + hardware + description " + The LPC24XX HAL package provides the support needed to run eCos on + NXP LPC24XX based targets." +} + +package CYGPKG_HAL_ARM_LPC2XXX_MCB2100 { + alias { "Keil evaluation board MCB2100 " hal_mcb2100_arm } + directory hal/arm/lpc2xxx/mcb2100 + script hal_arm_lpc2xxx_mcb2100.cdl + hardware + description " + The mcb2100 HAL package provides the support needed to run eCos on an + the MCB2100 evaluation board from Keil." +} + +package CYGPKG_HAL_ARM_LPC2XXX_P2106 { + alias { "Olimex evaluation board LPC-P2106 " hal_p2106_arm } + directory hal/arm/lpc2xxx/p2106 + script hal_arm_lpc2xxx_p2106.cdl + hardware + description " + The p2106 HAL package provides the support needed to run eCos on an the + LPC-2106 evaluation board from Olimex." +} + +package CYGPKG_HAL_ARM_LPC2XXX_PHYCORE229X { + alias { "phyCORE-LPC229x development board" arm_lpc2xxx_phycore229x } + directory hal/arm/lpc2xxx/phycore229x + script hal_arm_lpc2xxx_phycore229x.cdl + hardware + description " + The Phycore HAL package provides the support needed to run eCos + on a Phytec phyCORE-LPC229x development board." +} + +package CYGPKG_HAL_ARM_LPC24XX_EA2468 { + alias { "Embedded Artists LPC2468 OEM board" arm_lpc2xxx_ea2468 } + directory hal/arm/lpc24xx/ea2468 + script hal_arm_lpc24xx_ea2468.cdl + hardware + description " + The Embedded Artists LPC2468 HAL package provides the support needed + to run eCos on a Embbeded Artists LPC2468 OEM board." +} + +package CYGPKG_HAL_ARM_LPC2XXX_LPCMT { + alias { "Olimex evaluation board LPC-MT " hal_lpcmt_arm } + directory hal/arm/lpc2xxx/lpcmt + script hal_arm_lpc2xxx_lpcmt.cdl + hardware + description " + The lpcmt HAL package provides the support needed to run eCos on an the + LPC-MT evaluation board from Olimex." +} + +package CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294 { + alias { "Olimex LPC-H2294 header board" hal_olpch2294_arm } + directory hal/arm/lpc2xxx/olpch2294 + script hal_arm_lpc2xxx_olpch2294.cdl + hardware + description " + The olpch2294 HAL package provides the support needed to + run eCos on the Olimex LPC-H2294 header board." +} + +package CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 { + alias { "Olimex LPC-E2294 development board" hal_olpce2294_arm } + directory hal/arm/lpc2xxx/olpce2294 + script hal_arm_lpc2xxx_olpce2294.cdl + hardware + description " + The olpce2294 HAL package provides the support needed to + run eCos on Olimex LPC-E2294 development board." +} + +package CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 { + alias { "Olimex LPC-L2294-1MB development board" hal_olpcl2294_arm } + directory hal/arm/lpc2xxx/olpcl2294 + script hal_arm_lpc2xxx_olpcl2294.cdl + hardware + description " + The olpcl2294 HAL package provides the support needed to run + eCos on Olimex LPC-L2294-1MB development board." +} + +package CYGPKG_HAL_ARM_MAC7100 { + alias { "Freescale MAC7100 variant HAL" hal_arm_mac7100 arm_mac7100_hal } + directory hal/arm/mac7100/var + script hal_arm_mac7100.cdl + hardware + description " + The mac7100 HAL package provides the support needed to run eCos on Freescale + MAC7100 based targets." +} + +package CYGPKG_HAL_ARM_MAC7100_MACE1 { + alias { "MAC7100 evaluation board (MACE1)" hal_arm_mac7100_mace1 arm_mac7100_mace1_hal } + directory hal/arm/mac7100/mace1 + script hal_arm_mac7100_mace1.cdl + hardware + description " + The MACE1 HAL package provides the support needed to run eCos on an + MAC7100 evaluation board (MACE1)." +} + +package CYGPKG_HAL_ARM_MAC7100_MAC7100EVB { + alias { "MAC7100EVB evaluation board (Freescale)" hal_arm_mac7100_mac7100evb arm_mac7100_mac7100evb_hal } + directory hal/arm/mac7100/mac7100evb + script hal_arm_mac7100_mac7100evb.cdl + hardware + description " + The MAC7100EVB HAL package provides the support needed to run eCos on an + MAC7100 evaluation board (MAC7100EVB)." +} + +package CYGPKG_HAL_ARM_EBSA285 { + alias { "Intel EBSA285 StrongARM board" hal_arm_ebsa285 arm_ebsa285_hal } + directory hal/arm/ebsa285 + script hal_arm_ebsa285.cdl + hardware + description " + The EBSA285 HAL package provides the support needed to run + eCos on a Intel EBSA285 StrongARM eval board." +} + +package CYGPKG_HAL_ARM_ARM9 { + alias { "ARM9 variant" hal_arm_arm9 } + directory hal/arm/arm9/var + script hal_arm_arm9.cdl + hardware + description " + The ARM9 HAL package provides the support needed to run + eCos on a ARM9 based systems." +} + + +package CYGPKG_HAL_ARM_ARM9_AAED2000 { + alias { "Agilent AAED2000 unit" hal_arm_arm9_aaed } + directory hal/arm/arm9/aaed2000 + script hal_arm_arm9_aaed2000.cdl + hardware + description " + The AAED2000 HAL package provides the support needed to run + eCos on an Agilent AAED2000 board." +} + +package CYGPKG_HAL_ARM_ARM9_EXCALIBUR { + alias { "Altera Excalibur ARM9 board" hal_arm_arm9_excalibur } + directory hal/arm/arm9/excalibur + script hal_arm_arm9_excalibur.cdl + hardware + description " + The Excalibur HAL package provides the support needed to run + eCos on an Altera Excalibur ARM9 board." +} + +package CYGPKG_HAL_ARM_ARM9_SMDK2410 { + alias { "Samsung ARM9/SMDK2410 development board" hal_arm_arm9_smdk2410 } + directory hal/arm/arm9/smdk2410 + script hal_arm_arm9_smdk2410.cdl + hardware + description " + The SMDK2410 HAL package provides the support needed to run + eCos on Samsung SMDK2410 and S3c2410x (ARM9) based development boards." +} + +package CYGPKG_HAL_ARM_ARM9_INNOVATOR { + alias { "Innovator (ARM)" hal_arm_arm9_innovator } + directory hal/arm/arm9/innovator + script hal_arm_arm9_innovator.cdl + hardware + description " + The Innovator HAL package provides the support needed to run + RedBoot on the ARM processor of the Innovator. + + NOTE: Full support for eCos is not provided yet. This HAL + contains only the minimum amount necessary to run RedBoot + on the Innovator. In particular, interrupts are not yet + supported. Watch this space for more details in the near + future." +} + +package CYGPKG_HAL_ARM_SA11X0 { + alias { "Intel SA11X0 Chipset" hal_arm_sa11x0 } + directory hal/arm/sa11x0/var + script hal_arm_sa11x0.cdl + hardware + description " + The SA11X0 HAL package provides the support needed to run + eCos on a Intel StrongARM SA11X0 based systems." +} + +package CYGPKG_HAL_ARM_SA11X0_ASSABET { + alias { "Intel SA1110 Assabet eval board" hal_arm_sa11x0_assabet } + directory hal/arm/sa11x0/assabet + script hal_arm_sa11x0_assabet.cdl + hardware + description " + The ASSABET HAL package provides the support needed to run + eCos on a Intel StrongARM SA1110 evaluation board (assabet)." +} + +package CYGPKG_HAL_ARM_SA11X0_CERF { + alias { "Intrinsyc Cerf board" hal_arm_sa11x0_cerf } + directory hal/arm/sa11x0/cerf + script hal_arm_sa11x0_cerf.cdl + hardware + description " + The CERF HAL package provides the support needed to run + eCos on a Intrinsyc StrongARM SA1110 Cerf board." +} + +package CYGPKG_HAL_ARM_SA11X0_CERFPDA { + alias { "Intrinsyc Cerfpda" hal_arm_sa11x0_cerfpda } + directory hal/arm/sa11x0/cerfpda + script hal_arm_sa11x0_cerfpda.cdl + hardware + description " + The CERFPDA HAL package provides the support needed to run + eCos on a Intrinsyc StrongARM SA1110 Cerfpda." +} + +package CYGPKG_HAL_ARM_SA11X0_IPAQ { + alias { "Compaq iPAQ Pocket PC" hal_arm_sa11x0_ipaq } + directory hal/arm/sa11x0/ipaq + script hal_arm_sa11x0_ipaq.cdl + hardware + description " + The IPAQ HAL package provides the support needed to run + eCos on a Intel StrongARM SA1110 pocket PC (Compaq iPAQ)." +} + +package CYGPKG_HAL_ARM_SA11X0_FLEXANET { + alias { "SA1110 Flexanet board" hal_arm_sa11x0_flexanet } + directory hal/arm/sa11x0/flexanet + script hal_arm_sa11x0_flexanet.cdl + hardware + description " + The FLEXANET HAL package provides the support needed to run + eCos on an SA1110 Flexanet board." +} + +package CYGPKG_HAL_ARM_SNDS { + alias { "Samsung SNDS" hal_arm_snds arm_snds_hal} + directory hal/arm/snds + script hal_arm_snds.cdl + hardware + description " + The SNDS HAL package provides the support needed to run eCos on a + Samsung SNDS eval board" +} + +package CYGPKG_DEVS_ETH_SMSC_LAN91CXX { + alias { "SMSC LAN91CXX ethernet driver" lan91cxx_eth_driver lan9000_eth_driver } + hardware + directory devs/eth/smsc/lan91cxx + script smsc_lan91cxx_eth_drivers.cdl + description "Ethernet driver for SMSC LAN91CXX (LAN9000) controller." +} + + +package CYGPKG_HAL_ARM_SA11X0_NANO { + alias { "Intel SA1110 nanoEngine eval board" hal_arm_sa11x0_nano } + directory hal/arm/sa11x0/nano + script hal_arm_sa11x0_nano.cdl + hardware + description " + The nanoEngine HAL package provides the support needed to run + eCos on the Bright Star Engineering nanoEngine StrongARM SA1110 board." +} + +package CYGPKG_DEVS_ETH_ARM_NANO { + alias { "BSE nanoEngine with 82559 ethernet driver" + devs_eth_arm_nano nano_eth_driver } + hardware + directory devs/eth/arm/nano + script nano_eth_drivers.cdl + description "Ethernet driver for SA11x0 nanoEngine with Intel + i82559 ethernet interfaces." +} + +package CYGPKG_HAL_ARM_SA11X0_BRUTUS { + alias { "Intel SA1100 Brutus eval board" hal_arm_sa11x0_brutus } + directory hal/arm/sa11x0/brutus + script hal_arm_sa11x0_brutus.cdl + hardware + description " + The BRUTUS HAL package provides the support needed to run + eCos on a Intel StrongARM SA1110 evaluation board (brutus)." +} + +package CYGPKG_HAL_ARM_SA11X0_SA1100MM { + alias { "Intel SA1100 Multimedia eval board" hal_arm_sa11x0_sa1100mm } + directory hal/arm/sa11x0/sa1100mm + script hal_arm_sa11x0_sa1100mm.cdl + hardware + description " + The MULTIMEDIA HAL package provides the support needed to run + eCos on a Intel StrongARM SA1110 Multimedia evaluation board." +} + +package CYGPKG_HAL_ARM_EDB7XXX { + alias { "Cirrus Logic ARM7 based development boards" hal_arm_edb7xxx arm_edb7xxx_hal } + directory hal/arm/edb7xxx + script hal_arm_edb7xxx.cdl + hardware + description " +The EDB7XXX HAL package provides the support needed to run eCos on Cirrus Logic CL-PS7111 and EP7xxx based development boards." +} + +package CYGPKG_HAL_ARM_CMA230 { + alias { "Cogent CMA230/222 board" hal_arm_cma230 arm_cma230_hal } + directory hal/arm/cma230 + script hal_arm_cma230.cdl + hardware + description " +The cma230 HAL package provides the support needed to run eCos on a Cogent +CMA230 (ARM7TDMI) or CMA222 (ARM710T) eval board." +} + +package CYGPKG_HAL_ARM_AIM711 { + alias { "ARM Industial Module AIM 711" hal_arm_aim711 arm_aim711_hal} + directory hal/arm/aim711 + script hal_arm_aim711.cdl + hardware + description " + The ARM Industial Module AIM 711 HAL package provides the support + needed to run eCos on a ARM Industial Module AIM 711 from + Vision Systems GmbH." +} + +package CYGPKG_HAL_ARM_XSCALE_CORE { + alias { "Intel XScale Core" hal_arm_xscale_core } + directory hal/arm/xscale/cores + script hal_arm_xscale_core.cdl + hardware + description " + The XScale core HAL package provides the support needed to run eCos + on all Intel XScale based systems." +} + +package CYGPKG_HAL_ARM_XSCALE_IOP310 { + alias { "Intel IOP8310 (IQ80200/IQ80310) XScale chipset" hal_arm_iop310 arm_iop310_hal } + directory hal/arm/xscale/iop310 + script hal_arm_xscale_iop310.cdl + hardware + description " + The IOP310 HAL package provides the support needed to run + eCos on a system using the Intel XScale IOP310 (IQ80200/80310) chipset." +} + +package CYGPKG_HAL_ARM_XSCALE_IQ80310 { + alias { "Intel IQ80310 (Cyclone) eval board" hal_arm_xscale_iq80310 hal_arm_xscale_cyclone } + directory hal/arm/xscale/iq80310 + script hal_arm_xscale_iq80310.cdl + hardware + description " + The IQ80310 HAL package provides the support needed to run + eCos on an Intel Cyclone evaluation board, utilizing an Intel XScale + IQ80200/80310 chipset." +} + +package CYGPKG_HAL_ARM_XSCALE_NPWR { + alias { "NPWR Linux Engine" hal_arm_xscale_npwr } + directory hal/arm/xscale/npwr + script hal_arm_xscale_npwr.cdl + hardware + description " + The NPWR HAL package provides the support needed to run + eCos on a NPWR Linux Engine, utilizing an Intel XScale + IQ80200/80310 chipset." +} + +package CYGPKG_DEVS_ETH_ARM_XSCALE_NPWR { + alias { "NPWR Linux Engine ethernet drivers" devs_eth_arm_xscale_npwr } + hardware + directory devs/eth/arm/npwr + script npwr_eth_drivers.cdl + description "Ethernet drivers for NPWR Linux Engine via 82544 NIC." +} + +package CYGPKG_HAL_ARM_XSCALE_VERDE { + alias { "Intel XScale 80320 I/O Processor" hal_arm_xscale_verde } + directory hal/arm/xscale/verde + script hal_arm_xscale_verde.cdl + hardware + description " + The XSCALE HAL package provides the support needed to run + eCos on Intel 80320 based systems." +} + +package CYGPKG_HAL_ARM_XSCALE_IQ80321 { + alias { "Intel XScale IQ80321 eval board" hal_arm_xscale_iq80321 } + directory hal/arm/xscale/iq80321 + script hal_arm_xscale_iq80321.cdl + hardware + description " + The IQ80321 HAL package provides the support needed to run + eCos on an Intel XScale IQ80321 evaluation board." +} + +package CYGPKG_HAL_ARM_XSCALE_IXP425 { + alias { "Intel XScale IXP425 Network Processor" hal_arm_xscale_ixp425 } + directory hal/arm/xscale/ixp425 + script hal_arm_xscale_ixp425.cdl + hardware + description " + The XScale IXP425 HAL package provides the support needed to run + eCos on Intel XScale IXP425 network processor based systems." +} + +package CYGPKG_HAL_ARM_XSCALE_XSENGINE { + alias { "Exys XSEngine" hal_arm_xscale_xsengine } + directory hal/arm/xscale/xsengine + script hal_arm_xscale_xsengine.cdl + hardware + description " + The XSEngine HAL package provides the support needed to run + eCos on an Exys XSEngine board." +} + +package CYGPKG_HAL_ARM_XSCALE_IXDP425 { + alias { "Intel XScale IXDP425 Network Processor eval board" hal_arm_xscale_ixdp425 } + directory hal/arm/xscale/ixdp425 + script hal_arm_xscale_ixdp425.cdl + hardware + description " + The IXDP425 HAL package provides the support needed to run + eCos on an Intel XScale IXDP425 network processor evaluation board." +} + +package CYGPKG_HAL_ARM_XSCALE_GRG { + alias { "Intel XScale Generic Residential Gateway" hal_arm_xscale_grg } + directory hal/arm/xscale/grg + script hal_arm_xscale_grg.cdl + hardware + description " + The GRG HAL package provides the support needed to run eCos on an + Intel Generic Residential Gateway evaluation board." +} + +package CYGPKG_HAL_ARM_XSCALE_PRPMC1100 { + alias { "Motorola PrPMC1100 PMC for Intel XScale IXC1100" hal_arm_xscale_prpmc1100 } + directory hal/arm/xscale/prpmc1100 + script hal_arm_xscale_prpmc1100.cdl + hardware + description " + The PrPMC1100 HAL package provides the support needed to run eCos on an + Motorola PrPMC1100 evaluation board." +} + +package CYGPKG_HAL_ARM_XSCALE_PXA2X0 { + alias { "Intel PXA2X0" hal_arm_xscale_pxa2x0 } + directory hal/arm/xscale/pxa2x0 + script hal_arm_xscale_pxa2x0.cdl + hardware + description " + The PXA2X0 HAL package provides the support needed to run + eCos on Intel PXA2X0 based systems." +} + +package CYGPKG_HAL_ARM_XSCALE_MPC50 { + alias { "MICROPLEX Printer Controller 5.0" hal_arm_xscale_mpc50 } + directory hal/arm/xscale/mpc50 + script hal_arm_xscale_mpc50.cdl + hardware + description " + The MPC50 HAL package provides the support needed to run + eCos on a MPC 5.0." +} + +# -------------------------------------------------------------------------- +# SH packages +package CYGPKG_HAL_SH { + alias { "SH common HAL" hal_sh sh_hal sh_arch_hal } + directory hal/sh/arch + script hal_sh.cdl + hardware + description " + The SH (SuperH) architecture HAL package provides generic + support for this processor architecture. It is also + necessary to select variant and target platform HAL + packages." +} + +package CYGPKG_HAL_SH_SH2 { + alias { "SH2 architecture" hal_sh_sh2 } + directory hal/sh/sh2 + script hal_sh_sh2.cdl + hardware + description " + The SH2 (SuperH 2) variant HAL package provides generic + support for SH2 variant CPUs." +} + +package CYGPKG_HAL_SH_SH3 { + alias { "SH3 architecture" hal_sh_sh3 } + directory hal/sh/sh3 + script hal_sh_sh3.cdl + hardware + description " + The SH3 (SuperH 3) variant HAL package provides generic + support for SH3 variant CPUs." +} + +package CYGPKG_HAL_SH_SH4 { + alias { "SH4 architecture" hal_sh_sh4 } + directory hal/sh/sh4 + script hal_sh_sh4.cdl + hardware + description " + The SH4 (SuperH 4) variant HAL package provides generic + support for SH4 variant CPUs." +} + +package CYGPKG_HAL_SH_EDK7708 { + alias { "Hitachi SH7708 board" hal_sh_edk sh_edk_hal } + directory hal/sh/edk7708 + script hal_sh_edk7708.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a Hitachi SH3 EDK7708 board." +} + +package CYGPKG_HAL_SH_SH7708_CQ7708 { + alias { "CqREEK SH7708 board" hal_sh_cq sh_cq_hal } + directory hal/sh/cq7708 + script hal_sh_sh7708_cq7708.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a CqREEK SH7708 board." +} + +package CYGPKG_HAL_SH_SH7750_CQ7750 { + alias { "CqREEK SH7750 board" hal_sh_cqsh4 sh_cqsh4_hal } + directory hal/sh/cq7750 + script hal_sh_sh7750_cq7750.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a CqREEK SH7750 board." +} + + +package CYGPKG_HAL_SH_SH7729_HS7729PCI { + alias { "Hitachi HS7729PCI board" hal_sh_sh7729_hs7729pci sh_sh7729_hs7729pci_hal } + directory hal/sh/hs7729pci + script hal_sh_sh7729_hs7729pci.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a Hitachi HS7729PCI board." +} + +package CYGPKG_HAL_SH_SH77X9_SE77X9 { + alias { "Hitachi SE77x9 board" hal_sh_sh77x9_se77x9 sh_sh77x9_se77x9_hal } + directory hal/sh/se77x9 + script hal_sh_sh77x9_se77x9.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a Hitachi Solution Engine 77x9 board." +} + +package CYGPKG_HAL_SH_SH7751_SE7751 { + alias { "Hitachi SE7751 board" hal_sh_sh7751_se7751 sh_sh7751_se7751_hal } + directory hal/sh/se7751 + script hal_sh_sh7751_se7751.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a Hitachi Solution Engine 7751 board." +} + +package CYGPKG_HAL_SH_SH4_202_MD { + alias { "SuperH SH4-202 MicroDev CPU Board" hal_sh_sh4_202_md } + directory hal/sh/sh4_202_md + script hal_sh_sh4_202_md.cdl + hardware + description " + The SH4-202 HAL package provides generic + support for the SuperH SH4-202 MicroDev CPU board." +} + +# -------------------------------------------------------------------------- +# H8/300 packages +package CYGPKG_HAL_H8300 { + alias { "Hitachi H8300 common HAL" hal_h8300 h8300_hal} + directory hal/h8300/arch + script hal_h8300.cdl + hardware + description " +The Hitachi H8/300 architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + +package CYGPKG_HAL_H8300_H8300H { + alias { "Hitachi H8300H variant HAL" hal_h8300h h8300h_hal} + directory hal/h8300/h8300h + script hal_h8300_h8300h.cdl + hardware + description " +The H8/300H HAL package provides the support needed to run eCos on a Hitachi +H8/300H processor." +} + +package CYGPKG_HAL_H8300_H8S { + alias { "Hitachi H8S variant HAL" hal_h8s h8s_hal} + directory hal/h8300/h8s + script hal_h8300_h8s.cdl + hardware + description " +The H8S HAL package provides the support needed to run eCos on a Hitachi +H8S processor." +} + +package CYGPKG_HAL_H8300_H8300H_SIM { + alias { "H8/300H simulator" hal_h8300h_sim h8300h_sim_hal } + directory hal/h8300/sim + script hal_h8300_h8300h_sim.cdl + hardware + description " + The minimal simulator HAL package is provided for use when + only a simple simulation of the processor architecture is + desired, as opposed to detailed simulation of any specific + board. In particular it is not possible to simulate any of + the I/O devices, so device drivers cannot be used." +} + +package CYGPKG_HAL_H8300_H8300H_AKI3068NET { + alias { "Akizuki H8/3068 board" hal_h8300h_aki3068net h8300h_aki3068net_hal } + directory hal/h8300/aki3068net + script hal_h8300_h8300h_aki3068net.cdl + hardware + description " + The aki3068net HAL package provides the support needed to run + eCos on a Akizuki H8/3068 Network micom board." +} + +package CYGPKG_HAL_H8300_H8300H_H8MAX { + alias { "H8MAX board" hal_h8300h_h8max h8300h_h8max_hal } + directory hal/h8300/h8max + script hal_h8300_h8300h_h8max.cdl + hardware + description " + The h8max HAL package provides the support needed to run + eCos on a H8MAX board." +} + +package CYGPKG_HAL_H8300_H8S_SIM { + alias { "H8S simulator" hal_h8s_sim h8s_sim_hal } + directory hal/h8300/sim_s + script hal_h8300_h8s_sim.cdl + hardware + description " + The minimal simulator HAL package is provided for use when + only a simple simulation of the processor architecture is + desired, as opposed to detailed simulation of any specific + board. In particular it is not possible to simulate any of + the I/O devices, so device drivers cannot be used." +} + +package CYGPKG_HAL_H8300_H8S_EDOSK2674 { + alias { "EDOSK-2674 board" hal_h8s_edosk2674 h8s_edosk2674_hal } + directory hal/h8300/edosk2674 + script hal_h8300_h8s_edosk2674.cdl + hardware + description " + The edosk2674 HAL package provides the support needed to run + eCos on a Hitachi Micro System Europe EDOSK-2674 Evalution board." +} + +# ========================================================================== +# -------------------------------------------------------------------------- +# i386 packages +package CYGPKG_HAL_I386 { + alias { "i386 common HAL" hal_i386 i386_hal i386_arch_hal } + directory hal/i386/arch + script hal_i386.cdl + hardware + description " + The i386 architecture HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." +} + +package CYGPKG_HAL_I386_GENERIC { + alias { "i386 generic target" hal_i386_generic } + directory hal/i386/generic + script hal_i386_generic.cdl + hardware + description " + The i386 generic Target HAL package provides support + for generic IA32 processors, from the 80386 to the latest + Pentium/Athlon." + +} +package CYGPKG_HAL_I386_PCMB { + alias { "i386 PC Motherboard" hal_i386_pcmb } + directory hal/i386/pcmb + script hal_i386_pcmb.cdl + hardware + description " + The i386 PC Motherboard HAL package provides the + support needed to run eCos binaries on a standard i386 + PC motherboard. This is a support package for various + actual platform specific targets." +} +package CYGPKG_HAL_I386_PC { + alias { "i386 PC target" hal_i386_pc } + directory hal/i386/pc + script hal_i386_pc.cdl + hardware + description " + The i386 PC Target HAL package provides the + support needed to run eCos binaries on a standard i386 + PC." +} + +# -------------------------------------------------------------------------- +# Synthetic target. +package CYGPKG_HAL_SYNTH { + alias { "Linux synthetic target" linux } + directory hal/synth/arch + script hal_synth.cdl + hardware + description " + The Linux Synthetic Target HAL package provides the + support needed to run eCos binaries on top of the i386 + Linux kernel." +} + +package CYGPKG_HAL_SYNTH_I386 { + alias { "Linux/i386 synthetic target" i386_linux } + directory hal/synth/i386linux + script hal_synth_i386.cdl + hardware + description " + i386 processor-specific support for the Linux synthetic target" +} + +# -------------------------------------------------------------------------- +# SPARClite packages +package CYGPKG_HAL_SPARCLITE { + alias { "SPARClite common HAL" hal_sparclite sparclite_hal sparclite_arch_hal } + directory hal/sparclite/arch + script hal_sparclite.cdl + hardware + description " + The SPARClite architecture HAL package provides generic support + for this processor architecture. It is also necessary to select + a specific target platform HAL package." +} + +package CYGPKG_HAL_SPARCLITE_SLEB { + alias { "Fujitsu MB86800-MA01 board" hal_sparclite_sleb sparclite_sleb_hal } + directory hal/sparclite/sleb + script hal_sparclite_sleb.cdl + hardware + description " + The SPARClite evaluation board HAL package is provided for use + with the Fujitsu MB8683x boards." +} + +package CYGPKG_HAL_SPARCLITE_SIM { + alias { "SPARClite simulator" hal_sparclite_sim sparclite_sim_hal } + directory hal/sparclite/sim + script hal_sparclite_sim.cdl + hardware + description " + The SPARClite simulator HAL package is provided for use + with the SPARClite simulator." +} + +# -------------------------------------------------------------------------- +# SPARC V7/V8 packages +package CYGPKG_HAL_SPARC { + alias { "SPARC V7/V8 common HAL" hal_sparc sparc_hal sparc_arch_hal } + directory hal/sparc/arch + script hal_sparc.cdl + hardware + description " + The SPARC V7/V8 architecture HAL package provides generic support + for this processor architecture. It is also necessary to select + a specific target platform HAL package." +} + +package CYGPKG_HAL_SPARC_ERC32 { + alias { "ERC32 processor" hal_sparc_erc32 sparc_erc32_hal } + directory hal/sparc/erc32 + script hal_sparc_erc32.cdl + hardware + description " + The ERC32 processor HAL package is provided for use + with both real hardware and the TSIM/ERC32 simulator." +} + +package CYGPKG_HAL_SPARC_LEON { + alias { "LEON processor" hal_sparc_leon sparc_leon_hal } + directory hal/sparc/leon + script hal_sparc_leon.cdl + hardware + description " + The LEON processor HAL package is provided for use + with both real hardware and the TSIM/LEON simulator." +} + +# -------------------------------------------------------------------------- +# PowerPC packages +package CYGPKG_HAL_POWERPC { + alias { "PowerPC common HAL" hal_powerpc powerpc_hal powerpc_arch_hal } + directory hal/powerpc/arch + script hal_powerpc.cdl + hardware + description " + The PowerPC architecture HAL package provides generic + support for this processor architecture. It is also necessary to + select a CPU variant and a specific target platform HAL + package." +} + +package CYGPKG_HAL_POWERPC_MPC8260 { + alias { "PowerPC MPC8260 variant HAL" hal_mpc8260 } + directory hal/powerpc/mpc8260/ + script hal_powerpc_mpc8260.cdl + hardware + description " + The PowerPC MPC8260 PowerQUICCII variant HAL package provides + support for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_MPC8XXX { + alias { "PowerPC MPC8XXX variant HAL" hal_mpc8xxx } + directory hal/powerpc/mpc8xxx/ + script hal_powerpc_mpc8xxx.cdl + hardware + description " + The PowerPC MPC8XXX PowerQUICCII variant HAL package provides + support for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_MPC8xx { + alias { "PowerPC 8xx variant HAL" hal_mpc8xx mpc8xx_hal mpc8xx_arch_hal } + directory hal/powerpc/mpc8xx/ + script hal_powerpc_mpc8xx.cdl + hardware + description " + The PowerPC 8xx variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_PPC60x { + alias { "PowerPC 60x variant HAL" hal_ppc60x ppc60x_hal ppc60x_arch_hal } + directory hal/powerpc/ppc60x/ + script hal_powerpc_ppc60x.cdl + hardware + description " + The PowerPC 60x variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_MPC5xx { + alias { "PowerPC 5xx variant HAL" hal_mpc5xx mpc5xx_hal mpc5xx_arch_hal } + directory hal/powerpc/mpc5xx/ + script hal_powerpc_mpc5xx.cdl + hardware + description " + The PowerPC 5xx variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_PPC40x { + alias { "PowerPC 40x variant HAL" hal_ppc40x ppc40x_hal ppc40x_arch_hal } + directory hal/powerpc/ppc40x/ + script hal_powerpc_ppc40x.cdl + hardware + description " + The PowerPC 40x variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_POWERPC_COGENT { + alias { "Cogent CMA286/287 board" hal_powerpc_cogent powerpc_cogent_hal } + directory hal/powerpc/cogent + script hal_powerpc_cogent.cdl + hardware + description " + The cogent HAL package provides the support needed to run + eCos on a Cogent board equipped with a PowerPC processor." +} + +package CYGPKG_HAL_POWERPC_CME555 { + alias { "Axiom's CME555 evaluation board" hal_powerpc_cme555 powerpc_cme555_hal } + directory hal/powerpc/cme555 + script hal_powerpc_cme555.cdl + hardware + description " + The CME555 HAL package provides the support needed to run + eCos on a CME555 evaluation board from Axiom Manufacturing." +} + +package CYGPKG_HAL_POWERPC_EC555 { + alias { "Wuerz development board" hal_powerpc_ec555 powerpc_ec555_hal } + directory hal/powerpc/ec555 + script hal_powerpc_ec555.cdl + hardware + description " + The EC555 HAL package provides the support needed to run + eCos on an EC555 development board from Wuerz elektronik." +} + +package CYGPKG_HAL_POWERPC_PATI { + alias { "MPL PATI PC/104+ board" hal_powerpc_pati powerpc_pati_hal } + directory hal/powerpc/pati + script hal_powerpc_pati.cdl + hardware + description " + The PATI HAL package provides the support needed to run + eCos on an PATI PC/104+ board from MPL elektronik." +} + +package CYGPKG_HAL_POWERPC_FADS { + alias { "Motorola MPC8xxFADS board" hal_powerpc_fads powerpc_fads_hal } + directory hal/powerpc/fads + script hal_powerpc_fads.cdl + hardware + description " + The FADS HAL package provides the support needed to run + eCos on a Motorola FADS board equipped with a PowerPC processor." +} +package CYGPKG_HAL_POWERPC_MBX { + alias { "Motorola MBX860/821 board" hal_powerpc_mbx powerpc_mbx_hal } + directory hal/powerpc/mbx + script hal_powerpc_mbx.cdl + hardware + description " + The MBX HAL package provides the support needed to run + eCos on a Motorola MBX board equipped with a PowerPC processor." +} + +package CYGPKG_HAL_POWERPC_VIPER { + alias { "A&M Viper PPC860 board" hal_powerpc_viper powerpc_viper_hal } + directory hal/powerpc/viper + script hal_powerpc_viper.cdl + hardware + description " + The VIPER HAL package provides the support needed to run + eCos on a A&M VIPER board equipped with a PowerPC processor." +} + +package CYGPKG_HAL_POWERPC_TS6 { + alias { "Delphi TigerSHARC-6 board" hal_powerpc_ts6 powerpc_ts6_hal } + directory hal/powerpc/ts6 + script hal_powerpc_ts6.cdl + hardware + description " + The TS6 HAL package provides the support needed to run + eCos on a Delphi TigerSHARC-6 board equipped with a + PowerPC processor." +} + +package CYGPKG_HAL_POWERPC_VADS { + alias { "Motorola MPC8260 VADS board" hal_powerpc_vads powerpc_vads_hal } + directory hal/powerpc/vads + script hal_powerpc_vads.cdl + hardware + description " + The VADS HAL package provides the support needed to run + eCos on a Motorola MPC8260 VADS board equipped with a + PowerPC processor." +} + +package CYGPKG_HAL_QUICC { + alias { "Motorola MPC8xx QUICC support" hal_quicc quicc_hal quicc } + directory hal/powerpc/quicc + script hal_powerpc_quicc.cdl + hardware + description " + The QUICC package provides some of the support needed + to run eCos on a Motorola MPC8xx processors, using the QUICC + communications subsystem." +} + +package CYGPKG_HAL_POWERPC_SIM { + alias { "PowerPC simulator" hal_powerpc_sim powerpc_sim_hal } + directory hal/powerpc/sim + script hal_powerpc_sim.cdl + hardware + description " + The minimal simulator HAL package is provided for use when + only a simple simulation of the processor architecture is + desired, as opposed to detailed simulation of any specific + board. In particular it is not possible to simulate any of + the I/O devices, so device drivers cannot be used." +} + +# -------------------------------------------------------------------------- +# MIPS packages + +package CYGPKG_HAL_MIPS { + alias { "MIPS common HAL" hal_mips mips_hal mips_arch_hal } + directory hal/mips/arch/ + script hal_mips.cdl + hardware + description " + The MIPS architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a CPU variant and a specific target platform HAL + package." +} + +package CYGPKG_HAL_MIPS_SIM { + alias { "MIPS simulator" hal_mips_sim mips_sim_hal } + directory hal/mips/sim + script hal_mips_sim.cdl + hardware + description " + The minimal simulator HAL package is provided for when only + a simple simulation of the processor architecture is + desired, as opposed to detailed simulation of any specific + board. To use this minimal simulator the command + `target sim --board=jmr3904pal' should be used from inside + gdb. It is not possible to use any of the eCos device + drivers when the simulator is running in this mode" +} + +package CYGPKG_HAL_MIPS_TX39 { + alias { "TX39 chip HAL" hal_tx39 tx39_hal tx39_arch_hal } + directory hal/mips/tx39/ + script hal_mips_tx39.cdl + hardware + description " + The TX39 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_TX39_JMR3904 { + alias { "Toshiba JMR-TX3904 board" hal_tx39_jmr3904 tx39_jmr3904_hal } + directory hal/mips/jmr3904 + script hal_mips_tx39_jmr3904.cdl + hardware + description " + The JMR3904 HAL package should be used when targetting the + actual hardware. The same package can also be used when + running on the full simulator, since this provides an + accurate simulation of the hardware including I/O devices. + To use the simulator in this mode the command + `target sim --board=jmr3904' should be used from inside gdb." +} + +package CYGPKG_HAL_MIPS_MIPS32 { + alias { "MIPS32 HAL" hal_mips32 mips32_hal mips32_arch_hal } + directory hal/mips/mips32/ + script hal_mips_mips32.cdl + hardware + description " + The MIPS 32 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_MIPS64 { + alias { "MIPS64 HAL" hal_mips64 mips64_hal mips64_arch_hal } + directory hal/mips/mips64/ + script hal_mips_mips64.cdl + hardware + description " + The MIPS 64 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_ATLAS { + alias { "MIPS Atlas board" hal_atlas atlas_hal } + directory hal/mips/atlas + script hal_mips_atlas.cdl + hardware + description " + The Atlas HAL package should be used when targetting the + actual hardware. " +} +package CYGPKG_HAL_MIPS_MALTA { + alias { "MIPS Malta board" hal_malta malta_hal } + directory hal/mips/malta + script hal_mips_malta.cdl + hardware + description " + The Malta HAL package should be used when targetting the + actual hardware. " +} + +package CYGPKG_HAL_MIPS_TX49 { + alias { "TX49 chip HAL" hal_tx49 tx49_hal tx49_arch_hal } + directory hal/mips/tx49/ + script hal_mips_tx49.cdl + hardware + description " + The TX49 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_TX49_REF4955 { + alias { "Toshiba TX4955 reference platform" hal_tx49_ref4955 tx49_ref4955_hal } + directory hal/mips/ref4955 + script hal_mips_tx49_ref4955.cdl + hardware + description " + The REF4955 HAL package should be used when targetting the + actual hardware." +} + +package CYGPKG_HAL_MIPS_RM7000 { + alias { "RM7000 chip HAL" hal_rm7000 rm7000_hal rm7000_arch_hal } + directory hal/mips/rm7000/var + script hal_mips_rm7000.cdl + hardware + description " + The RM7000 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_RM7000_OCELOT { + alias { "PMC-Sierra Ocelot platform" hal_rm7000_ocelot rm7000_ocelot_hal } + directory hal/mips/rm7000/ocelot + script hal_mips_rm7000_ocelot.cdl + hardware + description " + The Ocelot HAL package should be used when targetting the + actual hardware." +} + +package CYGPKG_HAL_MIPS_VR4300 { + alias { "VR4300 chip HAL" hal_vr4300 vr4300_hal vr4300_arch_hal } + directory hal/mips/vr4300/ + script hal_mips_vr4300.cdl + hardware + description " + The VR4300 variant HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} +package CYGPKG_HAL_MIPS_VR4300_VRC4373 { + alias { "NEC VRC4373 board" hal_vrc4373 vrc4373_hal } + directory hal/mips/vrc4373 + script hal_mips_vr4300_vrc4373.cdl + hardware + description " + The VRC4373 HAL package should be used when targetting the + actual hardware." +} + +package CYGPKG_HAL_MIPS_VR4300_VRC4375 { + alias { "NEC VRC4375 board" hal_vrc4375 vrc4375_hal } + directory hal/mips/vrc4375 + script hal_mips_vr4300_vrc4375.cdl + hardware + description " + The VRC4375 HAL package should be used when targetting the + actual hardware." +} + +package CYGPKG_HAL_MIPS_VR4300_VRC437X { + alias { "NEC VRC437X support" hal_vrc437x vrc437x_hal } + directory hal/mips/vrc437x + script hal_mips_vr4300_vrc437x.cdl + hardware + description " + The VRC437X HAL package should be used when targetting harware + that contains either a VRC437X companion chip." +} + +package CYGPKG_HAL_MIPS_UPD985XX { + alias { "upd985xx chip HAL" hal_upd985xx upd985xx_hal upd985xx_arch_hal } + directory hal/mips/upd985xx/ + script hal_mips_upd985xx.cdl + hardware + description " + The UPD985XX variant HAL package provides generic support + for this NEC system-on-chip processor architecture, uPD985xx. + It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_IDT32334 { + alias { "MIPS IDT32334 variant HAL" hal_idt32334 idt32334_hal idt32334_arch_hal } + directory hal/mips/idt32334 + script hal_mips_idt32334.cdl + hardware + description " + The IDT32334 variant HAL package provides generic support + for platforms based on this variant. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_IDT32334_REFIDT334 { + alias { "MIPS IDT79S334A reference platform" hal_idt32334_refIDT334 idt32334_refIDT334_hal } + directory hal/mips/idt79s334a + script hal_mips_idt32334_refidt334.cdl + hardware + description " + The REFIDT334 HAL package should be used when targetting the + actual hardware." +} + +# -------------------------------------------------------------------------- +# MN10300 packages + +package CYGPKG_HAL_MN10300 { + alias { "MN10300 common HAL" hal_mn10300 mn10300_hal mn10300_arch_hal } + directory hal/mn10300/arch + script hal_mn10300.cdl + hardware + description " + The MN10300 architecture HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." +} + +package CYGPKG_HAL_MN10300_AM31 { + alias { "MN10300 AM31 variant HAL" hal_mn10300_am31 mn10300_am31_hal } + directory hal/mn10300/am31 + script hal_mn10300_am31.cdl + hardware + description " + The MN10300 AM31 variant HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." +} + +package CYGPKG_HAL_MN10300_AM31_SIM { + alias { "MN10300 simulator" hal_mn10300_sim mn10300_sim_hal } + directory hal/mn10300/sim + script hal_mn10300_am31_sim.cdl + hardware + description " + The minimal simulator HAL package is provided for use when + only a simple simulation of the processor architecture is + desired, as opposed to detailed simulation of any specific + board. In particular it is not possible to simulate any of + the I/O devices, so device drivers cannot be used." +} + +package CYGPKG_HAL_MN10300_AM31_STDEVAL1 { + alias { "Matsushita stdeval1 board" hal_mn10300_stdeval1 mn10300_stdeval1_hal } + directory hal/mn10300/stdeval1 + script hal_mn10300_am31_stdeval1.cdl + hardware + description " + The stdeval1 HAL package should be used when targetting the + actual hardware. The same package can also be used when + running on the full MN10300 simulator, since this provides + an accurate simulation of the full hardware including I/O + devices." +} +package CYGPKG_HAL_MN10300_AM33 { + alias { "MN10300 AM33 variant HAL" hal_mn10300_am33 mn10300_am33_hal } + directory hal/mn10300/am33 + script hal_mn10300_am33.cdl + hardware + description " + The MN10300 AM33 variant HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." +} + +package CYGPKG_HAL_MN10300_AM33_STB { + alias { "Matsushita STB board" hal_mn10300_am33_stb mn10300_am33_stb_hal } + directory hal/mn10300/stb + script hal_mn10300_am33_stb.cdl + hardware + description " + The STB HAL package should be used when targetting the + actual hardware for the AM33 STB evaluation board." +} + +package CYGPKG_HAL_MN10300_AM33_ASB { + alias { "Matsushita ASB2303 board" hal_mn10300_am33_asb mn10300_am33_asb_hal } + directory hal/mn10300/asb + script hal_mn10300_am33_asb.cdl + hardware + description " + The ASB2303 HAL package should be used when targetting the + actual hardware for the AM33 ASB2303 evaluation board." +} + +package CYGPKG_HAL_MN10300_AM33_ASB2305 { + alias { "Matsushita ASB2305 board" hal_mn10300_am33_asb2305 + mn10300_am33_asb2305_hal } + directory hal/mn10300/asb2305 + script hal_mn10300_am33_asb2305.cdl + hardware + description " + The ASB2305 HAL package should be used when targetting the + actual hardware for the AM33 ASB2305 evaluation board." +} + +# -------------------------------------------------------------------------- +# NEC packages +package CYGPKG_HAL_V85X { + alias { "NEC V85x common HAL" hal_v85x nec_arch_hal } + directory hal/v85x/arch + script hal_v85x.cdl + hardware + description " +The NEC V85x architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + +package CYGPKG_HAL_V85X_V850 { + alias { "NEC V850 variant HAL" hal_v85x_v850 nec_v850_hal } + directory hal/v85x/v850 + script hal_v85x_v850.cdl + hardware + description " +The V850 HAL package provides the support needed to run eCos on a NEC V850 +processor." +} + +package CYGPKG_HAL_V85X_V850_CEB { + alias { "Cosmo CEB-V850/SA1 board" hal_v85x_v850_ceb nec_v850_ceb_hal } + directory hal/v85x/ceb_v850 + script hal_v85x_ceb_v850.cdl + hardware + description " +The CEB-V850/SA1 HAL package provides the support needed to run eCos on a Cosmo CEB-V850/SA1 +evaluation board." +} + +# -------------------------------------------------------------------------- +# m68k packages + +package CYGPKG_HAL_M68K { + alias { "M68K common HAL" hal_m68k m68k_hal m68k_arch_hal } + directory hal/m68k/arch + script hal_m68k.cdl + hardware + + description "The M68K architecture HAL package provides generic + support for this architecture." +} + +package CYGPKG_HAL_M68K_MCFxxxx { + alias { "M68K/ColdFire variant HAL" hal_m68k_mcfxxxx m68k_mcfxxxx_hal } + directory hal/m68k/mcf52xx/var + script hal_m68k_mcf52xx.cdl + hardware + + description "The M68k/ColdFire variant HAL package provides generic + support for Freescale ColdFire cores." +} + +package CYGPKG_HAL_M68K_MCF5272 { + alias { "mcf5272 68k/ColdFire processor variant HAL" hal_m68k_mcf5272 m68k_mcf5272_hal } + directory hal/m68k/mcf52xx/mcf5272/proc + script hal_m68k_mcf5272.cdl + hardware + + description "The mcf5272 processor variant HAL package provides generic + support for this processor." +} + +package CYGPKG_HAL_M68K_M5272C3 { + alias { "Freescale m5272c3 evaluation board platform HAL" + hal_m68k_m5272c3 m68k_m5272c3_hal } + directory hal/m68k/mcf52xx/mcf5272/m5272c3 + script hal_m68k_m5272c3.cdl + hardware + + description "The Freescale m5272c3 evaluation board platform HAL + package should be used when targeting the actual hardware + for the Freescale m5272c3 evaluation board platform." +} + +package CYGPKG_DEVS_ETH_MCFxxxx { + alias { "MCFxxxx ethernet driver" devs_eth_mcfxxxx mcfxxxx_eth_driver } + hardware + directory devs/eth/m68k/mcf5272 + script mcf5272_eth.cdl + description " + This packages provides an ethernet driver for the on-chip + device provided by MCFxxxx ColdFire processors." +} + +package CYGPKG_DEVS_SERIAL_MCFxxxx { + alias { "MCFxxxx serial device driver" devs_serial_mcfxxxx mcfxxxx_serial_driver } + hardware + directory devs/serial/m68k/mcf52xx + script ser_mcf52xx.cdl + description " + This package provides serial drivers for the on-chip UART's + provided by MCFxxxx ColdFire processors." +} + +# -------------------------------------------------------------------------- +# CalmRISC16 packages + +package CYGPKG_HAL_CALM16 { + alias { "CalmRISC16 common HAL" hal_calm16 calm16_hal calm16_arch_hal } + directory hal/calmrisc16/arch/ + script hal_calm16.cdl + hardware + description " + The CalmRISC16 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a CPU variant and a specific target platform HAL + package." +} + +package CYGPKG_HAL_CALM16_CORE { + alias { "CalmRISC16 Core HAL" hal_calm16core calm16core_hal calm16core_arch_hal } + directory hal/calmrisc16/core/ + script hal_calm16_core.cdl + hardware + description " + The CalmRISC16 Core architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_CALM16_CEB { + alias { "CalmRISC16 Core eval board" hal_calm16_ceb calm16_ceb_hal } + directory hal/calmrisc16/ceb + script hal_calm16_ceb.cdl + hardware + description " + The CalmRISC16 HAL package should be used when targetting the + actual hardware. " +} +# -------------------------------------------------------------------------- +# CalmRISC32 packages + +package CYGPKG_HAL_CALM32 { + alias { "CalmRISC32 common HAL" hal_calm32 calm32_hal calm32_arch_hal } + directory hal/calmrisc32/arch/ + script hal_calm32.cdl + hardware + description " + The CalmRISC32 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a CPU variant and a specific target platform HAL + package." +} + +package CYGPKG_HAL_CALM32_CORE { + alias { "CalmRISC32 Core HAL" hal_calm32core calm32core_hal calm32core_arch_hal } + directory hal/calmrisc32/core/ + script hal_calm32_core.cdl + hardware +} + +package CYGPKG_HAL_CALM32_CEB { + alias { "CalmRISC32 Core eval board" hal_calm32_ceb calm32_ceb_hal hal_commo } + directory hal/calmrisc32/ceb + script hal_calm32_ceb.cdl + hardware + description " + The CalmRISC32 HAL package should be used when targetting the + actual hardware. " +} + + +# -------------------------------------------------------------------------- +# FUJITSU packages +package CYGPKG_HAL_FRV { + alias { "FR-V (Fujitsu) common HAL" hal_frv frv_hal frv_arch_hal } + directory hal/frv/arch + script hal_frv.cdl + hardware + description " +The FRV architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + +package CYGPKG_HAL_FRV_FRV400 { + alias { "FUJITSU development board (FR-V 400)" hal_frv_frv400 frv_frv400_hal } + directory hal/frv/frv400 + script hal_frv_frv400.cdl + hardware + description " +The FRV400 HAL package provides the support needed to run eCos on a FUJITSU +MB93091 (FR-V 400) eval board." +} + +package CYGPKG_HAL_FRV_MB93091 { + alias { "FUJITSU development board (FR-V)" mb93091 } + directory hal/frv/mb93091 + script hal_frv_mb93091.cdl + hardware + description " +The FRV Generic HAL package provides the support needed to run eCos on +various FUJITSU FR-V eval boards." +} + +package CYGPKG_HAL_FRV_MB93093 { + alias { "FUJITSU MB93093-PD00 Portable Development Kit (FR-V)" mb93093 } + directory hal/frv/mb93093 + script hal_frv_mb93093.cdl + hardware + description " +The MB93093 HAL package provides the support needed to run eCos on +the Fujitsu MB93093-PD00 Portable Development Kit board." +} + +package CYGPKG_DEVS_ETH_FRV_FRV400 { + alias { "Fujitsu FR-V 400 with 82559 ethernet driver" + devs_eth_frv_frv400 frv400_eth_driver } + hardware + directory devs/eth/frv/frv400 + script frv400_eth_drivers.cdl + description "Ethernet driver for Fujitsu FR-V 400 with Intel + i82559 ethernet interfaces." +} + +package CYGPKG_DEVS_ETH_FRV_PDK403 { + alias { "Fujitsu MB93093-PD00 with AXL88796 ethernet driver" + devs_eth_frv_pdk403 pdk403_eth_driver } + hardware + directory devs/eth/frv/pdk403 + script pdk403_eth_drivers.cdl + description "Ethernet driver for Fujitsu MB93093-PD00 Portable + Demonstration Kit with AXL88796 Ethernet device" +} + +package CYGPKG_DEVS_ETH_FRV_CB70 { + alias { "Fujitsu FR-V 405 with DM9000 ethernet driver" + devs_eth_frv_cb70 cb70_eth_driver } + hardware + directory devs/eth/frv/cb70 + script cb70_eth_driver.cdl + description "Ethernet driver for Fujitsu FR-V 405 CB70 CPU card with + Davicom DM9000 ethernet interface." +} + +# FR30 packages + +package CYGPKG_HAL_FR30 { + alias { "Fujitsu FR30 architecture (FR30/FR50/FR60)" hal_fr30 + fr30_hal } + directory hal/fr30/arch + script hal_fr30.cdl + hardware + description " +The Fujitsu FR30 HAL package provides the generic support needed to run eCos on +a FR30 based microcontroller. FR50 and FR60 architectures should also select +this one." +} + +package CYGPKG_HAL_FR30_MB91301 { + alias { "Fujitsu MB31301 variant (FR60)" hal_fr30_mb91301 + fr30_mb91301_hal } + directory hal/fr30/mb91301 + script hal_fr30_mb91301.cdl + hardware + description " +The Fujitsu MB91301 HAL package provides the support needed to run eCos on +the Fujitsu Starterkit MB91302 Evaluation board. It contains a MB91302A +Microcontroller from Fujitsu with a FR60 Core. So FR30 support is also needed." +} + +package CYGPKG_HAL_FR30_MB91301_SKMB91302 { + alias { "Fujitsu Starterkit MB91302 board" hal_fr30_skmb91302 + fr30_skmb91302_hal } + directory hal/fr30/skmb91302 + script hal_fr30_skmb91302.cdl + hardware + description " +The SKMB91302 HAL package provides the support needed to run eCos on +the Fujitsu Starterkit MB91302 board. It contains a MB91302 +Microcontroller from Fujitsu with a FR60 Core. So FR30 support is needed." +} + +package CYGPKG_DEVS_FLASH_FR30_SKMB91302 { + alias { "Fujitsu Starterkit MB91302 FLASH memory support" flash_skmb91302 } + directory devs/flash/fr30/skmb91302 + script flash_skmb91302.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Fujitsu Starterkit MB91302 platform. + (AMD 29DL640E-90 Device)" +} + +package CYGPKG_DEVS_ETH_ARM_AT91 { + alias { "AT91 Ethernet driver" at91_eth_driver } + directory devs/eth/arm/at91 + script at91_eth.cdl + hardware + description "Ethernet driver for the AT91 family of chips" +} + +package CYGPKG_DEVS_ETH_ARM_LPC2XXX { + alias { "LPC2xxx/LPC17xx Ethernet driver" } + directory devs/eth/arm/lpc2xxx + script lpc2xxx_eth.cdl + hardware + description "Ethernet driver for the LPC2xxx/LPC17xx family of chips" +} + + +# -------------------------------------------------------------------------- + +# ========================================================================== + +# -------------------------------------------------------------------------- +# FRV targets +target frv400 { + alias { "Fujitsu development board (FR-V 400)" FRV400 } + packages { CYGPKG_HAL_FRV + CYGPKG_HAL_FRV_FRV400 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_FRV_FRV400 + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_FLASH_FRV_FRV400 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " +The frv400 target provides the packages needed to run eCos on a Fujistu +development board (FR-V 400)." +} + +target mb93091 { + alias { "Fujitsu MB93091 development board (FR-V 4xx,5xx)" MB93091 } + packages { CYGPKG_HAL_FRV + CYGPKG_HAL_FRV_MB93091 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_FRV_FRV400 + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_ETH_FRV_CB70 + CYGPKG_DEVS_ETH_DAVICOM_DM9000 + CYGPKG_DEVS_FLASH_FRV_FRV400 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " +The MB93091 target provides the packages needed to run eCos on a Fujitsu +MB93091 development board (FR-V 400 etc.)." +} + +target mb93093 { + alias { "Fujitsu development board (FR-V 400)" MB93093 } + packages { CYGPKG_HAL_FRV + CYGPKG_HAL_FRV_MB93093 + CYGPKG_DEVS_ETH_FRV_PDK403 + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_FLASH_FRV_PDK403 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " +The MB93093 target provides the packages needed to run eCos on a Fujitsu +MB93090-PD00 Portable Development Kit." +} + +# FR30 Targets + +target skmb91302 { + alias { "Fujitsu Starterkit MB91302 board" } + packages { CYGPKG_HAL_FR30 + CYGPKG_HAL_FR30_MB91301 + CYGPKG_HAL_FR30_MB91301_SKMB91302 + CYGPKG_DEVS_FLASH_FR30_SKMB91302 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX +} + description " +The Starterkit MB91302 HAL package provides the support needed to run +eCos on the Fujitsu Starterkit MB91302 board. It contains a MB91302 +Microcontroller from Fujitsu with a FR60 Core. So FR30 support is +included." +} + +# -------------------------------------------------------------------------- +# ARM Targets + +target pid { + alias { "ARM development board (PID)" PID } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_PID + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_PID + CYGPKG_DEVS_FLASH_ARM_PID + CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX + } + description " +The pid target provides the packages needed to run eCos on an ARM +development board (formerly known as PID)." +} + +target aeb { + alias { "ARM evaluation board (AEB-1)" aeb1 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AEB + CYGPKG_IO_SERIAL_ARM_AEB + CYGPKG_DEVICES_WATCHDOG_ARM_AEB + } + description " +The aeb target provides the packages needed to run eCos on an ARM +evaluation board (AEB-1)." +} + +target e7t { + alias { "ARM Evaluator7T board (AEB-2)" aeb2 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_E7T + CYGPKG_DEVS_FLASH_ARM_E7T + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_SST_39VFXXX + CYGPKG_IO_SERIAL_ARM_E7T + CYGPKG_DEVS_ETH_ARM_KS32C5000 + } + description " + The e7t target provides the packages needed to run eCos on an ARM + Evaluator7T board (aka AEB-2)." +} + +target integrator_arm7 { + alias { "ARM INTEGRATOR development board w/ ARM7TDMI" integrator } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_INTEGRATOR + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_ARM_INTEGRATOR + CYGPKG_DEVS_FLASH_INTEL_28FXXX + CYGPKG_DEVS_FLASH_ARM_INTEGRATOR + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_ARM_INTEGRATOR + } + description " + The INTEGRATOR_ARM7 target provides the packages needed to + run eCos on an ARM development board with an ARM7TDMI core + module installed." +} + +target integrator_arm9 { + alias { "ARM INTEGRATOR development board w/ ARM966" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_ARM9 + CYGPKG_HAL_ARM_INTEGRATOR + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_ARM_INTEGRATOR + CYGPKG_DEVS_FLASH_INTEL_28FXXX + CYGPKG_DEVS_FLASH_ARM_INTEGRATOR + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_ARM_INTEGRATOR + } + description " + The INTEGRATOR_ARM9 target provides the packages needed to + run eCos on an ARM development board with an ARM966 core + module installed." +} + +target eb40 { + alias { "Atmel evaluation board (EB40)" at91 at91_eb40 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_EB40 + CYGPKG_DEVS_FLASH_EB40 + CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91 + } + description " + The eb40 target provides the packages needed to run eCos on an Atmel + evaluation board (EB40)." +} + +target jtst { + alias { "Atmel Diopsis evaluation board (jtst)" at91_jtst } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_JTST + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVS_FLASH_JTST + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_DEVICES_WATCHDOG_ARM_AT91 + } + description " + The jtst target provides the packages needed to run eCos on an Atmel + Diospsis evaluation board (jtst)." +} + +target at91sam7sek { + alias { "Atmel AT91SAM7SEK evaluation board" at91_at91sam7sek } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91SAM7 + CYGPKG_HAL_ARM_AT91SAM7SEK + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVS_FLASH_AT91 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_AT91 + CYGPKG_DEVS_ADC_ARM_AT91 + } + description " + The at91sam7sek target provides the packages needed to run eCos on an + Atmel AT91SAM7S-EK evaluation board." +} + +target at91sam7xek { + alias { "Atmel AT91SAM7XEK evaluation board" at91_at91sam7xek } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91SAM7 + CYGPKG_HAL_ARM_AT91SAM7XEK + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVS_FLASH_AT91 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_AT91 + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_ARM_AT91 + CYGPKG_DEVS_CAN_AT91SAM7 + CYGPKG_DEVS_ADC_ARM_AT91 + } + description " + The at91sam7xek target provides the packages needed to run eCos on an + Atmel AT91SAM7X-EK evaluation board." +} + +target sam7ex256 { + alias { "Olimex SAM7-EX256 evaluation board" at91_sam7ex256 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91SAM7 + CYGPKG_HAL_ARM_SAM7EX256 + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVS_FLASH_AT91 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91WDTC + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_AT91 + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_ARM_AT91 + CYGPKG_DEVS_CAN_AT91SAM7 + CYGPKG_DEVS_ADC_ARM_AT91 + } + description " + The SAM7EX256 target provides the packages needed to run eCos on an + Olimex SAM7-EX256 evaluation board." +} + +target eb40a { + alias { "Atmel evaluation board (EB40A)" at91_eb40a } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_EB40A + CYGPKG_DEVS_FLASH_EB40A + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91 + } + description " + The eb40a target provides the packages needed to run eCos on an Atmel + evaluation board (EB40A)." +} + +target eb42 { + alias { "Atmel evaluation board (EB42)" at91_eb42 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_EB42 + CYGPKG_DEVS_FLASH_EB42 + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_IO_SERIAL_ARM_AT91 + } + description " + The eb42 target provides the packages needed to run eCos on an Atmel + evaluation board (EB42)." +} + +target eb55 { + alias { "Atmel evaluation board (EB55)" at91_eb55 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_EB55 + CYGPKG_DEVS_FLASH_EB55 + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_DEVS_FLASH_ATMEL_DATAFLASH + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_ARM_EB55 + CYGPKG_DEVS_SPI_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91 + CYGPKG_DEVS_ADC_ARM_AT91 + } + description " + The eb55 target provides the packages needed to run eCos on an Atmel + evaluation board (EB55)." +} + +target phycore { + alias { "PHYTEC evaluation board (phyCORE AT91M55800A)" at91_phycore } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AT91 + CYGPKG_HAL_ARM_AT91_PHYCORE + CYGPKG_DEVS_FLASH_PHYCORE + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_ARM_AT91 + CYGPKG_DEVICES_WATCHDOG_ARM_AT91 + CYGPKG_DEVS_ADC_ARM_AT91 + } + description " + The phyCORE AT91M55800A target provides the packages needed to + run eCos on an PHYTEC evaluation board (phycore AT91M55800A based + on HD200)." +} + +target mcb2100 { + alias { "Keil evaluation board MCB2100" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_MCB2100 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + } + description " + The mcb2100 target provides the packages needed to run eCos on the + MCB2100 evaluation board from Keil." +} + +target p2106 { + alias { "Olimex evaluation board LPC-P2106" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_P2106 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + } + description " + The p2106 target provides the packages needed to run eCos on the + LPC-P2106 evaluation board from Olimex." +} + +target lpcmt { + alias { "Olimex evaluation board LPC-LPCMT" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_LPCMT + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + } + description " + The lpcmt target provides the packages needed to run eCos on the + LPC-LPCMT evaluation board from Olimex." +} + +target phycore229x { + alias { "phyCORE-LPC2294/92 development board HAL" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_PHYCORE229X + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_PHYCORE229X + CYGPKG_DEVS_ETH_ARM_PHYCORE229X + CYGPKG_DEVS_ETH_SMSC_LAN91CXX + CYGPKG_DEVS_CAN_LPC2XXX + } + description " + The phyCORE-LPC229x HAL package provides the support + needed to run eCos on a Phytec phyCORE-LPC2294/2 + development board." +} + +target ea2468 { + alias { "Embedded Artists LPC2468 OEM board HAL" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC24XX + CYGPKG_HAL_ARM_LPC24XX_EA2468 + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC24XX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + CYGPKG_DEVS_CAN_LPC2XXX + CYGPKG_DEVS_FLASH_EA2468 + CYGPKG_DEVS_FLASH_SST_39VFXXX + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_ARM_LPC2XXX + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_ARM_LPC2XXX + CYGPKG_DEVS_ADC_ARM_LPC24XX + CYGPKG_DEVS_NAND_SAMSUNG_K9 + } + description " + The Embedded Artists LPC2468 HAL package provides the support + needed to run eCos on an Embedded Artists LPC2468 OEM board." +} + +target olpch2294 { + alias { "Olimex LPC-H2294 header board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_OLPCH2294 + CYGPKG_DEVS_FLASH_STRATA_V2 + CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + } + description " + The olpch2294 target provides the packages needed to run + eCos on Olimex LPC-H2294 header board." +} + + +target olpce2294 { + alias { "Olimex LPC-E2294 development board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_OLPCE2294 + CYGPKG_DEVS_FLASH_STRATA_V2 + CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 + CYGPKG_DEVS_ETH_CL_CS8900A + CYGPKG_DEVS_ETH_ARM_OLPCE2294 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + CYGPKG_DEVS_CAN_LPC2XXX + } + description " + The olpce2294 target provides the packages needed to run + eCos on Olimex LPC-E2294 development board." +} + +target olpcl2294 { + alias { "Olimex LPC-L2294-1MB development board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_LPC2XXX + CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 + CYGPKG_DEVS_FLASH_STRATA_V2 + CYGPKG_DEVS_FLASH_ARM_OLPCX2294_V2 + CYGPKG_DEVS_ETH_CL_CS8900A + CYGPKG_DEVS_ETH_ARM_OLPCL2294 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC2XXX + CYGPKG_DEVICES_WATCHDOG_ARM_LPC2XXX + CYGPKG_DEVS_CAN_LPC2XXX + } + description " + The olpcl2294 target provides the packages needed to run + eCos on Olimex LPC-L2294-1MB development board." +} + +target mace1 { + alias { "MACE1 - a MAC7100 evaluation board" mac7100_mace1 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_MAC7100 + CYGPKG_HAL_ARM_MAC7100_MACE1 + CYGPKG_IO_SERIAL_FREESCALE_ESCI_H + CYGPKG_IO_SERIAL_FREESCALE_ESCI + } + description " + The mace1 target provides the packages needed to run eCos + on MAC7100 evaluation board (MACE1). " +} + +target mac7100evb { + alias { "MAC7100EVB - Freescale MAC7100 evaluation board" mac7100_mac7100evb } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_MAC7100 + CYGPKG_HAL_ARM_MAC7100_MAC7100EVB + CYGPKG_IO_SERIAL_FREESCALE_ESCI_H + CYGPKG_IO_SERIAL_FREESCALE_ESCI + } + description " + The MAC7100EVB target provides the packages needed to run eCos + on Freescale MAC7100EVB evaluation board. " +} + +target ebsa285 { + alias { "Intel EBSA285 StrongARM board" ebsa } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_EBSA285 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_ARM_EBSA285 + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_IO_SERIAL_ARM_EBSA285 + CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 + CYGPKG_DEVS_FLASH_EBSA285 + } + description " + The ebsa285 target provides the packages needed to run + eCos on an Intel EBSA285 StrongARM board." +} + + +target aaed2000 { + alias { "Agilent AAED2000 unit" aaed } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_ARM9 + CYGPKG_HAL_ARM_ARM9_AAED2000 + CYGPKG_DEVS_FLASH_ARM_AAED2000 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_ETH_CL_CS8900A + CYGPKG_DEVS_ETH_ARM_AAED2000 + CYGPKG_DEVS_KBD_AAED2000 + CYGPKG_DEVS_TOUCH_AAED2000 + } + description " + The AAED2000 target provides the packages needed to run + eCos on an Agilent AAED2000 board." +} + +target excalibur_arm9 { + alias { "Altera ARM9/Excalibur board" epxa10 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_ARM9 + CYGPKG_HAL_ARM_ARM9_EXCALIBUR + CYGPKG_DEVS_FLASH_INTEL_28FXXX + CYGPKG_DEVS_FLASH_ARM_EXCALIBUR + } + description " + The Excalibur target provides the packages needed to run + eCos on an Altera Excalibur board." +} + +target smdk2410 { + alias { "Samsung ARM9/SMDK2410 development board" s3c2410x } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_ARM9 + CYGPKG_HAL_ARM_ARM9_SMDK2410 + CYGPKG_IO_SERIAL_ARM_SMDK2410 + CYGPKG_DEVS_FLASH_ARM_SMDK2410 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " + The SMDK2410 target provides the packages needed to run eCos on + Samsung S3c2410x (ARM920T) based development boards (SMDK2410)." +} + +target innovator { + alias { "Innovator (ARM) board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_ARM9 + CYGPKG_HAL_ARM_ARM9_INNOVATOR + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_ARM_INNOVATOR + CYGPKG_DEVS_ETH_SMSC_LAN91CXX + CYGPKG_DEVS_ETH_ARM_INNOVATOR + } + description " + The Innovator HAL package provides the support needed to run + RedBoot on the ARM processor of the Innovator. + + NOTE: Full support for eCos is not provided yet. This HAL + contains only the minimum amount necessary to run RedBoot + on the Innovator. In particular, interrupts are not yet + supported. Watch this space for more details in the near + future." +} + +target assabet { + alias { "Intel StrongARM SA1110 board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_ASSABET + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_PCMCIA_ASSABET + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_ASSABET + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_SA11X0 + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + CYGPKG_DEVS_ETH_CF + CYGPKG_DEVS_ETH_NS_DP83902A + } + description " + The assabet target provides the packages needed to run + eCos on an Intel StrongARM SA1110 evaluation board." +} + +target cerf { + alias { "Intrinsyc SA1110 Cerf board" cerf_cube } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_CERF + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_PCMCIA_CERF + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_CERF + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_SA11X0 + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + CYGPKG_DEVS_ETH_CF + CYGPKG_DEVS_ETH_ARM_CERF + CYGPKG_DEVS_ETH_CL_CS8900A + } + description " + The cerf target provides the packages needed to run + eCos on an Intrinsyc SA1110 Cerf board." +} + +target cerfpda { + alias { "Intrinsyc SA1110 Cerfpda" cerf_pda } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_CERFPDA + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_CERFPDA + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_PCMCIA_CERFPDA + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_CERFPDA + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_SA11X0 + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + CYGPKG_DEVS_ETH_CF + CYGPKG_DEVS_ETH_ARM_CERFPDA + CYGPKG_DEVS_ETH_CL_CS8900A + } + description " + The cerfpda target provides the packages needed to run + eCos on an Intrinsyc SA1110 cerfpda." +} + +target ipaq { + alias { "Compaq iPAQ Pocket PC" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_IPAQ + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_PCMCIA_IPAQ + CYGPKG_DEVS_FLASH_IPAQ + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + CYGPKG_DEVS_TOUCH_IPAQ + CYGPKG_DEVS_KBD_IPAQ + CYGPKG_DEVS_ETH_CF + CYGPKG_DEVS_ETH_NS_DP83902A + } + description " + The IPAQ target provides the packages needed to run + eCos on an Intel StrongARM SA1110 Pocket PC (Compaq iPAQ)." +} + + +target nano { + alias { "nanoEngine StrongARM SA1110 board" nanoEngine } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_NANO + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_FLASH_NANO + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_ARM_NANO + CYGPKG_DEVS_ETH_INTEL_I82559 + } + description " + The nanoEngine target provides the packages needed to run + eCos on a Bright Star Engineering nanoEngine StrongARM SA1110 board." +} + +target flexanet { + alias { "Flexanet StrongARM SA1110 platform" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_FLEXANET + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_FLEXANET + CYGPKG_DEVS_ETH_SMSC_LAN91CXX + CYGPKG_DEVS_ETH_ARM_FLEXANET + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_SA11X0 + CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 + } + description " + The Flexanet target provides the packages needed to run + eCos on an SA1110 Flexanet board." +} + +target brutus { + alias { "Intel StrongARM SA1100 board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_BRUTUS + CYGPKG_IO_SERIAL_ARM_SA11X0 + } + description " + The brutus target provides the packages needed to run + eCos on an Intel StrongARM SA1100 evaluation board." +} + +target sa1100mm { + alias { "Intel StrongARM SA1100 Multimedia board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_SA1100MM + CYGPKG_IO_SERIAL_ARM_SA11X0 + CYGPKG_DEVS_FLASH_SA1100MM + } + description " + The sa1100mm target provides the packages needed to run + eCos on an Intel StrongARM SA1100 Multimedia evaluation board." +} + +target iq80310 { + alias { "Intel IQ80310 XScale board" cyclone } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_IOP310 + CYGPKG_HAL_ARM_XSCALE_IQ80310 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_ARM_XSCALE_IQ80310 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 + CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 + } + description " + The iq80310 target provides the packages needed to run + eCos on a Cyclone IQ80310 board." +} + +target npwr { + alias { "NPWR Linux Engine (Intel XScale)" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_IOP310 + CYGPKG_HAL_ARM_XSCALE_NPWR + CYGPKG_DEVS_FLASH_ARM_XSCALE_IQ80310 + CYGPKG_DEVS_ETH_INTEL_I82544 + CYGPKG_DEVS_ETH_ARM_XSCALE_NPWR + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_XSCALE_IOP310 + } + description " + The npwr target provides the packages needed to run + eCos on a NPWR Linux Engine." +} + +target iq80321 { + alias { "Intel XScale IQ80321 Board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_VERDE + CYGPKG_HAL_ARM_XSCALE_IQ80321 + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_IQ80321 + CYGPKG_DEVS_ETH_INTEL_I82544 + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_IQ80321 + CYGPKG_DEVS_ETH_ARM_IQ80321 + } + description " + The IQ80321 target provides the packages needed to run + eCos on an Intel XScale IQ80321 board." +} + +target ixdp425 { + alias { "IXDP425 board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_IXP425 + CYGPKG_HAL_ARM_XSCALE_IXDP425 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 + CYGPKG_DEVS_FLASH_STRATA_V2 + } + description " + The ixdp425 target provides the packages needed to run + eCos on an Intel network processor evaluation board." +} + +target XSEngine { + alias { "Exys XSEngine Board" xsengine } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_PXA2X0 + CYGPKG_HAL_ARM_XSCALE_XSENGINE + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_XSENGINE + CYGPKG_DEVS_ETH_SMSC_LAN91CXX + CYGPKG_DEVS_ETH_ARM_XSCALE_XSENGINE + } + description " + The XSEngine target provides the packages needed to run + eCos on an Exys XSEngine board." +} + +target grg { + alias { "Generic Residential Gateway" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_IXP425 + CYGPKG_HAL_ARM_XSCALE_GRG + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_ARM_GRG_I82559 + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_GRG + } + description " + The grg target provides the packages needed to run + eCos on an Intel Generic Residential Gateway board." +} + +target prpmc1100 { + alias { "Motorola PrPMC1100" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_IXP425 + CYGPKG_HAL_ARM_XSCALE_PRPMC1100 + CYGPKG_IO_PCI + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_PRPMC1100 + } + description " + The prpmc1100 target provides the packages needed to run + eCos on a Motorola PrPMC1100." +} + +target edb7xxx { + alias { "Cirrus Logic EDB7xxx development board" edb7211 eb7xxx eb7211 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_EDB7XXX + CYGPKG_DEVS_ETH_ARM_EDB7XXX + CYGPKG_DEVS_ETH_CL_CS8900A + CYGPKG_IO_SERIAL_ARM_EDB7XXX + CYGPKG_DEVS_FLASH_EDB7XXX + } + description " +The edb7xxx target provides the packages needed to run eCos on the Cirrus Logic EDB7xxx development boards." + } + +target pati { + alias { "MPL PATI" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC5xx + CYGPKG_HAL_POWERPC_PATI + CYGPKG_IO_SERIAL_POWERPC_MPC555 + CYGPKG_DEVICES_WALLCLOCK_MPC5xx + CYGPKG_DEVS_FLASH_PATI + CYGPKG_DEVS_FLASH_INTEL_28FXXX + } + description " + The pati target provides the packages needed to run + eCos on a PATI MPC555 PC/104+ board from MLP + elektronik." +} + +target cma230 { + alias { "Cogent CMA230/222 board" cma222 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_CMA230 + CYGPKG_IO_SERIAL_ARM_CMA230 + } + description " +The cma230 target provides the packages needed to run eCos on a Cogent +CMA230 (ARM7TDMI) or CMA222 (ARM710T) board." + } + + +target snds { + alias { "Samsung SNDS" SNDS snds100 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SNDS + CYGPKG_DEVS_ETH_ARM_KS32C5000 + } + enable { CYGHWR_HAL_ARM_BIGENDIAN } + description " + The snds target provides the packages needed to run eCos on a + Samsung SNDS eval board." +} + +target aim711 { + alias { "ARM Industrial Module AIM 711" AIM711 } + packages { + CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_AIM711 + CYGPKG_DEVS_FLASH_SST_39VFXXX + CYGPKG_DEVS_FLASH_ARM_AIM711 + CYGPKG_DEVS_ETH_ARM_KS32C5000 + CYGPKG_IO_SERIAL_ARM_AIM711 + CYGPKG_IO_SERIAL_ARM_S3C4510 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVICES_WALLCLOCK_ARM_AIM711 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 + } + description " + The aim711 target provides the packages needed to run eCos on a + ARM Industrial Module AIM 711." + } + + +target mpc50 { + alias { "MICROPLEX Printer Controller 5.0" } + packages { + CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_PXA2X0 + CYGPKG_HAL_ARM_XSCALE_MPC50 + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_MPC50 + } + description " + MICROPLEX Printer Controller 5.0" +} + +# -------------------------------------------------------------------------- +# SH targets + +target sh7708 { + alias { "Hitachi EDK/SH7708 board" edk7708 } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 + CYGPKG_HAL_SH_EDK7708 + CYGPKG_DEVICES_WALLCLOCK_SH3 + CYGPKG_IO_SERIAL_SH_SCI + CYGPKG_IO_SERIAL_SH_EDK7708 + CYGPKG_DEVICES_WATCHDOG_SH_SH3 + CYGPKG_DEVS_FLASH_SH_EDK7708 + CYGPKG_DEVS_FLASH_ATMEL_AT29CXXXX + } + description " + The sh7708 target provides the packages needed to run + eCos on a Hitachi EDK/SH7708 board." +} +target cq7708 { + alias { "CqREEK SH7708 board" } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 + CYGPKG_HAL_SH_SH7708_CQ7708 + CYGPKG_IO_SERIAL_SH_SCI + CYGPKG_IO_SERIAL_SH_CQ7708 + } + description " + The cq7708 target provides the packages needed to run + eCos on a CqREEK SH7708 board." +} + +target cq7750 { + alias { "CqREEK SH7750 board" cqsh4 } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH4 + CYGPKG_HAL_SH_SH7750_CQ7750 + CYGPKG_DEVS_FLASH_CQ7750 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_SH_SCIF } + description " + The sh7750 target provides the packages needed to run + eCos on a CqREEK SH7750 board." +} + +target hs7729pci { + alias { "Hitachi HS7729PCI board" hs7729 } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 + CYGPKG_HAL_SH_SH7729_HS7729PCI + CYGPKG_DEVS_FLASH_SH_HS7729PCI + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_SH_HS7729PCI + CYGPKG_DEVS_ETH_VIA_RHINE + CYGPKG_DEVICES_WATCHDOG_SH_SH3 + CYGPKG_DEVICES_WALLCLOCK_SH_HS7729PCI + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + } + description " + The hs7729pci target provides the packages needed to run + eCos on a Hitachi HS7729PCI board." +} + +target se77x9 { + alias { "Hitachi SE77x9 board" } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 + CYGPKG_HAL_SH_SH77X9_SE77X9 + CYGPKG_DEVS_FLASH_SH_SE77X9 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_ETH_SH_SE77X9 + CYGPKG_IO_SERIAL_SH_SE77X9 + CYGPKG_IO_SERIAL_SH_SCIF + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVICES_WATCHDOG_SH_SH3 + } + description " + The se77x9 target provides the packages needed to run + eCos on a Hitachi Solution Engine 77x9 board." +} + +target se7751 { + alias { "Hitachi SE7751 board" } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH4 + CYGPKG_HAL_SH_SH7751_SE7751 + CYGPKG_IO_PCI + CYGPKG_DEVS_FLASH_SH_SE7751 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_SH_SCIF + CYGPKG_DEVICES_WATCHDOG_SH_SH3 + CYGPKG_DEVS_ETH_SH_SE7751 + CYGPKG_DEVS_ETH_AMD_PCNET + } + description " + The se7751 target provides the packages needed to run + eCos on a Hitachi Solution Engine 7751 board." +} + +target dreamcast { + alias { "SEGA Dreamcast" } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH4 + CYGPKG_HAL_SH_SH7750_DREAMCAST + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_RLTK_8139 + CYGPKG_DEVS_ETH_SH_DREAMCAST_RLTK8139 + CYGPKG_IO_SERIAL_SH_SCIF } + description " + The sh7750 target provides the packages needed to run + eCos on SEGA Dreamcast." +} + +target sh4_202_md { + alias { "SuperH SH4-202 MicroDev CPU board" } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH4 + CYGPKG_HAL_SH_SH4_202_MD + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_SH_MICRODEV + CYGPKG_IO_SERIAL_SH_SCIF + CYGPKG_IO_SERIAL_SH_SH4_202_MD + CYGPKG_DEVS_ETH_SH_MICRODEV + CYGPKG_DEVS_ETH_SMSC_LAN91CXX + } + description " + The sh4_202_md target provides the packages needed to run + eCos on a SuperH SH4-202 MicroDev CPU board." +} + +# -------------------------------------------------------------------------- +# i386 targets +target pc_i82559 { + alias { "i386 PC target with i82559 ethernet" pc } + packages { CYGPKG_HAL_I386 + CYGPKG_HAL_I386_GENERIC + CYGPKG_HAL_I386_PC + CYGPKG_HAL_I386_PCMB + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_I386_PC + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_I386_PC_I82559 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + CYGPKG_DEVICES_WALLCLOCK_I386_PC + } + description " + The pc_i82559 target provides the + packages needed to run eCos binaries on a standard i386 + PC motherboard with an Intel 82559 based ethernet interface." +} + +target pc_i82544 { + alias { "i386 PC target with i82544 gigabit ethernet" pc_giga } + packages { CYGPKG_HAL_I386 + CYGPKG_HAL_I386_GENERIC + CYGPKG_HAL_I386_PC + CYGPKG_HAL_I386_PCMB + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_I386_PC + CYGPKG_DEVS_ETH_INTEL_I82544 + CYGPKG_DEVS_ETH_I386_PC_I82544 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + CYGPKG_DEVICES_WALLCLOCK_I386_PC + } + description " + The pc_i82544 target provides the packages needed to run eCos binaries + on a standard i386 PC motherboard with an Intel 82543/82544 based + gigabit ethernet interface." +} + +target pc_vmWare { + alias { "i386 PC target (vmWare)" } + packages { CYGPKG_HAL_I386 + CYGPKG_HAL_I386_GENERIC + CYGPKG_HAL_I386_PC + CYGPKG_HAL_I386_PCMB + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_I386_PC + CYGPKG_DEVS_ETH_AMD_LANCEPCI + CYGPKG_DEVS_ETH_I386_PC_LANCEPCI + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + CYGPKG_DEVICES_WALLCLOCK_I386_PC + } + description " + The pc_vmWare target provides the packages needed to run eCos binaries + on a standard i386 PC under wmWare." +} + + +target pc_usb_d12 { + alias { "i386 PC target with SoRo PC/104 D12 USB Slave" } + packages { CYGPKG_HAL_I386 + CYGPKG_HAL_I386_GENERIC + CYGPKG_HAL_I386_PC + CYGPKG_HAL_I386_PCMB + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_I386_PC + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_D12 + CYGPKG_DEVS_USB_I386_SOROD12 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + CYGPKG_DEVICES_WALLCLOCK_I386_PC + } + description " + Provides the packages needed to run eCos binaries + on a standard i386 PC motherboard with USB Slave support for the + Philips D12 chip." +} + +# -------------------------------------------------------------------------- +# Synthetic targets. +target linux { + alias { "Linux synthetic target" i386linux } + packages { CYGPKG_HAL_SYNTH + CYGPKG_HAL_SYNTH_I386 + CYGPKG_DEVS_FLASH_SYNTH_V2 + CYGPKG_DEVS_ETH_ECOSYNTH + CYGPKG_DEVS_WATCHDOG_SYNTH + CYGPKG_DEVS_WALLCLOCK_SYNTH + CYGPKG_DEVS_FRAMEBUF_SYNTH + CYGPKG_DEVS_ADC_SYNTH + CYGPKG_DEVS_DISK_ECOSYNTH + CYGPKG_DEVS_NAND_SYNTH + } + description " + The linux target provides the + packages needed to run eCos binaries on top of the i386 + Linux kernel." +} + +# -------------------------------------------------------------------------- +# SPARClite targets + +target sleb { + alias { "Fujitsu MB86800-MA01 board" } + packages { CYGPKG_HAL_SPARCLITE + CYGPKG_HAL_SPARCLITE_SLEB + CYGPKG_IO_SERIAL_SPARCLITE_SLEB + } + description " + The sleb target provides the packages need to run eCos + on a Fujitsu MB86800-MA01 board." +} + +target sparclite_sim { + alias { "SPARClite simulator" sl_sim sparcl_sim } + packages { CYGPKG_HAL_SPARCLITE + CYGPKG_HAL_SPARCLITE_SIM + } + description " + The sparclite_sim target provides the packages need to run eCos + on the SPARClite simulator." +} + +# -------------------------------------------------------------------------- +# SPARC V7/V8 targets + +target sparc_erc32 { + alias { "ERC32 processor" erc32 } + packages { CYGPKG_HAL_SPARC + CYGPKG_HAL_SPARC_ERC32 + } + description " + The sparc_erc32 target provides the packages need to run eCos + on the ERC32 processor or TSIM/ERC32 simulator." +} + +target sparc_leon { + alias { "LEON processor" leon } + packages { CYGPKG_HAL_SPARC + CYGPKG_HAL_SPARC_LEON + } + description " + The sparc_leon target provides the packages need to run eCos + on the LEON processor or TSIM/LEON simulator." +} + +# -------------------------------------------------------------------------- +# PowerPC targets +target cme555 { + alias { "Axiom's CME555 board" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC5xx + CYGPKG_HAL_POWERPC_CME555 + CYGPKG_DEVS_FLASH_CME555 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_POWERPC_MPC555 + CYGPKG_DEVICES_WALLCLOCK_MPC5xx + } + description " + The cme555 target provides the packages needed to run + eCos on a CME555 MPC555 evaluation board from Axiom + Manufacturing." +} + +target ec555 { + alias { "Wuerz ec555" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC5xx + CYGPKG_HAL_POWERPC_EC555 + CYGPKG_DEVS_FLASH_EC555 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_POWERPC_MPC555 + CYGPKG_DEVICES_WALLCLOCK_MPC5xx + } + description " + The ec555 target provides the packages needed to run + eCos on a EC555 MPC555 development board from Wuerz + elektronik." +} + +target cma28x { + alias { "Cogent CMA286/287 board" cma286 cma287 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_COGENT + CYGPKG_IO_SERIAL_POWERPC_COGENT + } + description " + The cma28x target provides the packages needed to run + eCos on a Cogent CMA286 or CMA287 board." +} + +target fads { + alias { "Motorola MPC8xxFADS board" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_FADS + } + description " + The fads target provides the packages needed to run + eCos on a Motorola MPC8xxFADS board." +} + +target mbx { + alias { "Motorola MBX860/821 board" mbx860 mbx821 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_MBX + CYGPKG_HAL_QUICC + CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC + CYGPKG_DEVS_ETH_POWERPC_QUICC + CYGPKG_DEVS_ETH_POWERPC_MBX + CYGPKG_DEVS_FLASH_MBX + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " + The mbx target provides the packages needed to run + eCos on a Motorola MBX860 or MBX821 board." +} + +target ts6 { + alias { "Delphi TigerSHARC-6 board" Pleiades sixpack } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8260 + CYGPKG_HAL_POWERPC_TS6 + CYGPKG_DEVS_ETH_POWERPC_QUICC2 + CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC + CYGPKG_DEVS_FLASH_TS6 + CYGPKG_DEVS_FLASH_INTEL_28FXXX + } + description " + The ts6 target provides the packages needed to run + eCos on a Delphi TigerSHARC-6 board." +} + +target vads { + alias { "Motorola MPC8260 VADS board" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8260 + CYGPKG_HAL_POWERPC_VADS + CYGPKG_IO_SERIAL_POWERPC_QUICC2_SCC + CYGPKG_DEVS_ETH_POWERPC_QUICC2 + CYGPKG_DEVS_FLASH_VADS + CYGPKG_DEVS_FLASH_INTEL_28FXXX + } + description " + The vads target provides the packages needed to run + eCos on a Motorola MPC8260 VADS board." +} + +target viper { + alias { "A&M Viper PPC860 board" viper860 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_VIPER + CYGPKG_HAL_QUICC + CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC + CYGPKG_DEVS_ETH_POWERPC_FEC + CYGPKG_DEVS_ETH_POWERPC_VIPER + CYGPKG_DEVS_FLASH_VIPER + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + } + description " + The viper target provides the packages needed to run + eCos on a A&M Viper PPC860 board." +} + +target psim { + alias { "PowerPC simulator" ppc_sim powerpc_sim } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_PPC60x + CYGPKG_HAL_POWERPC_SIM + } + description " + The psim target provides the packages needed to run + eCos in the PSIM simulator." +} + +##------------------------------------------------------------------------------------------- +## Cogent CSB281 (PowerPC 8245) packages +## +package CYGPKG_HAL_POWERPC_CSB281 { + alias { "Cogent PowerPC 8245 board" hal_powerpc_csb281 } + directory hal/powerpc/csb281 + script hal_powerpc_csb281.cdl + hardware + description " + The CSB281 HAL package provides the support needed to run + eCos on a Cogent PowerPC 8245 board." +} + +package CYGPKG_DEVS_FLASH_CSB281 { + alias { "FLASH memory support for Cogent PowerPC 8245 board" flash_csb281 } + directory devs/flash/powerpc/csb281 + script flash_csb281.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Cogent CSB281 (PowerPC 8245) board." +} + +package CYGPKG_DEVS_ETH_CSB281 { + alias { "Cogent CSB281 (PowerPC 8245) 82559 ethernet driver" + devs_eth_csb281 } + hardware + directory devs/eth/powerpc/csb281 + script csb281_eth_drivers.cdl + description "Ethernet driver for Cogent CSB281 (PowerPC 8245) + with Intel i82559 ethernet interfaces." +} + +target csb281 { + alias { "Cogent PowerPC 8245" cogent8245 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_PPC60x + CYGPKG_HAL_POWERPC_CSB281 + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_CSB281 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_CSB281 + CYGPKG_DEVS_ETH_INTEL_I82559 + } + description " + The csb281 target provides the packages needed to run + eCos on the Cogent CSB281 (8245) board." +} +##------------------------------------------------------------------------------------------- + +# -------------------------------------------------------------------------- +# MIPS targets + +target jmr3904 { + alias { "Toshiba JMR-TX3904 board" jmr tx39 } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_TX39 + CYGPKG_HAL_MIPS_TX39_JMR3904 + CYGPKG_IO_SERIAL_TX39_JMR3904 + } + description " + The jmr3904 target provides the packages needed to run + eCos on a Toshiba JMR-TX3904 board. This target can also + be used when running in the full simulator, since the simulator provides an + accurate simulation of the hardware including I/O devices. + To use the simulator in this mode the command + `target sim --board=jmr3904' should be used from inside gdb." +} + +target atlas_mips32_4kc { + alias { "MIPS Atlas board with Mips32 4Kc processor" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_MIPS32 + CYGPKG_HAL_MIPS_ATLAS + CYGPKG_IO_SERIAL_MIPS_ATLAS + CYGPKG_DEVS_FLASH_ATLAS + CYGPKG_DEVS_ETH_MIPS_ATLAS + CYGPKG_IO_PCI + } + set_value CYGHWR_HAL_MIPS_MIPS32_CORE "4Kc" + description " + The atlas_mips32_4Kc target provides the packages needed to run + eCos on a MIPS Atlas board with a Mips32 4Kc processor." +} + +target atlas_mips64_5kc { + alias { "MIPS Atlas board with Mips64 5Kc processor" ruby } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_MIPS64 + CYGPKG_HAL_MIPS_ATLAS + CYGPKG_IO_SERIAL_MIPS_ATLAS + CYGPKG_DEVS_FLASH_ATLAS + CYGPKG_DEVS_ETH_MIPS_ATLAS + } + set_value CYGHWR_HAL_MIPS_MIPS64_CORE "5K" + description " + The atlas_mips32_5Kc target provides the packages needed to run + eCos on a MIPS Atlas board with a Mips64 5Kc processor." +} +target malta_mips32_4kc { + alias { "MIPS Malta board with Mips32 4Kc processor" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_MIPS32 + CYGPKG_HAL_MIPS_MALTA + CYGPKG_DEVS_FLASH_INTEL_28FXXX + CYGPKG_DEVS_FLASH_MALTA + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_AMD_PCNET + CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA + } + set_value CYGHWR_HAL_MIPS_MIPS32_CORE "4Kc" + description " + The malta_mips32_4Kc target provides the packages needed to run + eCos on a MIPS Malta board with a Mips32 4Kc processor." +} + +target malta_mips64_5kc { + alias { "MIPS Malta board with Mips64 5Kc processor" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_MIPS64 + CYGPKG_HAL_MIPS_MALTA + CYGPKG_DEVS_FLASH_INTEL_28FXXX + CYGPKG_DEVS_FLASH_MALTA + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_AMD_PCNET + CYGPKG_DEVS_ETH_MIPS_MIPS32_MALTA + } + set_value CYGHWR_HAL_MIPS_MIPS64_CORE "5K" + description " + The malta_mips64_5Kc target provides the packages needed to run + eCos on a MIPS Malta board with a Mips64 5Kc processor." +} +target tx39_sim { + alias { "TX39 minimal simulator" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_TX39 + CYGPKG_HAL_MIPS_SIM + } + description " + The tx39_sim target provides the packages needed to run + eCos in the TX39 minimal simulator. To use this minimal + simulator the command `target sim --board=jmr3904pal' + should be used from inside gdb. It is not possible to + use any of the eCos device drivers when the simulator + is running in this mode." +} +target ref4955 { + alias { "Toshiba TX4955 reference platform" tx49 } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_TX49 + CYGPKG_HAL_MIPS_TX49_REF4955 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_MIPS_REF4955 + CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 + } + description " + The ref4955 target provides the packages needed to run + eCos on a Toshiba TX4955 reference platform." +} + +target ocelot { + alias { "PMC-Sierra Ocelot platform" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_RM7000 + CYGPKG_HAL_MIPS_RM7000_OCELOT + CYGPKG_IO_PCI + CYGPKG_DEVS_FLASH_MIPS_OCELOT + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_MIPS_RM7000_OCELOT + } + description " + The ocelot target provides the packages needed to run + eCos on a PMC-Sierra Ocelot Hot-Swap Computer." +} + +target vrc4373 { + alias { "NEC VRC4373 board" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_VR4300 + CYGPKG_HAL_MIPS_VR4300_VRC4373 + CYGPKG_HAL_MIPS_VR4300_VRC437X + CYGPKG_IO_SERIAL_MIPS_VRC437X + CYGPKG_DEVS_FLASH_MIPS_VRC437X + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_PCI + } + description " + The vrc4373 target provides the packages needed to run + eCos on an NEC VRC4373 board." +} +target vrc4375 { + alias { "NEC VRC4375 board" } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_VR4300 + CYGPKG_HAL_MIPS_VR4300_VRC4375 + CYGPKG_HAL_MIPS_VR4300_VRC437X + CYGPKG_IO_SERIAL_MIPS_VRC437X + CYGPKG_DEVS_FLASH_MIPS_VRC437X + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_INTEL_I21143 + CYGPKG_DEVS_ETH_MIPS_VRC4375 + } + description " + The vrc4375 target provides the packages needed to run + eCos on an NEC VRC4375 board." +} + +target refidt334 { + alias { "MIPS IDT79S334A reference platform" idt32334 } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_IDT32334 + CYGPKG_HAL_MIPS_IDT32334_REFIDT334 + CYGPKG_IO_PCI + CYGPKG_DEVS_ETH_INTEL_I82559 + CYGPKG_DEVS_ETH_MIPS_REFIDT334 + CYGPKG_DEVS_FLASH_MIPS_REFIDT334 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_IO_SERIAL_MIPS_IDT79S334A + } + description " + The refidt334 target provides the packages needed to run + eCos on a MIPS IDT IDT79S334A reference board." +} + +# -------------------------------------------------------------------------- +# MN10300 targets + +target am31_sim { + alias { "MN10300 AM31 minimal simulator" } + packages { CYGPKG_HAL_MN10300 + CYGPKG_HAL_MN10300_AM31 + CYGPKG_HAL_MN10300_AM31_SIM + } + description " + The am31_sim target provides the packages need to run + eCos in the MN10300 minimal simulator. It is not possible to + use any of the eCos device drivers when the simulator + is running in this mode." +} + +target stdeval1 { + alias { "Matsushita stdeval1 board" } + packages { CYGPKG_HAL_MN10300 + CYGPKG_HAL_MN10300_AM31_STDEVAL1 + CYGPKG_HAL_MN10300_AM31 + CYGPKG_IO_SERIAL_MN10300 + CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 + } + description " + The stdeval1 target provides the packages needed to run + eCos on a Matsushita stdeval1 board. This target can also + be used when running in the full simulator, since the simulator provides an + accurate simulation of the hardware including I/O devices." +} +target stb { + alias { "Matsushita STB board" } + packages { CYGPKG_HAL_MN10300 + CYGPKG_HAL_MN10300_AM33_STB + CYGPKG_HAL_MN10300_AM33 + CYGPKG_IO_SERIAL_MN10300 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_MN10300_STB + CYGPKG_DEVICES_WATCHDOG_MN10300_MN10300 + } + description " + The stb target provides the packages needed to run + eCos on a Matsushita STB board." +} + +target asb { + alias { "Matsushita ASB2303 board" } + packages { CYGPKG_HAL_MN10300 + CYGPKG_HAL_MN10300_AM33_ASB + CYGPKG_HAL_MN10300_AM33 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_MN10300_ASB2303 + } + description " + The asb target provides the packages needed to run + eCos on a Matsushita ASB2303 board." +} + +target asb2305 { + alias { "Matsushita ASB2305 board" } + packages { CYGPKG_HAL_MN10300 + CYGPKG_HAL_MN10300_AM33_ASB2305 + CYGPKG_HAL_MN10300_AM33 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_FLASH_MN10300_ASB2305 + } + description " + The asb2305 target provides the packages needed to run + eCos on a Matsushita ASB2305 board." +} + +# -------------------------------------------------------------------------- +# NEC targets + +target ceb_v850 { + alias { "Cosmo CEB-V850 board" CEB ceb_v850_sa1 } + packages { CYGPKG_HAL_V85X + CYGPKG_HAL_V85X_V850 + CYGPKG_HAL_V85X_V850_CEB + CYGPKG_IO_SERIAL_V85X_V850 + } + description " +The ceb_v850 target provides the packages needed to run eCos on a +Cosmo CEB-V850 evaluation board fitted with a NEC V850/SA1 or NEC V850/SB1." +} + +# -------------------------------------------------------------------------- +# m68k targets + +target m5272c3 { + alias { "Freescale m5272c3 evaluation board" } + packages { + CYGPKG_HAL_M68K + CYGPKG_HAL_M68K_MCFxxxx + CYGPKG_HAL_M68K_MCF5272 + CYGPKG_HAL_M68K_M5272C3 + CYGPKG_DEVS_ETH_MCFxxxx + CYGPKG_DEVS_SERIAL_MCFxxxx + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 + } + + description "The m5272c3 target provides the packages needed to run + eCos on the Freescale m5272c3 evaluation board." +} + +# -------------------------------------------------------------------------- +# H8 targets + +target h8300h_sim { + alias { "H8/300H minimal simulator" } + packages { CYGPKG_HAL_H8300 + CYGPKG_HAL_H8300_H8300H + CYGPKG_HAL_H8300_H8300H_SIM + CYGPKG_IO_SERIAL_H8300_SCI + } + description " + The h8300h_sim target provides the packages need to run + eCos in the H8/300H minimal simulator. It is not possible to + use any of the eCos device drivers when the simulator + is running in this mode." +} + +target h8s_sim { + alias { "H8S minimal simulator" } + packages { CYGPKG_HAL_H8300 + CYGPKG_HAL_H8300_H8S + CYGPKG_HAL_H8300_H8S_SIM + CYGPKG_IO_SERIAL_H8300_SCI + } + description " + The h8300h_sim target provides the packages need to run + eCos in the H8/300H minimal simulator. It is not possible to + use any of the eCos device drivers when the simulator + is running in this mode." +} + +target aki3068net { + alias { "Akizuki H8/3068 Network board" } + packages { CYGPKG_HAL_H8300 + CYGPKG_HAL_H8300_H8300H + CYGPKG_HAL_H8300_H8300H_AKI3068NET + CYGPKG_IO_SERIAL_H8300_SCI + CYGPKG_DEVS_ETH_H8300_AKI3068NET + CYGPKG_DEVICES_WATCHDOG_H8300_H8300H + } + description " + The aki3068net target provides the packages need to run + eCos in the Akizuki H8/3068 Network board." +} + +target h8max { + alias { "H8MAX" } + packages { CYGPKG_HAL_H8300 + CYGPKG_HAL_H8300_H8300H + CYGPKG_HAL_H8300_H8300H_H8MAX + CYGPKG_IO_SERIAL_H8300_SCI + CYGPKG_DEVS_ETH_H8300_H8MAX + CYGPKG_DEVICES_WATCHDOG_H8300_H8300H + } + description " + The h8max target provides the packages need to run + eCos in the strawberry-linux.com H8MAX board." +} + +target edosk2674 { + alias { "EDOSK-2674" } + packages { CYGPKG_HAL_H8300 + CYGPKG_HAL_H8300_H8S + CYGPKG_HAL_H8300_H8S_EDOSK2674 + CYGPKG_IO_SERIAL_H8300_SCI + CYGPKG_DEVS_ETH_H8300_EDOSK2674 + } + description " + The h8max target provides the packages need to run + eCos in the Hitachi Micro System Europe EDOSK-2674 Evalution board." +} + +# -------------------------------------------------------------------------- +# CalmRISC16 targets + +target calm16_ceb { + alias { "CalmRISC16 Core Eval Board" } + packages { CYGPKG_HAL_CALM16 + CYGPKG_HAL_CALM16_CORE + CYGPKG_HAL_CALM16_CEB + } + description " + The calm16_ceb target provides the packages needed to run + eCos on the CalmRISC16 Core Evaluation Board." +} +# -------------------------------------------------------------------------- +# CalmRISC32 targets + +target calm32_ceb { + alias { "CalmRISC32 Core Eval Board" } + packages { CYGPKG_HAL_CALM32 + CYGPKG_HAL_CALM32_CORE + CYGPKG_HAL_CALM32_CEB + } + description " + The calm32_ceb target provides the packages needed to run + eCos on the CalmRISC32 Core Evaluation Board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_HAL_POWERPC_TS1000 { + alias { "Allied Telesyn TS1000 board" hal_powerpc_ts1000 } + directory hal/powerpc/ts1000 + script hal_powerpc_ts1000.cdl + hardware + description " + The TS1000 HAL package provides the support needed to run + eCos on a Allied Telesyn TS1000 board equipped with a PowerPC processor." +} + +package CYGPKG_DEVS_FLASH_POWERPC_TS1000 { + alias { "FLASH memory support for Allied Telesyn TS1000 (PPC855) board" flash_ts1000 } + directory devs/flash/powerpc/ts1000 + script flash_ts1000.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Allied Telesyn TS1000 (PPC855) platform." +} + +package CYGPKG_DEVS_ETH_POWERPC_TS1000 { + alias { "Allied Telesyn TS1000 ethernet driver" ts1000_eth_driver } + hardware + directory devs/eth/powerpc/ts1000 + script ts1000_eth_drivers.cdl + description "Ethernet driver specifics for Allied Telesyn TS1000 (MPC855T) based boards." +} + +target ts1000 { + alias { "Allied Telesyn TS1000 board" ts1000_855 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_TS1000 + CYGPKG_HAL_QUICC + CYGPKG_DEVS_FLASH_POWERPC_TS1000 + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_ETH_POWERPC_FEC + CYGPKG_DEVS_ETH_POWERPC_TS1000 + CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC + } + description " + The ts1000 target provides the packages needed to run + eCos on a Allied Telesyn TS1000 (PPC855T) board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_DEVS_FLASH_UE250 { + alias { "FLASH memory support for uE250" flash_uE250 } + directory devs/flash/arm/uE250 + script flash_uE250.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the uE250 platform." +} + +package CYGPKG_DEVS_ETH_ARM_XSCALE_UE250 { + alias { "NMI uE250 PCI ethernet driver" devs_eth_arm_ue250 } + hardware + directory devs/eth/arm/uE250 + script uE250_eth_drivers.cdl + description "Ethernet driver for NMI uE250 via PCI card." +} + +package CYGPKG_HAL_ARM_XSCALE_UE250 { + alias { "NMI uEngine uE250" hal_arm_xscale_uE250 } + directory hal/arm/xscale/uE250 + script hal_arm_xscale_uE250.cdl + hardware + description " + The UE250 HAL package provides the support needed to run + eCos on an NMI uEngine u250 board." +} + +target uE250 { + alias { "NMI uEngine uE250 Board" ue250 } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_PXA2X0 + CYGPKG_HAL_ARM_XSCALE_UE250 + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_UE250 + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_ETH_ARM_XSCALE_UE250 + } + description " + The uE250 target provides the packages needed to run + eCos on an NMI uEngine uE250 board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_DEVS_FLASH_PICASSO { + alias { "FLASH memory support for picasso" flash_picasso } + directory devs/flash/arm/picasso + script flash_picasso.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the picasso platform." +} + +package CYGPKG_DEVS_ETH_ARM_XSCALE_PICASSO { + alias { "NMI picasso PCI ethernet driver" devs_eth_arm_picasso } + hardware + directory devs/eth/arm/picasso + script picasso_eth_drivers.cdl + description "Ethernet driver for NMI picasso via PCI card." +} + +package CYGPKG_HAL_ARM_XSCALE_PICASSO { + alias { "NMI uEngine picasso" hal_arm_xscale_picasso } + directory hal/arm/xscale/picasso + script hal_arm_xscale_picasso.cdl + hardware + description " + The PICASSO HAL package provides the support needed to run + eCos on an NMI uEngine u250 board." +} + +target picasso { + alias { "NMI uEngine picasso Board" } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_XSCALE_CORE + CYGPKG_HAL_ARM_XSCALE_PXA2X0 + CYGPKG_HAL_ARM_XSCALE_PICASSO + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_DEVS_FLASH_STRATA + CYGPKG_DEVS_FLASH_PICASSO + CYGPKG_DEVS_ETH_NS_DP83902A + CYGPKG_DEVS_ETH_ARM_XSCALE_PICASSO + } + description " + The picasso target provides the packages needed to run + eCos on an NMI uEngine picasso board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_HAL_POWERPC_ADDER { + alias { "A&M Adder PPC85x board" hal_powerpc_adder powerpc_adder_hal } + directory hal/powerpc/adder + script hal_powerpc_adder.cdl + hardware + description " + The ADDER HAL package provides the support needed to run + eCos on a A&M ADDER board equipped with a PowerPC processor." +} + +package CYGPKG_DEVS_FLASH_POWERPC_ADDER { + alias { "FLASH memory support for A&M Adder PowerPC/85x" flash_adder } + directory devs/flash/powerpc/adder + script flash_adder.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the A&M PowerPC/8xx ADDER platforms." +} + +package CYGPKG_DEVS_ETH_POWERPC_ADDER { + alias { "A&M Adder ethernet driver" adder_eth_driver } + hardware + directory devs/eth/powerpc/adder + script adder_eth_drivers.cdl + description "Ethernet driver specifics for A&M Adder (MPC85x) based boards." +} + +package CYGPKG_DEVS_ETH_POWERPC_ADDERII { + alias { "A&M AdderII ethernet driver" adderII_eth_driver } + hardware + directory devs/eth/powerpc/adderII + script adderII_eth_drivers.cdl + description "Ethernet driver specifics for A&M AdderII (MPC852T) based boards." +} + +target adder { + alias { "A&M Adder PPC850 board" adder850 } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_ADDER + CYGPKG_HAL_QUICC + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 + CYGPKG_DEVS_ETH_POWERPC_QUICC + CYGPKG_DEVS_ETH_POWERPC_ADDER + CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC + } + enable { CYGHWR_HAL_POWERPC_ADDER_I } + description " + The adder target provides the packages needed to run + eCos on a A&M Adder PPC850 board." +} + +target adderII { + alias { "A&M Adder PPC852T board" adder852T } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8xx + CYGPKG_HAL_POWERPC_ADDER + CYGPKG_HAL_QUICC + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 + CYGPKG_DEVS_ETH_POWERPC_FEC + CYGPKG_DEVS_ETH_POWERPC_ADDERII + CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC + } + enable { CYGHWR_HAL_POWERPC_ADDER_II } + description " + The adderII target provides the packages needed to run + eCos on a A&M Adder PPC852T board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_HAL_POWERPC_RATTLER { + alias { "A&M Rattler MPC8250 board" hal_powerpc_rattler powerpc_rattler_hal } + directory hal/powerpc/rattler + script hal_powerpc_rattler.cdl + hardware + description " + The RATTLER HAL package provides the support needed to run + eCos on a A&M RATTLER board equipped with a PowerPC processor." +} + +package CYGPKG_DEVS_ETH_POWERPC_RATTLER { + alias { "A&M Rattler ethernet driver" rattler_eth_driver } + hardware + directory devs/eth/powerpc/rattler + script rattler_eth_drivers.cdl + description "Ethernet driver specifics for A&M Rattler (MPC8250) based boards." +} + +package CYGPKG_DEVS_FLASH_POWERPC_RATTLER { + alias { "FLASH memory support for A&M Rattler (MPC8250)" flash_rattler } + directory devs/flash/powerpc/rattler + script flash_rattler.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the A&M Rattler (MPC8250) platforms." +} + +target rattler { + alias { "A&M Rattler (8250) board" } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_MPC8XXX + CYGPKG_HAL_POWERPC_RATTLER + CYGPKG_DEVS_FLASH_POWERPC_RATTLER + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX + CYGPKG_DEVS_ETH_POWERPC_FCC + CYGPKG_DEVS_ETH_POWERPC_RATTLER + CYGPKG_DEVS_ETH_PHY + CYGPKG_IO_SERIAL_POWERPC_MPC8XXX + } + description " + The rattler target provides the packages needed to run + eCos on an Analogue & Micro Rattler (MPC8250) board." +} + +##------------------------------------------------------------------------------------------- +## TAMS MOAB (PowerPC 405GPr) packages +## +package CYGPKG_HAL_POWERPC_MOAB { + alias { "TAMS PowerPC 405GP board" hal_powerpc_moab } + directory hal/powerpc/moab + script hal_powerpc_moab.cdl + hardware + description " + The MOAB HAL package provides the support needed to run + eCos on a TAMS PowerPC 405GP board." +} + +package CYGPKG_DEVS_FLASH_POWERPC_MOAB { + alias { "FLASH memory support for MOAB" flash_moab } + directory devs/flash/powerpc/moab + script flash_moab.cdl + hardware + description " + This package contains hardware support for both the boot FLASH + and NAND (main) memory on the MOAB platform." +} + +package CYGPKG_DEVS_ETH_POWERPC_MOAB { + alias { "TAMS PowerPC 405GP ethernet support" moab_eth_driver } + hardware + directory devs/eth/powerpc/moab + script moab_eth_drivers.cdl + description "Ethernet driver specifics for TAMS MOAB (PPC405GP) based boards." +} + +package CYGPKG_DEVICES_WALLCLOCK_POWERPC_MOAB { + alias { "MOAB RTC device" devs_wallclock_moab_ds1307 moab_rtc } + hardware + directory devs/wallclock/powerpc/moab + script moab_wallclock_drivers.cdl + description " + RTC driver for MOAB (PowerPC PPC405GPr) using a + Dallas DS1307 RTC." +} + +target moab { + alias { "TAMS PowerPC 405GPr" moab405GPr } + packages { CYGPKG_HAL_POWERPC + CYGPKG_HAL_POWERPC_PPC40x + CYGPKG_HAL_POWERPC_MOAB + CYGPKG_DEVS_FLASH_POWERPC_MOAB + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_DEVS_FLASH_TOSHIBA_TC58XXX + CYGPKG_DEVS_ETH_POWERPC_MOAB + CYGPKG_DEVS_ETH_POWERPC_PPC405 + CYGPKG_DEVS_ETH_NS_DP83816 + CYGPKG_DEVS_ETH_PHY + CYGPKG_IO_PCI + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1307 + CYGPKG_DEVICES_WALLCLOCK_POWERPC_MOAB + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_POWERPC_PPC405 + } + description " + The moab target provides the packages needed to run + eCos on the TAMS MOAB (405GPr) board." +} +##------------------------------------------------------------------------------------------- + +# -------------------------------------------------------------------------- + +# Realtek 8139 (PCI) Ethernet driver +package CYGPKG_DEVS_ETH_RLTK_8139 { + alias { "Realtek 8139 ethernet driver" rltk8139_eth_driver } + hardware + directory devs/eth/rltk/8139 + script rltk_8139_eth_drivers.cdl + description "Ethernet driver for Realtek 8139 (PCI) card." +} + +package CYGPKG_DEVS_ETH_I386_PC_RLTK8139 { + alias { "Intel PC with Realtek 8139 ethernet driver" pc_rltk8139_eth_driver } + hardware + directory devs/eth/i386/pc/rltk8139 + script i386_pc_rltk8139_eth_drivers.cdl + description "Intel PC using Realtek 8139 (PCI) card." +} + +package CYGPKG_DEVS_ETH_SH_DREAMCAST_RLTK8139 { + alias { "SEGA Dreamcast with BroadBandAdapter driver" dreamcast_rltk8139_eth_driver } + hardware + directory devs/eth/sh/dreamcast + script sh_dreamcast_rltk8139_eth_drivers.cdl + description "SEGA Dreamcast with BroadBandAdapter." +} + +target pc_rltk8139 { + alias { "i386 PC target with RTL8139 ethernet" } + packages { CYGPKG_HAL_I386 + CYGPKG_HAL_I386_GENERIC + CYGPKG_HAL_I386_PC + CYGPKG_HAL_I386_PCMB + CYGPKG_IO_PCI + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_I386_PC + CYGPKG_DEVS_ETH_RLTK_8139 + CYGPKG_DEVS_ETH_I386_PC_RLTK8139 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887 + CYGPKG_DEVICES_WALLCLOCK_I386_PC + } + description " + The pc_rltk8139 target provides the packages needed to run eCos binaries + on a standard i386 PC motherboard, using a Realtek 8139 network card." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_HAL_ARM_GPS4020 { + alias { "GPS4020" hal_gps4020 } + directory hal/arm/gps4020 + script hal_arm_gps4020.cdl + hardware + description " + The GPS4020 HAL package provides the support needed to run + eCos on a GPS 4020 board using the Firefly MF1 (ARM) processor." +} + +package CYGPKG_DEVS_FLASH_GPS4020 { + alias { "FLASH memory support for GPS4020" flash_gps4020 } + directory devs/flash/arm/gps4020 + script flash_gps4020.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the GPS4020 platform." +} + +package CYGPKG_IO_SERIAL_ARM_GPS4020 { + alias { "GPS4020 serial device drivers" + devs_serial_arm_gps4020 gps4020_serial_driver } + hardware + directory devs/serial/arm/gps4020 + script ser_arm_gps4020.cdl + description "GPS4020 serial device drivers" +} + +target gps4020 { + alias { "GPS 4020" gps_4020 gps} + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_GPS4020 + CYGPKG_DEVS_FLASH_ATMEL_AT49XXXX + CYGPKG_DEVS_FLASH_GPS4020 + CYGPKG_IO_SERIAL_ARM_GPS4020 + } + description " + The gps4020 target provides the packages needed to run + eCos on a GPS-4020 board." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_VNC_SERVER { + alias { "VNC server" vnc_server } + directory net/vnc_server + script vnc-server.cdl + description "VNC server." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_DEVS_DISK_V85X_EDB_V850 { + alias { "Elatec v850 development board disk driver" edb_v850_disk } + directory devs/disk/v85x/edb_v850 + script v85x_edb_v850_disk.cdl + hardware + description "Disk driver for the Elatec v850 development board." +} + +package CYGPKG_DEVS_DISK_ECOSYNTH { + alias { "Synthetic target disk driver" ecosynthdisk ecosynth_disk_driver } + directory devs/disk/synth + script synthdisk.cdl + hardware + description "Disk driver for the synthetic target." +} + +package CYGPKG_DEVS_DISK_IDE { + alias { "Generic IDE disk driver" ide_disk } + directory devs/disk/ide + script ide_disk.cdl + description "Disk driver for generic IDE interface." +} + +package CYGPKG_DEVS_DISK_MMC { + alias { "Disk driver for MMC cards" mmcdisk mmc_disk_driver } + directory devs/disk/generic/mmc + script devs_disk_mmc.cdl + hardware + description "Disk driver for MMC cards" +} + +package CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI { + alias { "MMC/SD disk over Freescale DSPI" } + hardware + directory devs/disk/spi/freescale/dspi/mmc + script disk_mmc_freescale_dspi.cdl + description " + This package provides a driver for MMC/SD disk attached to a + Freescale DSPI interface." +} + +package CYGPKG_IO_DISK { + alias { "Disk device drivers" disk io_disk } + directory io/disk + script io_disk.cdl + description " + This package contains drivers for basic I/O services on + disk devices." +} + +package CYGPKG_BLOCK_LIB { + alias { "Block cache and access library" blib block_lib } + directory services/blib + script blib.cdl + description " + This package contains the block cache and access library." +} + +package CYGPKG_FS_FAT { + alias { "FAT Filesystem" fatfs fat_fs fs_fat } + directory fs/fat + script fatfs.cdl + description " + This package contains a FAT filesystem implementation." +} + + +# -------------------------------------------------------------------------- + +package CYGPKG_IO_FRAMEBUF { + alias { "Frame buffer support" framebuf framebuffer io_framebuf framebuf_io } + directory io/framebuf + script framebuf.cdl + description " + The generic frame buffer package provides an API for accessing + frame buffer devices. It also provides support for writing + the corresponding the device drivers." +} + +package CYGPKG_DEVS_FRAMEBUF_SYNTH { + alias { "Synthetic target framebuffer device driver" devs_framebuf_synth synth_framebuf_driver } + hardware + directory devs/framebuf/synth + script framebuf_synth.cdl + + description " + This package provides a framebuffer device driver for the + synthetic target." +} + +# -------------------------------------------------------------------------- + +package CYGPKG_NET_LWIP { + alias {"lwIP networking stack" lwip} + directory net/lwip_tcpip + script cdl/lwip_net.cdl + description "Lightweight TCP/IP stack: lwIP" +} + +package CYGPKG_ATHTTPD { + alias { "ATHTTP server" athttpd } + directory net/athttpd + script httpd.cdl + description "Another Tiny HTTP server." +} + + +# ========================================================================== +# Cortex-M architecture support + +package CYGPKG_HAL_CORTEXM { + alias { "Cortex-M common HAL" hal_cortexm cortexm_hal cortexm_arch_hal } + directory hal/cortexm/arch + script hal_cortexm.cdl + hardware + description " + The CortexM architecture HAL package provides generic support for the ARM + Cortex-M processor architecture. It is also necessary to select + variant and platform HAL packages." +} + +package CYGPKG_HAL_CORTEXM_LM3S { + alias { "Stellaris Cortex M3 variant HAL" hal_cortexm_lm3s } + directory hal/cortexm/lm3s/var + script hal_cortexm_lm3s.cdl + hardware + description " + The Stellaris Cortex M3 HAL package provides the support needed + to run eCos on targets based on the Stellaris Cortex M3 family + of microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_LM3S8XX { + alias { "Stellaris 800 Series variant HAL" hal_cortexm_lm3s8xx } + directory hal/cortexm/lm3s/lm3s8xx/ + script hal_cortexm_lm3s8xx.cdl + hardware + description " + The Stellaris Cortex M3 800 Series HAL package provides the + support needed to run eCos on targets based on the Stellaris + Luminary Micro 800 Series family of microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_EK_LM3S811 { + alias { "Stellaris EK-LM3S811 HAL" hal_cortexm_ek_lm3s811 } + directory hal/cortexm/lm3s/ek_lm3s811 + script hal_cortexm_ek_lm3s811.cdl + hardware + description " + The ek-lm3s811 HAL package provides the support needed to run + eCos on the Stellaris EK-LM3S811 board from Luminary Micro." +} + +package CYGPKG_HAL_CORTEXM_LPC17XX { + alias { "NXP LPC17XX variant HAL" hal_cortexm_lpc17xx } + directory hal/cortexm/lpc17xx/var + script hal_cortexm_lpc17xx.cdl + hardware + description " + The LPC 17XX HAL package provides the support needed to + run eCos on targets based on the NXP LPC17XX family of + microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_LPC17XX_LPC1766STK { + alias { "Olimex LPC-1766-STK HAL" hal_cortexm_lpc1766stk } + directory hal/cortexm/lpc17xx/lpc1766stk + script hal_cortexm_lpc17xx_lpc1766stk.cdl + hardware + description " + The lpc1766stk HAL package provides the support needed to run + eCos on the Olimex LPC-1766-STK board." +} + +package CYGPKG_HAL_CORTEXM_STM32 { + alias { "ST STM32 variant HAL" hal_cortexm_stm32 } + directory hal/cortexm/stm32/var + script hal_cortexm_stm32.cdl + hardware + description " + The STM32 HAL package provides the support needed to run + eCos and RedBoot on targets based on the ST STM32 + family of microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_STM32_STM3210E_EVAL { + alias { "ST STM3210E EVAL HAL" hal_cortexm_stm3210e_eval } + directory hal/cortexm/stm32/stm3210e_eval + script hal_cortexm_stm32_stm3210e_eval.cdl + hardware + description " + The stm3210e_eval HAL package provides the support needed to run + eCos on the ST STM3210E EVAL board." +} + +package CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL { + alias { "ST STM32x0G-EVAL HAL" hal_cortexm_stm32x0g_eval } + directory hal/cortexm/stm32/stm32x0g_eval + script hal_cortexm_stm32_stm32x0g_eval.cdl + hardware + description " + The stm32x0g_eval HAL package provides the support needed to run + eCos on the ST STM3220G-EVAL and STM3240G-EVAL boards." +} + +package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY { + alias { "STMicroelectronics STM32F4-Discovery HAL" hal_cortexm_stm32f4discovery } + directory hal/cortexm/stm32/stm32f4discovery + script hal_cortexm_stm32_stm32f4discovery.cdl + hardware + description " + The STM32F4-Discovery HAL package provides the platform support needed to run + eCos on the STMicroelectronics STM32F4-Discovery board." +} + +package CYGPKG_IO_SERIAL_CORTEXM_STM32 { + alias { "ST STM32 serial device drivers" + devs_serial_cortexm_stm32 stm32_serial_driver } + hardware + directory devs/serial/cortexm/stm32 + script ser_cortexm_stm32.cdl + description "ST STM32 serial device driver" +} + +package CYGPKG_DEVS_FLASH_STM32 { + alias { "Internal FLASH memory support for ST STM32" flash_stm32 } + directory devs/flash/cortexm/stm32 + script flash_stm32.cdl + hardware + description " + This package contains hardware support for the internal FLASH memory + on the ST STM32 devices." +} + +package CYGPKG_DEVS_SPI_CORTEXM_STM32 { + alias { "STM32 SPI driver" } + hardware + directory devs/spi/cortexm/stm32 + script spi_stm32.cdl + description "This package provides a driver for the SPI interfaces found on + the ST STM32 microcontroller family." +} + +package CYGPKG_DEVS_WALLCLOCK_STM32 { + alias { "ST STM32 RTC wallclock support" wallclock_stm32 } + directory devs/wallclock/cortexm/stm32 + script wallclock_stm32.cdl + hardware + description " + Wallclock support for on-chip RTC on STM32 devices.driver for the + STM32 controller and compatibles" +} + +package CYGPKG_DEVS_ADC_CORTEXM_STM32 { + alias { "STM32 ADC driver" adc_stm32 } + hardware + directory devs/adc/cortexm/stm32 + script adc_stm32.cdl + description " + This package provides a driver for the ADC interfaces found on the + ST STM32 microcontroller family." +} + +package CYGPKG_DEVS_USB_CORTEXM_STM32 { + alias { "ST STM32 USB slave support" usb_stm32 } + directory devs/usb/cortexm/stm32 + script usb_stm32.cdl + hardware + description "USB slave support for STM32 devices." +} + +package CYGPKG_DEVS_ETH_CORTEXM_STM32 { + alias { "STM32 ethernet driver" stm32_eth_driver } + hardware + directory devs/eth/cortexm/stm32 + script stm32_eth.cdl + description " + This package provides a driver for the Ethernet interfaces found on the + ST STM32 microcontroller family." +} + +target stm3210e_eval { + alias { "ST STM3210E EVAL board" stm3210e } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_STM32 + CYGPKG_HAL_CORTEXM_STM32_STM3210E_EVAL + CYGPKG_DEVS_FLASH_AMD_AM29XXXXX_V2 + CYGPKG_DEVS_FLASH_STM32 + CYGPKG_DEVS_FLASH_SPI_M25PXX + CYGPKG_IO_SERIAL_CORTEXM_STM32 + CYGPKG_DEVS_WALLCLOCK_STM32 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_CORTEXM_STM32 + CYGPKG_DEVS_ADC_CORTEXM_STM32 + CYGPKG_DEVS_NAND_ST_NANDXXXX3A + CYGPKG_IO_USB + CYGPKG_IO_USB_SLAVE + CYGPKG_DEVS_USB_CORTEXM_STM32 + } + description "The stm3210e_eval target provides the packages needed + to run eCos on the STM3210E EVAL board." +} + +# ========================================================================== +# NAND packages + +package CYGPKG_IO_NAND { + alias { "NAND flash memory support" nand io_nand } + directory io/nand + script nand.cdl + description " + This package provides the NAND flash access library. + Further platform-specific package(s) are required to implement + support for the specific devices present." +} + +package CYGPKG_DEVS_NAND_SAMSUNG_K9 { + alias { "Samsung K9 NAND chip family support" nand_samsung_k9 } + directory devs/nand/samsung_k9 + script k9fxx08x0a.cdl + description " + This package provides support for the Samsung K9Fxx08x0A family of NAND + flash devices." +} + +package CYGPKG_DEVS_NAND_SYNTH { + alias { "Synthetic NAND device" nand_synth } + directory devs/nand/synth + script nand_synth.cdl + description " + This package provides a synthetic NAND device, for testing purposes." +} + +package CYGPKG_DEVS_NAND_ST_NANDXXXX3A { + alias { "ST Microelectronics NANDxxxx3A chip family support" nand_st_nandxxxx3a } + directory devs/nand/st/nandxxxx3a + script nandxxxx3a.cdl + description " + This package provides support for the ST Microelectronics family of + NANDxxxx3A flash devices." +} + +package CYGPKG_DEVS_NAND_MICRON_MT29F { + alias { "Micron MT29F NAND chip family support" nand_micron_mt29f } + directory devs/nand/micron_mt29 + script mt29f.cdl + hardware + description " + This package provides support for the Micron MT29F family of NAND + flash devices." +} + +package CYGPKG_DEVS_NAND_ARM_AT91SAM9 { + alias { "Common NAND support for the AT91SAM926X family" nand_at91sam926x } + directory devs/nand/arm/at91sam9 + script devs_nand_arm_at91sam9.cdl + hardware + description "Common support definitions and code for the NAND support + hardware found on the Atmel AT91SAM926X chip family." +} + +target stm3220g_eval { + alias { "ST STM3220G EVAL board" stm3220g } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_STM32 + CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL + CYGPKG_DEVS_FLASH_STM32 + CYGPKG_IO_SERIAL_CORTEXM_STM32 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_CORTEXM_STM32 + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_CORTEXM_STM32 + } + set_value CYGHWR_HAL_CORTEXM_STM32_FAMILY "F2" + set_value CYGHWR_HAL_CORTEXM_STM32_F2 "F207IG" + description "The stm3220g_eval target provides the packages needed + to run eCos on the STM3220G EVAL board." +} + +target stm3240g_eval { + alias { "ST STM3240G EVAL board" stm3240g } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_STM32 + CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL + CYGPKG_DEVS_FLASH_STM32 + CYGPKG_IO_SERIAL_CORTEXM_STM32 + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_CORTEXM_STM32 + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_CORTEXM_STM32 + } + set_value CYGHWR_HAL_CORTEXM_STM32_FAMILY "F4" + set_value CYGHWR_HAL_CORTEXM_STM32_F4 "F407IG" + description "The stm3240g_eval target provides the packages needed + to run eCos on the STM3240G-EVAL board." +} + +target stm32f4discovery { + alias { "STMicroelectronics STM32F4-Discovery board" } + packages { + CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_STM32 + CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + CYGPKG_DEVS_FLASH_STM32 + CYGPKG_IO_SERIAL_CORTEXM_STM32 + } + description "The stm32f4discovery target provides the packages needed + to run eCos on the STMicroelectronics STM32F4-Discovery board." +} + +target ek-lm3s811 { + alias { "Stellaris EK-LM3S811 board" } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_LM3S + CYGPKG_HAL_CORTEXM_LM3S8XX + CYGPKG_HAL_CORTEXM_EK_LM3S811 + CYGPKG_DEVS_I2C_CORTEXM_LM3S + CYGPKG_DEVS_ADC_CORTEXM_LM3S + CYGPKG_IO_I2C + } + description " + The ek-lm3s811 target provides the packages needed to run eCos + on the Stellaris EK-LM3S811 board from Luminary Micro." +} + +target lpc1766stk { + alias { "Olimex LPC-1766-STK" } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_LPC17XX + CYGPKG_HAL_CORTEXM_LPC17XX_LPC1766STK + CYGPKG_DEVICES_WALLCLOCK_ARM_LPC2XXX + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_ARM_LPC24XX + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_ARM_LPC2XXX + } + description " + The lpc1766stk target provides the packages needed + to run eCos on the Olimex LPC-1766-STK board." +} + +package CYGPKG_HAL_FREESCALE_EDMA { + alias { "Freescale eDMA driver" } + hardware + directory hal/misc/freescale/edma + script hal_freescale_edma.cdl + description " + This package provides a library for the Freescale eDMA (Enhanced DMA) + controller." +} + +package CYGPKG_HAL_CORTEXM_KINETIS { + alias { "Freescale Kinetis variant HAL" hal_cortexm_kinetis } + directory hal/cortexm/kinetis/var + script hal_cortexm_kinetis.cdl + hardware + description " + The Kinetis HAL package provides the support needed to run + eCos on targets based on the Freescale Kinetis + family of microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512 { + alias { "Freescale TWR-K60N512 HAL" hal_cortexm_twr_k60n512 } + directory hal/cortexm/kinetis/twr_k60n512 + script hal_cortexm_kinetis_twr_k60n512.cdl + hardware + description " + The TWR-K60N512 HAL package provides the support needed to run + eCos on the Freescale Tower development system." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K40X256 { + alias { "Freescale TWR-K40X256 HAL" hal_cortexm_twr_k40x256 } + directory hal/cortexm/kinetis/twr_k40x256 + script hal_cortexm_kinetis_twr_k40x256.cdl + hardware + description " + The TWR-K40X256 HAL package provides the support needed to run + eCos on the Freescale Tower development system." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512_FXM { + alias { "Freescale TWR-K60N512-FXM HAL" hal_cortexm_twr_k60n512_fxm } + directory hal/cortexm/kinetis/twr_k60n512_fxm + script hal_cortexm_kinetis_twr_k60n512_fxm.cdl + hardware + description " + The TWR-K60N512-FXM HAL package provides the support needed to run + eCos on the Freescale Tower development system equpped with TWR-FXM module." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_KWIKSTIK { + alias { "Freescale KwikStik HAL" hal_cortexm_kwikstik } + directory hal/cortexm/kinetis/kwikstik + script hal_cortexm_kinetis_kwikstik.cdl + hardware + description " + The KwikStik HAL package provides the support needed to run + eCos on the Freescale KwikStik development board." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K70F120M { + alias { "Freescale TWR-K70F120M HAL" hal_cortexm_twr_k70f120m } + directory hal/cortexm/kinetis/twr_k70f120m + script hal_cortexm_kinetis_twr_k70f120m.cdl + hardware + description " + The TWR-K70F120M HAL package provides the support needed to run + eCos on the Freescale Tower development system." +} + +package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60F120M { + alias { "Freescale TWR-K60F120M HAL" hal_cortexm_twr_k60f120m } + directory hal/cortexm/kinetis/twr_k60f120m + script hal_cortexm_kinetis_twr_k60f120m.cdl + hardware + description " + The TWR-K60F120M HAL package provides the support needed to run + eCos on the Freescale Tower development system." +} + +target freescale_twr_k60n512 { + alias { "Freescale Kinetis TWR-K60N512" twr_k60n512 } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512 + CYGPKG_HAL_FREESCALE_EDMA + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_FREESCALE_ENET + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_FREESCALE_DSPI + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + CYGPKG_DEVS_DISK_MMC + CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + CYGPKG_DEVS_FLASH_KINETIS + } + description "The freescale_twr_k60n512 target provides the packages needed + to run eCos on the Freescale TWR-K60N512 development system." +} + +target freescale_twr_k40x256 { + alias { "Freescale Kinetis TWR-K40X256" twr_k40x256 } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K40X256 + CYGPKG_HAL_FREESCALE_EDMA + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_FREESCALE_DSPI + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + CYGPKG_DEVS_DISK_MMC + CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + CYGPKG_DEVS_FLASH_KINETIS + } + description "The freescale_twr_k40x256 target provides the packages needed + to run eCos on the Freescale TWR-K40X256 development system." +} + +target freescale_kwikstik { + alias { "Freescale Kinetis KwikStik" kwikstik } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_KWIKSTIK + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_DEVS_FLASH_KINETIS + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + } + description "The freescale_kwikstik target provides the packages needed + to run eCos on the Freescale KwikStik development board." +} + +target freescale_twr_k60n512_fxm { + alias { "Freescale Kinetis TWR-K60N512-FXM" twr_k60n512_fxm } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512_FXM + CYGPKG_HAL_FREESCALE_EDMA + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_FREESCALE_ENET + CYGPKG_DEVS_RAM_MICRON_CELLULARRAM + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_FREESCALE_DSPI + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + CYGPKG_DEVS_DISK_MMC + CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + CYGPKG_DEVS_FLASH_SPI_SST25XX + CYGPKG_DEVS_FLASH_SST25XX_FREESCALE_DSPI + } + description " + The freescale_twr_k60n512_fxm target provides the packages needed + to run eCos on the Freescale TWR-K60N512 development system + equipped with TWR-FXM external memory module." +} + +target freescale_twr_k70f120m { + alias { "Freescale Kinetis TWR-K70F120M" twr_k70f120m } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K70F120M + CYGPKG_HAL_FREESCALE_EDMA + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_FREESCALE_ENET + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_FREESCALE_DSPI + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + CYGPKG_DEVS_DISK_MMC + CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + CYGPKG_DEVS_FLASH_KINETIS + } + description "The freescale_twr_k70f120m target provides the packages needed + to run eCos on the Freescale TWR-k70f120m development system." +} + +target freescale_twr_k60f120m { + alias { "Freescale Kinetis TWR-K60F120M" twr_k60f120m } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_KINETIS + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60F120M + CYGPKG_HAL_FREESCALE_EDMA + CYGPKG_IO_SERIAL_FREESCALE_UART_HDR + CYGPKG_IO_SERIAL_FREESCALE_UART + CYGPKG_DEVICES_WALLCLOCK_KINETIS_RTC + CYGPKG_DEVS_ETH_PHY + CYGPKG_DEVS_ETH_FREESCALE_ENET + CYGPKG_IO_SPI + CYGPKG_DEVS_SPI_FREESCALE_DSPI + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_FREESCALE_I2C + CYGPKG_DEVS_DISK_MMC + CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + CYGPKG_DEVS_FLASH_KINETIS + } + description "The freescale_twr_k60f120m target provides the packages needed + to run eCos on the Freescale TWR-k60f120m development system." +} + +package CYGPKG_HAL_CORTEXM_A2FXXX { + alias { "Cortex-M3/Actel Smartfusion A2Fxxx variant HAL" hal_cortexm_a2fxxx } + directory hal/cortexm/a2fxxx/var + script hal_cortexm_a2fxxx.cdl + hardware + description " + The Actel A2Fxxx HAL package provides the support needed to run + eCos and RedBoot on targets based on the Actel A2Fxxx + family of microcontrollers." +} + +package CYGPKG_HAL_CORTEXM_A2F200_EVAL { + alias { "Actel A2F200 EVAL HAL" hal_cortexm_a2f200_eval } + directory hal/cortexm/a2fxxx/a2f200_eval + script hal_cortexm_a2f200_eval.cdl + hardware + description " + The Actel A2F200 HAL package provides the support needed to run + eCos on the Actel A2F200 EVAL board." +} + +package CYGPKG_DEVS_FLASH_CORTEXM_A2F200_EVAL { + alias { "Actel SmartFusion evaluation board flash support" a2fxxx_eval_flash_driver } + hardware + directory devs/flash/cortexm/a2fxxx/a2f200_eval + script flash_a2f200_eval.cdl + description " + Flash driver specifics for the Actel SmartFusion evaluation board (A2F200 EVAL)." +} + +package CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL { + alias { "Actel Smartfusion ethernet evaluation board support" a2f200_eval_eth_driver } + hardware + directory devs/eth/cortexm/a2f200_eval + script a2f200_eval.cdl + description "Ethernet driver specifics for Actel Smartfusion evaluation boards (A2F200 EVAL)." +} + + +target smartfusion { + alias { "Actel SmartFusion evaluation board (A2F200_EVAL)" smartfusion } + packages { CYGPKG_HAL_CORTEXM + CYGPKG_HAL_CORTEXM_A2FXXX + CYGPKG_HAL_CORTEXM_A2F200_EVAL + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_CORTEXM_A2FXXX + CYGPKG_IO_I2C + CYGPKG_DEVS_I2C_CORTEXM_A2FXXX + CYGPKG_DEVS_SPI_CORTEXM_A2FXXX + CYGPKG_IO_SPI + CYGPKG_DEVS_FLASH_SPI_AT25DFXXX + CYGPKG_DEVS_FLASH_CORTEXM_A2F200_EVAL + CYGPKG_DEVS_ETH_CORTEXM_A2F200_EVAL + CYGPKG_DEVS_ETH_CORTEXM_A2FXXX + CYGPKG_DEVS_ETH_PHY + } + description " + The a2f200_eval target provides the packages needed + to run eCos on the Actel A2F200 EVAL (Smartfusion) board." +} + + +# ========================================================================== +# End of ecos.db diff --git a/packages/fs/jffs2/current/ChangeLog b/packages/fs/jffs2/current/ChangeLog --- a/packages/fs/jffs2/current/ChangeLog +++ b/packages/fs/jffs2/current/ChangeLog @@ -1,6 +1,12 @@ +2011-02-17 Jonathan Larmour + + * cdl/jffs2.cdl: Add CYGNUM_FS_JFFS2_TEST_OFFSET and + CYGNUM_FS_JFFS2_TEST_LENGTH, which should have been included in change + of 2008-11-18. + 2009-04-28 John Dallaway - cdl/jffs2.cdl: Use CYGPKG_IO_FILEIO as the parent. + * cdl/jffs2.cdl: Use CYGPKG_IO_FILEIO as the parent. 2009-02-22 Andrew Lunn diff --git a/packages/fs/jffs2/current/cdl/jffs2.cdl b/packages/fs/jffs2/current/cdl/jffs2.cdl --- a/packages/fs/jffs2/current/cdl/jffs2.cdl +++ b/packages/fs/jffs2/current/cdl/jffs2.cdl @@ -269,21 +269,50 @@ cdl_package CYGPKG_FS_JFFS2 { # ---------------------------------------------------------------- # Tests - cdl_option CYGPKG_FS_JFFS2_TESTS { + cdl_component CYGPKG_FS_JFFS2_TESTS { display "JFFS2 FS tests" flavor data no_define calculated { "tests/jffs2_1 tests/jffs2_2 tests/jffs2_3" } description " This option specifies the set of tests for the JFFS2 - FS package." + FS package. + If supported by the configuration, these tests will preferentially + use a FIS partition (which may be defined using RedBoot) named + \"jffs2test\". If that FIS partition does not exist, then no testing + will be performed to avoid any risk of corruption of live data. + Alternatively if the configuration does not support that activity, + a hard coded specification may be set." + + cdl_component CYGPKG_FS_JFFS2_TEST_DEVICE { + display "Fixed Flash test area specs" + no_define + default_value !CYGFUN_IO_FLASH_BLOCK_FROM_FIS + description " + This component gives specifications of the flash region to use + for testing. It usually only applies when specification via FIS is not + possible." + + cdl_option CYGNUM_FS_JFFS2_TEST_OFFSET { + display "Start offset from flash base" + flavor data + default_value CYGNUM_IO_FLASH_TEST_OFFSET + description " + This gives the offset from the base of the first flash device + of where tests may operate. It is important to set this correctly, + as an incorrect value could allow the tests to write over critical + portions of the FLASH device and possibly render the target + board totally non-functional." + } + cdl_option CYGNUM_FS_JFFS2_TEST_LENGTH { + display "Test area length" + flavor data + default_value CYGNUM_IO_FLASH_TEST_LENGTH + description " + This gives the length of the region of flash used for testing." + } } - + } } # End of jffs2.cdl - - - - - diff --git a/packages/fs/rom/current/ChangeLog b/packages/fs/rom/current/ChangeLog --- a/packages/fs/rom/current/ChangeLog +++ b/packages/fs/rom/current/ChangeLog @@ -1,3 +1,12 @@ +2010-11-29 John Dallaway + + * cdl/romfs.cdl: Add CYGFUN_FS_ROM_FLASH_BLOCK_DEVICE_LOOKUP option. + * support/mk_romfs.c: Fix Win32 build. + +2010-11-13 Alexander Aganichev + + * src/romfs.c: Added ability to mount a flash block device by name. + 2010-02-28 Øyvind Harboe * src/romfs.c: file name comparison was broken for two files @@ -185,7 +194,7 @@ 2000-10-25 Richard Panton (richard.pant // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2009 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2009, 2010 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/fs/rom/current/cdl/romfs.cdl b/packages/fs/rom/current/cdl/romfs.cdl --- a/packages/fs/rom/current/cdl/romfs.cdl +++ b/packages/fs/rom/current/cdl/romfs.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2009 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2009, 2010 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -41,7 +41,7 @@ # # Author(s): nickg # Original data: nickg -# Contributors: richard.panton@3glab.com +# Contributors: richard.panton@3glab.com, jld # Date: 2000-08-01 # #####DESCRIPTIONEND#### @@ -101,6 +101,17 @@ cdl_package CYGPKG_FS_ROM { fileio already sets it." } + cdl_option CYGFUN_FS_ROM_FLASH_BLOCK_DEVICE_LOOKUP { + display "Lookup flash block device names" + flavor bool + requires CYGPKG_IO_FLASH + requires CYGPKG_IO_FLASH_BLOCK_DEVICE + default_value 0 + description "Enables the location of a ROM filesystem to + be specified using a flash block device name such as + \"/dev/flash/fis/romfs\" in the call to mount()." + } + # ---------------------------------------------------------------- # Tests diff --git a/packages/fs/rom/current/src/romfs.c b/packages/fs/rom/current/src/romfs.c --- a/packages/fs/rom/current/src/romfs.c +++ b/packages/fs/rom/current/src/romfs.c @@ -136,6 +136,12 @@ #include #include +#if defined(CYGFUN_FS_ROM_FLASH_BLOCK_DEVICE_LOOKUP) +#include +#include +#include +#endif + //========================================================================== // Eventually we want to eXecute In Place from the ROM in a protected // environment, so we'll need executables to be aligned to a boundary @@ -593,11 +599,32 @@ static int romfs_mount ( cyg_fstab_en if ( !mte->data ) { // If the image address was not in the MTE data word, if ( mte->devname && mte->devname[0] ) { - char *addr; - // And there's something in the 'hardware device' field, - // then read the address from there. - sscanf( mte->devname, "%p", &addr ); - disk = (romfs_disk *) addr; + // If a device name specified, lookup flash block device. +#if defined(CYGFUN_FS_ROM_FLASH_BLOCK_DEVICE_LOOKUP) + if ( mte->devname[0] == '/' ) { + Cyg_ErrNo err; + cyg_io_handle_t t; + cyg_io_flash_getconfig_devaddr_t d; + int len; + err = cyg_io_lookup(mte->devname, &t); + if (err != ENOERR) { + return -err; + } + len = sizeof(d); + err = cyg_io_get_config(t, CYG_IO_GET_CONFIG_FLASH_DEVADDR, &d, &len); + if (err != ENOERR) { + return -err; + } + disk = (romfs_disk *) d.dev_addr; + } else +#endif + { + char *addr; + // And there's something in the 'hardware device' field, + // then read the address from there. + sscanf( mte->devname, "%p", &addr ); + disk = (romfs_disk *) addr; + } } } else { disk = (romfs_disk *)mte->data; diff --git a/packages/fs/rom/current/support/mk_romfs.c b/packages/fs/rom/current/support/mk_romfs.c --- a/packages/fs/rom/current/support/mk_romfs.c +++ b/packages/fs/rom/current/support/mk_romfs.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -88,6 +88,14 @@ // Undefine this if the host filesystem does not support lstat() #define HAS_LSTAT +// Win32 definitions +#ifdef _WIN32 +#undef HAS_LSTAT +#define S_ISLNK(m) (0) +typedef unsigned int uid_t; +typedef unsigned int gid_t; +#endif + //========================================================================== // Return (n) aligned to the next (b) byte boundary @@ -270,6 +278,7 @@ static unsigned long ConvertMode( unsign if ( posix_mode & S_IRUSR ) result |= 1<<16; if ( posix_mode & S_IWUSR ) result |= 1<<17; if ( posix_mode & S_IXUSR ) result |= 1<<18; +#ifndef _WIN32 if ( posix_mode & S_IRGRP ) result |= 1<<19; if ( posix_mode & S_IWGRP ) result |= 1<<20; if ( posix_mode & S_IXGRP ) result |= 1<<21; @@ -278,6 +287,7 @@ static unsigned long ConvertMode( unsign if ( posix_mode & S_IXOTH ) result |= 1<<24; if ( posix_mode & S_ISUID ) result |= 1<<25; if ( posix_mode & S_ISGID ) result |= 1<<26; +#endif return result; } diff --git a/packages/hal/arm/arch/current/ChangeLog b/packages/hal/arm/arch/current/ChangeLog --- a/packages/hal/arm/arch/current/ChangeLog +++ b/packages/hal/arm/arch/current/ChangeLog @@ -1,3 +1,25 @@ +2014-03-14 John Dallaway + + * src/mcount.S: Add mcount functions for call-graph profiling. + * cdl/hal_arm.cdl: Add option to build mcount functions. + [ Bugzilla 1001959 ] + +2011-11-23 Nick Garnett + + * cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs + are disabled in critical sections, or only IRQs. The default is to + disable both and translate any FIQs into IRQs for delivery. The + alternative is for FIQs to essentially exist outside eCos. + + * include/hal_arch.h (CPSR_THREAD_INITIAL): + * include/hal_intr.h (CPSR_INTR_MASK, HAL_*_INTERRUPTS) + (HAL_*_FIQ): Add definitions for separating FIQ from IRQ. + + * src/hal_mk_defs.c (main): + * src/vectors.S (start, FIQ, IRQ, spurious_IRQ): + (hal_*_interrupts, hal_*_FIQ, __fiq_stack_base): Add support for + separating FIQ from IRQ in critical section processing. + 2009-03-06 John Dallaway * cdl/hal_arm.cdl: Merge goals for CYGHWR_THUMB and @@ -153,6 +175,13 @@ 2006-01-18 Jay Foster + + * include/hal_intr.h (HAL_QUERY_INTERRUPTS): Long-standing + bug: this is meant to return an old state acceptable to + HAL_RESTORE_INTERRUPTS. + (HAL_DISABLE_INTERRUPTS): Small but simple optimisation. + 2005-04-21 Ian Campbell * src/redboot_linux_exec.c: Added -t option which takes the @@ -1800,7 +1829,7 @@ 1998-10-16 Bart Veer +#include + // This is to allow a variant to decide that there is no platform-specific // interrupts file; and that in turn can be overridden by a platform that // refines the variant's ideas. @@ -151,51 +153,58 @@ externC cyg_uint32 hal_default_isr(CYG_A typedef cyg_uint32 CYG_INTERRUPT_STATE; //-------------------------------------------------------------------------- +// Interrupt disable mask +// +// This is used to control which of IRQ and FIQ is enabled/disabled by +// the HAL interrupt control macros, and other places in the HAL. + +#ifdef CYGOPT_HAL_ARM_FIQ_DISABLE +#define CPSR_INTR_MASK (CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE) +#else +#define CPSR_INTR_MASK (CPSR_IRQ_DISABLE) +#endif + +//-------------------------------------------------------------------------- // Interrupt control macros #ifndef __thumb__ -// Note: This disables both FIQ and IRQ interrupts! #define HAL_DISABLE_INTERRUPTS(_old_) \ asm volatile ( \ "mrs %0,cpsr;" \ - "mrs r4,cpsr;" \ - "orr r4,r4,#0xC0;" \ + "orr r4,%0,%1;" \ "msr cpsr,r4" \ : "=r"(_old_) \ - : \ + : "i"(CPSR_INTR_MASK) \ : "r4" \ ); #define HAL_ENABLE_INTERRUPTS() \ asm volatile ( \ "mrs r3,cpsr;" \ - "bic r3,r3,#0xC0;" \ + "bic r3,r3,%0;" \ "msr cpsr,r3" \ : \ - : \ + : "i"(CPSR_INTR_MASK) \ : "r3" \ ); #define HAL_RESTORE_INTERRUPTS(_old_) \ asm volatile ( \ "mrs r3,cpsr;" \ - "and r4,%0,#0xC0;" \ - "bic r3,r3,#0xC0;" \ + "and r4,%0,%1;" \ + "bic r3,r3,%1;" \ "orr r3,r3,r4;" \ "msr cpsr,r3" \ : \ - : "r"(_old_) \ + : "r"(_old_),"i"(CPSR_INTR_MASK) \ : "r3", "r4" \ ); #define HAL_QUERY_INTERRUPTS(_old_) \ asm volatile ( \ - "mrs r4,cpsr;" \ - "and r4,r4,#0xC0;" \ - "eor %0,r4,#0xC0;" \ + "mrs %0,cpsr;" \ : "=r"(_old_) \ - : \ - : "r4" \ + : "i"(CPSR_INTR_MASK) \ ); #else // __thumb__ @@ -299,6 +308,26 @@ externC cyg_uint32 hal_query_interrupts( #endif // __thumb__ //-------------------------------------------------------------------------- +// FIQ interrupt control +// +// If eCos is not masking FIQs then the user can enable/disable them +// independently. + +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE + +externC cyg_uint32 hal_disable_FIQ(void); +externC void hal_enable_FIQ(void); +externC void hal_restore_FIQ(cyg_uint32); +externC cyg_uint32 hal_query_FIQ(void); + +#define HAL_DISABLE_FIQ(_old_) _old_ = hal_disable_FIQ() +#define HAL_ENABLE_FIQ() hal_enable_FIQ() +#define HAL_RESTORE_FIQ(_old_) hal_restore_FIQ(_old_) +#define HAL_QUERY_FIQ(_old_) _old_ = hal_query_FIQ() + +#endif + +//-------------------------------------------------------------------------- // Routine to execute DSRs using separate interrupt stack #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK diff --git a/packages/hal/arm/arch/current/src/hal_mk_defs.c b/packages/hal/arm/arch/current/src/hal_mk_defs.c --- a/packages/hal/arm/arch/current/src/hal_mk_defs.c +++ b/packages/hal/arm/arch/current/src/hal_mk_defs.c @@ -140,6 +140,8 @@ main(void) DEFINE(HAL_BREAKINST_THUMB, HAL_BREAKINST_THUMB); DEFINE(HAL_BREAKINST_ARM, HAL_BREAKINST_ARM); + DEFINE(CPSR_INTR_MASK, CPSR_INTR_MASK); + return 0; } diff --git a/packages/hal/arm/arch/current/src/mcount.S b/packages/hal/arm/arch/current/src/mcount.S new file mode 100644 --- /dev/null +++ b/packages/hal/arm/arch/current/src/mcount.S @@ -0,0 +1,140 @@ +/*========================================================================== +// +// mcount.S +// +// ARM mcount implementation +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Contributor(s): +// Date: 2014-03-14 +// Description: This file provides mcount functions used for +// call-graph profiling. +// +//####DESCRIPTIONEND#### +// +//======================================================================== +*/ + +#include "arm.inc" + +/* +// GCC inserts mcount code at the start of every function when compiling +// with "-pg". For GCC prior to version 4.4 targeting ARM, the following +// code is inserted: +// +// mov r12, lr +// bl mcount +// .word +// +// For GCC version 4.4 and later targeting ARM, the following code is +// inserted: +// +// push { lr } +// bl __gnu_mcount_nc +// +// We provide implementations of both mcount() and __gnu_mcount_nc() to +// call the eCos __profile_mcount() function. +*/ + + .syntax unified + .arm + .globl mcount + .section .text.mcount + .type mcount, %function +mcount: + // resume execution beyond the data pointer on return to caller + add lr, lr, #4 + + // caller assumes r0-r3 will be preserved (non-AAPCS), we use + // r6 and must preserve lr across our __profile_mcount() call + push { r0, r1, r2, r3, r6, lr } + + // set up parameters for __profile_mcount() + sub r0, r12, #2 + bic r0, r0, #1 + bic r1, lr, #1 + + // disable interrupts + mrs r6, cpsr + orr r2, r6, #CPSR_INTR_MASK + msr cpsr, r2 + + // call eCos __profile_mcount() + // r6 is preserved across the call per AAPCS + bl __profile_mcount + + // restore interrupts + msr cpsr, r6 + + // restore registers and return + pop { r0, r1, r2, r3, r6, r12 } + bx r12 + + + .globl __gnu_mcount_nc + .section .text.__gnu_mcount_nc + .type __gnu_mcount_nc, %function +__gnu_mcount_nc: + // caller assumes r0-r3 will be preserved (non-AAPCS), we use + // r6 and must preserve lr across our __profile_mcount() call + push { r0, r1, r2, r3, r6, lr } + + // set up parameters for __profile_mcount() + ldr r0, [ sp, #24 ] + sub r0, r0, #2 + bic r0, r0, #1 + bic r1, lr, #1 + + // disable interrupts + mrs r6, cpsr + orr r2, r6, #CPSR_INTR_MASK + msr cpsr, r2 + + // call eCos __profile_mcount() + // r6 is preserved across the call per AAPCS + bl __profile_mcount + + // restore interrupts + msr cpsr, r6 + + // restore registers and return + pop { r0, r1, r2, r3, r6, r12, lr } + bx r12 + +//========================================================================== +// end of mcount.S diff --git a/packages/hal/arm/arch/current/src/vectors.S b/packages/hal/arm/arch/current/src/vectors.S --- a/packages/hal/arm/arch/current/src/vectors.S +++ b/packages/hal/arm/arch/current/src/vectors.S @@ -428,7 +428,12 @@ 2: mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_UNDEF_MODE) msr cpsr,r0 ldr sp,.__exception_stack - +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE + mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_FIQ_MODE) + msr cpsr,r0 + ldr sp,.__fiq_stack +#endif + // initialize CPSR (machine state register) mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) msr cpsr,r0 @@ -770,6 +775,18 @@ 2: .code 32 FIQ: +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE + // If we are not disabling FIQs as part of eCos, these will be under + // user control. In theory the user should have installed their own + // FIQ VSR before enabling them and we should never come here. If + // we do there is nothing eCos itself can do because we are outside + // the scope of the system. The default action here, then, is to simply + // mask FIQs and return. + mrs r8,spsr // CPSR at time of interrupt + orr r8,r8,#CPSR_FIQ_DISABLE + msr spsr,r8 + subs pc,lr,#4 +#else // We can get here from any non-user mode. mrs r8,spsr // CPSR at time of interrupt and r9,r8,#CPSR_MODE_BITS // isolate pre-interrupt mode @@ -793,6 +810,7 @@ FIQ: // now it looks like we got an IRQ instead of an FIQ except that // FIQ is disabled so we don't recurse. +#endif IRQ: // Note: I use this exception stack while saving the context because // the current SP does not seem to be always valid in this CPU mode. @@ -804,6 +822,17 @@ IRQ: mov r3,sp mrs r4,cpsr // switch to Supervisor Mode + +#ifdef CYGOPT_HAL_ARM_FIQ_DISABLE + // Due to a small chance of contention with FIQ, + // we should disable FIQ while still in IRQ mode and then + // change to SVC mode. This only applies when eCos is masking + // FIQ alongside IRQ, otherwise FIQs are outside eCos' control + // and the FIQ to IRQ translation doesn't happen. + orr r4,r4,#CPSR_FIQ_DISABLE + msr cpsr,r4 +#endif + bic r4,r4,#CPSR_MODE_BITS // When handling an IRQ we must disable FIQ unless the current // mode in CPSR is IRQ. If we were to get a FIQ while in another @@ -812,7 +841,10 @@ IRQ: // for example, the stack pointer would be set to the beginning // of the exception_stack clobbering the registers we have just // saved. - orr r4,r4,#CPSR_SUPERVISOR_MODE|CPSR_FIQ_DISABLE + // However, if we are allowing the user to handle their own + // FIQs, we don't need to do that, since FIQ will not be + // translated to IRQ. + orr r4,r4,#CPSR_SUPERVISOR_MODE|CPSR_INTR_MASK msr cpsr,r4 mov r5,sp // save original svc sp @@ -990,8 +1022,8 @@ FUNC_START_ARM(hal_interrupt_stack_call_ stmfd sp!,{r4,r5,lr} // Disable interrupts mrs r4,cpsr // disable IRQ's - orr r2,r4,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE - bic r5,r4,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE + orr r2,r4,#CPSR_INTR_MASK + bic r5,r4,#CPSR_INTR_MASK msr cpsr,r2 // Switch to interrupt stack mov r3,sp // save old stack pointer @@ -1012,7 +1044,7 @@ FUNC_START_ARM(hal_interrupt_stack_call_ // Disable interrupts mrs r1,cpsr // disable IRQ's - orr r2,r1,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE + orr r2,r1,#CPSR_INTR_MASK msr cpsr,r2 // Move back to the thread stack. @@ -1036,21 +1068,21 @@ FUNC_START_ARM(hal_interrupt_stack_call_ FUNC_START_ARM(hal_disable_interrupts, r1) mrs r0,cpsr // current state - orr r1,r0,#0xC0 // mask both FIQ and IRQ + orr r1,r0,#CPSR_INTR_MASK // mask interrupts msr cpsr,r1 bx lr // exit, _old_ in r0 FUNC_START_ARM(hal_enable_interrupts, r1) mrs r0,cpsr // current state - bic r1,r0,#0xC0 // mask both FIQ and IRQ + bic r1,r0,#CPSR_INTR_MASK // mask interrupts msr cpsr,r1 bx lr // exit FUNC_START_ARM(hal_restore_interrupts, r1) mrs r1,cpsr // current state - bic r1,r1,#0xC0 // mask out FIQ/IRQ bits - and r0,r0,#0xC0 // keep only FIQ/IRQ - orr r1,r1,r0 // mask both FIQ and IRQ + bic r1,r1,#CPSR_INTR_MASK // mask out interrupts + and r0,r0,#CPSR_INTR_MASK // keep only interrupts + orr r1,r1,r0 // mask interrupts msr cpsr,r1 bx lr // exit @@ -1060,6 +1092,38 @@ FUNC_START_ARM(hal_query_interrupts, r1) #endif // __thumb__ +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE + +// Functions for controlling FIQ independently of IRQ. +// These are only present if we are not manipulating FIQs +// alongside IRQs in the standard interrupt control macros. + +FUNC_START_ARM(hal_disable_FIQ, r1) + mrs r0,cpsr // current state + orr r1,r0,#CPSR_FIQ_DISABLE // mask FIQs + msr cpsr,r1 + bx lr // exit, _old_ in r0 + +FUNC_START_ARM(hal_enable_FIQ, r1) + mrs r0,cpsr // current state + bic r1,r0,#CPSR_FIQ_DISABLE // mask FIQs + msr cpsr,r1 + bx lr // exit + +FUNC_START_ARM(hal_restore_FIQ, r1) + mrs r1,cpsr // current state + bic r1,r1,#CPSR_FIQ_DISABLE // mask out FIQs + and r0,r0,#CPSR_FIQ_DISABLE // keep only FIQs + orr r1,r1,r0 // mask FIQs + msr cpsr,r1 + bx lr // exit + +FUNC_START_ARM(hal_query_FIQ, r1) + mrs r0,cpsr // current state + bx lr // exit, state in r0 + +#endif + // Dummy/support functions .global __gccmain @@ -1129,7 +1193,9 @@ PTR(__interrupt_stack) #ifdef CYGHWR_HAL_ARM_DUMP_EXCEPTIONS PTR(__dump_procs) #endif - +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE +PTR(__fiq_stack) +#endif // // Identification - useful to find out when a system was configured _eCos_id: @@ -1187,6 +1253,16 @@ hal_interrupt_objects: .endr __undef_exception_stack: +#ifndef CYGOPT_HAL_ARM_FIQ_DISABLE + .balign 16 +__fiq_stack_base: + .rept CYGNUM_HAL_ARM_FIQ_STACK_SIZE + .byte 0 + .endr + .balign 16 +__fiq_stack: +#endif + // Runtime stack used during all interrupt processing #ifndef CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE #define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096 diff --git a/packages/hal/arm/at91/var/current/ChangeLog b/packages/hal/arm/at91/var/current/ChangeLog --- a/packages/hal/arm/at91/var/current/ChangeLog +++ b/packages/hal/arm/at91/var/current/ChangeLog @@ -1,3 +1,11 @@ +2010-12-17 John Dallaway + + * src/timer_tc.c: Implement a profiling timer on TC1. + * cdl/hal_arm_at91.cdl: Add CDL option to enable the profiling timer. + +2010-05-27 ccoutand + * include/var_io.h: Added ADC defines for AT91_M55800A CPU + 2009-06-03 Oliver Munz * Fix the a problem in the kernel delay_us, if the PIT is @@ -474,7 +482,7 @@ 2001-07-16 Gary Thomas // Register state info #include // necessary? +#ifdef CYGFUN_HAL_ARM_AT91_PROFILE_TIMER +#include // CYG_ISR_HANDLED +#include // __profile_hit() +#endif + // ------------------------------------------------------------------------- // Clock support @@ -158,4 +163,57 @@ void hal_delay_us(cyg_int32 usecs) } while ((stat & AT91_TC_SR_CPC) == 0); } +#ifdef CYGFUN_HAL_ARM_AT91_PROFILE_TIMER + +// Use TC1 for profiling +#define AT91_TC_PROFILE AT91_TC_TC1 +#define HAL_INTERRUPT_PROFILE CYGNUM_HAL_INTERRUPT_TIMER1 + +// Profiling timer ISR +static cyg_uint32 profile_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data, HAL_SavedRegisters *regs) +{ + cyg_uint32 status; + + HAL_READ_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_SR, status); // Clear interrupt + HAL_INTERRUPT_ACKNOWLEDGE(HAL_INTERRUPT_PROFILE); + __profile_hit(regs->pc); + return CYG_ISR_HANDLED; +} + +// Profiling timer setup +int hal_enable_profile_timer(int resolution) +{ + cyg_uint32 period; + + // Calculate how many timer ticks the requested resolution in + // microseconds equates to. We do this calculation in 64 bit + // arithmetic to avoid overflow. + period = (cyg_uint32)((((cyg_uint64)resolution) * + ((cyg_uint64)CYGNUM_HAL_ARM_AT91_CLOCK_SPEED))/32000000LL); + + CYG_ASSERT(period < 0x10000, "Invalid profile timer resolution"); // 16 bits only + + // Attach ISR + HAL_INTERRUPT_ATTACH(HAL_INTERRUPT_PROFILE, &profile_isr, 0x1111, 0); + HAL_INTERRUPT_UNMASK(HAL_INTERRUPT_PROFILE); + + // Disable counter + HAL_WRITE_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_CCR, AT91_TC_CCR_CLKDIS); + + // Set registers + HAL_WRITE_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_CMR, AT91_TC_CMR_CPCTRG | // Reset counter on CPC + AT91_TC_CMR_CLKS_MCK32); // Use MCLK/32 + HAL_WRITE_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_RC, period); + + // Start timer + HAL_WRITE_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_CCR, AT91_TC_CCR_TRIG | AT91_TC_CCR_CLKEN); + + // Enable timer interrupt + HAL_WRITE_UINT32(AT91_TC+AT91_TC_PROFILE+AT91_TC_IER, AT91_TC_IER_CPC); + + return resolution; +} + +#endif // CYGFUN_HAL_ARM_AT91_PROFILE_TIMER + // timer_tc.c diff --git a/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog b/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog --- a/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog +++ b/packages/hal/arm/lpc24xx/ea2468/current/ChangeLog @@ -1,3 +1,18 @@ +2012-04-23 Nick Garnett + + * include/pkgconf/mlt_arm_lpc24xx_ea2468_rom.ldi: + * include/pkgconf/mlt_arm_lpc24xx_ea2468_ram.ldi: Relocate fixed + vectors to 0x40000020. Previously, the HAL_VSR_GET/SET macros + accessed the wrong locations and didn't have any effect; now both + hardware and software have the same idea of where the VSR table + is. + NOTE: that this renders RAM applications built with this layout + incompatible with RedBoot built with the old layout. A new RedBoot + needs to be installed. + + * cdl/hal_arm_lpc24xx_ea2468.cdl: + * tests/fiq.c: Add FIQ test program. + 2010-03-12 Ross Younger * ea_lpc2468_nand.c: Tweak for updated k9 family NAND driver. diff --git a/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl b/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl --- a/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl +++ b/packages/hal/arm/lpc24xx/ea2468/current/cdl/hal_arm_lpc24xx_ea2468.cdl @@ -322,6 +322,12 @@ cdl_package CYGPKG_HAL_ARM_LPC24XX_EA246 } } + cdl_option CYGPKG_HAL_ARM_LPC24XX_EA2468_TESTS_EXTRAS { + display "EA2468 extra tests" + default_value 0 + description "Enable hand-run tests for EA2468 board." + } + cdl_component CYGHWR_HAL_ARM_LPC2XXX_EA_LPC2468_NAND { display "EA LPC2xxx NAND support" parent CYGPKG_IO_NAND @@ -383,7 +389,7 @@ cdl_package CYGPKG_HAL_ARM_LPC24XX_EA246 display "Tests for LPC2468 OEM board HAL" flavor data no_define - calculated { "tests/i2c_eeprom" } + calculated { "tests/i2c_eeprom" . (CYGPKG_HAL_ARM_LPC24XX_EA2468_TESTS_EXTRAS ? " tests/fiq" : "") } description " This option specifies the set of tests for the EA2468 OEM board HAL." diff --git a/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_ram.ldi b/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_ram.ldi --- a/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_ram.ldi +++ b/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_ram.ldi @@ -10,7 +10,7 @@ MEMORY SECTIONS { SECTIONS_BEGIN - SECTION_fixed_vectors (sram, 0x40000400, LMA_EQ_VMA) + SECTION_fixed_vectors (sram, 0x40000020, LMA_EQ_VMA) SECTION_rom_vectors (ram, 0xA0100000, LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) diff --git a/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_rom.ldi b/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_rom.ldi --- a/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_rom.ldi +++ b/packages/hal/arm/lpc24xx/ea2468/current/include/pkgconf/mlt_arm_lpc24xx_ea2468_rom.ldi @@ -18,7 +18,7 @@ SECTIONS SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) - SECTION_fixed_vectors (sram, 0x40000400, LMA_EQ_VMA) + SECTION_fixed_vectors (sram, 0x40000020, LMA_EQ_VMA) SECTION_data (ram, 0xA0000000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); diff --git a/packages/hal/arm/lpc24xx/ea2468/current/tests/fiq.c b/packages/hal/arm/lpc24xx/ea2468/current/tests/fiq.c new file mode 100644 --- /dev/null +++ b/packages/hal/arm/lpc24xx/ea2468/current/tests/fiq.c @@ -0,0 +1,182 @@ +//========================================================================== +// +// fiq.c +// +// FIQ interrupt test +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2012-04-20 +// Purpose: +// Description: FIQ test +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include +#include + +#include +#include + +#include + +#include + +//========================================================================== + +volatile int fiq_count = 0; + +void __attribute__ ((interrupt ("FIQ"))) fiq_vsr( void ) +{ + fiq_count++; + + // Clear interrupt + HAL_INTERRUPT_ACKNOWLEDGE( CYGNUM_HAL_INTERRUPT_EINT0 ); +} + +//========================================================================== + +void fiq_test(CYG_ADDRWORD p) +{ + volatile int fiq_count0 = 0; + volatile int fiq_count1 = 0; + volatile cyg_uint32 val1 = 0; + cyg_uint32 pinsel = CYGARC_HAL_LPC24XX_REG_PIN_BASE; + cyg_uint32 pinsel4; + cyg_uint32 vic = CYGARC_HAL_LPC24XX_REG_VIC_BASE; + cyg_uint32 intsel; + cyg_uint32 gpio = CYGARC_HAL_LPC24XX_REG_FIO_BASE; + + // Configure P2.10 as EINT0 + HAL_READ_UINT32( pinsel+CYGARC_HAL_LPC24XX_REG_PINSEL4, pinsel4 ); + pinsel4 &= ~(3<<20); + pinsel4 |= (1<<20); + HAL_WRITE_UINT32( pinsel+CYGARC_HAL_LPC24XX_REG_PINSEL4, pinsel4 ); + + // Configure EINT0 line for falling edge detection + HAL_INTERRUPT_CONFIGURE( CYGNUM_HAL_INTERRUPT_EINT0, false, false ); + +#if 1 + // Route EINT0 to FIQ input + HAL_READ_UINT32( vic+CYGARC_HAL_LPC24XX_REG_VICINTSELECT, intsel ); + intsel |= (1<>2); + + if( val != val1 ) + { + cyg_uint32 qf; + HAL_QUERY_FIQ( qf ); + //diag_printf("P2.10 %d fiq_count %d qf %08x\n", val, fiq_count, qf ); + val1 = val; + } + + + if( fiq_count0 != fiq_count ) + { + int dbcount = 10000; + int i = dbcount; + + // Crude debouncing: loop here while fiq_count is + // changing, only continue when it has been stable for + // dbcount loops. + while( i-- ) + { + if( fiq_count0 != fiq_count ) + { + fiq_count0 = fiq_count; + i = dbcount; + } + } + + fiq_count1++; + diag_printf("FIQ count %3d debounced %2d\n", fiq_count, fiq_count1 ); + } + } + + CYG_TEST_PASS_FINISH("fiq"); +} + +//========================================================================== + +#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL +static char stack[STACK_SIZE]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; + +void +cyg_start(void) +{ + CYG_TEST_INIT(); + + cyg_thread_create(10, // Priority - just a number + fiq_test, // entry + 0, // entry parameter + "FIQ test", // Name + &stack[0], // Stack + STACK_SIZE, // Size + &thread_handle, // Handle + &thread_data // Thread data structure + ); + cyg_thread_resume(thread_handle); /* Start it */ + cyg_scheduler_start(); +} + +//========================================================================== +// EOF diff --git a/packages/hal/arm/lpc2xxx/olpce2294/current/ChangeLog b/packages/hal/arm/lpc2xxx/olpce2294/current/ChangeLog --- a/packages/hal/arm/lpc2xxx/olpce2294/current/ChangeLog +++ b/packages/hal/arm/lpc2xxx/olpce2294/current/ChangeLog @@ -1,3 +1,13 @@ +2013-05-13 Uwe Kindler + + * cdl/hal_arm_lpc2xxx_olpce2294.cdl: Add support for all 4 CAN + interfaces. + +2012-03-07 Sergei Gavrikov + + * include/hal_platform_setup.h: Fix assembler warning (s suffix on + comparison instruction is deprecated), s/cmps/cmp/. + 2009-02-02 Sergei Gavrikov * cdl/hal_arm_lpc2xxx_olpce2294.cdl: Expanded a list the legal baud diff --git a/packages/hal/arm/lpc2xxx/olpce2294/current/cdl/hal_arm_lpc2xxx_olpce2294.cdl b/packages/hal/arm/lpc2xxx/olpce2294/current/cdl/hal_arm_lpc2xxx_olpce2294.cdl --- a/packages/hal/arm/lpc2xxx/olpce2294/current/cdl/hal_arm_lpc2xxx_olpce2294.cdl +++ b/packages/hal/arm/lpc2xxx/olpce2294/current/cdl/hal_arm_lpc2xxx_olpce2294.cdl @@ -54,6 +54,10 @@ cdl_package CYGPKG_HAL_ARM_LPC2XXX_OLPCE define_header hal_arm_lpc2xxx_olpce2294.h include_dir cyg/hal hardware + implements CYGINT_DEVS_CAN_LPC2XXX_CAN0 + implements CYGINT_DEVS_CAN_LPC2XXX_CAN1 + implements CYGINT_DEVS_CAN_LPC2XXX_CAN2 + implements CYGINT_DEVS_CAN_LPC2XXX_CAN3 description " The OLPCE2294 HAL package provides the support needed to run eCos on Olimex LPC-E2294 development board." diff --git a/packages/hal/arm/lpc2xxx/olpce2294/current/include/hal_platform_setup.h b/packages/hal/arm/lpc2xxx/olpce2294/current/include/hal_platform_setup.h --- a/packages/hal/arm/lpc2xxx/olpce2294/current/include/hal_platform_setup.h +++ b/packages/hal/arm/lpc2xxx/olpce2294/current/include/hal_platform_setup.h @@ -117,7 +117,7 @@ 1: 1: ldr r3,[r0,#4]! str r3,[r1,#4]! - cmps r0,r2 + cmp r0,r2 bne 1b ldr r0,=CYGARC_HAL_LPC2XXX_REG_SCB_BASE diff --git a/packages/hal/arm/lpc2xxx/olpch2294/current/ChangeLog b/packages/hal/arm/lpc2xxx/olpch2294/current/ChangeLog --- a/packages/hal/arm/lpc2xxx/olpch2294/current/ChangeLog +++ b/packages/hal/arm/lpc2xxx/olpch2294/current/ChangeLog @@ -1,3 +1,8 @@ +2012-03-07 Sergei Gavrikov + + * include/hal_platform_setup.h: Fix assembler warning (s suffix on + comparison instruction is deprecated), s/cmps/cmp/. + 2009-02-02 Sergei Gavrikov * cdl/hal_arm_lpc2xxx_olpch2294.cdl: Expanded a list the legal baud diff --git a/packages/hal/arm/lpc2xxx/olpch2294/current/include/hal_platform_setup.h b/packages/hal/arm/lpc2xxx/olpch2294/current/include/hal_platform_setup.h --- a/packages/hal/arm/lpc2xxx/olpch2294/current/include/hal_platform_setup.h +++ b/packages/hal/arm/lpc2xxx/olpch2294/current/include/hal_platform_setup.h @@ -118,7 +118,7 @@ 1: 1: ldr r3,[r0,#4]! str r3,[r1,#4]! - cmps r0,r2 + cmp r0,r2 bne 1b ldr r0,=CYGARC_HAL_LPC2XXX_REG_SCB_BASE diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/ChangeLog b/packages/hal/arm/lpc2xxx/olpcl2294/current/ChangeLog --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/ChangeLog +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/ChangeLog @@ -1,3 +1,22 @@ +2013-09-11 Uwe Kindler + + * cdl/hal_arm_lpc2xxx_olpcl2294.cdl: Add support for CAN interface 0. + +2012-03-07 Sergei Gavrikov + + * include/hal_platform_setup.h: Fix assembler warning (s suffix on + comparison instruction is deprecated), s/cmps/cmp/. + +2010-11-03 JF Argentino +2010-11-24 Sergei Gavrikov + + * cdl/hal_arm_lpc2xxx_olpcl2294.cdl: Add support for LPC-L2294-8M + board: new CDL component CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_VARIANT + with CDL option CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE. + * include/hal_platform_setup.h: Add support for LPC-L2294-8M board. + * include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_{rom,ram}.{h,ldi}: Define + RAM size with new CDL option. + 2009-02-02 Sergei Gavrikov * cdl/hal_arm_lpc2xxx_olpcl2294.cdl: Expanded a list the legal baud diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/cdl/hal_arm_lpc2xxx_olpcl2294.cdl b/packages/hal/arm/lpc2xxx/olpcl2294/current/cdl/hal_arm_lpc2xxx_olpcl2294.cdl --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/cdl/hal_arm_lpc2xxx_olpcl2294.cdl +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/cdl/hal_arm_lpc2xxx_olpcl2294.cdl @@ -3,7 +3,7 @@ # hal_arm_lpc2xxx_olpcl2294.cdl # # ARM LPC2XXX OLPCL2294 development board package configuration -# data +# data, for both 1MB and 8MB of external RAM # # ==================================================================== ## ####ECOSGPLCOPYRIGHTBEGIN#### @@ -49,14 +49,15 @@ # ==================================================================== cdl_package CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294 { - display "Olimex LPC-L2294-1MB development board HAL" + display "Olimex LPC-L2294 development board HAL" parent CYGPKG_HAL_ARM_LPC2XXX define_header hal_arm_lpc2xxx_olpcl2294.h include_dir cyg/hal hardware + implements CYGINT_DEVS_CAN_LPC2XXX_CAN0 description " The OLPCL2294 HAL package provides the support needed to run - eCos on Olimex LPC-L2294-1MB development board." + eCos on Olimex LPC-L2294-1MB or LPC-L2294-8MB development board." compile olpcl2294_misc.c @@ -71,6 +72,23 @@ cdl_package CYGPKG_HAL_ARM_LPC2XXX_OLPCL puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" } + cdl_component CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_VARIANT { + display "OLPCL2294 variant used" + flavor data + default_value { "OLPCL2294_1M" } + legal_values { "OLPCL2294_1M" "OLPCL2294_8M" } + define -file system.h CYGHWR_OLIMEX_BOARD + description "Choose the OLIMEX LPC-L2294 board variant" + + cdl_option CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE { + display "External RAM size" + flavor data + calculated { is_substr(CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_VARIANT, "1M") ? + 0x100000 : 0x800000 } + description "The installed RAM size depends on the board variant" + } + } + cdl_component CYG_HAL_STARTUP { display "Startup type" flavor data diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/hal_platform_setup.h b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/hal_platform_setup.h --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/hal_platform_setup.h +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/hal_platform_setup.h @@ -119,7 +119,7 @@ 1: 1: ldr r3,[r0,#4]! str r3,[r1,#4]! - cmps r0,r2 + cmp r0,r2 bne 1b ldr r0,=CYGARC_HAL_LPC2XXX_REG_SCB_BASE @@ -138,8 +138,9 @@ 1: // memories, while memory chips capable of accepting 16 or 32 bit wide // data will work with RBLE = 1. // - // BANK0: 2M FLASH - // TE28F160C3BD70 (1024Kx16 x 1, 70nS) + // BANK0: FLASH memory + // -TE28F160C3BD70 (1024Kx16 x 1 = 2MB, 70nS) for 1MB RAM version + // -TE28F320C3BD70 (2048Kx16 x 1 = 4MB, 70ns) for 8MB RAM version ldr r0,=CYGARC_HAL_LPC2XXX_REG_BCFG0 ldr r1,= (0x3 << 0) /* IDCY=3, idle timing */\ | (0x4 << 5) /* WST1=4, read timing */\ @@ -148,16 +149,28 @@ 1: | (0x1 << 28) /* MW=1, 16-bits */ str r1,[r0] - // BANK1: 1M RAM - // K6R4016V1D (512Kx16 x 2, 10nS) - ldr r0,=CYGARC_HAL_LPC2XXX_REG_BCFG1 + // BANK1: external RAM // Warning: changed these timings, you can fall dramatically the eCos // kernel performance. Check it then using the eCos 'tm_basic' test. + // TODO A way to make the timing value dependent of CCLK + ldr r0,=CYGARC_HAL_LPC2XXX_REG_BCFG1 +#if defined (CYGHWR_OLIMEX_BOARD_OLPCL2294_1M) + // 1MB version uses K6R4016V1D (512Kx16 x 2, 10nS) ldr r1,= (0x0 << 0) /* IDCY=0, idle cycles */\ | (0x0 << 5) /* WST1=0, read timing */\ | (0x1 << 10) /* RBLE=1 */\ | (0x0 << 11) /* WST2=0, write timing */\ | (0x2 << 28) /* MW=2, 32-bits */ +#elif defined (CYGHWR_OLIMEX_BOARD_OLPCL2294_8M) + // 8MB version uses a K1S321611C (2048Kx16 x 2, 70ns) + ldr r1,= (0x3 << 0) /* IDCY=3, idle cycles TODO */\ + | (0x4 << 5) /* WST1=4, read timing */\ + | (0x1 << 10) /* RBLE=1 */\ + | (0x4 << 11) /* WST2=4, write timing */\ + | (0x2 << 28) /* MW=2, 32-bits */ +#else +#error Board not supported, OLIMEX LPC-L2294 1M or 8M only for now. +#endif str r1,[r0] // BANK2: Ethernet diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.h b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.h --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.h +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.h @@ -5,7 +5,7 @@ #endif #define CYGMEM_REGION_ram (0x81000000) -#define CYGMEM_REGION_ram_SIZE (0x00100000) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #ifndef __ASSEMBLER__ @@ -15,5 +15,5 @@ extern char CYG_LABEL_NAME (__heap1) []; #define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) -#define CYGMEM_SECTION_heap1_SIZE (0x81100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.ldi b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.ldi --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.ldi +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_ram.ldi @@ -3,7 +3,7 @@ MEMORY { ram0 : ORIGIN = 0x40000000, LENGTH = 0x4000 - ram : ORIGIN = 0x81000000, LENGTH = 0x100000 + ram : ORIGIN = 0x81000000, LENGTH = CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE } SECTIONS diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.h b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.h --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.h +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.h @@ -8,7 +8,7 @@ #define CYGMEM_REGION_rom_SIZE (0x00040000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) #define CYGMEM_REGION_ram (0x81000000) -#define CYGMEM_REGION_ram_SIZE (0x00100000) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #ifndef __ASSEMBLER__ @@ -18,5 +18,5 @@ extern char CYG_LABEL_NAME (__heap1) []; #define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) -#define CYGMEM_SECTION_heap1_SIZE (0x81100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.ldi b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.ldi --- a/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.ldi +++ b/packages/hal/arm/lpc2xxx/olpcl2294/current/include/pkgconf/mlt_arm_lpc2xxx_olpcl2294_rom.ldi @@ -3,7 +3,7 @@ MEMORY { ram0 : ORIGIN = 0x40000000, LENGTH = 0x4000 - ram : ORIGIN = 0x81000000, LENGTH = 0x100000 + ram : ORIGIN = 0x81000000, LENGTH = CYGHWR_HAL_ARM_LPC2XXX_OLPCL2294_RAMSIZE rom : ORIGIN = 0x00000000, LENGTH = 0x40000 } diff --git a/packages/hal/arm/lpc2xxx/var/current/ChangeLog b/packages/hal/arm/lpc2xxx/var/current/ChangeLog --- a/packages/hal/arm/lpc2xxx/var/current/ChangeLog +++ b/packages/hal/arm/lpc2xxx/var/current/ChangeLog @@ -1,3 +1,8 @@ +2012-03-13 Sergei Gavrikov + + * src/lpc2xxx_misc.c: Fix compiler warning about variable that is set + but not used. + 2009-06-10 Sergei Gavrikov * src/hal_diag.c: workaround for a suppressing a compiler warning, diff --git a/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c b/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c --- a/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c +++ b/packages/hal/arm/lpc2xxx/var/current/src/lpc2xxx_misc.c @@ -436,7 +436,7 @@ void hal_interrupt_set_level(int vector, if (level < 16) { cyg_uint32 addr_offset = level << 2; - cyg_uint32 reg_val; + cyg_uint32 reg_val CYGBLD_ATTRIB_UNUSED; HAL_READ_UINT32(CYGARC_HAL_LPC2XXX_REG_VIC_BASE + CYGARC_HAL_LPC2XXX_REG_VICVECTCNTL0 + diff --git a/packages/hal/common/current/ChangeLog b/packages/hal/common/current/ChangeLog --- a/packages/hal/common/current/ChangeLog +++ b/packages/hal/common/current/ChangeLog @@ -1,3 +1,43 @@ +2013-06-13 Ilija Kocho + + * tests/cache.c : Fix compiler warning about variable set but not used. + [ Bugzilla 1001865 ] + +2012-04-25 Ilija Kocho + + * include/hal_stub.h, src/hal_stub.c, src/thread-packets.c: + NUMREGS replaced by HAL_STUB_REGISTERS_SIZE in thread-packets.c + [Bugzilla 1001558] + +2012-03-14 Grant Edwards + + * src/generic-stub.c (process_query): Fix compiler warning about + variable that is set but not used (only used in conditionally + compiled code). [ Bugzilla 1001535 ] + +2012-03-09 Sergei Gavrikov + + * src/hal_if.c (hal_ctrlc_check): Fix compiler warning about + variable that is set but not used (isr_ret has been removed). + +2011-01-13 John Dallaway + + * cdl/hal.cdl: Add a CDL interface to control whether interrupt + state must be saved. [ Bugzilla 1001111 ] + * cdl/debugging.cdl: Implement the new interface within GDB Ctrl-C + break options. + * src/hal_if.c: Make declaration of the hal_saved_interrupt_state + variable conditional on an implementation of the new CDL interface. + +2010-11-20 John Dallaway + + * cdl/hal.cdl: Suppress -fprofile-arcs (which implies -lgcov) when + generating extras.o. + +2010-10-09 John Dallaway + + * doc/porting.sgml: Delete references to the memory layout editor. + 2009-02-02 Bart Veer * cdl/hal.cdl: add CYGBLD_GLOBAL_WARNFLAGS, as part of global @@ -2342,7 +2382,7 @@ 1998-08-18 Nick Garnett /lib/extras.o: /lib/libextras.a - $(CC) $(CFLAGS) -nostdlib -Wl,-r -T /dev/null -Wl,--whole-archive -o $@ $< + $(CC) $(CFLAGS) -fno-profile-arcs -nostdlib -Wl,-r -T /dev/null -Wl,--whole-archive -o $@ $< } cdl_option CYGBLD_GLOBAL_WARNFLAGS { @@ -397,7 +397,7 @@ cdl_package CYGPKG_HAL { # Does platform need special I/O initializations? cdl_interface CYGINT_HAL_PLF_IF_INIT { - display "Platform defined I/O channels." + display "Platform defined I/O channels" description " Platforms which provide additional I/O channels can implement this interface, indicating that the function plf_if_init() @@ -406,12 +406,22 @@ cdl_package CYGPKG_HAL { # Does platform provide IDE I/O macros? cdl_interface CYGINT_HAL_PLF_IF_IDE { - display "Platform IDE I/O support." + display "Platform IDE I/O support" description " Platforms which provide IDE controllers can implement this interface, indicating that IDE I/O macros are available." } + + # Does anything require access to saved interrupt state? + cdl_interface CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED { + display "Saved interrupt state required" + description " + Components requiring access to saved interrupt state via the + hal_saved_interrupt_state symbol should implement this + interface." + } + cdl_option CYGPKG_HAL_GDB_FILEIO { display "File I/O operations via GDB" default_value 0 diff --git a/packages/hal/common/current/doc/porting.sgml b/packages/hal/common/current/doc/porting.sgml --- a/packages/hal/common/current/doc/porting.sgml +++ b/packages/hal/common/current/doc/porting.sgml @@ -9,7 +9,7 @@ - + @@ -1797,7 +1797,7 @@ RedBoot. You are advised to read all the Copy an existing platform HAL from the same or another architecture. Rename the files as necessary to follow the - standard: CDL and MLT related files should contain the + standard: CDL and memory layout related files should contain the <arch>_<variant>_<platform> triplet. @@ -1817,12 +1817,12 @@ RedBoot. You are advised to read all the packages will be added later. -Adjust the MLT files in +Adjust the memory layout files in include/pkgconf to match the memory layout on - the platform. For initial testing it should be enough to just hand + the platform. See for more details. @@ -2591,9 +2591,13 @@ monitor, then different output formats w
Platform Memory Layout -The platform memory layout is defined using the Memory -Configuration Window in the Configuration Tool. - +Historically, the platform memory layout was defined using a Memory +Configuration window in the eCos Configuration Tool (version 1.x). +However, the memory layout feature was not ported to the wxWidgets version +of the tool (version 2.0 and later). Memory layouts are currently manipulated +using a text editor. + +
Layout Files -The memory configuration details are saved in three files: +The memory configuration details are specified in two files: + .ldi This is the linker script fragment. It defines the memory @@ -2627,8 +2634,11 @@ map files for you. -These three files are generated for each startup-type, since the -memory details usually differ. +These files are generated for each startup-type, since the +memory details usually differ. The layout and structure of new files +should match those of existing memory layout files to allow for the +introduction of a new memory layout editor in the future. +
@@ -2640,8 +2650,8 @@ purposes, making room for exception vect startup configurations also need to reserve some space at the bottom of the memory map for the ROM monitor. -These reserved areas are named with the prefix "reserved_" which is -handled specially by the Configuration Tool: instead of referring to a +These reserved areas are named with the prefix "reserved_" instead of referring to a linker macro, the start of the area is labeled and a gap left in the memory map. diff --git a/packages/hal/common/current/include/hal_stub.h b/packages/hal/common/current/include/hal_stub.h --- a/packages/hal/common/current/include/hal_stub.h +++ b/packages/hal/common/current/include/hal_stub.h @@ -82,6 +82,15 @@ typedef cyg_int32 int32; #endif #include +// Some architectures use registers of different sizes, so NUMREGS +// alone is not sufficient to size the register save area. For those +// architectures, HAL_STUB_REGISTERS_SIZE is defined as the number +// of target_register_t sized elements in the register save area. +#ifndef HAL_STUB_REGISTERS_SIZE +#define HAL_STUB_REGISTERS_SIZE NUMREGS +#endif + + #ifdef __cplusplus extern "C" { #endif diff --git a/packages/hal/common/current/src/generic-stub.c b/packages/hal/common/current/src/generic-stub.c --- a/packages/hal/common/current/src/generic-stub.c +++ b/packages/hal/common/current/src/generic-stub.c @@ -2007,7 +2007,7 @@ process_query (char *pkt) else { char ch ; - char * subpkt ; + char *subpkt CYGBLD_ATTRIB_UNUSED; ch = *pkt ; subpkt = pkt + 1 ; switch (ch) diff --git a/packages/hal/common/current/src/hal_if.c b/packages/hal/common/current/src/hal_if.c --- a/packages/hal/common/current/src/hal_if.c +++ b/packages/hal/common/current/src/hal_if.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2011 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -40,7 +40,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): jskov -// Contributors:jskov, woehler +// Contributors:jskov, woehler, jld // Date: 2000-06-07 // //####DESCRIPTIONEND#### @@ -887,11 +887,13 @@ hal_if_diag_read_char(char *c) // CtrlC support //============================================================================= +#if CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED > 0 +struct Hal_SavedRegisters *hal_saved_interrupt_state; +#endif + #if defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) \ || defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) -struct Hal_SavedRegisters *hal_saved_interrupt_state; - void hal_ctrlc_isr_init(void) { @@ -945,7 +947,7 @@ hal_ctrlc_check(CYG_ADDRWORD vector, CYG { hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS(); int gdb_vector = vector-1; - int isr_ret, ctrlc = 0; + int ctrlc = 0; // This check only to avoid crash on older stubs in case of unhandled // interrupts. It is a bit messy, but required in a transition period. @@ -955,7 +957,7 @@ hal_ctrlc_check(CYG_ADDRWORD vector, CYG gdb_vector = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_DBG_ISR_VECTOR); } if (vector == gdb_vector) { - isr_ret = CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data); + CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data); if (ctrlc) { cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state ); return true; diff --git a/packages/hal/common/current/src/hal_stub.c b/packages/hal/common/current/src/hal_stub.c --- a/packages/hal/common/current/src/hal_stub.c +++ b/packages/hal/common/current/src/hal_stub.c @@ -83,14 +83,6 @@ //----------------------------------------------------------------------------- // Extra eCos data. -// Some architectures use registers of different sizes, so NUMREGS -// alone is not suffucient to size the register save area. For those -// architectures, HAL_STUB_REGISTERS_SIZE is defined as the number -// of target_register_t sized elements in the register save area. -#ifndef HAL_STUB_REGISTERS_SIZE -#define HAL_STUB_REGISTERS_SIZE NUMREGS -#endif - // Saved registers. HAL_SavedRegisters *_hal_registers; target_register_t registers[HAL_STUB_REGISTERS_SIZE]; diff --git a/packages/hal/common/current/src/thread-packets.c b/packages/hal/common/current/src/thread-packets.c --- a/packages/hal/common/current/src/thread-packets.c +++ b/packages/hal/common/current/src/thread-packets.c @@ -134,7 +134,7 @@ static void stub_copy_registers( ) { target_register_t * limit ; - limit = dest + NUMREGS ; + limit = dest + HAL_STUB_REGISTERS_SIZE ; while (dest < limit) *dest++ = *src++ ; } @@ -480,9 +480,10 @@ void stub_pkt_currthread( int bufmax) { threadref thread ; +#if PKT_DEBUG char * base_out ; base_out = outbuf ; - +#endif if (dbg_currthread(&thread)) { *outbuf++ = 'Q' ; diff --git a/packages/hal/common/current/tests/cache.c b/packages/hal/common/current/tests/cache.c --- a/packages/hal/common/current/tests/cache.c +++ b/packages/hal/common/current/tests/cache.c @@ -96,7 +96,7 @@ volatile char m[(HAL_DCACHE_SIZE/HAL_DCA static void time0(register cyg_uint32 stride) { register cyg_uint32 j,k; - register char c; + register char c CYGBLD_ATTRIB_UNUSED; diag_printf("stride=%d\n", stride); diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/ChangeLog b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/ChangeLog @@ -0,0 +1,45 @@ +2011-01-18 Christophe Coutand + + * cdl/hal_cortexm_a2f200_eval.cdl: + * doc/a2f200e.sgml + * src/a2f200_eval_misc.c: + * src/platform_i2c.c: + * host/memory-map.xml: + * host/softconsole_flash_init.txt: + * host/softconsole_sram_init.txt: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * include/pkgconf/mlt_cortexm_a2f200_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_a2f200_eval_rom.h: + * include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.ldi: + * include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.h: + * include/pkgconf/mlt_cortexm_a2f200_eval_sram.ldi: + * include/pkgconf/mlt_cortexm_a2f200_eval_sram.h: + New package -- Actel Smartfusion A2F200 EVAL board HAL. + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/cdl/hal_cortexm_a2f200_eval.cdl b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/cdl/hal_cortexm_a2f200_eval.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/cdl/hal_cortexm_a2f200_eval.cdl @@ -0,0 +1,328 @@ +##========================================================================== +## +## hal_cortexm_a2f200_eval.cdl +## +## Actel Smartfusion A2F200 EVAL platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand +## Date: 2011-02-13 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_A2F200_EVAL { + display "Actel Smartfusion Development Board HAL" + doc ref/hal-cortexm-a2fxxx-a2f200-eval.html + parent CYGPKG_HAL_CORTEXM_A2FXXX + define_header hal_cortexm_a2f200_eval.h + include_dir cyg/hal + hardware + description " + The Actel Smartfusion HAL package provides the support needed to run + eCos on the Actel Smartfusion A2F200 EVAL board." + + compile a2f200_eval_misc.c platform_i2c.c + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_DP8384X) } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M3\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Smartfusion A2F200 EVAL\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_option CYGNUM_DEVS_FLASH_SPI_AT25XXX_DEV0_MAP_ADDR { + display "Base address of the SPI flash device" + flavor data + default_value 0x10000000 + description " + Specifies the base address of the Atmel AT95DFxxx SPI flash." + } + + cdl_component CYG_HAL_STARTUP { + display "Architecture Startup type" + flavor data + legal_values { "SRAM" "ROM" } + calculated { CYG_HAL_PLF_STARTUP == "SRAM" ? "SRAM" : "ROM" } + description " + Mapping of CYG_HAL_PLF_STARTUP to CYG_HAL_STARTUP" + define -file system.h CYG_HAL_STARTUP + } + + cdl_component CYG_HAL_PLF_STARTUP { + display "Platform Startup type" + flavor data + default_value {"ROM"} + legal_values {"SRAM" "ROM" "ROM_SOFTCONSOLE"} + description " + When targeting the Smartfusion A2F200 EVAL board it is possible + to build the system for either SRAM bootstrap or ROM bootstrap. + Select 'SRAM' when building programs to load into SRAM using + on-board debug software such as RedBoot or eCos GDB stubs or via + a JTAG debugger. + Select 'ROM' when building a stand-alone application which will + be put into ROM. The 'ROM_SOFTCONSOLE' type allows programs to be + loaded (to 'ROM') and debug using the SoftConsole IDE." + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_PLF_STARTUP == "SRAM" ) ? "cortexm_a2f200_eval_sram" : + (CYG_HAL_PLF_STARTUP == "ROM" ) ? "cortexm_a2f200_eval_rom" : + (CYG_HAL_PLF_STARTUP == "ROM_SOFTCONSOLE" ) ? "cortexm_a2f200_eval_rom_sc" : + "undefined" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + + } + + # Both UARTs 0 and 1 are available for diagnostic/debug use. + implements CYGINT_HAL_A2FXXX_UART0 + + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The Actel Smartfusion EVAL board has two serial ports. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The Actel Smartfusion EVAL has two serial ports. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console port if the + console and GDB port are the same." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + requires { CYGNUM_REDBOOT_FLASH_BASE == 0x60000000 } + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary images" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to binary image formats suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + } + } + + cdl_component CYGBLD_HAL_CORTEXM_A2FXXX_EVAL_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description "This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } + +} diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/doc/a2f200e.sgml b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/doc/a2f200e.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/doc/a2f200e.sgml @@ -0,0 +1,814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Actel Smartfusion Board Support + + + + + Actel Smartfusion Board Support + + + + + + Overview + + + + Overview + Actel Smartfusion Board Support + + + Overview + + + The Actel Smartfusion evaluation kit uses the A2F200 microcontroller from the + Actel smartfusion family. The SmartFusion devices are a mix of programmable + logic around a ARM cortex-M3 based processor. The SmartFusion has 3 variants: + A2F060, A2F200, A2F500. The main difference between parts are the amount of + RAM, FLASH as well as programmable logic. In addition, the A2F060 does not + include the Ethernet controller peripheral. + The A2F200 device includes 256KB of internal FLASH (also called Embedded + Non-volatile Memory, ENVM) and 64KB of internal SRAM. + The device has various peripherals such as UART, I2C, SPI, Ethernet MAC, ADC or + DAC as well as the FPGA fabric. + The kit features an OLED graphical display and UART0 is accessible via the + on-board USB to UART converter. The kit also includes a serial flash, the Atmel + AT25DF641 part (8MB memory). + The FPGA fabric uses a non-volatile technology thus removing the + need of additional flash memory for storing the FPGA programming matrix. + + + + The eCos port targets standalone ROM application. The eCos device drivers include + support for the I2C and SPI buses as well as UART and Ethernet Controller. No + device driver is currently available for the ADC/DAC or the In-Application + Programming feature that allows the application to re-program the FLASH or the + FPGA fabric. + The Smartfusion (A2Fxxx) HAL includes a timer test application and the A2F200 evaluation + board flash device package includes a test application for the SPI serial flash. + + + + + + Tools + + + For compilation, the official eCos ARM toolchain is required (gcc version 4.3.2). + For debugging, while the board offers a JTAG interface, the HAL was developed using + the SoftConsole IDE supplied from Actel. SoftConsole is an Eclipse based IDE + installed along with the CodeSourcery ARM compiler / debugger. The ARM GDB and Sprite + utilities from CodeSourcery are used to debug the target. The target includes an on-board + debugger and is connected to the host via a USB cable. GDB interfaces the + on-board debugger through the Actel flashpro driver. Detailed example of a debugging + session is described later in this chapter. + + + + + + + + + + + HAL and Device Drivers + + + + HAL + Actel HAL and Device Drivers + + + + Clocking + + + The internal clock network of the Smarfusion devices includes a large amount of possible + configuration combination. The network has 3 different input clocks (CLKA, CLKB and CLKC), + each of them can be connected to a different clock source such as the main oscillator, the + RC oscillator, the FPGA fabric or the dedicated single-ended or differential IO. The clock + network has an internal PLL and 3 global output clocks (CLKGA, CLKGB and CLKGC). The cortex-M3, + digital and analog peripherals clocks are derived either from CLKGA or CLKGC through the + NGMUX. + Due to the large amount of configuration parameters, it is recommended to use the Actel MSS + configuration tool to setup the clock network and let the system boot handle the configuration. + However, the eCos HAL includes all the required options to setup the clock network. Note that + only a limited subset of combinations have been tested. + + + + + + + SPI bus + + + The Actel AF2xxx microcontroller family has 2 SPI buses available. Each SPI bus has + a certain number of slave select line (called SPI_x_SSx) that are directly driven by + the SPI controller. + The first SPI bus has 4 slave select lines available (SPI_0_SS0 to SPI_0_SS3) while the + second bus has 8 of them (SPI_1_SS0 to SPI_1_SS7). In addition, the eCos SPI driver allows + using the GPIO of the microcontroller as slave select lines which is in some cases required. + In the rest of this chapter, the former case is called SPI controlled slave select while + the later is called GPIO controlled slave select + + + + NOTE: The SPI_x_SSx microcontroller dedicated pins can be used as GPIO, thus, it is possible + to use SPI_0_SS0 as slave select either in SPI or GPIO controlled mode. This is true for all + SPI_x_SSx pins. + + + + New SPI devices are instantiated using the following macro: + + + #include <cyg/io/spi.h> + #include <cyg/io/spi_a2fxxx.h> + + #define CYG_DEVS_SPI_CORTEXM_A2FXXX_DEVICE( \ + _name_, _bus_, _csnum_, _csgpio_, _proto_, _clpol_, \ + _clpha_, _brate_, _csup_dly_, _csdw_dly_, _trbt_dly_) + + + _name_ is the name of the SPI device. This will be used to + reference a data structure of type cyg_spi_device + which can be passed to the SPI driver API without + needing a cast. + _bus_ is the bus number to which this device is attached + (1 or 2). + _csgpio_ when set to false: + - the device slave select line is controlled by the + SPI controller. + when set to true: + - the device slave select line is a GPIO of the + processor controlled by the SPI driver. + _csnum_ when _csgpio_ is set to false : + - is the slave select line used for this device, + numbered from 0. + when _csgpio_ is set to true : + - is the GPIO number used to drive the device slave + select line. + _proto_ is the SPI bus protocol: + 0 -> Motorola SPI Mode (_clpol_ and _clpha_ are + valid in this mode) + 1 -> National Semiconductor MICROWIRE Mode + 2 -> Texas Instruments (TI) Synchronous Serial Mode + _clpol_ is the SPI bus clock polarity used by the device + (valid only for Motorola SPI Protocol). + _clpha_ is the SPI bus clock phase used by the device + (valid only for Motorola SPI Protocol). + _brate_ is the SPI bus clock baud rate used by the device, + measured in Hz. + _csup_dly_ is the minimum delay between slave select assert and + transfer start, measured in microseconds. + _csdw_dly_ is the minimum delay between transfer end and slave + select deassert, measured in microseconds. + _trbt_dly_ is the minimum delay between consecutive transfers. + + + + NOTE: _csup_dly_ and _csdw_dly_ are only valid when GPIOs are configured to drive the + slave select line. When the SPI controller drives the slave select line itself, the user + has no control over the exact timing. + + + + The Actel Smartfusion board features a SPI serial flash (AT25DF641) attached + to the first SPI bus. The SPI flash is connected to the SPI_0_SS0 line, however, to suit + eCos SPI transaction, the line is configured as a general purpose IO and controlled by the + SPI driver. + + + + The following section describes how the SPI serial flash is declared. The code is located + in devs/fash/cortexm/a2fxxx/a2f200_eval/flash_a2f200_eval.c. The required includes are: + + + + #include <cyg/io/spi.h> + #include <cyg/io/at25dfxxx.h> + #include <cyg/io/spi_a2fxxx.h> + + + + The device is defined to be connected on SPI bus 1, using GPIO 19 for slave select. + The Motorola protocol (mode 0) is selected with a bus clock speed of 25MHz. + + + + CYG_DEVS_SPI_CORTEXM_A2FXXX_DEVICE ( + at25dfxxx_spi_device, 1, 19, true, A2FXXX_SPI_MOTOROLA, 0, 0, 25000000, 1, 1, 1 + ); + + _bus_ = 1 + _csgpio_ = true -> use GPIO + _csgpio_ = 19 -> GPIO19 also SPI_0_SS0 + _proto_ = Motorola Protocol + _clpol_ = 0 + _clpha_ = 0 + _brate_ = 25MHz + _csup_dly = 1us + _csdw_dly_ = 1us + _trbt_dly_ = 1us + + + + From the default CDL, SPI bus 1 uses the DMA channel 0 for outbound and channel 1 for inbound + transfer. SPI bus 2 uses DMA channel 2 and 3 respectively. The DMA channel number are selected + with: + + + + CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_TX_DMA + CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS1_RX_DMA + and + CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_TX_DMA + CYGNUM_DEVS_SPI_CORTEXM_A2FXXX_BUS2_RX_DMA + + + + + + + I2C bus + + + The Actel microcontroller family has 2 I2C buses available and the Smartfusion evaluation kit + feature an OLED display connected to the first I2C bus with address 0x3C. + The I2C driver is tested using the OLED display, however, the OLED driver is not part of the + eCos HAL. A new I2C bus is instantiated using the following macro: + + + + #define CYG_A2FXXX_I2C_BUS( \ + _name_, \ + _init_fn_, \ + _base_, \ + _base_bb_, \ + _periph_, \ + _isr_vec_, \ + _isr_pri_) \ + + _name_ is the name of the SPI device. + _init_fn_ is the I2C initialization function to be called by the C constructor. + _base_ is the base address of the I2C peripheral. + _base_bb_ is the Bit-Band base address of the I2C peripheral. + _periph_ is the peripheral bit identifier for reset/release operation. + _isr_vec_ is the peripheral interrupt vector number. + _isr_pri_ is the interrupt priority. + + + + The following section describes how the I2C bus 0 is declared. The code is located in + hal/cortexm/a2fxxx/a2f200_eval/current/src/platform_i2c.c. The required includes are: + + + + #include <cyg/io/i2c.h> + #include <cyg/io/i2c_a2fxxx.h> + + + + The first part declares the I2C bus 0 and the second part attached a I2C device with address + 0x3C to the bus. + + + + CYG_A2FXXX_I2C_BUS(hal_a2fxxx_i2c0_bus, + a2fxxx_i2c0_init, + CYGHWR_HAL_A2FXXX_I2C0, + CYGHWR_HAL_A2FXXX_I2C0_BB, + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_I2C0, + CYGNUM_HAL_INTERRUPT_I2C0_0, + 0x60); + + _name_ = hal_a2fxxx_i2c0_bus + _init_fn_ = a2fxxx_i2c0_init + _base_ = CYGHWR_HAL_A2FXXX_I2C0 // Base address + _base_bb_ = CYGHWR_HAL_A2FXXX_I2C0_BB // for bit-band access + _periph_ = CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_I2C0 + _isr_vec_ = CYGNUM_HAL_INTERRUPT_I2C0_0 + _isr_pri_ = 0x60 + + CYG_I2C_DEVICE(i2c_a2fxxx_oled, + &hal_a2fxxx_i2c0_bus, + 0x3c, + 0, + CYG_I2C_DEFAULT_DELAY); + + + + + + + Ethernet Controller + + + The Ethernet MAC layer of the Actel device is compliant with the RMII 10/100Mbps specification. + The development kit interface the DP83848 PHY from National Semiconductor. + + + NOTE: To use the Ethernet interface of the evaluation kit, the FPGA fabric must be programmed. + The Ethernet PHY input clock (50MHz) is connected to an IO only accessible from the fabric. It + is therefore required to route the MAC_CLK from the clock network to the IO (T6). + + + Some of the driver configuration parameters accessible from the CDL file are: + + + + + CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_CHATTER + + + Selecting this option will cause the Ethernet driver to print status + messages as various Ethernet operations are undertaken. This is option + is designed to help debugging the Ethernet driver. + + + + + + CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_PROMISCUOUS + + + Selecting this option will set the Ethernet MAC in promiscuous mode, all Ethernet + packets will be delivered to the application layer whether or not destinated to the + device. + + + + + + CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_TX + + + This option specifies the size of the internal transmit buffers used + for the Ethernet device. + + + + + + CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_BUFSIZE_RX + + + This option specifies the size of the internal receive buffers used + for the Ethernet device. + + + + + + CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_TxNUM + + + This option specifies the number of output buffer packets + to be used for the Ethernet device. + + + + + + CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_RxNUM + + + This option specifies the number of input buffer packets + to be used for the Ethernet device. + + + + + + CYGSEM_DEVS_ETH_CORTEXM_A2FXXX_STATS + + + Selecting this option will cause the Ethernet driver to accumulate statistics + provided from the MAC layer. + + + + + + + + + + Serial + + + The Actel A2Fxxx uses the 16x5x generic serial device driver. The driver is instantiaced through + the CYGPKG_IO_SERIAL_CORTEXM_A2FXXX serial package. + + + + + + + DMA + + + The eCos HAL offers some basics routines to configure and use the 8 DMA channels + available in the Smartfusion chips. It must be noted that all channels are sharing + the same interrupt. The current implementation limits the transfer size to byte + tranfer ( field TRANSFER_SIZE from the CHANNEL_x_CONTROL register ). + Currently only the SPI driver makes use of the DMA interface. + + + + DMA channels are registered / released with a2fxxx_dma_ch_attach and + a2fxxx_dma_ch_detach respectively: + + + + cyg_uint32 + a2fxxx_dma_ch_attach(cyg_uint8 ch, cyg_ISR_t *isr, cyg_DSR_t *dsr, cyg_addrword_t data) + + ch specify the DMA channel numbered from 0. + isr specify the interrupt ISR to call for this channel. + dsr specify the interrupt DSR to call for this channel. + data data argument passed to the ISR and DSR routine. + + + + void + a2fxxx_dma_ch_detach (cyg_uint8 ch) + + ch specify the DMA channel number from 0 to 7 + + + + + DMA channels are configured with a2fxxx_dma_ch_setup : + + + + cyg_uint32 + a2fxxx_dma_ch_setup(cyg_uint8 ch, cyg_uint8 type, cyg_bool outbound, + cyg_uint8 src_incr, cyg_uint8 dst_incr, cyg_bool pri, cyg_uint8 wr_adj) + + ch is the DMA channel numbered from 0. + type is the transfer type to be performed. For valid + values, check CYGHWR_HAL_A2FXXX_DMA_XFER(_x) in var_io.h. + outbound set to true for transfer out of memory, false for transfer + to memory + src_incr is the memory address increment step for the source. Valid + values are 0, 1, 2 and 4 byte(s). 0 can be used for DMA + transfer from peripheral FIFO for instance. + dst_incr is the memory address increment step for the destination. + Valid values are 0, 1, 2 and 4 byte(s). 0 can be used for + DMA transfer to peripheral FIFO for instance. + pri is the DMA channel priority (true = high , false = low) + wr_adj indicates the number of FCLK periods which the PDMA must wait + after completion of a read or write access to a peripheral + before evaluating the out-of-band status signals from that + peripheral for another transfer. + + + + DMA transfer are initiated using a2fxxx_dma_xfer : + + + + cyg_uint32 + a2fxxx_dma_xfer (cyg_uint8 ch, cyg_bool polled, cyg_uint32 len, cyg_uint8 *src, + cyg_uint8 *dst) + + ch is the DMA channel numbered from 0. + polled set to true to use the DMA channel in polling mode ( no + end of tranfer interrupt are raised ). + len select the length of the transfer ( in number of byte + transfered ). + src is the start address from which data is to be read during + the next DMA transfer cycle. + dst is the start address from which data is to be written during + the next DMA transfer cycle. + + + + DMA interrupts are cleared with a2fxxx_dma_clear_interrupt and + status of the transaction is retreived with a2fxxx_dma_get_comp_flag : + + + + void + a2fxxx_dma_clear_interrupt (cyg_uint8 ch) + + cyg_uint8 + a2fxxx_dma_get_comp_flag (cyg_uint8 ch) + + ch is the DMA channel numbered from 0. + + + + + + + + + + + + + Configuration + + + Configuration + Configure, compile and debug the application + + + + <!-- <index></index> -->Overview + + For compilation of the application, the official eCos ARM toolchain is required + (gcc version 4.3.2). + For debugging, it is needed to install the FlashPro utility from Actel as well + as SoftConsole. SoftConsole is an Eclipse based IDE from Microsemi that installs + along with the CodeSourcery ARM toolchain. Both are freely available and require + a Windows OS based host workstation. + To use some peripherals such as the Ethernet controller, the FPGA fabric must be + configured to route the Ethernet PHY clock from the MAC_CLK. It is recommended to + restore the factory image provided from Actel as a starting point in case the user + has already experimented with the fabric. + + + + + + <!-- <index></index> -->Building the application + + + The steps needed to build the HAL library for the Smartfusion evaluation board are: + + + $ mkdir a2f200_eval + $ cd a2f200_eval + $ ecosconfig new smartfusion kernel + $ ecosconfig resolve + $ ecosconfig tree + $ make + + + At the end of the build the install/lib subdirectory should contain the library and linker script and the install/include subdirectory the necessary includes to compile the application. + + + + The differents startup type available for this platforme are: + + + + + + + Configuration (HAL_PLF_STARTUP_TYPE) + Description + + + + + ROM + Application running from the board's internal flash, LMA = 0x60000000 and VMA = 0x60000000 + + + SRAM + Application running from the board's internal RAM, LMA = 0x20000000 and VMA = 0x20000000 + + + ROM_SOFTCONSOLE + Application running from the board's internal flash, LMA = 0x60000000 and VMA = 0x00000000 + + + + + + + + + + <!-- <index></index> -->System Boot + + + The Smartfusion devices boot process is not entirely controlled by the user. The + Embedded Non-volatile Memory contains spare pages that are reserved to store + specific data such as the factory boot code, the manufacturing parameters, the + system boot code or other data such as the Analog block or MSS configuration. + + + + As described in the device user manual, the device first boots from factory boot + code before jumping to the system boot and eventually giving the hand to the user + code, in this case, the eCos ROM application. + + + + The Actel MSS configuration tool can be used to alter the system boot and the + configuration pages. The ENVM spare pages can then be re-programmed using the + Actel FlashPro utility. The FlashPro utility can also be used to program the + FPGA fabric if required. + + + + + + + Spare page content + Address + + + + + Manufacturing parameters + 0x60080000 + + + Factory boot + 0x60080400 + + + System Boot + 0x60080800 + + + Analog block configuration + 0x60081600 + + + MSS configuration + 0x60081E80 + + + + + + + + + + <!-- <index></index> -->Debugging from console + + + Loading of the application to internal FLASH or RAM of the target is done either + using the SoftConsole IDE supplied from Actel or GDB from command line. The later + case is described in this paragraph. + + + + To debug ROM based application, while configuring eCos, select the ROM_SOFTCONSOLE + startup type. The ROM_SOFTCONSOLE startup type is equivalent to a ROM startup but + while the application is loaded at address 0x60000000 (FLASH), it runs and is debugged + from address 0x00000000. This is done by setting the load address (LMA) to 0x60000000 + and the virtual address (VMA) to 0x00000000 in the eCos memory layout file. In this + example, the timers test application from the eCos Smartfusion HAL is compiled: + + + + $ mkdir a2f200_eval + $ cd a2f200_eval + $ ecosconfig new smartfusion kernel + -> Select ROM_SOFTCONSOLE statup type + $ ecosconfig resolve + $ ecosconfig tree + $ make + $ make -s tests IGNORE_LINK_ERRORS=y + + + + Once the application is compiled, from a Windows command interpreter, start the + actel-keepalive utility: + + + + c:> start actel-keepalive actel-keepalive + + + + The GDB initialisation sequence located in a2fxxx/a2f200_eval/current/host/softconsole_flash_init.txt + is an example of initialisation sequence to use for debugging application located in + ROM. For RAM based application, the initialisation sequence from + a2fxxx/a2f200_eval/current/host/softconsole_sram_init.txt shall be used. + Make sure to replace the path to the debugger toolchain and the eCos repository first. The GDB + initialisation sequence without in-line comments is: + + + + set arm fallback-mode thumb + target remote | "C:/Program Files (x86)/Microsemi/SoftConsole v3.3/Sourcery-G++/b- + in/arm-none-eabi-sprite" flashpro:?cpu=Cortex-M3 "C:/wrk/ecos/packages/hal/cortex- + m/a2fxxx/a2f200_eval/current/host" + set mem inaccessible-by-default off + set *0x40006010 = 0x4C6E55FA + set *0xE0042000 = 0 + set *0xE0042008 = 1 + set *0xE0042040 = 0x00207FFD + set *0xE004203C = 0x00000001 + set *0xE0042030 = *0xE0042030 & 0xFFFFFFF7 + set *0xE000ED08 = 0x00000000 + load + set $sp = *0x60080000 + set $pc = *0x60080004 - 1 + + + + Start the GDB session to debug the timers test example: + + + + C:\root\a2f200_eval>arm-none-eabi-gdb install\tests\hal\cortexm\a2fxxx\var\curren- + t\tests\timers + GNU gdb (Sourcery G++ Lite Sourcery G++ Lite 2010q1-188 + Actel 1.2) 7.0.50.20100- + 218-cvs + Copyright (C) 2010 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. Type "show copying" + and "show warranty" for details. + This GDB was configured as "--host=i686-mingw32 --target=arm-none-eabi". + For bug reporting instructions, please see: + <https://support.codesourcery.com/GNUToolchain/>... + Reading symbols from c:\root\a2f200_eval\install\tests\hal\cortexm\a2fxxx\var\curren- + t\tests\timers...done. + (gdb) + + + + A typical log from the GDB initialisation sequence is shown here: + + + + Remote debugging using | "C:/Program Files (x86)/Microsemi/SoftConsole v3.3/Sourc- + ery-G++/bin/arm-none-eabi-sprite" flashpro:?cpu=Cortex-M3 "C:/wrk/ecos/packages/h- + al/cortexm/a2fxxx/a2f200_eval/current/host" + arm-none-eabi-sprite: Using memory map C:/wrk/ecos/packages/hal/cortexm/a2fxxx/a2f- + 200_eval/current/host/memory-map.xml + arm-none-eabi-sprite: Target reset + arm-none-eabi-sprite: Transferring memory map (may cause a delay) + 0x6008051c in ?? () + Loading section .rom_vectors, size 0x8 lma 0x60000000 + Loading section .ARM.exidx, size 0x10 lma 0x60000008 + Loading section .text, size 0x3340 lma 0x60000018 + Loading section .rodata, size 0x4dc lma 0x60003358 + Loading section .data, size 0x318 lma 0x6000383c + arm-none-eabi-sprite: Using host routines for flash programming + arm-none-eabi-sprite: Start of flash programming + arm-none-eabi-sprite: Comparing flash memory contents of actel-smartfusion-envm @- + 0x60000000 + arm-none-eabi-sprite: Program 0x60000000 sector [0x0,+0x80) unchanged + arm-none-eabi-sprite: Program 0x60000000 sector [0x80,+0x80) unchanged + arm-none-eabi-sprite: Program 0x60000000 sector [0x100,+0x80) unchanged + .... + arm-none-eabi-sprite: Program 0x60000000 sector [0x3b00,+0x80) unchanged + arm-none-eabi-sprite: End of programming + Start address 0x18, load size 15180 + Transfer rate: 8 KB/sec, 62 bytes/write. + + + + + + + + + + + + + + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/memory-map.xml b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/memory-map.xml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/memory-map.xml @@ -0,0 +1,16 @@ + + + + + + + Flash + + + ROM + + + SRAM + + + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_flash_init.txt b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_flash_init.txt new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_flash_init.txt @@ -0,0 +1,53 @@ + +# GDB initialization sequence provided from SoftConsole IDE with slight modification +# for eCos + +# [1] Targeting SmartFusion embedded NVM (envm) @ 0x60000000. +# Loads at 0x60000000 but runs/debugs at 0x00000000 (i.e. ld LMA=0x60000000, VMA=0x00000000) + +# Make sure 16-bit Thumb mode breakpoint requests are always used. +set arm fallback-mode thumb + +# Invoke debug sprite in Cortex-M3 mode +# +# PATH to the arm-none-eabi-sprite utility and eCos repository must be +# updated according to a particular setup +target remote | "C:/Program Files (x86)/Microsemi/SoftConsole v3.3/Sourcery-G++/bin/arm-none-eabi-sprite" flashpro:?cpu=Cortex-M3 "C:/wrk/ecos/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host" + +# Don't restrict memory access to just regions defined in linker script +set mem inaccessible-by-default off + +# Disable the watchdog +set *0x40006010 = 0x4C6E55FA + +# Ensure that eSRAM IS NOT mapped to 0x00000000 +# Clear ESRAM_CONFIG system register bit 0 (COM_ESRAMFWREMAP) +set *0xE0042000 = 0 +# Ensure that eNVM @ 0x60000000 IS mapped to 0x00000000 +# Set ENVM_REMAP_BASE register COM_ENVMREMAPBASE field to 1 +set *0xE0042008 = 1 + +# Configure external memory controller to access external RAM. + +# Program EMC_CONFIG_0_REG +set *0xE0042040 = 0x00207FFD +# Program EMC_MUX_CONFIG_REG +set *0xE004203C = 0x00000001 +# Program SOFT_RESET_REG +set *0xE0042030 = *0xE0042030 & 0xFFFFFFF7 + +#set *0xE0042004 = 0x00000001 + +# Set temporary breakpoint on main (must be h/w BP for eNVM) +thb cyg_usert_start + +# Specify user application vector table (remapped/mirrored address) +set *0xE000ED08 = 0x00000000 + +# Load the program +load + +# Ensure chip boot code runs before transferring control to user application +# Initialize SP & PC from chip boot vector table +set $sp = *0x60080000 +set $pc = *0x60080004 - 1 \ No newline at end of file diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_sram_init.txt b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_sram_init.txt new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host/softconsole_sram_init.txt @@ -0,0 +1,42 @@ + +# GDB initialization sequence provided from SoftConsole IDE with slight modification +# for eCos + +# [1] Targeting SmartFusion embedded SRAM (esram) @ 0x20000000. +# Loads and debugs at 0x20000000 (i.e. ld LMA=VMA=0x20000000). + +# Make sure 16-bit Thumb mode breakpoint requests are always used. +set arm fallback-mode thumb + +# PATH to the arm-none-eabi-sprite utility and eCos repository must be +# updated according to a particular setup +target remote | "C:/Program Files (x86)/Microsemi/SoftConsole v3.3/Sourcery-G++/bin/arm-none-eabi-sprite" flashpro:?cpu=Cortex-M3 "C:/wrk/ecos/packages/hal/cortexm/a2fxxx/a2f200_eval/current/host" + +# Don't restrict memory access to just regions defined in linker script +set mem inaccessible-by-default off + +# Disable the watchdog +set *0x40006010 = 0x4C6E55FA + +# Configure external memory controller to access external RAM. + +# Program EMC_CONFIG_0_REG +set *0xE0042040 = 0x00207FFD +# Program EMC_MUX_CONFIG_REG +set *0xE004203C = 0x00000001 +# Program SOFT_RESET_REG +set *0xE0042030 = *0xE0042030 & 0xFFFFFFF7 + +# Set temporary breakpoint on main (must be s/w BP - Cortex-M3 h/w BPs only below 0x20000000) +thb cyg_usert_start + +# Specify user application vector table +set *0xE000ED08 = 0x20000400 + +# Load the program +load + +# Ensure chip boot code runs before transferring control to user application +# Initialize SP & PC from chip boot vector table +set $sp = *0x60080000 +set $pc = *0x60080004 - 1 \ No newline at end of file diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.h @@ -0,0 +1,25 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +// Only to get Redboot to compile.. +#define CYGMEM_REGION_ram (CYGMEM_REGION_sram) +#define CYGMEM_REGION_ram_SIZE (CYGMEM_REGION_sram_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_sram_ATTR) + +#define CYGMEM_REGION_flash (0x60000000) +#define CYGMEM_REGION_flash_SIZE (0x00040000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram_SIZE+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.ldi b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom.ldi @@ -0,0 +1,36 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x60000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x60000000, LMA_EQ_VMA) + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000400, FOLLOWING (.got)) + SECTION_data (sram, ALIGN (0x8), FOLLOWING (.sram)) + SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + 1024*64; + + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.h @@ -0,0 +1,25 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +// Only to get Redboot to compile.. +#define CYGMEM_REGION_ram (CYGMEM_REGION_sram) +#define CYGMEM_REGION_ram_SIZE (CYGMEM_REGION_sram_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_sram_ATTR) + +#define CYGMEM_REGION_flash (0x60000000) +#define CYGMEM_REGION_flash_SIZE (0x00040000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram_SIZE+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.ldi b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_rom_sc.ldi @@ -0,0 +1,39 @@ +// eCos memory layout + +#include +#include + +#define PLF_FOLLOWING(_section_) FOLLOWING_ALIGNED(_section_, 8) + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x60000000, LENGTH = 0x00040000 + /* flash mirrored to 0x00000000 */ + flashm : ORIGIN = 0x00000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flashm, 0x00000000, AT (0x60000000)) + SECTION_text (flashm, ALIGN (0x8), PLF_FOLLOWING (.rom_vectors)) + SECTION_fini (flashm, ALIGN (0x8), PLF_FOLLOWING (.text)) + SECTION_rodata (flashm, ALIGN (0x8), PLF_FOLLOWING (.fini)) + SECTION_rodata1 (flashm, ALIGN (0x8), PLF_FOLLOWING (.rodata)) + SECTION_fixup (flashm, ALIGN (0x8), PLF_FOLLOWING (.rodata1)) + SECTION_gcc_except_table (flashm, ALIGN (0x8), PLF_FOLLOWING (.fixup)) + SECTION_eh_frame (flashm, ALIGN (0x8), PLF_FOLLOWING (.gcc_except_table)) + SECTION_got (flashm, ALIGN (0x8), PLF_FOLLOWING (.eh_frame)) + SECTION_sram (sram, 0x20000400, PLF_FOLLOWING (.got)) + SECTION_data (sram, ALIGN (0x8), PLF_FOLLOWING (.sram)) + SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + 1024*64; + + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.h @@ -0,0 +1,25 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGMEM_REGION_sram) +#define CYGMEM_REGION_ram_SIZE (CYGMEM_REGION_sram_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_sram_ATTR) + +#define CYGMEM_REGION_flash (0x60000000) +#define CYGMEM_REGION_flash_SIZE (0x00040000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.ldi b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/pkgconf/mlt_cortexm_a2f200_eval_sram.ldi @@ -0,0 +1,34 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x60000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (sram, 0x20000400, LMA_EQ_VMA) + SECTION_RELOCS (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (sram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20010000; diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_arch.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-04-03 +// Purpose: Actel Smartfusion A2F200 EVAL board specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_intr.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_intr.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-04-03 +// Purpose: Actel Smartfusion A2F200 EVAL board specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_io.h b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/include/plf_io.h @@ -0,0 +1,74 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-04-03 +// Purpose: Actel Smartfusion A2F200 EVAL board specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//----------------------------------------------------------------------------- +// end of plf_io.h + +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/a2f200_eval_misc.c b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/a2f200_eval_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/a2f200_eval_misc.c @@ -0,0 +1,160 @@ +/*========================================================================== +// +// a2f200_eval_misc.c +// +// Cortex-M3 A2F200 EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-04-03 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +#define TEST_IO 0 + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + + +__externC void +hal_system_init( void ) +{ +} + +cyg_uint32 led[7] = { + CYGHWR_HAL_A2FXXX_GPIO( 24, OUT, NONE, DISABLE ), + CYGHWR_HAL_A2FXXX_GPIO( 25, OUT, NONE, DISABLE ), + CYGHWR_HAL_A2FXXX_GPIO( 26, OUT, NONE, DISABLE ), + CYGHWR_HAL_A2FXXX_GPIO( 27, OUT, NONE, DISABLE ), +}; + + +//========================================================================== + +__externC void +hal_platform_init( void ) +{ +#if TEST_IO + cyg_uint8 i; +#endif + +#if TEST_IO + for(i = 0; i < 4; i++) + { + CYGHWR_HAL_A2FXXX_GPIO_SET( led[i] ); + CYGHWR_HAL_A2FXXX_GPIO_OUT( led[i], 1); + } +#endif + +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct +{ + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ +#ifdef CYGMEM_REGION_sram // On-chip SRAM + { + CYGMEM_REGION_sram, CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE - 1}, +#endif +#ifdef CYGMEM_REGION_flash // On-chip flash + { + CYGMEM_REGION_flash, + CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1}, +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 }, // Smartfusion peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) + { + if( (addr >= hal_data_access[i].start) && + (addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + + +//========================================================================== +// EOF a2f200_eval_misc.c diff --git a/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/platform_i2c.c b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/platform_i2c.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/a2f200_eval/current/src/platform_i2c.c @@ -0,0 +1,179 @@ +//========================================================================== +// +// platform_i2c.c +// +// Optional I2C support for Cortex-M3 Actel Smartfusion +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-04-08 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +//============================================================================= +// INCLUDES +//============================================================================= +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_DEVS_I2C_CORTEXM_A2FXXX + +#include +#include + +//============================================================================= +// Setup I2C bus 0 +// +static void +a2fxxx_i2c0_init( struct cyg_i2c_bus *bus ) +{ + cyg_uint32 scl_io = CYGHWR_HAL_A2FXXX_I2C0_SCL; + cyg_uint32 sda_io = CYGHWR_HAL_A2FXXX_I2C0_SDA; + + // + // We only need to setup the pins here and + // leave the I2C driver to take care of the rest. + // + CYGHWR_HAL_A2FXXX_GPIO_SET( scl_io ); + CYGHWR_HAL_A2FXXX_GPIO_SET( sda_io ); + + a2fxxx_i2c_init( bus ); +} + + +//----------------------------------------------------------------------------- +// I2C bus 0 +// +CYG_A2FXXX_I2C_BUS(hal_a2fxxx_i2c0_bus, + &a2fxxx_i2c0_init, + CYGHWR_HAL_A2FXXX_I2C0, // Base address + CYGHWR_HAL_A2FXXX_I2C0_BB, // Bit-band base address + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_I2C0, + CYGNUM_HAL_INTERRUPT_I2C0_0, + CYGNUM_DEVS_I2C_CORTEXM_A2FXXX_I2C0_ISR_PRIORITY); + + +//----------------------------------------------------------------------------- +// OLED +// +CYG_I2C_DEVICE(i2c_a2fxxx_oled, + &hal_a2fxxx_i2c0_bus, + 0x3c, + 0, + CYG_I2C_DEFAULT_DELAY); + + +#define DELAY 1 + +// Wrapper to OLED driver + +externC cyg_uint32 +a2fxxx_oled_write_first( cyg_uint8 byte ) +{ + cyg_uint32 result; + + cyg_i2c_transaction_begin( &i2c_a2fxxx_oled ); + + result = cyg_i2c_transaction_tx( &i2c_a2fxxx_oled, + true, ( cyg_uint8 * )&byte, 1, false ); + +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + return result; +} + +externC cyg_uint32 +a2fxxx_oled_write_byte( cyg_uint8 byte ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_a2fxxx_oled, + false, ( cyg_uint8 * )&byte, 1, false ); + +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + return result; +} + + +externC cyg_uint32 +a2fxxx_oled_write_array( const cyg_uint8 *array, cyg_uint32 count ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_a2fxxx_oled, + false, array, count, false ); + + return result; +} + + +externC cyg_uint32 +a2fxxx_oled_write_final( cyg_uint8 byte ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_a2fxxx_oled, + false, ( cyg_uint8 * )&byte, 1, true ); +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + cyg_i2c_transaction_end( &i2c_a2fxxx_oled ); + + return result; +} + +#endif // #ifdef CYGPKG_DEVS_I2C_CORTEXM_A2FXXX + +//----------------------------------------------------------------------------- +// EOF platform_i2c.c diff --git a/packages/hal/cortexm/a2fxxx/var/current/ChangeLog b/packages/hal/cortexm/a2fxxx/var/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/ChangeLog @@ -0,0 +1,46 @@ +2012-01-04 Christophe Coutand + * src/hal_dma.c: + Fix compiler warning, unused variable in a2fxxx_dma_isr(). + +2011-06-26 Christophe Coutand + + * cdl/hal_cortexm_a2fxxx.cdl: + * cdl/hal_cortexm_a2fxxx_irq.cdl: + * include/hal_cache.h: + * include/hal_diag.h: + * include/plf_stub.h: + * include/var_arch.h: + * include/variant.inc: + * include/var_intr.h: + * include/var_io.h: + * src/hal_diag.c: + * src/hal_dma.c: + * src/a2fxxx_misc.c: + * tests/timers.c: + New package -- Actel SmartFusion Cortex-M3 variant HAL. + [Bugzilla 1001291] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== + diff --git a/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx.cdl b/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx.cdl @@ -0,0 +1,732 @@ +##========================================================================== +## +## hal_cortexm_a2f.cdl +## +## Cortex-M A2F variant HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand +## Contributors: +## Date: 2011-02-03 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_A2FXXX { + display "Actel Smartfusion A2Fxxx Variant (Cortex-M3)" + parent CYGPKG_HAL_CORTEXM + hardware + include_dir cyg/hal + define_header hal_cortexm_a2fxxx.h + description " + This package provides generic support for the Actel Smarfusiom Cortex-M3 + based microcontroller family. It is also necessary to select a platform + HAL package." + + compile hal_diag.c a2fxxx_misc.c hal_dma.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + + requires { CYGHWR_HAL_CORTEXM == "M3" } + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX { + display "Actel Smartfusion A2F variant in use" + flavor data + default_value { "A2F200" } + legal_values { "A2F060" "A2F200" "A2F500" } + description "The Smartfusion has several variants, the main differences + being in the size of on-chip FLASH and SRAM and numbers of + some analog peripherals. This option allows the platform HAL + to select the specific microcontroller fitted." + } + + cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS { + display "CPU priority levels" + flavor data + calculated 5 + description "This option defines the number of bits used to + encode the exception priority levels that this + variant of the Cortex-M CPU implements." + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK { + display "Clocking" + description "Select this option to configure the internal + clock network of the device. Due to large amount of possible combination of + clock configuration, it is recommended to use the Actel MSS configuration tool + and let the system boot handle the clock settings. Some of the requirement for + setting the clock network of the device are : The On-chip Oscillator + clock frequency is fixed to 100 MHz and cannot be changed. The Main Crystal + Oscillator clock frequency must be between 1.5 MHz and 20 MHz when the PLL is + used or between 32 KHz and 20 MHz when the PLL is bypassed. The Main Crystal + Oscillator (RC network configuration) clock frequency must be between 1.5MHz + and 4 MHz when the PLL is used or between 32 KHz and 4 MHz when the PLL is + bypassed. For all other sources, the source clock frequency must be between + 1.5 MHz and 176MHz when the PLL is used or between 32 KHz and 250 MHz when the + PLL is bypassed." + flavor bool + default_value 0 + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKIN { + display "Input clock selection" + flavor none + description "Configure the input clocks of the device." + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKA { + display "Clock A configuration" + flavor bool + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_PLL } + description "Configure the clock A input of the device." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC { + display "Clock A source" + flavor data + legal_values { "AUIN" "AUIP" "ADIP" "GLAINT" "RCOSC" "MOSC" } + default_value { "RCOSC" } + description " + Select the clock A source. Valid choices are the main oscillator, + the RC oscillator, the FPGA fabric or the dedicated single-ended or + differential IOs." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_FREQ { + display "Clock A frequency in Hz" + flavor data + legal_values { 1500000 to 176000000 } + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC == "RCOSC" ? 100000000 : 20000000 } + description " + Select the clock A source frequency in Hz. Additional restrictions + of the frequency range apply giving the clock source. It is left to + the user to take care of not exceeding the limits provided by the + device user manual." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKB { + display "Clock B configuration" + flavor bool + description "Configure the clock B input of the device." + default_value 0 + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC { + display "Clock B source" + flavor data + legal_values { "BUIN" "BUIP" "BDIP" "GLBINT" "RCOSC" "MOSC" } + default_value { "MOSC" } + description " + Select the clock B source. Valid choices are the main oscillator, + the RC oscillator, the FPGA fabric or the dedicated single-ended or + differential IOs." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_FREQ { + display "Clock B frequency in Hz" + flavor data + legal_values { 32000 to 350000000 } + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC == "RCOSC" ? 100000000 : 20000000 } + description " + Select the clock B source frequency in Hz. Additional restrictions + of the frequency range apply giving the clock source. It is left to + the user to take care of not exceeding the limits provided by the + device user manual." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKC { + display "Clock C configuration" + flavor bool + description "Configure the clock C input of the device." + default_value 0 + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC { + display "Clock C source" + flavor data + legal_values { "CUIN" "CUIP" "CDIP" "GLCINT" "RCOSC" "32KOSC"} + default_value { "RCOSC" } + description " + Select the clock C source. Valid choices are the main oscillator, + the RC oscillator, the FPGA fabric or the dedicated single-ended or + differential IOs." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_FREQ { + display "Clock C frequency in Hz" + flavor data + legal_values { 32000 to 350000000 } + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC == "RCOSC" ? 100000000 : 20000000 } + description " + Select the clock B source frequency in Hz. Additional restrictions + of the frequency range apply giving the clock source. It is left to + the user to take care of not exceeding the limits provided by the + device user manual." + } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_PLL { + display "PLL configuration" + flavor bool + requires CYGHWR_HAL_CORTEXM_A2FXXX_CLKA + description "Configure the device PLL." + default_value 1 + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PLL_MULT { + display "PLL Multiplier" + flavor data + legal_values { 1 to 128 } + default_value { 1 } + description " + Select the PLL multiplier coefficient (m)." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PLL_DIV { + display "PLL Divider" + flavor data + legal_values { 1 to 128 } + default_value { 1 } + description " + Select the PLL divider coefficient (n)." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ { + display "PLL output frequency" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_PLL ? ( CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_FREQ * CYGHWR_HAL_CORTEXM_A2FXXX_PLL_MULT ) / CYGHWR_HAL_CORTEXM_A2FXXX_PLL_DIV : 0 } + legal_values { 22000000 to 350000000 } + description " + Computed PLL output frequency." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FB_DELAY { + display "PLL Feedback delay" + flavor data + legal_values { 0 to 15 } + default_value { 0 } + description " + Select the PLL Feedback loop delay. Field FBDLY from user manual. + Value from 535 to 5560ns." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PLL_XDELAY { + display "PLL Additional delay" + flavor bool + default_value 0 + description " + Add 2ns additional delay on PLL feedback loop." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKOUT { + display "Global clock output configuration" + flavor none + description "Configure the Global clocks of the device." + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA { + display "Global clock A configuration" + flavor bool + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT == "CLKGA" } + description "Configure the Global clock A of the device." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC { + display "Global clock A source" + flavor data + legal_values { "CLKA" "PLL_VCO0" "PLL_VCO90" "PLL_VCO180" "PLL_VCO270" "PLL_VCO0_DL" } + default_value { "PLL_VCO0" } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "CLKA" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKA : CYGHWR_HAL_CORTEXM_A2FXXX_PLL } + description " + Select the Global clock A source. Valid choices are the PLL output (with different phases) + or the clock A input." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV { + display "Global clock A divider" + flavor data + legal_values { 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 + 10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 16 17 18 19 + 20 21 22 23 24 25 26 27 28 29 30 31 32 } + default_value { 1 } + description " + Select the Global clock A divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV10 { + display "Global clock A divider * 10" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV * 10 } + description " + Computed Global clock A divider value multiplied by 10." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DELAY { + display "Global clock A delay line" + flavor data + legal_values { 0 to 15 } + default_value { 0 } + description " + Select the Global clock A delay value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_FREQ { + display "Global clock A Frequency" + flavor data + legal_values { 1 to 100000000 } + calculated { ( CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "PLL_VCO0" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "PLL_VCO90" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "PLL_VCO180" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "PLL_VCO270" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "PLL_VCO0_DL" ) ? ( ( CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV10 ) : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC == "CLKA" ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV10 ) : 0 } + description " + Computed Global clock A frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB { + display "Global clock B configuration" + flavor bool + description "Configure the Global clock B of the device." + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK && CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO != 1 } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC { + display "Global clock B source" + flavor data + legal_values { "CLKB" "CLKGA" "PLL_VCO0" "PLL_VCO90" "PLL_VCO180" "PLL_VCO270" "PLL_VCO0_DL" } + default_value { "PLL_VCO0" } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "CLKB" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKB : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "CLKGA" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA : CYGHWR_HAL_CORTEXM_A2FXXX_PLL } + description " + Select the Global clock B source. Valid choices are the PLL output (with different phases), + the clock B input or the global clock A output." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV { + display "Global clock B divider" + flavor data + legal_values { 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 + 10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 16 17 18 19 + 20 21 22 23 24 25 26 27 28 29 30 31 32 } + default_value { 1 } + description " + Select the Global clock B divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV10 { + display "Global clock B divider * 10" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV * 10 } + description " + Computed Global clock B divider value multiplied by 10." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DELAY { + display "Global clock B delay line" + flavor data + legal_values { 0 to 15 } + default_value { 0 } + description " + Select the Global clock B delay value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_FREQ { + display "Global clock B Frequency" + flavor data + calculated { ( CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "PLL_VCO0" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "PLL_VCO90" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "PLL_VCO180" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "PLL_VCO270" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "PLL_VCO0_DL" ) ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ*10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV10 ) : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "CLKB" ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV10 ) : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC == "CLKGA" ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV10 ) : 0 } + description " + Computed Global clock B frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC { + display "Global clock C configuration" + flavor bool + description "Configure the Global clock C of the device." + default_value { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT == "CLKGC" } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC { + display "Global clock C source" + flavor data + legal_values { "CLKC" "CLKGA" "PLL_VCO0" "PLL_VCO90" "PLL_VCO180" "PLL_VCO270" "PLL_VCO0_DL" } + default_value { "PLL_VCO0" } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "CLKC" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKC : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "CLKGA" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA : CYGHWR_HAL_CORTEXM_A2FXXX_PLL } + description " + Select the Global clock C source. Valid choices are the PLL output (with different phases), + the clock C input or the global clock A output." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV { + display "Global clock C divider" + flavor data + legal_values { 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 + 10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 16 17 18 19 + 20 21 22 23 24 25 26 27 28 29 30 31 32 } + default_value { 1 } + description " + Select the Global clock C divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV10 { + display "Global clock C divider * 10" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV * 10 } + description " + Computed Global clock C divider value multiplied by 10." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DELAY { + display "Global clock C delay line" + flavor data + legal_values { 0 to 15 } + default_value { 0 } + description " + Select the Global clock C delay value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_FREQ { + display "Global clock C Frequency" + flavor data + calculated { ( CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "PLL_VCO0" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "PLL_VCO90" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "PLL_VCO180" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "PLL_VCO270" || CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "PLL_VCO0_DL" ) ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ*10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV10 ) : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "CLKC" ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV10 ) : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC == "CLKGA" ? ( (CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_FREQ * 10) / CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV10 ) : 0 } + description " + Computed Global clock C frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_MSS_FPGA { + display "MSS / FPGA Clock configuration" + flavor none + description "Configure the MSS and Fabric master clock." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT { + display "NGMUX output clock" + flavor data + legal_values { "CLKGA" "CLKGC" } + default_value { "CLKGA" } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT == "CLKGA" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA : ( CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC && CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC != "CLKGA" ) } + description " + Select the NGMUX output clock. Valid choices are the Global Clock A or C." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ { + display "NGMUX output clock frequency" + flavor data + legal_values { 1 to 100000000 } + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT == "CLKGA" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_FREQ : CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_FREQ } + description " + Computed NGMUX output clock frequency." + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK { + display "Fabric clock configuration" + flavor bool + default_value 0 + description "Set the Fabric master clock. The Fabric frequency ration + specifies which clock source to be used. For a ration of 1, the fabric + and MSS clock source are the same. For a ration of 2 of 4, the fabric + clock source is CLKGB and the ration between CLKGB and the MSS clock must + be configured by the user to be equal to 2 or 4." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO { + display "Fabric to MSS clock ratio" + flavor data + legal_values { 1 2 4 } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO != 1 ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB : 1 } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO != 1 ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_FREQ == CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ / CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO : 1 } + default_value { 1 } + description " + Select the Fabric to MSS clock ratio." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_FREQ { + display "Fabric clock Frequency" + flavor data + calculated { ( CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK && CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO != 1 ) ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_FREQ : ( CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK && CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_RATIO == 1 ) ? CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ : 0 } + description " + Computed Fabric clock frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_MSS_CLK { + display "MSS clock configuration" + flavor none + description "Configure the MSS master clock." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_MSS_CLK_DELAY { + display "MSS clock delay" + flavor data + legal_values { 0 to 15 } + default_value { 0 } + description " + Select the MSS clock delay. Field FBDLY. Value from 535 to 5560ns." + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_ACE_CLK { + display "ACE clock configuration" + flavor bool + default_value 0 + description "Configure the ACE master clock." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_ACLK_DIV { + display "ACE clock divider" + flavor data + legal_values { 1 2 4 } + default_value { 1 } + description " + Select the ACE clock divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_ACLK_FREQ { + display "ACE clock Frequency" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_ACE_CLK ? CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ / CYGHWR_HAL_CORTEXM_A2FXXX_ACLK_DIV : 0 } + description " + Computed ACE clock frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_CLK { + display "PCLK0 clock configuration" + flavor none + description "Configure the PCLK0 clock." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_DIV { + display "PCLK0 clock divider" + flavor data + legal_values { 1 2 4 } + default_value { 1 } + description " + Select PCLK0 clock divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_FREQ { + display "PCLK0 clock Frequency" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ ? CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ / CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_DIV : 0 } + description " + Computed PCLK0 clock frequency." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_CLK { + display "PCLK1 clock configuration" + flavor none + description "Configure the PCLK1 clock." + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_DIV { + display "PCLK1 clock divider" + flavor data + legal_values { 1 2 4 } + default_value { 1 } + description " + Select PCLK1 clock divider value." + } + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_FREQ { + display "PCLK1 clock Frequency" + flavor data + calculated { CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ ? CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ / CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_DIV : 0 } + description " + Computed PCLK1 clock frequency." + } + } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_MAC_CLK { + display "Ethernet MAC clock configuration" + flavor bool + default_value 0 + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_MAC_SRC { + display "Ethernet MAC clock source" + flavor data + legal_values { "CLKGC" "EXTERNAL" } + default_value { "CLKGC" } + requires { CYGHWR_HAL_CORTEXM_A2FXXX_MAC_SRC == "CLKGC" ? CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC : 1 } + description " + Select the Ethernet MAC clock source." + } + } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_A2FXXX_DMA { + display "DMA" + flavor none + description " + DMA controller configuration." + + cdl_option CYGDBG_HAL_CORTEXM_A2FXXX_DMA_TRACE { + display "Display status messages during DMA operations" + flavor bool + default_value 0 + description " + Selecting this option will cause the DMA driver to print status + messages as various DMA operations are undertaken." + } + } + + cdl_option CYGSEM_HAL_CORTEXM_A2FXXX_CLOCK_CHATTER { + display "Trace clock network configuration." + default_value 1 + flavor bool + description " + Enable debug tracing of the clock configuration." + } + + cdl_option CYGSEM_HAL_CORTEXM_A2FXXX_DEFINES_IDLE_THREAD_ACTION { + display "Override IDLE thread action" + default_value 1 + flavor bool + description " + Override IDLE thread action defined by the architectural HAL. + The option must be active when running the application from a + debugger. The 'WFI' IDLE instruction defined in the architectural + HAL leads to software crash when application runs from a debugger." + } + + cdl_component CYGPKG_HAL_CORTEXM_A2FXXX_IO { + display "IO configuration" + flavor bool + default_value 0 + description " + Overwrite the default IO configuration + " + + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_IO_WEST_BANK { + display "IO west bank buffer type" + legal_values { "LVCMOS_3V3" "LVCMOS_2V5" "LVCMOS_1V8" "LVCMOS_1V5" } + default_value { "LVCMOS_3V3" } + flavor data + description " + Select the device west bank IO buffer type to be used. + " + } + cdl_option CYGHWR_HAL_CORTEXM_A2FXXX_IO_EAST_BANK { + display "IO east bank buffer type" + legal_values { "LVCMOS_3V3" "LVCMOS_2V5" "LVCMOS_1V8" "LVCMOS_1V5" } + default_value { "LVCMOS_3V3" } + flavor data + description " + Select the device west bank IO buffer type to be used. + " + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_VAR { + display "Variant IRQ priority defaults" + no_define + flavor none + parent CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME + description " + Interrupt priorities defined by the variant HAL" + script hal_cortexm_a2fxxx_irq.cdl + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + no_define + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value 1000000 / CYGNUM_HAL_RTC_DENOMINATOR + description "The period defined here is something of a fake, it is expressed + in terms of a notional 1MHz clock. The value actually installed + in the hardware is calculated from the current settings of the + clock generation hardware." + } + } + + cdl_interface CYGINT_HAL_A2FXXX_UART0 { + display "Platform has UART0 serial port" + description "The platform has a socket on UART0." + } + + cdl_interface CYGINT_HAL_A2FXXX_UART1 { + display "Platform has UART1 serial port" + description "The platform has a socket on UART1." + } + + cdl_component CYGPKG_HAL_CORTEXM_A2FXXX_OPTIONS { + display "Build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package." + + cdl_option CYGPKG_HAL_CORTEXM_A2FXXX_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the A2F variant HAL package. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_CORTEXM_A2FXXX_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the A2F variant HAL package. These flags are removed from + the set of global flags if present." + } + } + + cdl_option CYGPKG_HAL_CORTEXM_A2FXXX_TESTS { + display "A2F tests" + active_if CYGPKG_KERNEL + flavor data + no_define + calculated { "tests/timers" } + description " + This option specifies the set of tests for the A2F HAL." + } + +} \ No newline at end of file diff --git a/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx_irq.cdl b/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx_irq.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/cdl/hal_cortexm_a2fxxx_irq.cdl @@ -0,0 +1,150 @@ +##========================================================================== +## +## hal_cortexm_a2fxxx_irq.cdl +## +## Cortex-M A2F configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand +## Date: 2012-02-20 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + + cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY { + display "Clock interrupt ISR priority" + flavor data + calculated 0xF0 + description "Set clock ISR priority to lowest priority." + } + + + cdl_option CYGNUM_HAL_CORTEXM_A2FXXX_DMA_ISR_PRIORITY { + display "DMA peripheral interrupt ISR priority" + flavor data + default_value 0x70 + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + description " + Set DMA controller ISR priority." + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_I2C { + display "I2C IRQ priorities" + flavor none + no_define + + cdl_option CYGNUM_DEVS_I2C_CORTEXM_A2FXXX_I2C0_ISR_PRIORITY { + display "I2C bus 0 interrupt priority" + flavor data + active_if CYGPKG_DEVS_I2C_CORTEXM_A2FXXX + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + default_value 0x78 + } + + cdl_option CYGNUM_DEVS_I2C_CORTEXM_A2FXXX_I2C1_ISR_PRIORITY { + display "I2C bus 1 interrupt priority" + flavor data + active_if CYGPKG_DEVS_I2C_CORTEXM_A2FXXX + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + default_value 0x78 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_ETH { + display "Ethernet IRQ priorities" + flavor none + no_define + + cdl_option CYGNUM_DEVS_ETH_CORTEXM_A2FXXX_ISR_SP { + display "Ethernet interrupt ISR priority" + active_if CYGPKG_DEVS_ETH_CORTEXM_A2FXXX + flavor data + no_define + default_value 0x78 + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + description " + Set the Ethernet controller ISR priority." + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_SERIAL { + display "Serial controller IRQ priorities" + flavor none + no_define + + cdl_option CYGNUM_DEVS_SERIAL_CORTEXM_A2FXXX_SERIAL0_ISR_SP { + display "Serial port 0 driver ISR priority" + active_if CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL0 + flavor data + no_define + default_value 0x78 + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + description " + Set the serial 0 controller ISR priority." + } + + cdl_option CYGNUM_DEVS_SERIAL_CORTEXM_A2FXXX_SERIAL1_ISR_SP { + display "Serial port 1 driver ISR priority" + active_if CYGPKG_IO_SERIAL_CORTEXM_A2FXXX_SERIAL1 + flavor data + no_define + default_value 0x80 + legal_values { 0x00 0x08 0x10 0x18 0x20 0x28 0x30 0x38 0x40 0x48 + 0x50 0x58 0x60 0x68 0x70 0x78 0x80 0x88 0x90 0x98 + 0xA0 0xA8 0xB0 0xB8 0xC0 0xC8 0xD0 0xD8 0xE0 0xE8 + 0xF0 } + description " + Set the serial 1 controller ISR priority." + } + } \ No newline at end of file diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/hal_cache.h b/packages/hal/cortexm/a2fxxx/var/current/include/hal_cache.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/hal_cache.h @@ -0,0 +1,116 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2011-00-03 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// +// For the Atcel SmartFusion, these are empty macros as there +// is no cache. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +//----------------------------------------------------------------------------- +// Cache dimensions + + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/hal_diag.h b/packages/hal/cortexm/a2fxxx/var/current/include/hal_diag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/hal_diag.h @@ -0,0 +1,91 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H +//============================================================================= +// +// hal_diag.h +// +// HAL diagnostics +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-02-03 +// Purpose: HAL diagnostics +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +#include + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else + +__externC void hal_a2fxxx_diag_init(void); +__externC void hal_a2fxxx_diag_putc(char); +__externC cyg_uint8 hal_a2fxxx_diag_getc(void); + +# ifndef HAL_DIAG_INIT +# define HAL_DIAG_INIT() hal_a2fxxx_diag_init() +# endif + +# ifndef HAL_DIAG_WRITE_CHAR +# define HAL_DIAG_WRITE_CHAR(__c) hal_a2fxxx_diag_putc(__c) +# endif + +# ifndef HAL_DIAG_READ_CHAR +# define HAL_DIAG_READ_CHAR(__c) (__c) = hal_a2fxxx_diag_getc() +# endif + +#endif + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_DIAG_H diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/plf_stub.h b/packages/hal/cortexm/a2fxxx/var/current/include/plf_stub.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/plf_stub.h @@ -0,0 +1,89 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008 +// Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:jskov, gthomas, jlarmour +// Date: 2008-07-30 +// Purpose: Platform HAL stub support for STM32 variant boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +#include + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +__externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. + +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/var_arch.h b/packages/hal/cortexm/a2fxxx/var/current/include/var_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/var_arch.h @@ -0,0 +1,66 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H +//============================================================================= +// +// var_arch.h +// +// Actel SmartFusion Cortex-M3 variant architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Actel SmartFusion Cortex-M3 variant architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#include + +#ifdef CYGSEM_HAL_CORTEXM_A2FXXX_DEFINES_IDLE_THREAD_ACTION +externC void hal_idle_thread_action( cyg_uint32 ); + +# define HAL_IDLE_THREAD_ACTION(_count_) hal_idle_thread_action(_count_) +#endif +//----------------------------------------------------------------------------- +// end of var_arch.h +#endif // CYGONCE_HAL_VAR_ARCH_H diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/var_intr.h b/packages/hal/cortexm/a2fxxx/var/current/include/var_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/var_intr.h @@ -0,0 +1,232 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H +//========================================================================== +// +// var_intr.h +// +// HAL Interrupt and clock assignments for Smartfusion Cortex-M3 variants +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for Actel Smartfusion Cortex-M3 +// are defined here. +// +// Usage: #include +// However applications should include using +// instead to allow for platform overrides. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_WD (0+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_VR_PSM_5V (1+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_VR_PSM_3V (2+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RTC0_0 (3+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RTC0_1 (4+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_MAC0 (5+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_IAP (6+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ENVM0 (7+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ENVM1 (8+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA (9+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART0 (10+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SPI0 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SPI1 (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C0_0 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C0_1 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C0_2 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C1_0 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C1_1 (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C1_2 (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM0_1 (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM0_2 (21+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_MSS_CCC_0 (22+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_MSS_CCC_1 (23+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_AHB (24+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED0 (25+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED1 (26+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED2 (27+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED3 (28+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED4 (29+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RESERVED5 (30+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_FAB (31+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO0 (32+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO1 (33+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO2 (34+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO3 (35+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO4 (36+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO5 (37+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO6 (38+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO7 (39+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO8 (40+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO9 (41+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO10 (42+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO11 (43+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO12 (44+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO13 (45+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO14 (46+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO15 (47+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO16 (48+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO17 (49+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO18 (50+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO19 (51+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO20 (52+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO21 (53+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO22 (54+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO23 (55+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO24 (56+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO25 (57+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO26 (58+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO27 (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO28 (60+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO29 (61+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO30 (62+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIO31 (63+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC0_FLAG0 (64+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC0_FLAG1 (65+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC0_FLAG2 (66+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC0_FLAG3 (67+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC1_FLAG0 (68+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC1_FLAG1 (69+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC1_FLAG2 (70+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC1_FLAG3 (71+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC2_FLAG0 (72+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC2_FLAG1 (73+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC2_FLAG2 (74+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PC2_FLAG3 (75+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_DV (76+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_DV (77+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_DV (78+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_CD (79+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_CD (80+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_CD (81+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_CS (81+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_CS (83+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_CS (84+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP0_FALL (85+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP1_FALL (86+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP2_FALL (87+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP3_FALL (88+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP4_FALL (89+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP5_FALL (90+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP6_FALL (91+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP7_FALL (92+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP8_FALL (93+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP9_FALL (94+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP10_FALL (95+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP11_FALL (96+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP0_RISE (97+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP1_RISE (98+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP2_RISE (99+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP3_RISE (100+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP4_RISE (101+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP5_RISE (102+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP6_RISE (103+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP7_RISE (104+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP8_RISE (105+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP9_RISE (106+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP10_RISE (107+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_COMP11_RISE (108+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_FF (109+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_FAF (110+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC0_FE (111+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_FF (112+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_FAF (113+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC1_FE (114+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_FF (115+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_FAF (116+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_ADC2_FE (117+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG0 (118+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG1 (119+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG2 (120+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG3 (121+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG4 (122+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG5 (123+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG6 (124+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG7 (125+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG8 (126+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG9 (127+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG10 (128+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG11 (129+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG12 (130+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG13 (131+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG14 (132+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG15 (133+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG16 (134+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG17 (135+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG18 (136+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG19 (137+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG20 (138+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG21 (139+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG22 (140+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG23 (141+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG24 (142+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG25 (143+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG26 (144+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG27 (145+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG28 (146+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG29 (147+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG30 (148+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG31 (149+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#ifndef CYGNUM_HAL_INTERRUPT_NVIC_MAX +#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_ACE_PPE_FLAG31) +#endif + +#define CYGNUM_HAL_ISR_MIN 0 +#ifndef CYGNUM_HAL_ISR_MAX +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_NVIC_MAX +#endif +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +#define CYGNUM_HAL_VSR_MIN 0 +#ifndef CYGNUM_HAL_VSR_MAX +#define CYGNUM_HAL_VSR_MAX (CYGNUM_HAL_VECTOR_SYS_TICK+CYGNUM_HAL_INTERRUPT_NVIC_MAX) +#endif +#define CYGNUM_HAL_VSR_COUNT (CYGNUM_HAL_VSR_MAX+1) + + +//---------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_INTR_H +// EOF var_intr.h diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/var_io.h b/packages/hal/cortexm/a2fxxx/var/current/include/var_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/var_io.h @@ -0,0 +1,1196 @@ +#ifndef CYGONCE_HAL_VAR_IO_H +#define CYGONCE_HAL_VAR_IO_H +//============================================================================= +// +// var_io.h +// +// Variant specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-02-03 +// Purpose: Smartfusion Cortex-M3 variant specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +//============================================================================= +// Peripherals + +#define CYGHWR_HAL_A2FXXX_SC 0xE0042000 + +// Device peripherals +#define CYGHWR_HAL_A2FXXX_UART0 0x40000000 +#define CYGHWR_HAL_A2FXXX_SPI0 0x40001000 +#define CYGHWR_HAL_A2FXXX_I2C0 0x40002000 +#define CYGHWR_HAL_A2FXXX_MAC 0x40003000 +#define CYGHWR_HAL_A2FXXX_DMA 0x40004000 +#define CYGHWR_HAL_A2FXXX_TIMER 0x40005000 +#define CYGHWR_HAL_A2FXXX_WD 0x40006000 +#define CYGHWR_HAL_A2FXXX_FABRIC_IIC 0x40007000 +#define CYGHWR_HAL_A2FXXX_UART1 0x40010000 +#define CYGHWR_HAL_A2FXXX_SPI1 0x40011000 +#define CYGHWR_HAL_A2FXXX_I2C1 0x40012000 +#define CYGHWR_HAL_A2FXXX_MSS_GPIO 0x40013000 +#define CYGHWR_HAL_A2FXXX_RTC 0x40014000 +#define CYGHWR_HAL_A2FXXX_EFROM 0x40015000 +#define CYGHWR_HAL_A2FXXX_IAP 0x40016000 +#define CYGHWR_HAL_A2FXXX_ANALOG_ENGINE 0x40020000 +#define CYGHWR_HAL_A2FXXX_FPAG_ESRAM 0x40040000 +#define CYGHWR_HAL_A2FXXX_FPGA 0x40050000 +#define CYGHWR_HAL_A2FXXX_PERIPH 0x42000000 + +// Internal flash (Embedded Non-volatile Memory, ENVM) +#define CYGHWR_HAL_A2FXXX_ENVM_ARRAY 0x60000000 +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES 0x60080000 +#define CYGHWR_HAL_A2FXXX_ENVM_AUX_BLOCK_A 0x60084000 +#define CYGHWR_HAL_A2FXXX_ENVM_AUX_BLOCK_SP 0x60088000 +#define CYGHWR_HAL_A2FXXX_ENVM 0x60100000 + +// External memory base address +#define CYGHWR_HAL_A2FXXX_EMEM_TYPE0 0x70000000 +#define CYGHWR_HAL_A2FXXX_EMEM_TYPE1 0x74000000 + +//============================================================================= +// Bit-Band base address +#define CYGHWR_HAL_A2FXXX_I2C0_BB ( CYGHWR_HAL_A2FXXX_PERIPH + 0x00040000 ) +#define CYGHWR_HAL_A2FXXX_I2C1_BB ( CYGHWR_HAL_A2FXXX_PERIPH + 0x00240000 ) +#define CYGHWR_HAL_A2FXXX_MSS_GPIO_BB ( CYGHWR_HAL_A2FXXX_PERIPH + 0x00260000 ) +#define CYGHWR_HAL_A2FXXX_MAC_BB ( CYGHWR_HAL_A2FXXX_PERIPH + 0x00060000 ) + +//============================================================================= +// Device signature and ID registers + +#define CYGHWR_HAL_A2FXXX_MCU_ID (CYGHWR_HAL_A2FXXX_CORTEXM3 + 0xD00) +#define CYGHWR_HAL_A2FXXX_MCU_ID_REV(__x) ((__x)&0xF) +#define CYGHWR_HAL_A2FXXX_MCU_PART_NO(__x) (((__x)>>4)&0x0FFF) +#define CYGHWR_HAL_A2FXXX_MCU_VAR_NO(__x) (((__x)>>20)&0xF) + + +//============================================================================= +// System Control +// +#define CYGHWR_HAL_A2FXXX_SC_ESRAM_CR 0x000 +#define CYGHWR_HAL_A2FXXX_SC_ENVM_CR 0x004 +#define CYGHWR_HAL_A2FXXX_SC_ENVM_REMAP_SYS_CR 0x008 +#define CYGHWR_HAL_A2FXXX_SC_ENVM_REMAP_FAB_CR 0x00C +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_CR 0x010 +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_BASE_CR 0x014 +#define CYGHWR_HAL_A2FXXX_SC_AHB_MATRIX_CR 0x018 +#define CYGHWR_HAL_A2FXXX_SC_MSS_SR 0x01C +#define CYGHWR_HAL_A2FXXX_SC_CLR_MSS_SR 0x020 +#define CYGHWR_HAL_A2FXXX_SC_EFROM_CR 0x024 +#define CYGHWR_HAL_A2FXXX_SC_IAP_CR 0x028 +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTIRQ_CR 0x02C +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR 0x030 +#define CYGHWR_HAL_A2FXXX_SC_DEVICE_SR 0x034 +#define CYGHWR_HAL_A2FXXX_SC_SYSTICK_CR 0x038 +#define CYGHWR_HAL_A2FXXX_SC_EMC_MUX_CR 0x03C +#define CYGHWR_HAL_A2FXXX_SC_EMC_CS0_CR 0x040 +#define CYGHWR_HAL_A2FXXX_SC_EMC_CS1_CR 0x044 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR 0x048 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR 0x04C +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR 0x050 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR 0x054 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR 0x058 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_SR 0x05C +#define CYGHWR_HAL_A2FXXX_SC_VRPSM_CR 0x064 +#define CYGHWR_HAL_A2FXXX_SC_FAB_APB_HW_DR 0x070 +#define CYGHWR_HAL_A2FXXX_SC_LOOPBACK_CR 0x074 +#define CYGHWR_HAL_A2FXXX_SC_MSS_IO_BANK_CR 0x078 +#define CYGHWR_HAL_A2FXXX_SC_GPIN_SOURCE_CR 0x07C +#define CYGHWR_HAL_A2FXXX_SC_IOMUX(_x_) ( 0x100 + (_x_ << 0x2) ) + +// Reset register +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_PAD BIT_(19) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_F2M BIT_(18) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_FPGA BIT_(17) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_EXT BIT_(16) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_IAP BIT_(15) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_GPIO BIT_(14) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_ACE BIT_(13) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_I2C1 BIT_(12) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_I2C0 BIT_(11) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_SPI1 BIT_(10) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_SPI0 BIT_(9) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_UART1 BIT_(8) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_UART0 BIT_(7) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_TIMER BIT_(6) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_PDMA BIT_(5) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_MAC BIT_(4) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_EMC BIT_(3) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_ESRAM1 BIT_(2) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_ESRAM0 BIT_(1) +#define CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_ENVM BIT_(0) + +#define CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(_periph) CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR_##_periph + +void hal_a2fxxx_periph_reset( cyg_uint32 ); +void hal_a2fxxx_periph_release( cyg_uint32 ); + +#define CYGHWR_HAL_A2FXXX_PERIPH_RESET hal_a2fxxx_periph_reset +#define CYGHWR_HAL_A2FXXX_PERIPH_RELEASE hal_a2fxxx_periph_release + +#if 0 +#define CYGHWR_HAL_A2FXXX_PERIPH_START(_x) \ +{ \ + volatile int c = 0; \ + hal_a2fxxx_periph_reset(_x); \ + while( c++ < 20 ); \ + hal_a2fxxx_periph_release(_x); \ +} +#endif + +// MSS CLK register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GLBDIV(_x) VALUE_(12, ((_x)&0x3)) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_RTCIF(_x) VALUE_( 8, ((_x)&0xf)) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_ACLKDIV(_x) VALUE_( 6, ((_x)&0x3)) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK1DIV(_x) VALUE_( 4, ((_x)&0x3)) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK0DIV(_x) VALUE_( 2, ((_x)&0x3)) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_PCLK0DIV(_x) ((_x & 0x000C) >> 2) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_PCLK1DIV(_x) ((_x & 0x0030) >> 4) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_GLBDIV(_x) ((_x & 0x0C00) >> 12) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_RMIICLKSEL BIT_(0) + +// MSS CCC DIV register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIVRST BIT_(22) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIVHALF BIT_(21) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIV(_x) VALUE_(16, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIVRST BIT_(14) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIVHALF BIT_(13) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIV(_x) VALUE_( 8, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIVRST BIT_(6) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIVHALF BIT_(5) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIV(_x) VALUE_( 0, _x) + +// MSS CCC MUX register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_MAINOSCM(_x) VALUE_(30, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_MAINOSCEN BIT_(29) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXCFG(_x) VALUE_(26, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXSEL(_x) VALUE_(24, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSC BIT_(22) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(_x) VALUE_(19, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNCSEL BIT_(18) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXCSEL BIT_(17) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATCSEL BIT_(16) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSB BIT_(14) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OBMUX(_x) VALUE_(11, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNBSEL BIT_(10) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXBSEL BIT_(9) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATBSEL BIT_(8) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSA BIT_(6) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OAMUX(_x) VALUE_( 3, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNASEL BIT_(2) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXASEL BIT_(1) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATASEL BIT_(0) + +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLA 0 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLC 1 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLINT 2 +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GND 3 + +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKA_SEL(_x_) \ +({ \ + cyg_uint32 _i = _x_; \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKB_SEL(_x_) \ +({ \ + cyg_uint32 _i = _x_; \ + _i = _i << 8; \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKC_SEL(_x_) \ +({ \ + cyg_uint32 _i = _x_; \ + _i = _i << 16; \ + _i; \ +}) + +// MSS CCC PLL register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_PLLEN BIT_(31) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_VCOSEL2_1(_x) VALUE_(23, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_VCOSEL0 BIT_(22) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_XDLYSEL(_x) VALUE_(21, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBDLY(_x) VALUE_(16, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBSEL(_x) VALUE_(14, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBDIV(_x) VALUE_(7, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FINDIV(_x) VALUE_(0, _x) + +// Delay Configuration Register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA1(_x) VALUE_(20, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA0(_x) VALUE_(15, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYC(_x) VALUE_(10, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYB(_x) VALUE_(5, _x) +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA(_x) VALUE_(0, _x) + +// CCC Status Register +#define CYGHWR_HAL_A2FXXX_SC_MSS_CCC_SR_PLL_LOCK_SYNC BIT_(0) + +// ESRAM control register +#define CYGHWR_HAL_A2FXXX_SC_ESRAM_CR_REMAP BIT_(0) + +// ENVM control register +#define CYGHWR_HAL_A2FXXX_SC_ENVM_CR_SIX_CYCLE BIT_(7) +#define CYGHWR_HAL_A2FXXX_SC_ENVM_CR_PIPE_BYPASS BIT_(6) +#define CYGHWR_HAL_A2FXXX_SC_ENVM_CR_REMAP_SIZE(_s_) VALUE_(0, _s_) + +// ENVM re-mapping in system or fabric master space register +#define CYGHWR_HAL_A2FXXX_SC_ENVM_REMAP_BASE(_b_) VALUE_(1, _b_) +#define CYGHWR_HAL_A2FXXX_SC_ENVM_REMAP_EN BIT_(0) + +// Fabric protect size +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_128B VALUE_(0, 6) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_2KB VALUE_(0, 10) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_16KB VALUE_(0, 13) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_32KB VALUE_(0, 14) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_64KB VALUE_(0, 15) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_128KB VALUE_(0, 16) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_256KB VALUE_(0, 17) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_512KB VALUE_(0, 18) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_8MB VALUE_(0, 22) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_128MB VALUE_(0, 26) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_SIZE_2GB VALUE_(0, 30) + +// Fabric protect control register +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_BASE_CR_VAL(_x) VALUE_( 1, _x) +#define CYGHWR_HAL_A2FXXX_SC_FAB_PROT_BASE_CR_EN BIT_(0) + +// Embedded FlashROM control register +#define CYGHWR_HAL_A2FXXX_SC_EFROM_CR_SYS_TOPT3_1(_v_) VALUE_(1, _v_) +#define CYGHWR_HAL_A2FXXX_SC_EFROM_CR_SYS_TOPT0 BIT_(0) + +//============================================================================= +// DMA +// + +#define CYGHWR_HAL_A2FXXX_DMA_RATIO 0x0 +#define CYGHWR_HAL_A2FXXX_DMA_BUFFER_STATUS 0x4 +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(_x_) (0x20 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS(_x_) (0x24 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BA_SRC(_x_) (0x28 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BA_DST(_x_) (0x2C + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BA_COUNT(_x_) (0x30 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BB_SRC(_x_) (0x34 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BB_DST(_x_) (0x38 + (_x_ * 0x20)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BB_COUNT(_x_) (0x3C + (_x_ * 0x20)) + +// Ratio +#define CYGHWR_HAL_A2FXXX_DMA_RATIO_HILO(_x_) VALUE_(0, _x_) + +// Buffer status +#define CYGHWR_HAL_A2FXXX_DMA_BUFFER_STATUS_CHAxx(_x_) VALUE_( (_x_ << 1), 1) +#define CYGHWR_HAL_A2FXXX_DMA_BUFFER_STATUS_CHAx(_x_) VALUE_(((_x_ << 1)+1), 1) + +// Channel control +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_PERIPH_SEL(_p_) VALUE_(23, _p_) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_WR_ADJ(_v_) VALUE_(14, _v_) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR_4B VALUE_(12, 0x3) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR_2B VALUE_(12, 0x2) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR_1B VALUE_(12, 0x1) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR_0B VALUE_(12, 0x0) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR(_x_) VALUE_(12, ((_x_) & 0x3)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR_4B VALUE_(10, 0x3) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR_2B VALUE_(10, 0x2) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR_1B VALUE_(10, 0x1) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR_0B VALUE_(10, 0x0) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR(_x_) VALUE_(10, ((_x_) & 0x3)) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_HI_PRI BIT_(9) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPB BIT_(8) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPA BIT_(7) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_INTEN BIT_(6) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_RESET BIT_(5) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_PAUSE BIT_(4) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_XFER_WORD VALUE_(2, 0x2) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_XFER_HWORD VALUE_(2, 0x1) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_XFER_BYTE VALUE_(2, 0x0) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DIR BIT_(1) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_PERIPH BIT_(0) + +// DMA transfer type +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_UART0 0x0 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_UART0 0x1 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_UART1 0x2 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_UART1 0x3 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_SPI0 0x4 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_SPI0 0x5 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_SPI1 0x6 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_SPI1 0x7 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_FPGA 0x8 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_FPGA 0x9 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_FROM_ACE 0x10 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_TO_ACE 0x11 +#define CYGHWR_HAL_A2FXXX_DMA_XFER_MEMORY 0xff + +#define CYGHWR_HAL_A2FXXX_DMA_XFER(_x) CYGHWR_HAL_A2FXXX_DMA_XFER_##_x + +#define CYGHWR_HAL_A2FXXX_DMA_GET_SUB_ID(_x) ((_x>>2) & 0x01) + +// Channel status +#define CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS_BUF_SEL BIT_(2) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS_COMPB BIT_(1) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS_COMPA BIT_(0) + +// Buffer count +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BA_COUNT_FIELD(_c) VALUE_(0, _c) +#define CYGHWR_HAL_A2FXXX_DMA_CHx_BB_COUNT_FIELD(_c) VALUE_(0, _c) + +#define CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL 8 +#define CYGHWR_HAL_A2FXXX_DMA_MAX_SUB_CHANNEL 2 + +// DMA access prototypes +void hal_dma_init ( void ); +cyg_uint32 a2fxxx_dma_xfer (cyg_uint8 , cyg_bool , cyg_uint32 len, cyg_uint8* , cyg_uint8* ); +cyg_uint32 a2fxxx_dma_ch_setup (cyg_uint8 , cyg_uint8 , cyg_bool , cyg_uint8 , cyg_uint8 , cyg_bool, cyg_uint8); +void a2fxxx_dma_ch_detach (cyg_uint8 ); +void a2fxxx_dma_update_incr (cyg_uint8 , cyg_bool , cyg_uint8 ); +void a2fxxx_dma_clear_interrupt (cyg_uint8 ); +cyg_uint8 a2fxxx_dma_get_comp_flag (cyg_uint8 ); + +#define CYGHWR_HAL_A2FXXX_DMA_OUTBOUND true +#define CYGHWR_HAL_A2FXXX_DMA_INBOUND false + +//============================================================================= +// ENVM +// +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS 0x00 +#define CYGHWR_HAL_A2FXXX_ENVM_CTRL 0x04 +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ 0x08 +#define CYGHWR_HAL_A2FXXX_ENVM0_CR 0x10 +#define CYGHWR_HAL_A2FXXX_ENVM1_CR 0x14 +#define CYGHWR_HAL_A2FXXX_ENVM0_PAGE_STATUS 0x18 +#define CYGHWR_HAL_A2FXXX_ENVM1_PAGE_STATUS 0x1C + +// Status Register +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ILLEGAL_CMD_1 BIT_(31) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_1 VALUE_(24, 0x3) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_OP_DONE_1 BIT_(23) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ECC2_ERR_1 BIT_(22) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ECC1_ERR_1 BIT_(21) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_OVER_THR_1 BIT_(20) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ERASE_ERR_1 BIT_(19) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_PROG_ERR_1 BIT_(18) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_PROT_ERR_1 BIT_(17) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_BSY_1 BIT_(16) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ILLEGAL_CMD_0 BIT_(15) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_0 VALUE_( 8, 0x3) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_OP_DONE_0 BIT_(7) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ECC2_ERR_0 BIT_(6) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ECC1_ERR_0 BIT_(5) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_OVER_THR_0 BIT_(4) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_ERASE_ERR_0 BIT_(3) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_PROG_ERR_0 BIT_(2) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_PROT_ERR_0 BIT_(1) +#define CYGHWR_HAL_A2FXXX_ENVM_STATUS_BSY_0 BIT_(0) + +// Control Register +#define CYGHWR_HAL_A2FXXX_ENVM_CTRL_COMMAND(_x_) VALUE_(24, _x_) +#define CYGHWR_HAL_A2FXXX_ENVM_CTRL_PAGE_ADDR(_x_) VALUE_( 0, _x_) + +// Interrupt Enable +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ILLEGAL_CMD_1 BIT_(31) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_OP_DONE_1 BIT_(23) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ECC2_ERR_1 BIT_(22) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ECC1_ERR_1 BIT_(21) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_OVER_THR_1 BIT_(20) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ERASE_ERR_1 BIT_(19) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_PROG_ERR_1 BIT_(18) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_PROT_ERR_1 BIT_(17) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ILLEGAL_CMD_0 BIT_(15) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_OP_DONE_0 BIT_(7) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ECC2_ERR_0 BIT_(6) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ECC1_ERR_0 BIT_(5) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_OVER_THR_0 BIT_(4) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_ERASE_ERR_0 BIT_(3) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_PROG_ERR_0 BIT_(2) +#define CYGHWR_HAL_A2FXXX_ENVM_IRQ_PROT_ERR_0 BIT_(1) + +// Configuration Register +#define CYGHWR_HAL_A2FXXX_ENVMx_CR_LOCK BIT_(2) +#define CYGHWR_HAL_A2FXXX_ENVMx_CR_PAGE_LOSS BIT_(1) +#define CYGHWR_HAL_A2FXXX_ENVMx_CR_READ_NEXT BIT_(0) + +// Page status +#define CYGHWR_HAL_A2FXXX_ENVMx_PAGE_STATUS_WCOUNT VALUE_(8, 0x00ffffffff) +#define CYGHWR_HAL_A2FXXX_ENVMx_PAGE_STATUS_OVER_THR BIT_(3) +#define CYGHWR_HAL_A2FXXX_ENVMx_PAGE_STATUS_RPROT BIT_(2) +#define CYGHWR_HAL_A2FXXX_ENVMx_PAGE_STATUS_WPROT BIT_(1) +#define CYGHWR_HAL_A2FXXX_ENVMx_PAGE_STATUS_OPROT BIT_(0) + + +//============================================================================= +// eSRAM +// + +#define CYGHWR_HAL_A2FXXX_ESRAM_CR 0xE0002000 +#define CYGHWR_HAL_A2FXXX_AHB_MATRIX_CR 0xE0002018 + +#define CYGHWR_HAL_A2FXXX_ESRAM_CR_REMAP BIT_(0) + + +//============================================================================= +// SPI +// +#define CYGHWR_HAL_A2FXXX_SPI_CTRL 0x00 +#define CYGHWR_HAL_A2FXXX_SPI_TXRXDF_SIZE 0x04 +#define CYGHWR_HAL_A2FXXX_SPI_STATUS 0x08 +#define CYGHWR_HAL_A2FXXX_SPI_IRQ_CLEAR 0x0C +#define CYGHWR_HAL_A2FXXX_SPI_RX 0x10 +#define CYGHWR_HAL_A2FXXX_SPI_TX 0x14 +#define CYGHWR_HAL_A2FXXX_SPI_CLK_GEN 0x18 +#define CYGHWR_HAL_A2FXXX_SPI_SLAVE_SEL 0x1C +#define CYGHWR_HAL_A2FXXX_SPI_MIS 0x20 +#define CYGHWR_HAL_A2FXXX_SPI_RIS 0x24 + +// Control Register +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_SPH BIT_(25) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_SPO BIT_(24) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_COUNT(_x) VALUE_(8, _x) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_IRQ_TX_UNRRUN BIT_(7) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_IRQ_RX_OVRFLO BIT_(6) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_IRQ_TX BIT_(5) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_IRQ_RX BIT_(4) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_NS VALUE_(2, 0x2) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_TI VALUE_(2, 0x1) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_PROTO_MOTOROLA VALUE_(2, 0x0) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_MASTER BIT_(1) +#define CYGHWR_HAL_A2FXXX_SPI_CTRL_EN BIT_(0) + +// Status Register +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_FIFO_EMPTY_N BIT_(11) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_FIFO_EMPTY BIT_(10) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_FIFO_FULL_N BIT_(9) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_FIFO_FULL BIT_(8) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_FIFO_EMPTY_N BIT_(7) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_FIFO_EMPTY BIT_(6) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_FIFO_FULL_N BIT_(5) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_FIFO_FULL BIT_(4) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_UNDERRUN BIT_(3) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_OVERFLOW BIT_(2) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_RX_RCED BIT_(1) +#define CYGHWR_HAL_A2FXXX_SPI_STATUS_TX_SENT BIT_(0) + +// Interrupt Clear Register +#define CYGHWR_HAL_A2FXXX_SPI_IRQ_CLEAR_TXUNDRUN BIT_(3) +#define CYGHWR_HAL_A2FXXX_SPI_IRQ_CLEAR_RXOVRFLW BIT_(2) +#define CYGHWR_HAL_A2FXXX_SPI_IRQ_CLEAR_RXRDY BIT_(1) +#define CYGHWR_HAL_A2FXXX_SPI_IRQ_CLEAR_TXDONE BIT_(0) + +// Masked Interrupt +#define CYGHWR_HAL_A2FXXX_SPI_MIS_TXUNDRUN BIT_(3) +#define CYGHWR_HAL_A2FXXX_SPI_MIS_RXOVRFLW BIT_(2) +#define CYGHWR_HAL_A2FXXX_SPI_MIS_RXRDY BIT_(1) +#define CYGHWR_HAL_A2FXXX_SPI_MIS_TXDONE BIT_(0) + +// Raw Interrupt Status +#define CYGHWR_HAL_A2FXXX_SPI_RIS_TXUNDRUN BIT_(3) +#define CYGHWR_HAL_A2FXXX_SPI_RIS_RXOVRFLW BIT_(2) +#define CYGHWR_HAL_A2FXXX_SPI_RIS_RXRDY BIT_(1) +#define CYGHWR_HAL_A2FXXX_SPI_RIS_TXDONE BIT_(0) + +// Chip select selection +#define CYGHWR_HAL_A2FXXX_SPI_CS_SEL(_dev) (0x1 << _dev) + +// Peripherals IOs mapping +#define CYGHWR_HAL_A2FXXX_SPI0_DO CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_DO, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_DI CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_DI, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_CLK CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_CLK, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_SS0 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_SS_0, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_SS1 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_SS_1, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_SS2 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_SS_2, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI0_SS3 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI0_SS_3, DISABLE ) + +#define CYGHWR_HAL_A2FXXX_SPI1_DO CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_DO, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_DI CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_DI, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_CLK CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_CLK, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS0 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_0, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS1 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_1, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS2 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_2, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS3 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_3, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS4 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_4, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS5 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_5, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS6 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_6, DISABLE ) +#define CYGHWR_HAL_A2FXXX_SPI1_SS7 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, SPI1_SS_7, DISABLE ) + +// This is a special GPIO macro accommodated for SPI slave select +#define CYGHWR_HAL_A2FXXX_CS_GPIO( \ + __bit, \ + __mode, \ + __p_io, \ + __irq) \ +( \ + (__bit << 23) | \ + (CYGHWR_HAL_A2FXXX_GPIO_MODE_ ## __mode) | \ + CYGHWR_HAL_A2FXXX_GPIO_PERIPH_GPIO(__p_io) | \ + (CYGHWR_HAL_A2FXXX_GPIO_IRQ_ ## __irq) \ +) + +__externC cyg_uint32 hal_a2fxxx_spi_clock( cyg_uint32 ); + +//============================================================================= +// I2C +// +#define CYGHWR_HAL_A2FXXX_I2C_CTRL 0x00 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS 0x04 +#define CYGHWR_HAL_A2FXXX_I2C_DATA 0x08 +#define CYGHWR_HAL_A2FXXX_I2C_ADDR 0x0C +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS 0x10 +#define CYGHWR_HAL_A2FXXX_I2C_FREQ 0x14 +#define CYGHWR_HAL_A2FXXX_I2C_GLITCH 0x18 + +// Control Register +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_CR2 BIT_(7) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_ENS1 BIT_(6) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_STA BIT_(5) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_STO BIT_(4) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_SI BIT_(3) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_AA BIT_(2) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_CR1 BIT_(1) +#define CYGHWR_HAL_A2FXXX_I2C_CTRL_CR0 BIT_(0) + +// I2C clock divider +#define CYGHWR_HAL_A2FXXX_I2C_DIV_8 0x7 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_60 0x6 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_120 0x5 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_960 0x4 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_160 0x3 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_192 0x2 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_224 0x1 +#define CYGHWR_HAL_A2FXXX_I2C_DIV_256 0x0 + +// Status Registers +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_START 0x08 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_REPEAT_START 0x10 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_ADDR_ACK 0x18 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_ADDR_NACK 0x20 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_DATA_ACK 0x28 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_DATA_NACK 0x30 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MTX_ARBLOST 0x38 + +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_START 0x08 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_REPEAT_START 0x10 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_ARBLOST 0x38 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_ADDR_ACK 0x40 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_ADDR_NACK 0x48 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_DATA_ACK 0x50 +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRX_DATA_NACK 0x58 + +#define CYGHWR_HAL_A2FXXX_I2C_STATUS_MRESET 0xD0 + +// SMB +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_RST BIT_(7) +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_NO BIT_(6) +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_NI BIT_(5) +#define CYGHWR_HAL_A2FXXX_I2C_SMBALERT_NO BIT_(4) +#define CYGHWR_HAL_A2FXXX_I2C_SMBALERT_NI BIT_(3) +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_EN BIT_(2) +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_IRQ_EN BIT_(1) +#define CYGHWR_HAL_A2FXXX_I2C_SMBUS_ALERT_IRQ_EN BIT_(0) + +// Peripherals IOs mapping +#define CYGHWR_HAL_A2FXXX_I2C0_SDA CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, I2C0_SDA, DISABLE ) +#define CYGHWR_HAL_A2FXXX_I2C0_SCL CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, I2C0_SCL, DISABLE ) + +#define CYGHWR_HAL_A2FXXX_I2C1_SDA CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, I2C1_SDA, DISABLE ) +#define CYGHWR_HAL_A2FXXX_I2C1_SCL CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, I2C1_SCL, DISABLE ) + +__externC cyg_uint32 hal_a2fxxx_i2c_clock( cyg_uint32 ); + +//============================================================================= +// GPIO +// +#define CYGHWR_HAL_A2FXXX_MSS_GPIO_CFG(_io) (_io << 2) +#define CYGHWR_HAL_A2FXXX_MSS_GPIO_INT 0x080 +#define CYGHWR_HAL_A2FXXX_MSS_GPIO_DIN 0x084 +#define CYGHWR_HAL_A2FXXX_MSS_GPIO_DOUT 0x088 + +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR 0xe0042078 +#define CYGHWR_HAL_A2FXXX_GPIN_SOURCE_CR 0xe004207c +#define CYGHWR_HAL_A2FXXX_IOMUX_CR 0xe0042100 + +// CFG +#define CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(_t) VALUE_(5, (_t & 0x7)) +#define CYGHWR_HAL_A2FXXX_GPIO_CFG_GPINTEN BIT_(3) +#define CYGHWR_HAL_A2FXXX_GPIO_CFG_OUTBUFEN BIT_(2) +#define CYGHWR_HAL_A2FXXX_GPIO_CFG_GPINEN BIT_(1) +#define CYGHWR_HAL_A2FXXX_GPIO_CFG_GPOUTEN BIT_(0) + +// MSS GPIO +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_LVCMOS_3V3 0x0 +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_LVCMOS_2V5 0x1 +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_LVCMOS_1V8 0x2 +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_LVCMOS_1V5 0x3 + +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTEAST(_t) VALUE_(0, (CYGHWR_HAL_A2FXXX_MSS_IO_BANK_##_t & 0x3)) +#define CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTWEST(_t) VALUE_(2, (CYGHWR_HAL_A2FXXX_MSS_IO_BANK_##_t & 0x3)) + +// HAL definitions +#define CYGHWR_HAL_A2FXXX_GPIO_MODE_IN VALUE_(0,0) // Input mode +#define CYGHWR_HAL_A2FXXX_GPIO_MODE_OUT VALUE_(0,1) // Output mode +#define CYGHWR_HAL_A2FXXX_GPIO_MODE_PERIPH VALUE_(0,2) // Peripheral function mode + +#define CYGHWR_HAL_A2FXXX_GPIO_PERIPH_IO(_name_) VALUE_(2, CYGHWR_HAL_A2FXXX_IOMUX_##_name_) +#define CYGHWR_HAL_A2FXXX_GPIO_PERIPH_GPIO(_id_) VALUE_(2, (CYGHWR_HAL_A2FXXX_IOMUX_GPIO_0+_id_)) + +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_DISABLE VALUE_(10,0) // Interrupt disable +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_FALLING_EDGE VALUE_(10,1) // Interrupt on falling edge +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_RISING_EDGE VALUE_(10,2) // Interrupt on rising edge +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_BOTH_EDGES VALUE_(10,3) // Interrupt on both edges +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_LOW_LEVEL VALUE_(10,4) // Interrupt on low level +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ_HIGH_LEVEL VALUE_(10,5) // Interrupt on high level + +typedef struct +{ + cyg_uint32 val; +} default_io_mux_type; + +// IOMUX index setting for peripherals +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_DO 0 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_DI 1 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_CLK 2 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_SS_0 3 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_TX 4 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_RX 5 +#define CYGHWR_HAL_A2FXXX_IOMUX_I2C0_SDA 6 +#define CYGHWR_HAL_A2FXXX_IOMUX_I2C0_SCL 7 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_DO 8 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_DI 9 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_CLK 10 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_0 11 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_TX 12 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_RX 13 +#define CYGHWR_HAL_A2FXXX_IOMUX_I2C1_SDA 14 +#define CYGHWR_HAL_A2FXXX_IOMUX_I2C1_SCL 15 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_TXD0 16 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_TXD1 17 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_RXD0 18 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_RXD1 19 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_TXEN 20 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_CRSDV 21 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_RXER 22 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_MDIO 23 +#define CYGHWR_HAL_A2FXXX_IOMUX_MAC0_MDC 24 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_0 25 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_1 26 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_2 27 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_3 28 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_4 29 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_5 30 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_6 31 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_7 32 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_8 33 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_9 34 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_10 35 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_11 36 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_12 37 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_13 38 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_14 39 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_15 40 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_16 41 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_17 42 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_18 43 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_19 44 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_20 45 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_21 46 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_22 47 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_23 48 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_24 49 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_25 50 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_26 51 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_27 52 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_28 53 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_29 54 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_30 55 +#define CYGHWR_HAL_A2FXXX_IOMUX_GPIO_31 56 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_SS_1 57 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_SS_2 58 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI0_SS_3 59 +// 60 to 63 not used +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_RTS 64 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_DTR 65 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_CTS 66 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_DSR 67 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_RI 68 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART0_DCD 69 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_1 70 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_2 71 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_3 72 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_4 73 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_5 74 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_6 75 +#define CYGHWR_HAL_A2FXXX_IOMUX_SPI1_SS_7 76 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_RTS 77 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_DTR 78 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_CTS 79 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_DSR 80 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_RI 81 +#define CYGHWR_HAL_A2FXXX_IOMUX_UART1_DCD 82 +#define CYGHWR_HAL_A2FXXX_IOMUX_NONE 83 + +// This macro packs the port, bit number, mode, buffer and irq +// for a GPIO pin into a single word. +// The packing puts: + +#define CYGHWR_HAL_A2FXXX_GPIO( \ + __bit, \ + __mode, \ + __name, \ + __irq) \ +( \ + (__bit << 23) | \ + (CYGHWR_HAL_A2FXXX_GPIO_MODE_ ## __mode) | \ + CYGHWR_HAL_A2FXXX_GPIO_PERIPH_IO(__name) | \ + (CYGHWR_HAL_A2FXXX_GPIO_IRQ_ ## __irq) \ +) + + +// Macros to extract encoded values +#define CYGHWR_HAL_A2FXXX_GPIO_BIT(__pin) (((__pin)>>23) & 0x1F) +#define CYGHWR_HAL_A2FXXX_GPIO_MODE(__pin) ((__pin)&0x0003) +#define CYGHWR_HAL_A2FXXX_GPIO_IOMUX_IDX(__pin) ((__pin>>2) & 0xff) +#define CYGHWR_HAL_A2FXXX_GPIO_IRQ(__pin) ((__pin>>10) & 0x07) +#define CYGHWR_HAL_A2FXXX_GPIO_NONE (0xFFFFFFFF) + +__externC void hal_a2fxxx_gpio_set( cyg_uint32 pin ); +__externC void hal_a2fxxx_gpio_out( cyg_uint32 pin, int val ); +__externC void hal_a2fxxx_gpio_in ( cyg_uint32 pin, int *val ); + +#define CYGHWR_HAL_A2FXXX_GPIO_SET(__pin ) hal_a2fxxx_gpio_set( __pin ) +#define CYGHWR_HAL_A2FXXX_GPIO_OUT(__pin, __val ) hal_a2fxxx_gpio_out( __pin, __val ) +#define CYGHWR_HAL_A2FXXX_GPIO_IN(__pin, __val ) hal_a2fxxx_gpio_in( __pin, __val ) + + +//============================================================================= +// UART +// +#define CYGHWR_HAL_A2FXXX_UART16550_RBR 0x00 +#define CYGHWR_HAL_A2FXXX_UART16550_THR 0x00 +#define CYGHWR_HAL_A2FXXX_UART16550_DLR 0x00 +#define CYGHWR_HAL_A2FXXX_UART16550_DMR 0x04 +#define CYGHWR_HAL_A2FXXX_UART16550_IER 0x04 +#define CYGHWR_HAL_A2FXXX_UART16550_IIR 0x08 +#define CYGHWR_HAL_A2FXXX_UART16550_FCR 0x08 +#define CYGHWR_HAL_A2FXXX_UART16550_LCR 0x0C +#define CYGHWR_HAL_A2FXXX_UART16550_MCR 0x10 +#define CYGHWR_HAL_A2FXXX_UART16550_LSR 0x14 +#define CYGHWR_HAL_A2FXXX_UART16550_MSR 0x18 +#define CYGHWR_HAL_A2FXXX_UART16550_SR 0x1C + +// IER +#define CYGHWR_HAL_A2FXXX_UART16550_IER_EDSSI BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_IER_ELSI BIT_(2) +#define CYGHWR_HAL_A2FXXX_UART16550_IER_ETBEI BIT_(1) +#define CYGHWR_HAL_A2FXXX_UART16550_IER_ERBFI BIT_(0) + +// IIR (by priority) +#define CYGHWR_HAL_A2FXXX_UART16550_IIR_MODEM_STATUS VALUE_(0, 0x0) +#define CYGHWR_HAL_A2FXXX_UART16550_IIR_THRE VALUE_(0, 0x2) +#define CYGHWR_HAL_A2FXXX_UART16550_IIR_CTI VALUE_(0, 0xC) +#define CYGHWR_HAL_A2FXXX_UART16550_IIR_RXD VALUE_(0, 0x4) +#define CYGHWR_HAL_A2FXXX_UART16550_IIR_RLS VALUE_(0, 0x6) + +// Fifo control +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_RX_TRIG_1BYTE VALUE_(6, 0x0) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_RX_TRIG_4BYTE VALUE_(6, 0x1) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_RX_TRIG_8BYTE VALUE_(6, 0x2) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_RX_TRIG_14BYTE VALUE_(6, 0x3) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_EN_TXRX_DY BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_CLEAR_TX_FIFO BIT_(2) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_CLEAR_RX_FIFO BIT_(1) +#define CYGHWR_HAL_A2FXXX_UART16550_FCR_RESERVED BIT_(0) + +// Line control +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_DLAB BIT_(7) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_SB BIT_(6) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_SP BIT_(5) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_EPS BIT_(4) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_PEN BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_STOP_1 VALUE_(2,0) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_STOP_2 VALUE_(2,1) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_WLS_5BITS VALUE_(0, 0x0) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_WLS_6BITS VALUE_(0, 0x1) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_WLS_7BITS VALUE_(0, 0x2) +#define CYGHWR_HAL_A2FXXX_UART16550_LCR_WLS_8BITS VALUE_(0, 0x3) + +// MCR register +#define CYGHWR_HAL_A2FXXX_UART16550_MCR_LOOP BIT_(4) +#define CYGHWR_HAL_A2FXXX_UART16550_MCR_OUT2 BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_MCR_OUT1 BIT_(2) +#define CYGHWR_HAL_A2FXXX_UART16550_MCR_RTS BIT_(1) +#define CYGHWR_HAL_A2FXXX_UART16550_MCR_DTR BIT_(0) + +// LSR register +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_FIER BIT_(6) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_TEMT BIT_(6) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_THRE BIT_(5) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_BI BIT_(4) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_FE BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_PE BIT_(2) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_OE BIT_(1) +#define CYGHWR_HAL_A2FXXX_UART16550_LSR_DR BIT_(0) + +// MSR +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_DCD BIT_(7) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_RI BIT_(6) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_DSR BIT_(5) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_CTS BIT_(4) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_DDCD BIT_(3) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_TERI BIT_(2) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_DDSR BIT_(1) +#define CYGHWR_HAL_A2FXXX_UART16550_MSR_DCTS BIT_(0) + +__externC cyg_uint32 hal_a2fxxx_pclk0; +__externC cyg_uint32 hal_a2fxxx_pclk1; + +__externC void hal_a2fxxx_uart_setbaud(cyg_uint32 , cyg_uint32 ); + +// Consider adding rounding ? +#define CYG_HAL_CORTEXM_A2FXXX_BAUD_GENERATOR( id, baud ) \ +({ \ + cyg_uint16 _divider; \ + if( id == 0 ) \ + _divider = (hal_a2fxxx_pclk0/(baud << 4)); \ + else \ + _divider = (hal_a2fxxx_pclk1/(baud << 4)); \ + _divider; \ +}) + +// Peripherals IOs mapping +#define CYGHWR_HAL_A2FXXX_UART0_TX CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, UART0_TX, DISABLE ) +#define CYGHWR_HAL_A2FXXX_UART0_RX CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, UART0_RX, DISABLE ) + +#define CYGHWR_HAL_A2FXXX_UART1_TX CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, UART1_TX, DISABLE ) +#define CYGHWR_HAL_A2FXXX_UART1_RX CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, UART1_RX, DISABLE ) + + +//============================================================================= +// Watchdog +// +#define CYGHWR_HAL_A2FXXX_WD_VALUE 0x00 +#define CYGHWR_HAL_A2FXXX_WD_LOAD 0x04 +#define CYGHWR_HAL_A2FXXX_WD_MVRP 0x08 +#define CYGHWR_HAL_A2FXXX_WD_REFRESH 0x0C +#define CYGHWR_HAL_A2FXXX_WD_ENABLE 0x10 +#define CYGHWR_HAL_A2FXXX_WD_CTRL 0x14 +#define CYGHWR_HAL_A2FXXX_WD_STATUS 0x18 +#define CYGHWR_HAL_A2FXXX_WD_RIS 0x1C +#define CYGHWR_HAL_A2FXXX_WD_MIS 0x20 + +// Keys +#define CYGHWR_HAL_A2FXXX_WD_REFRESH_KEY 0xAC15DE42 +#define CYGHWR_HAL_A2FXXX_WD_DISABLE_KEY 0x4C6E55FA + + +//============================================================================= +// Timer +// +#define CYGHWR_HAL_A2FXXX_TIMER1 CYGHWR_HAL_A2FXXX_TIMER +#define CYGHWR_HAL_A2FXXX_TIMER2 (CYGHWR_HAL_A2FXXX_TIMER + 0x18) + +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_VAL 0x00 +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_LOADVAL 0x04 +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_BGLOADVAL 0x08 +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL 0x0c +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_RIS 0x10 +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_MIS 0x14 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_VAL_U 0x30 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_VAL_L 0x34 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_LOADVAL_U 0x38 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_LOADVAL_L 0x3C +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_BGLOADVAL_U 0x40 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_BGLOADVAL_L 0x44 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_CTRL 0x48 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_RIS 0x4C +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_MIS 0x50 +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_MODE 0x54 + +// Timer control +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL_INTEN BIT_(2) +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL_ONESHOT BIT_(1) +#define CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL_EN BIT_(0) + +// Timer control 64 bits +#define CYGHWR_HAL_A2FXXX_TIMER_TIM64_MODE_64BITS BIT_(0) + + +//============================================================================= +// MAC +// +#if defined(CYGHWR_HAL_CORTEXM_A2FXXX_A2F200) || \ + defined(CYGHWR_HAL_CORTEXM_A2FXXX_A2F500) + +#define CYGHWR_HAL_A2FXXX_MAC_CSR0 0x00 +#define CYGHWR_HAL_A2FXXX_MAC_CSR1 0x08 +#define CYGHWR_HAL_A2FXXX_MAC_CSR2 0x10 +#define CYGHWR_HAL_A2FXXX_MAC_CSR3 0x18 +#define CYGHWR_HAL_A2FXXX_MAC_CSR4 0x20 +#define CYGHWR_HAL_A2FXXX_MAC_CSR5 0x28 +#define CYGHWR_HAL_A2FXXX_MAC_CSR6 0x30 +#define CYGHWR_HAL_A2FXXX_MAC_CSR7 0x38 +#define CYGHWR_HAL_A2FXXX_MAC_CSR8 0x40 +#define CYGHWR_HAL_A2FXXX_MAC_CSR9 0x48 +#define CYGHWR_HAL_A2FXXX_MAC_CSR10 0x50 +#define CYGHWR_HAL_A2FXXX_MAC_CSR11 0x58 + +// Bus Mode Register (CSR0) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_CLEAR 0xFE000000 +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_SPD BIT_(21) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_DBO BIT_(20) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_TAP(_x) VALUE_(17, (_x & 0x7)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_PBL(_x) VALUE_(8, (_x & 0x2f)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_BLE BIT_(7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_DSL(_x) VALUE_(2, (_x & 0x1f)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_BAR BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR0_SWR BIT_(0) + +// Transmit Poll Demand Register (CSR1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR1_TPD(_x) VALUE_(0, _x) + +// Receive Poll Demand Register (CSR2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR2_RPD(_x) VALUE_(0, _x) + +// Receive Descriptor List Base Address Register (CSR3) +#define CYGHWR_HAL_A2FXXX_MAC_CSR3_RLA(_x) VALUE_(0, _x) + +// Transmit Descriptor List Base Address Register (CSR4) +#define CYGHWR_HAL_A2FXXX_MAC_CSR4_TLA(_x) VALUE_(0, _x) + +// Status and Control Register (CSR5) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_CLOSE_TXD VALUE_(20, 0x7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_SUSPEND VALUE_(20, 0x6) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_SETUP_PACKET VALUE_(20, 0x5) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_XFER VALUE_(20, 0x3) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_WAIT_EOT VALUE_(20, 0x2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_FETCH_TXD VALUE_(20, 0x1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_STOP VALUE_(20, 0x0) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_MASK VALUE_(20, 0x7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_XFER VALUE_(17, 0x7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_CLOSE_RXD VALUE_(17, 0x5) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_SUSPEND VALUE_(17, 0x4) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_WAIT_PACKET VALUE_(17, 0x3) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_WAIT_EOR VALUE_(17, 0x2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_FETCH_RXD VALUE_(17, 0x1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_STOP VALUE_(17, 0x0) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_MASK VALUE_(17, 0x7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_NIS BIT_(16) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_AIS BIT_(15) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_ERI BIT_(14) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_GTE BIT_(11) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_ETI BIT_(10) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RPS BIT_(8) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RU BIT_(7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_RI BIT_(6) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_UNF BIT_(5) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TU BIT_(2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TPS BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR5_TI BIT_(0) + +// Define MAC state +#define A2FXXX_MAC_TX_STATE(_x_) CYGHWR_HAL_A2FXXX_MAC_CSR5_TS_##_x_ +#define A2FXXX_MAC_RX_STATE(_x_) CYGHWR_HAL_A2FXXX_MAC_CSR5_RS_##_x_ +#define A2FXXX_MAC_TX_STATE_MASK VALUE_(20, 0x7) +#define A2FXXX_MAC_RX_STATE_MASK VALUE_(17, 0x7) + +// Operation Mode Register (CSR6) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_CLEAR 0xBF9F1D20 +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_RA BIT_(30) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_TTM BIT_(22) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_SF BIT_(21) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_TR(_x) VALUE_(14, _x) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_ST BIT_(13) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_FD BIT_(9) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_PM BIT_(7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_PR BIT_(6) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_IF BIT_(4) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_PB BIT_(3) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_HO BIT_(2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_SR BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR6_HP BIT_(0) + +// Interrupt Enable Register (CSR7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_NIE BIT_(16) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_AIE BIT_(15) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_ERE BIT_(14) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_GTE BIT_(11) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_ETE BIT_(10) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_RSE BIT_(8) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_RUE BIT_(7) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_RIE BIT_(6) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_UNE BIT_(5) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_TUE BIT_(2) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_TSE BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_CSR7_TIE BIT_(0) + +// Missed Frames and Overflow Counter Register (CSR8) +#define CYGHWR_HAL_A2FXXX_MAC_CSR8_OCO BIT_(28) +#define CYGHWR_HAL_A2FXXX_MAC_CSR8_MFO BIT_(16) + +// RMII Management Interface Register (CSR9) +#define CYGHWR_HAL_A2FXXX_MAC_CSR9_MDI BIT_(19) +#define CYGHWR_HAL_A2FXXX_MAC_CSR9_MDEN BIT_(18) +#define CYGHWR_HAL_A2FXXX_MAC_CSR9_MDO BIT_(17) +#define CYGHWR_HAL_A2FXXX_MAC_CSR9_MDC BIT_(16) + +// General-Purpose Timer and Interrupt Mitigation Control Register (CSR11) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_CS BIT_(31) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_TT(_x) VALUE_(27, (_x & 0xf)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_NTP(_x) VALUE_(24, (_x & 0x7)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_RT(_x) VALUE_(20, (_x & 0xf)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_NRP(_x) VALUE_(17, (_x & 0x7)) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_CON BIT_(16) +#define CYGHWR_HAL_A2FXXX_MAC_CSR11_TIM(_x) VALUE_(0, _x) + +// Receive Descriptors (RDESx) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_OWN BIT_(31) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_FF BIT_(30) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_FL(_x) VALUE_(16, _x) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_ES BIT_(15) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_DE BIT_(14) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_RF BIT_(11) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_MF BIT_(10) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_FS BIT_(9) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_LS BIT_(8) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_TL BIT_(7) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_CS BIT_(6) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_FT BIT_(5) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_RE BIT_(3) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_DB BIT_(2) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_CE BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_RDES0_ZERO BIT_(0) + +#define CYGHWR_HAL_A2FXXX_MAC_RDES1_RER BIT_(25) +#define CYGHWR_HAL_A2FXXX_MAC_RDES1_RCH BIT_(24) +#define CYGHWR_HAL_A2FXXX_MAC_RDES1_RBS2(_x) VALUE_(11, _x) +#define CYGHWR_HAL_A2FXXX_MAC_RDES1_RBS1(_x) VALUE_(0, _x) + +// Receive Descriptors (TDESx) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_OWN BIT_(31) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_ES BIT_(15) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_LO BIT_(11) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_NC BIT_(10) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_LC BIT_(9) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_EC BIT_(8) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_CC(_x) VALUE_(3, _x) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_UF BIT_(1) +#define CYGHWR_HAL_A2FXXX_MAC_TDES0_DE BIT_(0) + +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_IC BIT_(31) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_LS BIT_(30) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_FS BIT_(29) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_FT1 BIT_(28) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_SET BIT_(27) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_AC BIT_(26) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_TER BIT_(25) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_TCH BIT_(24) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_DPD BIT_(23) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_FT0 BIT_(22) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_TBS2(_x) VALUE_(11, _x) +#define CYGHWR_HAL_A2FXXX_MAC_TDES1_TBS1(_x) VALUE_(0, _x) + +#define CYGHWR_HAL_A2FXXX_MAC0_MDIO CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_MDIO, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_MDC CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_MDC, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_TXD0 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_TXD0, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_TXD1 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_TXD1, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_RXD0 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_RXD0, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_RXD1 CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_RXD1, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_TXEN CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_TXEN, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_CRSDV CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_CRSDV, DISABLE ) +#define CYGHWR_HAL_A2FXXX_MAC0_RXER CYGHWR_HAL_A2FXXX_GPIO( 0, PERIPH, MAC0_RXER, DISABLE ) + +#endif + +//============================================================================= +// Spare page + +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_KEY 0x081C +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_VERSION 0x0840 +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_1_3_FCLK 0x162C +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_2_x_FCLK 0x1EAC + +// System boot key value +#define CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_KEY_VALUE 0x4C544341 + +// System boot version +#define CYGHWR_HAL_A2FXXX_SYSBOOT_VERSION(_x, _y, _z) ((_x << 16) | (_y << 8) | (_z)) + +#define CYGHWR_HAL_A2FXXX_GET_SYSBOOT_VERSION() \ +({ \ + cyg_uint32 _i; \ + cyg_uint32 base = CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES; \ + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_VERSION, _i); \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_GET_SYSBOOT_KEY() \ +({ \ + cyg_uint32 _i; \ + cyg_uint32 base = CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES; \ + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_KEY, _i); \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_GET_SYSBOOT_1_3_FCLK() \ +({ \ + cyg_uint32 _i; \ + cyg_uint32 base = CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES; \ + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_1_3_FCLK, _i); \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_GET_SYSBOOT_2_0_FCLK() \ +({ \ + cyg_uint32 _i; \ + cyg_uint32 base = CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES; \ + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_2_x_FCLK, _i); \ + _i; \ +}) + +#define CYGHWR_HAL_A2FXXX_BITSET 0x1 +#define CYGHWR_HAL_A2FXXX_BITCLEAR 0x0 +// +//----------------------------------------------------------------------------- +// end of var_io.h +#endif // CYGONCE_HAL_VAR_IO_H diff --git a/packages/hal/cortexm/a2fxxx/var/current/include/variant.inc b/packages/hal/cortexm/a2fxxx/var/current/include/variant.inc new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/include/variant.inc @@ -0,0 +1,54 @@ +/*========================================================================== +// +// variant.inc +// +// Variant specific asm definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2008-07-30 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +//========================================================================== +// EOF variant.inc + diff --git a/packages/hal/cortexm/a2fxxx/var/current/src/a2fxxx_misc.c b/packages/hal/cortexm/a2fxxx/var/current/src/a2fxxx_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/src/a2fxxx_misc.c @@ -0,0 +1,1214 @@ +/*========================================================================== +// +// a2f_misc.c +// +// Cortex-M Actel A2F HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-02-03 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include + +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header + + +//========================================================================== +// Clock Initialization values + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK + +#define CLKx_SRC_CLKA 0 +#define CLKx_SRC_CLKB 1 +#define CLKx_SRC_CLKC 2 +#define CLKx_SRC_CLKGA 3 +#define CLKx_SRC_CLKGB 4 +#define CLKx_SRC_CLKGC 5 +#define CLKx_SRC_CLKGINT 6 + +#define CLKx_SRC_UIN 0 +#define CLKx_SRC_DIP 1 +#define CLKx_SRC_UIP 4 +#define CLKx_SRC_GLxINT 5 +#define CLKx_SRC_RCOSC 2 +#define CLKx_SRC_MOSC 6 +#define CLKx_SRC_32KOSC 6 + +// Select source of CLKA + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC_AUIN +# define CLKA_SRC_SEL CLKx_SRC_UIN +#elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC_AUIP) +# define CLKA_SRC_SEL CLKx_SRC_UIP +#elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC_ADIP) +# define CLKA_SRC_SEL CLKx_SRC_DIP +#elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC_GLAINT) +# define CLKA_SRC_SEL CLKx_SRC_GLxINT +#elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKA_SRC_RCOSC) +# define CLKA_SRC_SEL CLKx_SRC_RCOSC +#else +# define CLKA_SRC_SEL CLKx_SRC_MOSC +#endif + +// Select source of CLKB + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKB +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC_BUIN +# define CLKB_SRC_SEL CLKx_SRC_UIN +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC_BUIP) +# define CLKB_SRC_SEL CLKx_SRC_UIP +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC_BDIP) +# define CLKB_SRC_SEL CLKx_SRC_DIP +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC_GLBINT) +# define CLKB_SRC_SEL CLKx_SRC_GLxINT +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKB_SRC_RCOSC) +# define CLKB_SRC_SEL CLKx_SRC_RCOSC +# else +# define CLKB_SRC_SEL CLKx_SRC_MOSC +# endif +#endif + +// Select source of CLKC + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKC +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC_CUIN +# define CLKC_SRC_SEL CLKx_SRC_UIN +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC_CUIP) +# define CLKC_SRC_SEL CLKx_SRC_UIP +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC_CDIP) +# define CLKC_SRC_SEL CLKx_SRC_DIP +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC_GLCINT) +# define CLKC_SRC_SEL CLKx_SRC_GLxINT +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKC_SRC_RCOSC) +# define CLKC_SRC_SEL CLKx_SRC_RCOSC +# else +# define CLKC_SRC_SEL CLKx_SRC_32KOSC +# endif +#endif + +// Select source of CLKGA + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC_CLKA +# define CLKGA_SRC_SEL 1 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC_PLL_VCO0) +# define CLKGA_SRC_SEL 4 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC_PLL_VCO90) +# define CLKGA_SRC_SEL 5 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC_PLL_VCO180) +# define CLKGA_SRC_SEL 6 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_SRC_PLL_VCO270) +# define CLKGA_SRC_SEL 7 +# else +# define CLKGA_SRC_SEL 2 +# endif +#endif + +// Select source of CLKGB + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_CLKB +# define CLKGB_SRC_SEL 1 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_CLKGA +# define CLKGB_SRC_SEL 3 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_PLL_VCO0) +# define CLKGB_SRC_SEL 4 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_PLL_VCO90) +# define CLKGB_SRC_SEL 5 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_PLL_VCO180) +# define CLKGB_SRC_SEL 6 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_SRC_PLL_VCO270) +# define CLKGB_SRC_SEL 7 +# else +# define CLKGB_SRC_SEL 2 +# endif +#endif + +// Select source of CLKGC + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_CLKC +# define CLKGC_SRC_SEL 1 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_CLKGA) +# define CLKGC_SRC_SEL 3 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_PLL_VCO0) +# define CLKGC_SRC_SEL 4 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_PLL_VCO90) +# define CLKGC_SRC_SEL 5 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_PLL_VCO180) +# define CLKGC_SRC_SEL 6 +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_PLL_VCO270) +# define CLKGC_SRC_SEL 7 +# else +# define CLKGC_SRC_SEL 2 +# endif +#endif + +#if CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_DIV == 1 +# define PCLK0DIV 0 +#elif CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_DIV == 2 +# define PCLK0DIV 1 +#else +# define PCLK0DIV 2 +#endif + +#if CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_DIV == 1 +# define PCLK1DIV 0 +#elif CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_DIV == 2 +# define PCLK1DIV 1 +#else +# define PCLK1DIV 2 +#endif + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_ACE_CLK +# if CYGHWR_HAL_CORTEXM_A2FXXX_ACLK_DIV == 1 +# define ACLKDIV 0 +# elif CYGHWR_HAL_CORTEXM_A2FXXX_ACLK_DIV == 2 +# define ACLKDIV 1 +# else +# define ACLKDIV 2 +# endif +#endif + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_PLL +# if CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ < 43750000 +# define PLL_RANGE 0 +# elif CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ < 87500000 +# define PLL_RANGE 1 +# elif CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FREQ < 175000000 +# define PLL_RANGE 2 +# else +# define PLL_RANGE 3 +# endif +#endif + +#define OXDIV_CLEAR 0x1F +#define OXMUX_CLEAR 0x07 +#define DLYX_CLEAR 0x1F +#define DIV_CLEAR 0x03 + +#endif // CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK + +//========================================================================== +// IO settings + +#ifdef CYGPKG_HAL_CORTEXM_A2FXXX_IO + +# if defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_WEST_BANK_LVCMOS_3V3) +# define IO_WEST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTWEST(LVCMOS_3V3) +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_WEST_BANK_LVCMOS_2V5) +# define IO_WEST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTWEST(LVCMOS_2V5) +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_WEST_BANK_LVCMOS_1V8) +# define IO_WEST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTWEST(LVCMOS_1V8) +# else +# define IO_WEST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTWEST(LVCMOS_1V5) +# endif + +# if defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_EAST_BANK_LVCMOS_3V3) +# define IO_EAST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTEAST(LVCMOS_3V3) +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_EAST_BANK_LVCMOS_2V5) +# define IO_EAST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTEAST(LVCMOS_2V5) +# elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_IO_EAST_BANK_LVCMOS_1V8) +# define IO_EAST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTEAST(LVCMOS_1V8) +# else +# define IO_EAST_BANK CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR_BTEAST(LVCMOS_1V5) +# endif + +#endif // CYGPKG_HAL_CORTEXM_A2FXXX_IO + + +#ifdef CYGSEM_HAL_CORTEXM_A2FXXX_CLOCK_CHATTER +# define A2FXXX_CLOCK_TRACE(args...) diag_printf(args) +#else +# define A2FXXX_CLOCK_TRACE(args...) /* NOOP */ +#endif + + +//========================================================================== +// Clock frequencies +// +// These are set to the frequencies of the various system clocks. + +cyg_uint32 hal_a2fxxx_pclk0; // Peripheral clock (connected to APB_0) +cyg_uint32 hal_a2fxxx_pclk1; // Peripheral clock (connected to APB_1) +cyg_uint32 hal_a2fxxx_aclk; // Analog Peripheral clock (ADC /DAC etc..) +cyg_uint32 hal_a2fxxx_pclk_fpga; // FPGA clock + +cyg_uint32 hal_a2fxxx_glb; // Global Clock B +cyg_uint32 hal_a2fxxx_glc; // Global Clock C + +cyg_uint32 hal_cortexm_systick_clock; // NGMUx output or FCLK or SysTick clock +cyg_uint32 hal_a2fxxx_fclk; // FCLK + + +//========================================================================== +// Local prototypes + +static void hal_a2fxxx_clk_network_chatter( cyg_uint8 ); + +static cyg_uint8 hal_start_clocks( void ); +static cyg_uint8 hal_a2fxxx_get_system_boot_clk( void ); + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK +static void hal_a2fxxx_set_clk_network( void ); +static void hal_a2fxxx_set_envm_timing( void ); +static void hal_a2fxxx_set_clkx( cyg_uint8 x, cyg_uint8 src ); +static void hal_a2fxxx_set_clkgx( cyg_uint8 x ); +static void hal_a2fxxx_set_clkgx_default( cyg_uint8 x ); +static void hal_a2fxxx_set_ngmux( cyg_uint8 ); +static cyg_uint8 hal_a2fxxx_get_ngmux( void ); + +# if defined(CYGHWR_HAL_CORTEXM_A2FXXX_PLL) +static inline void hal_a2fxxx_set_pll( void ); +# endif +#endif + + +//========================================================================== + +void +hal_variant_init( void ) +{ +#if !defined(CYG_HAL_STARTUP_RAM) + cyg_uint8 sysboot_miss; +#endif + cyg_uint32 base = CYGHWR_HAL_A2FXXX_WD; + + // Disable Watch-dog + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_WD_ENABLE, + CYGHWR_HAL_A2FXXX_WD_DISABLE_KEY); + +#if !defined(CYG_HAL_STARTUP_RAM) + sysboot_miss = hal_start_clocks(); +#endif + + // Release GPIO + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(GPIO) ); + + // Setup IO banks +#ifdef CYGPKG_HAL_CORTEXM_A2FXXX_IO + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MSS_IO_BANK_CR, (IO_WEST_BANK | IO_EAST_BANK) ); +#endif + + // Reset UART0 +#if CYGINT_HAL_A2FXXX_UART0>0 + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(UART0) ); +#endif + + // Reset UART1 +#if CYGINT_HAL_A2FXXX_UART1>0 + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(UART1) ); +#endif + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + hal_if_init(); +#endif + +#if !defined(CYG_HAL_STARTUP_RAM) + hal_a2fxxx_clk_network_chatter( sysboot_miss ); +#endif +} + +//========================================================================== +// Setup up system clocks +// +// Set up clocks from configuration. In the future this should be extended so +// that clock rates can be changed at runtime. + +static cyg_uint8 +hal_start_clocks( void ) +{ + if( ! hal_a2fxxx_get_system_boot_clk( ) ) + return 0; + + // + // User has chosen to re-configure the clock network and + // overwrite the settings provided by the system boot + // +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK + hal_a2fxxx_set_clk_network( ); + + // Adjust the ENVM timing according to the core clock + // frequency + hal_a2fxxx_set_envm_timing( ); +#endif + + return 1; +} + + +//========================================================================== +// Read clock configuration as setup by the system boot + +static cyg_uint8 +hal_a2fxxx_get_system_boot_clk( void ) +{ + cyg_uint32 sysboot_key, sysboot_ver, clk_cr, clkga0; + + sysboot_ver = CYGHWR_HAL_A2FXXX_GET_SYSBOOT_VERSION(); + sysboot_key = CYGHWR_HAL_A2FXXX_GET_SYSBOOT_KEY(); + + // Verify that the system boot is present, if not we must give up? + if( CYGHWR_HAL_A2FXXX_ENVM_SPARE_PAGES_SYSBOOT_KEY_VALUE + != sysboot_key ) + return 0; + + // Read the MSS CLGA0 frequency value. Address varies with system boot + // version + if ( sysboot_ver < CYGHWR_HAL_A2FXXX_SYSBOOT_VERSION(2, 0, 0) ) { + clkga0 = CYGHWR_HAL_A2FXXX_GET_SYSBOOT_1_3_FCLK(); + } + else { + clkga0 = CYGHWR_HAL_A2FXXX_GET_SYSBOOT_2_0_FCLK(); + } + + // Compute the BUS and fabric clock frequency + hal_cortexm_systick_clock = clkga0; + + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR, clk_cr); + + hal_a2fxxx_pclk0 = + clkga0 >> CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_PCLK0DIV( clk_cr ); + hal_a2fxxx_pclk1 = + clkga0 >> CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_PCLK1DIV( clk_cr ); + hal_a2fxxx_pclk_fpga = + clkga0 >> CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_GET_GLBDIV( clk_cr ); + + return 1; +} + + +//========================================================================== +// Chatter function + +static void +hal_a2fxxx_clk_network_chatter( cyg_uint8 hal_clk_network_chatter ) +{ + if ( hal_clk_network_chatter == 0 ) + diag_printf("Actel System Boot Missing\n Clock network configuration failed!!\n"); + + A2FXXX_CLOCK_TRACE("Device clock network configuration:\n"); + A2FXXX_CLOCK_TRACE("Global Clock A (Systick): %d [Hz]\n", + hal_cortexm_systick_clock); + A2FXXX_CLOCK_TRACE("PCLK0: %d [Hz]\n", hal_a2fxxx_pclk0); + A2FXXX_CLOCK_TRACE("PCLK1: %d [Hz]\n", hal_a2fxxx_pclk1); +} + + +//========================================================================== +// Setup device clock network + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK + +static void +hal_a2fxxx_set_clk_network( void ) +{ + cyg_uint32 mss_ccc_mux; + cyg_uint32 mss_clk_cr; + cyg_uint8 ngmux; +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_PLL + cyg_bool pll = false; +#endif +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKA + cyg_bool clka = false; +#endif +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKC + cyg_bool clkc = false; +#endif +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA + cyg_bool clkga = false; +#endif +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC + cyg_bool clkgc = false; +#endif + + // Find out which CLKGx is currently used as FLCK + ngmux = hal_a2fxxx_get_ngmux( ); + + // + // Start by configuring NGMUX. In the following case, if + // the current NGMUX output is already CLKGA, first move + // to CLKGC to keep a stable ground otherwise go ahead and + // configure CLKGA. + // +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_CLKGA + if( ngmux == CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLA ) + { + // Setup CLKGC to use the On-Chip RC oscillator and move + // the MSS clock to CLKGC. No division factor is applied + // therefore FCLK = 100MHz + + // CLKC = RCOSC + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKx_SRC_RCOSC ); + + // CLKGC = CLKC + hal_a2fxxx_set_clkgx_default( CLKx_SRC_CLKGC ); + + // FCLK = CLKGC + hal_a2fxxx_set_ngmux( CLKx_SRC_CLKGC ); + } + else { + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + mss_ccc_mux &= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(OXMUX_CLEAR); + mss_ccc_mux = mss_ccc_mux >> 19; + + // Make sure PLL is bypassed. + if ( mss_ccc_mux != 1 ){ + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKx_SRC_RCOSC ); + hal_a2fxxx_set_clkgx_default( CLKx_SRC_CLKGC ); + } + } + + // Now we can configure CLKGA as specified by the + // user. Check is PLL should be configured. + hal_a2fxxx_set_clkx( CLKx_SRC_CLKA, CLKA_SRC_SEL ); + +# if defined(CYGHWR_HAL_CORTEXM_A2FXXX_PLL) + hal_a2fxxx_set_pll( ); + pll = true; +# endif + + // Move to CLKGA + hal_a2fxxx_set_clkgx( CLKx_SRC_CLKGA ); + clka = clkga = true; + hal_a2fxxx_set_ngmux( CLKx_SRC_CLKGA ); + +#endif // CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_CLKGA + + + // + // In the following case, NGMUX is configured to use CLKGC. + // This can be tricky as CLKGC can be routed from CLKGA... + // +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_CLKGC + + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + mss_ccc_mux &= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(OXMUX_CLEAR); + mss_ccc_mux = mss_ccc_mux >> 19; + + // If CLKGC is not routed form CLKC or if CLKGC is not used + // as NGMUX output, proceed to configure CLKGC = CLKC + if( ((ngmux == CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLC) && (mss_ccc_mux != 1)) || + (ngmux == CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLA) ) + { + + // Set CLKC source, use on-chip oscillator as default + // value +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_CLKC + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKC_SRC_SEL ); + clkc = true; +# else + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKx_SRC_RCOSC ); +# endif + + // Set CLKGC = CLKC + hal_a2fxxx_set_clkgx_default( CLKx_SRC_CLKGC ); + + // Set NGMUX = CLKGC + hal_a2fxxx_set_ngmux( CLKx_SRC_CLKGC ); + + // Configure PLL input if in use +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_PLL + hal_a2fxxx_set_clkx( CLKx_SRC_CLKA, CLKA_SRC_SEL ); + clka = true; +# endif + + } + else { + + // Set CLKA source, use on-chip oscillator as default + // value +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKA + hal_a2fxxx_set_clkx( CLKx_SRC_CLKA, CLKA_SRC_SEL ); + clka = true; +# else + hal_a2fxxx_set_clkx( CLKx_SRC_CLKA, CLKx_SRC_RCOSC ); +# endif + +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_SRC_CLKC + // CLKGA = CLKA + hal_a2fxxx_set_clkgx_default( CLKx_SRC_CLKGA ); + + // Move NGMUX = CLKGA + hal_a2fxxx_set_ngmux( CLKx_SRC_CLKGA ); + + // Now we can Configure CLKC + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKC_SRC_SEL ); +# endif + + } + +# ifdef CYGHWR_HAL_CORTEXM_A2FXXX_PLL + hal_a2fxxx_set_pll( ); + pll = true; +# endif + + clkgc = true; + hal_a2fxxx_set_clkgx( CLKx_SRC_CLKGC ); + hal_a2fxxx_set_ngmux( CLKx_SRC_CLKGC ); + +#endif // CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_CLKGC + + + // Configure CLKA +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKA + if ( clka == false ){ + hal_a2fxxx_set_clkx( CLKx_SRC_CLKA, CLKA_SRC_SEL ); + } +#endif + + // Configure the PLL +#if defined(CYGHWR_HAL_CORTEXM_A2FXXX_PLL) + if ( pll == false ){ + hal_a2fxxx_set_pll( ); + } +#endif + + // Configure CLKB +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKB + hal_a2fxxx_set_clkx( CLKx_SRC_CLKB, CLKB_SRC_SEL ); +#endif + + // Configure CLKC +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKC + if ( clkc == false ){ + hal_a2fxxx_set_clkx( CLKx_SRC_CLKC, CLKC_SRC_SEL ); + } +#endif + + // Configure CLKGA +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA + if ( clkga == false ){ + hal_a2fxxx_set_clkgx( CLKx_SRC_CLKA ); + } +#endif + + // Configure CLKGB +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB + hal_a2fxxx_set_clkgx( CLKx_SRC_CLKB ); +#endif + + // Configure CLKGC +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC + if ( clkgc == false ){ + hal_a2fxxx_set_clkgx( CLKx_SRC_CLKC ); + } +#endif + + // Now, configure all MSS clock dividers + // + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR, mss_clk_cr); + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_ACE_CLK + mss_clk_cr &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_ACLKDIV(DIV_CLEAR) ); + mss_clk_cr |= ( CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_ACLKDIV(ACLKDIV) ); +#endif + + mss_clk_cr &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK1DIV(DIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK0DIV(DIV_CLEAR) ); + + mss_clk_cr |= ( CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK1DIV(PCLK1DIV) | + CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_PCLK0DIV(PCLK0DIV) ); + + // Record the different clock frequencies + hal_cortexm_systick_clock = CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ; + hal_a2fxxx_fclk = CYGHWR_HAL_CORTEXM_A2FXXX_NGMUX_CLKOUT_FREQ; + hal_a2fxxx_pclk0 = CYGHWR_HAL_CORTEXM_A2FXXX_PCLK0_FREQ; + hal_a2fxxx_pclk1 = CYGHWR_HAL_CORTEXM_A2FXXX_PCLK1_FREQ; + +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK + hal_a2fxxx_pclk_fpga = CYGHWR_HAL_CORTEXM_A2FXXX_FAB_CLK_FREQ; +#endif + + // Configure the MAC clock +#if defined(CYGHWR_HAL_CORTEXM_A2FXXX_MAC_CLK) && \ + defined(CYGHWR_HAL_CORTEXM_A2FXXX_MAC_SRC_CLKGC) + + mss_clk_cr |= CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_RMIICLKSEL; + +#elif defined(CYGHWR_HAL_CORTEXM_A2FXXX_MAC_CLK) && \ + defined(CYGHWR_HAL_CORTEXM_A2FXXX_MAC_SRC_EXTERNAL) + + mss_clk_cr &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR_RMIICLKSEL; + +#endif + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_MSS_CLK_CR, + mss_clk_cr); + + // PLL is disable if not in used +#if !defined(CYGHWR_HAL_CORTEXM_A2FXXX_PLL) + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR, 0x0); +#endif +} + + +//========================================================================== +// Get / Set NGMUX settings + +static cyg_uint8 +hal_a2fxxx_get_ngmux( void ) +{ + cyg_uint32 mss_ccc_mux; + cyg_uint8 ngmux_setting; + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + + mss_ccc_mux = mss_ccc_mux >> 24; + switch( mss_ccc_mux & 0xf ){ + case 0: + case 2: + case 4: + case 6: + case 12: + ngmux_setting = CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLA; + break; + case 1: + case 3: + case 8: + case 10: + case 13: + ngmux_setting = CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLC; + break; + case 5: + case 7: + case 9: + case 11: + case 14: + ngmux_setting = CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GLINT; + break; + default: + ngmux_setting = CYGHWR_HAL_A2FXXX_SC_MSS_CCC_GLMUX_GND; + break; + } + + return ngmux_setting; +} + + +static void +hal_a2fxxx_set_ngmux( cyg_uint8 x ) +{ + cyg_uint32 mss_ccc_mux; + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + + // Clear bits + mss_ccc_mux &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXSEL(0x3) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXCFG(0x3) ); + + if( x == CLKx_SRC_CLKGA ){ + mss_ccc_mux |= ( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXSEL(0) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXCFG(0) ); + } + else if (x == CLKx_SRC_CLKGC ){ + mss_ccc_mux |= ( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXSEL(1) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXCFG(0) ); + } + else{ + mss_ccc_mux |= ( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXSEL(2) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_GLMUXCFG(3) ); + } + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); +} + + +//========================================================================== +// Setup PLL + +#if defined(CYGHWR_HAL_CORTEXM_A2FXXX_PLL) +static inline void +hal_a2fxxx_set_pll( void ) +{ + cyg_uint32 x = + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FINDIV((CYGHWR_HAL_CORTEXM_A2FXXX_PLL_DIV-1)) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBDIV((CYGHWR_HAL_CORTEXM_A2FXXX_PLL_MULT-1)) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBSEL(1) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_FBDLY(CYGHWR_HAL_CORTEXM_A2FXXX_PLL_FB_DELAY) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_VCOSEL0 | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_VCOSEL2_1(PLL_RANGE) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR_PLLEN; + + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_PLL_CR, x); + + // Wait PLL lock + do { + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_SR, x); + } while( (x & CYGHWR_HAL_A2FXXX_SC_MSS_CCC_SR_PLL_LOCK_SYNC) == 0); +} +#endif + + +//========================================================================== +// Setup CLKA, CLKB or CLKC input clock + +static void +hal_a2fxxx_set_clkx( cyg_uint8 x, cyg_uint8 src ) +{ + cyg_uint32 mss_ccc_mux; + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + if( x == CLKx_SRC_CLKA ){ + mss_ccc_mux &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNASEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXASEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATASEL ); + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKA_SEL (src); + } + else if (x == CLKx_SRC_CLKB ){ + mss_ccc_mux &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNBSEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXBSEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATBSEL ); + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKB_SEL (src); + } + else{ + mss_ccc_mux &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_DYNCSEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_RXCSEL | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_STATCSEL ); + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_CLKC_SEL (src); + } + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); +} + + +//========================================================================== +// Setup CLKGA, CLKGB or CLKGC output clock + +static void +hal_a2fxxx_set_clkgx( cyg_uint8 x ) +{ + cyg_uint32 mss_ccc_mux; + cyg_uint32 mss_ccc_dly; + cyg_uint32 mss_ccc_div; + cyg_uint8 div10; + cyg_uint8 div; + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR, mss_ccc_dly); + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR, mss_ccc_div); + + if( x == CLKx_SRC_CLKGA ){ +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA + // Clear bits + mss_ccc_div &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIV(OXDIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIVHALF ); + mss_ccc_dly &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA(DLYX_CLEAR); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OAMUX(OXMUX_CLEAR); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSA; + // Compute divider + div10 = CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV10; + div = (cyg_uint8) CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DIV; + if( div10 % 10 ){ + div += 1; + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIVHALF; + } + else { + div -= 1; + } + // CLKA = CLGA, bypass MUX + if (div == 0 && CLKGA_SRC_SEL == 1) { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSA; + } + else { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OAMUX(CLKGA_SRC_SEL); + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIV(div); + } + mss_ccc_dly |= + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGA_DELAY); +#endif + } + if ( x == CLKx_SRC_CLKGB ){ +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB + // Clear bits + mss_ccc_div &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIV(OXDIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIVHALF ); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OBMUX(OXMUX_CLEAR); + mss_ccc_dly &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYB(DLYX_CLEAR); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSB; + // Compute divider + div10 = CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV10; + div = (cyg_uint8) CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DIV; + if( div10 % 10 ){ + div += 1; + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIVHALF; + } + else { + div -= 1; + } + // CLKB = CLGB, bypass MUX + if (div == 0 && CLKGB_SRC_SEL == 1) { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSB; + } + else { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OBMUX(CLKGB_SRC_SEL); + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OBDIV(div); + mss_ccc_dly |= + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYB(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGB_DELAY); + } +#endif + } + if ( x == CLKx_SRC_CLKGC ){ +#ifdef CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC + // Clear bits + mss_ccc_div &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIV(OXDIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIVHALF ); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(OXMUX_CLEAR); + mss_ccc_dly &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYC(DLYX_CLEAR); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSC; + // Compute divider + div10 = CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV10; + div = (cyg_uint8) CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DIV; + if( div10 % 10 ){ + div += 1; + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIVHALF; + } + else { + div -= 1; + } + // CLKC = CLGC, bypass MUX + if (div == 0 && CLKGC_SRC_SEL == 1) { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSC; + } + else { + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(CLKGC_SRC_SEL); + mss_ccc_div |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIV(div); + } + mss_ccc_dly |= + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYC(CYGHWR_HAL_CORTEXM_A2FXXX_CLKGC_DELAY); +#endif + } + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR, mss_ccc_div); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR, mss_ccc_dly); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); +} + +//========================================================================== +// Setup CLKGA CLKGC output clock + +static void +hal_a2fxxx_set_clkgx_default( cyg_uint8 x ) +{ + cyg_uint32 mss_ccc_mux; + cyg_uint32 mss_ccc_dly; + cyg_uint32 mss_ccc_div; + + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR, mss_ccc_dly); + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR, mss_ccc_div); + + if( x == CLKx_SRC_CLKGA ){ + // Clear bits + mss_ccc_div &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIV(OXDIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OADIVHALF ); + mss_ccc_dly &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA(DLYX_CLEAR); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OAMUX(OXMUX_CLEAR); + // CLKGA = CLKA, Division factor = 1 and minimum delay of 535ps + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSA; + mss_ccc_dly |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYA(0); + } + if ( x == CLKx_SRC_CLKGC ){ + // Clear bits + mss_ccc_div &= ~( CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIV(OXDIV_CLEAR) | + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR_OCDIVHALF ); + mss_ccc_mux &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_OCMUX(OXMUX_CLEAR); + mss_ccc_dly &= ~CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYC(DLYX_CLEAR); + // CLKGC = CLKC, Division factor = 1 and minimum delay of 535ps + mss_ccc_mux |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR_BYPASSC; + mss_ccc_dly |= CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR_DLYC(0); + } + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DIV_CR, mss_ccc_div); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_DLY_CR, mss_ccc_dly); + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_MSS_CCC_MUX_CR, mss_ccc_mux); +} + + +//========================================================================== +// Adjust ENVM timing + +static void +hal_a2fxxx_set_envm_timing( void ) { + cyg_uint32 x; + HAL_READ_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_ENVM_CR, x); + x &= ~CYGHWR_HAL_A2FXXX_SC_ENVM_CR_SIX_CYCLE; + if( hal_a2fxxx_fclk <= 80e6 ){ + x |= CYGHWR_HAL_A2FXXX_SC_ENVM_CR_PIPE_BYPASS; + } else { + x &= ~CYGHWR_HAL_A2FXXX_SC_ENVM_CR_PIPE_BYPASS; + } + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + CYGHWR_HAL_A2FXXX_SC_ENVM_CR, x); +} + +#endif // CYGHWR_HAL_CORTEXM_A2FXXX_CLOCK + + +//========================================================================== +// Reset modules + +__externC void +hal_a2fxxx_periph_release( cyg_uint32 bit ) +{ + cyg_uint32 sc, base = CYGHWR_HAL_A2FXXX_SC; + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR, sc ); + sc &= ~( bit ); + HAL_WRITE_UINT32( base + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR, sc ); +} + + +__externC void +hal_a2fxxx_periph_reset( cyg_uint32 bit ) +{ + cyg_uint32 sc, base = CYGHWR_HAL_A2FXXX_SC; + HAL_READ_UINT32( base + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR , sc ); + sc |= ( bit ); + HAL_WRITE_UINT32( base + CYGHWR_HAL_A2FXXX_SC_CLR_SOFTRST_CR , sc ); +} + + +//========================================================================== +// GPIO support +// + +const default_io_mux_type default_io_mux[] = { + // SPI0 + {0x00}, {0x0a}, {0x00}, {0x00}, + // UART0 + {0x18}, {0x00}, + // I2C0 + {0x00}, {0x00}, + // SPI1 + {0x00}, {0x0a}, {0x00}, {0x00}, + // UART1 + {0x18}, {0x00}, + // I2C1 + {0x00}, {0x00}, + // MAC0 + {0x18}, {0x18}, {0x0a}, {0x0a}, {0x18}, {0x0a}, {0x0a}, {0x00}, {0x18}, + // GPIO + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + // SPI0 CS + {0x00}, {0x00}, {0x00}, + // Unused + {0x00}, {0x00}, {0x00}, {0x00}, + // UART0 misc + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + // SPI1 CS + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + // UART1 misc + {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, {0x00}, + {0x0} +}; + +// These functions provide configuration and IO for GPIO pins. + +__externC void +hal_a2fxxx_gpio_set( cyg_uint32 pin ) +{ + cyg_uint32 bit = CYGHWR_HAL_A2FXXX_GPIO_BIT( pin ); + cyg_uint32 mode = CYGHWR_HAL_A2FXXX_GPIO_MODE( pin ); + cyg_uint32 mux = CYGHWR_HAL_A2FXXX_GPIO_IOMUX_IDX( pin ); + cyg_uint32 irq = CYGHWR_HAL_A2FXXX_GPIO_IRQ( pin ); + cyg_uint32 reg = 0; + cyg_uint32 io_mux = 0; + + if (pin == CYGHWR_HAL_A2FXXX_GPIO_NONE) + return; + + if(mode == CYGHWR_HAL_A2FXXX_GPIO_MODE_PERIPH){ + // Set IOMUX default value for peripheral use + io_mux = default_io_mux[mux].val; + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_IOMUX( mux ), io_mux ); + } else { + // Set GPIO input/ output mode + if (mode == CYGHWR_HAL_A2FXXX_GPIO_MODE_OUT) { + reg = CYGHWR_HAL_A2FXXX_GPIO_CFG_GPOUTEN | + CYGHWR_HAL_A2FXXX_GPIO_CFG_OUTBUFEN; + } + + // Configure IO as interrupt + if (irq != CYGHWR_HAL_A2FXXX_GPIO_IRQ_DISABLE) { + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_GPINTEN; + if(irq & CYGHWR_HAL_A2FXXX_GPIO_IRQ_FALLING_EDGE) + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(0); + else if(irq & CYGHWR_HAL_A2FXXX_GPIO_IRQ_RISING_EDGE) + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(1); + else if(irq & CYGHWR_HAL_A2FXXX_GPIO_IRQ_BOTH_EDGES) + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(2); + else if(irq & CYGHWR_HAL_A2FXXX_GPIO_IRQ_LOW_LEVEL) + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(3); + else + reg |= CYGHWR_HAL_A2FXXX_GPIO_CFG_INTYPE(4); + } + + // Write down result + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_MSS_GPIO + + ( CYGHWR_HAL_A2FXXX_MSS_GPIO_CFG( bit ) ), reg ); + + // For GPIO 16 to 31, we must setup the IOMUX + // TODO, this is for output only? + if( bit > 15 ){ + bit = bit - 16; + io_mux = 0x35; + HAL_WRITE_UINT32( CYGHWR_HAL_A2FXXX_SC + + CYGHWR_HAL_A2FXXX_SC_IOMUX( bit ), io_mux ); + } + + } +} + + +__externC void +hal_a2fxxx_gpio_out( cyg_uint32 pin, int val ) +{ + cyg_uint32 bit = ( CYGHWR_HAL_A2FXXX_GPIO_BIT(pin) << 2 ); + cyg_uint32 port = CYGHWR_HAL_A2FXXX_MSS_GPIO_BB + + ( CYGHWR_HAL_A2FXXX_MSS_GPIO_DOUT << 5 ); + + port += bit; + + HAL_WRITE_UINT32( port, val ); +} + + +__externC void +hal_a2fxxx_gpio_in ( cyg_uint32 pin, int *val ) +{ + cyg_uint32 bit = ( CYGHWR_HAL_A2FXXX_GPIO_BIT(pin) << 2 ); + cyg_uint32 port = CYGHWR_HAL_A2FXXX_MSS_GPIO_BB + + ( CYGHWR_HAL_A2FXXX_MSS_GPIO_DIN << 5 ); + cyg_uint32 pd; + + port += bit; + + HAL_READ_UINT32( port, pd ); + *val = 1 ? (bit & pd) : 0; +} + + +//========================================================================== +// I2C clock rate +// +__externC cyg_uint32 +hal_a2fxxx_i2c_clock( cyg_uint32 base ) +{ + return ( (base == CYGHWR_HAL_A2FXXX_I2C0) ? hal_a2fxxx_pclk0 : hal_a2fxxx_pclk1 ); +} + + +//========================================================================== +// SPI clock rate +// +__externC cyg_uint32 +hal_a2fxxx_spi_clock( cyg_uint32 base ) +{ + return ( (base == CYGHWR_HAL_A2FXXX_SPI0) ? hal_a2fxxx_pclk0 : hal_a2fxxx_pclk1 ); +} + + +//========================================================================== +// UART baud rate +// +// Set the baud rate divider of a UART based on the requested rate and +// the current APB clock settings. + +__externC void +hal_a2fxxx_uart_setbaud(cyg_uint32 base, cyg_uint32 baud) +{ + cyg_uint16 divider = + CYG_HAL_CORTEXM_A2FXXX_BAUD_GENERATOR( ((base == CYGHWR_HAL_A2FXXX_UART0)? 0 : 1) , baud ); + + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_LCR, + CYGHWR_HAL_A2FXXX_UART16550_LCR_DLAB); + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_DMR, divider >> 8); + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_DLR, divider & 0xFF); +} + + +//========================================================================== +// Idle thread +// +#ifdef CYGSEM_HAL_CORTEXM_A2FXXX_DEFINES_IDLE_THREAD_ACTION +__externC void +hal_idle_thread_action( cyg_uint32 count ) +{ + while(1); +} +#endif + +//========================================================================== +// EOF a2fxxx_misc.c diff --git a/packages/hal/cortexm/a2fxxx/var/current/src/hal_diag.c b/packages/hal/cortexm/a2fxxx/var/current/src/hal_diag.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/src/hal_diag.c @@ -0,0 +1,399 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008, 2011 +// Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Original: nickg (STM32 HAL) +// Date: 2011-04-03 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types +#include // tracing + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED + +#include // USART registers + +//----------------------------------------------------------------------------- + +typedef struct { + cyg_uint32 uart; + CYG_ADDRESS base; + cyg_int32 msec_timeout; + int isr_vector; + cyg_uint32 rxpin; + cyg_uint32 txpin; + cyg_uint32 baud_rate; + int irq_state; + +} channel_data_t; + + +static channel_data_t a2fxxx_ser_channels[] = { +#if CYGINT_HAL_A2FXXX_UART0>0 + { 0, + CYGHWR_HAL_A2FXXX_UART0, + 1000, + CYGNUM_HAL_INTERRUPT_UART0, + CYGHWR_HAL_A2FXXX_UART0_RX, + CYGHWR_HAL_A2FXXX_UART0_TX, + CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD}, +#endif +#if CYGINT_HAL_A2FXXX_UART1>0 + { 1, + CYGHWR_HAL_A2FXXX_UART1, + 1000, + CYGNUM_HAL_INTERRUPT_UART1, + CYGHWR_HAL_A2FXXX_UART1_RX, + CYGHWR_HAL_A2FXXX_UART1_TX, + CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD}, +#endif +}; + +//----------------------------------------------------------------------------- + +static void +hal_a2fxxx_serial_init_channel(void* __ch_data) +{ + channel_data_t *chan = (channel_data_t*)__ch_data; + CYG_ADDRESS base = chan->base; + cyg_uint32 lcr = CYGHWR_HAL_A2FXXX_UART16550_LCR_WLS_8BITS | + CYGHWR_HAL_A2FXXX_UART16550_LCR_STOP_1; + + // Enable the PIO lines for the serial channel + CYGHWR_HAL_A2FXXX_GPIO_SET( chan->rxpin ); + CYGHWR_HAL_A2FXXX_GPIO_SET( chan->txpin ); + + // Set baud rate + hal_a2fxxx_uart_setbaud( base, chan->baud_rate ); + + // 8-1-no parity + HAL_WRITE_UINT32( base + CYGHWR_HAL_A2FXXX_UART16550_LCR, lcr ); + + // Reset and clear TX/RX FIFO + HAL_WRITE_UINT32( base + CYGHWR_HAL_A2FXXX_UART16550_FCR, + CYGHWR_HAL_A2FXXX_UART16550_FCR_CLEAR_TX_FIFO | + CYGHWR_HAL_A2FXXX_UART16550_FCR_CLEAR_RX_FIFO ); + +} + +void +hal_a2fxxx_serial_putc(void *__ch_data, char c) +{ + CYG_ADDRESS base = ((channel_data_t*)__ch_data)->base; + cyg_uint32 lsr; + CYGARC_HAL_SAVE_GP(); + + do + { + HAL_READ_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_LSR, lsr ); + } while ((lsr & CYGHWR_HAL_A2FXXX_UART16550_LSR_THRE) == 0); + + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_THR, c ); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool +hal_a2fxxx_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + CYG_ADDRESS base = ((channel_data_t*)__ch_data)->base; + cyg_uint32 lsr; + cyg_uint32 c; + CYGARC_HAL_SAVE_GP(); + + HAL_READ_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_LSR, lsr ); + + if( (lsr & CYGHWR_HAL_A2FXXX_UART16550_LSR_DR) == 0 ) + return false; + + HAL_READ_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_RBR, c ); + + *ch = (cyg_uint8)c; + + CYGARC_HAL_RESTORE_GP(); + + return true; +} + +cyg_uint8 +hal_a2fxxx_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!hal_a2fxxx_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +//============================================================================= +// Virtual vector HAL diagnostics + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +static void +hal_a2fxxx_serial_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + hal_a2fxxx_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +hal_a2fxxx_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = hal_a2fxxx_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +hal_a2fxxx_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 100; // delay in 10 us steps + + for(;;) { + res = hal_a2fxxx_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(10); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +hal_a2fxxx_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS base = ((channel_data_t*)__ch_data)->base; + int ret = 0; + cyg_uint32 ier; + + va_list ap; + + CYGARC_HAL_SAVE_GP(); + + va_start(ap, __func); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + chan->irq_state = 1; + HAL_INTERRUPT_ACKNOWLEDGE( chan->isr_vector ); + HAL_INTERRUPT_UNMASK( chan->isr_vector ); + HAL_READ_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_IER, ier ); + ier |= CYGHWR_HAL_A2FXXX_UART16550_IER_ERBFI; + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_IER, ier ); + break; + case __COMMCTL_IRQ_DISABLE: + ret = chan->irq_state; + chan->irq_state = 0; + HAL_INTERRUPT_MASK( chan->isr_vector ); + HAL_READ_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_IER, ier ); + ier &= ~CYGHWR_HAL_A2FXXX_UART16550_IER_ERBFI; + HAL_WRITE_UINT32(base + CYGHWR_HAL_A2FXXX_UART16550_IER, ier ); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + chan->baud_rate = va_arg(ap, cyg_int32); + // Should we verify this value here? + hal_a2fxxx_uart_setbaud( base, chan->baud_rate ); + ret = 0; + break; + default: + break; + } + va_end(ap); + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +hal_a2fxxx_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 ch; + + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + + if( hal_a2fxxx_serial_getc_nonblock(__ch_data, &ch) ) + { + if( cyg_hal_is_break( (char *)&ch , 1 ) ) + *__ctrlc = 1; + } + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + CYGARC_HAL_RESTORE_GP(); + return 1; +} + +static void +hal_a2fxxx_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur; + int i; + + cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + for( i = 0; i < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS ; i++ ) + { + hal_a2fxxx_serial_init_channel(&a2fxxx_ser_channels[i]); + + CYGACC_CALL_IF_SET_CONSOLE_COMM(i); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &a2fxxx_ser_channels[i]); + CYGACC_COMM_IF_WRITE_SET(*comm, hal_a2fxxx_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, hal_a2fxxx_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, hal_a2fxxx_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, hal_a2fxxx_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, hal_a2fxxx_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, hal_a2fxxx_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, hal_a2fxxx_serial_getc_timeout); + } + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); + + // set debug channel baud rate if different +#if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD) + a2fxxx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]->baud_rate = + CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD; + update_baud_rate( &a2fxxx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL] ); +#endif + +} + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + hal_a2fxxx_serial_init(); +} + +#endif + +//============================================================================= +// Non-Virtual vector HAL diagnostics + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +void +hal_a2fxxx_diag_init(void) +{ + hal_a2fxxx_serial_init( + &a2fxxx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL] ); +} + +void +hal_a2fxxx_diag_putc(char c) +{ + hal_a2fxxx_serial_putc( + &a2fxxx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL], c); +} + +cyg_uint8 +hal_a2fxxx_diag_getc(void) +{ + return hal_a2fxxx_serial_getc( + &a2fxxx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL] ); +} + + +#endif + +//----------------------------------------------------------------------------- +// End of hal_diag.c diff --git a/packages/hal/cortexm/a2fxxx/var/current/src/hal_dma.c b/packages/hal/cortexm/a2fxxx/var/current/src/hal_dma.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/src/hal_dma.c @@ -0,0 +1,427 @@ +/*========================================================================== +// +// hal_dma.c +// +// Cortex-M Actel A2F DMA channels configuration +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-02-03 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header +#include + +#ifdef CYGDBG_HAL_CORTEXM_A2FXXX_DMA_TRACE +# define DMA_TRACE(args...) diag_printf(args) +#else +# define DMA_TRACE(args...) +#endif + +//----------------------------------------------------------------------------- +// DMA channel ISR/DSR handling + +typedef struct a2fxxx_dma_ch { + cyg_ISR_t* isr; + cyg_DSR_t* dsr; + cyg_uint32 isr_ret; + cyg_addrword_t data; +} a2fxxx_dma_ch; + +typedef struct a2fxxx_dma_info { + cyg_uint32 init; + cyg_uint32 base; + cyg_handle_t interrupt_handle; + cyg_interrupt interrupt_data; + a2fxxx_dma_ch ch[CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL]; + cyg_uint32 dma_cr[CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL]; + cyg_uint32 dma_sr; +} a2fxxx_dma_info; + +static a2fxxx_dma_info a2fxxx_dma = { + .base = CYGHWR_HAL_A2FXXX_DMA, + .init =0, +}; + + +//----------------------------------------------------------------------------- +// DMA ISR handler + +static cyg_uint32 +a2fxxx_dma_isr (cyg_vector_t vector, cyg_addrword_t data) +{ + a2fxxx_dma_info *dma = (a2fxxx_dma_info *) data; + cyg_uint32 sr = 0; + cyg_uint8 i = 0, j = 0; + + HAL_READ_UINT32(dma->base + CYGHWR_HAL_A2FXXX_DMA_BUFFER_STATUS, sr); + dma->dma_sr |= sr; + + DMA_TRACE("DMA interrupt, sr 0x%x\n", dma->dma_sr); + + while(i < 16){ + if( sr & 0x1 ){ + j = i >> 1; + if(dma->ch[j].isr != NULL){ + dma->ch[j].isr_ret = dma->ch[j].isr(i, dma->ch[j].data); + } + } + sr = sr >> 1; i++; + } + cyg_drv_interrupt_acknowledge (CYGNUM_HAL_INTERRUPT_DMA); + cyg_drv_interrupt_mask (CYGNUM_HAL_INTERRUPT_DMA); + return (CYG_ISR_CALL_DSR | CYG_ISR_HANDLED); +} + + +//----------------------------------------------------------------------------- +// DMA DSR handler + +static void +a2fxxx_dma_dsr (cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + a2fxxx_dma_info *dma = (a2fxxx_dma_info *) data; + cyg_uint8 i = 0, j = 0; + cyg_uint32 sr; + + cyg_drv_isr_lock (); + sr = dma->dma_sr; + dma->dma_sr = 0; + cyg_drv_isr_unlock (); + + while(i < 16){ + if( sr & 0x1 ){ + j = i >> 1; + if( (dma->ch[j].dsr != NULL) && + (dma->ch[j].isr_ret & CYG_ISR_CALL_DSR) ){ + dma->ch[j].dsr(i, 0, dma->ch[j].data); + } + } + sr = sr >> 1; i++; + } + + cyg_drv_interrupt_unmask (CYGNUM_HAL_INTERRUPT_DMA); +} + + +//----------------------------------------------------------------------------- +// DMA Initialization + +void +hal_dma_init( void ) +{ + cyg_uint8 i = 0; + + // Avoid multiple initialization + if(a2fxxx_dma.init) + return; + + a2fxxx_dma.init = 1; + + // Reset DMA + CYGHWR_HAL_A2FXXX_PERIPH_RESET( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(PDMA) ); + + // Clear channel ISR / DSR + while( i < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL ) { + a2fxxx_dma.ch[i].isr = NULL; + a2fxxx_dma.ch[i].dsr = NULL; + a2fxxx_dma.dma_cr[i] = 0; + a2fxxx_dma.ch[i++].data = 0; + } + a2fxxx_dma.dma_sr = 0; + + // Register DMA interrupt + cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_DMA, + CYGNUM_HAL_CORTEXM_A2FXXX_DMA_ISR_PRIORITY, + (cyg_addrword_t)&a2fxxx_dma, + &a2fxxx_dma_isr, + &a2fxxx_dma_dsr, + &(a2fxxx_dma.interrupt_handle), + &(a2fxxx_dma.interrupt_data)); + cyg_drv_interrupt_attach(a2fxxx_dma.interrupt_handle); + cyg_drv_interrupt_acknowledge (CYGNUM_HAL_INTERRUPT_DMA); + cyg_drv_interrupt_unmask (CYGNUM_HAL_INTERRUPT_DMA); + + // Release DMA + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(PDMA) ); + + // HW initialization + i=0; + while( i < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL ) { + HAL_WRITE_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(i++), + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_RESET); + } +} + + +//----------------------------------------------------------------------------- +// Register the DMA sub-channel ISR / DSR + +__externC cyg_uint32 +a2fxxx_dma_ch_attach(cyg_uint8 ch, cyg_ISR_t *isr, cyg_DSR_t *dsr, + cyg_addrword_t data) +{ + cyg_uint32 res = 1; + + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Attach)."); + +#ifdef CYGPKG_KERNEL + cyg_interrupt_disable(); +#endif + if( a2fxxx_dma.ch[ch].isr != NULL || + a2fxxx_dma.ch[ch].dsr != NULL || a2fxxx_dma.ch[ch].data != 0 ) { + res = 0; + } else { + a2fxxx_dma.ch[ch].isr = isr; + a2fxxx_dma.ch[ch].dsr = dsr; + a2fxxx_dma.ch[ch].data = data; + } +#ifdef CYGPKG_KERNEL + cyg_interrupt_enable(); +#endif + + return res; +} + + +//----------------------------------------------------------------------------- +// Update DMA source / destination address increment + +__externC void +a2fxxx_dma_update_incr(cyg_uint8 ch, cyg_bool dst, cyg_uint8 incr) +{ + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Update)."); + + if(dst==false){ + // Clear bits + a2fxxx_dma.dma_cr[ch] &= ~CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR_4B; + a2fxxx_dma.dma_cr[ch] |= CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_SRC_INCR(incr); + } + else { + // Clear bits + a2fxxx_dma.dma_cr[ch] &= ~CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR_4B; + a2fxxx_dma.dma_cr[ch] |= CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DST_INCR(incr); + } +} + + +//----------------------------------------------------------------------------- +// Setup DMA channel +// +// channel select the DMA channel ID. +// type select the transfer type to be performed. For valid +// values, check CYGHWR_HAL_A2FXXX_DMA_XFER(_x) in var_io.h. +// outbound set to true for transfer out of memory, false for transfer to +// memory +// src_incr select the memory address increment step for the source. Valid +// values are 0, 1, 2 and 4 byte(s). 0 can be used for DMA +// transfer from peripheral FIFO for instance. +// dst_incr select the memory address increment step for the destination. +// Valid values are 0, 1, 2 and 4 byte(s). 0 can be used for DMA +// transfer to peripheral FIFO for instance. +// pri select the DMA channel priority (true = high , false = low) +// wr_adj indicates the number of FCLK periods which the PDMA must wait +// after completion of a read or write access to a peripheral before +// evaluating the out-of-band status signals from that peripheral +// for another transfer + +__externC cyg_uint32 +a2fxxx_dma_ch_setup(cyg_uint8 ch, cyg_uint8 type, cyg_bool outbound, + cyg_uint8 src_incr, cyg_uint8 dst_incr, cyg_bool pri, cyg_uint8 wr_adj) +{ + cyg_uint32 res = 1; + cyg_uint32 xfer_type = 0, xfer_dir = 0, xfer_incr = + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_XFER_BYTE; + a2fxxx_dma.dma_cr[ch] = 0; + + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Setup)."); + + DMA_TRACE("DMA setup channel %d, direction: %s, type %x, step %d-%d byte(s)\n", ch , + ((outbound==true) ? "outbound" : "inbound"), type, src_incr, dst_incr ); + + if( type != CYGHWR_HAL_A2FXXX_DMA_XFER_MEMORY ){ + xfer_type = CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_PERIPH_SEL(type) | + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_PERIPH; + } + + if( outbound == true ){ + xfer_dir = CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_DIR; + } + + a2fxxx_dma_update_incr(ch, true, dst_incr); + a2fxxx_dma_update_incr(ch, false, src_incr); + + a2fxxx_dma.dma_cr[ch] |= ( xfer_type | xfer_dir | + ((pri == true) ? CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_HI_PRI : 0) | + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPA | + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPB | + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_WR_ADJ(wr_adj) | + xfer_incr); + + HAL_WRITE_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(ch), + a2fxxx_dma.dma_cr[ch]); + + return res; +} + + +//----------------------------------------------------------------------------- +// Remove DMA channel handler + +__externC void +a2fxxx_dma_ch_detach (cyg_uint8 ch) +{ + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Detach)."); + +#ifdef CYGPKG_KERNEL + cyg_interrupt_disable(); +#endif + a2fxxx_dma.ch[ch].isr = NULL; + a2fxxx_dma.ch[ch].dsr = NULL; + a2fxxx_dma.ch[ch].data = 0; +#ifdef CYGPKG_KERNEL + cyg_interrupt_enable(); +#endif +} + + +//----------------------------------------------------------------------------- +// Start DMA transfer + +__externC cyg_uint32 +a2fxxx_dma_xfer (cyg_uint8 ch, cyg_bool polled, cyg_uint32 len, cyg_uint8 *src, + cyg_uint8 *dst) +{ + cyg_uint32 res = 1; + cyg_uint32 src_reg, dst_reg, cnt_reg; + cyg_uint32 sub = 0; + cyg_haladdress dma_src = (cyg_haladdress) src; + cyg_haladdress dma_dst = (cyg_haladdress) dst; + + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Transfer)."); + + if( polled == true ) + a2fxxx_dma.dma_cr[ch] &= ~CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_INTEN; + else + a2fxxx_dma.dma_cr[ch] |= CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_INTEN; + + HAL_WRITE_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(ch), + a2fxxx_dma.dma_cr[ch]); + + HAL_READ_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS(ch), sub); + sub = CYGHWR_HAL_A2FXXX_DMA_GET_SUB_ID( sub ); + + src_reg = ((sub == 0) ? CYGHWR_HAL_A2FXXX_DMA_CHx_BA_SRC(ch) : + CYGHWR_HAL_A2FXXX_DMA_CHx_BB_SRC(ch)); + dst_reg = ((sub == 0) ? CYGHWR_HAL_A2FXXX_DMA_CHx_BA_DST(ch) : + CYGHWR_HAL_A2FXXX_DMA_CHx_BB_DST(ch)); + cnt_reg = ((sub == 0) ? CYGHWR_HAL_A2FXXX_DMA_CHx_BA_COUNT(ch) : + CYGHWR_HAL_A2FXXX_DMA_CHx_BB_COUNT(ch)); + + DMA_TRACE("DMA transfer of length %d on channel %d(%s) - SRC: 0x%x / DST: 0x%x\n", + len, ch, ((sub==0) ? "A" : "B"), dma_src, dma_dst); + DMA_TRACE("DMA register address 0x%x / 0x%x\n", src_reg , dst_reg); + + HAL_WRITE_UINT32(a2fxxx_dma.base + src_reg, dma_src); + HAL_WRITE_UINT32(a2fxxx_dma.base + dst_reg, dma_dst); + HAL_WRITE_UINT32(a2fxxx_dma.base + cnt_reg, len); + + return res; +} + + +//----------------------------------------------------------------------------- +// Clear DMA interrupt + +void a2fxxx_dma_clear_interrupt (cyg_uint8 ch) +{ + cyg_uint32 reg; + + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Clear IRQ)."); + + DMA_TRACE("DMA status register 0x%x\n", + (a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(ch))); + + HAL_READ_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(ch), reg); + reg |= (CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPA | + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL_CLR_COMPB); + HAL_WRITE_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_CTRL(ch), reg); +} + + +//----------------------------------------------------------------------------- +// Clear DMA interrupt + +cyg_uint8 a2fxxx_dma_get_comp_flag (cyg_uint8 ch) +{ + cyg_uint32 reg; + + CYG_ASSERT (ch < CYGHWR_HAL_A2FXXX_DMA_MAX_CHANNEL, + "DMA : Channel number out of range (Get)."); + + HAL_READ_UINT32(a2fxxx_dma.base + CYGHWR_HAL_A2FXXX_DMA_CHx_STATUS(ch), reg); + + return (reg&0x3); +} + +//----------------------------------------------------------------------------- +// End of hal_dma.c diff --git a/packages/hal/cortexm/a2fxxx/var/current/tests/timers.c b/packages/hal/cortexm/a2fxxx/var/current/tests/timers.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/a2fxxx/var/current/tests/timers.c @@ -0,0 +1,336 @@ +/*============================================================================= +// +// timers.c +// +// Test for Cortex-M3 Actel Smartfusion Timers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg for STM32 +// ccoutand updated for Cortex-M3 Actel Smartfusion Devices +// Date: 2011-03-06 +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include + +#if defined(CYGPKG_KERNEL) +#include +#endif + +#include + +//============================================================================= +// Check all required packages and components are present + +#if !defined(CYGPKG_KERNEL) || !defined(CYGPKG_KERNEL_API) + +#define NA_MSG "Configuration insufficient" + +#endif + +//============================================================================= +// If everything is present, compile the full test. + +#ifndef NA_MSG + +#include +#include +#include + +#include +#include +#include + +//============================================================================= + +#define LOOPS 24 // == 2 minutes + +#define STACK_SIZE 8000 + +static int test_stack[(STACK_SIZE/sizeof(int))]; +static cyg_thread test_thread; +static cyg_handle_t main_thread; + +//============================================================================= + +struct timer +{ + cyg_uint32 timer; + cyg_uint32 base; + cyg_uint32 vector; + cyg_uint32 priority; + cyg_uint32 interval; + + cyg_uint32 ticks; + + cyg_uint32 preempt[10]; + + cyg_uint32 preempt_dsr[10]; + cyg_uint32 dsr_count[10]; + + cyg_interrupt interrupt_object; + cyg_handle_t interrupt_handle; +}; + +struct timer timers[] = +{ + { 1, CYGHWR_HAL_A2FXXX_TIMER1, CYGNUM_HAL_INTERRUPT_TIM0_1, 0x20, 127 }, + { 2, CYGHWR_HAL_A2FXXX_TIMER2, CYGNUM_HAL_INTERRUPT_TIM0_2, 0x30, 355 }, + { 0, 0, 0, 0 } +}; + +//============================================================================= + +volatile cyg_uint32 ticks = 0; +volatile cyg_uint32 nesting = 0; +volatile cyg_uint32 max_nesting = 0; +volatile cyg_uint32 max_nesting_seen = 0; +volatile cyg_uint32 current = 0; +volatile cyg_uint32 in_dsr = 0; + +//============================================================================= + +__externC cyg_uint32 hal_a2fxxx_pclk0; + +void init_timer( cyg_uint32 base, cyg_uint32 interval ) +{ + cyg_uint32 period = hal_a2fxxx_pclk0; + + period = period / 1000000; + period = period * interval; + + HAL_WRITE_UINT32(base+CYGHWR_HAL_A2FXXX_TIMER_TIMx_BGLOADVAL, period-1 ); + + HAL_WRITE_UINT32(base+CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL, \ + CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL_EN | CYGHWR_HAL_A2FXXX_TIMER_TIMx_CTRL_INTEN); +} + +//============================================================================= + +cyg_uint32 timer_isr( cyg_uint32 vector, CYG_ADDRWORD data ) +{ + struct timer *t = (struct timer *)data; + cyg_uint32 preempt = current; + CYG_ADDRWORD base = t->base; + cyg_uint32 cnt; + + current = t->timer; + t->ticks++; + ticks++; + t->preempt[preempt]++; + nesting++; + + // Count only first ISR to preempt a DSR + if( preempt == 0 ) + t->preempt_dsr[in_dsr]++; + + HAL_WRITE_UINT32(t->base+CYGHWR_HAL_A2FXXX_TIMER_TIMx_RIS, 1 ); + + if( nesting > max_nesting ) + max_nesting = nesting; + + // Loiter here for a proportion of the timer interval to give + // other timers the chance to preempt us. + do + { + HAL_READ_UINT32( base+CYGHWR_HAL_A2FXXX_TIMER_TIMx_VAL, cnt ); + } while( cnt < t->interval/10 ); + + nesting--; + current = preempt; + + if( (t->ticks % 10) == 0 ) + return 3; + else + return 1; +} + +//============================================================================= + +void timer_dsr( cyg_uint32 vector, cyg_uint32 count, CYG_ADDRWORD data ) +{ + struct timer *t = (struct timer *)data; + int i; + + in_dsr = t->timer; + + if( count >= 8 ) + count = 8; + + t->dsr_count[count]++; + + // Loiter for a while + for( i = 0; i < t->interval/10; i++) + continue; + + in_dsr = 0; +} + +//============================================================================= + +void +timers_test(cyg_addrword_t data) +{ + int loops = LOOPS; + int i; + CYG_INTERRUPT_STATE istate; + + CYG_TEST_INIT(); + + CYG_TEST_INFO("Start Timers test"); + + CYGHWR_HAL_A2FXXX_PERIPH_RELEASE( CYGHWR_HAL_A2FXXX_PERIPH_SOFTRST(TIMER) ); + + for( i = 0; timers[i].timer != 0; i++ ) + { + struct timer *t = &timers[i]; + + init_timer( t->base, t->interval ); + + cyg_interrupt_create( t->vector, + t->priority, + (cyg_addrword_t)t, + timer_isr, + timer_dsr, + &t->interrupt_handle, + &t->interrupt_object + ); + + cyg_interrupt_attach( t->interrupt_handle ); + cyg_interrupt_unmask( t->vector ); + + } + + while( loops-- ) + { + int j; + + // 5 second delay + cyg_thread_delay( 5*100 ); + + // Disable interrupts while we print details, otherwise it + // comes out very slowly. + HAL_DISABLE_INTERRUPTS( istate ); + + if( max_nesting > max_nesting_seen ) + max_nesting_seen = max_nesting; + + diag_printf("\nISRs max_nesting %d max_nesting_seen %d\n", max_nesting, max_nesting_seen ); + max_nesting = 0; + + diag_printf(" T Ticks "); + + for( j = 0; j < 9; j++ ) + diag_printf("%9d ", j ); + diag_printf("\n"); + + for( i = 0; timers[i].timer != 0; i++ ) + { + struct timer *t = &timers[i]; + + diag_printf("%2d: %9d ", t->timer, t->ticks ); + + for( j = 0; j < 9; j++ ) + diag_printf("%9d ", t->preempt[j] ); + diag_printf("\n"); + + } + + diag_printf("DSRs\n"); + + diag_printf(" T: "); + + for( j = 0; j < 9; j++ ) + diag_printf("%9d ", j ); + diag_printf("\n"); + + for( i = 0; timers[i].timer != 0; i++ ) + { + struct timer *t = &timers[i]; + + diag_printf("%2d: preempt: ", t->timer); + + for( j = 0; j < 9; j++ ) + diag_printf("%9d ", t->preempt_dsr[j] ); + diag_printf("\n"); + + diag_printf(" count: "); + + for( j = 0; j < 9; j++ ) + diag_printf("%9d ", t->dsr_count[j] ); + diag_printf("\n"); + } + + HAL_RESTORE_INTERRUPTS( istate ); + } + + CYG_TEST_PASS_FINISH("Timers test"); +} + +//============================================================================= + +void cyg_user_start(void) +{ + cyg_thread_create(0, // Priority + timers_test, + 0, + "timers test", // Name + test_stack, // Stack + STACK_SIZE, // Size + &main_thread, // Handle + &test_thread // Thread data structure + ); + cyg_thread_resume( main_thread); +} + +//============================================================================= +// Print a message if we cannot run + +#else // NA_MSG + +void cyg_user_start(void) +{ + CYG_TEST_NA(NA_MSG); +} + +#endif // NA_MSG + +//============================================================================= +/* EOF timers.c */ diff --git a/packages/hal/cortexm/arch/current/ChangeLog b/packages/hal/cortexm/arch/current/ChangeLog --- a/packages/hal/cortexm/arch/current/ChangeLog +++ b/packages/hal/cortexm/arch/current/ChangeLog @@ -1,3 +1,133 @@ +2014-05-06 Ilija Kocho + + * src/cortexm.ld: Use CYGBLD_HAL_LINKER_GROUPED_LIBS macro. + [ Bugzilla 1001989 ] + +2014-02-28 John Dallaway + + * src/mcount.S: Add mcount functions for call-graph profiling. + * cdl/hal_cortexm.cdl: Add option to build mcount functions. + [ Bugzilla 1001954 ] + +2013-08-25 Ilija Kocho + + * cdl/hal_cortexm_fpu.cdl, include/fpv4_sp_d16_libm.h: Define Cortex-M4F + architecture specific builtin mathematical functions. [ Bugzilla 1001539 ] + +2013-04-29 Ilija Kocho + + * include/cortexm_stub.h: Remove unwanted diag_printf(). + +2013-02-10 Ilija Kocho + Jonathan Larmour + + * cdl/hal_cortexm.cdl: + * cdl/hal_cortexm_fpu.cdl: New + * include/cortexm_core.h: New + * include/cortexm_fpu.h: New + * include/cortexm_regs.h: + * include/cortexm_stub.h: + * include/fpv4_sp_d16.h: New + * include/hal_arch.h: + * include/hal_arch.inc: New + * include/hal_io.h: + * src/context.S: + * src/cortexm_fpu.c: New + * src/cortexm_stub.c: + * src/fpv4_sp_d16.c: New + * src/hal_misc.c: + * src/vectors.S: + Add: hardware floating point support for Cortex-M4F [ Bugzilla 1001607 ] + +2012-04-23 Ilija Kocho + + * cdl/hal_cortexm.cdl: + * include/basetype.h: + * include/cortexm_stub.h: + * include/hal_arch.h: + * include/hal_intr.h: + * include/hal_io.h: + * src/context.S: + * src/cortexm_stub.c: + * src/hal_misc.c: + * src/vectors.S: + Whitespace cleanup [Bugzilla 1001569] + +2012-03-06 Ilija Kocho + + * include/hal_intr.h: Fix compiler warning about unused variables. + [Bugzilla 1001520] + +2012-02-05 Jonathan Larmour + + * src/hal_misc.c (hal_reset_vsr): Ensure we only init intr vectors + up to top of VSR table. + +2011-08-23 Ilija Kocho + + * cdl/hal_cortexm.cdl: New CDL option CYGIMP_HAL_ARCH_ENDIAN + * include/cortexm_endian.h: New file + * include/cortexm_regs.h: New file + [ Bugzilla 1001275 ] + +2011-04-06 Nick Garnett + + * cdl/cortexm.cdl: Remove M1 CPU family from architecture config + file (as not supported for now). [Bugzilla 1001186] + +2011-04-02 Ilija Kocho + * cdl/cortexm.cdl: Add M4 CPU family to CYGHWR_HAL_CORTEXM. Add + FPU (Floating Point Unit) interface. + * include/hal_io.h: Add CYGHWR_HAL_CORTEXM_M4 to some preprocessor + conditions. [Bugzilla 1001186] + +2011-04-01 Ilija Kocho + + * include/hal_intr.h: Remove double inclusion of var_intr.h + header and include it at proper place. [ Bugzilla 1001184 ] + +2011-02-17 John Dallaway + + * include/hal_intr.h (HAL_DISABLE_INTERRUPTS): Mark operand as + an earlyclobber operand to ensure correct register usage. Issue + reported by both Ulrich Holeschak and Stanislav Meduna. + [ Bugzilla 1001154 ] + +2011-02-16 Ilija Kocho + + * src/cortexm.ld: Added USER_SECTION() macro. [Bugzilla 1001142 ] + +2011-01-20 Christophe Coutand + + * include/hal_intr.h: + * cdl/hal_cortexm.cdl: + Allow variant or platform to define their own RTC clock. Add + CDL entry to select SysTick clock source. [ Bugzilla 1001090 ] + +2010-12-28 Ilija Kocho + + * include/hal_io.h: conditional VTOR setting. + +2011-01-13 John Dallaway + + * src/vectors.S (hal_default_interrupt_vsr): Save interrupt state + if CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED is implemented. + [ Bugzilla 1001111 ] + +2011-01-02 Sergei Gavrikov + + * cdl/hal_cortexm.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + +2010-05-17 Spencer Oliver + + * include/hal_intr.h (HAL_INTERRUPT_STACK_CALL_PENDING_DSRS): + * src/hal_misc.c (hal_reset_vsr): Add 0 argument to SWI. + + * src/vectors.S (hal_switch_state_vsr): Eliminate "msr psp,sp", + which is now deprecated. + (hal_pendable_svc_vsr): Add 0 argument to SWI. + 2009-02-27 Simon Kallweit * include/hal_io.h: Added system control register definitions @@ -68,7 +198,7 @@ 2008-10-06 Nick Garnett /lib/target.ld: /src/cortexm.ld - $(CC) -E -P -Wp,-MD,target.tmp -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps @@ -98,14 +101,52 @@ cdl_package CYGPKG_HAL_CORTEXM { cdl_option CYGHWR_HAL_CORTEXM { display "Cortex-M CPU family" flavor data - legal_values { "M1" "M3" } + legal_values { "M3" "M4" } default_value { "M3" } description " - The Cortex-M architecture has two variants at present. The M1 is - base on the ARMV6 architecture specification and executes an extended - variant of the Thumb instruction set and has some differences in - the interrupt controller. The M3 is based on the ARMV7 architecture - specification and executes the Thumb2 instruction set." + The Cortex-M architecture has two variants at present. The + M3 and M4 are based on the ARMV7 architecture specification + and execute the Thumb2 instruction set. The M4 in addition + to M3 instruction set has SIMD and optional single precision + floating point instructions." + } + + cdl_option CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE { + display "System tick timer clock" + flavor data + legal_values { "EXTERNAL" "INTERNAL" } + default_value { "EXTERNAL" } + description "Select the Cortex-M system tick timer clock source." + } + + cdl_component CYGPKG_HAL_CORTEXM_FPU { + display "Floating Point Support" + flavor data + calculated { !CYGHWR_HAL_CORTEXM_FPU ? "SOFT" : + "HARD: " . CYGHWR_HAL_CORTEXM_FPU_SWITCH } + no_define + active_if { CYGHWR_HAL_CORTEXM == "M4" } + description " + Floating point arithmetics can be executed in software or, + on devices with floating point unit - FPU, in hardware. + FPU is optional on Cortex-M4 architecture, and is present + on Cortex-M4F cores." + + script hal_cortexm_fpu.cdl + } + + cdl_option CYGIMP_HAL_ARCH_ENDIAN { + display "Architecture optimized endian functions" + flavor bool + default_value 1 + description " + Cortex-M architecture implements instructions for endian + manipulation (byte swapping). If enabled, this feature + can produce shorter and faster code for that." + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_ENDIAN_H " + } } cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_MAX { @@ -116,11 +157,23 @@ cdl_package CYGPKG_HAL_CORTEXM { Calculate the maximum exception priority that can be set by interrupts. Higher priorities are reserved for the DEBUG and SVC traps." } - + + cdl_option CYGBLD_HAL_CORTEXM_MCOUNT { + display "Support call-graph profiling" + flavor bool + no_define + active_if CYGPKG_PROFILE_GPROF + calculated CYGPKG_PROFILE_CALLGRAPH + compile mcount.S + description " + Calculate whether mcount functions should be built + to support call-graph profiling." + } + cdl_option CYGBLD_LINKER_SCRIPT { display "Linker script" flavor data - no_define + no_define calculated { "src/cortexm.ld" } } @@ -130,7 +183,93 @@ cdl_package CYGPKG_HAL_CORTEXM { default_value 8 description " This option determines the number of breakpoints supported by the HAL." - } + } + + cdl_component CYGBLD_ARCH_CPUFLAGS { + display "Architecture related build flags" + flavor data + no_define + + calculated { CYGHWR_HAL_CORTEXM == "M3" ? " -mcpu=cortex-m3" : + CYGHWR_HAL_CORTEXM_FPU ? " -mcpu=cortex-m4" : " " } + + description "This component defines flags that code generation dependent on specific + CPU type or CPU features." + + cdl_option CYGBLD_ARCH_CPUFLAGX_M3 { + display "Exclude Cortex-M3 build flag" + flavor data + no_define + + calculated { CYGHWR_HAL_CORTEXM_FPU ? "-mcpu=cortex-m3" : "no_exclude" } + } + + cdl_option CYGBLD_ARCH_CPUFLAGX_M4 { + display "Exclude Cortex-M4 build flag" + flavor data + no_define + + calculated { (CYGHWR_HAL_CORTEXM != "M4") ? "-mcpu=cortex-m4" : "no_exclude" } + } + + cdl_component CYGBLD_ARCH_CPUFLAG_FLOAT_ABI { + display "Float ABI build flags" + flavor data + no_define + calculated { CYGHWR_HAL_CORTEXM_FPU ? " -mfloat-abi=hard" : "" } + + cdl_option CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI { + display "Float ABI flag to exclude" + flavor data + no_define + calculated { CYGHWR_HAL_CORTEXM_FPU ? "-mfloat-abi=soft" : "-mfloat-abi=hard" } + } + + cdl_option CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT { + display "Alt. float flag to exclude" + flavor data + no_define + calculated { CYGHWR_HAL_CORTEXM_FPU ? "-msoft-float" : "-mhard-float" } + } + + cdl_component CYGBLD_ARCH_CPUFLAG_FPV4SPD16 { + display "FPv4-SP-D16 flags" + flavor data + no_define + calculated { CYGHWR_HAL_FPV4_SP_D16 ? " -mfpu=fpv4-sp-d16" : "" } + + cdl_option CYGBLD_ARCH_CPUFLAGX_FPV4SPD16 { + display "Exclude FPv4-SP-D16 flag" + flavor data + no_define + calculated { CYGHWR_HAL_FPV4_SP_D16 ? "do_not_exclude" : "-mfpu=fpv4-sp-d16" } + } + } + } + + requires { + !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + + is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + } + requires { + !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + + is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + } + } } # EOF hal_cortexm.cdl diff --git a/packages/hal/cortexm/arch/current/cdl/hal_cortexm_fpu.cdl b/packages/hal/cortexm/arch/current/cdl/hal_cortexm_fpu.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/cdl/hal_cortexm_fpu.cdl @@ -0,0 +1,136 @@ +##========================================================================== +## +## hal_cortexm_fpu.cdl +## +## Cortex-M HAL Floating Point configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ilijak +## Date: 2012-03-03 +## Usage: script hal_cortexm_fpu.cdl +## +######DESCRIPTIONEND#### +## +##========================================================================== + + #cdl_component CYGPKG_HAL_CORTEXM_FPU { + #display "Floating Point Unit" + #flavor none + #no_define + + cdl_interface CYGINT_HAL_FPV4_SP_D16 { + display "FPU is FPv4-SP-D16" + flavor bool + implements CYGINT_HAL_CORTEXM_FPU + } + + cdl_interface CYGINT_HAL_CORTEXM_FPU { + display "FPU present." + flavor data + } + + cdl_component CYGHWR_HAL_CORTEXM_FPU { + display "Use hardware FPU" + flavor bool + active_if { CYGINT_HAL_CORTEXM_FPU } + default_value 0 + compile cortexm_fpu.c + + description " + Cortex-M4F cores have a single precision floating point unit. + This option enables FPU usage and provides related FPU control + options. + Hardware FPU enable, implies Cortex-M4 code generation, and + build flags shall be set accordingly, including -mcpu=cortex-m4. + As a side effect, the Cortex_M4 build flag will remain \(sticky\) + even if hardware FPU is subsequently disabled. + " + + cdl_option CYGHWR_HAL_CORTEXM_FPU_SWITCH { + display "FPU context switch" + flavor data + legal_values { "ALL" "LAZY" "NONE" } + default_value { "LAZY" } + + requires { is_active (CYGPKG_KERNEL) implies + CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == + (CYGHWR_HAL_CORTEXM_FPU_SWITCH == "NONE") } + + description " + This option selects the FPU context switching scheme. + Straight-forward behaviour is to save and + restore FPU state on every CPU context save/restore. + While simple, robust and deterministic, this + approach can be expensive if the FPU is used by + few threads. The alternative schemes, available by this + option, are to use hardware features that allow either: + - LAZY: Save FPU context only if the thread makes use of + the FPU. Where only few threads use FPU this should give + shorter average context switching delay compared to ALL + scheme. If more than one threads use FPU, the worst context + switching time is typically worse than the one for ALL + scheme. + - ALL: Save FPU context for all threads. This is a simple + scheme, which if all, or majority of threads use FPU may + give better average context switching time than LAZY. + This scheme also includes Lazy Stacking of FPU state + for exceptions/interrupts. + - NONE: No FPU state saving, this scheme adds no additional + delay for saving of FPU state to context switching, but is + only suitable if maximum one thread uses floating point." + } + + cdl_option CYGHWR_HAL_FPV4_SP_D16 { + flavor bool + active_if { CYGINT_HAL_FPV4_SP_D16 } + calculated { CYGINT_HAL_FPV4_SP_D16 && CYGHWR_HAL_CORTEXM_FPU } + display "FPv4-SP-D16" + no_define + compile fpv4_sp_d16.c + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_LIBM_H " + } + + description " + FPv4-SP-D16 is ARMv7 architecture single precision floating + point unit with 16 double precision / 32 single precision + registers. It is found on Cortex-M4F and Cortex-R5 cores." + } + #} + +# EOF hal_cortexm_fpu.cdl diff --git a/packages/hal/cortexm/arch/current/include/basetype.h b/packages/hal/cortexm/arch/current/include/basetype.h --- a/packages/hal/cortexm/arch/current/include/basetype.h +++ b/packages/hal/cortexm/arch/current/include/basetype.h @@ -47,7 +47,8 @@ // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #define CYG_BYTEORDER CYG_LSBFIRST // Little endian #define CYG_DOUBLE_BYTEORDER CYG_LSBFIRST @@ -68,4 +69,3 @@ //========================================================================== #endif // CYGONCE_HAL_BASETYPE_H // End of basetype.h - diff --git a/packages/hal/cortexm/arch/current/include/cortexm_core.h b/packages/hal/cortexm/arch/current/include/cortexm_core.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_core.h @@ -0,0 +1,77 @@ +#ifndef CYGONCE_CORTEXM_CORE_H +#define CYGONCE_CORTEXM_CORE_H +//========================================================================== +// +// cortexm_core.h +// +// Cortex-M some core registers +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-06-26 +// Description: Some Cortex-M core register definitions +// +//####DESCRIPTIONEND#### +// +//======================================================================== + + +// Coprocessor Access Control Register +#define CYGARC_REG_FPU_CPACR 0xE000ED88 + +#define CYGARC_REG_FPU_CPACR_ACCESS_DENIED 0 +#define CYGARC_REG_FPU_CPACR_ACCESS_PRIVILEGED 1 +#define CYGARC_REG_FPU_CPACR_ACCESS_RESERVED 2 +#define CYGARC_REG_FPU_CPACR_ACCESS_FULL (CYGARC_REG_FPU_CPACR_ACCESS_PRIVILEGED | \ + CYGARC_REG_FPU_CPACR_ACCESS_RESERVED) + +#define CYGARC_REG_FPU_CPACR_CP10(_access) ((_access) << 20) +#define CYGARC_REG_FPU_CPACR_CP11(_access) ((_access) << 22) + +#define CYGARC_REG_FPU_CPACR_ENABLE \ + (CYGARC_REG_FPU_CPACR_CP10(CYGARC_REG_FPU_CPACR_ACCESS_FULL) | \ + CYGARC_REG_FPU_CPACR_CP11(CYGARC_REG_FPU_CPACR_ACCESS_FULL)) + +// CONTROL register +// The CONTROL register is not memory mapped. Use CYGARC_MSR() and CYGARC_MRS(). +#define CYGARC_REG_CONTROL_PRIV_M 0x1 +#define CYGARC_REG_CONTROL_SPSEL_M 0x2 +#define CYGARC_REG_CONTROL_FPCA_M 0x4 + +//========================================================================== +#endif //CYGONCE_CORTEXM_CORE_H diff --git a/packages/hal/cortexm/arch/current/include/cortexm_endian.h b/packages/hal/cortexm/arch/current/include/cortexm_endian.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_endian.h @@ -0,0 +1,77 @@ +#ifndef CYGONCE_CORTEXM_ENDIAN_H +#define CYGONCE_CORTEXM_ENDIAN_H +//========================================================================== +// +// cortexm_endian.h +// +// Cortex-M architecture endian conversion macros/functions. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Sergei Gavrikov +// Date: 2011-08-20 +// Description: Endian conversion macros/functions optimized for Cortex-M +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//=========================================================================== +// Endian operations optimized for Cortex-M architecture. + +static __inline__ cyg_uint32 cyg_hal_swap32(cyg_uint32 original) +{ + cyg_uint32 swapped; + CYGARC_REV(swapped, original); + return swapped; +} + +static __inline__ cyg_uint16 cyg_hal_swap16(cyg_uint16 original) +{ + cyg_uint16 swapped; + CYGARC_REV16(swapped, original); + return swapped; +} + +#define CYG_SWAP32(__val) cyg_hal_swap32(__val) +#define CYG_SWAP16(__val) cyg_hal_swap16(__val) + +//========================================================================== +#endif //CYGONCE_CORTEXM_ENDIAN_H diff --git a/packages/hal/cortexm/arch/current/include/cortexm_fpu.h b/packages/hal/cortexm/arch/current/include/cortexm_fpu.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_fpu.h @@ -0,0 +1,98 @@ +#ifndef CYGONCE_CORTEXM_FPU_H +#define CYGONCE_CORTEXM_FPU_H +//========================================================================== +// +// cortexm_fpu.h +// +// Cortex-M General Floating Point Unit definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-04-25 +// Description: Cortex-M4F General Floating Point Unit definitions and macros +// Usage: include +// +//####DESCRIPTIONEND#### +// +//======================================================================== + + +//=========================================================================== +// Floating Point Unit +// +// FPU is optional unit of Cortex-M4 + +#include +#include +#include + +#ifdef CYGHWR_HAL_CORTEXM_FPU + +# if defined CYGSEM_HAL_ROM_MONITOR || defined CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +# define CYGSEM_HAL_DEBUG_FPU +# endif + +# ifdef CYGINT_HAL_FPV4_SP_D16 +# include +# else +# error "Unknown FPU unit!" +# endif + +#else // CYGHWR_HAL_CORTEXM_FPU + +# define CYGARC_CORTEXM_GDB_REG_FPA + +# define GDB_STUB_SAVEDREG_FRAME_TYPE(__type) (__type->u.type) + +# define HAL_SAVEDREG_AUTO_FRAME_SIZE (8*4) + +# define HAL_SAVEDREG_FPU_THREAD_S +# define HAL_SAVEDREG_MAN_FPU_EXCEPTION_S +# define HAL_SAVEDREG_AUTO_FPU_EXCEPTION_S +# define HAL_THREAD_INIT_FPU_CONTEXT(__regs) CYG_EMPTY_STATEMENT + +# define GDB_STUB_SAVEDREG_FPU_THREAD_GET(__gdbreg,__regs) CYG_EMPTY_STATEMENT +# define GDB_STUB_SAVEDREG_FPU_THREAD_SET(__gdbreg,__regs) CYG_EMPTY_STATEMENT +# define GDB_STUB_SAVEDREG_FPU_EXCEPTION_GET(__gdbreg,__regs) CYG_EMPTY_STATEMENT +# define GDB_STUB_SAVEDREG_FPU_EXCEPTION_SET(__gdbreg,__regs) CYG_EMPTY_STATEMENT + +#endif// CYGHWR_HAL_CORTEXM_FPU + + +//========================================================================== +#endif //CYGONCE_CORTEXM_FPU_H diff --git a/packages/hal/cortexm/arch/current/include/cortexm_regs.h b/packages/hal/cortexm/arch/current/include/cortexm_regs.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/cortexm_regs.h @@ -0,0 +1,118 @@ +#ifndef CYGONCE_CORTEXM_REGS_H +#define CYGONCE_CORTEXM_REGS_H +//========================================================================== +// +// cortexm_regs.h +// +// Cortex-M architecture, special machine instruction wrappers +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Sergei Gavrikov +// Date: 2011-06-18 +// Description: C wrappers for some special architecture instructions. +// +//####DESCRIPTIONEND#### +// +//========================================================================= + +#ifndef __ASSEMBLER__ + +//-------------------------------------------------------------------------- +// No operation +#define CYGARC_NOP() { __asm__ volatile( "nop" ); } + + +//--------------------------------------------------------------------------- +// Change processor state instructions + +// Disable / enable interrupts +#define CYGARC_CPSID( _flags_ ) __asm__ volatile ("cpsid " #_flags_ "\n") + +// Enable interrupts and fault handlers (clear FAULTMASK) +#define CYGARC_CPSIE( _flags_ ) __asm__ volatile ("cpsie " #_flags_ "\n") + +//--------------------------------------------------------------------------- +// Byte swapping instructions + +// Reverse word +#define CYGARC_REV( _swapped_, _origin_ ) \ + __asm__ volatile ("rev %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +// Reverse halfwords +#define CYGARC_REV16( _swapped_, _origin_ ) \ + __asm__ volatile ("rev16 %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +// Reverse signed halfword +#define CYGARC_REVSH( _swapped_, _origin_ ) \ + __asm__ volatile ("revsh %0, %1\n" : "=r"(_swapped_) : "r"(_origin_)) + +//------------------------------------------------------------------------ +// Barrier instructions +// Data Synchronization Barrier +#define CYGARC_DSB() __asm__ volatile( "dsb" ) +// Instruction Synchronization Barrier +#define CYGARC_ISB() __asm__ volatile( "isb" ) + +#define HAL_MEMORY_BARRIER() \ +CYG_MACRO_START \ + CYGARC_DSB(); \ + CYGARC_ISB(); \ +CYG_MACRO_END + +//---------------------------------------------------------------------------- +// MSR instuctions +// Special register instructions +#define CYGARC_MSR(_reg_, _val_) \ + __asm__ volatile ("msr " #_reg_", %0\n" : : "r"(_val_)) + +#define CYGARC_MRS(_val_, _reg_) \ + __asm__ volatile ("mrs %0," #_reg_ "\n" : "=r"(_val_) : ) + +//---------------------------------------------------------------------------- +// VFP instuctions +// Special floating point unit register instructions +#define CYGARC_VMSR(_reg_, _val_) \ + __asm__ volatile ("vmsr " #_reg_", %0\n" : : "r"(_val_)) + +#define CYGARC_VMRS(_val_, _reg_) \ + __asm__ volatile ("vmrs %0," #_reg_ "\n" : "=r"(_val_) : ) + +#endif // __ASSEMBLER__ + +//========================================================================== +#endif // CYGONCE_CORTEXM_REGS_H diff --git a/packages/hal/cortexm/arch/current/include/cortexm_stub.h b/packages/hal/cortexm/arch/current/include/cortexm_stub.h --- a/packages/hal/cortexm/arch/current/include/cortexm_stub.h +++ b/packages/hal/cortexm/arch/current/include/cortexm_stub.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -41,57 +41,64 @@ //========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): nickg +// Author(s): nickg +// Contributor(s): ilijak // Date: 2008-07-30 // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ +#include +#include + +#ifdef CYGHWR_HAL_CORTEXM_FPU +#include +#endif #ifdef __cplusplus extern "C" { #endif - +#ifndef CYGHWR_HAL_CORTEXM_FPU // The ARM has float (and possibly other coprocessor) registers that are // larger than it can hold in a target_register_t. -#define TARGET_HAS_LARGE_REGISTERS +# define TARGET_HAS_LARGE_REGISTERS // ARM stub has special needs for register handling (not all regs are the // the same size), so special put_register and get_register are provided. -#define CYGARC_STUB_REGISTER_ACCESS_DEFINED 1 +# define CYGARC_STUB_REGISTER_ACCESS_DEFINED 1 -#define NUMREGS (16+8+2) // 16 GPR, 8 FPR (unused), 2 PS - -#define REGSIZE( _x_ ) (((_x_) < F0 || (_x_) >= FPS) ? 4 : 12) +# define NUMREGS (16+8+2) // 16 GPR, 8 FPR (unused), 2 PS -// Comment out to allow for default gdb stub packet buffer which is larger. -// #define NUMREGBYTES ((16*4)+(8*12)+(2*4)) +# define REGSIZE( _x_ ) (((_x_) < F0 || (_x_) >= FPS) ? 4 : 12) -#ifndef TARGET_REGISTER_T_DEFINED -#define TARGET_REGISTER_T_DEFINED +# ifndef TARGET_REGISTER_T_DEFINED +# define TARGET_REGISTER_T_DEFINED typedef unsigned long target_register_t; -#endif +# endif enum regnames { - R0, R1, R2, R3, R4, R5, R6, R7, + R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, FP, IP, SP, LR, PC, - F0, F1, F2, F3, F4, F5, F6, F7, + F0, F1, F2, F3, F4, F5, F6, F7, FPS, PS }; -#define HAL_STUB_REGISTERS_SIZE \ - ((sizeof(HAL_CORTEXM_GDB_Registers) + sizeof(target_register_t) - 1) / sizeof(target_register_t)) +#endif // CYGHWR_HAL_CORTEXM_FPU + +# define HAL_STUB_REGISTERS_SIZE \ + ((sizeof(HAL_CORTEXM_GDB_Registers) + sizeof(target_register_t) - 1) / sizeof(target_register_t)) -#define PS_N 0x80000000 -#define PS_Z 0x40000000 -#define PS_C 0x20000000 -#define PS_V 0x10000000 +# define PS_N 0x80000000 +# define PS_Z 0x40000000 +# define PS_C 0x20000000 +# define PS_V 0x10000000 typedef enum regnames regnames_t; //------------------------------------------------------------------------ - + /* Given a trap value TRAP, return the corresponding signal. */ extern int __computeSignal (unsigned int trap_number); diff --git a/packages/hal/cortexm/arch/current/include/fpv4_sp_d16.h b/packages/hal/cortexm/arch/current/include/fpv4_sp_d16.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/fpv4_sp_d16.h @@ -0,0 +1,285 @@ +#ifndef CYGONCE_FPV4_SP_D16_H +#define CYGONCE_FPV4_SP_D16_H +//========================================================================== +// +// fpv4_sp_d16.h +// +// FPv4spD16 Floating Point Unit definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-04-25 +// Description: FPv4spD16 Floating Point Unit definitions and macros +// Usage: include +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL +#define CYGARC_CORTEXM_FPU_EXC_AUTOSAVE +#endif + +//=========================================================================== +// Floating-point Context Control Register +#define CYGARC_REG_FPU_FPCCR 0xE000EF34 + +#define CYGARC_REG_FPU_FPCCR_LSPACT 0x1 +#define CYGARC_REG_FPU_FPCCR_USER 0x2 +#define CYGARC_REG_FPU_FPCCR_THREAD 0x8 +#define CYGARC_REG_FPU_FPCCR_HFRDY 0x10 +#define CYGARC_REG_FPU_FPCCR_MMRDY 0x20 +#define CYGARC_REG_FPU_FPCCR_BFRDY 0x40 +#define CYGARC_REG_FPU_FPCCR_MONRDY 0x100 +#define CYGARC_REG_FPU_FPCCR_LSPEN 0x40000000 +#define CYGARC_REG_FPU_FPCCR_ASPEN 0x80000000 + +#define HAL_CORTEXM_FPU_ENABLE() \ +CYG_MACRO_START \ + cyg_uint32 regval; \ + HAL_READ_UINT32(CYGARC_REG_FPU_CPACR, regval); \ + regval |= CYGARC_REG_FPU_CPACR_ENABLE; \ + HAL_WRITE_UINT32(CYGARC_REG_FPU_CPACR, regval); \ + HAL_MEMORY_BARRIER(); \ +CYG_MACRO_END + +#define HAL_CORTEXM_FPU_DISABLE() \ +CYG_MACRO_START \ + cyg_uint32 regval; \ + HAL_READ_UINT32(CYGARC_REG_FPU_CPACR, regval); \ + regval &= ~CYGARC_REG_FPU_CPACR_ENABLE; \ + HAL_WRITE_UINT32(CYGARC_REG_FPU_CPACR, regval); \ + HAL_MEMORY_BARRIER(); \ +CYG_MACRO_END + +#ifndef __ASSEMBLER__ +__externC void hal_init_fpu(void); +#endif + +// Floating-point Context Address Register +#define CYGARC_REG_FPU_FPCAR 0xE000EF38 + +// Floating-point Default Status Control Register +#define CYGARC_REG_FPU_FPDSCR 0xE000EF3C + +#define CYGARC_REG_FPU_FPDSCR_FZ BIT_(24) +#define CYGARC_REG_FPU_FPDSCR_DN BIT_(25) +#define CYGARC_REG_FPU_FPDSCR_AHP BIT_(26) + +#define CYGARC_REG_FPU_FPDSCR_ROUND(__mode) VALUE_(22, (__mode)) +// where __mode is: +#define CYGARC_REG_FPU_FPDSCR_ROUND_RN 0 +#define CYGARC_REG_FPU_FPDSCR_ROUND_RP 1 +#define CYGARC_REG_FPU_FPDSCR_ROUND_RM 2 +#define CYGARC_REG_FPU_FPDSCR_ROUND_RZ 3 + +//========================================================================== +// FPU Context +#define HAL_SAVEDREGISTERS_WITH_FPU 0x80 + +#define HAL_SAVEDREGISTERS_THREAD_FPU (HAL_SAVEDREGISTERS_THREAD | \ + HAL_SAVEDREGISTERS_WITH_FPU) + +#define HAL_SAVEDREGISTERS_EXCEPTION_FPU (HAL_SAVEDREGISTERS_EXCEPTION | \ + HAL_SAVEDREGISTERS_WITH_FPU) + +#ifndef CYGARC_CORTEXM_FPU_EXC_AUTOSAVE + +// Without automatic contex saving during exception or interrupt +# define HAL_SAVEDREGISTERS_FPU_THREAD_CONTEXT_SIZE (HAL_SAVEDREG_THREAD_FPU_N*4+4) +# define HAL_SAVEDREG_AUTO_FRAME_SIZE (8*4) + +# define HAL_SAVEDREG_AUTO_FPU_EXCEPTION_S + +#else // !CYGARC_CORTEXM_FPU_EXC_AUTOSAVE + +// With automatic contex saving during exception or interrupt enabled +# if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL + +# define HAL_SAVEDREG_AUTO_EXCEPTION_FPU_N 16 +# define HAL_SAVEDREG_AUTO_FRAME_SIZE (8*4 + 16*4 + 4 + 4) + +// HAL_SavedRegisters entries for floating point registers +// see hal_arch.h for HAL_SavedRegisters definition. + +# define HAL_SAVEDREG_AUTO_FPU_EXCEPTION_S \ + cyg_uint32 s_auto[HAL_SAVEDREG_AUTO_EXCEPTION_FPU_N]; \ + cyg_uint32 fpscr_auto; \ + cyg_uint32 aligner + +# else // defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL +# error "Automatic FPU context saving is not supported in LAZY and NONE modes." +# endif // defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL +#endif // !CYGARC_CORTEXM_FPU_EXC_AUTOSAVE + +// Common for AUTOSAVE and non AUTOSAVE +#if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +// HAL_SavedRegisters entries for floating point registers +// see hal_arch.h for HAL_SavedRegisters definition. + +# define HAL_SAVEDREG_THREAD_FPU_N 32 +# define HAL_SAVEDREG_EXCEPTION_FPU_N 32 + +# define HAL_SAVEDREG_FPU_THREAD_S \ + cyg_uint32 fpscr; \ + cyg_uint32 s[HAL_SAVEDREG_THREAD_FPU_N] + +# define HAL_SAVEDREG_FPU_EXCEPTION_S \ + cyg_uint32 s[HAL_SAVEDREG_EXCEPTION_FPU_N]; \ + cyg_uint32 fpscr; \ + cyg_uint32 cpacr + +// Thread FP context initialization +# define HAL_THREAD_INIT_FPU_REGS(__regs_p) \ +CYG_MACRO_START \ + int __reg_i; \ + for(__reg_i = 0; __reg_i < HAL_SAVEDREG_THREAD_FPU_N; __reg_i++) \ + (__regs_p)->u.thread.s[__reg_i] = 0; \ +CYG_MACRO_END + +# define HAL_THREAD_INIT_FPU_CONTEXT(__regs_p) \ +CYG_MACRO_START \ + HAL_THREAD_INIT_FPU_REGS(__regs_p); \ + (__regs_p)->u.thread.fpscr = 0; \ +CYG_MACRO_END +#else //defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +# define HAL_SAVEDREG_FPU_THREAD_S +# define HAL_THREAD_INIT_FPU_CONTEXT(__regs) CYG_EMPTY_STATEMENT + +#endif //defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +//========================================================================== +// hal_arch.h GDB stub support + +// Register layout expected by GDB VFP +#ifndef __ASSEMBLER__ +typedef struct { + cyg_uint32 gpr[16]; + cyg_uint32 xpsr; + cyg_uint32 s[32]; + cyg_uint32 fpscr; +} HAL_CORTEXM_GDB_Registers; +#endif + +#if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +# define GDB_STUB_SAVEDREG_FRAME_TYPE(__regs) \ + ((__regs)->u.type & ~HAL_SAVEDREGISTERS_WITH_FPU) + +# define GDB_STUB_SAVEDREG_FPU_THREAD_GET(__gdbreg,__regs) \ +CYG_MACRO_START \ + cyg_uint32 reg_i; \ + for( reg_i = 0; reg_i < HAL_SAVEDREG_THREAD_FPU_N; reg_i++ ) \ + (__gdbreg)->s[reg_i] = (__regs)->u.thread.s[reg_i]; \ + (__gdbreg)->fpscr = (__regs)->u.thread.fpscr; \ +CYG_MACRO_END + +# define GDB_STUB_SAVEDREG_FPU_THREAD_SET(__gdbreg,__regs) \ +CYG_MACRO_START \ + cyg_uint32 reg_i; \ + for( reg_i = 0; reg_i < HAL_SAVEDREG_THREAD_FPU_N; reg_i++ ) \ + (__regs)->u.thread.s[reg_i] = (__gdbreg)->s[reg_i]; \ + (__regs)->u.thread.fpscr = (__gdbreg)->fpscr; \ +CYG_MACRO_END + +#else // defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +# define GDB_STUB_SAVEDREG_FRAME_TYPE(__regs) ((__regs)->u.type) +# define GDB_STUB_SAVEDREG_FPU_THREAD_GET(__gdbreg,__regs) CYG_EMPTY_STATEMENT +# define GDB_STUB_SAVEDREG_FPU_THREAD_SET(__gdbreg,__regs) CYG_EMPTY_STATEMENT + +#endif // defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +#define GDB_STUB_SAVEDREG_FPU_EXCEPTION_GET(__gdbreg,__regs) \ +CYG_MACRO_START \ + cyg_uint32 reg_i; \ + for( reg_i = 0; reg_i < HAL_SAVEDREG_EXCEPTION_FPU_N; reg_i++ ) \ + (__gdbreg)->s[reg_i] = (__regs)->u.exception.s[reg_i]; \ + (__gdbreg)->fpscr = (__regs)->u.exception.fpscr; \ +CYG_MACRO_END + +#define GDB_STUB_SAVEDREG_FPU_EXCEPTION_SET(__gdbreg,__regs) \ +CYG_MACRO_START \ + cyg_uint32 reg_i; \ + for( reg_i = 0; reg_i < HAL_SAVEDREG_EXCEPTION_FPU_N; reg_i++ ) \ + (__regs)->u.exception.s[reg_i] = (__gdbreg)->s[reg_i]; \ + (__regs)->u.exception.fpscr = (__gdbreg)->fpscr; \ + if(*(cyg_uint32 *)CYGARC_REG_FPU_FPCCR & CYGARC_REG_FPU_FPCCR_ASPEN) { \ + for( reg_i = 0; reg_i < HAL_SAVEDREG_AUTO_EXCEPTION_FPU_N; reg_i++ ) \ + (__regs)->u.exception.s_auto[reg_i] = (__regs)->u.exception.s[reg_i]; \ + (__regs)->u.exception.fpscr_auto = (__regs)->u.exception.fpscr; \ + } \ +CYG_MACRO_END + +//========================================================================== +// hal_arch.h Minimal and sensible stack sizes: +// Override value in hal_arch.h +#define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * (20+32+4+4)) + +// GDB stub ================================================================== +// cortexm_stub.h definitions for FPV4-SP-D16 + +// The Cortex-M4F double registers are larger then target_register_t. +#define TARGET_HAS_LARGE_REGISTERS + +// Cortex-M4F stub register handling macros +#define CYGARC_STUB_REGISTER_ACCESS_DEFINED 1 +#define NUMREGS (FPSCR+1) // 16 GPR, XPSR, 10 non existent, 16 VFP, FPSCR +#define REGSIZE( _x_ ) (_x_ <= PC ? 4 : \ + (_x_ < XPSR ? 0 : \ + (_x_ == XPSR ? 4 : \ + (((_x_ >= VD0) && (_x_ <= VD15)) ? 8 : \ + (_x_ == FPSCR ? 4 : 0 ))))) +#ifndef __ASSEMBLER__ +# ifndef TARGET_REGISTER_T_DEFINED +# define TARGET_REGISTER_T_DEFINED +typedef unsigned long target_register_t; +# endif + +enum regnames { + R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, SP, LR, PC, + XPSR = 25, + VD0 = 26, VD1, VD2, VD3, VD4, VD5, VD6, VD7, + VD8, VD9, VD10, VD11, VD12, VD13, VD14, VD15, + FPSCR +}; +#endif // __ASSEMBLER__ + +//========================================================================== +#endif //CYGONCE_FPV4_SP_D16_H diff --git a/packages/hal/cortexm/arch/current/include/fpv4_sp_d16_libm.h b/packages/hal/cortexm/arch/current/include/fpv4_sp_d16_libm.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/fpv4_sp_d16_libm.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_FPV4_SP_D16_LIBM_H +#define CYGONCE_FPV4_SP_D16_LIBM_H +//========================================================================== +// +// fpv4_sp_d16_libm.h +// +// FPv4spD16 Floating Point Unit mathematical functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2013-06-10 +// Description: FPv4spD16 Floating Point Unit builtin mathematical functions. +// Usage: include +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#ifdef CYGSEM_LIBM_IEEE_API_INLINE + +// Builtin mathematical functions +#define __ieee754_sqrtf(__x) __builtin_sqrtf(__x) + +#endif // CYGSEM_LIBM_IEEE_API_INLINE + +//========================================================================== +#endif //CYGONCE_FPV4_SP_D16_LIBM_H diff --git a/packages/hal/cortexm/arch/current/include/hal_arch.h b/packages/hal/cortexm/arch/current/include/hal_arch.h --- a/packages/hal/cortexm/arch/current/include/hal_arch.h +++ b/packages/hal/cortexm/arch/current/include/hal_arch.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -41,19 +41,28 @@ //========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): nickg -// Date: 2008-07-30 -// Description: Define architecture abstractions +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2008-07-30 +// Description: Define architecture abstractions // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ + +#ifndef __ASSEMBLER__ #include #include #include #include +#include + +#include + +#endif //__ASSEMBLER__ //========================================================================== // CPU save state @@ -63,30 +72,43 @@ // for each context. This makes the GDB state get/put slightly more // complex, but that is a suitable compromise. -typedef struct +#define HAL_SAVEDREGISTERS_EXCEPTION 1 +#define HAL_SAVEDREGISTERS_THREAD 2 +#define HAL_SAVEDREGISTERS_INTERRUPT 3 + +#ifndef __ASSEMBLER__ + +typedef struct { union { cyg_uint32 type; // State type + // Thread struct { cyg_uint32 type; // State type cyg_uint32 basepri; // BASEPRI cyg_uint32 sp; // SP (R13) + + HAL_SAVEDREG_FPU_THREAD_S; // Floating Point Unit context + cyg_uint32 r[13]; // R0..R12 cyg_uint32 pc; // PC/LR } thread; + // Exception struct { cyg_uint32 type; // State type cyg_uint32 vector; // Exception vector number cyg_uint32 basepri; // BASEPRI - + cyg_uint32 r4_11[8]; // Remaining CPU registers cyg_uint32 xlr; // Exception return LR - +#ifdef CYGSEM_HAL_DEBUG_FPU + HAL_SAVEDREG_FPU_EXCEPTION_S; // Floating Point Unit context +#endif // The following are saved and restored automatically by the CPU // for exceptions or interrupts. @@ -98,12 +120,15 @@ typedef struct cyg_uint32 lr; cyg_uint32 pc; cyg_uint32 psr; + + HAL_SAVEDREG_AUTO_FPU_EXCEPTION_S; // Floating Point Unit context } exception; + // Interrupt struct { cyg_uint32 type; // State type - + // The following are saved and restored automatically by the CPU // for exceptions or interrupts. @@ -115,21 +140,22 @@ typedef struct cyg_uint32 lr; cyg_uint32 pc; cyg_uint32 psr; - + + HAL_SAVEDREG_AUTO_FPU_EXCEPTION_S; // Floating Point Unit context } interrupt; } u; } HAL_SavedRegisters; -#define HAL_SAVEDREGISTERS_EXCEPTION 1 -#define HAL_SAVEDREGISTERS_THREAD 2 -#define HAL_SAVEDREGISTERS_INTERRUPT 3 - //========================================================================== // Thread context initialization +#ifndef HAL_THREAD_INIT_FPU_CONTEXT +#define HAL_THREAD_INIT_FPU_CONTEXT(__regs) CYG_EMPTY_STATEMENT +#endif + #define HAL_THREAD_INIT_CONTEXT( __sparg, __thread, __entry, __id ) \ -{ \ +CYG_MACRO_START \ register CYG_WORD __sp = ((CYG_WORD)__sparg) & ~7; \ register CYG_WORD *__ep = (CYG_WORD *)(__sp -= sizeof(CYG_WORD)); \ register HAL_SavedRegisters *__regs; \ @@ -139,15 +165,16 @@ typedef struct __regs->u.type = HAL_SAVEDREGISTERS_THREAD; \ for( __i = 1; __i < 13; __i++ ) \ __regs->u.thread.r[__i] = 0; \ + HAL_THREAD_INIT_FPU_CONTEXT(__regs); \ *__ep = (CYG_WORD)(__entry); \ __regs->u.thread.sp = (CYG_WORD)(__sp); \ __regs->u.thread.r[0] = (CYG_WORD)(__thread); \ __regs->u.thread.r[1] = (CYG_WORD)(__id); \ - __regs->u.thread.r[11] = (CYG_WORD)(__ep); \ + __regs->u.thread.r[11] = (CYG_WORD)(__ep); \ __regs->u.thread.pc = (CYG_WORD)__entry; \ __regs->u.thread.basepri = 0; \ __sparg = (CYG_ADDRESS)__regs; \ -} +CYG_MACRO_END //========================================================================== // Context switch macros. @@ -168,17 +195,30 @@ typedef struct //========================================================================== // Fetch PC from saved state - -#define CYGARC_HAL_GET_PC_REG(__regs,__val) \ -{ \ - switch( (__regs)->u.type ) \ - { \ - case HAL_SAVEDREGISTERS_THREAD : (__val) = (__regs)->u.thread.pc; break; \ +#if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL || \ + defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +#define CYGARC_HAL_GET_PC_REG(__regs,__val) \ +{ \ + switch(GDB_STUB_SAVEDREG_FRAME_TYPE(__regs)) \ + { \ + case HAL_SAVEDREGISTERS_THREAD: (__val) = (__regs)->u.thread.pc; break; \ case HAL_SAVEDREGISTERS_EXCEPTION: (__val) = (__regs)->u.exception.pc; break; \ case HAL_SAVEDREGISTERS_INTERRUPT: (__val) = (__regs)->u.interrupt.pc; break; \ - } \ + default: (__val) = 0; \ + } \ } - +#else +#define CYGARC_HAL_GET_PC_REG(__regs,__val) \ +{ \ + switch( (__regs)->u.type ) \ + { \ + case HAL_SAVEDREGISTERS_THREAD : (__val) = (__regs)->u.thread.pc; break; \ + case HAL_SAVEDREGISTERS_EXCEPTION: (__val) = (__regs)->u.exception.pc; break; \ + case HAL_SAVEDREGISTERS_INTERRUPT: (__val) = (__regs)->u.interrupt.pc; break; \ + default: (__val) = 0; \ + } \ +} +#endif //========================================================================== // Exception handling function // This function is defined by the kernel according to this prototype. It is @@ -220,7 +260,7 @@ externC void cyg_hal_deliver_exception( // Breakpoint support // HAL_BREAKPOINT() is a code sequence that will cause a breakpoint to happen // if executed. -// HAL_BREAKINST is the value of the breakpoint instruction and +// HAL_BREAKINST is the value of the breakpoint instruction and // HAL_BREAKINST_SIZE is its size in bytes. #define HAL_BREAKINST 0xbebe // BKPT @@ -240,7 +280,8 @@ externC void cyg_hal_deliver_exception( //========================================================================== // GDB support -// Register layout expected by GDB +#ifdef CYGARC_CORTEXM_GDB_REG_FPA +// Register layout expected by GDB FPA typedef struct { cyg_uint32 gpr[16]; @@ -253,8 +294,9 @@ typedef struct cyg_uint32 f6[3]; cyg_uint32 f7[3]; cyg_uint32 fps; - cyg_uint32 ps; + cyg_uint32 xpsr; } HAL_CORTEXM_GDB_Registers; +#endif // Translate a stack pointer as saved by the thread context macros // into a pointer to a HAL_SavedRegisters structure. On the Cortex-M @@ -312,7 +354,9 @@ typedef cyg_uint32 hal_jmp_buf[CYGARC_JM #define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 20) // Stack needed for a context switch +#if !defined CYGNUM_HAL_STACK_CONTEXT_SIZE #define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * 20) +#endif // Interrupt + call to ISR, interrupt_end() and the DSR #define CYGNUM_HAL_STACK_INTERRUPT_SIZE \ @@ -340,6 +384,7 @@ typedef cyg_uint32 hal_jmp_buf[CYGARC_JM #define CYGARC_HAL_SAVE_GP() #define CYGARC_HAL_RESTORE_GP() +#endif // __ASSEMBLER__ + //========================================================================== #endif //CYGONCE_HAL_ARCH_H - diff --git a/packages/hal/cortexm/arch/current/include/hal_arch.inc b/packages/hal/cortexm/arch/current/include/hal_arch.inc new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/include/hal_arch.inc @@ -0,0 +1,115 @@ +/*========================================================================== +// +// hal_arch.inc +// +// Cortex-M exception vector macros +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors(s): +// Date: 2012-07-08 +// Description: This file defines some GAS macros exception VSRs. +// +//####DESCRIPTIONEND#### +// +//======================================================================== +*/ + +#ifdef CYGHWR_HAL_CORTEXM_FPU + +# ifdef CYGINT_HAL_FPV4_SP_D16 + +//============================================================================ +// LAZY context switching scheme keeps FPU disabled for the threads that +// don't use floating point. We need to enable it before we save FPU context +// in order to avoid Usage Fault exception. + + .macro hal_fpu_enable + ldr r1,=CYGARC_REG_FPU_CPACR + ldr r2,[r1] + stmdb r0!,{r2} // Save thread's CPACR state + orr r2,#CYGARC_REG_FPU_CPACR_ENABLE + str r2,[r1] + .endm + +//============================================================================ +// Restore thread's FPU usage state. +// undo hal_fpu_enable + + .macro hal_fpu_undo_enable + ldmia r0!,{r2} // Retrieve previous thread's CPACR state + ldr r1,=CYGARC_REG_FPU_CPACR + str r2,[r1] + .endm + +//============================================================================ +// Store FPU context during exception if FPU was disabled then enamble it. + + .macro hal_fpu_exc_push + hal_fpu_enable + vmrs r1,fpscr + stmdb r0!,{r1} + vstmdb.f64 r0!,{d0-d15} + .endm + +//============================================================================ +// Restore FPU context during exception and undo FPU enable. + + .macro hal_fpu_exc_pop + vldmia.f64 r0!,{d0-d15} + ldmia r0!,{r1} + vmsr fpscr,r1 + hal_fpu_undo_enable + .endm + +//============================================================================ +// Make fake fpu frame for hal_pendable_svc_vsr + + .macro hal_fpu_isr_fake_frame_push + sub r12,#4 + vmrs r1,fpscr + stmdb r12!,{r1} + vstmdb.f32 r12!,{s0-s15} + .endm + +# else // CYGINT_HAL_FPV4_SP_D16 +# error Unknown Floating Point Unit! +# endif // CYGINT_HAL_FPV4_SP_D16 + +#endif //CYGHWR_HAL_CORTEXM_FPU + +// end of hal_arch.inc diff --git a/packages/hal/cortexm/arch/current/include/hal_intr.h b/packages/hal/cortexm/arch/current/include/hal_intr.h --- a/packages/hal/cortexm/arch/current/include/hal_intr.h +++ b/packages/hal/cortexm/arch/current/include/hal_intr.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -47,7 +47,8 @@ // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include #include @@ -71,7 +72,7 @@ #define CYGNUM_HAL_VECTOR_MEMORY_MAN 4 // Memory management (M3) #define CYGNUM_HAL_VECTOR_BUS_FAULT 5 // Bus Fault #define CYGNUM_HAL_VECTOR_USAGE_FAULT 6 // Usage Fault -#define CYGNUM_HAL_VECTOR_RESERVED_07 7 +#define CYGNUM_HAL_VECTOR_RESERVED_07 7 #define CYGNUM_HAL_VECTOR_RESERVED_08 8 #define CYGNUM_HAL_VECTOR_RESERVED_09 9 #define CYGNUM_HAL_VECTOR_RESERVED_10 10 @@ -92,13 +93,18 @@ #define CYGNUM_HAL_INTERRUPT_SYS_TICK 0 #define CYGNUM_HAL_INTERRUPT_EXTERNAL 1 -#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_SYS_TICK //========================================================================== // Include variant definitions here. #include +// Variant or platform allowed to override these definitions to use +// a different RTC +#ifndef CYGNUM_HAL_INTERRUPT_RTC +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_SYS_TICK +#endif + //========================================================================== // Exception vectors. // @@ -163,7 +169,7 @@ CYG_MACRO_END // // Interrupt handler/data/object tables plus functions and macros to // manipulate them. - + __externC volatile CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; __externC volatile CYG_ADDRWORD hal_interrupt_data [CYGNUM_HAL_ISR_COUNT]; __externC volatile CYG_ADDRESS hal_interrupt_objects [CYGNUM_HAL_ISR_COUNT]; @@ -235,7 +241,7 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; "mrs %0, basepri \n" \ "mov r1,%1 \n" \ "msr basepri,r1 \n" \ - : "=r" (__old) \ + : "=&r" (__old) \ : "r" (CYGNUM_HAL_CORTEXM_PRIORITY_MAX)\ : "r1" \ ); @@ -298,7 +304,7 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; { \ __asm__ volatile ( \ "ldr r3,=hal_call_dsrs_vsr \n" \ - "swi \n" \ + "swi 0 \n" \ : \ : \ : "r3" \ @@ -321,10 +327,20 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; //========================================================================== // Clock control // -// This uses the CPU SysTick timer. +// This uses the CPU SysTick timer. Variant or platform allowed to override +// these definitions + +#ifndef CYGHWR_HAL_CLOCK_DEFINED __externC cyg_uint32 hal_cortexm_systick_clock; +// Select the clock source of the system tick timer +#ifdef CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE_EXTERNAL + #define CYGARC_REG_SYSTICK_CSR_CLK_SRC CYGARC_REG_SYSTICK_CSR_CLK_EXT +#elif defined(CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE_INTERNAL) + #define CYGARC_REG_SYSTICK_CSR_CLK_SRC CYGARC_REG_SYSTICK_CSR_CLK_INT +#endif + #define HAL_CLOCK_INITIALIZE( __period ) \ { \ cyg_uint32 __p = __period; \ @@ -333,12 +349,12 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; __p ); \ HAL_WRITE_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_CSR, \ CYGARC_REG_SYSTICK_CSR_ENABLE | \ - CYGARC_REG_SYSTICK_CSR_CLK_EXT ); \ + CYGARC_REG_SYSTICK_CSR_CLK_SRC ); \ } #define HAL_CLOCK_RESET( __vector, __period ) \ { \ - cyg_uint32 __csr; \ + cyg_uint32 __csr CYGBLD_ATTRIB_UNUSED; \ HAL_READ_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_CSR, __csr ); \ } @@ -352,8 +368,20 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; *(__pvalue) = __value; \ } +#define HAL_CLOCK_READ_NS( __pvalue ) \ +CYG_MACRO_START \ + cyg_uint32 __period, __value; \ + HAL_READ_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_RELOAD, __period ); \ + HAL_READ_UINT32(CYGARC_REG_SYSTICK_BASE+CYGARC_REG_SYSTICK_VALUE, __value ); \ + __value = (( __period + 1 ) - __value) * 1000; \ + __value /= (hal_cortexm_systick_clock / 1000000 ); \ + *(__pvalue) = __value; \ +CYG_MACRO_END + #define HAL_CLOCK_LATENCY( __pvalue ) HAL_CLOCK_READ( __pvalue ) +#endif // CYGHWR_HAL_CLOCK_DEFINED + //========================================================================== // HAL_DELAY_US(). // @@ -379,4 +407,3 @@ typedef cyg_uint32 CYG_INTERRUPT_STATE; //========================================================================== #endif //CYGONCE_HAL_INTR_H - diff --git a/packages/hal/cortexm/arch/current/include/hal_io.h b/packages/hal/cortexm/arch/current/include/hal_io.h --- a/packages/hal/cortexm/arch/current/include/hal_io.h +++ b/packages/hal/cortexm/arch/current/include/hal_io.h @@ -47,7 +47,8 @@ // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include #include @@ -92,7 +93,7 @@ #define CYGARC_REG_NVIC_BASE 0xE000E000 -#if defined(CYGHWR_HAL_CORTEXM_M3) +#if defined(CYGHWR_HAL_CORTEXM_M3) || defined(CYGHWR_HAL_CORTEXM_M4) #define CYGARC_REG_NVIC_TYPE 0x004 #endif @@ -117,7 +118,7 @@ #define CYGARC_REG_NVIC_PR(__intr) (CYGARC_REG_NVIC_PR0+(__intr)) -#if defined(CYGHWR_HAL_CORTEXM_M3) +#if defined(CYGHWR_HAL_CORTEXM_M3) || defined(CYGHWR_HAL_CORTEXM_M4) #define CYGARC_REG_NVIC_CPUID 0xD00 #define CYGARC_REG_NVIC_ICSR 0xD04 @@ -179,7 +180,9 @@ #define CYGARC_REG_NVIC_VTOR_TBLOFF(__o) VALUE_(7,__o) #define CYGARC_REG_NVIC_VTOR_TBLBASE_CODE 0 +#ifndef CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM #define CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM BIT_(29) +#endif // AI/RCR @@ -213,12 +216,22 @@ #define CYGARC_REG_NVIC_SHCSR_BUSFAULTACT BIT_(1) #define CYGARC_REG_NVIC_SHCSR_MEMFAULTACT BIT_(0) +// Usage Fault register + +#define CYGARC_REG_UFSR 0xE000ED2A +#define CYGARC_REG_UFSR_DIVBYZERO BIT_(9) +#define CYGARC_REG_UFSR_UNALIGNED BIT_(8) +#define CYGARC_REG_UFSR_NOCP BIT_(3) +#define CYGARC_REG_UFSR_INVPC BIT_(2) +#define CYGARC_REG_UFSR_INVSTATE BIT_(1) +#define CYGARC_REG_UFSR_UNDEFINSTR BIT_(0) + #endif //========================================================================== // Debug registers -#if defined(CYGHWR_HAL_CORTEXM_M3) +#if defined(CYGHWR_HAL_CORTEXM_M3) || defined(CYGHWR_HAL_CORTEXM_M4) #define CYGARC_REG_DEBUG_BASE 0xE000EDF0 @@ -316,7 +329,7 @@ typedef volatile CYG_ADDRWORD HAL_IO_REG //----------------------------------------------------------------------------- // 16 bit access. // Individual and vectorized access to 16 bit registers. - + #define HAL_READ_UINT16( _register_, _value_ ) \ ((_value_) = *((volatile CYG_WORD16 *)(_register_))) @@ -395,7 +408,7 @@ typedef volatile CYG_ADDRWORD HAL_IO_REG #endif // !HAL_IO_MACROS_DEFINED -// Enforce a flow "barrier" to prevent optimizing compiler from reordering +// Enforce a flow "barrier" to prevent optimizing compiler from reordering // operations. #define HAL_IO_BARRIER() diff --git a/packages/hal/cortexm/arch/current/src/context.S b/packages/hal/cortexm/arch/current/src/context.S --- a/packages/hal/cortexm/arch/current/src/context.S +++ b/packages/hal/cortexm/arch/current/src/context.S @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -39,13 +39,15 @@ //========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): nickg -// Date: 2008-07-30 -// Description: This file contains thread context switch code. +// Author(s): nickg, ilijak (FPU support) +// Contributor(s): +// Date: 2008-07-30 +// Description: This file contains thread context switch code. // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include #include @@ -54,18 +56,150 @@ #include #endif +#ifdef CYGHWR_HAL_CORTEXM_FPU +#include +#include // Optional Floating Point Unit + +#endif + //========================================================================== .syntax unified .thumb .text - + //========================================================================== // Context switch // // R0 contains a pointer to the SP of the thread to load, R1 contains -// a pointer to the SP of the current thread. - +// a pointer to the SP of the current thread. + +#ifdef CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +//========================================================================== +// LAZY Context switch +// +// Save the FPU registers only for threads that use FPU. +// + + .globl hal_thread_switch_context + .thumb + .thumb_func + .type hal_thread_switch_context, %function +hal_thread_switch_context: + + push {r0-r12,lr} // Push all savable register + ldr r7,=CYGARC_REG_FPU_CPACR // + ldr r6,[r7] + tst r6,#CYGARC_REG_FPU_CPACR_ENABLE // Is FPU enabled? + beq lazy_float_push // N: Be lazy. + vmrs r5,fpscr // Y: Save FPU context + vpush.f64 {d0-d15} // Push FPU registers + push {r5} // together with FPSCR + mov r2,#HAL_SAVEDREGISTERS_THREAD_FPU // Set state type: thread with FPU + b float_push_join + lazy_float_push: + mov r2,#HAL_SAVEDREGISTERS_THREAD + sub sp,#HAL_SAVEDREGISTERS_FPU_THREAD_CONTEXT_SIZE + float_push_join: + mrs r3,basepri // Get priority base register + mov r4,sp // Get SP (for info only) + push {r2-r4} // Push them + str sp,[r1] // Save SP + // Fall through + +//-------------------------------------------------------------------------- +// Load context +// +// This is used to load a thread context, abandoning the current one. Following +// function part is the second half of hal_thread_switch_context. + + + .globl hal_thread_load_context + .thumb + .thumb_func + .type hal_thread_load_context, %function +hal_thread_load_context_common: + + ldr sp,[r0] // Load SP + pop {r2-r4} // Pop type, basepri, SP(discarded) and FPSCR + msr basepri,r3 // Set BASEPRI + cmp r2,#HAL_SAVEDREGISTERS_THREAD_FPU // Is state type a FP thread? + beq real_float_pop // Y: + // N: Be lazy + and r6,#~CYGARC_REG_FPU_CPACR_ENABLE + add sp,#HAL_SAVEDREGISTERS_FPU_THREAD_CONTEXT_SIZE + str r6,[r7] + pop {r0-r12,pc} // Pop all registers and return to an non-FP thread + + real_float_pop: // Restore floating point context for FP thread. + orr r6,#CYGARC_REG_FPU_CPACR_ENABLE + pop {r5} // Retrieve FPU status register + str r6,[r7] + dsb + isb + vpop.f64 {d0-d15} // Pestore FPU registers + vmsr fpscr,r5 // Restore FPU status register + pop {r0-r12,pc} // Pop all registers and return to a FP thread. + +// Load context entry point +// Load context initially needs CPACR register, so it is provided here. +hal_thread_load_context: + ldr r7,=CYGARC_REG_FPU_CPACR + ldr r6,[r7] + b hal_thread_load_context_common + +#elif defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL + +//========================================================================== +// ALL Context switch +// +// Save the FPU registers for all threads. +// + + .globl hal_thread_switch_context + .thumb + .thumb_func + .type hal_thread_switch_context, %function +hal_thread_switch_context: + + push {r0-r12,lr} // Push all savable register + vmrs r5,fpscr + mov r2,#HAL_SAVEDREGISTERS_THREAD_FPU // Set state type == thread + vpush.f64 {d0-d15} // Push FPU registers + sub r4,sp,#4 // Get SP (for info only) + mrs r3,basepri // Get priority base register + push {r2-r5} // Push them + str sp,[r1] // Save SP + // Fall through + +//-------------------------------------------------------------------------- +// Load context +// +// This is used to load a thread context, abandoning the current one. This +// function is also the second half of hal_thread_switch_context. + + + .globl hal_thread_load_context + .thumb + .thumb_func + .type hal_thread_load_context, %function +hal_thread_load_context: + + ldr sp,[r0] // Load SP + pop {r2-r5} // Pop type, basepri,SP(discarded) and FPSCR + msr basepri,r3 // Set BASEPRI + vpop.f64 {d0-d15} // Pop FPU registers + vmsr fpscr,r5 // and FPU status register + pop {r0-r12,pc} // Pop all register and return + +#else + +//========================================================================== +// NONE Context switch +// +// No FPU or NONE context saving scheme. Do not save FPU registers. +// + .globl hal_thread_switch_context .thumb .thumb_func @@ -77,11 +211,11 @@ hal_thread_switch_context: mrs r3,basepri // Get priority base register mov r4,sp // Get SP (for info only) push {r2-r4} // Push them - + str sp,[r1] // Save SP // Fall through - + //-------------------------------------------------------------------------- // Load context // @@ -99,16 +233,18 @@ hal_thread_load_context: msr basepri,r3 // Set BASEPRI pop {r0-r12,pc} // Pop all register and return -//========================================================================== +#endif + +//========================================================================== // HAL longjmp, setjmp implementations -// +// // hal_setjmp saves only to callee save registers R4-14 // and LR into buffer supplied in r0[arg0]. .globl hal_setjmp .thumb .thumb_func - .type hal_setjmp, %function + .type hal_setjmp, %function hal_setjmp: mov r3,sp stmea r0,{r3-r12,r14} @@ -116,7 +252,7 @@ hal_setjmp: bx lr // hal_longjmp loads state from r0[arg0] and returns - + .globl hal_longjmp .thumb .thumb_func diff --git a/packages/hal/cortexm/arch/current/src/cortexm.ld b/packages/hal/cortexm/arch/current/src/cortexm.ld --- a/packages/hal/cortexm/arch/current/src/cortexm.ld +++ b/packages/hal/cortexm/arch/current/src/cortexm.ld @@ -6,7 +6,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -42,7 +42,7 @@ STARTUP(vectors.o) ENTRY(reset_vector) INPUT(extras.o) -GROUP(libtarget.a libgcc.a libsupc++.a) +GROUP(CYGBLD_HAL_LINKER_GROUPED_LIBS) #if defined(__ARMEB__) OUTPUT_FORMAT(elf32-bigarm) @@ -266,6 +266,13 @@ OUTPUT_FORMAT(elf32-bigarm) __bss_end = ABSOLUTE (.); } \ > _region_ +#define USER_SECTION(_name_, _region_, _vma_, _lma_) \ + ._name_ _vma_ : _lma_ \ + { __ ## _name_ ## _start = ABSOLUTE (.); \ + *(._name_*) \ + __ ## _name_ ## _end = ABSOLUTE (.); } \ + > _region_ + #define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); #include diff --git a/packages/hal/cortexm/arch/current/src/cortexm_fpu.c b/packages/hal/cortexm/arch/current/src/cortexm_fpu.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/src/cortexm_fpu.c @@ -0,0 +1,97 @@ +/*========================================================================== +// +// cortexm_fpu.c +// +// Cortex-M exception vectors +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-05-30 +// +//####DESCRIPTIONEND#### +// +//======================================================================== +*/ + +#include +#include + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // Special Cortex-M asm instructions + +#include // Optional Floating Point Unit + +#ifdef CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +//============================================================================ +// FPU Usage Fault VSR handler +// Execution of Floating Point instruction when FPU is disabled +// generates usage fault exception. In LAZY context switching scheme +// it is used for detection of FPU usage by threads. +// +cyg_uint32 hal_deliver_usagefault_fpu_exception(void) { + cyg_uint32 regval; + + HAL_READ_UINT32(CYGARC_REG_FPU_CPACR, regval); + if(!((regval & CYGARC_REG_FPU_CPACR_ENABLE) ^ CYGARC_REG_FPU_CPACR_ENABLE)){ + CYG_FAIL("Usage fault exception other than FPU!!!"); + } else { + HAL_READ_UINT32(CYGARC_REG_UFSR, regval); + if(regval & CYGARC_REG_UFSR_NOCP){ + // Floating point instruction has occured + // Enable FPU + HAL_CORTEXM_FPU_ENABLE(); + CYGARC_VMSR(fpscr, 0); + HAL_MEMORY_BARRIER(); + HAL_WRITE_UINT32(CYGARC_REG_UFSR, CYGARC_REG_UFSR_NOCP); + } else { + CYG_FAIL("Usage fault exception other than FPU/NOCP!!!"); + } + } + HAL_READ_UINT32(CYGARC_REG_UFSR, regval); + return regval; +} +#endif // CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +//========================================================================== +// EOF cortexm_fpu.c diff --git a/packages/hal/cortexm/arch/current/src/cortexm_stub.c b/packages/hal/cortexm/arch/current/src/cortexm_stub.c --- a/packages/hal/cortexm/arch/current/src/cortexm_stub.c +++ b/packages/hal/cortexm/arch/current/src/cortexm_stub.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -39,12 +39,14 @@ //========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): nickg -// Date: 2008-07-30 +// Author(s): nickg +// Contributor(s): ilijak, jifl +// Date: 2008-07-30 // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include @@ -84,6 +86,8 @@ int __computeSignal (unsigned int trap_n case CYGNUM_HAL_VECTOR_NMI: case CYGNUM_HAL_VECTOR_SYS_TICK: return SIGINT; + case CYGNUM_HAL_VECTOR_USAGE_FAULT: + return SIGFPE; default: return SIGTRAP; } @@ -102,7 +106,7 @@ int __get_trap_number (void) //========================================================================== -/* Set the currently-saved pc register value to PC. */ +// Set the currently-saved pc register value to PC. void set_pc (target_register_t pc) { @@ -115,37 +119,28 @@ void set_pc (target_register_t pc) static int reg_offset(regnames_t reg) { - int base_offset; - - if (reg < F0) - return reg * 4; - - base_offset = 16 * 4; + int reg_i, offset = 0; - if (reg < FPS) - return base_offset + ((reg - F0) * 12); - - base_offset += (8 * 12); - - if (reg <= PS) - return base_offset + ((reg - FPS) * 4); - - return -1; // Should never happen! + for(reg_i = 0; reg_i < NUMREGS; reg_i++) { + if(reg_i == reg) + break; + offset += REGSIZE(reg_i); + } + return (NUMREGS == reg_i || 0 == REGSIZE(reg_i)) ? -1 : offset; } - //========================================================================== // Return the currently-saved value corresponding to register REG of // the exception context. -target_register_t +target_register_t get_register (regnames_t reg) { target_register_t val; int offset = reg_offset(reg); if (REGSIZE(reg) > sizeof(target_register_t) || offset == -1) - return -1; + return -1; val = _registers[offset/sizeof(target_register_t)]; @@ -156,13 +151,13 @@ get_register (regnames_t reg) // Store VALUE in the register corresponding to WHICH in the exception // context. -void +void put_register (regnames_t which, target_register_t value) { int offset = reg_offset(which); if (REGSIZE(which) > sizeof(target_register_t) || offset == -1) - return; + return; _registers[offset/sizeof(target_register_t)] = value; } @@ -178,8 +173,8 @@ get_register_as_bytes (regnames_t which, int offset = reg_offset(which); if (offset != -1) { - memcpy (value, (char *)_registers + offset, REGSIZE(which)); - return 1; + memcpy (value, (char *)_registers + offset, REGSIZE(which)); + return 1; } return 0; } @@ -195,8 +190,8 @@ put_register_as_bytes (regnames_t which, int offset = reg_offset(which); if (offset != -1) { - memcpy ((char *)_registers + offset, value, REGSIZE(which)); - return 1; + memcpy ((char *)_registers + offset, value, REGSIZE(which)); + return 1; } return 0; } @@ -229,8 +224,8 @@ void __single_step (void) // Clear any bits set in DFSR base = CYGARC_REG_NVIC_BASE; - HAL_WRITE_UINT32( base+CYGARC_REG_NVIC_DFSR, 0xFFFFFFFF ); - + HAL_WRITE_UINT32( base+CYGARC_REG_NVIC_DFSR, 0xFFFFFFFF ); + } //========================================================================== @@ -251,7 +246,7 @@ void __clear_single_step (void) // Clear any bits set in DFSR base = CYGARC_REG_NVIC_BASE; - HAL_WRITE_UINT32( base+CYGARC_REG_NVIC_DFSR, 0xFFFFFFFF ); + HAL_WRITE_UINT32( base+CYGARC_REG_NVIC_DFSR, 0xFFFFFFFF ); } //========================================================================== @@ -287,9 +282,7 @@ int void __skipinst (void) { unsigned long pc = get_register(PC); - pc += 2; - put_register(PC, pc); } diff --git a/packages/hal/cortexm/arch/current/src/fpv4_sp_d16.c b/packages/hal/cortexm/arch/current/src/fpv4_sp_d16.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/src/fpv4_sp_d16.c @@ -0,0 +1,105 @@ +//========================================================================== +// +// fpv4_sp_d16.c +// +// FPv4-SP-D16 support +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-05-30 +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#include +#include + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // Special Cortex-M asm instructions + +#include // Optional Floating Point Unit + + +#define CYGARC_REG_NVIC_ACTLR (CYGARC_REG_NVIC_BASE + 0x008) +#define CYGARC_REG_NVIC_ACTLR_DISFCA BIT_(8) +//========================================================================== +// FPU is disbled upon reset. Dependent on FPU context switching model it +// may be enabled. + +void hal_init_fpu(void) +{ + cyg_uint32 regval; + + // Initialize FPU according to context switch model. + // Disable FPU so we could access FPCCR + HAL_CORTEXM_FPU_DISABLE(); + +#if defined CYGARC_CORTEXM_FPU_EXC_AUTOSAVE + // Enable automatic exception FPU context saving. + HAL_READ_UINT32(CYGARC_REG_FPU_FPCCR, regval); + regval |= CYGARC_REG_FPU_FPCCR_LSPEN | CYGARC_REG_FPU_FPCCR_ASPEN; + HAL_WRITE_UINT32(CYGARC_REG_FPU_FPCCR, regval); + HAL_MEMORY_BARRIER(); +#else + // Disable automatic exception FPU context saving. + CYGARC_MRS(regval, control); + regval &= ~CYGARC_REG_CONTROL_FPCA_M; + CYGARC_MSR(control, regval); + HAL_READ_UINT32(CYGARC_REG_FPU_FPCCR, regval); + regval &= ~(CYGARC_REG_FPU_FPCCR_LSPEN | CYGARC_REG_FPU_FPCCR_ASPEN); + HAL_WRITE_UINT32(CYGARC_REG_FPU_FPCCR, regval); + HAL_MEMORY_BARRIER(); +#endif + +#if defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_NONE || \ + defined CYGHWR_HAL_CORTEXM_FPU_SWITCH_ALL + // Enable FPU + HAL_CORTEXM_FPU_ENABLE(); + CYGARC_VMSR(fpscr, 0); +#endif +} + +//========================================================================== +// EOF fpv4_sp_d16.c diff --git a/packages/hal/cortexm/arch/current/src/hal_misc.c b/packages/hal/cortexm/arch/current/src/hal_misc.c --- a/packages/hal/cortexm/arch/current/src/hal_misc.c +++ b/packages/hal/cortexm/arch/current/src/hal_misc.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -39,12 +39,14 @@ //========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): nickg -// Date: 2008-07-30 +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2008-07-30 // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include #include @@ -59,9 +61,12 @@ #include // HAL header #include // HAL header - +#include // Special Cortex-M asm instructions #include +#ifdef CYGHWR_HAL_CORTEXM_FPU +#include // Optional Floating Point Unit +#endif #if defined(CYGPKG_KERNEL_INSTRUMENT) && \ defined(CYGDBG_KERNEL_INSTRUMENT_INTR) @@ -81,6 +86,9 @@ typedef cyg_uint32 cyg_isr(cyg_uint32 ve __externC void hal_default_svc_vsr( void ); __externC void hal_pendable_svc_vsr( void ); __externC void hal_switch_state_vsr( void ); +#ifdef CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +__externC void hal_usagefault_exception_vsr( void ); +#endif // HAL and eCos functions __externC void hal_system_init( void ); @@ -128,9 +136,14 @@ void hal_reset_vsr( void ) // usually supplied by the platform HAL. Calls to // hal_variant_init() and hal_platform_init() later will perform // the main initialization. - + hal_system_init(); - +#if defined CYGHWR_HAL_CORTEXM_FPU + // Floating Point Unit is disabled after reset. + // Enable it unless for LAZY context switching scheme. + hal_init_fpu(); +#endif + // Initialize vector table in base of SRAM. { register int i; @@ -140,39 +153,41 @@ void hal_reset_vsr( void ) // Only install the exception vectors for non-RAM startup. For // RAM startup we want these to continue to point to the original // VSRs, which will belong to RedBoot or GDB stubs. - + for( i = 2; i < 15; i++ ) hal_vsr_table[i] = (CYG_ADDRESS)hal_default_exception_vsr; +#endif // !defined(CYG_HAL_STARTUP_RAM) + // Always point SVC and PENDSVC vectors to our local versions -#endif - // Always point SVC and PENDSVC vectors to our local versions - hal_vsr_table[CYGNUM_HAL_VECTOR_SERVICE] = (CYG_ADDRESS)hal_default_svc_vsr; hal_vsr_table[CYGNUM_HAL_VECTOR_PENDSV] = (CYG_ADDRESS)hal_pendable_svc_vsr; +#ifdef CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + // Install UsageFault and HardFault to trap the FPU usage exceptions. + HAL_VSR_SET(CYGNUM_HAL_VECTOR_USAGE_FAULT, hal_usagefault_exception_vsr, NULL); + HAL_VSR_SET(CYGNUM_HAL_VECTOR_HARD_FAULT, hal_usagefault_exception_vsr, NULL); +#endif // CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY // For all startup type, redirect interrupt vectors to our VSR. for( i = CYGNUM_HAL_VECTOR_SYS_TICK ; - i < CYGNUM_HAL_VECTOR_SYS_TICK + CYGNUM_HAL_VSR_MAX; + i < CYGNUM_HAL_VSR_MAX; i++ ) hal_vsr_table[i] = (CYG_ADDRESS)hal_default_interrupt_vsr; } - #if !defined(CYG_HAL_STARTUP_RAM) // Ensure that the CPU will use the vector table we have just set // up. -# if defined(CYGHWR_HAL_CORTEXM_M3) +# if defined(CYGHWR_HAL_CORTEXM_M3) || defined(CYGHWR_HAL_CORTEXM_M4) - // On M3 parts, the NVIC contains a vector table base register. We - // program this to relocate the vector table base to the base of - // SRAM. - + // On M3 and M4 parts, the NVIC contains a vector table base register. + // We program this to relocate the vector table base to the base of SRAM. + HAL_WRITE_UINT32( CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_VTOR, CYGARC_REG_NVIC_VTOR_TBLOFF(0)| CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM ); - + # else # error Unknown SRAM/VECTAB remap mechanism @@ -183,14 +198,14 @@ void hal_reset_vsr( void ) // We don't need to do this for RAM startup since the ROM code // will have already done it. - hal_vsr_table[CYGNUM_HAL_VECTOR_SERVICE] = (CYG_ADDRESS)hal_switch_state_vsr; + hal_vsr_table[CYGNUM_HAL_VECTOR_SERVICE] = (CYG_ADDRESS)hal_switch_state_vsr; - __asm__ volatile( "swi" ); + __asm__ volatile( "swi 0" ); hal_vsr_table[CYGNUM_HAL_VECTOR_SERVICE] = (CYG_ADDRESS)hal_default_svc_vsr; - + #endif // !defined(CYG_HAL_STARTUP_RAM) - + #if defined(CYG_HAL_STARTUP_ROM) // Relocate data from ROM to RAM { @@ -224,13 +239,13 @@ void hal_reset_vsr( void ) // PendSVC which are lowest priority. { register int i; - + HAL_WRITE_UINT32( CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_SHPR0, 0x00000000 ); HAL_WRITE_UINT32( CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_SHPR1, 0xFF000000 ); HAL_WRITE_UINT32( CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_SHPR2, 0x00FF0000 ); - + hal_interrupt_handlers[CYGNUM_HAL_INTERRUPT_SYS_TICK] = (CYG_ADDRESS)hal_default_isr; - + for( i = 1; i < CYGNUM_HAL_ISR_COUNT; i++ ) { hal_interrupt_handlers[i] = (CYG_ADDRESS)hal_default_isr; @@ -252,7 +267,7 @@ void hal_reset_vsr( void ) } #endif -#if !defined(CYG_HAL_STARTUP_RAM) +#if !defined(CYG_HAL_STARTUP_RAM) // Enable Usage, Bus and Mem fault handlers. Do this for ROM and // JTAG startups. For RAM startups, this will have already been // done by the ROM monitor. @@ -267,25 +282,25 @@ void hal_reset_vsr( void ) HAL_WRITE_UINT32( base+CYGARC_REG_NVIC_SHCSR, shcsr ); } #endif - + // Call variant and platform init routines hal_variant_init(); hal_platform_init(); // Start up the system clock HAL_CLOCK_INITIALIZE( CYGNUM_HAL_RTC_PERIOD ); - + #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - + initialize_stub(); - + #endif #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) || \ defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) - + hal_ctrlc_isr_init(); - + #endif // Run through static constructors @@ -316,11 +331,12 @@ void hal_deliver_exception( HAL_SavedReg // This is common in discovery code, e.g. checking for a particular // device which may generate an exception when probing if the // device is not present + #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS if (__mem_fault_handler ) { regs->u.exception.pc = (unsigned long)__mem_fault_handler; - return; // Caught an exception inside stubs + return; // Caught an exception inside stubs } #endif @@ -336,8 +352,8 @@ void hal_deliver_exception( HAL_SavedReg #else CYG_FAIL("Exception!!!"); - -#endif + +#endif } //========================================================================== @@ -357,14 +373,13 @@ void hal_deliver_interrupt( cyg_uint32 v register cyg_uint32 isr_result; register cyg_isr *isr; cyg_bool pendsvc = false; - + #if defined(CYGPKG_KERNEL_INSTRUMENT) && \ defined(CYGDBG_KERNEL_INSTRUMENT_INTR) CYG_INSTRUMENT_INTR(RAISE, vector, 0); #endif + isr = (cyg_isr *)hal_interrupt_handlers[vector]; - isr = (cyg_isr *)hal_interrupt_handlers[vector]; - // Call the ISR isr_result = isr( vector, hal_interrupt_data[vector] ); @@ -414,10 +429,10 @@ void hal_deliver_interrupt( cyg_uint32 v __externC void hal_interrupt_end( void ) { -#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT +#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT cyg_scheduler_sched_lock++; #endif - + interrupt_end(0,0,0); } @@ -522,7 +537,7 @@ void hal_deliver_interrupt( cyg_uint32 v if( t1 < t0 ) us -= (t1 + CYGNUM_HAL_RTC_PERIOD - t0); else - us -= t1 - t0; + us -= t1 - t0; t0 = t1; } } @@ -547,7 +562,7 @@ cyg_hal_invoke_constructors (void) { #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG static pfunc *p = &CONSTRUCTORS_START; - + cyg_hal_stop_constructors = 0; for (; p != CONSTRUCTORS_END; NEXT_CONSTRUCTOR(p)) { (*p)(); @@ -586,9 +601,8 @@ hal_arch_default_isr(CYG_ADDRWORD vector __externC void hal_get_gdb_registers( HAL_CORTEXM_GDB_Registers *gdbreg, HAL_SavedRegisters *regs ) { int i; - cyg_uint32 *p = gdbreg->f0; - - switch( regs->u.type ) + + switch(GDB_STUB_SAVEDREG_FRAME_TYPE(regs)) { case HAL_SAVEDREGISTERS_THREAD: for( i = 0; i < 13; i++ ) @@ -596,9 +610,11 @@ hal_arch_default_isr(CYG_ADDRWORD vector gdbreg->gpr[13] = regs->u.thread.sp; gdbreg->gpr[14] = regs->u.thread.pc; gdbreg->gpr[15] = regs->u.thread.pc; - gdbreg->ps = 0x01000000; + gdbreg->xpsr = 0x01000000; + + GDB_STUB_SAVEDREG_FPU_THREAD_GET(gdbreg, regs); break; - + case HAL_SAVEDREGISTERS_EXCEPTION: gdbreg->gpr[0] = regs->u.exception.r0; gdbreg->gpr[1] = regs->u.exception.r1; @@ -610,9 +626,12 @@ hal_arch_default_isr(CYG_ADDRWORD vector gdbreg->gpr[13] = ((cyg_uint32)regs)+sizeof(regs->u.exception); gdbreg->gpr[14] = regs->u.exception.lr; gdbreg->gpr[15] = regs->u.exception.pc; - gdbreg->ps = regs->u.exception.psr; + gdbreg->xpsr = regs->u.exception.psr; +#ifdef CYGSEM_HAL_DEBUG_FPU + GDB_STUB_SAVEDREG_FPU_EXCEPTION_GET(gdbreg, regs); +#endif break; - + case HAL_SAVEDREGISTERS_INTERRUPT: gdbreg->gpr[0] = regs->u.interrupt.r0; gdbreg->gpr[1] = regs->u.interrupt.r1; @@ -622,21 +641,24 @@ hal_arch_default_isr(CYG_ADDRWORD vector gdbreg->gpr[13] = ((cyg_uint32)regs)+sizeof(regs->u.interrupt); gdbreg->gpr[14] = regs->u.interrupt.lr; gdbreg->gpr[15] = regs->u.interrupt.pc; - gdbreg->ps = regs->u.interrupt.psr; + gdbreg->xpsr = regs->u.interrupt.psr; break; } - +#ifdef CYGARC_CORTEXM_GDB_REG_FPA // Clear FP state, which we don't use - for( i = 0; i < (8*3+1); i++ ) - p[i] = 0; - + { + cyg_uint32 *p = gdbreg->f0; + for( i = 0; i < (8*3+1); i++ ) + p[i] = 0; + } +#endif } __externC void hal_set_gdb_registers( HAL_CORTEXM_GDB_Registers *gdbreg, HAL_SavedRegisters *regs ) { int i; - - switch( regs->u.type ) + + switch(GDB_STUB_SAVEDREG_FRAME_TYPE(regs)) { case HAL_SAVEDREGISTERS_THREAD: for( i = 0; i < 13; i++ ) @@ -644,8 +666,10 @@ hal_arch_default_isr(CYG_ADDRWORD vector regs->u.thread.sp = gdbreg->gpr[13]; regs->u.thread.pc = gdbreg->gpr[14]; regs->u.thread.pc = gdbreg->gpr[15]; + + GDB_STUB_SAVEDREG_FPU_THREAD_SET(gdbreg, regs); break; - + case HAL_SAVEDREGISTERS_EXCEPTION: regs->u.exception.r0 = gdbreg->gpr[0]; regs->u.exception.r1 = gdbreg->gpr[1]; @@ -656,9 +680,12 @@ hal_arch_default_isr(CYG_ADDRWORD vector regs->u.exception.r12 = gdbreg->gpr[12]; regs->u.exception.lr = gdbreg->gpr[14]; regs->u.exception.pc = gdbreg->gpr[15]; - regs->u.exception.psr = gdbreg->ps; + regs->u.exception.psr = gdbreg->xpsr; +#ifdef CYGSEM_HAL_DEBUG_FPU + GDB_STUB_SAVEDREG_FPU_EXCEPTION_SET(gdbreg, regs); +#endif break; - + case HAL_SAVEDREGISTERS_INTERRUPT: regs->u.interrupt.r0 = gdbreg->gpr[0]; regs->u.interrupt.r1 = gdbreg->gpr[1]; @@ -667,7 +694,7 @@ hal_arch_default_isr(CYG_ADDRWORD vector regs->u.interrupt.r12 = gdbreg->gpr[12]; regs->u.interrupt.lr = gdbreg->gpr[14]; regs->u.interrupt.pc = gdbreg->gpr[15]; - regs->u.interrupt.psr = gdbreg->ps; + regs->u.interrupt.psr = gdbreg->xpsr; break; } } diff --git a/packages/hal/cortexm/arch/current/src/mcount.S b/packages/hal/cortexm/arch/current/src/mcount.S new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/arch/current/src/mcount.S @@ -0,0 +1,138 @@ +/*========================================================================== +// +// mcount.S +// +// Cortex-M mcount implementation +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Contributor(s): +// Date: 2014-02-28 +// Description: This file provides mcount functions used for +// call-graph profiling. +// +//####DESCRIPTIONEND#### +// +//======================================================================== +*/ + +#include + +/* +// GCC inserts mcount code at the start of every function when compiling +// with "-pg". For GCC prior to version 4.4 targeting Cortex-M, +// the following code is inserted: +// +// mov r12, lr +// bl mcount +// .word +// +// For GCC version 4.4 and later targeting Cortex-M, the following code is +// inserted: +// +// push { lr } +// bl __gnu_mcount_nc +// +// We provide implementations of both mcount() and __gnu_mcount_nc() to +// call the eCos __profile_mcount() function. +*/ + + .syntax unified + .globl mcount + .section .text.mcount + .thumb_func +mcount: + // resume execution beyond the data pointer on return to caller + add lr, lr, #4 + + // caller assumes r0-r3 will be preserved (non-AAPCS), we use + // r6 and must preserve lr across our __profile_mcount() call + push { r0, r1, r2, r3, r6, lr } + + // set up parameters for __profile_mcount() + sub r0, r12, #2 + bic r0, r0, #1 + bic r1, lr, #1 + + // disable interrupts + mov r2, #CYGNUM_HAL_CORTEXM_PRIORITY_MAX + mrs r6, basepri + msr basepri, r2 + + // call eCos __profile_mcount() + // r6 is preserved across the call per AAPCS + bl __profile_mcount + + // restore interrupts + msr basepri, r6 + + // restore registers and return + pop { r0, r1, r2, r3, r6, pc } + + + .globl __gnu_mcount_nc + .section .text.__gnu_mcount_nc + .thumb_func +__gnu_mcount_nc: + // caller assumes r0-r3 will be preserved (non-AAPCS), we use + // r6 and must preserve lr across our __profile_mcount() call + push { r0, r1, r2, r3, r6, lr } + + // set up parameters for __profile_mcount() + ldr r0, [ sp, #24 ] + sub r0, r0, #2 + bic r0, r0, #1 + bic r1, lr, #1 + + // disable interrupts + mov r2, #CYGNUM_HAL_CORTEXM_PRIORITY_MAX + mrs r6, basepri + msr basepri, r2 + + // call eCos __profile_mcount() + // r6 is preserved across the call per AAPCS + bl __profile_mcount + + // restore interrupts + msr basepri, r6 + + // restore registers and return + pop { r0, r1, r2, r3, r6, r12, lr } + bx r12 + +//========================================================================== +// end of mcount.S diff --git a/packages/hal/cortexm/arch/current/src/vectors.S b/packages/hal/cortexm/arch/current/src/vectors.S --- a/packages/hal/cortexm/arch/current/src/vectors.S +++ b/packages/hal/cortexm/arch/current/src/vectors.S @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2011, 2012 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -40,6 +40,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): nickg +// Contributors(s): ilijak // Date: 2008-07-30 // Description: This file defines the code placed into the exception // vectors. It also contains the first level default VSRs @@ -48,7 +49,8 @@ // //####DESCRIPTIONEND#### // -//========================================================================*/ +//======================================================================== +*/ #include #include @@ -56,6 +58,11 @@ #include #endif +#include +#ifdef CYGHWR_HAL_CORTEXM_FPU +# include +#endif + #include //========================================================================== @@ -78,10 +85,10 @@ hal_vsr_table_init: .long hal_reset_vsr // 1 Reset entry //========================================================================== - + .text .thumb - + //========================================================================== // Fake entry point. // @@ -89,7 +96,7 @@ hal_vsr_table_init: // via RedBoot/Stubs or via JTAG the PC will be set to this address. // The code here sets up the SP and branches to the reset VSR in // emulation of the hardware reset behaviour. - + .align 2 .global reset_vector .thumb @@ -102,7 +109,7 @@ reset_vector: .pool -#if !defined(CYG_HAL_STARTUP_RAM) +#if !defined(CYG_HAL_STARTUP_RAM) //========================================================================== // State switch VSR // @@ -115,8 +122,8 @@ reset_vector: // throw exceptions without corrupting the execution stack. This is // only necessary for non-kernel configurations (e.g. RedBoot, Stubs) // since kernel configurations will switch to a thread stack before -// they should throw an exception. - +// they should throw an exception. + .global hal_switch_state_vsr .thumb .thumb_func @@ -125,22 +132,23 @@ hal_switch_state_vsr: mov r0,#CYGNUM_HAL_CORTEXM_PRIORITY_MAX msr basepri,r0 - + mov r0,#2 // Set CONTROL register to 2 msr control,r0 isb // Insert a barrier - - msr psp,sp // Copy SP to PSP + + mov r0,sp + msr psp,r0 // Copy SP to PSP #if !defined(CYGPKG_KERNEL) sub sp,#(CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE/2) -#endif - +#endif + orr lr,#0xD // Adjust return link bx lr // Return to init code on PSP now #endif - + //========================================================================== // Default exception VSR // @@ -152,7 +160,7 @@ hal_switch_state_vsr: // switch elsewhere. However, I know of no code that does anything // like this. If there is then this may need treating in the same way // as the interrupt end code. - + .global hal_default_exception_vsr .thumb .thumb_func @@ -160,25 +168,32 @@ hal_switch_state_vsr: hal_default_exception_vsr: mrs r0,psp // Get process stack + +#ifdef CYGSEM_HAL_DEBUG_FPU + hal_fpu_exc_push // Save Floating Point Unit context +#endif sub r1,r0,#(4*12) // Make space for saved state msr psp,r1 // Ensure PSP is up to date - + mov r1,#1 // R1 = exception state type mrs r2,ipsr // R2 = vector number mrs r3,basepri // R3 = basepri - stmfd r0!,{r1-r11,lr} // Push type, vector, basepri, r4-11 - + stmfd r0!,{r1-r11,lr} // Push type, vector, basepri, r4-11 mov r4,r0 // R4 = saved state pointer bl hal_deliver_exception mov r0,r4 // R0 = state saved across call ldmfd r0!,{r1-r11,lr} // Pop type, vec, basepri, registers and LR + +#ifdef CYGSEM_HAL_DEBUG_FPU + hal_fpu_exc_pop // Update Floating Point Unit context +#endif msr psp,r0 // Restore PSP msr basepri,r3 // Restore basepri - + bx lr // Return - + .pool //========================================================================== @@ -187,7 +202,7 @@ hal_default_exception_vsr: // This is a trampoline that translates from the hardware defined entry point // to the ISR defined by eCos. The CPU will switch automatically to the main // (interrupt) stack with the process state saved on the process stack. Apart -// from saving a pointer to the interrupt state for Ctrl-C support, and fetching +// from saving a pointer to the interrupt state for Ctrl-C support, and fetching // the vector number, most of the work is actually done in hal_deliver_interrupt(). @@ -199,22 +214,20 @@ hal_default_interrupt_vsr: push {lr} // Save return link sub sp,#4 // Realign SP to 8 bytes - -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) || \ - defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) + +#if CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED > 0 // If we are supporting Ctrl-C interrupts from GDB, we must squirrel // away a pointer to the saved interrupt state here so that we can - // plant a breakpoint at some later time. We only need to make a - // full interrupt saved state in that case. + // plant a breakpoint at some later time. .extern hal_saved_interrupt_state mrs r1,psp // Get PSP - mov r0,#3 // Interrupt state type + mov r0,#3 // Interrupt state type stmfd r1!,{r0} // Push interrupt type ldr r12,=hal_saved_interrupt_state str r1,[r12] #endif - + mrs r0,ipsr // R0 = arg0 = vector number sub r0,#15 // Adjust to interrupt range @@ -222,7 +235,7 @@ hal_default_interrupt_vsr: add sp,#4 // pop alignment padding pop {pc} // Pop LR and return - + .pool //========================================================================== @@ -234,9 +247,9 @@ hal_default_interrupt_vsr: // a fake exception frame onto the PSP which will take us to hal_interrupt_end(), // which will make the call. The return link loaded by that frame takes us // back to hal_interrupt_end_done which will unwind the real exception -// frame that is still on the PSP. +// frame that is still on the PSP. - + .global hal_pendable_svc_vsr .thumb .thumb_func @@ -244,20 +257,23 @@ hal_default_interrupt_vsr: hal_pendable_svc_vsr: mrs r12,psp // R12 = thread's PSP - sub r0,r12,#0x20 // Make space for frame + sub r0,r12,#HAL_SAVEDREG_AUTO_FRAME_SIZE // Make space for frame msr psp,r0 // Put it back - + +#ifdef CYGARC_CORTEXM_FPU_EXC_AUTOSAVE + hal_fpu_isr_fake_frame_push +#endif // CYGARC_CORTEXM_FPU_EXC_AUTOSAVE ldr r3,=0x01000000 // R3 = PSR = thumb bit set ldr r2,=hal_interrupt_end // R2 = PC = interrupt end entry point ldr r1,=hal_interrupt_end_done // R1 = LR = restore code stmfd r12!,{r0-r3} // Save fake R12, LR, PC, PSR stmfd r12!,{r0-r3} // Save fake R0-R3 - + bx lr // Return to hal_interrupt_end .pool - -//========================================================================== + +//========================================================================== // Interrupt end done // // After calling interrupt end a thread returns here to unstack the @@ -266,32 +282,32 @@ hal_pendable_svc_vsr: // from handler mode, so we use a SWI which will discard its own // frame and restore the saved one. - + .global hal_interrupt_end_done .thumb .thumb_func .type hal_interrupt_end_done, %function hal_interrupt_end_done: - ldr r3,=hal_interrupt_end_vsr - swi - -//========================================================================== + ldr r3,=hal_interrupt_end_vsr + swi 0 + +//========================================================================== // Interrupt end VSR // // This is the SVC VSR invoked by hal_interrupt_end_done to restore the // original exception frame from a pendable SVC entry. It does this // by discarding its own frame and using the one below it on the // stack to return. - + .global hal_interrupt_end_vsr .thumb .thumb_func .type hal_interrupt_end_vsr, %function -hal_interrupt_end_vsr: - +hal_interrupt_end_vsr: + mrs r12,psp // R12 = thread's PSP - add r12,#32 // Skip our saved state + add r12,#HAL_SAVEDREG_AUTO_FRAME_SIZE // Skip our saved state msr psp,r12 // Restore thread's PSP bx lr // And return @@ -308,7 +324,7 @@ hal_interrupt_end_vsr: .thumb .thumb_func .type hal_call_dsrs_vsr, %function - + hal_call_dsrs_vsr: .extern cyg_interrupt_call_pending_DSRs @@ -321,7 +337,7 @@ hal_call_dsrs_vsr: // in handler mode. R3 contains the address of a piece of code to run, // R0-R2 contain any arguments. Once entered the code is responsible for // handling the system state and returning to thread mode. -// +// // Note that R0-R3 must be explicitly restored from their stacked // copies since a late arriving interrupt can preempt the SVC entry // and corrupt these registers before we get here. @@ -337,6 +353,41 @@ hal_default_svc_vsr: bx r3 // Jump to routine in R3 .pool - -//========================================================================== + +#ifdef CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY +//========================================================================== +// Usage Fault VSR +// Note: This VSR is also attached to HardFault vector. +// At present this VSR is used to detect FPU usage for Lazy context switch. +// after saving processor context on the process stack call +// hal_deliver_usagefault_fpu_exception() to do the job and retun result in r0. +// If result indicates no FPU activity then jump in hal_default_exception_vsr. + .global hal_usagefault_exception_vsr + .thumb + .thumb_func + .type hal_usagefault_exception_vsr, %function +hal_usagefault_exception_vsr: + + mrs r0,psp // Get process stack + sub r1,r0,#(2*4) // Make space for saved state + msr psp,r1 // Ensure PSP is up to date + stmfd r0!,{r4,lr} // save registers + mov r4,r0 // R4 = saved state pointer + + bl hal_deliver_usagefault_fpu_exception + + mov r1,r4 // R0 = state saved across call + ldmfd r1!,{r4,lr} // Restore registers + msr psp,r1 // Restore PSP + + cmp r0,#0 // Exception other than FPU? + bne hal_default_exception_vsr // Y: - process it + + bx lr // N: Return + + .pool + +#endif // CYGHWR_HAL_CORTEXM_FPU_SWITCH_LAZY + +//========================================================================== // end of vectors.S diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/ChangeLog b/packages/hal/cortexm/kinetis/kwikstik/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/ChangeLog @@ -0,0 +1,49 @@ +2013-04-09 Tomas Frydrych + + * cdl/hal_cortexm_kinetis_kwikstik.cdl: + * include/plf_io.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * src/kwikstik_misc.c: Clock gating synchronised with variant. + [ Bugzilla 1001814 ] + +2012-11-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_kwikstik.cdl: + Sync with variant changes due to hardware floating point support. + Changed CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM. [Bugzilla 1001607] + +2011-12-15 Tomas Frydrych + + * cdl/hal_cortexm_kinetis_kwikstik.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * src/kwikstik_misc.c: + New package -- Freescale Kwikstik board, based on twr_k40x256 board. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/cdl/hal_cortexm_kinetis_kwikstik.cdl b/packages/hal/cortexm/kinetis/kwikstik/current/cdl/hal_cortexm_kinetis_kwikstik.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/cdl/hal_cortexm_kinetis_kwikstik.cdl @@ -0,0 +1,297 @@ +##========================================================================== +## +## hal_cortexm_kinetis_kwikstik.cdl +## +## Cortex-M Freescale KwikStik platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011, 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Tomas Frydrych +## Contributor(s): jld +## Date: 2011-12-15 +## Original: hal_cortexm_kinetis_twr_k40x256.cdl by Ilija Kocho +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_KWIKSTIK { + display "Freescale Kinetis KwikStik Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_kwikstik.h + include_dir cyg/hal + hardware + + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 16) } + + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM == 40 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FPU == "D" } + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_DEFAULT == "X" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT == 256 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X" + implies CYGHWR_HAL_KINETIS_FLEXRAM_SIZE == 4096 } + + implements CYGINT_IO_SERIAL_FREESCALE_UART5 + implements CYGINT_IO_FREESCALE_I2C1 + implements CYGINT_HAL_FREESCALE_UART5 + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + + + description " + The Freescale KwikStik Platform HAL package provides + the support needed to run eCos on the KwikStik development + system. This package can also be used for other boards that + employ a controller from Kinetis families." + + compile kwikstik_misc.c + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale KwikStik\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platform Reference Clock Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + default_value 4000000 + legal_values { 32768 4000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 0 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 0 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. + This optionchooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. + This option chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console + port if the console and GDB port are the same." + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + no_define + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a + ROM monitor, i.e. applications will be loaded into RAM on the + board, and this ROM monitor may process exceptions or interrupts + generated from the application. This enables features such as + utilizing a separate interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + + cdl_component CYGBLD_HAL_CORTEXM_KWIKSTIK_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Original: Cloned from plf_arch.h for twr-k40x256 board by Ilija Kocho +// Date: 2011-12-15 +// Purpose: Kwikstick platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_intr.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Original: Cloned from plf_intr.h for twr-k40x256 board by Ilija Kocho +// Date: 2011-12-15 +// Purpose: Kwikstik platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_io.h b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/include/plf_io.h @@ -0,0 +1,110 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Original: Based on plf_io.h for twr-k40x256 board by Ilija Kocho +// Date: 2011-12-15 +// Purpose: Kwikstik platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +// UART PINs + +#ifndef CYGHWR_HAL_FREESCALE_UART5_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART5_PIN_RX CYGHWR_HAL_KINETIS_PIN(E, 9, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART5_PIN_TX CYGHWR_HAL_KINETIS_PIN(E, 8, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART5_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART5_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART5_PIN_RX CYGHWR_HAL_FREESCALE_UART5_PIN_RX +# define CYGHWR_IO_FREESCALE_UART5_PIN_TX CYGHWR_HAL_FREESCALE_UART5_PIN_TX +# define CYGHWR_IO_FREESCALE_UART5_PIN_RTS CYGHWR_HAL_FREESCALE_UART5_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART5_PIN_CTS CYGHWR_HAL_FREESCALE_UART5_PIN_CTS +#endif + +// LCD +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SLCD_M 0x40000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SLCD_S 30 + +#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC3_ALL_M +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ALL_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC3_SLCD_M) +#endif + +// I2C pins +# define CYGHWR_HAL_I2C1_PIN_SDA CYGHWR_HAL_KINETIS_PIN(E, 0, 6, 0) +# define CYGHWR_HAL_I2C1_PIN_SCL CYGHWR_HAL_KINETIS_PIN(E, 1, 6, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/kinetis/kwikstik/current/src/kwikstik_misc.c b/packages/hal/cortexm/kinetis/kwikstik/current/src/kwikstik_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/kwikstik/current/src/kwikstik_misc.c @@ -0,0 +1,255 @@ +//========================================================================== +// +// kwikstik_misc.c +// +// Cortex-M4 Kwikstik HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Original: Cloned from twr_k40x256_misc.c by Ilija Kocho +// Date: 2011-12-15 +// Description: Miscellaneous code for platform hal. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SRAM) + hal_wdog_disable(); + hal_misc_init(); + hal_start_clocks(); +#endif +#if defined(CYG_HAL_STARTUP_SRAM) && !defined(CYGHWR_HAL_CORTEXM_KINETIS_SRAM_UNIFIED) + // Note: For CYG_HAL_STARTUP_SRAM, the SRAM_L bank simulates ROM + // Relocate data from ROM to RAM + { + register cyg_uint32 *ram_p, *rom_p; + for( ram_p = &__ram_data_start, rom_p = &__rom_data_start; + ram_p < &__ram_data_end; + ram_p++, rom_p++ ) + *ram_p = *rom_p; + } + + // Relocate data from ROM to SRAM + { + register cyg_uint32 *ram_p, *sram_p; + for( ram_p = &__sram_data_start, sram_p = &__srom_data_start; + ram_p < &__sram_data_end; + ram_p++, sram_p++ ) + *ram_p = *sram_p; + } +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // Main RAM +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash +#endif +#ifdef CYGMEM_REGION_flexnvm + { CYGMEM_REGION_flexnvm, CYGMEM_REGION_flexnvm+CYGMEM_REGION_flexnvm_SIZE-1 }, // On-chip flexnvm (DFlash) +#endif +#ifdef CYGMEM_REGION_flexram + { CYGMEM_REGION_flexram, CYGMEM_REGION_flexram+CYGMEM_REGION_flexram_SIZE-1 }, // On-chip flexram +#endif +#ifdef CYGMEM_REGION_eeeprom0 + { CYGMEM_REGION_eeeprom0, CYGMEM_REGION_eeeprom0+CYGMEM_REGION_eeeprom0_SIZE-1 }, // On-chip Enhanced EEPROM +#endif +#ifdef CYGMEM_REGION_eeeprom1 + { CYGMEM_REGION_eeeprom1, CYGMEM_REGION_eeeprom0+CYGMEM_REGION_eeeprom1_SIZE-1 }, // On-chip Enhanced EEPROM +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 }, // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( (addr >= hal_data_access[i].start) && + (addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram +#define CASE_CYGMEM_REGION_SRAM 1 + case CASE_CYGMEM_REGION_SRAM: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#else +#define CASE_CYGMEM_REGION_SRAM 0 +#endif +#ifdef CYGMEM_REGION_flexram +#define CASE_CYGMEM_REGION_FLEXRAM (CASE_CYGMEM_REGION_SRAM + 1) + case CASE_CYGMEM_REGION_FLEXRAM: + *start = (unsigned char *)CYGMEM_REGION_flexram; + *end = (unsigned char *)(CYGMEM_REGION_flexram + + CYGMEM_REGION_flexram_SIZE); + break; +#else +#define CASE_CYGMEM_REGION_FLEXRAM (CASE_CYGMEM_REGION_SRAM) +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + + +//========================================================================== +// EOF kwikstik_misc.c diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/ChangeLog b/packages/hal/cortexm/kinetis/twr_k40x256/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/ChangeLog @@ -0,0 +1,72 @@ +2013-04-09 Tomas Frydrych + + * cdl/hal_cortexm_kinetis_twr_k40x256.cdl: + * include/plf_io.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * src/twr_k40x256_misc.c: Clock gating synchronised with variant. + [ Bugzilla 1001814 ] + +2012-11-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k40x256.cdl: + Sync with variant changes due to hardware floating point support. + Changed CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM. [Bugzilla 1001607] + +2012-10-25 Ilija Kocho + + * src/twr_k40x256_misc.c: Initialization for separate SRAM regions + synchronized with variant. [Bugzilla 1001606] + +2012-05-19 John Dallaway + + * cdl/hal_cortexm_kinetis_twr_k40x256.cdl: Reference per-package + documentation. + +2012-05-18 Ilija Kocho + + * doc/twr_k40x512.sgml: + New file -- TWR-K40X512 platform documentation. [Bug 1001580] + +2012-01-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k40x256.cdl: + * include/plf_io.h: + * src/twr_k40x256_misc.c: + Add entry for DMA, Add CYG_HAL_STARTUP_ENV. Add DSPI pins for SPI1 bus. + Updated for early clock start. [Bugzilla 1001450] + +2011-08-26 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k40x256.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * src/twr_k40x256_misc.c: + New package -- Freescale TWR-K40X256 board. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/cdl/hal_cortexm_kinetis_twr_k40x256.cdl b/packages/hal/cortexm/kinetis/twr_k40x256/current/cdl/hal_cortexm_kinetis_twr_k40x256.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/cdl/hal_cortexm_kinetis_twr_k40x256.cdl @@ -0,0 +1,316 @@ +##========================================================================== +## +## hal_cortexm_kinetis_twr_k40x256.cdl +## +## Cortex-M Freescale TWR-K40X256 platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011, 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-07-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K40X256 { + display "Freescale Kinetis TWR-K40X256 Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_twr_k40x256.h + include_dir cyg/hal + doc ref/kinetis-twr-k40x256.html + hardware + + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 16) } + + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM == 40 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FPU == "D" } + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_DEFAULT == "X" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT == 256 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X" + implies CYGHWR_HAL_KINETIS_FLEXRAM_SIZE == 4096 } + + implements CYGINT_IO_SERIAL_FREESCALE_UART3 + implements CYGINT_IO_FREESCALE_I2C0 + implements CYGINT_IO_FREESCALE_I2C1 + + implements CYGINT_HAL_FREESCALE_UART3 + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + + + description " + The Freescale TWR K40X256 Platform HAL package provides + the support needed to run eCos on the TWR K40X256 development + system. This package can also be used for other boards that + employ a controller from Kinetis families." + + compile twr_k40x256_misc.c + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale TWR-K40X256\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platform Reference Clock Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + default_value 8000000 + legal_values { 32768 8000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 0 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 0 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. + This optionchooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. + This option chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console + port if the console and GDB port are the same." + } + + cdl_component CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS { + display "MMC Disk SPI bus" + flavor data + parent CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + implements CYGINT_FREESCALE_DSPI1_HAS_MASS + + cdl_option CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS { + display "Device number (CS)" + flavor data + calculated 0 + implements CYGINT_FREESCALE_DSPI1_CS0 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + no_define + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a + ROM monitor, i.e. applications will be loaded into RAM on the + board, and this ROM monitor may process exceptions or interrupts + generated from the application. This enables features such as + utilizing a separate interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + + cdl_component CYGBLD_HAL_CORTEXM_TWR_MK40X256_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/doc/twr_k40x256.sgml b/packages/hal/cortexm/kinetis/twr_k40x256/current/doc/twr_k40x256.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/doc/twr_k40x256.sgml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TWR-K40X256-KIT Development kit + + + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K40X256 + eCos Support for the Freescale TWR-K40X256 development kit + + + Description + + The Freescale TWR-K40X256-KIT is a development kit for + Freescale Kinetis Cortex-M4 based micro-controllers. It covers K40 and K30 microcontroller + subfamilies. K40X256 is a high end member comprising 256 KiB FLASH, 256 KiB FlexMemory and 64 KiB SRAM, + as well as rich set of communication interfaces including USB, UARTs CAN, SPI and I2C. + K40 controllers also feature a Segment LCD controller, a DMA controller and a FlexBus + external memory interface. They are mixed signal devices featuring 16 bit ADC and 12 bit DAC. + + + Configuration + Hardware Setup + + No changes to the factory default setup are necessary. + + Clocking + + The TWR-K40X256 uses an 8MHz crystal as a clock reference which is stated as a requirement in the platform package. + + + Memory + K40X245 has two 32KiB SRAM banks giving a total of 64KiB on chip SRAM. + + + + + + diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Purpose: TWR-K40X256 platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K40X256 platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_io.h b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/include/plf_io.h @@ -0,0 +1,113 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K40X256 platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +// UART PINs + +#ifndef CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PIN(C, 16, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PIN(C, 17, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART3_PIN_RX CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_IO_FREESCALE_UART3_PIN_TX CYGHWR_HAL_FREESCALE_UART3_PIN_TX +# define CYGHWR_IO_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_FREESCALE_UART3_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_FREESCALE_UART3_PIN_CTS +#endif + + +// DSPI +// DSPI Pins + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SIN CYGHWR_HAL_KINETIS_PIN(E, 3, 2, KINETIS_PIN_SPI1_IN_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT CYGHWR_HAL_KINETIS_PIN(E, 1, 2, KINETIS_PIN_SPI1_OUT_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SCK CYGHWR_HAL_KINETIS_PIN(E, 2, 2, KINETIS_PIN_SPI1_OUT_OPT) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(E, 4, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(E, 0, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(E, 5, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(E, 6, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS4 CYGHWR_HAL_KINETIS_PIN_NONE +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 CYGHWR_HAL_KINETIS_PIN_NONE + +// I2C +// I2C Pins + +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SDA CYGHWR_HAL_KINETIS_PIN(B, 2, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SCL CYGHWR_HAL_KINETIS_PIN(B, 3, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C1_PIN_SDA CYGHWR_HAL_KINETIS_PIN(C, 11, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C1_PIN_SCL CYGHWR_HAL_KINETIS_PIN(C, 10, 2, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/kinetis/twr_k40x256/current/src/twr_k40x256_misc.c b/packages/hal/cortexm/kinetis/twr_k40x256/current/src/twr_k40x256_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k40x256/current/src/twr_k40x256_misc.c @@ -0,0 +1,233 @@ +//========================================================================== +// +// twr_k40x256_misc.c +// +// Cortex-M4 TWR-K40X256 EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SRAM) + hal_wdog_disable(); + hal_misc_init(); + hal_start_clocks(); +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // Main RAM +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash +#endif +#ifdef CYGMEM_REGION_flexnvm + { CYGMEM_REGION_flexnvm, CYGMEM_REGION_flexnvm+CYGMEM_REGION_flexnvm_SIZE-1 }, // On-chip flexnvm (DFlash) +#endif +#ifdef CYGMEM_REGION_flexram + { CYGMEM_REGION_flexram, CYGMEM_REGION_flexram+CYGMEM_REGION_flexram_SIZE-1 }, // On-chip flexram +#endif +#ifdef CYGMEM_REGION_eeeprom0 + { CYGMEM_REGION_eeeprom0, CYGMEM_REGION_eeeprom0+CYGMEM_REGION_eeeprom0_SIZE-1 }, // On-chip Enhanced EEPROM +#endif +#ifdef CYGMEM_REGION_eeeprom1 + { CYGMEM_REGION_eeeprom1, CYGMEM_REGION_eeeprom0+CYGMEM_REGION_eeeprom1_SIZE-1 }, // On-chip Enhanced EEPROM +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 }, // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( (addr >= hal_data_access[i].start) && + (addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram +#define CASE_CYGMEM_REGION_SRAM 1 + case CASE_CYGMEM_REGION_SRAM: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#else +#define CASE_CYGMEM_REGION_SRAM 0 +#endif +#ifdef CYGMEM_REGION_flexram +#define CASE_CYGMEM_REGION_FLEXRAM (CASE_CYGMEM_REGION_SRAM + 1) + case CASE_CYGMEM_REGION_FLEXRAM: + *start = (unsigned char *)CYGMEM_REGION_flexram; + *end = (unsigned char *)(CYGMEM_REGION_flexram + + CYGMEM_REGION_flexram_SIZE); + break; +#else +#define CASE_CYGMEM_REGION_FLEXRAM (CASE_CYGMEM_REGION_SRAM) +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + +//========================================================================== +// EOF twr_k40x256_misc.c diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/ChangeLog b/packages/hal/cortexm/kinetis/twr_k60f120m/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/ChangeLog @@ -0,0 +1,39 @@ +2013-07-02 John Dallaway + + * doc/twr_k60f120m.sgml: Fix missing . + +2013-06-02 Mike Jones + + * cdl/hal_cortexm_kinetis_twr_k60f120m.cdl: New + * doc/twr_k60f120m.sgml: New + * include/plf_intr.h: New + * include/plf_io.h: New + * include/plf_arch.h: New + * misc/redboot_K60_ROM_FPU.ecm: New + * src/twr_k60f120m_misc.c: New + + Add support for K60F120M [ Bugzilla 1001861 ] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/cdl/hal_cortexm_kinetis_twr_k60f120m.cdl b/packages/hal/cortexm/kinetis/twr_k60f120m/current/cdl/hal_cortexm_kinetis_twr_k60f120m.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/cdl/hal_cortexm_kinetis_twr_k60f120m.cdl @@ -0,0 +1,399 @@ +##========================================================================== +## +## hal_cortexm_kinetis_twr_k60f120m.cdl +## +## Cortex-M Freescale TWR-K60F120M platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Contrib(s): Mike Jones +## Date: 2013-06-02 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60F120M { + display "Freescale Kinetis TWR-K60F120M Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_twr_k60f120m.h + include_dir cyg/hal + doc ref/kinetis-twr-k60f120m.html + hardware + description " + The Freescale TWR K60F120M Platform HAL package provides the support + needed to run eCos on the TWR K60F120M development system. This package + can also be used for other boards that employ a controller from Kinetis + families." + + compile twr_k60f120m_misc.c + + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + requires { is_active(CYGPKG_DEVS_ETH_FREESCALE_ENET) + implies CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" } + + implements CYGINT_HAL_CACHE + + requires { CYGHWR_HAL_CORTEXM_KINETIS_FPU_DEFAULT == "F" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM_DEFAULT == 60 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 30 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 40 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 50 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 70 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT == "1M0" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 } + requires { is_active(CYGPKG_DEVS_FLASH_KINETIS) implies + CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE == 0x1000 } + requires { is_active(CYGPKG_DEVS_FLASH_KINETIS) implies + CYGNUM_DEVS_KINETIS_FLASH_LONGWORD_SIZE == 8 } + + implements CYGINT_IO_SERIAL_FREESCALE_UART5 + implements CYGINT_IO_FREESCALE_I2C0 + + implements CYGINT_HAL_FREESCALE_UART5 + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + + implements CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + implements CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 + implements CYGINT_HAL_CORTEXM_KINETIS_150 + + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX == 75000000 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX == 75000000 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX == 25000000 } + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_KSZ8041) } + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 32) } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale TWR-K60F120M\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + puts $::cdl_system_header "#define CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES 4000000" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP { + display "Platform suggested system frequency setpoint" + flavor data + no_define + legal_values 96000000 100000000 120000000 150000000 200000000 + default_value 120000000 + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP { + display "Platform suggested auxiliary frequency setpoint" + flavor data + no_define + legal_values 96000000 100000000 120000000 150000000 200000000 + default_value 120000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platgorm XTAL/OSC Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + default_value 50000000 + legal_values { 12000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ { + display "Platform XTAL1/OSC1 Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + default_value 50000000 + legal_values { 12000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC1_CAP { + display "Platform requred XTAL1 || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 0 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. + This option chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console port + if the console and GDB port are the same." + } + + cdl_option CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK { + display "ENET MII MDC clock provided by HAL" + flavor data + active_if CYGPKG_DEVS_ETH_FREESCALE_ENET + parent CYGPKG_DEVS_ETH_FREESCALE_ENET + calculated CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS + description " + ENET needs a clock with typical frequency of up to 2.5 MHz for + MII MDC. The input clock, typically provided by HAL, is further + divided by ENET according to setting of ENET MSCR register in order to + provide frequency within 2.5 MHz range." + } + + cdl_option CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT { + display "IEEE 1588 Port" + active_if CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + parent CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + flavor data + default_value { "B" } + legal_values { "B" "C" "User" } + description " + Digital I/O provided by HAL for ENET IEEE 1588 timers." + } + + cdl_component CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS { + display "MMC Disk SPI bus" + flavor data + parent CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + implements CYGINT_FREESCALE_DSPI1_HAS_MASS + requires { (is_active(CYGSEM_HAL_DCACHE_STARTUP_MODE) + && CYGINT_DEVS_SPI_DSPI_DMA_USE) + implies CYGSEM_HAL_DCACHE_STARTUP_MODE == "WRITETHRU" } + + cdl_option CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS { + display "Device number (CS)" + flavor data + legal_values { 0 1 2 3 4 5 } + default_value 0 + implements CYGINT_FREESCALE_DSPI1_CS0 + implements CYGINT_FREESCALE_DSPI1_CS1 + implements CYGINT_FREESCALE_DSPI1_CS2 + implements CYGINT_FREESCALE_DSPI1_CS3 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + + cdl_component CYGBLD_HAL_CORTEXM_TWR_MK60F120M_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/doc/twr_k60f120m.sgml b/packages/hal/cortexm/kinetis/twr_k60f120m/current/doc/twr_k60f120m.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/doc/twr_k60f120m.sgml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TWR-K60F120M Development kit + + + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60F120M + eCos Support for Freescale TWR-K60F120M development kit + + + Description + + The Freescale TWR-K60F120M is a development kit for + Freescale Kinetis Cortex-M4 based micro-controllers. It covers the K60 + microcontroller subfamily. K60FN1M0 is a high end member comprising on-chip 1 MiB FLASH + and 128 KiB SRAM memory as well as a 16 KiB unified cache. + K60 parts are equipped with a rich set of communication interfaces including Ethernet USB, UARTs + CAN, SPI and I2C. They also have a Graphics controller and a DMA controller, as well as FlexBus and SDRAM + external memory interfaces. They are mixed signal devices featuring a 16 bit ADC and a 12 bit DAC. + + + Configuration + Hardware Setup + TWR-K60F120M setup + + Factory jumper settings on TWR-K60F120M are fitted for standalone operation of the board. + In order to use it with the Ethernet PHY from TWR-SER, some jumpers have to be changed + on both TWR-K60F120M and TWR-SER. Jumper settings for TWR-SER are given in + TWR-K60N512 Configuration and here are the TWR-K60F120M + settings. + + TWR-K60F120M Jumper setting + + + + + + + Jumper + Setting + Description + + + + + J18 + ON + On board 50MHz oscillator is disabled + + + J19 + ON + On board 50MHz oscillator is powered + + + +
+
+
+ eCos Configuration + Clocking + + The TWR-K60F120M package defines requirements for the platform clocking. + + + Memory + + The K60 has two 64 KiB SRAM banks giving a total of 128KiB on chip SRAM. + + + +
+
+ + diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contrib(s): Mike Jones +// Date: 2013-06-02 +// Purpose: TWR-K60F120M platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contrib(s): Mike Jones +// Purpose: TWR-K60F120M platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_io.h b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/include/plf_io.h @@ -0,0 +1,175 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contrib(s): Mike Jones +// Date: 2013-06-02 +// Purpose: TWR-K60F120M platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +// UART PINs +#ifndef CYGHWR_HAL_FREESCALE_UART5_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART5_PIN_RX CYGHWR_HAL_KINETIS_PIN(E, 9, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART5_PIN_TX CYGHWR_HAL_KINETIS_PIN(E, 8, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART5_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART5_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART5_PIN_RX CYGHWR_HAL_FREESCALE_UART5_PIN_RX +# define CYGHWR_IO_FREESCALE_UART5_PIN_TX CYGHWR_HAL_FREESCALE_UART5_PIN_TX +# define CYGHWR_IO_FREESCALE_UART5_PIN_RTS CYGHWR_HAL_FREESCALE_UART5_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART5_PIN_CTS CYGHWR_HAL_FREESCALE_UART5_PIN_CTS +#endif + +#ifndef CYGHWR_HAL_FREESCALE_UART0_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART0_PIN_RX CYGHWR_HAL_KINETIS_PIN(A, 1, 2, 0) +# define CYGHWR_HAL_FREESCALE_UART0_PIN_TX CYGHWR_HAL_KINETIS_PIN(A, 2, 2, 0) +# define CYGHWR_HAL_FREESCALE_UART0_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART0_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART0_PIN_RX CYGHWR_HAL_FREESCALE_UART0_PIN_RX +# define CYGHWR_IO_FREESCALE_UART0_PIN_TX CYGHWR_HAL_FREESCALE_UART0_PIN_TX +# define CYGHWR_IO_FREESCALE_UART0_PIN_RTS CYGHWR_HAL_FREESCALE_UART0_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART0_PIN_CTS CYGHWR_HAL_FREESCALE_UART0_PIN_CTS +#endif + +// ENET PINs + +// MDIO +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDIO CYGHWR_HAL_KINETIS_PIN(B, 0, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDC CYGHWR_HAL_KINETIS_PIN(B, 1, 4, 0) +// Both RMII and MII interface +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXER CYGHWR_HAL_KINETIS_PIN(A, 5, 4, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD1 CYGHWR_HAL_KINETIS_PIN(A, 12, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD0 CYGHWR_HAL_KINETIS_PIN(A, 13, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXEN CYGHWR_HAL_KINETIS_PIN(A, 15, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD0 CYGHWR_HAL_KINETIS_PIN(A, 16, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD1 CYGHWR_HAL_KINETIS_PIN(A, 17, 4, 0) +// RMII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_CRS_DV CYGHWR_HAL_KINETIS_PIN(A, 14, 4, 0) +// MII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD3 CYGHWR_HAL_KINETIS_PIN(A, 9, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD2 CYGHWR_HAL_KINETIS_PIN(A, 10, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXCLK CYGHWR_HAL_KINETIS_PIN(A, 11, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD2 CYGHWR_HAL_KINETIS_PIN(A, 24, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXCLK CYGHWR_HAL_KINETIS_PIN(A, 25, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD3 CYGHWR_HAL_KINETIS_PIN(A, 26, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_CRS CYGHWR_HAL_KINETIS_PIN(A, 27, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MIIO_TXER CYGHWR_HAL_KINETIS_PIN(A, 28, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_COL CYGHWR_HAL_KINETIS_PIN(A, 29, 4, 0) +// IEEE 1588 timers +#define CYGHWR_IO_FREESCALE_ENET0_PIN_1588_CLKIN CYGHWR_HAL_KINETIS_PIN(E, 26, 4, 0) + +#if defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_B) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(B, 2, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(B, 3, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(B, 4, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(B, 5, 4, 0) +#elif defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_C) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(C, 16, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(C, 17, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(C, 18, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(C, 19, 4, 0) +#endif + +// DSPI +// DSPI Pins + +#define KINETIS_PIN_SPI1_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define KINETIS_PIN_SPI1_SCK_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M) +#define KINETIS_PIN_SPI1_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) + +#define KINETIS_PIN_SPI1_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) +#define KINETIS_PIN_SPI1_0_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SIN CYGHWR_HAL_KINETIS_PIN(E, 1, 7, KINETIS_PIN_SPI1_IN_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT CYGHWR_HAL_KINETIS_PIN(E, 3, 7, KINETIS_PIN_SPI1_OUT_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SCK CYGHWR_HAL_KINETIS_PIN(E, 2, 2, KINETIS_PIN_SPI1_SCK_OPT) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(E, 4, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(E, 0, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(E, 5, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(E, 6, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS4 CYGHWR_HAL_KINETIS_PIN_NONE +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 CYGHWR_HAL_KINETIS_PIN_NONE + +// I2C +// I2C Pins + +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SDA CYGHWR_HAL_KINETIS_PIN(D, 9, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SCL CYGHWR_HAL_KINETIS_PIN(D, 8, 2, 0) + +# define CYGHWR_IO_I2C_FREESCALE_I2C1_PIN_SDA CYGHWR_HAL_KINETIS_PIN(C, 11, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C1_PIN_SCL CYGHWR_HAL_KINETIS_PIN(C, 10, 2, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H + diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/misc/redboot_K60_ROM_FPU.ecm b/packages/hal/cortexm/kinetis/twr_k60f120m/current/misc/redboot_K60_ROM_FPU.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/misc/redboot_K60_ROM_FPU.ecm @@ -0,0 +1,83 @@ +# Redboot minimal configuration +# Target: TWR-K60F120M +# Startup: ROM + + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "RedBoot Kinetis TWR-K60F120M" ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; +}; + +cdl_option CYGHWR_HAL_CORTEXM_FPU { + user_value 1 +}; + +cdl_option CYGHWR_HAL_CORTEXM_FPU_SWITCH { + user_value ALL +}; + +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + user_value 1 +}; + +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + user_value 1 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 0 +}; + +#cdl_option CYGBLD_REDBOOT_LOAD_INTO_FLASH { +# user_value 1 +#}; + +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + user_value -1 +}; + +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + user_value -2 +}; + +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_COUNT { + user_value 16 +}; + +#cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { +# user_value 0x20000 +#}; + +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + user_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + user_value ROM +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA { + user_value 1 +}; diff --git a/packages/hal/cortexm/kinetis/twr_k60f120m/current/src/twr_k60f120m_misc.c b/packages/hal/cortexm/kinetis/twr_k60f120m/current/src/twr_k60f120m_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60f120m/current/src/twr_k60f120m_misc.c @@ -0,0 +1,252 @@ +//========================================================================== +// +// twr_k60f120m_misc.c +// +// Cortex-M4 TWR-K60N512 EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contrib(s): Mike Jones +// Date: 2013-06-02 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if !defined(CYG_HAL_STARTUP_RAM) + cyghwr_hal_kinetis_pmc_t *pmc_p = CYGHWR_HAL_KINETIS_PMC_P; + + hal_wdog_disable(); + hal_misc_init(); + + // if ACKISO is set you must clear ackiso before calling pll_init + // or pll init hangs waiting for OSC to initialize + if(pmc_p->regsc & CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M) + pmc_p->regsc |= CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M; + + hal_start_clocks(); +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc1 |= CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_M; + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // System bus RAM partition +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#elif defined CYGMEM_REGION_sram_l + { CYGMEM_REGION_sram_l, CYGMEM_REGION_sram_l+CYGMEM_REGION_sram_l_SIZE-1 }, // On-chip SRAM lower bank +#endif +#ifdef CYGMEM_REGION_ramcod + { CYGMEM_REGION_ramcod, CYGMEM_REGION_ramcod+CYGMEM_REGION_ramcod_SIZE-1 }, // Code bus RAM partition +#endif +#ifdef CYGMEM_REGION_ramnc + { CYGMEM_REGION_ramnc, CYGMEM_REGION_ramnc+CYGMEM_REGION_ramnc_SIZE-1 }, // Non cachable RAM partition +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash [currently none] +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 } // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( ((CYG_ADDRESS)addr >= hal_data_access[i].start) && + ((CYG_ADDRESS)addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram + case 1: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#endif +#ifdef CYGMEM_REGION_sram_l +# define CASE_CODE 3 +# define CASE_RAMNC 4 + case 2: + *start = (unsigned char *)CYGMEM_REGION_sram_l; + *end = (unsigned char *)(CYGMEM_REGION_sram_l + CYGMEM_REGION_sram_l_SIZE); + break; +#else +# define CASE_CODE 2 +# define CASE_RAMNC 3 +#endif + +#ifdef CYGMEM_REGION_ramcod + case CASE_CODE: + *start = (unsigned char *)CYGMEM_REGION_ramcod; + *end = (unsigned char *)(CYGMEM_REGION_ramcod + CYGMEM_REGION_ramcod_SIZE); + break; +#endif + +#ifdef CYGMEM_REGION_ramnc + case CASE_RAMNC: + *start = (unsigned char *)CYGMEM_REGION_ramnc; + *end = (unsigned char *)(CYGMEM_REGION_ramnc + CYGMEM_REGION_ramnc_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + +//========================================================================== +// EOF twr_k60f120m_misc.c diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/ChangeLog b/packages/hal/cortexm/kinetis/twr_k60n512/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/ChangeLog @@ -0,0 +1,66 @@ +2013-04-09 Tomas Frydrych + + * cdl/hal_cortexm_kinetis_twr_k60n512.cdl: + * include/plf_io.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * src/twr_k60n512_misc.c: Clock gating synchronised with variant. + [ Bugzilla 1001814 ] + +2012-10-25 Ilija Kocho + + * src/twr_k60n512_misc.c: Initialization for separate SRAM regions + synchronized with variant. [Bugzilla 1001606] + +2012-05-19 John Dallaway + + * cdl/hal_cortexm_kinetis_twr_k60n512.cdl: Reference per-package + documentation. + +2012-05-18 Ilija Kocho + + * doc/twr_k60n512.sgml: + New file -- TWR-K60N512 platform documentation. [Bug 1001580] + +2012-01-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512.cdl: + * include/plf_io.h: + * src/twr_k60n512_misc.c: + Add entry for DMA, Add CYG_HAL_STARTUP_ENV. Add DSPI pins for SPI1 bus. + Updated for early clock start. [Bugzilla 1001450] + +2011-03-26 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * src/twr_k60n512_misc.c: + New package -- Freescale TWR-K60N512 board. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/cdl/hal_cortexm_kinetis_twr_k60n512.cdl b/packages/hal/cortexm/kinetis/twr_k60n512/current/cdl/hal_cortexm_kinetis_twr_k60n512.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/cdl/hal_cortexm_kinetis_twr_k60n512.cdl @@ -0,0 +1,332 @@ +##========================================================================== +## +## hal_cortexm_kinetis_twr_k60n512.cdl +## +## Cortex-M Freescale TWR-K60N512 platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011, 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-02-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512 { + display "Freescale Kinetis TWR-K60N512 Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_twr_k60n512.h + include_dir cyg/hal + doc ref/kinetis-twr-k60n512.html + hardware + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + requires { is_active(CYGPKG_DEVS_ETH_FREESCALE_ENET) + implies CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" } + + implements CYGINT_IO_SERIAL_FREESCALE_UART3 + implements CYGINT_IO_FREESCALE_I2C0 + + implements CYGINT_HAL_FREESCALE_UART3 + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + + description " + The Freescale TWR K60N512 Platform HAL package provides the support + needed to run eCos on the TWR K60N512 development system. This package + can also be used for other boards that employ a controller from Kinetis + families." + + compile twr_k60n512_misc.c + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_KSZ8041) } + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 16) } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale TWR-K60N512\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platform Clock Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + default_value 50000000 + legal_values { 25000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 0 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. + This option chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console port + if the console and GDB port are the same." + } + + cdl_option CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK { + display "ENET MII MDC clock provided by HAL" + flavor data + active_if CYGPKG_DEVS_ETH_FREESCALE_ENET + parent CYGPKG_DEVS_ETH_FREESCALE_ENET + calculated CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS + description " + ENET needs a clock with typical frequency of up to 2.5 MHz for + MII MDC. The input clock, typically provided by HAL, is further + divided by ENET according to setting of ENET MSCR register in order to + provide frequency within 2.5 MHz range." + } + + cdl_option CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT { + display "IEEE 1588 Port" + active_if CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + parent CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + flavor data + default_value { "B" } + legal_values { "B" "C" "User" } + description " + Digital I/O provided by HAL for ENET IEEE 1588 timers." + } + + cdl_component CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS { + display "MMC Disk SPI bus" + flavor data + parent CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + implements CYGINT_FREESCALE_DSPI1_HAS_MASS + + cdl_option CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS { + display "Device number (CS)" + flavor data + calculated 0 + implements CYGINT_FREESCALE_DSPI1_CS0 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + + cdl_component CYGBLD_HAL_CORTEXM_TWR_MK60N512_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/doc/twr_k60n512.sgml b/packages/hal/cortexm/kinetis/twr_k60n512/current/doc/twr_k60n512.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/doc/twr_k60n512.sgml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TWR-K60N512-KIT Development kit + + + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512 + eCos Support for the Freescale TWR-K60N512 development kit + + + Description + + The Freescale TWR-K60N512-KIT is a development kit for + Freescale Kinetis Cortex-M4 based microcontrollers. + It covers K60, K10 and K20 microcontroller families. + K60N512 is a high end member comprising 512 KiB FLASH and 128 KiB SRAM, + as well as rich set of communication interfaces inclduing Ethernet USB, UARTs CAN, SPI and I2C. + K60 micro-controllres also have a DMA controller and a FlexBus external memory interface. + They are mixed signal devices featuring a 16 bit ADC and a 12 bit DAC. + + + + Configuration + Hardware Setup + + Factory jumper settings on the TWR-K60N512 are fitted for standalone operation of the TWR-K60N512. + In order to use it with the Ethernet PHY on TWR-SER, some jumpers have to be changed from their factory + settings on both TWR-K60N512 and TWR-SER: + + TWR-K60N512 Jumper setting differences from factory settings + + + + + + + Jumper + Setting + Description + + + + + J6 + 2-3 + Select TWR-SER oscillator as clock source. + + + +
+ + TWR-SER Jumper settings differences from factory settings + + + + + + + Jumper + Setting + Description + + + + + J2 + 3-4 + Ethernet PHY clock select: 50MHz + + + J3 + 2-3 + Route 50MHz to CLOCKIN0 + + + J12 + 9-10 + Ethernet PHY config: select RMII mode + + + +
+
+ eCos Configuration + Clocking + + TWR-K60N512 uses default Kinetis variant clocking. + + + Memory + K60 has two 64KiB SRAM banks giving a total of 128KiB on chip SRAM. + + +
+
+ + diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Purpose: TWR-K60N512 platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K60N512 platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_io.h b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/include/plf_io.h @@ -0,0 +1,151 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K60N512 platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +// UART PINs + +#ifndef CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PIN(C, 16, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PIN(C, 17, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART3_PIN_RX CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_IO_FREESCALE_UART3_PIN_TX CYGHWR_HAL_FREESCALE_UART3_PIN_TX +# define CYGHWR_IO_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_FREESCALE_UART3_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_FREESCALE_UART3_PIN_CTS +#endif + +// ENET PINs + +// MDIO +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDIO CYGHWR_HAL_KINETIS_PIN(B, 0, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDC CYGHWR_HAL_KINETIS_PIN(B, 1, 4, 0) +// Both RMII and MII interface +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXER CYGHWR_HAL_KINETIS_PIN(A, 5, 4, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD1 CYGHWR_HAL_KINETIS_PIN(A, 12, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD0 CYGHWR_HAL_KINETIS_PIN(A, 13, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXEN CYGHWR_HAL_KINETIS_PIN(A, 15, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD0 CYGHWR_HAL_KINETIS_PIN(A, 16, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD1 CYGHWR_HAL_KINETIS_PIN(A, 17, 4, 0) +// RMII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_CRS_DV CYGHWR_HAL_KINETIS_PIN(A, 14, 4, 0) +// MII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD3 CYGHWR_HAL_KINETIS_PIN(A, 9, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD2 CYGHWR_HAL_KINETIS_PIN(A, 10, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXCLK CYGHWR_HAL_KINETIS_PIN(A, 11, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD2 CYGHWR_HAL_KINETIS_PIN(A, 24, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXCLK CYGHWR_HAL_KINETIS_PIN(A, 25, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD3 CYGHWR_HAL_KINETIS_PIN(A, 26, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_CRS CYGHWR_HAL_KINETIS_PIN(A, 27, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MIIO_TXER CYGHWR_HAL_KINETIS_PIN(A, 28, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_COL CYGHWR_HAL_KINETIS_PIN(A, 29, 4, 0) +// IEEE 1588 timers +#define CYGHWR_IO_FREESCALE_ENET0_PIN_1588_CLKIN CYGHWR_HAL_KINETIS_PIN(E, 26, 4, 0) + +#if defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_B) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(B, 2, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(B, 3, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(B, 4, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(B, 5, 4, 0) +#elif defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_C) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(C, 16, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(C, 17, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(C, 18, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(C, 19, 4, 0) +#endif + + +// DSPI +// DSPI Pins + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SIN CYGHWR_HAL_KINETIS_PIN(E, 3, 2, KINETIS_PIN_SPI1_IN_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT CYGHWR_HAL_KINETIS_PIN(E, 1, 2, KINETIS_PIN_SPI1_OUT_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SCK CYGHWR_HAL_KINETIS_PIN(E, 2, 2, KINETIS_PIN_SPI1_OUT_OPT) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(E, 4, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(E, 0, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(E, 5, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(E, 6, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS4 CYGHWR_HAL_KINETIS_PIN_NONE +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 CYGHWR_HAL_KINETIS_PIN_NONE + +// I2C +// I2C Pins + +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SDA CYGHWR_HAL_KINETIS_PIN(D, 9, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SCL CYGHWR_HAL_KINETIS_PIN(D, 8, 2, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512/current/src/twr_k60n512_misc.c b/packages/hal/cortexm/kinetis/twr_k60n512/current/src/twr_k60n512_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512/current/src/twr_k60n512_misc.c @@ -0,0 +1,208 @@ +//========================================================================== +// +// twr_k60n512_misc.c +// +// Cortex-M4 TWR-K60N512 EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SRAM) + hal_wdog_disable(); + hal_misc_init(); + hal_start_clocks(); +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // Main RAM +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 }, // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( (addr >= hal_data_access[i].start) && + (addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram + case 1: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + +//========================================================================== +// EOF twr_k60n512_misc.c diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/ChangeLog b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/ChangeLog @@ -0,0 +1,103 @@ +2013-04-28 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl: + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h: (New) + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi: (New) + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h: + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi: + * include/pkgconf/mlt_kinetis_flash_sram2s_ram.h: (Remove) + * include/pkgconf/mlt_kinetis_flash_sram2s_ram.ldi: (Remove) + * include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h: + * include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi: + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h: + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi: + * include/plf_io.h: + * misc/redboot_K60_FXM_SST25XX_ROM.ecm: (New) + * src/twr_k60n512_fxm_misc.c: + Rich memory layout for FlexBus RAM with support for caching. + Remove redundant MLT files. [ Bugzilla 1001837 ] + +2013-04-09 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl: + * include/plf_io.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * src/twr_k60n512_fxm_misc.c: Clock gating synchronised with variant. + [ Bugzilla 1001814 ] + +2012-11-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl: + Removed (obsolete) implementation of CYGINT_HAL_CORTEXM4_CODE. + +2012-10-25 Ilija Kocho + + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi: + * src/twr_k60n512_misc_fxm.c: Initialization for separate SRAM regions + synchronized with variant. [Bugzilla 1001606] + +2012-01-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl, + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi + * /src/twr_k60n512_fxm_misc.c + Fixed memory layout for FlexBus memory. Add different pin options + [Bugzilla 1001579] + +2012-01-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * include/hal_kinetis_flexbus.h + * src/twr_k60n512_fxm_misc.c: + * include/pkgconf/mltkinetis_flash_sram2s_extram_rom.h + * include/pkgconf/mltkinetis_flash_sram2s_extram_rom.ldi + * include/pkgconf/mltkinetis_flash_sram2s_jtag.h + * include/pkgconf/mltkinetis_flash_sram2s_jtag.ldi + * include/pkgconf/mltkinetis_flash_sram2s_ram.h + * include/pkgconf/mltkinetis_flash_sram2s_ram.ldi + * include/pkgconf/mltkinetis_flash_unisram_extram.h + * include/pkgconf/mltkinetis_flash_unisram_extram_jtag.h + * include/pkgconf/mltkinetis_flash_unisram_extram_jtag.ldi + * include/pkgconf/mltkinetis_flash_unisram_extram.ldi + * include/pkgconf/mltkinetis_flash_unisram_extram_ram.h + * include/pkgconf/mltkinetis_flash_unisram_extram_ram.ldi + * include/pkgconf/mltkinetis_flash_unisram_extram_rom.h + * include/pkgconf/mltkinetis_flash_unisram_extram_rom.ldi + * include/pkgconf/mltkinetis_flash_unisram_jtag.h + * include/pkgconf/mltkinetis_flash_unisram_jtag.ldi + * include/pkgconf/mltkinetis_flash_unisram_ram.h + * include/pkgconf/mltkinetis_flash_unisram_ram.ldi + New package -- Freescale TWR-K60N512-FXM board. [Bugzilla 1001450] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/cdl/hal_cortexm_kinetis_twr_k60n512_fxm.cdl @@ -0,0 +1,648 @@ +##========================================================================== +## +## hal_cortexm_kinetis_twr_k60n512_fxm.cdl +## +## Cortex-M Freescale TWR-K60N512 + TWR-FXM platform HAL configuration +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-09-26 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K60N512_FXM { + display "Freescale Kinetis TWR-K60N512-FXM Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_twr_k60n512_fxm.h + include_dir cyg/hal + hardware + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + implements CYGINT_IO_FREESCALE_I2C0 + implements CYGINT_IO_SERIAL_FREESCALE_UART4 + implements CYGINT_HAL_FREESCALE_UART4 + + description " + The Freescale TWR K60N512 FXM Platform package provides the support + needed to run eCos on the TWR K60N512 development system equipped + with TWR-FXM external memory board. This package + can also be used for other boards that employ a controller from Kinetis + families." + + compile twr_k60n512_fxm_misc.c + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_KSZ8041) } + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 16) } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale TWR-K60N512-FXM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYG_HAL_STARTUP_PLF { + display "By platform" + flavor data + parent CYG_HAL_STARTUP_ENV + default_value { "ROM" } + legal_values { "ByVariant" "ROM" "RAM" } + requires { CYG_HAL_STARTUP_PLF != "ByVariant" implies + CYGPKG_HAL_CORTEXM_KINETIS_FBRAM == 1 } + + description " + Startup tupes provided by the platform, in addition to variant + startup types. + If 'ByVariant' is selected, then startup type shall be selected from + the variant (CYG_HAL_STARTUP_VAR). Platform's 'ROM' startup builds + application similar to Variant's 'ROM' but using external RAM (FlexBus). + 'RAM' startup builds application intended for loading by RedBoot into + external RAM." + } + + cdl_component CYGHWR_MEMORY_LAYOUT_PLF { + display "Memory layout by platform" + flavor data + no_define + active_if { CYG_HAL_STARTUP_PLF != "ByVariant" } + implements CYGINT_HAL_CORTEXM_KINETIS_FBRAM + parent CYGHWR_MEMORY_LAYOUT + calculated { + (CYG_HAL_STARTUP_PLF == "ByVariant" ) ? "by variant" : + (CYG_HAL_STARTUP == "RAM") ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_extram_ram" : + (CYG_HAL_STARTUP == "ROM") ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_extram_rom" : + "Error!" } + description "Combination of 'Startup type' and 'Kinetis member in use' + produces the memory layout." + + cdl_option CYGHWR_MEMORY_RAM_RESERVED { + display "Reserved RAM space \[Bytes\]" + flavor data + legal_values 0 to 0x40000 + default_value 0x20000 + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platform Clock Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + default_value 50000000 + legal_values { 25000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 1 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console port if the + console and GDB port are the same." + } + + cdl_component CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS { + display "MMC Disk SPI bus" + flavor data + parent CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + implements CYGINT_FREESCALE_DSPI1_HAS_MASS + + cdl_option CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS { + display "Device number (CS)" + flavor data + calculated 0 + implements CYGINT_FREESCALE_DSPI1_CS0 + } + } + + cdl_option CYGNUM_DEVS_FLASH_SPI_SST25XX_DEV0_MAP_ADDR { + display "SST25XX Flash Mapping Address" + flavor data + parent CYGHWR_DEVS_FLASH_SPI_SST25XX_DEV0 + default_value 0xD0000000 + } + cdl_component CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_BUS { + display "SST25xx SPI bus" + flavor data + parent CYGHWR_DEVS_FLASH_SPI_SST25XX_DEV0 + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + + cdl_option CYGHWR_DEVS_FLASH_SST25XX_DEV0_SPI_CS { + display "Device number (CS)" + flavor data + calculated 1 + implements CYGINT_FREESCALE_DSPI1_CS1 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGPKG_HAL_EXTRN_MEMORY { + display "External memory devices" + parent CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS + flavor none + active_if { + CYGHWR_HAL_KINETIS_FB_CS0 || CYGHWR_HAL_KINETIS_FB_CS1 || + CYGHWR_HAL_KINETIS_FB_CS2 || CYGHWR_HAL_KINETIS_FB_CS3 || + CYGHWR_HAL_KINETIS_FB_CS4 || CYGHWR_HAL_KINETIS_FB_CS5 + } + description " + This is a container for memory devices attached to + external bus such as RAM, FLASH, etc." + } +# FlexBus Implementation + implements CYGINT_HAL_CORTEXM_KINETIS_FLEXBUS + implements CYGINT_HAL_EXTRN_MEMORY + +# CS0 Implementation + implements CYGINT_HAL_KINETIS_FB_CS0 + implements CYGINT_DEVS_RAM0_MICRON_CELLULAR + requires { is_active(CYGPKG_HAL_CORTEXM_KINETIS_FBRAM) implies + CYGHWR_HAL_KINETIS_FBR_SIZE == CYGHWR_HAL_KINETIS_FB_CS0_SIZE } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_AR { + display "Base address" + flavor data + parent CYGHWR_HAL_KINETIS_FB_CS0 + default_value 0x60000000 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_SIZE { + display "Size \[Bytes\]" + flavor data + legal_values { 0x00040000 0x00400000 CYGHWR_RAM0_MICRON_CELLULAR_SIZE } + parent CYGHWR_HAL_KINETIS_FB_CS0 + default_value CYGHWR_RAM0_MICRON_CELLULAR_SIZE + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_BASE { + display "Memory base address" + flavor data + parent CYGHWR_HAL_KINETIS_FB_CS0 + calculated CYGHWR_HAL_KINETIS_FB_CS0_AR + } + + cdl_component CYGHWR_HAL_KINETIS_FB_CS0_MR { + display "Mask register" + flavor data + parent CYGHWR_HAL_KINETIS_FB_CS0 + default_value 0x00FF0001 + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_MR_WP { + display "Write protect" + flavor bool + default_value 0 + } + } + + cdl_component CYGHWR_HAL_KINETIS_FB_CS0_CR { + display "Control register" + flavor none + parent CYGHWR_HAL_KINETIS_FB_CS0 + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_WS { + display "Wait states" + flavor data + default_value 3 + legal_values 0 to 63 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_BLS { + display "Byte lane shift" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_AA { + display "Auto acknowledge enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_component CYGHWR_HAL_KINETIS_FB_CS0_CR_PSB { + display "Port size (bits)" + flavor data + legal_values { 32 8 16 "-16" } + default_value 16 + + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_SWSEN { + display "Secondary wait states enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_SWS { + display "Secondary wait states" + flavor data + legal_values 0 to 63 + default_value 0 + + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_EXALE { + display "Extended address latch enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_ASET { + display "Address setup" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_RDAH { + display "Read address hold or deselect" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_WRAH { + display "Write address hold or deselect" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_BEM { + display "Byte enable mode" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_BSTR { + display "Burst read enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_BSTW { + display "Burst write enable" + flavor data + legal_values { 0 1 } + default_value 0 + } + } + + cdl_component CYGHWR_HAL_KINETIS_FB_CS0_CR_IS { + display "Control register initial setting." + flavor none + parent CYGHWR_HAL_KINETIS_FB_CS0 + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_WS { + display "Wait states" + flavor data + default_value 3 + legal_values 0 to 63 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_AA { + display "Auto acknowledge enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_SWSEN { + display "Secondary wait states enable" + flavor data + legal_values { 0 1 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_SWS { + display "Secondary wait states" + flavor data + legal_values 0 to 63 + default_value 0 + + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_EXALE { + display "Extended address latch enable" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_ASET { + display "Address setup" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_RDAH { + display "Read address hold or deselect" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_WRAH { + display "Write address hold or deselect" + flavor data + legal_values { 0 1 2 3 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_BEM { + display "Byte enable mode" + flavor data + legal_values { 0 1 } + default_value 1 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_BSTR { + display "Burst read enable" + flavor data + legal_values { 0 1 } + default_value 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FB_CS0_CR_IS_BSTW { + display "Burst write enable" + flavor data + legal_values { 0 1 } + default_value 0 + } + } +# CS0 Implementation End +# FlexBus Implementation End + + cdl_option CYGHWR_HAL_KINETIS_FB_EXTRAM_SIZE { + display "External RAM size" + flavor data + calculated CYGHWR_HAL_KINETIS_FB_CS0_SIZE + } + + cdl_option CYGHWR_HAL_KINETIS_FB_EXTRAM_BASE { + display "External RAM base address" + flavor data + calculated CYGHWR_HAL_KINETIS_FB_CS0_BASE + } + + cdl_option CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK { + display "ENET MII MDC clock provided by HAL" + flavor data + active_if CYGPKG_DEVS_ETH_FREESCALE_ENET + parent CYGPKG_DEVS_ETH_FREESCALE_ENET + calculated CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS + description " + ENET needs a clock with typical frequency of up to 2.5 MHz for + MII MDC. The input clock, typically provided by HAL, is further + divided by ENET according to setting of ENET MSCR register in order to + provide frequency within 2.5 MHz range." + } + + cdl_option CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT { + display "IEEE 1588 Port" + active_if CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + parent CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + flavor data + default_value { "B" } + legal_values { "B" "C" "User" } + description " + Digital I/O provided by HAL for ENET IEEE 1588 timers." + } + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGBLD_HAL_CORTEXM_TWR_MK60N512_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description "This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/hal_kinetis_flexbus.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/hal_kinetis_flexbus.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/hal_kinetis_flexbus.h @@ -0,0 +1,143 @@ +#ifndef CYGONCE_FLEXBUS_H +#define CYGONCE_FLEXBUS_H +//============================================================================= +// +// flexbus.h +// +// Kinetis FlexBus specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-08-05 +// Purpose: Kinetis FlexBus specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Flexbus pins + +#define KINETIS_PIN_FB_OPT CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M +#define KINETIS_PIN_FB 5 +#define KINETIS_PIN_FB6 6 + +#define CYGHWR_KINETIS_FB_PIN_AD0 CYGHWR_HAL_KINETIS_PIN(D, 6, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD1 CYGHWR_HAL_KINETIS_PIN(D, 5, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD2 CYGHWR_HAL_KINETIS_PIN(D, 4, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD3 CYGHWR_HAL_KINETIS_PIN(D, 3, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD4 CYGHWR_HAL_KINETIS_PIN(D, 2, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD5 CYGHWR_HAL_KINETIS_PIN(C, 10, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD6 CYGHWR_HAL_KINETIS_PIN(C, 9, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD7 CYGHWR_HAL_KINETIS_PIN(C, 8, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD8 CYGHWR_HAL_KINETIS_PIN(C, 7, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD9 CYGHWR_HAL_KINETIS_PIN(C, 6, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD10 CYGHWR_HAL_KINETIS_PIN(C, 5, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD11 CYGHWR_HAL_KINETIS_PIN(C, 4, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD12 CYGHWR_HAL_KINETIS_PIN(C, 2, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD13 CYGHWR_HAL_KINETIS_PIN(C, 1, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD14 CYGHWR_HAL_KINETIS_PIN(C, 0, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD15 CYGHWR_HAL_KINETIS_PIN(B, 18, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD16 CYGHWR_HAL_KINETIS_PIN(B, 17, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD17 CYGHWR_HAL_KINETIS_PIN(B, 16, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD18 CYGHWR_HAL_KINETIS_PIN(B, 11, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD19 CYGHWR_HAL_KINETIS_PIN(B, 10, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD20 CYGHWR_HAL_KINETIS_PIN(B, 9, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD21 CYGHWR_HAL_KINETIS_PIN(B, 8, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD22 CYGHWR_HAL_KINETIS_PIN(B, 7, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD23 CYGHWR_HAL_KINETIS_PIN(B, 6, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD24 CYGHWR_HAL_KINETIS_PIN(C, 15, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD25 CYGHWR_HAL_KINETIS_PIN(C, 14, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD26 CYGHWR_HAL_KINETIS_PIN(C, 13, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD27 CYGHWR_HAL_KINETIS_PIN(C, 12, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD28 CYGHWR_HAL_KINETIS_PIN(B, 23, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD29 CYGHWR_HAL_KINETIS_PIN(B, 22, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD30 CYGHWR_HAL_KINETIS_PIN(B, 21, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_AD31 CYGHWR_HAL_KINETIS_PIN(B, 20, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) + +#define CYGHWR_KINETIS_FB_PIN_A16 CYGHWR_HAL_KINETIS_PIN(D, 8, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A17 CYGHWR_HAL_KINETIS_PIN(D, 9, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A18 CYGHWR_HAL_KINETIS_PIN(D, 10, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A19 CYGHWR_HAL_KINETIS_PIN(D, 11, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A20 CYGHWR_HAL_KINETIS_PIN(D, 12, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A21 CYGHWR_HAL_KINETIS_PIN(D, 13, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A22 CYGHWR_HAL_KINETIS_PIN(D, 14, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_A23 CYGHWR_HAL_KINETIS_PIN(D, 15, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) + +#define CYGHWR_KINETIS_FB_PIN_CLKOUT CYGHWR_HAL_KINETIS_PIN(C, 3, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CLKOUT_OFF \ + CYGHWR_HAL_KINETIS_PIN(C, 3, CYGHWR_HAL_KINETIS_PORT_PCR_MUX_GPIO, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) + +#define CYGHWR_KINETIS_FB_PIN_RW CYGHWR_HAL_KINETIS_PIN(C, 11, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_OE CYGHWR_HAL_KINETIS_PIN(B, 19, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) + +// Following pins are additionally multiplexed by FB_CSPMCR + +#define CYGHWR_KINETIS_FB_PIN_BE23_16 CYGHWR_HAL_KINETIS_PIN(C, 16, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BE31_24 CYGHWR_HAL_KINETIS_PIN(C, 17, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BE15_8 CYGHWR_HAL_KINETIS_PIN(C, 18, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BE7_0 CYGHWR_HAL_KINETIS_PIN(C, 19, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) + +#define CYGHWR_KINETIS_FB_PIN_BLS15_8 CYGHWR_HAL_KINETIS_PIN(C, 16, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BLS7_0 CYGHWR_HAL_KINETIS_PIN(C, 17, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BLS23_16 CYGHWR_HAL_KINETIS_PIN(C, 18, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_BLS31_24 CYGHWR_HAL_KINETIS_PIN(C, 19, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) + +#define CYGHWR_KINETIS_FB_PIN_CS5 CYGHWR_HAL_KINETIS_PIN(C, 16, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS4 CYGHWR_HAL_KINETIS_PIN(C, 17, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(C, 18, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(C, 19, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(D, 0, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(D, 1, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_CS0_LOW \ + CYGHWR_HAL_KINETIS_PIN(D, 1, CYGHWR_HAL_KINETIS_PORT_PCR_MUX_GPIO, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) + +#define CYGHWR_KINETIS_FB_PIN_TSIZ0 CYGHWR_HAL_KINETIS_PIN(C, 16, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_TSIZ1 CYGHWR_HAL_KINETIS_PIN(C, 17, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_TST CYGHWR_HAL_KINETIS_PIN(C, 18, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_ALE CYGHWR_HAL_KINETIS_PIN(D, 0, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) +#define CYGHWR_KINETIS_FB_PIN_TS CYGHWR_HAL_KINETIS_PIN(D, 0, KINETIS_PIN_FB, KINETIS_PIN_FB_OPT) + +#define CYGHWR_KINETIS_FB_PIN_TA CYGHWR_HAL_KINETIS_PIN(C, 19, KINETIS_PIN_FB6, KINETIS_PIN_FB_OPT) + +//----------------------------------------------------------------------------- +// end of flexbus.h +#endif // CYGONCE_FLEXBUS_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h @@ -0,0 +1,32 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FBR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_FBR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_FBR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi @@ -0,0 +1,41 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE + sram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + USER_SECTION (code_sram, sram_l, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 + 0x100, LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000, LMA_EQ_VMA) + SECTION_rom_vectors (ramcod, CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LMA_EQ_VMA) + SECTION_RELOCS (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, CYGHWR_HAL_KINETIS_FBR_CACHED_BASE+CYGHWR_MEMORY_RAM_RESERVED, LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; + diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h @@ -0,0 +1,40 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_FBR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_FBR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FBR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +//#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FBR_BASE) +//#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE) +//#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi @@ -0,0 +1,49 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + sram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + USER_SECTION (code_sram, sram_l, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 (NOLOAD), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000, FOLLOWING (.got)) + SECTION_data (ram, CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.h @@ -0,0 +1,26 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FB_EXTRAM_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FB_EXTRAM_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram.ldi @@ -0,0 +1,35 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = CYGHWR_HAL_KINETIS_FB_EXTRAM_BASE, LENGTH = CYGHWR_HAL_KINETIS_FB_EXTRAM_SIZE + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x20000400 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h @@ -0,0 +1,28 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FBR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_FBR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_FBR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi @@ -0,0 +1,39 @@ +// eCos memory layout + +#include +#include + + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_sram (sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 + 0x100, LMA_EQ_VMA) + SECTION_rom_vectors (ramcod, CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LMA_EQ_VMA) + SECTION_RELOCS (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, CYGHWR_HAL_KINETIS_FBR_CACHED_BASE + CYGHWR_MEMORY_RAM_RESERVED, LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h @@ -0,0 +1,32 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_FBR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_FBR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_FBR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi @@ -0,0 +1,47 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, FOLLOWING (.got)) + SECTION_data (ram, CYGHWR_HAL_KINETIS_FBR_CACHED_BASE, FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.h @@ -0,0 +1,24 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.ldi b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/pkgconf/mlt_kinetis_flash_unisram_ram.ldi @@ -0,0 +1,43 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH security configuration. Must be present at 0x00000400 + // Warning: Omitting FLASH security configuration or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_security 0x00000400 : { KEEP (*(.flash_security)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Purpose: TWR-K60N512-FXM platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K60N512-FXM platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_io.h b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/include/plf_io.h @@ -0,0 +1,194 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: TWR-K60N512 platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +// UART PINs + +#ifndef CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# if 0 +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PIN(E, 5, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PIN(E, 4, 3, 0) +# elif 0 +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PIN(C, 16, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PIN(C, 17, 3, 0) +# else +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# endif +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# if 0 +# define CYGHWR_IO_FREESCALE_UART3_PIN_RX CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_IO_FREESCALE_UART3_PIN_TX CYGHWR_HAL_FREESCALE_UART3_PIN_TX +# define CYGHWR_IO_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_FREESCALE_UART3_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_FREESCALE_UART3_PIN_CTS +# endif +#endif + +#if 1 +#ifndef CYGHWR_HAL_FREESCALE_UART4_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART4_PIN_RX CYGHWR_HAL_KINETIS_PIN(E, 25, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART4_PIN_TX CYGHWR_HAL_KINETIS_PIN(E, 24, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART4_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART4_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + + +# define CYGHWR_IO_FREESCALE_UART4_PIN_RX CYGHWR_HAL_FREESCALE_UART4_PIN_RX +# define CYGHWR_IO_FREESCALE_UART4_PIN_TX CYGHWR_HAL_FREESCALE_UART4_PIN_TX +# define CYGHWR_IO_FREESCALE_UART4_PIN_RTS CYGHWR_HAL_FREESCALE_UART4_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART4_PIN_CTS CYGHWR_HAL_FREESCALE_UART4_PIN_CTS + +#endif +#endif + + +// ENET PINs + +// MDIO +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDIO CYGHWR_HAL_KINETIS_PIN(B, 0, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDC CYGHWR_HAL_KINETIS_PIN(B, 1, 4, 0) +// Both RMII and MII interface +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXER CYGHWR_HAL_KINETIS_PIN(A, 5, 4, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD1 CYGHWR_HAL_KINETIS_PIN(A, 12, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD0 CYGHWR_HAL_KINETIS_PIN(A, 13, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXEN CYGHWR_HAL_KINETIS_PIN(A, 15, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD0 CYGHWR_HAL_KINETIS_PIN(A, 16, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD1 CYGHWR_HAL_KINETIS_PIN(A, 17, 4, 0) +// RMII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_CRS_DV CYGHWR_HAL_KINETIS_PIN(A, 14, 4, 0) +// MII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD3 CYGHWR_HAL_KINETIS_PIN(A, 9, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD2 CYGHWR_HAL_KINETIS_PIN(A, 10, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXCLK CYGHWR_HAL_KINETIS_PIN(A, 11, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD2 CYGHWR_HAL_KINETIS_PIN(A, 24, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXCLK CYGHWR_HAL_KINETIS_PIN(A, 25, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD3 CYGHWR_HAL_KINETIS_PIN(A, 26, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_CRS CYGHWR_HAL_KINETIS_PIN(A, 27, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MIIO_TXER CYGHWR_HAL_KINETIS_PIN(A, 28, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_COL CYGHWR_HAL_KINETIS_PIN(A, 29, 4, 0) +// IEEE 1588 timers +#define CYGHWR_IO_FREESCALE_ENET0_PIN_1588_CLKIN CYGHWR_HAL_KINETIS_PIN(E, 26, 4, 0) + +#if defined(CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT_B) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(B, 2, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(B, 3, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(B, 4, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(B, 5, 4, 0) +#elif defined(CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT_C) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(C, 16, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(C, 17, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(C, 18, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(C, 19, 4, 0) +#endif + +// FlexBus Memory +#define CYGHWR_HAL_FB_CSPMCR_G1_SEL CYGHWR_HAL_FB_CSPMCR_G1_TS +#define CYGHWR_HAL_FB_CSPMCR_G2_SEL CYGHWR_HAL_FB_CSPMCR_G2_BE_31_24 +#define CYGHWR_HAL_FB_CSPMCR_G3_SEL CYGHWR_HAL_FB_CSPMCR_G3_BE_23_16 +#define CYGHWR_HAL_FB_CSPMCR_G4_SEL CYGHWR_HAL_FB_CSPMCR_G4_CS2 +#define CYGHWR_HAL_FB_CSPMCR_G5_SEL CYGHWR_HAL_FB_CSPMCR_G5_TA + +#define CYGHWR_HAL_FB_CSPMCR_SETSEL (CYGHWR_HAL_FB_CSPMCR_G1_SEL + \ + CYGHWR_HAL_FB_CSPMCR_G2_SEL + \ + CYGHWR_HAL_FB_CSPMCR_G3_SEL + \ + CYGHWR_HAL_FB_CSPMCR_G4_SEL + \ + CYGHWR_HAL_FB_CSPMCR_G5_SEL ) + +// DSPI +// DSPI Pins + +#define KINETIS_PIN_SPI1_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M) + +#define KINETIS_PIN_SPI1_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M) + +#define KINETIS_PIN_SPI1_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SIN CYGHWR_HAL_KINETIS_PIN(E, 3, 2, KINETIS_PIN_SPI1_IN_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT CYGHWR_HAL_KINETIS_PIN(E, 1, 2, KINETIS_PIN_SPI1_OUT_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SCK CYGHWR_HAL_KINETIS_PIN(E, 2, 2, KINETIS_PIN_SPI1_OUT_OPT) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(E, 4, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(E, 0, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(E, 5, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(E, 6, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS4 CYGHWR_HAL_KINETIS_PIN_NONE +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 CYGHWR_HAL_KINETIS_PIN_NONE + +// I2C +// I2C Pins + +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SDA CYGHWR_HAL_KINETIS_PIN(D, 9, 2, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SCL CYGHWR_HAL_KINETIS_PIN(D, 8, 2, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/misc/redboot_K60_FXM_SST25XX_ROM.ecm b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/misc/redboot_K60_FXM_SST25XX_ROM.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/misc/redboot_K60_FXM_SST25XX_ROM.ecm @@ -0,0 +1,81 @@ +# Redboot minimal configuration +# Target: TWR-K70F120M +# Startup: ROM with external RAM + + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "RedBoot Kinetis TWR-K60N512-FXM" ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; +}; + +cdl_component CYGHWR_DEVS_FLASH_SPI_SST25XX_DEV0 { + user_value 1 +}; + +cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP { + user_value 100000000 +}; + +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + user_value 16384 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 0 +}; + +#cdl_option CYGBLD_REDBOOT_LOAD_INTO_FLASH { +# user_value 1 +#}; + +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + user_value -4 +}; + +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + user_value -8 +}; + +#cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_COUNT { +# user_value 16 +#}; + +#cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { +# user_value 0x20000 +#}; + +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + user_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + user_value ROM +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA { + user_value 1 +}; + + diff --git a/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/src/twr_k60n512_fxm_misc.c b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/src/twr_k60n512_fxm_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k60n512_fxm/current/src/twr_k60n512_fxm_misc.c @@ -0,0 +1,446 @@ +//========================================================================== +// +// twr_k60n512_fxm_misc.c +// +// Cortex-M3 TWR-K60N512 EVAL + TWR_FXM HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS +#include +#include + +// Dependent on FlexBus memory properties up to two flexbus setting stages +// may be needed + +// Macro for final setting of CSCR +// Final settings take place when system clock is completely initialized and +// it is possible to program FlexBus memory with desired setting. +#define CYGHWR_HAL_FB_CSCR(__bits,__cs) \ + VALUE_(CYGHWR_HAL_FB_CSCR_##__bits##_S, \ + CYGHWR_HAL_KINETIS_FB_CS##__cs##_CR_##__bits) + +#define CYGHWR_HAL_KINETIS_FB_CS_CR(__cs) ( CYGHWR_HAL_FB_CSCR(SWS, __cs) + \ + CYGHWR_HAL_FB_CSCR(SWSEN, __cs) + CYGHWR_HAL_FB_CSCR(EXALE, __cs) + \ + CYGHWR_HAL_FB_CSCR(ASET, __cs) + CYGHWR_HAL_FB_CSCR(RDAH, __cs) + \ + CYGHWR_HAL_FB_CSCR(WRAH, __cs) + CYGHWR_HAL_FB_CSCR(WS, __cs) + \ + CYGHWR_HAL_FB_CSCR(BLS, __cs) + CYGHWR_HAL_FB_CSCR(AA, __cs) + \ + CYGHWR_HAL_FB_CSCR(PS, __cs) + CYGHWR_HAL_FB_CSCR(BEM, __cs) + \ + CYGHWR_HAL_FB_CSCR(BSTR, __cs) + CYGHWR_HAL_FB_CSCR(BSTW, __cs)) + +// Macros for initial settings of CSCR +// Initial settings are used immediately after boot and make it possible to +// utilize FlexBus memory with it's power-up setting. +#define CYGHWR_HAL_FB_CSCR_IS(__bits,__cs) \ + VALUE_(CYGHWR_HAL_FB_CSCR_##__bits##_S, \ + CYGHWR_HAL_KINETIS_FB_CS##__cs##_CR_IS_##__bits) + +#define CYGHWR_HAL_KINETIS_FB_CS_CR_IS(__cs) ( CYGHWR_HAL_FB_CSCR_IS(SWS, __cs) + \ + CYGHWR_HAL_FB_CSCR_IS(SWSEN, __cs) + CYGHWR_HAL_FB_CSCR_IS(EXALE, __cs) + \ + CYGHWR_HAL_FB_CSCR_IS(ASET, __cs) + CYGHWR_HAL_FB_CSCR_IS(RDAH, __cs) + \ + CYGHWR_HAL_FB_CSCR_IS(WRAH, __cs) + CYGHWR_HAL_FB_CSCR_IS(WS, __cs) + \ + CYGHWR_HAL_FB_CSCR(BLS, __cs) + CYGHWR_HAL_FB_CSCR_IS(AA, __cs) + \ + CYGHWR_HAL_FB_CSCR(PS, __cs) + CYGHWR_HAL_FB_CSCR_IS(BEM, __cs) + \ + CYGHWR_HAL_FB_CSCR_IS(BSTR, __cs) + CYGHWR_HAL_FB_CSCR_IS(BSTW, __cs)) + +// Functions for final and initial FlexBus setting +// Description is with the code below. +static inline void hal_flexbus_init_initial(void); +static inline void hal_flexbus_init_final(void); +#endif // CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SRAM) + hal_wdog_disable(); + hal_misc_init(); +# ifdef CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS + { + // This delay is needed for Micron RAM wake-up. + cyg_uint32 busy_delay; + for(busy_delay = 0x100000; busy_delay; busy_delay--) + __asm__ volatile ("nop\n"); + + hal_flexbus_init_initial(); + + hal_start_clocks(); + + for(busy_delay = 0x100000; busy_delay; busy_delay--) + __asm__ volatile ("nop\n"); + + hal_flexbus_init_final(); + } +# else + hal_start_clocks(); +# endif +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS + +// FlexBus + +static const cyg_uint32 const flexbus_pins[] = { + CYGHWR_KINETIS_FB_PIN_CLKOUT_OFF, + + CYGHWR_KINETIS_FB_PIN_CS0, + CYGHWR_KINETIS_FB_PIN_OE, + CYGHWR_KINETIS_FB_PIN_RW, +# if 0 //(CYGHWR_HAL_KINETIS_FB_CS_CR(0) & CYGHWR_HAL_FB_CSCR_BLS_M) + CYGHWR_KINETIS_FB_PIN_BLS7_0, + CYGHWR_KINETIS_FB_PIN_BLS15_8, +# else + CYGHWR_KINETIS_FB_PIN_BE23_16, + CYGHWR_KINETIS_FB_PIN_BE31_24, +# endif + CYGHWR_KINETIS_FB_PIN_TS, + + CYGHWR_KINETIS_FB_PIN_AD0, + CYGHWR_KINETIS_FB_PIN_AD1, + CYGHWR_KINETIS_FB_PIN_AD2, + CYGHWR_KINETIS_FB_PIN_AD3, + CYGHWR_KINETIS_FB_PIN_AD4, + CYGHWR_KINETIS_FB_PIN_AD5, + CYGHWR_KINETIS_FB_PIN_AD6, + CYGHWR_KINETIS_FB_PIN_AD7, + CYGHWR_KINETIS_FB_PIN_AD8, + CYGHWR_KINETIS_FB_PIN_AD9, + CYGHWR_KINETIS_FB_PIN_AD10, + CYGHWR_KINETIS_FB_PIN_AD11, + CYGHWR_KINETIS_FB_PIN_AD12, + CYGHWR_KINETIS_FB_PIN_AD13, + CYGHWR_KINETIS_FB_PIN_AD14, + CYGHWR_KINETIS_FB_PIN_AD15, + CYGHWR_KINETIS_FB_PIN_AD16, + CYGHWR_KINETIS_FB_PIN_AD17 +# if CYGHWR_HAL_KINETIS_FB_CS0_SIZE > 0x00040000 + , + CYGHWR_KINETIS_FB_PIN_AD18, + CYGHWR_KINETIS_FB_PIN_AD19, + CYGHWR_KINETIS_FB_PIN_AD20, + CYGHWR_KINETIS_FB_PIN_AD21 +# if CYGHWR_HAL_KINETIS_FB_CS0_SIZE > 0x00400000 + , + CYGHWR_KINETIS_FB_PIN_AD22, + CYGHWR_KINETIS_FB_PIN_AD23 +# if 0 //!(CYGHWR_HAL_KINETIS_FB_CS_CR(0) & CYGHWR_HAL_FB_CSCR_BLS_M) + , + CYGHWR_KINETIS_FB_PIN_AD24, + CYGHWR_KINETIS_FB_PIN_AD25, + CYGHWR_KINETIS_FB_PIN_AD26, + CYGHWR_KINETIS_FB_PIN_AD27, + CYGHWR_KINETIS_FB_PIN_AD28, + CYGHWR_KINETIS_FB_PIN_AD29, + CYGHWR_KINETIS_FB_PIN_AD30, + CYGHWR_KINETIS_FB_PIN_AD31 +# endif +# endif // CYGHWR_HAL_KINETIS_FB_CS0_SIZE > 0x00400000 +# endif // CYGHWR_HAL_KINETIS_FB_CS0_SIZE > 0x00040000 +}; + +static const cyg_uint32 const flexbus_pins_final_diff[] = { + CYGHWR_KINETIS_FB_PIN_CLKOUT +}; + +// Initialize FlexBus for use until we have main clock. +// Asynchronous mode. +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_flexbus_init_initial(void) +{ + cyghwr_hal_kinetis_fb_t *fb_p = CYGHWR_HAL_KINETIS_FB_P; + + CYGHWR_IO_CLOCK_ENABLE(CYGHWR_HAL_KINETIS_SIM_SCGC_FLEXBUS); + +# ifdef CYGHWR_HAL_KINETIS_FB_CS0 + fb_p->csel[0] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS0_AR, + CYGHWR_HAL_KINETIS_FB_CS0_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(0) }; +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS1 + fb_p->csel[1] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS1_AR, + CYGHWR_HAL_KINETIS_FB_CS1_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(1) }; +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS2 + fb_p->csel[2] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS2_AR, + CYGHWR_HAL_KINETIS_FB_CS2_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(2) }; +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS3 + fb_p->csel[3] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS3_AR, + CYGHWR_HAL_KINETIS_FB_CS3_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(3) }; +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS4 + fb_p->csel[4] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS4_AR, + CYGHWR_HAL_KINETIS_FB_CS4_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(4) }; +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS4 + fb_p->csel[5] = (cyghwr_hal_kinetis_fbcs_t) { CYGHWR_HAL_KINETIS_FB_CS5_AR, + CYGHWR_HAL_KINETIS_FB_CS5_MR, CYGHWR_HAL_KINETIS_FB_CS_CR_IS(5) }; +# endif + + fb_p->cspmcr = CYGHWR_HAL_FB_CSPMCR_SETSEL; + + HAL_SET_PINS(flexbus_pins); +} + +// Initialize FlexBus to it's normal working condition +// Synchronous mode with burst support +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_flexbus_init_final(void) +{ + cyghwr_hal_kinetis_fb_t *fb_p = CYGHWR_HAL_KINETIS_FB_P; + + // Enable RAM synchronous/burst mode + ram_micron_reg_set(CYGHWR_DEVS_RAM_MICRON_BCR, + CYGHWR_RAM0_MICRON_BCR_SETTO, + (cyg_uint16 *)CYGHWR_HAL_KINETIS_FB_CS0_AR, + CYGHWR_RAM0_MICRON_CELLULAR_SIZE); + + // Apply FlexBus clock... + HAL_SET_PINS(flexbus_pins_final_diff); + + // ...and final CS setting for burst, etc. +# ifdef CYGHWR_HAL_KINETIS_FB_CS0 + fb_p->csel[0].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(0); +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS1 + fb_p->csel[1].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(1); +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS2 + fb_p->csel[2].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(2); +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS3 + fb_p->csel[3].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(3); +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS4 + fb_p->csel[4].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(4); +# endif +# ifdef CYGHWR_HAL_KINETIS_FB_CS5 + fb_p->csel[5].cscr = CYGHWR_HAL_KINETIS_FB_CS_CR(5); +# endif +} + +#endif // CYGHWR_HAL_CORTEXM_KINETIS_FLEXBUS + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // System bus RAM partition +#if 1 //def CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#elif defined CYGMEM_REGION_sram_l + { CYGMEM_REGION_sram_l, CYGMEM_REGION_sram_l+CYGMEM_REGION_sram_l_SIZE-1 }, // On-chip SRAM lower bank +#endif +#ifdef CYGMEM_REGION_ramcod + { CYGMEM_REGION_ramcod, CYGMEM_REGION_ramcod+CYGMEM_REGION_ramcod_SIZE-1 }, // Code bus RAM partition +#endif +#ifdef CYGMEM_REGION_ramnc + { CYGMEM_REGION_ramnc, CYGMEM_REGION_ramnc+CYGMEM_REGION_ramnc_SIZE-1 }, // Non cachable RAM partition +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash [currently none] +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 } // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( ((CYG_ADDRESS)addr >= hal_data_access[i].start) && + ((CYG_ADDRESS)addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external RAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram + case 1: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#endif +#ifdef CYGMEM_REGION_sram_l +# define CASE_CODE 3 +# define CASE_RAMNC 4 + case 2: + *start = (unsigned char *)CYGMEM_REGION_sram_l; + *end = (unsigned char *)(CYGMEM_REGION_sram_l + CYGMEM_REGION_sram_l_SIZE); + break; +#else +# define CASE_CODE 2 +# define CASE_RAMNC 3 +#endif + +#ifdef CYGMEM_REGION_ramcod + case CASE_CODE: + *start = (unsigned char *)CYGMEM_REGION_ramcod; + *end = (unsigned char *)(CYGMEM_REGION_ramcod + CYGMEM_REGION_ramcod_SIZE); + break; +#endif + +#ifdef CYGMEM_REGION_ramnc + case CASE_RAMNC: + *start = (unsigned char *)CYGMEM_REGION_ramnc; + *end = (unsigned char *)(CYGMEM_REGION_ramnc + CYGMEM_REGION_ramnc_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + +//========================================================================== +// EOF twr_k60n512_fxm_misc.c diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/ChangeLog b/packages/hal/cortexm/kinetis/twr_k70f120m/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/ChangeLog @@ -0,0 +1,110 @@ +2013-04-09 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: + + Add requirement for WRITETHRU data cache startup mode when eDMA is in use. + Sync with change in eDMA driver [ Bugzilla 1001838 ] + +2013-04-09 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: + * include/plf_io.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * src/twr_k70f120m_misc.c: Clock gating synchronised with variant. + [ Bugzilla 1001814 ] + +2013-03-09 Ilija Kocho + + * misc/redboot_K70_ROM_FPU.ecm: Add ECM file + +2012-11-30 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: Sync with variant changes due to + hardware floating point support. Implements CYGINT_HAL_FPV4_SP_D16. + Changed maximum peripheral bus clocks to 75MHz. + [Bugzilla 1001607] + +2012-11-04 Ilija Kocho + + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi + * include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi: + Recognize 256 Bytes space for virtual vectors in sram. + + * twr_k70f120m/current/cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: + Add settings for Kinetis internal flash. [Bugzilla 1001561] + +2012-09-28 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi + * include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h + * current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi + * current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h + * current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h + * include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi + * src/twr_k70f120m_misc.c: + Synchronized with Kinetis variant changes to SDRAM controller support. + Memory layouts adapted to separate data and code cacing partitions. + [Bugzilla 1001606] + +2012-05-19 John Dallaway + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: Reference per-package + documentation. + +2012-05-18 Ilija Kocho + + * doc/twr_k70f120m.sgml: + New file -- TWR-K70F120M platform documentation. [Bug 1001580] + +2012-05-17 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: + Bug fix: Do not implement external memory interface if Platform startup is + not selected. [ Bugzilla 1001590 ] + +2012-02-25 Ilija Kocho + + * cdl/hal_cortexm_kinetis_twr_k70f120m.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h: + * pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi: + * pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h: + * pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi: + * pkgconf/mlt_kinetis_flash_unisram_extram_ram.h: + * pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi: + * pkgconf/mlt_kinetis_flash_unisram_extram_rom.h: + * pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi: + * src/twr_k70f120m_misc.c: + New package -- Freescale TWR-K70F120M board. [Bugzilla 1001579] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/cdl/hal_cortexm_kinetis_twr_k70f120m.cdl b/packages/hal/cortexm/kinetis/twr_k70f120m/current/cdl/hal_cortexm_kinetis_twr_k70f120m.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/cdl/hal_cortexm_kinetis_twr_k70f120m.cdl @@ -0,0 +1,444 @@ +##========================================================================== +## +## hal_cortexm_kinetis_twr_k70f120m.cdl +## +## Cortex-M Freescale TWR-K70F120M platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2012-02-25 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS_TWR_K70F120M { + display "Freescale Kinetis TWR-K70F120M Platform" + parent CYGPKG_HAL_CORTEXM_KINETIS + define_header hal_cortexm_kinetis_twr_k70f120m.h + include_dir cyg/hal + doc ref/kinetis-twr-k70f120m.html + hardware + description " + The Freescale TWR K70F120M Platform HAL package provides the support + needed to run eCos on the TWR K70F120M development system. This package + can also be used for other boards that employ a controller from Kinetis + families." + + compile twr_k70f120m_misc.c + + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + requires { is_active(CYGPKG_DEVS_ETH_FREESCALE_ENET) + implies CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" } + + implements CYGINT_HAL_CACHE + + requires { CYGHWR_HAL_CORTEXM_KINETIS_FPU_DEFAULT == "F" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM_DEFAULT == 70 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 30 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 40 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM != 50 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT == "1M0" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 } + requires { is_active(CYGPKG_DEVS_FLASH_KINETIS) implies + CYGNUM_DEVS_KINETIS_FLASH_BLOCK_SIZE == 0x1000 } + requires { is_active(CYGPKG_DEVS_FLASH_KINETIS) implies + CYGNUM_DEVS_KINETIS_FLASH_LONGWORD_SIZE == 8 } + + implements CYGINT_IO_SERIAL_FREESCALE_UART2 + implements CYGINT_IO_FREESCALE_I2C0 + + implements CYGINT_HAL_FREESCALE_UART2 + implements CYGINT_HAL_CORTEXM_KINETIS_RTC + + implements CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + implements CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 + implements CYGINT_HAL_CORTEXM_KINETIS_150 + + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX == 75000000 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX == 75000000 } + requires { CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX == 25000000 } + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_KSZ8041) } + requires { is_active(CYGPKG_HAL_FREESCALE_EDMA) implies + (CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 32) } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Freescale TWR-K70F120M\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + puts $::cdl_system_header "#define CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES 4000000" + } + + cdl_component CYG_HAL_STARTUP_ENV { + display "Startup type" + flavor data + no_define + calculated { + !CYG_HAL_STARTUP_PLF ? CYG_HAL_STARTUP : + ((CYG_HAL_STARTUP_PLF == "ByVariant") ? + (CYG_HAL_STARTUP . "(Variant)") : + (CYG_HAL_STARTUP . "(Platform)")) + } + description " + Startup type configuration defines the system memory layout. + Startup type can be defined by the variant (CYG_HAL_STARTUP_VAR) + or a platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_option CYG_HAL_STARTUP_PLF { + display "By platform" + flavor data + parent CYG_HAL_STARTUP_ENV + default_value { "ROM" } + legal_values { "ByVariant" "ROM" "RAM" } + + requires { CYG_HAL_STARTUP_PLF != "ByVariant" implies + CYGPKG_HAL_CORTEXM_KINETIS_DDRMC == 1 } + + description " + Startup tupes provided by the platform, in addition to variant + startup types. + If 'ByVariant' is selected, then startup type shall be selected + from the variant (CYG_HAL_STARTUP_VAR). Platform's 'ROM' startup + builds application similar to Variant's 'ROM' but using external + RAM (DDRAM). 'RAM' startup builds application intended for loading + by RedBoot into external RAM." + } + + cdl_component CYGHWR_MEMORY_LAYOUT_PLF { + display "Memory layout by platform" + flavor data + active_if { CYG_HAL_STARTUP_PLF != "ByVariant" } + implements CYGINT_HAL_CORTEXM_KINETIS_DDRAM + no_define + parent CYGHWR_MEMORY_LAYOUT + calculated { + (CYG_HAL_STARTUP_PLF == "ByVariant" ) ? "by variant" : + (CYG_HAL_STARTUP == "RAM") ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_extram_ram" : + (CYG_HAL_STARTUP == "ROM") ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_extram_rom" : + "Error!" + } + description " + Combination of 'Startup type' and 'Kinetis member in use' + produces the memory layout." + + cdl_option CYGHWR_MEMORY_RAM_RESERVED { + display "Reserved RAM space \[Bytes\]" + flavor data + legal_values 0 to 0x40000 + default_value 0x20000 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP { + display "Platform suggested system frequency setpoint" + flavor data + no_define + legal_values 96000000 100000000 120000000 150000000 200000000 + default_value 120000000 + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP { + display "Platform suggested auxiliary frequency setpoint" + flavor data + no_define + legal_values 96000000 100000000 120000000 150000000 200000000 + default_value 120000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ { + display "Platgorm XTAL/OSC Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + default_value 50000000 + legal_values { 12000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ { + display "Platform XTAL1/OSC1 Frequency" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "OSC" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + default_value 50000000 + legal_values { 12000000 50000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC_CAP { + display "Platform requred XTAL || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_OSC1_CAP { + display "Platform requred XTAL1 || C \[pF\]" + flavor bool + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + requires { CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP == 20 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLF_RTC { + display "Platform requred RTC XTAL || C \[pF\]" + flavor bool + default_value 0 + parent CYGHWR_HAL_CORTEXM_KINETIS_RTC + requires { CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP == 20 } + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + legal_values 0 to 2 + default_value 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR board has one serial port fitted to RS232 connector. + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TWR has one serial port fitted to RS232 connector. + This option chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console port + if the console and GDB port are the same." + } + + cdl_option CYGHWR_FREESCALE_ENET_MII_MDC_HAL_CLOCK { + display "ENET MII MDC clock provided by HAL" + flavor data + active_if CYGPKG_DEVS_ETH_FREESCALE_ENET + parent CYGPKG_DEVS_ETH_FREESCALE_ENET + calculated CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS + description " + ENET needs a clock with typical frequency of up to 2.5 MHz for + MII MDC. The input clock, typically provided by HAL, is further + divided by ENET according to setting of ENET MSCR register in order to + provide frequency within 2.5 MHz range." + } + + cdl_option CYGHWR_HAL_FREESCALE_ENET_E0_1588_PORT { + display "IEEE 1588 Port" + active_if CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + parent CYGSEM_DEVS_ETH_FREESCALE_ENET_1588 + flavor data + default_value { "B" } + legal_values { "B" "C" "User" } + description " + Digital I/O provided by HAL for ENET IEEE 1588 timers." + } + + cdl_component CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_BUS { + display "MMC Disk SPI bus" + flavor data + parent CYGPKG_DEVS_DISK_MMC_FREESCALE_DSPI + calculated 1 + + requires CYGHWR_DEVS_SPI_FREESCALE_DSPI1 == 1 + implements CYGINT_DEVS_SPI_FREESCALE_DSPI1 + implements CYGINT_FREESCALE_DSPI1_HAS_MASS + requires { (is_active(CYGSEM_HAL_DCACHE_STARTUP_MODE) + && CYGINT_DEVS_SPI_DSPI_DMA_USE) + implies CYGSEM_HAL_DCACHE_STARTUP_MODE == "WRITETHRU" } + + cdl_option CYGHWR_DEVS_DISK_MMC_FREESCALE_DSPI_CS { + display "Device number (CS)" + flavor data + legal_values { 0 1 2 3 4 5 } + default_value 0 + implements CYGINT_FREESCALE_DSPI1_CS0 + implements CYGINT_FREESCALE_DSPI1_CS1 + implements CYGINT_FREESCALE_DSPI1_CS2 + implements CYGINT_FREESCALE_DSPI1_CS3 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME { + display "Interrupt priority scheme" + flavor none + description "Consolidated interrupt priority scheme setting." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + + cdl_component CYGBLD_HAL_CORTEXM_TWR_MK70F120M_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/doc/twr_k70f120m.sgml b/packages/hal/cortexm/kinetis/twr_k70f120m/current/doc/twr_k70f120m.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/doc/twr_k70f120m.sgml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TWR-K70F120M Development kit + + + CYGPKG_HAL_CORTEXM_KINETIS_TWR_K70F120M + eCos Support for Freescale TWR-K70F120M development kit + + + Description + + The Freescale TWR-K70F120M is a development kit for + Freescale Kinetis Cortex-M4 based micro-controllers. It covers K70, K60, K10 and K20 + microcontroller subfamilies. K70FN1M0 is a high end member comprising on-chip 1 MiB FLASH + and 128 KiB SRAM memory as well as a 16 KiB unified cache. + K70 parts are equipped with a rich set of communication interfaces including Ethernet USB, UARTs + CAN, SPI and I2C. They also have a Graphics controller and a DMA controller, as well as FlexBus and SDRAM + external memory interfaces. They are mixed signal devices featuring a 16 bit ADC and a 12 bit DAC. + + + Configuration + Hardware Setup + TWR-K70F120M setup + + Factory jumper settings on TWR-K70F120M are fitted for standalone operation of the board. + In order to use it with the Ethernet PHY from TWR-SER, some jumpers have to be changed + on both TWR-K70F120M and TWR-SER. Jumper settings for TWR-SER are given in + TWR-K60N512 Configuration and here are the TWR-K70F120M + settings. + + TWR-K70F120M Jumper setting + + + + + + + Jumper + Setting + Description + + + + + J19 + OFF + On board 50MHz oscillator is not powered + + + +
+
+
+ eCos Configuration + Clocking + + The TWR-K70F120M package defines requirements for the platform clocking. + + + Memory + + The K70 has two 64 KiB SRAM banks giving a total of 128KiB on chip SRAM. In addition, on-board there is + 128 MiB of external RAM (SDRAM) and 256 MiB of NAND Flash. + External RAM is divided in two regions: + + + + ram + Regular RAM. + + + ramnc + Non cached RAM. This region contains .noncache section. + + + + + Memory layouts + + Additional platform memory layouts follow the variant + ones only by putting all RAM sections except .sram in the ram region. + The linker file names incorporate the segment _extram_. + + Linker + Script Location + + Linker scripts are found at: + hal/kinetis/twr-k70f120m/<version>/include/pkgconf + + + Linker Script Naming + + Linker script file names have following form: + mlt_kinetis_<NVM>_<SRAM>_<STARTUP_extram.ldi + where PLF is an optional extension for platform specific scripts and + other segments have meaning as described here. + + + + Startup types + + The platform startup CYG_HAL_STARTUP_PLF offers the following startups: + + + + ROM (Platform) + Normal startup for stand-alone operation. The eCos image has to be flashed + in internal flash. External RAM is used as main memory. + + + Note: This startup has a name like the one in the variant but generates different images + by invoking a different set of linker scripts. + + + RAM (Platform) + The image is loaded in external RAM by means of RedBoot. + + + ByVariant + Activates the variant startup types. + + + +
+
+ + diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.h @@ -0,0 +1,32 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_DDR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_DDR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_DDR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_ram.ldi @@ -0,0 +1,41 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE + sram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + USER_SECTION (code_sram, sram_l, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 + 0x100, LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000, LMA_EQ_VMA) + SECTION_rom_vectors (ramcod, CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LMA_EQ_VMA) + SECTION_RELOCS (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, CYGHWR_HAL_KINETIS_DDR_CACHED_BASE+CYGHWR_MEMORY_RAM_RESERVED, LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; + diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.h @@ -0,0 +1,40 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_DDR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_DDR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_DDR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +//#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_DDR_BASE) +//#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE) +//#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_sram2s_extram_rom.ldi @@ -0,0 +1,49 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + sram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + USER_SECTION (code_sram, sram_l, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 (NOLOAD), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000, FOLLOWING (.got)) + SECTION_data (ram, CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.h @@ -0,0 +1,28 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_DDR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_DDR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_DDR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_ram.ldi @@ -0,0 +1,39 @@ +// eCos memory layout + +#include +#include + + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_sram (sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 + 0x100, LMA_EQ_VMA) + SECTION_rom_vectors (ramcod, CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LMA_EQ_VMA) + SECTION_RELOCS (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, CYGHWR_HAL_KINETIS_DDR_CACHED_BASE + CYGHWR_MEMORY_RAM_RESERVED, LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ramcod, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.h @@ -0,0 +1,32 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#define CYGMEM_REGION_ramcod (CYGHWR_HAL_KINETIS_DDR_CODE_BASE) +#define CYGMEM_REGION_ramcod_SIZE (CYGHWR_HAL_KINETIS_DDR_CODE_SIZE) +#define CYGMEM_REGION_ramcod_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (CYGHWR_HAL_KINETIS_DDR_CACHED_BASE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ramnc (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE) +#define CYGMEM_REGION_ramnc_SIZE (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE) +#define CYGMEM_REGION_ramnc_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/pkgconf/mlt_kinetis_flash_unisram_extram_rom.ldi @@ -0,0 +1,47 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE + ramcod : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CODE_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CODE_SIZE + ram : ORIGIN = CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE + ramnc : ORIGIN = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE, LENGTH = CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, FOLLOWING (.got)) + SECTION_data (ram, CYGHWR_HAL_KINETIS_DDR_CACHED_BASE, FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + USER_SECTION (noncache, ramnc, CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE (NOLOAD), LMA_EQ_VMA) + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_arch.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-02-15 +// Purpose: TWR-K70F120M platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_intr.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2012-02-25 +// Purpose: TWR-K70F120M platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_io.h b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/include/plf_io.h @@ -0,0 +1,171 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2012-02-25 +// Purpose: TWR-K70F120M platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +// UART PINs +#ifndef CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PIN(C, 16, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PIN(C, 17, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART3_PIN_RX CYGHWR_HAL_FREESCALE_UART3_PIN_RX +# define CYGHWR_IO_FREESCALE_UART3_PIN_TX CYGHWR_HAL_FREESCALE_UART3_PIN_TX +# define CYGHWR_IO_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_FREESCALE_UART3_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_FREESCALE_UART3_PIN_CTS +#endif + +#ifndef CYGHWR_HAL_FREESCALE_UART2_PIN_RX +# define CYGHWR_HAL_FREESCALE_UART2_PIN_RX CYGHWR_HAL_KINETIS_PIN(E, 17, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART2_PIN_TX CYGHWR_HAL_KINETIS_PIN(E, 16, 3, 0) +# define CYGHWR_HAL_FREESCALE_UART2_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_HAL_FREESCALE_UART2_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE + +# define CYGHWR_IO_FREESCALE_UART2_PIN_RX CYGHWR_HAL_FREESCALE_UART2_PIN_RX +# define CYGHWR_IO_FREESCALE_UART2_PIN_TX CYGHWR_HAL_FREESCALE_UART2_PIN_TX +# define CYGHWR_IO_FREESCALE_UART2_PIN_RTS CYGHWR_HAL_FREESCALE_UART2_PIN_RTS +# define CYGHWR_IO_FREESCALE_UART2_PIN_CTS CYGHWR_HAL_FREESCALE_UART2_PIN_CTS +#endif + +// ENET PINs + +// MDIO +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDIO CYGHWR_HAL_KINETIS_PIN(B, 0, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_MDC CYGHWR_HAL_KINETIS_PIN(B, 1, 4, 0) +// Both RMII and MII interface +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXER CYGHWR_HAL_KINETIS_PIN(A, 5, 4, \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD1 CYGHWR_HAL_KINETIS_PIN(A, 12, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_RXD0 CYGHWR_HAL_KINETIS_PIN(A, 13, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXEN CYGHWR_HAL_KINETIS_PIN(A, 15, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD0 CYGHWR_HAL_KINETIS_PIN(A, 16, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_TXD1 CYGHWR_HAL_KINETIS_PIN(A, 17, 4, 0) +// RMII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_RMII0_CRS_DV CYGHWR_HAL_KINETIS_PIN(A, 14, 4, 0) +// MII interface only +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD3 CYGHWR_HAL_KINETIS_PIN(A, 9, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXD2 CYGHWR_HAL_KINETIS_PIN(A, 10, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_RXCLK CYGHWR_HAL_KINETIS_PIN(A, 11, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD2 CYGHWR_HAL_KINETIS_PIN(A, 24, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXCLK CYGHWR_HAL_KINETIS_PIN(A, 25, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_TXD3 CYGHWR_HAL_KINETIS_PIN(A, 26, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_CRS CYGHWR_HAL_KINETIS_PIN(A, 27, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MIIO_TXER CYGHWR_HAL_KINETIS_PIN(A, 28, 4, 0) +#define CYGHWR_IO_FREESCALE_ENET0_PIN_MII0_COL CYGHWR_HAL_KINETIS_PIN(A, 29, 4, 0) +// IEEE 1588 timers +#define CYGHWR_IO_FREESCALE_ENET0_PIN_1588_CLKIN CYGHWR_HAL_KINETIS_PIN(E, 26, 4, 0) + +#if defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_B) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(B, 2, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(B, 3, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(B, 4, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(B, 5, 4, 0) +#elif defined(CYGHWR_HAL_FREESCALE_ENET0_E0_1588_PORT_C) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR0 CYGHWR_HAL_KINETIS_PIN(C, 16, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR1 CYGHWR_HAL_KINETIS_PIN(C, 17, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR2 CYGHWR_HAL_KINETIS_PIN(C, 18, 4, 0) +# define CYGHWR_IO_FREESCALE_ENET0_PIN_E0_1588_TMR3 CYGHWR_HAL_KINETIS_PIN(C, 19, 4, 0) +#endif + +// DSPI +// DSPI Pins + +#define KINETIS_PIN_SPI1_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) +#define KINETIS_PIN_SPI1_SCK_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M) +#define KINETIS_PIN_SPI1_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PE_M) + +#define KINETIS_PIN_SPI1_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) +#define KINETIS_PIN_SPI1_0_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SIN CYGHWR_HAL_KINETIS_PIN(E, 1, 7, KINETIS_PIN_SPI1_IN_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SOUT CYGHWR_HAL_KINETIS_PIN(E, 3, 7, KINETIS_PIN_SPI1_OUT_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_SCK CYGHWR_HAL_KINETIS_PIN(E, 2, 2, KINETIS_PIN_SPI1_SCK_OPT) + +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS0 CYGHWR_HAL_KINETIS_PIN(E, 4, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS1 CYGHWR_HAL_KINETIS_PIN(E, 0, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS2 CYGHWR_HAL_KINETIS_PIN(E, 5, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS3 CYGHWR_HAL_KINETIS_PIN(E, 6, 2, KINETIS_PIN_SPI1_CS_OPT) +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS4 CYGHWR_HAL_KINETIS_PIN_NONE +#define CYGHWR_IO_FREESCALE_SPI1_PIN_CS5 CYGHWR_HAL_KINETIS_PIN_NONE + +// I2C +// I2C Pins + +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SDA CYGHWR_HAL_KINETIS_PIN(E, 18, 4, 0) +# define CYGHWR_IO_I2C_FREESCALE_I2C0_PIN_SCL CYGHWR_HAL_KINETIS_PIN(E, 19, 4, 0) + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H + diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/misc/redboot_K70_ROM_FPU.ecm b/packages/hal/cortexm/kinetis/twr_k70f120m/current/misc/redboot_K70_ROM_FPU.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/misc/redboot_K70_ROM_FPU.ecm @@ -0,0 +1,83 @@ +# Redboot minimal configuration +# Target: TWR-K70F120M +# Startup: ROM with external RAM + + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "RedBoot Kinetis TWR-K70F120M" ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; +}; + +cdl_option CYGHWR_HAL_CORTEXM_FPU { + user_value 1 +}; + +cdl_option CYGHWR_HAL_CORTEXM_FPU_SWITCH { + user_value ALL +}; + +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + user_value 1 +}; + +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + user_value 1 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 0 +}; + +#cdl_option CYGBLD_REDBOOT_LOAD_INTO_FLASH { +# user_value 1 +#}; + +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + user_value -1 +}; + +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + user_value -2 +}; + +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_COUNT { + user_value 16 +}; + +#cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { +# user_value 0x20000 +#}; + +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + user_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + user_value ROM +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYGPKG_DEVS_ETH_FREESCALE_ENET_REDBOOT_HOLDS_ESA { + user_value 1 +}; diff --git a/packages/hal/cortexm/kinetis/twr_k70f120m/current/src/twr_k70f120m_misc.c b/packages/hal/cortexm/kinetis/twr_k70f120m/current/src/twr_k70f120m_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/twr_k70f120m/current/src/twr_k70f120m_misc.c @@ -0,0 +1,316 @@ +//========================================================================== +// +// twr_k70f120m_misc.c +// +// Cortex-M4 TWR-K60N512 EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2012-02-25 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +static inline void hal_misc_init(void); + +// DATA and BSS locations +__externC cyg_uint32 __ram_data_start; +__externC cyg_uint32 __ram_data_end; +__externC cyg_uint32 __rom_data_start; +__externC cyg_uint32 __sram_data_start; +__externC cyg_uint32 __sram_data_end; +__externC cyg_uint32 __srom_data_start; +__externC cyg_uint32 __bss_start; +__externC cyg_uint32 __bss_end; + +#ifdef CYGHWR_HAL_DDR_SYNC_MODE +#define SYNC_ASYNC 0x3 +#else +#define SYNC_ASYNC 0 +#endif + +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC + +// DDRAM controller setup parameters +const cyg_uint32 kinetis_ddr_cfg[] = { + 0x00000400, // DDR_CR00 + 0x02000031, // DDR_CR02 + 0x02020506, // DDR_CR03 + 0x06090202, // DDR_CR04 + 0x02020302, // DDR_CR05 + 0x02904002, // DDR_CR06 + 0x01000303, // DDR_CR07 + 0x05030201, // DDR_CR08 + 0x020000c8, // DDR_CR09 + 0x03003207, // DDR_CR10 + 0x01000000, // DDR_CR11 + 0x04920031, // DDR_CR12 + 0x00000005, // DDR_CR13 + 0x00C80002, // DDR_CR14 + 0x00000032, // DDR_CR15 + 0x00000001, // DDR_CR16 + 0x00030300, // DDR_CR20 + 0x00040232, // DDR_CR21 + 0x00000000, // DDR_CR22 + 0x00040302, // DDR_CR23 + 0x0A010201, // DDR_CR25 + 0x0101FFFF, // DDR_CR26 + 0x01010101, // DDR_CR27 + 0x00000003, // DDR_CR28 + 0x00000000, // DDR_CR29 + 0x00000001, // DDR_CR30 + 0x02020101, // DDR_CR34 + 0x01010201, // DDR_CR36 + 0x00000200, // DDR_CR37 + 0x00200000, // DDR_CR38 + 0x01010020, // DDR_CR39 + 0x00002000 | SYNC_ASYNC, // DDR_CR40 + 0x01010020, // DDR_CR41 + 0x00002000 | SYNC_ASYNC, // DDR_CR42 + 0x01010020, // DDR_CR43 + 0x00000000 | SYNC_ASYNC, // DDR_CR44 + 0x03030303, // DDR_CR45 + 0x02006401, // DDR_CR46 + 0x01020202, // DDR_CR47 + 0x01010064, // DDR_CR48 + 0x00020101, // DDR_CR49 + 0x00000064, // DDR_CR50 + 0x02000602, // DDR_CR52 + 0x03c80000, // DDR_CR53 + 0x03c803c8, // DDR_CR54 + 0x03c803c8, // DDR_CR55 + 0x020303c8, // DDR_CR56 + 0x01010002 // DDR_CR57 +}; +#endif // CYGPKG_HAL_CORTEXM_KINETIS_DDRMC + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_system_init( void ) +{ +#if !defined(CYG_HAL_STARTUP_RAM) + cyghwr_hal_kinetis_pmc_t *pmc_p = CYGHWR_HAL_KINETIS_PMC_P; + + hal_wdog_disable(); + hal_misc_init(); + + // if ACKISO is set you must clear ackiso before calling pll_init + // or pll init hangs waiting for OSC to initialize + if(pmc_p->regsc & CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M) + pmc_p->regsc |= CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M; + + hal_start_clocks(); +# ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC + HAL_CORTEXM_KINETIS_DDRMC_INIT( kinetis_ddr_cfg ); +# endif // CYGPKG_HAL_CORTEXM_KINETIS_DDRMC +#endif +} + +//=========================================================================== +// hal_misc_init +//=========================================================================== +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M \ + (CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M | \ + CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_M) + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_misc_init(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + cyghwr_hal_kinetis_mpu_t *mpu_p = CYGHWR_HAL_KINETIS_MPU_P; + + // Enable some peripherals' clocks. + sim_p->scgc1 |= CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_M; + sim_p->scgc5 |= CYGHWR_HAL_KINETIS_SIM_SCGC5_PORT_M; + sim_p->scgc6 |= CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M; + + // Disable MPU + mpu_p->cesr = 0; +} + + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // System bus RAM partition +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#elif defined CYGMEM_REGION_sram_l + { CYGMEM_REGION_sram_l, CYGMEM_REGION_sram_l+CYGMEM_REGION_sram_l_SIZE-1 }, // On-chip SRAM lower bank +#endif +#ifdef CYGMEM_REGION_ramcod + { CYGMEM_REGION_ramcod, CYGMEM_REGION_ramcod+CYGMEM_REGION_ramcod_SIZE-1 }, // Code bus RAM partition +#endif +#ifdef CYGMEM_REGION_ramnc + { CYGMEM_REGION_ramnc, CYGMEM_REGION_ramnc+CYGMEM_REGION_ramnc_SIZE-1 }, // Non cachable RAM partition +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif +#ifdef CYGMEM_REGION_rom + { CYGMEM_REGION_rom, CYGMEM_REGION_rom+CYGMEM_REGION_rom_SIZE-1 }, // External flash [currently none] +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 } // Chip specific peripherals +}; + +__externC int cyg_hal_stub_permit_data_access( void* addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) { + if( ((CYG_ADDRESS)addr >= hal_data_access[i].start) && + ((CYG_ADDRESS)addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram + case 1: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#endif +#ifdef CYGMEM_REGION_sram_l +# define CASE_CODE 3 +# define CASE_RAMNC 4 + case 2: + *start = (unsigned char *)CYGMEM_REGION_sram_l; + *end = (unsigned char *)(CYGMEM_REGION_sram_l + CYGMEM_REGION_sram_l_SIZE); + break; +#else +# define CASE_CODE 2 +# define CASE_RAMNC 3 +#endif + +#ifdef CYGMEM_REGION_ramcod + case CASE_CODE: + *start = (unsigned char *)CYGMEM_REGION_ramcod; + *end = (unsigned char *)(CYGMEM_REGION_ramcod + CYGMEM_REGION_ramcod_SIZE); + break; +#endif + +#ifdef CYGMEM_REGION_ramnc + case CASE_RAMNC: + *start = (unsigned char *)CYGMEM_REGION_ramnc; + *end = (unsigned char *)(CYGMEM_REGION_ramnc + CYGMEM_REGION_ramnc_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + +//========================================================================== +// EOF twr_k70f120m_misc.c diff --git a/packages/hal/cortexm/kinetis/var/current/ChangeLog b/packages/hal/cortexm/kinetis/var/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/ChangeLog @@ -0,0 +1,215 @@ +2014-05-05 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: + * include/var_io_gpio.h: + * src/kinetis_gpio.c: New + Add functions for Kinetis GPIO pin configuration and manipulation. + [ Bugzilla 1001981 ] + +2014-02-13 Ilija Kocho + + * cortexm/kinetis/var/current/include/var_intr.h: + Add interrupt numbers for second eDMA controller. + + * cortexm/kinetis/var/current/include/var_io_clkgat.h: + Add clock gating for ADC2 + + * cortexm/kinetis/var/current/include/var_io_gpio.h: + Add GPIO port F. + +2013-04-28 Ilija Kocho + + * include/var_intr.h : Redefine CYGNUM_HAL_INTERRUPT_RTC_RTC because of + conflict with same named macro defined in hal_intr.h (Cortex-M architecture). + Define some interrrupt numbers, previously reservrd. + * include/var_io.h : Upgrade RTC registers. [ Bugzilla 1001904 ] + +2013-06-12 Mike Jones + + * include/var_io_gpio.h + Clean up macros to support interrupts and set/get features. + +2013-04-28 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: + * cdl/kinetis_ddram.cdl: (New file) + * cdl/kinetis_fbram.cdl: (New file) + Add FlexBus RAM configuration and caching, DDRAM CDL moved + to a separate file. Updated FlexNVM configuration with 512KiB FlexNVM + and 16KiB FlexMemory. + * cdl/kinetis_clocking.cdl: CYGINT_HAL_CORTEXM_KINETIS_150 + moved to hal_cortexm_kinetis.cdl + * include/var_io_lmem.h, include/hal_cache.h: Add more cache functions. + [ Bugzilla 1001837 ] + +2013-04-09 Tomas Frydrych + + * cdl/kinetis_irq_scheme.cdl: + * include/var_io_devs.h: + Implemented support for I2C [Bugzilla 1001397] + +2013-04-01 Ilija Kocho + + * include/var_io.h, include/var_io_clkgat.h, include/var_io_devs.h, + * src/hal_diag.c, src/kinetis_ddram.c, src/kinetis_misc.c + Add clock gating management and API. [ Bugzilla 1001814 ] + +2012-11-06 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: Changes to Kinetis part builder related to + addition of archhitectural hardware floating point support. + CYGHWR_HAL_CORTEXM_KINETIS_FPU and CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM + look and feel like other name building options. Added new Kinetis + members to part selection. + * include/var_io.h, src/kinetis_misc.c: Enumerated PORT F. + [Bugzilla 1001607] + +2012-11-04 Ilija Kocho + + * include/var_io.h: Define register access to FTFL module. + Contributed by Nicolas Aujoux at 2012-09-07 [Bugzilla 1001561] + +2012-09-28 Ilija Kocho + + * var/current/cdl/hal_cortexm_kinetis.cdl + * var/current/cdl/kinetis_clocking.cdl + * var/current/doc/kinetis.sgml + * var/current/include/hal_cache.h + * var/current/include/var_io_ddrmc.h + * var/current/include/var_io_lmem.h + * var/current/src/kinetis_ddram.c + * var/current/src/kinetis_misc.c: + Separate data and code caches, as well as text indentation suggested by Jifl. + Fixes to cache and SDRAM CDL and functions Improved SDRAM controller + support due to better manufacturer documentation: Configurable pad control. + [Bugzilla 1001606] + +2012-08-01 Ilija Kocho + + * include/var_io.h, src/kinetis_misc.c: Add functions and macros + for clock gating control to Kinetis. [Bugzilla 1001642] + +2012-05-18 Ilija Kocho + + * include/hal_cache.h, src/kinetis_misc.c: Provide for cache + enablement in RAM startup mode [Bugzilla 1001606] + +2012-05-19 John Dallaway + + * doc/kinetis.sgml: Close and blocks. + * cdl/hal_cortexm_kinetis.cdl: Reference per-package documentation. + +2012-05-18 Ilija Kocho + + * doc/kinetis_begin.sgml: + * doc/kinetis_end.sgml: + * doc/kinetis.sgml: + New files -- Kinetis variant documentation. [Bug 1001580] + +2012-05-17 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: + Bug fix: Do not refer external memory if Platform startup is + not selected. [ Bugzilla 1001590 ] + +2012-05-04 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: + * src/kinetis_clocking.cdl: + * src/kinetis_clocking.c: + * include/hal_cache.h + * include/var_io_lmem.h: + * include/var_io_ddrmc.h: + * include/var_io_devs.h: + * include/var_io.h: + * src/kinetis_ddram.c: + * src/kinetis_misc.c: + Add: Clocking support for PLL1 (K70), DDRAM controller + Cache, eDMA - 32 chan. [Bugzilla 1001579] + +2012-01-11 Tomas Frydrych + + * include/var_io.h: + Allow for overriding of CYGHWR_HAL_KINETIS_SIM_SCGC?_ALL_M mask + from platform definitions. + + * include/var_io_devs.h: + Define base pointer for SLCD controller + +2012-01-05 Ilija Kocho + + * cdl/kinetis_irq_scheme.cdl + Centralized IRQ priority scheme. + + * cdl/hal_cortexm_kinetis.cdl: + * cdl/kinetis_flexbus.cdl + * include/var_io_devs.h: + * include/var_io.h: + * src/kinetis_clocking.c: + * src/kinetis_misc.c: + Add I/O defs for eDMA, DSPI. Add flexbus control. + CYG_HAL_STARTUP parenthed bt CYG_HAL_STARTUP_ENV. + Early clock start [Bugzilla 1001450] + +2011-11-15 Tomas Frydrych + + * include/var_io_gpio.h: + Convenience macros for manipulating GPIO pins. + +2011-10-19 Ilija Kocho + + * cdl/hal_cortexm_kinetis.cdl: + * cdl/kinetis_clocking.cdl: + * src/hal_diag.c: + * src/kinetis_misc.c: + * src/kinetis_clocking.c: + * include/hal_cache.h: + * include/hal_diag.h: + * include/plf_stub.h: + * include/variant.inc: + * include/var_arch.h: + * include/var_intr.h: + * include/var_io.h: + * include/var_io_devs.h: + * include/var_io_flexbus.h: + * include/pkgconf/mlt_kinetis_flash_sram2s_rom.h + * include/pkgconf/mlt_kinetis_flash_sram2s_rom.ldi + * include/pkgconf/mlt_kinetis_flash_sram2s_sram.h + * include/pkgconf/mlt_kinetis_flash_sram2s_sram.ldi + * include/pkgconf/mlt_kinetis_flash_unisram_rom.h + * include/pkgconf/mlt_kinetis_flash_unisram_rom.ldi + * include/pkgconf/mlt_kinetis_flash_unisram_sram.h + * include/pkgconf/mlt_kinetis_flash_unisram_sram.ldi + * include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.h + * include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.ldi + * include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.h + * include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.ldi + * include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.h + * include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.ldi + * include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.h + * include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.ldi + New package -- Freescale Kinetis variant HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl @@ -0,0 +1,867 @@ +##========================================================================== +## +## hal_cortexm_kinetis.cdl +## +## Cortex-M Freescale Kinetis variant HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2010-12-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_KINETIS { + display "Freescale Kinetis Cortex-M4 Variant" + parent CYGPKG_HAL_CORTEXM + doc ref/hal-cortexm-kinetis-var.html + hardware + include_dir cyg/hal + define_header hal_cortexm_kinetis.h + description " + This package provides generic support for the Freescale Cortex-M4 + based Kinetis microcontroller family. + It is also necessary to select a variant and platform HAL package." + + compile hal_diag.c kinetis_misc.c kinetis_clocking.c kinetis_gpio.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + + requires { CYGHWR_HAL_CORTEXM == "M4" } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS { + display "Kinetis part" + flavor data + calculated { "MK" . CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM . + CYGHWR_HAL_CORTEXM_KINETIS_FPU . CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM . + CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME } + description " + Kinetis family has several sub-families, with various peripheral + sets and CPU options. Each sub-family consists of several + members differing by sizes of on-chip FLASH and SRAM. This + control, enables the user to build Kinetis member part and so + tailor HAL for a specific microcontroller by selection of + microcontroller's properties such as microcontroller sub-family, + memory options, etc." + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM { + display "Sub-family" + flavor data + no_define + default_value { CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM_DEFAULT } + legal_values { 10 11 12 20 21 22 30 40 50 51 60 61 70 } + description " + Kinetis family consists of several sub-families differing by + features and CPU power." + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM_DEFAULT { + display "Default sub-family" + flavor data + no_define + default_value { 60 } + legal_values { 10 11 12 20 21 22 30 40 50 51 60 61 70 } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_FPU { + display "Floating Point Unit part name option" + flavor data + no_define + legal_values { "D" "F" } + default_value { CYGHWR_HAL_CORTEXM_KINETIS_FPU_DEFAULT } + description " + Select whether the part has Floating Point Unit. \"F\" - stands for + parts with FPU, while \"D\" for ones without. Note: + Selection of part with FPU does not imply that the FPU is used - + CYGHWR_HAL_CORTEXM_FPU activates the FPU." + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FPU_DEFAULT { + display "Default FPU part name option" + flavor data + no_define + legal_values { "D" "F" } + default_value { "D" } + } + + cdl_option CYGIMP_HAL_CORTEXM_KINETIS_FPU { + display "FPU implemented" + no_define + calculated { CYGHWR_HAL_CORTEXM_KINETIS_FPU == "F" } + active_if { CYGHWR_HAL_CORTEXM_KINETIS_FPU == "F" } + implements CYGINT_HAL_FPV4_SP_D16 + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM { + display "FlexNVM name option" + flavor data + no_define + legal_values { "N" "X" } + default_value { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_DEFAULT } + description "Select whether the part has FlexNVM." + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_DEFAULT { + display "Default FlexNVM name option" + flavor data + no_define + legal_values { "N" "X" } + default_value { "N" } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME { + display "Flash name segment" + flavor data + no_define + legal_values { 32 64 96 128 256 512 "1M0" } + default_value { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT } + description " + Flash size is represented in part name encoded as KiB + (e.g. 512) or MiB (e.g. 1M0)." + + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME_DEFAULT { + display "Default Flash name segment" + flavor data + no_define + legal_values { 32 64 96 128 256 512 "1M0" } + default_value { 512 } + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_REV { + display "Kinetis revision" + flavor data + legal_values { 1 2 } + default_value 1 + description " Revision" + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_150 { + display "Is a 150MHz device" + description " + 150Mhz and 120MHz devices have some properties different than 100MHz + devices of same types. This interface shall be implemented if the + device is 150Mhz or 120MHz." + } + } + + cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS { + display "CPU exception priority level bits" + flavor data + default_value 4 + description " + This option defines the number of bits used to encode the + exception priority levels that this variant of the Cortex-M + CPU implements." + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLOCKING { + display "Clocking" + flavor data + no_define + calculated CYGHWR_HAL_CORTEXM_KINETIS_MCG + description "Configure system clock and subsystem clocking." + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP { + display "System frequency clock setpoint" + flavor data + legal_values 32768 to 220000000 + default_value { CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP ? + CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP : 96000000 } + description "Desired system clock frequency" + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP { + display "Auxiliary clock frequency setpoint" + flavor data + active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + legal_values 32768 to 220000000 + default_value { CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP ? + CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP : 96000000 } + description "Desired auxiliary clock frequency" + } + + script kinetis_clocking.cdl + } + + cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY { + display "Clock interrupt ISR priority" + flavor data + calculated CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY_SP + description "Set clock ISR priority. Default setting is lowest priority." + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + no_define + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value 1000000 / CYGNUM_HAL_RTC_DENOMINATOR + description " + The period defined here is something of a fake, it is + expressed in terms of a notional 1MHz clock. The value + actually installed in the hardware is calculated from + the current settings of the clock generation hardware." + } + } + + cdl_option CYG_HAL_STARTUP_VAR { + display "By variant" + flavor data + parent CYG_HAL_STARTUP_ENV + default_value { (CYG_HAL_STARTUP_PLF) && (CYG_HAL_STARTUP_PLF!="ByVariant") ? + "ByPlatform" : "ROM" } + legal_values { "ROM" "SRAM" } + active_if ((!CYG_HAL_STARTUP_PLF) || (CYG_HAL_STARTUP_PLF=="ByVariant")) + description " + 'ROM' startup builds a stand-alone application which will + be placed into flash. SRAM startup builds application + intended for loading in on-chip SRAM by means of JTAG/SWD. + Note: Variant Startup Type can be overriden/overloaded by + Platform Startup Type." + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type calculator" + flavor data + parent CYG_HAL_STARTUP_ENV + calculated { (CYG_HAL_STARTUP_PLF && (CYG_HAL_STARTUP_PLF!="ByVariant")) ? + CYG_HAL_STARTUP_PLF : CYG_HAL_STARTUP_VAR} + no_define + define -file system.h CYG_HAL_STARTUP + description " + Startup type defines what type of application shall be built. + Startup type can be defined by variant (CYG_HAL_STARTUP_VAR) + or platform (CYG_HAL_STARTUP_PLF). If CYG_HAL_STARTUP_PLF + is defined and not equal to 'ByVariant' then it shall + override CYG_HAL_STARTUP_VAR." + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_CONF { + display "FlexNVM configuration" + flavor none + no_define + active_if { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X" } + requires { + CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_PART_KIB <= + CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_EEE { + display "Enhanced EEPROM (EEE)" + flavor bool; + + cdl_option CYGHWR_HAL_KINETIS_EEE_SIZE { + display "EEE Size \[Bytes\]" + flavor data + legal_values { 0 32 64 128 256 512 1024 2048 4096 + CYGHWR_HAL_KINETIS_FLEXRAM_SIZE == 16384 ? 8196 : 0 + CYGHWR_HAL_KINETIS_FLEXRAM_SIZE == 16384 ? 16384 : 0 + } + default_value CYGHWR_HAL_KINETIS_FLEXRAM_SIZE + } + + cdl_component CYGHWR_HAL_KINETIS_EEE_SPLIT { + display "EEE Split ratio" + flavor data + legal_values { 0 2 4 8 } + default_value 0 + description " + Enhanced EEPROM is split in two partitions that are + represented by separate sections in MLT files. + The split, CYGHWR_HAL_KINETIS_EEE_SPLIT, represents + partition size ratio where EEE0 partition size is + 1/CYGHWR_HAL_KINETIS_EEE_SPLIT of EEE size, and EEE1 + is the rest. As a special arrangement + (CYGHWR_HAL_KINETIS_EEE_SPLIT == 0) is a PHONY, where + split equals 2 but in MLT files whole EEE is counted + as a single section." + + cdl_option CYGHWR_HAL_KINETIS_EEE0_SIZE { + display "e_eeprom0 section size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_EEE_SPLIT > 0 ? + CYGHWR_HAL_KINETIS_EEE_SIZE / + CYGHWR_HAL_KINETIS_EEE_SPLIT : + CYGHWR_HAL_KINETIS_EEE_SIZE } + } + + cdl_option CYGHWR_HAL_KINETIS_EEE1_SIZE { + display "e_eeprom1 section size \[Bytes\]" + flavor data + active_if { CYGHWR_HAL_KINETIS_EEE_SPLIT > 0 } + calculated { CYGHWR_HAL_KINETIS_EEE_SIZE - + CYGHWR_HAL_KINETIS_EEE0_SIZE } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_PART_KIB { + display "FlexNVM partition used for EEE \[KiB\]" + flavor data + calculated { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB == 512 ? + CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_512_PART_KIB : + CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_256_PART_KIB + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_256_PART_KIB { + display "FlexNVM partition used for EEE \[KiB\]" + flavor data + active_if CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB == 256 + default_value 32 + legal_values { 32 64 128 192 224 256 } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_512_PART_KIB { + display "FlexNVM partition used for EEE \[KiB\]" + flavor data + active_if CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB == 512 + default_value 64 + legal_values { 64 128 256 384 448 512 } + } + } + } + + cdl_component CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE { + display "FlexNVM D Flash" + flavor data + active_if { CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_PART_KIB < + CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB} + calculated { + 1024 * ( CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB - + CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_PART_KIB) + } + } + + cdl_component CYGHWR_HAL_KINETIS_FLEXRAM_RAM { + display "Flexram ordinary RAM" + flavor data + active_if { !CYGHWR_HAL_CORTEXM_KINETIS_EEE } + calculated CYGHWR_HAL_KINETIS_FLEXRAM_SIZE + } + + cdl_component CYGHWR_HAL_KINETIS_FLEXRAM_SIZE { + display "Flexram size" + flavor data + legal_values { 4096 16384 } + default_value CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM == 70 ? 16384 : 4096 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB { + display "FlexNVM size \[KiB\]" + flavor data + calculated CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + parent CYG_HAL_STARTUP_ENV + calculated { + (CYGHWR_MEMORY_LAYOUT_PLF) ? CYGHWR_MEMORY_LAYOUT_PLF : + (CYG_HAL_STARTUP == "ROM" ) ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_rom" : + (CYG_HAL_STARTUP == "SRAM") ? "kinetis_" + . CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT . "_sram" : + "undefined" } + description " + Combination of 'Startup type' and 'Kinetis part' + produces the memory layout." + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_SRAM_UNIFIED { + display "Unified on chip SRAM region" + flavor bool + default_value { 1 } + description " + Kinetis have two equal SRAM banks SRAM_L and SRAM_U that + occupy consecutive memory blocks with \(possibility for + simultaneous\) access from on separate buses. + SRAM_L is placed below 0x20000000 and SRAM_U above 0x20000000. + This option provides for selection between memory layout with + single (unified) (S)RAM region and layout with two separate + (S)RAM regions." + } + + cdl_option CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION { + display "Utilize \".kinetis_misc\" section for HAL" + flavor bool + default_value { CYG_HAL_STARTUP == "ROM" } + active_if { CYG_HAL_STARTUP == "ROM" } + description " + Kinetis use FLASH locations between 0x400 and 0x40F for FLASH + security configuration. This leaves FLASH area below 0x400 + out of standard linker sections. Special section + \".kinetis_misc\" provides linker access to this area. + Setting this option instructs linker to place some HAL + (variant/platform) \"misc.\" functions in this area." + } + + cdl_option CYGOPT_HAL_KINETIS_DIAG_IN_MISC_FLASH_SECTION { + display "HAL diag. in \".kinetis_misc\" section" + flavor bool + active_if CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION + default_value 0 + description " + By default only misc. HAL functions are stored in + \".kinetis_misc\" section. In addition HAL diagnostc + functions may be placed as well." + } + + cdl_component CYGHWR_HAL_KINETIS_MEMORY_RESOURCES { + display "On chip memory resources" + flavor none + no_define + description " + View and manage on-chip memory resources. + Output is used for naming of 'mlt' files." + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB { + display "On chip Flash option \[KiB\]" + flavor data + calculated { (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME == "1M0") + ? 1024 : CYGHWR_HAL_CORTEXM_KINETIS_FLASH_NAME + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_SRAM_KIB { + display "Kinetis on chip SRAM size \[KiB\]" + flavor data + calculated { + (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 1024 || + CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 512) ? 128 : + (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 256) ? 64 : + (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 128) ? 32 : + (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 96 || + CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 64) ? 16 : + (CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB == 32) ? 8 : + "Unknown" + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_SRAM_LAYOUT { + display "SRAM layout" + flavor data + no_define + calculated { CYGHWR_HAL_CORTEXM_KINETIS_SRAM_UNIFIED ? + "unisram" : + "sram2s" + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OC_MEM_LAYOUT { + display "On-chip memory layout" + flavor data + no_define + calculated {(CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X" ? "flexnvm_": "flash_") + . CYGHWR_HAL_CORTEXM_KINETIS_SRAM_LAYOUT } + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_SIZE { + display "Kinetis on chip FLASH size" + flavor data + calculated { CYGHWR_HAL_CORTEXM_KINETIS_FLASH_KIB * 0x400 } + } + + cdl_option CYGHWR_HAL_KINETIS_SRAM_SIZE { + display "Kinetis on chip SRAM size" + flavor data + calculated { CYGHWR_HAL_CORTEXM_KINETIS_SRAM_KIB * 0x400 } + } + + cdl_option CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE { + display "Kinetis onchip RAM bank size" + flavor data + calculated { CYGHWR_HAL_KINETIS_SRAM_SIZE/2 } + } + + cdl_option CYGHWR_HAL_KINETIS_FLEXNVM_FLASH_SIZE { + display "Kinetis on chip FlexNVM FLASH size" + flavor data + active_if { CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X" } + calculated { (CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM_KIB + - CYGHWR_HAL_CORTEXM_KINETIS_EEE_NVM_PART_KIB)* 0x400 } + } + + cdl_option CYGHWR_HAL_KINETIS_FLEXNVM_FLEXRAM_SIZE { + display "Kinetis on chip FlexRAM size" + flavor data + active_if { (CYGHWR_HAL_CORTEXM_KINETIS_FLEXNVM == "X") && + !CYGHWR_HAL_CORTEXM_KINETIS_EEE } + calculated { CYGHWR_HAL_KINETIS_FLEXRAM_SIZE } + } + } + + cdl_interface CYGINT_HAL_CACHE { + display "Platform has cache" + flavor bool + } + + cdl_interface CYGINT_HAL_HAS_NONCACHED { + display "Platform has non-cached regions" + flavor bool + } + + cdl_component CYGPKG_HAL_KINETIS_CACHE { + display "Cache memory" + flavor bool + + default_value CYGINT_HAL_CACHE + active_if (CYGINT_HAL_CACHE) + } + + cdl_component CYGHWR_HAL_NONCACHED { + display "Non cached RAM memory regions" + flavor booldata + active_if CYGINT_HAL_HAS_NONCACHED + legal_values { "\".sram\"" "\".noncache\"" } + default_value { "\".noncache\"" } + description " + Non cached memory sections may be usful for storage that + is unsuitable for caching, such as sharing buffers between + the CPU and other bus masters such as DMA, ENET, etc. + The \".sram\" section is located in the internal SRAM, + which is is always present and never cached. + Additionaly, as an option, a partition of external memory: + DDRAM or FlexRAM, if one is present, can be configured + non-cached and accommodate \".noncache\" section." + + cdl_option CYGHWR_HAL_ENET_TCD_SECTION { + display "Ethernet buffer descriptor memory section" + flavor data + legal_values { "\".sram\"" "\".noncache\"" } + default_value { "\".sram\"" } + + description "Ethernet is a bus master so buffers/buffer + descriptos must reside in non-cached memory" + } + + cdl_option CYGHWR_HAL_ENET_BUF_SECTION { + display "Ethernet buffer memory section" + flavor data + legal_values { "\".sram\"" "\".noncache\"" } + default_value { "\".noncache\"" } + + description "Ethernet is a bus master so buffers/buffer + descriptos must reside in non-cached memory" + } + + cdl_option CYGHWR_HAL_EDMA_TCD_SECTION { + display "eDMA transfer control descriptor memory section" + flavor data + legal_values { "\".sram\"" "\".noncache\"" } + default_value { "\".sram\"" } + + description "eDMA is a bus master so buffers/buffer + descriptos must reside in non-cached memory" + } + + cdl_option CYGHWR_HAL_EDMA_BUF_SECTION { + display "eDMA buffer memory section" + flavor data + legal_values { "\".sram\"" "\".noncache\"" } + default_value { "\".noncache\"" } + + description "eDMA is a bus master so buffers/buffer + descriptos must reside in non-cached memory" + } + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_DDRAM { + display "Platform uses DDRAM" + flavor bool + description " + This interface will be implemented if the specific + controller being used provides DDRAM and if DDRAM is + used on target hardware" + } + + cdl_component CYGPKG_HAL_CORTEXM_KINETIS_DDRMC { + display "DDRAM" + flavor bool + active_if CYGINT_HAL_CORTEXM_KINETIS_DDRAM + default_value CYGINT_HAL_CORTEXM_KINETIS_DDRAM + description "DDRAM on Kinetis is mirrored at several address ranges. + Each mirror has its own caching options that may include: + non-cached, write-through and write-back. + By eCos configuration, DDRAM is split in 3 partitions: + Cached, Non-cached and Code. + Cached partition is intended for general purpose main memory. + Non-cached partition is convenient for sharing + buffers with other bus masters such as Ethernet controller, + DMA, etc. Code partition is for executable code." + + requires CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + compile kinetis_ddram.c + + script kinetis_ddram.cdl + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_FBRAM { + display "Platform uses FlexBus RAM" + flavor bool + description " + This interface will be implemented if the specific + controller being used provides FlexBus and if FlexBus is + used on target hardware" + } + + cdl_component CYGPKG_HAL_CORTEXM_KINETIS_FBRAM { + display "FlexBus RAM" + flavor bool + active_if CYGINT_HAL_CORTEXM_KINETIS_FBRAM + default_value CYGINT_HAL_CORTEXM_KINETIS_FBRAM + requires CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS + description "FBRAM on Kinetis is mirrored at several address ranges. + Each mirror has its own caching options that may include: + non-cached, write-through and write-back. + By eCos configuration, FlexBus RAM is split in 3 partitions: + Cached, Non-cached and Code. + Cached partition is intended for general purpose main memory. + Non-cached partition is convenient for sharing + buffers with other bus masters such as Ethernet controller, + DMA, etc. Code partition is for executable code." + + script kinetis_fbram.cdl + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_FLEXBUS { + display "Platform uses FlexBus" + flavor bool + description " + This interface will be implemented if the specific + controller being used provides FlexBus and if FlexBus is + used on target hardware" + } + + cdl_component CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS { + display "FlexBus" + flavor bool + active_if CYGINT_HAL_CORTEXM_KINETIS_FLEXBUS + default_value CYGINT_HAL_CORTEXM_KINETIS_FLEXBUS + description "FlexBus provides access for external memory." + + script kinetis_flexbus.cdl + } + + cdl_component CYGHWR_HAL_KINETIS_FLASH_CONF { + display "Flash configuration field" + flavor none + no_define + + active_if { CYG_HAL_STARTUP == "ROM" } + + description " + The program flash memory contains a 16-byte flash + configuration field that stores default protection settings + (loaded on reset) and security information that allows the MCU to + restrict access to the flash module. + Note: Changing some values in Flash configuration field may make + flash inaccessible and disable further re-programming of the flash + permanently. Consult respective Kinetis' documentation before dealing + with the Flash configuration field. Default values are equal + to the factory values." + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_BACKDOOR_KEY { + display "Backdoor comparison key" + flavor data + default_value { "\{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff \}" } + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_FPROT { + display "Program flash protection" + flavor data + default_value { "\{ 0xff, 0xff, 0xff, 0xff \}" } + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_FSEC { + display "Flash security byte" + flavor data + default_value 0xfe + + description " + Note: FSEC default value is deliberately set to + 0xfe in order to disable chip lockout." + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_FOPT { + display "Flash nonvolatile option byte" + flavor data + default_value 0xff + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_FDPROT { + display "Data flash protection byte" + flavor data + default_value 0xff + } + + cdl_option CYGHWR_HAL_KINETIS_FLASH_CONF_FEPROT { + display "EEPROM protection byte" + flavor data + default_value 0xff + } + } + + cdl_option CYGNUM_HAL_KINETIS_MEM_SEGMENTS { + display "RAM memory segments" + flavor data + no_define + active_if is_active(CYGBLD_REDBOOT_MAX_MEM_SEGMENTS) + requires { CYGBLD_REDBOOT_MAX_MEM_SEGMENTS >= CYGNUM_HAL_KINETIS_MEM_SEGMENTS } + + calculated { + ((CYGHWR_HAL_CORTEXM_KINETIS_SRAM_UNIFIED ? 1 : 2) + + (CYGPKG_HAL_CORTEXM_KINETIS_DDRMC ? 2 : 0) + + (CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE ? 1 : 0) + + (CYGPKG_HAL_CORTEXM_KINETIS_FBRAM ? 2 : 0) + + (CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE ? 1 : 0)) + } + } + + for { set ::channel 0 } { $::channel < 6 } { incr ::channel } { + + cdl_interface CYGINT_HAL_FREESCALE_UART[set ::channel] { + display "Platform provides UART [set ::channel] HAL" + flavor bool + description " + This interface will be implemented if the specific + controller being used has on-chip UART [set ::channel], + and if that UART is accessible on the target hardware." + } + + cdl_interface CYGINT_HAL_FREESCALE_UART[set ::channel]_RTSCTS { + display "Platform provides HAL for UART[set ::channel] hardware flow control." + flavor bool + description " + This interface will be implemented if the specific + on-chip UART [set ::channel] has RTS/CTS flow control + that is accessible on the target hardware." + } + } + + cdl_interface CYGINT_HAL_DMA { + display "Platform uses DMA" + flavor bool + description " + This interface will be implemented if the specific + controller being used provides DMA and if DMA is + used on target hardware" + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_VAR { + display "Variant IRQ priority defaults" + no_define + flavor none + parent CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME + description " + Interrupt priorities defined by Kinetis variant" + script kinetis_irq_scheme.cdl + } + + cdl_component CYGPKG_HAL_CORTEXM_KINETIS_OPTIONS { + display "Build options" + flavor none + no_define + description " + Package specific build options including control over + compiler flags used only in building this package." + + cdl_option CYGPKG_HAL_CORTEXM_KINETIS_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Kinetis variant HAL package. These flags + are used in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_CORTEXM_KINETIS_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the Kinetis variant HAL package. These flags + are removed from the set of global flags if present." + } + } +} + +# EOF hal_cortexm_kinetis.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl @@ -0,0 +1,978 @@ +##========================================================================== +## +## kinetis_clocking.cdl +## +## Cortex-M Freescale Kinetis Clocking +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-10-19 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + +# cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLOCKING +# display "Clocking" + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ { + display "System frequency actual value" + flavor data + calculated { + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC ? + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC : + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC ? + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC : + (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL || + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1) ? + CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLLSEL_FREQ_AV: + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_FLL ? + CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_FREQ_AV : + 0 + } + description "Operating system clock frequency." + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_MCG { + display "MCG" + flavor data + no_define + calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK . " " . + ((CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ+500000)/1000000) . "MHz, " . ( + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC == "EXT_REFCLK") ? + CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS : + CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC) + + } + description "Multipurpose Clock Generator" + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK { + display "System clock source" + flavor data + default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 1 ? "PLL1" : "PLL" } + legal_values { + "PLL" "FLL" "EXT_REFCLK" ( CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 ? "PLL1" : "PLL" ) + } + requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" implies + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL == 1 + } + requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" implies + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 1 + } + description " + Select one of 3 options for MCG output clock: + PLL or FLL oscillator or External reference clock." + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT { + display "EXT_REFCLK source clock settings" + flavor none + no_define + active_if { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK") || + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC == "EXT_REFCLK") + } + description "Set External Reference Clock frequency and type." + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT0 { + display "External freq ref 0" + flavor data + no_define + calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS . " " . + CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ + } + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS { + display "Clock type" + flavor data + default_value { "OSC" } + legal_values { "OSC" "XTAL" "RTC"} + + requires { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC") implies + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 50000000) + } + + requires { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL") implies + (((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 3000000) && + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 32000000)) || + ((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 32000) && + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 40000))) + } + + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC") + implies (CYGHWR_HAL_CORTEXM_KINETIS_RTC == 1) + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC") + implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL") + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC") + implies (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ == 32768) + } + + description " + Ext reference can be External oscillator or a crystal + for the on-chip oscillator or Real Time Clock." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ { + display "Clock frequency" + flavor data + legal_values 0 to 50000000 + default_value { + is_active(CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ) ? + CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ : + 4000000 + } + description "External oscillator or crystal reference in Hz." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP { + display "XTAL parallel C \[pF\]" + flavor data + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" } + legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 } + default_value 0 + description " + The oscillator has 4 on-chip capacitors that combined + produce capacitance in parallel to the crystal." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1 { + display "External freq ref 1" + flavor data + no_define + active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 + calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS . " " . + CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ + } + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS { + display "Clock type" + flavor data + default_value { "OSC" } + legal_values { "OSC" "XTAL" } + + requires { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "OSC") implies + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 50000000) + } + + requires { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL") implies + (((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ >= 3000000) && + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 32000000)) || + ((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ >= 32000) && + (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 40000))) + } + + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC") + implies (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL == 0) + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC") + implies (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 0) + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC") + implies (CYGHWR_HAL_CORTEXM_KINETIS_RTC == 1) + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC") + implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL") + } + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC") + implies (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ == 32768) + } + + description " + Ext reference can be External oscillator or a crystal + for the on-chip oscillator or Real Time Clock." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ { + display "Clock frequency" + flavor data + legal_values 0 to 50000000 + default_value { + is_active(CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ) ? + CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ : + 4000000 + } + description "External oscillator or crystal reference in Hz." + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP { + display "XTAL parallel C \[pF\]" + flavor data + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" } + legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 } + default_value 0 + description " + The oscillator has 4 on-chip capacitors that combined + produce capacitance in parallel to the crystal." + } + } + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL { + display "FLL / PLL configuration" + flavor none + no_define + description " + PLL / FLL parameters are being calculated on a + base of required system frequrncy and output as well as + reference oscillator/frequency settings." + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP { + display "PLL/FLL output frequency set point" + flavor data + legal_values 32768 to 220000000 + calculated { + ((CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL") || + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")) ? + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP : + CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP + } + description "Desired PLL output frequency." + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC { + display "Reference clock source for FLL or PLL" + flavor data + default_value { "EXT_REFCLK" } + + requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC == "INT_RC_32KHZ") + implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL") + } + + legal_values { "INT_RC_32KHZ" "EXT_REFCLK" "EXT_REFCLK1" } + description " + PLL/FLL oscillators can use one of external reference + clock references as well as Low (32768 Hz) or High (2MHz) + Frequency Internal oscillator" + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_PLL1_REFSRC { + display "Reference clock source for PLL1" + active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + flavor data + default_value { "EXT_REFCLK" } + + legal_values { "EXT_REFCLK" "EXT_REFCLK1" } + description " + PLL1 oscillator can use one of 2 external reference clock + references." + } + + cdl_component CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ { + display "Reference frequency." + flavor data + calculated { is_active (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT) ? + CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ : + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC + == "INT_RC_32KHZ" ? 32768 : 2000000 ) + } + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_FLL { + display "FLL oscillator" + flavor none + no_define + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" || + CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK" + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE { + display "Reference frequency range" + flavor data + legal_values 0 1 2 + calculated { + CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ > 8000000 ? 2 : + CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ >= 1000000 ? 1 : + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ >= 32000) && + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ <= 40000)) ? 0 : + -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV { + display "Calculated FLL divider" + flavor data + calculated { + CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE >= 1 ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ+32768*16) / (32768*32)) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE == 0 ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ+16384) / 32768) : -1) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV_REG { + display "FLL divider register value" + flavor data + legal_values 0 1 2 3 4 5 6 7 + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE == 0 ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV/2) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV/2) <= 5 ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV/2) : 5 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS { + display "DCO Range Select" + flavor data + legal_values 0 1 2 3 + default_value { + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP) >= 80000000 ? 3 : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP) >= 60000000 ? 2 : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP) >= 40000000 ? 1 : 0 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_MCG_DCO_DMX32 { + display "DCO max. frequency with 32768 reference" + flavor data + legal_values { 0 0x80 } + default_value { + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 96000000) || + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 72000000) || + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 48000000) || + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 9600000)) ? + 0x80 : 0x00 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_MCG_DCO_FLL_FACT { + display "FLL factor" + flavor data + calculated { + (CYGNUM_HAL_CORTEXM_MCG_DCO_DMX32 == 0x80) ? + ((CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 0 ) ? 732 : + (CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 1 ) ? 1464 : + (CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 2 ) ? 2197 : 2929 ) : + ((CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 0 ) ? 640 : + (CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 1 ) ? 1280 : + (CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS == 2 ) ? 1920 : 2560 ) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN { + display "DCO input frequency" + flavor data + calculated { CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + ( CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV_REG == 0 ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE == 0) ? 1 : 32 ) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV_REG * + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE == 0) ? 2 : 64))) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN_CHECK { + display "DCO input frequency check" + flavor data + no_define + legal_values { "OK" "NOK" "not applicable" } + calculated { + CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN >= 31250) && + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN <= 39063) ? + "OK" : "NOK" ) : + "NotApplicable" + } + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" } + requires { + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN >= 31250) && + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN <= 39063) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_FREQ_AV { + display "FLL output frequency actual value" + flavor data + calculated {CYGNUM_HAL_CORTEXM_KINETIS_MCG_DCO_IN * + CYGNUM_HAL_CORTEXM_MCG_DCO_FLL_FACT } + } + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL { + display "PLL oscillator" + flavor bool + default_value 1 +# { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" ? 0 : 1 } +# active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" || +# CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK" +# } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL { + display "100 Mhz line" + flavor none + no_define + active_if !CYGINT_HAL_CORTEXM_KINETIS_150 + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X { + display "Phase detector proposed input frequency" + no_define + flavor data + calculated { + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 180000000) ? + 3800000 : + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 110000000) ? + 3000000 : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 3) ? 2000000 : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 4) ? 2000000 : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 5) ? 2500000 : + 300000 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV { + display "PLL External Reference Divider" + flavor data + legal_values 1 to 25 + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X ) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ { + display "Phase detector input frequency" + no_define + flavor data + legal_values 2000000 to 4000000 + calculated { CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV) : -1 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV { + display "VCO Divider" + flavor data + legal_values 24 to 55 + default_value { CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP / + CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCG_PLL_FREQ_AV { + display "PLL output frequency actual value" + flavor data + calculated { CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV * + CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV) : -1 + } + } + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL { + display "150 Mhz line" + flavor none + no_define + active_if CYGINT_HAL_CORTEXM_KINETIS_150 + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X { + display "Phase detector proposed input frequency" + no_define + flavor data + legal_values 1000000 to 32000000 + default_value { + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ == 50000000) ? + (!(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 48000000) ? 50000000/8 : 50000000/5) : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 30000000) ? 30000000 : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 4000000) ? 4000000 : + 5000000 + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL { + display "PLL0 Reference Oscillator select" + flavor data + default_value 0 + legal_values 0 1 + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV { + display "PLL External Reference Divider" + flavor data + legal_values 1 to 8 + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X ) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ { + display "Phase detector input frequency" + no_define + flavor data + legal_values 1000000 to 32000000 + calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV) : -1 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV { + display "VCO Divider" + flavor data + legal_values 16 to 47 + default_value { CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP / + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ) * 2) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL_FREQ_AV { + display "PLL output frequency actual value" + flavor data + calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV * + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV) / 2) : -1 + } + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV { + display "PLL External Reference Divider" + flavor data + calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ? + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV : + CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV { + display "PLL External Reference Divider" + flavor data + calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ? + (CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV) : + CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL_FREQ_AV { + display "PLL output frequency actual value" + flavor data + calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ? + CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL_FREQ_AV : + CYGNUM_HAL_CORTEXM_KINETIS_100_MCG_PLL_FREQ_AV + } + } + } + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC { + display "Internal Reference Clock" + flavor data + calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC_HI ? 2000000 : 32768 } + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "INT_REFCLK" } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC_HI { + display "Use highh frequency internal osc." + flavor bool + default_value 1 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC { + display "External Reference Clock" + flavor data + calculated CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ + active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK" } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLK_DIST { + display "Subsystem clocking" + flavor none + no_define + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS { + display "Peripheral bus" + flavor data + calculated { CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_PER_BUS + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX { + display "Frequency limit" + flavor data + default_value 50000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS_SP { + display "Calculated value" + flavor data + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ <= + CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX ? + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ : + CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX + } + legal_values 0 to CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_MAX + } + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_PER_BUS { + display "Divider" + flavor data + legal_values 1 to 16 + + default_value { !(CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ % + CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS_SP) ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS_SP) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_PER_BUS_SP + 1) + } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH { + display "Flash" + flavor data + calculated { CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLASH + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX { + display "Frequency limit" + flavor data + default_value 25000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_SP { + display "Calculated value" + flavor data + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ <= + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX ? + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ : + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX + } + legal_values 0 to CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_MAX + } + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLASH { + display "Divider" + flavor data + legal_values 1 to 16 + + default_value { + !(CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ % + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_SP) ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_SP) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLASH_SP + 1) + } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS { + display "Flex bus" + flavor data + calculated { CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLEX_BUS + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX { + display "Frequency limit" + flavor data + default_value 50000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_SP { + display "Calculated value" + flavor data + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ <= + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX ? + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ : + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX + } + legal_values 0 to CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_MAX + } + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLEX_BUS { + display "Divider" + flavor data + legal_values 1 to 16 + + default_value { + !(CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ % + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_SP) ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_SP) : + (CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_FLEX_BUS_SP + 1) + } + } + } + + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB { + display "USB clock" + flavor data + calculated { CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN * + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC / + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_DIV + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_MAX { + display "Frequency limit" + flavor data + default_value 48000000 + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC { + display "Fractional Divider" + flavor data + legal_values 1 to 2 + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ < + CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_MAX ? 1 : + ((CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN) > + (CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP * 4) ? 1 : + (CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN % + CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP ? 2 : 1)) + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_DIV { + display "Divider" + flavor data + legal_values 1 to 8 + default_value { !((CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN * + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC) % + CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP) ? + (CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN * + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP) : + ((CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN * + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC / + CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP) +1) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_CLK_USB_IN { + display "USB divider input frequency" + flavor data + calculated { + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_CLK_USB_SP { + display "Desired" + flavor data + calculated 48000000 + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_TRACECLK { + display "Trace clock source" + flavor data + default_value { "CORE" } + legal_values { "CORE" "MCGOUT" } + + } + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_TRACE_CLKOUT { + display "Enable Trace Clock out" + flavor bool + default_value 0 + } + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_RTC { + display "System uses Real Time Clock" + } + + cdl_component CYGHWR_HAL_CORTEXM_KINETIS_RTC { + display "Real Time Clock" + flavor bool + default_value CYGINT_HAL_CORTEXM_KINETIS_RTC + + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP { + display "RTC XTAL parallel C \[pF\]" + flavor data + legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 + 30 32 } + default_value 0 + description " + The Real Time Clock oscillator has 4 capacitors that + combined produce capacitance in parallel to the crystal." + } + } + + # PLL1 and OSC1 Configuration + # PLL1 + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 { + display "MCG Has PLL1" + } + + cdl_interface CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 { + display "MCG Has OSC1" + } + + cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 { + display "PLL1 oscillator" + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL + flavor bool + default_value CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP { + display "PLL1 output frequency set point" + flavor data + legal_values 32768 to 220000000 + calculated { + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1") ? + CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP : + CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP + } + description "Desired PLL1 output frequency." + } + + cdl_component CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ { + display "Reference frequency." + flavor data + calculated { is_active (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT) ? + CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ : + (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC + == "INT_RC_32KHZ" ? 32768 : 2000000 ) + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X { + display "Phase detector proposed input frequency" + no_define + flavor data + legal_values 1000000 to 32000000 + default_value { + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ == 50000000) ? + (!(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 48000000) ? 50000000/8 : 50000000/5) : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 30000000) ? 30000000 : + !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 4000000) ? 4000000 : + 5000000 + } + } + + cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL { + display "PLL10 Reference Oscillator select" + flavor data + default_value 0 + legal_values 0 1 + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV { + display "PLL1 External Reference Divider" + flavor data + legal_values 1 to 8 + default_value { + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ / + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X ) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ { + display "Phase detector input frequency" + no_define + flavor data + legal_values 1000000 to 32000000 + calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV ? + (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV) : -1 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV { + display "VCO Divider" + flavor data + legal_values 16 to 47 + default_value { CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP / + CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ) * 2) : -1 + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL1_FREQ_AV { + display "PLL1 output frequency actual value" + flavor data + calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV ? + ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ / + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV * + CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV) / 2) : -1 + } + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_PRDIV { + display "PLL1 External Reference Divider" + flavor data + calculated CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV + } + + cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_VDIV { + display "PLL1 External Reference Divider" + flavor data + calculated CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL1_FREQ_AV { + display "PLL1 output frequency actual value" + flavor data + calculated CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL1_FREQ_AV + } + } + + cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLLSEL_FREQ_AV { + display "Frequency of selected PLL" + flavor data + parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL + calculated {CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" ? + CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL1_FREQ_AV : + CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL_FREQ_AV + } + } + + # EOF kinetis_clocking.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_ddram.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_ddram.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_ddram.cdl @@ -0,0 +1,259 @@ +##========================================================================== +## +## kinetis_ddram.cdl +## +## Cortex-M Freescale Kinetis DDRAM configuration +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2013-04-28 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + +# cdl_component CYGPKG_HAL_CORTEXM_KINETIS_DDRMC { +# display "DDRAM" +# flavor bool +# active_if CYGINT_HAL_CORTEXM_KINETIS_DDRAM +# default_value CYGINT_HAL_CORTEXM_KINETIS_DDRAM +# description "DDRAM on Kinetis is mirrored at several address ranges. +# Each mirror has its own caching options that may include: +# non-cached, write-through and write-back. +# By eCos configuration, DDRAM is split in 3 partitions: +# Cached, Non-cached and Code. +# Cached partition is intended for general purpose main memory. +# Non-cached partition is convenient for sharing +# buffers with other bus masters such as Ethernet controller, +# DMA, etc. Code partition is for executable code." +# +# requires CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 +# compile kinetis_ddram.c + + cdl_component CYGHWR_HAL_KINETIS_DDR_SIZE_MIB { + display "DDRAM size \[MiB\]" + flavor data + default_value 128 + + cdl_option CYGHWR_HAL_KINETIS_DDR_SIZE { + display "DDRAM size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_DDR_SIZE_MIB * (1024 * 1024) * 0x1 } + } + } + + cdl_component CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB { + display "Non-cached DDRAM data partition \[MiB\]" + requires { CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB <= + CYGHWR_HAL_KINETIS_DDR_SIZE_MIB } + flavor data + + implements CYGINT_HAL_HAS_NONCACHED + + legal_values { 1 to (CYGHWR_HAL_KINETIS_DDR_SIZE_MIB - 8) } + + default_value CYGHWR_HAL_KINETIS_DDR_SIZE_MIB / 4 + + description " + Non-cached DDRAM partition, intended for sharing + buffers with other bus masters such as Ethernet controller, + DMA, etc." + + cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE { + display "Non-cached DDRAM size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB + * (1024 * 1024) * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE { + display "Non-cached DDRAM base address" + flavor data + + calculated { CYGHWR_HAL_KINETIS_DDR_NON_CACHED_MIRROR + + CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE + + CYGHWR_HAL_KINETIS_DDR_CODE_SIZE } + } + + cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_MIRROR { + display "Non-cached DDRAM mirror base" + flavor data + no_define + calculated { CYGHWR_HAL_KINETIS_DDR_CACHED_MIRROR == 0x70000000 ? + 0x80000000 : 0x70000000 } + } + } + + cdl_component CYGHWR_HAL_KINETIS_DDR_CODE_SIZE_MIB { + display "DDRAM code partition \[MiB\]" + requires { CYGHWR_HAL_KINETIS_DDR_CODE_SIZE_MIB <= + CYGHWR_HAL_KINETIS_DDR_SIZE_MIB } + flavor data + + legal_values { 1 to (CYGHWR_HAL_KINETIS_DDR_SIZE_MIB - 8) } + + default_value CYGHWR_HAL_KINETIS_DDR_SIZE_MIB / 4 + + description " + DDRAM code partition - for use as program memory. + On systems with cache this partition is cached in PC cache. + Caching is always write-through" + + cdl_option CYGHWR_HAL_KINETIS_DDR_CODE_SIZE { + display "DDRAM code partition size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_DDR_CODE_SIZE_MIB + * (1024 * 1024) * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_DDR_CODE_BASE { + display "DDRAM code partition base address" + flavor data + + calculated { 0x08000000 } + } + } + + cdl_component CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE_MIB { + display "Cached DDRAM data partition \[MiB\]" + flavor data + requires { CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE_MIB >= 8 } + calculated { CYGHWR_HAL_KINETIS_DDR_SIZE_MIB - + CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB - + CYGHWR_HAL_KINETIS_DDR_CODE_SIZE_MIB } + + description " + Cached DDRAM data partition - for general use as main data memory. + On systems with cache this partition is cached in PS cache. + Caching can be either copy-back or write-through and is determined by + general cache mode setting." + + cdl_option CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE { + display "Cached DDRAM size \[Bytes\]" + flavor data + calculated { (CYGHWR_HAL_KINETIS_DDR_SIZE - + CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE - + CYGHWR_HAL_KINETIS_DDR_CODE_SIZE) * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_DDR_CACHED_BASE { + display "Cached DDRAM base address" + flavor data + calculated { CYGHWR_HAL_KINETIS_DDR_CACHED_MIRROR + + CYGHWR_HAL_KINETIS_DDR_CODE_SIZE } + } + + cdl_option CYGHWR_HAL_KINETIS_DDR_CACHE_TYPE { + display "DDRAM cache type" + flavor data + calculated CYGSEM_HAL_DCACHE_STARTUP_MODE + description "DDRAM cache type is determined by general cache setting" + } + + cdl_component CYGHWR_HAL_KINETIS_DDR_CACHED_MIRROR { + display "Cached DDRAM mirror base" + flavor data + no_define + legal_values { 0x70000000 0x80000000 } + default_value { 0x70000000 } + description " + According to Kinetis Reference Manual rev. 2, the DDRAM mirror + mapped at 0x80000000 (supporting write-thru caching only) + is not accesible by ENET, SDH and some other bus masters, + and that the mirror at 0x70000000 (supporting copy-back caching) + is accessible by them. + The practical tests prove that it is the opposite, actually as + it should be. + Until this discrepancy is resolved, this option selects the + default (non)cached mirror and provides the user with possibilty for + manual override. + Note: The behavior may change in future." + } + } + + cdl_option CYGHWR_HAL_DDR_SYNC_MODE { + display "Use synchronous mode" + flavor bool + requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" } + default_value { 1 } + } + + cdl_option CYGHWR_HAL_KINETIS_SIM_MCR_DDRBUS { + display "DDRAM bus configuration" + flavor data + legal_values 0 1 2 3 6 + default_value 6 + description " + DDRAM configuration: 0 - LPDDR Half Strength, + 1 - LPDDR Full Strength, 2 - DDR2 Half Strength, + 3 - DDR1, 6 - DDR2 Full Strength" + } + + cdl_component CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL { + display "Pad control" + flavor data + + calculated { + (CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL_ODT << 24) | + CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL_SPARE_DLY_CTRL | + 0x00000200 + } + + cdl_option CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL_ODT { + display "On Die Termination" + flavor data + legal_values { 0 1 2 3 } + default_value 1 + + description "On Die Termination \[Ohm\]: 0 - Off, 1 - 75, + 2 - 150, 3 - 50" + } + + cdl_option CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL_SPARE_DLY_CTRL { + display "Delay chains in spare logic" + flavor data + legal_values { 0 1 2 3 } + default_value 3 + + description "Delay chains in spare logic: 0 - No buffer, 1 - 4 buffers, + 2 - 7 buffers, 11 - 10 buffers" + } + } +# } + +# EOF kinetis_ddram.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_fbram.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_fbram.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_fbram.cdl @@ -0,0 +1,205 @@ +##========================================================================== +## +## kinetis_fbram.cdl +## +## Cortex-M Freescale Kinetis FBRAM configuration +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2013-04-28 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + +# cdl_component CYGPKG_HAL_CORTEXM_KINETIS_FBRAM { +# display "FlexBus RAM" +# flavor bool +# active_if CYGINT_HAL_CORTEXM_KINETIS_DBRAM +# default_value CYGINT_HAL_CORTEXM_KINETIS_FBRAM +# description "FlexBus RAM on Kinetis is mirrored at several address ranges. +# Each mirror has its own caching options that may include: +# non-cached, write-through and write-back. +# By eCos configuration, FlexBus RAM is split in 3 partitions: +# Cached, Non-cached and Code. +# Cached partition is intended for general purpose main memory. +# Non-cached partition is convenient for sharing +# buffers with other bus masters such as Ethernet controller, +# DMA, etc. Code partition is for executable code." +# + + cdl_option CYGHWR_HAL_KINETIS_FBR_SIZE { + display "FlexBus RAM size \[Bytes\]" + flavor data + default_value CYGHWR_HAL_KINETIS_FB_CS0_SIZE ? CYGHWR_HAL_KINETIS_FB_CS0_SIZE * 1 : 0 + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_SIZE_KIB { + display "FlexBus RAM size \[KiB\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_FBR_SIZE / 1024 } + } + + cdl_component CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE_KIB { + display "Non-cached FlexBus data RAM partition \[KiB\]" + requires { CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE_KIB <= + CYGHWR_HAL_KINETIS_FBR_SIZE_KIB } + flavor data + + implements CYGINT_HAL_HAS_NONCACHED + + legal_values { 64 to (CYGHWR_HAL_KINETIS_FBR_SIZE_KIB - 64) } + + default_value { CYGHWR_HAL_KINETIS_FBR_SIZE_KIB / 4 } + + description " + Non-cached FlexBus RAM partition, intended for sharing + buffers with other bus masters such as Ethernet controller, + DMA, etc." + + cdl_option CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE { + display "Non-cached FlexBus RAM size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE_KIB + * 1024 * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_NON_CACHED_BASE { + display "Non-cached FlexBus RAM base address" + flavor data + + calculated { CYGHWR_HAL_KINETIS_FBR_NON_CACHED_MIRROR + + CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE + + CYGHWR_HAL_KINETIS_FBR_CODE_SIZE } + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_NON_CACHED_MIRROR { + display "Non-cached FlexBus RAM mirror base" + flavor data + no_define + legal_values { 0x60000000 CYGINT_HAL_CORTEXM_KINETIS_150 ? 0x90000000 : 0x80000000 } + default_value { CYGINT_HAL_CORTEXM_KINETIS_150 ? 0x90000000 : + 0x60000000 } + } + + } + + cdl_component CYGHWR_HAL_KINETIS_FBR_CODE_SIZE_KIB { + display "FlexBus RAM code partition \[KiB\]" + requires { CYGHWR_HAL_KINETIS_FBR_CODE_SIZE_KIB <= + CYGHWR_HAL_KINETIS_FBR_SIZE_KIB } + flavor data + + legal_values { 64 to (CYGHWR_HAL_KINETIS_FBR_SIZE_KIB - 64) } + + default_value { CYGHWR_HAL_KINETIS_FBR_SIZE_KIB / 4 } + + description " + FlexBus RAM code partition - for use as program memory. + On systems with cache this partition is cached in PC cache + and is always write-through" + + cdl_option CYGHWR_HAL_KINETIS_FBR_CODE_SIZE { + display "FlexBus RAM code partition size \[Bytes\]" + flavor data + calculated { CYGHWR_HAL_KINETIS_FBR_CODE_SIZE_KIB + * 1024 * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_CODE_BASE { + display "FlexBus RAM code partition base address" + flavor data + + legal_values { 0x60000000 + CYGINT_HAL_CORTEXM_KINETIS_150 ? 0x18000000 : + 0x60000000 } + default_value { CYGINT_HAL_CORTEXM_KINETIS_150 ? 0x18000000 : + 0x60000000 } + } + } + + cdl_component CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE_KIB { + display "Cached FlexBus RAM data partition \[KiB\]" + flavor data + requires { CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE_KIB >= 64 } + calculated { CYGHWR_HAL_KINETIS_FBR_SIZE_KIB - + CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE_KIB - + CYGHWR_HAL_KINETIS_FBR_CODE_SIZE_KIB } + + description " + Cached FlexBus RAM data partition - for general use as main data memory. + On systems with cache this partition is cached in PS cache. + Caching can be either copy-back or write-through and is determined + by general cache mode setting." + + cdl_option CYGHWR_HAL_KINETIS_FBR_CACHED_SIZE { + display "Cached FlexBus RAM size \[Bytes\]" + flavor data + calculated { (CYGHWR_HAL_KINETIS_FBR_SIZE - + CYGHWR_HAL_KINETIS_FBR_NON_CACHED_SIZE - + CYGHWR_HAL_KINETIS_FBR_CODE_SIZE) * 0x1 } + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_CACHED_BASE { + display "Cached FlexBus RAM base address" + flavor data + calculated { CYGHWR_HAL_KINETIS_FBR_CACHED_MIRROR + + CYGHWR_HAL_KINETIS_FBR_CODE_SIZE } + } + + cdl_option CYGHWR_HAL_KINETIS_FBR_CACHE_TYPE { + display "FlexBus RAM cache type" + flavor data + calculated CYGSEM_HAL_DCACHE_STARTUP_MODE + description "FlexBus RAM cache type is determined by general + cache setting" + } + + cdl_component CYGHWR_HAL_KINETIS_FBR_CACHED_MIRROR { + display "Cached FlexBus RAM mirror base" + flavor data + no_define + legal_values { 0x60000000 CYGINT_HAL_CORTEXM_KINETIS_150 ? 0x90000000 : 0x80000000 } + default_value { 0x60000000 } + description "Cached DDRAM base " + } + } + +# } + +# EOF kinetis_fbram.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl @@ -0,0 +1,84 @@ +##========================================================================== +## +## kinetis_flexbus.cdl +## +## Cortex-M Freescale Kinetis FlexBus +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-12-11 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +# cdl_component CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS { +# display "FlexBus" + +for { set ::chipsel 0 } { $::chipsel < 6 } { incr ::chipsel } { + + cdl_interface CYGINT_HAL_KINETIS_FB_CS[set ::chipsel] { + display "Platform uses Chip select [set ::chipsel]" + flavor bool + description " + This interface will be implemented if the specific + controller being used provides chip select [set ::chipsel], and if + that chip select is used on target hardware." + } + + cdl_component CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel] { + display "Chip select [set ::chipsel]" + flavor bool + active_if CYGINT_HAL_KINETIS_FB_CS[set ::chipsel] + default_value CYGINT_HAL_KINETIS_FB_CS[set ::chipsel] + description " + This option includes initialization data for + chip select [set ::chipsel]." + + cdl_option CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel]_CR_PS { + display "Port size (encoded)" + flavor data + calculated ( \ + CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel]_CR_PSB == 32 ? 0 : \ + CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel]_CR_PSB == 8 ? 1 : \ + CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel]_CR_PSB == 16 ? 2 : 3) + } + } +} + + +# EOF kinetis_flexbus.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_irq_scheme.cdl b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_irq_scheme.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_irq_scheme.cdl @@ -0,0 +1,202 @@ +##========================================================================== +## +## kinetis_irq_scheme.cdl +## +## Cortex-M Freescale Kinetis IRQ configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2010-12-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + + +# cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_VAR { +# display "Variant IRQ priority defaults" +# no_define +# flavor none +# parent CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME +# description " +# Interrupt priorities defined by Kinetis variant" + + cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY_SP { + display "Clock IRQ priority" + flavor data + no_define + default_value 0xE0 + description "Set clock ISR priority. Default setting is lowest priority." + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + + } + + cdl_option CYGNUM_DEVS_ETH_FREESCALE_ENET0_INTPRIO_SP { + display "Ethernet IRQ priority" + flavor data + no_define + active_if CYGPKG_DEVS_ETH_FREESCALE_ENET + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0xE0 + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_UART { + display "UART IRQ priorities" + flavor none + no_define + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART0_INT_PRIORITY_SP { + display "UART0 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART0 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART1_INT_PRIORITY_SP { + display "UART1 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART1 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART2_INT_PRIORITY_SP { + display "UART2 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART2 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART3_INT_PRIORITY_SP { + display "UART3 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART3 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART4_INT_PRIORITY_SP { + display "UART4 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART4 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + + cdl_option CYGNUM_IO_SERIAL_FREESCALE_UART5_INT_PRIORITY_SP { + display "UART5 interrupt priority" + flavor data + no_define + active_if CYGPKG_IO_SERIAL_FREESCALE_UART5 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0x80 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_DSPI { + display "DSPI IRQ priorities" + flavor none + no_define + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI0_ISR_PRI_SP { + display "DSPI bus 0 interrupt priority" + flavor data + no_define + active_if CYGHWR_DEVS_SPI_FREESCALE_DSPI0 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0xD0 + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI1_ISR_PRI_SP { + display "DSPI bus 1 interrupt priority" + flavor data + no_define + active_if CYGHWR_DEVS_SPI_FREESCALE_DSPI1 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0xD0 + } + + cdl_option CYGNUM_DEVS_SPI_FREESCALE_DSPI2_ISR_PRI_SP { + display "DSPI bus 2 interrupt priority" + flavor data + no_define + active_if CYGHWR_DEVS_SPI_FREESCALE_DSPI2 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + default_value 0xD0 + } + } + + cdl_component CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_I2C { + display "I2C interrupt priorities" + flavor none + no_define + + for { set ::bus 0 } { $::bus < 2 } { incr ::bus } { + + cdl_option CYGNUM_DEVS_FREESCALE_I2C[set ::bus]_IRQ_PRIORITY { + display "I2C bus [set ::bus] interrupt priority" + flavor data + active_if CYGHWR_DEVS_FREESCALE_I2C[set ::bus] + default_value 0x90 + legal_values { 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 + 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 } + } + } + } + +# } + + +# EOF kinetis_irq_scheme.cdl diff --git a/packages/hal/cortexm/kinetis/var/current/doc/kinetis.sgml b/packages/hal/cortexm/kinetis/var/current/doc/kinetis.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/doc/kinetis.sgml @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Freescale Kinetis Variant + + + CYGPKG_HAL_CORTEXM_KINETIS + eCos Support for Freescale Kinetis Micro-controllers + + + Description + + Kinetis is a Freescale microcontroller family based on the ARM Cortex-M4 core. The + family consists of subfamilies: K10, K20, K30, K40, K50, K60 and K70 + that gradually add-on performance and features. + + + The Kinetis variant HAL provides generic support for hardware found on some + or all Kinetis members. The variant package CYGPKG_HAL_CORTEXM_KINETIS + provides configurable components that aim to support the complete set of options + found in the Kinetis family. + + + What's supported + + The current Kinetis software includes a Kinetis variant HAL, some Platform BSPs, + as well as DMA, UART, Wallclock, Ethernet and SPI support. + + + Configuration + Kinetis is a set of families of micro-controllers packed with highly configurable components. + In order to facilitate system configuration for the user, the CDL configuration items are organized as a set of + expert components. Typically, for a given peripheral, the user chooses the required hardware + options and desirable parameters, and the respective CDL configuration options and settings are calculated from these. + If it is not possible to achieve exact values, the configurator attempts to provide + approximate settings, then the user can manually do the fine tuning. + Kinetis Part Selection + + Within a family and/or across families the chips are further differentiated by their features + such as: optional FPU, amount of memory, etc. The family member options are reflected in the + controller naming scheme (see respective Freescale Kinetis product brief(s) and reference manual(s)). + The Kinetis part builder CYGHWR_HAL_CORTEXM_KINETIS, respects this naming scheme and + enables the user to interactively configure eCos for the desired part by selecting + the requested part name segments. + Based on user input, the CDL computes the part-specific eCos configuration. This includes calculation + of on-chip FLASH and SRAM layout as well as the activation/deactivation of options such as FPU and + Ethernet. + + + Clocking + + Kinetis is packed with a rich set of clocking options provided by the Multipurpose Clock Generator - MCG. + Dependent on the part, MCG can have outlets for one or two external frequency reference sources + OSC and OSC1 and one + or two PLL oscillators PLL and PLL1. + Each of the external frequency reference sources can be either a crystal or external + oscillator and associated with either or both PLL oscillators. OSC can also be a + reference source for the FLL oscillator. + Besides OSC and OSC1, there are additional clock sources + including two RC oscillators and a (battery backed) RTC clock with it's own 32768 Hz crystal oscillator. + MCG gives the user a wide choice of system and peripheral clock source(s) that can be + external clock(s), internal clocks, a PLL or the FLL. An external or on-chip + oscillator can be used as a system clock or as a reference for PLL/FLL oscillator(s). + + In the documentation of Kinetis parts with two oscillators, OSC + and PLL are described as OSC0 and PLL0 respectively. + + + Clocking component CYGHWR_HAL_CORTEXM_KINETIS_CLOCKING provides some expert + functionality in order to facilitate clock system configuration. Normally, the user sets requirements: + clock source, clock reference, desired core frequency and upper limits for peripheral + clock frequencies. The component automatically calculates MCG and other peripheral register + settings in order to achieve the required clock frequencies. This setting is not always perfect but + fits (exactly or close) for commonly used frequencies. If necessary, the user can fine tune the + clock settings interactively using the eCos Configuration Tool. + The two clock sources are named: + + + + System clock + The clock source that provides the clock for the Cortex-M core. + It may also provide the clock for some peripherals. + + + Auxiliary clock + This is optional and may provide a clock for peripherals but not for the Cortex-M core. + + + + The user can select which source is the system clock. The choices for system clock are: PLL, + FLL, External reference clock and, when available, PLL1. + The auxiliary clock, when available is: PLL if PLL1 is selected + for system the clock or PLL1 if any other source is selected for the system clock. + + + Memory layouts + + The memory layouts and startup types which don't employ external memory should be applicable to all + Kinetis platforms so they are defined and maintained at the variant level. + This is somewhat different than common eCos practice but has some advantages brought by universal, + single copy linker scripts for single chip configurations. The linker scripts are further enhanced/generalized + by utilization of macros provided by CDL and calculated on the basis of the + selected Kinetis part. + + Variant Linker + Script Location + + Variant linker scripts are found at: + hal/kinetis/var/<version>/include/pkgconf + + + Linker Script Naming + + Linker script file names are composed of segments + mlt_kinetis_<NVM>_<SRAM>_<STARTUP>[_<PLF>].ldi + where PLF is an optional extension for platform specific scripts and + other segments have meanings as described in the following table. + + Linker script name segments + + + + + + + Segment + Description + Values + + + + + NVM + Kinetis non-volatile memory configuration + + flash, + flexnvm + + + + SRAM + SRAM memory sectioning + + unisram, + sram2s + + + + STARTUP + Startup type + + rom, + sram + + + + +
+ + Never attempt to flash Kinetis with an image for SRAM startup. SRAM startup images + do not contain a .flash_conf section so random contents may be written in + flash protection area and lock your Kinetis device. This lock-out can be permanent. + + +
+ Platform Specific Memory Layouts + + Platforms, if needed, can provide their own layouts in addition to the variant ones. Typically + they will cover systems with external memory. The + startup type implicitly determines whether variant and platform defined + layout shall be used. + + + On-chip SRAM + + Kinetis on chip SRAM memory consists of two equal banks that occupy consecutive locations anchored + below and above 0x20000000. This fact is reflected in memory layout scripts. + There are linker scripts that treat SRAM as a single section (unisram) or as + 2 separate sections (sram2s). + + + On-chip FLASH + + Kinetis on-chip flash contains a special area [0x400-0x40F] + that holds the flash security configuration. In order to preserve this area from + accidental writing and at the same time provide regular access, + a custom linker section .flash_conf is created. In addition, in order + to utilize the FLASH pool below 0x400 the USER_SECTION + .kinetis_misc is defined. This section typically contains + code parts from kinetis_misc.c. + + + Cache + + Kinetis members with operating frequencies of 120 MHz and 150 MHz are equipped with cache memory. + Due to the Harvard architecture, there are two cache memories connected to code + - PC and system - PS buses respectively. + Although both modules can cache both instructions and data (unified caches), with the provided + memory they act as instruction (PC) and data (PS) caches. + + + A common caching issue is sharing memory resources with bus masters such as DMA, Ethernet controller, etc. + In order to keep shared data such as buffers and transfer control descriptors consistent, + cached data have to be flushed and/or invalidated. An alternative approach, used here is usage of + non-cachable memory for shared data. CYGHWR_HAL_NON_CACHABLE provides for + the configuration of non-cachable memory. If some bus masters have provision for non-cache able memory, + such configuration options can be parenthed by CYGHWR_HAL_NON_CACHABLE. + + +
+ Startup types + + There are two levels of startup type: + + + + Variant CYG_HAL_STARTUP_VAR + This is always present and provides startup + types for systems without external memory. + + + Platform CYG_HAL_STARTUP_PLF + This is optional and is + provided by a platform package. Typically it provides startup types for systems + that employ external memory. + + + + + + When present, the platform startup overloads the variant startup and has precedence over it. + User can activate the variant startup by setting platform startup to + ByVariant. + + Startup types provided variant + + The following startup types are provided for Kinetis at the variant level: + + + + ROM + Normal startup for stand-alone operation. eCos image has to be flashed + in internal flash; + + + SRAM + Image is loaded in internal SRAM by means of JTAG/SWD and executed + under debugger control. + + + (IMPORTANT) Never, ever attempt to flash Kinetis with an image for SRAM startup. + SRAM startup images do not contain a .flash_conf section so random contents + may be written to the flash protection area and lock your Kinetis device. This lock-out can be permanent. + + + + Interrupt priority scheme + + In case of multiple simultaneous interrupts, interrupt service request resolution is based + on a relative comparison of interrupt priorities, rather than on individual interrupt priority values. + Interrupt priority scheme gives a consolidated overview and control + of priorities of all interrupt sources. Interrupt priorities can be provided by either variant + CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME_VAR + or platform CYGHWR_HAL_DEVS_IRQ_PRIO_SCHEME. + + +
+ +
+ + diff --git a/packages/hal/cortexm/kinetis/var/current/doc/kinetis_begin.sgml b/packages/hal/cortexm/kinetis/var/current/doc/kinetis_begin.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/doc/kinetis_begin.sgml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Freescale Kinetis Family Support diff --git a/packages/hal/cortexm/kinetis/var/current/doc/kinetis_end.sgml b/packages/hal/cortexm/kinetis/var/current/doc/kinetis_end.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/doc/kinetis_end.sgml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/hal_cache.h b/packages/hal/cortexm/kinetis/var/current/include/hal_cache.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/hal_cache.h @@ -0,0 +1,282 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour, ilijak +// Contributors: +// Date: 2012-05-02 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +//----------------------------------------------------------------------------- +// Cache dimensions +#ifdef CYGINT_HAL_CACHE + +// Data cache +#define HAL_DCACHE_SIZE 8192 // Size of data cache in bytes +#define HAL_DCACHE_LINE_SIZE 16 // Size of a data cache line +#define HAL_DCACHE_WAYS 2 // Associativity of the cache + +// Instruction cache +#define HAL_ICACHE_SIZE 8192 // Size of cache in bytes +#define HAL_ICACHE_LINE_SIZE 16 // Size of a cache line +#define HAL_ICACHE_WAYS 2 // Associativity of the cache + +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +#include +#include + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() HAL_CORTEXM_KINETIS_CACHE_PS_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() HAL_CORTEXM_KINETIS_CACHE_PS_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() HAL_CORTEXM_KINETIS_CACHE_PS_INVALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() HAL_CORTEXM_KINETIS_CACHE_PS_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() HAL_CORTEXM_KINETIS_CACHE_PS_CLEAR() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = HAL_CORTEXM_KINETIS_CACHE_PS_IS_ENABLED(); \ + CYG_MACRO_END + +// Invalidate cache lines in the given range without writing to memory. +#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) \ + HAL_CORTEXM_KINETIS_CACHE_PS_INVALIDATE(_base_, _size_) + +// Write dirty cache lines to memory and invalidate the cache entries +#define HAL_DCACHE_FLUSH( _base_ , _size_ ) \ + HAL_CORTEXM_KINETIS_CACHE_PS_CLR(_base_, _size_) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() HAL_CORTEXM_KINETIS_CACHE_PC_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() HAL_CORTEXM_KINETIS_CACHE_PC_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() HAL_CORTEXM_KINETIS_CACHE_PC_INVALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() HAL_CORTEXM_KINETIS_CACHE_PC_SYNC() + +// Purge contents of data cache +#define HAL_ICACHE_PURGE_ALL() HAL_CORTEXM_KINETIS_CACHE_PC_CLEAR() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = HAL_CORTEXM_KINETIS_CACHE_PC_IS_ENABLED(); \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) \ + HAL_CORTEXM_KINETIS_CACHE_PC_INVALIDATE(_base_, _size_) + +#else // CYGINT_HAL_CACHE + +// Data cache +//#define HAL_DCACHE_SIZE 0 // Size of data cache in bytes +//#define HAL_DCACHE_LINE_SIZE 0 // Size of a data cache line +//#define HAL_DCACHE_WAYS 0 // Associativity of the cache + +// Instruction cache +//#define HAL_ICACHE_SIZE 0 // Size of cache in bytes +//#define HAL_ICACHE_LINE_SIZE 0 // Size of a cache line +//#define HAL_ICACHE_WAYS 0 // Associativity of the cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_DCACHE_FLUSH( _base_ , _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +#endif // CYGINT_HAL_CACHE + +// End of hal_cache.h +#endif // CYGONCE_HAL_CACHE_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/hal_diag.h b/packages/hal/cortexm/kinetis/var/current/include/hal_diag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/hal_diag.h @@ -0,0 +1,92 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H +//============================================================================= +// +// hal_diag.h +// +// HAL diagnostics +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2011-02-05 +// Purpose: HAL diagnostics +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +#include + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else + +__externC void hal_plf_diag_init(void); +__externC void hal_plf_diag_putc(char); +__externC cyg_uint8 hal_plf_diag_getc(void); + +# ifndef HAL_DIAG_INIT +# define HAL_DIAG_INIT() hal_plf_diag_init() +# endif + +# ifndef HAL_DIAG_WRITE_CHAR +# define HAL_DIAG_WRITE_CHAR(__c) hal_plf_diag_putc(__c) +# endif + +# ifndef HAL_DIAG_READ_CHAR +# define HAL_DIAG_READ_CHAR(__c) (__c) = hal_plf_diag_getc() +# endif + +#endif + + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_DIAG_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.h @@ -0,0 +1,26 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (0x20000000) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_rom.ldi @@ -0,0 +1,45 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + ram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + USER_SECTION (code_sram, sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 (NOLOAD), LMA_EQ_VMA) + SECTION_data (ram, 0x20000000, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.h @@ -0,0 +1,22 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram_u (0x20000000) +#define CYGMEM_REGION_sram_u_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_u_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram_u+CYGMEM_REGION_sram_u_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_sram2s_sram.ldi @@ -0,0 +1,35 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + sram_u : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (sram_l, 0x20000400 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LMA_EQ_VMA) + SECTION_RELOCS (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (sram_u, 0x20000000, LMA_EQ_VMA) + SECTION_rodata1 (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (sram_u, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.h @@ -0,0 +1,22 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_rom.ldi @@ -0,0 +1,43 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.h @@ -0,0 +1,18 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flash_unisram_sram.ldi @@ -0,0 +1,34 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x20000400 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.h @@ -0,0 +1,45 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (0x20000000) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE +# define CYGMEM_REGION_flexnvm (0x10000000) +# define CYGMEM_REGION_flexnvm_SIZE (CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE) +# define CYGMEM_REGION_flexnvm_ATTR (CYGMEM_REGION_ATTR_R) +#endif + +#if defined(CYGHWR_HAL_CORTEXM_KINETIS_EEE) && CYGHWR_HAL_CORTEXM_KINETIS_EEE +# define CYGMEM_REGION_eeeprom0 (0x14000000) +# define CYGMEM_REGION_eeeprom0_SIZE (CYGHWR_HAL_KINETIS_EEE0_SIZE) +# define CYGMEM_REGION_eeeprom0_ATTR (CYGMEM_REGION_ATTR_R) +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 +# define CYGMEM_REGION_eeeprom1 (0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE ) +# define CYGMEM_REGION_eeeprom1_SIZE (CYGHWR_HAL_KINETIS_EEE1_SIZE) +# define CYGMEM_REGION_eeeprom1_ATTR (CYGMEM_REGION_ATTR_R) +# endif +#else +# define CYGMEM_REGION_flexram (0x14000000) +# define CYGMEM_REGION_flexram_SIZE (CYGHWR_HAL_KINETIS_FLEXRAM_SIZE) +# define CYGMEM_REGION_flexram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_rom.ldi @@ -0,0 +1,67 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + ram : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE + flexnvm : ORIGIN = 0x10000000, LENGTH = CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE +#endif +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_EEE + eeeprom0 : ORIGIN = 0x14000000, LENGTH = CYGHWR_HAL_KINETIS_EEE0_SIZE +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 + eeeprom1 : ORIGIN = 0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE, LENGTH = CYGHWR_HAL_KINETIS_EEE1_SIZE +# endif +#else + flexram : ORIGIN = 0x14000000, LENGTH = CYGHWR_HAL_KINETIS_FLEXRAM_SIZE +#endif +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + USER_SECTION (code_sram, sram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400 (NOLOAD), LMA_EQ_VMA) +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE + USER_SECTION(d_flash, flexnvm, 0x10000000 (NOLOAD), LMA_EQ_VMA) +#endif +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_EEE + USER_SECTION(e_eeprom0, eeeprom0, 0x14000000 (NOLOAD), LMA_EQ_VMA) +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 + USER_SECTION(e_eeprom1, eeeprom1, 0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE (NOLOAD), LMA_EQ_VMA) +# endif +#else + USER_SECTION(flex_ram, flexram, 0x14000000 (NOLOAD), LMA_EQ_VMA) +#endif + SECTION_data (ram, 0x20000000, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.h @@ -0,0 +1,22 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram_l (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_l_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_l_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_sram_u (0x20000000) +#define CYGMEM_REGION_sram_u_SIZE (CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_sram_u_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram_u+CYGMEM_REGION_sram_u_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_sram2s_sram.ldi @@ -0,0 +1,35 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram_l : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + sram_u : ORIGIN = 0x20000000, LENGTH = CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (sram_l, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, LMA_EQ_VMA) + SECTION_RELOCS (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (sram_l, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (sram_u, 0x20000000 , LMA_EQ_VMA) + SECTION_rodata1 (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram_u, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (sram_u, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = (0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.h @@ -0,0 +1,42 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif + +#define CYGMEM_REGION_ram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (CYGHWR_HAL_KINETIS_FLASH_SIZE) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R) + +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE +# define CYGMEM_REGION_flexnvm (0x10000000) +# define CYGMEM_REGION_flexnvm_SIZE (CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE) +# define CYGMEM_REGION_flexnvm_ATTR (CYGMEM_REGION_ATTR_R) +#endif + +#if defined(CYGHWR_HAL_CORTEXM_KINETIS_EEE) && CYGHWR_HAL_CORTEXM_KINETIS_EEE +# define CYGMEM_REGION_eeeprom0 (0x14000000) +# define CYGMEM_REGION_eeeprom0_SIZE (CYGHWR_HAL_KINETIS_EEE0_SIZE) +# define CYGMEM_REGION_eeeprom0_ATTR (CYGMEM_REGION_ATTR_R) +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 +# define CYGMEM_REGION_eeeprom1 (0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE ) +# define CYGMEM_REGION_eeeprom1_SIZE (CYGHWR_HAL_KINETIS_EEE1_SIZE) +# define CYGMEM_REGION_eeeprom1_ATTR (CYGMEM_REGION_ATTR_R) +# endif +#else +# define CYGMEM_REGION_flexram (0x14000000) +# define CYGMEM_REGION_flexram_SIZE (CYGHWR_HAL_KINETIS_FLEXRAM_SIZE) +# define CYGMEM_REGION_flexram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_rom.ldi @@ -0,0 +1,65 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE + flexnvm : ORIGIN = 0x10000000, LENGTH = CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE +#endif +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_EEE + eeeprom0 : ORIGIN = 0x14000000, LENGTH = CYGHWR_HAL_KINETIS_EEE0_SIZE +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 + eeeprom1 : ORIGIN = 0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE, LENGTH = CYGHWR_HAL_KINETIS_EEE1_SIZE +# endif +#else + flexram : ORIGIN = 0x14000000, LENGTH = CYGHWR_HAL_KINETIS_FLEXRAM_SIZE +#endif +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(kinetis_misc, flash, ALIGN (0x8), LMA_EQ_VMA) + + // Kinetis FLASH configuration field. Must be present at 0x00000400 + // Warning: Omitting FLASH configuration field or moving it to + // other location may lock Kinetis controller. + // See src/kinetis_mis.c for definition + + .flash_conf 0x00000400 : { KEEP (*(.flash_conf)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) +#ifdef CYGHWR_HAL_KINETIS_FLEXNVM_DFLASH_SIZE + USER_SECTION(d_flash, flexnvm, 0x10000000 (NOLOAD), LMA_EQ_VMA) +#endif +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_EEE + USER_SECTION(e_eeprom0, eeeprom0, 0x14000000 (NOLOAD), LMA_EQ_VMA) +# if CYGHWR_HAL_KINETIS_EEE_SPLIT > 1 + USER_SECTION(e_eeprom1, eeeprom1, 0x14000000 + CYGHWR_HAL_KINETIS_EEE0_SIZE (NOLOAD), LMA_EQ_VMA) +# endif +#else + USER_SECTION(flex_ram, flexram, 0x14000000 (NOLOAD), LMA_EQ_VMA) +#endif + SECTION_data (ram, 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE + 0x400, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.h b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.h @@ -0,0 +1,18 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#define CYGMEM_REGION_ram_SIZE (CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.ldi b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/pkgconf/mlt_kinetis_flexnvm_unisram_sram.ldi @@ -0,0 +1,34 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LENGTH = CYGHWR_HAL_KINETIS_SRAM_SIZE-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = CYGHWR_HAL_KINETIS_FLASH_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x20000400 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = (0x20000000 - CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE); +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE; diff --git a/packages/hal/cortexm/kinetis/var/current/include/plf_stub.h b/packages/hal/cortexm/kinetis/var/current/include/plf_stub.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/plf_stub.h @@ -0,0 +1,88 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008, +// 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:jskov, gthomas, jlarmour +// Date: 2008-07-30 +// Purpose: Platform HAL stub support for Kinetis variant boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +#include + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +__externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. + +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_arch.h b/packages/hal/cortexm/kinetis/var/current/include/var_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_arch.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H +//============================================================================= +// +// var_arch.h +// +// Kinetis variant architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, ilijak +// Date: 2011-02-05 +// Purpose: Kinetis variant architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#include + + +//----------------------------------------------------------------------------- +// end of var_arch.h +#endif // CYGONCE_HAL_VAR_ARCH_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_intr.h b/packages/hal/cortexm/kinetis/var/current/include/var_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_intr.h @@ -0,0 +1,244 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H +//========================================================================== +// +// var_intr.h +// +// HAL Interrupt and clock assignments for Kinetis variants +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-02-05 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for Freescale Kinetis variants are +// defined here. +// +// Usage: #include +// However applications should include using +// instead to allow for platform overrides. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//========================================================================== + +typedef enum { + CYGNUM_HAL_INTERRUPT_DMA0 + = CYGNUM_HAL_INTERRUPT_EXTERNAL, // DMA Channel 0 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA1, // DMA Channel 1 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA2, // DMA Channel 2 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA3, // DMA Channel 3 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA4, // DMA Channel 4 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA5, // DMA Channel 5 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA6, // DMA Channel 6 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA7, // DMA Channel 7 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA8, // DMA Channel 8 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA9, // DMA Channel 9 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA10, // DMA Channel 10 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA11, // DMA Channel 11 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA12, // DMA Channel 12 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA13, // DMA Channel 13 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA14, // DMA Channel 14 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA15, // DMA Channel 15 Transfer Complete + CYGNUM_HAL_INTERRUPT_DMA_ERROR, // DMA Error Int + CYGNUM_HAL_INTERRUPT_MCM, // Normal Int + CYGNUM_HAL_INTERRUPT_FTFL, // FTFL Int + CYGNUM_HAL_INTERRUPT_READ_COLLISION, // Read Collision Int + CYGNUM_HAL_INTERRUPT_LVD_LVW, // Low Volt Detect, Low Volt Warn + CYGNUM_HAL_INTERRUPT_LLW, // Low Leakage Wakeup + CYGNUM_HAL_INTERRUPT_WDOG, // WDOG Int + CYGNUM_HAL_INTERRUPT_RNGB, // RNGB Int + CYGNUM_HAL_INTERRUPT_I2C0, // I2C0 int + CYGNUM_HAL_INTERRUPT_I2C1, // I2C1 int + CYGNUM_HAL_INTERRUPT_SPI0, // SPI0 Int + CYGNUM_HAL_INTERRUPT_SPI1, // SPI1 Int + CYGNUM_HAL_INTERRUPT_SPI2, // SPI2 Int + CYGNUM_HAL_INTERRUPT_CAN0_ORED_MESSAGE_BUFFER,// CAN0 OR'd Msg Buffs Int + CYGNUM_HAL_INTERRUPT_CAN0_BUS_OFF, // CAN0 Bus Off Int + CYGNUM_HAL_INTERRUPT_CAN0_ERROR, // CAN0 Error Int + CYGNUM_HAL_INTERRUPT_CAN0_TX_WARNING, // CAN0 Tx Warning Int + CYGNUM_HAL_INTERRUPT_CAN0_RX_WARNING, // CAN0 Rx Warning Int + CYGNUM_HAL_INTERRUPT_CAN0_WAKE_UP, // CAN0 Wake Up Int + CYGNUM_HAL_INTERRUPT_CAN0_IMEU, // CAN0 Ind. Match El Update (IMEU) Int + CYGNUM_HAL_INTERRUPT_CAN0_LOST_RX, // CAN0 Lost Receive Int + CYGNUM_HAL_INTERRUPT_CAN1_ORED_MESSAGE_BUFFER, // CAN1 OR'd Msg Buffs Int + CYGNUM_HAL_INTERRUPT_CAN1_BUS_OFF, // CAN1 Bus Off Int + CYGNUM_HAL_INTERRUPT_CAN1_ERROR, // CAN1 Error Int + CYGNUM_HAL_INTERRUPT_CAN1_TX_WARNING, // CAN1 Tx Warning Int + CYGNUM_HAL_INTERRUPT_CAN1_RX_WARNING, // CAN1 Rx Warning Int + CYGNUM_HAL_INTERRUPT_CAN1_WAKE_UP, // CAN1 Wake Up Int + CYGNUM_HAL_INTERRUPT_CAN1_IMEU, // CAN1 Ind. Match El Update (IMEU) Int + CYGNUM_HAL_INTERRUPT_CAN1_LOST_RX, // CAN1 Lost Receive Int + CYGNUM_HAL_INTERRUPT_UART0_RX_TX, // UART0 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART0_ERR, // UART0 Error int + CYGNUM_HAL_INTERRUPT_UART1_RX_TX, // UART1 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART1_ERR, // UART1 Error int + CYGNUM_HAL_INTERRUPT_UART2_RX_TX, // UART2 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART2_ERR, // UART2 Error int + CYGNUM_HAL_INTERRUPT_UART3_RX_TX, // UART3 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART3_ERR, // UART3 Error int + CYGNUM_HAL_INTERRUPT_UART4_RX_TX, // UART4 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART4_ERR, // UART4 Error int + CYGNUM_HAL_INTERRUPT_UART5_RX_TX, // UART5 Receive/Transmit int + CYGNUM_HAL_INTERRUPT_UART5_ERR, // UART5 Error int + CYGNUM_HAL_INTERRUPT_ADC0, // ADC0 int + CYGNUM_HAL_INTERRUPT_ADC1, // ADC1 int + CYGNUM_HAL_INTERRUPT_CMP0, // CMP0 int + CYGNUM_HAL_INTERRUPT_CMP1, // CMP1 int + CYGNUM_HAL_INTERRUPT_CMP2, // CMP2 int + CYGNUM_HAL_INTERRUPT_FTM0, // FTM0 fault, overflow and channels int + CYGNUM_HAL_INTERRUPT_FTM1, // FTM1 fault, overflow and channels int + CYGNUM_HAL_INTERRUPT_FTM2, // FTM2 fault, overflow and channels int + CYGNUM_HAL_INTERRUPT_CMT, // CMT int + CYGNUM_HAL_INTERRUPT_RTC_RTC, // RTC int + CYGNUM_HAL_INTERRUPT_RTC_SECONDS, // RTC seconds interrupt + CYGNUM_HAL_INTERRUPT_PIT0, // PIT timer channel 0 int + CYGNUM_HAL_INTERRUPT_PIT1, // PIT timer channel 1 int + CYGNUM_HAL_INTERRUPT_PIT2, // PIT timer channel 2 int + CYGNUM_HAL_INTERRUPT_PIT3, // PIT timer channel 3 int + CYGNUM_HAL_INTERRUPT_PDB0, // PDB0 Int + CYGNUM_HAL_INTERRUPT_USB0, // USB0 int + CYGNUM_HAL_INTERRUPT_USBDCD, // USBDCD Int + CYGNUM_HAL_INTERRUPT_ENET_1588_TIMER, // ENET MAC IEEE 1588 Timer Int + CYGNUM_HAL_INTERRUPT_ENET_TRANSMIT, // ENET MAC Transmit Int + CYGNUM_HAL_INTERRUPT_ENET_RECEIVE, // ENET MAC Receive Int + CYGNUM_HAL_INTERRUPT_ENET_ERROR, // ENET MAC Error and miscelaneous Int + CYGNUM_HAL_INTERRUPT_I2S0, // I2S0 Int + CYGNUM_HAL_INTERRUPT_SDHC, // SDHC Int + CYGNUM_HAL_INTERRUPT_DAC0, // DAC0 int + CYGNUM_HAL_INTERRUPT_DAC1, // DAC1 int + CYGNUM_HAL_INTERRUPT_TSI0, // TSI0 Int + CYGNUM_HAL_INTERRUPT_MCG, // MCG Int + CYGNUM_HAL_INTERRUPT_LPTIMER, // LPTimer int + CYGNUM_HAL_INTERRUPT_LCD, // Segment LCD int + CYGNUM_HAL_INTERRUPT_PORTA, // Port A int + CYGNUM_HAL_INTERRUPT_PORTB, // Port B int + CYGNUM_HAL_INTERRUPT_PORTC, // Port C int + CYGNUM_HAL_INTERRUPT_PORTD, // Port D int + CYGNUM_HAL_INTERRUPT_PORTE, // Port E int + CYGNUM_HAL_INTERRUPT_PORTF, // Port F interrupt + CYGNUM_HAL_INTERRUPT_DDR, // DDR interrupt + CYGNUM_HAL_INTERRUPT_SWI, // Software interrupt + CYGNUM_HAL_INTERRUPT_NFC, // NAND flash controller interrupt + CYGNUM_HAL_INTERRUPT_USBHS, // USB high speed OTG interrupt + CYGNUM_HAL_INTERRUPT_GLCD, // Graphical LCD interrupt + CYGNUM_HAL_INTERRUPT_CMP3, // CMP3 interrupt + CYGNUM_HAL_INTERRUPT_TAMPER, // Tamper detect interrupt + CYGNUM_HAL_INTERRUPT_Reserved116, // Reserved interrupt 116 + CYGNUM_HAL_INTERRUPT_FTM3, // FTM3 fault, overflow and channels interrupt + CYGNUM_HAL_INTERRUPT_ADC2, // ADC2 interrupt + CYGNUM_HAL_INTERRUPT_ADC3, // ADC3 interrupt + CYGNUM_HAL_INTERRUPT_I2S1_TX, // I2S1 transmit interrupt + CYGNUM_HAL_INTERRUPT_I2S1_RX // I2S1 receive interrupt +} KinetisExtInterrupt_e; + +// DMA16..31 share interrupt vectors with DMA0..15 respectively. + +#define CYGNUM_HAL_INTERRUPT_DMA16 CYGNUM_HAL_INTERRUPT_DMA0 +#define CYGNUM_HAL_INTERRUPT_DMA17 CYGNUM_HAL_INTERRUPT_DMA1 +#define CYGNUM_HAL_INTERRUPT_DMA18 CYGNUM_HAL_INTERRUPT_DMA2 +#define CYGNUM_HAL_INTERRUPT_DMA19 CYGNUM_HAL_INTERRUPT_DMA3 +#define CYGNUM_HAL_INTERRUPT_DMA20 CYGNUM_HAL_INTERRUPT_DMA4 +#define CYGNUM_HAL_INTERRUPT_DMA21 CYGNUM_HAL_INTERRUPT_DMA5 +#define CYGNUM_HAL_INTERRUPT_DMA22 CYGNUM_HAL_INTERRUPT_DMA6 +#define CYGNUM_HAL_INTERRUPT_DMA23 CYGNUM_HAL_INTERRUPT_DMA7 +#define CYGNUM_HAL_INTERRUPT_DMA34 CYGNUM_HAL_INTERRUPT_DMA8 +#define CYGNUM_HAL_INTERRUPT_DMA25 CYGNUM_HAL_INTERRUPT_DMA9 +#define CYGNUM_HAL_INTERRUPT_DMA26 CYGNUM_HAL_INTERRUPT_DMA10 +#define CYGNUM_HAL_INTERRUPT_DMA27 CYGNUM_HAL_INTERRUPT_DMA11 +#define CYGNUM_HAL_INTERRUPT_DMA28 CYGNUM_HAL_INTERRUPT_DMA12 +#define CYGNUM_HAL_INTERRUPT_DMA29 CYGNUM_HAL_INTERRUPT_DMA13 +#define CYGNUM_HAL_INTERRUPT_DMA30 CYGNUM_HAL_INTERRUPT_DMA14 +#define CYGNUM_HAL_INTERRUPT_DMA31 CYGNUM_HAL_INTERRUPT_DMA15 + +#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_I2S1_RX) + +#define CYGNUM_HAL_ISR_MIN 0 +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_I2S1_RX +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +#define CYGNUM_HAL_VSR_MIN 0 +#ifndef CYGNUM_HAL_VSR_MAX +# define CYGNUM_HAL_VSR_MAX (CYGNUM_HAL_VECTOR_SYS_TICK+ \ + CYGNUM_HAL_INTERRUPT_NVIC_MAX) +#endif + +#define CYGNUM_HAL_VSR_COUNT (CYGNUM_HAL_VSR_MAX+1) + +//========================================================================== +// Interrupt mask and config for variant-specific devices + +// PORT Pin interrupts + +#define CYGHWR_HAL_KINETIS_PIN_IRQ_VECTOR(__pin) \ + (CYGNUM_HAL_INTERRUPT_PORTA + CYGHWR_HAL_KINETIS_PIN_PORT(__pin)) + +//=========================================================================== +// Interrupt resources exported by HAL to device drivers + +// Export Interrupt vectors to serial driver. + +#define CYGNUM_IO_SERIAL_FREESCALE_UART0_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART0_RX_TX +#define CYGNUM_IO_SERIAL_FREESCALE_UART1_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART1_RX_TX +#define CYGNUM_IO_SERIAL_FREESCALE_UART2_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART2_RX_TX +#define CYGNUM_IO_SERIAL_FREESCALE_UART3_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART3_RX_TX +#define CYGNUM_IO_SERIAL_FREESCALE_UART4_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART4_RX_TX +#define CYGNUM_IO_SERIAL_FREESCALE_UART5_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_UART5_RX_TX + +// Export Interrupt vectors to ENET driver. + +#define CYGNUM_FREESCALE_ENET0_1588_TIMER_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_ENET_1588_TIMER +#define CYGNUM_FREESCALE_ENET0_TRANSMIT_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_ENET_TRANSMIT +#define CYGNUM_FREESCALE_ENET0_RECEIVE_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_ENET_RECEIVE +#define CYGNUM_FREESCALE_ENET0_ERROR_INT_VECTOR \ + CYGNUM_HAL_INTERRUPT_ENET_ERROR + +//---------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_INTR_H +// EOF var_intr.h diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io.h b/packages/hal/cortexm/kinetis/var/current/include/var_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io.h @@ -0,0 +1,1206 @@ +#ifndef CYGONCE_HAL_VAR_IO_H +#define CYGONCE_HAL_VAR_IO_H +//=========================================================================== +// +// var_io.h +// +// Variant specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-02-05 +// Purpose: Kinetis variant specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +#include + +//=========================================================================== +// Cortex-M architecture +//--------------------------------------------------------------------------- +//-------------------------------------------------------------------------- +// Cortex-M architecture overrides +//--------------------------------------------------------------------------- +// VTOR - Vector Table Offset Register +#ifndef CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM +#define CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM (BIT_(29) - \ + CYGHWR_HAL_KINETIS_SRAM_BANK_SIZE) +#endif + +//============================================================================= +// Kinetis system configuration +//--------------------------------------------------------------------------- +// Utilize Freescale Kinetis flash between startup vectors and 0x400 +// for misc funtions. +#ifdef CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION +# define CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR \ + CYGBLD_ATTRIB_SECTION(".kinetis_misc") +#else +# define CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +#endif + +//=========================================================================== +// KINETIS FLASH configuration field +//=========================================================================== + +// Note: KINETIS FLASH configuration field must be present in Kinetis flash +// image and ocupy addresses 0x00000400 to 0x0000040f. + +typedef struct cyghwr_hal_kinetis_flash_conf_s { + cyg_uint8 backdoor_key[8]; // 0x400 .. 0x407 + cyg_uint8 fprot[4]; // 0x408 .. 0x40b + cyg_uint8 fsec; // 0x40c + cyg_uint8 fopt; // 0x40d + cyg_uint8 feprot; // 0x40e + cyg_uint8 fdprot; // 0x40f +} cyghwr_hal_kinetis_flash_conf_t; + +__externC const cyghwr_hal_kinetis_flash_conf_t *hal_kinetis_flash_conf_p( void ); + +//=========================================================================== +// Kinetis Peripherals +//--------------------------------------------------------------------------- +// Internal Flash + +typedef volatile struct cyghwr_hal_kinetis_flash_s { + cyg_uint8 fstat; // Flash status register + cyg_uint8 fcnfg; // Flash configuration register + cyg_uint8 fsec; // Flash security register + cyg_uint8 fopt; // Flash option register + cyg_uint8 fccob3; // Flash common command object registers + cyg_uint8 fccob2; + cyg_uint8 fccob1; + cyg_uint8 fccob0; + cyg_uint8 fccob7; + cyg_uint8 fccob6; + cyg_uint8 fccob5; + cyg_uint8 fccob4; + cyg_uint8 fccobB; + cyg_uint8 fccobA; + cyg_uint8 fccob9; + cyg_uint8 fccob8; + cyg_uint8 fprot3; // Program flash protection registers + cyg_uint8 fprot2; + cyg_uint8 fprot1; + cyg_uint8 fprot0; + cyg_uint8 reserved[2]; + cyg_uint8 feprot; // EEPROM Protection register + cyg_uint8 fdprot; // Data flash protection register +} cyghwr_hal_kinetis_flash_t; + +#define CYGHWR_HAL_KINETIS_FLASH_P ((cyghwr_hal_kinetis_flash_t *) 0x40020000) + +#define CYGHWR_HAL_KINETIS_FLASH_FSTAT_CCIF_M 0x80 +#define CYGHWR_HAL_KINETIS_FLASH_FSTAT_RDCOLERR_M 0x40 +#define CYGHWR_HAL_KINETIS_FLASH_FSTAT_ACCERR_M 0x20 +#define CYGHWR_HAL_KINETIS_FLASH_FSTAT_FPVIOL_M 0x10 +#define CYGHWR_HAL_KINETIS_FLASH_FSTAT_MGSTAT0_M 0x01 + +//--------------------------------------------------------------------------- +// Oscillator + +#define CYGHWR_HAL_KINETIS_OSC_CR (0x40065000) +#define CYGHWR_HAL_KINETIS_OSC_CR_P ((volatile cyg_uint8*) 0x40065000) + +#define CYGHWR_HAL_KINETIS_OSC1_CR (0x400E5000) +#define CYGHWR_HAL_KINETIS_OSC1_CR_P ((volatile cyg_uint8*) 0x400E5000) + +#define CYGHWR_HAL_KINETIS_OSC_CR_SC16P_M 0x01 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC16P_S 0 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC8P_M 0x02 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC8P_S 1 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC4P_M 0x04 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC4P_S 2 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC2P_M 0x08 +#define CYGHWR_HAL_KINETIS_OSC_CR_SC2P_S 3 +#define CYGHWR_HAL_KINETIS_OSC_CR_EREFSTEN_M 0x20 +#define CYGHWR_HAL_KINETIS_OSC_CR_EREFSTEN_S 5 +#define CYGHWR_HAL_KINETIS_OSC_CR_ERCLKEN_M 0x80 +#define CYGHWR_HAL_KINETIS_OSC_CR_ERCLKEN_S 7 + +//--------------------------------------------------------------------------- +// MCG + +typedef volatile struct cyghwr_hal_kinetis_mcg_s { + cyg_uint8 c1; // MCG Control 1 Register + cyg_uint8 c2; // MCG Control 2 Register + cyg_uint8 c3; // MCG Control 3 Register + cyg_uint8 c4; // MCG Control 4 Register + cyg_uint8 c5; // MCG Control 5 Register + cyg_uint8 c6; // MCG Control 6 Register + cyg_uint8 status; // MCG Status Register + cyg_uint8 mcg_res0; +#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1 + cyg_uint8 atc; // MCG Auto Trim Control Register +#elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 + cyg_uint8 sc; // MCG Status and Control Register +#endif + cyg_uint8 mcg_res1; + cyg_uint8 atcvh; // MCG Auto Trim Compare Value High Register + cyg_uint8 atcvl; // MCG Auto Trim Compare Value Low Register +#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 + cyg_uint8 c7; // MCG Control 7 Register + cyg_uint8 c8; // MCG Control 8 Register +#endif +#if CYGINT_HAL_CORTEXM_KINETIS_150 + cyg_uint8 c10; // MCG Control 10 Register + cyg_uint8 mcg_res2; + cyg_uint8 c11; // MCG Control 11 Register + cyg_uint8 c12; // MCG Control 12 Register + cyg_uint8 s2; // MCG Status 2 Register +#endif //CYGINT_HAL_CORTEXM_KINETIS_150 +} cyghwr_hal_kinetis_mcg_t; + +#define CYGHWR_HAL_KINETIS_MCG_P ((cyghwr_hal_kinetis_mcg_t *)0x40064000) + +// C1 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C1_IREFSTEN_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_C1_IREFSTEN_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C1_IRCLKEN_M 0x02 +#define CYGHWR_HAL_KINETIS_MCG_C1_IRCLKEN_S 1 +#define CYGHWR_HAL_KINETIS_MCG_C1_IREFS_M 0x4 +#define CYGHWR_HAL_KINETIS_MCG_C1_IREFS_S 2 +#define CYGHWR_HAL_KINETIS_MCG_C1_FRDIV_M 0x38 +#define CYGHWR_HAL_KINETIS_MCG_C1_FRDIV_S 3 +#define CYGHWR_HAL_KINETIS_MCG_C1_FRDIV(_div_) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C1_FRDIV_S, _div_) +#define CYGHWR_HAL_KINETIS_MCG_C1_CLKS_M 0xC0 +#define CYGHWR_HAL_KINETIS_MCG_C1_CLKS_S 6 +#define CYGHWR_HAL_KINETIS_MCG_C1_CLKS(_clks_) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C1_CLKS_S, _clks_) +enum { + CYGHWR_HAL_KINETIS_MCG_C1_CLKS_FLL_PLL, + CYGHWR_HAL_KINETIS_MCG_C1_CLKS_INT_REF, + CYGHWR_HAL_KINETIS_MCG_C1_CLKS_EXT_REF, + CYGHWR_HAL_KINETIS_MCG_C1_CLKS_RESERVED +}; +// C2 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C2_IRCS_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_C2_IRCS_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C2_LP_M 0x02 +#define CYGHWR_HAL_KINETIS_MCG_C2_LP_S 1 +#define CYGHWR_HAL_KINETIS_MCG_C2_EREFS_M 0x04 +#define CYGHWR_HAL_KINETIS_MCG_C2_EREFS_S 2 +#define CYGHWR_HAL_KINETIS_MCG_C2_HGO_M 0x08 +#define CYGHWR_HAL_KINETIS_MCG_C2_HGO_S 3 +#define CYGHWR_HAL_KINETIS_MCG_C2_RANGE_M 0x30 +#define CYGHWR_HAL_KINETIS_MCG_C2_RANGE_S 4 +#define CYGHWR_HAL_KINETIS_MCG_C2_RANGE(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C2_RANGE_S, __v) + +#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 +#define CYGHWR_HAL_KINETIS_MCG_C2_LOCRE0_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C2_LOCRE0_S 7 +#endif +// C3 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM_M 0xFF +#define CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM_S, __v) +// C4 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C4_SCFTRIM_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_C4_SCFTRIM_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C4_FCTRIM_M 0x1E +#define CYGHWR_HAL_KINETIS_MCG_C4_FCTRIM_S 1 +#define CYGHWR_HAL_KINETIS_MCG_C4_FCTRIM(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C4_FCTRIM_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C4_DRST_DRS_M 0x60 +#define CYGHWR_HAL_KINETIS_MCG_C4_DRST_DRS_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C4_DRST_DRS(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C4_DRST_DRS_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C4_DMX32_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C4_DMX32_S 7 +// C5 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_M 0x1F +#define CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C5_PRDIV(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_S 6 +#if CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 +# define CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_M 0x80 +# define CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_S 7 +#endif +// C6 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M 0x1F +#define CYGHWR_HAL_KINETIS_MCG_C6_VDIV_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C6_VDIV(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C6_VDIV_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C6_CME_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_C6_CME_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C6_PLLS_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_C6_PLLS_S 6 +#define CYGHWR_HAL_KINETIS_MCG_C6_LOLIE_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C6_LOLIE_S 7 +// S Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_S_IRCST_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_S_IRCST_S 0 +#define CYGHWR_HAL_KINETIS_MCG_S_OSCINIT_M 0x02 +#define CYGHWR_HAL_KINETIS_MCG_S_OSCINIT_S 1 +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_M 0x0C +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_S 2 +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_S_CLKST_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_FLL CYGHWR_HAL_KINETIS_MCG_S_CLKST(0) +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_INT CYGHWR_HAL_KINETIS_MCG_S_CLKST(1) +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_EXT CYGHWR_HAL_KINETIS_MCG_S_CLKST(2) +#define CYGHWR_HAL_KINETIS_MCG_S_CLKST_PLL CYGHWR_HAL_KINETIS_MCG_S_CLKST(3) +#define CYGHWR_HAL_KINETIS_MCG_S_IREFST_M 0x10 +#define CYGHWR_HAL_KINETIS_MCG_S_IREFST_S 4 +#define CYGHWR_HAL_KINETIS_MCG_S_PLLST_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_S_PLLST_S 5 +#define CYGHWR_HAL_KINETIS_MCG_S_LOCK_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_S_LOCK_S 6 +#define CYGHWR_HAL_KINETIS_MCG_S_LOLS_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_S_LOLS_S 7 + +#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1 +// ATC Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATMF_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATMF_S 5 +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATMS_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATMS_S 6 +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATME_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_ATC_ATME_S 7 +#elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 +// SC Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_SC_LOCS0_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_SC_LOCS0_S 0 +#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_M 0x0E +#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_S 1 +#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_SC_FLTPRSRV_M 0x10 +#define CYGHWR_HAL_KINETIS_MCG_SC_FLTPRSRV_S 4 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATMF_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATMF_S 5 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATMS_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATMS_S 6 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATME_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_SC_ATME_S 7 +#endif // CYGHWR_HAL_CORTEXM_KINETIS_REV +// ATCVH Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH_M 0xFF +#define CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH_S 0 +#define CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH_S, __v) +// ATCVL Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_M 0xFF +#define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_S 0 +#define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL(__v) \ +VALUE_(CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_S, __v) + +#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 +// C7 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_M 0x1 +#define CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_S 0 +// C8 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C8_LOCS1_M 0x1 +#define CYGHWR_HAL_KINETIS_MCG_C8_LOCS1_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C8_CME1_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_C8_CME1_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C8_LOLRE_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_C8_LOLRE_S 6 +#define CYGHWR_HAL_KINETIS_MCG_C8_LOCRE1_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C8_LOCRE1_S 7 +#endif // CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 + +#if CYGINT_HAL_CORTEXM_KINETIS_150 + +// C10 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C10_EREFS1_M 0x04 +#define CYGHWR_HAL_KINETIS_MCG_C10_EREFS1_S 2 +#define CYGHWR_HAL_KINETIS_MCG_C10_HGO1_M 0x08 +#define CYGHWR_HAL_KINETIS_MCG_C10_HGO1_S 3 +#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_M 0x30 +#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_S 4 +#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C10_LOCRE0_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C10_LOCRE0_S 7 +// C11 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_M 0x7 +#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M 0x10 +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_S 4 +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_S 6 +# define CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_M 0x80 +# define CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_S 7 +// C12 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_M 0x1F +#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_S 0 +#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1(__v) \ + VALUE_(CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_S, __v) +#define CYGHWR_HAL_KINETIS_MCG_C12_CME2_M 0x20 +#define CYGHWR_HAL_KINETIS_MCG_C12_CME2_S 5 +#define CYGHWR_HAL_KINETIS_MCG_C12_LOLIE1_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_C12_LOLIE1_S 7 +// S2 Bit Fields +#define CYGHWR_HAL_KINETIS_MCG_S2_LOCS2_M 0x01 +#define CYGHWR_HAL_KINETIS_MCG_S2_LOCS2_S 0 +#define CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_M 0x02 +#define CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_S 1 +#define CYGHWR_HAL_KINETIS_MCG_S2_PLLCST_M 0x10 +#define CYGHWR_HAL_KINETIS_MCG_S2_PLLCST_S 4 +#define CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M 0x40 +#define CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_S 6 +#define CYGHWR_HAL_KINETIS_MCG_S2_LOLS1_M 0x80 +#define CYGHWR_HAL_KINETIS_MCG_S2_LOLS1_S 7 + +#endif //CYGINT_HAL_CORTEXM_KINETIS_150 + + +//--------------------------------------------------------------------------- +// Real Time Clock + +typedef volatile struct cyghwr_hal_kinetis_rtc_s { + cyg_uint32 tsr; // Time Seconds Register + cyg_uint32 tpr; // Time Prescaler Register + cyg_uint32 tar; // Time Alarm Register + cyg_uint32 tcr; // Time Compensation Register + cyg_uint32 cr; // Control Register + cyg_uint32 sr; // Status Register + cyg_uint32 lr; // Lock Register + cyg_uint32 ier; // Enterrupt Enable Register + cyg_uint32 ttsr; // Tamper Times Seconds Register + cyg_uint32 mer; // Monotonic Enable Register + cyg_uint32 mclr; // Monotonic Counter Low Register + cyg_uint32 mchr; // Monotonic Counter High Register + cyg_uint32 ter; // Tamper Enable Register + cyg_uint32 tdr; // Tamper Detect Register + cyg_uint32 ttr; // Tamper Trim Register + cyg_uint32 tir; // Tamper Interrupt Register + cyg_uint8 reserved[1984]; + cyg_uint32 war; // Write Access Register + cyg_uint32 rar; // Read Access Register +} cyghwr_hal_kinetis_rtc_t; + +#define CYGHWR_HAL_KINETIS_RTC_P ((cyghwr_hal_kinetis_rtc_t *)0x4003D000) + +#define CYGHWR_HAL_KINETIS_RTC_TCR_TCR_M (0x000000FF) +#define CYGHWR_HAL_KINETIS_RTC_TCR_CIR_S 8 +#define CYGHWR_HAL_KINETIS_RTC_TCR_CIR(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_RTC_TCR_CIR_S, _div_) +#define CYGHWR_HAL_KINETIS_RTC_TCR_CIC_S 16 +#define CYGHWR_HAL_KINETIS_RTC_TCR_TCV_S 24 + +#define CYGHWR_HAL_KINETIS_RTC_CR_SWR BIT_(0) +#define CYGHWR_HAL_KINETIS_RTC_CR_WPE BIT_(1) +#define CYGHWR_HAL_KINETIS_RTC_CR_SUP BIT_(2) +#define CYGHWR_HAL_KINETIS_RTC_CR_UM BIT_(3) +#define CYGHWR_HAL_KINETIS_RTC_CR_OSCE BIT_(8) +#define CYGHWR_HAL_KINETIS_RTC_CR_CLKO BIT_(9) +#define CYGHWR_HAL_KINETIS_RTC_CR_SCP \ + VALUE_(10, (CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP/2)) + +#define CYGHWR_HAL_KINETIS_RTC_SR_TCE BIT_(4) +#define CYGHWR_HAL_KINETIS_RTC_SR_TAF BIT_(2) +#define CYGHWR_HAL_KINETIS_RTC_SR_TOF BIT_(1) +#define CYGHWR_HAL_KINETIS_RTC_SR_TIF BIT_(0) + +//--------------------------------------------------------------------------- +// Watch dog + +// WDOG - Peripheral register structure +typedef volatile struct CygHwr_HAL_Kinetis_wdog_s { + cyg_uint16 StCtrlH; // Status and Control Register High + cyg_uint16 StCtrlL; // Status and Control Register Low + cyg_uint16 ToValH; // Time-out Value Register High + cyg_uint16 ToValL; // Time-out Value Register Low + cyg_uint16 WinH; // Window Register High + cyg_uint16 WinL; // Window Register Low + cyg_uint16 Refresh; // Refresh Register + cyg_uint16 Unlock; // Unlock Register + cyg_uint16 TmrOutH; // Timer Output Register High + cyg_uint16 TmrOutL; // Timer Output Register Low + cyg_uint16 RstCnt; // Reset Count Register + cyg_uint16 Presc; // Prescaler Register +} CygHwr_HAL_Kinetis_wdog_t; + +#define CYGHWR_HAL_KINETIS_WDOG_P ((CygHwr_HAL_Kinetis_wdog_t *)0x40052000) + +// STCTRLH Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WDOGEN_M 0x0001 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WDOGEN_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_CLKSRC_M 0x0002 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_CLKSRC_S 1 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_IRQRSTEN_M 0x0004 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_IRQRSTEN_S 2 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WINEN_M 0x0008 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WINEN_S 3 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_ALLOWUPDATE_M 0x0010 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_ALLOWUPDATE_S 4 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_DBGEN_M 0x0020 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_DBGEN_S 5 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_STOPEN_M 0x0040 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_STOPEN_S 6 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WAITEN_M 0x0080 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_WAITEN_S 7 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_STNDBYEN_M 0x0100 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_STNDBYEN_S 8 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_TESTWDOG_M 0x0400 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_TESTWDOG_S 10 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_TESTSEL_M 0x0800 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_TESTSEL_S 11 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_BYTESEL_M 0x3000 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_BYTESEL_S 12 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_BYTESEL(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_STCTRLH_BYTESEL_S, __v) +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_DISTESTWDOG_M 0x4000 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLH_DISTESTWDOG_S 14 +// STCTRLL Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLL_INTFLG_M 0x8000 +#define CYGHWR_HAL_KINETIS_WDOG_STCTRLL_INTFLG_S 15 +// TOVALH Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_TOVALH_TOVALHIGH_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_TOVALH_TOVALHIGH_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_TOVALH_TOVALHIGH(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_TOVALH_TOVALHIGH_S, __v) +// TOVALL Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_TOVALL_TOVALLOW_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_TOVALL_TOVALLOW_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_TOVALL_TOVALLOW(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_TOVALL_TOVALLOW_S, __v) +// WINH Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_WINH_WINHIGH_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_WINH_WINHIGH_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_WINH_WINHIGH(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_WINH_WINHIGH_S, __v) +// WINL Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_WINL_WINLOW_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_WINL_WINLOW_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_WINL_WINLOW(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_WINL_WINLOW_S, __v) +// REFRESH Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_REFRESH_WDOGREFRESH_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_REFRESH_WDOGREFRESH_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_REFRESH_WDOGREFRESH(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_REFRESH_WDOGREFRESH_S, __v) +// UNLOCK Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_UNLOCK_WDOGUNLOCK_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_UNLOCK_WDOGUNLOCK_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_UNLOCK_WDOGUNLOCK(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_UNLOCK_WDOGUNLOCK_S, __v) +// TMROUTH Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTH_TIMEROUTHIGH_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTH_TIMEROUTHIGH_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTH_TIMEROUTHIGH(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_TMROUTH_TIMEROUTHIGH_S, __v) +// TMROUTL Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTL_TIMEROUTLOW_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTL_TIMEROUTLOW_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_TMROUTL_TIMEROUTLOW(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_TMROUTL_TIMEROUTLOW_S, __v) +// RSTCNT Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_RSTCNT_RSTCNT_M 0xFFFF +#define CYGHWR_HAL_KINETIS_WDOG_RSTCNT_RSTCNT_S 0 +#define CYGHWR_HAL_KINETIS_WDOG_RSTCNT_RSTCNT(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_RSTCNT_RSTCNT_S, __v) +// PRESC Bit Fields +#define CYGHWR_HAL_KINETIS_WDOG_PRESC_PRESCVAL_M 0x700 +#define CYGHWR_HAL_KINETIS_WDOG_PRESC_PRESCVAL_S 8 +#define CYGHWR_HAL_KINETIS_WDOG_PRESC_PRESCVAL(__v) \ + VALUE(CYGHWR_HAL_KINETIS_WDOG_PRESC_PRESCVAL_S, __v) + +#ifndef __ASSEMBLER__ + +__externC void hal_wdog_unlock(volatile CygHwr_HAL_Kinetis_wdog_t *wdog_p); +__externC void hal_wdog_disable(void); + +#endif // __ASSEMBLER__ + +//--------------------------------------------------------------------------- +// SIM - System Integration Module + +// SIM - Peripheral register structure +typedef volatile struct cyghwr_hal_kinetis_sim_s { + cyg_uint32 sopt1; // System Options Register 1 + cyg_uint8 reserved_0[4096]; + cyg_uint32 sopt2; // System Options Register 2 + cyg_uint8 reserved_1[4]; + cyg_uint32 sopt4; // System Options Register 4 + cyg_uint32 sopt5; // System Options Register 5 + cyg_uint32 sopt6; // System Options Register 6 + cyg_uint32 sopt7; // System Options Register 7 + cyg_uint8 Reserved_2[8]; + cyg_uint32 sdid; // System Device Identification Register + cyg_uint32 scgc1; // System Clock Gating Control Register 1 + cyg_uint32 scgc2; // System Clock Gating Control Register 2 + cyg_uint32 scgc3; // System Clock Gating Control Register 3 + cyg_uint32 scgc4; // System Clock Gating Control Register 4 + cyg_uint32 scgc5; // System Clock Gating Control Register 5 + cyg_uint32 scgc6; // System Clock Gating Control Register 6 + cyg_uint32 scgc7; // System Clock Gating Control Register 7 + cyg_uint32 clk_div1; // System Clock Divider Register 1 + cyg_uint32 clk_div2; // System Clock Divider Register 2 + cyg_uint32 fcfg1; // Flash Configuration Register 1 + cyg_uint32 fcfg2; // Flash Configuration Register 2 + cyg_uint32 uidh; // Unique Identification Register High + cyg_uint32 uidmh; // Unique Identification Register Mid-High + cyg_uint32 uidml; // Unique Identification Register Mid Low + cyg_uint32 uidl; // Unique Identification Register Low + + cyg_uint32 clkdiv3; // System Clock Divider Register 3 + cyg_uint32 clkdiv4; // System Clock Divider Register 4 + cyg_uint32 mcr; // Misc control register +} cyghwr_hal_kinetis_sim_t; + +#define CYGHWR_HAL_KINETIS_SIM_P ((cyghwr_hal_kinetis_sim_t *) 0x40047000) + +// SOPT1 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_RAMSIZE_M 0xF000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_RAMSIZE_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_RAMSIZE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT1_RAMSIZE_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_OSC32KSEL_M 0x80000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_OSC32KSEL_S 19 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_MS_M 0x800000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_MS_S 23 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_USBSTBY_M 0x40000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_USBSTBY_S 30 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_USBREGEN_M 0x80000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT1_USBREGEN_S 31 +// SOPT2 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_MCGCLKSEL_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_MCGCLKSEL_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_FBSL_M 0x300 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_FBSL_S 8 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_FBSL(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT2_FBSL_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_CMTUARTPAD_M 0x800 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_CMTUARTPAD_S 11 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_TRACECLKSEL_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_TRACECLKSEL_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_PLLFLLSEL_M 0x10000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_PLLFLLSEL_S 16 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_USBSRC_M 0x40000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_USBSRC_S 18 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_TIMESRC_M 0x300000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_TIMESRC_S 20 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_TIMESRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT2_TIMESRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_I2SSRC_M 0x3000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_I2SSRC_S 24 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_I2SSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT2_I2SSRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_SDHCSRC_M 0x30000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_SDHCSRC_S 28 +#define CYGHWR_HAL_KINETIS_SIM_SOPT2_SDHCSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT2_SDHCSRC_S, __val) +// SOPT4 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT0_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT0_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT1_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT1_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT2_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0FLT2_S 2 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1FLT0_M 0x10 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1FLT0_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2FLT0_M 0x100 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2FLT0_S 8 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CH0SRC_M 0xC0000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CH0SRC_S 18 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CH0SRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CH0SRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CH0SRC_M 0x300000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CH0SRC_S 20 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CH0SRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CH0SRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0CLKSEL_M 0x1000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM0CLKSEL_S 24 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CLKSEL_M 0x2000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM1CLKSEL_S 25 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CLKSEL_M 0x4000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT4_FTM2CLKSEL_S 26 +// SOPT5 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0TXSRC_M 0x3 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0TXSRC_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0TXSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0TXSRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0RXSRC_M 0xC +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0RXSRC_S 2 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0RXSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT5_UART0RXSRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UARTTXSRC_M 0x30 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UARTTXSRC_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UARTTXSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT5_UARTTXSRC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART1RXSRC_M 0xC0 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART1RXSRC_S 6 +#define CYGHWR_HAL_KINETIS_SIM_SOPT5_UART1RXSRC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT5_UART1RXSRC_S, __val) +// SOPT6 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTSEL_M 0x1F000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTSEL_S 24 +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTSEL(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTSEL_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTEN_M 0xE0000000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTEN_S 29 +#define CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTEN(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT6_RSTFLTEN_S, __val) +// SOPT7 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0TRGSEL_M 0xF +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0TRGSEL_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0TRGSEL(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0TRGSEL_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0PRETRGSEL_M 0x10 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0PRETRGSEL_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0ALTTRGEN_M 0x80 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC0ALTTRGEN_S 7 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1TRGSEL_M 0xF00 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1TRGSEL_S 8 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1TRGSEL(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1TRGSEL_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1PRETRGSEL_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1PRETRGSEL_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1ALTTRGEN_M 0x8000 +#define CYGHWR_HAL_KINETIS_SIM_SOPT7_ADC1ALTTRGEN_S 15 +// SDID Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SDID_PINID_M 0xF +#define CYGHWR_HAL_KINETIS_SIM_SDID_PINID_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SDID_PINID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SDID_PINID_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SDID_FAMID_M 0x70 +#define CYGHWR_HAL_KINETIS_SIM_SDID_FAMID_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SDID_FAMID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SDID_FAMID_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_SDID_REVID_M 0xF000 +#define CYGHWR_HAL_KINETIS_SIM_SDID_REVID_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SDID_REVID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_SDID_REVID_S, __val) + +//--------------------------------------------------------------------------- +// Clock distribution +// The following encodes the control register and clock bit number +// into clock configuration descriptor (CLKCD). +#define CYGHWR_HAL_KINETIS_SIM_SCGC(__reg,__bit) ((((__reg) - 1 ) & 0xF) + \ + (((__bit) << 8) & 0x1F00)) + +// Macros to extract encoded values. +#define CYGHWR_HAL_KINETIS_SIM_SCGC_REG(__clkcd) (((__clkcd) & 0xF)) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_BIT(__clkcd) (((__clkcd) >> 8) & 0x1F) + +// Functions and macros to enable/disable clocks. +#define CYGHWR_HAL_SCGC_NONE (0xFFFFFFFF) +__externC void hal_clock_enable(cyg_uint32 clkcd); +__externC void hal_clock_disable(cyg_uint32 clkcd); + +#define CYGHWR_HAL_CLOCK_ENABLE(__clkcd) hal_clock_enable(__clkcd) +#define CYGHWR_HAL_CLOCK_DISABLE(__clkcd) hal_clock_disable(__clkcd) + +#include + +// CLKDIV1 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4_M 0xF0000 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4_S 16 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV3_M 0xF00000 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV3_S 20 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV3(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV3_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV2_M 0xF000000 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV2_S 24 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV2(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV2_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV1_M 0xF0000000 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV1_S 28 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV1(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV1_S, __val) +// CLKDIV2 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBFRAC_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBFRAC_S 0 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBDIV_M 0xE +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBDIV_S 1 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBDIV(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBDIV_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SFRAC_M 0xFF00 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SFRAC_S 8 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SFRAC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SFRAC_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SDIV_M 0xFFF00000 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SDIV_S 20 +#define CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SDIV(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_CLKDIV2_I2SDIV_S, __val) +// FCFG1 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_DEPART_M 0xF00 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_DEPART_S 8 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_DEPART(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_FCFG1_DEPART_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_EESIZE_M 0xF0000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_EESIZE_S 16 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_EESIZE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_FCFG1_EESIZE_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_FSIZE_M 0xFF000000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_FSIZE_S 24 +#define CYGHWR_HAL_KINETIS_SIM_FCFG1_FSIZE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_FCFG1_FSIZE_S, __val) +// FCFG2 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR1_M 0x3F0000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR1_S 16 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR1(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR1_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_PFLSH_M 0x800000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_PFLSH_S 23 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR0_M 0x3F000000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR0_S 24 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR0(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_FCFG2_MAXADDR0_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_SWAPPFLSH_M 0x80000000 +#define CYGHWR_HAL_KINETIS_SIM_FCFG2_SWAPPFLSH_S 31 +// UIDH Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_UIDH_UID_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_SIM_UIDH_UID_S 0 +#define CYGHWR_HAL_KINETIS_SIM_UIDH_UID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_UIDH_UID_S, __val) +// UIDMH Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_UIDMH_UID_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_SIM_UIDMH_UID_S 0 +#define CYGHWR_HAL_KINETIS_SIM_UIDMH_UID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_UIDMH_UID_S, __val) +// UIDML Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_UIDML_UID_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_SIM_UIDML_UID_S 0 +#define CYGHWR_HAL_KINETIS_SIM_UIDML_UID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_UIDML_UID_S, __val) +// UIDL Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_UIDL_UID_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_SIM_UIDL_UID_S 0 +#define CYGHWR_HAL_KINETIS_SIM_UIDL_UID(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_UIDL_UID_S, __val) +// MCR Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_M 0xE000 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_S 5 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_S, __val) +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_M 0x8 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_S 3 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_S 2 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_S 1 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_S 0 + + + +//-------------------------------------------------------------------------- +// AXBS - Crossbar switch + +#define CYGHWR_HAL_KINETIS_AXBS_SLAVES_K 7 +#define CYGHWR_HAL_KINETIS_AXBS_MASTERS_K 8 + +typedef volatile struct cyghwr_hal_kinetis_axbs_s { + volatile struct cyghwr_hal_kinetis_axbs_slave_s { + cyg_uint32 prs; + cyg_uint32 res0[3]; + cyg_uint32 crs; + cyg_uint32 res1[59]; + } slave[8]; + volatile struct cyghwr_hal_kinetis_axbs_master_s { + cyg_uint32 res0[64]; + cyg_uint32 mgprc; + } master[8]; +} cyghwr_hal_kinetis_axbs_t; + +#define CYGHWR_HAL_KINETIS_AXBS_P ((cyghwr_hal_kinetis_axbs_t *) 0x40004000) + +// PRS Fields +#define CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_S(_master_) ((_master_) * 4) +#define CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_M(_master_) \ + (0x7 << CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_S(_master_)) + +#define CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_PRIO(_master_,_prs) \ + (((_prs) & CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_M(_master_)) >> \ + CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_S(_master_)) +// CRS Fields +#define CYGHWR_HAL_KINETIS_AXBS_CRS_PARK_M 0x7 + +#define CYGHWR_HAL_KINETIS_AXBS_CRS_PCTL_M 0x30 +#define CYGHWR_HAL_KINETIS_AXBS_CRS_PCTL_S 4 +#define CYGHWR_HAL_KINETIS_AXBS_CRS_PCTL(_x_) (((_x_) << CYGHWR_HAL_KINETIS_AXBS_CRS_PCTL_S) & \ + CYGHWR_HAL_KINETIS_AXBS_CRS_PCTL_M) +#define CYGHWR_HAL_KINETIS_AXBS_CRS_ARB_M 0x300 +#define CYGHWR_HAL_KINETIS_AXBS_CRS_ARB_S 8 +#define CYGHWR_HAL_KINETIS_AXBS_CRS_ARB(_x_) (((_x_) << CYGHWR_HAL_KINETIS_AXBS_CRS_ARB_S) & \ + CYGHWR_HAL_KINETIS_AXBS_CRS_ARB_M) +#define CYGHWR_HAL_KINETIS_AXBS_CRS_HLP_M 0x40000000 +#define CYGHWR_HAL_KINETIS_AXBS_CRS_RO_M 0x80000000 + +#define CYGHWR_HAL_KINETIS_AXBS_CRS_SET_ARB(_slave_i,_arb) \ +CYG_MACRO_START \ + cyg_uint32 regval; \ + cyghwr_hal_kinetis_axbs_t* _axbs_p = CYGHWR_HAL_KINETIS_AXBS_P; \ + regval = _axbs_p->slave[_slave_i].crs; \ + regval &= ~CYGHWR_HAL_KINETIS_AXBS_CRS_ARB_M; \ + regval |= CYGHWR_HAL_KINETIS_AXBS_CRS_ARB(_arb); \ + _axbs_p->slave[_slave_i].crs = regval; \ +CYG_MACRO_END + +#define CYGHWR_HAL_KINETIS_AXBS_CRS_SET_ARB_RR(_slave_i) \ + CYGHWR_HAL_KINETIS_AXBS_CRS_SET_ARB((_slave_i), 1) + +#define CYGHWR_HAL_KINETIS_AXBS_CRS_SET_ARB_FIX(_slave_i) \ + CYGHWR_HAL_KINETIS_AXBS_CRS_SET_ARB((_slave_i), 0) + +// MGPCR Bit Fields +#define CYGHWR_HAL_KINETIS_AXBS_CRS_AXBS_MGPCR_AULB_M 0x7 + +//--------------------------------------------------------------------------- +// PORT - Peripheral register structure + +typedef volatile struct cyghwr_hal_kinetis_port_s { + cyg_uint32 pcr[32]; // Pin Control Register n, array + cyg_uint32 gpclr; // Global Pin Control Low Register + cyg_uint32 gpchr; // Global Pin Control High Register + cyg_uint8 reserved0[24]; + cyg_uint32 isfr; // Interrupt Status Flag Register + cyg_uint8 reserved1[28]; + cyg_uint32 dfer; // Digital Filter Enable Register + cyg_uint32 dfcr; // Digital Filter Clock Register + cyg_uint32 dfwr; // Digital Filter Width Register +} cyghwr_hal_kinetis_port_t; + +// PORT - Peripheral instance base addresses +#define CYGHWR_HAL_KINETIS_PORTA_P ((cyghwr_hal_kinetis_port_t *)0x40049000) +#define CYGHWR_HAL_KINETIS_PORTB_P ((cyghwr_hal_kinetis_port_t *)0x4004A000) +#define CYGHWR_HAL_KINETIS_PORTC_P ((cyghwr_hal_kinetis_port_t *)0x4004B000) +#define CYGHWR_HAL_KINETIS_PORTD_P ((cyghwr_hal_kinetis_port_t *)0x4004C000) +#define CYGHWR_HAL_KINETIS_PORTE_P ((cyghwr_hal_kinetis_port_t *)0x4004D000) +#define CYGHWR_HAL_KINETIS_PORTF_P ((cyghwr_hal_kinetis_port_t *)0x4004E000) + +enum { + CYGHWR_HAL_KINETIS_PORTA, CYGHWR_HAL_KINETIS_PORTB, + CYGHWR_HAL_KINETIS_PORTC, CYGHWR_HAL_KINETIS_PORTD, + CYGHWR_HAL_KINETIS_PORTE, CYGHWR_HAL_KINETIS_PORTF +}; + +#define CYGHWR_HAL_KINETIS_PORT(__port, __reg) \ + (CYGHWR_HAL_KINETIS_PORT##__port##_P)->__reg + +// PCR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_PCR_PS_M 0x1 +#define CYGHWR_HAL_KINETIS_PORT_PCR_PS_S 0 +#define CYGHWR_HAL_KINETIS_PORT_PCR_PE_M 0x2 +#define CYGHWR_HAL_KINETIS_PORT_PCR_PE_S 1 +#define CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M 0x4 +#define CYGHWR_HAL_KINETIS_PORT_PCR_SRE_S 2 +#define CYGHWR_HAL_KINETIS_PORT_PCR_PFE_M 0x10 +#define CYGHWR_HAL_KINETIS_PORT_PCR_PFE_S 4 +#define CYGHWR_HAL_KINETIS_PORT_PCR_ODE_M 0x20 +#define CYGHWR_HAL_KINETIS_PORT_PCR_ODE_S 5 +#define CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M 0x40 +#define CYGHWR_HAL_KINETIS_PORT_PCR_DSE_S 6 +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX_M 0x700 +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX_S 8 +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_PCR_MUX_S, __val) +#define CYGHWR_HAL_KINETIS_PORT_PCR_LK_M 0x8000 +#define CYGHWR_HAL_KINETIS_PORT_PCR_LK_S 15 +#define CYGHWR_HAL_KINETIS_PORT_PCR_IRQC_M 0xF0000 +#define CYGHWR_HAL_KINETIS_PORT_PCR_IRQC_S 16 +#define CYGHWR_HAL_KINETIS_PORT_PCR_IRQC(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_PCR_IRQC_S, __val) +#define CYGHWR_HAL_KINETIS_PORT_PCR_ISF_M 0x1000000 +#define CYGHWR_HAL_KINETIS_PORT_PCR_ISF_S 24 + +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX_ANALOG 0 +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX_DIS 0 +#define CYGHWR_HAL_KINETIS_PORT_PCR_MUX_GPIO 1 + +#define CYGHWR_HAL_KINETIS_PORT_PCR_ISFR_CLEAR(__port, __pin) \ + CYGHWR_HAL_KINETIS_PORT(__port, pcr[__pin]) |= BIT_(24) + +#define CYGHWR_HAL_KINETIS_PORT_ISFR_CLEAR(__port, __pin) \ + CYGHWR_HAL_KINETIS_PORT(__port, isfr) |= BIT_(__pin) + +#define CYGHWR_HAL_KINETIS_PIN_CFG(__port, __bit, __mux, __irqc, __cnf) \ + ((CYGHWR_HAL_KINETIS_PORT##__port << 20) | ((__bit) << 27) \ + | CYGHWR_HAL_KINETIS_PORT_PCR_IRQC(__irqc) \ + | CYGHWR_HAL_KINETIS_PORT_PCR_MUX(__mux) | (__cnf)) + +#define CYGHWR_HAL_KINETIS_PIN(__port, __bit, __mux, __cnf) \ + CYGHWR_HAL_KINETIS_PIN_CFG(__port, __bit, __mux, 0, __cnf) + +#define CYGHWR_HAL_KINETIS_PIN_PORT(__pin) (((__pin) >> 20) & 0x7) +#define CYGHWR_HAL_KINETIS_PIN_BIT(__pin) (((__pin) >> 27 ) & 0x1f) +#define CYGHWR_HAL_KINETIS_PIN_FUNC(__pin) ((__pin) & 0x010f8777) +#define CYGHWR_HAL_KINETIS_PIN_NONE (0xffffffff) + +// GPCLR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWD_M 0xFFFF +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWD_S 0 +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWD(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWD_S, __val) +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWE_M 0xFFFF0000 +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWE_S 16 +#define CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_GPCLR_GPWE_S, __val) +// GPCHR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWD_M 0xFFFF +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWD_S 0 +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWD(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWD_S, __val) +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWE_M 0xFFFF0000 +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWE_S 16 +#define CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_GPCHR_GPWE_S, __val) +// ISFR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_ISFR_ISF_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_PORT_ISFR_ISF_S 0 +#define CYGHWR_HAL_KINETIS_PORT_ISFR_ISF(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_ISFR_ISF_S, __val) +// DFER Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_DFER_DFE_M 0xFFFFFFFF +#define CYGHWR_HAL_KINETIS_PORT_DFER_DFE_S 0 +#define CYGHWR_HAL_KINETIS_PORT_DFER_DFE(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_DFER_DFE_S, __val) +// DFCR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_DFCR_CS_M 0x1 +#define CYGHWR_HAL_KINETIS_PORT_DFCR_CS_S 0 +// DFWR Bit Fields +#define CYGHWR_HAL_KINETIS_PORT_DFWR_FILT_M 0x1F +#define CYGHWR_HAL_KINETIS_PORT_DFWR_FILT_S 0 +#define CYGHWR_HAL_KINETIS_PORT_DFWR_FILT(__val) \ + VALUE_(CYGHWR_HAL_KINETIS_PORT_DFWR_FILT_S, __val) + +#ifndef __ASSEMBLER__ + +// Pin configuration related functions +__externC void hal_set_pin_function(cyg_uint32 pin); +__externC void hal_dump_pin_function(cyg_uint32 pin); +__externC void hal_dump_pin_setting(cyg_uint32 pin); + +#endif + +#define HAL_SET_PINS(_pin_array) \ +CYG_MACRO_START \ + const cyg_uint32 *_pin_p; \ + for(_pin_p = &_pin_array[0]; \ + _pin_p < &_pin_array[0] + sizeof(_pin_array)/sizeof(_pin_array[0]); \ + hal_set_pin_function(*_pin_p++)); \ +CYG_MACRO_END + +//--------------------------------------------------------------------------- +// PMC Power Management Controller + +typedef volatile struct cyghwr_hal_kinetis_pmc_s { + cyg_uint8 lvdsc1; // Low Voltage Detect Status and Control 1 Register + cyg_uint8 lvdsc2; // Low Voltage Detect Status and Control 2 Register + cyg_uint8 regsc; // Regulator Status and Control Register +} cyghwr_hal_kinetis_pmc_t; + +// PMC base address +#define CYGHWR_HAL_KINETIS_PMC_P ((cyghwr_hal_kinetis_pmc_t *)0x4007D000) + +// LVDSC1 Bit Fields +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV_M 0x3 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV(__val) \ + ((__val) & CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV_M) +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDRE_M 0x10 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDRE_S 4 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDIE_M 0x20 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDIE_S 5 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDACK_M 0x40 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDACK_S 6 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDF_M 0x80 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDF_S 7 +// LVDSC2 Bit Fields +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV_M 0x3 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV(__val) \ + ((__val) & CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV_M) +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWIE_M 0x20 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWIE_S 5 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWACK_M 0x40 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWACK_S 6 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWF_M 0x80 +#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWF_S 7 +// REGSC Bit Fields +#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGBE_M 0x1 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGBE_S 0 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_REGONS_M 0x4 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_REGONS_S 2 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M 0x8 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_S 3 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGEN_M 0x10 +#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGEN_S 4 + +//--------------------------------------------------------------------------- +// FMC Flash Memory Controller + +#define CYGHWR_HAL_KINETIS_FMC_BASE (0x4001F000) +#define CYGHWR_HAL_KINETIS_FMC_PFAPR (CYGHWR_HAL_KINETIS_FMC_BASE) +#define CYGHWR_HAL_KINETIS_FMC_PFB0CR (CYGHWR_HAL_KINETIS_FMC_BASE + 4) +#define CYGHWR_HAL_KINETIS_FMC_PFB1CR (CYGHWR_HAL_KINETIS_FMC_BASE + 8) + +enum { + CYGHWR_HAL_KINETIS_FMC_CACHE_W0, + CYGHWR_HAL_KINETIS_FMC_CACHE_W1, + CYGHWR_HAL_KINETIS_FMC_CACHE_W2, + CYGHWR_HAL_KINETIS_FMC_CACHE_W3, + CYGHWR_HAL_KINETIS_FMC_CACHE_WAYS +}; + +enum { + CYGHWR_HAL_KINETIS_FMC_CACHE_S0, + CYGHWR_HAL_KINETIS_FMC_CACHE_S1, + CYGHWR_HAL_KINETIS_FMC_CACHE_S2, + CYGHWR_HAL_KINETIS_FMC_CACHE_S3, + CYGHWR_HAL_KINETIS_FMC_CACHE_S4, + CYGHWR_HAL_KINETIS_FMC_CACHE_S5, + CYGHWR_HAL_KINETIS_FMC_CACHE_S6, + CYGHWR_HAL_KINETIS_FMC_CACHE_S7, + CYGHWR_HAL_KINETIS_FMC_CACHE_SIDES +}; + +#define CYGHWR_HAL_KINETIS_FMC_TAG(__way,__side) \ + (CYGHWR_HAL_KINETIS_FMC_BASE + 0x100 + (__way)*0x20 + (__side)*4) +#define CYGHWR_HAL_KINETIS_FMC_DATA_U(__way,side) \ + (CYGHWR_HAL_KINETIS_FMC_BASE + 0x200 + (__way)*0x20 + (__side)*8) +#define CYGHWR_HAL_KINETIS_FMC_DATA_L(__way,side) \ + (CYGHWR_HAL_KINETIS_FMC_BASE + 0x204 + (__way)*0x40 + (__side)*8) + +#define CYGHWR_HAL_KINETIS_FMC_PFAPR_MPFD_M(__master) (1 << ((__master) + 16)) +enum { + CYGHWR_HAL_KINETIS_FMC_PFAPR_MAP_NO_ACCESS, + CYGHWR_HAL_KINETIS_FMC_PFAPR_MAP_RO, + CYGHWR_HAL_KINETIS_FMC_PFAPR_MAP_WO, + CYGHWR_HAL_KINETIS_FMC_PFAPR_MAP_RW +}; +#define CYGHWR_HAL_KINETIS_FMC_PFAPR_MAP(__master, __access) \ + ((__access) <<(2 * (__master))) + +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_RWSC_M (0xf0000000) + +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_WAY(__way) ((1 << (__way)) << 24) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_ALL \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W0) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W1) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W2) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CLCK_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W3) + +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_WAY(__way) ((1 << (__way)) << 20) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_ALL \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W0) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W1) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W2) | \ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CINV_WAY(CYGHWR_HAL_KINETIS_FMC_CACHE_W3) + +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_SBINV (1 << 19) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BMW (7 << 17) + +enum{ + CYGHWR_HAL_KINETIS_FMC_PFBCR_CRC_LRU, + CYGHWR_HAL_KINETIS_FMC_PFBCR_CRC_res0, + CYGHWR_HAL_KINETIS_FMC_PFBCR_CRC_IND_LRUW01IF23D, + CYGHWR_HAL_KINETIS_FMC_PFBCR_CRC_IND_LRUW02ID3D +}; +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_CRC (__cache_repl_con) \ + ((__cache_repl_con) << 5) + +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BDCE (0x10) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BICE (0x08) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BDPE (0x04) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BIPE (0x02) +#define CYGHWR_HAL_KINETIS_FMC_PFBCR_BSEBE (0x01) + +//--------------------------------------------------------------------------- +// MPU Memory Protection unit + +typedef volatile struct cyghwr_hal_kinetis_mpu_s { + cyg_uint32 cesr; // Control/Error Status Register + cyg_uint8 reserved0[12]; + struct { + cyg_uint32 ear; // Error Address Register, Slave Port n + cyg_uint32 edr; // Error Detail Register, Slave Port n + } slave_port[5]; + cyg_uint8 reserved1[968]; + struct { // Region Descriptors, Word 0..Region Descriptor n, Word 3 + cyg_uint32 word[4]; + }reg_desc[12]; + cyg_uint8 reserved2[832]; + cyg_uint32 reg_daac[12]; // Region Descriptor Alternate Access Control n +} cyghwr_hal_kinetis_mpu_t; + +#define CYGHWR_HAL_KINETIS_MPU_P (cyghwr_hal_kinetis_mpu_t *)0x4000d000 + +//--------------------------------------------------------------------------- +// FlexBus +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS +# include +#endif + +//---------------------------------------------------------------------------- +// DDRMC - SDRAM controller +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC +# include +#endif + +//--------------------------------------------------------------------------- +// GPIO +#include + +//============================================================================= +// DEVS: +// Following macros may also be, and usually are borrwed by some device drivers. +//----------------------------------------------------------------------------- +#include + +// End Peripherals + +// Some miscelaneous function prototypes +// Clock related functions are in kinetis_clocking.c +__externC void hal_start_clocks(void); +__externC void hal_update_clock_var(void); + +//----------------------------------------------------------------------------- +// end of var_io.h + +#endif // CYGONCE_HAL_VAR_IO_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_clkgat.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_clkgat.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_clkgat.h @@ -0,0 +1,336 @@ +#ifndef CYGONCE_HAL_VAR_IOCLKGAT_H +#define CYGONCE_HAL_VAR_IOCLKGAT_H +//=========================================================================== +// +// var_io_clkgat.h +// +// Kinetis clock gating +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2013-03-17 +// Purpose: Kinetis clock distribution macros +// Description: +// Usage: This file is included by +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +//--------------------------------------------------------------------------- +// Clock distribution + +// SCGC1 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_M 0x20 +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_S 5 +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_M 0x400 +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_S 10 +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_M 0x800 +#define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_S 11 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_OSC1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(1, CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART4 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(1, CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART5 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(1, CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_S) + +// SCGC2 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_ENET_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_ENET_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC0_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC0_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_M 0x2000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_S 13 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_ENET \ + CYGHWR_HAL_KINETIS_SIM_SCGC(2, CYGHWR_HAL_KINETIS_SIM_SCGC2_ENET_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DAC0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(2, CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DAC1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(2, CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_S) + +// SCGC3 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGA_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGA_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_M 0x10 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_NFC_M 0x100 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_NFC_S 8 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_M 0x4000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_S 14 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SAI1_M 0x8000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SAI1_S 15 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_M 0x20000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_S 17 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_LCDC_M 0x40000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_LCDC_S 22 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_M 0x1000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_S 24 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM3_M 0x2000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM3_S 25 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_M 0x8000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_S 27 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_M 0x10000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_S 28 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_RNGA \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGA_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_RNGB \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FLEXCAN1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_NFC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_NFC_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SPI2 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DDR \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SAI1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_SAI1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SDHC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_LCDC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_LCDC_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FTM2 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_ADC1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_ADC3 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(3, CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_S) + +// SCGC4 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_EWM_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_EWM_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_CMT_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_CMT_S 2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C0_M 0x40 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C0_S 6 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C1_M 0x80 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C1_S 7 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART0_M 0x400 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART0_S 10 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART1_M 0x800 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART1_S 11 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART2_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART2_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART3_M 0x2000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_UART3_S 13 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_USBOTG_M 0x40000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_USBOTG_S 18 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_CMP_M 0x80000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_CMP_S 19 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_VREF_M 0x100000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_VREF_S 20 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_M 0x10000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_S 28 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_EWM \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_EWM_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_CMT \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_CMT_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_I2C0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_I2C1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_UART0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_UART1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART2 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_UART2_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_UART3 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_UART3_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_USBOTG \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_USBOTG_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_CMP \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_CMP_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_VREF \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_VREF_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_LLWU \ + CYGHWR_HAL_KINETIS_SIM_SCGC(4, CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_S) + +// SCGC5 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_LPTIMER_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_LPTIMER_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_REGFILE_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_REGFILE_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICE_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICE_S 2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICESR_M 0x8 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICESR_S 3 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_TSI_M 0x20 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_TSI_S 5 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_M 0x200 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_S 9 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_M 0x400 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_S 10 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_M 0x800 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_S 11 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M 0x2000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_S 13 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_M 0x4000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_S 14 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_LPTIMER \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_LPTIMER_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_REGFILE \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_REGFILE_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DRYICE \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICE_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DRYICESR \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_DRYICESR_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_TSI \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_TSI_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTA \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTA_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTB \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTB_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTC_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTD \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTE \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PORTF \ + CYGHWR_HAL_KINETIS_SIM_SCGC(5, CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_S) + +// SCGC6 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX0_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX0_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX1_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX1_S 2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FLEXCAN0_M 0x10 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FLEXCAN0_S 4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI0_M 0x1000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI0_S 12 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI1_M 0x2000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI1_S 13 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_I2S_M 0x8000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_I2S_S 15 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SAI0_M 0x8000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_SAI0_S 15 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_CRC_M 0x40000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_CRC_S 18 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_USBHS_M 0x100000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_USBHS_S 20 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_USBDCD_M 0x200000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_USBDCD_S 21 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_PDB_M 0x400000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_PDB_S 22 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_PIT_M 0x800000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_PIT_S 23 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM0_M 0x1000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM0_S 24 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM1_M 0x2000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM1_S 25 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC0_M 0x8000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC0_S 27 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC2_M 0x10000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC2_S 28 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M 0x20000000 +#define CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_S 29 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FTFL \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FLEXCAN0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_FLEXCAN0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SPI0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SPI1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_SPI1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_I2S \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_I2S_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_SAI0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_SAI0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_CRC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_CRC_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_USBHS \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_USBHS_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_USBDCD \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_USBDCD_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PDB \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_PDB_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_PIT \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_PIT_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FTM0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FTM1 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM1_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_ADC0 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC0_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_ADC2 \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC2_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_RTC \ + CYGHWR_HAL_KINETIS_SIM_SCGC(6, CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_S) + +// SCGC7 Bit Fields +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_FLEXBUS_M 0x1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_FLEXBUS_S 0 +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_DMA_M 0x2 +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_DMA_S 1 +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_M 0x4 +#define CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_S 2 + +#define CYGHWR_HAL_KINETIS_SIM_SCGC_FLEXBUS \ + CYGHWR_HAL_KINETIS_SIM_SCGC(7, CYGHWR_HAL_KINETIS_SIM_SCGC7_FLEXBUS_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_DMA \ + CYGHWR_HAL_KINETIS_SIM_SCGC(7, CYGHWR_HAL_KINETIS_SIM_SCGC7_DMA_S) +#define CYGHWR_HAL_KINETIS_SIM_SCGC_MPU \ + CYGHWR_HAL_KINETIS_SIM_SCGC(7, CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_S) + +//----------------------------------------------------------------------------- +// end of var_io_clkgat.h + +#endif // CYGONCE_HAL_VAR_IOCLKGAT_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_ddrmc.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_ddrmc.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_ddrmc.h @@ -0,0 +1,111 @@ +#ifndef CYGONCE_HAL_VAR_IO_DDRMC_H +#define CYGONCE_HAL_VAR_IO_DDRMC_H +//=========================================================================== +// +// var_io_ddrmc.h +// +// Kinetis DDRam controller specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2012-03-08 +// Purpose: Kinetis variant specific registers +// Description: +// Usage: #include // var_io.h includes this file +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +//---------------------------------------------------------------------------- +// DDRMC - SDRAM controller + +# define CYGNUM_HAL_KINETIS_DDRMC_CR_N 64 // Number of DDRMC control registers + +typedef volatile struct cyghwr_hal_kinetis_ddrmc_s { + cyg_uint32 cr[CYGNUM_HAL_KINETIS_DDRMC_CR_N]; // Control registers + cyg_uint32 reserved1[32]; + cyg_uint32 rcr; // RCR control register + cyg_uint32 reserved2[10]; + cyg_uint32 pad_ctrl; // I/O Pad control register +} cyghwr_hal_kinetis_ddrmc_t; + +# define CYGHWR_HAL_KINETIS_DDRMC_P ((cyghwr_hal_kinetis_ddrmc_t *)0x400ae000) + +// RCR +# define CYGHWR_HAL_KINETIS_DDRMC_RCR_RST_M 0x40000000 +// PAD CTRL +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_M 0x03000000 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_S 20 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT(_x_) \ + VALUE_(CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_S, _x_) +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_DIS 0 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_50 3 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_75 1 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_150 2 + +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_M 0x0000000f +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_S 0 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY(_x_) \ + VALUE_(CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_S, _x_) +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_0BUF 0 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_4BUF 1 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_7BUF 2 +# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_10BUF 3 + +# define CYGHWR_HAL_KINETIS_DDRMC_CR00_START 0x1 +# define CYGHWR_HAL_KINETIS_DDRMC_CR30_DRAM_INIT_CPL 0x400 + +# define CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP_M 0x0000ffff + +# ifndef CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP +# define CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP \ + (CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG(CYGHWR_HAL_KINETIS_SIM_MCR_DDRBUS)| \ + (CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_M * 0) | \ + (CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_M * 1) | \ + (CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_M * 0) | \ + (CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_M * 0 )) +# endif + +__externC void hal_cortexm_kinetis_ddrmc_init(const cyg_uint32 src[]); +# define HAL_CORTEXM_KINETIS_DDRMC_INIT(__inidat) \ + hal_cortexm_kinetis_ddrmc_init(__inidat) +__externC void hal_cortexm_kinetis_ddrmc_diag(void); + +//----------------------------------------------------------------------------- +// end of var_io_ddrmc.h +#endif // CYGONCE_HAL_VAR_IO_DDRMC_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h @@ -0,0 +1,415 @@ +#ifndef CYGONCE_HAL_VAR_IO_DEVS_H +#define CYGONCE_HAL_VAR_IO_DEVS_H +//=========================================================================== +// +// var_io_devs.h +// +// Variant specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-02-05 +// Purpose: Kinetis variant IO provided to various device drivers +// Description: +// Usage: #include //var_io.h includes this file +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +//============================================================================= +// DEVS: +// Following macros may be, and usually are borrwed by some device drivers. + +// Peripheral clock [Hz]; +__externC cyg_uint32 hal_get_peripheral_clock(void); + +//----------------------------------------------------------------------------- +// Freescale UART +// Borrow some HAL resources to Freescale UART driver +// UART macros are used by both: +// src/hal_diag.c +// devs/serial//src/ser_freescale_uart.c + +#define CYGADDR_IO_SERIAL_FREESCALE_UART0_BASE 0x4006A000 +#define CYGADDR_IO_SERIAL_FREESCALE_UART1_BASE 0x4006B000 +#define CYGADDR_IO_SERIAL_FREESCALE_UART2_BASE 0x4006C000 +#define CYGADDR_IO_SERIAL_FREESCALE_UART3_BASE 0x4006D000 +#define CYGADDR_IO_SERIAL_FREESCALE_UART4_BASE 0x400EA000 +#define CYGADDR_IO_SERIAL_FREESCALE_UART5_BASE 0x400EB000 + +// UART Clock gating + +#define CYGHWR_IO_FREESCALE_UART0_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART0 +#define CYGHWR_IO_FREESCALE_UART1_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART1 +#define CYGHWR_IO_FREESCALE_UART2_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART2 +#define CYGHWR_IO_FREESCALE_UART3_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART3 +#define CYGHWR_IO_FREESCALE_UART4_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART4 +#define CYGHWR_IO_FREESCALE_UART5_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_UART5 + +// UART PIN configuration +// Note: May be overriden by plf_io.h + +#define CYGHWR_HAL_KINETIS_PORT_PIN_NONE CYGHWR_HAL_KINETIS_PIN_NONE + +#ifndef CYGHWR_IO_FREESCALE_UART0_PIN_RX +# define CYGHWR_IO_FREESCALE_UART0_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART0_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART0_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART0_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +#ifndef CYGHWR_IO_FREESCALE_UART1_PIN_RX +# define CYGHWR_IO_FREESCALE_UART1_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART1_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART1_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART1_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +#ifndef CYGHWR_IO_FREESCALE_UART2_PIN_RX +# define CYGHWR_IO_FREESCALE_UART2_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART2_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART2_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART2_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +#ifndef CYGHWR_IO_FREESCALE_UART3_PIN_RX +# define CYGHWR_IO_FREESCALE_UART3_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART3_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART3_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART3_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +#ifndef CYGHWR_IO_FREESCALE_UART4_PIN_RX +# define CYGHWR_IO_FREESCALE_UART4_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART4_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART4_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART4_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +#ifndef CYGHWR_IO_FREESCALE_UART5_PIN_RX +# define CYGHWR_IO_FREESCALE_UART5_PIN_RX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART5_PIN_TX CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART5_PIN_RTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +# define CYGHWR_IO_FREESCALE_UART5_PIN_CTS CYGHWR_HAL_KINETIS_PORT_PIN_NONE +#endif + +// Lend some HAL dependent functions to the UART serial device driver + +#ifndef __ASSEMBLER__ + +# define CYGHWR_IO_FREESCALE_UART_BAUD_SET(__uart_p, _baud_) \ + hal_freescale_uart_setbaud(__uart_p, _baud_) + +# define CYGHWR_IO_FREESCALE_UART_PIN(__pin) \ + hal_set_pin_function(__pin) + + +// Set baud rate +__externC void hal_freescale_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud ); + +#endif + +//--------------------------------------------------------------------------- +// ENET +// Lend some HAL dependent functions to the Ethernet device driver +#define CYGADDR_IO_ETH_FREESCALE_ENET0_BASE (0x400C0000) +// Clock gating +#define CYGHWR_IO_FREESCALE_ENET0_CLOCK CYGHWR_HAL_KINETIS_SIM_SCGC_ENET + +#ifndef __ASSEMBLER__ + +# define CYGHWR_IO_FREESCALE_ENET_PIN(__pin) \ + hal_set_pin_function(__pin) + +#endif + +//---------------------------------------------------------------------------- +// DSPI +// Lend some HAL dependent macros to DSPI device driver + +// DSPI - Peripheral instance base addresses +#define CYGADDR_IO_SPI_FREESCALE_DSPI0_P ((cyghwr_devs_freescale_dspi_t*)0x4002C000) +#define CYGADDR_IO_SPI_FREESCALE_DSPI1_P ((cyghwr_devs_freescale_dspi_t*)0x4002D000) +#define CYGADDR_IO_SPI_FREESCALE_DSPI2_P ((cyghwr_devs_freescale_dspi_t*)0x400AC000) + +#define CYGHWR_IO_SPI_FREESCALE_DSPI_CLOCK hal_get_peripheral_clock(); + +#define CYGHWR_IO_FREESCALE_DSPI0_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_SPI0 +#define CYGHWR_IO_FREESCALE_DSPI1_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_SPI1 +#define CYGHWR_IO_FREESCALE_DSPI2_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_SPI2 + +# define CYGHWR_IO_FREESCALE_DSPI_PIN(__pin) hal_set_pin_function(__pin) + +#ifndef KINETIS_PIN_SPI0_OUT_OPT +#define KINETIS_PIN_SPI0_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI0_CS_OPT +#define KINETIS_PIN_SPI0_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI0_IN_OPT +#define KINETIS_PIN_SPI0_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) +#endif + +#ifndef KINETIS_PIN_SPI1_OUT_OPT +#define KINETIS_PIN_SPI1_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI1_CS_OPT +#define KINETIS_PIN_SPI1_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI1_IN_OPT +#define KINETIS_PIN_SPI1_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) +#endif +#ifndef KINETIS_PIN_SPI2_OUT_OPT +#define KINETIS_PIN_SPI2_OUT_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI2_CS_OPT +#define KINETIS_PIN_SPI2_CS_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_DSE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_SRE_M) +#endif +#ifndef KINETIS_PIN_SPI2_IN_OPT +#define KINETIS_PIN_SPI2_IN_OPT (CYGHWR_HAL_KINETIS_PORT_PCR_PE_M | \ + CYGHWR_HAL_KINETIS_PORT_PCR_PS_M) +#endif + +//--------------------------------------------------------------------------- +// I2C +// Lend some HAL dependent macros to I2C device driver +// Base pointers +#define CYGADDR_IO_I2C_FREESCALE_I2C0_BASE (0x40066000) +#define CYGADDR_IO_I2C_FREESCALE_I2C1_BASE (0x40067000) +// Clocking +#define CYGHWR_IO_I2C_FREESCALE_I2C_CLOCK hal_get_peripheral_clock() +#define CYGHWR_IO_FREESCALE_I2C0_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_I2C0 +#define CYGHWR_IO_FREESCALE_I2C1_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_I2C1 +// Pins +# define CYGHWR_IO_FREESCALE_I2C_PIN(__pin) hal_set_pin_function(__pin) + +# ifndef CYGHWR_IO_FREESCALE_I2C_FREQUENCY_TABLE +// Fix an error in Kinetis I2C Manual. There is an unconfirmed +// error in Kinetis I2C divider and hold value table. +#if 0 // Values as are in Kinetis Reference Manuals +#define I2C_FREQ_TABLE_ENTRY_8 28 +#define I2C_FREQ_TABLE_ENTRY_9 32 +#else // Values that give correct result according to measurements +#define I2C_FREQ_TABLE_ENTRY_8 30 +#define I2C_FREQ_TABLE_ENTRY_9 34 +#endif +typedef cyg_uint16 dev_i2c_freescale_frequency_entry_t; +# define CYGHWR_IO_FREESCALE_I2C_FREQUENCY_TABLE \ + 20, 22, 24, 26, 28, 30, 34, 40, I2C_FREQ_TABLE_ENTRY_8, I2C_FREQ_TABLE_ENTRY_9, \ + 36, 40, 44, 48, 56, 68, 48, 56, 64, \ + 72, 80, 88, 104, 128, 80, 96, 112, 128, 144, 160, 192, 240, 160, 192, 224, \ + 256, 288, 320, 384, 480, 320, 384, 448, 512, 576, 640, 768, 960, 640, 768, \ + 896, 1024, 1152, 1280, 1536, 1920, 1280, 1536, 1792, 2048, 2304, 2560, 3072, 3840 + + +# endif // CYGHWR_IO_FREESCALE_I2C_FREQUENCY_TABLE + +// DMA MUX ------------------------------------------------------------------ +// DMAMUX DMA request sources +#define FREESCALE_DMAMUX_SRC_KINETIS_DISABLE 0 +#define FREESCALE_DMAMUX_SRC_KINETIS_RESERVE 1 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART0R 2 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART0T 3 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART1R 4 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART1T 5 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART2R 6 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART2T 7 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART3R 8 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART3T 9 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART4R 10 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART4T 11 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART5R 12 +#define FREESCALE_DMAMUX_SRC_KINETIS_UART5T 13 +#define FREESCALE_DMAMUX_SRC_KINETIS_I2S0R 14 +#define FREESCALE_DMAMUX_SRC_KINETIS_I3S0T 15 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI0R 16 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI0T 17 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI1R 18 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI1T 19 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI2R 20 +#define FREESCALE_DMAMUX_SRC_KINETIS_SPI2T 21 +#define FREESCALE_DMAMUX_SRC_KINETIS_I2C0 22 +#define FREESCALE_DMAMUX_SRC_KINETIS_I2C1 23 // Either I2C1 +#define FREESCALE_DMAMUX_SRC_KINETIS_I2C2 23 // or I2C2 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C0 24 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C1 25 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C2 26 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C3 27 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C4 28 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C5 29 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C6 30 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C7 31 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM1C0 32 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM1C1 33 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM2C0 34 +#define FREESCALE_DMAMUX_SRC_KINETIS_FTM2C1 35 +#define FREESCALE_DMAMUX_SRC_KINETIS_1588T0 36 +#define FREESCALE_DMAMUX_SRC_KINETIS_1588T1 37 +#define FREESCALE_DMAMUX_SRC_KINETIS_1588T2 38 +#define FREESCALE_DMAMUX_SRC_KINETIS_1588T3 39 +#define FREESCALE_DMAMUX_SRC_KINETIS_ADC0 40 +#define FREESCALE_DMAMUX_SRC_KINETIS_ADC1 41 +#define FREESCALE_DMAMUX_SRC_KINETIS_CMP0 42 +#define FREESCALE_DMAMUX_SRC_KINETIS_CMP1 43 +#define FREESCALE_DMAMUX_SRC_KINETIS_CMP2 44 +#define FREESCALE_DMAMUX_SRC_KINETIS_DAC0 45 +#define FREESCALE_DMAMUX_SRC_KINETIS_DAC1 46 +#define FREESCALE_DMAMUX_SRC_KINETIS_CMT 47 +#define FREESCALE_DMAMUX_SRC_KINETIS_PDB 48 +#define FREESCALE_DMAMUX_SRC_KINETIS_PORTA 49 +#define FREESCALE_DMAMUX_SRC_KINETIS_PORTB 50 +#define FREESCALE_DMAMUX_SRC_KINETIS_PORTC 51 +#define FREESCALE_DMAMUX_SRC_KINETIS_PORTD 52 +#define FREESCALE_DMAMUX_SRC_KINETIS_PORTE 53 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX0 54 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX1 55 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX2 56 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX3 57 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX4 58 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX5 59 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX6 60 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX7 61 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX8 62 +#define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX9 63 + +// DMAMUX1 DMA request sources +#define FREESCALE_DMAMUX1_SRC_KINETIS_DISABLE 0 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE 1 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART0R 2 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART0T 3 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART1R 4 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART1T 5 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART2R 6 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART2T 7 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART3R 8 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART3T 9 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART4R 10 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART4T 11 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART5R 12 +#define FREESCALE_DMAMUX1_SRC_KINETIS_UART5T 13 +#define FREESCALE_DMAMUX1_SRC_KINETIS_I2S0R 14 +#define FREESCALE_DMAMUX1_SRC_KINETIS_I3S0T 15 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI0R 16 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI0T 17 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI1R 18 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI1T 19 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI2R 20 +#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI2T 21 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_22 22 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_23 23 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C0 24 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C1 25 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C2 26 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C3 27 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C4 28 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C5 29 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C6 30 +#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C7 31 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_32 32 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_33 33 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_34 34 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_35 35 +#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T0 36 +#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T1 37 +#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T2 38 +#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T3 39 +#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC0 40 +#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC1 41 +#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC2 42 +#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC3 43 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_44 44 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DAC0 45 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DAC1 46 +#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP0 47 +#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP1 48 +#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP2 49 +#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP3 50 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_51 51 +#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_52 52 +#define FREESCALE_DMAMUX1_SRC_KINETIS_PORTF 53 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX0 54 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX1 55 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX2 56 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX3 57 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX4 58 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX5 59 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX6 60 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX7 61 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX8 62 +#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX9 63 + +#define FREESCALE_DMAMUX_SRC_SPI0_RX FREESCALE_DMAMUX_SRC_KINETIS_SPI0R +#define FREESCALE_DMAMUX_SRC_SPI0_TX FREESCALE_DMAMUX_SRC_KINETIS_SPI0T +#define FREESCALE_DMAMUX_SRC_SPI1_RX FREESCALE_DMAMUX_SRC_KINETIS_SPI1R +#define FREESCALE_DMAMUX_SRC_SPI1_TX FREESCALE_DMAMUX_SRC_KINETIS_SPI1T +#define FREESCALE_DMAMUX_SRC_SPI2_RX FREESCALE_DMAMUX_SRC_KINETIS_SPI2R +#define FREESCALE_DMAMUX_SRC_SPI2_TX FREESCALE_DMAMUX_SRC_KINETIS_SPI2T + +//---------------------------------------------------------------------------- +// eDMA +// Lend some eDMA macros to device driver that use DMA + +// Base address +#define CYGHWR_HAL_FREESCALE_EDMA0_P ((cyghwr_hal_freescale_edma_t *)0x40008000) +// DMAMUX base addresses +#define CYGHWR_HAL_FREESCALE_DMAMUX0_P ((cyghwr_hal_freescale_dmamux_t *) 0x40021000) +#define CYGHWR_HAL_FREESCALE_DMAMUX1_P ((cyghwr_hal_freescale_dmamux_t *) 0x40022000) + +#define CYGHWR_IO_FREESCALE_EDMA0_P CYGHWR_HAL_FREESCALE_EDMA0_P +#define CYGHWR_IO_FREESCALE_DMAMUX0_P CYGHWR_HAL_FREESCALE_DMAMUX0_P +#define CYGHWR_IO_FREESCALE_DMAMUX1_P CYGHWR_HAL_FREESCALE_DMAMUX1_P + +//Clock distribution +#define CYGHWR_IO_CLOCK_ENABLE(__scgc) hal_clock_enable(__scgc) + +#define CYGHWR_IO_FREESCALE_EDMA0_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_DMA +#define CYGHWR_IO_FREESCALE_DMAMUX0_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX0 +#define CYGHWR_IO_FREESCALE_DMAMUX0_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX0 +#define CYGHWR_IO_FREESCALE_DMAMUX1_CLK CYGHWR_HAL_KINETIS_SIM_SCGC_DMAMUX1 +//----------------------------------------------------------------------------- +// end of var_io_devs.h +#endif // CYGONCE_HAL_VAR_IO_DEVS_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_flexbus.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_flexbus.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_flexbus.h @@ -0,0 +1,173 @@ +#ifndef CYGONCE_HAL_VAR_IO_FLEXBUS_H +#define CYGONCE_HAL_VAR_IO_FLEXBUS_H +//=========================================================================== +// +// var_io_flexbus.h +// +// Kinetis FlexBus specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-02-05 +// Purpose: Kinetis variant specific registers +// Description: +// Usage: #include // var_io.h includes this file +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +//--------------------------------------------------------------------------- +// FlexBus + +// FlexBus chip select control registers +typedef struct cyghwr_hal_kinetis_fbcs_s{ + cyg_uint32 csar; // Chip select address register + cyg_uint32 csmr; // Chip select mask register + cyg_uint32 cscr; // Chip select control register +} cyghwr_hal_kinetis_fbcs_t; + +#define CYGNUM_HAL_KINETIS_FBCS_N 6 // Kinetis has up to 6 chip selects + +// FlexBus control +typedef volatile struct cyghwr_hal_kinetis_fb_s { + cyghwr_hal_kinetis_fbcs_t csel[CYGNUM_HAL_KINETIS_FBCS_N]; //Chip Selects + cyg_uint8 reserved[24]; + cyg_uint32 cspmcr; //Chip select port multiplexing control register +} cyghwr_hal_kinetis_fb_t; + +#define CYGHWR_HAL_KINETIS_FB_P ((cyghwr_hal_kinetis_fb_t *) 0x4000C000) + +// CSAR - Chip Select Address Register +// CSAR Bit Fields +#define CYGHWR_HAL_FB_CSAR_BA_M 0xFFFF0000 +#define CYGHWR_HAL_FB_CSAR_BA_S 16 +#define CYGHWR_HAL_FB_CS_AR_BA(__val) VALUE_(CYGHWR_HAL_FB_CSAR_BA_S, __val) + +// CSMR - Chup Select Mask Register +// CSMR Bit Fields +#define CYGHWR_HAL_FB_CSMR_V_M 0x1 +#define CYGHWR_HAL_FB_CSMR_V_S 0 +#define CYGHWR_HAL_FB_CSMR_WP_M 0x100 +#define CYGHWR_HAL_FB_CSMR_WP_S 8 +#define CYGHWR_HAL_FB_CSMR_BAM_M 0xFFFF0000 +#define CYGHWR_HAL_FB_CSMR_BAM_S 16 +#define CYGHWR_HAL_FB_CS_MR_BAM(__val) VALUE_(CYGHWR_HAL_FB_CSMR_BAM_S, __val) + +// CSCR - Chip Select Control register +// CSCR Bit Fields +#define CYGHWR_HAL_FB_CSCR_BSTW_M 0x8 +#define CYGHWR_HAL_FB_CSCR_BSTW_S 3 +#define CYGHWR_HAL_FB_CSCR_BSTR_M 0x10 +#define CYGHWR_HAL_FB_CSCR_BSTR_S 4 +#define CYGHWR_HAL_FB_CSCR_BEM_M 0x20 +#define CYGHWR_HAL_FB_CSCR_BEM_S 5 +#define CYGHWR_HAL_FB_CSCR_PS_M 0xC0 +#define CYGHWR_HAL_FB_CSCR_PS_S 6 +#define CYGHWR_HAL_FB_CSCR_AA_M 0x100 +#define CYGHWR_HAL_FB_CSCR_AA_S 8 +#define CYGHWR_HAL_FB_CSCR_BLS_M 0x200 +#define CYGHWR_HAL_FB_CSCR_BLS_S 9 +#define CYGHWR_HAL_FB_CSCR_WS_M 0xFC00 +#define CYGHWR_HAL_FB_CSCR_WS_S 10 +#define CYGHWR_HAL_FB_CSCR_WRAH_M 0x30000 +#define CYGHWR_HAL_FB_CSCR_WRAH_S 16 +#define CYGHWR_HAL_FB_CSCR_RDAH_M 0xC0000 +#define CYGHWR_HAL_FB_CSCR_RDAH_S 18 +#define CYGHWR_HAL_FB_CSCR_ASET_M 0x300000 +#define CYGHWR_HAL_FB_CSCR_ASET_S 20 +#define CYGHWR_HAL_FB_CSCR_EXALE_M 0x400000 +#define CYGHWR_HAL_FB_CSCR_EXALE_S 22 +#define CYGHWR_HAL_FB_CSCR_SWSEN_M 0x800000 +#define CYGHWR_HAL_FB_CSCR_SWSEN_S 23 +#define CYGHWR_HAL_FB_CSCR_SWS_M 0xFC000000 +#define CYGHWR_HAL_FB_CSCR_SWS_S 26 + +// CSPMCR Bit Fields +#define CYGHWR_HAL_FB_CSPMCR_G5_M 0xF000 +#define CYGHWR_HAL_FB_CSPMCR_G5_S 12 +#define CYGHWR_HAL_FB_CSPMCR_G4_M 0xF0000 +#define CYGHWR_HAL_FB_CSPMCR_G4_S 16 +#define CYGHWR_HAL_FB_CSPMCR_G3_M 0xF00000 +#define CYGHWR_HAL_FB_CSPMCR_G3_S 20 +#define CYGHWR_HAL_FB_CSPMCR_G2_M 0xF000000 +#define CYGHWR_HAL_FB_CSPMCR_G2_S 24 +#define CYGHWR_HAL_FB_CSPMCR_G1_M 0xF0000000 +#define CYGHWR_HAL_FB_CSPMCR_G1_S 28 + +// FlexBus control pin multiplexing +#define CYGHWR_HAL_FB_CSPMCR(__group, __val) VALUE_(__group, __val) + +#define CYGHWR_HAL_FB_CSPMCR_G1_ALE \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G1_S, 0) +#define CYGHWR_HAL_FB_CSPMCR_G1_CS1 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G1_S, 1) +#define CYGHWR_HAL_FB_CSPMCR_G1_TS \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G1_S, 2) + +#define CYGHWR_HAL_FB_CSPMCR_G2_CS4 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G2_S, 0) +#define CYGHWR_HAL_FB_CSPMCR_G2_TSIZ0 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G2_S, 1) +#define CYGHWR_HAL_FB_CSPMCR_G2_BE_31_24 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G2_S, 2) + +#define CYGHWR_HAL_FB_CSPMCR_G3_CS5 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G3_S, 0) +#define CYGHWR_HAL_FB_CSPMCR_G3_TSIZ1 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G3_S, 1) +#define CYGHWR_HAL_FB_CSPMCR_G3_BE_23_16 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G3_S, 2) + +#define CYGHWR_HAL_FB_CSPMCR_G4_TST \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G4_S, 0) +#define CYGHWR_HAL_FB_CSPMCR_G4_CS2 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G4_S, 1) +#define CYGHWR_HAL_FB_CSPMCR_G4_BE_15_8 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G4_S, 2) + +#define CYGHWR_HAL_FB_CSPMCR_G5_TA \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G5_S, 0) +#define CYGHWR_HAL_FB_CSPMCR_G5_CS3 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G5_S, 1) +#define CYGHWR_HAL_FB_CSPMCR_G5_BE_7_0 \ + CYGHWR_HAL_FB_CSPMCR(CYGHWR_HAL_FB_CSPMCR_G5_S, 2) + +//----------------------------------------------------------------------------- +// end of var_io_flexbus.h +#endif // CYGONCE_HAL_VAR_IO_FLEXBUS_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_gpio.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_gpio.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_gpio.h @@ -0,0 +1,137 @@ +#ifndef CYGONCE_HAL_VAR_IO_GPIO_H +#define CYGONCE_HAL_VAR_IO_GPIO_H +//=========================================================================== +// +// var_io_gpio.h +// +// Kinetis GPIO +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Tomas Frydrych +// Date: 2011-11-14 +// Purpose: Kinetis variant specific registers +// Description: +// Usage: #include // var_io.h includes this file +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +//--------------------------------------------------------------------------- +// GPIO +typedef volatile struct cyghwr_hal_kinetis_gpio_s { + cyg_uint32 pdor; + cyg_uint32 psor; + cyg_uint32 pcor; + cyg_uint32 ptor; + cyg_uint32 pdir; + cyg_uint32 pddr; +} cyghwr_hal_kinetis_gpio_t; + +// PTA-PTE base pointers +#define CYGHWR_HAL_KINETIS_GPIO_PORTA_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF000u) +#define CYGHWR_HAL_KINETIS_GPIO_PORTB_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF040u) +#define CYGHWR_HAL_KINETIS_GPIO_PORTC_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF080u) +#define CYGHWR_HAL_KINETIS_GPIO_PORTD_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF0C0u) +#define CYGHWR_HAL_KINETIS_GPIO_PORTE_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF100u) +#define CYGHWR_HAL_KINETIS_GPIO_PORTF_P ((cyghwr_hal_kinetis_gpio_t*)0x400FF140u) + +// GPIO register on a given port (register name is lower case) +#define CYGHWR_HAL_KINETIS_GPIO(__port, __reg) \ + (CYGHWR_HAL_KINETIS_GPIO_PORT##__port##_P)->__reg + +// Get values for entire port +#define CYGHWR_HAL_KINETIS_GPIO_GET(__port) \ + CYGHWR_HAL_KINETIS_GPIO(__port, pdir) + +// Output values for entire port +#define CYGHWR_HAL_KINETIS_GPIO_PUT(__port, __val) \ + CYGHWR_HAL_KINETIS_GPIO(__port, pdor) = __val + +// Set values for entire port based on bitmask +#define CYGHWR_HAL_KINETIS_GPIO_SET(__port, __val) \ + CYGHWR_HAL_KINETIS_GPIO(__port, psor) = __val + +// Clear values for entire port based on bitmask +#define CYGHWR_HAL_KINETIS_GPIO_CLEAR(__port, __val) \ + CYGHWR_HAL_KINETIS_GPIO(__port, pcor) = __val + +// Toggle values for entire port based on bitmask +#define CYGHWR_HAL_KINETIS_GPIO_TOGGLE(__port, __val) \ + CYGHWR_HAL_KINETIS_GPIO(__port, ptor) = __val + +// Get value for a single pin on given port +#define CYGHWR_HAL_KINETIS_GPIO_GET_PIN(__port, __pin) \ + (BIT_(__pin) & CYGHWR_HAL_KINETIS_GPIO_GET(__port)) + +// Set a single pin on a given register +#define CYGHWR_HAL_KINETIS_GPIO_SET_PIN(__port, __pin) \ + CYGHWR_HAL_KINETIS_GPIO_SET(__port, BIT_(__pin)) + +// Clear a single pin on a given register +#define CYGHWR_HAL_KINETIS_GPIO_CLEAR_PIN(__port, __pin) \ + CYGHWR_HAL_KINETIS_GPIO_CLEAR(__port, BIT_(__pin)) + +// Toggle a single pin on a given register +#define CYGHWR_HAL_KINETIS_GPIO_TOGGLE_PIN(__port, __pin) \ + CYGHWR_HAL_KINETIS_GPIO_TOGGLE(__port, BIT_(__pin)) + +// Set pin data direction +#define CYGHWR_HAL_KINETIS_GPIO_PIN_DDR_OUT(__port, __pin) \ + CYGHWR_HAL_KINETIS_GPIO(__port, pddr) |= BIT_(__pin) + +#define CYGHWR_HAL_KINETIS_GPIO_PIN_DDR_IN(__port, __pin) \ + CYGHWR_HAL_KINETIS_GPIO(__port, pddr) &= ~BIT_(__pin) + + +__externC void hal_gpio_pin_ddr_out(cyg_uint32 pin); +__externC void hal_gpio_pin_ddr_in(cyg_uint32 pin); + +__externC cyg_uint32 hal_gpio_get_pin(cyg_uint32 pin); + +__externC void hal_gpio_port_clear(cyg_uint32 port_i, cyg_uint32 mask); +__externC void hal_gpio_port_set(cyg_uint32 port_i, cyg_uint32 mask); +__externC void hal_gpio_port_toggle(cyg_uint32 port_i, cyg_uint32 mask); + +__externC void hal_gpio_pin_clear(cyg_uint32 pin); +__externC void hal_gpio_pin_set(cyg_uint32 pin); +__externC void hal_gpio_pin_toggle(cyg_uint32 pin); + +//----------------------------------------------------------------------------- +// end of var_io_gpio.h +#endif // CYGONCE_HAL_VAR_IO_GPIO_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/var_io_lmem.h b/packages/hal/cortexm/kinetis/var/current/include/var_io_lmem.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_lmem.h @@ -0,0 +1,302 @@ +#ifndef CYGONCE_HAL_VAR_IO_LMEM_H +#define CYGONCE_HAL_VAR_IO_LMEM_H +//=========================================================================== +// +// var_io_lmem.h +// +// Kinetis Local memory controller specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2012-04-28 +// Purpose: Kinetis variant specific registers +// Description: +// Usage: #include // var_io.h includes this file +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +//---------------------------------------------------------------------------- +// LMEM - Local memory controller + +typedef volatile struct cyghwr_hal_kinetis_lmem_s { + cyg_uint32 ccr; // Cache control register + cyg_uint32 clcr; // Cache line control register + void *csar; // Cache search address register + cyg_uint32 cvr; // Cache read/write value register + cyg_uint8 reserved[16]; + cyg_uint32 rmr; // Cache regions mode register +} cyghwr_hal_kinetis_lmem_t; + +#define CYGHWR_HAL_KINETIS_LMEM_PC_P ((cyghwr_hal_kinetis_lmem_t *) 0xE0082000) +#define CYGHWR_HAL_KINETIS_LMEM_PS_P ((cyghwr_hal_kinetis_lmem_t *) 0xE0082800) + +// CCR Bit Fields +#define CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M 0x1 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_ENWRBUF_M 0x2 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M 0x1000000 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M 0x2000000 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M 0x4000000 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M 0x8000000 +#define CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M 0x80000000 + +//CLCR Bit Fields +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M 0x1 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_M 0xFFC +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_S 2 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR(_ca_) \ + ((_ca_) << CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_S) +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_WSEL_M 0x4000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_TDSEL_M 0x10000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCIVB_M 0x100000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCIMB_M 0x200000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCWAY_M 0x400000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_S 24 + +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD(_cmd_) \ + ((_cmd_) << CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_S) +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_SRCH 0 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_INVAL 1 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_PUSH 2 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_CLR 3 + +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LADSEL_M 0x4000000 +#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LACC_M 0x8000000 + +// CSAR Bit Fields +#define CYGHWR_HAL_KINETIS_LMEM_CSAR_LGO_M 0x1 +#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_M 0xFFFFFFFC +#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_S 2 +#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR(_adr_) \ + ((_adr_) << CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_S) + +// CCVR Bit Fields +#define CYGHWR_HAL_KINETIS_LMEM_CCVR_DATA_M 0xFFFFFFFF + +// PCCRMR Bit Fields + +#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_M 0x3 +#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION(_region_,_mask_) \ + ((_mask_) << ((15 - (_region_)) * 2)) + +#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M 0 +#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WT_M 2 +#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WB_M 3 + +#define CYGHWR_HAL_KINETIS_LMEM_FLASH_0000 0 +#define CYGHWR_HAL_KINETIS_LMEM_DRAM_0800 1 +#define CYGHWR_HAL_KINETIS_LMEM_FLEXNVM_1000 2 +#define CYGHWR_HAL_KINETIS_LMEM_FLEXBUS_1800 3 +#define CYGHWR_HAL_KINETIS_LMEM_SRAM_L 4 +#define CYGHWR_HAL_KINETIS_LMEM_SRAM_U 5 +#define CYGHWR_HAL_KINETIS_LMEM_FLEXBUS_6000 6 +#define CYGHWR_HAL_KINETIS_LMEM_DRAM_7000 7 +#define CYGHWR_HAL_KINETIS_LMEM_DRAM_8000 8 +#define CYGHWR_HAL_KINETIS_LMEM_FLEXBUS_9000 9 + +#define HAL_CORTEXM_KINETIS_CACHE_PC_ENABLE() \ + hal_cortexm_kinetis_cache_enable(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_ENABLE() \ + hal_cortexm_kinetis_cache_enable(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_DISABLE() \ + hal_cortexm_kinetis_cache_disable(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_DISABLE() \ + hal_cortexm_kinetis_cache_disable(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_INVALL() \ + hal_cortexm_kinetis_cache_inval(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_INVALL() \ + hal_cortexm_kinetis_cache_inval(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_SYNC() \ + hal_cortexm_kinetis_cache_sync(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_SYNC() \ + hal_cortexm_kinetis_cache_sync(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_CLEAR() \ + hal_cortexm_kinetis_cache_clear(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_CLEAR() \ + hal_cortexm_kinetis_cache_clear(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_IS_ENABLED() \ + hal_cortexm_kinetis_cache_is_enabled(CYGHWR_HAL_KINETIS_LMEM_PC_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_IS_ENABLED() \ + hal_cortexm_kinetis_cache_is_enabled(CYGHWR_HAL_KINETIS_LMEM_PS_P) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_SRCH(_base, _size_) \ + hal_cortexm_kinetis_cache_lines(CYGHWR_HAL_KINETIS_LMEM_PS_P, _base, _size_, \ + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_SRCH) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_INVALIDATE(_base, _size_) \ + hal_cortexm_kinetis_cache_lines(CYGHWR_HAL_KINETIS_LMEM_PS_P, _base, _size_, \ + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_INVAL) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_PUSH(_base, _size_) \ + hal_cortexm_kinetis_cache_lines(CYGHWR_HAL_KINETIS_LMEM_PS_P, _base, _size_, \ + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_PUSH) + +#define HAL_CORTEXM_KINETIS_CACHE_PS_CLR(_base, _size_) \ + hal_cortexm_kinetis_cache_lines(CYGHWR_HAL_KINETIS_LMEM_PS_P, _base, _size_, \ + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_CLR) + +#define HAL_CORTEXM_KINETIS_CACHE_PC_INVALIDATE(_base, _size_) \ + hal_cortexm_kinetis_cache_lines(CYGHWR_HAL_KINETIS_LMEM_PC_P, _base, _size_, \ + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_INVAL) + +#if defined CYGSEM_HAL_DCACHE_STARTUP_MODE_COPYBACK && defined CYG_HAL_STARTUP_RAM + +#define CYGHWR_HAL_KINETIS_CACHE_WAIT(_lmem_p) \ +CYG_MACRO_START \ + cyg_uint32 prs_tmp, prs_save; \ + cyg_uint32 m0, m1; \ + cyghwr_hal_kinetis_axbs_t* _axbs_p = CYGHWR_HAL_KINETIS_AXBS_P; \ + prs_save = prs_tmp = _axbs_p->slave[5].prs; \ + m0 = CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_PRIO(0, prs_tmp); \ + m1 = CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_PRIO(1, prs_tmp); \ + if(m1 > m0) { \ + prs_tmp &= ~(CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_M(0) | \ + CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_M(1)); \ + prs_tmp |= (m0 << CYGHWR_HAL_KINETIS_AXBS_PRS_MASTER_S(1)) | m1; \ + _axbs_p->slave[5].prs = prs_tmp; \ + } \ + while((_lmem_p)->ccr & CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M); \ + _axbs_p->slave[5].prs = prs_save; \ +CYG_MACRO_END + +#else // CYGSEM_HAL_DCACHE_STARTUP_MODE_COPYBACK + +#define CYGHWR_HAL_KINETIS_CACHE_WAIT(_lmem_p) \ + while((_lmem_p)->ccr & CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M) + +#endif // CYGSEM_HAL_DCACHE_STARTUP_MODE_COPYBACK + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_enable(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + lmem_p->ccr = ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_ENWRBUF_M + ); + CYGHWR_HAL_KINETIS_CACHE_WAIT(lmem_p); +} + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_disable(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + lmem_p->ccr = 0; +} + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_inval(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M + ); + CYGHWR_HAL_KINETIS_CACHE_WAIT(lmem_p); +} + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_store(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M + ); + CYGHWR_HAL_KINETIS_CACHE_WAIT(lmem_p); +} + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_clear(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M | + CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M + ); + CYGHWR_HAL_KINETIS_CACHE_WAIT(lmem_p); +} + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_sync(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + hal_cortexm_kinetis_cache_store(lmem_p); + hal_cortexm_kinetis_cache_clear(lmem_p); +} + +CYGBLD_FORCE_INLINE bool +hal_cortexm_kinetis_cache_is_enabled(cyghwr_hal_kinetis_lmem_t* lmem_p) +{ + return lmem_p->ccr & CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M; +} + + +CYGBLD_FORCE_INLINE void +hal_cortexm_kinetis_cache_lines(cyghwr_hal_kinetis_lmem_t* lmem_p, + cyg_uint8* addr_p, cyg_uint32 size, + const cyg_uint32 oper) +{ + cyg_uint32 line_k; + line_k = (((cyg_uint32)addr_p & (HAL_DCACHE_LINE_SIZE-1)) + size) / HAL_DCACHE_LINE_SIZE + 1; + + lmem_p->clcr = CYGHWR_HAL_KINETIS_LMEM_CLCR_LADSEL_M | + CYGHWR_HAL_KINETIS_LMEM_CLCR_TDSEL_M | + CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD(oper); + + addr_p = (cyg_uint8*)((((cyg_uint32) addr_p) & 0xfffffff0) | + CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M); + do { + lmem_p->csar = addr_p; + while(lmem_p->clcr & CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M); + addr_p += HAL_DCACHE_LINE_SIZE; + } while(--line_k); +} + +//----------------------------------------------------------------------------- +// end of var_io_lmem.h +#endif // CYGONCE_HAL_VAR_IO_LMEM_H diff --git a/packages/hal/cortexm/kinetis/var/current/include/variant.inc b/packages/hal/cortexm/kinetis/var/current/include/variant.inc new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/include/variant.inc @@ -0,0 +1,53 @@ +/*========================================================================== +// +// variant.inc +// +// Variant specific asm definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, ilijak +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +//========================================================================== +// EOF variant.inc diff --git a/packages/hal/cortexm/kinetis/var/current/src/hal_diag.c b/packages/hal/cortexm/kinetis/var/current/src/hal_diag.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/src/hal_diag.c @@ -0,0 +1,410 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Contributors: +// Date: 2011-02-04 +// Purpose: HAL diagnostic input/output +// Description: Implementations of HAL diagnostic input/output support. +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + */ + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED +#include + +#include // +#include // UART registers + +//----------------------------------------------------------------------------- + +typedef struct { + cyg_uint32 uart; + CYG_ADDRESS base; + cyg_int32 msec_timeout; + cyg_int32 isr_vector; + cyg_uint32 rx_pin; + cyg_uint32 tx_pin; + cyg_uint32 clock_gate; + cyg_int32 baud_rate; + cyg_int32 irq_state; +} channel_data_t; + +channel_data_t plf_ser_channels[] = { +#ifdef CYGINT_HAL_FREESCALE_UART0 + { 0, CYGADDR_IO_SERIAL_FREESCALE_UART0_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART0_RX_TX, + CYGHWR_HAL_FREESCALE_UART0_PIN_RX, CYGHWR_HAL_FREESCALE_UART0_PIN_TX, + CYGHWR_IO_FREESCALE_UART0_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, +#endif +#ifdef CYGINT_HAL_FREESCALE_UART1 + { 1, CYGADDR_IO_SERIAL_FREESCALE_UART1_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART1_RX_TX, + CYGHWR_HAL_FREESCALE_UART1_PIN_RX, CYGHWR_HAL_FREESCALE_UART1_PIN_TX, + CYGHWR_IO_FREESCALE_UART1_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, +#endif +#ifdef CYGINT_HAL_FREESCALE_UART2 + { 2, CYGADDR_IO_SERIAL_FREESCALE_UART2_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART2_RX_TX, + CYGHWR_HAL_FREESCALE_UART2_PIN_RX, CYGHWR_HAL_FREESCALE_UART2_PIN_TX, + CYGHWR_IO_FREESCALE_UART2_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, +#endif +#ifdef CYGINT_HAL_FREESCALE_UART3 + { 3, CYGADDR_IO_SERIAL_FREESCALE_UART3_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART3_RX_TX, + CYGHWR_HAL_FREESCALE_UART3_PIN_RX, CYGHWR_HAL_FREESCALE_UART3_PIN_TX, + CYGHWR_IO_FREESCALE_UART3_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, +#endif +#ifdef CYGINT_HAL_FREESCALE_UART4 + { 4, CYGADDR_IO_SERIAL_FREESCALE_UART4_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART4_RX_TX, + CYGHWR_HAL_FREESCALE_UART4_PIN_RX, CYGHWR_HAL_FREESCALE_UART4_PIN_TX, + CYGHWR_IO_FREESCALE_UART4_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, +#endif +#ifdef CYGINT_HAL_FREESCALE_UART5 + { 5, CYGADDR_IO_SERIAL_FREESCALE_UART5_BASE, 1000, + CYGNUM_HAL_INTERRUPT_UART5_RX_TX, + CYGHWR_HAL_FREESCALE_UART5_PIN_RX, CYGHWR_HAL_FREESCALE_UART5_PIN_TX, + CYGHWR_IO_FREESCALE_UART5_CLOCK, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD } +#endif +}; + +#if defined(CYGOPT_HAL_KINETIS_DIAG_IN_MISC_FLASH_SECTION) && \ + CYGOPT_HAL_KINETIS_DIAG_IN_MISC_FLASH_SECTION +# define CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR \ + CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +#else +# define CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +#endif + +//----------------------------------------------------------------------------- + +void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_putc(void *__ch_data, char c); + + +static void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_init_channel(void* __ch_data) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS uart_p = chan->base; + + // Bring clock to the device + CYGHWR_IO_CLOCK_ENABLE(chan->clock_gate); + // Configure PORT pins + hal_set_pin_function(chan->rx_pin); + hal_set_pin_function(chan->tx_pin); + + // 8-1-no parity. + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C1, 0); + CYGHWR_IO_FREESCALE_UART_BAUD_SET(uart_p, chan->baud_rate); + // Enable RX and TX + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C2, + (CYGHWR_DEV_FREESCALE_UART_C2_TE | + CYGHWR_DEV_FREESCALE_UART_C2_RE)); +} + +void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_putc(void* __ch_data, char ch_out) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS uart_p = (CYG_ADDRESS) chan->base; + cyg_uint32 uart_s1; + + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_S1, uart_s1); + } while (!(uart_s1 & CYGHWR_DEV_FREESCALE_UART_S1_TDRE)); + + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_D, ch_out); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* p_ch_in) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS uart_p = (CYG_ADDRESS) chan->base; + cyg_uint8 uart_s1; + cyg_uint8 ch_in; + + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_S1, uart_s1); + if (!(uart_s1 & CYGHWR_DEV_FREESCALE_UART_S1_RDRF)) + return false; + + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_D, ch_in); + *p_ch_in = ch_in; + + return true; +} + +cyg_uint8 CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + + +//============================================================================= +// Virtual vector HAL diagnostics + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +static void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* p_ch_in) +{ + int delay_count; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + // delay in .1 ms steps + delay_count = ((channel_data_t*)__ch_data)->msec_timeout * 10; + + for(;;) { + res = cyg_hal_plf_serial_getc_nonblock(__ch_data, p_ch_in); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS uart_p = ((channel_data_t*)__ch_data)->base; + cyg_uint8 ser_port_reg; + int ret = 0; + va_list ap; + + CYGARC_HAL_SAVE_GP(); + va_start(ap, __func); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + chan->irq_state = 1; + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + HAL_INTERRUPT_UNMASK(chan->isr_vector); + + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C2, ser_port_reg); + ser_port_reg |= CYGHWR_DEV_FREESCALE_UART_C2_RIE; + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C2, ser_port_reg); + + break; + case __COMMCTL_IRQ_DISABLE: + ret = chan->irq_state; + chan->irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C2, ser_port_reg); + ser_port_reg &= ~(cyg_uint8)CYGHWR_DEV_FREESCALE_UART_C2_RIE; + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C2, ser_port_reg); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + chan->baud_rate = va_arg(ap, cyg_int32); + // Should we verify this value here? + cyg_hal_plf_serial_init_channel(chan); + ret = 0; + break; + default: + break; + } + + va_end(ap); + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + + channel_data_t* chan = (channel_data_t*)__ch_data; + CYG_ADDRESS uart_p = (CYG_ADDRESS) chan->base; + cyg_uint8 uart_s1; + int res = 0; + cyg_uint8 ch_in; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_S1, uart_s1); + if (uart_s1 & CYGHWR_DEV_FREESCALE_UART_S1_RDRF) { + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_D, ch_in); + if( cyg_hal_is_break( (char *) &ch_in , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur; + int chan_i; + + cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Init channels + for(chan_i=0; chan_ibaud_rate = + CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD; + update_baud_rate( &plf_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL] ); +#endif +} + +void CYGOPT_HAL_KINETIS_DIAG_FLASH_SECTION_ATTR +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + initialized = 1; + cyg_hal_plf_serial_init(); +} + +#else // !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) +//============================================================================= +// Non-Virtual vector HAL diagnostics + +// #if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +void hal_plf_diag_init(void) +{ + cyg_hal_plf_serial_init( &plf_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL] ); +} + +void hal_plf_diag_putc(char c) +{ + cyg_hal_plf_serial_putc( &plf_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL], c); +} + +cyg_uint8 hal_plf_diag_getc(void) +{ + return cyg_hal_plf_serial_getc( &plf_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL] ); +} + +#endif // defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +//----------------------------------------------------------------------------- +// End of hal_diag.c diff --git a/packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c b/packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c @@ -0,0 +1,463 @@ +//========================================================================== +// +// kinetis_clocking.c +// +// Cortex-M Kinetis HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija kocho +// Date: 2011-10-19 +// Description: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include +#include // HAL header +#include // HAL header +#include // HAL header + +#include + +//=========================================================================== +// Forward declarations +//=========================================================================== + +cyg_uint32 hal_cortexm_systick_clock; +cyg_uint32 hal_kinetis_sysclk; +cyg_uint32 hal_kinetis_busclk; + +cyg_uint32 hal_get_cpu_clock(void); + +void hal_start_main_clock(void); +void hal_set_clock_dividers(void); +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_RTC +void hal_start_rtc_clock(void); +#endif + + +//========================================================================== +// Setup up system clocks +// +// Set up clocks from configuration. In the future this should be extended so +// that clock rates can be changed at runtime. + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_clocks( void ) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_TRACE_CLKOUT + cyghwr_hal_kinetis_port_t *port_p = CYGHWR_HAL_KINETIS_PORTA_P; +#endif +#if !defined(CYG_HAL_STARTUP_RAM) +# ifdef CYGHWR_HAL_CORTEXM_KINETIS_RTC + // Real Time Clock + hal_start_rtc_clock(); +# endif + hal_set_clock_dividers(); + // Main clock - MCG + hal_start_main_clock(); +#endif + // Trace clock +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_TRACECLK_CORE + sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_TRACECLKSEL_M; +#else + sim_p->sopt2 &= ~CYGHWR_HAL_KINETIS_SIM_SOPT2_TRACECLKSEL_M; +#endif +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_TRACE_CLKOUT + port_p->pcr[6] = CYGHWR_HAL_KINETIS_PORT_PCR_MUX(0x7); +#endif +} + + +#define MCG_WAIT_WHILE(_condition_) do{}while(_condition_) + +// Setup MCG +// Note: Currently only PBE mode is supported and tested. + +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL + +// MCG can have 1 or 2 PLL oscillators. +// PLL0 aka PLL is always present. +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_pll0(cyghwr_hal_kinetis_mcg_t *mcg_p) +{ + mcg_p->c5 = CYGHWR_HAL_KINETIS_MCG_C5_PRDIV( + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV-1) | + CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_M +# ifdef CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 + | CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_M +# endif //CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 + ; +# if CYGINT_HAL_CORTEXM_KINETIS_150 + mcg_p->c6 = CYGHWR_HAL_KINETIS_MCG_C6_VDIV( + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV-16); +# else + mcg_p->c6 = CYGHWR_HAL_KINETIS_MCG_C6_VDIV( + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV-24); +# endif + mcg_p->c5 |= CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_M; + MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_LOCK_M)); +} +#endif //CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL + +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + +// PLL1 Oscillator is present on some devices. +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_pll1(cyghwr_hal_kinetis_mcg_t *mcg_p) +{ + mcg_p->c11 = CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M; + mcg_p->c11 = CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1( + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_PRDIV-1) | + CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_M +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1 + | CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M +# endif +# ifdef CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_1 + | CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_M +# endif + ; + mcg_p->c12 = CYGHWR_HAL_KINETIS_MCG_C12_VDIV1( + CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_VDIV-16); + mcg_p->c11 |= CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_M; + MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M)); +} +#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + +// There are 1 or 2 external oscillators +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_ext_ref(void) +{ + volatile cyg_uint8 *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_P; + +# if defined CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_0 || \ + defined CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_0 +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL + // Set the oscillator 0 + *osc_cr_p = CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP / 2; +# elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_OSC + // Select external oscillator + *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_ERCLKEN_M | + CYGHWR_HAL_KINETIS_OSC_CR_EREFSTEN_M; +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL +# endif // CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_0 || ... + +# if defined CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 || \ + defined CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_1 +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL + // Set the oscillator 1 + osc_cr_p = CYGHWR_HAL_KINETIS_OSC1_CR_P; + *osc_cr_p = CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP / 2; +# elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_OSC + // Select external oscillator + *osc_cr_p = CYGHWR_HAL_KINETIS_OSC1_CR_ERCLKEN_M | + CYGHWR_HAL_KINETIS_OSC1_CR_EREFSTEN_M; +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL +# endif // CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 || ... +} +#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_main_clock(void) +{ + cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P; +#if defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL ||\ + defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1 ||\ + (defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC &&\ + CYGHWR_HAL_CORTEXM_KINETIS_REV == 1) + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; +#endif + +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC + // Select RTC clock source for MCG reference +# if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1 + sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_MCGCLKSEL_M; +# elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 + mcg_p->c7 |= CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_M; +# endif // CYGHWR_HAL_CORTEXM_KINETIS_REV == 2 +#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC + +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + hal_start_ext_ref(); +# endif + +#if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) + + mcg_p->c2 = CYGHWR_HAL_KINETIS_MCG_C2_RANGE( + CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE) +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL + | CYGHWR_HAL_KINETIS_MCG_C2_EREFS_M | CYGHWR_HAL_KINETIS_MCG_C2_HGO_M +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL + ; + + mcg_p->c1 = CYGHWR_HAL_KINETIS_MCG_C1_FRDIV( + CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV_REG) +# if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) + |CYGHWR_HAL_KINETIS_MCG_C1_CLKS(CYGHWR_HAL_KINETIS_MCG_C1_CLKS_EXT_REF) +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL* + ; + +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL + // Wait for oscillator start up + MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_OSCINIT_M)); +# endif +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL + // Wait for oscillator 1 start up + MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_M)); +# endif +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + // Wait for reference clock to switch to external reference + MCG_WAIT_WHILE(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_IREFST_M); + // Wait for status flags update + MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) != +# if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) + CYGHWR_HAL_KINETIS_MCG_S_CLKST_EXT +# else + CYGHWR_HAL_KINETIS_MCG_S_CLKST_FLL +# endif + ); +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT + +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL + // Configure FLL + mcg_p->c4 = (mcg_p->c4 & 0x1f) | + (CYGNUM_HAL_CORTEXM_MCG_DCO_DMX32 | + CYGHWR_HAL_KINETIS_MCG_C4_DRST_DRS( + CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS)); + +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL + +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL + hal_start_pll0(mcg_p); +# endif +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + hal_start_pll1(mcg_p); +# endif +# if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1) + // Switch to PBE mode + mcg_p->c6 |= CYGHWR_HAL_KINETIS_MCG_C6_PLLS_M; + + MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) != + CYGHWR_HAL_KINETIS_MCG_S_CLKST_EXT); + MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_PLLST_M)); +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL + MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_LOCK_M)); +# endif +# if defined CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M)); +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 + + // Enter PEE mode + mcg_p->c1 &= ~CYGHWR_HAL_KINETIS_MCG_C1_CLKS_M; + MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) != + CYGHWR_HAL_KINETIS_MCG_S_CLKST_PLL); +# endif // defined CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL* + +# if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \ + defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) + sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_PLLFLLSEL_M; +# endif + +#endif // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || + // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || + // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) || + // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) +} + +cyg_uint32 CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_get_cpu_clock(void) +{ + cyg_uint32 freq; +#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL + cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P; + +# if CYGINT_HAL_CORTEXM_KINETIS_150 + freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + ((mcg_p->c5 & CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_M)+1) * + ((mcg_p->c6 & CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M)+16) / 2; +# else + freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + ((mcg_p->c5 & CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_M)+1) * + ((mcg_p->c6 & CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M)+24); +# endif +#elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1 + cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P; + + freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ / + ((mcg_p->c11 & CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_M)+1) * + ((mcg_p->c12 & CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_M)+16) / 2; +#elif defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) + freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_FREQ_AV; +#elif defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK) + freq = CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC; +#else // ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_none +#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_end + + return freq; +} + + +// Clock dividers provide clock sources for various peripherals. + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_set_clock_dividers(void) +{ + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + + sim_p->clk_div1 = CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV1(0) | + CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV2( + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_PER_BUS-1) | + CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV3( + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLEX_BUS-1) | + CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4( + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_FLASH-1); + + sim_p->clk_div2 = CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBDIV( + CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_DIV-1) | + (CYGHWR_HAL_CORTEXM_KINETIS_USBCLK_FRAC==2 ? + CYGHWR_HAL_KINETIS_SIM_CLKDIV2_USBFRAC_M : 0); +} + +#ifdef CYGHWR_HAL_CORTEXM_KINETIS_RTC +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_start_rtc_clock(void) +{ + cyghwr_hal_kinetis_rtc_t *rtc_p = CYGHWR_HAL_KINETIS_RTC_P; + + rtc_p->ier=0; // Disable RTC interrupts + + //Start RTC clock if not already started + if(!(rtc_p->cr & CYGHWR_HAL_KINETIS_RTC_CR_OSCE)){ + rtc_p->cr = CYGHWR_HAL_KINETIS_RTC_CR_OSCE | + CYGHWR_HAL_CORTEXM_KINETIS_RTC_OSC_CAP; +# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC + { + volatile cyg_uint32 busycnt; + for(busycnt=1000000; busycnt; busycnt--) + __asm__ volatile ("nop\n"); + } +# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC + } +} +#endif + + +//========================================================================== +// UART baud rate +// +// Set the baud rate divider of a UART based on the requested rate and +// the current clock settings. + + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_freescale_uart_setbaud(cyg_uint32 uart_p, cyg_uint32 baud) +{ + cyg_uint32 sbr, brfa; + cyg_uint32 regval; + + switch(uart_p) { + case CYGADDR_IO_SERIAL_FREESCALE_UART0_BASE: + case CYGADDR_IO_SERIAL_FREESCALE_UART1_BASE: + sbr = hal_kinetis_sysclk/(16*baud); + break; + case CYGADDR_IO_SERIAL_FREESCALE_UART2_BASE: + case CYGADDR_IO_SERIAL_FREESCALE_UART3_BASE: + case CYGADDR_IO_SERIAL_FREESCALE_UART4_BASE: + case CYGADDR_IO_SERIAL_FREESCALE_UART5_BASE: + sbr = hal_kinetis_busclk/(16*baud); + break; + default: + sbr=0; + break; + } + if(sbr) { + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_BDH, regval); + regval &= 0xE0; + regval |= sbr >> 8; + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_BDH, regval); + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_BDL, (sbr & 0xFF)); + brfa = (((32*hal_kinetis_busclk)/(16*baud))-(32*sbr)); + HAL_READ_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C4, regval); + regval &= 0xE0; + regval |= brfa & 0x1f; + HAL_WRITE_UINT8(uart_p + CYGHWR_DEV_FREESCALE_UART_C4, regval); + } +} + + +void hal_update_clock_var(void) +{ + hal_kinetis_sysclk=hal_get_cpu_clock(); + hal_kinetis_busclk=hal_kinetis_sysclk / + CYGHWR_HAL_CORTEXM_KINETIS_CLKDIV_PER_BUS; + hal_cortexm_systick_clock=hal_kinetis_sysclk; +} + + +cyg_uint32 hal_get_peripheral_clock(void) +{ + return hal_kinetis_busclk; +} + +//========================================================================== +// EOF kinetis_clocking.c diff --git a/packages/hal/cortexm/kinetis/var/current/src/kinetis_ddram.c b/packages/hal/cortexm/kinetis/var/current/src/kinetis_ddram.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_ddram.c @@ -0,0 +1,129 @@ +//========================================================================== +// +// kinetis_ddram.c +// +// Cortex-M Kinetis HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija kocho +// Date: 2012-03-08 +// Description: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include +#include // HAL header +#include // HAL header +#include // HAL header + +// DDRAM Controller +#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC + +// DDRAM controller register indices. +const cyg_uint8 const kinetis_ddr_reg_ix[] = { + 0, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 20, 21, 22, 23, + 25, 26, 27, 28, 29, 30, + 34, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 52, 53, 54, 55, 56, 57 +}; + +// Initialize DDRAM controller. +// inidat[] is an array of ordered pairs: (register-index, register-value). +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_cortexm_kinetis_ddrmc_init(const cyg_uint32 inidat[]) +{ + cyghwr_hal_kinetis_ddrmc_t* ddrmc_p = CYGHWR_HAL_KINETIS_DDRMC_P; + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + volatile cyg_uint32* cr_p; + cyg_uint32 cr_ix; + cyg_uint32 cr_i; + cyg_uint32 regval; + + CYGHWR_IO_CLOCK_ENABLE(CYGHWR_HAL_KINETIS_SIM_SCGC_DDR); + + regval = sim_p->mcr & ~CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP_M; + sim_p->mcr = regval | CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP; + + ddrmc_p->rcr |= CYGHWR_HAL_KINETIS_DDRMC_RCR_RST_M; + ddrmc_p->pad_ctrl = CYGHWR_HAL_KINETIS_DDRMC_PAD_CTRL; + cr_p = ddrmc_p->cr; + for(cr_ix = 0; cr_ix < sizeof(kinetis_ddr_reg_ix); cr_ix++) { + cr_i = kinetis_ddr_reg_ix[cr_ix]; + cr_p[cr_i] = *inidat++; + }; + __asm__ volatile ("nop\n"); + ddrmc_p->cr[0] |= CYGHWR_HAL_KINETIS_DDRMC_CR00_START; + while(!(ddrmc_p->cr[30] & CYGHWR_HAL_KINETIS_DDRMC_CR30_DRAM_INIT_CPL)); +} + +void +hal_cortexm_kinetis_ddrmc_diag(void) +{ + cyghwr_hal_kinetis_ddrmc_t* ddrmc_p = CYGHWR_HAL_KINETIS_DDRMC_P; + cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P; + volatile cyg_uint32* cr_p; + cyg_uint32 cr_i; + + diag_printf("SCGC3 = 0x%08x, MCR = 0x%08x\n", sim_p->scgc3, sim_p->mcr); + diag_printf("RCR= 0x%08x, PAD_CTRL= 0x%08x\n", ddrmc_p->rcr, ddrmc_p->pad_ctrl); + cr_p = ddrmc_p->cr; + for(cr_i=0; cr_i < 64; cr_i++){ + diag_printf(" CR%02d = 0x%08x\n", cr_i, cr_p[cr_i]); + } +} + +#endif // CYGPKG_HAL_CORTEXM_KINETIS_DDRMC + +//========================================================================== +// EOF kinetis_ddram.c diff --git a/packages/hal/cortexm/kinetis/var/current/src/kinetis_gpio.c b/packages/hal/cortexm/kinetis/var/current/src/kinetis_gpio.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_gpio.c @@ -0,0 +1,146 @@ +//========================================================================== +// +// kinetis_gpio.c +// +// Cortex-M Kinetis HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2014-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#include +#include + +static cyghwr_hal_kinetis_gpio_t * const PortsGPIO[] = { + CYGHWR_HAL_KINETIS_GPIO_PORTA_P, CYGHWR_HAL_KINETIS_GPIO_PORTB_P, + CYGHWR_HAL_KINETIS_GPIO_PORTC_P, CYGHWR_HAL_KINETIS_GPIO_PORTD_P, + CYGHWR_HAL_KINETIS_GPIO_PORTE_P, CYGHWR_HAL_KINETIS_GPIO_PORTF_P +}; + +void +hal_gpio_pin_ddr_out(cyg_uint32 pin){ + cyghwr_hal_kinetis_gpio_t *port_p; + + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + port_p = PortsGPIO[CYGHWR_HAL_KINETIS_PIN_PORT(pin)]; + port_p->pddr |= BIT_(CYGHWR_HAL_KINETIS_PIN_BIT(pin)); + } +} + +void +hal_gpio_pin_ddr_in(cyg_uint32 pin){ + cyghwr_hal_kinetis_gpio_t *port_p; + + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + port_p = PortsGPIO[CYGHWR_HAL_KINETIS_PIN_PORT(pin)]; + port_p->pddr &= ~BIT_(CYGHWR_HAL_KINETIS_PIN_BIT(pin)); + } +} + +cyg_uint32 +hal_gpio_get_pin(cyg_uint32 pin){ + cyghwr_hal_kinetis_gpio_t *port_p; + cyg_uint32 retval = 0xffffffff; + + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + port_p = PortsGPIO[CYGHWR_HAL_KINETIS_PIN_PORT(pin)]; + retval = port_p->pdir & BIT_(CYGHWR_HAL_KINETIS_PIN_BIT(pin)); + } + return retval; +} + + +// GPIO register on a given port (register name is lower case) +#define CYGHWR_HAL_KINETIS_GPIO_PORT_OPER(__port, __mask, __opreg) \ +CYG_MACRO_START \ + cyghwr_hal_kinetis_gpio_t *port_p; \ + port_p = PortsGPIO[__port]; \ + port_p->__opreg = __mask; \ +CYG_MACRO_END + +#define CYGHWR_HAL_KINETIS_GPIO_PIN_OPER(__pin, __opreg) \ +CYG_MACRO_START \ +if(__pin != CYGHWR_HAL_KINETIS_PIN_NONE) \ + CYGHWR_HAL_KINETIS_GPIO_PORT_OPER(CYGHWR_HAL_KINETIS_PIN_PORT(__pin), \ + BIT_(CYGHWR_HAL_KINETIS_PIN_BIT(__pin)), __opreg); \ +CYG_MACRO_END + +// Port operations +// Bit operations (clear, set or toggle) are performed on port's bits +// that correspond to set bits in the mask parameter. + +void +hal_gpio_port_clear(cyg_uint32 port_i, cyg_uint32 mask){ + CYGHWR_HAL_KINETIS_GPIO_PORT_OPER(port_i, mask, pcor); +} + +void +hal_gpio_port_set(cyg_uint32 port_i, cyg_uint32 mask){ + CYGHWR_HAL_KINETIS_GPIO_PORT_OPER(port_i, mask, psor); +} + +void +hal_gpio_port_toggle(cyg_uint32 port_i, cyg_uint32 mask){ + CYGHWR_HAL_KINETIS_GPIO_PORT_OPER(port_i, mask, ptor); +} + +// Pin operations. +// Operation is performed to a given pin. Thin is addresses through +// a pin descriptor. Pin descriptor is typically created with CYGHWR_HAL_KINETIS_PIN_CFG() +// or CYGHWR_HAL_KINETIS_PIN() [ defined in var_io.h ] + +void +hal_gpio_pin_clear(cyg_uint32 pin){ + CYGHWR_HAL_KINETIS_GPIO_PIN_OPER(pin, pcor); +} + +void +hal_gpio_pin_set(cyg_uint32 pin){ + CYGHWR_HAL_KINETIS_GPIO_PIN_OPER(pin, psor); +} + +void +hal_gpio_pin_toggle(cyg_uint32 pin){ + CYGHWR_HAL_KINETIS_GPIO_PIN_OPER(pin, ptor); +} + +// EOF kinetis_gpio.c diff --git a/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c b/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c @@ -0,0 +1,309 @@ +//========================================================================== +// +// kinetis_misc.c +// +// Cortex-M Kinetis HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija kocho +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + + +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + + +#include +#include +#include // tracing macros +#include // assertion macros + +#include +#include // HAL header +#include // HAL header +#include // HAL header + +#include + +void sst25xx_freescale_dspi_reg(void); + +#if defined CYG_HAL_STARTUP_ROM && !defined CYG_HAL_STARTUP_RAM + +//=========================================================================== +// KINETIS FLASH configuration field +//=========================================================================== + +// Note: KINETIS FLASH configuration field must be present in Kinetis flash +// image and ocupy addresses 0x00000400 to 0x0000040f. + +// For ".flash_conf" section definition see MLT files. + +const cyghwr_hal_kinetis_flash_conf_t CYGHWR_HAL_KINETIS_FLASH_CONF_FIELD +__attribute__((section(".flash_conf"), used)) = { + .backdoor_key = CYGHWR_HAL_KINETIS_FLASH_CONF_BACKDOOR_KEY, + .fprot = CYGHWR_HAL_KINETIS_FLASH_CONF_FPROT, + .fsec = CYGHWR_HAL_KINETIS_FLASH_CONF_FSEC, + .fopt = CYGHWR_HAL_KINETIS_FLASH_CONF_FOPT, + .feprot = CYGHWR_HAL_KINETIS_FLASH_CONF_FEPROT, + .fdprot = CYGHWR_HAL_KINETIS_FLASH_CONF_FDPROT +}; + +const cyghwr_hal_kinetis_flash_conf_t * +CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_kinetis_flash_conf_p( void ) +{ + return &CYGHWR_HAL_KINETIS_FLASH_CONF_FIELD; +} + +#endif // defined CYG_HAL_STARTUP_ROM && !defined CYG_HAL_STARTUP_RAM + +//=== KINETIS FLASH security configuration END. ============================ + +#if defined CYGPKG_HAL_KINETIS_CACHE + +// Function for demotion of caching memory regions +static void +hal_cortexm_kinetis_conf_cache_regions(cyghwr_hal_kinetis_lmem_t* lmem_p, + cyg_uint32 reg_n, const cyg_uint32 *reg_mode_p) +{ + cyg_uint32 region; + cyg_uint32 mode; + cyg_uint32 regval; + cyg_uint32 reg_mode; + + regval = lmem_p->rmr; + for(; reg_n; reg_n--){ + reg_mode = *reg_mode_p++; + region = reg_mode >> 16; + mode = reg_mode & 0x0000ffff; + regval &= ~(0x3 << (15-region)*2); + regval |= mode << (15-region)*2; + } + lmem_p->rmr = regval; +} + +const cyg_uint32 cache_reg_modes_pc[] = { + (CYGHWR_HAL_KINETIS_LMEM_DRAM_7000 << 16) | + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M, + + (CYGHWR_HAL_KINETIS_LMEM_DRAM_8000 << 16) | + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M +}; + +const cyg_uint32 cache_reg_modes_ps[] = { + (CYGHWR_HAL_KINETIS_LMEM_FLASH_0000 << 16) | + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M, + + (CYGHWR_HAL_KINETIS_LMEM_DRAM_0800 << 16) | + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M, + + (CYGHWR_HAL_KINETIS_LMEM_DRAM_7000 << 16) | +#if defined CYGSEM_HAL_DCACHE_STARTUP_MODE_WRITETHRU + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WT_M, +#elif defined CYGSEM_HAL_DCACHE_STARTUP_MODE_COPYBACK + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WB_M, +#else + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M, +#endif + + (CYGHWR_HAL_KINETIS_LMEM_DRAM_8000 << 16) | + CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M +}; + +#endif // defined CYGPKG_HAL_KINETIS_CACHE + +//========================================================================== +// Setup variant specific hardware +//========================================================================= + +void hal_variant_init( void ) +{ +#if defined CYGPKG_HAL_KINETIS_CACHE +# if defined CYG_HAL_STARTUP_RAM + register CYG_INTERRUPT_STATE oldints; +# endif +#endif + + hal_update_clock_var(); + +#if defined CYGPKG_HAL_KINETIS_CACHE +# if defined CYG_HAL_STARTUP_RAM + HAL_DISABLE_INTERRUPTS(oldints); + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_PURGE_ALL(); + HAL_ICACHE_DISABLE(); + HAL_ICACHE_INVALIDATE_ALL(); +# endif // defined CYG_HAL_STARTUP_RAM + hal_cortexm_kinetis_conf_cache_regions(CYGHWR_HAL_KINETIS_LMEM_PS_P, + sizeof(cache_reg_modes_ps)/sizeof(cache_reg_modes_ps[0]), + cache_reg_modes_ps); + hal_cortexm_kinetis_conf_cache_regions(CYGHWR_HAL_KINETIS_LMEM_PC_P, + sizeof(cache_reg_modes_pc)/sizeof(cache_reg_modes_pc[0]), + cache_reg_modes_pc); +# if defined CYG_HAL_STARTUP_RAM + HAL_RESTORE_INTERRUPTS(oldints); +# endif +# ifdef CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP + HAL_ICACHE_ENABLE(); +# endif +# ifdef CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP + HAL_DCACHE_ENABLE(); +# endif +#endif // defined CYGPKG_HAL_KINETIS_CACHE + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + hal_if_init(); +#endif +} + +//=========================================================================== +// The WDOG at Freescale Kinetis is enabled after reset. hal_wdog_disable +// provides functionality for disabling it at startup. +//=========================================================================== + +static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_kinetis_wdog_unlock_simple(volatile CygHwr_HAL_Kinetis_wdog_t *wdog_p) +{ + wdog_p->Unlock = 0xC520; + wdog_p->Unlock = 0xD928; +} + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_kinetis_wdog_unlock(volatile CygHwr_HAL_Kinetis_wdog_t *wdog_p) +{ + CYGARC_CPSID( i ); + hal_kinetis_wdog_unlock_simple(wdog_p); + CYGARC_CPSIE( i ); +} + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_wdog_disable(void) +{ + volatile CygHwr_HAL_Kinetis_wdog_t *wdog_p = CYGHWR_HAL_KINETIS_WDOG_P; + hal_kinetis_wdog_unlock_simple(wdog_p); + wdog_p->StCtrlH = CYGHWR_HAL_KINETIS_WDOG_STCTRLH_ALLOWUPDATE_M; +} + +//========================================================================== +// Pin configuration functions +// + +static cyghwr_hal_kinetis_port_t * const Ports[] = { + CYGHWR_HAL_KINETIS_PORTA_P, CYGHWR_HAL_KINETIS_PORTB_P, + CYGHWR_HAL_KINETIS_PORTC_P, CYGHWR_HAL_KINETIS_PORTD_P, + CYGHWR_HAL_KINETIS_PORTE_P, CYGHWR_HAL_KINETIS_PORTF_P +}; + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_set_pin_function(cyg_uint32 pin) +{ + cyghwr_hal_kinetis_port_t *port_p; + + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + port_p = Ports[CYGHWR_HAL_KINETIS_PIN_PORT(pin)]; + port_p->pcr[CYGHWR_HAL_KINETIS_PIN_BIT(pin)] = + CYGHWR_HAL_KINETIS_PIN_FUNC(pin); + } +} + +void +hal_dump_pin_function(cyg_uint32 pin) +{ + cyghwr_hal_kinetis_port_t *port_p; + + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + port_p = Ports[CYGHWR_HAL_KINETIS_PIN_PORT(pin)]; + diag_printf("Port %d: %p[%d] fun=%x\n", + CYGHWR_HAL_KINETIS_PIN_PORT(pin), + port_p, + CYGHWR_HAL_KINETIS_PIN_BIT(pin), + port_p->pcr[CYGHWR_HAL_KINETIS_PIN_BIT(pin)]); + } +} + +void +hal_dump_pin_setting(cyg_uint32 pin) +{ + if(pin != CYGHWR_HAL_KINETIS_PIN_NONE) { + diag_printf("Pin: 0x%08x Port=%d bit=%d fun=%x\n", + pin, + CYGHWR_HAL_KINETIS_PIN_PORT(pin), + CYGHWR_HAL_KINETIS_PIN_BIT(pin), + CYGHWR_HAL_KINETIS_PIN_FUNC(pin)); + } +} + +//========================================================================== +// Clock distribution +// + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_clock_enable(cyg_uint32 desc) +{ + volatile cyg_uint32 *scgc_p; + + if(desc != CYGHWR_HAL_SCGC_NONE) { + scgc_p = &CYGHWR_HAL_KINETIS_SIM_P->scgc1 + + CYGHWR_HAL_KINETIS_SIM_SCGC_REG(desc); + *scgc_p |= 1 << CYGHWR_HAL_KINETIS_SIM_SCGC_BIT(desc); + } +} + +void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR +hal_clock_disable(cyg_uint32 desc) +{ + volatile cyg_uint32 *scgc_p; + + if(desc != CYGHWR_HAL_SCGC_NONE) { + scgc_p = &CYGHWR_HAL_KINETIS_SIM_P->scgc1 + + CYGHWR_HAL_KINETIS_SIM_SCGC_REG(desc); + *scgc_p &= ~(1 << CYGHWR_HAL_KINETIS_SIM_SCGC_BIT(desc)); + } +} + +//========================================================================== +// EOF kinetis_misc.c diff --git a/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog b/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog @@ -0,0 +1,39 @@ +2011-02-09 John Dallaway + + * doc/ek_lm3s811.sgml: Eliminate underscores in SGML ID strings. They + cause problems for some installations of openjade. + + * cdl/hal_cortexm_ek_lm3s811.cdl: Fix documentation filename to match + the above change. + +2011-01-18 Christophe Coutand + + * cdl/hal_cortexm_ek_lm3s811.cdl: + * doc/ek_lm3s811.sgml: + * src/ek_lm3s811_misc.c: + * src/platform_i2c.c: + New package -- Stellaris Cortex-M3 EK-LM3S811 platform HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl b/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl @@ -0,0 +1,78 @@ +# ==================================================================== +## +## hal_cortexm_ek_lm3s811.cdl +## +## Stellaris Cortex-M3 EK-LM3S811 board platform HAL +## +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ccoutand +# Contributors: +# Date: 2011-01-18 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_EK_LM3S811 { + display "Stellaris EK-LM3S811 Development Board HAL" + doc ref/hal-cortexm-lm3s-ek-lm3s811.html + parent CYGPKG_HAL_CORTEXM_LM3S8XX + define_header hal_cortexm_ek_lm3s811.h + include_dir cyg/hal + hardware + + description " + The EK-LM3S811 HAL package provides the support needed to run + eCos on the Stellaris EK-LM3S811 EVAL board." + + compile ek_lm3s811_misc.c platform_i2c.c + + requires { CYGHWR_HAL_CORTEXM_LM3S == "LM3S8XX" } + requires { CYGHWR_HAL_CORTEXM_LM3S8XX == "LM3S811" } + requires { CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ == 6000000 } + requires { CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT == 1 } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#include " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M3 - LM3S811\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Stellaris EK-LM3S811\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } +} + +# EOF hal_cortexm_ek_lm3s811.cdl diff --git a/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml b/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Stellaris EKK-LM3S811 Board Support + + + + Overview + + + eCos Support for the Stellaris EKK-LM3S811 Board + Overview + + + Description + +The Stellaris EKK-LM3S811 evaluation kit uses the Stellaris LM3S811 microcontroller from the +800 Series. The LM3S811 is an ARM cortex-M3 based microcontroller with 64KB of FLASH +and 8KB of SRAM. The device has various peripherals such as UART, I2C, ADC or Analog +Comparator. The kit features an OLED graphical display and UART0 is accessible via the +on-board USB to UART converter. + + +Due to extreme limited RAM ressources (8KB SRAM only), the eCos port targets standalone ROM +application using the eCos kernel in single user thread environment. The cortex-M architecture HAL +requires a seperate stack to handle interrupts, thus the minimum kernel enable application requires 3 +stacks. The interrupt stack, the Idle thread stack and the user stack. All stacks are set to the architecture +minimum allowed size of CYGNUM_HAL_STACK_SIZE_MINIMUM ( 1360 bytes ). + + + + Configuration + +The minimum board configuration includes the Microcontroller HAL alongs with the ADC and I2C device +drivers. + + + + LM3S811 Microcontroller + + +CYGPKG_HAL_CORTEXM_LM3S8XX - The microcontroller configuration +requirements are minimal. With the default setup, the microcontroller runs from the +external clock source, a crystal of 6MHz. The chip internal PLL generates a fix +200MHz clock that is divided down to the default system clock frequency of 50MHz. +In this scenario, the device uses full processing power. The system clock divider +allows down scaling of the system clock frequency to reduce the overall power +consumption of the device. The microcontroller also offers the option to run from an +internal oscillator. This option has 2 modes, 3MHz or 12MHz. When selecting the +internal oscillator, the PLL is bypassed. The system clock frequency becomes at +best 12MHz if no further clock division is applied. + + + + + + I2C Interface + +CYGPKG_DEVS_I2C_CORTEXM_LM3S - The microcontroller uses the I2C bus +to communicate with the SD1300 controller of the OLED 96 x 16 display. The SD1300 +controller eCos driver is not currently available. +The I2C is default set to use the low frequency mode ( 100KHz bus clock ). The high +frequency mode ( 400 KHz ) is available by changing CYGNUM_HAL_CORTEXM_LM3S_I2C_CLK_SPEED. + + + + ADC Interface + +CYGPKG_DEVS_ADC_CORTEXM_LM3S - The LM3S811 includes 4 ADC channels including an +optional internal temperature probe. There are many ways to use the on-chip ADC. +The current eCos driver uses a single sequencer (sequencer 0) to schedule sampling of all +channels. This practically means that all channels are sampled from the same trigger, a periodic timer +interrupt in the current driver. The timer to use +is selected from CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_SELECT_TIMER, with timer 0 as +default value. The timer is used in 32 bits periodic mode, therefore cannot be re-used +for any other user purpose. While the ADC has the possibility to trigger sampling on external +IO events, the driver does not offer that flexibility. Finally, the driver only allows measurement of +single-ended IOs. + + + + + + Build ROM type applications + +The steps needed to build the HAL library for the EKK-LM3S811 board are: + + +$ mkdir ek_lm3s811 +$ cd ek_lm3s811 +$ ecosconfig new ek-lm3s811 minimal +$ ecosconfig import $ECOS_REPOSITORY/hal/cortexm/lm3s/ek_lm3s811/current/misc/default_ROM.ecm +$ ecosconfig resolve +$ ecosconfig tree +$ make + + +At the end of the build the install/lib subdirectory should contain the library and linker script and the install/include subdirectory the necessary includes to compile the application. + + + + + + + diff --git a/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c b/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c @@ -0,0 +1,163 @@ +//========================================================================== +// +// ek_lm3s811_misc.c +// +// Cortex-M3 Stellaris EK-LM3S811 HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Original for STM3210E EVAL: nickg +// Updated for EK-LM3S811: ccoutand +// Date: 2011-01-18 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include +#include +#include // tracing macros +#include // assertion macros + +#include +#include + + +// On-board status LED +#define CYGHWR_HAL_EK_LM3S811_STATUS_LED \ + CYGHWR_HAL_LM3S_GPIO( C, 5, OUT, 4_MA, PULLUP, DISABLE ) + +// OLED regulator control +#define CYGHWR_HAL_EK_LM3S811_OLED_PWD \ + CYGHWR_HAL_LM3S_GPIO( D, 7, OUT, NONE, NONE, DISABLE ) + + +//========================================================================== +// Drive OLED power ON/OFF IO + +__externC void +hal_ek_lm3s811_oled_pwd( bool pwd ) +{ + cyg_uint32 oled_pwd_io = CYGHWR_HAL_EK_LM3S811_OLED_PWD; + + // Power ON regulator + if ( pwd == true ) + CYGHWR_HAL_LM3S_GPIO_OUT( oled_pwd_io, 1 ); + else + CYGHWR_HAL_LM3S_GPIO_OUT( oled_pwd_io, 0 ); +} + + +//========================================================================== +// Setup platform + +__externC void +hal_platform_init( void ) +{ + cyg_uint32 led_io = CYGHWR_HAL_EK_LM3S811_STATUS_LED; + cyg_uint32 oled_pwd_io = CYGHWR_HAL_EK_LM3S811_OLED_PWD; + + // OLED power switch IO is on port D and user LED on port C + CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOC, 1 ); + CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOD, 1 ); + CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_I2C0, 0 ); + + // Status LED -> ON + CYGHWR_HAL_LM3S_GPIO_SET( led_io ); + CYGHWR_HAL_LM3S_GPIO_OUT( led_io, 1 ); + + // Shutdown power regulator + CYGHWR_HAL_LM3S_GPIO_SET( oled_pwd_io ); + + hal_ek_lm3s811_oled_pwd( false ); +} + + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = { +#ifdef CYGMEM_REGION_sram // On-chip SRAM + { + CYGMEM_REGION_sram, CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE - 1}, +#endif +#ifdef CYGMEM_REGION_flash // On-chip flash + { + CYGMEM_REGION_flash, + CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1}, +#endif + { + 0xE0000000, 0x00000000 - 1}, // Cortex-M peripherals + { + 0x40000000, 0x50000000 - 1}, // Stellaris peripherals +}; + +__externC int +cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof( hal_data_access ) / sizeof( hal_data_access[0] ); + i++ ) { + if( ( addr >= hal_data_access[i].start ) + && ( addr + count ) <= hal_data_access[i].end ) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + + +//========================================================================== +// EOF ek_lm3s811_misc.c diff --git a/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c b/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c @@ -0,0 +1,178 @@ +//========================================================================== +// +// platform_i2c.c +// +// Optional I2C support for Cortex-M3 Stellaris EK-LM3S811 +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +//============================================================================= +// INCLUDES +//============================================================================= +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_DEVS_I2C_CORTEXM_LM3S + +#include +#include + +//============================================================================= +// Setup I2C bus 0 +// +static void +lm3s8xx_i2c0_init( struct cyg_i2c_bus *bus ) +{ + cyg_uint32 scl_io = CYGHWR_HAL_LM3S_I2C_SCL; + cyg_uint32 sda_io = CYGHWR_HAL_LM3S_I2C_SDA; + + // + // We only need to setup the pins here and + // leave the I2C driver to take care of the rest. + // + CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOB, 1 ); + CYGHWR_HAL_LM3S_GPIO_SET( scl_io ); + CYGHWR_HAL_LM3S_GPIO_SET( sda_io ); + lm3s_i2c_init( bus ); +} + + +//----------------------------------------------------------------------------- +// I2C bus 0 +// +CYG_LM3S_I2C_BUS(hal_lm3s8xx_i2c0_bus, + &lm3s8xx_i2c0_init, + CYGHWR_HAL_LM3S_I2C_M0, + CYGHWR_HAL_LM3S_P_I2C0, + CYGNUM_HAL_INTERRUPT_I2C, + 0x60, + 10); + + +//----------------------------------------------------------------------------- +// OLED +// +CYG_I2C_DEVICE(i2c_lm3s8xx_oled, + &hal_lm3s8xx_i2c0_bus, + 0x3d, + 0, + CYG_I2C_DEFAULT_DELAY); + + +#define DELAY 1 + +// Wrapper to TI OLED driver + +externC cyg_uint32 +lm3s8xx_oled_write_first( cyg_uint8 byte ) +{ + cyg_uint32 result; + + cyg_i2c_transaction_begin( &i2c_lm3s8xx_oled ); + + result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled, + true, ( cyg_uint8 * )&byte, 1, false ); + +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + return result; +} + +externC cyg_uint32 +lm3s8xx_oled_write_byte( cyg_uint8 byte ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled, + false, ( cyg_uint8 * )&byte, 1, false ); + +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + return result; +} + + +externC cyg_uint32 +lm3s8xx_oled_write_array( const cyg_uint8 *array, cyg_uint32 count ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled, + false, array, count, false ); + + return result; +} + + +externC cyg_uint32 +lm3s8xx_oled_write_final( cyg_uint8 byte ) +{ + cyg_uint32 result; + + result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled, + false, ( cyg_uint8 * )&byte, 1, true ); +#ifdef CYGPKG_KERNEL + cyg_thread_delay( DELAY ); +#endif + + cyg_i2c_transaction_end( &i2c_lm3s8xx_oled ); + + return result; +} + +#endif // #ifdef CYGPKG_DEVS_I2C_CORTEXM_LM3S + +//----------------------------------------------------------------------------- +// EOF platform_i2c.c diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog b/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog @@ -0,0 +1,42 @@ +2011-05-04 John Dallaway + + * include/plf_io.h: Fix determination when CYGHWR_HAL_LM3S_ADC0_CHAN + should be 8. Patch from Anatoly Sokolov. [ Bugzilla 1001222 ] + +2011-01-18 Christophe Coutand + + * cdl/hal_cortexm_lm3s8xx.cdl: + * include/pkgconf/mlt_cortexm_ek_lm3s811_rom.h: + * include/pkgconf/mlt_cortexm_ek_lm3s811_rom.ldi: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * misc/default_ROM.ecm: + * src/lm3s8xx_misc.c: + * tests/timers.c: + New package -- Stellaris Cortex M3 800 Series HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== + diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl b/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl @@ -0,0 +1,390 @@ +##========================================================================== +## +## hal_cortexm_lm8xx.cdl +## +## Stellaris Cortex-M3 800 Series variant HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand +## Date: 2011-01-18 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_LM3S8XX { + display "Stellaris Cortex-M3 800 Series" + parent CYGPKG_HAL_CORTEXM + include_dir cyg/hal + define_header hal_cortexm_lm3s8xx.h + hardware + description " + This package provides generic support for the Cortex-M3 based + Stellaris LM 800 Series microcontroller family. It is also + necessary to select a variant and platform HAL package." + + compile lm3s8xx_misc.c + + implements CYGINT_DEVS_I2C_LM3S8XX_BUS_DEVICES + + requires { CYGHWR_HAL_CORTEXM_LM3S == "LM3S8XX" } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_IO_H" + } + + cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX { + display "Stellaris LM 800 Series variant in use" + flavor data + default_value { "LM3S811" } + legal_values { "LM3S828" "LM3S818" "LM3S817" + "LM3S815" "LM3S812" "LM3S811" + "LM3S808" "LM3S801" "LM3S800" } + description " + The Stellaris 800 Series has several variants, the main + difference being the numbers of some peripherals" + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + no_define + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + } + + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value 1000000 / CYGNUM_HAL_RTC_DENOMINATOR + } + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value { "ROM" } + legal_values { "ROM" } + no_define + define -file system.h CYG_HAL_STARTUP + description " + With its 8KB of SRAM, the 800 Series devices only allows + ROM startup." + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "ROM") ? \ + "cortexm_lm3s8xx_rom" : "undefined" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + } + + cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK { + display "Clocking" + flavor none + requires { CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT || \ + CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT } + + cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT { + display "External clock source" + active_if ! CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT + flavor bool + default_value 1 + + cdl_option CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ { + display "Crystal frequency in Hz" + flavor data + default_value 8000000 + legal_values { 1000000 to 8192000 } + description " + Select the external crystal frequency from 1 to + 8.192 MHz. Selecting the internal PLL adds additional + constraints to the external crystal frequency setting. + Check-out CYGHWR_HAL_CORTEXM_LM3S8XX_PLL" + } + } + + cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT { + display "Internal clock source" + active_if ! CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT + flavor bool + default_value 0 + + cdl_option CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ { + display "Internal clock source frequency in Hz" + flavor data + default_value 12000000 + legal_values { 12000000 3000000 } + description " + Select the internal clock source. The frequency of the + internal clock source can either be 12MHz or 3MHz." + } + } + + cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_PLL { + display "Enable PLL" + flavor bool + default_value 1 + active_if CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT + + cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT { + display "PLL input clock frequency" + flavor data + calculated { CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ } + legal_values { 3579545 3686400 4000000 4096000 4915200 5000000 \ + 5120000 6000000 6144000 7372800 8000000 8192000 } + description " + PLL output frequency is fixed to 200 MHz. Using the + PLL puts more constraints to the external reference + clock. The PLL input clock frequency is not defined + if internal chip reference clock is used." + } + } + + cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK { + display "System Clock frequency" + flavor data + calculated { CYGHWR_HAL_CORTEXM_LM3S8XX_PLL ? ( 200000000 / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) : CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT ? ( CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL_FREQ / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) : ( CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) } + legal_values { 1000000 to 50000000 } + description " + The chip system clock frequency is 200 MHz divided + by the system clock divider when the PLL is in used, + otherwise the frequency value is the chip source clock + frequency divided by the system clock divider." + } + + cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV { + display "System Clock divider" + flavor data + default_value 4 + legal_values { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 } + description " + Select the system clock divider." + } + } + + # UART0 is available for diagnostic/debug use. + implements CYGINT_HAL_CORTEXM_LM3S_UART0 + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + This option selects which port will be used to connect to + a host running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + This option selects which port will be used for diagnostic + output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. Note: this should match the value chosen + for the GDB port if the diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the GDB + connection. Note: this should match the value chosen for + the console port if the console and GDB port are the same." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over compiler flags, + linker flags and choice of toolchain." + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which + are used to compile all packages by default. Individual + packages may define options which override these global + flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global + flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a + ROM monitor, i.e. applications will be loaded into RAM on + the board, and this ROM monitor may process exceptions or + interrupts generated from the application. This enables + features such as utilizing a separate interrupt stack when + exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM + monitor. This support changes various eCos semantics such + as the encoding of diagnostic output, or the overriding of + hardware interrupt vectors. + Firstly there is \"Generic\" support which prevents the + HAL from overriding the hardware vectors that it does not + use, to instead allow an installed ROM monitor to handle + them. This is the most basic support which is likely to be + common to most implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included + in the ROM monitor or boot ROM." + } + + cdl_component CYGBLD_HAL_CORTEXM_LM3S8XX_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" } + description " + This component causes the ELF image generated by the build + process to be converted to S-Record and binary files." + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + + cdl_option CYGPKG_HAL_CORTEXM_LM3S8XX_TESTS { + display "Stellaris Cortex-M3 800 Series tests" + active_if CYGPKG_KERNEL + flavor data + no_define + calculated { "tests/timers" } + description " + This option specifies the set of tests for the Stellaris + Cortex-M3 800 Series HAL." + } +} + +# EOF hal_cortex_lm3s8xx.cdl diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h @@ -0,0 +1,19 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00002000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (0x00010000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram_SIZE (0x00000000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi @@ -0,0 +1,34 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00002000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x00000000, LENGTH = 0x00010000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, 0x20000400, FOLLOWING (.got)) + SECTION_data (sram, ALIGN (0x8), FOLLOWING (.sram)) + SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x20000000 + 1024*8; + diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h @@ -0,0 +1,60 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Stellaris Cortex-M3 800 Series specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_ARCH_H +// EOF plf_arch.h diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Stellaris Cortex-M3 800 Series specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_FMS) + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_INTR_H +// EOF plf_intr.h diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h @@ -0,0 +1,153 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Stellaris Cortex-M3 800 Series specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= +#include + +// Number of IOs on port A / B and C +#define CYGHWR_HAL_LM3S_GPIOA_IOs 6 +#define CYGHWR_HAL_LM3S_GPIOB_IOs 8 +#define CYGHWR_HAL_LM3S_GPIOC_IOs 8 + +// Number of IOs on port D and E varies +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) +#define CYGHWR_HAL_LM3S_GPIOD_IOs 8 +#define CYGHWR_HAL_LM3S_GPIOE_IOs 6 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828) +#define CYGHWR_HAL_LM3S_GPIOD_IOs 4 +#define CYGHWR_HAL_LM3S_GPIOE_IOs 2 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) +#define CYGHWR_HAL_LM3S_GPIOD_IOs 8 +#define CYGHWR_HAL_LM3S_GPIOE_IOs 2 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) +#define CYGHWR_HAL_LM3S_GPIOD_IOs 8 +#define CYGHWR_HAL_LM3S_GPIOE_IOs 4 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817)|| \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818) +#define CYGHWR_HAL_LM3S_GPIOD_IOs 6 +#define CYGHWR_HAL_LM3S_GPIOE_IOs 2 +#endif + +// UART1 +#define CYGHWR_HAL_LM3S_UART1_TX CYGHWR_HAL_LM3S_GPIO( D, 2, PERIPH, NONE, NONE, DISABLE ) +#define CYGHWR_HAL_LM3S_UART1_RX CYGHWR_HAL_LM3S_GPIO( D, 3, PERIPH, NONE, NONE, DISABLE ) +#define CYGHWR_HAL_LM3S_P_UART1_GPIO CYGHWR_HAL_LM3S_P_GPIOD + +// Number of ADC channel +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) +#define CYGHWR_HAL_LM3S_ADC0_CHAN 2 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) +#define CYGHWR_HAL_LM3S_ADC0_CHAN 4 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818) +#define CYGHWR_HAL_LM3S_ADC0_CHAN 6 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) +#define CYGHWR_HAL_LM3S_ADC0_CHAN 8 +#endif + +// Number of PWM channel +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) +#define CYGHWR_HAL_LM3S_MAX_PWM_CHAN 2 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818) +#define CYGHWR_HAL_LM3S_PWM_CHAN 6 +#endif + +// Number of I2C channels +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828) +#define CYGHWR_HAL_LM3S_I2C_CHAN 1 +// I2C +#define CYGHWR_HAL_LM3S_I2C_SCL CYGHWR_HAL_LM3S_GPIO( B, 3, PERIPH, 2_MA, OP_PULLUP, DISABLE ) +#define CYGHWR_HAL_LM3S_I2C_SDA CYGHWR_HAL_LM3S_GPIO( B, 2, PERIPH, 2_MA, OP_PULLUP, DISABLE ) +#endif + +// Number of analog Comparator +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) +#define CYGHWR_HAL_LM3S_AC_CHAN 3 +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818) +#define CYGHWR_HAL_LM3S_AC_CHAN 1 +#endif + +// Number of Quadrature Encoder Channel +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \ + defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818) +#define CYGHWR_HAL_LM3S_QEI_CHAN 1 +#endif + +// SSI channel +#define CYGHWR_HAL_LM3S_SSI_CHAN 1 + +// Global timer channel +#define CYGHWR_HAL_LM3S_GPTIM_CHAN 3 + +//----------------------------------------------------------------------------- +#endif //CYGONCE_HAL_PLF_IO_H +// EOF plf_io.h diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm b/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm @@ -0,0 +1,22 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + template minimal ; + package CYGPKG_KERNEL current ; +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 1536 +}; + +cdl_option CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE { + user_value 1536 +}; \ No newline at end of file diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c b/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c @@ -0,0 +1,246 @@ +//========================================================================== +// +// lm3s8xx_misc.c +// +// Stellaris Cortex-M3 800 Series HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2010-11-21 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header +#include + +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL) +#if CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 3579545 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(4) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 3686400 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(5) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4000000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(6) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4096000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(7) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4915200 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(8) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 5000000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(9) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 5120000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(10) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 6000000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(11) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 6144000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(12) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 7372800 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(13) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 8000000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(14) +#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 8192000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(15) +#endif +#endif + +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT) +#if CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ == 12000000 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC +#else +#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC_DIV4 +#endif +#else +#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MOSC +#endif + +#if CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV != 1 +#define CYGHWR_HAL_CORTEXM_LM3S8XX_SC_RCC_SYSDIV_VAL \ + CYGHWR_HAL_LM3S_SC_RCC_SYSDIV( (CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV-1) ); +#endif + +//========================================================================== + +void hal_lm3s8xx_periph_set( cyg_uint32 periph, cyg_uint32 on_off ); + +__externC cyg_uint32 hal_cortexm_systick_clock; +__externC cyg_uint32 hal_lm3s_sysclk; + +//========================================================================== +// System init +// +// This code runs before the DATA is copied from ROM and the BSS cleared, +// hence it cannot make use of static variables or data tables. + +__externC void +hal_system_init( void ) +{ +} + + +//========================================================================== +// Setup up system clocks +// +void +hal_start_clocks( void ) +{ + CYG_ADDRESS sc = CYGHWR_HAL_LM3S_SC; + cyg_uint32 rcc; +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL) + cyg_uint32 plllmis = CYGHWR_HAL_LM3S_SC_MISC_PLLLMIS; + cyg_uint32 plllris = CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS; + volatile cyg_uint16 wait; +#endif + + // At power up, the LM3S8xx is setup to use external oscillator. + // The PLL is powered down and bypass. Same goes for the system + // clock divider. + + // For JTAG cold restart, first we make sure the PLL and system + // clock divider are bypassed, enable all clock source and shutdown + // the PLL. + + HAL_READ_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + + rcc &= ~( CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV | + CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS | + CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS ); + + rcc |= CYGHWR_HAL_LM3S_SC_RCC_BYPASS; + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + + rcc |= ( CYGHWR_HAL_LM3S_SC_RCC_PWRDN | CYGHWR_HAL_LM3S_SC_RCC_OEN ); + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + + // PLL is setup if in use + // + // The XTAL frequency is configured. The PLL is powered and + // its output is enable + + // Setup Clock Source + rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD; + +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL) + + // Clear PLL lock bit + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_MISC, plllmis ); + + rcc &= ~( CYGHWR_HAL_LM3S_SC_RCC_XTAL_MASK | + ( CYGHWR_HAL_LM3S_SC_RCC_PWRDN ) | + ( CYGHWR_HAL_LM3S_SC_RCC_OEN ) ); + + rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL; + +#endif + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + + // + // Setup System Clock divider + // + +#if CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV != 1 + + // Use system clock divider + rcc |= CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV; + + // Clear system clock divider bits + rcc &= ~CYGHWR_HAL_LM3S_SC_RCC_SYSDIV_MASK; + + // Configure divider + rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_SC_RCC_SYSDIV_VAL; + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + +#endif + + // Wait for PLL lock before feeding the clock to the + // device + +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL) + + // Wait for PLL lock, potentially a dead lock + plllris = 0; + while ( 0 == ( plllris & CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS ) ) { + // Wait + for ( wait = 0; wait < ( ( 2 ^ 16 ) - 1 ); wait++ ) + HAL_READ_UINT32( sc + CYGHWR_HAL_LM3S_SC_RIS, plllris ); + } + + // Clear bypass bit + rcc &= ~CYGHWR_HAL_LM3S_SC_RCC_BYPASS; + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + +#endif + + // + // Disable clock source not in use + // +#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT) + + rcc |= CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS; + +#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT) + + rcc |= CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS; + +#endif + + HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc ); + + hal_cortexm_systick_clock = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK; + hal_lm3s_sysclk = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK; +} + +//========================================================================== +// EOF lm3s8xx_misc.c diff --git a/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c b/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c @@ -0,0 +1,359 @@ +//============================================================================= +// +// timers.c +// +// Test for Stellaris Cortex-M3 Device Timers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg for STM32 +// ccoutand updated for Stellaris Cortex-M3 Devices +// Date: 2011-01-18 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#if defined(CYGPKG_KERNEL) +#include +#endif + +#include + +//============================================================================= +// Check all required packages and components are present + +#if !defined(CYGPKG_KERNEL) || !defined(CYGPKG_KERNEL_API) +# define NA_MSG "Configuration insufficient" +#endif + +//============================================================================= +// If everything is present, compile the full test. + +#ifndef NA_MSG + +#include +#include +#include + +#include +#include +#include + +//============================================================================= + +#define LOOPS 24 // 2 minutes +#define SINGLE_TIMER 0 // Full / Single timer test + +static int test_stack[( CYGNUM_HAL_STACK_SIZE_MINIMUM / sizeof( int ) )]; +static cyg_thread test_thread; +static cyg_handle_t main_thread; + +//============================================================================= + +struct timer { + cyg_uint32 timer; + cyg_uint32 base; + cyg_uint32 periph; + cyg_uint32 vector; + cyg_uint32 priority; + cyg_uint32 interval; + + cyg_uint32 ticks; + + cyg_uint32 preempt[10]; + + cyg_uint32 preempt_dsr[10]; + cyg_uint32 dsr_count[10]; + + cyg_interrupt interrupt_object; + cyg_handle_t interrupt_handle; +}; + +struct timer timers[] = { +#if SINGLE_TIMER + {1, CYGHWR_HAL_LM3S_GPTIM0, CYGHWR_HAL_LM3S_P_TIMER0, + CYGNUM_HAL_INTERRUPT_GTIM0_A, 0x20, 1000}, +#else + {1, CYGHWR_HAL_LM3S_GPTIM0, CYGHWR_HAL_LM3S_P_TIMER0, + CYGNUM_HAL_INTERRUPT_GTIM0_A, 0x20, 127}, + {2, CYGHWR_HAL_LM3S_GPTIM1, CYGHWR_HAL_LM3S_P_TIMER1, + CYGNUM_HAL_INTERRUPT_GTIM1_A, 0x60, 355}, + {3, CYGHWR_HAL_LM3S_GPTIM2, CYGHWR_HAL_LM3S_P_TIMER2, + CYGNUM_HAL_INTERRUPT_GTIM2_A, 0x80, 731}, +#endif + {0, 0, 0, 0} +}; + + +//============================================================================= + +volatile cyg_uint32 ticks = 0; +volatile cyg_uint32 nesting = 0; +volatile cyg_uint32 max_nesting = 0; +volatile cyg_uint32 max_nesting_seen = 0; +volatile cyg_uint32 current = 0; +volatile cyg_uint32 in_dsr = 0; + + +//============================================================================= + +void +init_timer( cyg_uint32 base, cyg_uint32 periph, cyg_uint32 interval ) +{ + cyg_uint32 period = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK; + + CYGHWR_HAL_LM3S_PERIPH_SET( periph, 1 ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CTL, 0x0000 ); + + period = period / 1000000; + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAPR, period ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CFG, + CYGHWR_HAL_LM3S_GPTIM_CFG_16BIT ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAMR, + CYGHWR_HAL_LM3S_GPTIM_TAMR_PERIODIC ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAILR, interval ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_ICR, + CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_IMR, + CYGHWR_HAL_LM3S_GPTIM_IMR_TATOIM ); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CTL, + CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN ); +} + + +//============================================================================= + +cyg_uint32 +timer_isr( cyg_uint32 vector, CYG_ADDRWORD data ) +{ + struct timer *t = ( struct timer * )data; + cyg_uint32 preempt = current; + CYG_ADDRWORD base = t->base; + cyg_uint32 cnt; + + current = t->timer; + t->ticks++; + ticks++; + t->preempt[preempt]++; + nesting++; + + // Count only first ISR to preempt a DSR + if( preempt == 0 ) + t->preempt_dsr[in_dsr]++; + + HAL_WRITE_UINT32( t->base + CYGHWR_HAL_LM3S_GPTIM_ICR, + CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT ); + + if( nesting > max_nesting ) + max_nesting = nesting; + + // Loiter here for a proportion of the timer interval to give + // other timers the chance to preempt us. + do { + HAL_READ_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAR, cnt ); + } while( cnt < t->interval / 10 ); + + nesting--; + current = preempt; + + if( ( t->ticks % 10 ) == 0 ) + return 3; + else + return 1; +} + + +//============================================================================= + +void +timer_dsr( cyg_uint32 vector, cyg_uint32 count, CYG_ADDRWORD data ) +{ + struct timer *t = ( struct timer * )data; + int i; + + in_dsr = t->timer; + + if( count >= 8 ) + count = 8; + + t->dsr_count[count]++; + + // Loiter for a while + for( i = 0; i < t->interval / 10; i++ ) + continue; + + in_dsr = 0; +} + + +//============================================================================= + +void +timers_test( cyg_addrword_t data ) +{ + int loops = LOOPS; + int i; + CYG_INTERRUPT_STATE istate; + + CYG_TEST_INIT( ); + + CYG_TEST_INFO( "Start Timers test" ); + + for( i = 0; timers[i].timer != 0; i++ ) { + struct timer *t = &timers[i]; + + init_timer( t->base, t->periph, t->interval ); + + cyg_interrupt_create( t->vector, + t->priority, + ( cyg_addrword_t )t, + timer_isr, + timer_dsr, + &t->interrupt_handle, &t->interrupt_object ); + + cyg_interrupt_attach( t->interrupt_handle ); + cyg_interrupt_unmask( t->vector ); + + } + + while( loops-- ) { + int j; + + // 5 second delay + cyg_thread_delay( 5 * 100 ); + + // Disable interrupts while we print details, otherwise it + // comes out very slowly. + HAL_DISABLE_INTERRUPTS( istate ); + + if( max_nesting > max_nesting_seen ) + max_nesting_seen = max_nesting; + + diag_printf( "\nISRs max_nesting %d max_nesting_seen %d\n", + max_nesting, max_nesting_seen ); + max_nesting = 0; + + diag_printf( " T Ticks " ); + + for( j = 0; j < 9; j++ ) + diag_printf( "%9d ", j ); + diag_printf( "\n" ); + + for( i = 0; timers[i].timer != 0; i++ ) { + struct timer *t = &timers[i]; + + diag_printf( "%2d: %9d ", t->timer, t->ticks ); + + for( j = 0; j < 9; j++ ) + diag_printf( "%9d ", t->preempt[j] ); + diag_printf( "\n" ); + + } + + diag_printf( "DSRs\n" ); + + diag_printf( " T: " ); + + for( j = 0; j < 9; j++ ) + diag_printf( "%9d ", j ); + diag_printf( "\n" ); + + for( i = 0; timers[i].timer != 0; i++ ) { + struct timer *t = &timers[i]; + + diag_printf( "%2d: preempt: ", t->timer ); + + for( j = 0; j < 9; j++ ) + diag_printf( "%9d ", t->preempt_dsr[j] ); + diag_printf( "\n" ); + + diag_printf( " count: " ); + + for( j = 0; j < 9; j++ ) + diag_printf( "%9d ", t->dsr_count[j] ); + diag_printf( "\n" ); + } + + HAL_RESTORE_INTERRUPTS( istate ); + } + + CYG_TEST_PASS_FINISH( "Timers test" ); +} + + +//============================================================================= + +void +cyg_user_start( void ) +{ + cyg_thread_create( 0, // Priority + timers_test, // + 0, // + "timers test", // Name + test_stack, // Stack + CYGNUM_HAL_STACK_SIZE_MINIMUM, // Stack size + &main_thread, // Handle + &test_thread // Thread data structure + ); + cyg_thread_resume( main_thread ); +} + +//============================================================================= + +#else // NA_MSG + +void +cyg_user_start( void ) +{ + CYG_TEST_NA( NA_MSG ); +} + +#endif // NA_MSG + +//============================================================================= +// EOF timers.c diff --git a/packages/hal/cortexm/lm3s/var/current/ChangeLog b/packages/hal/cortexm/lm3s/var/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/ChangeLog @@ -0,0 +1,38 @@ +2011-01-18 Christophe Coutand + + * cdl/hal_cortexm_lm3s.cdl + * include/hal_cache.h: + * include/hal_diag.h: + * include/plf_stub.h: + * include/var_arch.h: + * include/variant.inc: + * include/var_intr.h: + * include/var_io.h: + * src/hal_diag.c: + * src/lm3s_misc.c: + New package -- Stellaris Cortex M3 variant HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== + diff --git a/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl b/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl @@ -0,0 +1,123 @@ +##========================================================================== +## +## hal_cortexm_lm3s.cdl +## +## Stellaris Cortex-M3 variant HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ccoutand +## Date: 2011-01-18 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_LM3S { + display "Stellaris Cortex-M3 from Luminary Micro variant HAL" + parent CYGPKG_HAL_CORTEXM + define_header hal_cortexm_lm3s.h + include_dir cyg/hal + hardware + description " + This package provides generic support for the Cortex-M3 based + Stellaris microcontroller family. It is also necessary to select + a variant and platform HAL package." + + compile hal_diag.c lm3s_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + + requires { CYGHWR_HAL_CORTEXM == "M3" } + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + + # Let the architectural HAL see this variant's files + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_IO_H" + puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_ARCH_H" + } + + cdl_option CYGHWR_HAL_CORTEXM_LM3S { + display "Stellaris Cortex-M3 variant in use" + flavor data + default_value { "LM3S8XX" } + legal_values { "LM3S8XX" } + description " + Currently only supported the Stellaris Cortex-M3 800 Series." + } + + cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS { + display "CPU priority levels" + flavor data + calculated 3 + description " + This option defines the number of bits used to encode the + exception priority levels that this variant of the Cortex-M3 + CPU implements." + } + + cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY { + display "Clock interrupt ISR priority" + flavor data + calculated 0xC0 + description " + Set clock ISR priority to lowest priority." + } + + cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART0 { + display "Platform has UART0 serial port" + description " + The platform has a socket on UART0." + } + + cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART1 { + display "Platform has UART1 serial port" + description " + The platform has a socket on UART1." + } + + cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART2 { + display "Platform has UART2 serial port" + description " + The platform has a socket on UART2." + } + +} + +# EOF hal_cortex_lm3s.cdl diff --git a/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h b/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h @@ -0,0 +1,66 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2011-01-18 +// Purpose: Cache control API +// Description: The Stellaris LM3S Cortex-M3 microcontroller does not require +// cache control. File is kept empty. +// +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h b/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h @@ -0,0 +1,88 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H +//============================================================================= +// +// hal_diag.h +// +// HAL diagnostics +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: HAL diagnostics +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +# define HAL_DIAG_INIT() hal_if_diag_init() +# define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +# define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else + +__externC void hal_lm3s_diag_init(void); +__externC void hal_lm3s_diag_putc(char); +__externC cyg_uint8 hal_lm3s_diag_getc(void); + +# ifndef HAL_DIAG_INIT +# define HAL_DIAG_INIT() hal_lm3s_diag_init() +# endif + +# ifndef HAL_DIAG_WRITE_CHAR +# define HAL_DIAG_WRITE_CHAR(__c) hal_lm3s_diag_putc(__c) +# endif + +# ifndef HAL_DIAG_READ_CHAR +# define HAL_DIAG_READ_CHAR(__c) (__c) = hal_lm3s_diag_getc() +# endif + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_DIAG_H +// EOF of hal_diag.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h b/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h @@ -0,0 +1,88 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Platform HAL stub support for Stellaris Cortex-M3 +// variant boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +#include + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +__externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. + +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/var_arch.h b/packages/hal/cortexm/lm3s/var/current/include/var_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/var_arch.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H +//============================================================================= +// +// var_arch.h +// +// Stellaris Cortex-M3 variant architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Stellaris Cortex-M3 variant architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#include + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_ARCH_H +// EOF of var_arch.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/var_intr.h b/packages/hal/cortexm/lm3s/var/current/include/var_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/var_intr.h @@ -0,0 +1,119 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H +//========================================================================== +// +// var_intr.h +// +// HAL Interrupt and clock assignments for Stellaris Cortex-M3 variants +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for Stellaris Cortex-M3 +// are defined here. +// +// Usage: #include +// However applications should include using +// instead to allow for platform overrides. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_GPIOA (0+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOB (1+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOC (2+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOD (3+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOE (4+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART0 (5+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART1 (6+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SSI0 (7+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C (8+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_PWM0 (10+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_PWM1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_PWM2 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_QIE (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ADC0_S0 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ADC0_S1 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ADC0_S2 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ADC0_S3 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_WDT (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM0_A (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM0_B (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM1_A (21+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM1_B (22+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM2_A (23+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM2_B (24+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_AC0 (25+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_AC1 (26+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_AC2 (27+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SCTL (28+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_FMS (29+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOF (30+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOG (31+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GPIOH (32+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM3_A (35+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_GTIM3_B (36+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN0 (39+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ETH0 (42+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_HIM (43+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#ifndef CYGNUM_HAL_INTERRUPT_NVIC_MAX +# define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_HIM) +#endif + +#define CYGNUM_HAL_ISR_MIN 0 +#ifndef CYGNUM_HAL_ISR_MAX +# define CYGNUM_HAL_ISR_MAX (CYGNUM_HAL_INTERRUPT_NVIC_MAX) +#endif +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +#define CYGNUM_HAL_VSR_MIN 0 +#ifndef CYGNUM_HAL_VSR_MAX +# define CYGNUM_HAL_VSR_MAX (CYGNUM_HAL_VECTOR_SYS_TICK+CYGNUM_HAL_INTERRUPT_NVIC_MAX) +#endif +#define CYGNUM_HAL_VSR_COUNT (CYGNUM_HAL_VSR_MAX+1) + + +//---------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_INTR_H +// EOF var_intr.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/var_io.h b/packages/hal/cortexm/lm3s/var/current/include/var_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/var_io.h @@ -0,0 +1,1371 @@ +#ifndef CYGONCE_HAL_VAR_IO_H +#define CYGONCE_HAL_VAR_IO_H +//============================================================================= +// +// var_io.h +// +// Variant specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Purpose: Stellaris Cortex-M3 variant specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +//============================================================================= +// Peripherals + +#define CYGHWR_HAL_LM3S_FLASH 0x00000000 +#define CYGHWR_HAL_LM3S_SRAM 0x20000000 + +#define CYGHWR_HAL_LM3S_WDT0 0x40000000 +#define CYGHWR_HAL_LM3S_GPIOA 0x40004000 +#define CYGHWR_HAL_LM3S_GPIOB 0x40005000 +#define CYGHWR_HAL_LM3S_GPIOC 0x40006000 +#define CYGHWR_HAL_LM3S_GPIOD 0x40007000 +#define CYGHWR_HAL_LM3S_SSI0 0x40008000 +#define CYGHWR_HAL_LM3S_SSI1 0x40009000 +#define CYGHWR_HAL_LM3S_UART0 0x4000C000 +#define CYGHWR_HAL_LM3S_UART1 0x4000D000 +#define CYGHWR_HAL_LM3S_UART2 0x4000E000 +#define CYGHWR_HAL_LM3S_I2C_M0 0x40020000 +#define CYGHWR_HAL_LM3S_I2C_S0 0x40020800 +#define CYGHWR_HAL_LM3S_GPIOE 0x40024000 +#define CYGHWR_HAL_LM3S_GPIOF 0x40025000 +#define CYGHWR_HAL_LM3S_GPIOG 0x40026000 +#define CYGHWR_HAL_LM3S_GPIOH 0x40027000 +#define CYGHWR_HAL_LM3S_PWM 0x40028000 +#define CYGHWR_HAL_LM3S_QEI0 0x4002C000 +#define CYGHWR_HAL_LM3S_GPTIM0 0x40030000 +#define CYGHWR_HAL_LM3S_GPTIM1 0x40031000 +#define CYGHWR_HAL_LM3S_GPTIM2 0x40032000 +#define CYGHWR_HAL_LM3S_GPTIM3 0x40033000 +#define CYGHWR_HAL_LM3S_ADC0 0x40038000 +#define CYGHWR_HAL_LM3S_AC 0x4003C000 +#define CYGHWR_HAL_LM3S_CAN0 0x40040000 +#define CYGHWR_HAL_LM3S_ETH0 0x40048000 +#define CYGHWR_HAL_LM3S_FMC 0x400FD000 +#define CYGHWR_HAL_LM3S_SC 0x400FE000 + +#define CYGHWR_HAL_LM3S_ITM 0xE0000000 +#define CYGHWR_HAL_LM3S_DWT 0xE0001000 +#define CYGHWR_HAL_LM3S_FPB 0xE0002000 +#define CYGHWR_HAL_LM3S_CORTEXM3 0xE000E000 +#define CYGHWR_HAL_LM3S_TPIU 0xE0040000 + + +//============================================================================= +// Device signature and ID registers + +#define CYGHWR_HAL_LM3S_MCU_ID (CYGHWR_HAL_LM3S_CORTEXM3 + 0xD00) +#define CYGHWR_HAL_LM3S_MCU_ID_REV(__x) ((__x)&0xF) +#define CYGHWR_HAL_LM3S_MCU_PART_NO(__x) (((__x)>>4)&0x0FFF) +#define CYGHWR_HAL_LM3S_MCU_VAR_NO(__x) (((__x)>>20)&0xF) + + +//============================================================================= +// System Control + +#define CYGHWR_HAL_LM3S_SC_DID0 0x000 +#define CYGHWR_HAL_LM3S_SC_DID1 0x004 +#define CYGHWR_HAL_LM3S_SC_DIC0 0x008 +#define CYGHWR_HAL_LM3S_SC_DIC1 0x010 +#define CYGHWR_HAL_LM3S_SC_DIC2 0x014 +#define CYGHWR_HAL_LM3S_SC_DIC3 0x018 +#define CYGHWR_HAL_LM3S_SC_DIC4 0x01c +#define CYGHWR_HAL_LM3S_SC_PBORCTL 0x030 +#define CYGHWR_HAL_LM3S_SC_LDORCTL 0x034 +#define CYGHWR_HAL_LM3S_SC_SRCR0 0x040 +#define CYGHWR_HAL_LM3S_SC_SRCR1 0x044 +#define CYGHWR_HAL_LM3S_SC_SRCR2 0x048 +#define CYGHWR_HAL_LM3S_SC_RIS 0x050 +#define CYGHWR_HAL_LM3S_SC_IMC 0x054 +#define CYGHWR_HAL_LM3S_SC_MISC 0x058 +#define CYGHWR_HAL_LM3S_SC_RESC 0x05C +#define CYGHWR_HAL_LM3S_SC_RCC 0x060 +#define CYGHWR_HAL_LM3S_SC_PLLCFG 0x064 +#define CYGHWR_HAL_LM3S_SC_RCGC0 0x100 +#define CYGHWR_HAL_LM3S_SC_RCGC1 0x104 +#define CYGHWR_HAL_LM3S_SC_RCGC2 0x108 +#define CYGHWR_HAL_LM3S_SC_SCGC0 0x110 +#define CYGHWR_HAL_LM3S_SC_SCGC1 0x114 +#define CYGHWR_HAL_LM3S_SC_SCGC2 0x118 +#define CYGHWR_HAL_LM3S_SC_DCGC0 0x120 +#define CYGHWR_HAL_LM3S_SC_DCGC1 0x124 +#define CYGHWR_HAL_LM3S_SC_DCGC2 0x128 +#define CYGHWR_HAL_LM3S_SC_FMPRE 0x130 +#define CYGHWR_HAL_LM3S_SC_FMPPE 0x134 +#define CYGHWR_HAL_LM3S_SC_USECRL 0x140 +#define CYGHWR_HAL_LM3S_SC_DSLPCLKCFG 0x144 +#define CYGHWR_HAL_LM3S_SC_CLKVCLR 0x150 +#define CYGHWR_HAL_LM3S_SC_LDOARST 0x160 + +// PBORCTL bits +#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORWT BIT_(0) +#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORIOR BIT_(1) +#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORTIM(__x) VALUE_(2,__x) + +// RIS bits +#define CYGHWR_HAL_LM3S_SC_RIS_PLLFRIS BIT_(0) +#define CYGHWR_HAL_LM3S_SC_RIS_BORRIS BIT_(1) +#define CYGHWR_HAL_LM3S_SC_RIS_LDORIS BIT_(2) +#define CYGHWR_HAL_LM3S_SC_RIS_MOFRIS BIT_(3) +#define CYGHWR_HAL_LM3S_SC_RIS_IOFRIS BIT_(4) +#define CYGHWR_HAL_LM3S_SC_RIS_CLFRIS BIT_(5) +#define CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS BIT_(6) + +// IMC bits +#define CYGHWR_HAL_LM3S_SC_IMC_PLLFIM BIT_(0) +#define CYGHWR_HAL_LM3S_SC_IMC_BORRIM BIT_(1) +#define CYGHWR_HAL_LM3S_SC_IMC_LDOIM BIT_(2) +#define CYGHWR_HAL_LM3S_SC_IMC_MOFIM BIT_(3) +#define CYGHWR_HAL_LM3S_SC_IMC_IOFIM BIT_(4) +#define CYGHWR_HAL_LM3S_SC_IMC_CLIM BIT_(5) +#define CYGHWR_HAL_LM3S_SC_IMC_PLLLFIM BIT_(6) + +// MISC bits +#define CYGHWR_HAL_LM3S_SC_MISC_BORMIS BIT_(1) +#define CYGHWR_HAL_LM3S_SC_MISC_LDOMIS BIT_(2) +#define CYGHWR_HAL_LM3S_SC_MISC_MOFMIS BIT_(3) +#define CYGHWR_HAL_LM3S_SC_MISC_IOFMIS BIT_(4) +#define CYGHWR_HAL_LM3S_SC_MISC_CLMIS BIT_(5) +#define CYGHWR_HAL_LM3S_SC_MISC_PLLLMIS BIT_(6) + +// RESC bits +#define CYGHWR_HAL_LM3S_SC_RESC_EXT BIT_(0) +#define CYGHWR_HAL_LM3S_SC_RESC_POR BIT_(1) +#define CYGHWR_HAL_LM3S_SC_RESC_BOR BIT_(2) +#define CYGHWR_HAL_LM3S_SC_RESC_WDT BIT_(3) +#define CYGHWR_HAL_LM3S_SC_RESC_SW BIT_(4) +#define CYGHWR_HAL_LM3S_SC_RESC_LDO BIT_(5) + +// RCC bits +#define CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS BIT_(0) +#define CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS BIT_(1) +#define CYGHWR_HAL_LM3S_SC_RCC_MOSCVER BIT_(2) +#define CYGHWR_HAL_LM3S_SC_RCC_IOSCVER BIT_(3) +#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MOSC VALUE_(4,0) +#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC VALUE_(4,1) +#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC_DIV4 VALUE_(4,2) +#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MASK 0x00000030 +#define CYGHWR_HAL_LM3S_SC_RCC_XTAL(__x) VALUE_(6,__x) +#define CYGHWR_HAL_LM3S_SC_RCC_XTAL_MASK 0x000003C0 +#define CYGHWR_HAL_LM3S_SC_RCC_PLLVER BIT_(10) +#define CYGHWR_HAL_LM3S_SC_RCC_BYPASS BIT_(11) +#define CYGHWR_HAL_LM3S_SC_RCC_OEN BIT_(12) +#define CYGHWR_HAL_LM3S_SC_RCC_PWRDN BIT_(13) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV2 VALUE_(14, 0x0) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV4 VALUE_(14, 0x1) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV8 VALUE_(14, 0x2) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV16 VALUE_(14, 0x3) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV32 VALUE_(14, 0x4) +#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV64 VALUE_(14, 0x5) +#define CYGHWR_HAL_LM3S_SC_RCC_USEPWMDIV BIT_(20) +#define CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV BIT_(22) +#define CYGHWR_HAL_LM3S_SC_RCC_SYSDIV(__x) VALUE_(23, __x) +#define CYGHWR_HAL_LM3S_SC_RCC_SYSDIV_MASK 0x07800000 +#define CYGHWR_HAL_LM3S_SC_RCC_ACG BIT_(27) + +// DSLPCLKCFG bits +#define CYGHWR_HAL_LM3S_SC_DSLPCLKCFG_IOSC BIT_(0) + +// CLKVCLR bits +#define CYGHWR_HAL_LM3S_SC_CLKVCLR_VERCLR BIT_(0) + +// LDOARST bits +#define CYGHWR_HAL_LM3S_SC_LDOARST_BIT BIT_(0) + +// RCGC0 bits +#define CYGHWR_HAL_LM3S_SC_RCGC0_WDT0 BIT_(3) +#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_125K VALUE_(8, 0x0) +#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_250K VALUE_(8, 0x1) +#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_500K VALUE_(8, 0x2) +#define CYGHWR_HAL_LM3S_SC_RCGC0_ADC0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_RCGC0_PWM0 BIT_(20) + +// SCGC0 bits +#define CYGHWR_HAL_LM3S_SC_SCGC0_WDT0 BIT_(3) +#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_125K VALUE_(8, 0x0) +#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_250K VALUE_(8, 0x1) +#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_500K VALUE_(8, 0x2) +#define CYGHWR_HAL_LM3S_SC_SCGC0_ADC0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_SCGC0_PWM0 BIT_(20) + +// DCGC0 bits +#define CYGHWR_HAL_LM3S_SC_DCGC0_WDT0 BIT_(3) +#define CYGHWR_HAL_LM3S_SC_DCGC0_ADC0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_DCGC0_PWM0 BIT_(20) + +// RCGC1 bits +#define CYGHWR_HAL_LM3S_SC_RCGC1_UART0 BIT_(0) +#define CYGHWR_HAL_LM3S_SC_RCGC1_UART1 BIT_(1) +#define CYGHWR_HAL_LM3S_SC_RCGC1_SSI0 BIT_(4) +#define CYGHWR_HAL_LM3S_SC_RCGC1_I2C0 BIT_(12) +#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER1 BIT_(17) +#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER2 BIT_(18) +#define CYGHWR_HAL_LM3S_SC_RCGC1_COMP0 BIT_(24) + +// SCSG1 bits +#define CYGHWR_HAL_LM3S_SC_SCGC1_UART0 BIT_(0) +#define CYGHWR_HAL_LM3S_SC_SCGC1_UART1 BIT_(1) +#define CYGHWR_HAL_LM3S_SC_SCGC1_SSI0 BIT_(4) +#define CYGHWR_HAL_LM3S_SC_SCGC1_I2C0 BIT_(12) +#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER1 BIT_(17) +#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER2 BIT_(18) +#define CYGHWR_HAL_LM3S_SC_SCGC1_COMP0 BIT_(24) + +// DCSG1 bits +#define CYGHWR_HAL_LM3S_SC_DCGC1_UART0 BIT_(0) +#define CYGHWR_HAL_LM3S_SC_DCGC1_UART1 BIT_(1) +#define CYGHWR_HAL_LM3S_SC_DCGC1_SSI0 BIT_(4) +#define CYGHWR_HAL_LM3S_SC_DCGC1_I2C0 BIT_(12) +#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER0 BIT_(16) +#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER1 BIT_(17) +#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER2 BIT_(18) +#define CYGHWR_HAL_LM3S_SC_DCGC1_COMP0 BIT_(24) + +// RCGC2 bits +#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOA BIT_(0) +#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOB BIT_(1) +#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOC BIT_(2) +#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOD BIT_(3) +#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOE BIT_(4) + +// SCSG2 bits +#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOA BIT_(0) +#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOB BIT_(1) +#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOC BIT_(2) +#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOD BIT_(3) +#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOE BIT_(4) + +// DCSG2 bits +#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOA BIT_(0) +#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOB BIT_(1) +#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOC BIT_(2) +#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOD BIT_(3) +#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOE BIT_(4) + +// Define peripheral +#define CYGHWR_HAL_LM3S_PERIPH_GC0 BIT_(31) +#define CYGHWR_HAL_LM3S_P_WDT0 ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_WDT0 ) +#define CYGHWR_HAL_LM3S_P_ADC0 ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_ADC0 ) +#define CYGHWR_HAL_LM3S_P_PWM ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_PWM0 ) +#define CYGHWR_HAL_LM3S_PERIPH_GC1 BIT_(30) +#define CYGHWR_HAL_LM3S_P_UART0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_UART0 ) +#define CYGHWR_HAL_LM3S_P_UART1 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_UART1 ) +#define CYGHWR_HAL_LM3S_P_SSI0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_SSI0 ) +#define CYGHWR_HAL_LM3S_P_I2C0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_I2C0 ) +#define CYGHWR_HAL_LM3S_P_TIMER0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER0 ) +#define CYGHWR_HAL_LM3S_P_TIMER1 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER1 ) +#define CYGHWR_HAL_LM3S_P_TIMER2 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER2 ) +#define CYGHWR_HAL_LM3S_P_COMP0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_COMP0 ) +#define CYGHWR_HAL_LM3S_PERIPH_GC2 BIT_(29) +#define CYGHWR_HAL_LM3S_P_GPIOA ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOA ) +#define CYGHWR_HAL_LM3S_P_GPIOB ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOB ) +#define CYGHWR_HAL_LM3S_P_GPIOC ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOC ) +#define CYGHWR_HAL_LM3S_P_GPIOD ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOD ) +#define CYGHWR_HAL_LM3S_P_GPIOE ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOE ) + +__externC void hal_lm3s_periph_set( cyg_uint32 periph, cyg_uint32 on_off ); + +#define CYGHWR_HAL_LM3S_PERIPH_SET(__periph, __on_off ) hal_lm3s_periph_set( __periph, __on_off ) + +//============================================================================= +// Watchdog + +#define CYGHWR_HAL_LM3S_WDT_LOAD 0x000 +#define CYGHWR_HAL_LM3S_WDT_VALUE 0x004 +#define CYGHWR_HAL_LM3S_WDT_CTL 0x008 +#define CYGHWR_HAL_LM3S_WDT_ICR 0x00c +#define CYGHWR_HAL_LM3S_WDT_RIS 0x010 +#define CYGHWR_HAL_LM3S_WDT_MIS 0x014 +#define CYGHWR_HAL_LM3S_WDT_TEST 0x418 +#define CYGHWR_HAL_LM3S_WDT_LOCK 0xc00 +#define CYGHWR_HAL_LM3S_WDT_PID4 0xfd0 +#define CYGHWR_HAL_LM3S_WDT_PID5 0xfd4 +#define CYGHWR_HAL_LM3S_WDT_PID6 0xfd8 +#define CYGHWR_HAL_LM3S_WDT_PID7 0xfdc +#define CYGHWR_HAL_LM3S_WDT_PID0 0xfe0 +#define CYGHWR_HAL_LM3S_WDT_PID1 0xfe4 +#define CYGHWR_HAL_LM3S_WDT_PID2 0xfe8 +#define CYGHWR_HAL_LM3S_WDT_PID3 0xfec +#define CYGHWR_HAL_LM3S_WDT_PCID0 0xff0 +#define CYGHWR_HAL_LM3S_WDT_PCID1 0xff4 +#define CYGHWR_HAL_LM3S_WDT_PCID2 0xff8 +#define CYGHWR_HAL_LM3S_WDT_PCID3 0xffc + + +#define CYGHWR_HAL_LM3S_WDT_CTL_INTEN BIT_(0) +#define CYGHWR_HAL_LM3S_WDT_CTL_RESEN BIT_(1) + +#define CYGHWR_HAL_LM3S_WDT_RIS_RIS BIT_(0) + +#define CYGHWR_HAL_LM3S_WDT_MIS_MIS BIT_(0) + +#define CYGHWR_HAL_LM3S_WDT_TEST_STALL BIT_(8) + +#define CYGHWR_HAL_LM3S_WDT_PID(__x) ((__x)&0xFF) +#define CYGHWR_HAL_LM3S_WDT_PCID(__x) ((__x)&0xFF) + + +//============================================================================= +// GPIO ports + +#define CYGHWR_HAL_LM3S_GPIO_DATA 0x000 +#define CYGHWR_HAL_LM3S_GPIO_DIR 0x400 +#define CYGHWR_HAL_LM3S_GPIO_IS 0x404 +#define CYGHWR_HAL_LM3S_GPIO_IBE 0x408 +#define CYGHWR_HAL_LM3S_GPIO_IEV 0x40c +#define CYGHWR_HAL_LM3S_GPIO_IM 0x410 +#define CYGHWR_HAL_LM3S_GPIO_RIS 0x414 +#define CYGHWR_HAL_LM3S_GPIO_MIS 0x418 +#define CYGHWR_HAL_LM3S_GPIO_ICR 0x41c +#define CYGHWR_HAL_LM3S_GPIO_AFSEL 0x420 +#define CYGHWR_HAL_LM3S_GPIO_DR2R 0x500 +#define CYGHWR_HAL_LM3S_GPIO_DR4R 0x504 +#define CYGHWR_HAL_LM3S_GPIO_DR8R 0x508 +#define CYGHWR_HAL_LM3S_GPIO_ODR 0x50c +#define CYGHWR_HAL_LM3S_GPIO_PUR 0x510 +#define CYGHWR_HAL_LM3S_GPIO_PDR 0x514 +#define CYGHWR_HAL_LM3S_GPIO_SLR 0x518 +#define CYGHWR_HAL_LM3S_GPIO_DEN 0x51c +#define CYGHWR_HAL_LM3S_GPIO_PID4 0xfd0 +#define CYGHWR_HAL_LM3S_GPIO_PID5 0xfd4 +#define CYGHWR_HAL_LM3S_GPIO_PID6 0xfd8 +#define CYGHWR_HAL_LM3S_GPIO_PID7 0xfdc +#define CYGHWR_HAL_LM3S_GPIO_PID0 0xfe0 +#define CYGHWR_HAL_LM3S_GPIO_PID1 0xfe4 +#define CYGHWR_HAL_LM3S_GPIO_PID2 0xfe8 +#define CYGHWR_HAL_LM3S_GPIO_PID3 0xfec +#define CYGHWR_HAL_LM3S_GPIO_PCID0 0xff0 +#define CYGHWR_HAL_LM3S_GPIO_PCID1 0xff4 +#define CYGHWR_HAL_LM3S_GPIO_PCID2 0xff8 +#define CYGHWR_HAL_LM3S_GPIO_PCID3 0xffc + +#define CYGHWR_HAL_LM3S_GPIO_DIR_IN VALUE_(0,0) // Input mode +#define CYGHWR_HAL_LM3S_GPIO_DIR_OUT VALUE_(0,1) // Output mode + +#define CYGHWR_HAL_LM3S_GPIO_IS_EDGE_SENSE VALUE_(0,0) // Interrupt edge sensitive +#define CYGHWR_HAL_LM3S_GPIO_IS_LEV_SENSE VALUE_(0,1) // Interrupt level sensitive + +#define CYGHWR_HAL_LM3S_GPIO_IBE_GPIOIEV VALUE_(0,0) // Interrupt control from GPIOIEV +#define CYGHWR_HAL_LM3S_GPIO_IBE_BOTH_EDGE VALUE_(0,1) // Both edges can trigger interrupt + +#define CYGHWR_HAL_LM3S_GPIO_IEV_LOW VALUE_(0,0) // Falling edge or low triggers interrupt +#define CYGHWR_HAL_LM3S_GPIO_IEV_HIGH VALUE_(0,1) // Rising edge or low triggers interrupt + +#define CYGHWR_HAL_LM3S_GPIO_IM_MASK VALUE_(0,0) // Interrupt is masked +#define CYGHWR_HAL_LM3S_GPIO_IM_UMASK VALUE_(0,1) + +// HAL definitions +#define CYGHWR_HAL_LM3S_GPIO_MODE_IN VALUE_(0,0) // Input mode +#define CYGHWR_HAL_LM3S_GPIO_MODE_OUT VALUE_(0,1) // Output mode +#define CYGHWR_HAL_LM3S_GPIO_MODE_PERIPH VALUE_(0,2) // Peripheral function mode + +#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_NONE VALUE_(2,0) // Strength not specified +#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_2_MA VALUE_(2,1) // Strength 2 mA +#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_4_MA VALUE_(2,2) // Strength 4 mA +#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_8_MA VALUE_(2,3) // Strength 8 mA + +#define CYGHWR_HAL_LM3S_GPIO_CNF_NONE VALUE_(4,0) // Configuration not specified +#define CYGHWR_HAL_LM3S_GPIO_CNF_PULLUP VALUE_(4,1) // Pull-up +#define CYGHWR_HAL_LM3S_GPIO_CNF_PULLDOWN VALUE_(4,2) // Pull-down +#define CYGHWR_HAL_LM3S_GPIO_CNF_OP VALUE_(4,3) // Open-drain +#define CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP VALUE_(4,4) // Open-drain / Pull-up +#define CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN VALUE_(4,5) // Open-drain / Pull-down +#define CYGHWR_HAL_LM3S_GPIO_CNF_AIN VALUE_(4,6) // Analog + +#define CYGHWR_HAL_LM3S_GPIO_IRQ_DISABLE VALUE_(9,0) // Interrupt disable +#define CYGHWR_HAL_LM3S_GPIO_IRQ_FALLING_EDGE VALUE_(9,1) // Interrupt on falling edge +#define CYGHWR_HAL_LM3S_GPIO_IRQ_RISING_EDGE VALUE_(9,2) // Interrupt on rising edge +#define CYGHWR_HAL_LM3S_GPIO_IRQ_BOTH_EDGES VALUE_(9,3) // Interrupt on both edges +#define CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL VALUE_(9,4) // Interrupt on low level +#define CYGHWR_HAL_LM3S_GPIO_IRQ_HIGH_LEVEL VALUE_(9,5) // Interrupt on high level + +// This macro packs the port number, bit number, mode, strength, irq and +// configuration for a GPIO pin into a single word. +// The packing puts: + +#define CYGHWR_HAL_LM3S_GPIO( \ + __port, \ + __bit, \ + __mode, \ + __strength, \ + __cnf, \ + __irq) \ +( \ + (CYGHWR_HAL_LM3S_GPIO ## __port - CYGHWR_HAL_LM3S_GPIOA) | \ + (__bit << 24) | \ + (CYGHWR_HAL_LM3S_GPIO_MODE_ ## __mode) | \ + (CYGHWR_HAL_LM3S_GPIO_STRENGTH_ ## __strength) | \ + (CYGHWR_HAL_LM3S_GPIO_IRQ_ ## __irq) | \ + (CYGHWR_HAL_LM3S_GPIO_CNF_ ## __cnf) \ +) + +// Macros to extract encoded values +#define CYGHWR_HAL_LM3S_GPIO_PORT(__pin) (CYGHWR_HAL_LM3S_GPIOA+((__pin)&0x000FF000)) +#define CYGHWR_HAL_LM3S_GPIO_BIT(__pin) (((__pin)>>24)&0x07) +#define CYGHWR_HAL_LM3S_GPIO_MODE(__pin) ((__pin)&0x0003) +#define CYGHWR_HAL_LM3S_GPIO_STRENGTH(__pin) ((__pin)&VALUE_(2,3)) +#define CYGHWR_HAL_LM3S_GPIO_CFG(__pin) ((__pin)&VALUE_(4,7)) +#define CYGHWR_HAL_LM3S_GPIO_IRQ(__pin) ((__pin)&VALUE_(9,7)) + +#define CYGHWR_HAL_LM3S_GPIO_NONE (0xFFFFFFFF) + + +// Functions and macros to configure GPIO ports. + +__externC void hal_lm3s_gpio_set( cyg_uint32 pin ); +__externC void hal_lm3s_gpio_out( cyg_uint32 pin, int val ); +__externC void hal_lm3s_gpio_in ( cyg_uint32 pin, int *val ); + +#define CYGHWR_HAL_LM3S_GPIO_SET(__pin ) hal_lm3s_gpio_set( __pin ) +#define CYGHWR_HAL_LM3S_GPIO_OUT(__pin, __val ) hal_lm3s_gpio_out( __pin, __val ) +#define CYGHWR_HAL_LM3S_GPIO_IN(__pin, __val ) hal_lm3s_gpio_in( __pin, __val ) + + +//============================================================================= +// UARTs + +#define CYGHWR_HAL_LM3S_UART_DR 0x000 +#define CYGHWR_HAL_LM3S_UART_SR 0x004 +#define CYGHWR_HAL_LM3S_UART_FR 0x018 +#define CYGHWR_HAL_LM3S_UART_IBRD 0x024 +#define CYGHWR_HAL_LM3S_UART_FBRD 0x028 +#define CYGHWR_HAL_LM3S_UART_LCRH 0x02c +#define CYGHWR_HAL_LM3S_UART_CTL 0x030 +#define CYGHWR_HAL_LM3S_UART_IFLS 0x034 +#define CYGHWR_HAL_LM3S_UART_IM 0x038 +#define CYGHWR_HAL_LM3S_UART_RIS 0x03c +#define CYGHWR_HAL_LM3S_UART_MIS 0x040 +#define CYGHWR_HAL_LM3S_UART_ICR 0x044 +#define CYGHWR_HAL_LM3S_UART_PID4 0xfd0 +#define CYGHWR_HAL_LM3S_UART_PID5 0xfd4 +#define CYGHWR_HAL_LM3S_UART_PID6 0xfd8 +#define CYGHWR_HAL_LM3S_UART_PID7 0xfdc +#define CYGHWR_HAL_LM3S_UART_PID0 0xfe0 +#define CYGHWR_HAL_LM3S_UART_PID1 0xfe4 +#define CYGHWR_HAL_LM3S_UART_PID2 0xfe8 +#define CYGHWR_HAL_LM3S_UART_PID3 0xfec +#define CYGHWR_HAL_LM3S_UART_PCID0 0xff0 +#define CYGHWR_HAL_LM3S_UART_PCID1 0xff4 +#define CYGHWR_HAL_LM3S_UART_PCID2 0xff8 +#define CYGHWR_HAL_LM3S_UART_PCID3 0xffc + + +// DR Bits +#define CYGHWR_HAL_LM3S_UART_DR_FE BIT_(8) +#define CYGHWR_HAL_LM3S_UART_DR_PE BIT_(9) +#define CYGHWR_HAL_LM3S_UART_DR_BE BIT_(10) +#define CYGHWR_HAL_LM3S_UART_DR_OE BIT_(11) + +// SR Bits +#define CYGHWR_HAL_LM3S_UART_SR_FE BIT_(0) +#define CYGHWR_HAL_LM3S_UART_SR_PE BIT_(1) +#define CYGHWR_HAL_LM3S_UART_SR_BE BIT_(2) +#define CYGHWR_HAL_LM3S_UART_SR_OE BIT_(3) + +// FR bits +#define CYGHWR_HAL_LM3S_UART_FR_BUSY BIT_(3) +#define CYGHWR_HAL_LM3S_UART_FR_RXFE BIT_(4) +#define CYGHWR_HAL_LM3S_UART_FR_TXFF BIT_(5) +#define CYGHWR_HAL_LM3S_UART_FR_RXFF BIT_(6) +#define CYGHWR_HAL_LM3S_UART_FR_TXFE BIT_(7) + +// LCRH bits +#define CYGHWR_HAL_LM3S_UART_LCRH_BRK BIT_(0) +#define CYGHWR_HAL_LM3S_UART_LCRH_PEN BIT_(1) +#define CYGHWR_HAL_LM3S_UART_LCRH_EPS BIT_(2) +#define CYGHWR_HAL_LM3S_UART_LCRH_STP2 BIT_(3) +#define CYGHWR_HAL_LM3S_UART_LCRH_FEN BIT_(4) +#define CYGHWR_HAL_LM3S_UART_LCRH_WLEN(__x) VALUE_(5,__x) +#define CYGHWR_HAL_LM3S_UART_LCRH_WLEN_MASK 0x00000060 +#define CYGHWR_HAL_LM3S_UART_LCRH_SPS BIT_(7) + +// CTL bits +#define CYGHWR_HAL_LM3S_UART_CTL_UARTEN BIT_(0) +#define CYGHWR_HAL_LM3S_UART_CTL_LBE BIT_(7) +#define CYGHWR_HAL_LM3S_UART_CTL_TXE BIT_(8) +#define CYGHWR_HAL_LM3S_UART_CTL_RXE BIT_(9) + +// IFLS bits +#define CYGHWR_HAL_LM3S_UART_IFLS_RXIFLSEL(__x) VALUE_(0,__x) +#define CYGHWR_HAL_LM3S_UART_IFLS_RXIFLSEL_MASK 0x00000007 +#define CYGHWR_HAL_LM3S_UART_IFLS_TXIFLSEL(__x) VALUE_(3,__x) +#define CYGHWR_HAL_LM3S_UART_IFLS_TXIFLSEL_MASK 0x00000038 + +// IM bits +#define CYGHWR_HAL_LM3S_UART_IM_RXIM BIT_(4) +#define CYGHWR_HAL_LM3S_UART_IM_TXIM BIT_(5) +#define CYGHWR_HAL_LM3S_UART_IM_RTIM BIT_(6) +#define CYGHWR_HAL_LM3S_UART_IM_FEIM BIT_(7) +#define CYGHWR_HAL_LM3S_UART_IM_PEIM BIT_(8) +#define CYGHWR_HAL_LM3S_UART_IM_BEIM BIT_(9) +#define CYGHWR_HAL_LM3S_UART_IM_OEIM BIT_(10) + +// RIS bits +#define CYGHWR_HAL_LM3S_UART_RIS_RXRIS BIT_(4) +#define CYGHWR_HAL_LM3S_UART_RIS_TXRIS BIT_(5) +#define CYGHWR_HAL_LM3S_UART_RIS_RTRIS BIT_(6) +#define CYGHWR_HAL_LM3S_UART_RIS_FERIS BIT_(7) +#define CYGHWR_HAL_LM3S_UART_RIS_PERIS BIT_(8) +#define CYGHWR_HAL_LM3S_UART_RIS_BERIS BIT_(9) +#define CYGHWR_HAL_LM3S_UART_RIS_OERIS BIT_(10) + +// MIS bits +#define CYGHWR_HAL_LM3S_UART_MIS_RXMIS BIT_(4) +#define CYGHWR_HAL_LM3S_UART_MIS_TXMIS BIT_(5) +#define CYGHWR_HAL_LM3S_UART_MIS_RTMIS BIT_(6) +#define CYGHWR_HAL_LM3S_UART_MIS_FEMIS BIT_(7) +#define CYGHWR_HAL_LM3S_UART_MIS_PEMIS BIT_(8) +#define CYGHWR_HAL_LM3S_UART_MIS_BEMIS BIT_(9) +#define CYGHWR_HAL_LM3S_UART_MIS_OEMIS BIT_(10) + +// ICR bits +#define CYGHWR_HAL_LM3S_UART_ICR_RXIC BIT_(4) +#define CYGHWR_HAL_LM3S_UART_ICR_TXIC BIT_(5) +#define CYGHWR_HAL_LM3S_UART_ICR_RTIC BIT_(6) +#define CYGHWR_HAL_LM3S_UART_ICR_FEIC BIT_(7) +#define CYGHWR_HAL_LM3S_UART_ICR_PEIC BIT_(8) +#define CYGHWR_HAL_LM3S_UART_ICR_BEIC BIT_(9) +#define CYGHWR_HAL_LM3S_UART_ICR_OEIC BIT_(10) + +// UARTO shall be connected to PortA 0/1 on all device +#ifndef CYGHWR_HAL_LM3S_UART0_TX +# define CYGHWR_HAL_LM3S_UART0_TX CYGHWR_HAL_LM3S_GPIO( A, 0, PERIPH, NONE, NONE, DISABLE ) +#endif +#ifndef CYGHWR_HAL_LM3S_UART0_RX +# define CYGHWR_HAL_LM3S_UART0_RX CYGHWR_HAL_LM3S_GPIO( A, 1, PERIPH, NONE, NONE, DISABLE ) +#endif +#ifndef CYGHWR_HAL_LM3S_P_UART0_GPIO +# define CYGHWR_HAL_LM3S_P_UART0_GPIO CYGHWR_HAL_LM3S_P_GPIOA +#endif + +#ifndef __ASSEMBLER__ + +__externC void hal_lm3s_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud ); + +#endif + +//============================================================================= +// ADCs + +#ifdef CYGHWR_HAL_LM3S_ADC0_CHAN + +#define CYGHWR_HAL_LM3S_ADC_ACTSS 0x0 +#define CYGHWR_HAL_LM3S_ADC_RIS 0x4 +#define CYGHWR_HAL_LM3S_ADC_IMR 0x8 +#define CYGHWR_HAL_LM3S_ADC_ISCR 0xc +#define CYGHWR_HAL_LM3S_ADC_OSR 0x10 +#define CYGHWR_HAL_LM3S_ADC_EMUX 0x14 +#define CYGHWR_HAL_LM3S_ADC_USR 0x18 +#define CYGHWR_HAL_LM3S_ADC_SSPRI 0x20 +#define CYGHWR_HAL_LM3S_ADC_PSSI 0x28 +#define CYGHWR_HAL_LM3S_ADC_SAC 0x30 +#define CYGHWR_HAL_LM3S_ADC_SS_MUX0 0x40 +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0 0x44 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO0 0x48 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO0_SR 0x4c +#define CYGHWR_HAL_LM3S_ADC_SS_MUX1 0x60 +#define CYGHWR_HAL_LM3S_ADC_SS_CTL1 0x64 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO1 0x68 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO1_SR 0x6c +#define CYGHWR_HAL_LM3S_ADC_SS_MUX2 0x80 +#define CYGHWR_HAL_LM3S_ADC_SS_CTL2 0x84 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO2 0x88 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO2_SR 0x8c +#define CYGHWR_HAL_LM3S_ADC_SS_MUX3 0xa0 +#define CYGHWR_HAL_LM3S_ADC_SS_CTL3 0xa4 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO3 0xa8 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO3_SR 0xac +#define CYGHWR_HAL_LM3S_ADC_TMLB 0x100 + +#define CYGHWR_HAL_LM3S_ADC_SAMPLE_SIZE 10 + +// Active Sample Sequencer +#define CYGHWR_HAL_LM3S_ADC_ACTSS_ASEN(__x) VALUE_(((__x)&3),1) + +// Raw Interrupt Status +#define CYGHWR_HAL_LM3S_ADC_RIS_INR(__x) VALUE_(((__x)&3),1) + +// Interrupt Mask Register +#define CYGHWR_HAL_LM3S_ADC_IMR_MASK(__x) VALUE_(((__x)&3),1) + +// Interrupt Status and Clear Register +#define CYGHWR_HAL_LM3S_ADC_ISCR_IN(__x) VALUE_(((__x)&3),1) + +// Overflow Status Register +#define CYGHWR_HAL_LM3S_ADC_OSR_OV(__x) VALUE_(((__x)&3),1) + +// Event Multiplexer Select +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_CTRL(__x) VALUE_((((__x)&3)<<2),0) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_AC0(__x) VALUE_((((__x)&3)<<2),1) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_EXT(__x) VALUE_((((__x)&3)<<2),4) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_TIMER(__x) VALUE_((((__x)&3)<<2),5) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM0(__x) VALUE_((((__x)&3)<<2),6) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM1(__x) VALUE_((((__x)&3)<<2),7) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM2(__x) VALUE_((((__x)&3)<<2),8) +#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_ALWS(__x) VALUE_((((__x)&3)<<2),15) + +// Underflow Status +#define CYGHWR_HAL_LM3S_ADC_USR_UV(__x) VALUE_(((__x)&3),1) + +// Sample Sequence Priority +#define CYGHWR_HAL_LM3S_ADC_SSPRI_SS(__x, __y) VALUE_((((__x)&3)<<2),(__y)&3) + +// Processor Sample Sequence Initiate +#define CYGHWR_HAL_LM3S_ADC_PSSI_SS(__x) VALUE_(((__x)&3),1) + +// Sample Averaging Control +#define CYGHWR_HAL_LM3S_ADC_SAC_NO_OVER 0x0 +#define CYGHWR_HAL_LM3S_ADC_SAC_2X 0x1 +#define CYGHWR_HAL_LM3S_ADC_SAC_4X 0x2 +#define CYGHWR_HAL_LM3S_ADC_SAC_8X 0x3 +#define CYGHWR_HAL_LM3S_ADC_SAC_16X 0x4 +#define CYGHWR_HAL_LM3S_ADC_SAC_32X 0x5 +#define CYGHWR_HAL_LM3S_ADC_SAC_64X 0x6 + +// Sample Sequence Input Multiplexer Select 0 +#define CYGHWR_HAL_LM3S_ADC_SS_MUX0_V(_p_, _x_) VALUE_((((_x_)&3)<<2),_p_) +#define CYGHWR_HAL_LM3S_ADC_SS_MUX0_M(_x_) VALUE_((((_x_)&3)<<2), 0x3) + +// Sample Sequence Control 0 +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D0 BIT_(0) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END0 BIT_(1) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE0 BIT_(2) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS0 BIT_(3) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D1 BIT_(4) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END1 BIT_(5) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE1 BIT_(6) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS1 BIT_(7) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D2 BIT_(8) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END2 BIT_(9) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE2 BIT_(10) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS2 BIT_(11) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D3 BIT_(12) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END3 BIT_(13) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE3 BIT_(14) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS3 BIT_(15) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D4 BIT_(16) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END4 BIT_(17) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE4 BIT_(18) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS4 BIT_(19) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D5 BIT_(20) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END5 BIT_(21) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE5 BIT_(22) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS5 BIT_(23) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D6 BIT_(24) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END6 BIT_(25) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE6 BIT_(26) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS6 BIT_(27) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D7 BIT_(28) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END7 BIT_(29) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE7 BIT_(30) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS7 BIT_(31) + +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_MASK(_x_) VALUE_((((_x_)&3)<<2), 0x15) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D(_x_) VALUE_((((_x_)&3)<<2), 0x1) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END(_x_) VALUE_((((_x_)&3)<<2), 0x2) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE(_x_) VALUE_((((_x_)&3)<<2), 0x4) +#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS(_x_) VALUE_((((_x_)&3)<<2), 0x8) + +// Sequence FIFO Status +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_TPTR 0x0 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_HPTR 0x0 +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_EMPTY BIT_(8) +#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_FULL BIT_(12) + +#endif // CYGHWR_HAL_LM3S_ADC0_CHAN + + +//============================================================================= +// SSI interface register definitions. + +#ifdef CYGHWR_HAL_LM3S_SSI_CHAN + +#define CYGHWR_HAL_LM3S_SSI_CR0 0x000 +#define CYGHWR_HAL_LM3S_SSI_CR1 0x004 +#define CYGHWR_HAL_LM3S_SSI_DR 0x008 +#define CYGHWR_HAL_LM3S_SSI_SR 0x00C +#define CYGHWR_HAL_LM3S_SSI_CPSR 0x010 +#define CYGHWR_HAL_LM3S_SSI_IM 0x014 +#define CYGHWR_HAL_LM3S_SSI_RIS 0x018 +#define CYGHWR_HAL_LM3S_SSI_MIS 0x01c +#define CYGHWR_HAL_LM3S_SSI_ICR 0x020 +#define CYGHWR_HAL_LM3S_SSI_PID4 0xfd0 +#define CYGHWR_HAL_LM3S_SSI_PID5 0xfd4 +#define CYGHWR_HAL_LM3S_SSI_PID6 0xfd8 +#define CYGHWR_HAL_LM3S_SSI_PID7 0xfdc +#define CYGHWR_HAL_LM3S_SSI_PID0 0xfe0 +#define CYGHWR_HAL_LM3S_SSI_PID1 0xfe4 +#define CYGHWR_HAL_LM3S_SSI_PID2 0xfe8 +#define CYGHWR_HAL_LM3S_SSI_PID3 0xfec +#define CYGHWR_HAL_LM3S_SSI_PCID0 0xff0 +#define CYGHWR_HAL_LM3S_SSI_PCID1 0xff4 +#define CYGHWR_HAL_LM3S_SSI_PCID2 0xff8 +#define CYGHWR_HAL_LM3S_SSI_PCID3 0xffc + + +// CR0 bits +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_4BIT VALUE_(0, 0x3) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_5BIT VALUE_(0, 0x4) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_6BIT VALUE_(0, 0x5) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_7BIT VALUE_(0, 0x6) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_8BIT VALUE_(0, 0x7) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_9BIT VALUE_(0, 0x8) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_10BIT VALUE_(0, 0x9) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_11BIT VALUE_(0, 0xa) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_12BIT VALUE_(0, 0xb) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_13BIT VALUE_(0, 0xc) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_14BIT VALUE_(0, 0xd) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_15BIT VALUE_(0, 0xe) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_16BIT VALUE_(0, 0xf) +#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_MASK 0x0000000f +#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_FSPIFF VALUE_(4, 0x0) +#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_TISSFF VALUE_(4, 0x1) +#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_MFF VALUE_(4, 0x2) +#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_MASK 0x00000030 +#define CYGHWR_HAL_LM3S_SSI_CR0_SPO BIT_(6) +#define CYGHWR_HAL_LM3S_SSI_CR0_SPH BIT_(7) +#define CYGHWR_HAL_LM3S_SSI_CR0_SCR(__x) VALUE_(8, ((__x)&0xff)) + +// CR1 bits +#define CYGHWR_HAL_LM3S_SSI_CR1_LBM BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_CR1_SSE BIT_(1) +#define CYGHWR_HAL_LM3S_SSI_CR1_MS BIT_(2) +#define CYGHWR_HAL_LM3S_SSI_CR1_SOD BIT_(3) + +// SR bits +#define CYGHWR_HAL_LM3S_SSI_SR_TFE BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_SR_TNF BIT_(1) +#define CYGHWR_HAL_LM3S_SSI_SR_RNE BIT_(2) +#define CYGHWR_HAL_LM3S_SSI_SR_RFF BIT_(3) +#define CYGHWR_HAL_LM3S_SSI_SR_BSY BIT_(4) + +// IM bits +#define CYGHWR_HAL_LM3S_SSI_IM_RORIM BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_IM_RTIM BIT_(1) +#define CYGHWR_HAL_LM3S_SSI_IM_RXIM BIT_(2) +#define CYGHWR_HAL_LM3S_SSI_IM_TXIM BIT_(3) + +// RIS bits +#define CYGHWR_HAL_LM3S_SSI_RIS_RORRIS BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_RIS_RTRIS BIT_(1) +#define CYGHWR_HAL_LM3S_SSI_RIS_RXRIS BIT_(2) +#define CYGHWR_HAL_LM3S_SSI_RIS_TXRIS BIT_(3) + +// MIS bits +#define CYGHWR_HAL_LM3S_SSI_MIS_RORMIS BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_MIS_RTMIS BIT_(1) +#define CYGHWR_HAL_LM3S_SSI_MIS_RXMIS BIT_(2) +#define CYGHWR_HAL_LM3S_SSI_MIS_TXMIS BIT_(3) + +// ICR bits +#define CYGHWR_HAL_LM3S_SSI_ICR_RORIC BIT_(0) +#define CYGHWR_HAL_LM3S_SSI_ICR_RTIC BIT_(1) + +#endif // CYGHWR_HAL_LM3S_SSI_CHAN + +//============================================================================= +// PWM register definitions. + +#ifdef CYGHWR_HAL_LM3S_PWM_CHAN + +#define CYGHWR_HAL_LM3S_PWM_CTL 0x000 +#define CYGHWR_HAL_LM3S_PWM_SYNC 0x004 +#define CYGHWR_HAL_LM3S_PWM_ENABLE 0x008 +#define CYGHWR_HAL_LM3S_PWM_INVERT 0x00c +#define CYGHWR_HAL_LM3S_PWM_FAULT 0x010 +#define CYGHWR_HAL_LM3S_PWM_INTEN 0x014 +#define CYGHWR_HAL_LM3S_PWM_RIS 0x018 +#define CYGHWR_HAL_LM3S_PWM_ISC 0x01c +#define CYGHWR_HAL_LM3S_PWM_STATUS 0x020 + +#define CYGHWR_HAL_LM3S_PWM0_CTL 0x040 +#define CYGHWR_HAL_LM3S_PWM0_INTEN 0x044 +#define CYGHWR_HAL_LM3S_PWM0_RIS 0x048 +#define CYGHWR_HAL_LM3S_PWM0_ISC 0x04c +#define CYGHWR_HAL_LM3S_PWM0_LOAD 0x050 +#define CYGHWR_HAL_LM3S_PWM0_COUNT 0x054 +#define CYGHWR_HAL_LM3S_PWM0_CMPA 0x058 +#define CYGHWR_HAL_LM3S_PWM0_CMPB 0x05c +#define CYGHWR_HAL_LM3S_PWM0_GENA 0x060 +#define CYGHWR_HAL_LM3S_PWM0_GENB 0x064 +#define CYGHWR_HAL_LM3S_PWM0_DBCTL 0x068 +#define CYGHWR_HAL_LM3S_PWM0_DBRISE 0x06c +#define CYGHWR_HAL_LM3S_PWM0_DBFALL 0x070 + +#define CYGHWR_HAL_LM3S_PWM1_CTL 0x080 +#define CYGHWR_HAL_LM3S_PWM1_INTEN 0x084 +#define CYGHWR_HAL_LM3S_PWM1_RIS 0x088 +#define CYGHWR_HAL_LM3S_PWM1_ISC 0x08c +#define CYGHWR_HAL_LM3S_PWM1_LOAD 0x090 +#define CYGHWR_HAL_LM3S_PWM1_COUNT 0x094 +#define CYGHWR_HAL_LM3S_PWM1_CMPA 0x098 +#define CYGHWR_HAL_LM3S_PWM1_CMPB 0x09c +#define CYGHWR_HAL_LM3S_PWM1_GENA 0x0a0 +#define CYGHWR_HAL_LM3S_PWM1_GENB 0x0a4 +#define CYGHWR_HAL_LM3S_PWM1_DBCTL 0x0a8 +#define CYGHWR_HAL_LM3S_PWM1_DBRISE 0x0ac +#define CYGHWR_HAL_LM3S_PWM1_DBFALL 0x0b0 + +#define CYGHWR_HAL_LM3S_PWM2_CTL 0x0c0 +#define CYGHWR_HAL_LM3S_PWM2_INTEN 0x0c4 +#define CYGHWR_HAL_LM3S_PWM2_RIS 0x0c8 +#define CYGHWR_HAL_LM3S_PWM2_ISC 0x0cc +#define CYGHWR_HAL_LM3S_PWM2_LOAD 0x0d0 +#define CYGHWR_HAL_LM3S_PWM2_COUNT 0x0d4 +#define CYGHWR_HAL_LM3S_PWM2_CMPA 0x0d8 +#define CYGHWR_HAL_LM3S_PWM2_CMPB 0x0dc +#define CYGHWR_HAL_LM3S_PWM2_GENA 0x0e0 +#define CYGHWR_HAL_LM3S_PWM2_GENB 0x0e4 +#define CYGHWR_HAL_LM3S_PWM2_DBCTL 0x0e8 +#define CYGHWR_HAL_LM3S_PWM2_DBRISE 0x0ec +#define CYGHWR_HAL_LM3S_PWM2_DBFALL 0x0f0 + + +// CTL bits +#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC2 BIT_(2) + +// SYNC bits +#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC2 BIT_(2) + +// ENABLE bits +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM3 BIT_(3) +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM4 BIT_(4) +#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM5 BIT_(5) + +// INVERT bits +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM3 BIT_(3) +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM4 BIT_(4) +#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM5 BIT_(5) + +// FAULT bits +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM3 BIT_(3) +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM4 BIT_(4) +#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM5 BIT_(5) + +// INTEN bits +#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_INTEN_FAULT BIT_(16) + +// RIS bits +#define CYGHWR_HAL_LM3S_PWM_RIS_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_RIS_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_RIS_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_RIS_FAULT BIT_(16) + +// ISC bits +#define CYGHWR_HAL_LM3S_PWM_ISC_PWM0 BIT_(0) +#define CYGHWR_HAL_LM3S_PWM_ISC_PWM1 BIT_(1) +#define CYGHWR_HAL_LM3S_PWM_ISC_PWM2 BIT_(2) +#define CYGHWR_HAL_LM3S_PWM_ISC_FAULT BIT_(16) + +// STATUS bits +#define CYGHWR_HAL_LM3S_PWM_STATUS_FAULT BIT_(0) + +// PWMx CTL Bits +#define CYGHWR_HAL_LM3S_PWMx_CTL_ENABLE BIT_(0) +#define CYGHWR_HAL_LM3S_PWMx_CTL_MODE BIT_(1) +#define CYGHWR_HAL_LM3S_PWMx_CTL_DEBUG BIT_(2) +#define CYGHWR_HAL_LM3S_PWMx_CTL_LOAD_UPD BIT_(3) +#define CYGHWR_HAL_LM3S_PWMx_CTL_CMPA_UPD BIT_(4) +#define CYGHWR_HAL_LM3S_PWMx_CTL_CMPB_UPD BIT_(5) + +// PWMx INTEN Bits +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CNT_ZERO BIT_(0) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CNT_LOAD BIT_(1) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPA_UP BIT_(2) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPA_DOWN BIT_(3) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPB_UP BIT_(4) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPB_DOWN BIT_(5) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CNT_ZERO BIT_(8) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CNT_LOAD BIT_(9) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPA_UP BIT_(10) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPA_DOWN BIT_(11) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPB_UP BIT_(12) +#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPB_DOWN BIT_(13) + +// PWMx RIS Bits +#define CYGHWR_HAL_LM3S_PWMx_RIS_CNT_ZERO BIT_(0) +#define CYGHWR_HAL_LM3S_PWMx_RIS_CNT_LOAD BIT_(1) +#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPA_UP BIT_(2) +#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPA_DOWN BIT_(3) +#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPB_UP BIT_(4) +#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPB_DOWN BIT_(5) + +// PWMx ISC Bits +#define CYGHWR_HAL_LM3S_PWMx_ISC_CNT_ZERO BIT_(0) +#define CYGHWR_HAL_LM3S_PWMx_ISC_CNT_LOAD BIT_(1) +#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPA_UP BIT_(2) +#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPA_DOWN BIT_(3) +#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPB_UP BIT_(4) +#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPB_DOWN BIT_(5) + +// PWMx GENA Bits +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_NONE VALUE_(0, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_INVS VALUE_(0, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_SET0 VALUE_(0, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_SET1 VALUE_(0, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_MASK 0x00000003 +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_NONE VALUE_(2, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_INVS VALUE_(2, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_SET0 VALUE_(2, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_SET1 VALUE_(2, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_MASK 0x0000000c +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_NONE VALUE_(4, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_INVS VALUE_(4, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_SET0 VALUE_(4, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_SET1 VALUE_(4, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_MASK 0x00000030 +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_NONE VALUE_(6, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_INVS VALUE_(6, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_SET0 VALUE_(6, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_SET1 VALUE_(6, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_MASK 0x000000c0 +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_NONE VALUE_(8, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_INVS VALUE_(8, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_SET0 VALUE_(8, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_SET1 VALUE_(8, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_MASK 0x00000300 +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_NONE VALUE_(10, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_INVS VALUE_(10, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_SET0 VALUE_(10, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_SET1 VALUE_(10, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_MASK 0x00000c00 + +// PWMx GENB Bits +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_NONE VALUE_(0, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_INVS VALUE_(0, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_SET0 VALUE_(0, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_SET1 VALUE_(0, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_MASK 0x00000003 +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_NONE VALUE_(2, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_INVS VALUE_(2, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_SET0 VALUE_(2, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_SET1 VALUE_(2, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_MASK 0x0000000c +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_NONE VALUE_(4, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_INVS VALUE_(4, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_SET0 VALUE_(4, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_SET1 VALUE_(4, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_MASK 0x00000030 +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_NONE VALUE_(6, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_INVS VALUE_(6, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_SET0 VALUE_(6, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_SET1 VALUE_(6, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_MASK 0x000000c0 +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_NONE VALUE_(8, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_INVS VALUE_(8, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_SET0 VALUE_(8, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_SET1 VALUE_(8, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_MASK 0x00000300 +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_NONE VALUE_(10, 0x0) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_INVS VALUE_(10, 0x1) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_SET0 VALUE_(10, 0x2) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_SET1 VALUE_(10, 0x3) +#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_MASK 0x00000c00 + +// PWMx DBCTL Bits +#define CYGHWR_HAL_LM3S_PWMx_DBCTL_ENABLE BIT_(0) + +#endif // CYGHWR_HAL_LM3S_PWM_CHAN + + +//============================================================================= +// Global Timers register definitions. + +#define CYGHWR_HAL_LM3S_GPTIM_CFG 0x000 +#define CYGHWR_HAL_LM3S_GPTIM_TAMR 0x004 +#define CYGHWR_HAL_LM3S_GPTIM_TBMR 0x008 +#define CYGHWR_HAL_LM3S_GPTIM_CTL 0x00c +#define CYGHWR_HAL_LM3S_GPTIM_IMR 0x018 +#define CYGHWR_HAL_LM3S_GPTIM_RIS 0x01C +#define CYGHWR_HAL_LM3S_GPTIM_MIS 0x020 +#define CYGHWR_HAL_LM3S_GPTIM_ICR 0x024 +#define CYGHWR_HAL_LM3S_GPTIM_TAILR 0x028 +#define CYGHWR_HAL_LM3S_GPTIM_TBILR 0x02c +#define CYGHWR_HAL_LM3S_GPTIM_TAMATCHR 0x030 +#define CYGHWR_HAL_LM3S_GPTIM_TBMATCHR 0x034 +#define CYGHWR_HAL_LM3S_GPTIM_TAPR 0x038 +#define CYGHWR_HAL_LM3S_GPTIM_TBPR 0x03c +#define CYGHWR_HAL_LM3S_GPTIM_TAPMR 0x040 +#define CYGHWR_HAL_LM3S_GPTIM_TBPMR 0x044 +#define CYGHWR_HAL_LM3S_GPTIM_TAR 0x048 +#define CYGHWR_HAL_LM3S_GPTIM_TBR 0x04c + +// CFG bits +#define CYGHWR_HAL_LM3S_GPTIM_CFG_32BIT VALUE_(0, 0x0) +#define CYGHWR_HAL_LM3S_GPTIM_CFG_32BIT_RTC VALUE_(0, 0x1) +#define CYGHWR_HAL_LM3S_GPTIM_CFG_16BIT VALUE_(0, 0x4) +#define CYGHWR_HAL_LM3S_GPTIM_CFG_MASK 0x00000007 + +// TAMR bits +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_ONE_SHOT VALUE_(0, 0x1) +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_PERIODIC VALUE_(0, 0x2) +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_CAPTURE VALUE_(0, 0x3) +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_MASK 0x00000003 +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_TACMR BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_TAMR_TAAMS BIT_(3) + +// TBMR bits +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_ONE_SHOT VALUE_(0, 0x1) +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_PERIODIC VALUE_(0, 0x2) +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_CAPTURE VALUE_(0, 0x3) +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_MASK 0x00000003 +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_TBCMR BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_TBMR_TBAMS BIT_(3) + +// CTL bits +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN BIT_(0) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TASTALL BIT_(1) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_POS VALUE_(2, 0x0) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_NEG VALUE_(2, 0x1) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_BOTH VALUE_(2, 0x3) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_RTCEN BIT_(4) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAOTE BIT_(5) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAPWML BIT_(6) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEN BIT_(8) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBSTALL BIT_(9) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_POS VALUE_(10, 0x0) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_NEG VALUE_(10, 0x1) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_BOTH VALUE_(10, 0x3) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBOTE BIT_(13) +#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBPWML BIT_(14) + +// IMR bits +#define CYGHWR_HAL_LM3S_GPTIM_IMR_TATOIM BIT_(0) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_CAMIM BIT_(1) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_CAEIM BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_RTCIM BIT_(3) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_TBTOIM BIT_(8) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_CBMIM BIT_(9) +#define CYGHWR_HAL_LM3S_GPTIM_IMR_CBEIM BIT_(10) + +// RIS bits +#define CYGHWR_HAL_LM3S_GPTIM_RIS_TATORIS BIT_(0) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_CAMRIS BIT_(1) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_CAERIS BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_RTCRIS BIT_(3) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_TBTORIS BIT_(8) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_CBMRIS BIT_(9) +#define CYGHWR_HAL_LM3S_GPTIM_RIS_CBERIS BIT_(10) + +// MIS bits +#define CYGHWR_HAL_LM3S_GPTIM_MIS_TATOMIS BIT_(0) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_CAMMIS BIT_(1) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_CAEMIS BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_RTCMIS BIT_(3) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_TBTOMIS BIT_(8) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_CBMMIS BIT_(9) +#define CYGHWR_HAL_LM3S_GPTIM_MIS_CBEMIS BIT_(10) + +// ICR bits +#define CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT BIT_(0) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_CAMCINT BIT_(1) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_CAECINT BIT_(2) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_RTCCINT BIT_(3) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_TBTOCINT BIT_(8) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_CBMCINT BIT_(9) +#define CYGHWR_HAL_LM3S_GPTIM_ICR_CBECINT BIT_(10) + +cyg_uint32 hal_lm3s_timer_clock( void ); + +#ifndef __ASSEMBLER__ + +__externC cyg_uint32 hal_stellaris_lm3s_timer_clock( CYG_ADDRESS base ); + +#endif + + +//============================================================================= +// I2C register definitions. + +#ifdef CYGHWR_HAL_LM3S_I2C_CHAN + +#define CYGHWR_HAL_LM3S_I2C_MSA 0x000 +#define CYGHWR_HAL_LM3S_I2C_MCS 0x004 +#define CYGHWR_HAL_LM3S_I2C_MDR 0x008 +#define CYGHWR_HAL_LM3S_I2C_MTPR 0x00c +#define CYGHWR_HAL_LM3S_I2C_MIMR 0x010 +#define CYGHWR_HAL_LM3S_I2C_MRIS 0x014 +#define CYGHWR_HAL_LM3S_I2C_MMIS 0x018 +#define CYGHWR_HAL_LM3S_I2C_MICR 0x01c +#define CYGHWR_HAL_LM3S_I2C_MCR 0x020 + +#define CYGHWR_HAL_LM3S_I2C_SOAR 0x000 +#define CYGHWR_HAL_LM3S_I2C_SCSR 0x004 +#define CYGHWR_HAL_LM3S_I2C_SDR 0x008 +#define CYGHWR_HAL_LM3S_I2C_SIMR 0x00c +#define CYGHWR_HAL_LM3S_I2C_SRIS 0x010 +#define CYGHWR_HAL_LM3S_I2C_SMIS 0x014 +#define CYGHWR_HAL_LM3S_I2C_SICR 0x018 + +// MSA bits +#define CYGHWR_HAL_LM3S_I2C_MSA_RS BIT_(0) +#define CYGHWR_HAL_LM3S_I2C_MSA_SA(__x) VALUE_(1, __x) + +// MCS bits +#define CYGHWR_HAL_LM3S_I2C_MCS_BUSY BIT_(0) +#define CYGHWR_HAL_LM3S_I2C_MCS_ERR BIT_(1) +#define CYGHWR_HAL_LM3S_I2C_MCS_ADRACK BIT_(2) +#define CYGHWR_HAL_LM3S_I2C_MCS_DATACK BIT_(3) +#define CYGHWR_HAL_LM3S_I2C_MCS_ARBLST BIT_(4) +#define CYGHWR_HAL_LM3S_I2C_MCS_IDLE BIT_(5) +#define CYGHWR_HAL_LM3S_I2C_MCS_BUSBSY BIT_(6) + +#define CYGHWR_HAL_LM3S_I2C_MCS_RUN BIT_(0) +#define CYGHWR_HAL_LM3S_I2C_MCS_START BIT_(1) +#define CYGHWR_HAL_LM3S_I2C_MCS_STOP BIT_(2) +#define CYGHWR_HAL_LM3S_I2C_MCS_ACK BIT_(3) + +// MIMR bits +#define CYGHWR_HAL_LM3S_I2C_MIMR_IM BIT_(0) + +// MRIS bits +#define CYGHWR_HAL_LM3S_I2C_MRIS_RIS BIT_(0) + +// MMIS bits +#define CYGHWR_HAL_LM3S_I2C_MMIS_MIS BIT_(0) + +// MICR bits +#define CYGHWR_HAL_LM3S_I2C_MICR_IC BIT_(0) + +// MCR bits +#define CYGHWR_HAL_LM3S_I2C_MCR_LPBK BIT_(0) +#define CYGHWR_HAL_LM3S_I2C_MCR_MFE BIT_(4) +#define CYGHWR_HAL_LM3S_I2C_MCR_SFE BIT_(5) + +// SCSR bits +#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_RREQ BIT_(0) +#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_TREQ BIT_(1) +#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_FBR BIT_(2) + +#define CYGHWR_HAL_LM3S_I2C_SCSR_WRITE_DA BIT_(0) + +// SIMR bits +#define CYGHWR_HAL_LM3S_I2C_SIMR_DATAIM BIT_(0) + +// SRIS bits +#define CYGHWR_HAL_LM3S_I2C_SRIS_DATARIS BIT_(0) + +// SMIS bits +#define CYGHWR_HAL_LM3S_I2C_SMIS_DATAMIS BIT_(0) + +// SICR bits +#define CYGHWR_HAL_LM3S_I2C_SICR_DATAMIC BIT_(0) + +__externC cyg_uint32 hal_lm3s_i2c_clock( void ); + +#endif // CYGHWR_HAL_LM3S_I2C_CHAN + + +//============================================================================= +// AC register definitions. + +#ifdef CYGHWR_HAL_LM3S_AC_CHAN + +#define CYGHWR_HAL_LM3S_AC_MIS 0x000 +#define CYGHWR_HAL_LM3S_AC_RIS 0x004 +#define CYGHWR_HAL_LM3S_AC_INTEN 0x008 +#define CYGHWR_HAL_LM3S_AC_REFCTL 0x010 +#define CYGHWR_HAL_LM3S_AC_STAT0 0x020 +#define CYGHWR_HAL_LM3S_AC_CTL0 0x024 +#define CYGHWR_HAL_LM3S_AC_STAT1 0x040 +#define CYGHWR_HAL_LM3S_AC_CTL1 0x044 +#define CYGHWR_HAL_LM3S_AC_STAT2 0x060 +#define CYGHWR_HAL_LM3S_AC_CTL2 0x064 + +// MIS bits +#define CYGHWR_HAL_LM3S_AC_MIS_IN0 BIT_(0) +#define CYGHWR_HAL_LM3S_AC_MIS_IN1 BIT_(1) +#define CYGHWR_HAL_LM3S_AC_MIS_IN2 BIT_(2) + +// RIS bits +#define CYGHWR_HAL_LM3S_AC_RIS_IN0 BIT_(0) +#define CYGHWR_HAL_LM3S_AC_RIS_IN1 BIT_(1) +#define CYGHWR_HAL_LM3S_AC_RIS_IN2 BIT_(2) + +// INTEN bits +#define CYGHWR_HAL_LM3S_AC_INTEN_IN0 BIT_(0) +#define CYGHWR_HAL_LM3S_AC_INTEN_IN1 BIT_(1) +#define CYGHWR_HAL_LM3S_AC_INTEN_IN2 BIT_(2) + +// REFCTL bits +#define CYGHWR_HAL_LM3S_AC_REFCTL_RNG BIT_(8) +#define CYGHWR_HAL_LM3S_AC_REFCTL_EN BIT_(9) + +// STAT0, STAT1 and STAT2 bits +#define CYGHWR_HAL_LM3S_AC_STATx_OVAL BIT_(1) + +// CTL0, CTL1 anf CTL2 bits +#define CYGHWR_HAL_LM3S_AC_CTLx_CINV BIT_(1) +#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_LEV_SENSE VALUE_(2, 0x0) +#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_FALL_EDGE VALUE_(2, 0x1) +#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_RISE_EDGE VALUE_(2, 0x2) +#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_BOTH_EDGE VALUE_(2, 0x3) +#define CYGHWR_HAL_LM3S_AC_CTLx_ISLVAL BIT_(4) +#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_PIN_VAL VALUE_(9, 0x0) +#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_PIN_VAL_C0 VALUE_(9, 0x1) +#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_IVOLTREF VALUE_(9, 0x2) + +#endif // CYGHWR_HAL_LM3S_AC_CHAN + + +//============================================================================= +// QEI register definitions. + +#ifdef CYGHWR_HAL_LM3S_QEI_CHAN + +#define CYGHWR_HAL_LM3S_QEI_CTL 0x000 +#define CYGHWR_HAL_LM3S_QEI_STAT 0x004 +#define CYGHWR_HAL_LM3S_QEI_POS 0x008 +#define CYGHWR_HAL_LM3S_QEI_MAXPOS 0x00c +#define CYGHWR_HAL_LM3S_QEI_LOAD 0x010 +#define CYGHWR_HAL_LM3S_QEI_TIME 0x014 +#define CYGHWR_HAL_LM3S_QEI_COUNT 0x018 +#define CYGHWR_HAL_LM3S_QEI_SPEED 0x01c +#define CYGHWR_HAL_LM3S_QEI_INTEN 0x020 +#define CYGHWR_HAL_LM3S_QEI_RIS 0x024 +#define CYGHWR_HAL_LM3S_QEI_ISC 0x028 + +// CTL bits +#define CYGHWR_HAL_LM3S_QEI_CTL_EN BIT_(0) +#define CYGHWR_HAL_LM3S_QEI_CTL_SWAP BIT_(1) +#define CYGHWR_HAL_LM3S_QEI_CTL_SIGMODE BIT_(2) +#define CYGHWR_HAL_LM3S_QEI_CTL_CAPMODE BIT_(3) +#define CYGHWR_HAL_LM3S_QEI_CTL_RESMODE BIT_(4) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELEN BIT_(5) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_1 VALUE_(6, 0x0) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_2 VALUE_(6, 0x1) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_4 VALUE_(6, 0x2) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_8 VALUE_(6, 0x3) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_16 VALUE_(6, 0x4) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_32 VALUE_(6, 0x5) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_64 VALUE_(6, 0x6) +#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_128 VALUE_(6, 0x7) +#define CYGHWR_HAL_LM3S_QEI_CTL_INVA BIT_(9) +#define CYGHWR_HAL_LM3S_QEI_CTL_INVB BIT_(10) +#define CYGHWR_HAL_LM3S_QEI_CTL_INVI BIT_(11) +#define CYGHWR_HAL_LM3S_QEI_CTL_SATLLEN BIT_(12) + +// STAT bits +#define CYGHWR_HAL_LM3S_QEI_STAT_ERR BIT_(0) +#define CYGHWR_HAL_LM3S_QEI_STAT_DIR BIT_(1) + +// INTEN bits +#define CYGHWR_HAL_LM3S_QEI_INTEN_INTINDEX BIT_(0) +#define CYGHWR_HAL_LM3S_QEI_INTEN_INTTIMER BIT_(1) +#define CYGHWR_HAL_LM3S_QEI_INTEN_INTDIR BIT_(2) +#define CYGHWR_HAL_LM3S_QEI_INTEN_INTERROR BIT_(3) + +// RIS bits +#define CYGHWR_HAL_LM3S_QEI_RIS_INTINDEX BIT_(0) +#define CYGHWR_HAL_LM3S_QEI_RIS_INTTIMER BIT_(1) +#define CYGHWR_HAL_LM3S_QEI_RIS_INTDIR BIT_(2) +#define CYGHWR_HAL_LM3S_QEI_RIS_INTERROR BIT_(3) + +// ISC bits +#define CYGHWR_HAL_LM3S_QEI_ISC_INTINDEX BIT_(0) +#define CYGHWR_HAL_LM3S_QEI_ISC_INTTIMER BIT_(1) +#define CYGHWR_HAL_LM3S_QEI_ISC_INTDIR BIT_(2) +#define CYGHWR_HAL_LM3S_QEI_ISC_INTERROR BIT_(3) + +#endif // CYGHWR_HAL_LM3S_QEI_CHAN + + +//============================================================================= +// Flash controller + +#define CYGHWR_HAL_LM3S_FMC_FMA 0x000 +#define CYGHWR_HAL_LM3S_FMC_FMD 0x004 +#define CYGHWR_HAL_LM3S_FMC_FMC 0x008 +#define CYGHWR_HAL_LM3S_FMC_FCRIS 0x00c +#define CYGHWR_HAL_LM3S_FMC_FCIM 0x010 +#define CYGHWR_HAL_LM3S_FMC_FCMISC 0x014 + +// Key value +#define CYGHWR_HAL_LM3S_FMC_WRKEY 0xA4420000 + +// FMC bits +#define CYGHWR_HAL_LM3S_FMC_FMC_WRITE BIT_(0) +#define CYGHWR_HAL_LM3S_FMC_FMC_ERASE BIT_(1) +#define CYGHWR_HAL_LM3S_FMC_FMC_MERASE BIT_(2) +#define CYGHWR_HAL_LM3S_FMC_FMC_COMT BIT_(3) + +// RIS bits +#define CYGHWR_HAL_LM3S_FMC_FCRIS_ARIS BIT_(0) +#define CYGHWR_HAL_LM3S_FMC_FCRIS_PRIS BIT_(1) + +// IM bits +#define CYGHWR_HAL_LM3S_FMC_FCIM_AMASK BIT_(0) +#define CYGHWR_HAL_LM3S_FMC_FCIM_PMASK BIT_(1) + +// MISC bits +#define CYGHWR_HAL_LM3S_FMC_FCMISC_AMASK BIT_(0) +#define CYGHWR_HAL_LM3S_FMC_FCMISC_PMASK BIT_(0) + + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_IO_H +// EOF of var_io.h diff --git a/packages/hal/cortexm/lm3s/var/current/include/variant.inc b/packages/hal/cortexm/lm3s/var/current/include/variant.inc new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/include/variant.inc @@ -0,0 +1,54 @@ +/*========================================================================== +// +// variant.inc +// +// Variant specific asm definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2010-11-23 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +//========================================================================== +// EOF variant.inc + diff --git a/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c b/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c @@ -0,0 +1,406 @@ +//============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008, 2010 +// 2011, Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): original: nickg, ccoutand: updated for Stellaris HAL +// Date: 2011-01-18 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // Base types +#include // Tracing + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED + +#include // USART registers + +//----------------------------------------------------------------------------- +typedef struct { + cyg_uint32 uart; + CYG_ADDRESS base; + cyg_int32 msec_timeout; + int isr_vector; + cyg_uint32 rxpin; + cyg_uint32 txpin; + cyg_uint32 baud_rate; + int irq_state; +} channel_data_t; + +static channel_data_t lm3s_ser_channels[] = { +#if CYGINT_HAL_CORTEXM_LM3S_UART0>0 + {0, CYGHWR_HAL_LM3S_UART0, 1000, CYGNUM_HAL_INTERRUPT_UART0, + CYGHWR_HAL_LM3S_UART0_RX, CYGHWR_HAL_LM3S_UART0_TX}, +#endif +#if CYGINT_HAL_CORTEXM_LM3S_UART1>0 + {1, CYGHWR_HAL_LM3S_UART1, 1000, CYGNUM_HAL_INTERRUPT_UART1, + CYGHWR_HAL_LM3S_UART1_RX, CYGHWR_HAL_LM3S_UART1_TX}, +#endif +}; + +//----------------------------------------------------------------------------- + +static void +hal_lm3s_serial_init_channel(void *__ch_data) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + CYG_ADDRESS base = chan->base; + cyg_uint32 lcrh, + ctl; + + // Disable UART + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl); + ctl &= ~(CYGHWR_HAL_LM3S_UART_CTL_UARTEN | + CYGHWR_HAL_LM3S_UART_CTL_TXE | CYGHWR_HAL_LM3S_UART_CTL_RXE); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl); + + // Enable the PIO lines for the serial channel + CYGHWR_HAL_LM3S_GPIO_SET(chan->rxpin); + CYGHWR_HAL_LM3S_GPIO_SET(chan->txpin); + + // Set up Baud rate + chan->baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + hal_lm3s_uart_setbaud(base, chan->baud_rate); + + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, 0); + + // 8 bits - 1 stop - Enable FIFO + lcrh = CYGHWR_HAL_LM3S_UART_LCRH_WLEN(3) | CYGHWR_HAL_LM3S_UART_LCRH_FEN; + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_LCRH, lcrh); + + // Enable the UART + ctl = (CYGHWR_HAL_LM3S_UART_CTL_UARTEN | + CYGHWR_HAL_LM3S_UART_CTL_TXE | CYGHWR_HAL_LM3S_UART_CTL_RXE); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl); +} + +void +hal_lm3s_serial_putc(void *__ch_data, char c) +{ + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + cyg_uint32 sr; + + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, sr); + } while ((sr & CYGHWR_HAL_LM3S_UART_FR_TXFE) == 0); + + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_DR, c); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool +hal_lm3s_serial_getc_nonblock(void *__ch_data, cyg_uint8 *ch) +{ + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + cyg_uint32 fr; + cyg_uint32 c; + + CYGARC_HAL_SAVE_GP(); + + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, fr); + + if ((fr & CYGHWR_HAL_LM3S_UART_FR_RXFE)) + return false; + + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_DR, c); + + *ch = (cyg_uint8)c; + + CYGARC_HAL_RESTORE_GP(); + + return true; +} + +cyg_uint8 +hal_lm3s_serial_getc(void *__ch_data) +{ + cyg_uint8 ch; + + CYGARC_HAL_SAVE_GP(); + + while (!hal_lm3s_serial_getc_nonblock(__ch_data, &ch)) + continue; + + CYGARC_HAL_RESTORE_GP(); + + return ch; +} + +//============================================================================= +// Virtual vector HAL diagnostics + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +static void +hal_lm3s_serial_write(void *__ch_data, const cyg_uint8 *__buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) + hal_lm3s_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +hal_lm3s_serial_read(void *__ch_data, cyg_uint8 *__buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) + *__buf++ = hal_lm3s_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +hal_lm3s_serial_getc_timeout(void *__ch_data, cyg_uint8 *ch) +{ + int delay_count; + channel_data_t *chan = (channel_data_t *) __ch_data; + cyg_bool res; + + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 100; // delay in 10 us steps + + for (;;) { + res = hal_lm3s_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(10); + } + + CYGARC_HAL_RESTORE_GP(); + + return res; +} + +static int +hal_lm3s_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + int ret = 0; + cyg_uint32 im; + + va_list ap; + + CYGARC_HAL_SAVE_GP(); + + va_start(ap, __func); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + chan->irq_state = 1; + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im); + im |= CYGHWR_HAL_LM3S_UART_IM_RXIM; + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im); + break; + case __COMMCTL_IRQ_DISABLE: + ret = chan->irq_state; + chan->irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im); + im &= ~CYGHWR_HAL_LM3S_UART_IM_RXIM; + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + chan->baud_rate = va_arg(ap, cyg_int32); + // Should we verify this value here? + hal_lm3s_uart_setbaud(base, chan->baud_rate); + ret = 0; + break; + default: + break; + } + + va_end(ap); + + CYGARC_HAL_RESTORE_GP(); + + return ret; +} + +static int +hal_lm3s_serial_isr(void *__ch_data, int *__ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + cyg_uint8 ch; + + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + + if (hal_lm3s_serial_getc_nonblock(__ch_data, &ch)) { + if (cyg_hal_is_break((char *)&ch, 1)) + *__ctrlc = 1; + } + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + CYGARC_HAL_RESTORE_GP(); + + return 1; +} + +static void +hal_lm3s_serial_init(void) +{ + hal_virtual_comm_table_t *comm; + int cur; + int i; + + cur = + CYGACC_CALL_IF_SET_CONSOLE_COMM + (CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + for (i = 0; i < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS; i++) { + hal_lm3s_serial_init_channel(&lm3s_ser_channels[i]); + + CYGACC_CALL_IF_SET_CONSOLE_COMM(i); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &lm3s_ser_channels[i]); + CYGACC_COMM_IF_WRITE_SET(*comm, hal_lm3s_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, hal_lm3s_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, hal_lm3s_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, hal_lm3s_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, hal_lm3s_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, hal_lm3s_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, hal_lm3s_serial_getc_timeout); + } + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); + +# if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD) + // Set debug channel baud rate if different + lm3s_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]->baud_rate = + CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD; + update_baud_rate(&lm3s_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]); +# endif + +} + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + hal_lm3s_serial_init(); +} + +#endif // ifdef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + + +//============================================================================= +// Non-Virtual vector HAL diagnostics + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +void +hal_lm3s_diag_init(void) +{ + hal_lm3s_serial_init(&lm3s_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]); +} + +void +hal_lm3s_diag_putc(char c) +{ + hal_lm3s_serial_putc(&lm3s_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL], c); +} + +cyg_uint8 +hal_lm3s_diag_getc(void) +{ + return + hal_lm3s_serial_getc(&lm3s_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]); +} + +#endif // ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// EOF hal_diag.c diff --git a/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c b/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c @@ -0,0 +1,328 @@ +//========================================================================== +// +// lm3s_misc.c +// +// Stellaris Cortex-M3 variant HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Date: 2011-01-18 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#ifdef CYGPKG_KERNEL +# include +#endif + +#include +#include +#include // Tracing macros +#include // Assertion macros + +#include +#include +#include + +//========================================================================== +// Initialization +// +__externC void hal_start_clocks(void); + +// Clock computation must be done per Variant basis +cyg_uint32 hal_cortexm_systick_clock; +cyg_uint32 hal_lm3s_sysclk; + + +void +hal_variant_init(void) +{ +#if !defined(CYG_HAL_STARTUP_RAM) + hal_start_clocks(); +#endif + + // All LM3S devices use PORTA 0/1 for UART0 +#if CYGINT_HAL_CORTEXM_LM3S_UART0>0 + CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART0, 1); + CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART0_GPIO, 1); +#endif + +#if CYGINT_HAL_CORTEXM_LM3S_UART1>0 + +# ifdef CYGHWR_HAL_LM3S_P_UART1_GPIO + CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART1, 1); + CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART1_GPIO, 1); +# else +# error "Variant/Platform does not specify UART1 GPIO Port" +# endif + +#endif + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + hal_if_init(); +#endif +} + +//========================================================================== +// GPIO support +// +// These functions provide configuration and IO for GPIO pins. +// + +__externC void +hal_lm3s_gpio_set(cyg_uint32 pin) +{ + cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin); + cyg_uint32 bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin)); + cyg_uint32 cm = CYGHWR_HAL_LM3S_GPIO_CFG(pin); + cyg_uint32 mode = CYGHWR_HAL_LM3S_GPIO_MODE(pin); + cyg_uint32 irq = CYGHWR_HAL_LM3S_GPIO_IRQ(pin); + cyg_uint32 st = CYGHWR_HAL_LM3S_GPIO_STRENGTH(pin); + cyg_uint32 reg, + dir, + im, + dr2r, + dr4r, + dr8r; + + if (pin == CYGHWR_HAL_LM3S_GPIO_NONE) + return; + + /* + * Handle IO mode settings + */ + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, reg); + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, dir); + + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, (reg & ~(bit))); + if (mode == CYGHWR_HAL_LM3S_GPIO_MODE_IN) + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, (dir & ~(bit))); + else if (mode == CYGHWR_HAL_LM3S_GPIO_MODE_OUT) + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, (dir | bit)); + else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, (reg | bit)); + + /* + * Handle IO configuration + */ + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, reg); + if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP || + cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP || + cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, (reg | bit)); + } else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, (reg & ~(bit))); + + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, reg); + if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_PULLUP || + cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, (reg | bit)); + } else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, (reg & ~(bit))); + + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, reg); + if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_PULLDOWN || + cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, (reg | bit)); + } else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, (reg & ~(bit))); + + /* + * Handle IO strength + */ + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, dr2r); + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, dr4r); + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, dr8r); + if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_2_MA) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r | bit)); + } else if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_4_MA) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r | bit)); + } else if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_8_MA) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r & ~(bit))); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r | bit)); + } + + /* + * Handle interrupt settings + */ + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, im); + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, (im & ~(bit))); + if (irq != CYGHWR_HAL_LM3S_GPIO_IRQ_DISABLE) { + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, reg); + + if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL || + irq == CYGHWR_HAL_LM3S_GPIO_IRQ_HIGH_LEVEL) + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, (reg | bit)); + else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, (reg & ~(bit))); + + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, reg); + if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_BOTH_EDGES) { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, (reg | bit)); + } else { + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, (reg & ~(bit))); + + HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV, reg); + if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL || + irq == CYGHWR_HAL_LM3S_GPIO_IRQ_FALLING_EDGE) + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV, + (reg & ~(bit))); + else + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV, + (reg | bit)); + } + + HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, (im | bit)); + } +} + +__externC void +hal_lm3s_gpio_out(cyg_uint32 pin, int val) +{ + cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin); + int bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin)); + + port += (CYGHWR_HAL_LM3S_GPIO_DATA + (bit << 2)); + + HAL_WRITE_UINT32(port, (val ? bit : 0)); +} + +__externC void +hal_lm3s_gpio_in(cyg_uint32 pin, int *val) +{ + cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin); + int bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin)); + cyg_uint32 pd; + + port += (CYGHWR_HAL_LM3S_GPIO_DATA + (bit << 2)); + + HAL_READ_UINT32(port, pd); + *val = pd; +} + + +//========================================================================== +// Peripheral support +// + +__externC void +hal_lm3s_periph_set(cyg_uint32 periph, cyg_uint32 on_off) +{ + cyg_uint32 reg; + + if (CYGHWR_HAL_LM3S_PERIPH_GC0 & periph) { + HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC0, reg); + if (on_off) + reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC0); + else + reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC0); + HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC0, reg); + } + + if (CYGHWR_HAL_LM3S_PERIPH_GC1 & periph) { + HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC1, reg); + if (on_off) + reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC1); + else + reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC1); + HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC1, reg); + } + + if (CYGHWR_HAL_LM3S_PERIPH_GC2 & periph) { + HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC2, reg); + if (on_off) + reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC2); + else + reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC2); + HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC2, reg); + } + +} + + +//========================================================================== +// UART baud rate +// +// Set the baud rate divider of a UART based on the requested rate and +// the current APB clock settings. +// + +__externC void +hal_lm3s_uart_setbaud(cyg_uint32 base, cyg_uint32 baud) +{ + cyg_uint32 int_div, + frac_div; + + int_div = ((((hal_cortexm_systick_clock << 3) / baud) + 1) >> 1); + + frac_div = int_div % 64; + int_div = int_div >> 6; + + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IBRD, int_div); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_FBRD, frac_div); +} + + +//========================================================================== +// I2C clock rate +// +__externC cyg_uint32 +hal_lm3s_i2c_clock(void) +{ + return hal_lm3s_sysclk; +} + +//========================================================================== +// Timer clock rate +// +__externC cyg_uint32 +hal_lm3s_timer_clock(void) +{ + return hal_lm3s_sysclk; +} + +//========================================================================== +// EOF lm3s_misc_misc.c diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/ChangeLog b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/ChangeLog @@ -0,0 +1,43 @@ +2012-01-16 Ilija Kocho + + * cdl/hal_cortexm_lpc17xx_lpc1766stk.cdl: + * include/pkgconf/mlt_cortexm_lpc1766_rom.h: + * include/pkgconf/mlt_cortexm_lpc1766_rom.ldi: + Recognize In Application Programming (IAP) SRAM field + and Valid User Code and Code Read Protection FLASH fields + Reported by Bernard Fouché [ Bugzilla 1001395 ] [Bugzilla 1001443 ] + +2010-12-12 Ilija Kocho + + * cdl/hal_cortexm_lpc17xx_lpc1766stk.cdl: + * include/pkgconf/mlt_cortexm_lpc1766_rom.h: + * include/pkgconf/mlt_cortexm_lpc1766_rom.ldi: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * src/lpc1766stk_misc.c: + New package -- Olimex LPC1766STK board. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/cdl/hal_cortexm_lpc17xx_lpc1766stk.cdl b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/cdl/hal_cortexm_lpc17xx_lpc1766stk.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/cdl/hal_cortexm_lpc17xx_lpc1766stk.cdl @@ -0,0 +1,416 @@ +##========================================================================== +## +## hal_cortexm_lpc17xx_lpc1766stk.cdl +## +## Cortex-M Olimex LPC-1766STK platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ilijak +## Date: 2010-12-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_LPC17XX_LPC1766STK { + display "Olimex LPC-1700STK Board HAL" + parent CYGPKG_HAL_CORTEXM_LPC17XX + define_header hal_cortexm_lpc17xx_lpc1766stk.h + include_dir cyg/hal + hardware + requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" } + implements CYGINT_IO_SERIAL_LPC24XX_UART0 + implements CYGINT_IO_SERIAL_LPC24XX_UART1 + + description " + The Olimex LPC-1766STK HAL package provides the support needed + to run eCos on the LPC-1766STK board. Also this package can be + used for other boards that employ a controller from LPC 176x + or LPC 175x families. Use 'LPC17xx member in use' to pick up + your device." + + compile lpc1766stk_misc.c + + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_KS8721) } + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M3\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Olimex LPC-1766STK\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value { "ROM" } + legal_values { "ROM" } + no_define + define -file system.h CYG_HAL_STARTUP + description " + 'ROM' startup builds a stand-alone application which will + be put into internal flash." + } + + cdl_option CYGHWR_HAL_CORTEXM_LPC17XX_IAP { + display "Reserve RAM for IAP (Bytes)" + flavor data + legal_values { 0 32 } + default_value 32 + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_lpc" . CYGHWR_HAL_CORTEXM_LPC17XX . "_rom" : + "undefined" } + description " + Combination of 'Startup type' and 'LPC17xx member in use' + produces the memory layout." + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + + } + + cdl_option CYGHWR_HAL_CORTEXM_LPC17XX_XTAL_FREQ { + display "CPU xtal frequency" + parent CYGHWR_HAL_CORTEXM_LPC17XX_CLOCKING + flavor data + default_value { 12000000 } + } + + cdl_option CYGHWR_HAL_CORTEXM_LPC17XX_MAX_CLOCK_SPEED { + display "Max. CPU clock speed" + parent CYGHWR_HAL_CORTEXM_LPC17XX_CLOCKING + flavor data + calculated { (CYGHWR_HAL_CORTEXM_LPC17XX == "1759") || + (CYGHWR_HAL_CORTEXM_LPC17XX == "1769") ? 120000000 : + 100000000 } + requires { CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= + ((CYGHWR_HAL_CORTEXM_LPC17XX == "1759") || + (CYGHWR_HAL_CORTEXM_LPC17XX == "1769") ? 120000000 : + 100000000) } + description " + Highest internal core frequency is dependent on selected + chip. " + } + + # Both UARTs 0 and 1 are available for diagnostic/debug use. + implements CYGINT_HAL_LPC17XX_UART0 + implements CYGINT_HAL_LPC17XX_UART1 + + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The Olimex LPC1766STK board has two serial ports. This + option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The Olimex LPC1766STK has two serial ports. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + console connection. + Note: this should match the value chosen for the GDB port + if the diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + GDB connection. + Note: this should match the value chosen for the console + port if the console and GDB port are the same." + } + + cdl_component CYGHWR_HAL_LPC_EMAC_RAM_AHB { + display "Ethernet controller AHB SRAM" + flavor none + active_if CYGPKG_DEVS_ETH_ARM_LPC2XXX + parent CYGPKG_DEVS_ETH_ARM_LPC2XXX + description " + AHB SRAM allocated for Ethernet controller." + + cdl_option CYGHWR_HAL_LPC_EMAC_MEM_SECTION { + display "Memory section for lwIP buffers." + flavor data + default_value { "\".ahb_sram0\"" } + legal_values { "\".ahb_sram0\"" "\".ahb_sram1\"" } + description " + Select special section for lwIP p-buffers and heap and + provide section name." + } + + cdl_option CYGHWR_HAL_LPC_EMAC_BLOCK_SIZE { + display "Block size" + flavor data + default_value 0x600 + } + } + + cdl_option CYGDAT_LWIP_MEM_SECTION_NAME { + display "Memory section for lwIP buffers." + flavor data + default_value { "\".ahb_sram0\"" } + legal_values { "\".ahb_sram0\"" "\".ahb_sram1\"" } + active_if CYGPKG_NET_LWIP + parent CYGOPT_LWIP_MEM_PLF_SPEC + description " + Select special section for lwIP p-buffers and heap and + provide section name." + } + + cdl_component CYGOPT_LWIP_PLF_MEM_OPT { + display "Platform related lwIP memory constrains" + flavor none + no_define + active_if CYGPKG_NET_LWIP + parent CYGOPT_LWIP_MEM_PLF_SPEC + description " + Some platform constrains, features and restrictions applied + to lwIP network stack." + + cdl_option CYGOPT_LWIP_PLF_MEM_LIMIT_SS0 { + display "lwIP uses the same section as the ethernet controller" + no_define + flavor bool + default_value is_active(CYGOPT_LWIP_PLF_MEM_LIMIT_SS0) + + active_if CYGSEM_LWIP_MEM_SECTION + active_if { CYGDAT_LWIP_MEM_SECTION_NAME == CYGHWR_HAL_LPC_EMAC_MEM_SECTION } + + requires { CYGNUM_LWIP_MEM_SIZE == 1544 } + requires { CYGNUM_LWIP_MEMP_NUM_PBUF == 4 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB == 6 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB_LISTEN == 2 } + requires { CYGNUM_LWIP_MEMP_NUM_ARP_QUEUE == 5 } + requires { CYGNUM_LWIP_PBUF_POOL_SIZE == 8 } + + requires { CYGNUM_DEVS_ETH_ARM_LPC2XXX_RX_BUFS == 3 } + } + + cdl_option CYGOPT_LWIP_PLF_MEM_LIMIT_SS1 { + display "lwIP uses different section than the ethernet controller" + no_define + flavor bool + default_value is_active(CYGOPT_LWIP_PLF_MEM_LIMIT_SS1) + + active_if CYGSEM_LWIP_MEM_SECTION + active_if { CYGDAT_LWIP_MEM_SECTION_NAME != CYGHWR_HAL_LPC_EMAC_MEM_SECTION } + + requires { CYGNUM_LWIP_MEM_SIZE == 1600 } + requires { CYGNUM_LWIP_MEMP_NUM_PBUF == 9 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB == 8 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB_LISTEN == 4 } + requires { CYGNUM_LWIP_MEMP_NUM_ARP_QUEUE == 10 } + requires { CYGNUM_LWIP_PBUF_POOL_SIZE == 13 } + + requires { CYGNUM_DEVS_ETH_ARM_LPC2XXX_RX_BUFS == 4 } + } + + cdl_option CYGOPT_LWIP_PLF_MEM_LIMIT_NSS { + display "lwIP does not use a special section" + no_define + flavor bool + default_value is_active(CYGOPT_LWIP_PLF_MEM_LIMIT_NSS) + + active_if !CYGSEM_LWIP_MEM_SECTION + + requires { CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE == 1024 } + + requires { CYGNUM_LWIP_MEM_SIZE == 884 } + requires { CYGNUM_LWIP_MEMP_NUM_PBUF == 4 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB == 5 } + requires { CYGNUM_LWIP_MEMP_NUM_TCP_PCB_LISTEN == 2 } + requires { CYGNUM_LWIP_MEMP_NUM_ARP_QUEUE == 5 } + requires { CYGNUM_LWIP_PBUF_POOL_SIZE == 7 } + + requires { CYGNUM_DEVS_ETH_ARM_LPC2XXX_RX_BUFS == 4 } + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over compiler flags, + linker flags and choice of toolchain." + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which + are used to compile all packages by default. Individual + packages may define options which override these global + flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global + flags." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a + ROM monitor, i.e. applications will be loaded into RAM on + the board, and this ROM monitor may process exceptions or + interrupts generated from the application. This enables + features such as utilizing a separate interrupt stack when + exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the + encoding of diagnostic output, or the overriding of hardware + interrupt vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This + is the most basic support which is likely to be common to + most implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included + in the ROM monitor or boot ROM." + } + + cdl_component CYGBLD_HAL_CORTEXM_LPC1766STK_GDB_STUBS { + display "Create StubROM SREC and binary files" + no_define + calculated 1 + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + requires { CYG_HAL_STARTUP == "ROM" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description " + This component causes the ELF image generated by the build + process to be converted to S-Record and binary files." + } +} + +# EOF hal_cortexm_lpc17xx_lpc1766stk.cdl diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.h b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.h @@ -0,0 +1,30 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x10000000) +#define CYGMEM_REGION_ram_SIZE (0x00008000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE-CYGHWR_HAL_CORTEXM_LPC17XX_IAP) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ahb_sram_bank0 (0x2007C000) +#define CYGMEM_REGION_ahb_sram_bank0_SIZE (0x00004000) +#define CYGMEM_REGION_ahb_sram_bank0_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ahb_sram_bank1 (0x20080000) +#define CYGMEM_REGION_ahb_sram_bank1_SIZE (0x00004000) +#define CYGMEM_REGION_ahb_sram_bank1_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_flash (0x00000000) +#define CYGMEM_REGION_flash_SIZE (0x00040000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + + diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.ldi b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/pkgconf/mlt_cortexm_lpc1766_rom.ldi @@ -0,0 +1,49 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x10000000, LENGTH = 0x00008000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE-CYGHWR_HAL_CORTEXM_LPC17XX_IAP + ahb_sram_bank0 : ORIGIN = 0x2007C000, LENGTH = 0x00004000 + ahb_sram_bank1 : ORIGIN = 0x20080000, LENGTH = 0x00004000 + flash : ORIGIN = 0x00000000, LENGTH = 0x00040000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA) + USER_SECTION(lpc17xx_misc, flash, 0x00000020, LMA_EQ_VMA) + + // LPC17xx Code Read Protection field. Must be present at 0x000002FC + // Warning: Code Read Protection field or moving it to + // other location may lock LPC17xx controller. + // See src/lpc17xx_mis.c for definition + + .lpc17xxcrp 0x2FC : { KEEP (*(.lpc17xxcrp)) } > flash + + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + USER_SECTION (ahb_sram0, ahb_sram_bank0, 0x2007C000 (NOLOAD), LMA_EQ_VMA) + USER_SECTION (ahb_sram1, ahb_sram_bank1, 0x20080000 (NOLOAD), LMA_EQ_VMA) + SECTION_data (ram, 0x10000400, FOLLOWING (.got)) + SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x10000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x10000000 + 1024*32-CYGHWR_HAL_CORTEXM_LPC17XX_IAP; + + diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_arch.h b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_arch.h @@ -0,0 +1,63 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2010-12-29 +// Purpose: LPC1766STK platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_ARCH_H +// End of plf_arch.h diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_intr.h b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2010-12-29 +// Purpose: LPC1766STK platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_INTR_H +// End of plf_intr.h diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_io.h b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/include/plf_io.h @@ -0,0 +1,92 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2011-01-02 +// Purpose: LPC1766STK platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#if (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 20000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM20MHZ) +#elif (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 40000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM40MHZ) +#elif (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 60000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM60MHZ) +#elif (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 80000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM80MHZ) +#elif (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 100000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM100MHZ) +#elif (CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED <= 120000000) +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIM120MHZ) +#else +#define CYGHWR_HAL_LPC17XX_REG_FLASHTIM CYGHWR_HAL_LPC17XX_REG_FLTSET(CYGHWR_HAL_LPC17XX_REG_FLTIMSAFE) +#endif + + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= + + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_IO_H +// End of plf_io.h diff --git a/packages/hal/cortexm/lpc17xx/lpc1766stk/current/src/lpc1766stk_misc.c b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/src/lpc1766stk_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/lpc1766stk/current/src/lpc1766stk_misc.c @@ -0,0 +1,256 @@ +//========================================================================== +// +// lpc1766stk_misc.c +// +// Cortex-M3 LPC1766STK HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2010-12-22 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +# include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +static inline void hal_gpio_init(void); + + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void +hal_system_init(void) +{ +#if defined(CYG_HAL_STARTUP_ROM) | defined(CYG_HAL_STARTUP_SRAM) + hal_gpio_init(); +#endif + +#if defined(CYG_HAL_STARTUP_ROM) + { + // Set flash accelerator according to CPU clock speed. + cyg_uint32 regval; + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_FLASHCFG, regval); + regval &= ~CYGHWR_HAL_LPC17XX_REG_FLTIM_MASK; + regval |= CYGHWR_HAL_LPC17XX_REG_FLASHTIM; + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_FLASHCFG, regval); + } +#endif +} + + +//=========================================================================== +// hal_gpio_init +//=========================================================================== +static inline void +hal_gpio_init(void) +{ + // Enable UART0 and UART1 (has wired flow control and line status lines) + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL0, + (1 /* TXD0 */ << 4) | + (1 /* RXD0 */ << 6) | + (1 /* TXD1 */ << 30) + ); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL1, + (1 /* RXD1 */ << 0) | + (1 /* CTS1 */ << 2) | + (1 /* DCD1 */ << 4) | + (1 /* DSR1 */ << 6) | + (1 /* DTR1 */ << 8) | + (1 /* RTS1 */ << 12) + ); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL2, 0); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL3, 0); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL4, 0); +#if 0 // not used + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL5, 0); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL6, 0); +#endif + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL7, 0); +#if 0 // not used + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL8, 0); +#endif + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL9, 0); + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL10, 0); +} + + +//========================================================================== + +__externC void +hal_platform_init(void) +{ +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct { + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = { + { + // Main RAM (On-chip SRAM in code area) + CYGMEM_REGION_ram, CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 1}, +#ifdef CYGMEM_REGION_ahb_sram_bank0 + { + // On-chip AHB SRAM bank 0 + CYGMEM_REGION_ahb_sram_bank0, CYGMEM_REGION_ahb_sram_bank0 + CYGMEM_REGION_ahb_sram_bank0_SIZE - 1}, +#endif +#ifdef CYGMEM_REGION_ahb_sram_bank1 + { + // On-chip AHB SRAM bank 1 + CYGMEM_REGION_ahb_sram_bank1, CYGMEM_REGION_ahb_sram_bank1 + CYGMEM_REGION_ahb_sram_bank1_SIZE - 1}, +#endif +#ifdef CYGMEM_REGION_flash + { + // On-chip flash + CYGMEM_REGION_flash, CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1}, +#endif +#ifdef CYGMEM_REGION_rom + { + // External flash + CYGMEM_REGION_rom, CYGMEM_REGION_rom + CYGMEM_REGION_rom_SIZE - 1}, +#endif + { + 0xE0000000, 0x00000000 - 1}, // Cortex-M peripherals + { + 0x40000000, 0x60000000 - 1}, // Chip specific peripherals +}; + +__externC int +cyg_hal_stub_permit_data_access(CYG_ADDRESS addr, cyg_uint32 count) +{ + int i; + + for (i = 0; i < sizeof(hal_data_access) / sizeof(hal_data_access[0]); i++) { + if ((addr >= hal_data_access[i].start) && + (addr + count) <= hal_data_access[i].end) + return true; + } + + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the main (S)RAM and peripheral (AHB) SRAM banks. + + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_ahb_sram_bank0 + case 1: + *start = (unsigned char *)CYGMEM_REGION_ahb_sram_bank0; + *end = + (unsigned char *)(CYGMEM_REGION_ahb_sram_bank0 + + CYGMEM_REGION_ahb_sram_bank0_SIZE); + break; +#endif +#ifdef CYGMEM_REGION_ahb_sram_bank1 +# ifndef CYGMEM_REGION_ahb_sram_bank0 + case 1: +# else + case 2: +# endif + *start = (unsigned char *)CYGMEM_REGION_ahb_sram_bank1; + *end = + (unsigned char *)(CYGMEM_REGION_ahb_sram_bank1 + + CYGMEM_REGION_ahb_sram_bank1_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} + +#endif // CYGPKG_REDBOOT + + +//========================================================================== +// EOF lpc1766stk_misc.c diff --git a/packages/hal/cortexm/lpc17xx/var/current/ChangeLog b/packages/hal/cortexm/lpc17xx/var/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/ChangeLog @@ -0,0 +1,61 @@ +2012-01-24 Ilija Kocho + + * cdl/hal_cortexm_lpc17xx.cdl: + Fix interrupt minimal priority calculation. [ Bugzilla 1001432 ] + +2012-01-16 Ilija Kocho + + * cdl/hal_cortexm_lpc17xx.cdl: + * include/var_io.h: + * src/lpc17xx_misc.c: + Recognize Code Read Protection FLASH field + Reported by Bernard Fouché [Bugzilla 1001443 ] + +2011-05-13 John Dallaway + + * include/var_intr.h: Fix I2C interrupt definitions issue reported + by Pavel Glinskii. Also fix CYGNUM_HAL_INTERRUPT_NVIC_MAX from Ilija + Kocho. + +2011-03-14 John Dallaway + + * cdl/hal_cortexm_lpc17xx.cdl: Do not implement the + CYGINT_PROFILE_HAL_TIMER interface at present. + +2010-12-10 Ilija Kocho + + * cdl/hal_cortexm_lpc17xx.cdl: + * include/hal_cache.h: + * include/hal_diag.h: + * include/plf_stub.h: + * include/var_arch.h: + * include/variant.inc: + * include/var_intr.h: + * include/var_io.h: + * src/hal_diag.c: + * src/lpc17xx_misc.c: + New package -- NXP LPC17XX variant HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/lpc17xx/var/current/cdl/hal_cortexm_lpc17xx.cdl b/packages/hal/cortexm/lpc17xx/var/current/cdl/hal_cortexm_lpc17xx.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/cdl/hal_cortexm_lpc17xx.cdl @@ -0,0 +1,468 @@ +##========================================================================== +## +## hal_cortexm_lpc17xx.cdl +## +## Cortex-M LPC 1700 variant HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2010, 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): ilijak +## Date: 2010-12-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_LPC17XX { + display "Cortex-M3 LPC 17XX Variant" + parent CYGPKG_HAL_CORTEXM + hardware + include_dir cyg/hal + define_header hal_cortexm_lpc17xx.h + description " + This package provides generic support for the NXP Cortex-M based + LPC17xx microcontroller family. It is also necessary to select + a variant and platform HAL package." + + compile hal_diag.c lpc17xx_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + + requires { CYGHWR_HAL_CORTEXM == "M3" } + + cdl_option CYGHWR_HAL_CORTEXM_LPC17XX { + display "LPC17xx member in use" + flavor data + default_value { "1766" } + legal_values { + "1751" "1752" "1754" "1756" "1758" "1759" "1763" "1764" + "1765" "1766" "1767" "1768" "1769" } + description " + The LPC17xx has several variants, the main differences being + in the size of on-chip FLASH and SRAM and numbers of some + peripherals. This option allows the platform HAL to select + the specific microcontroller fitted." + } + + cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS { + display "CPU priority levels" + flavor data + calculated 5 + description " + This option defines the number of bits used to encode the + exception priority levels that this variant of the Cortex-M + CPU implements." + } + + cdl_option CYGNUM_HAL_IRQ_PRIORITY_MIN { + display "minimal interrupt priority" + flavor data + no_define + calculated 0xFFFF&\ + ((((1< +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/hal_diag.h b/packages/hal/cortexm/lpc17xx/var/current/include/hal_diag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/hal_diag.h @@ -0,0 +1,89 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H +//============================================================================= +// +// hal_diag.h +// +// HAL diagnostics +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributor(s): ilijak +// Date: 2008-07-30 +// Purpose: HAL diagnostics +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include +#include + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +# define HAL_DIAG_INIT() hal_if_diag_init() +# define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +# define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else + +__externC void hal_plf_diag_init(void); +__externC void hal_plf_diag_putc(char); +__externC cyg_uint8 hal_plf_diag_getc(void); + +# ifndef HAL_DIAG_INIT +# define HAL_DIAG_INIT() hal_plf_diag_init() +# endif + +# ifndef HAL_DIAG_WRITE_CHAR +# define HAL_DIAG_WRITE_CHAR(__c) hal_plf_diag_putc(__c) +# endif + +# ifndef HAL_DIAG_READ_CHAR +# define HAL_DIAG_READ_CHAR(__c) (__c) = hal_plf_diag_getc() +# endif + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_DIAG_H +// End of hal_diag.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/lpc17xx_misc.h b/packages/hal/cortexm/lpc17xx/var/current/include/lpc17xx_misc.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/lpc17xx_misc.h @@ -0,0 +1,204 @@ +#ifndef CYGONCE_HAL_CORTEXM_LPC17XX_VAR_LPC17XX_MISC_H +#define CYGONCE_HAL_CORTEXM_LPC17XX_VAR_LPC17XX_MISC_H +//============================================================================= +// +// lpc17xx_misc.h +// +// HAL misc variant support code for NCP LPC17xx header file +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): andyj +// Contributors: jani, ilijak +// Date: 2010-12-29 +// Purpose: LPC17XX specific miscellaneous support header file +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Function to obtain the current processor clock settings +// Use PCLK identifiers below +// +externC cyg_uint32 hal_lpc_get_pclk(cyg_uint32 pclk_id); +#define CYG_HAL_CORTEXM_LPC17XX_PCLK(_pclkid_) hal_lpc_get_pclk(_pclkid_) + +//----------------------------------------------------------------------------- +// Identifiers for peripheral clock. Use these identifiers with the function +// hal_get_pclk() +// +#define CYNUM_HAL_LPC17XX_PCLK_WDT 0 +#define CYNUM_HAL_LPC17XX_PCLK_TIMER0 1 +#define CYNUM_HAL_LPC17XX_PCLK_TIMER1 2 +#define CYNUM_HAL_LPC17XX_PCLK_UART0 3 +#define CYNUM_HAL_LPC17XX_PCLK_UART1 4 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCLK_PWM0 5 +#endif +#define CYNUM_HAL_LPC17XX_PCLK_PWM1 6 +#define CYNUM_HAL_LPC17XX_PCLK_I2C0 7 +#define CYNUM_HAL_LPC17XX_PCLK_SPI 8 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCLK_RTC 9 +#endif +#define CYNUM_HAL_LPC17XX_PCLK_SSP1 10 +#define CYNUM_HAL_LPC17XX_PCLK_DAC 11 +#define CYNUM_HAL_LPC17XX_PCLK_ADC 12 +#define CYNUM_HAL_LPC17XX_PCLK_CAN1 13 +#define CYNUM_HAL_LPC17XX_PCLK_CAN2 14 +#define CYNUM_HAL_LPC17XX_PCLK_ACF 15 +#define CYNUM_HAL_LPC17XX_PCLK_QEI 16 +#define CYNUM_HAL_LPC17XX_PCLK_GPIO 17 +#define CYNUM_HAL_LPC17XX_PCLK_PCB 18 +#define CYNUM_HAL_LPC17XX_PCLK_I2C1 19 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCLK_SSP0 21 +#endif +#define CYNUM_HAL_LPC17XX_PCLK_TIMER2 22 +#define CYNUM_HAL_LPC17XX_PCLK_TIMER3 23 +#define CYNUM_HAL_LPC17XX_PCLK_UART2 24 +#define CYNUM_HAL_LPC17XX_PCLK_UART3 25 +#define CYNUM_HAL_LPC17XX_PCLK_I2C2 26 +#define CYNUM_HAL_LPC17XX_PCLK_I2S 27 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCLK_MCI 28 +#endif +#define CYNUM_HAL_LPC17XX_PCLK_RIT 29 +#define CYNUM_HAL_LPC17XX_PCLK_SYSCON 30 +#define CYNUM_HAL_LPC17XX_PCLK_MC 31 + + +//----------------------------------------------------------------------------- +// Function to enable/disable power for certain peripheral +// Use PCONP identifiers from below +// +externC void hal_lpc_set_power(cyg_uint8 pconp_id, int on); +#define CYG_HAL_CORTEXM_LPC17XX_SET_POWER(_pconp_id_, _on_) \ + hal_lpc_set_power((_pconp_id_), (_on_)) + + +//----------------------------------------------------------------------------- +// Identifiers for power control, hal_get_pclk() +// +#define CYNUM_HAL_LPC17XX_PCONP_TIMER0 1 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER1 2 +#define CYNUM_HAL_LPC17XX_PCONP_UART0 3 +#define CYNUM_HAL_LPC17XX_PCONP_UART1 4 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCONP_PWM0 5 +#endif +#define CYNUM_HAL_LPC17XX_PCONP_PWM1 6 +#define CYNUM_HAL_LPC17XX_PCONP_I2C0 7 +#define CYNUM_HAL_LPC17XX_PCONP_SPI 8 +#define CYNUM_HAL_LPC17XX_PCONP_RTC 9 +#define CYNUM_HAL_LPC17XX_PCONP_SSP1 10 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCONP_EMC 11 +#endif +#define CYNUM_HAL_LPC17XX_PCONP_ADC 12 +#define CYNUM_HAL_LPC17XX_PCONP_CAN1 13 +#define CYNUM_HAL_LPC17XX_PCONP_CAN2 14 +#define CYNUM_HAL_LPC17XX_PCONP_GPIO 15 +#define CYNUM_HAL_LPC17XX_PCONP_RIT 16 +#define CYNUM_HAL_LPC17XX_PCONP_MCPWM 17 +#define CYNUM_HAL_LPC17XX_PCONP_QEI 18 +#define CYNUM_HAL_LPC17XX_PCONP_I2C1 19 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCONP_LCD 20 +#endif +#define CYNUM_HAL_LPC17XX_PCONP_SSP0 21 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER2 22 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER3 23 +#define CYNUM_HAL_LPC17XX_PCONP_UART2 24 +#define CYNUM_HAL_LPC17XX_PCONP_UART3 25 +#define CYNUM_HAL_LPC17XX_PCONP_I2C2 26 +#define CYNUM_HAL_LPC17XX_PCONP_I2S 27 +#if 0 // Not implemented on LPC17xx +# define CYNUM_HAL_LPC17XX_PCONP_SDC 28 +#endif +#define CYNUM_HAL_LPC17XX_PCONP_GPDMA 29 +#define CYNUM_HAL_LPC17XX_PCONP_ENET 30 +#define CYNUM_HAL_LPC17XX_PCONP_USB 31 + + +//----------------------------------------------------------------------------- +// Configure pin function +// +externC void hal_lpc_set_pin_function(cyg_uint8 port, cyg_uint8 pin, + cyg_uint8 function); +#define CYG_HAL_CORTEXM_LPC17XX_PIN_CFG(_port_, _pin_, _func_) \ + hal_lpc_set_pin_function((_port_), (_pin_), (_func_)) + + +//----------------------------------------------------------------------------- +// Macros to derive the baudrate divider values for the internal UARTs +// The LPC17xx family supports different baudrate clocks for each single +// UART. So we need a way to calculate the baudrate for each single UART +// Now we rely on the fact that we use the same baudrate clock for all +// UARTs and we query only UART0 +//----------------------------------------------------------------------------- + +#define CYG_HAL_CORTEXM_LPC17XX_BAUD_GENERATOR(_pclkid_, baud) \ + (CYG_HAL_CORTEXM_LPC17XX_PCLK(_pclkid_)/((baud)*16)) + +//----------------------------------------------------------------------------- +// LPC17XX platform reset (watchdog resets the board) +//----------------------------------------------------------------------------- +#if 0 +externC void hal_lpc_watchdog_reset(void); + +#define HAL_PLATFORM_RESET() hal_lpc_watchdog_reset() +#define HAL_PLATFORM_RESET_ENTRY 0 +#endif + + +//----------------------------------------------------------------------------- +// Compatibility layer for LPC2xxx device drivers +//----------------------------------------------------------------------------- +#define CYNUM_HAL_LPC24XX_PCLK_UART0 CYNUM_HAL_LPC17XX_PCLK_UART0 +#define CYNUM_HAL_LPC24XX_PCLK_UART1 CYNUM_HAL_LPC17XX_PCLK_UART1 +#define CYNUM_HAL_LPC24XX_PCLK_UART2 CYNUM_HAL_LPC17XX_PCLK_UART2 +#define CYNUM_HAL_LPC24XX_PCLK_UART3 CYNUM_HAL_LPC17XX_PCLK_UART3 + +#define CYG_HAL_ARM_LPC24XX_BAUD_GENERATOR(_pclkid_, baud) \ + CYG_HAL_CORTEXM_LPC17XX_BAUD_GENERATOR(_pclkid_, baud) + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_CORTEXM_LPC17XX_VAR_LPC17XX_MISC_H +// End of lpc17xx_misc.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/plf_stub.h b/packages/hal/cortexm/lpc17xx/var/current/include/plf_stub.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/plf_stub.h @@ -0,0 +1,86 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:jskov, gthomas, jlarmour +// Date: 2008-07-30 +// Purpose: Platform HAL stub support for STM32 variant boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM +#include // architecture stub support +#include + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +__externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. + +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/var_arch.h b/packages/hal/cortexm/lpc17xx/var/current/include/var_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/var_arch.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H +//============================================================================= +// +// var_arch.h +// +// STM32 variant architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2008-07-30 +// Purpose: LPC17XX variant architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#include + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_ARCH_H +// End of var_arch.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/var_intr.h b/packages/hal/cortexm/lpc17xx/var/current/include/var_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/var_intr.h @@ -0,0 +1,120 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H +//========================================================================== +// +// var_intr.h +// +// HAL Interrupt and clock assignments for LPC17XX variants +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Date: 2010-12-29 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for NXP LPC17XX variants are +// defined here. +// +// Usage: #include +// However applications should include using +// instead to allow for platform overrides. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_WD (0+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIMER0 (1+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIMER1 (2+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIMER2 (3+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIMER3 (4+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART0 (5+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART1 (6+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART2 (7+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART3 (8+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_PWM1 (9+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C0 (10+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C2 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#define CYGNUM_HAL_INTERRUPT_SPI (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SSP0 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SSP1 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#define CYGNUM_HAL_INTERRUPT_PLL0 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RTCDEV (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#define CYGNUM_HAL_INTERRUPT_EINT0 (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_EINT1 (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_EINT2 (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_EINT3 (21+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_AD (22+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_BOD (23+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_USB (24+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN (25+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA (26+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2S (27+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ETH (28+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_RITINT (29+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_MCPWM (30+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_QENC (31+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_PLL1 (32+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_USBAI (33+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CANWAKE (34+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_CANWAKE) + +#define CYGNUM_HAL_ISR_MIN 0 +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_CANWAKE +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX+1) + +#define CYGNUM_HAL_VSR_MIN 0 + +#ifndef CYGNUM_HAL_VSR_MAX +# define CYGNUM_HAL_VSR_MAX (CYGNUM_HAL_VECTOR_SYS_TICK+CYGNUM_HAL_INTERRUPT_NVIC_MAX) +#endif + +#define CYGNUM_HAL_VSR_COUNT (CYGNUM_HAL_VSR_MAX+1) + +//========================================================================== +// Interrupt mask and config for variant-specific devices + +//---------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_INTR_H +// EOF var_intr.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/var_io.h b/packages/hal/cortexm/lpc17xx/var/current/include/var_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/var_io.h @@ -0,0 +1,413 @@ +#ifndef CYGONCE_HAL_VAR_IO_H +#define CYGONCE_HAL_VAR_IO_H +//============================================================================= +// +// var_io.h +// +// Variant specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Original data: Uwe Kindler ( LPC24XX port ) +// Date: 2010-12-22 +// Purpose: LPC17XX variant specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +//============================================================================= +// Peripherals + +//============================================================================= +// Cortex-M architecture register + +// VTOR setting +#ifndef CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM +#define CYGARC_REG_NVIC_VTOR_TBLBASE_SRAM BIT_(28) +#endif + +//--------------------------------------------------------------------------- +// Utilize LPC17xx flash between startup vectors and 0x2fc +// for misc funtions. +#ifdef CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION +# define CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR \ + CYGBLD_ATTRIB_SECTION(".lpc17xx_misc") +#else +# define CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR +#endif + +__externC const cyg_uint32* hal_lpc17xx_crp_p(void); + +// LPC System Control Block +#define CYGHWR_HAL_LPC17XX_REG_SCB_BASE 0x400FC000 + +// Flash accelerator +#define CYGHWR_HAL_LPC17XX_REG_FLASHCFG 0x0000 +#define CYGHWR_HAL_LPC17XX_REG_FLTSET(__tim) (__tim << 12) +#define CYGHWR_HAL_LPC17XX_REG_FLTIM20MHZ 0x0 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM40MHZ 0x1 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM60MHZ 0x2 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM80MHZ 0x3 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM100MHZ 0x4 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM120MHZ 0x4 +#define CYGHWR_HAL_LPC17XX_REG_FLTIMSAFE 0x5 +#define CYGHWR_HAL_LPC17XX_REG_FLTIM_MASK CYGHWR_HAL_LPC17XX_REG_FLTSET(0x0f) + +// PLL. Registers are offsets from base of this subsystem +#define CYGHWR_HAL_LPC17XX_REG_PLL0CON 0x0080 +#define CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLC (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_PLL0CFG 0x0084 +#define CYGHWR_HAL_LPC17XX_REG_PLL0STAT 0x0088 +#define CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLLE (1<<24) +#define CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLLC (1<<25) +#define CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLOCK (1<<26) +#define CYGHWR_HAL_LPC17XX_REG_PLL0FEED 0x008C + +#define CYGHWR_HAL_LPC17XX_REG_PLL1CON 0x00A0 +#define CYGHWR_HAL_LPC17XX_REG_PLL1CFG 0x00A4 +#define CYGHWR_HAL_LPC17XX_REG_PLL1STAT 0x00A8 +#define CYGHWR_HAL_LPC17XX_REG_PLL1STAT_PLLE (1<<8) +#define CYGHWR_HAL_LPC17XX_REG_PLL1STAT_PLLC (1<<9) +#define CYGHWR_HAL_LPC17XX_REG_PLL1STAT_PLOCK (1<<10) +#define CYGHWR_HAL_LPC17XX_REG_PLL1FEED 0x00AC + +// Clock source selection register +#define CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL 0x010C +#define CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL_IRC 0x00 +#define CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL_MAIN 0x01 +#define CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL_RTC 0x10 + +#define CYGHWR_HAL_LPC17XX_REG_CCLKCFG 0x0104 +#define CYGHWR_HAL_LPC17XX_REG_USBCLKCFG 0x0108 +/* #define CYGHWR_HAL_LPC17XX_REG_IRCTRIM 0x01A4 */ +#define CYGHWR_HAL_LPC17XX_REG_PCLKSEL0 0x01A8 +#define CYGHWR_HAL_LPC17XX_REG_PCLKSEL1 0x01AC +#define CYGHWR_HAL_LPC17XX_REG_INTWAKE 0x0144 + +// Power Control +#define CYGHWR_HAL_LPC17XX_REG_PCON 0x00C0 +#define CYGHWR_HAL_LPC17XX_REG_PCON_IDL (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_PCON_PD (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_PCONP 0x00C4 +#define CYGHWR_HAL_LPC17XX_REG_PCONP_TIM0 (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_TIM1 (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_URT0 (1<<3) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_URT1 (1<<4) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_PWM0 (1<<5) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_PWM1 (1<<6) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_I2C0 (1<<7) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_SPI (1<<8) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_RTC (1<<9) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_SSP1 (1<<10) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_EMC (1<<11) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_AD (1<<12) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_CAN1 (1<<13) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_CAN2 (1<<14) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_I2C1 (1<<19) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_LCD (1<<20) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_SSP0 (1<<21) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_TIM2 (1<<22) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_TIM3 (1<<23) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_URT2 (1<<24) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_URT3 (1<<25) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_I2C2 (1<<26) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_I2S (1<<27) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_SD (1<<28) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_DMA (1<<29) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_ENET (1<<30) +#define CYGHWR_HAL_LPC17XX_REG_PCONP_USB (1<<31) + +// Utility +#define CYGHWR_HAL_LPC17XX_REG_CLKOUTCFG 0x01C8 + +// System control and status register +#define CYGHWR_HAL_LPC17XX_REG_SCS 0x01A0 +#define CYGHWR_HAL_LPC17XX_REG_SCS_OSCEN 0x20 +#define CYGHWR_HAL_LPC17XX_REG_SCS_OSCSTAT 0x40 + + +//============================================================================= +// Pin Connect Block (PIN) + +#define CYGHWR_HAL_LPC17XX_REG_PIN_BASE 0x4002C000 + +#define CYGHWR_HAL_LPC17XX_REG_PINSEL0 0x000 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL1 0x004 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL2 0x008 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL3 0x00C +#define CYGHWR_HAL_LPC17XX_REG_PINSEL4 0x010 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL5 0x014 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL6 0x018 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL7 0x01C +#define CYGHWR_HAL_LPC17XX_REG_PINSEL8 0x020 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL9 0x024 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL10 0x028 +#define CYGHWR_HAL_LPC17XX_REG_PINSEL11 0x02C + +#define CYGHWR_HAL_LPC17XX_REG_PINMODE0 0x040 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE1 0x044 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE2 0x048 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE3 0x04C +#define CYGHWR_HAL_LPC17XX_REG_PINMODE4 0x050 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE5 0x054 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE6 0x058 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE7 0x05C +#define CYGHWR_HAL_LPC17XX_REG_PINMODE8 0x060 +#define CYGHWR_HAL_LPC17XX_REG_PINMODE9 0x064 + +#define CYGHWR_HAL_LPC17XX_PIN_SET(_reg, _func) \ + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_PIN_BASE + _reg, _func) + +#define CYGHWR_HAL_LPC17XX_PIN_GET(_reg, _dst) \ + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_PIN_BASE + _reg, _dst) + +//============================================================================= +// UARTs (Ux) + +#define CYGHWR_HAL_LPC17XX_REG_UART0_BASE 0x4000C000 +#define CYGHWR_HAL_LPC17XX_REG_UART1_BASE 0x40010000 +#define CYGHWR_HAL_LPC17XX_REG_UART2_BASE 0x40098000 +#define CYGHWR_HAL_LPC17XX_REG_UART3_BASE 0x4009C000 + +// Registers are offsets from base for each UART +#define CYGHWR_HAL_LPC17XX_REG_UxRBR 0x0000 // DLAB=0 read +#define CYGHWR_HAL_LPC17XX_REG_UxTHR 0x0000 // DLAB=0 write +#define CYGHWR_HAL_LPC17XX_REG_UxDLL 0x0000 // DLAB=1 r/w +#define CYGHWR_HAL_LPC17XX_REG_UxIER 0x0004 // DLAB=0 +#define CYGHWR_HAL_LPC17XX_REG_UxIER_RXDATA_INT (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_UxIER_THRE_INT (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_UxIER_RXLS_INT (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_U1IER_RXMS_INT (1<<3) // U1 only +#define CYGHWR_HAL_LPC17XX_REG_UxDLM 0x0004 // DLAB=1 + +#define CYGHWR_HAL_LPC17XX_REG_UxIIR 0x0008 // read +#define CYGHWR_HAL_LPC17XX_REG_UxIIR_IIR0 (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_UxIIR_IIR1 (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_UxIIR_IIR2 (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_UxIIR_IIR3 (1<<3) +#define CYGHWR_HAL_LPC17XX_REG_UxIIR_FIFOS (0xB0) + +#define CYGHWR_HAL_LPC17XX_REG_UxFCR 0x0008 // write +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_FIFO_ENA (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_FIFO_RESET (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_TX_FIFO_RESET (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_TRIGGER_0 (0x00) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_TRIGGER_1 (0x40) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_TRIGGER_2 (0x80) +#define CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_TRIGGER_3 (0xB0) + +#define CYGHWR_HAL_LPC17XX_REG_UxLCR 0x000C +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_WORD_LENGTH_5 (0x00) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_WORD_LENGTH_6 (0x01) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_WORD_LENGTH_7 (0x02) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_WORD_LENGTH_8 (0x03) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_STOP_1 (0x00) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_STOP_2 (0x04) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_PARITY_ENA (0x08) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_PARITY_ODD (0x00) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_PARITY_EVEN (0x10) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_PARITY_ONE (0x20) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_PARITY_ZERO (0x30) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_BREAK_ENA (0x40) +#define CYGHWR_HAL_LPC17XX_REG_UxLCR_DLAB (0x80) + +// Modem Control Register is UART1 only +#define CYGHWR_HAL_LPC17XX_REG_U1MCR 0x0010 +#define CYGHWR_HAL_LPC17XX_REG_U1MCR_DTR (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_U1MCR_RTS (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_U1MCR_LOOPBACK (1<<4) + +#define CYGHWR_HAL_LPC17XX_REG_UxLSR 0x0014 +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_RDR (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_OE (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_PE (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_FE (1<<3) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_BI (1<<4) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_THRE (1<<5) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_TEMT (1<<6) +#define CYGHWR_HAL_LPC17XX_REG_UxLSR_RX_FIFO_ERR (1<<7) + +// Modem Status Register is UART1 only +#define CYGHWR_HAL_LPC17XX_REG_U1MSR 0x0018 +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_DCTS (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_DDSR (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_RI_FALL (1<<2) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_DDCD (1<<3) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_CTS (1<<4) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_DSR (1<<5) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_RI (1<<6) +#define CYGHWR_HAL_LPC17XX_REG_U1MSR_DCD (1<<7) + +#define CYGHWR_HAL_LPC17XX_REG_UxSCR 0x001C +#define CYGHWR_HAL_LPC17XX_REG_UxACR 0x0020 +#define CYGHWR_HAL_LPC17XX_REG_U3ICR 0x0024 +#define CYGHWR_HAL_LPC17XX_REG_UxFDR 0x0028 +#define CYGHWR_HAL_LPC17XX_REG_UxTER 0x0030 + +// RTC +#define CYGHWR_HAL_LPC17XX_REG_RTC_BASE 0x40024000 +#define CYGARC_HAL_LPC2XXX_REG_RTC_BASE CYGHWR_HAL_LPC17XX_REG_RTC_BASE + +// Registers are offsets from base of this subsystem +#define CYGHWR_HAL_LPC17XX_REG_RTC_ILR 0x0000 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ILR_CIF (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_RTC_ILR_ALF (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_RTC_CTC 0x0004 +#define CYGHWR_HAL_LPC17XX_REG_RTC_CCR 0x0008 +#define CYGHWR_HAL_LPC17XX_REG_RTC_CCR_CLKEN (1<<0) +#define CYGHWR_HAL_LPC17XX_REG_RTC_CCR_CTCRST (1<<1) +#define CYGHWR_HAL_LPC17XX_REG_RTC_CIIR 0x000C +#define CYGHWR_HAL_LPC17XX_REG_RTC_AMR 0x0010 +#define CYGHWR_HAL_LPC17XX_REG_RTC_CTIME0 0x0014 +#define CYGHWR_HAL_LPC17XX_REG_RTC_CTIME1 0x0018 +#define CYGHWR_HAL_LPC17XX_REG_RTC_CTIME2 0x001C +#define CYGHWR_HAL_LPC17XX_REG_RTC_SEC 0x0020 +#define CYGHWR_HAL_LPC17XX_REG_RTC_MIN 0x0024 +#define CYGHWR_HAL_LPC17XX_REG_RTC_HOUR 0x0028 +#define CYGHWR_HAL_LPC17XX_REG_RTC_DOM 0x002C +#define CYGHWR_HAL_LPC17XX_REG_RTC_DOW 0x0030 +#define CYGHWR_HAL_LPC17XX_REG_RTC_DOY 0x0034 +#define CYGHWR_HAL_LPC17XX_REG_RTC_MONTH 0x0038 +#define CYGHWR_HAL_LPC17XX_REG_RTC_YEAR 0x003C +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALSEC 0x0060 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALMIN 0x0064 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALHOUR 0x0068 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALDOM 0x006C +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALDOW 0x0070 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALDOY 0x0074 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALMON 0x0078 +#define CYGHWR_HAL_LPC17XX_REG_RTC_ALYEAR 0x007C +#define CYGHWR_HAL_LPC17XX_REG_RTC_PREINT 0x0080 +#define CYGHWR_HAL_LPC17XX_REG_RTC_PREFRAC 0x0084 + +// Ethernet (EMAC) +#define CYGHWR_HAL_LPC17XX_REG_EMAC_BASE 0x50000000 + +// End Peripherals + +#ifndef __ASSEMBLER__ + +__externC void hal_plf_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud ); + +//----------------------------------------------------------------------------- +// Configure pin function +// +__externC void hal_set_pin_function(cyg_uint8 port, cyg_uint8 pin, + cyg_uint8 function); + +//----------------------------------------------------------------------------- +// Function to enable/disable power for certain peripheral +// Use PCONP identifiers from below +// +externC void hal_lpc_set_power(cyg_uint8 pconp_id, int on); + + +//----------------------------------------------------------------------------- +// Identifiers for power control, hal_get_pclk() +// +#define CYNUM_HAL_LPC17XX_PCONP_TIMER0 1 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER1 2 +#define CYNUM_HAL_LPC17XX_PCONP_UART0 3 +#define CYNUM_HAL_LPC17XX_PCONP_UART1 4 +#define CYNUM_HAL_LPC17XX_PCONP_PWM0 5 +#define CYNUM_HAL_LPC17XX_PCONP_PWM1 6 +#define CYNUM_HAL_LPC17XX_PCONP_I2C0 7 +#define CYNUM_HAL_LPC17XX_PCONP_SPI 8 +#define CYNUM_HAL_LPC17XX_PCONP_RTC 9 +#define CYNUM_HAL_LPC17XX_PCONP_SSP1 10 +#define CYNUM_HAL_LPC17XX_PCONP_EMC 11 +#define CYNUM_HAL_LPC17XX_PCONP_ADC 12 +#define CYNUM_HAL_LPC17XX_PCONP_CAN1 13 +#define CYNUM_HAL_LPC17XX_PCONP_CAN2 14 +#define CYNUM_HAL_LPC17XX_PCONP_I2C1 19 +#define CYNUM_HAL_LPC17XX_PCONP_LCD 20 +#define CYNUM_HAL_LPC17XX_PCONP_SSP0 21 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER2 22 +#define CYNUM_HAL_LPC17XX_PCONP_TIMER3 23 +#define CYNUM_HAL_LPC17XX_PCONP_UART2 24 +#define CYNUM_HAL_LPC17XX_PCONP_UART3 25 +#define CYNUM_HAL_LPC17XX_PCONP_I2C2 26 +#define CYNUM_HAL_LPC17XX_PCONP_I2S 27 +#define CYNUM_HAL_LPC17XX_PCONP_SDC 28 +#define CYNUM_HAL_LPC17XX_PCONP_GPDMA 29 +#define CYNUM_HAL_LPC17XX_PCONP_ENET 30 +#define CYNUM_HAL_LPC17XX_PCONP_USB 31 + +#endif // ifndef __ASSEMBLER__ + + +//----------------------------------------------------------------------------- +// LPC2xxx compatibility block +// These definitions enable reusing of compatible LPC2xxx devs. + +// UART +#define CYGARC_HAL_LPC24XX_REG_UART0_BASE CYGHWR_HAL_LPC17XX_REG_UART0_BASE +#define CYGARC_HAL_LPC24XX_REG_UART1_BASE CYGHWR_HAL_LPC17XX_REG_UART1_BASE +#define CYGARC_HAL_LPC24XX_REG_UART2_BASE CYGHWR_HAL_LPC17XX_REG_UART2_BASE +#define CYGARC_HAL_LPC24XX_REG_UART3_BASE CYGHWR_HAL_LPC17XX_REG_UART3_BASE + +// RTC +#define CYGARC_HAL_LPC2XXX_REG_RTC_BASE CYGHWR_HAL_LPC17XX_REG_RTC_BASE + +// Ethernet (EMAC) +#define CYGARC_HAL_LPC2XXX_REG_EMAC_BASE CYGHWR_HAL_LPC17XX_REG_EMAC_BASE + +// System Control Block +#define CYGARC_HAL_LPC24XX_REG_SCB_BASE CYGHWR_HAL_LPC17XX_REG_SCB_BASE + +// Power Control +#define CYGARC_HAL_LPC24XX_REG_PCONP CYGHWR_HAL_LPC17XX_REG_PCONP +#define CYGARC_HAL_LPC24XX_REG_PCONP_ENET CYGHWR_HAL_LPC17XX_REG_PCONP_ENET + +// Pin Connect Block (PIN) +#define CYGARC_HAL_LPC24XX_REG_PIN_BASE CYGHWR_HAL_LPC17XX_REG_PIN_BASE +#define CYGARC_HAL_LPC24XX_REG_PINSEL2 CYGHWR_HAL_LPC17XX_REG_PINSEL2 +#define CYGARC_HAL_LPC24XX_REG_PINSEL3 CYGHWR_HAL_LPC17XX_REG_PINSEL3 + +// End of LPC2xxx device compatibiliy block. + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_IO_H +// End of var_io.h diff --git a/packages/hal/cortexm/lpc17xx/var/current/include/variant.inc b/packages/hal/cortexm/lpc17xx/var/current/include/variant.inc new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/include/variant.inc @@ -0,0 +1,53 @@ +/*========================================================================== +// +// variant.inc +// +// Variant specific asm definitions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, ilijak +// Date: 2010-12-25 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +//========================================================================== +// EOF variant.inc diff --git a/packages/hal/cortexm/lpc17xx/var/current/src/hal_diag.c b/packages/hal/cortexm/lpc17xx/var/current/src/hal_diag.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/src/hal_diag.c @@ -0,0 +1,402 @@ +//============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jani, ilijak +// Contributors: jskov, gthomas +// Date: 2010-12-15 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types +#include // tracing + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED + +#include // USART registers +#include // peripheral identifiers + +//----------------------------------------------------------------------------- + +typedef struct { + cyg_uint32 uart; + CYG_ADDRESS base; + cyg_int32 msec_timeout; + int isr_vector; + int baud_rate; + cyg_uint8 periph_id; + int irq_state; +} channel_data_t; + +static channel_data_t lpc17xx_ser_channels[] = { +#if CYGINT_HAL_LPC17XX_UART0>0 + {0, + CYGHWR_HAL_LPC17XX_REG_UART0_BASE, + 1000, + CYGNUM_HAL_INTERRUPT_UART0, + CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD, + CYNUM_HAL_LPC17XX_PCLK_UART0}, +#endif +#if CYGINT_HAL_LPC17XX_UART1>0 + {1, + CYGHWR_HAL_LPC17XX_REG_UART1_BASE, + 1000, + CYGNUM_HAL_INTERRUPT_UART1, + CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD, + CYNUM_HAL_LPC17XX_PCLK_UART1} +#endif +}; + +#define HAL_PLF_SER_CHANNELS lpc17xx_ser_channels + + +//=========================================================================== +// Initialize diagnostic serial channel +//=========================================================================== +static void +hal_plf_serial_init_channel(void *__ch_data) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + CYG_ADDRESS base = chan->base; + + hal_plf_uart_setbaud(base, chan->baud_rate); + + // 8-1-no parity. + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxLCR, + CYGHWR_HAL_LPC17XX_REG_UxLCR_WORD_LENGTH_8 | + CYGHWR_HAL_LPC17XX_REG_UxLCR_STOP_1); + + // Reset and enable FIFO + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxFCR, + CYGHWR_HAL_LPC17XX_REG_UxFCR_FIFO_ENA | + CYGHWR_HAL_LPC17XX_REG_UxFCR_RX_FIFO_RESET | + CYGHWR_HAL_LPC17XX_REG_UxFCR_TX_FIFO_RESET); +} + + +//=========================================================================== +// Write single character +//=========================================================================== +void +hal_plf_serial_putc(void *__ch_data, char c) +{ + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + cyg_uint32 sr; + + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxLSR, sr); + } while ((sr & CYGHWR_HAL_LPC17XX_REG_UxLSR_THRE) == 0); + + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxTHR, c); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool +hal_plf_serial_getc_nonblock(void *__ch_data, cyg_uint8 *ch) +{ + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + cyg_uint32 sr; + cyg_uint32 c; + + CYGARC_HAL_SAVE_GP(); + + HAL_READ_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxLSR, sr); + + if ((sr & CYGHWR_HAL_LPC17XX_REG_UxLSR_RDR) == 0) + return false; + + HAL_READ_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxRBR, c); + + *ch = (cyg_uint8)c; + + CYGARC_HAL_RESTORE_GP(); + + return true; +} + +cyg_uint8 +hal_plf_serial_getc(void *__ch_data) +{ + cyg_uint8 ch; + + CYGARC_HAL_SAVE_GP(); + + while (!hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + + return ch; +} + +//============================================================================= +// Virtual vector HAL diagnostics + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +static void +hal_plf_serial_write(void *__ch_data, const cyg_uint8 *__buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) + hal_plf_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +hal_plf_serial_read(void *__ch_data, cyg_uint8 *__buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) + *__buf++ = hal_plf_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +hal_plf_serial_getc_timeout(void *__ch_data, cyg_uint8 *ch) +{ + int delay_count; + channel_data_t *chan = (channel_data_t *) __ch_data; + cyg_bool res; + + CYGARC_HAL_SAVE_GP(); + + // Delay in 10 us steps + delay_count = chan->msec_timeout * 100; + + while(true) { + res = hal_plf_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(10); + } + + CYGARC_HAL_RESTORE_GP(); + + return res; +} + +static int +hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base; + int ret = 0; + + va_list ap; + + CYGARC_HAL_SAVE_GP(); + + va_start(ap, __func); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + chan->irq_state = 1; + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxIER, + CYGHWR_HAL_LPC17XX_REG_UxIER_RXDATA_INT); + break; + case __COMMCTL_IRQ_DISABLE: + ret = chan->irq_state; + chan->irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxIER, + CYGHWR_HAL_LPC17XX_REG_UxIER_RXDATA_INT); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + chan->baud_rate = va_arg(ap, cyg_int32); + // Should we verify this value here? + hal_plf_uart_setbaud(base, chan->baud_rate); + ret = 0; + break; + default: + break; + } + va_end(ap); + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +hal_plf_serial_isr(void *__ch_data, int *__ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + channel_data_t *chan = (channel_data_t *) __ch_data; + cyg_uint8 ch; + + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + + if (hal_plf_serial_getc_nonblock(__ch_data, &ch)) { + if (cyg_hal_is_break((char *)&ch, 1)) + *__ctrlc = 1; + } + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + CYGARC_HAL_RESTORE_GP(); + + return 1; +} + +static void +hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t *comm; + int cur; + int i; + + cur = + CYGACC_CALL_IF_SET_CONSOLE_COMM + (CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + for (i = 0; i < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS; i++) { + hal_plf_serial_init_channel(&lpc17xx_ser_channels[i]); + + CYGACC_CALL_IF_SET_CONSOLE_COMM(i); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &lpc17xx_ser_channels[i]); + CYGACC_COMM_IF_WRITE_SET(*comm, hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, hal_plf_serial_getc_timeout); + } + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); + + // Set debug channel baud rate if different +#if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD) + lpc17xx_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]->baud_rate = + CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD; + update_baud_rate(&lpc17xx_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]); +#endif + +} + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + hal_plf_serial_init(); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//============================================================================= +// Non-Virtual vector HAL diagnostics + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +void +hal_plf_diag_init(void) +{ + hal_plf_serial_init(&lpc17xx_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]); +} + +void +hal_plf_diag_putc(char c) +{ + hal_plf_serial_putc(&lpc17xx_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL], c); +} + +cyg_uint8 +hal_plf_diag_getc(void) +{ + return + hal_plf_serial_getc(&lpc17xx_ser_channels + [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]); +} + +#endif // if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +//----------------------------------------------------------------------------- +// End of hal_diag.c diff --git a/packages/hal/cortexm/lpc17xx/var/current/src/lpc17xx_misc.c b/packages/hal/cortexm/lpc17xx/var/current/src/lpc17xx_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/lpc17xx/var/current/src/lpc17xx_misc.c @@ -0,0 +1,430 @@ +//========================================================================== +// +// lpc17xx_misc.c +// +// Cortex-M LPC17XX HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, ilijak +// Date: 2010-12-12 +// Description: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + + +#include +#include +#include +#ifdef CYGPKG_KERNEL +# include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header + +#include + + +//=========================================================================== +// DEFINES +//=========================================================================== + +cyg_uint32 hal_lpc17xx_sysclk; +cyg_uint32 hal_cortexm_systick_clock; + +cyg_uint32 hal_get_lpc_cpu_clock(void); + +void hal_start_clocks(void); + +void hal_lpc_start_main_clock(void); +void hal_lpc_start_usb_clock(void); +#if defined(CYGHWR_HAL_CORTEXM_LPC17XX_CLKOUT) +void hal_lpc_clock_out(void); +#endif +//========================================================================== + +#ifdef CYG_HAL_STARTUP_ROM + +//=========================================================================== +// LPC17xx Code Read Protection field field +//=========================================================================== + +// Note: LPC17xx Code Read Protection field field must be present in +// LPC17xx flash image and ocupy a word at 0x000002FC + +// For ".lpc17xx_crp" section definition see MLT files. + +const cyg_uint32 LPC17XX_CRP __attribute__((section(".lpc17xxcrp"), used)) = 0xFFFFFFFF; + +#endif // CYG_HAL_STARTUP_ROM + +const cyg_uint32* hal_lpc17xx_crp_p(void) +{ + return &LPC17XX_CRP; +} + +void +hal_variant_init(void) +{ +#if 1 /* !defined(CYG_HAL_STARTUP_RAM) */ + hal_start_clocks(); +#endif + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + hal_if_init(); +#endif +} + +//========================================================================== +// Setup up system clocks +// +// Set up clocks from configuration. In the future this should be extended so +// that clock rates can be changed at runtime. + + +void CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR +hal_start_clocks(void) +{ + // Main clock - for everything except USB + hal_lpc_start_main_clock(); + + // USB clock + hal_lpc_start_usb_clock(); + +#if defined CYGHWR_HAL_CORTEXM_LPC17XX_CLKOUT + hal_lpc_clock_out(); +#endif +} + + +void CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR +hal_lpc_start_main_clock(void) +{ + CYG_ADDRESS scb_base_p; + cyg_uint32 regval; + + scb_base_p = CYGHWR_HAL_LPC17XX_REG_SCB_BASE; + + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0STAT, regval); + if (regval & CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLLC) { + + // Enable PLL, disconnected + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0CON, + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0x55); + } + // Disable PLL, disconnected + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0CON, 0x00); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0x55); + + // Enables main oscillator and wait until it is usable + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_SCS, + CYGHWR_HAL_LPC17XX_REG_SCS_OSCEN); + do { + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_SCS, regval); + } while (!(regval & CYGHWR_HAL_LPC17XX_REG_SCS_OSCSTAT)); + + + // Select main OSC, 12MHz, as the PLL clock source + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL, + CYGHWR_HAL_LPC17XX_REG_CLKSRCSEL_MAIN); + + // Configure PLL multiplier and pre divider according to configuration + // values + regval = ((CYGHWR_HAL_CORTEXM_LPC17XX_PLL0_MUL - 1) | + (CYGHWR_HAL_CORTEXM_LPC17XX_PLL0_DIV - 1) << 16); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0CFG, regval); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0x55); + + // Enable PLL, disconnected + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0CON, + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0x55); + + // Set CPU clock divider + regval = CYGHWR_HAL_CORTEXM_LPC17XX_CPU_CLK_DIV - 1; + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_CCLKCFG, regval); + + // Check lock bit status + do { + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0STAT, regval); + } while (!(regval & CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLOCK)); + + // Connect CPU clock + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0CON, + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE | + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLC); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0FEED, 0x55); + + // Check connect bit status + do { + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL0STAT, regval); + } while (!(regval & CYGHWR_HAL_LPC17XX_REG_PLL0STAT_PLLC)); + + // Calculate system clock from configuration + hal_lpc17xx_sysclk = CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED; + hal_cortexm_systick_clock = hal_lpc17xx_sysclk; +} + +void CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR +hal_lpc_start_usb_clock(void) +{ + CYG_ADDRESS scb_base_p; + cyg_uint32 regval; + + scb_base_p = CYGHWR_HAL_LPC17XX_REG_SCB_BASE; + + // Configure PLL multiplier and pre divider according to + // configuration values + regval = ((CYGHWR_HAL_CORTEXM_LPC17XX_PLL1_MUL - 1) | + (CYGHWR_HAL_CORTEXM_LPC17XX_PLL1_DIV - 1) << 5); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1CFG, regval); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0x55); + + // Enable PLL, disconnected + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1CON, + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0x55); + + do { + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1STAT, regval); + } while (!(regval & CYGHWR_HAL_LPC17XX_REG_PLL1STAT_PLOCK)); + + // Connect USB clock + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1CON, + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLE | + CYGHWR_HAL_LPC17XX_REG_PLLCON_PLLC); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0xaa); + HAL_WRITE_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1FEED, 0x55); + + // Check connect bit status + do { + HAL_READ_UINT32(scb_base_p + CYGHWR_HAL_LPC17XX_REG_PLL1STAT, regval); + } while (!(regval & CYGHWR_HAL_LPC17XX_REG_PLL1STAT_PLLC)); +} + +#ifdef CYGHWR_HAL_CORTEXM_LPC17XX_CLKOUT +void CYGOPT_HAL_LPC17XX_MISC_FLASH_SECTION_ATTR +hal_lpc_clock_out(void) +{ + cyg_uint32 regval; + + CYGHWR_HAL_LPC17XX_PIN_GET(CYGHWR_HAL_LPC17XX_REG_PINSEL3, regval); + regval &= ~0x00c00000; + regval |= 0x00400000; + CYGHWR_HAL_LPC17XX_PIN_SET(CYGHWR_HAL_LPC17XX_REG_PINSEL3, regval); + + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_CLKOUTCFG, + CYGHWR_HAL_CORTEXM_LPC17XX_CLKOUT_SET); +} +#endif // CYGHWR_HAL_CORTEXM_LPC17XX_CLKOUT + + +cyg_uint32 +hal_lpc_get_cpu_clock(void) +{ + cyg_uint32 regval, + pll0stat_div, + pll0stat_mul, + cclkcfg; + + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_PLL0STAT, pll0stat_div); + pll0stat_mul = ((pll0stat_div >> 16) & 0xff) + 1; + pll0stat_div = 2 * ((pll0stat_div & 0x7fff) + 1); + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_CCLKCFG, cclkcfg); + cclkcfg = (cclkcfg & 0xff) + 1; + + regval = + CYGHWR_HAL_CORTEXM_LPC17XX_XTAL_FREQ * pll0stat_div / pll0stat_mul / + cclkcfg; + + return regval; +} + + +//=========================================================================== +// Get peripheral clock for a certain peripheral +//=========================================================================== +cyg_uint32 +hal_lpc_get_pclk(cyg_uint32 pclk_id) +{ + static const cyg_uint8 divider_tbl[4] = { + 4, 1, 2, 8 + }; + cyg_uint32 pclkselreg; + cyg_uint32 regval; + cyg_uint8 divider; + + CYG_ASSERT(pclk_id >= CYNUM_HAL_LPC17XX_PCLK_WDT && + pclk_id <= CYNUM_HAL_LPC17XX_PCLK_SYSCON, + "Invalid peripheral clock ID"); + + // Decide if we need PCLKSEL0 or PCLKSEL1 + pclkselreg = ((pclk_id <= CYNUM_HAL_LPC17XX_PCLK_ACF) ? + CYGHWR_HAL_LPC17XX_REG_PCLKSEL0 : + CYGHWR_HAL_LPC17XX_REG_PCLKSEL1); + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + pclkselreg, regval); + regval = (regval >> ((pclk_id & 0xF) << 1)) & 0x03; + divider = divider_tbl[regval]; + if ((8 == divider) && (pclk_id >= CYNUM_HAL_LPC17XX_PCLK_CAN1) + && (pclk_id <= CYNUM_HAL_LPC17XX_PCLK_ACF)) { + divider = 6; + } + return CYGHWR_HAL_CORTEXM_LPC17XX_CLOCK_SPEED / divider; +} + + +//=========================================================================== +// Set peripheral clock +//=========================================================================== +void +hal_lpc_set_pclk(cyg_uint32 peripheral_id, cyg_uint8 divider) +{ + static const cyg_uint8 clock_tbl[5] = { + 0x01, // divider 1 + 0x02, // divider 2 + 0x00, // divider 4 + 0x03, // divider 6 + 0x03 // divider 8 + }; + cyg_uint32 clock; + cyg_uint32 pclkselreg; + cyg_uint32 regval; + + CYG_ASSERT(peripheral_id >= CYNUM_HAL_LPC17XX_PCLK_WDT && + peripheral_id <= CYNUM_HAL_LPC17XX_PCLK_SYSCON, + "Invalid peripheral clock ID"); + CYG_ASSERT(divider <= 8, "Wrong peripheral clock divider value"); + + // Decide if we need PCLKSEL0 or PCLKSEL1 + pclkselreg = (peripheral_id <= CYNUM_HAL_LPC17XX_PCLK_ACF) ? + CYGHWR_HAL_LPC17XX_REG_PCLKSEL0 : CYGHWR_HAL_LPC17XX_REG_PCLKSEL1; + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + pclkselreg, regval); + clock = clock_tbl[divider >> 1]; + regval &= ~(0x03 << ((peripheral_id & 0xF) << 1)); + regval |= (clock << ((peripheral_id & 0xF) << 1)); + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + pclkselreg, regval); +} + + +//=========================================================================== +// Set pin function +//=========================================================================== +void +hal_lpc_set_pin_function(cyg_uint8 port, cyg_uint8 pin, cyg_uint8 function) +{ + cyg_uint32 regval; + cyg_uint8 pinsel_reg = port << 1; + + CYG_ASSERT(port <= 4, "Port value out of bounds"); + CYG_ASSERT(pin <= 31, "Pin value out of bounds"); + CYG_ASSERT(function <= 3, "Invalid function value"); + + pinsel_reg += (pin > 15) ? 1 : 0; + pinsel_reg <<= 2; + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_PIN_BASE + pinsel_reg, regval); + regval &= ~(0x03 << ((pin & 0xF) << 1)); + regval |= (function << ((pin & 0xF) << 1)); + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_PIN_BASE + pinsel_reg, regval); +} + +//=========================================================================== +// Enable/Disable power for certain peripheral +//=========================================================================== +void +hal_lpc_set_power(cyg_uint8 pconp_id, int on) +{ + cyg_uint32 regval; + + CYG_ASSERT(pconp_id >= CYNUM_HAL_LPC17XX_PCONP_TIMER0 && + pconp_id <= CYNUM_HAL_LPC17XX_PCONP_USB, + "Invalid peripheral power ID"); + HAL_READ_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_PCONP, regval); + if (on) { + regval |= (0x01 << pconp_id); + } else { + regval &= ~(0x01 << pconp_id); + } + + HAL_WRITE_UINT32(CYGHWR_HAL_LPC17XX_REG_SCB_BASE + + CYGHWR_HAL_LPC17XX_REG_PCONP, regval); +} + + +//========================================================================== +// UART baud rate +// +// Set the baud rate divider of a UART based on the requested rate and +// the current APB clock settings. + +void +hal_plf_uart_setbaud(cyg_uint32 base, cyg_uint32 baud) +{ + cyg_uint32 periph_id = CYNUM_HAL_LPC17XX_PCLK_UART0; + cyg_uint16 divider; + + if (CYGHWR_HAL_LPC17XX_REG_UART1_BASE == base) + periph_id = CYNUM_HAL_LPC17XX_PCLK_UART1; + divider = CYG_HAL_CORTEXM_LPC17XX_BAUD_GENERATOR(periph_id, baud); + // Set baudrate + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxLCR, + CYGHWR_HAL_LPC17XX_REG_UxLCR_DLAB); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxDLM, divider >> 8); + HAL_WRITE_UINT32(base + CYGHWR_HAL_LPC17XX_REG_UxDLL, divider & 0xFF); +} + +//========================================================================== +// EOF lpc17xx_misc.c diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/ChangeLog b/packages/hal/cortexm/stm32/stm3210e_eval/current/ChangeLog --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/ChangeLog +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/ChangeLog @@ -1,3 +1,58 @@ +2012-04-20 Ilija Stanislevik + + * src/stm3210e_eval_eth_enc424j600.c: New file, initialization + of optional enc424j600 ethernet over SPI. + + * include/plf_io.h: Add macro for initialization of optional + enc424j600 ethernet over SPI. + + * cdl/hal_cortexm_stm32_stm3210e_eval.cdl: Add component + enc424j600 ethernet over SPI. + +2012-03-23 James Smith + + * include/plf_io.h: Update GPIO pin definitions to use new PIN + wrapper macros. Update to use common SPEED_SPI name for SPI pin + speed selection. + +2012-02-29 James Smith + + * src/stm3210e_eval_flash.c: Flash structure needs to be "const" + to match header. + +2012-01-12 Nick Garnett + + * include/plf_io.h: Add SPI and I2C pin and DMA definitions. + +2011-12-20 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3210e_eval.cdl: Just set a requires on + RedBoot's number of memory segments to be 2 rather than using a + non-configurable option. + +2011-12-08 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3210e_eval.cdl: Indicate to new STM32 variant + HAL CDL that this is an F103ZE processor. + +2011-01-27 Nick Garnett + + * misc/redboot_JTAG.ecm: + * misc/redboot_ROM.ecm: Define CYGNUM_REDBOOT_FLASH_RESERVED_DEVICES + to take on-chip flash out of FIS control. + +2011-01-01 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3210e_eval.cdl + (CYGHWR_HAL_CORTEXM_STM32_FLASH): Should be on by default if generic flash + active in configuration. + +2010-08-29 John Dallaway + + * misc/redboot_JTAG.ecm, misc/redbooot_ROM.ecm: + Inhibit the FIS directory entry for RedBoot and management of the + internal flash. Issues reported by Carlo Caione. + 2010-03-18 Ross Younger * tests/eccwalk.c: Build fix for changes elsewhere. @@ -30,6 +85,11 @@ 2009-08-26 Ross Younger + + * src/stm3210e_eval_misc.c (hal_system_init): Adjust clock enables + in line with changes to bit definitions. + 2009-02-04 Nick Garnett * include/pkgconf/mlt_cortexm_stm3210e_eval_rom.ldi: @@ -63,6 +123,18 @@ 2008-11-19 Nick Garnett + + * include/pkgconf/mlt_cortexm_stm3210e_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm3210e_eval_rom.h: + * include/pkgconf/mlt_cortexm_stm3210e_eval_ram.ldi: + * include/pkgconf/mlt_cortexm_stm3210e_eval_ram.h: + * include/pkgconf/mlt_cortexm_stm3210e_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm3210e_eval_jtag.h: + * include/pkgconf/mlt_cortexm_stm3210e_eval_sram.ldi: + * include/pkgconf/mlt_cortexm_stm3210e_eval_sram.h: Adjust top of + RAM to 1MB. + 2008-10-10 Nick Garnett * include/pkgconf/mlt_cortexm_stm3210e_eval_rom.ldi: @@ -103,7 +175,7 @@ 2008-10-06 Nick Garnett +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00010000) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_ram (0x68000000) +#define CYGMEM_REGION_ram_SIZE (0x00100000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/include/pkgconf/mlt_cortexm_stm3210e_eval_extrabaseram.ldi b/packages/hal/cortexm/stm32/stm3210e_eval/current/include/pkgconf/mlt_cortexm_stm3210e_eval_extrabaseram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/include/pkgconf/mlt_cortexm_stm3210e_eval_extrabaseram.ldi @@ -0,0 +1,36 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00010000 + flash : ORIGIN = 0x08000000, LENGTH = 0x00080000 + rom : ORIGIN = 0x64000000, LENGTH = 0x01000000 + ram : ORIGIN = 0x68000000, LENGTH = 0x00100000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_sram (sram, 0x20000400, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x68008000+CYGMEM_HAL_CORTEXM_STM32_STM3210E_EXTRA_BASE_RAM, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 128*4; +hal_startup_stack = 0x68100000; diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/include/plf_io.h b/packages/hal/cortexm/stm32/stm3210e_eval/current/include/plf_io.h --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/include/plf_io.h +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/include/plf_io.h @@ -71,6 +71,95 @@ #define HAL_AM29XXXXX_UNCACHED_ADDRESS(__addr) (__addr) +//============================================================================= +// I2C busses and devices + +# define HAL_I2C_EXPORTED_DEVICES \ + __externC cyg_i2c_bus hal_stm32_i2c_bus1; \ + __externC cyg_i2c_device hal_stm32_i2c_temperature; + + +//============================================================================= +// I2C bus pin configurations + +#if defined(CYGHWR_HAL_STM32_I2C1_REMAP) +#define CYGHWR_HAL_STM32_I2C1_SCL CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 8, NA, OPENDRAIN, NA, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_I2C1_SDA CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 9, NA, OPENDRAIN, NA, AT_LEAST(50) ) +#else +#define CYGHWR_HAL_STM32_I2C1_SCL CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 6, NA, OPENDRAIN, NA, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_I2C1_SDA CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 7, NA, OPENDRAIN, NA, AT_LEAST(50) ) +#endif + +#define CYGHWR_HAL_STM32_I2C1_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 6, 0, M2P ) +#define CYGHWR_HAL_STM32_I2C1_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 7, 0, P2M ) + + +#define CYGHWR_HAL_STM32_I2C2_SCL CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 10, NA, OPENDRAIN, NA, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_I2C2_SDA CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 11, NA, OPENDRAIN, NA, AT_LEAST(50) ) + +#define CYGHWR_HAL_STM32_I2C2_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 4, 0, M2P ) +#define CYGHWR_HAL_STM32_I2C2_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 5, 0, P2M ) + +//============================================================================= +// SPI bus pin configurations + +// NOTE: The SPEED_SPI manifest is declared by the device driver +// (e.g. "devs/spi/cortexm/stm32//src/spi_stm32.c") and is not +// currently defined in a header. + +#ifndef CYGHWR_HAL_STM32_SPI1_REMAP +#define CYGHWR_HAL_STM32_SPI1_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 5, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 6, NA, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI1_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 7, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_REMAP_CONFIG 0 +#else +#define CYGHWR_HAL_STM32_SPI1_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 3, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 4, NA, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI1_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 5, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_SPI1_RMP +#endif + +#define CYGHWR_HAL_STM32_SPI1_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 3, 0, M2P ) +#define CYGHWR_HAL_STM32_SPI1_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 2, 0, P2M ) + + +#define CYGHWR_HAL_STM32_SPI2_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 13, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI2_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 14, NA, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI2_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 15, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI2_REMAP_CONFIG 0 + +#define CYGHWR_HAL_STM32_SPI2_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 5, 0, M2P ) +#define CYGHWR_HAL_STM32_SPI2_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 4, 0, P2M ) + + + +#ifndef CYGHWR_HAL_STM32_SPI3_REMAP +#define CYGHWR_HAL_STM32_SPI3_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 3, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 4, NA, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI3_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 5, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_REMAP_CONFIG 0 +#else +#define CYGHWR_HAL_STM32_SPI3_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 10, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 11, NA, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI3_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 12, NA, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_SPI3_RMP +#endif + +#define CYGHWR_HAL_STM32_SPI3_DMA_TX CYGHWR_HAL_STM32_DMA( 2, 2, 0, M2P ) +#define CYGHWR_HAL_STM32_SPI3_DMA_RX CYGHWR_HAL_STM32_DMA( 2, 1, 0, P2M ) + + +//============================================================================= +// Optional enc424j600 Ethernet over SPI + +#ifdef CYGPKG_DEVS_ETH_ENC424J600 +struct cyg_netdevtab_entry; +__externC void cyg_devs_cortexm_stm3210e_enc424j600_init( struct cyg_netdevtab_entry * ); +#define CYG_DEVS_ETH_ENC424J600_PLF_INIT( _tab_ ) \ + cyg_devs_cortexm_stm3210e_enc424j600_init( _tab_ ) + +#endif + //----------------------------------------------------------------------------- // end of plf_io.h #endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_JTAG.ecm b/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_JTAG.ecm --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_JTAG.ecm +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_JTAG.ecm @@ -62,6 +62,14 @@ cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXE user_value 0 }; +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + user_value 0 +}; + +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + user_value 0 +}; + cdl_option CYGBLD_ISO_STRTOK_R_HEADER { inferred_value 1 }; @@ -83,3 +91,9 @@ cdl_option CYGBLD_ISO_STRING_STRFUNCS_HE }; +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_DEVICES { + user_value 1 "0x08000000" +}; + + + diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_ROM.ecm b/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_ROM.ecm --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_ROM.ecm +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/misc/redboot_ROM.ecm @@ -62,6 +62,14 @@ cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXE user_value 0 }; +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + user_value 0 +}; + +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + user_value 0 +}; + cdl_option CYGBLD_ISO_STRTOK_R_HEADER { inferred_value 1 }; @@ -83,3 +91,8 @@ cdl_option CYGBLD_ISO_STRING_STRFUNCS_HE }; +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_DEVICES { + user_value 1 "0x08000000" +}; + + diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_eth_enc424j600.c b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_eth_enc424j600.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_eth_enc424j600.c @@ -0,0 +1,148 @@ +/*========================================================================== +// +// stm3210e_eval_eth_enc424j600.c +// +// Setup for optional enc424j600 Ethernet over SPI +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Stanislevik +// Date: 2012-04-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include +#include +#include +#include +#include + +#include +#include // assertion macros + +// Set to: 1 for diagnostic printouts; 0 for no diagnostic printouts. +#define DEBUG_ENC424J600_PLATFORM_INIT 0 + +// SPI device for communication with enc424j600 Ethernet chip +#define TRANS8B false +#define CLK_IDLE_LOW 0 +#define CLK_PHASE_RISING 0 + +#define AUX_SPI_CORTEXM_STM32_DEVICE(_name_, _bus_) \ + CYG_DEVS_SPI_CORTEXM_STM32_DEVICE( \ + _name_##_spi, \ + _bus_, \ + CYGHWR_HAL_CORTEXM_STM32_SPIETH_SPI_CS, \ + TRANS8B, \ + CLK_IDLE_LOW, \ + CLK_PHASE_RISING, \ + 14000000, \ + 1, \ + 1, \ + 1 \ + ) + +AUX_SPI_CORTEXM_STM32_DEVICE +( + CYGDAT_IO_ETH_ENC424J600_NAME, + CYGHWR_HAL_CORTEXM_STM32_SPIETH_SPI_BUS +); + +// Code to initialize enc424j600 driver data structure. + +void cyg_devs_cortexm_stm3210e_enc424j600_init( struct cyg_netdevtab_entry * netdevtab_entry) +{ + struct eth_drv_sc *eth_inst = NULL; // pointer to device instance + enc424j600_priv_data_t *eth_inst_pd = NULL; // device's private data +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + cyg_uint32 cr; + cyg_uint32 backupr; +#endif + +// Assign SPI device to Ethernet device. + eth_inst = netdevtab_entry->device_instance; + eth_inst_pd = (enc424j600_priv_data_t *)eth_inst->driver_private; + +#if DEBUG_ENC424J600_PLATFORM_INIT & 1 + diag_printf("%s(): Assigning SPI device to Ethernet device %s.\n",__FUNCTION__, netdevtab_entry->name); +#endif + eth_inst_pd->spi_service_device = (cyg_spi_device *) &CYGDAT_IO_ETH_ENC424J600_NAME_spi_stm32; + +#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED + +// Interrupt output from enc424j600 is connected to one of the pins from ports A-G. +// Here this pin is marshaled to External Interrupt Controller (EXTI). + +#define ENC424J600_INTERRUPT_SOURCE_PIN CYGHWR_HAL_SPIETH_INTERRUPT_PIN +#define ENC424J600_EXTICR ((ENC424J600_INTERRUPT_SOURCE_PIN / 4) * 4 + 8) +#define ENC424J600_SHIFT_VALUE ((ENC424J600_INTERRUPT_SOURCE_PIN % 4) * 4) + +#if DEBUG_ENC424J600_PLATFORM_INIT & 1 + diag_printf("%s(): Mapping external interrupt from P%c%d.\n",__FUNCTION__, + CYGHWR_HAL_CORTEXM_STM32_SPIETH_INTERRUPT_PORT, + ENC424J600_INTERRUPT_SOURCE_PIN); +#endif + + // Is AFIO clock enabled? + HAL_READ_UINT32(CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_APB2ENR , backupr ); + if (0 == (backupr & BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_AFIO))) + { + CYGHWR_HAL_STM32_CLOCK_ENABLE(CYGHWR_HAL_STM32_CLOCK(APB2,AFIO)); + } + + // Modify External Interrupt Control Register + HAL_READ_UINT32(CYGHWR_HAL_STM32_AFIO + ENC424J600_EXTICR , cr ); + cr |= ((cyg_uint32)0xf << ENC424J600_SHIFT_VALUE); + cr &= (((cyg_uint32)(CYGHWR_HAL_CORTEXM_STM32_SPIETH_INTERRUPT_PORT - 'A') + << ENC424J600_SHIFT_VALUE) & 0xffff); + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_AFIO + ENC424J600_EXTICR , cr ); + + // Restore AFIO clock + if (0 == (backupr & BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_AFIO))) + { + CYGHWR_HAL_STM32_CLOCK_DISABLE(CYGHWR_HAL_STM32_CLOCK(APB2,AFIO)); + } + +#endif // #ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED +} + +//========================================================================== +// EOF stm3210e_eval_eth_enc424j600.c diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_flash.c b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_flash.c --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_flash.c +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_flash.c @@ -60,12 +60,13 @@ #include +#ifdef CYGHWR_HAL_CORTEXM_STM32_FLASH_INTERNAL //-------------------------------------------------------------------------- // Internal flash #include -cyg_stm32_flash_dev hal_stm32_flash_priv; +const cyg_stm32_flash_dev hal_stm32_flash_priv; CYG_FLASH_DRIVER(hal_stm32_flash, &cyg_stm32_flash_funs, @@ -77,6 +78,9 @@ CYG_FLASH_DRIVER(hal_stm32_flash, &hal_stm32_flash_priv ); +#endif // CYGHWR_HAL_CORTEXM_STM32_FLASH_INTERNAL + +#ifdef CYGHWR_HAL_CORTEXM_STM32_FLASH_NOR //-------------------------------------------------------------------------- // There is a Spansion S29GL128P90FFIR20 or a NUMONYX equivalent. // These are AMD compatible and with CFI can all be handled by the AMD @@ -105,5 +109,7 @@ CYG_FLASH_DRIVER(hal_stm3210e_flash, hal_stm3210e_flash_priv.block_info, &hal_stm3210e_flash_priv); +#endif // CYGHWR_HAL_CORTEXM_STM32_FLASH_NOR + //-------------------------------------------------------------------------- // EOF stm3210e_eval_flash.c diff --git a/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_misc.c b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_misc.c --- a/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_misc.c +++ b/packages/hal/cortexm/stm32/stm3210e_eval/current/src/stm3210e_eval_misc.c @@ -76,25 +76,25 @@ { CYG_ADDRESS base; -#if defined(CYG_HAL_STARTUP_ROM) | defined(CYG_HAL_STARTUP_SRAM) +#if defined(CYG_HAL_STARTUP_ROM) | defined(CYG_HAL_STARTUP_ROMINT) | defined(CYG_HAL_STARTUP_SRAM) // Enable peripheral clocks in RCC base = CYGHWR_HAL_STM32_RCC; HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHBENR, - CYGHWR_HAL_STM32_RCC_AHBENR_FSMC | - CYGHWR_HAL_STM32_RCC_AHBENR_FLITF| - CYGHWR_HAL_STM32_RCC_AHBENR_SRAM ); + BIT_(CYGHWR_HAL_STM32_RCC_AHBENR_FSMC) | + BIT_(CYGHWR_HAL_STM32_RCC_AHBENR_FLITF) | + BIT_(CYGHWR_HAL_STM32_RCC_AHBENR_SRAM) ); HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_APB2ENR, - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPA | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPB | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPC | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPD | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPE | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPF | - CYGHWR_HAL_STM32_RCC_APB2ENR_IOPG); + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPA) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPB) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPC) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPD) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPE) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPF) | + BIT_(CYGHWR_HAL_STM32_RCC_APB2ENR_IOPG) ); // Set all unused GPIO lines to input with pull down to prevent // them floating and annoying any external hardware. @@ -237,6 +237,11 @@ cyg_plf_memory_segment(int seg, unsigned *start = (unsigned char *)CYGMEM_REGION_sram; *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); break; +#elif defined(CYGMEM_REGION_xram) + case 1: + *start = (unsigned char *)CYGMEM_REGION_xram; + *end = (unsigned char *)(CYGMEM_REGION_xram + CYGMEM_REGION_xram_SIZE); + break; #endif default: *start = *end = NO_MEMORY; diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/ChangeLog b/packages/hal/cortexm/stm32/stm32f4discovery/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/ChangeLog @@ -0,0 +1,42 @@ +2013-08-09 John Dallaway + + * cdl/hal_cortexm_stm32_stm32f4discovery.cdl: Merge CDL goal + expressions to avoid confusing the eCos Configuration Tool during + initial inference of STM32 variant HAL options. + +2013-06-09 John Dallaway + + * cdl/hal_cortexm_stm32_stm32f4discovery.cdl, + include/plf_arch.h, include/plf_intr.h, include/plf_io.h, + include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.h, + include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.ldi, + include/pkgconf/mlt_cortexm_stm32f4discovery_rom.h, + include/pkgconf/mlt_cortexm_stm32f4discovery_rom.ldi, + src/stm32f4discovery_flash.c, src/stm32f4discovery_misc.c, + tests/gpio.c, misc/openocd-misc.cfg, doc/stm32f4discovery.sgml: + New STM32F4-Discovery platform HAL package. Derived from + STM32x0G-EVAL platform HAL package. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/cdl/hal_cortexm_stm32_stm32f4discovery.cdl b/packages/hal/cortexm/stm32/stm32f4discovery/current/cdl/hal_cortexm_stm32_stm32f4discovery.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/cdl/hal_cortexm_stm32_stm32f4discovery.cdl @@ -0,0 +1,289 @@ +##========================================================================== +## +## hal_cortexm_stm32_stm32f4discovery.cdl +## +## Cortex-M STM32F4-Discovery platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): jld +## Based on: stm32x0g_eval CDL by jlarmour +## Date: 2013-06-05 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY { + display "STMicroelectronics STM32F4-Discovery board HAL" + parent CYGPKG_HAL_CORTEXM_STM32 + + requires { CYGHWR_HAL_CORTEXM == "M4" } + requires { CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" && + CYGHWR_HAL_CORTEXM_STM32_F4 == "F407VG" } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSE" } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 2 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 7 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV == 1 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV == 4 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV == 2 } + + include_dir cyg/hal + hardware + doc ref/hal-cortexm-stm32f4discovery-part.html + description " + The STM32F4-Discovery HAL package provides the support needed to run + eCos on the STMicroelectronics STM32F4-Discovery board." + + compile stm32f4discovery_misc.c + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"STMicroelectronics STM32F4-Discovery\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + # use UART4 at PC10,11 for diagnostic I/O (named UART3 in the STM32 variant HAL) + implements CYGINT_HAL_STM32_UART3 + + implements CYGINT_HAL_FPV4_SP_D16 + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"JTAG"} + legal_values {"JTAG" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + Select 'JTAG' when building applications to download into on-chip RAM + using the on-board ST-LINK/V2 serial wire debugging interface. Select + 'ROM' when building an application which will be written to on-chip + Flash memory for immediate execution on system reset." + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_stm32f4discovery_rom" : + (CYG_HAL_STARTUP == "JTAG" ) ? "cortexm_stm32f4discovery_jtag" : + "undefined" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + + } + + cdl_option CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK { + display "Input clock frequency" + flavor data + default_value 8000000 + legal_values 0 to 1000000000 + description "Main clock input." + } + + cdl_option CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES { + display "Flash read wait states" + flavor data + default_value 5 + legal_values 0 to 7 + description " + This option gives the number of wait states to use for accessing + the flash for reads. The correct setting for this value depends + on both the CPU clock (HCLK) frequency and the voltage. Consult + the STM32 Flash programming manual (PM0059) for appropriate + values for different clock speeds or voltages. The default of + 5 reflects a supply voltage of 3.3V and HCLK of 168MHz." + } + + cdl_option CYGHWR_HAL_CORTEXM_STM32_FLASH { + display "Flash driver support" + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + compile -library=libextras.a stm32f4discovery_flash.c + default_value 1 + description "Control flash device support for STM32F4-Discovery board." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + The STM32F4-Discovery board has one serial port enabled. This option + informs the rest of the system which port will be used to connect + to a host running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + The STM32F4-Discovery board has one serial port enabled. This option + informs the rest of the system which port will be used for + diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 115200 + description " + This option controls the default baud rate used for the + console connection." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "Debug serial port baud rate" + flavor data + calculated CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + description " + This option controls the default baud rate used for the + GDB connection." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_OPTIONS { + display "STM32F4-Discovery HAL build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this HAL package." + + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-Werror" } + description " + This option modifies the set of compiler flags + for building this HAL. These flags are used + in addition to the set of global flags." + } + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags + for building this HAL. These flags are + removed from the set of global flags if + present." + } + } + + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_TESTS { + display "STM32F4-Discovery tests" + flavor data + no_define + calculated { "tests/gpio" } + description " + This option specifies the set of tests for the STM32F4-Discovery HAL." + } + +} + +# EOF hal_cortexm_stm32_stm32f4discovery.cdl diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/doc/stm32f4discovery.sgml b/packages/hal/cortexm/stm32/stm32f4discovery/current/doc/stm32f4discovery.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/doc/stm32f4discovery.sgml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +STMicroelectronics STM32F4-Discovery Board Support + + + + Overview + + + eCos Support for the STMicroelectronics STM32F4-Discovery Board + Overview + + + Description + +The STMicroelectronics STM32F4-Discovery board has an STM32F407VGT6 Cortex-M4F processor, +192KiB of on-chip SRAM, 1MiB of on-chip flash memory, plus motion and audio sensors, an +audio DAC and a connector for the on-chip USB peripheral. The board also +features an ST-LINK/V2 serial wire debug (SWD) interface. + + +For typical eCos development the ST-LINK/V2 interface is connected via USB to a host +computer running the OpenOCD on-chip debug tool. OpenOCD provides a GDB server enabling +the download and debuging of eCos applications via the GDB debugger. + + + + Supported Hardware + +By default, eCos will use the 128KiB of contiguous on-chip SRAM, accessible +at location 0x20000000. On-chip flash memory at 0x08000000 can be optionally +used for bootable application code. A further 64KiB of core coupled memory (CCM) +is mapped to location 0x10000000. This memory is not used by eCos but may be used +for application-defined static data structures such as thread stacks which require no +initialization other than that performed during eCos startup and application +execution. Data structures may be assigned to the .ccm section +within CCM memory using the eCos CYGBLD_ATTRIB_SECTION macro. For example: + + char thread_stack[4096] CYGBLD_ATTRIB_SECTION(".ccm"); + +There is a serial driver CYGPKG_IO_SERIAL_CORTEXM_STM32 +which supports all on-chip UARTs. However, there are no RS232 drivers or +serial connectors on the board. STM32 UART4 (named UART3 in the eCos serial driver) is +enabled for use as a diagnostics channel. + + +The GPIO ports are enabled and manipulated only as needed +to access UART4, the LEDs and the push button. eCos does not +enable the remaining on-chip peripherals. + + + Tools + +The STM32F4-Discovery board port is intended to work with GNU tools +configured for an arm-eabi target. The original porting work was performed using +binutils 2.18.50.20080513, arm-eabi-gcc 4.3.2, arm-eabi-gdb 7.4.1 and OpenOCD 0.6.1. + + + + + + + Setup + + + Setup + Preparing for eCos Development with the STM32F4-Discovery board + + + Overview + +In a typical development environment the STM32F4-Discovery board is halted +on reset using OpenOCD communicating via the ST-LINK/V2 SWD interface. eCos +applications are configured for JTAG startup, then downloaded to the board +and executed via the arm-eabi-gdb debugger. + + +OpenOCD may be configured for use with the STM32F4-Discovery board using the +board configuration script stm32f4discovery.cfg provided with the tool. +It is also necessary to define a handler for GDB attach events which will halt the board. A +suitable OpenOCD script is provided at misc/openocd-misc.cfg in the +STM32F4-Discovery platform HAL package. Both scripts may be specified on the OpenOCD +command line. + + + Diagnostic output + +For diagnostic output, a SparkFun FTDI 3.3v Basic Breakout board or similar +may be connected to UART4 of the STM32F4-Discovery board using jumper wires as follows: + + + + + + Function + STM32F4-Discovery header + SparkFun FTDI breakout board socket + + + + + UART4 Tx + PC10 + RXI + + + Ground + GND + GND + + + + + +The UART is configured at 115200 baud by default and runs with 8 bits, +no parity, and 1 stop bit. The baud rate can be changed via the +configuration option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD. + + + + + + + Configuration + + + Configuration + Platform-specific Configuration Options + + + Overview + +The STM32F4-Discovery platform HAL package is loaded automatically when eCos is +configured for an STM32F4-Discovery target. It should never be necessary to load +this package explicitly. Unloading of the package should only occur as a result +of switching target hardware. + + + + Startup + +The STM32F4-Discovery platform HAL package supports two startup types which may be +selected using the configuration option CYG_HAL_STARTUP: + + + + JTAG + +This is the startup type which is normally used during application +development. arm-eabi-gdb is used to download a JTAG +startup application into memory via OpenOCD and the ST-LINK/V2 SWD debug interface. +eCos startup code will perform all necessary hardware initialization. + + + + ROM + +This startup type can be used for finished applications which will +be programmed into flash at location 0x08000000. It can also be used for +debugging larger applications which do not fit in available SRAM. The +application must be programmed to flash using the ST-LINK tool before debugging commences. +eCos startup code will perform all necessary hardware initialization. + + + + + + Flash Driver + +The platform HAL package contains flash driver support. This support may be +activated by loading the eCos flash I/O infrastructure package CYGPKG_IO_FLASH. + + + + System Clock + +By default the system clock interrupts once every 10ms, corresponding +to a 100Hz clock. This period can be modified using the configuration option +CYGNUM_HAL_RTC_PERIOD. + + + + + + + diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.h b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.h @@ -0,0 +1,21 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000) +#define CYGMEM_REGION_ram_SIZE (0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.ldi b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_jtag.ldi @@ -0,0 +1,43 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 98*4; +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + USER_SECTION (ccm, ccm, 0x10000000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, hal_virtual_vector_table_end, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.h b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.h @@ -0,0 +1,21 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000) +#define CYGMEM_REGION_ram_SIZE (0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.ldi b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/pkgconf/mlt_cortexm_stm32f4discovery_rom.ldi @@ -0,0 +1,43 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +} + +hal_vsr_table = 0x20000000; +hal_virtual_vector_table = hal_vsr_table + 98*4; +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + USER_SECTION (ccm, ccm, 0x10000000, LMA_EQ_VMA) + SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA) + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, hal_virtual_vector_table_end, FOLLOWING (.got)) + SECTION_data (ram, ALIGN( 0x8), FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_arch.h b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_arch.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Based on: stm32x0g_eval overrides by nickg +// Date: 2013-06-06 +// Purpose: STM32F4-Discovery platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_intr.h b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Based on: stm32x0g_eval overrides by nickg +// Date: 2013-06-06 +// Purpose: STM32F4-Discovery platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_io.h b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_io.h @@ -0,0 +1,67 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Date: 2013-06-06 +// Purpose: STM32F4-Discovery platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +// User LEDs and button + +#define CYGHWR_HAL_STM32F4DISCOVERY_LED1 CYGHWR_HAL_STM32_PIN_OUT( D, 12, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32F4DISCOVERY_LED2 CYGHWR_HAL_STM32_PIN_OUT( D, 13, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32F4DISCOVERY_LED3 CYGHWR_HAL_STM32_PIN_OUT( D, 14, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32F4DISCOVERY_LED4 CYGHWR_HAL_STM32_PIN_OUT( D, 15, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32F4DISCOVERY_BTN1 CYGHWR_HAL_STM32_PIN_IN( A, 0, NONE ) + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/misc/openocd-misc.cfg b/packages/hal/cortexm/stm32/stm32f4discovery/current/misc/openocd-misc.cfg new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/misc/openocd-misc.cfg @@ -0,0 +1,54 @@ +##========================================================================== +## +## openocd-misc.cfg +## +## Cortex-M STM32F4-Discovery OpenOCD miscellaneous definitions +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2013 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): jld +## Date: 2013-06-09 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +gdb_memory_map disable +stm32f4x.cpu configure -event gdb-attach { + reset init +} + +# EOF openocd-misc.cfg diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_flash.c b/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_flash.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_flash.c @@ -0,0 +1,65 @@ +/*========================================================================== +// +// stm32f4discovery_flash.c +// +// Cortex-M4 STM32F4-Discovery Flash setup +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Based on: stm32x0g_eval flash setup by jlarmour +// Date: 2013-06-06 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include + +CYG_FLASH_DRIVER(hal_stm32_flash, + &cyg_stm32_flash_funs, + 0, + 0x08000000, + 0, + 0, + 0, + &hal_stm32_flash_priv +); + +//-------------------------------------------------------------------------- +// EOF stm32f4discovery_flash.c diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_misc.c b/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/src/stm32f4discovery_misc.c @@ -0,0 +1,147 @@ +/*========================================================================== +// +// stm32f4discovery_misc.c +// +// Cortex-M4 STM32F4-Discovery HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011, 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Based on: stm32x0g_eval misc setup by jlarmour +// Date: 2013-06-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include +#include + +#include +#include +#include +#include + +//========================================================================== + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +#if (CYGNUM_CALL_IF_TABLE_SIZE > 64) +// We force a compilation error for this fatal condition since run-time asserts +// may not be enabled for the build. +#error "The CALL_IF_TABLE_SIZE pre-allocation in the linker scripts for this platform need to be updated" +#endif +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void hal_system_init( void ) +{ + CYG_ADDRESS base; + + // Enable CCM clock and any required GPIO ports in RCC + base = CYGHWR_HAL_STM32_RCC; + HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHB1ENR, + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_CCMDATARAMEN) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOA) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOC) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOD) ); + + // Set unused lines on enabled GPIO ports to input with pull down + + // GPIO Port A - setup PA0 for button, PA9 for LED, PA13,14 for SWD + base = CYGHWR_HAL_STM32_GPIOA; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x82A8AAA8 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x28040000 ); + + // GPIO Port C - setup PC10,11 for RS232 (UART4) + base = CYGHWR_HAL_STM32_GPIOC; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0xAA0AAAAA ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x00A00000 ); + + // GPIO Port D - setup PD5,12,13,14,15 for LEDs + base = CYGHWR_HAL_STM32_GPIOD; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x00AAA2AA ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x55000400 ); + + // Enable flash prefetch buffer, cacheability and set latency to 2 wait states + // Latency has to be set before clock is switched to a higher speed + { + cyg_uint32 acr; + + base = CYGHWR_HAL_STM32_FLASH; + + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + acr |= CYGHWR_HAL_STM32_FLASH_ACR_PRFTEN; + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN; + acr |= CYGHWR_HAL_STM32_FLASH_ACR_LATENCY(CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + } +} + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +#ifdef CYGDBG_USE_ASSERTS + __externC char __sram_data_start[]; +#endif + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + // Check the number of VSRs matches the linker script. We can do this + // because we intend the VV table to follow the VSR table with no gaps. + CYG_ASSERT( (char*)&hal_virtual_vector_table[0] - (char*)&hal_vsr_table >= CYGNUM_HAL_VSR_COUNT*4, + "VSR table size does not match" ); + // Now check the declared start of SRAM data follows the VV table end + CYG_ASSERT( (__sram_data_start - (char*)&hal_virtual_vector_table[0]) >= CYGNUM_CALL_IF_TABLE_SIZE*4, + "VV table size does not match sram space" ); +#else + // Check the VSR table fits below declared start of SRAM data + CYG_ASSERT( (__sram_data_start - (char*)&hal_vsr_table[0]) >= CYGNUM_HAL_VSR_COUNT*4, + "VSR table size does not match" ); +#endif +} + +//========================================================================== +// EOF stm32f4discovery_misc.c diff --git a/packages/hal/cortexm/stm32/stm32f4discovery/current/tests/gpio.c b/packages/hal/cortexm/stm32/stm32f4discovery/current/tests/gpio.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32f4discovery/current/tests/gpio.c @@ -0,0 +1,73 @@ +/*============================================================================= +// +// gpio.c +// +// Test for STM32F4-Discovery GPIO +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Date: 2013-06-07 +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include +#include + +externC void cyg_start(void) { + int b, n; + CYG_TEST_INIT(); + CYG_TEST_INFO( "Starting STM32F4-Discovery GPIO test" ); + CYG_TEST_INFO( "Press and hold user button for slow LED count" ); + for ( n = 0; n < 0x100; n++ ) { + // display least significant 4 bits of count on user LEDs + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32F4DISCOVERY_LED1, 0 != (n & 0x1) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32F4DISCOVERY_LED2, 0 != (n & 0x2) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32F4DISCOVERY_LED3, 0 != (n & 0x4) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32F4DISCOVERY_LED4, 0 != (n & 0x8) ); + // extend delay from 125ms to 500ms when user button pressed + CYGHWR_HAL_STM32_GPIO_IN( CYGHWR_HAL_STM32F4DISCOVERY_BTN1, &b ); + HAL_DELAY_US( 125000 * (1 + ( (b & 1) * 3) ) ); + } + CYG_TEST_PASS_FAIL( 1, "STM32F4-Discovery GPIO test" ); + CYG_TEST_FINISH( "STM32F4-Discovery GPIO test" ); +} + +//============================================================================= +// EOF gpio.c diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/ChangeLog b/packages/hal/cortexm/stm32/stm32x0g_eval/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/ChangeLog @@ -0,0 +1,199 @@ +2013-04-06 Jerzy Dyrda + + * cdl/hal_cortexm_stm32_stm32x0g_eval.cdl: Fix PHY name and + added defualt Ethernet interface. + * src/stm32x0g_eval_misc.c: Enabled clock for PHY. [ Bugzilla 1001219 ] + +2013-03-09 Ilija Kocho + + * misc/redboot_ROM_FPU.ecm: Add ECM for RedBoot with FPU support. + +2012-12-01 Ilija Kocho + + * cdl/hal_cortexm_stm32_stm32x0g_eval.cdl: Implement CYGINT_HAL_FPV4_SP_D16. + [Bugzilla 1001607] + +2012-03-29 Jonathan Larmour + + * include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi: + Correct number of VSR table entries. + * src/stm32x0g_eval_misc.c (hal_platform_init): Add assertion checks + that layout of vector tables at bottom of SRAM is what it should be. + +2012-03-29 James Smith + + * include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi: + Provide hal_virtual_vector_table_end symbol to allow the + SECTION_sram pre-allocation to be minimised to the actual platform + requirements. + + * src/stm32x0g_eval_misc.c: Provide #error check on linker script + hardwired CYGNUM_CALL_IF_TABLE_SIZE assumption. + +2012-03-23 James Smith + + * include/plf_io.h: Update GPIO pin definitions to use new PIN + wrapper macros. Update the I2C lines to specify PULLUP. + +2012-03-22 James Smith + + * include/plf_io.h (CYGHWR_HAL_STM32_ETH_MII_*): Platform specific + ethernet pin manifests updated to use new GPIO PIN macros. + +2012-03-15 James Smith + + * cdl/hal_cortexm_stm32_stm32x0g_eval.cdl: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.h: + * include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi: + * src/stm32x0g_eval_flash.c: + * src/stm32x0g_eval_misc.c: + * src/stm32x0g_eval_spi.c: + Rename platform from the name "stm3220g_eval" to the generic name + "stm32x0g_eval". This is to make it clear that the platform + supports both the F2 (STM3220G-EVAL) and F4 (STM3240G-EVAL) + platforms. This rename includes renaming of the relevant support + source files. + + * include/plf_io.h (HAL_I2C_EXPORTED_DEVICES): Declare I2C bus1 + for on-board M24C64 device. + +2012-02-08 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl + (CYGPKG_HAL_CORTEXM_STM32_STM3220G_EVAL_SPI): This should now be a component + since it has no children. Also make description match configuration (Aardvark + expected to be on bus 2). + +2012-02-05 Jonathan Larmour + + * misc/redboot_JTAG.ecm, misc/redboot_ROM.ecm: Build in inferences + so there's no output on import. + * misc/redboot_RAM.ecm: New file. For completeness and to make it + easier for RedBoot to update itself. + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl: Make comment description of + UART selection and naming clearer. + +2012-01-31 Jonathan Larmour + + * include/plf_io.h: Prototype hal_stm3220_led() for setting board LEDs. + * src/stm3220g_eval_misc.c: Choose correct board SRAM memory timings. + +2012-01-13 Nick Garnett + + * misc/redboot_ROM.ecm: + * misc/redboot_JTAG.ecm: Add CYGPKG_IO_WALLCLOCK package to enable + date command for setting on-chip RTC. + +2012-01-12 Nick Garnett + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl: Add SPI and I2C + configuration options. + + * include/plf_io.h: Add SPI and I2C pin and DMA stream definitions. + + * src/stm3220g_eval_spi.c: Add SPI device definition for aardvark + board. + +2011-12-20 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl: Just set a requires on + RedBoot's number of memory segments to be 2 rather than using a + non-configurable option. + +2011-12-15 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl + (CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES): New option. Configures + Flash wait states. + (CYGPKG_HAL_CORTEXM_STM32_STM3220G_EVAL_ETH0): New component. Holds + options and CDL to configure ethernet support. + Change default baud rate to 115200. + * include/pkgconf/mlt_cortexm_stm3220g_eval_jtag.h: Add definitions for + sram and flash regions. + * include/pkgconf/mlt_cortexm_stm3220g_eval_ram.h: Add definitions for + flash region. + * include/pkgconf/mlt_cortexm_stm3220g_eval_sram.h: Ditto. Also fix + external SRAM address. + * include/pkgconf/mlt_cortexm_stm3220g_eval_sram.ldi: Fix external SRAM + address. + * include/plf_io.h: Provide platform specific ethernet pin mappings. + (CYGHWR_HAL_STM32_ETH_CONFIGURE_MCO): New macro used to configure MCO1 + as PHY clock. + * misc/redboot_JTAG.ecm, misc/redboot_ROM.ecm: Don't disable + CYGOPT_REDBOOT_FIS_REDBOOT nor CYGOPT_REDBOOT_FIS_REDBOOT_POST - there + is only one flash here and it does contain RedBoot. + * src/stm3220g_eval_flash.c: No longer define private flash structure + here. Internal flash support is no longer an option in this file if this + file is used at all. + * src/stm3220g_eval_misc.c (hal_system_init): Clear FSMC reset bit after + reset otherwise it stays there. + Configure USART4 TX/RX on PC10/11 otherwise RedBoot can get confused. + Set Flash wait states as per configuration. + (cyg_plf_memory_segment): Allow for renaming of external SRAM region to + xram. + +2011-12-12 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl: Set PLLQ. + +2011-12-08 Jonathan Larmour + + * cdl/hal_cortexm_stm32_stm3220g_eval.cdl: + * include/plf_arch.h: + * include/plf_intr.h: + * include/plf_io.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_jtag.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_jtag.ldi: + * include/pkgconf/mlt_cortexm_stm3220g_eval_ram.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_ram.ldi: + * include/pkgconf/mlt_cortexm_stm3220g_eval_rom.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_romint.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_romint.ldi: + * include/pkgconf/mlt_cortexm_stm3220g_eval_rom.ldi: + * include/pkgconf/mlt_cortexm_stm3220g_eval_sram.h: + * include/pkgconf/mlt_cortexm_stm3220g_eval_sram.ldi: + * misc/redboot_JTAG.ecm: + * misc/redboot_ROM.ecm: + * src/stm3220g_eval_flash.c: + * src/stm3220g_eval_misc.c: + New package -- ST STM3220G EVAL board HAL. Derived from STM3210E HAL. + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/cdl/hal_cortexm_stm32_stm32x0g_eval.cdl b/packages/hal/cortexm/stm32/stm32x0g_eval/current/cdl/hal_cortexm_stm32_stm32x0g_eval.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/cdl/hal_cortexm_stm32_stm32x0g_eval.cdl @@ -0,0 +1,473 @@ +##========================================================================== +## +## hal_cortexm_stm32_stm32x0g_eval.cdl +## +## Cortex-M STM32X0G EVAL platform HAL configuration data +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2012 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): jlarmour +## Based on: stm3210e CDL by nickg +## Date: 2011-11-10 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL { + display "ST STM32x0G-EVAL (STM32 20-21-45-46 G-EVAL) Development Board HAL" + parent CYGPKG_HAL_CORTEXM_STM32 + requires { ((CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4")) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? (CYGHWR_HAL_CORTEXM_STM32_F2 == "F207IG") : (CYGHWR_HAL_CORTEXM_STM32_F4 == "F407IG") } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGHWR_HAL_CORTEXM == "M3") } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGHWR_HAL_CORTEXM == "M4") } + # 25MHz crystal feeds HSE + # From STM32F4xx Rev A System Clock Configuration v1.0.1 + # SYSCLK 120MHz 168MHz + # ------ ------ ------ + # HSE 25MHz 25MHz fixed input crystal on board : CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK + # PLL_M 25 25 (6bits) main divisor + # PLL_N 240 336 (9bits) main multiplier + # PLL_P 2 2 (2bits) derived from PLL_N : used for SYSCLK (must not exceed F2:120 or F4:168) + # PLL_Q 5 7 (4bits) derived from PLL_N : used for USB OTG FS, SDIO and RNG (must be >= 2) + # AHB Prescaler 1 1 + # SYSCLK 120MHz 168MHz (((HSE / PLL_M) * PLL_N) / PLL_P) + # HCLK 120MHz 168MHz (SYSCLK / AHB Prescaler) + # APB1 Prescaler 4 4 + # PCLK1 30MHz 42MHz (HCLK / APB1 Prescaler) + # APB2 Prescaler 2 2 + # PCLK2 60MHz 84MHz (HCLK / APB2 Prescaler) + # + # Must use HSE for the PLL settings below + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSE" } + # F2: + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 15) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 288) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 4) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 10) } + # F4: + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 25) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 2) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 7) } + # Common: + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV == 1 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV == 4 } + requires { CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV == 2 } + +# define_header hal_cortexm_stm32_stm32x0g_eval.h + include_dir cyg/hal + hardware + description " + The STM32x0G EVAL HAL package provides the support needed to run + eCos on the ST STM32 20-21-45-46 G-EVAL board." + + compile stm32x0g_eval_misc.c + + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM3220G_EVAL { + display "Platform definitions for STM3220G-EVAL (F2) board." + active_if { CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2" } + no_define + calculated 1 + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M3\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"ST STM3220G-EVAL\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + } + + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM3240G_EVAL { + display "Platform definitions for STM3240G-EVAL (F4) board." + active_if { CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" } + no_define + calculated 1 + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M4\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"ST STM3240G-EVAL\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + implements CYGINT_HAL_FPV4_SP_D16 + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "SRAM" "ROM" "ROMINT" "JTAG"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the ST STM32X0G EVAL board it is possible to + build the system for either RAM bootstrap or ROM bootstrap. + Select 'RAM' when building programs to load into RAM using onboard + debug software such as RedBoot or eCos GDB stubs. Select 'ROM' + when building a stand-alone application which will be put + into ROM. The 'JTAG' type allows programs to be downloaded using a + JTAG debugger such as a BDI3000 or PEEDI. The 'SRAM' type allows + programs to be downloaded via a JTAG debugger into on-chip SRAM. + The 'ROMINT' type supports applications with code in on-chip flash + and data/bss in on-chip SRAM, ignoring the external SRAM." + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "RAM" ) ? "cortexm_stm32x0g_eval_ram" : + (CYG_HAL_STARTUP == "SRAM" ) ? "cortexm_stm32x0g_eval_sram" : + (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_stm32x0g_eval_rom" : + (CYG_HAL_STARTUP == "ROMINT" ) ? "cortexm_stm32x0g_eval_romint" : + (CYG_HAL_STARTUP == "JTAG" ) ? "cortexm_stm32x0g_eval_jtag" : + "undefined" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { "" } + } + + } + + cdl_option CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK { + display "Input Clock frequency" + flavor data + default_value 25000000 + legal_values 0 to 1000000000 + description "Main clock input." + } + + cdl_option CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES { + display "Flash read wait states" + flavor data + default_value { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? 3 : 5 } + legal_values 0 to 7 + description " + This option gives the number of wait states to use for accessing + the flash for reads. The correct setting for this value depends + on both the CPU clock (HCLK) frequency and the voltage. Consult + the STM32 Flash programming manual (PM0059) for appropriate + values for different clock speeds or voltages. The default of + 3 reflects a supply voltage of 3.3V and HCLK of 120MHz." + } + + cdl_option CYGHWR_HAL_CORTEXM_STM32_FLASH { + display "Flash driver support" + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + compile -library=libextras.a stm32x0g_eval_flash.c + default_value 1 + description "Control flash device support for STM32X0G-EVAL board." + } + + cdl_component CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL_ETH0 { + display "STM32 Ethernet support" + description " + Hardware specifics for the ethernet interface provided on the + STM32X0G-EVAL board." + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + default_value 1 + requires CYGPKG_DEVS_ETH_CORTEXM_STM32 + requires { is_active(CYGPKG_DEVS_ETH_PHY) implies + (1 == CYGHWR_DEVS_ETH_PHY_DP8384X) } + requires { is_active(CYGHWR_HAL_CORTEXM_STM32X0G_ETH_PHY_CLOCK_MCO) implies \ + (CYGHWR_DEVS_ETH_CORTEXM_STM32_PHY_CLK_MCO == CYGHWR_HAL_CORTEXM_STM32X0G_ETH_PHY_CLOCK_MCO) } + requires { "MII" == CYGSEM_DEVS_ETH_CORTEXM_STM32_INTF } + + cdl_option CYGHWR_HAL_CORTEXM_STM32X0G_ETH_PHY_CLOCK_MCO { + display "Use MCO as PHY clock" + default_value 1 + description " + The STM32X0G can use the MCO clock signals as the 25MHz clock for + the PHY, or it can use the onboard 25MHz crystal at X1, depending + on the setting of jumper J5. This option should be set to reflect + the J5 setting." + } + } + + implements CYGINT_HAL_VIRTUAL_VECTOR_VPRINTF + + # The 9-pin D connector is connected to PC10 and PC11, which are connected to + # USART3 or UART4 depending on pin config. The main difference between these + # ports is that UART4 doesn't support hardware flow control. This board doesn't + # have the flow control lines hooked up anyway, so to save having to fiddle + # with ignoring the flow control lines on USART3, we choose to use UART4. + # Note that this is UART4 in STM32 speak (counting from 1), but the STM32 port + # uses the name UART3 for it (counting from 0). Hrm. + implements CYGINT_HAL_STM32_UART3 + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + The ST STM32X0G EVAL board has one serial port. This option + informs the rest of the system which port will be used to connect + to a host running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + calculated 0 + description " + The ST STM32X0G EVAL has one serial port. This option + informs the rest of the system which port will be used for + diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Console serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 115200 + description " + This option controls the default baud rate used for the + console connection. + RedBoot usess polling to transfer data over this port and + might not be able to keep up with baud rates above the + default, particularly when doing XYZmodem downloads. The + interrupt-driven device driver is able to handle these + baud rates, so any high speed application transfers should + use that instead. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 115200 + # Only one channel on this board so: + requires { CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD == CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD } + description " + This option controls the default baud rate used for the + GDB connection. + RedBoot usess polling to transfer data over this port and + might not be able to keep up with baud rates above the + default, particularly when doing XYZmodem downloads. The + interrupt-driven device driver is able to handle these + baud rates, so any high speed application transfers should + use that instead. + Note: this should match the value chosen for the console port if the + console and GDB port are the same." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-eabi" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL_OPTIONS { + display "STM32X0G HAL build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this HAL." + + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-Werror" } + description " + This option modifies the set of compiler flags + for building this HAL. These flags are used + in addition to the set of global flags." + } + cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32X0G_EVAL_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags + for building this HAL. These flags are + removed from the set of global flags if + present." + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMINT" || CYG_HAL_STARTUP == "JTAG" } + requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") implies (CYGBLD_REDBOOT_MAX_MEM_SEGMENTS == 2) } + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") implies (CYGBLD_REDBOOT_MAX_MEM_SEGMENTS == 3) } + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary images" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to binary image formats suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + } + } + + cdl_component CYGBLD_HAL_CORTEXM_STM32X0G_EVAL_GDB_STUBS { + display "Create StubROM SREC and binary files" + active_if CYGBLD_BUILD_COMMON_GDB_STUBS + no_define + calculated 1 + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMINT" } + + make -priority 325 { + /bin/stubrom.srec : /bin/gdb_module.img + $(OBJCOPY) -O srec $< $@ + } + make -priority 325 { + /bin/stubrom.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + + description "This component causes the ELF image generated by the + build process to be converted to S-Record and binary + files." + } +} + +# EOF hal_cortexm_stm32_stm32x0g_eval.cdl diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.h @@ -0,0 +1,26 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x64000000) +#define CYGMEM_REGION_ram_SIZE (0x00200000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_jtag.ldi @@ -0,0 +1,50 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ram : ORIGIN = 0x64000000, LENGTH = 0x00200000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +} + +hal_vsr_table = 0x20000000; +// 97 or 98 entries in this VSR table depending on the processor family +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +hal_virtual_vector_table = hal_vsr_table + 97*4; +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +hal_virtual_vector_table = hal_vsr_table + 98*4; +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_sram (sram, hal_virtual_vector_table_end, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x64000000, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.h @@ -0,0 +1,28 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00020000) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x64000000) +#define CYGMEM_REGION_ram_SIZE (0x00200000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_ram.ldi @@ -0,0 +1,50 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00020000 + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ram : ORIGIN = 0x64000000, LENGTH = 0x00200000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +} + +hal_vsr_table = 0x20000000; +// 97 or 98 entries in this VSR table depending on the processor family +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +hal_virtual_vector_table = hal_vsr_table + 97*4; +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +hal_virtual_vector_table = hal_vsr_table + 98*4; +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// External SRAM is 2MB +hal_startup_stack = 0x64200000; + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_sram (sram, hal_virtual_vector_table_end, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x64008000, LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.h @@ -0,0 +1,26 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x64000000) +#define CYGMEM_REGION_ram_SIZE (0x00200000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_rom.ldi @@ -0,0 +1,51 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ram : ORIGIN = 0x64000000, LENGTH = 0x00200000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +} + + +hal_vsr_table = 0x20000000; +// 97 or 98 entries in this VSR table depending on the processor family +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +hal_virtual_vector_table = hal_vsr_table + 97*4; +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +hal_virtual_vector_table = hal_vsr_table + 98*4; +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA) + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, hal_virtual_vector_table_end, FOLLOWING (.got)) + SECTION_data (ram, 0x64000000, FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.h @@ -0,0 +1,26 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x20000000) +#define CYGMEM_REGION_ram_SIZE (0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_xram (0x64000000) +#define CYGMEM_REGION_xram_SIZE (0x00200000) +#define CYGMEM_REGION_xram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_romint.ldi @@ -0,0 +1,50 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + ram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + xram : ORIGIN = 0x64000000, LENGTH = 0x00200000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +} + +hal_vsr_table = 0x20000000; +// 97 or 98 entries in this VSR table depending on the processor family +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +hal_virtual_vector_table = hal_vsr_table + 97*4; +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +hal_virtual_vector_table = hal_vsr_table + 98*4; +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA) + SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (ram, hal_virtual_vector_table_end, FOLLOWING (.got)) + SECTION_data (ram, ALIGN( 0x8), FOLLOWING (.sram)) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.h @@ -0,0 +1,28 @@ +// eCos memory layout + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0x20000000) +#define CYGMEM_REGION_sram_SIZE (0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGMEM_REGION_ccm (0x10000000) +#define CYGMEM_REGION_ccm_SIZE (0x00010000) +#define CYGMEM_REGION_ccm_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGMEM_REGION_flash (0x08000000) +#define CYGMEM_REGION_flash_SIZE (0x00100000) +#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x64000000) +#define CYGMEM_REGION_ram_SIZE (0x00100000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1)) + diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/pkgconf/mlt_cortexm_stm32x0g_eval_sram.ldi @@ -0,0 +1,51 @@ +// eCos memory layout + +#include +#include + +MEMORY +{ + sram : ORIGIN = 0x20000000, LENGTH = 0x00020000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + flash : ORIGIN = 0x08000000, LENGTH = 0x00100000 + ram : ORIGIN = 0x64000000, LENGTH = 0x00200000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + ccm : ORIGIN = 0x10000000, LENGTH = 0x00010000 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +} + + +hal_vsr_table = 0x20000000; +// 97 or 98 entries in this VSR table depending on the processor family +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +hal_virtual_vector_table = hal_vsr_table + 97*4; +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +hal_virtual_vector_table = hal_vsr_table + 98*4; +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +hal_virtual_vector_table_end = hal_virtual_vector_table + 64*4; +#else // zero size virtual vector table +hal_virtual_vector_table_end = hal_virtual_vector_table; +#endif + +// SRAM is 128k. +hal_startup_stack = 0x20000000 + 1024*128; + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (sram, hal_virtual_vector_table_end, LMA_EQ_VMA) + SECTION_RELOCS (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (sram, ALIGN(0x8), LMA_EQ_VMA) + SECTION_rodata1 (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_gcc_except_table (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_got (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sram (sram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_arch.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_arch.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_arch.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_ARCH_H +#define CYGONCE_HAL_PLF_ARCH_H +//============================================================================= +// +// plf_arch.h +// +// Platform specific architecture overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2008-07-30 +// Purpose: STM32X0G EVAL platform specific architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_arch.h +#endif // CYGONCE_HAL_PLF_ARCH_H diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_intr.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_intr.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_intr.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H +//============================================================================= +// +// plf_intr.h +// +// Platform specific interrupt overrides +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2008-07-30 +// Purpose: STM32X0G EVAL platform specific interrupt overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + + +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_intr.h +#endif // CYGONCE_HAL_PLF_INTR_H diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_io.h b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_io.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/include/plf_io.h @@ -0,0 +1,171 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2008-07-30 +// Purpose: STM32X0G EVAL platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +//============================================================================= +// Memory access checks. +// +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. These macros allow the GDB stubs to avoid making +// accidental accesses to these areas. + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ); + +#define CYG_HAL_STUB_PERMIT_DATA_READ(_addr_, _count_) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +#define CYG_HAL_STUB_PERMIT_DATA_WRITE(_addr_, _count_ ) cyg_hal_stub_permit_data_access( _addr_, _count_ ) + +//============================================================================= +// Board LEDs + +#define CYGHWR_HAL_STM32X0G_LED1 CYGHWR_HAL_STM32_PIN_OUT( G, 6, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32X0G_LED2 CYGHWR_HAL_STM32_PIN_OUT( G, 8, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32X0G_LED3 CYGHWR_HAL_STM32_PIN_OUT( I, 9, PUSHPULL, NONE, LOW ) +#define CYGHWR_HAL_STM32X0G_LED4 CYGHWR_HAL_STM32_PIN_OUT( C, 7, PUSHPULL, NONE, LOW ) + +// A convenience function to set LEDs. Lowest 4 bits of 'c' correspond to the 4 LEDs. +__externC void hal_stm32x0_led(char c); + +//============================================================================= +// Custom Ethernet pin mappings + +#define CYGHWR_HAL_STM32_ETH_MII_TX_CRS CYGHWR_HAL_STM32_PIN_ALTFN_IN( H, 2, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_COL CYGHWR_HAL_STM32_PIN_ALTFN_IN( H, 3, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_RXD2 CYGHWR_HAL_STM32_PIN_ALTFN_IN( H, 6, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_RXD3 CYGHWR_HAL_STM32_PIN_ALTFN_IN( H, 7, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD3 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 8, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_RX_ER CYGHWR_HAL_STM32_PIN_ALTFN_IN( I, 10, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_TX_EN CYGHWR_HAL_STM32_PIN_ALTFN_OUT( G, 11, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD0 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( G, 13, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD1 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( G, 14, 11, PUSHPULL, NONE, AT_LEAST(50) ) +// NOTE: CYGHWR_HAL_STM32_ETH_MII_PPS_OUT not defined + +#define CYGHWR_HAL_STM32_ETH_CONFIGURE_MCO() \ + CYG_MACRO_START \ + cyg_uint32 cfgr; \ + HAL_READ_UINT32( CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_CFGR, cfgr ); \ + cfgr &= ~CYGHWR_HAL_STM32_RCC_CFGR_MCO1_MASK; \ + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_MCO1_HSE; \ + cfgr &= ~CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_MASK; \ + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_1; \ + HAL_WRITE_UINT32( CYGHWR_HAL_STM32_RCC + CYGHWR_HAL_STM32_RCC_CFGR, cfgr ); \ + CYG_MACRO_END + +//============================================================================= +// GPIO pin and DMA definitions for each SPI bus + +// NOTE: The SPEED_SPI manifest is declared by the device driver +// (e.g. "devs/spi/cortexm/stm32//src/spi_stm32.c") and is not +// currently defined in a header. + +#ifndef CYGHWR_HAL_STM32_SPI1_REMAP +#define CYGHWR_HAL_STM32_SPI1_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 5, 5, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 6, 5, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI1_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 7, 5, PUSHPULL, NONE, SPEED_SPI ) +#else +#define CYGHWR_HAL_STM32_SPI1_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 3, 5, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI1_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 4, 5, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI1_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 5, 5, PUSHPULL, NONE, SPEED_SPI ) +#endif +#define CYGHWR_HAL_STM32_SPI1_REMAP_CONFIG 0 + +#define CYGHWR_HAL_STM32_SPI1_DMA_TX CYGHWR_HAL_STM32_DMA( 2, 3, 3, M2P ) +#define CYGHWR_HAL_STM32_SPI1_DMA_RX CYGHWR_HAL_STM32_DMA( 2, 0, 3, P2M ) + + + +#define CYGHWR_HAL_STM32_SPI2_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( I, 1, 5, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI2_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( I, 2, 5, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI2_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( I, 3, 5, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI2_REMAP_CONFIG 0 + +#define CYGHWR_HAL_STM32_SPI2_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 4, 0, M2P ) +#define CYGHWR_HAL_STM32_SPI2_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 3, 0, P2M ) + + + +#ifndef CYGHWR_HAL_STM32_SPI3_REMAP +#define CYGHWR_HAL_STM32_SPI3_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 3, 6, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 4, 6, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI3_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 5, 6, PUSHPULL, NONE, SPEED_SPI ) +#else +#define CYGHWR_HAL_STM32_SPI3_SCK CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 10, 6, PUSHPULL, NONE, SPEED_SPI ) +#define CYGHWR_HAL_STM32_SPI3_MISO CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 11, 6, NA, PULLUP ) +#define CYGHWR_HAL_STM32_SPI3_MOSI CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 12, 6, PUSHPULL, NONE, SPEED_SPI ) +#endif +#define CYGHWR_HAL_STM32_SPI3_REMAP_CONFIG 0 + +#define CYGHWR_HAL_STM32_SPI3_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 2, 0, M2P ) +#define CYGHWR_HAL_STM32_SPI3_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 0, 0, P2M ) + + +//============================================================================= +// GPIO pin and DMA definitions for each I2C bus + +#define CYGHWR_HAL_STM32_I2C1_SCL CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 6, 4, OPENDRAIN, PULLUP, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_I2C1_SDA CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 9, 4, OPENDRAIN, PULLUP, AT_LEAST(50) ) + +#define CYGHWR_HAL_STM32_I2C1_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 7, 1, M2P ) +#define CYGHWR_HAL_STM32_I2C1_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 5, 1, P2M ) + +#define CYGHWR_HAL_STM32_I2C2_SCL CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 10, 4, OPENDRAIN, PULLUP, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_I2C2_SDA CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 11, 4, OPENDRAIN, PULLUP, AT_LEAST(50) ) + +#define CYGHWR_HAL_STM32_I2C2_DMA_TX CYGHWR_HAL_STM32_DMA( 1, 7, 7, M2P ) +#define CYGHWR_HAL_STM32_I2C2_DMA_RX CYGHWR_HAL_STM32_DMA( 1, 3, 7, P2M ) + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_JTAG.ecm b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_JTAG.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_JTAG.ecm @@ -0,0 +1,87 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + template redboot ; + + package CYGPKG_IO_FLASH current ; +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value JTAG +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + user_value 0 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + inferred_value ROM +}; diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_RAM.ecm b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_RAM.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_RAM.ecm @@ -0,0 +1,83 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + template redboot ; + + package CYGPKG_IO_FLASH current ; +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 0 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value RAM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + user_value 0 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM.ecm b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM.ecm @@ -0,0 +1,87 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + template redboot ; + + package CYGPKG_IO_FLASH current ; +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + user_value 0 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + inferred_value ROM +}; diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM_FPU.ecm b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM_FPU.ecm new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/misc/redboot_ROM_FPU.ecm @@ -0,0 +1,95 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + template redboot ; + + package CYGPKG_IO_FLASH current ; +}; + +cdl_component CYGHWR_HAL_CORTEXM_FPU { + user_value 1 +}; + +cdl_option CYGHWR_HAL_CORTEXM_FPU_SWITCH { + user_value ALL +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + user_value 0 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 1 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + inferred_value ROM +}; diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_flash.c b/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_flash.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_flash.c @@ -0,0 +1,68 @@ +/*========================================================================== +// +// stm32x0g_eval_flash.c +// +// Cortex-M3 STM32X0G EVAL Flash setup +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Date: 2011-12-12 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +//-------------------------------------------------------------------------- +// Internal flash + +#include + +CYG_FLASH_DRIVER(hal_stm32_flash, + &cyg_stm32_flash_funs, + 0, + 0x08000000, + 0, + 0, + 0, + &hal_stm32_flash_priv +); + +//-------------------------------------------------------------------------- +// EOF stm32x0g_eval_flash.c diff --git a/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_misc.c b/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_misc.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/stm32x0g_eval/current/src/stm32x0g_eval_misc.c @@ -0,0 +1,404 @@ +/*========================================================================== +// +// stm32x0g_eval_misc.c +// +// Cortex-M3/-M4 STM32X0G EVAL HAL functions +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2011, 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour based on stm3210e by nickg +// Date: 2008-07-30 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include +#include +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include CYGHWR_MEMORY_LAYOUT_H // Memory regions + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header + +//========================================================================== + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) +#if (CYGNUM_CALL_IF_TABLE_SIZE > 64) +// We force a compilation error for this fatal condition since run-time asserts +// may not be enabled for the build. +#error "The CALL_IF_TABLE_SIZE pre-allocation in the linker scripts for this platform need to be updated" +#endif +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + +//========================================================================== +// System init +// +// This is run to set up the basic system, including GPIO setting, +// clock feeds, power supply, and memory initialization. This code +// runs before the DATA is copied from ROM and the BSS cleared, hence +// it cannot make use of static variables or data tables. + +__externC void hal_system_init( void ) +{ + CYG_ADDRESS base; + + // Enable peripheral clocks in RCC + + base = CYGHWR_HAL_STM32_RCC; + + // All GPIO ports + // FIXME: this should be done in variant HAL at point of gpio_set + HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHB1ENR, +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) // enable CCM clock + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_CCMDATARAMEN) | +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOA) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOB) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOC) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOD) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOE) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOF) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOG) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOH) | + BIT_(CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOI) ); + + // Enable FSMC + HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHB3ENR, + BIT_(CYGHWR_HAL_STM32_RCC_AHB3ENR_FSMC) ); + +#if defined(CYG_HAL_STARTUP_ROM) | defined(CYG_HAL_STARTUP_ROMINT) | defined(CYG_HAL_STARTUP_SRAM) + + // Reset FSMC in case it was already enabled. This should set + // all regs back to default documented values, so we don't need + // to do any precautionary resets. + HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHB3RSTR, + BIT_(CYGHWR_HAL_STM32_RCC_AHB3ENR_FSMC) ); + // Bring out of reset: + HAL_WRITE_UINT32(base+CYGHWR_HAL_STM32_RCC_AHB3RSTR, 0 ); +#endif + +#if defined(CYGHWR_HAL_CORTEXM_STM32X0G_ETH_PHY_CLOCK_MCO) + // Use HSE clock as the MCO1 clock signals for PHY + { + cyg_uint32 acr; + + HAL_READ_UINT32(base + CYGHWR_HAL_STM32_RCC_CFGR, acr); + acr |= CYGHWR_HAL_STM32_RCC_CFGR_MCO1_HSE | + CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_1; + HAL_WRITE_UINT32(base + CYGHWR_HAL_STM32_RCC_CFGR, acr); + } +#endif + + // Set all unused GPIO lines to input with pull down to prevent + // them floating and annoying any external hardware. + + // GPIO Ports C..I reset GPIOx_MODER to 0x00000000 + // GPIO Ports A..I reset GPIOx_OTYPER to 0x00000000 + // CPIO Ports A,C..I reset GPIOx_OSPEEDR to 0x00000000 + // GPIO Ports C..I reset GPIOx_PUPDR to 0x00000000 + + // GPIO Port A resets GPIOA_MODER to 0xA8000000 + // GPIO Port A resets GPIOA_PUPDR to 0x64000000 + // GPIO Port A keeps the default JTAG pins on PA13,14,15 + base = CYGHWR_HAL_STM32_GPIOA; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x02AAAAAA ); + + // GPIO Port B resets GPIOB_MODER to 0x00000280 + // GPIO Port B resets GPIOB_OSPEEDR to 0x000000C0 + // GPIO Port B resets GPIOB_PUPDR to 0x00000100 + // GPIO Port B keeps the default JTAG pins on PB3,4 + base = CYGHWR_HAL_STM32_GPIOB; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0xAAAAA82A ); + + // GPIO Port C - setup PC7 for LED4 as GPIO out, RS232 (USART4) on PC10,11. + // Rest stay default, with pulldowns on all except PC14,15 (OSC32) + // just in case that is important. + + base = CYGHWR_HAL_STM32_GPIOC; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRH, 0x00008800 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x0A0A2AAA ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x00A04000 ); + + // GPIO Port D - setup FSMC for SRAM (PD0-1,3-15) and MicroSDcard (PD2) alternate functions + base = CYGHWR_HAL_STM32_GPIOD; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRL, 0xCCCCCCCC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRH, 0xCCCCCCCC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0xAAAAAAAA ); + // TODO:CONSIDER: OSPEEDR for SRAM pins to 100MHz + + // GPIO Port E - setup FSMC alternate function. PE0-1,3-4,7-15. + // But not PE5 (A21), PE6(A22), PE2(A23) which are not connected to SRAM. + base = CYGHWR_HAL_STM32_GPIOE; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRL, 0xC00CC0CC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRH, 0xCCCCCCCC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x00002820 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0xAAAA828A ); + // TODO:CONSIDER: OSPEEDR for SRAM pins to 100MHz + + // GPIO Port F - setup FSMC alternate function. PF0-5,12-15. + // But not PF6-11 which aren't connected to SRAM. + base = CYGHWR_HAL_STM32_GPIOF; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRL, 0x00CCCCCC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRH, 0xCCCC0000 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0x00AAA000 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0xAA000AAA ); + // TODO:CONSIDER: OSPEEDR for SRAM pins to 100MHz + + // GPIO Port G - setup FSMC alternate function. PG0-5,9,10. + // Other FSMC pins not connected to SRAM. + // LED1 is PG6, LED2 is PG8, so set as GPIO out. + base = CYGHWR_HAL_STM32_GPIOG; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRL, 0x00CCCCCC ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_AFRH, 0x00000CC0 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0xAA808000 ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x00291AAA ); + // TODO:CONSIDER: OSPEEDR for SRAM pins to 100MHz + + // GPIO Port H stays default, with pulldowns on all except PH0,1 (OSC) just in case that is important. + base = CYGHWR_HAL_STM32_GPIOH; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0xAAAAAAA0 ); + + // GPIO Port I - setup PI9 for LED3 as GPIO out, rest stay default, with pulldowns + base = CYGHWR_HAL_STM32_GPIOI; + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_PUPDR, 0xAAA2AAAA ); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_MODER, 0x00040000 ); + + + // Set up FSMC NOR/SRAM bank 2 for SRAM + + base = CYGHWR_HAL_STM32_FSMC; + + +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) + // NOTEs: + // - The "STM32 20-21-45-46 G-EVAL" boards we have are populated with the + // IS61WV102416BLL-10MLI part and not the Cypress CY7C1071DV33 part. + // - The F4[01][57]xx devices can operate upto 168MHz (or 144MHz) so maximum HCLK + // timing of 6ns (or 6.94444ns). + // + // NOTE: The code does NOT set BWTR2 for SRAM write-cycle timing (so will be + // the default reset value of 0x0FFFFFFF) since BCRx:EXTMOD bit is NOT set. + + // TODO:IMPROVE: Derive values based on CLK settings. The following "fixed" + // values are based on a 168MHz SYSCLK: + + // BCR2 = MBKEN | MWID=0b01 (16bits) | WREN + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BCR2, 0x00001015 ); + + // BTR2: + // ADDSET=3 (3 HCLK cycles) + // ADDHLD=0 (SRAM:do not care) + // DATAST=6 (6 HCLK cycles) + // BUSTURN=1 (1 HCLK cycle) + // CLKDIV=0 (SRAM:do not care) + // DATLAT=0 (SRAM:do not care) + // ACCMOD=0 (access mode A) + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BTR2, 0x00010603 ); +#else // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2 + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BCR2, 0x00001011 ); + // SRAM timings for the fitted CY7C1071DV33-12BAXI async SRAM + // We could try and make this depend on hclk as it should, but that's + // probably overkill for now. With an hclk of 120MHz, each hclk period + // is 8.33ns, so we just use that. This might mean being slightly + // suboptimal at lower configured hclk speeds. + // It's tricky to get the waveforms in the STM32 FSMC docs and the SRAM + // datasheet, to match up, so there's a small amount of guess work involved + // here. From the SRAM datasheet, ADDSET should be at least 7ns (tHZWE), and + // DATAST should be at least 9ns (tPWE) plus one HCLK (from Fig 397 in FSMC + // docs showing Mode 1 write accesses). This gives ADDSET=1 and + // DATAST=3. + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BTR2, 0x00000301 ); +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2 + + // Enable flash prefetch buffer, cacheability and set latency to 2 wait states. + // Latency has to be set before clock is switched to a higher speed. + { + cyg_uint32 acr; + + base = CYGHWR_HAL_STM32_FLASH; + + HAL_READ_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + acr |= CYGHWR_HAL_STM32_FLASH_ACR_PRFTEN; + acr |= CYGHWR_HAL_STM32_FLASH_ACR_DCEN|CYGHWR_HAL_STM32_FLASH_ACR_ICEN; + acr |= CYGHWR_HAL_STM32_FLASH_ACR_LATENCY(CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES); + HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FLASH_ACR, acr ); + } +} + +//========================================================================== + +// Set LEDs 1-4 to lowest 4 bits of supplied char. +__externC void hal_stm32x0_led(char c) +{ + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32X0G_LED1, 0 != (c&1) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32X0G_LED2, 0 != (c&2) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32X0G_LED3, 0 != (c&4) ); + CYGHWR_HAL_STM32_GPIO_OUT( CYGHWR_HAL_STM32X0G_LED4, 0 != (c&8) ); +} + +//========================================================================== + +__externC void hal_platform_init( void ) +{ +#ifdef CYGDBG_USE_ASSERTS + __externC char __sram_data_start[]; +#endif + +#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + // Check the number of VSRs matches the linker script. We can do this + // because we intend the VV table to follow the VSR table with no gaps. + CYG_ASSERT( (char*)&hal_virtual_vector_table[0] - (char*)&hal_vsr_table >= CYGNUM_HAL_VSR_COUNT*4, + "VSR table size does not match" ); + // Now check the declared start of SRAM data follows the VV table end + CYG_ASSERT( (__sram_data_start - (char*)&hal_virtual_vector_table[0]) >= CYGNUM_CALL_IF_TABLE_SIZE*4, + "VV table size does not match sram space" ); +#else + // Check the VSR table fits below declared start of SRAM data + CYG_ASSERT( (__sram_data_start - (char*)&hal_vsr_table[0]) >= CYGNUM_HAL_VSR_COUNT*4, + "VSR table size does not match" ); +#endif + hal_stm32x0_led(1); +} + +//========================================================================== + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//-------------------------------------------------------------------------- +// Accesses to areas not backed by real devices or memory can cause +// the CPU to hang. +// +// The following table defines the memory areas that GDB is allowed to +// touch. All others are disallowed. +// This table needs to be kept up to date with the set of memory areas +// that are available on the board. + +static struct +{ + CYG_ADDRESS start; // Region start address + CYG_ADDRESS end; // End address (last byte) +} hal_data_access[] = +{ + { CYGMEM_REGION_ram, CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE-1 }, // External SRAM +#ifdef CYGMEM_REGION_sram + { CYGMEM_REGION_sram, CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE-1 }, // On-chip SRAM +#endif +#ifdef CYGMEM_REGION_flash + { CYGMEM_REGION_flash, CYGMEM_REGION_flash+CYGMEM_REGION_flash_SIZE-1 }, // On-chip flash +#endif + { 0xE0000000, 0x00000000-1 }, // Cortex-M peripherals + { 0x40000000, 0x60000000-1 }, // STM32 peripherals + { 0xA0000000, 0xA0001000-1 }, // FSMC control +#ifdef CYGMEM_REGION_ccm + { CYGMEM_REGION_ccm, CYGMEM_REGION_ccm+CYGMEM_REGION_ccm_SIZE-1 }, // On-chip (close-coupled) SRAM +#endif +}; + +__externC int cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count ) +{ + int i; + for( i = 0; i < sizeof(hal_data_access)/sizeof(hal_data_access[0]); i++ ) + { + if( (addr >= hal_data_access[i].start) && + (addr+count) <= hal_data_access[i].end) + return true; + } + return false; +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//========================================================================== + +#ifdef CYGPKG_REDBOOT +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//-------------------------------------------------------------------------- +// Memory layout +// +// We report the on-chip SRAM and external SRAM. + + +void +cyg_plf_memory_segment(int seg, unsigned char **start, unsigned char **end) +{ + switch (seg) { + case 0: + *start = (unsigned char *)CYGMEM_REGION_ram; + *end = (unsigned char *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); + break; +#ifdef CYGMEM_REGION_sram + case 1: + *start = (unsigned char *)CYGMEM_REGION_sram; + *end = (unsigned char *)(CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE); + break; +#elif defined(CYGMEM_REGION_xram) + case 1: + *start = (unsigned char *)CYGMEM_REGION_xram; + *end = (unsigned char *)(CYGMEM_REGION_xram + CYGMEM_REGION_xram_SIZE); + break; +#endif +#ifdef CYGMEM_REGION_ccm + case 2: + *start = (unsigned char *)CYGMEM_REGION_ccm; + *end = (unsigned char *)(CYGMEM_REGION_ccm + CYGMEM_REGION_ccm_SIZE); + break; +#endif + default: + *start = *end = NO_MEMORY; + break; + } +} // cyg_plf_memory_segment() + +#endif // CYGPKG_REDBOOT + + +//========================================================================== +// EOF stm32x0g_eval_misc.c diff --git a/packages/hal/cortexm/stm32/var/current/ChangeLog b/packages/hal/cortexm/stm32/var/current/ChangeLog --- a/packages/hal/cortexm/stm32/var/current/ChangeLog +++ b/packages/hal/cortexm/stm32/var/current/ChangeLog @@ -1,17 +1,299 @@ +2014-02-28 John Dallaway + + * src/stm32_misc.c: Ensure TIM2 clock enabled when profiling. + [Bugzilla 1001953] + +2013-04-06 Jerzy Dyrda + + * include/var_io_eth.h: + * include/var_io.h: Update ETH macros for F4 device. [ Bugzilla 1001219 ] + +2013-01-19 John Dallaway + + * include/var_io.h: Fix CYGHWR_HAL_STM32_UART6 definition. + +2012-04-23 James Smith + + * include/var_io_pins.h (CYGHWR_HAL_STM32_PIN_IN): Removed + spurious parameter since the API for this macro should match the + F2/F4 (HIPERFORMANCE) definition. + + * include/var_io_eth.h: Update F1 ETH_MII + CYGHWR_HAL_STM32_PIN_IN() usage to reflect correct API. + +2012-04-13 Christophe Coutand + + * include/var_io.h: + Added definitions, CYGHWR_HAL_STM32_USB_CLOCK, + CYGHWR_HAL_STM32_CAN1_CLOCK and CYGHWR_HAL_STM32_CAN2_CLOCK + +2012-03-27 James Smith + + * tests/timers.c (TIMER_PRI): Add macro and manifests to allow + easy manipulation of the base and delta between the timer + priorities being tested. + +2012-03-23 James Smith + + * include/var_io_usart.h: Provide common/shared UART pin + definitions for F1, F2 and F4 devices using the new PIN wrapper + macros. The RTS pin definitions for all STM32F families now use + GPIO output since the driver uses software controlled + RTS. Previously the F2/F4 defined the RTS pins as ALTFN. + + * include/var_io.h: Provide common/shared ADC pin definitions for + F1, F2 and F4 devices using the new PIN_ANALOG() wrapper macro. + + * include/var_io_eth.h: Provide common MII pin definitions using + the new PIN wrapper macros. Also remove MII_REMAP which was + incorrectly using the wrong manifests (STM3210C-EVAL networking + would not work) since decision taken that "plf_io.h" should + contain board specific I/O pin mapping. + + * cdl/hal_cortexm_stm32.cdl: Remove CYGPKG_HAL_STM32_ETH and + sub-option CYGHWR_HAL_STM32_ETH_MII_REMAP since ethernet pin + mapping now present in platform specific "plf_io.h" header. + +2012-03-22 James Smith + + * include/var_io_pins.h: Provide "common" wrapper macros + CYGHWR_HAL_STM32_PIN_OUT, CYGHWR_HAL_STM32_PIN_ALTFN_OUT, + CYGHWR_HAL_STM32_PIN_IN, CYGHWR_HAL_STM32_PIN_ALTFN_IN and + CYGHWR_HAL_STM32_PIN_ANALOG for defining I/O pins to allow the + same (where applicable) source calls to be used regardless of + whether the target is F1 or HIPERFORMANCE (F2/F4). + + * cdl/hal_cortexm_stm32.cdl: Remove CYGPKG_HAL_STM32_ETH and + sub-option CYGHWR_HAL_STM32_ETH_MII_REMAP since ethernet pin + mapping now present in platform specific "plf_io.h" header. + +2012-03-21 James Smith + + * include/var_io_pins.h: Provide similar support for F1 family + devices as available for F2/F4 family devices by adding AT_LEAST + and AT_MOST macros for specifying OUTPUT pin speed limits, and + providing generic LOW, MED and FAST manifests to hide the actual + device speed. + + * src/stm32_misc.c (hal_stm32_gpio_set): Use + CYGHWR_HAL_STM32_GPIO_CNFMODE_SET macro instead of explicit + bitmask manipulation for seeting F1 CRL/CRH. + +2012-03-15 James Smith + + * src/stm32_misc.c: + * src/stm32_dma.c: + * src/hal_diag.c: + * include/var_io_usart.h: + * include/var_io_pins.h: + * include/var_io_eth.h: + * include/var_io.h: + * include/var_intr.h: + * include/var_dma.h: Use HIPERFORMANCE manifest to add support for + F4 devices. + + * cdl/hal_cortexm_stm32.cdl: Many minor changes to support + Cortex-M4 and STM32F4 devices. + + * tests/timers.c (timers): Add TIM8_UP_TIM13 to the set of timers + tested for those platforms where it is defined. + +2012-03-13 James Smith + + * include/var_io.h (HAL_AARDVARK_CHECK_I2C): Macro for specific + STM32 F1 devices that suffer from an I2C/FSMC errata to allow the + Aardvark test cases to operate. Added STM32F4 RTC manifests. + +2012-02-28 James Smith + + * src/stm32_dma.c (hal_stm32_dma_disable): Add new function to + allow temporary disable of DMA stream for circular mode + configurations. + + * include/var_dma.h: Added prototype for newly added + hal_stm32_dma_disable() function. + +2012-02-28 James Smith + + * src/stm32_dma.c (hal_stm32_dma_isr): Do not disable the stream + when configured for circular mode. + +2012-02-24 James Smith + + * include/var_io.h: Provide manifests covering STM32F2 ADC + support. + + * include/var_intr.h: Provide explicit DMA2 CH4 and CH5 manifests + for non-connectivity devices (e.g. STM3210E-EVAL target). + + * include/var_dma.h: + * src/stm32_dma.c (hal_stm32_dma_configure_circular): Provide + function to enable/disable DMA circular mode, and provide + prototype in header and documentation. + +2012-02-17 James Smith + + * include/var_io_pins.h: Fix F2 MODE_SET and OSPEED_SET macros to + correctly mask register field bits. + +2012-01-20 Nick Garnett + + * include/var_intr.h (CYGNUM_HAL_VSR_MAX): Reverse an earlier + change to this value. + +2012-01-13 Nick Garnett + + * include/var_io.h: Add shifts for RTC TR and DR register fields. + +2012-01-12 Nick Garnett + + * include/var_intr.h: Reorganize vectors 43-49 so they are defined + correctly for F2 devices. + + * include/var_io.h: Tidy up DMA defines. Move I2C and SPI pin and + DMA channel definitions out to platform HALs. + + * include/var_io_pins.h (CYGHWR_HAL_STM32_GPIO_PUPD_SET): Fix + buglet in register clear code. + + * cdl/hal_cortexm_stm32.cdl: + * include/var_dma.h: + * src/stm32_dma.c: Add DMA API. + +2011-12-15 Jonathan Larmour + + * cdl/hal_cortexm_stm32.cdl (CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY): + Rather than list every F2 part, just say all F2 since we don't yet know + of F2 parts that don't have connectivity. + (CYGHWR_HAL_STM32_ETH_MII_REMAP): Allow pin remapping to be configurable + as a standard setting, alternate mapping, or provided by the platform. + * include/var_io.h: Add MCO1_MASK/MCO2_MASK and + MCO1PRE_MASK/MCO2PRE_MASK defns. Add CYGHWR_HAL_STM32_FLASH_CR_PSIZE() + to make flash parallelism easier to set. + * include/var_io_eth.h: Fix MACMIIAR_CR_MASK define. + Allow specification (and checking) of MACMIIAR_CR to set MDC clock + according to defined MHz ranges - this allows it to vary between + processors. + Support above CYGHWR_HAL_STM32_ETH_MII_REMAP changes. + Add alternate mappings for F2 eth pins (although it's a different + subset to F1. + +2011-12-12 Jonathan Larmour + + * src/stm32_misc.c (hal_start_clocks): Remove unnecessary fiddling + after RCC reset. Avoid overflow from PLL multiplier. Handle PLLQ + and RTCPRE on F2. + + * include/var_io.h (CYGHWR_HAL_STM32_RCC_CFGR_RTCPRE): Add set macro + separate from mask. + + * cdl/hal_cortexm_stm32.cdl: Improve clock option descriptions. Add + CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV. + +2011-12-08 Jonathan Larmour + + * cdl/hal_cortexm_stm32.cdl: Add selections for processors in F2 + family, and allow discrimination between those and F1. + * include/var_intr.h: Modify and add to interrupt list for F2. + (HAL_VAR_INTERRUPT_{MASK,UNMASK,ACKNOWLEDGE,CONFIGURE ): Update + EXTI interrupts that need special mapping for F2. + * include/var_io.h: Many additions and changes for F2. To avoid + an unmanageable size, split out GPIO/pin config, USART and ETH + peripheral definitions into new files. + * include/var_io_pins.h: New file for GPIO and pin configuration. + * include/var_io_usart.h: New file for USART definitions. + * include/var_io_eth.h: New file for Ethernet peripheral definitions. + * src/hal_diag.c: Allow for new style pin remapping used by F2 + while still allowing F1 to work. + Support USART6 (which we call UART5). + (hal_stm32_serial_init_channel): Only use AFIO on F1. + * src/stm32_misc.c (hal_stm32_gpio_{set,out,in}): Support new GPIO + pin setting. + (hal_stm32_uart_setbaud): Support UART6 (called UART5 in CDL). + (hal_enable_profile_timer): Ensure timer peripheral (defaulting to TIM6) + has its clock enabled. + +2011-10-07 Nick Garnett + + * include/var_io.h: Separate FSMC and ETH register definitions, + which seem to have got a little mixed together at some point. + +2011-02-03 Alan Bowman + + * include/var_io.h: Fix CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_* + definitions. [ Bugzilla 1001137 ] + +2011-01-21 Ilija Kocho + + * src/stm32_misc.c (hal_start_clocks): Added optional calculation of + hal_cortexm_systick_clock when 'internal' clock source is selected. + +2011-01-13 John Dallaway + + * src/stm32_misc.c: Implement a profiling timer on TIM2. + * cdl/hal_cortexm_stm32.cdl: Add CDL option to enable the profiling + timer. + +2011-01-13 Nick Garnett + + * src/stm32_misc.c (hal_start_clocks): Correct bit clear operation + when disabling external clock. + 2009-10-26 Ross Younger * include/var_io.h: Minor corrections to the FSMC register defs. +2009-10-22 Nick Garnett + + * cdl/hal_cortexm_stm32.cdl: + * include/var_io.h: Add remap configuration for SPI busses. + 2009-08-10 Simon Kallweit * include/var_io.h: Added more register definitions for FSMC +2009-07-02 Nick Garnett + + * cdl/hal_cortexm_stm32.cdl: Add remap configuration for UARTS. + + * include/var_io.h (CYGHWR_HAL_STM32_AFIO_CLOCK): Add AFIO clock control. + (CYGHWR_HAL_STM32_UART*_REMAP_CONFIG): Add remap support for UARTS. + + * src/hal_diag.c (channel_data_t, hal_stm32_serial_init_channel): + Add support for UART remapping. + +2009-06-29 Nick Garnett + + * include/var_io.h (CYGHWR_HAL_STM32_ETH): Add support for + ethernet device on connectivity line devices. + Add device clock control support. + + * include/var_intr.h: + * cdl/hal_cortexm_stm32.cdl: Add support for connectivity line + devices. + + * src/stm32_misc.c (hal_variant_init): Remove default enable of + all device clocks. + (hal_stm32_clock_enable, hal_stm32_clock_disable): Add routines to + enable individual device clocks. + + * src/hal_diag.c (stm32_ser_channels) + (hal_stm32_serial_init_channel): Add clock enable support. + 2009-04-17 Simon Kallweit * src/hal_diag.c (hal_stm32_serial_getc_timeout): Fix for higher baudrates. The original version lost bytes due to the long timeout. +2009-03-23 Nick Garnett + + * src/stm32_misc.c (hal_variant_init): Add write to AHBENR + register to enable all AHB based devices. + + * include/var_io.h (CYGHWR_HAL_STM32_IWDG_*): Add defines for + independent watchdog. + 2009-02-27 Simon Kallweit * include/var_io.h: @@ -103,7 +385,7 @@ 2008-10-06 Nick Garnett = 2) } + description " + This option corresponds to the divider used before input to the PLL. + On non-connectivity parts, you can only divide by 2 or 1. On other + F1 parts, if using HSI as the clock source, then that is automatically + divided by 2. If using HSE as the clock source, then this value corresponds + to the PREDIV1 field of register RCC_CFGR2. On F2 and F4 parts, this value + corresponds to the PLLM field of RCC_PLLCFGR." + } + + cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL { display "PLL multiplier" flavor data default_value 9 - legal_values 2 to 16 + legal_values 2 to 432 + requires { (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 16) } + requires { ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 432) } + description " + This value is used to multiply up the PLL input. On the F1 it corresponds + to the PLLMUL field of RCC_CFGR. On the F2 and F4 it corresponds to the PLLN + field of RCC_PLLCFGR." + } + + cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV { + display "SYSCLK divider" + flavor data + active_if { ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) } + default_value 4 + legal_values { 2 4 6 8 } + description " + This value is used to divide down the PLL output for use as + the SYSCLK clock. This corresponds to the PLLP field of + RCC_PLLCFGR" } cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV { @@ -115,6 +264,7 @@ cdl_package CYGPKG_HAL_CORTEXM_STM32 { flavor data default_value 1 legal_values { 1 2 4 8 16 64 128 256 512 } + description "Divider for AHB" } cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV { @@ -122,6 +272,7 @@ cdl_package CYGPKG_HAL_CORTEXM_STM32 { flavor data default_value 2 legal_values { 1 2 4 8 16 } + description "Divider for APB1" } cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV { @@ -129,6 +280,20 @@ cdl_package CYGPKG_HAL_CORTEXM_STM32 { flavor data default_value 1 legal_values { 1 2 4 8 16 } + description "Divider for APB2" + } + + cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV { + display "PLLQ divider" + flavor data + active_if { ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) } + default_value 10 + legal_values 4 to 15 + description " + This PLL divider is used in the F2 and F4 families to divide down the + PLL output clock (VCO clock) for use by the USB OTG FS, SDIO + and RNG peripherals. USB OTG FS requires a 48MHz clock and + other peripherals require a clock no greater than 48MHz." } } @@ -190,6 +355,86 @@ cdl_package CYGPKG_HAL_CORTEXM_STM32 { description "The platform has a socket on UART4." } + cdl_interface CYGINT_HAL_STM32_UART5 { + display "Platform has UART5 serial port" + description "The platform has a socket on UART5." + } + + cdl_option CYGHWR_HAL_STM32_UART0_REMAP { + display "Remap UART0 (USART1) pins" + default_value 0 + + description "Remap UART0 (USART1) to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware." + } + + cdl_option CYGHWR_HAL_STM32_UART1_REMAP { + display "Remap UART1 (USART2) pins" + default_value 0 + + description "Remap UART1 (USART2) to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware." + } + + cdl_option CYGHWR_HAL_STM32_UART2_REMAP { + display "Remap UART2 (USART3) pins" + flavor data + default_value { "NONE" } + legal_values { "NONE" "PARTIAL" "FULL" } + + description "Remap UART2 (USART3) to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware." + } + + cdl_option CYGHWR_HAL_STM32_I2C1_REMAP { + display "Remap I2C bus 1 pins" + default_value 0 + + description "Remap I2C bus 1 to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware." + } + + cdl_option CYGHWR_HAL_STM32_SPI1_REMAP { + display "Remap SPI bus 1 pins" + active_if CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + default_value 0 + + description "Remap SPI bus 1 to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware." + } + + cdl_option CYGHWR_HAL_STM32_SPI3_REMAP { + display "Remap SPI bus 3 pins" + active_if CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + default_value 0 + + description "Remap SPI bus 3 to alternate set of pins. + This will usually be set by the platform + HAL to reflect the configuration of the hardware. + This option is only available on connectivity line + devices." + } + + cdl_option CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER { + display "Use TIM2 for gprof profiling" + active_if CYGPKG_PROFILE_GPROF + flavor bool + default_value 1 + implements CYGINT_PROFILE_HAL_TIMER + implements CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED + description " + The STM32 variant HAL can provide support for gprof-based + profiling. This uses timer TIM2 to generate regular interrupts, + and the interrupt handler records the PC at the time of the + interrupt. Disable this option if you wish to provide + an alternative profiling timer implementation." + } + cdl_component CYGPKG_HAL_CORTEXM_STM32_OPTIONS { display "Build options" flavor none @@ -231,3 +476,5 @@ cdl_package CYGPKG_HAL_CORTEXM_STM32 { } } + +# EOF hal_cortexm_stm32.cdl diff --git a/packages/hal/cortexm/stm32/var/current/include/var_dma.h b/packages/hal/cortexm/stm32/var/current/include/var_dma.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/var/current/include/var_dma.h @@ -0,0 +1,146 @@ +#ifndef CYGONCE_HAL_VAR_DMA_H +#define CYGONCE_HAL_VAR_DMA_H +//============================================================================= +// +// var_dma.h +// +// STM32 DMA support +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Date: 2011-12-07 +// Purpose: STM32 DMA support +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +//============================================================================= +// DMA stream descriptors + +#define CYGHWR_HAL_STM32_DMA_MODE_P2M 0 +#define CYGHWR_HAL_STM32_DMA_MODE_M2P 1 +#define CYGHWR_HAL_STM32_DMA_MODE_M2M 2 + + +// DMA descriptor. Packs interrupt vector, controller, stream and +// channel IDs together with the mode into a 32 bit descriptor. + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_DMA( __ctlr, __stream, __chan, __mode ) \ + (((CYGNUM_HAL_INTERRUPT_DMA##__ctlr##_CH##__stream)<<16) | \ + ((CYGHWR_HAL_STM32_DMA_MODE_##__mode)<<12) | \ + ((__chan)<<8) | ((__stream)<<4) | ((__ctlr)<<0)) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_DMA( __ctlr, __stream, __chan, __mode ) \ + (((CYGNUM_HAL_INTERRUPT_DMA##__ctlr##_STR##__stream)<<16) | \ + ((CYGHWR_HAL_STM32_DMA_MODE_##__mode)<<12) | \ + ((__chan)<<8) | ((__stream)<<4) | ((__ctlr)<<0)) +#else +#error "Undefined STM32 family" +#endif + +#define CYGHWR_HAL_STM32_DMA_INTERRUPT( __desc ) (((__desc)>>16)&0xFFFF) +#define CYGHWR_HAL_STM32_DMA_MODE( __desc ) (((__desc)>>12)&0xF) +#define CYGHWR_HAL_STM32_DMA_CHANNEL( __desc ) (((__desc)>>8)&0xF) +#define CYGHWR_HAL_STM32_DMA_STREAM( __desc ) (((__desc)>>4)&0xF) +#define CYGHWR_HAL_STM32_DMA_CONTROLLER( __desc ) (((__desc)>>0)&0xF) + +//============================================================================= +// API + +#ifndef __ASSEMBLER__ + +typedef struct hal_stm32_dma_stream hal_stm32_dma_stream; + +typedef void hal_stm32_dma_callback( hal_stm32_dma_stream *stream, cyg_uint32 count, CYG_ADDRWORD data ); + +struct hal_stm32_dma_stream +{ + // These fields need to be initialized before calling + // hal_stm32_dma_init(). This can usually be done statically, when + // defining an containing data structure. + + cyg_uint32 desc; // stream descriptor + hal_stm32_dma_callback *callback; // Callback function + CYG_ADDRWORD data; // Client private data + + + // Runtime data + + CYG_ADDRWORD ctlr; // Controller base address + CYG_ADDRWORD stream; // Stream/channel index + + cyg_uint32 ccr; // Channel control register value + cyg_bool active; // Channel active + cyg_uint32 count; // Bytes left to transfer + + cyg_interrupt interrupt; // DMA interrupt object + cyg_handle_t handle; // Interrupt handle +}; + + +__externC void hal_stm32_dma_init( hal_stm32_dma_stream *stream, int pri ); + +__externC void hal_stm32_dma_delete( hal_stm32_dma_stream *stream ); + +__externC void hal_stm32_dma_disable( hal_stm32_dma_stream *stream ); + +__externC void hal_stm32_dma_poll( hal_stm32_dma_stream *stream ); + +__externC void hal_stm32_dma_configure( hal_stm32_dma_stream *stream, int tfr_size, + cyg_bool no_minc, cyg_bool polled ); + +__externC void hal_stm32_dma_configure_circular( hal_stm32_dma_stream *stream, + cyg_bool enable); + +__externC void hal_stm32_dma_start( hal_stm32_dma_stream *stream, void *memory, + CYG_ADDRESS peripheral, cyg_uint32 size ); + +__externC void hal_stm32_dma_show( hal_stm32_dma_stream *stream ); + +#endif // __ASSEMBLER__ + +#endif // CYGONCE_HAL_VAR_DMA_H +//----------------------------------------------------------------------------- +// end of var_dma.h diff --git a/packages/hal/cortexm/stm32/var/current/include/var_intr.h b/packages/hal/cortexm/stm32/var/current/include/var_intr.h --- a/packages/hal/cortexm/stm32/var/current/include/var_intr.h +++ b/packages/hal/cortexm/stm32/var/current/include/var_intr.h @@ -4,7 +4,7 @@ // // var_intr.h // -// HAL Interrupt and clock assignments for STR7XX variants +// HAL Interrupt and clock assignments for STM32 variants // //========================================================================== // ####ECOSGPLCOPYRIGHTBEGIN#### @@ -42,9 +42,9 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): nickg -// Date: 2008-07-30 +// Date: 2008-10-06 // Purpose: Define Interrupt support -// Description: The interrupt specifics for ST STR7XX variants are +// Description: The interrupt specifics for ST STM32 variants are // defined here. // // Usage: #include @@ -63,7 +63,12 @@ #define CYGNUM_HAL_INTERRUPT_WWDG ( 0+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_PVD ( 1+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TAMPER ( 2+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TAMP_STAMP ( 2+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name - also timestamps +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGNUM_HAL_INTERRUPT_RTC_GLOBAL ( 3+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGNUM_HAL_INTERRUPT_RTC_WKUP ( 3+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif #define CYGNUM_HAL_INTERRUPT_FLASH ( 4+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_RCC ( 5+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_EXTI0 ( 6+CYGNUM_HAL_INTERRUPT_EXTERNAL) @@ -72,25 +77,41 @@ #define CYGNUM_HAL_INTERRUPT_EXTI3 ( 9+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_EXTI4 (10+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH2 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH3 (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH4 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH5 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH6 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA1_CH7 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_ADC1_2 (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA1_CH1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR0 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH2 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR1 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH3 (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR2 (13+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH4 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR3 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH5 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR4 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH6 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR5 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA1_CH7 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA1_STR6 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_ADC1_2 (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 only has ADC1+2 +#define CYGNUM_HAL_INTERRUPT_ADC1_2_3 (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has ADC1+2+3 +#define CYGNUM_HAL_INTERRUPT_ADC (18+CYGNUM_HAL_INTERRUPT_EXTERNAL) // More generic name +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGNUM_HAL_INTERRUPT_USB_HP (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_CAN_TX (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif +#define CYGNUM_HAL_INTERRUPT_CAN1_TX (19+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGNUM_HAL_INTERRUPT_USB_LP (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_CAN_RX0 (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_CAN_RX1 (21+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_CAN_SCE (22+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif +#define CYGNUM_HAL_INTERRUPT_CAN1_RX0 (20+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN1_RX1 (21+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN1_SCE (22+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_EXTI9_5 (23+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM1_BRK (24+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM1_BRK_TIM9 (24+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM9 #define CYGNUM_HAL_INTERRUPT_TIM1_UP (25+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM1_UP_TIM10 (25+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM10 #define CYGNUM_HAL_INTERRUPT_TIM1_TRG (26+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM1_TRG_COM_TIM11 (26+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM11 #define CYGNUM_HAL_INTERRUPT_TIM1_CC (27+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM2 (28+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM3 (29+CYGNUM_HAL_INTERRUPT_EXTERNAL) @@ -108,28 +129,105 @@ #define CYGNUM_HAL_INTERRUPT_EXTI15_10 (40+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_RTC_ALARM (41+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGNUM_HAL_INTERRUPT_USB_WAKEUP (42+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGNUM_HAL_INTERRUPT_OTG_FS_WKUP (42+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif +#ifndef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY #define CYGNUM_HAL_INTERRUPT_TIM8_BRK (43+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM8_UP (44+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM8_TRG (45+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM8_CC (46+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGNUM_HAL_INTERRUPT_ADC3 (47+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif #define CYGNUM_HAL_INTERRUPT_FSMC (48+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_SDIO (49+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#else +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGNUM_HAL_INTERRUPT_TIM8_BRK_TIM12 (43+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM12 +#define CYGNUM_HAL_INTERRUPT_TIM8_UP_TIM13 (44+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM13 +#define CYGNUM_HAL_INTERRUPT_TIM8_TRG_COM_TIM14 (45+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because is also TIM13 +#define CYGNUM_HAL_INTERRUPT_TIM8_CC (46+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA1_STR7 (47+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_FSMC (48+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_SDIO (49+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#endif +#endif #define CYGNUM_HAL_INTERRUPT_TIM5 (50+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_SPI3 (51+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_UART4 (52+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_UART5 (53+CYGNUM_HAL_INTERRUPT_EXTERNAL) #define CYGNUM_HAL_INTERRUPT_TIM6 (54+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_TIM6_DAC (54+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 name because also DAC1+2 underrun #define CYGNUM_HAL_INTERRUPT_TIM7 (55+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA2_CH1 (56+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA2_CH2 (57+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA2_CH3 (58+CYGNUM_HAL_INTERRUPT_EXTERNAL) -#define CYGNUM_HAL_INTERRUPT_DMA2_CH4_5 (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA2_CH1 (56+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA2_STR0 (56+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA2_CH2 (57+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA2_STR1 (57+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_DMA2_CH3 (58+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA2_STR2 (58+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams + +#ifndef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +# error Support does not yet exist for F2 or F4 without connectivity +#endif + +#define CYGNUM_HAL_INTERRUPT_DMA2_CH4 (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA2_CH5 (CYGNUM_HAL_INTERRUPT_DMA2_CH4) // As per RM0008 datasheet 3.3.6 note #define CYGNUM_HAL_INTERRUPT_NVIC_MAX (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#else + +#define CYGNUM_HAL_INTERRUPT_DMA2_CH4 (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA2_STR3 (59+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams + +#define CYGNUM_HAL_INTERRUPT_DMA2_CH5 (60+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F1 has channels +#define CYGNUM_HAL_INTERRUPT_DMA2_STR4 (60+CYGNUM_HAL_INTERRUPT_EXTERNAL) // F2/F4 has streams +#define CYGNUM_HAL_INTERRUPT_ETH (61+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_ETH_WAKEUP (62+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN2_TX (63+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN2_RX0 (64+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN2_RX1 (65+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CAN2_SCE (66+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGNUM_HAL_INTERRUPT_USB_FS (67+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (67+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGNUM_HAL_INTERRUPT_OTG_FS (67+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA2_STR5 (68+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA2_STR6 (69+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DMA2_STR7 (70+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_UART6 (71+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C3_EV (72+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_I2C3_ER (73+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_OTG_HS_EP1_OUT (74+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_OTG_HS_EP1_IN (75+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_OTG_HS_WKUP (76+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_OTG_HS (77+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_DCMI (78+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_CRYP (79+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#define CYGNUM_HAL_INTERRUPT_HASH_RNG (80+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +# define CYGNUM_HAL_INTERRUPT_HASH_FPU (81+CYGNUM_HAL_INTERRUPT_EXTERNAL) + +# define CYGNUM_HAL_INTERRUPT_NVIC_MAX (81+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +# define CYGNUM_HAL_INTERRUPT_NVIC_MAX (80+CYGNUM_HAL_INTERRUPT_EXTERNAL) +#else +# error "Support does not yet exist for this FAMILY_HIPERFORMANCE configuration" +#endif +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#endif // ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + #define CYGNUM_HAL_INTERRUPT_EXTI5 ( 1+CYGNUM_HAL_INTERRUPT_NVIC_MAX) #define CYGNUM_HAL_INTERRUPT_EXTI6 ( 2+CYGNUM_HAL_INTERRUPT_NVIC_MAX) #define CYGNUM_HAL_INTERRUPT_EXTI7 ( 3+CYGNUM_HAL_INTERRUPT_NVIC_MAX) @@ -155,6 +253,45 @@ //========================================================================== // Interrupt mask and config for variant-specific devices +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ + case CYGNUM_HAL_INTERRUPT_PVD: \ + __v = 16; \ + break; \ + case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ + __v = 17; \ + break; \ + case CYGNUM_HAL_INTERRUPT_USB_WAKEUP: \ + __v = 18; \ + break; + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ + case CYGNUM_HAL_INTERRUPT_PVD: \ + __v = 16; \ + break; \ + case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ + __v = 17; \ + break; \ + case CYGNUM_HAL_INTERRUPT_OTG_FS_WKUP: \ + __v = 18; \ + break; \ + case CYGNUM_HAL_INTERRUPT_ETH_WAKEUP: \ + __v = 19; \ + break; \ + case CYGNUM_HAL_INTERRUPT_OTG_HS_WKUP: \ + __v = 20; \ + break; \ + case CYGNUM_HAL_INTERRUPT_TAMP_STAMP: \ + __v = 21; \ + break; \ + case CYGNUM_HAL_INTERRUPT_RTC_WKUP: \ + __v = 22; \ + break; + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + #define HAL_VAR_INTERRUPT_MASK( __vector ) \ { \ cyg_int32 __v = -1; \ @@ -173,17 +310,7 @@ __v = __vector - CYGNUM_HAL_INTERRUPT_EXTI5 + 5; \ break; \ \ - case CYGNUM_HAL_INTERRUPT_PVD: \ - __v = 16; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ - __v = 17; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_USB_WAKEUP: \ - __v = 18; \ - break; \ + HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ } \ \ if( __v >= 0 ) \ @@ -217,17 +344,7 @@ CYGARC_REG_NVIC_IBIT(CYGNUM_HAL_INTERRUPT_EXTI15_10-CYGNUM_HAL_INTERRUPT_EXTERNAL) ); \ break; \ \ - case CYGNUM_HAL_INTERRUPT_PVD: \ - __v = 16; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ - __v = 17; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_USB_WAKEUP: \ - __v = 18; \ - break; \ + HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ } \ \ if( __v >= 0 ) \ @@ -259,17 +376,7 @@ __v = __vector - CYGNUM_HAL_INTERRUPT_EXTI5 + 5; \ break; \ \ - case CYGNUM_HAL_INTERRUPT_PVD: \ - __v = 16; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ - __v = 17; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_USB_WAKEUP: \ - __v = 18; \ - break; \ + HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ } \ \ if( __v >= 0 ) \ @@ -297,17 +404,7 @@ __v = __vector - CYGNUM_HAL_INTERRUPT_EXTI5 + 5; \ break; \ \ - case CYGNUM_HAL_INTERRUPT_PVD: \ - __v = 16; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_RTC_ALARM: \ - __v = 17; \ - break; \ - \ - case CYGNUM_HAL_INTERRUPT_USB_WAKEUP: \ - __v = 18; \ - break; \ + HAL_VAR_PERIPH_EXTI_MAP_FAMILY \ } \ \ if(( __v >= 0 ) && !(__level) ) \ diff --git a/packages/hal/cortexm/stm32/var/current/include/var_io.h b/packages/hal/cortexm/stm32/var/current/include/var_io.h --- a/packages/hal/cortexm/stm32/var/current/include/var_io.h +++ b/packages/hal/cortexm/stm32/var/current/include/var_io.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2013 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -44,7 +44,7 @@ // Author(s): nickg // Date: 2008-07-30 // Purpose: STM32 variant specific registers -// Description: +// Description: // Usage: #include // //####DESCRIPTIONEND#### @@ -64,6 +64,11 @@ #define CYGHWR_HAL_STM32_TIM5 0x40000C00 #define CYGHWR_HAL_STM32_TIM6 0x40001000 #define CYGHWR_HAL_STM32_TIM7 0x40001400 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_TIM12 0x40001800 +#define CYGHWR_HAL_STM32_TIM13 0x40001C00 +#define CYGHWR_HAL_STM32_TIM14 0x40002000 +#endif #define CYGHWR_HAL_STM32_RTC 0x40002800 #define CYGHWR_HAL_STM32_WWDG 0x40002C00 #define CYGHWR_HAL_STM32_IWDG 0x40003000 @@ -75,12 +80,22 @@ #define CYGHWR_HAL_STM32_UART5 0x40005000 #define CYGHWR_HAL_STM32_I2C1 0x40005400 #define CYGHWR_HAL_STM32_I2C2 0x40005800 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_USB 0x40005C00 #define CYGHWR_HAL_STM32_USB_CAN_SRAM 0x40006000 -#define CYGHWR_HAL_STM32_BXCAN 0x40006400 +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_I2C3 0x40005C00 +#endif +#define CYGHWR_HAL_STM32_BXCAN1 0x40006400 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_BXCAN2 0x40006800 +#endif +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_BKP 0x40006C00 +#endif #define CYGHWR_HAL_STM32_PWR 0x40007000 #define CYGHWR_HAL_STM32_DAC 0x40007400 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_AFIO 0x40010000 #define CYGHWR_HAL_STM32_EXTI 0x40010400 #define CYGHWR_HAL_STM32_GPIOA 0x40010800 @@ -93,7 +108,21 @@ #define CYGHWR_HAL_STM32_ADC1 0x40012400 #define CYGHWR_HAL_STM32_ADC2 0x40012800 #define CYGHWR_HAL_STM32_TIM1 0x40012C00 +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_TIM1 0x40010000 +#define CYGHWR_HAL_STM32_PWM1 0x40010000 +#define CYGHWR_HAL_STM32_TIM8 0x40010400 +#define CYGHWR_HAL_STM32_PWM2 0x40010400 +#define CYGHWR_HAL_STM32_UART1 0x40011000 +#define CYGHWR_HAL_STM32_UART6 0x40011400 +#define CYGHWR_HAL_STM32_ADC1 0x40012000 +#define CYGHWR_HAL_STM32_ADC2 CYGHWR_HAL_STM32_ADC1 + 0x0100 +#define CYGHWR_HAL_STM32_ADC3 CYGHWR_HAL_STM32_ADC1 + 0x0200 +#define CYGHWR_HAL_STM32_ADC_COMMON CYGHWR_HAL_STM32_ADC1 + 0x0300 +#define CYGHWR_HAL_STM32_SDIO 0x40012C00 +#endif #define CYGHWR_HAL_STM32_SPI1 0x40013000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_TIM8 0x40013400 #define CYGHWR_HAL_STM32_UART1 0x40013800 #define CYGHWR_HAL_STM32_ADC3 0x40013C00 @@ -102,8 +131,42 @@ #define CYGHWR_HAL_STM32_DMA2 0x40020400 #define CYGHWR_HAL_STM32_RCC 0x40021000 #define CYGHWR_HAL_STM32_FLASH 0x40022000 +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_SYSCFG 0x40013800 +#define CYGHWR_HAL_STM32_EXTI 0x40013C00 +#define CYGHWR_HAL_STM32_TIM9 0x40014000 +#define CYGHWR_HAL_STM32_TIM10 0x40014400 +#define CYGHWR_HAL_STM32_TIM11 0x40014800 +#define CYGHWR_HAL_STM32_GPIOA 0x40020000 +#define CYGHWR_HAL_STM32_GPIOB 0x40020400 +#define CYGHWR_HAL_STM32_GPIOC 0x40020800 +#define CYGHWR_HAL_STM32_GPIOD 0x40020C00 +#define CYGHWR_HAL_STM32_GPIOE 0x40021000 +#define CYGHWR_HAL_STM32_GPIOF 0x40021400 +#define CYGHWR_HAL_STM32_GPIOG 0x40021800 +#define CYGHWR_HAL_STM32_GPIOH 0x40021C00 +#define CYGHWR_HAL_STM32_GPIOI 0x40022000 +#endif #define CYGHWR_HAL_STM32_CRC 0x40023000 - +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC 0x40023800 +#define CYGHWR_HAL_STM32_FLASH 0x40023C00 +#define CYGHWR_HAL_STM32_BKPSRAM 0x40024000 +#define CYGHWR_HAL_STM32_DMA1 0x40026000 +#define CYGHWR_HAL_STM32_DMA2 0x40026400 +#endif +#define CYGHWR_HAL_STM32_ETH 0x40028000 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_USB_OTG_HS 0x40040000 +#endif +#define CYGHWR_HAL_STM32_USB_OTG_FS 0x50000000 +#define CYGHWR_HAL_STM32_OTG CYGHWR_HAL_STM32_USB_OTG_FS // compatibility define. Deprecated. +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_DCMI 0x50050000 +#define CYGHWR_HAL_STM32_CRYP 0x50060000 +#define CYGHWR_HAL_STM32_HASH 0x50060400 +#define CYGHWR_HAL_STM32_RNG 0x50060800 +#endif #define CYGHWR_HAL_STM32_FSMC 0xA0000000 //============================================================================= @@ -125,6 +188,7 @@ // Not all registers are described here #define CYGHWR_HAL_STM32_RCC_CR 0x00 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_RCC_CFGR 0x04 #define CYGHWR_HAL_STM32_RCC_CIR 0x08 #define CYGHWR_HAL_STM32_RCC_APB2RSTR 0x0C @@ -134,6 +198,32 @@ #define CYGHWR_HAL_STM32_RCC_APB1ENR 0x1C #define CYGHWR_HAL_STM32_RCC_BDCR 0x20 #define CYGHWR_HAL_STM32_RCC_CSR 0x24 +# ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_RCC_AHBRSTR 0x28 +#define CYGHWR_HAL_STM32_RCC_CFGR2 0x2C +# endif +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR 0x04 +#define CYGHWR_HAL_STM32_RCC_CFGR 0x08 +#define CYGHWR_HAL_STM32_RCC_CIR 0x0C +#define CYGHWR_HAL_STM32_RCC_AHB1RSTR 0x10 +#define CYGHWR_HAL_STM32_RCC_AHB2RSTR 0x14 +#define CYGHWR_HAL_STM32_RCC_AHB3RSTR 0x18 +#define CYGHWR_HAL_STM32_RCC_APB1RSTR 0x20 +#define CYGHWR_HAL_STM32_RCC_APB2RSTR 0x24 +#define CYGHWR_HAL_STM32_RCC_AHB1ENR 0x30 +#define CYGHWR_HAL_STM32_RCC_AHB2ENR 0x34 +#define CYGHWR_HAL_STM32_RCC_AHB3ENR 0x38 +#define CYGHWR_HAL_STM32_RCC_APB1ENR 0x40 +#define CYGHWR_HAL_STM32_RCC_APB2ENR 0x44 +#define CYGHWR_HAL_STM32_RCC_AHB1LPENR 0x50 +#define CYGHWR_HAL_STM32_RCC_AHB2LPENR 0x54 +#define CYGHWR_HAL_STM32_RCC_AHB3LPENR 0x58 +#define CYGHWR_HAL_STM32_RCC_APB1LPENR 0x60 +#define CYGHWR_HAL_STM32_RCC_APB2LPENR 0x64 +#define CYGHWR_HAL_STM32_RCC_BDCR 0x70 +#define CYGHWR_HAL_STM32_RCC_CSR 0x74 +#endif #define CYGHWR_HAL_STM32_RCC_CR_HSION BIT_(0) #define CYGHWR_HAL_STM32_RCC_CR_HSIRDY BIT_(1) @@ -145,6 +235,26 @@ #define CYGHWR_HAL_STM32_RCC_CR_CSSON BIT_(19) #define CYGHWR_HAL_STM32_RCC_CR_PLLON BIT_(24) #define CYGHWR_HAL_STM32_RCC_CR_PLLRDY BIT_(25) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_CR_PLLI2SON BIT_(26) +#define CYGHWR_HAL_STM32_RCC_CR_PLLI2SRDY BIT_(27) +#endif + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLM(__m) VALUE_(0,__m) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLM_MASK MASK_(0,6) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLN(__n) VALUE_(6,__n) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLN_MASK MASK_(6,9) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP(__p) VALUE_(16,((__p)>>1)-1 ) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP_2 VALUE_(16,0) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP_4 VALUE_(16,1) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP_6 VALUE_(16,2) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP_8 VALUE_(16,3) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLSRC_HSI VALUE_(22,0) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLSRC_HSE VALUE_(22,1) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLQ(__q) VALUE_(24,__q) +#define CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLQ_MASK MASK_(24,4) +#endif #define CYGHWR_HAL_STM32_RCC_CFGR_SW_HSI VALUE_(0,0) #define CYGHWR_HAL_STM32_RCC_CFGR_SW_HSE VALUE_(0,1) @@ -163,16 +273,17 @@ #define CYGHWR_HAL_STM32_RCC_CFGR_HPRE_128 VALUE_(4,13) #define CYGHWR_HAL_STM32_RCC_CFGR_HPRE_256 VALUE_(4,14) #define CYGHWR_HAL_STM32_RCC_CFGR_HPRE_512 VALUE_(4,15) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_1 VALUE_(8,0) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_2 VALUE_(8,4) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_4 VALUE_(8,5) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_8 VALUE_(8,6) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_16 VALUE_(8,7) #define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_1 VALUE_(11,0) -#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_2 VALUE_(11,0) -#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_4 VALUE_(11,0) -#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_8 VALUE_(11,0) -#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_16 VALUE_(11,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_2 VALUE_(11,4) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_4 VALUE_(11,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_8 VALUE_(11,6) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_16 VALUE_(11,7) #define CYGHWR_HAL_STM32_RCC_CFGR_ADCPRE_2 VALUE_(14,0) #define CYGHWR_HAL_STM32_RCC_CFGR_ADCPRE_4 VALUE_(14,1) #define CYGHWR_HAL_STM32_RCC_CFGR_ADCPRE_6 VALUE_(14,2) @@ -180,6 +291,7 @@ #define CYGHWR_HAL_STM32_RCC_CFGR_ADCPRE_XXX VALUE_(14,3) #define CYGHWR_HAL_STM32_RCC_CFGR_PLLSRC_HSI 0 #define CYGHWR_HAL_STM32_RCC_CFGR_PLLSRC_HSE BIT_(16) +#define CYGHWR_HAL_STM32_RCC_CFGR_PLLSRC_PREDIV1 BIT_(16) #define CYGHWR_HAL_STM32_RCC_CFGR_PLLXTPRE BIT_(17) #define CYGHWR_HAL_STM32_RCC_CFGR_PLLMUL(__x) VALUE_(18,(__x)-2) #define CYGHWR_HAL_STM32_RCC_CFGR_USBPRE BIT_(22) @@ -188,63 +300,228 @@ #define CYGHWR_HAL_STM32_RCC_CFGR_MCO_HSI VALUE_(24,5) #define CYGHWR_HAL_STM32_RCC_CFGR_MCO_HSE VALUE_(24,6) #define CYGHWR_HAL_STM32_RCC_CFGR_MCO_PLL VALUE_(24,7) - - -#define CYGHWR_HAL_STM32_RCC_AHBENR_DMA1 BIT_(0) -#define CYGHWR_HAL_STM32_RCC_AHBENR_DMA2 BIT_(1) -#define CYGHWR_HAL_STM32_RCC_AHBENR_SRAM BIT_(2) -#define CYGHWR_HAL_STM32_RCC_AHBENR_FLITF BIT_(4) -#define CYGHWR_HAL_STM32_RCC_AHBENR_CRC BIT_(6) -#define CYGHWR_HAL_STM32_RCC_AHBENR_FSMC BIT_(8) -#define CYGHWR_HAL_STM32_RCC_AHBENR_SDIO BIT_(10) +# ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO_PLL2 VALUE_(24,8) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO_PLL3_HALF VALUE_(24,9) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO_XT1 VALUE_(24,10) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO_PLL3 VALUE_(24,11) +#define CYGHWR_HAL_STM32_RCC_CR_PLL2ON BIT_(26) +#define CYGHWR_HAL_STM32_RCC_CR_PLL2RDY BIT_(27) +# endif +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_1 VALUE_(10,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_2 VALUE_(10,4) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_4 VALUE_(10,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_8 VALUE_(10,6) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE1_16 VALUE_(10,7) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_1 VALUE_(13,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_2 VALUE_(13,4) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_4 VALUE_(13,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_8 VALUE_(13,6) +#define CYGHWR_HAL_STM32_RCC_CFGR_PPRE2_16 VALUE_(13,7) +#define CYGHWR_HAL_STM32_RCC_CFGR_RTCPRE(__x) VALUE_(16,__x) +#define CYGHWR_HAL_STM32_RCC_CFGR_RTCPRE_MASK MASK_(16,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1_MASK MASK_(21,2) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1_HSI VALUE_(21,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1_LSE VALUE_(21,1) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1_HSE VALUE_(21,2) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1_PLL VALUE_(21,3) +#define CYGHWR_HAL_STM32_RCC_CFGR_I2SSRC_PLLI2S VALUE_(23,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_I2SSRC_EXT VALUE_(23,1) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_MASK MASK_(24,3) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_1 VALUE_(24,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_2 VALUE_(24,4) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_3 VALUE_(24,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_4 VALUE_(24,6) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO1PRE_5 VALUE_(24,7) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_MASK MASK_(27,3) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_1 VALUE_(27,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_2 VALUE_(27,4) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_3 VALUE_(27,5) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_4 VALUE_(27,6) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2PRE_5 VALUE_(27,7) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2_MASK MASK_(30,2) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2_SYSCLK VALUE_(30,0) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2_PLLI2S VALUE_(30,1) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2_HSE VALUE_(30,2) +#define CYGHWR_HAL_STM32_RCC_CFGR_MCO2_PLL VALUE_(30,3) +#endif -#define CYGHWR_HAL_STM32_RCC_APB2ENR_AFIO BIT_(0) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPA BIT_(2) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPB BIT_(3) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPC BIT_(4) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPD BIT_(5) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPE BIT_(6) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPF BIT_(7) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPG BIT_(8) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC1 BIT_(9) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC2 BIT_(10) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM1 BIT_(11) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_SPI1 BIT_(12) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM8 BIT_(13) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_UART1 BIT_(14) -#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC3 BIT_(15) +#define CYGHWR_HAL_STM32_RCC_AHBENR_DMA1 (0) +#define CYGHWR_HAL_STM32_RCC_AHBENR_DMA2 (1) +#define CYGHWR_HAL_STM32_RCC_AHBENR_SRAM (2) +#define CYGHWR_HAL_STM32_RCC_AHBENR_FLITF (4) +#define CYGHWR_HAL_STM32_RCC_AHBENR_CRC (6) +#define CYGHWR_HAL_STM32_RCC_AHBENR_FSMC (8) +#define CYGHWR_HAL_STM32_RCC_AHBENR_SDIO (10) +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_RCC_AHBENR_OTGFS (12) +#define CYGHWR_HAL_STM32_RCC_AHBENR_ETHMAC (14) +#define CYGHWR_HAL_STM32_RCC_AHBENR_ETHMACTX (15) +#define CYGHWR_HAL_STM32_RCC_AHBENR_ETHMACRX (16) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_RCC_AHBRSTR_OTGFSRST BIT_(12) +#define CYGHWR_HAL_STM32_RCC_AHBRSTR_ETHMACRST BIT_(14) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_AHB1RSTR_ETHMACRST BIT_(25) +#endif +#endif + +// Note that the following are bit numbers, not masks. They should +// either be used with the CYGHWR_HAL_STM32_CLOCK() macro or used to +// shift a 1, perhaps using the BIT_() macro. +// +// Note that in the F2/F4 families, the bit positions in the LP registers are +// the same. + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +#define CYGHWR_HAL_STM32_RCC_APB2ENR_AFIO (0) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPA (2) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPB (3) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPC (4) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPD (5) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPE (6) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPF (7) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_IOPG (8) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC1 (9) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC2 (10) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM1 (11) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_SPI1 (12) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM8 (13) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_UART1 (14) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC3 (15) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM2 BIT_(0) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM3 BIT_(1) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM4 BIT_(2) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM5 BIT_(3) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM6 BIT_(4) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM7 BIT_(5) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_WWDG BIT_(11) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI2 BIT_(14) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI3 BIT_(15) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART2 BIT_(17) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART3 BIT_(18) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART4 BIT_(19) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART5 BIT_(20) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C1 BIT_(21) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C2 BIT_(22) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_USB BIT_(23) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_CAN BIT_(25) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_BKP BIT_(27) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_PWR BIT_(28) -#define CYGHWR_HAL_STM32_RCC_APB1ENR_DAC BIT_(29) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM2 (0) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM3 (1) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM4 (2) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM5 (3) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM6 (4) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM7 (5) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_WWDG (11) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI2 (14) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI3 (15) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART2 (17) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART3 (18) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART4 (19) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART5 (20) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C1 (21) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C2 (22) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_USB (23) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_CAN1 (25) +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_RCC_APB1ENR_CAN2 (26) +#endif +#define CYGHWR_HAL_STM32_RCC_APB1ENR_BKP (27) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_PWR (28) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_DAC (29) + +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_RCC_CFGR2_PREDIV1(__x) VALUE_(0,__x) +#define CYGHWR_HAL_STM32_RCC_CFGR2_PREDIV2(__x) VALUE_(4,__x) +#define CYGHWR_HAL_STM32_RCC_CFGR2_PLL2MUL(__x) VALUE_(8,__x) +#define CYGHWR_HAL_STM32_RCC_CFGR2_PLL3MUL(__x) VALUE_(12,__x) +#define CYGHWR_HAL_STM32_RCC_CFGR2_PREDIV1SRC_HSE 0 +#define CYGHWR_HAL_STM32_RCC_CFGR2_PREDIV1SRC_PLL2 BIT_(16) +#define CYGHWR_HAL_STM32_RCC_CFGR2_I2S2SRC_SYSCLK 0 +#define CYGHWR_HAL_STM32_RCC_CFGR2_I2S2SRC_PLL3 BIT_(17) +#define CYGHWR_HAL_STM32_RCC_CFGR2_I2S3SRC_SYSCLK 0 +#define CYGHWR_HAL_STM32_RCC_CFGR2_I2S3SRC_PLL3 BIT_(18) +#endif + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOA (0) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOB (1) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOC (2) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOD (3) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOE (4) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOF (5) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOG (6) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOH (7) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_GPIOI (8) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_CRC (12) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_BKPSRAM (18) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_CCMDATARAMEN (20) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_DMA1 (21) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_DMA2 (22) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMAC (25) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACTX (26) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACRX (27) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_ETHMACPTP (28) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_OTGHS (29) +#define CYGHWR_HAL_STM32_RCC_AHB1ENR_OTGHSULPI (30) -#define CYGHWR_HAL_STM32_RCC_CSR_LSION BIT_(0) -#define CYGHWR_HAL_STM32_RCC_CSR_LSIRDY BIT_(1) -#define CYGHWR_HAL_STM32_RCC_CSR_RMVF BIT_(24) -#define CYGHWR_HAL_STM32_RCC_CSR_PINRSTF BIT_(26) -#define CYGHWR_HAL_STM32_RCC_CSR_PORRSTF BIT_(27) -#define CYGHWR_HAL_STM32_RCC_CSR_SFTRSTF BIT_(28) -#define CYGHWR_HAL_STM32_RCC_CSR_IWDGRSTF BIT_(29) -#define CYGHWR_HAL_STM32_RCC_CSR_WWDGRSTF BIT_(30) -#define CYGHWR_HAL_STM32_RCC_CSR_LPWRRSTF BIT_(31) +#define CYGHWR_HAL_STM32_RCC_AHB2ENR_DCMI (0) +#define CYGHWR_HAL_STM32_RCC_AHB2ENR_CRYP (4) +#define CYGHWR_HAL_STM32_RCC_AHB2ENR_HASH (5) +#define CYGHWR_HAL_STM32_RCC_AHB2ENR_RNG (6) +#define CYGHWR_HAL_STM32_RCC_AHB2ENR_OTGFS (7) + +#define CYGHWR_HAL_STM32_RCC_AHB3ENR_FSMC (0) + +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM2 (0) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM3 (1) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM4 (2) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM5 (3) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM6 (4) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM7 (5) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM12 (6) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM13 (7) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_TIM14 (8) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_WWDG (11) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI2 (14) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_SPI3 (15) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART2 (17) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART3 (18) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART4 (19) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_UART5 (20) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C1 (21) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C2 (22) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_I2C3 (23) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_CAN1 (25) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_CAN2 (26) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_PWR (28) +#define CYGHWR_HAL_STM32_RCC_APB1ENR_DAC (29) + +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM1 (0) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM8 (1) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_UART1 (4) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_UART6 (5) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC1 (8) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC2 (9) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_ADC3 (10) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_SDIO (11) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_SPI1 (12) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_SYSCFG (14) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM9 (16) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM10 (17) +#define CYGHWR_HAL_STM32_RCC_APB2ENR_TIM11 (18) + +#endif + +// The following encodes the control register and clock bit number +// into a 32 bit descriptor. +#define CYGHWR_HAL_STM32_CLOCK( __reg, __pin ) \ + ((CYGHWR_HAL_STM32_RCC_##__reg##ENR) | \ + ((CYGHWR_HAL_STM32_RCC_##__reg##ENR_##__pin)<<16)) + +// Macros to extract encoded values. +#define CYGHWR_HAL_STM32_CLOCK_REG( __desc ) ((__desc)&0xFF) +#define CYGHWR_HAL_STM32_CLOCK_PIN( __desc ) (((__desc)>>16)&0xFF) + +// Functions and macros to enable/disable clocks. + +__externC void hal_stm32_clock_enable( cyg_uint32 desc ); +__externC void hal_stm32_clock_disable( cyg_uint32 desc ); + +#define CYGHWR_HAL_STM32_CLOCK_ENABLE( __desc ) hal_stm32_clock_enable( __desc ) +#define CYGHWR_HAL_STM32_CLOCK_DISABLE( __desc ) hal_stm32_clock_disable( __desc ) + #define CYGHWR_HAL_STM32_RCC_BDCR_LSEON BIT_(0) #define CYGHWR_HAL_STM32_RCC_BDCR_LSERDY BIT_(1) @@ -257,9 +534,32 @@ #define CYGHWR_HAL_STM32_RCC_BDCR_RTCEN BIT_(15) #define CYGHWR_HAL_STM32_RCC_BDCR_BDRST BIT_(16) +#define CYGHWR_HAL_STM32_RCC_CSR_LSION BIT_(0) +#define CYGHWR_HAL_STM32_RCC_CSR_LSIRDY BIT_(1) +#define CYGHWR_HAL_STM32_RCC_CSR_RMVF BIT_(24) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_RCC_CSR_BORRSTF BIT_(25) +#endif +#define CYGHWR_HAL_STM32_RCC_CSR_PINRSTF BIT_(26) +#define CYGHWR_HAL_STM32_RCC_CSR_PORRSTF BIT_(27) +#define CYGHWR_HAL_STM32_RCC_CSR_SFTRSTF BIT_(28) +#define CYGHWR_HAL_STM32_RCC_CSR_IWDGRSTF BIT_(29) +#define CYGHWR_HAL_STM32_RCC_CSR_WWDGRSTF BIT_(30) +#define CYGHWR_HAL_STM32_RCC_CSR_LPWRRSTF BIT_(31) + + +// Miscellaneous clock control bits + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_CLOCK_BKP CYGHWR_HAL_STM32_CLOCK( APB1, BKP ) +#endif + +#define CYGHWR_HAL_STM32_CLOCK_PWR CYGHWR_HAL_STM32_CLOCK( APB1, PWR ) + //============================================================================= // Realtime Clock +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_RTC_CRH 0x00 #define CYGHWR_HAL_STM32_RTC_CRL 0x04 #define CYGHWR_HAL_STM32_RTC_PRLH 0x08 @@ -286,6 +586,190 @@ #define CYGHWR_HAL_STM32_RTC_CRL_CNF BIT_(4) #define CYGHWR_HAL_STM32_RTC_CRL_RTOFF BIT_(5) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_RTC_TR 0x00 +#define CYGHWR_HAL_STM32_RTC_DR 0x04 +#define CYGHWR_HAL_STM32_RTC_CR 0x08 +#define CYGHWR_HAL_STM32_RTC_ISR 0x0C +#define CYGHWR_HAL_STM32_RTC_PRER 0x10 +#define CYGHWR_HAL_STM32_RTC_WUTR 0x14 +#define CYGHWR_HAL_STM32_RTC_CALIBR 0x18 +#define CYGHWR_HAL_STM32_RTC_ALRMAR 0x1C +#define CYGHWR_HAL_STM32_RTC_ALRMBR 0x20 +#define CYGHWR_HAL_STM32_RTC_WPR 0x24 +#define CYGHWR_HAL_STM32_RTC_TSTR 0x30 +#define CYGHWR_HAL_STM32_RTC_TSDR 0x34 +#define CYGHWR_HAL_STM32_RTC_TAFCR 0x40 +#define CYGHWR_HAL_STM32_RTC_BKxR(_x) (0x50 + 4*(_x)) + +#define CYGHWR_HAL_STM32_RTC_TR_SU MASK_(0,4) +#define CYGHWR_HAL_STM32_RTC_TR_SU_SHIFT 0 +#define CYGHWR_HAL_STM32_RTC_TR_ST MASK_(4,3) +#define CYGHWR_HAL_STM32_RTC_TR_ST_SHIFT 4 +#define CYGHWR_HAL_STM32_RTC_TR_MNU MASK_(8,4) +#define CYGHWR_HAL_STM32_RTC_TR_MNU_SHIFT 8 +#define CYGHWR_HAL_STM32_RTC_TR_MNT MASK_(12,3) +#define CYGHWR_HAL_STM32_RTC_TR_MNT_SHIFT 12 +#define CYGHWR_HAL_STM32_RTC_TR_HU MASK_(16,4) +#define CYGHWR_HAL_STM32_RTC_TR_HU_SHIFT 16 +#define CYGHWR_HAL_STM32_RTC_TR_HT MASK_(20,2) +#define CYGHWR_HAL_STM32_RTC_TR_HT_SHIFT 20 +#define CYGHWR_HAL_STM32_RTC_TR_AM VALUE_(22, 0) +#define CYGHWR_HAL_STM32_RTC_TR_PM VALUE_(22, 1) + +#define CYGHWR_HAL_STM32_RTC_DR_DU MASK_(0,4) +#define CYGHWR_HAL_STM32_RTC_DR_DU_SHIFT 0 +#define CYGHWR_HAL_STM32_RTC_DR_DT MASK_(4,2) +#define CYGHWR_HAL_STM32_RTC_DR_DT_SHIFT 4 +#define CYGHWR_HAL_STM32_RTC_DR_MU MASK_(8,4) +#define CYGHWR_HAL_STM32_RTC_DR_MU_SHIFT 8 +#define CYGHWR_HAL_STM32_RTC_DR_MT BIT_(12) +#define CYGHWR_HAL_STM32_RTC_DR_MT_SHIFT 12 +#define CYGHWR_HAL_STM32_RTC_DR_WDU_MON VALUE_(13,1) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_TUE VALUE_(13,2) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_WED VALUE_(13,3) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_THU VALUE_(13,4) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_FRI VALUE_(13,5) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_SAT VALUE_(13,6) +#define CYGHWR_HAL_STM32_RTC_DR_WDU_SUN VALUE_(13,7) +#define CYGHWR_HAL_STM32_RTC_DR_YU MASK_(16,4) +#define CYGHWR_HAL_STM32_RTC_DR_YU_SHIFT 16 +#define CYGHWR_HAL_STM32_RTC_DR_YT MASK_(20,4) +#define CYGHWR_HAL_STM32_RTC_DR_YT_SHIFT 20 + +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_16 VALUE_(0,0) +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_8 VALUE_(0,1) +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_4 VALUE_(0,2) +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_2 VALUE_(0,3) +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_CK_SPRE VALUE_(0,4) +#define CYGHWR_HAL_STM32_RTC_CR_WUCKSEL_CK_SPRE_PLUS_216 VALUE_(0,6) +#define CYGHWR_HAL_STM32_RTC_CR_TSEDGE BIT_(3) +#define CYGHWR_HAL_STM32_RTC_CR_REFCKON BIT_(4) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_RTC_CR_BYPSHAD BIT_(5) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGHWR_HAL_STM32_RTC_CR_FMT BIT_(6) +#define CYGHWR_HAL_STM32_RTC_CR_DCE BIT_(7) +#define CYGHWR_HAL_STM32_RTC_CR_ALRAE BIT_(8) +#define CYGHWR_HAL_STM32_RTC_CR_ALRBE BIT_(9) +#define CYGHWR_HAL_STM32_RTC_CR_WUTE BIT_(10) +#define CYGHWR_HAL_STM32_RTC_CR_TSE BIT_(11) +#define CYGHWR_HAL_STM32_RTC_CR_ALRAIE BIT_(12) +#define CYGHWR_HAL_STM32_RTC_CR_ALRBIE BIT_(13) +#define CYGHWR_HAL_STM32_RTC_CR_WUTIE BIT_(14) +#define CYGHWR_HAL_STM32_RTC_CR_TSIE BIT_(15) +#define CYGHWR_HAL_STM32_RTC_CR_ADD1H BIT_(16) +#define CYGHWR_HAL_STM32_RTC_CR_SUB1H BIT_(17) +#define CYGHWR_HAL_STM32_RTC_CR_BKP BIT_(18) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_RTC_CR_COSEL BIT_(19) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#define CYGHWR_HAL_STM32_RTC_CR_POL BIT_(20) +#define CYGHWR_HAL_STM32_RTC_CR_OSEL_DISABLE VALUE_(21, 0) +#define CYGHWR_HAL_STM32_RTC_CR_OSEL_ALRAOE VALUE_(21, 1) +#define CYGHWR_HAL_STM32_RTC_CR_OSEL_ALRBOE VALUE_(21, 2) +#define CYGHWR_HAL_STM32_RTC_CR_OSEL_WUOE VALUE_(21, 3) +#define CYGHWR_HAL_STM32_RTC_CR_OSEL_COE BIT_(23) + +#define CYGHWR_HAL_STM32_RTC_ISR_ALRAWF BIT_(0) +#define CYGHWR_HAL_STM32_RTC_ISR_ALRBWF BIT_(1) +#define CYGHWR_HAL_STM32_RTC_ISR_WUTWF BIT_(2) +#define CYGHWR_HAL_STM32_RTC_ISR_INITS BIT_(4) +#define CYGHWR_HAL_STM32_RTC_ISR_RSF BIT_(5) +#define CYGHWR_HAL_STM32_RTC_ISR_INITF BIT_(6) +#define CYGHWR_HAL_STM32_RTC_ISR_INIT BIT_(7) +#define CYGHWR_HAL_STM32_RTC_ISR_ALRAF BIT_(8) +#define CYGHWR_HAL_STM32_RTC_ISR_ALRBF BIT_(9) +#define CYGHWR_HAL_STM32_RTC_ISR_WUTF BIT_(10) +#define CYGHWR_HAL_STM32_RTC_ISR_TSF BIT_(11) +#define CYGHWR_HAL_STM32_RTC_ISR_TSOVF BIT_(12) +#define CYGHWR_HAL_STM32_RTC_ISR_TAMP1F BIT_(13) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +#define CYGHWR_HAL_STM32_RTC_PRER_PREDIV_S MASK_(0,13) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_RTC_ISR_SHPF BIT_(3) +#define CYGHWR_HAL_STM32_RTC_ISR_TAMP2F BIT_(14) +#define CYGHWR_HAL_STM32_RTC_ISR_RECALPF BIT_(16) +#define CYGHWR_HAL_STM32_RTC_PRER_PREDIV_S MASK_(0,15) +#endif +#define CYGHWR_HAL_STM32_RTC_PRER_PREDIV_A MASK_(16,7) + +// RTC_WUTR defines omitted +// RTC_CALIBR defines omitted +// RTC_ALRMAR defines omitted +// RTC_ALRMBR defines omitted + +#define CYGHWR_HAL_STM32_RTC_WPR_KEY MASK_(0,8) +#define CYGHWR_HAL_STM32_RTC_WPR_KEY1 0xCA +#define CYGHWR_HAL_STM32_RTC_WPR_KEY2 0x53 + +// RTC_TSTR defines omitted, but layout identical to RTC_TR +// RTC_TSDR defines omitted, but layout identical to RTC_DR except for omission of year fields +// RTC_TAFCR defines omitted +// No relevant RTC_BKPxR defines. + +// RCC clock is selected within wallclock driver, so no define here. + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + + +//============================================================================= +// System configuration controller - F2 and F4 only + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +// Register offsets +#define CYGHWR_HAL_STM32_SYSCFG_MEMRMP 0x00 +#define CYGHWR_HAL_STM32_SYSCFG_PMC 0x04 +#define CYGHWR_HAL_STM32_SYSCFG_EXTICR1 0x08 +#define CYGHWR_HAL_STM32_SYSCFG_EXTICR2 0x0C +#define CYGHWR_HAL_STM32_SYSCFG_EXTICR3 0x10 +#define CYGHWR_HAL_STM32_SYSCFG_EXTICR4 0x14 +#define CYGHWR_HAL_STM32_SYSCFG_CMPCR 0x20 + +// Register definitions + +#define CYGHWR_HAL_STM32_SYSCFG_MEMRMP_MAINFLASH VALUE_(0,0) +#define CYGHWR_HAL_STM32_SYSCFG_MEMRMP_SYSFLASH VALUE_(0,1) +#define CYGHWR_HAL_STM32_SYSCFG_MEMRMP_FSMC1 VALUE_(0,2) +#define CYGHWR_HAL_STM32_SYSCFG_MEMRMP_SRAM VALUE_(0,3) + +#define CYGHWR_HAL_STM32_SYSCFG_PMC_MII VALUE_(23,0) +#define CYGHWR_HAL_STM32_SYSCFG_PMC_RMII VALUE_(23,1) + +// FIXME: The below EXTI bits should be merged with the F1 defines in +// var_io_pins.h to provide a common interface + +// The following macro allows the four EXTICR registers to be indexed +// as CYGHWR_HAL_STM32_SYSCFG_EXTICR(1) to CYGHWR_HAL_STM32_SYSCFG_EXTICR(4) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICR(__x) (4*((__x)-1)+0x08) + +// The following macros are used to generate the bitfields for setting up +// external interrupts. For example, CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTC(12) +// will generate the bitfield which when ORed into the EXTICR4 register will +// set up C12 as the external interrupt pin for the EXTI12 interrupt. +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTA(__x) VALUE_(4*((__x)&3),0) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTB(__x) VALUE_(4*((__x)&3),1) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTC(__x) VALUE_(4*((__x)&3),2) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTD(__x) VALUE_(4*((__x)&3),3) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTE(__x) VALUE_(4*((__x)&3),4) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTF(__x) VALUE_(4*((__x)&3),5) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTG(__x) VALUE_(4*((__x)&3),6) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_PORTH(__x) VALUE_(4*((__x)&3),7) +#define CYGHWR_HAL_STM32_SYSCFG_EXTICRX_MASK(__x) VALUE_(4*((__x)&3),0xF) + +#define CYGHWR_HAL_STM32_SYSCFG_CMPCR_CMP_DIS VALUE_(0,0) +#define CYGHWR_HAL_STM32_SYSCFG_CMPCR_CMP_ENA VALUE_(0,1) +#define CYGHWR_HAL_STM32_SYSCFG_CMPCR_READY BIT_(8) + +// SYSCFG clock control + +#define CYGHWR_HAL_STM32_SYSCFG_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, SYSCFG ) + +#endif // if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + + //============================================================================= // External interrupt controller @@ -299,162 +783,44 @@ #define CYGHWR_HAL_STM32_EXTI_BIT(__b) BIT_(__b) //============================================================================= -// GPIO ports - -#define CYGHWR_HAL_STM32_GPIO_CRL 0x00 -#define CYGHWR_HAL_STM32_GPIO_CRH 0x04 -#define CYGHWR_HAL_STM32_GPIO_IDR 0x08 -#define CYGHWR_HAL_STM32_GPIO_ODR 0x0C -#define CYGHWR_HAL_STM32_GPIO_BSRR 0x10 -#define CYGHWR_HAL_STM32_GPIO_BRR 0x14 -#define CYGHWR_HAL_STM32_GPIO_LCKR 0x18 - -#define CYGHWR_HAL_STM32_GPIO_MODE_IN VALUE_(0,0) // Input mode -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ VALUE_(0,1) // Output mode, max 10MHz -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ VALUE_(0,2) // Output mode, max 2MHz -#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ VALUE_(0,3) // Output mode, max 50MHz - -#define CYGHWR_HAL_STM32_GPIO_CNF_AIN VALUE_(2,0) // Analog input -#define CYGHWR_HAL_STM32_GPIO_CNF_FIN VALUE_(2,1) // Floating input -#define CYGHWR_HAL_STM32_GPIO_CNF_PULL VALUE_(2,2) // Input with pull up/down -#define CYGHWR_HAL_STM32_GPIO_CNF_RESV VALUE_(2,3) // Reserved - -#define CYGHWR_HAL_STM32_GPIO_CNF_GPOPP VALUE_(2,0) // GP output push/pull -#define CYGHWR_HAL_STM32_GPIO_CNF_GPOOD VALUE_(2,1) // GP output open drain -#define CYGHWR_HAL_STM32_GPIO_CNF_AOPP VALUE_(2,2) // Alt output push/pull -#define CYGHWR_HAL_STM32_GPIO_CNF_AOOD VALUE_(2,3) // Alt output open drain - - -// Alternative, more readable, config names -// Inputs -#define CYGHWR_HAL_STM32_GPIO_CNF_ANALOG CYGHWR_HAL_STM32_GPIO_CNF_AIN -#define CYGHWR_HAL_STM32_GPIO_CNF_FLOATING CYGHWR_HAL_STM32_GPIO_CNF_FIN -#define CYGHWR_HAL_STM32_GPIO_CNF_PULLDOWN (CYGHWR_HAL_STM32_GPIO_CNF_PULL) -#define CYGHWR_HAL_STM32_GPIO_CNF_PULLUP (CYGHWR_HAL_STM32_GPIO_CNF_PULL|CYGHWR_HAL_STM32_GPIO_PULLUP) -// Outputs -#define CYGHWR_HAL_STM32_GPIO_CNF_OUT_OPENDRAIN CYGHWR_HAL_STM32_GPIO_CNF_GPOOD -#define CYGHWR_HAL_STM32_GPIO_CNF_OUT_PUSHPULL CYGHWR_HAL_STM32_GPIO_CNF_GPOPP -#define CYGHWR_HAL_STM32_GPIO_CNF_ALT_OPENDRAIN CYGHWR_HAL_STM32_GPIO_CNF_AOOD -#define CYGHWR_HAL_STM32_GPIO_CNF_ALT_PUSHPULL CYGHWR_HAL_STM32_GPIO_CNF_AOPP - - -// This macro packs the port number, bit number, mode and -// configuration for a GPIO pin into a single word. The packing puts -// the mode and config in the ls 5 bits, the bit number in 16:20 and -// the offset of the GPIO port from GPIOA in bits 8:15. The port, mode -// and config are only specified using the last component of the names -// to keep definitions short. - -#define CYGHWR_HAL_STM32_GPIO(__port, __bit, __mode, __cnf ) \ - ((CYGHWR_HAL_STM32_GPIO##__port - CYGHWR_HAL_STM32_GPIOA) | \ - (__bit<<16) | \ - (CYGHWR_HAL_STM32_GPIO_MODE_##__mode) | \ - (CYGHWR_HAL_STM32_GPIO_CNF_##__cnf)) - -// Macros to extract encoded values -#define CYGHWR_HAL_STM32_GPIO_PORT(__pin) (CYGHWR_HAL_STM32_GPIOA+((__pin)&0x0000FF00)) -#define CYGHWR_HAL_STM32_GPIO_BIT(__pin) (((__pin)>>16)&0x1F) -#define CYGHWR_HAL_STM32_GPIO_CFG(__pin) ((__pin)&0xF) -#define CYGHWR_HAL_STM32_GPIO_PULLUP BIT_(4) - - -#define CYGHWR_HAL_STM32_GPIO_NONE (0xFFFFFFFF) - -// Functions and macros to configure GPIO ports. - -__externC void hal_stm32_gpio_set( cyg_uint32 pin ); -__externC void hal_stm32_gpio_out( cyg_uint32 pin, int val ); -__externC void hal_stm32_gpio_in ( cyg_uint32 pin, int *val ); - -#define CYGHWR_HAL_STM32_GPIO_SET(__pin ) hal_stm32_gpio_set( __pin ) -#define CYGHWR_HAL_STM32_GPIO_OUT(__pin, __val ) hal_stm32_gpio_out( __pin, __val ) -#define CYGHWR_HAL_STM32_GPIO_IN(__pin, __val ) hal_stm32_gpio_in( __pin, __val ) - -//============================================================================= -// Alternate I/O configuration registers. - -#define CYGHWR_HAL_STM32_AFIO_EVCR 0x00 -#define CYGHWR_HAL_STM32_AFIO_MAPR 0x04 -#define CYGHWR_HAL_STM32_AFIO_EXTICR1 0x08 -#define CYGHWR_HAL_STM32_AFIO_EXTICR2 0x0C -#define CYGHWR_HAL_STM32_AFIO_EXTICR3 0x10 -#define CYGHWR_HAL_STM32_AFIO_EXTICR4 0x14 - -// The following macro allows the four ETXICR registers to be indexed -// as CYGHWR_HAL_STM32_AFIO_EXTICR(1) to CYGHWR_HAL_STM32_AFIO_EXTICR(4) -#define CYGHWR_HAL_STM32_AFIO_EXTICR(__x) (4*((__x)-1)+0x08) - -#define CYGHWR_HAL_STM32_AFIO_EVCR_PIN(__x) VALUE_(0,(__x)) -#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTA VALUE_(4,0) -#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTB VALUE_(4,1) -#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTC VALUE_(4,2) -#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTD VALUE_(4,3) -#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTE VALUE_(4,4) -#define CYGHWR_HAL_STM32_AFIO_EVCR_EVOE BIT_(7) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_SPI1_RMP BIT_(0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_I2C1_RMP BIT_(1) -#define CYGHWR_HAL_STM32_AFIO_MAPR_URT1_RMP BIT_(2) -#define CYGHWR_HAL_STM32_AFIO_MAPR_URT2_RMP BIT_(3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_NO_RMP VALUE_(4,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_P1_RMP VALUE_(4,1) -#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_FL_RMP VALUE_(4,3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_NO_RMP VALUE_(6,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_P1_RMP VALUE_(6,1) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_FL_RMP VALUE_(6,3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_NO_RMP VALUE_(8,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_P1_RMP VALUE_(8,1) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_P2_RMP VALUE_(8,2) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_FL_RMP VALUE_(8,3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_NO_RMP VALUE_(10,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_P2_RMP VALUE_(10,2) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_FL_RMP VALUE_(10,3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM4_RMP BIT_(12) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_NO_RMP VALUE_(13,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_FL1_RMP VALUE_(13,2) -#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_FL2_RMP VALUE_(13,3) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_PD01_RMP BIT_(15) -#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM5CH4_RMP BIT_(16) -#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC1EINJ_RMP BIT_(17) -#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC1EREG_RMP BIT_(18) -#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC2EINJ_RMP BIT_(19) -#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC2EREG_RMP BIT_(20) - -#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_FULL VALUE_(24,0) -#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_NORST VALUE_(24,1) -#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_SWDPEN VALUE_(24,2) -#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_SWDPDIS VALUE_(24,4) -#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_MASK VALUE_(24,7) - -// The following macros are used to generate the bitfields for setting up -// external interrupts. For example, CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTC(12) -// will generate the bitfield which when ORed into the EXTICR4 register will -// set up C12 as the external interrupt pin for the EXTI12 interrupt. -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTA(__x) VALUE_(4*((__x)&3),0) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTB(__x) VALUE_(4*((__x)&3),1) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTC(__x) VALUE_(4*((__x)&3),2) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTD(__x) VALUE_(4*((__x)&3),3) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTE(__x) VALUE_(4*((__x)&3),4) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTF(__x) VALUE_(4*((__x)&3),5) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTG(__x) VALUE_(4*((__x)&3),6) -#define CYGHWR_HAL_STM32_AFIO_EXTICRX_MASK(__x) VALUE_(4*((__x)&3),0xF) +// GPIO ports and pin configuration. Include separate header file for this +// to avoid this header getting unmanageable. +#include //============================================================================= // DMA controller register definitions. +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + #define CYGHWR_HAL_STM32_DMA_ISR 0x00 #define CYGHWR_HAL_STM32_DMA_IFCR 0x04 +#define CYGHWR_HAL_STM32_DMA_ISR_REG(__chan) CYGHWR_HAL_STM32_DMA_ISR +#define CYGHWR_HAL_STM32_DMA_IFCR_REG(__chan) CYGHWR_HAL_STM32_DMA_IFCR + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_DMA_LISR 0x00 +#define CYGHWR_HAL_STM32_DMA_HISR 0x04 +#define CYGHWR_HAL_STM32_DMA_LIFCR 0x08 +#define CYGHWR_HAL_STM32_DMA_HIFCR 0x0C + +#define CYGHWR_HAL_STM32_DMA_ISR_REG(__stream) ((__stream)>3 ? \ + CYGHWR_HAL_STM32_DMA_HISR : \ + CYGHWR_HAL_STM32_DMA_LISR) +#define CYGHWR_HAL_STM32_DMA_IFCR_REG(__stream) ((__stream)>3 ? \ + CYGHWR_HAL_STM32_DMA_HIFCR : \ + CYGHWR_HAL_STM32_DMA_LIFCR) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + + // The following macros allow access to the per-channel DMA registers, indexed -// by channel number. Valid channel numbers are 1 to 7 for DMA1 and 1 to 5 -// for DMA2. +// by channel number. For F1 parts there is no concept of a stream - each entry +// has a fixed relationship to the corresponding channel. +// Valid channel/stream numbers are 1 to 7 for DMA1 and 1 to 5 for DMA2 on F1 +// parts, 1 to 7 for DMA2 streams on F2/F4 parts. +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_DMA_CCR(__x) (0x14*(__x)-0x0C) #define CYGHWR_HAL_STM32_DMA_CNDTR(__x) (0x14*(__x)-0x08) #define CYGHWR_HAL_STM32_DMA_CPAR(__x) (0x14*(__x)-0x04) @@ -471,6 +837,51 @@ #define CYGHWR_HAL_STM32_DMA_IFCR_CHTIF(__x) BIT_(4*(__x)-2) #define CYGHWR_HAL_STM32_DMA_IFCR_CTEIF(__x) BIT_(4*(__x)-1) #define CYGHWR_HAL_STM32_DMA_IFCR_MASK(__x) VALUE_(4*(__x)-4,0xF) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_DMA_SCR(__x) (0x18*(__x)+0x10) +#define CYGHWR_HAL_STM32_DMA_SNDTR(__x) (0x18*(__x)+0x14) +#define CYGHWR_HAL_STM32_DMA_SPAR(__x) (0x18*(__x)+0x18) +#define CYGHWR_HAL_STM32_DMA_SM0AR(__x) (0x18*(__x)+0x1C) +#define CYGHWR_HAL_STM32_DMA_SM1AR(__x) (0x18*(__x)+0x20) +#define CYGHWR_HAL_STM32_DMA_SFCR(__x) (0x18*(__x)+0x24) + +// For now at least we implement an identity mapping between +// streams and channels. +#define CYGHWR_HAL_STM32_DMA_CCR(__x) CYGHWR_HAL_STM32_DMA_SCR(__x) +#define CYGHWR_HAL_STM32_DMA_CNDTR(__x) CYGHWR_HAL_STM32_DMA_SNDTR(__x) +#define CYGHWR_HAL_STM32_DMA_CPAR(__x) CYGHWR_HAL_STM32_DMA_SPAR(__x) +#define CYGHWR_HAL_STM32_DMA_CMAR(__x) CYGHWR_HAL_STM32_DMA_SM0AR(__x) +#define CYGHWR_HAL_STM32_DMA_CM0AR(__x) CYGHWR_HAL_STM32_DMA_SM0AR(__x) +#define CYGHWR_HAL_STM32_DMA_CM1AR(__x) CYGHWR_HAL_STM32_DMA_SM1AR(__x) + +// This selects which region of an isr register to use for a stream +#define CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) ( ((__x)&0x3) == 3 ? 22 : \ + ((__x)&0x3) == 2 ? 16 : \ + ((__x)&0x3) == 1 ? 6 : 0 ) + +#define CYGHWR_HAL_STM32_DMA_ISR_FEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) ) +#define CYGHWR_HAL_STM32_DMA_ISR_DMEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) + 2 ) +#define CYGHWR_HAL_STM32_DMA_ISR_TEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) + 3 ) +#define CYGHWR_HAL_STM32_DMA_ISR_HTIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) + 4 ) +#define CYGHWR_HAL_STM32_DMA_ISR_TCIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) + 5 ) + +#define CYGHWR_HAL_STM32_DMA_ISR_MASK(__x) VALUE_( CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x), 0x3f ) + +// This selects which region of an ifcr register to use for a stream. +// Happens to be laid out the same as the isr, so reuse. +#define CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) CYGHWR_HAL_STM32_DMA_ISR_SHIFT(__x) + +#define CYGHWR_HAL_STM32_DMA_IFCR_CFEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) ) +#define CYGHWR_HAL_STM32_DMA_IFCR_CDMEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) + 2 ) +#define CYGHWR_HAL_STM32_DMA_IFCR_CTEIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) + 3 ) +#define CYGHWR_HAL_STM32_DMA_IFCR_CHTIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) + 4 ) +#define CYGHWR_HAL_STM32_DMA_IFCR_CTCIF(__x) BIT_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x) + 5 ) +#define CYGHWR_HAL_STM32_DMA_IFCR_MASK(__x) VALUE_( CYGHWR_HAL_STM32_DMA_IFCR_SHIFT(__x), 0x3f ) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_DMA_CCR_EN BIT_(0) #define CYGHWR_HAL_STM32_DMA_CCR_TCIE BIT_(1) @@ -486,126 +897,86 @@ #define CYGHWR_HAL_STM32_DMA_CCR_MSIZE8 VALUE_(10,0) #define CYGHWR_HAL_STM32_DMA_CCR_MSIZE16 VALUE_(10,1) #define CYGHWR_HAL_STM32_DMA_CCR_MSIZE32 VALUE_(10,2) +#define CYGHWR_HAL_STM32_DMA_CCR_PL(__x) VALUE_(12,__x) #define CYGHWR_HAL_STM32_DMA_CCR_PLLOW VALUE_(12,0) #define CYGHWR_HAL_STM32_DMA_CCR_PLMEDIUM VALUE_(12,1) #define CYGHWR_HAL_STM32_DMA_CCR_PLHIGH VALUE_(12,2) #define CYGHWR_HAL_STM32_DMA_CCR_PLMAX VALUE_(12,3) #define CYGHWR_HAL_STM32_DMA_CCR_MEM2MEM BIT_(14) +// F2/F4 compatibility combinations to control transfer source/dest +#define CYGHWR_HAL_STM32_DMA_CCR_P2MEM 0 +#define CYGHWR_HAL_STM32_DMA_CCR_MEM2P CYGHWR_HAL_STM32_DMA_CCR_DIR + +// Clock enable bits + +#define CYGHWR_HAL_STM32_DMA1_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB, DMA1 ) +#define CYGHWR_HAL_STM32_DMA2_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB, DMA2 ) + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_DMA_CCR_EN BIT_(0) +#define CYGHWR_HAL_STM32_DMA_CCR_DMEIE BIT_(1) +#define CYGHWR_HAL_STM32_DMA_CCR_TEIE BIT_(2) +#define CYGHWR_HAL_STM32_DMA_CCR_HTIE BIT_(3) +#define CYGHWR_HAL_STM32_DMA_CCR_TCIE BIT_(4) +#define CYGHWR_HAL_STM32_DMA_CCR_PFCTRL BIT_(5) +#define CYGHWR_HAL_STM32_DMA_CCR_P2MEM VALUE_(6,0) +#define CYGHWR_HAL_STM32_DMA_CCR_MEM2P VALUE_(6,1) +#define CYGHWR_HAL_STM32_DMA_CCR_MEM2MEM VALUE_(6,2) + +#define CYGHWR_HAL_STM32_DMA_CCR_CIRC BIT_(8) +#define CYGHWR_HAL_STM32_DMA_CCR_PINC BIT_(9) +#define CYGHWR_HAL_STM32_DMA_CCR_MINC BIT_(10) +#define CYGHWR_HAL_STM32_DMA_CCR_PSIZE8 VALUE_(11,0) +#define CYGHWR_HAL_STM32_DMA_CCR_PSIZE16 VALUE_(11,1) +#define CYGHWR_HAL_STM32_DMA_CCR_PSIZE32 VALUE_(11,2) +#define CYGHWR_HAL_STM32_DMA_CCR_MSIZE8 VALUE_(13,0) +#define CYGHWR_HAL_STM32_DMA_CCR_MSIZE16 VALUE_(13,1) +#define CYGHWR_HAL_STM32_DMA_CCR_MSIZE32 VALUE_(13,2) +#define CYGHWR_HAL_STM32_DMA_CCR_PINCOS BIT_(15) +#define CYGHWR_HAL_STM32_DMA_CCR_PL(__x) VALUE_(16,__x) +#define CYGHWR_HAL_STM32_DMA_CCR_PLLOW VALUE_(16,0) +#define CYGHWR_HAL_STM32_DMA_CCR_PLMEDIUM VALUE_(16,1) +#define CYGHWR_HAL_STM32_DMA_CCR_PLHIGH VALUE_(16,2) +#define CYGHWR_HAL_STM32_DMA_CCR_PLMAX VALUE_(16,3) +#define CYGHWR_HAL_STM32_DMA_CCR_DBM BIT_(18) +#define CYGHWR_HAL_STM32_DMA_CCR_CT BIT_(19) +#define CYGHWR_HAL_STM32_DMA_CCR_PBURST1 VALUE_(21,0) +#define CYGHWR_HAL_STM32_DMA_CCR_PBURST4 VALUE_(21,1) +#define CYGHWR_HAL_STM32_DMA_CCR_PBURST8 VALUE_(21,2) +#define CYGHWR_HAL_STM32_DMA_CCR_PBURST16 VALUE_(21,3) +#define CYGHWR_HAL_STM32_DMA_CCR_MBURST1 VALUE_(23,0) +#define CYGHWR_HAL_STM32_DMA_CCR_MBURST4 VALUE_(23,1) +#define CYGHWR_HAL_STM32_DMA_CCR_MBURST8 VALUE_(23,2) +#define CYGHWR_HAL_STM32_DMA_CCR_MBURST16 VALUE_(23,3) +#define CYGHWR_HAL_STM32_DMA_CCR_CHSEL(__x) VALUE_(25,__x) + +#define CYGHWR_HAL_STM32_DMA_FCR_FTH_QUARTER VALUE_(0,0) // FIFO threshold selection +#define CYGHWR_HAL_STM32_DMA_FCR_FTH_HALF VALUE_(0,1) +#define CYGHWR_HAL_STM32_DMA_FCR_FTH_3QUARTER VALUE_(0,2) +#define CYGHWR_HAL_STM32_DMA_FCR_FTH_FULL VALUE_(0,3) +#define CYGHWR_HAL_STM32_DMA_FCR_DMDIS BIT_(2) +#define CYGHWR_HAL_STM32_DMA_FCR_FS_LTQUARTER VALUE_(3,0) // LT==less than +#define CYGHWR_HAL_STM32_DMA_FCR_FS_LTHALF VALUE_(3,1) +#define CYGHWR_HAL_STM32_DMA_FCR_FS_LT3QUARTER VALUE_(3,2) +#define CYGHWR_HAL_STM32_DMA_FCR_FS_LTFULL VALUE_(3,3) +#define CYGHWR_HAL_STM32_DMA_FCR_FS_EMPTY VALUE_(3,4) +#define CYGHWR_HAL_STM32_DMA_FCR_FS_FULL VALUE_(3,5) +#define CYGHWR_HAL_STM32_DMA_FCR_FEIE BIT_(7) + +// Clock enable bits + +#define CYGHWR_HAL_STM32_DMA1_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB1, DMA1 ) +#define CYGHWR_HAL_STM32_DMA2_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB1, DMA2 ) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + //============================================================================= // UARTs - -#define CYGHWR_HAL_STM32_UART_SR 0x00 -#define CYGHWR_HAL_STM32_UART_DR 0x04 -#define CYGHWR_HAL_STM32_UART_BRR 0x08 -#define CYGHWR_HAL_STM32_UART_CR1 0x0C -#define CYGHWR_HAL_STM32_UART_CR2 0x10 -#define CYGHWR_HAL_STM32_UART_CR3 0x14 -#define CYGHWR_HAL_STM32_UART_GTPR 0x18 - -// SR Bits - -#define CYGHWR_HAL_STM32_UART_SR_PE BIT_(0) -#define CYGHWR_HAL_STM32_UART_SR_FE BIT_(1) -#define CYGHWR_HAL_STM32_UART_SR_NE BIT_(2) -#define CYGHWR_HAL_STM32_UART_SR_ORE BIT_(3) -#define CYGHWR_HAL_STM32_UART_SR_IDLE BIT_(4) -#define CYGHWR_HAL_STM32_UART_SR_RXNE BIT_(5) -#define CYGHWR_HAL_STM32_UART_SR_TC BIT_(6) -#define CYGHWR_HAL_STM32_UART_SR_TXE BIT_(7) -#define CYGHWR_HAL_STM32_UART_SR_LBD BIT_(8) -#define CYGHWR_HAL_STM32_UART_SR_CTS BIT_(9) - -// BRR bits - -#define CYGHWR_HAL_STM32_UART_DR_DIVF(__f) VALUE_(0,__f) -#define CYGHWR_HAL_STM32_UART_DR_DIVM(__m) VALUE_(4,__m) - -// CR1 bits - -#define CYGHWR_HAL_STM32_UART_CR1_SBK BIT_(0) -#define CYGHWR_HAL_STM32_UART_CR1_RWU BIT_(1) -#define CYGHWR_HAL_STM32_UART_CR1_RE BIT_(2) -#define CYGHWR_HAL_STM32_UART_CR1_TE BIT_(3) -#define CYGHWR_HAL_STM32_UART_CR1_IDLEIE BIT_(4) -#define CYGHWR_HAL_STM32_UART_CR1_RXNEIE BIT_(5) -#define CYGHWR_HAL_STM32_UART_CR1_TCIE BIT_(6) -#define CYGHWR_HAL_STM32_UART_CR1_TXEIE BIT_(7) -#define CYGHWR_HAL_STM32_UART_CR1_PEIE BIT_(8) -#define CYGHWR_HAL_STM32_UART_CR1_PS_EVEN 0 -#define CYGHWR_HAL_STM32_UART_CR1_PS_ODD BIT_(9) -#define CYGHWR_HAL_STM32_UART_CR1_PCE BIT_(10) -#define CYGHWR_HAL_STM32_UART_CR1_WAKE BIT_(11) -#define CYGHWR_HAL_STM32_UART_CR1_M_8 0 -#define CYGHWR_HAL_STM32_UART_CR1_M_9 BIT_(12) -#define CYGHWR_HAL_STM32_UART_CR1_UE BIT_(13) - -// CR2 bits +// Include separate header file for this to avoid this header getting unmanageable. -#define CYGHWR_HAL_STM32_UART_CR2_ADD(__a) VALUE_(0,__a) -#define CYGHWR_HAL_STM32_UART_CR2_LBDL BIT_(5) -#define CYGHWR_HAL_STM32_UART_CR2_LBDIE BIT_(6) -#define CYGHWR_HAL_STM32_UART_CR2_LBCL BIT_(8) -#define CYGHWR_HAL_STM32_UART_CR2_CPHA BIT_(9) -#define CYGHWR_HAL_STM32_UART_CR2_CPOL BIT_(10) -#define CYGHWR_HAL_STM32_UART_CR2_CLKEN BIT_(11) -#define CYGHWR_HAL_STM32_UART_CR2_STOP_1 VALUE_(12,0) -#define CYGHWR_HAL_STM32_UART_CR2_STOP_0_5 VALUE_(12,1) -#define CYGHWR_HAL_STM32_UART_CR2_STOP_2 VALUE_(12,2) -#define CYGHWR_HAL_STM32_UART_CR2_STOP_1_5 VALUE_(12,3) -#define CYGHWR_HAL_STM32_UART_CR2_LINEN BIT_(14) - -// CR3 bits - -#define CYGHWR_HAL_STM32_UART_CR3_EIE BIT_(0) -#define CYGHWR_HAL_STM32_UART_CR3_IREN BIT_(1) -#define CYGHWR_HAL_STM32_UART_CR3_IRLP BIT_(2) -#define CYGHWR_HAL_STM32_UART_CR3_HDSEL BIT_(3) -#define CYGHWR_HAL_STM32_UART_CR3_NACK BIT_(4) -#define CYGHWR_HAL_STM32_UART_CR3_SCEN BIT_(5) -#define CYGHWR_HAL_STM32_UART_CR3_DMAR BIT_(6) -#define CYGHWR_HAL_STM32_UART_CR3_DMAT BIT_(7) -#define CYGHWR_HAL_STM32_UART_CR3_RTSE BIT_(8) -#define CYGHWR_HAL_STM32_UART_CR3_CTSE BIT_(9) -#define CYGHWR_HAL_STM32_UART_CR3_CTSIE BIT_(10) - -// GTPR fields - -#define CYGHWR_HAL_STM32_UART_GTPR_PSC(__p) VALUE_(0,__p) -#define CYGHWR_HAL_STM32_UART_GTPR_GT(__g) VALUE_(8,__g) - -// UART GPIO pins - -#define CYGHWR_HAL_STM32_UART1_RX CYGHWR_HAL_STM32_GPIO( A, 10, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART1_TX CYGHWR_HAL_STM32_GPIO( A, 9, OUT_50MHZ , ALT_PUSHPULL ) -#define CYGHWR_HAL_STM32_UART1_CTS CYGHWR_HAL_STM32_GPIO( A, 11, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART1_RTS CYGHWR_HAL_STM32_GPIO( A, 12, OUT_50MHZ , OUT_PUSHPULL ) - -#define CYGHWR_HAL_STM32_UART2_RX CYGHWR_HAL_STM32_GPIO( A, 3, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART2_TX CYGHWR_HAL_STM32_GPIO( A, 2, OUT_50MHZ , ALT_PUSHPULL ) -#define CYGHWR_HAL_STM32_UART2_CTS CYGHWR_HAL_STM32_GPIO( A, 0, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART2_RTS CYGHWR_HAL_STM32_GPIO( A, 1, OUT_50MHZ , OUT_PUSHPULL ) - -#define CYGHWR_HAL_STM32_UART3_RX CYGHWR_HAL_STM32_GPIO( B, 11, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART3_TX CYGHWR_HAL_STM32_GPIO( B, 10, OUT_50MHZ , ALT_PUSHPULL ) -#define CYGHWR_HAL_STM32_UART3_CTS CYGHWR_HAL_STM32_GPIO( B, 13, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART3_RTS CYGHWR_HAL_STM32_GPIO( B, 14, OUT_50MHZ , OUT_PUSHPULL ) - -#define CYGHWR_HAL_STM32_UART4_RX CYGHWR_HAL_STM32_GPIO( C, 11, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART4_TX CYGHWR_HAL_STM32_GPIO( C, 10, OUT_50MHZ , ALT_PUSHPULL ) -#define CYGHWR_HAL_STM32_UART4_CTS CYGHWR_HAL_STM32_GPIO_NONE -#define CYGHWR_HAL_STM32_UART4_RTS CYGHWR_HAL_STM32_GPIO_NONE - -#define CYGHWR_HAL_STM32_UART5_RX CYGHWR_HAL_STM32_GPIO( C, 2, IN , FLOATING ) -#define CYGHWR_HAL_STM32_UART5_TX CYGHWR_HAL_STM32_GPIO( C, 12, OUT_50MHZ , ALT_PUSHPULL ) -#define CYGHWR_HAL_STM32_UART5_CTS CYGHWR_HAL_STM32_GPIO_NONE -#define CYGHWR_HAL_STM32_UART5_RTS CYGHWR_HAL_STM32_GPIO_NONE - -#ifndef __ASSEMBLER__ - -__externC void hal_stm32_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud ); - -#endif +#include //============================================================================= // ADCs @@ -645,18 +1016,33 @@ #define CYGHWR_HAL_STM32_ADC_CR1_DISCEN BIT_(11) #define CYGHWR_HAL_STM32_ADC_CR1_JDISCEN BIT_(12) #define CYGHWR_HAL_STM32_ADC_CR1_DISCNUM(__x) VALUE_(13,(__x)) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_ADC_CR1_DUALMODE(__x) VALUE_(16,(__x)) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 #define CYGHWR_HAL_STM32_ADC_CR1_JAWDEN BIT_(22) #define CYGHWR_HAL_STM32_ADC_CR1_AWDEN BIT_(23) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC_CR1_OVRIE BIT_(26) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + + // CR2 fields #define CYGHWR_HAL_STM32_ADC_CR2_ADON BIT_(0) #define CYGHWR_HAL_STM32_ADC_CR2_CONT BIT_(1) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_ADC_CR2_CAL BIT_(2) #define CYGHWR_HAL_STM32_ADC_CR2_RSTCAL BIT_(3) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 #define CYGHWR_HAL_STM32_ADC_CR2_DMA BIT_(8) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC_CR2_DDS BIT_(9) +#define CYGHWR_HAL_STM32_ADC_CR2_EOCS BIT_(10) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + #define CYGHWR_HAL_STM32_ADC_CR2_ALIGN BIT_(11) +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_ADC_CR2_JEXTSEL(__x) VALUE_(12,(__x)) #define CYGHWR_HAL_STM32_ADC_CR2_JEXTTRIG BIT_(15) #define CYGHWR_HAL_STM32_ADC_CR2_EXTSEL(__x) VALUE_(17,(__x)) @@ -664,9 +1050,74 @@ #define CYGHWR_HAL_STM32_ADC_CR2_JSWSTART BIT_(21) #define CYGHWR_HAL_STM32_ADC_CR2_SWSTART BIT_(22) #define CYGHWR_HAL_STM32_ADC_CR2_TSVREFE BIT_(23) +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC_CR2_JEXTSEL(__x) VALUE_(16,(__x)) +#define CYGHWR_HAL_STM32_ADC_CR2_JEXTEN(__x) VALUE_(20,(__x)) +#define CYGHWR_HAL_STM32_ADC_CR2_JSWSTART BIT_(22) +#define CYGHWR_HAL_STM32_ADC_CR2_EXTSEL(__x) VALUE_(24,(__x)) +#define CYGHWR_HAL_STM32_ADC_CR2_EXTEN(__x) VALUE_(28,(__x)) +#define CYGHWR_HAL_STM32_ADC_CR2_SWSTART BIT_(30) +#endif + +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +// On F1 devices ADC1 and ADC3 have different external event sets for regular groups +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM1_CC1 (0) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM1_CC2 (1) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM1_CC3 (2) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM2_CC2 (3) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM3_TRGO (4) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM4_CC4 (5) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_TIM8_TRGO (6) // For high- and XL-density devices +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC1_SWSTART (7) + +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM3_CC1 (0) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM2_CC3 (1) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM1_CC3 (2) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM8_CC1 (3) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM8_TRGO (4) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM5_CC1 (5) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_TIM5_CC3 (6) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_ADC3_SWSTART (7) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM1_CC1 (0) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM1_CC2 (1) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM1_CC3 (2) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM2_CC2 (3) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM2_CC3 (4) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM2_CC4 (5) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM2_TRGO (6) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM3_CC1 (7) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM3_TRGO (8) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM4_CC4 (9) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM5_CC1 (10) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM5_CC2 (11) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM5_CC3 (12) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM8_CC1 (13) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_TIM8_TRGO (14) +#define CYGHWR_HAL_STM32_ADC_EXTSEL_EXTI (15) // line 11 + +#define CYGHWR_HAL_STM32_ADC_EXTEN_DISABLED (0) +#define CYGHWR_HAL_STM32_ADC_EXTEN_EDGE_RISE (1) +#define CYGHWR_HAL_STM32_ADC_EXTEN_EDGE_FALL (2) +#define CYGHWR_HAL_STM32_ADC_EXTEN_EDGE_BOTH (3) + +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE // SMPRx fields +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +// F1 : SMPR1 17..10 : SMPR2 9..0 +#define CYGHWR_HAL_STM32_ADC_SMPR1_NUM_CHANNELS (8) +#define CYGHWR_HAL_STM32_ADC_SMPR2_NUM_CHANNELS (10) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +// F2/F4 : SMPR1 18..10 : SMPR2 9..0 +#define CYGHWR_HAL_STM32_ADC_SMPR1_NUM_CHANNELS (9) +#define CYGHWR_HAL_STM32_ADC_SMPR2_NUM_CHANNELS (10) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + #define CYGHWR_HAL_STM32_ADC_SMPRx_SMP(__x, __y) VALUE_((__x) * 3, (__y)) // SQRx fields @@ -680,32 +1131,52 @@ // ADC GPIO pins -#define CYGHWR_HAL_STM32_ADC123_IN0 CYGHWR_HAL_STM32_GPIO( A, 0, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN1 CYGHWR_HAL_STM32_GPIO( A, 1, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN2 CYGHWR_HAL_STM32_GPIO( A, 2, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN3 CYGHWR_HAL_STM32_GPIO( A, 3, IN, ANALOG ) +// F1/F2/F4 GPIO inputs have 16 channels (0..15). +// ADC1 has extra internal sources, which for F1 and HIPERFORMANCE (F2/F4) +// devices respectively have 18 (0..17) and 19 (0..18) available sources. + +// Internal (non-GPIO) channels (ADC1 only): +// - ADC1_IN16 temperature F1/F2/F4 +// - ADC1_IN17 Vrefint F1/F2/F4 +// - ADC1_IN18 Vbat F2/F4 -#define CYGHWR_HAL_STM32_ADC12_IN4 CYGHWR_HAL_STM32_GPIO( A, 4, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC12_IN5 CYGHWR_HAL_STM32_GPIO( A, 5, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC12_IN6 CYGHWR_HAL_STM32_GPIO( A, 6, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC12_IN7 CYGHWR_HAL_STM32_GPIO( A, 7, IN, ANALOG ) +#define CYGHWR_HAL_STM32_ADC123_IN0 CYGHWR_HAL_STM32_PIN_ANALOG( A, 0 ) +#define CYGHWR_HAL_STM32_ADC123_IN1 CYGHWR_HAL_STM32_PIN_ANALOG( A, 1 ) +#define CYGHWR_HAL_STM32_ADC123_IN2 CYGHWR_HAL_STM32_PIN_ANALOG( A, 2 ) +#define CYGHWR_HAL_STM32_ADC123_IN3 CYGHWR_HAL_STM32_PIN_ANALOG( A, 3 ) -#define CYGHWR_HAL_STM32_ADC12_IN8 CYGHWR_HAL_STM32_GPIO( B, 0, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC12_IN9 CYGHWR_HAL_STM32_GPIO( B, 1, IN, ANALOG ) +#define CYGHWR_HAL_STM32_ADC12_IN4 CYGHWR_HAL_STM32_PIN_ANALOG( A, 4 ) +#define CYGHWR_HAL_STM32_ADC12_IN5 CYGHWR_HAL_STM32_PIN_ANALOG( A, 5 ) +#define CYGHWR_HAL_STM32_ADC12_IN6 CYGHWR_HAL_STM32_PIN_ANALOG( A, 6 ) +#define CYGHWR_HAL_STM32_ADC12_IN7 CYGHWR_HAL_STM32_PIN_ANALOG( A, 7 ) + +#define CYGHWR_HAL_STM32_ADC12_IN8 CYGHWR_HAL_STM32_PIN_ANALOG( B, 0 ) +#define CYGHWR_HAL_STM32_ADC12_IN9 CYGHWR_HAL_STM32_PIN_ANALOG( B, 1 ) -#define CYGHWR_HAL_STM32_ADC3_IN4 CYGHWR_HAL_STM32_GPIO( F, 6, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC3_IN5 CYGHWR_HAL_STM32_GPIO( F, 7, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC3_IN6 CYGHWR_HAL_STM32_GPIO( F, 8, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC3_IN7 CYGHWR_HAL_STM32_GPIO( F, 9, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC3_IN8 CYGHWR_HAL_STM32_GPIO( F, 10, IN, ANALOG ) +#define CYGHWR_HAL_STM32_ADC3_IN4 CYGHWR_HAL_STM32_PIN_ANALOG( F, 6 ) +#define CYGHWR_HAL_STM32_ADC3_IN5 CYGHWR_HAL_STM32_PIN_ANALOG( F, 7 ) +#define CYGHWR_HAL_STM32_ADC3_IN6 CYGHWR_HAL_STM32_PIN_ANALOG( F, 8 ) +#define CYGHWR_HAL_STM32_ADC3_IN7 CYGHWR_HAL_STM32_PIN_ANALOG( F, 9 ) +#define CYGHWR_HAL_STM32_ADC3_IN8 CYGHWR_HAL_STM32_PIN_ANALOG( F, 10 ) + +#define CYGHWR_HAL_STM32_ADC123_IN10 CYGHWR_HAL_STM32_PIN_ANALOG( C, 0 ) +#define CYGHWR_HAL_STM32_ADC123_IN11 CYGHWR_HAL_STM32_PIN_ANALOG( C, 1 ) +#define CYGHWR_HAL_STM32_ADC123_IN12 CYGHWR_HAL_STM32_PIN_ANALOG( C, 2 ) +#define CYGHWR_HAL_STM32_ADC123_IN13 CYGHWR_HAL_STM32_PIN_ANALOG( C, 3 ) -#define CYGHWR_HAL_STM32_ADC123_IN10 CYGHWR_HAL_STM32_GPIO( C, 0, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN11 CYGHWR_HAL_STM32_GPIO( C, 1, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN12 CYGHWR_HAL_STM32_GPIO( C, 2, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC123_IN13 CYGHWR_HAL_STM32_GPIO( C, 3, IN, ANALOG ) +#define CYGHWR_HAL_STM32_ADC12_IN14 CYGHWR_HAL_STM32_PIN_ANALOG( C, 4 ) +#define CYGHWR_HAL_STM32_ADC12_IN15 CYGHWR_HAL_STM32_PIN_ANALOG( C, 5) -#define CYGHWR_HAL_STM32_ADC12_IN14 CYGHWR_HAL_STM32_GPIO( C, 4, IN, ANALOG ) -#define CYGHWR_HAL_STM32_ADC12_IN15 CYGHWR_HAL_STM32_GPIO( C, 5, IN, ANALOG ) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +// Following ADC3 channels not-mapped on F1 devices +#define CYGHWR_HAL_STM32_ADC3_IN9 CYGHWR_HAL_STM32_GPIO_NONE +#define CYGHWR_HAL_STM32_ADC3_IN14 CYGHWR_HAL_STM32_GPIO_NONE +#define CYGHWR_HAL_STM32_ADC3_IN15 CYGHWR_HAL_STM32_GPIO_NONE +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC3_IN9 CYGHWR_HAL_STM32_PIN_ANALOG( F, 3 ) +#define CYGHWR_HAL_STM32_ADC3_IN14 CYGHWR_HAL_STM32_PIN_ANALOG( F, 4 ) +#define CYGHWR_HAL_STM32_ADC3_IN15 CYGHWR_HAL_STM32_PIN_ANALOG( F, 5 ) +#endif // ADC1 GPIO pin aliases @@ -751,14 +1222,75 @@ #define CYGHWR_HAL_STM32_ADC3_IN1 CYGHWR_HAL_STM32_ADC123_IN1 #define CYGHWR_HAL_STM32_ADC3_IN2 CYGHWR_HAL_STM32_ADC123_IN2 #define CYGHWR_HAL_STM32_ADC3_IN3 CYGHWR_HAL_STM32_ADC123_IN3 -// Inputs 4 - 8 are already defined -#define CYGHWR_HAL_STM32_ADC3_IN9 CYGHWR_HAL_STM32_GPIO_NONE +// Inputs 4 - 9 are already defined #define CYGHWR_HAL_STM32_ADC3_IN10 CYGHWR_HAL_STM32_ADC123_IN10 #define CYGHWR_HAL_STM32_ADC3_IN11 CYGHWR_HAL_STM32_ADC123_IN11 #define CYGHWR_HAL_STM32_ADC3_IN12 CYGHWR_HAL_STM32_ADC123_IN12 #define CYGHWR_HAL_STM32_ADC3_IN13 CYGHWR_HAL_STM32_ADC123_IN13 -#define CYGHWR_HAL_STM32_ADC3_IN14 CYGHWR_HAL_STM32_GPIO_NONE -#define CYGHWR_HAL_STM32_ADC3_IN15 CYGHWR_HAL_STM32_GPIO_NONE +// Inputs 14 - 15 are already defined + +// ADC Clock control pins + +#define CYGHWR_HAL_STM32_ADC1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, ADC1 ) +#define CYGHWR_HAL_STM32_ADC2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, ADC2 ) +#define CYGHWR_HAL_STM32_ADC3_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, ADC3 ) + +// F2/F4 only: Common configuration registers based from CYGHWR_HAL_STM32_ADC_COMMON +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ADC_CSR 0x00 +#define CYGHWR_HAL_STM32_ADC_CCR 0x04 +#define CYGHWR_HAL_STM32_ADC_CDR 0x08 + +// CSR +#define CYGHWR_HAL_STM32_ADC_CSR_AWD BIT_(0) +#define CYGHWR_HAL_STM32_ADC_CSR_EOC BIT_(1) +#define CYGHWR_HAL_STM32_ADC_CSR_JEOC BIT_(2) +#define CYGHWR_HAL_STM32_ADC_CSR_JSTRT BIT_(3) +#define CYGHWR_HAL_STM32_ADC_CSR_STRT BIT_(4) +#define CYGHWR_HAL_STM32_ADC_CSR_OVR BIT_(5) + +#define CYGHWR_HAL_STM32_ADC1_CSR_AWD CYGHWR_HAL_STM32_ADC_CSR_AWD +#define CYGHWR_HAL_STM32_ADC1_CSR_EOC CYGHWR_HAL_STM32_ADC_CSR_EOC +#define CYGHWR_HAL_STM32_ADC1_CSR_JEOC CYGHWR_HAL_STM32_ADC_CSR_JEOC +#define CYGHWR_HAL_STM32_ADC1_CSR_JSTRT CYGHWR_HAL_STM32_ADC_CSR_JSTRT +#define CYGHWR_HAL_STM32_ADC1_CSR_STRT CYGHWR_HAL_STM32_ADC_CSR_STRT +#define CYGHWR_HAL_STM32_ADC1_CSR_OVR CYGHWR_HAL_STM32_ADC_CSR_OVR + +#define CYGHWR_HAL_STM32_ADC2_CSR_AWD (CYGHWR_HAL_STM32_ADC_CSR_AWD << 8) +#define CYGHWR_HAL_STM32_ADC2_CSR_EOC (CYGHWR_HAL_STM32_ADC_CSR_EOC << 8) +#define CYGHWR_HAL_STM32_ADC2_CSR_JEOC (CYGHWR_HAL_STM32_ADC_CSR_JEOC << 8) +#define CYGHWR_HAL_STM32_ADC2_CSR_JSTRT (CYGHWR_HAL_STM32_ADC_CSR_JSTRT << 8) +#define CYGHWR_HAL_STM32_ADC2_CSR_STRT (CYGHWR_HAL_STM32_ADC_CSR_STRT << 8) +#define CYGHWR_HAL_STM32_ADC2_CSR_OVR (CYGHWR_HAL_STM32_ADC_CSR_OVR << 8) + +#define CYGHWR_HAL_STM32_ADC3_CSR_AWD (CYGHWR_HAL_STM32_ADC_CSR_AWD << 16) +#define CYGHWR_HAL_STM32_ADC3_CSR_EOC (CYGHWR_HAL_STM32_ADC_CSR_EOC << 16) +#define CYGHWR_HAL_STM32_ADC3_CSR_JEOC (CYGHWR_HAL_STM32_ADC_CSR_JEOC << 16) +#define CYGHWR_HAL_STM32_ADC3_CSR_JSTRT (CYGHWR_HAL_STM32_ADC_CSR_JSTRT << 16) +#define CYGHWR_HAL_STM32_ADC3_CSR_STRT (CYGHWR_HAL_STM32_ADC_CSR_STRT << 16) +#define CYGHWR_HAL_STM32_ADC3_CSR_OVR (CYGHWR_HAL_STM32_ADC_CSR_OVR << 16) + +#define CYGHWR_HAL_STM32_ADC_CSR_ADC1(__csr) ((__csr) >> 0) +#define CYGHWR_HAL_STM32_ADC_CSR_ADC2(__csr) ((__csr) >> 8) +#define CYGHWR_HAL_STM32_ADC_CSR_ADC3(__csr) ((__csr) >> 16) + +// CCR +#define CYGHWR_HAL_STM32_ADC_CCR_MULTI_XXX VALUE_(0,0x1F) +#define CYGHWR_HAL_STM32_ADC_CCR_DELAY_XXX VALUE_(8,0xF) +#define CYGHWR_HAL_STM32_ADC_CCR_DDS BIT_(13) +#define CYGHWR_HAL_STM32_ADC_CCR_DMA_XXX VALUE_(14,0x3) +#define CYGHWR_HAL_STM32_ADC_CCR_ADCPRE_2 VALUE_(16,0x0) +#define CYGHWR_HAL_STM32_ADC_CCR_ADCPRE_4 VALUE_(16,0x1) +#define CYGHWR_HAL_STM32_ADC_CCR_ADCPRE_6 VALUE_(16,0x2) +#define CYGHWR_HAL_STM32_ADC_CCR_ADCPRE_8 VALUE_(16,0x3) +#define CYGHWR_HAL_STM32_ADC_CCR_ADCPRE_XXX VALUE_(16,0x3) +#define CYGHWR_HAL_STM32_ADC_CCR_VBATE BIT_(22) +#define CYGHWR_HAL_STM32_ADC_CCR_TSVREFE BIT_(23) + +// CDR +#define CYGHWR_HAL_STM32_ADC_CDR_DATA1_XXX VALUE_(0,0xFFFF) +#define CYGHWR_HAL_STM32_ADC_CDR_DATA2_XXX VALUE_(16,0xFFFF) +#endif //============================================================================= // SPI interface register definitions. @@ -825,17 +1357,105 @@ #define CYGHWR_HAL_STM32_SPI_I2SPR_ODD BIT_(8) #define CYGHWR_HAL_STM32_SPI_I2SPR_MCKOE BIT_(9) +// Clock control definitions for each SPI bus + +#define CYGHWR_HAL_STM32_SPI1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, SPI1 ) +#define CYGHWR_HAL_STM32_SPI2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, SPI2 ) +#define CYGHWR_HAL_STM32_SPI3_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, SPI3 ) + +//============================================================================= +// I2C busses + +#define CYGHWR_HAL_STM32_I2C_CR1 0x00 +#define CYGHWR_HAL_STM32_I2C_CR2 0x04 +#define CYGHWR_HAL_STM32_I2C_OAR1 0x08 +#define CYGHWR_HAL_STM32_I2C_OAR2 0x0C +#define CYGHWR_HAL_STM32_I2C_DR 0x10 +#define CYGHWR_HAL_STM32_I2C_SR1 0x14 +#define CYGHWR_HAL_STM32_I2C_SR2 0x18 +#define CYGHWR_HAL_STM32_I2C_CCR 0x1C +#define CYGHWR_HAL_STM32_I2C_TRISE 0x20 + +#define CYGHWR_HAL_STM32_I2C_CR1_PE BIT_(0) +#define CYGHWR_HAL_STM32_I2C_CR1_SMBUS BIT_(1) +#define CYGHWR_HAL_STM32_I2C_CR1_SMBTYPE BIT_(3) +#define CYGHWR_HAL_STM32_I2C_CR1_ENARP BIT_(4) +#define CYGHWR_HAL_STM32_I2C_CR1_ENPEC BIT_(5) +#define CYGHWR_HAL_STM32_I2C_CR1_ENGC BIT_(6) +#define CYGHWR_HAL_STM32_I2C_CR1_NOSTRETCH BIT_(7) +#define CYGHWR_HAL_STM32_I2C_CR1_START BIT_(8) +#define CYGHWR_HAL_STM32_I2C_CR1_STOP BIT_(9) +#define CYGHWR_HAL_STM32_I2C_CR1_ACK BIT_(10) +#define CYGHWR_HAL_STM32_I2C_CR1_POS BIT_(11) +#define CYGHWR_HAL_STM32_I2C_CR1_PEC BIT_(12) +#define CYGHWR_HAL_STM32_I2C_CR1_ALERT BIT_(13) +#define CYGHWR_HAL_STM32_I2C_CR1_SWRST BIT_(15) + + +#define CYGHWR_HAL_STM32_I2C_CR2_FREQ(__x) VALUE_(0,__x) +#define CYGHWR_HAL_STM32_I2C_CR2_FREQ_MASK MASK_(0,6) +#define CYGHWR_HAL_STM32_I2C_CR2_ITERREN BIT_(8) +#define CYGHWR_HAL_STM32_I2C_CR2_ITEVTEN BIT_(9) +#define CYGHWR_HAL_STM32_I2C_CR2_ITBUFEN BIT_(10) +#define CYGHWR_HAL_STM32_I2C_CR2_DMAEN BIT_(11) +#define CYGHWR_HAL_STM32_I2C_CR2_LAST BIT_(12) + +// OAR1 and OAR2 omitted, we only support master mode + +#define CYGHWR_HAL_STM32_I2C_SR1_SB BIT_(0) +#define CYGHWR_HAL_STM32_I2C_SR1_ADDR BIT_(1) +#define CYGHWR_HAL_STM32_I2C_SR1_BTF BIT_(2) +#define CYGHWR_HAL_STM32_I2C_SR1_ADD10 BIT_(3) +#define CYGHWR_HAL_STM32_I2C_SR1_STOPF BIT_(4) +#define CYGHWR_HAL_STM32_I2C_SR1_RxNE BIT_(6) +#define CYGHWR_HAL_STM32_I2C_SR1_TxE BIT_(7) +#define CYGHWR_HAL_STM32_I2C_SR1_BERR BIT_(8) +#define CYGHWR_HAL_STM32_I2C_SR1_ARLO BIT_(9) +#define CYGHWR_HAL_STM32_I2C_SR1_AF BIT_(10) +#define CYGHWR_HAL_STM32_I2C_SR1_OVR BIT_(11) +#define CYGHWR_HAL_STM32_I2C_SR1_PECERR BIT_(12) +#define CYGHWR_HAL_STM32_I2C_SR1_TIMEOUT BIT_(14) +#define CYGHWR_HAL_STM32_I2C_SR1_SMBALERT BIT_(15) + + +#define CYGHWR_HAL_STM32_I2C_SR2_MSL BIT_(0) +#define CYGHWR_HAL_STM32_I2C_SR2_BUSY BIT_(1) +#define CYGHWR_HAL_STM32_I2C_SR2_TRA BIT_(2) +#define CYGHWR_HAL_STM32_I2C_SR2_GENCALL BIT_(4) +#define CYGHWR_HAL_STM32_I2C_SR2_SMBDEFAULT BIT_(5) +#define CYGHWR_HAL_STM32_I2C_SR2_SMBHOST BIT_(6) +#define CYGHWR_HAL_STM32_I2C_SR2_DUALF BIT_(7) +#define CYGHWR_HAL_STM32_I2C_SR2_PEC MASK_(7,8) + +#define CYGHWR_HAL_STM32_I2C_CCR_CCR(__x) VALUE_(0,__x) +#define CYGHWR_HAL_STM32_I2C_CCR_CCR_MASK MASK_(0,12) +#define CYGHWR_HAL_STM32_I2C_CCR_DUTY_2 0 +#define CYGHWR_HAL_STM32_I2C_CCR_DUTY_16_9 BIT_(14) +#define CYGHWR_HAL_STM32_I2C_CCR_STD 0 +#define CYGHWR_HAL_STM32_I2C_CCR_FAST BIT_(15) + +#define CYGHWR_HAL_STM32_I2C_TRISE_VAL(__x) VALUE_(0,__x) +#define CYGHWR_HAL_STM32_I2C_TRISE_MASK MASK_(0,6) + +// Clock control definitions for each I2C bus + +#define CYGHWR_HAL_STM32_I2C1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, I2C1 ) +#define CYGHWR_HAL_STM32_I2C2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, I2C2 ) + + //============================================================================= // USB interface register definitions. -#define CYGHWR_HAL_STM32_USB_EP0R 0x00 -#define CYGHWR_HAL_STM32_USB_EP1R 0x04 -#define CYGHWR_HAL_STM32_USB_EP2R 0x08 -#define CYGHWR_HAL_STM32_USB_EP3R 0x0C -#define CYGHWR_HAL_STM32_USB_EP4R 0x10 -#define CYGHWR_HAL_STM32_USB_EP5R 0x14 -#define CYGHWR_HAL_STM32_USB_EP6R 0x18 -#define CYGHWR_HAL_STM32_USB_EP7R 0x1C +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +#define CYGHWR_HAL_STM32_USB_EP0R 0x00 +#define CYGHWR_HAL_STM32_USB_EP1R 0x04 +#define CYGHWR_HAL_STM32_USB_EP2R 0x08 +#define CYGHWR_HAL_STM32_USB_EP3R 0x0C +#define CYGHWR_HAL_STM32_USB_EP4R 0x10 +#define CYGHWR_HAL_STM32_USB_EP5R 0x14 +#define CYGHWR_HAL_STM32_USB_EP6R 0x18 +#define CYGHWR_HAL_STM32_USB_EP7R 0x1C #define CYGHWR_HAL_STM32_USB_CNTR 0x40 #define CYGHWR_HAL_STM32_USB_ISTR 0x44 @@ -911,6 +1531,12 @@ #define CYGHWR_HAL_STM32_USB_DADDR_ADD(__x) VALUE_(0,(__x)) #define CYGHWR_HAL_STM32_USB_DADDR_EF BIT_(7) +#define CYGHWR_HAL_STM32_USB_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, USB ) + +#endif // if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +// USB in F2/F4 parts is completely different. Definitions will be provided when implemented. + //============================================================================= // Timers // @@ -955,6 +1581,24 @@ #define CYGHWR_HAL_STM32_TIM_EGR_UG BIT_(0) +// Clock control pins +#define CYGHWR_HAL_STM32_TIM1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, TIM1 ) +#define CYGHWR_HAL_STM32_TIM2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM2 ) +#define CYGHWR_HAL_STM32_TIM3_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM3 ) +#define CYGHWR_HAL_STM32_TIM4_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM4 ) +#define CYGHWR_HAL_STM32_TIM5_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM5 ) +#define CYGHWR_HAL_STM32_TIM6_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM6 ) +#define CYGHWR_HAL_STM32_TIM7_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM7 ) +#define CYGHWR_HAL_STM32_TIM8_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, TIM8 ) +#if 0 +#define CYGHWR_HAL_STM32_TIM9_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, TIM9 ) +#define CYGHWR_HAL_STM32_TIM10_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, TIM10 ) +#define CYGHWR_HAL_STM32_TIM11_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, TIM11 ) +#define CYGHWR_HAL_STM32_TIM12_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM12 ) +#define CYGHWR_HAL_STM32_TIM13_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM13 ) +#define CYGHWR_HAL_STM32_TIM14_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, TIM14 ) +#endif + #ifndef __ASSEMBLER__ __externC cyg_uint32 hal_stm32_timer_clock( CYG_ADDRESS base ); @@ -962,6 +1606,34 @@ #endif //============================================================================= +// Independent Watchdog + +#define CYGHWR_HAL_STM32_IWDG_KR 0x00 +#define CYGHWR_HAL_STM32_IWDG_PR 0x04 +#define CYGHWR_HAL_STM32_IWDG_RLR 0x08 +#define CYGHWR_HAL_STM32_IWDG_SR 0x0C + +#define CYGHWR_HAL_STM32_IWDG_KR_RESET 0xAAAA +#define CYGHWR_HAL_STM32_IWDG_KR_ACCESS 0x5555 +#define CYGHWR_HAL_STM32_IWDG_KR_START 0xCCCC + +#define CYGHWR_HAL_STM32_IWDG_PR_4 0 +#define CYGHWR_HAL_STM32_IWDG_PR_8 1 +#define CYGHWR_HAL_STM32_IWDG_PR_16 2 +#define CYGHWR_HAL_STM32_IWDG_PR_32 3 +#define CYGHWR_HAL_STM32_IWDG_PR_64 4 +#define CYGHWR_HAL_STM32_IWDG_PR_128 5 +#define CYGHWR_HAL_STM32_IWDG_PR_256 6 + +#define CYGHWR_HAL_STM32_IWDG_SR_PVU BIT_(0) +#define CYGHWR_HAL_STM32_IWDG_SR_RVU BIT_(1) + +// Clock control + +//#define CYGHWR_HAL_STM32_IWDG_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, IWDG ) + + +//============================================================================= // Flash controller #define CYGHWR_HAL_STM32_FLASH_ACR 0x00 @@ -969,9 +1641,13 @@ #define CYGHWR_HAL_STM32_FLASH_OPTKEYR 0x08 #define CYGHWR_HAL_STM32_FLASH_SR 0x0C #define CYGHWR_HAL_STM32_FLASH_CR 0x10 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_FLASH_AR 0x14 #define CYGHWR_HAL_STM32_FLASH_OBR 0x1C #define CYGHWR_HAL_STM32_FLASH_WRPR 0x20 +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_FLASH_OPTCR 0x14 +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) // Key values @@ -981,19 +1657,47 @@ // ACR fields #define CYGHWR_HAL_STM32_FLASH_ACR_LATENCY(__x) VALUE_(0,__x) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + #define CYGHWR_HAL_STM32_FLASH_ACR_HLFCYA BIT_(3) #define CYGHWR_HAL_STM32_FLASH_ACR_PRFTBE BIT_(4) #define CYGHWR_HAL_STM32_FLASH_ACR_PRFTBS BIT_(5) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_FLASH_ACR_PRFTEN BIT_(8) +#define CYGHWR_HAL_STM32_FLASH_ACR_ICEN BIT_(9) +#define CYGHWR_HAL_STM32_FLASH_ACR_DCEN BIT_(10) +#define CYGHWR_HAL_STM32_FLASH_ACR_ICRST BIT_(11) +#define CYGHWR_HAL_STM32_FLASH_ACR_DCRST BIT_(12) + +#endif // if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + // SR fields +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + #define CYGHWR_HAL_STM32_FLASH_SR_BSY BIT_(0) #define CYGHWR_HAL_STM32_FLASH_SR_PGERR BIT_(2) #define CYGHWR_HAL_STM32_FLASH_SR_WRPRTERR BIT_(4) #define CYGHWR_HAL_STM32_FLASH_SR_EOP BIT_(5) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_FLASH_SR_EOP BIT_(0) +#define CYGHWR_HAL_STM32_FLASH_SR_OPERR BIT_(1) +#define CYGHWR_HAL_STM32_FLASH_SR_WRPERR BIT_(4) +#define CYGHWR_HAL_STM32_FLASH_SR_PGAERR BIT_(5) +#define CYGHWR_HAL_STM32_FLASH_SR_PGPERR BIT_(6) +#define CYGHWR_HAL_STM32_FLASH_SR_PGSERR BIT_(7) +#define CYGHWR_HAL_STM32_FLASH_SR_BSY BIT_(16) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + // CR fields +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + #define CYGHWR_HAL_STM32_FLASH_CR_PG BIT_(0) #define CYGHWR_HAL_STM32_FLASH_CR_PER BIT_(1) #define CYGHWR_HAL_STM32_FLASH_CR_MER BIT_(2) @@ -1005,13 +1709,38 @@ #define CYGHWR_HAL_STM32_FLASH_CR_ERRIE BIT_(10) #define CYGHWR_HAL_STM32_FLASH_CR_EOPIE BIT_(12) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_FLASH_CR_PG BIT_(0) +#define CYGHWR_HAL_STM32_FLASH_CR_SER BIT_(1) +#define CYGHWR_HAL_STM32_FLASH_CR_MER BIT_(2) +#define CYGHWR_HAL_STM32_FLASH_CR_SNB(__x) (((__x)&0xf) << 3) +#define CYGHWR_HAL_STM32_FLASH_CR_SNB_MASK MASK_(3,4) +#define CYGHWR_HAL_STM32_FLASH_CR_PSIZE(__x) ( (__x) == 8 ? VALUE_(8,0) : \ + (__x) == 16 ? VALUE_(8,1) : \ + (__x) == 32 ? VALUE_(8,2) : \ + VALUE_(8,3) ) +#define CYGHWR_HAL_STM32_FLASH_CR_PSIZE_8 VALUE_(8,0) +#define CYGHWR_HAL_STM32_FLASH_CR_PSIZE_16 VALUE_(8,1) +#define CYGHWR_HAL_STM32_FLASH_CR_PSIZE_32 VALUE_(8,2) +#define CYGHWR_HAL_STM32_FLASH_CR_PSIZE_64 VALUE_(8,3) +#define CYGHWR_HAL_STM32_FLASH_CR_STRT BIT_(16) +#define CYGHWR_HAL_STM32_FLASH_CR_EOPIE BIT_(24) +#define CYGHWR_HAL_STM32_FLASH_CR_ERRIE BIT_(25) +#define CYGHWR_HAL_STM32_FLASH_CR_LOCK BIT_(31) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + // OBR fields - +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) #define CYGHWR_HAL_STM32_FLASH_OBR_OPTERR BIT_(0) #define CYGHWR_HAL_STM32_FLASH_OBR_RDPRT BIT_(1) #define CYGHWR_HAL_STM32_FLASH_OBR_WDG_SW BIT_(2) #define CYGHWR_HAL_STM32_FLASH_OBR_nRST_STOP BIT_(3) #define CYGHWR_HAL_STM32_FLASH_OBR_nRST_STDBY BIT_(4) +#endif + +// F2/F4 FLASH_OPTCR not defined as our flash driver doesn't use it. //============================================================================= // Power control @@ -1028,13 +1757,28 @@ #define CYGHWR_HAL_STM32_PWR_CR_PVDE BIT_(4) #define CYGHWR_HAL_STM32_PWR_CR_PLS_XXX VALUE_(5,7) #define CYGHWR_HAL_STM32_PWR_CR_DBP BIT_(8) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_PWR_CR_FPDS BIT_(9) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_PWR_CR_VOS BIT_(14) +#endif // (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE // CSR fields #define CYGHWR_HAL_STM32_PWR_CSR_WUF BIT_(0) #define CYGHWR_HAL_STM32_PWR_CSR_SBF BIT_(1) #define CYGHWR_HAL_STM32_PWR_CSR_PVDO BIT_(2) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_PWR_CSR_BRR BIT_(3) +#endif #define CYGHWR_HAL_STM32_PWR_CSR_EWUP BIT_(8) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_PWR_CSR_BRE BIT_(9) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +#define CYGHWR_HAL_STM32_PWR_CSR_VOSRDY BIT_(14) +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE // Functions and macros to reset the backup domain as well as // enable/disable backup domain write protection. @@ -1088,14 +1832,14 @@ #define CYGHWR_HAL_STM32_FSMC_PATT3 0x8C #define CYGHWR_HAL_STM32_FSMC_ECCR3 0x94 -#define CYGHWR_HAL_STM32_FSMC_PCR4 0xC0 -#define CYGHWR_HAL_STM32_FSMC_SR4 0xC4 -#define CYGHWR_HAL_STM32_FSMC_PMEM4 0xC8 -#define CYGHWR_HAL_STM32_FSMC_PATT4 0xCC +#define CYGHWR_HAL_STM32_FSMC_PCR4 0xA0 +#define CYGHWR_HAL_STM32_FSMC_SR4 0xA4 +#define CYGHWR_HAL_STM32_FSMC_PMEM4 0xA8 +#define CYGHWR_HAL_STM32_FSMC_PATT4 0xAC #define CYGHWR_HAL_STM32_FSMC_PIO4 0xB0 - +#define CYGHWR_HAL_STM32_FSMC_BANK1_BASE 0x60000000 #define CYGHWR_HAL_STM32_FSMC_BANK2_BASE 0x70000000 #define CYGHWR_HAL_STM32_FSMC_BANK3_BASE 0x80000000 #define CYGHWR_HAL_STM32_FSMC_BANK4_BASE 0x90000000 @@ -1111,6 +1855,7 @@ #define CYGHWR_HAL_STM32_FSMC_PCR_PWID_8 VALUE_(4,0) #define CYGHWR_HAL_STM32_FSMC_PCR_PWID_16 VALUE_(4,1) #define CYGHWR_HAL_STM32_FSMC_PCR_ECCEN BIT_(6) +// FIXME: I don't see where ADLOW comes from? It's not in F1, F2 or F4. -Jifl #define CYGHWR_HAL_STM32_FSMC_PCR_ADLOW BIT_(8) #define CYGHWR_HAL_STM32_FSMC_PCR_TCLR(__x) VALUE_(9,__x) #define CYGHWR_HAL_STM32_FSMC_PCR_TAR(__x) VALUE_(13,__x) @@ -1131,6 +1876,56 @@ #define CYGHWR_HAL_STM32_FSMC_SR_IFEN BIT_(5) #define CYGHWR_HAL_STM32_FSMC_SR_FEMPT BIT_(6) +//============================================================================= +// CAN +// + +#define CYGHWR_HAL_STM32_CAN1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, CAN1 ) +#define CYGHWR_HAL_STM32_CAN2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, CAN2 ) + + +//============================================================================= +// Ethernet MAC +// Include separate header file for this to avoid this header getting unmanageable. + +#include + +//========================================================================== + +#if (defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103RC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103VC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103ZC) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103RD) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103VD) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103ZD) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103RE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103VE) || \ + defined(CYGHWR_HAL_CORTEXM_STM32_F1_F103ZE)) +// NOTE: From ST document ES0104 (STM32F101xC/D/E and STM32F103xC/D/E) +// errata section 2.6.9 we cannot use FSMC and I2C1 at the same time. +// For I2C1 support we are limited to on-chip SRAM/Flash execution and +// must ensure that FSMC is disabled. +# if (defined(CYG_HAL_STARTUP_SRAM) || \ + defined(CYG_HAL_STARTUP_ROM) || \ + defined(CYG_HAL_STARTUP_JTAG)) +# define HAL_AARDVARK_CHECK_I2C( _i2cdev_ ) \ + CYG_MACRO_START \ + if ((_i2cdev_)->i2c_bus == &hal_stm32_i2c_bus1) { \ + CYGHWR_HAL_STM32_CLOCK_DISABLE( CYGHWR_HAL_STM32_CLOCK( AHB, FSMC) ); \ + } \ + CYG_MACRO_END +# else // on this CPU we cannot use I2C1 since FSMC needed for the CYG_HAL_STARTUP type +# define HAL_AARDVARK_CHECK_I2C( _i2cdev_ ) \ + CYG_MACRO_START \ + if ((_i2cdev_)->i2c_bus == &hal_stm32_i2c_bus1) { \ + CYG_TEST_FAIL_FINISH("Invalid CYG_HAL_STARTUP for I2C1 operations"); \ + } \ + CYG_MACRO_END +# endif +#endif + +//========================================================================== + +#endif // CYGONCE_HAL_VAR_IO_H //----------------------------------------------------------------------------- // end of var_io.h -#endif // CYGONCE_HAL_VAR_IO_H diff --git a/packages/hal/cortexm/stm32/var/current/include/var_io_eth.h b/packages/hal/cortexm/stm32/var/current/include/var_io_eth.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/var/current/include/var_io_eth.h @@ -0,0 +1,490 @@ +#ifndef CYGONCE_HAL_VAR_IO_ETH_H +#define CYGONCE_HAL_VAR_IO_ETH_H +//============================================================================= +// +// var_io_eth.h +// +// Ethernet-specific variant definitions +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jlarmour +// Date: 2008-07-30 +// Purpose: STM32 variant ETH specific registers +// Description: +// Usage: Do not include this header file directly. Instead: +// #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#ifndef CYGONCE_HAL_VAR_IO_H +# error Do not include var_io_eth.h directly, use var_io.h +#endif + + +//============================================================================= +// Ethernet MAC +// +// Connectivity devices only + +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + +#define CYGHWR_HAL_STM32_ETH_MACCR 0x0000 +#define CYGHWR_HAL_STM32_ETH_MACFFR 0x0004 +#define CYGHWR_HAL_STM32_ETH_MACHTHR 0x0008 +#define CYGHWR_HAL_STM32_ETH_MACHTLR 0x000C +#define CYGHWR_HAL_STM32_ETH_MACMIIAR 0x0010 +#define CYGHWR_HAL_STM32_ETH_MACMIIDR 0x0014 +#define CYGHWR_HAL_STM32_ETH_MACFCR 0x0018 +#define CYGHWR_HAL_STM32_ETH_MACVLANTR 0x001C +#define CYGHWR_HAL_STM32_ETH_MACRWUFFR 0x0028 +#define CYGHWR_HAL_STM32_ETH_MACPMTCSR 0x002C +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_MACDBGR 0x0034 +#endif +#define CYGHWR_HAL_STM32_ETH_MACSR 0x0038 +#define CYGHWR_HAL_STM32_ETH_MACIMR 0x003C +#define CYGHWR_HAL_STM32_ETH_MACA0HR 0x0040 +#define CYGHWR_HAL_STM32_ETH_MACA0LR 0x0044 +#define CYGHWR_HAL_STM32_ETH_MACA1HR 0x0048 +#define CYGHWR_HAL_STM32_ETH_MACA1LR 0x004C +#define CYGHWR_HAL_STM32_ETH_MACA2HR 0x0050 +#define CYGHWR_HAL_STM32_ETH_MACA2LR 0x0054 +#define CYGHWR_HAL_STM32_ETH_MACA3HR 0x0058 +#define CYGHWR_HAL_STM32_ETH_MACA3LR 0x005C + +#define CYGHWR_HAL_STM32_ETH_MMCCR 0x0100 +#define CYGHWR_HAL_STM32_ETH_MMCRIR 0x0104 +#define CYGHWR_HAL_STM32_ETH_MMCTIR 0x0108 +#define CYGHWR_HAL_STM32_ETH_MMCRIMR 0x010C +#define CYGHWR_HAL_STM32_ETH_MMCTIMR 0x0110 +#define CYGHWR_HAL_STM32_ETH_MMCTGFSCCR 0x014C +#define CYGHWR_HAL_STM32_ETH_MMCTGFMSCCR 0x0150 +#define CYGHWR_HAL_STM32_ETH_MMCTGFCR 0x0168 +#define CYGHWR_HAL_STM32_ETH_MMCRFCECR 0x0194 +#define CYGHWR_HAL_STM32_ETH_MMCRFAECR 0x0198 +#define CYGHWR_HAL_STM32_ETH_MMCRGUFCR 0x01C4 + +#define CYGHWR_HAL_STM32_ETH_PTPTSCR 0x0700 +#define CYGHWR_HAL_STM32_ETH_PTPSSIR 0x0704 +#define CYGHWR_HAL_STM32_ETH_PTPTSHR 0x0708 +#define CYGHWR_HAL_STM32_ETH_PTPTSLR 0x070C +#define CYGHWR_HAL_STM32_ETH_PTPTSHUR 0x0710 +#define CYGHWR_HAL_STM32_ETH_PTPTSLUR 0x0714 +#define CYGHWR_HAL_STM32_ETH_PTPTSAR 0x0718 +#define CYGHWR_HAL_STM32_ETH_PTPTTHR 0x071C +#define CYGHWR_HAL_STM32_ETH_PTPTTLR 0x0720 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_PTPTSSR 0x0728 +#endif + +#define CYGHWR_HAL_STM32_ETH_DMABMR 0x1000 +#define CYGHWR_HAL_STM32_ETH_DMATPDR 0x1004 +#define CYGHWR_HAL_STM32_ETH_DMARPDR 0x1008 +#define CYGHWR_HAL_STM32_ETH_DMARDLAR 0x100C +#define CYGHWR_HAL_STM32_ETH_DMATDLAR 0x1010 +#define CYGHWR_HAL_STM32_ETH_DMASR 0x1014 +#define CYGHWR_HAL_STM32_ETH_DMAOMR 0x1018 +#define CYGHWR_HAL_STM32_ETH_DMAIER 0x101C +#define CYGHWR_HAL_STM32_ETH_DMAMFBOCR 0x1020 +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_DMARSWTR 0x1024 +#endif +#define CYGHWR_HAL_STM32_ETH_DMACHTDR 0x1048 +#define CYGHWR_HAL_STM32_ETH_DMACHRDR 0x104C +#define CYGHWR_HAL_STM32_ETH_DMACHTBAR 0x1050 +#define CYGHWR_HAL_STM32_ETH_DMACHRBAR 0x1054 + +// MACCR + +#define CYGHWR_HAL_STM32_ETH_MACCR_RE BIT_(2) +#define CYGHWR_HAL_STM32_ETH_MACCR_TE BIT_(3) +#define CYGHWR_HAL_STM32_ETH_MACCR_DC BIT_(4) +#define CYGHWR_HAL_STM32_ETH_MACCR_BL(__x) VALUE_(6, __x) +#define CYGHWR_HAL_STM32_ETH_MACCR_APCS BIT_(7) +#define CYGHWR_HAL_STM32_ETH_MACCR_RD BIT_(9) +#define CYGHWR_HAL_STM32_ETH_MACCR_IPCO BIT_(10) +#define CYGHWR_HAL_STM32_ETH_MACCR_DM BIT_(11) +#define CYGHWR_HAL_STM32_ETH_MACCR_LM BIT_(12) +#define CYGHWR_HAL_STM32_ETH_MACCR_ROD BIT_(13) +#define CYGHWR_HAL_STM32_ETH_MACCR_FES BIT_(14) +#define CYGHWR_HAL_STM32_ETH_MACCR_CSD BIT_(16) +#define CYGHWR_HAL_STM32_ETH_MACCR_IFG(__x) VALUE_(17, (96-(__x))/8 ) +#define CYGHWR_HAL_STM32_ETH_MACCR_JD BIT_(22) +#define CYGHWR_HAL_STM32_ETH_MACCR_WD BIT_(23) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_MACCR_CSTF BIT_(25) +#endif + +// MACFFR + +#define CYGHWR_HAL_STM32_ETH_MACFFR_PM BIT_(0) +#define CYGHWR_HAL_STM32_ETH_MACFFR_HU BIT_(1) +#define CYGHWR_HAL_STM32_ETH_MACFFR_HM BIT_(2) +#define CYGHWR_HAL_STM32_ETH_MACFFR_DAIF BIT_(3) +#define CYGHWR_HAL_STM32_ETH_MACFFR_PAM BIT_(4) +#define CYGHWR_HAL_STM32_ETH_MACFFR_BFD BIT_(5) +#define CYGHWR_HAL_STM32_ETH_MACFFR_PCF_BLOCK VALUE_(6,0) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_MACFFR_PCF_NOPAUSE VALUE_(6,1) +#endif +#define CYGHWR_HAL_STM32_ETH_MACFFR_PCF_ALL VALUE_(6,2) +#define CYGHWR_HAL_STM32_ETH_MACFFR_PCF_FILTER VALUE_(6,3) +#define CYGHWR_HAL_STM32_ETH_MACFFR_SAIF BIT_(8) +#define CYGHWR_HAL_STM32_ETH_MACFFR_SAF BIT_(9) +#define CYGHWR_HAL_STM32_ETH_MACFFR_HPF BIT_(10) +#define CYGHWR_HAL_STM32_ETH_MACFFR_RA BIT_(31) + +// MACHT* omitted + +// MACMIIAR + +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_MB BIT_(0) +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_MW BIT_(1) +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(__x) VALUE_(2,__x) +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MASK MASK_(2,4) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +# define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ_CHECK(_mhz) ((_mhz) >= 20 && (_mhz) <= 72) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F2) +# define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ_CHECK(_mhz) ((_mhz) >= 20 && (_mhz) <= 120) +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F4) +# define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ_CHECK(_mhz) ((_mhz) >= 20 && (_mhz) <= 168) +#endif +// This macro is shared between F1/F2/F4 families for now (despite +// irrelevance for >72Mhz speed, but that's checked above) but it's +// foreseeable that this could change for future products. +# define CYGHWR_HAL_STM32_ETH_MACMIIAR_CR_MHZ(_mhz) ( \ + ((_mhz) >= 150) ? CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(4) : \ + ((_mhz) >= 100) ? CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(1) : \ + ((_mhz) >= 60) ? CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(0) : \ + ((_mhz) >= 35) ? CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(3) : \ + /*((_mhz) >= 20) ?*/ CYGHWR_HAL_STM32_ETH_MACMIIAR_CR(2)) + +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_MR(__x) VALUE_(6,__x) +#define CYGHWR_HAL_STM32_ETH_MACMIIAR_PA(__x) VALUE_(11,__x) + +// MACFCR omitted +// MACVLANTR omitted +// MACRWUFFR omitted +// MACPMTCSR omitted +// MACDBGR (F2/F4 only) omitted + +// MACSR + +#define CYGHWR_HAL_STM32_ETH_MACSR_PMTS BIT_(3) +#define CYGHWR_HAL_STM32_ETH_MACSR_MMCS BIT_(4) +#define CYGHWR_HAL_STM32_ETH_MACSR_MMCRS BIT_(5) +#define CYGHWR_HAL_STM32_ETH_MACSR_MMCTS BIT_(6) +#define CYGHWR_HAL_STM32_ETH_MACSR_TSTS BIT_(9) + +// MACIMR + +#define CYGHWR_HAL_STM32_ETH_MACIMR_PMTIM BIT_(3) +#define CYGHWR_HAL_STM32_ETH_MACIMR_TSTIM BIT_(9) + +// MMCR + +#define CYGHWR_HAL_STM32_ETH_MMCCR_CR BIT_(0) +#define CYGHWR_HAL_STM32_ETH_MMCCR_CSR BIT_(1) +#define CYGHWR_HAL_STM32_ETH_MMCCR_ROR BIT_(2) +#define CYGHWR_HAL_STM32_ETH_MMCCR_MCF BIT_(3) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_MMCCR_MCP BIT_(4) +#define CYGHWR_HAL_STM32_ETH_MMCCR_MCFHP BIT_(5) +#endif + +// MMCRIR & MMCRIMR + +#define CYGHWR_HAL_STM32_ETH_MMCRIR_RFCES BIT_(5) +#define CYGHWR_HAL_STM32_ETH_MMCRIR_RFAES BIT_(6) +#define CYGHWR_HAL_STM32_ETH_MMCRIR_RGUFS BIT_(17) + +// MMCTIR & MMCTIMR + +#define CYGHWR_HAL_STM32_ETH_MMCTIR_TGFSCS BIT_(14) +#define CYGHWR_HAL_STM32_ETH_MMCTIR_TGFMSCS BIT_(15) +#define CYGHWR_HAL_STM32_ETH_MMCTIR_TGFS BIT_(21) + +// PTP* omitted + +// DMABMR + +#define CYGHWR_HAL_STM32_ETH_DMABMR_SR BIT_(0) +#define CYGHWR_HAL_STM32_ETH_DMABMR_DA BIT_(1) +#define CYGHWR_HAL_STM32_ETH_DMABMR_DSL(__x) VALUE_(2,__x) +#define CYGHWR_HAL_STM32_ETH_DMABMR_PBL(__x) VALUE_(8,__x) +#define CYGHWR_HAL_STM32_ETH_DMABMR_RTPR(__x) VALUE_(14,(__x)-1) +#define CYGHWR_HAL_STM32_ETH_DMABMR_FB BIT_(16) +#define CYGHWR_HAL_STM32_ETH_DMABMR_RDP(__x) VALUE_(17,__x) +#define CYGHWR_HAL_STM32_ETH_DMABMR_USP BIT_(23) +#define CYGHWR_HAL_STM32_ETH_DMABMR_FPM BIT_(24) +#define CYGHWR_HAL_STM32_ETH_DMABMR_AAB BIT_(25) + +//DMASR + +#define CYGHWR_HAL_STM32_ETH_DMASR_TS BIT_(0) +#define CYGHWR_HAL_STM32_ETH_DMASR_TPSS BIT_(1) +#define CYGHWR_HAL_STM32_ETH_DMASR_TBUS BIT_(2) +#define CYGHWR_HAL_STM32_ETH_DMASR_TJTS BIT_(3) +#define CYGHWR_HAL_STM32_ETH_DMASR_ROS BIT_(4) +#define CYGHWR_HAL_STM32_ETH_DMASR_TUS BIT_(5) +#define CYGHWR_HAL_STM32_ETH_DMASR_RS BIT_(6) +#define CYGHWR_HAL_STM32_ETH_DMASR_RBUS BIT_(7) +#define CYGHWR_HAL_STM32_ETH_DMASR_RPSS BIT_(8) +#define CYGHWR_HAL_STM32_ETH_DMASR_RWTS BIT_(9) +#define CYGHWR_HAL_STM32_ETH_DMASR_ETS BIT_(10) +#define CYGHWR_HAL_STM32_ETH_DMASR_FBES BIT_(13) +#define CYGHWR_HAL_STM32_ETH_DMASR_ERS BIT_(14) +#define CYGHWR_HAL_STM32_ETH_DMASR_AIS BIT_(15) +#define CYGHWR_HAL_STM32_ETH_DMASR_NIS BIT_(16) +#define CYGHWR_HAL_STM32_ETH_DMASR_RPS MASK_(17,3) +#define CYGHWR_HAL_STM32_ETH_DMASR_TPS MASK_(20,3) +#define CYGHWR_HAL_STM32_ETH_DMASR_EBS MASK_(23,3) +#define CYGHWR_HAL_STM32_ETH_DMASR_MMCS BIT_(27) +#define CYGHWR_HAL_STM32_ETH_DMASR_PMTS BIT_(28) +#define CYGHWR_HAL_STM32_ETH_DMASR_TSTS BIT_(29) + +// DMAOMR + +#define CYGHWR_HAL_STM32_ETH_DMAOMR_SR BIT_(1) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_OSF BIT_(2) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_RTC(__x) VALUE_(3,__x) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_FUGF BIT_(6) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_FEF BIT_(7) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_ST BIT_(13) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_TTC(__x) VALUE_(14,__x) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_FTF BIT_(20) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_TSF BIT_(21) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_DFRF BIT_(24) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_RSF BIT_(25) +#define CYGHWR_HAL_STM32_ETH_DMAOMR_DTCEFD BIT_(26) + +// DMAIER + +#define CYGHWR_HAL_STM32_ETH_DMAIER_TIE BIT_(0) +#define CYGHWR_HAL_STM32_ETH_DMAIER_TPSIE BIT_(1) +#define CYGHWR_HAL_STM32_ETH_DMAIER_TBUIE BIT_(2) +#define CYGHWR_HAL_STM32_ETH_DMAIER_TJTIE BIT_(3) +#define CYGHWR_HAL_STM32_ETH_DMAIER_ROIE BIT_(4) +#define CYGHWR_HAL_STM32_ETH_DMAIER_TUIE BIT_(5) +#define CYGHWR_HAL_STM32_ETH_DMAIER_RIE BIT_(6) +#define CYGHWR_HAL_STM32_ETH_DMAIER_RBUIE BIT_(7) +#define CYGHWR_HAL_STM32_ETH_DMAIER_RPSIE BIT_(8) +#define CYGHWR_HAL_STM32_ETH_DMAIER_RWTIE BIT_(9) +#define CYGHWR_HAL_STM32_ETH_DMAIER_ETIE BIT_(10) +#define CYGHWR_HAL_STM32_ETH_DMAIER_FBEIE BIT_(13) +#define CYGHWR_HAL_STM32_ETH_DMAIER_ERIE BIT_(14) +#define CYGHWR_HAL_STM32_ETH_DMAIER_AISE BIT_(15) +#define CYGHWR_HAL_STM32_ETH_DMAIER_NISE BIT_(16) + +// DMAFBOCR omitted + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_ETH_DMARSWTR_RSWTC_MASK MASK_(0,8) +#define CYGHWR_HAL_STM32_ETH_DMARSWTR_RSWTC(__x) ((__x)& CYGHWR_HAL_STM32_ETH_DMARSWTR_RSWTC_MASK) +#endif + +// Transmit descriptor fields + +/* +----------------------------------------------------------------------- +TDES0|OWN(31)|CTRL[30:26]|Res[25:24]|CTRL[23:20]|Res[19:17]|Stat[16:0]| +----------------------------------------------------------------------- +TDES1|Res[31:29]| Buffer2 Len[28:16] | Res[15:13] | Buffer1 Len[12:0] | +----------------------------------------------------------------------- +TDES2| Buffer1 Address [31:0] | +----------------------------------------------------------------------- +TDES3| Buffer2 Address [31:0] | +----------------------------------------------------------------------- +*/ + +// TDES0 register: DMA Tx descriptor status + +#define CYGHWR_HAL_STM32_ETH_TDES0_DB BIT_(0) +#define CYGHWR_HAL_STM32_ETH_TDES0_UF BIT_(1) +#define CYGHWR_HAL_STM32_ETH_TDES0_ED BIT_(2) +#define CYGHWR_HAL_STM32_ETH_TDES0_CC MASK_(3,4) +#define CYGHWR_HAL_STM32_ETH_TDES0_VF BIT_(7) +#define CYGHWR_HAL_STM32_ETH_TDES0_EC BIT_(8) +#define CYGHWR_HAL_STM32_ETH_TDES0_LCO BIT_(9) +#define CYGHWR_HAL_STM32_ETH_TDES0_NC BIT_(10) +#define CYGHWR_HAL_STM32_ETH_TDES0_LCA BIT_(11) +#define CYGHWR_HAL_STM32_ETH_TDES0_IPE BIT_(12) +#define CYGHWR_HAL_STM32_ETH_TDES0_FF BIT_(13) +#define CYGHWR_HAL_STM32_ETH_TDES0_JT BIT_(14) +#define CYGHWR_HAL_STM32_ETH_TDES0_ES BIT_(15) +#define CYGHWR_HAL_STM32_ETH_TDES0_IHE BIT_(16) +#define CYGHWR_HAL_STM32_ETH_TDES0_TTSS BIT_(17) +#define CYGHWR_HAL_STM32_ETH_TDES0_TCH BIT_(20) +#define CYGHWR_HAL_STM32_ETH_TDES0_TER BIT_(21) +#define CYGHWR_HAL_STM32_ETH_TDES0_CIC_DISA VALUE_(22,0) +#define CYGHWR_HAL_STM32_ETH_TDES0_CIC_H VALUE_(22,1) +#define CYGHWR_HAL_STM32_ETH_TDES0_CIC_HP VALUE_(22,2) +#define CYGHWR_HAL_STM32_ETH_TDES0_CIC_HPP VALUE_(22,3) +#define CYGHWR_HAL_STM32_ETH_TDES0_TTSE BIT_(25) +#define CYGHWR_HAL_STM32_ETH_TDES0_DP BIT_(26) +#define CYGHWR_HAL_STM32_ETH_TDES0_DC BIT_(27) +#define CYGHWR_HAL_STM32_ETH_TDES0_FS BIT_(28) +#define CYGHWR_HAL_STM32_ETH_TDES0_LS BIT_(29) +#define CYGHWR_HAL_STM32_ETH_TDES0_IC BIT_(30) +#define CYGHWR_HAL_STM32_ETH_TDES0_OWN BIT_(31) + +#define CYGHWR_HAL_STM32_ETH_TDES1_TBS1(__x) (VALUE_(0,__x)&0x00001FFF) +#define CYGHWR_HAL_STM32_ETH_TDES1_TBS2(__x) (VALUE_(16,__x)&0x1FFF0000) + +// Receive descriptor fields + +/* +----------------------------------------------------------------------- +RDES0| OWN(31) | Status [30:0] | +----------------------------------------------------------------------- +RDES1|DIC(31)|Res[30:29]|Not Used|CTRL[15:14]|Res(13)|Buffer Len[12:0]| +----------------------------------------------------------------------- +RDES2| Buffer1 Address [31:0] | +----------------------------------------------------------------------- +RDES3| Not Used | +----------------------------------------------------------------------- +*/ + +// RDES0 register: DMA Rx descriptor status + +#define CYGHWR_HAL_STM32_ETH_RDES0_PCE BIT_(0) +#define CYGHWR_HAL_STM32_ETH_RDES0_CE BIT_(1) +#define CYGHWR_HAL_STM32_ETH_RDES0_DE BIT_(2) +#define CYGHWR_HAL_STM32_ETH_RDES0_RE BIT_(3) +#define CYGHWR_HAL_STM32_ETH_RDES0_RWT BIT_(4) +#define CYGHWR_HAL_STM32_ETH_RDES0_FT BIT_(5) +#define CYGHWR_HAL_STM32_ETH_RDES0_LCO BIT_(6) +#define CYGHWR_HAL_STM32_ETH_RDES0_IPHCE BIT_(7) +#define CYGHWR_HAL_STM32_ETH_RDES0_LS BIT_(8) +#define CYGHWR_HAL_STM32_ETH_RDES0_FS BIT_(9) +#define CYGHWR_HAL_STM32_ETH_RDES0_VLAN BIT_(10) +#define CYGHWR_HAL_STM32_ETH_RDES0_OE BIT_(11) +#define CYGHWR_HAL_STM32_ETH_RDES0_LE BIT_(12) +#define CYGHWR_HAL_STM32_ETH_RDES0_SAF BIT_(13) +#define CYGHWR_HAL_STM32_ETH_RDES0_DESCE BIT_(14) +#define CYGHWR_HAL_STM32_ETH_RDES0_ES BIT_(15) +#define CYGHWR_HAL_STM32_ETH_RDES0_FL(__x) (((__x)>>16)&0x3FFF) +#define CYGHWR_HAL_STM32_ETH_RDES0_AFM BIT_(30) +#define CYGHWR_HAL_STM32_ETH_RDES0_OWN BIT_(31) + +// RDES1 register : DMA Rx descriptor control and buffer length + +#define CYGHWR_HAL_STM32_ETH_RDES1_RBS1(__x) VALUE_(0,__x) +#define CYGHWR_HAL_STM32_ETH_RDES1_RCH BIT_(14) +#define CYGHWR_HAL_STM32_ETH_RDES1_RER BIT_(15) +#define CYGHWR_HAL_STM32_ETH_RDES1_RBS2(__x) VALUE_(16,__x) + + +// GPIO pins + +// NOTE: The platform specific (re-)mapping of pins is provided in the relevant +// target specific "plf_io.h" header file. These definitions just cover the +// fixed mappings. + +// MCO1 clock to PHY +#define CYGHWR_HAL_STM32_ETH_MCO CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 8, 0, PUSHPULL, NONE, AT_LEAST(50) ) + +// MII interface +#define CYGHWR_HAL_STM32_ETH_MII_MDC CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 1, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD2 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 2, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_MDIO CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 2, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TX_CLK CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 3, 11, OPENDRAIN, FLOATING ) +#define CYGHWR_HAL_STM32_ETH_MII_RX_CLK CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 1, 11, OPENDRAIN, FLOATING ) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +// MII interface +#define CYGHWR_HAL_STM32_ETH_MII_TX_CRS CYGHWR_HAL_STM32_PIN_IN( A, 0, FLOATING ) +#define CYGHWR_HAL_STM32_ETH_MII_COL CYGHWR_HAL_STM32_PIN_IN( A, 3, FLOATING ) +#define CYGHWR_HAL_STM32_ETH_MII_RX_ER CYGHWR_HAL_STM32_PIN_IN( B, 10, FLOATING ) + +#define CYGHWR_HAL_STM32_ETH_MII_TX_EN CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 11, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD0 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 12, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD1 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 13, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_PPS_OUT CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 5, 11, PUSHPULL, NONE, AT_LEAST(50) ) +#define CYGHWR_HAL_STM32_ETH_MII_TXD3 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 8, 11, PUSHPULL, NONE, AT_LEAST(50) ) + +// RMII interface +#define CYGHWR_HAL_STM32_ETH_RMII_MDC CYGHWR_HAL_STM32_ETH_MII_MDC +#define CYGHWR_HAL_STM32_ETH_RMII_REF_CLK CYGHWR_HAL_STM32_ETH_MII_RX_CLK +#define CYGHWR_HAL_STM32_ETH_RMII_MDIO CYGHWR_HAL_STM32_ETH_MII_MDIO +#define CYGHWR_HAL_STM32_ETH_RMII_TX_EN CYGHWR_HAL_STM32_ETH_MII_TX_EN +#define CYGHWR_HAL_STM32_ETH_RMII_TXD0 CYGHWR_HAL_STM32_ETH_MII_TXD0 +#define CYGHWR_HAL_STM32_ETH_RMII_TXD1 CYGHWR_HAL_STM32_ETH_MII_TXD1 +#define CYGHWR_HAL_STM32_ETH_RMII_PPS_OUT CYGHWR_HAL_STM32_ETH_MII_PPS_OUT + +// Clock controls + +#define CYGHWR_HAL_STM32_ETH_MAC_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB, ETHMAC ) +#define CYGHWR_HAL_STM32_ETH_TX_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB, ETHMACTX ) +#define CYGHWR_HAL_STM32_ETH_RX_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB, ETHMACRX ) + +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +// MII interface +#define CYGHWR_HAL_STM32_ETH_MII_RX_DV CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 7, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_RXD0 CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 4, 11, OPENDRAIN, NONE ) +#define CYGHWR_HAL_STM32_ETH_MII_RXD1 CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 5, 11, OPENDRAIN, NONE ) + +// RMII interface +#define CYGHWR_HAL_STM32_ETH_RMII_MDC CYGHWR_HAL_STM32_ETH_MII_MDC +#define CYGHWR_HAL_STM32_ETH_RMII_REF_CLK CYGHWR_HAL_STM32_ETH_MII_RX_CLK +#define CYGHWR_HAL_STM32_ETH_RMII_MDIO CYGHWR_HAL_STM32_ETH_MII_MDIO +#define CYGHWR_HAL_STM32_ETH_RMII_CRS_DV CYGHWR_HAL_STM32_ETH_MII_RX_DV +#define CYGHWR_HAL_STM32_ETH_RMII_RXD0 CYGHWR_HAL_STM32_ETH_MII_RXD0 +#define CYGHWR_HAL_STM32_ETH_RMII_RXD1 CYGHWR_HAL_STM32_ETH_MII_RXD1 +#define CYGHWR_HAL_STM32_ETH_RMII_TX_EN CYGHWR_HAL_STM32_ETH_MII_TX_EN +#define CYGHWR_HAL_STM32_ETH_RMII_TXD0 CYGHWR_HAL_STM32_ETH_MII_TXD0 +#define CYGHWR_HAL_STM32_ETH_RMII_TXD1 CYGHWR_HAL_STM32_ETH_MII_TXD1 +#define CYGHWR_HAL_STM32_ETH_RMII_PPS_OUT CYGHWR_HAL_STM32_ETH_MII_PPS_OUT + +// Clock controls + +#define CYGHWR_HAL_STM32_ETH_MAC_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB1, ETHMAC ) +#define CYGHWR_HAL_STM32_ETH_TX_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB1, ETHMACTX ) +#define CYGHWR_HAL_STM32_ETH_RX_CLOCK CYGHWR_HAL_STM32_CLOCK( AHB1, ETHMACRX ) + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#endif // CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + +#endif // CYGONCE_HAL_VAR_IO_ETH_H +//----------------------------------------------------------------------------- +// end of var_io_eth.h diff --git a/packages/hal/cortexm/stm32/var/current/include/var_io_pins.h b/packages/hal/cortexm/stm32/var/current/include/var_io_pins.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/var/current/include/var_io_pins.h @@ -0,0 +1,502 @@ +#ifndef CYGONCE_HAL_VAR_IO_PINS_H +#define CYGONCE_HAL_VAR_IO_PINS_H +//============================================================================= +// +// var_io_pins.h +// +// Pin configuration and GPIO definitions +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jlarmour +// Date: 2011-11-29 +// Purpose: STM32 variant GPIO and pin configuration specific registers +// Description: +// Usage: Do not include this header file directly. Instead: +// #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#ifndef CYGONCE_HAL_VAR_IO_H +# error Do not include var_io_pins.h directly, use var_io.h +#endif + +//============================================================================= +// GPIO ports - common manifests + +#define CYGHWR_HAL_STM32_GPIO_OSPEED_NA (0) // Convenience define for ease of pin definitions (for F1 actually marks MODE as INPUT) + +//============================================================================= +// GPIO ports - F1 family + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_GPIO_CRL 0x00 +#define CYGHWR_HAL_STM32_GPIO_CRH 0x04 +#define CYGHWR_HAL_STM32_GPIO_IDR 0x08 +#define CYGHWR_HAL_STM32_GPIO_ODR 0x0C +#define CYGHWR_HAL_STM32_GPIO_BSRR 0x10 +#define CYGHWR_HAL_STM32_GPIO_BRR 0x14 +#define CYGHWR_HAL_STM32_GPIO_LCKR 0x18 + +#define CYGHWR_HAL_STM32_GPIO_MODE_IN VALUE_(0,0) // Input mode +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ VALUE_(0,1) // Output mode, max 10MHz +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ VALUE_(0,2) // Output mode, max 2MHz +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ VALUE_(0,3) // Output mode, max 50MHz + +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_LOW (CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_MED (CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_FAST (CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ) +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_HIGH (CYGHWR_HAL_STM32_GPIO_MODE_OUT_FAST) // F1 limited to 50MHz + +// The following allows compatible specification of speed with other parts +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_AT_LEAST(__mhz) ( ((__mhz) <= 2) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ : \ + ((__mhz) <= 10) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ : \ + ((__mhz) <= 50) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ : \ + CYGHWR_HAL_STM32_GPIO_MODE_OUT_HIGH ) + +#define CYGHWR_HAL_STM32_GPIO_MODE_OUT_AT_MOST(__mhz) ( ((__mhz) < 10) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_2MHZ : \ + ((__mhz) < 50) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_10MHZ : \ + ((__mhz) < 100) ? CYGHWR_HAL_STM32_GPIO_MODE_OUT_50MHZ : \ + CYGHWR_HAL_STM32_GPIO_MODE_OUT_HIGH ) + +#define CYGHWR_HAL_STM32_GPIO_CNF_AIN VALUE_(2,0) // Analog input +#define CYGHWR_HAL_STM32_GPIO_CNF_FIN VALUE_(2,1) // Floating input +#define CYGHWR_HAL_STM32_GPIO_CNF_PULL VALUE_(2,2) // Input with pull up/down +#define CYGHWR_HAL_STM32_GPIO_CNF_RESV VALUE_(2,3) // Reserved + +#define CYGHWR_HAL_STM32_GPIO_CNF_GPOPP VALUE_(2,0) // GP output push/pull +#define CYGHWR_HAL_STM32_GPIO_CNF_GPOOD VALUE_(2,1) // GP output open drain +#define CYGHWR_HAL_STM32_GPIO_CNF_AOPP VALUE_(2,2) // Alt output push/pull +#define CYGHWR_HAL_STM32_GPIO_CNF_AOOD VALUE_(2,3) // Alt output open drain + + +// Alternative, more readable, config names +// Inputs +#define CYGHWR_HAL_STM32_GPIO_CNF_ANALOG CYGHWR_HAL_STM32_GPIO_CNF_AIN +#define CYGHWR_HAL_STM32_GPIO_CNF_FLOATING CYGHWR_HAL_STM32_GPIO_CNF_FIN +#define CYGHWR_HAL_STM32_GPIO_CNF_PULLDOWN (CYGHWR_HAL_STM32_GPIO_CNF_PULL) +#define CYGHWR_HAL_STM32_GPIO_CNF_PULLUP (CYGHWR_HAL_STM32_GPIO_CNF_PULL|CYGHWR_HAL_STM32_GPIO_PULLUP) +// Outputs +#define CYGHWR_HAL_STM32_GPIO_CNF_OUT_OPENDRAIN CYGHWR_HAL_STM32_GPIO_CNF_GPOOD +#define CYGHWR_HAL_STM32_GPIO_CNF_OUT_PUSHPULL CYGHWR_HAL_STM32_GPIO_CNF_GPOPP +#define CYGHWR_HAL_STM32_GPIO_CNF_ALT_OPENDRAIN CYGHWR_HAL_STM32_GPIO_CNF_AOOD +#define CYGHWR_HAL_STM32_GPIO_CNF_ALT_PUSHPULL CYGHWR_HAL_STM32_GPIO_CNF_AOPP + + +// This macro packs the port number, bit number, mode and +// configuration for a GPIO pin into a single word. The packing puts +// the mode and config in the ls 5 bits, the bit number in 16:20 and +// the offset of the GPIO port from GPIOA in bits 8:15. The port, mode +// and config are only specified using the last component of the names +// to keep definitions short. + +#define CYGHWR_HAL_STM32_GPIO(__port, __bit, __mode, __cnf ) \ + ((CYGHWR_HAL_STM32_GPIO##__port - CYGHWR_HAL_STM32_GPIOA) | \ + (__bit<<16) | \ + (CYGHWR_HAL_STM32_GPIO_MODE_##__mode) | \ + (CYGHWR_HAL_STM32_GPIO_CNF_##__cnf)) + +// We treat the CNF and MODE fields as a single field to simplify the hardware register access. The CNFMODE fields are split across +// two registers (CRL/CRH) so the passed __pin needs to be in the range 0..7 +#define CYGHWR_HAL_STM32_GPIO_CNFMODE_VAL(__pin, __cnfmode) ((__cnfmode) << ((__pin)<<2)) +#define CYGHWR_HAL_STM32_GPIO_CNFMODE_SET(__pin, __cnfmode, __reg) ((__reg) &= ~MASK_((__pin<<2),4), \ + (__reg) |= CYGHWR_HAL_STM32_GPIO_CNFMODE_VAL(__pin, __cnfmode)) + +// Macros to extract encoded values +#define CYGHWR_HAL_STM32_GPIO_PORT(__pin) (CYGHWR_HAL_STM32_GPIOA+((__pin)&0x0000FF00)) +#define CYGHWR_HAL_STM32_GPIO_BIT(__pin) (((__pin)>>16)&0x1F) +#define CYGHWR_HAL_STM32_GPIO_CFG(__pin) ((__pin)&0xF) +#define CYGHWR_HAL_STM32_GPIO_PULLUP BIT_(4) + +//============================================================================= +// Alternate I/O configuration registers. + +#define CYGHWR_HAL_STM32_AFIO_EVCR 0x00 +#define CYGHWR_HAL_STM32_AFIO_MAPR 0x04 +#define CYGHWR_HAL_STM32_AFIO_EXTICR1 0x08 +#define CYGHWR_HAL_STM32_AFIO_EXTICR2 0x0C +#define CYGHWR_HAL_STM32_AFIO_EXTICR3 0x10 +#define CYGHWR_HAL_STM32_AFIO_EXTICR4 0x14 + +// The following macro allows the four EXTICR registers to be indexed +// as CYGHWR_HAL_STM32_AFIO_EXTICR(1) to CYGHWR_HAL_STM32_AFIO_EXTICR(4) +#define CYGHWR_HAL_STM32_AFIO_EXTICR(__x) (4*((__x)-1)+0x08) + +#define CYGHWR_HAL_STM32_AFIO_EVCR_PIN(__x) VALUE_(0,(__x)) +#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTA VALUE_(4,0) +#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTB VALUE_(4,1) +#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTC VALUE_(4,2) +#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTD VALUE_(4,3) +#define CYGHWR_HAL_STM32_AFIO_EVCR_PORTE VALUE_(4,4) +#define CYGHWR_HAL_STM32_AFIO_EVCR_EVOE BIT_(7) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_SPI1_RMP BIT_(0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_I2C1_RMP BIT_(1) +#define CYGHWR_HAL_STM32_AFIO_MAPR_URT1_RMP BIT_(2) +#define CYGHWR_HAL_STM32_AFIO_MAPR_URT2_RMP BIT_(3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_NO_RMP VALUE_(4,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_P1_RMP VALUE_(4,1) +#define CYGHWR_HAL_STM32_AFIO_MAPR_URT3_FL_RMP VALUE_(4,3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_NO_RMP VALUE_(6,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_P1_RMP VALUE_(6,1) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM1_FL_RMP VALUE_(6,3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_NO_RMP VALUE_(8,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_P1_RMP VALUE_(8,1) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_P2_RMP VALUE_(8,2) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2_FL_RMP VALUE_(8,3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_NO_RMP VALUE_(10,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_P2_RMP VALUE_(10,2) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM3_FL_RMP VALUE_(10,3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM4_RMP BIT_(12) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_NO_RMP VALUE_(13,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_FL1_RMP VALUE_(13,2) +#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN_FL2_RMP VALUE_(13,3) + +#define CYGHWR_HAL_STM32_AFIO_MAPR_PD01_RMP BIT_(15) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM5CH4_RMP BIT_(16) +#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC1EINJ_RMP BIT_(17) +#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC1EREG_RMP BIT_(18) +#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC2EINJ_RMP BIT_(19) +#define CYGHWR_HAL_STM32_AFIO_MAPR_ADC2EREG_RMP BIT_(20) + +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_AFIO_MAPR_ETH_RMP BIT_(21) +#define CYGHWR_HAL_STM32_AFIO_MAPR_CAN2_RMP BIT_(22) +#define CYGHWR_HAL_STM32_AFIO_MAPR_ETH_RMII BIT_(23) +#endif + +#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_FULL VALUE_(24,0) +#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_NORST VALUE_(24,1) +#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_SWDPEN VALUE_(24,2) +#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_SWDPDIS VALUE_(24,4) +#define CYGHWR_HAL_STM32_AFIO_MAPR_SWJ_MASK VALUE_(24,7) + +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +#define CYGHWR_HAL_STM32_AFIO_MAPR_SPI3_RMP BIT_(28) +#define CYGHWR_HAL_STM32_AFIO_MAPR_TIM2ITR1_RMP BIT_(29) +#define CYGHWR_HAL_STM32_AFIO_MAPR_PTP_PPS_RMP BIT_(30) +#endif + +// The following macros are used to generate the bitfields for setting up +// external interrupts. For example, CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTC(12) +// will generate the bitfield which when ORed into the EXTICR4 register will +// set up C12 as the external interrupt pin for the EXTI12 interrupt. +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTA(__x) VALUE_(4*((__x)&3),0) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTB(__x) VALUE_(4*((__x)&3),1) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTC(__x) VALUE_(4*((__x)&3),2) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTD(__x) VALUE_(4*((__x)&3),3) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTE(__x) VALUE_(4*((__x)&3),4) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTF(__x) VALUE_(4*((__x)&3),5) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_PORTG(__x) VALUE_(4*((__x)&3),6) +#define CYGHWR_HAL_STM32_AFIO_EXTICRX_MASK(__x) VALUE_(4*((__x)&3),0xF) + +// AFIO clock control + +#define CYGHWR_HAL_STM32_AFIO_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, AFIO ) + +#endif // if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +//============================================================================= +// GPIO ports - F2/F4 family + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +// GPIO Register offsets. +#define CYGHWR_HAL_STM32_GPIO_MODER 0x00 +#define CYGHWR_HAL_STM32_GPIO_OTYPER 0x04 +#define CYGHWR_HAL_STM32_GPIO_OSPEEDR 0x08 +#define CYGHWR_HAL_STM32_GPIO_PUPDR 0x0C +#define CYGHWR_HAL_STM32_GPIO_IDR 0x10 +#define CYGHWR_HAL_STM32_GPIO_ODR 0x14 +#define CYGHWR_HAL_STM32_GPIO_BSRR 0x18 +#define CYGHWR_HAL_STM32_GPIO_LCKR 0x1C +#define CYGHWR_HAL_STM32_GPIO_AFRL 0x20 +#define CYGHWR_HAL_STM32_GPIO_AFRH 0x24 + +// A helper macro just to allow access to a particular register +#define CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, __offset) ((volatile cyg_uint32 *)( ((char*)__portbaseaddr) + __offset )) + +// GPIO port mode register. +#define CYGHWR_HAL_STM32_GPIO_MODE_GPIO_IN (0) +#define CYGHWR_HAL_STM32_GPIO_MODE_GPIO_OUT (1) +#define CYGHWR_HAL_STM32_GPIO_MODE_ALTFN (2) +#define CYGHWR_HAL_STM32_GPIO_MODE_ANALOG (3) +#define CYGHWR_HAL_STM32_GPIO_MODE_VAL(__pin, __mode) ((__mode) << ((__pin)<<1)) +#define CYGHWR_HAL_STM32_GPIO_MODE_SET(__pin, __mode, __reg) ((__reg) &= ~MASK_((__pin<<1),2), \ + (__reg) |= CYGHWR_HAL_STM32_GPIO_MODE_VAL(__pin, __mode)) + +// GPIO port output type register. +#define CYGHWR_HAL_STM32_GPIO_OTYPE_PUSHPULL (0) +#define CYGHWR_HAL_STM32_GPIO_OTYPE_OPENDRAIN (1) +#define CYGHWR_HAL_STM32_GPIO_OTYPE_VAL(__pin, __otype) VALUE_(__pin,__otype) +#define CYGHWR_HAL_STM32_GPIO_OTYPE_SET(__pin, __otype, __reg) ((__reg) &= ~BIT_(__pin), \ + (__reg) |= CYGHWR_HAL_STM32_GPIO_OTYPE_VAL(__pin, __otype)) +#define CYGHWR_HAL_STM32_GPIO_OTYPE_NA (0) // Convenience define for ease of pin definitions + +// GPIO port output speed register. +#define CYGHWR_HAL_STM32_GPIO_OSPEED_LOW (0) // 2MHz +#define CYGHWR_HAL_STM32_GPIO_OSPEED_2MHZ (0) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_MED (1) // 25MHz +#define CYGHWR_HAL_STM32_GPIO_OSPEED_25MHZ (1) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_FAST (2) // 50MHz +#define CYGHWR_HAL_STM32_GPIO_OSPEED_50MHZ (2) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_HIGH (3) // 100MHZ on 30pF, 80MHz on 15pF +#define CYGHWR_HAL_STM32_GPIO_OSPEED_BAL(__pin, __speed) ((__speed) << ((__pin)<<1)) +#define CYGHWR_HAL_STM32_GPIO_OSPEED_SET(__pin, __speed, __reg) ((__reg) &= ~MASK_((__pin<<1),2), \ + (__reg) |= CYGHWR_HAL_STM32_GPIO_OSPEED_BAL(__pin, __speed)) + +// The following allows compatible specification of speed with other parts +// which have different speed ranges e.g. F1 +#define CYGHWR_HAL_STM32_GPIO_OSPEED_AT_LEAST(__mhz) ( ((__mhz) <= 2) ? CYGHWR_HAL_STM32_GPIO_OSPEED_2MHZ : \ + ((__mhz) <= 25) ? CYGHWR_HAL_STM32_GPIO_OSPEED_25MHZ : \ + ((__mhz) <= 50) ? CYGHWR_HAL_STM32_GPIO_OSPEED_50MHZ : \ + CYGHWR_HAL_STM32_GPIO_OSPEED_HIGH ) + +#define CYGHWR_HAL_STM32_GPIO_OSPEED_AT_MOST(__mhz) ( ((__mhz) < 25) ? CYGHWR_HAL_STM32_GPIO_OSPEED_2MHZ : \ + ((__mhz) < 50) ? CYGHWR_HAL_STM32_GPIO_OSPEED_25MHZ : \ + ((__mhz) < 100) ? CYGHWR_HAL_STM32_GPIO_OSPEED_50MHZ : \ + CYGHWR_HAL_STM32_GPIO_OSPEED_HIGH ) + +// GPIO port pull-up/pull-down register. +#define CYGHWR_HAL_STM32_GPIO_PUPD_NONE (0) +#define CYGHWR_HAL_STM32_GPIO_PUPD_PULLUP (1) +#define CYGHWR_HAL_STM32_GPIO_PUPD_PULLDOWN (2) +#define CYGHWR_HAL_STM32_GPIO_PUPD_VAL(__pin, __pupd) ((__pupd) << ((__pin)<<1)) +#define CYGHWR_HAL_STM32_GPIO_PUPD_SET(__pin, __pupd, __reg) ((__reg) &= ~MASK_(((__pin)<<1),2), \ + (__reg) |= CYGHWR_HAL_STM32_GPIO_PUPD_VAL(__pin, __pupd)) + +// GPIO port input data register. +#define CYGHWR_HAL_STM32_GPIO_IDR_GET(__portbaseaddr, __pin, __val) \ + ((__val) = ( *CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, CYGHWR_HAL_STM32_GPIO_IDR) >> (__pin)) & 1) + +// GPIO port output data register. +// Don't encourage setting it here. Use GPIO_BSRR instead for that. +#define CYGHWR_HAL_STM32_GPIO_ODR_GET(__portbaseaddr, __pin, __val) \ + ((__val) = ( *CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, CYGHWR_HAL_STM32_GPIO_ODR) >> (__pin)) & 1) + +// GPIO port bit set/reset register. +#define CYGHWR_HAL_STM32_GPIO_BSRR_SET(__portbaseaddr, __pin, __val) \ + ( *CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, CYGHWR_HAL_STM32_GPIO_BSRR) = (__val)?(1<<(__pin)):(1<<((__pin)+16))) + +// GPIO port configuration lock register. +#define CYGHWR_HAL_STM32_GPIO_LCKR_LCKK BIT_(16) +#define CYGHWR_HAL_STM32_GPIO_LCKR_LCK(__pin) BIT_((__pin)) + +// GPIO alternate function low register. +#define CYGHWR_HAL_STM32_GPIO_AFRL0 MASK_(0,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL1 MASK_(4,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL2 MASK_(8,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL3 MASK_(12,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL4 MASK_(16,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL5 MASK_(20,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL6 MASK_(24,4) +#define CYGHWR_HAL_STM32_GPIO_AFRL7 MASK_(28,4) +// GPIO alternate function high register. +#define CYGHWR_HAL_STM32_GPIO_AFRH8 MASK_(0,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH9 MASK_(4,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH10 MASK_(8,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH11 MASK_(12,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH12 MASK_(16,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH13 MASK_(20,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH14 MASK_(24,4) +#define CYGHWR_HAL_STM32_GPIO_AFRH15 MASK_(28,4) + +// Set alternate function. We try to keep this as a macro as most times the +// arguments will be constant so can easily be collapsed substantially by the +// compiler. +// Note, this is not interrupt-safe, unavoidably. Provide your own protection +// if that's needed, although in general this will happen at startup time. +#define CYGHWR_HAL_STM32_GPIO_AFR_SET(__portbaseaddr, __pin, __func) \ + CYG_MACRO_START \ + cyg_uint32 __cur_afr, __mask; \ + volatile cyg_uint32 *__reg; \ + cyg_uint8 __reg_pin = (__pin); \ + if (__pin < 8) { \ + __reg = CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, CYGHWR_HAL_STM32_GPIO_AFRL); \ + } else { \ + __reg = CYGHWR_HAL_STM32_GPIO_REG(__portbaseaddr, CYGHWR_HAL_STM32_GPIO_AFRH); \ + __reg_pin -= 8; \ + } \ + HAL_READ_UINT32( __reg, __cur_afr ); \ + __mask = 0xf << (__reg_pin<<2); \ + __cur_afr &= ~__mask; \ + __mask = (__func) << (__reg_pin<<2); \ + __cur_afr |= __mask; \ + HAL_WRITE_UINT32( __reg, __cur_afr ); \ + CYG_MACRO_END + + +// This macro packs the port number, bit number, mode and +// configuration for a GPIO pin into a single word. The packing puts +// the GPIO bank at bits 16:19, the pin at bits 12:15, the mode (i.e. function) +// at bits 10:11, for ALTFN mode the specific mapping at bits 6:9, pushpull(0) +// or open drain(1) at bit 5, pull-up(1) pull-down (2) or neither(0) at +// bits 3:4, and speed at bits 0:2 (low, med, fast, high). +// To keep definitions short, we simplify most of the arguments so they +// can be passed in with only their last components. + +// FIXME: This should be renamed to something like CYGHWR_HAL_STM32_PIN(... when +// bringing F1 into line with this way of declaring pins. + +#define CYGHWR_HAL_STM32_GPIO(__port, __bit, __mode, __af, __ppod, __pupd, __speed) \ + ( ((CYGHWR_HAL_STM32_GPIO##__port - CYGHWR_HAL_STM32_GPIOA) << 6 ) | \ + (__bit << 12) | \ + (CYGHWR_HAL_STM32_GPIO_MODE_##__mode << 10) | \ + (__af << 6) | \ + (CYGHWR_HAL_STM32_GPIO_OTYPE_##__ppod << 5) | \ + (CYGHWR_HAL_STM32_GPIO_PUPD_##__pupd << 3) | \ + (CYGHWR_HAL_STM32_GPIO_OSPEED_##__speed) ) + +// Macros to extract encoded values +#define CYGHWR_HAL_STM32_GPIO_PORT(__pin) (CYGHWR_HAL_STM32_GPIOA+(((__pin)&0xF0000)>>6)) +#define CYGHWR_HAL_STM32_GPIO_BIT(__pin) (((__pin)>>12)&0xF) +#define CYGHWR_HAL_STM32_GPIO_MODE(__pin) (((__pin)>>10)&0x3) +#define CYGHWR_HAL_STM32_GPIO_AF(__pin) (((__pin)>>6)&0xF) +#define CYGHWR_HAL_STM32_GPIO_OPENDRAIN(__pin) (((__pin)>>5)&0x1) +#define CYGHWR_HAL_STM32_GPIO_PULLUPDOWN(__pin) (((__pin)>>3)&0x3) +#define CYGHWR_HAL_STM32_GPIO_SPEED(__pin) ((__pin)&0x7) + +#endif //if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +//============================================================================= + +#define CYGHWR_HAL_STM32_GPIO_NONE (0xFFFFFFFF) + +// Functions and macros to configure GPIO ports. + +__externC void hal_stm32_gpio_set( cyg_uint32 pin ); +__externC void hal_stm32_gpio_out( cyg_uint32 pin, int val ); +__externC void hal_stm32_gpio_in ( cyg_uint32 pin, int *val ); + +#define CYGHWR_HAL_STM32_GPIO_SET(__pin ) hal_stm32_gpio_set( __pin ) +#define CYGHWR_HAL_STM32_GPIO_OUT(__pin, __val ) hal_stm32_gpio_out( __pin, __val ) +#define CYGHWR_HAL_STM32_GPIO_IN(__pin, __val ) hal_stm32_gpio_in( __pin, __val ) + +//----------------------------------------------------------------------------- + +// For the following pin definition macros where __speed is a parameter the +// actual rates available depend on the target family. The generic LOW, MED, +// FAST and HIGH manifests can be used instead of explicit values, or more +// usefully the AT_LEAST(__mhz) and AT_MOST(__mhz) macros can be used to specify +// an acceptable limit instead. + +// The CYGHWR_HAL_STM32_PIN_OUT() macro defines a GPIO output pin. The __ppod +// parameter can be one of PUSHPULL or OPENDRAIN. The __pupd parameter can be +// one of NONE, PULLUP or PULLDOWN. For F1 devices the __pupd parameter is +// not-relevant and is ignored. +// e.g. +// CYGHWR_HAL_STM32_PIN_OUT(B,8,OPENDRAIN,NONE,FAST); +// CYGHWR_HAL_STM32_PIN_OUT(B,9,OPENDRAIN,NONE.AT_LEAST(50)); + +// The CYGHWR_HAL_STM32_PIN_ALTFN_OUT() macro defines an alternative function +// output pin. For F1 family devices the __af field is not-relevant and is +// ignored. The __ppod should be PUSHPULL or OPENDRAIN. The __pupd parameter can +// be one of NONE, PULLUP or PULLDOWN. For F1 devices the __pupd parameter is +// not-relevant and is ignored. +// e.g. +// CYGHWR_HAL_STM32_PIN_ALTFN_OUT(B,6,4,OPENDRAIN,NONE,MED); +// CYGHWR_HAL_STM32_PIN_ALTFN_OUT(B,10,4,OPENDRAIN,NONE,AT_LEAST(10)); + +// The CYGHWR_HAL_STM32_PIN_IN() macro is used to define GPIO input pins. The +// __pupd should be one of NONE. FLOATING, PULLUP or PULLDOWN. +// e.g. +// CYGHWR_HAL_STM32_PIN_IN(B,4,PULLUP); + +// The CYGHWR_HAL_STM32_PIN_ALTFN_IN() macro is used to define alternate +// function input pins. The __ppod parameter can be one of PUSHPULL, +// OPENDRAIN or NA. The __pupd should be one of NONE. FLOATING, PULLUP or +// PULLDOWN. For F1 family devices the __af and _ppod fields are not relevant +// and are ignored, and in reality this macro peforms the same function as +// CYGHWR_HAL_STM32_PIN_IN() for F1 family devices since extra AFIO +// configuration is needed. +// e.g. +// CYGHWR_HAL_STM32_PIN_ALTFN_IN(B,4,6,OPENDRAIN,PULLUP); + +// The CYGHWR_HAL_STM32_PIN_ANALOG() macro defines an analog mode pin. For F1 +// family devices this is for input only, e.g. ADC. + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + +#define CYGHWR_HAL_STM32_GPIO_CNF_NONE (CYGHWR_HAL_STM32_GPIO_CNF_FLOATING) // Should not be needed for F1 family but ensure HIPERFORMANCE compatible name NONE exists + +#define CYGHWR_HAL_STM32_PIN_OUT(__port,__pin,__ppod,__pupd,__speed) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,OUT_##__speed,OUT_##__ppod) + +#define CYGHWR_HAL_STM32_PIN_ALTFN_OUT(__port,__pin,__af,__ppod,__pupd,__speed) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,OUT_##__speed,ALT_##__ppod) + +#define CYGHWR_HAL_STM32_PIN_IN(__port,__pin,__pupd) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,IN,__pupd) + +#define CYGHWR_HAL_STM32_PIN_ALTFN_IN(__port,__pin,__af,__ppod,__pupd) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,IN,__pupd) // NOTE: Identical to CYGHWR_HAL_STM32_PIN_IN() at the moment + +#define CYGHWR_HAL_STM32_PIN_ANALOG(__port,__pin) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,IN,ANALOG) + +#elif defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_GPIO_PUPD_FLOATING (CYGHWR_HAL_STM32_GPIO_PUPD_NONE) // Should not be needed for HIPERFORMANCE family but ensure F1 compatible name FLOATING exists + +#define CYGHWR_HAL_STM32_PIN_OUT(__port,__pin,__ppod,__pupd,__speed) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,GPIO_OUT,0,__ppod,__pupd,__speed) + +#define CYGHWR_HAL_STM32_PIN_ALTFN_OUT(__port,__pin,__af,__ppod,__pupd,__speed) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,ALTFN,__af,__ppod,__pupd,__speed) + +#define CYGHWR_HAL_STM32_PIN_IN(__port,__pin,__pupd) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,GPIO_IN,0,NA,__pupd,NA) + +#define CYGHWR_HAL_STM32_PIN_ALTFN_IN(__port,__pin,__af,__ppod,__pupd) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,ALTFN,__af,__ppod,__pupd,NA) + +#define CYGHWR_HAL_STM32_PIN_ANALOG(__port,__pin) \ + CYGHWR_HAL_STM32_GPIO(__port,__pin,ANALOG,0,NA,NONE,NA) + +#else +#error "Unknown STM32 family for GPIO PIN macros" +#endif + +//----------------------------------------------------------------------------- +// end of var_io_pins.h +#endif // CYGONCE_HAL_VAR_IO_PINS_H diff --git a/packages/hal/cortexm/stm32/var/current/include/var_io_usart.h b/packages/hal/cortexm/stm32/var/current/include/var_io_usart.h new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/var/current/include/var_io_usart.h @@ -0,0 +1,264 @@ +#ifndef CYGONCE_HAL_VAR_IO_USART_H +#define CYGONCE_HAL_VAR_IO_USART_H +//============================================================================= +// +// var_io_usart.h +// +// USART-specific variant definitions +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jlarmour +// Date: 2008-07-30 +// Purpose: STM32 variant USART specific registers +// Description: +// Usage: Do not include this header file directly. Instead: +// #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#ifndef CYGONCE_HAL_VAR_IO_H +# error Do not include var_io_usart.h directly, use var_io.h +#endif + +//============================================================================= +// UARTs + +#define CYGHWR_HAL_STM32_UART_SR 0x00 +#define CYGHWR_HAL_STM32_UART_DR 0x04 +#define CYGHWR_HAL_STM32_UART_BRR 0x08 +#define CYGHWR_HAL_STM32_UART_CR1 0x0C +#define CYGHWR_HAL_STM32_UART_CR2 0x10 +#define CYGHWR_HAL_STM32_UART_CR3 0x14 +#define CYGHWR_HAL_STM32_UART_GTPR 0x18 + +// SR Bits + +#define CYGHWR_HAL_STM32_UART_SR_PE BIT_(0) +#define CYGHWR_HAL_STM32_UART_SR_FE BIT_(1) +#define CYGHWR_HAL_STM32_UART_SR_NE BIT_(2) +#define CYGHWR_HAL_STM32_UART_SR_NF BIT_(2) +#define CYGHWR_HAL_STM32_UART_SR_ORE BIT_(3) +#define CYGHWR_HAL_STM32_UART_SR_IDLE BIT_(4) +#define CYGHWR_HAL_STM32_UART_SR_RXNE BIT_(5) +#define CYGHWR_HAL_STM32_UART_SR_TC BIT_(6) +#define CYGHWR_HAL_STM32_UART_SR_TXE BIT_(7) +#define CYGHWR_HAL_STM32_UART_SR_LBD BIT_(8) +#define CYGHWR_HAL_STM32_UART_SR_CTS BIT_(9) + +// BRR bits + +#define CYGHWR_HAL_STM32_UART_BRR_DIVF(__f) VALUE_(0,__f) +#define CYGHWR_HAL_STM32_UART_BRR_DIVM(__m) VALUE_(4,__m) + +// CR1 bits + +#define CYGHWR_HAL_STM32_UART_CR1_SBK BIT_(0) +#define CYGHWR_HAL_STM32_UART_CR1_RWU BIT_(1) +#define CYGHWR_HAL_STM32_UART_CR1_RE BIT_(2) +#define CYGHWR_HAL_STM32_UART_CR1_TE BIT_(3) +#define CYGHWR_HAL_STM32_UART_CR1_IDLEIE BIT_(4) +#define CYGHWR_HAL_STM32_UART_CR1_RXNEIE BIT_(5) +#define CYGHWR_HAL_STM32_UART_CR1_TCIE BIT_(6) +#define CYGHWR_HAL_STM32_UART_CR1_TXEIE BIT_(7) +#define CYGHWR_HAL_STM32_UART_CR1_PEIE BIT_(8) +#define CYGHWR_HAL_STM32_UART_CR1_PS_EVEN 0 +#define CYGHWR_HAL_STM32_UART_CR1_PS_ODD BIT_(9) +#define CYGHWR_HAL_STM32_UART_CR1_PCE BIT_(10) +#define CYGHWR_HAL_STM32_UART_CR1_WAKE BIT_(11) +#define CYGHWR_HAL_STM32_UART_CR1_M_8 0 +#define CYGHWR_HAL_STM32_UART_CR1_M_9 BIT_(12) +#define CYGHWR_HAL_STM32_UART_CR1_UE BIT_(13) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +#define CYGHWR_HAL_STM32_UART_CR1_OVER8 BIT_(15) +#endif + +// CR2 bits + +#define CYGHWR_HAL_STM32_UART_CR2_ADD(__a) VALUE_(0,__a) +#define CYGHWR_HAL_STM32_UART_CR2_LBDL BIT_(5) +#define CYGHWR_HAL_STM32_UART_CR2_LBDIE BIT_(6) +#define CYGHWR_HAL_STM32_UART_CR2_LBCL BIT_(8) +#define CYGHWR_HAL_STM32_UART_CR2_CPHA BIT_(9) +#define CYGHWR_HAL_STM32_UART_CR2_CPOL BIT_(10) +#define CYGHWR_HAL_STM32_UART_CR2_CLKEN BIT_(11) +#define CYGHWR_HAL_STM32_UART_CR2_STOP_1 VALUE_(12,0) +#define CYGHWR_HAL_STM32_UART_CR2_STOP_0_5 VALUE_(12,1) +#define CYGHWR_HAL_STM32_UART_CR2_STOP_2 VALUE_(12,2) +#define CYGHWR_HAL_STM32_UART_CR2_STOP_1_5 VALUE_(12,3) +#define CYGHWR_HAL_STM32_UART_CR2_LINEN BIT_(14) + +// CR3 bits + +#define CYGHWR_HAL_STM32_UART_CR3_EIE BIT_(0) +#define CYGHWR_HAL_STM32_UART_CR3_IREN BIT_(1) +#define CYGHWR_HAL_STM32_UART_CR3_IRLP BIT_(2) +#define CYGHWR_HAL_STM32_UART_CR3_HDSEL BIT_(3) +#define CYGHWR_HAL_STM32_UART_CR3_NACK BIT_(4) +#define CYGHWR_HAL_STM32_UART_CR3_SCEN BIT_(5) +#define CYGHWR_HAL_STM32_UART_CR3_DMAR BIT_(6) +#define CYGHWR_HAL_STM32_UART_CR3_DMAT BIT_(7) +#define CYGHWR_HAL_STM32_UART_CR3_RTSE BIT_(8) +#define CYGHWR_HAL_STM32_UART_CR3_CTSE BIT_(9) +#define CYGHWR_HAL_STM32_UART_CR3_CTSIE BIT_(10) + +// GTPR fields + +#define CYGHWR_HAL_STM32_UART_GTPR_PSC(__p) VALUE_(0,__p) +#define CYGHWR_HAL_STM32_UART_GTPR_GT(__g) VALUE_(8,__g) + +// UART GPIO pins + +// NOTE: For those UARTS providing a RTS pin the driver uses HW CTS control but +// manually controls the RTS as a GPIO. + +#ifndef CYGHWR_HAL_STM32_UART0_REMAP +#define CYGHWR_HAL_STM32_UART1_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 10, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART1_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 9, 7, PUSHPULL, NONE, 50MHZ ) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART1_REMAP_CONFIG 0 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 +#else // CYGHWR_HAL_STM32_UART0_REMAP +#define CYGHWR_HAL_STM32_UART1_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 7, 7, NA , FLOATING ) +#define CYGHWR_HAL_STM32_UART1_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 6, 7, PUSHPULL, NONE, 50MHZ ) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART1_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_URT1_RMP +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 +#endif // else CYGHWR_HAL_STM32_UART0_REMAP + +#define CYGHWR_HAL_STM32_UART1_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 11, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART1_RTS CYGHWR_HAL_STM32_PIN_OUT( A, 12, PUSHPULL, NONE, 50MHZ ) + +#define CYGHWR_HAL_STM32_UART1_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, UART1 ) + +#ifndef CYGHWR_HAL_STM32_UART1_REMAP +#define CYGHWR_HAL_STM32_UART2_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 3, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART2_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( A, 2, 7, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART2_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( A, 0, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART2_RTS CYGHWR_HAL_STM32_PIN_OUT( A, 1, PUSHPULL, NONE, 50MHZ ) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART2_REMAP_CONFIG 0 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 +#else +#define CYGHWR_HAL_STM32_UART2_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( D, 6, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART2_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( D, 5, 7, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART2_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( D, 3, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART2_RTS CYGHWR_HAL_STM32_PIN_OUT( D, 4, PUSHPULL, NONE, 50MHZ ) +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART2_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_URT2_RMP +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 +#endif + +#define CYGHWR_HAL_STM32_UART2_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, UART2 ) + +#if defined(CYGHWR_HAL_STM32_UART2_REMAP_PARTIAL) + +#define CYGHWR_HAL_STM32_UART3_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 11, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 10, 7, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART3_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 13, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_RTS CYGHWR_HAL_STM32_PIN_OUT( B, 14, PUSHPULL, NONE, 50MHZ ) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART3_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_URT3_P1_RMP +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#elif defined(CYGHWR_HAL_STM32_UART2_REMAP_FULL) + +#define CYGHWR_HAL_STM32_UART3_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( D, 9, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( D, 8, 7, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART3_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( D, 11, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_RTS CYGHWR_HAL_STM32_PIN_OUT( D, 12, PUSHPULL, NONE, 50MHZ ) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART3_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_URT3_FL_RMP +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#else + +#define CYGHWR_HAL_STM32_UART3_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 11, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 10, 7, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART3_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( B, 13, 7, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART3_RTS CYGHWR_HAL_STM32_PIN_OUT( B, 14, PUSHPULL, NONE, 50MHZ ) + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART3_REMAP_CONFIG CYGHWR_HAL_STM32_AFIO_MAPR_URT3_NO_RMP +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#endif + +#define CYGHWR_HAL_STM32_UART3_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, UART3 ) + +#define CYGHWR_HAL_STM32_UART4_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 11, 8, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART4_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 10, 8, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART4_CTS CYGHWR_HAL_STM32_GPIO_NONE +#define CYGHWR_HAL_STM32_UART4_RTS CYGHWR_HAL_STM32_GPIO_NONE +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART4_REMAP_CONFIG 0 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#define CYGHWR_HAL_STM32_UART4_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, UART4 ) + +#define CYGHWR_HAL_STM32_UART5_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( D, 2, 8, NA, FLOATING ) +#define CYGHWR_HAL_STM32_UART5_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 12, 8, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART5_CTS CYGHWR_HAL_STM32_GPIO_NONE +#define CYGHWR_HAL_STM32_UART5_RTS CYGHWR_HAL_STM32_GPIO_NONE +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) +#define CYGHWR_HAL_STM32_UART5_REMAP_CONFIG 0 +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1 + +#define CYGHWR_HAL_STM32_UART5_CLOCK CYGHWR_HAL_STM32_CLOCK( APB1, UART5 ) + +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#define CYGHWR_HAL_STM32_UART6_RX CYGHWR_HAL_STM32_PIN_ALTFN_IN( C, 7, 8, NA, NONE ) +#define CYGHWR_HAL_STM32_UART6_TX CYGHWR_HAL_STM32_PIN_ALTFN_OUT( C, 6, 8, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART6_CTS CYGHWR_HAL_STM32_PIN_ALTFN_IN( G, 15, 8, NA, NONE ) +#define CYGHWR_HAL_STM32_UART6_RTS CYGHWR_HAL_STM32_PIN_ALTFN_OUT( G, 8, 8, PUSHPULL, NONE, 50MHZ ) +#define CYGHWR_HAL_STM32_UART6_CLOCK CYGHWR_HAL_STM32_CLOCK( APB2, UART6 ) + +#endif // CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + +#ifndef __ASSEMBLER__ + +__externC void hal_stm32_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud ); + +#endif + +#endif // CYGONCE_HAL_VAR_IO_USART_H +//----------------------------------------------------------------------------- +// end of var_io_usart.h diff --git a/packages/hal/cortexm/stm32/var/current/src/hal_diag.c b/packages/hal/cortexm/stm32/var/current/src/hal_diag.c --- a/packages/hal/cortexm/stm32/var/current/src/hal_diag.c +++ b/packages/hal/cortexm/stm32/var/current/src/hal_diag.c @@ -72,26 +72,56 @@ typedef struct { int isr_vector; cyg_uint32 rxpin; cyg_uint32 txpin; + cyg_uint32 clkena; +#if defined(CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + cyg_uint32 remap; +#endif cyg_uint32 baud_rate; int irq_state; } channel_data_t; +// If remap isn't supported (e.g. F2/F4 parts) just #define to nothing. The struct initialiser will still work. +#ifndef CYGHWR_HAL_STM32_UART1_REMAP_CONFIG +#define CYGHWR_HAL_STM32_UART1_REMAP_CONFIG +#endif +#ifndef CYGHWR_HAL_STM32_UART2_REMAP_CONFIG +#define CYGHWR_HAL_STM32_UART2_REMAP_CONFIG +#endif +#ifndef CYGHWR_HAL_STM32_UART3_REMAP_CONFIG +#define CYGHWR_HAL_STM32_UART3_REMAP_CONFIG +#endif +#ifndef CYGHWR_HAL_STM32_UART4_REMAP_CONFIG +#define CYGHWR_HAL_STM32_UART4_REMAP_CONFIG +#endif +#ifndef CYGHWR_HAL_STM32_UART5_REMAP_CONFIG +#define CYGHWR_HAL_STM32_UART5_REMAP_CONFIG +#endif + static channel_data_t stm32_ser_channels[] = { #if CYGINT_HAL_STM32_UART0>0 - { 0, CYGHWR_HAL_STM32_UART1, 1000, CYGNUM_HAL_INTERRUPT_UART1, CYGHWR_HAL_STM32_UART1_RX, CYGHWR_HAL_STM32_UART1_TX }, + { 0, CYGHWR_HAL_STM32_UART1, 1000, CYGNUM_HAL_INTERRUPT_UART1, CYGHWR_HAL_STM32_UART1_RX, CYGHWR_HAL_STM32_UART1_TX, + CYGHWR_HAL_STM32_UART1_CLOCK, CYGHWR_HAL_STM32_UART1_REMAP_CONFIG }, #endif #if CYGINT_HAL_STM32_UART1>0 - { 1, CYGHWR_HAL_STM32_UART2, 1000, CYGNUM_HAL_INTERRUPT_UART2, CYGHWR_HAL_STM32_UART2_RX, CYGHWR_HAL_STM32_UART2_TX }, + { 1, CYGHWR_HAL_STM32_UART2, 1000, CYGNUM_HAL_INTERRUPT_UART2, CYGHWR_HAL_STM32_UART2_RX, CYGHWR_HAL_STM32_UART2_TX, + CYGHWR_HAL_STM32_UART2_CLOCK, CYGHWR_HAL_STM32_UART2_REMAP_CONFIG }, #endif #if CYGINT_HAL_STM32_UART2>0 - { 2, CYGHWR_HAL_STM32_UART3, 1000, CYGNUM_HAL_INTERRUPT_UART3, CYGHWR_HAL_STM32_UART3_RX, CYGHWR_HAL_STM32_UART3_TX }, + { 2, CYGHWR_HAL_STM32_UART3, 1000, CYGNUM_HAL_INTERRUPT_UART3, CYGHWR_HAL_STM32_UART3_RX, CYGHWR_HAL_STM32_UART3_TX, + CYGHWR_HAL_STM32_UART3_CLOCK, CYGHWR_HAL_STM32_UART3_REMAP_CONFIG }, #endif #if CYGINT_HAL_STM32_UART3>0 - { 3, CYGHWR_HAL_STM32_UART4, 1000, CYGNUM_HAL_INTERRUPT_UART4, CYGHWR_HAL_STM32_UART4_RX, CYGHWR_HAL_STM32_UART4_TX }, + { 3, CYGHWR_HAL_STM32_UART4, 1000, CYGNUM_HAL_INTERRUPT_UART4, CYGHWR_HAL_STM32_UART4_RX, CYGHWR_HAL_STM32_UART4_TX, + CYGHWR_HAL_STM32_UART4_CLOCK, CYGHWR_HAL_STM32_UART4_REMAP_CONFIG }, #endif #if CYGINT_HAL_STM32_UART4>0 - { 4, CYGHWR_HAL_STM32_UART5, 1000, CYGNUM_HAL_INTERRUPT_UART5, CYGHWR_HAL_STM32_UART5_RX, CYGHWR_HAL_STM32_UART5_TX }, + { 4, CYGHWR_HAL_STM32_UART5, 1000, CYGNUM_HAL_INTERRUPT_UART5, CYGHWR_HAL_STM32_UART5_RX, CYGHWR_HAL_STM32_UART5_TX, + CYGHWR_HAL_STM32_UART5_CLOCK, CYGHWR_HAL_STM32_UART5_REMAP_CONFIG }, +#endif +#if CYGINT_HAL_STM32_UART5>0 + { 5, CYGHWR_HAL_STM32_UART6, 1000, CYGNUM_HAL_INTERRUPT_UART6, CYGHWR_HAL_STM32_UART6_RX, CYGHWR_HAL_STM32_UART6_TX, + CYGHWR_HAL_STM32_UART6_CLOCK }, // UART6 only supported on F2/F4 so no remap config needed. #endif }; @@ -108,6 +138,19 @@ hal_stm32_serial_init_channel(void* __ch CYGHWR_HAL_STM32_GPIO_SET( chan->rxpin ); CYGHWR_HAL_STM32_GPIO_SET( chan->txpin ); + CYGHWR_HAL_STM32_CLOCK_ENABLE( chan->clkena ); + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + if( chan->remap != 0 ) + { + CYG_ADDRESS afio = CYGHWR_HAL_STM32_AFIO; + cyg_uint32 mapr; + CYGHWR_HAL_STM32_CLOCK_ENABLE( CYGHWR_HAL_STM32_AFIO_CLOCK ); + HAL_READ_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + mapr |= chan->remap; + HAL_WRITE_UINT32( afio+CYGHWR_HAL_STM32_AFIO_MAPR, mapr ); + } +#endif // if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) cr2 = CYGHWR_HAL_STM32_UART_CR2_STOP_1; HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_UART_CR2, cr2 ); diff --git a/packages/hal/cortexm/stm32/var/current/src/stm32_dma.c b/packages/hal/cortexm/stm32/var/current/src/stm32_dma.c new file mode 100644 --- /dev/null +++ b/packages/hal/cortexm/stm32/var/current/src/stm32_dma.c @@ -0,0 +1,308 @@ +/*============================================================================= +// +// stm32_dma.c +// +// STM32 DMA support +// +//============================================================================= +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: +// Date: 2009-10-11 +// Purpose: STM32 DMA support +// Description: This file provides the implementation for the STM32's +// on-chip DMA controllers. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include + +#include +#include +#include + +#include +#include + +//============================================================================= + +#if 0 +#define dma_diag( __fmt, ... ) diag_printf("DMA: %20s[%3d]: " __fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__ ); +#define dma_dump_buf(__addr, __size ) diag_dump_buf( __addr, __size ) +#else +#define dma_diag( __fmt, ... ) +#define dma_dump_buf(__addr, __size ) +#endif + +//============================================================================= + +static const struct +{ + CYG_ADDRWORD base; + cyg_uint32 clock; +} hal_stm32_dma_controller[] = +{ + { 0, 0 }, + { CYGHWR_HAL_STM32_DMA1, CYGHWR_HAL_STM32_DMA1_CLOCK }, + { CYGHWR_HAL_STM32_DMA2, CYGHWR_HAL_STM32_DMA2_CLOCK }, +}; + +//----------------------------------------------------------------------------- + +static cyg_uint32 hal_stm32_dma_isr( cyg_vector_t vector, CYG_ADDRWORD data ) +{ + hal_stm32_dma_stream *stream = (hal_stm32_dma_stream *)data; + cyg_uint32 ret = CYG_ISR_HANDLED; + cyg_uint32 isr; + + HAL_READ_UINT32( stream->ctlr+CYGHWR_HAL_STM32_DMA_ISR_REG(stream->stream), isr ); + + dma_diag("ctlr %08x stream %d chan %d isr %08x\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc), isr ); + + if( isr & CYGHWR_HAL_STM32_DMA_ISR_TCIF(stream->stream) ) + { + // Clear all stream interrupt bits + HAL_WRITE_UINT32( stream->ctlr+CYGHWR_HAL_STM32_DMA_IFCR_REG(stream->stream), + CYGHWR_HAL_STM32_DMA_IFCR_MASK(stream->stream) ); + + if( (stream->ccr & CYGHWR_HAL_STM32_DMA_CCR_CIRC) == 0) + { + // Disable the stream + HAL_WRITE_UINT32( stream->ctlr+CYGHWR_HAL_STM32_DMA_CCR(stream->stream), 0 ); + } + + // Update the count + HAL_READ_UINT32( stream->ctlr+CYGHWR_HAL_STM32_DMA_CNDTR(stream->stream), stream->count ); + + ret = CYG_ISR_CALL_DSR; + } + + return ret; +} + +//----------------------------------------------------------------------------- + +static void hal_stm32_dma_dsr( cyg_vector_t vector, cyg_ucount32 count, CYG_ADDRWORD data ) +{ + hal_stm32_dma_stream *stream = (hal_stm32_dma_stream *)data; + + dma_diag("ctlr %08x stream %d chan %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc) ); + + stream->callback( stream, stream->count, stream->data ); + + stream->active = false; +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_init( hal_stm32_dma_stream *stream, int pri ) +{ + stream->ctlr = hal_stm32_dma_controller[CYGHWR_HAL_STM32_DMA_CONTROLLER(stream->desc)].base; + stream->stream = CYGHWR_HAL_STM32_DMA_STREAM(stream->desc); + + dma_diag("ctlr %08x stream %d chan %d pri %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc), pri ); + + cyg_drv_interrupt_create( CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc), + pri, + (CYG_ADDRWORD)stream, + hal_stm32_dma_isr, + hal_stm32_dma_dsr, + &stream->handle, + &stream->interrupt ); + cyg_drv_interrupt_attach( stream->handle ); + cyg_drv_interrupt_unmask( CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc) ); + + // Enable DMA controller clock + CYGHWR_HAL_STM32_CLOCK_ENABLE( hal_stm32_dma_controller[CYGHWR_HAL_STM32_DMA_CONTROLLER(stream->desc)].clock ); + + + // Clear CCR, disable channel and put into known state + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CCR(stream->stream), 0 ); + + + // Initialize a private copy of the CCR, we don't write this to + // the hardware until we are ready to start the transfer. + + stream->ccr = CYGHWR_HAL_STM32_DMA_CCR_EN; + +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + // Select channel number in F2/F4 variants. The F1 variants simply + // have the various device DMA request lines wire-ORed together. + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_CHSEL(CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc)); +#endif + + // Set stream direction + if( CYGHWR_HAL_STM32_DMA_MODE(stream->desc) == CYGHWR_HAL_STM32_DMA_MODE_M2P ) + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_MEM2P; + + // Set memory increment mode + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_MINC; + + // Transfer end interrupt enable + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_TCIE; + + // Use top 2 bits of priority to define DMA stream priority + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_PL((pri>>6)&3); + + dma_diag("ccr %08x\n", stream->ccr); +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_delete( hal_stm32_dma_stream *stream ) +{ + dma_diag("ctlr %08x stream %d chan %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc) ); + + // Clear CCR, disables stream + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CCR(stream->stream), 0 ); + + // Mask, detach and delete interrupt object + cyg_drv_interrupt_mask( CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc) ); + cyg_drv_interrupt_detach( stream->handle ); + cyg_drv_interrupt_delete( stream->handle ); +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_disable( hal_stm32_dma_stream *stream ) +{ + dma_diag("ctlr %08x stream %d chan %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc) ); + + // Clear CCR, disables stream + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CCR(stream->stream), 0 ); +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_poll( hal_stm32_dma_stream *stream ) +{ +// dma_diag("ctlr %08x stream %d chan %d\n", stream->ctlr, stream->stream, +// CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc) ); + + if( stream->active ) + if( hal_stm32_dma_isr( CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc), (CYG_ADDRWORD)stream ) & CYG_ISR_CALL_DSR ) + hal_stm32_dma_dsr( CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc), 1, (CYG_ADDRWORD)stream ); +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_configure( hal_stm32_dma_stream *stream, int tfr_size, cyg_bool no_minc, cyg_bool polled ) +{ + dma_diag("ctlr %08x stream %d chan %d tfr_size %d no_minc %d polled %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc), tfr_size, no_minc, polled ); + + if( tfr_size == 8 ) + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_PSIZE8 | CYGHWR_HAL_STM32_DMA_CCR_MSIZE8; + else if( tfr_size == 16 ) + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_PSIZE16 | CYGHWR_HAL_STM32_DMA_CCR_MSIZE16; + else + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_PSIZE32 | CYGHWR_HAL_STM32_DMA_CCR_MSIZE32; + + // Clear MINC bit if not wanted + if( no_minc ) + stream->ccr &= ~CYGHWR_HAL_STM32_DMA_CCR_MINC; + else + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_MINC; + + // Clear interrupt enables if polled mode, otherwise enable them + if( polled ) + stream->ccr &= ~(CYGHWR_HAL_STM32_DMA_CCR_TCIE | CYGHWR_HAL_STM32_DMA_CCR_TEIE); + else + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_TCIE | CYGHWR_HAL_STM32_DMA_CCR_TEIE; +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_configure_circular( hal_stm32_dma_stream *stream, cyg_bool enable) +{ + if (enable) { + stream->ccr |= CYGHWR_HAL_STM32_DMA_CCR_CIRC; + } else { + stream->ccr &= ~CYGHWR_HAL_STM32_DMA_CCR_CIRC; + } +} + +//----------------------------------------------------------------------------- + +void hal_stm32_dma_start( hal_stm32_dma_stream *stream, void *memory, CYG_ADDRESS peripheral, cyg_uint32 size ) +{ + dma_diag("ctlr %08x stream %d chan %d mem %08x peri %08x size %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc), memory, peripheral, size ); + + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CMAR(stream->stream), (cyg_uint32)memory ); + + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CPAR(stream->stream), peripheral ); + + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CNDTR(stream->stream), size ); + + HAL_WRITE_UINT32(stream->ctlr+CYGHWR_HAL_STM32_DMA_CCR(stream->stream), stream->ccr ); + + stream->active = true; +} + +//============================================================================= + +void hal_stm32_dma_show( hal_stm32_dma_stream *stream ) +{ + cyg_uint32 dma = stream->ctlr; + cyg_uint32 chan = stream->stream; + cyg_uint32 reg; + + dma_diag("ctlr %08x stream %d chan %d\n", stream->ctlr, stream->stream, + CYGHWR_HAL_STM32_DMA_CHANNEL(stream->desc) ); + dma_diag("vector %d stream->ccr %08x\n", CYGHWR_HAL_STM32_DMA_INTERRUPT(stream->desc), stream->ccr ); + + HAL_READ_UINT32( dma+CYGHWR_HAL_STM32_DMA_ISR_REG(chan), reg ); + dma_diag("DMA ISR: %08x\n", reg ); + + HAL_READ_UINT32( dma+CYGHWR_HAL_STM32_DMA_CCR(chan), reg ); dma_diag("DMA %d CCR: %08x\n", chan, reg ); + HAL_READ_UINT32( dma+CYGHWR_HAL_STM32_DMA_CNDTR(chan), reg ); dma_diag("DMA %d CNDTR: %08x\n", chan, reg ); + HAL_READ_UINT32( dma+CYGHWR_HAL_STM32_DMA_CPAR(chan), reg ); dma_diag("DMA %d CPAR: %08x\n", chan, reg ); + HAL_READ_UINT32( dma+CYGHWR_HAL_STM32_DMA_CMAR(chan), reg ); dma_diag("DMA %d CMAR: %08x\n", chan, reg ); + +} + + +//============================================================================= +/* EOF stm32_dma.c */ diff --git a/packages/hal/cortexm/stm32/var/current/src/stm32_misc.c b/packages/hal/cortexm/stm32/var/current/src/stm32_misc.c --- a/packages/hal/cortexm/stm32/var/current/src/stm32_misc.c +++ b/packages/hal/cortexm/stm32/var/current/src/stm32_misc.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2011, 2014 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -40,6 +40,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): nickg +// Contributors: jld // Date: 2008-07-30 // Description: // @@ -63,6 +64,11 @@ #include // HAL header #include // HAL header +#ifdef CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER +#include // CYG_ISR_HANDLED +#include // __profile_hit() +#endif + //========================================================================== // Clock Initialization values @@ -121,6 +127,9 @@ cyg_uint32 hal_stm32_hclk; cyg_uint32 hal_stm32_pclk1; cyg_uint32 hal_stm32_pclk2; cyg_uint32 hal_cortexm_systick_clock; +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +cyg_uint32 hal_stm32_qclk; +#endif void hal_start_clocks( void ); cyg_uint32 hal_exti_isr( cyg_uint32 vector, CYG_ADDRWORD data ); @@ -129,11 +138,6 @@ cyg_uint32 hal_exti_isr( cyg_uint32 vect void hal_variant_init( void ) { - CYG_ADDRESS rcc = CYGHWR_HAL_STM32_RCC; - - // Enable all devices in RCC - HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_APB2ENR, 0xFFFFFFFF ); - HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_APB1ENR, 0xFFFFFFFF ); #if 1 //!defined(CYG_HAL_STARTUP_RAM) hal_start_clocks(); @@ -161,15 +165,11 @@ void hal_start_clocks( void ) // Reset RCC - HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, 0x00000001 ); + cr = CYGHWR_HAL_STM32_RCC_CR_HSION; + HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, cr ); // Start up HSE clock - HAL_READ_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, cr ); - cr &= CYGHWR_HAL_STM32_RCC_CR_HSEON|CYGHWR_HAL_STM32_RCC_CR_HSEBYP; - HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, cr ); - - HAL_READ_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, cr ); cr |= CYGHWR_HAL_STM32_RCC_CR_HSEON; HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CR, cr ); @@ -182,25 +182,78 @@ void hal_start_clocks( void ) // Configure clocks - hal_stm32_sysclk = CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK; + // Temporarily divide by 4 until we've dealt with potential large + // multiplications overflow. + hal_stm32_sysclk = CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK >> 2; cfgr = 0; +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) + #if defined(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE_HSE) cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PLLSRC_HSE; -#elif defined(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE_HSE_HALF) - cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PLLSRC_HSE | - CYGHWR_HAL_STM32_RCC_CFGR_PLLXTPRE; +#endif + + // Just a little sanity check. +#if defined(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE_HSI) && (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV != 2) +# error PLL PREDIV must be 2 +#endif + + // Ordering could be important if divisions below cause truncation, so multiply first. + hal_stm32_sysclk *= CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL; + +#ifdef CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + HAL_WRITE_UINT32( rcc + CYGHWR_HAL_STM32_RCC_CFGR2, + CYGHWR_HAL_STM32_RCC_CFGR2_PREDIV1(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV-1) ); + hal_stm32_sysclk /= CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV; +#else + // Non-connectivity parts can only use PLLXTPRE + if ( CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 2 ) + { + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PLLXTPRE; // irrelevant if HSI used, so just set anyway. hal_stm32_sysclk /= 2; -#elif defined(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE_HSI_HALF) - hal_stm32_sysclk /= 2; + } #endif + hal_stm32_sysclk <<= 2; // return to correct range now we've dealt with risk of overflow. cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PLLMUL(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL); cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_HPRE; cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PPRE1; cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PPRE2; +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + +#if defined(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE_HSE) + cfgr |= CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLSRC_HSE; +#endif + + cfgr |= CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLM(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV); + cfgr |= CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLN(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL); + // Ordering could be important if divisions below cause truncation, so multiply first. + hal_stm32_sysclk *= CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL; + hal_stm32_sysclk /= CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV; + + hal_stm32_sysclk <<= 2; // return to correct range now we've dealt with risk of overflow. + + cfgr |= CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLP(CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV); + cfgr |= CYGHWR_HAL_STM32_RCC_PLLCFGR_PLLQ(CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV); + + // qclk divides down VCO output, so calc it first before updating sysclk for PLLP + hal_stm32_qclk = hal_stm32_sysclk / CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV; + + hal_stm32_sysclk /= CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV; + + HAL_WRITE_UINT32( rcc + CYGHWR_HAL_STM32_RCC_PLLCFGR, cfgr ); + + cfgr = CYGHWR_HAL_STM32_RCC_CFGR_HPRE; + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PPRE1; + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_PPRE2; + + // RTCPRE divides down HSE, which is the input clock. Must be 1MHz. + cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_RTCPRE( CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK/1000000 ); + +#endif // elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + HAL_WRITE_UINT32( rcc+CYGHWR_HAL_STM32_RCC_CFGR, cfgr ); // Enable the PLL and wait for it to lock @@ -214,6 +267,7 @@ void hal_start_clocks( void ) } while( !(cr & CYGHWR_HAL_STM32_RCC_CR_PLLRDY) ); // Now switch to use PLL as SYSCLK + // TODO: make this configurable between HSI, HSE and PLL cfgr |= CYGHWR_HAL_STM32_RCC_CFGR_SW_PLL; @@ -226,11 +280,14 @@ void hal_start_clocks( void ) // Calculate clocks from configuration - hal_stm32_sysclk *= CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL; hal_stm32_hclk = hal_stm32_sysclk / CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV; hal_stm32_pclk1 = hal_stm32_hclk / CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV; hal_stm32_pclk2 = hal_stm32_hclk / CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV; +#ifdef CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE_INTERNAL + hal_cortexm_systick_clock = hal_stm32_hclk; +#else hal_cortexm_systick_clock = hal_stm32_hclk / 8; +#endif } //========================================================================== @@ -271,6 +328,9 @@ cyg_uint32 hal_exti_isr( cyg_uint32 vect __externC void hal_stm32_gpio_set( cyg_uint32 pin ) { + // FIXME: Power on GPIO ports selectively here, rather than + // platform having to power them all on for boot. +#if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_F1) cyg_uint32 port = CYGHWR_HAL_STM32_GPIO_PORT(pin); int bit = CYGHWR_HAL_STM32_GPIO_BIT(pin); cyg_uint32 cm = CYGHWR_HAL_STM32_GPIO_CFG(pin); @@ -281,8 +341,7 @@ cyg_uint32 hal_exti_isr( cyg_uint32 vect if( bit > 7 ) port += 4, bit -= 8; HAL_READ_UINT32( port, cr ); - cr &= ~(0xF<<(bit*4)); - cr |= cm<<(bit*4); + CYGHWR_HAL_STM32_GPIO_CNFMODE_SET(bit,cm,cr); HAL_WRITE_UINT32( port, cr ); // If this is a pullup/down input, set the ODR bit to switch on @@ -299,26 +358,99 @@ cyg_uint32 hal_exti_isr( cyg_uint32 vect odr &= ~(1<>bit)&1; +#elif defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) + CYG_ADDRESS port = CYGHWR_HAL_STM32_GPIO_PORT(pin); + int bit = CYGHWR_HAL_STM32_GPIO_BIT(pin); + + CYGHWR_HAL_STM32_GPIO_IDR_GET( port, bit, *val ); +#endif // if defined (CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE) +} + +//========================================================================== +// Clock support. +// +// These functions provide support for enabling and disabling clock +// control bits. + +__externC void hal_stm32_clock_enable( cyg_uint32 desc ) +{ + cyg_uint32 r; + cyg_uint32 reg = CYGHWR_HAL_STM32_RCC+CYGHWR_HAL_STM32_CLOCK_REG(desc); + HAL_READ_UINT32( reg, r ); + r |= BIT_(CYGHWR_HAL_STM32_CLOCK_PIN(desc)); + HAL_WRITE_UINT32( reg, r ); +} + +__externC void hal_stm32_clock_disable( cyg_uint32 desc ) +{ + cyg_uint32 r; + cyg_uint32 reg = CYGHWR_HAL_STM32_RCC+CYGHWR_HAL_STM32_CLOCK_REG(desc); + HAL_READ_UINT32( reg, r ); + r &= ~BIT_(CYGHWR_HAL_STM32_CLOCK_PIN(desc)); + HAL_WRITE_UINT32( reg, r ); } //========================================================================== @@ -334,7 +466,6 @@ void hal_stm32_bd_protect( int protect ) cr &= ~CYGHWR_HAL_STM32_PWR_CR_DBP; else cr |= CYGHWR_HAL_STM32_PWR_CR_DBP; - HAL_WRITE_UINT32( pwr+CYGHWR_HAL_STM32_PWR_CR, cr ); } @@ -350,8 +481,14 @@ void hal_stm32_uart_setbaud( cyg_uint32 cyg_uint32 int_div, frac_div; cyg_uint32 brr; - if( base == CYGHWR_HAL_STM32_UART1 ) + if( base == CYGHWR_HAL_STM32_UART1 || +#ifdef CYGHWR_HAL_STM32_UART6 + base == CYGHWR_HAL_STM32_UART6 || +#endif + 0) + { apbclk = hal_stm32_pclk2; + } int_div = (25 * apbclk ) / (4 * baud ); brr = ( int_div / 100 ) << 4; @@ -387,4 +524,51 @@ cyg_uint32 hal_stm32_timer_clock( CYG_AD } //========================================================================== +// Profiling timer +// +// Implementation of profiling support using general-purpose timer TIM2. + +#ifdef CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER +// Use TIM2 for profiling +#define STM32_TIMER_PROFILE CYGHWR_HAL_STM32_TIM2 +#define STM32_CLOCK_PROFILE CYGHWR_HAL_STM32_TIM2_CLOCK +#define HAL_INTERRUPT_PROFILE CYGNUM_HAL_INTERRUPT_TIM2 + +// Profiling timer ISR +static cyg_uint32 profile_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) +{ + extern HAL_SavedRegisters *hal_saved_interrupt_state; + + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_SR, 0); // clear interrupt pending flag + HAL_INTERRUPT_ACKNOWLEDGE(HAL_INTERRUPT_PROFILE); + __profile_hit(hal_saved_interrupt_state->u.interrupt.pc); + return CYG_ISR_HANDLED; +} + +// Profiling timer setup +int hal_enable_profile_timer(int resolution) +{ + CYG_ASSERT(resolution < 0x10000, "Invalid profile timer resolution"); // 16 bits only + + // Enable clock + CYGHWR_HAL_STM32_CLOCK_ENABLE(STM32_CLOCK_PROFILE); + + // Attach ISR + HAL_INTERRUPT_ATTACH(HAL_INTERRUPT_PROFILE, &profile_isr, 0x1111, 0); + HAL_INTERRUPT_UNMASK(HAL_INTERRUPT_PROFILE); + + // Setup timer + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_PSC, + (hal_stm32_timer_clock(STM32_TIMER_PROFILE) / 1000000) - 1); // prescale to microseconds + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_CR2, 0); + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_DIER, CYGHWR_HAL_STM32_TIM_DIER_UIE); + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_ARR, resolution); + HAL_WRITE_UINT32(STM32_TIMER_PROFILE+CYGHWR_HAL_STM32_TIM_CR1, CYGHWR_HAL_STM32_TIM_CR1_CEN); + + return resolution; +} + +#endif // CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER + +//========================================================================== // EOF stm32_misc.c diff --git a/packages/hal/cortexm/stm32/var/current/tests/timers.c b/packages/hal/cortexm/stm32/var/current/tests/timers.c --- a/packages/hal/cortexm/stm32/var/current/tests/timers.c +++ b/packages/hal/cortexm/stm32/var/current/tests/timers.c @@ -120,7 +120,11 @@ struct timer timers[] = { 5, CYGHWR_HAL_STM32_TIM5, CYGNUM_HAL_INTERRUPT_TIM5, 0x60, 1453 }, { 6, CYGHWR_HAL_STM32_TIM6, CYGNUM_HAL_INTERRUPT_TIM6, 0x70, 1931 }, { 7, CYGHWR_HAL_STM32_TIM7, CYGNUM_HAL_INTERRUPT_TIM7, 0x80, 2011 }, +#ifdef CYGNUM_HAL_INTERRUPT_TIM8_UP { 8, CYGHWR_HAL_STM32_TIM8, CYGNUM_HAL_INTERRUPT_TIM8_UP, 0x90, 2345 }, +#elif defined(CYGNUM_HAL_INTERRUPT_TIM8_UP_TIM13) + { 8, CYGHWR_HAL_STM32_TIM8, CYGNUM_HAL_INTERRUPT_TIM8_UP_TIM13, 0x90, 2345 }, +#endif #endif { 0, 0, 0, 0 } }; diff --git a/packages/hal/frv/arch/current/ChangeLog b/packages/hal/frv/arch/current/ChangeLog --- a/packages/hal/frv/arch/current/ChangeLog +++ b/packages/hal/frv/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_frv.cdl: Eliminate some warnings. [ Bugzilla 1001083 ] + 2004-09-03 Mark Salter 2004-09-03 David Woodhouse diff --git a/packages/hal/frv/arch/current/cdl/hal_frv.cdl b/packages/hal/frv/arch/current/cdl/hal_frv.cdl --- a/packages/hal/frv/arch/current/cdl/hal_frv.cdl +++ b/packages/hal/frv/arch/current/cdl/hal_frv.cdl @@ -64,7 +64,7 @@ cdl_package CYGPKG_HAL_FRV { # special rule used to build any include files, etc, used by assembly code make -priority 1 { frv.inc : /src/hal_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,frv.tmp -o hal_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,frv.tmp -o hal_mk_defs.tmp -S $< fgrep .equ hal_mk_defs.tmp | sed s/#// | sed s/\\.equ/#define/ > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 frv.tmp >> $(notdir $@).deps @@ -83,7 +83,7 @@ cdl_package CYGPKG_HAL_FRV { make { /lib/target.ld: /src/frv.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/i386/arch/current/ChangeLog b/packages/hal/i386/arch/current/ChangeLog --- a/packages/hal/i386/arch/current/ChangeLog +++ b/packages/hal/i386/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_i386.cdl: Eliminate some warnings. [ Bugzilla 1001083 ] + 2005-09-19 David Vrabel * src/redboot_linux_exec.c: No need to include pcmb_serial.h. diff --git a/packages/hal/i386/arch/current/cdl/hal_i386.cdl b/packages/hal/i386/arch/current/cdl/hal_i386.cdl --- a/packages/hal/i386/arch/current/cdl/hal_i386.cdl +++ b/packages/hal/i386/arch/current/cdl/hal_i386.cdl @@ -75,7 +75,7 @@ cdl_package CYGPKG_HAL_I386 { make { /lib/target.ld: /src/i386.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/i386/pc/current/ChangeLog b/packages/hal/i386/pc/current/ChangeLog --- a/packages/hal/i386/pc/current/ChangeLog +++ b/packages/hal/i386/pc/current/ChangeLog @@ -1,3 +1,8 @@ +2011-08-25 John Dallaway + + * misc/grub.cfg: Add example GRUB2 configuration file. Patch from + Stephen Polkowski. [ Bugzilla 1001254 ] + 2009-01-31 Bart Veer * cdl/hal_i386_pc.cdl: update compiler flags for gcc 4.x @@ -505,7 +510,7 @@ 2000-02-15 Nick Garnett + + * include/pcmb.inc: To allow the BIOS timer interrupt handler to + switch off the drive, we need to make sure interrupts are enabled. + 2006-06-02 Nick Garnett * include/pcmb_io.h (HAL_PCI_TRANSLATE_INTERRUPT): Fixed PCI diff --git a/packages/hal/i386/pcmb/current/include/pcmb.inc b/packages/hal/i386/pcmb/current/include/pcmb.inc --- a/packages/hal/i386/pcmb/current/include/pcmb.inc +++ b/packages/hal/i386/pcmb/current/include/pcmb.inc @@ -214,9 +214,12 @@ _endload: 1: - /* Lets be nice and wait for the diskette drive motor to go off - * before continuing. */ + /* Let's be nice and wait for the diskette drive motor to go off + * before continuing. To allow the BIOS timer interrupt handler + * to switch off the drive, we need to make sure interrupts are + * enabled. */ + sti movw $0x40, %ax movw %ax, %es movl $0x40, %ebx diff --git a/packages/hal/misc/freescale/edma/current/ChangeLog b/packages/hal/misc/freescale/edma/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/ChangeLog @@ -0,0 +1,67 @@ +2014-02-13 Ilija Kocho + + * misc/freescale/edma/current/doc/edma.sgml + * misc/freescale/edma/current/doc/freescale_begin.sgml + * misc/freescale/edma/current/doc/freescale_end.sgml + New: Add Freescale eDMA to eCos reference manual. + +2013-08-26 Ilija Kocho + + * include/freescale_edma.h: Fix FREESCALE_EDMA_NBYTES_MLOFFYES_NBYTES_M bug + [ Bugzilla 1001896 ] + +2013-05-04 Ilija Kocho + + * cdl/hal_freescale_edma.cdl: Remove requirement for WRITETHRU cache mode + that raised conflict when cache was disabled. Bug reported by Mike Jones. + [ Bugzilla 1001838 ] + +2013-04-01 Ilija Kocho + + * src/hal_freescale_edma.c: Add clock gating enable. + +2013-02-06 Stefan Singer + Ilija Kocho + + * include/freescale_edma.h src/hal_freescale_edma.c: + enhanced endianness support for devices with big and little endian + added support for MPC5xxx in addition to Kinetis + (see Bugzilla 1001752). + +2012-05-04 Ilija Kocho + + * cdl/hal_freescale_edma.cdl + * include/freescale_edma.h + * src/hal/freescale_edma.c + Add support for 32 channel eDMA [Bugzilla 1001579] + +2012-01-06 Ilija Kocho + + * cdl/hal_freescale_edma.cdl + * include/freescale_edma.h + * src/hal/freescale_edma.c + New package -- Freescale eDMA DMA controller support [Bugzilla 1001450] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/misc/freescale/edma/current/cdl/hal_freescale_edma.cdl b/packages/hal/misc/freescale/edma/current/cdl/hal_freescale_edma.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/cdl/hal_freescale_edma.cdl @@ -0,0 +1,146 @@ +##========================================================================== +## +## hal_freescale_edma.cdl +## +## Cortex-M Freescale Kinetis eDMA +## +##========================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): Ilija Kocho +## Date: 2011-12-11 +## +######DESCRIPTIONEND#### +## +##========================================================================== + +cdl_package CYGPKG_HAL_FREESCALE_EDMA { + display "Freescale eDMA controller" + hardware + + include_dir cyg/hal + compile hal_freescale_edma.c + + active_if CYGINT_HAL_DMA + + cdl_option CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM { + display "Number of DMA channels" + flavor data + legal_values { 16 32 } + default_value 16 + } + + cdl_option CYGOPT_HAL_FREESCALE_EDMA_ERCA { + display "Round robin channel arbitration" + flavor bool + default_value 0 + } + + cdl_option CYGOPT_HAL_FREESCALE_EDMA_EMLM { + display "Enable minor loop mapping" + flavor bool + default_value 1 + } + + cdl_option CYGOPT_HAL_FREESCALE_EDMA_CLM { + display "Continuous link mode" + flavor bool + active_if CYGOPT_HAL_FREESCALE_EDMA_EMLM + default_value 0 + } + + cdl_option CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE { + display "Number of channels in DMA group" + flavor data + calculated 16 + } + + cdl_component CYGHWR_HAL_FREESCALE_EDMA_GROPS { + display "Groups" + flavor none + no_define + active_if { CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > + CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE } + + cdl_option CYGNUM_HAL_FREESCALE_EDMA_GROUP_NUM { + display "Number of DMA groups" + flavor data + calculated { CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE ? + CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM / + CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE : 0} + } + + cdl_option CYGNUM_HAL_FREESCALE_EDMA_GR0_PRIO { + display "Group 0 priority" + flavor data + legal_values 0 1 + default_value 0 + } + + cdl_option CYGNUM_HAL_FREESCALE_EDMA_GR1_PRIO { + display "Group 1 priority" + flavor data + legal_values 0 1 + calculated { CYGNUM_HAL_FREESCALE_EDMA_GR0_PRIO ? 0 : 1 } + } + + cdl_option CYGOPT_HAL_FREESCALE_EDMA_ERGA { + display "Round robin group arbitration" + active_if { CYGNUM_HAL_FREESCALE_EDMA_GROUP_NUM > 1 } + flavor bool + default_value 0 + } + } + + cdl_option CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM { + display "Channels per DMAMUX" + flavor data + calculated 16 + } + + cdl_component CYGNUM_HAL_FREESCALE_DMAMUX_NUM { + display "Number of DMAMUX units" + flavor data + active_if { CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > + CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM + } + calculated { CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM ? + ( CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM / + CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM ) : 0 + } + } +} + +# EOF hal_freescale_dma.cdl diff --git a/packages/hal/misc/freescale/edma/current/doc/edma.sgml b/packages/hal/misc/freescale/edma/current/doc/edma.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/doc/edma.sgml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Freescale eDMA + + + CYGPKG_HAL_FREESCALE_EDMA + eCos Support for Freescale eDMA Direct Memory Access controller + + + Description + + eDMA is enhanced Direct Memory Access controller found on various Freescale + microcontroller families. It is combined with different architectures such as Power Architecture, + Coldfire/M68K, ARM, Cortex-M, etc. + + + The eDMA HAL library provides generic support for module configuration and initialization as well as for executing of DMA transfers. + Most common usage of eDMA is as an enhancement of other device. eDMA acts as a cross-bar master and executes fast data + transfers on behalf of slave devices. + DMA can also perform memory to memory transfers on direct request by the application. + In following text the devices and applications + that use DMA shall be referenced as [DMA] users. + + + Configuration + The eDMA package CYGPKG_HAL_FREESCALE_EDMA is activated by implementing CYGINT_HAL_DMA interface. + The CDL provides configuration of DMA multiplexer, channel priorities and interrupt priorities. + For the systems with more than 16 channels also there is a provision for configuration of group priorities. + Please refer to CDL and eDMA reference manual for details of module operation. + + eDMA API + + hal_freescale_edma_init_chanset + + void hal_freescale_edma_init_chanset(cyghwr_hal_freescale_dma_set_t *inidat_p); + + + Initialise inidat_p channel set. A channel set consists of + one or more DMA channels. + + + The initialisation parameters are provided by following structure: + + // DMA Channel set + typedef struct cyghwr_hal_freescale_dma_set_s { + cyghwr_hal_freescale_edma_t* edma_p; // eDMA controller [register set] + const cyghwr_hal_freescale_dma_chan_set_t *chan_p; // Channel configuration data + cyg_uint8 chan_n; // Number of channels + } cyghwr_hal_freescale_dma_set_t; + + + where: + + chan_p points to an array of + chan_n channels. + + + Channel configuration is provided by following structure. + + // DMA Channel data + typedef struct cyghwr_hal_freescale_dma_chan_set_s { + cyg_uint8 dma_src; // Data source + cyg_uint8 dma_chan_i; // Channel index + cyg_uint8 dma_prio; // DMA channel priority + cyg_uint8 isr_prio; // Interrupt priority + cyg_uint8 isr_num; // Interrupt vector + cyg_uint8 isr_ena; // Interruot enable + } cyghwr_hal_freescale_dma_chan_set_t; + + + The DMA channel priority dma_chan_i must be unique for every channel. + In order to satisfy this requirement the channel that previously had the given priority shall + be assigned with the previous prioruty of the target channel. + As a special (and most common case) FREESCALE_EDMA_DCHPRI_ASIS shall keep the + priority unchanged. + + + + + hal_freescale_edma_transfer_init + + void hal_freescale_edma_transfer_init(cyghwr_hal_freescale_dma_set_t *inidat_p, + cyg_uint8 chan_i, + const cyghwr_hal_freescale_edma_tcd_t *tcd_cfg_p + ); + + + Initialise transfer. trannsfer on chan_i channel of + edma_p shall be initialised. with transfer control descriptor + tcd_cfg_p. + + + + + hal_freescale_edma_transfer_diag + + void hal_freescale_edma_transfer_diag(cyghwr_hal_freescale_edma_t + *edma_p, cyg_uint8 chan_i, cyg_bool recurse); + + + Show contents of a transfer control descriptor set. + + + + + eDMA operations + + Following inline functions and macros initiate or stop respective DMA operations. + + + void hal_freescale_edma_erq_enable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_erq_disable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_erq_cleardone(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_irq_enable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_irq_disable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_irq_clear(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_transfer_clear(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + void hal_freescale_edma_transfer_start(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i); + + #define HAL_DMA_TRANSFER_STOP(__edma,__chan) \ + hal_freescale_edma_erq_disable(__edma, __chan) + #define HAL_DMA_TRANSFER_START(__edma,__chan) \ + hal_freescale_edma_erq_enable(__edma, __chan) + #define HAL_DMA_TRANSFER_CLEAR(__edma,__chan) \ + hal_freescale_edma_cleardone(__edma, __chan) + + + + + + + + diff --git a/packages/hal/misc/freescale/edma/current/doc/freescale_begin.sgml b/packages/hal/misc/freescale/edma/current/doc/freescale_begin.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/doc/freescale_begin.sgml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Freescale Peripheral Collection Support diff --git a/packages/hal/misc/freescale/edma/current/doc/freescale_end.sgml b/packages/hal/misc/freescale/edma/current/doc/freescale_end.sgml new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/doc/freescale_end.sgml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/hal/misc/freescale/edma/current/include/freescale_edma.h b/packages/hal/misc/freescale/edma/current/include/freescale_edma.h new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/include/freescale_edma.h @@ -0,0 +1,542 @@ +#ifndef CYGONCE_FREESCALE_EDMA_H +#define CYGONCE_FREESCALE_EDMA_H +//=========================================================================== +// +// freescale_edma.h +// +// Freescale eDMA specific registers +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-11-04 +// Purpose: Freescale eDMA specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include +#if defined CYGHWR_HAL_EDMA_TCD_SECTION || defined CYGHWR_HAL_EDMA_MEM_SECTION +# include +#endif + +// ---------------------------------------------------------------------------- +// DMAMUX DMA Multiplexer + +// DMAMUX - Peripheral register structure +typedef volatile struct cyghwr_hal_freescale_dmamux_s { + cyg_uint8 chcfg[CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM]; // Channel Configuration Register +} cyghwr_hal_freescale_dmamux_t; + +// DMAMUX - Peripheral instance base addresses - defined in HAL (typically var_io_devs.h) +// CYGHWR_IO_FREESCALE_DMAMUX0_P defined in HAL +// CYGHWR_IO_FREESCALE_DMAMUX1_P defined in HAL + + +// ---------------------------------------------------------------------------- +// DMAMUX Register Masks + +// CHCFG Bit Fields +#define FREESCALE_DMAMUX_CHCFG_SOURCE_M 0x3F +#define FREESCALE_DMAMUX_CHCFG_SOURCE(__val) \ + (__val & FREESCALE_DMAMUX_CHCFG_SOURCE_M) +#define FREESCALE_DMAMUX_CHCFG_TRIG_M 0x40 +#define FREESCALE_DMAMUX_CHCFG_TRIG_S 6 +#define FREESCALE_DMAMUX_CHCFG_ENBL_M 0x80 +#define FREESCALE_DMAMUX_CHCFG_ENBL_S 7 +#define FREESCALE_DMAMUX_CHCFG_ASIS FREESCALE_DMAMUX_CHCFG_ENBL_M + +// DMAMUX DMA request sources +// Provided by HAL (typically var_io_devs.h) +#define FREESCALE_DMAMUX_SRC(__src) (_src) + +//--------------------------------------------------------------------------- +// eDMA + +// Transfer control descriptor +typedef volatile struct cyghwr_hal_freescale_edma_tcd_s + cyghwr_hal_freescale_edma_tcd_t; +#define CYGBLD_FREESCALE_EDMA_TCD_ALIGN CYGBLD_ATTRIB_ALIGN(32) +struct cyghwr_hal_freescale_edma_tcd_s { + volatile void* saddr; // Source Address + +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian + cyg_uint16 attr; // Transfer Attributes + cyg_uint16 soff; // Signed Source Address Offset +#else // AKA Little endian + cyg_uint16 soff; // Signed Source Address Offset + cyg_uint16 attr; // Transfer Attributes +#endif + + union { + cyg_uint32 mlno; // Minor Byte Count (Minor Loop Dis) + // Signed Minor Loop Off: + cyg_uint32 mloffyes; // MinoL Eena and Off Dis + cyg_uint32 mloffno; // Minor Loop and Off Ena + } nbytes; + cyg_uint32 slast; // Last Source Address Adjustment + volatile void *daddr; // Destination Address + +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian + + union { // Current Minor Loop Link: + cyg_uint16 elinkyes; // Major Loop Count (Ch Lnkng Ena) + cyg_uint16 elinkno; // Major Loop Count (Ch Lnkng Dis) + } citer; + cyg_uint16 doff; // Signed Destination Address Offset +#else // AKA Little endian + cyg_uint16 doff; // Signed Destination Address Offset + union { // Current Minor Loop Link: + cyg_uint16 elinkyes; // Major Loop Count (Ch Lnkng Ena) + cyg_uint16 elinkno; // Major Loop Count (Ch Lnkng Dis) + } citer; +#endif + + union { + cyg_uint32 dlast; // Last Dst Addr Adj/Scat Gath Addr + cyghwr_hal_freescale_edma_tcd_t *sga; // Last Dst Addr Adj/Scat Gath Addr + } dlast_sga; + +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian + union { // Beginning Minor Loop Link: + cyg_uint16 elinkno; // Major Loop Cnt (Ch Lnkng Dis) + cyg_uint16 elinkyes; // Major Loop Cnt (Ch Lnkng Ena) + } biter; + cyg_uint16 csr; // Control and Status +#else // AKA Little endian + cyg_uint16 csr; // Control and Status + union { // Beginning Minor Loop Link: + cyg_uint16 elinkno; // Major Loop Cnt (Ch Lnkng Dis) + cyg_uint16 elinkyes; // Major Loop Cnt (Ch Lnkng Ena) + } biter; +#endif +}; + +// DMA - Peripheral register structure +typedef volatile struct cyghwr_hal_freescale_edma_s { + cyg_uint32 cr; // Control Register // 0x0000 + cyg_uint32 es; // Error Status Register // 0x0004 + cyg_uint32 reserved_0; // 0x0008 + cyg_uint32 erq; // Enable Request Register // 0x000C + cyg_uint32 reserved_1; // 0x0010 + cyg_uint32 eei; // Enable Error Interrupt Register // 0x0014 +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian + cyg_uint8 serq; // Set Enable Request Register // 0x0018 + cyg_uint8 cerq; // Clear Enable Request Register // 0x0019 + cyg_uint8 seei; // Set Enable Error Interrupt Register // 0x001A + cyg_uint8 ceei; // Clear Enable Error Interrupt Register // 0x001B + cyg_uint8 cint; // Clear Interrupt Request Register // 0x001C + cyg_uint8 cerr; // Clear Error Register // 0x001D + cyg_uint8 ssrt; // Set START Bit Register // 0x001E + cyg_uint8 cdne; // Clear DONE Status Bit Register // 0x001F +#else // AKA Little endian + cyg_uint8 ceei; // Clear Enable Error Interrupt Register + cyg_uint8 seei; // Set Enable Error Interrupt Register + cyg_uint8 cerq; // Clear Enable Request Register + cyg_uint8 serq; // Set Enable Request Register + cyg_uint8 cdne; // Clear DONE Status Bit Register + cyg_uint8 ssrt; // Set START Bit Register + cyg_uint8 cerr; // Clear Error Register + cyg_uint8 cint; // Clear Interrupt Request Register +#endif + cyg_uint32 reserved_2; // 0x0020 + cyg_uint32 irq; // Interrupt Request Register // 0x0024 + cyg_uint32 reserved_3; // 0x0028 + cyg_uint32 err; // Error Register // 0x002C + cyg_uint32 reserved_4; // 0x0030 + cyg_uint32 hrs; // Hardware Request Status Register // 0x0034 + cyg_uint8 reserved_5[0x8100 - (0x8034 + 4)]; + cyg_uint8 dchpri[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]; // Priorities + cyg_uint8 reserved_6[0x9000 - 0x8100 - CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]; + cyghwr_hal_freescale_edma_tcd_t + tcd[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]; // Transfer control descriptors +} cyghwr_hal_freescale_edma_t; + +// CYGHWR_IO_FREESCALE_EDMA0_P is defined by HAL +// #define CYGHWR_IO_FREESCALE_EDMA0_P + +// ---------------------------------------------------------------------------- +// DMA Register Bits + +// CR Bit Fields +#define FREESCALE_EDMA_CR_EDBG_M 0x2 +#define FREESCALE_EDMA_CR_EDBG_S 1 +#define FREESCALE_EDMA_CR_ERCA_M 0x4 +#define FREESCALE_EDMA_CR_ERCA_S 2 +#define FREESCALE_EDMA_CR_ERGA_M 0x8 +#define FREESCALE_EDMA_CR_ERGA_S 3 +#define FREESCALE_EDMA_CR_HOE_M 0x10 +#define FREESCALE_EDMA_CR_HOE_S 4 +#define FREESCALE_EDMA_CR_HALT_M 0x20 +#define FREESCALE_EDMA_CR_HALT_S 5 +#define FREESCALE_EDMA_CR_CLM_M 0x40 +#define FREESCALE_EDMA_CR_CLM_S 6 +#define FREESCALE_EDMA_CR_EMLM_M 0x80 +#define FREESCALE_EDMA_CR_EMLM_S 7 +#define FREESCALE_EDMA_CR_ECX_M 0x10000 +#define FREESCALE_EDMA_CR_ECX_S 16 +#define FREESCALE_EDMA_CR_CX_M 0x20000 +#define FREESCALE_EDMA_CR_CX_S 17 + +#define FREESCALE_EDMA_GR_PRI(_gr_, _pr_) VALUE_((8 + 2 * _gr_), (_pr_ & 0x3)) + +// ES Bit Fields +#define FREESCALE_EDMA_ES_DBE_M 0x1 +#define FREESCALE_EDMA_ES_DBE_S 0 +#define FREESCALE_EDMA_ES_SBE_M 0x2 +#define FREESCALE_EDMA_ES_SBE_S 1 +#define FREESCALE_EDMA_ES_SGE_M 0x4 +#define FREESCALE_EDMA_ES_SGE_S 2 +#define FREESCALE_EDMA_ES_NCE_M 0x8 +#define FREESCALE_EDMA_ES_NCE_S 3 +#define FREESCALE_EDMA_ES_DOE_M 0x10 +#define FREESCALE_EDMA_ES_DOE_S 4 +#define FREESCALE_EDMA_ES_DAE_M 0x20 +#define FREESCALE_EDMA_ES_DAE_S 5 +#define FREESCALE_EDMA_ES_SOE_M 0x40 +#define FREESCALE_EDMA_ES_SOE_S 6 +#define FREESCALE_EDMA_ES_SAE_M 0x80 +#define FREESCALE_EDMA_ES_SAE_S 7 +#define FREESCALE_EDMA_ES_ERRCHN_M 0xF00 +#define FREESCALE_EDMA_ES_ERRCHN_S 8 +#define FREESCALE_EDMA_ES_ERRCHN(__val) \ + VALUE_(FREESCALE_EDMA_ES_ERRCHN_S, __val) +#define FREESCALE_EDMA_ES_CPE_M 0x4000 +#define FREESCALE_EDMA_ES_CPE_S 14 +#define FREESCALE_EDMA_ES_GPE_M 0x8000 +#define FREESCALE_EDMA_ES_GPE_S 15 +#define FREESCALE_EDMA_ES_ECX_M 0x10000 +#define FREESCALE_EDMA_ES_ECX_S 16 +#define FREESCALE_EDMA_ES_VLD_M 0x80000000 +#define FREESCALE_EDMA_ES_VLD_S 31 +// ERQ Bit Fields +#define FREESCALE_EDMA_ERQ(__rq) BIT(__rq) +// EEI Bit Fields +#define FREESCALE_EDMA_EEI(__rq) BIT(__rq) +#define FREESCALE_EDMA_CHAN_M 0x1F +// CEEI Bit Fields +#define FREESCALE_EDMA_CEEI_CEEI(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_CEEI_CAEE_M 0x40 +#define FREESCALE_EDMA_CEEI_CAEE_S 6 +#define FREESCALE_EDMA_CEEI_NOP_M 0x80 +#define FREESCALE_EDMA_CEEI_NOP_S 7 +// SEEI Bit Fields +#define FREESCALE_EDMA_SEEI_SEEI(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_SEEI_SAEE_M 0x40 +#define FREESCALE_EDMA_SEEI_SAEE_S 6 +#define FREESCALE_EDMA_SEEI_NOP_M 0x80 +#define FREESCALE_EDMA_SEEI_NOP_S 7 +// CERQ Bit Fields +#define FREESCALE_EDMA_CERQ_CERQ(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_CERQ_CAER_M 0x40 +#define FREESCALE_EDMA_CERQ_CAER_S 6 +#define FREESCALE_EDMA_CERQ_NOP_M 0x80 +#define FREESCALE_EDMA_CERQ_NOP_S 7 +// SERQ Bit Fields +#define FREESCALE_EDMA_SERQ_SERQ(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_SERQ_SAER_M 0x40 +#define FREESCALE_EDMA_SERQ_SAER_S 6 +#define FREESCALE_EDMA_SERQ_NOP_M 0x80 +#define FREESCALE_EDMA_SERQ_NOP_S 7 +// CDNE Bit Fields +#define FREESCALE_EDMA_CDNE_CDNE(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_CDNE_CADN_M 0x40 +#define FREESCALE_EDMA_CDNE_CADN_S 6 +#define FREESCALE_EDMA_CDNE_NOP_M 0x80 +#define FREESCALE_EDMA_CDNE_NOP_S 7 +// SSRT Bit Fields +#define FREESCALE_EDMA_SSRT_SSRT(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_SSRT_SAST_M 0x40 +#define FREESCALE_EDMA_SSRT_SAST_S 6 +#define FREESCALE_EDMA_SSRT_NOP_M 0x80 +#define FREESCALE_EDMA_SSRT_NOP_S 7 +// CERR Bit Fields +#define FREESCALE_EDMA_CERR_CERR(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_CERR_CAEI_M 0x40 +#define FREESCALE_EDMA_CERR_CAEI_S 6 +#define FREESCALE_EDMA_CERR_NOP_M 0x80 +#define FREESCALE_EDMA_CERR_NOP_S 7 +// CINT Bit Fields +#define FREESCALE_EDMA_CINT_CINT(__val) (__val & FREESCALE_EDMA_CHAN_M) +#define FREESCALE_EDMA_CINT_CAIR_M 0x40 +#define FREESCALE_EDMA_CINT_CAIR_S 6 +#define FREESCALE_EDMA_CINT_NOP_M 0x80 +#define FREESCALE_EDMA_CINT_NOP_S 7 +// INT Bit Fields +#define FREESCALE_EDMA_INT(__ch) BIT(__ch) +// ERR Bit Fields +#define FREESCALE_EDMA_ERR(__ch) BIT(__ch) +// HRS Bit Fields +#define FREESCALE_EDMA_HRS(__ch) BIT(__ch) +// DCHPRI Bit Fields + +#define FREESCALE_EDMA_DCHPRI_CHPRI_M 0xF + +#define FREESCALE_EDMA_DCHPRI_CHPRI(__val) \ + (__val & FREESCALE_EDMA_DCHPRI_CHPRI_M) +#define FREESCALE_EDMA_DCHPRI_DPA_M 0x40 +#define FREESCALE_EDMA_DCHPRI_DPA_S 6 +#define FREESCALE_EDMA_DCHPRI_ECP_M 0x80 +#define FREESCALE_EDMA_DCHPRI_ECP_S 7 +#define FREESCALE_EDMA_DCHPRI_ASIS 0x20 +// SOFF Bit Fields +#define FREESCALE_EDMA_SOFF_SOFF_M 0xFFFF +#define FREESCALE_EDMA_SOFF_SOFF(__val) \ + (__val & FREESCALE_EDMA_SOFF_SOFF_M) +// ATTR Bit Fields +#define FREESCALE_EDMA_ATTR_DSIZE_M 0x7 +#define FREESCALE_EDMA_ATTR_DSIZE(__val) \ + (__val & FREESCALE_EDMA_ATTR_DSIZE_M) +#define FREESCALE_EDMA_ATTR_DMOD_M 0xF8 +#define FREESCALE_EDMA_ATTR_DMOD_S 3 +#define FREESCALE_EDMA_ATTR_DMOD(__val) \ + VALUE_(FREESCALE_EDMA_ATTR_DMOD_S, __val) +#define FREESCALE_EDMA_ATTR_SSIZE_M 0x700 +#define FREESCALE_EDMA_ATTR_SSIZE_S 8 +#define FREESCALE_EDMA_ATTR_SSIZE(__val) \ + VALUE_(FREESCALE_EDMA_ATTR_SSIZE_S, __val) +#define FREESCALE_EDMA_ATTR_SMOD_M 0xF800 +#define FREESCALE_EDMA_ATTR_SMOD_S 11 +#define FREESCALE_EDMA_ATTR_SMOD(__val) \ + VALUE_(FREESCALE_EDMA_ATTR_SMOD_S, __val) +#define FREESCALE_EDMA_ATTR_SIZE_8 0 +#define FREESCALE_EDMA_ATTR_SIZE_16 1 +#define FREESCALE_EDMA_ATTR_SIZE_32 2 +#define FREESCALE_EDMA_ATTR_SIZE_16B 4 +// NBYTES_MLOFFNO Bit Fields +#define FREESCALE_EDMA_NBYTES_MLOFFNO_NBYTES_M 0x3FFFFFFF +#define FREESCALE_EDMA_NBYTES_MLOFFNO_NBYTES(__val) \ + (__val & FREESCALE_EDMA_NBYTES_MLOFFNO_NBYTES_M) +#define FREESCALE_EDMA_NBYTES_MLOFFNO_DMLOE_M 0x40000000 +#define FREESCALE_EDMA_NBYTES_MLOFFNO_DMLOE_S 30 +#define FREESCALE_EDMA_NBYTES_MLOFFNO_SMLOE_M 0x80000000 +#define FREESCALE_EDMA_NBYTES_MLOFFNO_SMLOE_S 31 +// NBYTES_MLOFFYES Bit Fields +#define FREESCALE_EDMA_NBYTES_MLOFFYES_NBYTES_M 0x3FF +#define FREESCALE_EDMA_NBYTES_MLOFFYES_NBYTES(__val) \ + (__val & FREESCALE_EDMA_NBYTES_MLOFFYES_NBYTES_M) +#define FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF_M 0x3FFFFC00 +#define FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF_S 10 +#define FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF(__val) \ + VALUE_(FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF_S, __val) +#define FREESCALE_EDMA_NBYTES_MLOFFYES_DMLOE_M 0x40000000 +#define FREESCALE_EDMA_NBYTES_MLOFFYES_DMLOE_S 30 +#define FREESCALE_EDMA_NBYTES_MLOFFYES_SMLOE_M 0x80000000 +#define FREESCALE_EDMA_NBYTES_MLOFFYES_SMLOE_S 31 +// DOFF Bit Fields +#define FREESCALE_EDMA_DOFF_DOFF_M 0xFFFF +#define FREESCALE_EDMA_DOFF_DOFF(__val) (__val & FREESCALE_EDMA_DOFF_DOFF_M) +// CITER_ELINKYES Bit Fields +#define FREESCALE_EDMA_CITER_ELINKYES_CITER_M 0x1FF +#define FREESCALE_EDMA_CITER_ELINKYES_CITER(__val) \ + (__val & FREESCALE_EDMA_CITER_ELINKYES_CITER_M) +#define FREESCALE_EDMA_CITER_ELINKYES_LINKCH_M 0x1E00 +#define FREESCALE_EDMA_CITER_ELINKYES_LINKCH_S 9 +#define FREESCALE_EDMA_CITER_ELINKYES_LINKCH(__val) \ + VALUE_(FREESCALE_EDMA_CITER_ELINKYES_LINKCH_S, __val) +#define FREESCALE_EDMA_CITER_ELINKYES_ELINK_M 0x8000 +#define FREESCALE_EDMA_CITER_ELINKYES_ELINK_S 15 +// CITER_ELINKNO Bit Fields +#define FREESCALE_EDMA_CITER_ELINKNO_CITER_M 0x7FFF +#define FREESCALE_EDMA_CITER_ELINKNO_CITER(__val) \ + (__val & FREESCALE_EDMA_CITER_ELINKNO_CITER_M) +#define FREESCALE_EDMA_CITER_ELINKNO_ELINK_M 0x8000 +#define FREESCALE_EDMA_CITER_ELINKNO_ELINK_S 15 +// CSR Bit Fields +#define FREESCALE_EDMA_CSR_START_M 0x1 +#define FREESCALE_EDMA_CSR_START_S 0 +#define FREESCALE_EDMA_CSR_INTMAJOR_M 0x2 +#define FREESCALE_EDMA_CSR_INTMAJOR_S 1 +#define FREESCALE_EDMA_CSR_INTHALF_M 0x4 +#define FREESCALE_EDMA_CSR_INTHALF_S 2 +#define FREESCALE_EDMA_CSR_DREQ_M 0x8 +#define FREESCALE_EDMA_CSR_DREQ_S 3 +#define FREESCALE_EDMA_CSR_ESG_M 0x10 +#define FREESCALE_EDMA_CSR_ESG_S 4 +#define FREESCALE_EDMA_CSR_MAJORELINK_M 0x20 +#define FREESCALE_EDMA_CSR_MAJORELINK_S 5 +#define FREESCALE_EDMA_CSR_ACTIVE_M 0x40 +#define FREESCALE_EDMA_CSR_ACTIVE_S 6 +#define FREESCALE_EDMA_CSR_DONE_M 0x80 +#define FREESCALE_EDMA_CSR_DONE_S 7 +#define FREESCALE_EDMA_CSR_MAJORLINKCH_M 0xF00 +#define FREESCALE_EDMA_CSR_MAJORLINKCH_S 8 +#define FREESCALE_EDMA_CSR_MAJORLINKCH(__val) \ + VALUE_(FREESCALE_EDMA_CSR_MAJORLINKCH_S, __val) +#define FREESCALE_EDMA_CSR_BWC_M 0xC000 +#define FREESCALE_EDMA_CSR_BWC_S 14 +#define FREESCALE_EDMA_CSR_BWC(__val) \ + VALUE_(FREESCALE_EDMA_CSR_BWC_S, __val) +#define FREESCALE_EDMA_CSR_BWC_0 0 +#define FREESCALE_EDMA_CSR_BWC_MEDIUM FREESCALE_EDMA_CSR_BWC(2) +#define FREESCALE_EDMA_CSR_BWC_NICE FREESCALE_EDMA_CSR_BWC(3) + +// BITER_ELINKNO Bit Fields +#define FREESCALE_EDMA_BITER_ELINKNO_BITER_M 0x7FFF +#define FREESCALE_EDMA_BITER_ELINKNO_BITER(__val) \ + (__val FREESCALE_EDMA_BITER_ELINKNO_BITER_M) +#define FREESCALE_EDMA_BITER_ELINKNO_ELINK_M 0x8000 +#define FREESCALE_EDMA_BITER_ELINKNO_ELINK_S 15 +// BITER_ELINKYES Bit Fields +#define FREESCALE_EDMA_BITER_ELINKYES_BITER_M 0x1FF +#define FREESCALE_EDMA_BITER_ELINKYES_BITER(__val) \ + (__val & FREESCALE_EDMA_BITER_ELINKYES_BITER_M) +#define FREESCALE_EDMA_BITER_ELINKYES_LINKCH_M 0x1E00 +#define FREESCALE_EDMA_BITER_ELINKYES_LINKCH_S 9 +#define FREESCALE_EDMA_BITER_ELINKYES_LINKCH(__val) \ + VALUE_(FREESCALE_EDMA_BITER_ELINKYES_LINKCH_S, __val) +#define FREESCALE_EDMA_BITER_ELINKYES_ELINK_M 0x8000 +#define FREESCALE_EDMA_BITER_ELINKYES_ELINK_S 15 + +// EDMA buffer descriptor memory section +#ifdef CYGHWR_HAL_EDMA_TCD_SECTION +# define EDMA_RAM_TCD_SECTION CYGBLD_ATTRIB_SECTION(CYGHWR_HAL_EDMA_TCD_SECTION) +#else +# define EDMA_RAM_MEM_SECTION +#endif // CYGHWR_HAL_EDMA_MEM_SECTION + +// EDMA buffer memory section +#ifdef CYGHWR_HAL_EDMA_BUF_SECTION +# define EDMA_RAM_BUF_SECTION CYGBLD_ATTRIB_SECTION(CYGHWR_HAL_EDMA_BUF_SECTION) +#else +# define EDMA_RAM_BUF_SECTION +#endif // CYGHWR_HAL_EDMA_BUF_SECTION + +//----------------------------------------------------------------------------- + +// DMA Channel data +typedef struct cyghwr_hal_freescale_dma_chan_set_s { + cyg_uint8 dma_src; // Data source + cyg_uint8 dma_chan_i; // Channel index + cyg_uint8 dma_prio; // DMA channel priority + cyg_uint8 isr_prio; // Interrupt priority + cyg_uint8 isr_num; // Interrupt vector + cyg_uint8 isr_ena; // Interruot enable +} cyghwr_hal_freescale_dma_chan_set_t; + +// DMA Channel set +typedef struct cyghwr_hal_freescale_dma_set_s { + cyghwr_hal_freescale_edma_t* edma_p; + const cyghwr_hal_freescale_dma_chan_set_t *chan_p; + cyg_uint8 chan_n; +} cyghwr_hal_freescale_dma_set_t; + + +__externC void +hal_freescale_edma_init_chanset(cyghwr_hal_freescale_dma_set_t *inidat_p); + +__externC void +hal_freescale_edma_diag(const cyghwr_hal_freescale_dma_set_t *inidat_p, cyg_uint32 mask); + +__externC void +hal_freescale_edma_transfer_init(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i, + const cyghwr_hal_freescale_edma_tcd_t *tcd_cfg_p); +__externC void +hal_freescale_edma_tcd_diag(cyghwr_hal_freescale_edma_tcd_t *tcd_p, cyg_int32 chan_i, const char *prefix); + +__externC void +hal_freescale_edma_transfer_diag (cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i, cyg_bool recurse); + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_erq_enable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->serq = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_erq_disable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->cerq = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_cleardone(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->cdne = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_irq_enable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->seei = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_irq_disable(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->ceei = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_irq_clear(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->cint = chan_i; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_transfer_clear(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->tcd[chan_i].csr &= ~FREESCALE_EDMA_CSR_DONE_M; +} + +CYGBLD_FORCE_INLINE void +hal_freescale_edma_transfer_start(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i) +{ + edma_p->ssrt = chan_i; +} + +#define HAL_DMA_TRANSFER_STOP(__edma,__chan) \ + hal_freescale_edma_erq_disable(__edma, __chan) +#define HAL_DMA_TRANSFER_START(__edma,__chan) \ + hal_freescale_edma_erq_enable(__edma, __chan) +#define HAL_DMA_TRANSFER_CLEAR(__edma,__chan) \ + hal_freescale_edma_cleardone(__edma, __chan) + +// end of var_io_dma.h +#endif // CYGONCE_FREESCALE_EDMA_H diff --git a/packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c b/packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c new file mode 100644 --- /dev/null +++ b/packages/hal/misc/freescale/edma/current/src/hal_freescale_edma.c @@ -0,0 +1,359 @@ +//=========================================================================== +// +// hal_freescale_edma.c +// +// Freescale eDMA support library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Ilija Kocho +// Date: 2011-11-04 +// Purpose: Freescale eDMA specific functions +// Description: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif + +#include +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include // HAL header +#include // Freescale eDMA defs + +// Channel priority register indexing +#if (CYG_BYTEORDER == CYG_MSBFIRST) // AKA Big endian + +#define EDMA_CHAN_PRIORITY_I(__chan_i) (__chan_i) + +#else // AKA Big endian +// Indices for cyghwr_hal_freescale_edma_t::dchpri[] +enum { + FREESCALE_DMA_PRI_CH3, FREESCALE_DMA_PRI_CH2, + FREESCALE_DMA_PRI_CH1, FREESCALE_DMA_PRI_CH0, + FREESCALE_DMA_PRI_CH7, FREESCALE_DMA_PRI_CH6, + FREESCALE_DMA_PRI_CH5, FREESCALE_DMA_PRI_CH4, + FREESCALE_DMA_PRI_CH11, FREESCALE_DMA_PRI_CH10, + FREESCALE_DMA_PRI_CH9, FREESCALE_DMA_PRI_CH8, + FREESCALE_DMA_PRI_CH15, FREESCALE_DMA_PRI_CH14, + FREESCALE_DMA_PRI_CH13, FREESCALE_DMA_PRI_CH12 +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 + , + FREESCALE_DMA_PRI_CH19, FREESCALE_DMA_PRI_CH18, + FREESCALE_DMA_PRI_CH17, FREESCALE_DMA_PRI_CH16, + FREESCALE_DMA_PRI_CH23, FREESCALE_DMA_PRI_CH22, + FREESCALE_DMA_PRI_CH21, FREESCALE_DMA_PRI_CH20, + FREESCALE_DMA_PRI_CH27, FREESCALE_DMA_PRI_CH26, + FREESCALE_DMA_PRI_CH25, FREESCALE_DMA_PRI_CH24, + FREESCALE_DMA_PRI_CH31, FREESCALE_DMA_PRI_CH30, + FREESCALE_DMA_PRI_CH29, FREESCALE_DMA_PRI_CH28 +#endif +}; + +const cyg_uint8 const PRICHAN_I[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM] = +{ + FREESCALE_DMA_PRI_CH0, FREESCALE_DMA_PRI_CH1, + FREESCALE_DMA_PRI_CH2, FREESCALE_DMA_PRI_CH3, + FREESCALE_DMA_PRI_CH4, FREESCALE_DMA_PRI_CH5, + FREESCALE_DMA_PRI_CH6, FREESCALE_DMA_PRI_CH7, + FREESCALE_DMA_PRI_CH8, FREESCALE_DMA_PRI_CH9, + FREESCALE_DMA_PRI_CH10, FREESCALE_DMA_PRI_CH11, + FREESCALE_DMA_PRI_CH12, FREESCALE_DMA_PRI_CH13, + FREESCALE_DMA_PRI_CH14, FREESCALE_DMA_PRI_CH15 +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + , + FREESCALE_DMA_PRI_CH16, FREESCALE_DMA_PRI_CH17, + FREESCALE_DMA_PRI_CH18, FREESCALE_DMA_PRI_CH19, + FREESCALE_DMA_PRI_CH20, FREESCALE_DMA_PRI_CH21, + FREESCALE_DMA_PRI_CH22, FREESCALE_DMA_PRI_CH23, + FREESCALE_DMA_PRI_CH24, FREESCALE_DMA_PRI_CH25, + FREESCALE_DMA_PRI_CH26, FREESCALE_DMA_PRI_CH27, + FREESCALE_DMA_PRI_CH28, FREESCALE_DMA_PRI_CH29, + FREESCALE_DMA_PRI_CH30, FREESCALE_DMA_PRI_CH31 +#endif +}; + +#define EDMA_CHAN_PRIORITY_I(__chan_i) (PRICHAN_I[__chan_i]) + +#endif + +// Find an eDMA channel with given priority +static volatile cyg_uint8* +hal_freescale_edma_find_chan_with_pri(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint32 pri, cyg_uint32 group_i) +{ + volatile cyg_uint8 *chan_p; + + for(chan_p = &edma_p->dchpri[group_i * CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE]; + chan_p < &edma_p->dchpri[group_i * CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + + CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE]; + chan_p++) + { + if((*chan_p & FREESCALE_EDMA_DCHPRI_CHPRI_M) == pri) break; + } +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + if(0 == group_i){ + if(chan_p >= &edma_p->dchpri[CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE]) + chan_p = NULL; + } +#endif + if(chan_p >= &edma_p->dchpri[CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM]) + chan_p = NULL; + + return chan_p; +} + +// Initialize an eDMA channel +// If DMA prority change is required than old priority is assigned to the channel +// that before this call had requested priority. +void +hal_freescale_edma_init_1chan( + cyghwr_hal_freescale_edma_t *edma_p, + const cyghwr_hal_freescale_dma_chan_set_t *chan_p) +{ + cyg_uint8 oldprio; + cyghwr_hal_freescale_dmamux_t *dmamux_p; + volatile cyg_uint8 *prev_ch_reqprio_p; // Previous chan with req. prio. + volatile cyg_uint8 *chcfg_p; + cyg_uint32 group_i; + +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + dmamux_p = chan_p->dma_chan_i < CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM ? + CYGHWR_IO_FREESCALE_DMAMUX0_P : + CYGHWR_IO_FREESCALE_DMAMUX1_P; +#else + dmamux_p = CYGHWR_IO_FREESCALE_DMAMUX0_P; +#endif + chcfg_p = &dmamux_p->chcfg[chan_p->dma_chan_i % CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM]; + edma_p->cerq = chan_p->dma_chan_i; + + if(chan_p->dma_src & FREESCALE_DMAMUX_CHCFG_SOURCE_M) { + *chcfg_p = chan_p->dma_src; + } else if(!(chan_p->dma_src & FREESCALE_DMAMUX_CHCFG_ASIS)) { + *chcfg_p = 0; + } + + if((chan_p->dma_prio != FREESCALE_EDMA_DCHPRI_ASIS) && + (edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)] != chan_p->dma_prio)) + { + group_i = chan_p->dma_chan_i >= CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE ? 1 : 0; + if((prev_ch_reqprio_p = + hal_freescale_edma_find_chan_with_pri(edma_p, chan_p->dma_prio, group_i))) + { + oldprio = edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)]; + edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_p->dma_chan_i)] = chan_p->dma_prio; + *prev_ch_reqprio_p = oldprio; + } + } +} + +// Init DMA controller + +const cyg_uint32 FREESCALE_EDMA_CR_INI = 0 +#ifdef CYGOPT_HAL_FREESCALE_EDMA_EMLM + | FREESCALE_EDMA_CR_EMLM_M +#endif +#ifdef CYGOPT_HAL_FREESCALE_EDMA_CLM + | FREESCALE_EDMA_CR_CLM_M +#endif +#ifdef CYGOPT_HAL_FREESCALE_EDMA_ERCA + | FREESCALE_EDMA_CR_ERCA_M +#endif +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 +#ifdef CYGOPT_HAL_FREESCALE_EDMA_ERGA + | FREESCALE_EDMA_CR_ERGA_M +#endif + | FREESCALE_EDMA_GR_PRI(0, CYGNUM_HAL_FREESCALE_EDMA_GR0_PRIO) + | FREESCALE_EDMA_GR_PRI(1, CYGNUM_HAL_FREESCALE_EDMA_GR1_PRIO) +#endif + ; + +void +hal_freescale_edma_init(cyghwr_hal_freescale_edma_t *edma_p) +{ + cyg_uint32 regval; + + CYGHWR_IO_CLOCK_ENABLE(CYGHWR_IO_FREESCALE_EDMA0_CLK); + CYGHWR_IO_CLOCK_ENABLE(CYGHWR_IO_FREESCALE_DMAMUX0_CLK); +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 + CYGHWR_IO_CLOCK_ENABLE(CYGHWR_IO_FREESCALE_DMAMUX1_CLK); +#endif + regval = edma_p->cr; +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > 16 + regval &= ~(FREESCALE_EDMA_GR_PRI(0, 3) | FREESCALE_EDMA_GR_PRI(1, 3)); +#endif + regval |= FREESCALE_EDMA_CR_INI; + edma_p->cr = regval; +} + +// Initialize a set of DMA channels +void +hal_freescale_edma_init_chanset(cyghwr_hal_freescale_dma_set_t *inidat_p) +{ + cyghwr_hal_freescale_edma_t *edma_p; + const cyghwr_hal_freescale_dma_chan_set_t *chan_p; + + edma_p = inidat_p->edma_p = CYGHWR_HAL_FREESCALE_EDMA0_P; + + hal_freescale_edma_init(edma_p); + + for(chan_p = inidat_p->chan_p; + chan_p < inidat_p->chan_p + inidat_p->chan_n; + chan_p++) + { + hal_freescale_edma_init_1chan(edma_p, chan_p); + } + edma_p->es = 0; +} + +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM == 32 +# define DMA_CHANMASK_FORMAT "0x%08x" +#else +# define DMA_CHANMASK_FORMAT "0x%04x" +#endif + +#define EDMA_DIAG_PRINTF_FORMAT(__mf) "CR=0x%08x ES=0x%08x ERQ=" __mf \ + " INT=" __mf " ERR=" __mf " HRS=" __mf "\n" + +// Display DMA configuration +void +hal_freescale_edma_diag(const cyghwr_hal_freescale_dma_set_t *inidat_p, cyg_uint32 mask) +{ + cyghwr_hal_freescale_edma_t *edma_p; + cyghwr_hal_freescale_dmamux_t *dmamux_p; + const cyghwr_hal_freescale_dma_chan_set_t *chan_p; + cyg_uint8 chan_i; + cyg_uint32 chan_p_i; + + edma_p = inidat_p->edma_p; + diag_printf(EDMA_DIAG_PRINTF_FORMAT(DMA_CHANMASK_FORMAT), + edma_p->cr, edma_p->es, + edma_p->erq, edma_p->irq, edma_p->err, edma_p->hrs); + + for(chan_i = 0; chan_i < CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM; chan_i++){ + if(mask & 0x1){ + chan_p = inidat_p->chan_p; +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + dmamux_p = chan_i < CYGNUM_HAL_FREESCALE_DMAMUX_CHAN_NUM ? + CYGHWR_IO_FREESCALE_DMAMUX0_P : + CYGHWR_IO_FREESCALE_DMAMUX1_P; +#else + dmamux_p = CYGHWR_IO_FREESCALE_DMAMUX0_P; +#endif + diag_printf("Chan %2d: CHCFG=0x%02x (%2d) DCHPRI=0x%02x dmamux[%c]=%p", chan_i, + dmamux_p->chcfg[chan_i % 16], + FREESCALE_DMAMUX_CHCFG_SOURCE(dmamux_p->chcfg[chan_i % 16]), + edma_p->dchpri[EDMA_CHAN_PRIORITY_I(chan_i)], + CYGHWR_IO_FREESCALE_DMAMUX0_P == dmamux_p ? '0' : ( +#if CYGNUM_HAL_FREESCALE_EDMA_CHAN_NUM > CYGNUM_HAL_FREESCALE_EDMA_GROUP_SIZE + CYGHWR_IO_FREESCALE_DMAMUX1_P == dmamux_p ? '1' : +#endif + '?'), dmamux_p); + for(chan_p_i = 0; chan_p_i < inidat_p->chan_n; chan_p_i++){ + if(chan_p->dma_chan_i == chan_i){ + diag_printf(" ISR_NUM=%2d[0x%02x] ISR_PRI=%3d[0x%02x]", + chan_p->isr_num, chan_p->isr_num, + chan_p->isr_prio, chan_p->isr_prio); + } + chan_p++; + } + diag_printf("\n"); + } + mask >>= 1; + } +} + +// Initialize eDMA channel TCD +void +hal_freescale_edma_transfer_init(cyghwr_hal_freescale_edma_t *edma_p, + cyg_uint8 chan_i, + const cyghwr_hal_freescale_edma_tcd_t *tcd_cfg_p) +{ + HAL_DMA_TRANSFER_CLEAR(edma_p, chan_i); + edma_p->tcd[chan_i] = *tcd_cfg_p; +} + +// Show eDMA TCD +void hal_freescale_edma_tcd_diag(cyghwr_hal_freescale_edma_tcd_t *tcd_p, cyg_int32 chan_i, const char *prefix) +{ + if(chan_i < 0) { + diag_printf("TCD %p chan %s:\n", tcd_p, prefix); + prefix = ""; + } else { + diag_printf("%sTCD %p chan %d:\n", "", tcd_p, chan_i); + } + + diag_printf("%s saddr=%p soff=0x%04x, attr=0x%04x\n", prefix, + tcd_p->saddr, tcd_p->soff, tcd_p->attr); + diag_printf("%s daddr=%p doff=0x%04x\n", prefix, + tcd_p->daddr, tcd_p->doff); + diag_printf("%s nbytes=%d [0x%08x], slast=%d [0x%08x]\n", prefix, + tcd_p->nbytes.mlno, tcd_p->nbytes.mlno, + tcd_p->slast, tcd_p->slast); + diag_printf("%s %s=%d [%p]\n", prefix, + (tcd_p->csr & FREESCALE_EDMA_CSR_ESG_M) ? "sga" : "dlast", + tcd_p->dlast_sga.dlast, tcd_p->dlast_sga.sga); + diag_printf("%s biter = %d, citer = %d\n", prefix, + tcd_p->biter.elinkno, tcd_p->citer.elinkno); + diag_printf("%s CSR=0x%04x\n", prefix, tcd_p->csr); +} + +// Show eDMA TCD set +void hal_freescale_edma_transfer_diag(cyghwr_hal_freescale_edma_t + *edma_p, cyg_uint8 chan_i, cyg_bool recurse) +{ + cyghwr_hal_freescale_edma_tcd_t *tcd_p; + const char *prefix = ""; + + for(tcd_p = &edma_p->tcd[chan_i]; tcd_p; tcd_p = tcd_p->dlast_sga.sga){ + hal_freescale_edma_tcd_diag(tcd_p, chan_i, prefix); + if(!(recurse && (tcd_p->csr & FREESCALE_EDMA_CSR_ESG_M))) + break; + prefix = " "; + } +} + +// end of freescale_dma.h diff --git a/packages/hal/misc/ram/micron/cellularram/current/ChangeLog b/packages/hal/misc/ram/micron/cellularram/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/hal/misc/ram/micron/cellularram/current/ChangeLog @@ -0,0 +1,36 @@ +2013-04-28 Ilija Kocho + + *cdl/ram_micron_cellularram.cdl: RAM size format changed to decimal. + [ Bugzilla 1001837 ] + +2012-01-06 Ilija Kocho + + * cdl/ram_micron_cellularram.cdl + * include/ram_micron_cellularram.h + * src/ram_micron_cellularram.c: + New package -- Micron CellularRam [Bugzilla 1001450] + + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/misc/ram/micron/cellularram/current/cdl/ram_micron_cellularram.cdl b/packages/hal/misc/ram/micron/cellularram/current/cdl/ram_micron_cellularram.cdl new file mode 100644 --- /dev/null +++ b/packages/hal/misc/ram/micron/cellularram/current/cdl/ram_micron_cellularram.cdl @@ -0,0 +1,277 @@ +# ==================================================================== +# +# ram_micron_cellularram.cdl +# +# RAM memory - Hardware support for Micron Cellularram +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2011 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): ilijak +# Contributors: +# Date: 2011-10-05 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_RAM_MICRON_CELLULARRAM { + display "Micron CellularRam 1.5 support" + + parent CYGPKG_HAL_EXTRN_MEMORY + active_if CYGPKG_HAL_EXTRN_MEMORY + + include_dir cyg/devs + compile -library=libextras.a ram_micron_cellularram.c + + description " + RAM memory device support for Micron CellularRam 1.5 + Micron CellularRam supports Asynchronous and Sybchronous/Burst bus + modes." + + define_proc { + puts $::cdl_header "#include "; + } + + cdl_interface CYGINT_DEVS_RAM0_MICRON_CELLULAR { + } + + cdl_component CYGHWR_DEVS_RAM0_MICRON_CELLULAR { + display "Micron Cellular Ram 1.5 chip 0" + flavor bool + default_value CYGINT_DEVS_RAM0_MICRON_CELLULAR + no_define + + active_if CYGINT_DEVS_RAM0_MICRON_CELLULAR + + cdl_option CYGHWR_RAM0_MICRON_CELLULAR_SIZE { + display "RAM size \[Bytes\]" + flavor data + default_value 16 * 1024 * 1024 + } + cdl_component CYGHWR_RAM0_MICRON_BCR_SETTO { + display "Bus Configuration Register" + flavor data + + calculated { + 0x0 + + ((CYGHWR_RAM0_MICRON_BCR_ASYNC == "ASYNC" ? 1 : 0) << 15) + + ((CYGHWR_RAM0_MICRON_BCR_IL == "VARIABLE" ? 0 : 1) << 14) + + ((CYGHWR_RAM0_MICRON_BCR_LC & 0x7) << 11) + + ((CYGHWR_RAM0_MICRON_BCR_WP == "HIGH" ? 1 : 0) << 10) + + ((CYGHWR_RAM0_MICRON_BCR_WC == "1" ? 1 : 0) << 8) + + + ((CYGHWR_RAM0_MICRON_BCR_DS == "FULL" ? 0 : + CYGHWR_RAM0_MICRON_BCR_DS == "1/2" ? 1 : 2) << 4) + + + ((CYGHWR_RAM0_MICRON_BCR_BW == "NOWRAP" ? 1 : 0) << 3) + + + (CYGHWR_RAM0_MICRON_BCR_BL == 4 ? 1 : + CYGHWR_RAM0_MICRON_BCR_BL == 8 ? 2 : + CYGHWR_RAM0_MICRON_BCR_BL == 16 ? 3 : + CYGHWR_RAM0_MICRON_BCR_BL == 32 ? 4 : 7) + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_ASYNC { + display "Asynchronous/Synchronous mode" + flavor data + no_define + default_value { "SYNC" } + legal_values { "SYNC" "ASYNC" } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_IL { + display "Initial latency" + flavor data + no_define + default_value { "FIXED" } + legal_values { "VARIABLE" "FIXED" } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_LC { + display "Latency code" + flavor data + no_define + default_value 2 + legal_values { 2 3 4 5 6 8 } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_WP { + display "Active WAIT polarity" + flavor data + no_define + default_value { "LOW" } + legal_values { "HIGH" "LOW" } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_WC { + display "WAIT configuration" + flavor data + no_define + default_value 1 + legal_values { 0 1 } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_DS { + display "Drive strength" + flavor data + no_define + default_value { "FULL" } + legal_values { "FULL" "1/2" "1/4" } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_BW { + display "Burst wrap" + flavor data + no_define + default_value { "NOWRAP" } + legal_values { "WRAP" "NOWRAP" } + } + + cdl_option CYGHWR_RAM0_MICRON_BCR_BL { + display "Burst length" + flavor data + no_define + default_value { "PERMANENT" } + legal_values { 4 8 16 32 "PERMANENT" } + } + } + } + + cdl_interface CYGINT_DEVS_RAM1_MICRON_CELLULAR { + } + + cdl_component CYGHWR_DEVS_RAM1_MICRON_CELLULAR { + display "Micron Cellular Ram 1.5 chip 1" + flavor bool + default_value CYGINT_DEVS_RAM1_MICRON_CELLULAR + no_define + + active_if CYGINT_DEVS_RAM1_MICRON_CELLULAR + + cdl_option CYGHWR_RAM1_MICRON_CELLULAR_SIZE { + display "RAM size \[Bytes\]" + flavor data + default_value 0x00100000 + } + cdl_component CYGHWR_RAM1_MICRON_BCR_SETTO { + display "Bus Configuration Register" + flavor data + + calculated { + 0x0 + + ((CYGHWR_RAM1_MICRON_BCR_ASYNC == "ASYNC" ? 1 : 0) << 15) + + ((CYGHWR_RAM1_MICRON_BCR_IL == "VARIABLE" ? 0 : 1) << 14) + + ((CYGHWR_RAM1_MICRON_BCR_LC & 0x7) << 11) + + ((CYGHWR_RAM1_MICRON_BCR_WP == "HIGH" ? 1 : 0) << 10) + + ((CYGHWR_RAM1_MICRON_BCR_WC == "1" ? 1 : 0) << 8) + + + ((CYGHWR_RAM1_MICRON_BCR_DS == "FULL" ? 0 : + CYGHWR_RAM1_MICRON_BCR_DS == "1/2" ? 1 : 2) << 4) + + + ((CYGHWR_RAM1_MICRON_BCR_BW == "NOWRAP" ? 1 : 0) << 3) + + + (CYGHWR_RAM1_MICRON_BCR_BL == 4 ? 1 : + CYGHWR_RAM1_MICRON_BCR_BL == 8 ? 2 : + CYGHWR_RAM1_MICRON_BCR_BL == 16 ? 3 : + CYGHWR_RAM1_MICRON_BCR_BL == 32 ? 4 : 7) + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_ASYNC { + display "Asynchronous/Synchronous mode" + flavor data + no_define + default_value { "SYNC" } + legal_values { "SYNC" "ASYNC" } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_IL { + display "Initial latency" + flavor data + no_define + default_value { "FIXED" } + legal_values { "VARIABLE" "FIXED" } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_LC { + display "Latency code" + flavor data + no_define + default_value 2 + legal_values { 2 3 4 5 6 8 } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_WP { + display "Active WAIT polarity" + flavor data + no_define + default_value { "LOW" } + legal_values { "HIGH" "LOW" } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_WC { + display "WAIT configuration" + flavor data + no_define + default_value 1 + legal_values { 0 1 } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_DS { + display "Drive strength" + flavor data + no_define + default_value { "FULL" } + legal_values { "FULL" "1/2" "1/4" } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_BW { + display "Burst wrap" + flavor data + no_define + default_value { "NOWRAP" } + legal_values { "WRAP" "NOWRAP" } + } + + cdl_option CYGHWR_RAM1_MICRON_BCR_BL { + display "Burst length" + flavor data + no_define + default_value { "PERMANENT" } + legal_values { 4 8 16 32 "PERMANENT" } + } + } + } +} diff --git a/packages/hal/misc/ram/micron/cellularram/current/include/ram_micron_cellularram.h b/packages/hal/misc/ram/micron/cellularram/current/include/ram_micron_cellularram.h new file mode 100644 --- /dev/null +++ b/packages/hal/misc/ram/micron/cellularram/current/include/ram_micron_cellularram.h @@ -0,0 +1,74 @@ +#ifndef CYGONCE_DEVS_RAM_MICRON_CELLULAR_H +#define CYGONCE_DEVS_RAM_MICRON_CELLULAR_H +//========================================================================== +// +// ram_micron_cellularram.h +// +// Micron CellularRam 1.5 +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2011-10-05 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#define CYGHWR_DEVS_RAM_MICRON_RCR 0 +#define CYGHWR_DEVS_RAM_MICRON_BCR 1 +#define CYGHWR_DEVS_RAM_MICRON_DIDR 2 + +#ifndef __ASSEMBLER__ + +__externC cyg_uint16 ram_micron_reg_get(cyg_uint16 mem_reg_i, + volatile cyg_uint16 *ram_base_p, + cyg_uint32 ram_size); + +__externC void ram_micron_reg_set(cyg_uint16 mem_reg_i, cyg_uint16 setting, + volatile cyg_uint16 *ram_base_p, + cyg_uint32 ram_size); +#endif + +#endif // CYGONCE_DEVS_RAM_MICRON_CELLULAR_H +// ------------------------------------------------------------------------ +// EOF ram_micron_cellularram.h diff --git a/packages/hal/misc/ram/micron/cellularram/current/src/ram_micron_cellularram.c b/packages/hal/misc/ram/micron/cellularram/current/src/ram_micron_cellularram.c new file mode 100644 --- /dev/null +++ b/packages/hal/misc/ram/micron/cellularram/current/src/ram_micron_cellularram.c @@ -0,0 +1,86 @@ +//========================================================================== +// +// ram_micron_cellularram.c +// +// Micron CellularRam 1.5 support functions. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributor(s): +// Date: 2011-02-05 +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include // HAL header + +#include + +cyg_uint16 ram_micron_reg_get(cyg_uint16 mem_reg_i, + volatile cyg_uint16 *mem_base_p, + cyg_uint32 ram_size) +{ + mem_base_p += (ram_size/2) - 1; + cyg_uint16 reg_val __attribute__((unused)); + + reg_val = *mem_base_p; + reg_val = *mem_base_p; + *mem_base_p = mem_reg_i; + mem_reg_i = *mem_base_p; + reg_val = mem_base_p[-16]; + return mem_reg_i; +} + +void ram_micron_reg_set(cyg_uint16 mem_reg_i, cyg_uint16 setting, + volatile cyg_uint16 *mem_base_p, cyg_uint32 ram_size) +{ + mem_base_p += (ram_size/2) - 1; + cyg_uint16 reg_val __attribute__((unused)); + + reg_val = *mem_base_p; + reg_val = *mem_base_p; + *mem_base_p = mem_reg_i; + *mem_base_p = setting; + reg_val = mem_base_p[-16]; +} + +//========================================================================== +// EOF ram_micron_cellularram.c diff --git a/packages/hal/openrisc/arch/current/ChangeLog b/packages/hal/openrisc/arch/current/ChangeLog --- a/packages/hal/openrisc/arch/current/ChangeLog +++ b/packages/hal/openrisc/arch/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_openrisc.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2004-04-22 Jani Monoses * cdl/hal_openrisc.cdl : diff --git a/packages/hal/openrisc/arch/current/cdl/hal_openrisc.cdl b/packages/hal/openrisc/arch/current/cdl/hal_openrisc.cdl --- a/packages/hal/openrisc/arch/current/cdl/hal_openrisc.cdl +++ b/packages/hal/openrisc/arch/current/cdl/hal_openrisc.cdl @@ -89,7 +89,7 @@ cdl_package CYGPKG_HAL_OPENRISC { make { /lib/target.ld: /src/openrisc.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/powerpc/arch/current/ChangeLog b/packages/hal/powerpc/arch/current/ChangeLog --- a/packages/hal/powerpc/arch/current/ChangeLog +++ b/packages/hal/powerpc/arch/current/ChangeLog @@ -1,3 +1,14 @@ +2014-03-20 John Dallaway + + * src/mcount.S: Add mcount functions for call-graph profiling. + * cdl/hal_powerpc.cdl: Add option to build mcount functions. + [ Bugzilla 1001961 ] + +2011-01-02 Sergei Gavrikov + + * cdl/hal_powerpc.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2009-08-07 Nick Garnett * cdl/hal_powerpc.cdl: Add CYGHWR_HAL_POWERPC_BOOK_E_FIXED_VECTORS @@ -1941,7 +1952,7 @@ Mon Aug 17 16:23:46 1998 Jesper Skov < // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008, 2014 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/hal/powerpc/arch/current/cdl/hal_powerpc.cdl b/packages/hal/powerpc/arch/current/cdl/hal_powerpc.cdl --- a/packages/hal/powerpc/arch/current/cdl/hal_powerpc.cdl +++ b/packages/hal/powerpc/arch/current/cdl/hal_powerpc.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2007, 2014 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -41,7 +41,7 @@ # # Author(s): jskov # Original data: bartv -# Contributors: +# Contributors: jld # Date: 1999-11-02 # #####DESCRIPTIONEND#### @@ -66,6 +66,8 @@ cdl_package CYGPKG_HAL_POWERPC { requires 1 == CYGINT_HAL_POWERPC_VARIANT } + implements CYGINT_PROFILE_HAL_MCOUNT + compile hal_misc.c context.S ppc_stub.c hal_intr.c # The "-o file" is a workaround for CR100958 - without it the @@ -73,7 +75,7 @@ cdl_package CYGPKG_HAL_POWERPC { # n.b. grep does not behave itself under win32 make -priority 1 { /include/cyg/hal/ppc_offsets.inc : /src/hal_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,ppc_offsets.tmp -o hal_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,ppc_offsets.tmp -o hal_mk_defs.tmp -S $< fgrep .equ hal_mk_defs.tmp | sed s/#// > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 ppc_offsets.tmp >> $(notdir $@).deps @@ -92,7 +94,7 @@ cdl_package CYGPKG_HAL_POWERPC { make { /lib/target.ld: /src/powerpc.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps @@ -253,6 +255,18 @@ cdl_package CYGPKG_HAL_POWERPC { } } + cdl_option CYGBLD_HAL_POWERPC_MCOUNT { + display "Support call-graph profiling" + flavor bool + no_define + active_if CYGPKG_PROFILE_GPROF + calculated CYGPKG_PROFILE_CALLGRAPH + compile mcount.S + description " + Calculate whether mcount functions should be built + to support call-graph profiling." + } + cdl_option CYGBLD_LINKER_SCRIPT { display "Linker script" flavor data diff --git a/packages/hal/powerpc/arch/current/src/mcount.S b/packages/hal/powerpc/arch/current/src/mcount.S new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/arch/current/src/mcount.S @@ -0,0 +1,124 @@ +/*========================================================================== +// +// mcount.S +// +// PowerPC mcount implementation +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jld +// Contributor(s): +// Date: 2014-03-20 +// Description: This file provides mcount functions used for +// call-graph profiling. +// +//####DESCRIPTIONEND#### +// +//======================================================================== +*/ + +#include + +/* +// GCC inserts mcount code at the start of every function when compiling +// with "-pg". For GCC targeting PowerPC, the following code is inserted: +// +// mflr r0 +// stw r0, 4(r1) +// bl _mcount +// +// We provide an implementation of _mcount() to call the eCos +// __profile_mcount() function. +*/ + + .section ".text.mcount" + .globl _mcount +_mcount: + // create stack frame + stwu r1, -48(r1) + + // caller assumes r3-r10 will be preserved and we use r14 + stw r3, 8(r1) + stw r4, 12(r1) + stw r5, 16(r1) + stw r6, 20(r1) + stw r7, 24(r1) + stw r8, 28(r1) + stw r9, 32(r1) + stw r10, 36(r1) + stw r14, 40(r1) + + // set up parameters for __profile_mcount() and preserve + // lr across our __profile_mcount() call + lwz r3, 52(r1) + subi r3, r3, 2 + mflr r4 + stw r4, 44(r1) + + // disable interrupts + lwi r0, ~CYGARC_REG_MSR_INTBITS + mfmsr r14 + and r0, r0, r14 + mtmsr r0 + + // call eCos __profile_mcount() + // r14 is preserved across the call per EABI standard + bl __profile_mcount + + // restore interrupts + mtmsr r14 + + // restore registers + lwz r3, 8(r1) + lwz r4, 12(r1) + lwz r5, 16(r1) + lwz r6, 20(r1) + lwz r7, 24(r1) + lwz r8, 28(r1) + lwz r9, 32(r1) + lwz r10, 36(r1) + lwz r14, 40(r1) + + // unwind stack frame and return + lwz r0, 44(r1) + mtctr r0 + lwz r0, 52(r1) + mtlr r0 + addi r1, r1, 48 + bctr + +//========================================================================== +// end of mcount.S diff --git a/packages/hal/powerpc/moab/current/ChangeLog b/packages/hal/powerpc/moab/current/ChangeLog --- a/packages/hal/powerpc/moab/current/ChangeLog +++ b/packages/hal/powerpc/moab/current/ChangeLog @@ -1,3 +1,15 @@ +2011-07-22 Sergei Gavrikov + + * misc/moab1.1_redboot_BOOT.ecm: + * misc/moab1.1_redboot_RAMF.ecm: + * misc/moab1.1_redboot_ROMRAM.ecm: + * misc/redboot_BOOT.ecm: + * misc/redboot_RAM.ecm: + * misc/redboot_RAM+FLASH.ecm: + * misc/redboot_ROMRAM.ecm: + Update due renaming CYGHWR_DEVS_ETH_PHY_DP83847 to + CYGHWR_DEVS_ETH_PHY_DP8384X. [ Bugzilla 1001235 ] + 2009-01-31 Bart Veer * cdl/hal_powerpc_moab.cdl: update compiler flags for gcc 4.x diff --git a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_BOOT.ecm b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_BOOT.ecm --- a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_BOOT.ecm +++ b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_BOOT.ecm @@ -50,7 +50,7 @@ cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { user_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_RAMF.ecm b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_RAMF.ecm --- a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_RAMF.ecm +++ b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_RAMF.ecm @@ -41,7 +41,7 @@ cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS inferred_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_ROMRAM.ecm b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_ROMRAM.ecm --- a/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_ROMRAM.ecm +++ b/packages/hal/powerpc/moab/current/misc/moab1.1_redboot_ROMRAM.ecm @@ -50,7 +50,7 @@ cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { user_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/redboot_BOOT.ecm b/packages/hal/powerpc/moab/current/misc/redboot_BOOT.ecm --- a/packages/hal/powerpc/moab/current/misc/redboot_BOOT.ecm +++ b/packages/hal/powerpc/moab/current/misc/redboot_BOOT.ecm @@ -50,7 +50,7 @@ cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { user_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/redboot_RAM+FLASH.ecm b/packages/hal/powerpc/moab/current/misc/redboot_RAM+FLASH.ecm --- a/packages/hal/powerpc/moab/current/misc/redboot_RAM+FLASH.ecm +++ b/packages/hal/powerpc/moab/current/misc/redboot_RAM+FLASH.ecm @@ -41,7 +41,7 @@ cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS inferred_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/redboot_RAM.ecm b/packages/hal/powerpc/moab/current/misc/redboot_RAM.ecm --- a/packages/hal/powerpc/moab/current/misc/redboot_RAM.ecm +++ b/packages/hal/powerpc/moab/current/misc/redboot_RAM.ecm @@ -39,7 +39,7 @@ cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS inferred_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/powerpc/moab/current/misc/redboot_ROMRAM.ecm b/packages/hal/powerpc/moab/current/misc/redboot_ROMRAM.ecm --- a/packages/hal/powerpc/moab/current/misc/redboot_ROMRAM.ecm +++ b/packages/hal/powerpc/moab/current/misc/redboot_ROMRAM.ecm @@ -47,7 +47,7 @@ cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { user_value 0 }; -cdl_option CYGHWR_DEVS_ETH_PHY_DP83847 { +cdl_option CYGHWR_DEVS_ETH_PHY_DP8384X { inferred_value 1 }; diff --git a/packages/hal/sh/arch/current/ChangeLog b/packages/hal/sh/arch/current/ChangeLog --- a/packages/hal/sh/arch/current/ChangeLog +++ b/packages/hal/sh/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sh.cdl: Eliminate some warnings. [ Bugzilla 1001083 ] + 2009-02-04 John Dallaway * src/sh.ld: Process *(.gcc_except_table.*) as for i386 diff --git a/packages/hal/sh/arch/current/cdl/hal_sh.cdl b/packages/hal/sh/arch/current/cdl/hal_sh.cdl --- a/packages/hal/sh/arch/current/cdl/hal_sh.cdl +++ b/packages/hal/sh/arch/current/cdl/hal_sh.cdl @@ -67,7 +67,7 @@ cdl_package CYGPKG_HAL_SH { # n.b. grep does not behave itself under win32 make -priority 1 { /include/cyg/hal/sh_offsets.inc : /src/hal_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh_offsets.tmp -o hal_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh_offsets.tmp -o hal_mk_defs.tmp -S $< fgrep .equ hal_mk_defs.tmp | sed s/#// > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 sh_offsets.tmp >> $(notdir $@).deps @@ -86,7 +86,7 @@ cdl_package CYGPKG_HAL_SH { make { /lib/target.ld: /src/sh.ld - $(CC) -E -P -Wp,-MD,target.tmp -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/sh/sh2/current/ChangeLog b/packages/hal/sh/sh2/current/ChangeLog --- a/packages/hal/sh/sh2/current/ChangeLog +++ b/packages/hal/sh/sh2/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sh_sh2.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2004-04-22 Jani Monoses * cdl/hal_sh_sh2.cdl : diff --git a/packages/hal/sh/sh2/current/cdl/hal_sh_sh2.cdl b/packages/hal/sh/sh2/current/cdl/hal_sh_sh2.cdl --- a/packages/hal/sh/sh2/current/cdl/hal_sh_sh2.cdl +++ b/packages/hal/sh/sh2/current/cdl/hal_sh_sh2.cdl @@ -74,7 +74,7 @@ cdl_package CYGPKG_HAL_SH_SH2 { # n.b. grep does not behave itself under win32 make -priority 1 { /include/cyg/hal/sh2_offsets.inc : /src/var_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh2_offsets.tmp -o var_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh2_offsets.tmp -o var_mk_defs.tmp -S $< fgrep .equ var_mk_defs.tmp | sed s/#// > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 sh2_offsets.tmp >> $(notdir $@).deps diff --git a/packages/hal/sh/sh3/current/ChangeLog b/packages/hal/sh/sh3/current/ChangeLog --- a/packages/hal/sh/sh3/current/ChangeLog +++ b/packages/hal/sh/sh3/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sh_sh3.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2004-04-22 Jani Monoses * cdl/hal_sh_sh3.cdl : diff --git a/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl b/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl --- a/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl +++ b/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl @@ -72,7 +72,7 @@ cdl_package CYGPKG_HAL_SH_SH3 { # n.b. grep does not behave itself under win32 make -priority 1 { /include/cyg/hal/sh3_offsets.inc : /src/var_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh3_offsets.tmp -o var_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh3_offsets.tmp -o var_mk_defs.tmp -S $< fgrep .equ var_mk_defs.tmp | sed s/#// > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 sh3_offsets.tmp >> $(notdir $@).deps diff --git a/packages/hal/sh/sh4/current/ChangeLog b/packages/hal/sh/sh4/current/ChangeLog --- a/packages/hal/sh/sh4/current/ChangeLog +++ b/packages/hal/sh/sh4/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sh_sh4.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2005-05-13 Hajime Ishitani * include/mod_regs_cpg.h : diff --git a/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl b/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl --- a/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl +++ b/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl @@ -75,7 +75,7 @@ cdl_package CYGPKG_HAL_SH_SH4 { # n.b. grep does not behave itself under win32 make -priority 1 { /include/cyg/hal/sh4_offsets.inc : /src/var_mk_defs.c - $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh4_offsets.tmp -o var_mk_defs.tmp -S $< + $(CC) $(ACTUAL_CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh4_offsets.tmp -o var_mk_defs.tmp -S $< fgrep .equ var_mk_defs.tmp | sed s/#// > $@ @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 sh4_offsets.tmp >> $(notdir $@).deps diff --git a/packages/hal/sparc/arch/current/ChangeLog b/packages/hal/sparc/arch/current/ChangeLog --- a/packages/hal/sparc/arch/current/ChangeLog +++ b/packages/hal/sparc/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sparc.cdl: Eliminate some warnings. [ Bugzilla 1001083 ] + 2004-04-22 Jani Monoses * cdl/hal_sparc.cdl : diff --git a/packages/hal/sparc/arch/current/cdl/hal_sparc.cdl b/packages/hal/sparc/arch/current/cdl/hal_sparc.cdl --- a/packages/hal/sparc/arch/current/cdl/hal_sparc.cdl +++ b/packages/hal/sparc/arch/current/cdl/hal_sparc.cdl @@ -73,7 +73,7 @@ cdl_package CYGPKG_HAL_SPARC { make { /lib/target.ld: /src/sparc.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/sparclite/arch/current/ChangeLog b/packages/hal/sparclite/arch/current/ChangeLog --- a/packages/hal/sparclite/arch/current/ChangeLog +++ b/packages/hal/sparclite/arch/current/ChangeLog @@ -1,3 +1,8 @@ +2011-01-02 Sergei Gavrikov + + * cdl/hal_sparclite.cdl: Eliminate some warnings. [ Bugzilla + 1001083 ] + 2004-04-22 Jani Monoses * cdl/hal_sparclite.cdl : diff --git a/packages/hal/sparclite/arch/current/cdl/hal_sparclite.cdl b/packages/hal/sparclite/arch/current/cdl/hal_sparclite.cdl --- a/packages/hal/sparclite/arch/current/cdl/hal_sparclite.cdl +++ b/packages/hal/sparclite/arch/current/cdl/hal_sparclite.cdl @@ -73,7 +73,7 @@ cdl_package CYGPKG_HAL_SPARCLITE { make { /lib/target.ld: /src/sparclite.ld - $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(ACTUAL_CFLAGS) -o $@ $< @echo $@ ": \\" > $(notdir $@).deps @tail -n +2 target.tmp >> $(notdir $@).deps @echo >> $(notdir $@).deps diff --git a/packages/hal/synth/arch/current/ChangeLog b/packages/hal/synth/arch/current/ChangeLog --- a/packages/hal/synth/arch/current/ChangeLog +++ b/packages/hal/synth/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2011-08-13 Sergei Gavrikov + + * cdl/hal_synth.cdl (CYGPKG_HAL_SYNTH_TESTS): Fix a typo in make rule. + 2009-08-13 Bart Veer * src/synth.ld (SECTION_eh_frame): allow for a .eh_frame_hdr diff --git a/packages/hal/synth/arch/current/cdl/hal_synth.cdl b/packages/hal/synth/arch/current/cdl/hal_synth.cdl --- a/packages/hal/synth/arch/current/cdl/hal_synth.cdl +++ b/packages/hal/synth/arch/current/cdl/hal_synth.cdl @@ -155,7 +155,7 @@ cdl_package CYGPKG_HAL_SYNTH { make { /tests/ftok: /tests/ftok.c @mkdir -p "$(dir $@)" - @$(HOST_CC) -DHOST -g -O2 -o $@ $< || cc -DHOST -g -O2 -o $@ $< || -DHOST gcc -g -O2 -o $@ $< + @$(HOST_CC) -DHOST -g -O2 -o $@ $< || cc -DHOST -g -O2 -o $@ $< || gcc -DHOST -g -O2 -o $@ $< } } } diff --git a/packages/hal/synth/i386linux/current/ChangeLog b/packages/hal/synth/i386linux/current/ChangeLog --- a/packages/hal/synth/i386linux/current/ChangeLog +++ b/packages/hal/synth/i386linux/current/ChangeLog @@ -1,3 +1,8 @@ +2011-06-05 John Dallaway + + * src/syscall-i386-linux-1.0.S: Fix .size and .type expressions to + avoid build error with binutils 2.21.x. Patch from Tom Schouten. + 2009-08-11 Bart Veer * src/tls.c: new module for TLS (thread local storage) support as @@ -427,7 +432,7 @@ Mon Nov 9 15:18:11 GMT 1998 Chris Pro // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2011 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/hal/synth/i386linux/current/src/syscall-i386-linux-1.0.S b/packages/hal/synth/i386linux/current/src/syscall-i386-linux-1.0.S --- a/packages/hal/synth/i386linux/current/src/syscall-i386-linux-1.0.S +++ b/packages/hal/synth/i386linux/current/src/syscall-i386-linux-1.0.S @@ -444,8 +444,8 @@ cyg_hal_sys_restore_rt: movl $SYS_rt_sigreturn, %eax int $0x80 1: - .type __restore_rt,@function - .size __restore_rt,1b - __restore_rt + .type cyg_hal_sys_restore_rt,@function + .size cyg_hal_sys_restore_rt,1b - cyg_hal_sys_restore_rt .align 8 .global cyg_hal_sys_restore @@ -454,5 +454,5 @@ cyg_hal_sys_restore: movl $SYS_sigreturn, %eax int $0x80 1: - .type __restore,@function - .size __restore,1b - __restore + .type cyg_hal_sys_restore,@function + .size cyg_hal_sys_restore,1b - cyg_hal_sys_restore diff --git a/packages/infra/current/ChangeLog b/packages/infra/current/ChangeLog --- a/packages/infra/current/ChangeLog +++ b/packages/infra/current/ChangeLog @@ -1,3 +1,30 @@ +2013-02-20 Ilija Kocho + + * include/cyg_type.h: Add CYGBLD_ATTRIB_NO_INLINE (suggested by Jifl) + [ Bugzilla 1001768 ] + +2013-02-09 Ilija Kocho + + * include/cyg_type.h: Add CYGBLD_FORCE_INLINE macro to be used + to enforce function inlining when compiling with no optimization. + [ Bugzilla Bug 1001759 ] + +2012-03-06 Grant Edwards + + * include/cyg_type.h: Add CYGBLD_ATTRIB_UNUSED macro to be used to + eliminate compiler warnings about unused or set-but-not-referenced + varibles. Part of: [ Bugzilla 1001504 ] + +2012-03-06 + + * src/diag.cxx: Fix compiler warnings about variables that are set + but never read. [ Bugzilla 1001503 ] + +2010-09-13 Chris Holgate + + * include/diag.h: + * src/diag.cxx: Add diag_vsnprintf(). + 2009-10-06 Uwe Kindler * include/cyg_type.h: Changed definition of macro diff --git a/packages/infra/current/include/cyg_type.h b/packages/infra/current/include/cyg_type.h --- a/packages/infra/current/include/cyg_type.h +++ b/packages/infra/current/include/cyg_type.h @@ -452,6 +452,11 @@ typedef cyg_haladdrword CYG_ADDRWORD; # define CYGBLD_ATTRIB_STRFTIME_FORMAT(__format__, __args__) \ __attribute__((format (strftime, __format__, __args__))) +// Tell compiler not to warn us about an unused variable -- generally +// because it will be used when sources are build under certain +// circumstances (e.g. with debugging or asserts enabled. +# define CYGBLD_ATTRIB_UNUSED __attribute__((unused)) + // Tell the compiler not to throw away a variable or function. Only known // available on 3.3.2 or above. Old version's didn't throw them away, // but using the unused attribute should stop warnings. @@ -462,8 +467,21 @@ typedef cyg_haladdrword CYG_ADDRWORD; # define CYGBLD_ATTRIB_USED __attribute__((unused)) # endif # endif + +// Enforce inlining of a C function. GCC does not inline any C +// function when not optimizing, unless you specify "always_inline" attribute. +// Other attributes suppress generation of standalone function. +# if !defined(CYGBLD_FORCE_INLINE) +# define CYGBLD_FORCE_INLINE __externC inline __attribute((gnu_inline)) __attribute((always_inline)) +# endif + +// Suppress function inlining +#define CYGBLD_ATTRIB_NO_INLINE __attribute__((noinline)) + #else // non-GNU +# define CYGBLD_ATTRIB_UNUSED /* nothing */ + # define CYGBLD_ATTRIB_CONSTRUCTOR # define CYGBLD_ATTRIB_NORET @@ -491,6 +509,9 @@ typedef cyg_haladdrword CYG_ADDRWORD; # define CYGBLD_ATTRIB_STRFTIME_FORMAT(__format__, __args__) +#define CYGBLD_FORCE_INLINE + +#define CYGBLD_ATTRIB_NO_INLINE #endif diff --git a/packages/infra/current/include/diag.h b/packages/infra/current/include/diag.h --- a/packages/infra/current/include/diag.h +++ b/packages/infra/current/include/diag.h @@ -100,6 +100,8 @@ externC int diag_snprintf(char *buf, si CYGBLD_ATTRIB_PRINTF_FORMAT(3,4); externC int diag_vsprintf(char *buf, const char *fmt, va_list ap) CYGBLD_ATTRIB_PRINTF_FORMAT(2,0); +externC int diag_vsnprintf(char *buf, size_t len, const char *fmt, va_list ap) + CYGBLD_ATTRIB_PRINTF_FORMAT(3,0); externC int diag_vprintf(const char *fmt, va_list ap) CYGBLD_ATTRIB_PRINTF_FORMAT(1,0); diff --git a/packages/infra/current/src/diag.cxx b/packages/infra/current/src/diag.cxx --- a/packages/infra/current/src/diag.cxx +++ b/packages/infra/current/src/diag.cxx @@ -522,7 +522,6 @@ static void int diag_sprintf(char *buf, const char *fmt, ...) { - int ret; va_list ap; struct _sputc_info info; @@ -530,15 +529,14 @@ diag_sprintf(char *buf, const char *fmt, info.ptr = buf; info.max = 1024; // Unlimited info.len = 0; - ret = _vprintf(_sputc, (void **)&info, fmt, ap); + _vprintf(_sputc, (void **)&info, fmt, ap); va_end(ap); - return (info.len); + return info.len; } int diag_snprintf(char *buf, size_t len, const char *fmt, ...) { - int ret; va_list ap; struct _sputc_info info; @@ -546,7 +544,7 @@ diag_snprintf(char *buf, size_t len, con info.ptr = buf; info.len = 0; info.max = len-1; - ret = _vprintf(_sputc, (void **)&info, fmt, ap); + _vprintf(_sputc, (void **)&info, fmt, ap); va_end(ap); return (info.len); } @@ -554,13 +552,24 @@ diag_snprintf(char *buf, size_t len, con int diag_vsprintf(char *buf, const char *fmt, va_list ap) { - int ret; struct _sputc_info info; info.ptr = buf; info.max = 1024; // Unlimited info.len = 0; - ret = _vprintf(_sputc, (void **)&info, fmt, ap); + _vprintf(_sputc, (void **)&info, fmt, ap); + return (info.len); +} + +int +diag_vsnprintf(char *buf, size_t len, const char *fmt, va_list ap) +{ + struct _sputc_info info; + + info.ptr = buf; + info.max = len-1; + info.len = 0; + _vprintf(_sputc, (void **)&info, fmt, ap); return (info.len); } diff --git a/packages/io/adc/current/ChangeLog b/packages/io/adc/current/ChangeLog --- a/packages/io/adc/current/ChangeLog +++ b/packages/io/adc/current/ChangeLog @@ -1,3 +1,13 @@ +2010-06-06 ccoutand + * doc/adc.sgml + Updated documentation, add new ADC data flush and + correct Copy/Paste in enable_io + +2010-05-25 ccoutand + * src/adc.c: + Add new key to ADC driver to flush data buffer: + CYG_IO_SET_CONFIG_ADC_DATA_FLUSH + 2009-03-02 Simon Kallweit * cdl/io_adc.cdl: diff --git a/packages/io/adc/current/doc/adc.sgml b/packages/io/adc/current/doc/adc.sgml --- a/packages/io/adc/current/doc/adc.sgml +++ b/packages/io/adc/current/doc/adc.sgml @@ -257,7 +257,27 @@ int disable_io( cyg_io_handle_t handle ) int enable_io( cyg_io_handle_t handle ) { return cyg_io_set_config( handle, - CYG_IO_SET_CONFIG_ADC_DISABLE, + CYG_IO_SET_CONFIG_ADC_ENABLE, + NULL, + NULL); +} + + +
+ +Flushing a Channel + + +In some particular cases, user might require to flush the ADC data buffer. Flushing +may be perfomed via a set_config +function: + + + +int flush_io( cyg_io_handle_t handle ) +{ + return cyg_io_set_config( handle, + CYG_IO_SET_CONFIG_ADC_DATA_FLUSH, NULL, NULL); } @@ -267,7 +287,6 @@ int enable_io( cyg_io_handle_t handle ) - Configuration diff --git a/packages/io/adc/current/src/adc.c b/packages/io/adc/current/src/adc.c --- a/packages/io/adc/current/src/adc.c +++ b/packages/io/adc/current/src/adc.c @@ -298,6 +298,13 @@ static Cyg_ErrNo adc_set_config(cyg_io_h chan->device->funs->disable( chan ); break; + case CYG_IO_SET_CONFIG_ADC_DATA_FLUSH: + cyg_drv_isr_lock(); + chan->put = 0; + chan->get = 0; + cyg_drv_isr_unlock(); + break; + case CYG_IO_SET_CONFIG_READ_BLOCKING: if (*len < sizeof(cyg_uint32)) return -EINVAL; diff --git a/packages/io/can/current/ChangeLog b/packages/io/can/current/ChangeLog --- a/packages/io/can/current/ChangeLog +++ b/packages/io/can/current/ChangeLog @@ -1,3 +1,34 @@ +2013-06-24 Uwe Kindler + + * include/canio.h: Added structure cyg_can_err_count_info for reading + CAN hardware error counter values from CAN hardware. + * doc/can.sgml: Documented new CAN config key + CYG_IO_GET_CONFIG_ERR_COUNTERS. + +2013-05-06 Uwe Kindler + + * doc/can.sgml: Documented return code -ENOSPC for cyg_io_set_config() + for config keys CYG_IO_SET_CONFIG_CAN_RANGE_FILTER and + CYG_IO_SET_CONFIG_CAN_MASK_FILTER + +2012-01-22 Bernard Fouché + + * cdl/io_can.cdl: support for add/remove compiler flags + * doc/can.sgml, doc/can_driver_doc.html: updated doc reflecting API + changes (range/mask filtering, listen-only mode, return values for + xmt_msg/rcv_event, new flags). + * include/can.h: given in a match the types of function pointers for + can_callbacks_t according to the changes made in can.c. + * include/canio.h: flags field in event enlarged to 32 bits to fit + new events 'CYGNUM_CAN_EVENT_ERR_ACTIVE' and + 'CYGNUM_CAN_EVENT_OVERRUN_RX_HW'. Made a 'flag' typedef. + cyg_can_event fields reordered so flags size change keeps events the + same size. Defined new filtering capabilities (range/mask). New + convenience macro CYGNUM_CAN_EVENT_ALL. New listen-only mode. + * src/can.c: can_rcv_event() and can_xmt_msg() now returns cyg_bool + (were 'void'). flags using cyg_can_event_flags_t type. + [ Bugzilla 1001453 ] + 2010-01-13 Sergei Gavrikov * include/can.h: EOF footer: s/SERIAL/CAN/. diff --git a/packages/io/can/current/cdl/io_can.cdl b/packages/io/can/current/cdl/io_can.cdl --- a/packages/io/can/current/cdl/io_can.cdl +++ b/packages/io/can/current/cdl/io_can.cdl @@ -257,7 +257,40 @@ cdl_package CYGPKG_IO_CAN { The initial timeout value in clock ticks for cyg_io_write() calls." } } - + + cdl_component CYGPKG_IO_CAN_OPTIONS { + display "CAN device driver build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_IO_CAN_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the CAN device drivers. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_IO_CAN_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the CAN device drivers. These flags are + removed from the set of global flags if present." + } + + } + cdl_option CYGBLD_IO_CAN_EXTRA_TESTS { display "Build extra CAN tests" default_value 0 diff --git a/packages/io/can/current/doc/can.sgml b/packages/io/can/current/doc/can.sgml --- a/packages/io/can/current/doc/can.sgml +++ b/packages/io/can/current/doc/can.sgml @@ -124,7 +124,7 @@ device independent CAN I/O API for acces network. This API handles issues such as locking between threads. The package does not contain any hardware-specific code. Instead it will call into a CAN device driver to handle the hardware device -access. This package also defines the inderface that such hardware +access. This package also defines the interface that such hardware drivers should provide. @@ -173,13 +173,14 @@ All functions return a value of the type If an error condition is detected, this value will be negative and the absolute value indicates the actual error, as specified in cyg/error/codes.h. The only other legal return values -will be ENOERR, -EINTR and --EAGAIN. All other function arguments are pointers -(references). This allows the drivers to pass information efficiently, -both into and out of the driver. The most striking example of this is the -len value passed to the read and write functions. -This parameter contains the desired length of data on input to the -function and the actual transferred length on return. +will be ENOERR, -EINTR, +-EINVAL and -EAGAIN. All other +function arguments are pointers (references). This allows the drivers +to pass information efficiently, both into and out of the driver. The +most striking example of this is the len value +passed to the read and write functions. This parameter contains the +desired length of data on input to the function and the actual +transferred length on return.
@@ -226,6 +227,12 @@ of data to receive is contained in + +You may notice that the data sent (messages) is different from the +data received (events). An event includes flags that describe the +event, and eventually a received message and a timestamp. + + // Read configuration of a CAN device Cyg_ErrNo cyg_io_get_config( @@ -353,7 +360,7 @@ the caller must try again. -If a message was sucessfully sent, the function returns ENOERR. +If a message was successfully sent, the function returns ENOERR.
@@ -455,7 +462,7 @@ cyg_io_read(handle, buf, len) -To receive a message the application calls cyg_can_recv(). +To receive a message the application calls cyg_io_read(). This function receives one single event from a device. The desired size of data to receive is contained in *len and the actual size obtained will be returned in the same place. A pointer to @@ -478,7 +485,7 @@ try again. -It is possible to configure the write call to be non-blocking with timeout. +It is possible to configure the read call to be non-blocking with timeout. None-blocking mode with timeout requires the configuration option CYGOPT_IO_CAN_SUPPORT_NONBLOCKING and CYGOPT_IO_CAN_SUPPORT_TIMEOUTS to be enabled, @@ -492,7 +499,7 @@ is returned and the caller must try agai -If a event was sucessfully received, the function returns ENOERR. +If an event was successfully received, the function returns ENOERR. @@ -511,8 +518,8 @@ independent type for handling CAN events typedef struct cyg_can_event_st { cyg_uint32 timestamp; + cyg_can_event_flags_t flags; cyg_can_message msg; - cyg_uint16 flags; } cyg_can_event; @@ -529,6 +536,14 @@ contain a timestamp value for an event t
+ cyg_can_event_flags_t flags + +Event flags. The flags field contains bits that +indicate which kind of events occured. More than one flag can be raised +in a single event. + + + cyg_can_message msg CAN message. The msg field contains a CAN message if an RX or TX event @@ -538,59 +553,52 @@ the msg may c specific data. - - cyg_uint16 flags - -Event flags. The flags field contains 16 bits that -indicate which kind of events occured. - - The following events are supported and after receiving an event the -application should check the flag field against these values: +application should check the flags field against these values: -typedef enum -{ - CYGNUM_CAN_EVENT_RX = 0x0001, // message received - CYGNUM_CAN_EVENT_TX = 0x0002, // message transmitted - CYGNUM_CAN_EVENT_WARNING_RX = 0x0004, // (TEC) reached warning level (>96) - CYGNUM_CAN_EVENT_WARNING_TX = 0x0008, // (REC) reached warning level (>96) - CYGNUM_CAN_EVENT_ERR_PASSIVE = 0x0010, // CAN "error passive" occured - CYGNUM_CAN_EVENT_BUS_OFF = 0x0020, // CAN "bus off" error occured - CYGNUM_CAN_EVENT_OVERRUN_RX = 0x0040, // overrun in RX queue or hardware - CYGNUM_CAN_EVENT_OVERRUN_TX = 0x0080, // overrun in TX queue occured - CYGNUM_CAN_EVENT_CAN_ERR = 0x0100, // a CAN bit or frame error occured - CYGNUM_CAN_EVENT_LEAVING_STANDBY = 0x0200, // CAN hardware leaves standby - CYGNUM_CAN_EVENT_ENTERING_STANDBY = 0x0400, // CAN hardware enters standby - CYGNUM_CAN_EVENT_ARBITRATION_LOST = 0x0800, // arbitration lost - CYGNUM_CAN_EVENT_FILTER_ERR = 0x1000, // CAN message filter / acceptance filter error - CYGNUM_CAN_EVENT_PHY_FAULT = 0x2000, // General failure of physical layer - CYGNUM_CAN_EVENT_PHY_H = 0x4000, // Fault on CAN-H (Low Speed CAN) - CYGNUM_CAN_EVENT_PHY_L = 0x8000, // Fault on CAN-L (Low Speed CAN) -} cyg_can_event_flags; +CYGNUM_CAN_EVENT_RX 0x00000001 // message received +CYGNUM_CAN_EVENT_TX 0x00000002 // mesage transmitted +CYGNUM_CAN_EVENT_WARNING_RX 0x00000004 // tx error counter (TEC) reached warning level (>96) +CYGNUM_CAN_EVENT_WARNING_TX 0x00000008 // rx error counter (REC) reached warning level (>96) +CYGNUM_CAN_EVENT_ERR_PASSIVE 0x00000010 // CAN "error passive" occured +CYGNUM_CAN_EVENT_BUS_OFF 0x00000020 // CAN "bus off" error occured +CYGNUM_CAN_EVENT_OVERRUN_RX 0x00000040 // overrun in RX queue occured +CYGNUM_CAN_EVENT_OVERRUN_TX 0x00000080 // overrun in TX queue occured +CYGNUM_CAN_EVENT_CAN_ERR 0x00000100 // a CAN bit or frame error occured +CYGNUM_CAN_EVENT_LEAVING_STANDBY 0x00000200 // CAN hardware leaves standby / power down mode or is waked up +CYGNUM_CAN_EVENT_ENTERING_STANDBY 0x00000400 // CAN hardware enters standby / power down mode +CYGNUM_CAN_EVENT_ARBITRATION_LOST 0x00000800 // arbitration lost +CYGNUM_CAN_EVENT_FILTER_ERR 0x00001000 // CAN message filter / acceptance filter error +CYGNUM_CAN_EVENT_PHY_FAULT 0x00002000 // General failure of physical layer detected +CYGNUM_CAN_EVENT_PHY_H 0x00004000 // Fault on CAN-H detected (Low Speed CAN) +CYGNUM_CAN_EVENT_PHY_L 0x00008000 // Fault on CAN-L detected (Low Speed CAN) +CYGNUM_CAN_EVENT_ERR_ACTIVE 0x00010000 // CAN controller now "error active" +CYGNUM_CAN_EVENT_OVERRUN_RX_HW 0x00020000 // CAN controller reports a RX overrun Often the flags field will contain only one single set flag. But it is -possible that a number of flags is set and so the flag field should always -be checked by a receiver. I.e. if the CYGNUM_CAN_EVENT_RX -is set then also the CYGNUM_CAN_EVENT_OVERRUN_RX -may be set if the received message caused an RX overrun. +possible that a number of flags is set and so the flag field should +always be checked by a receiver. Most of the flags are independent +from each other and the receiver has to handle each of them separately. -The internal receive buffers of the CAN device driver are circular buffers. -That means that even if the buffers are completely filled new messages -will be received. In this case the newest message will always overwrite -the oldest message in receive buffer. If this happens the -CYGNUM_CAN_EVENT_OVERRUN_RX flag will be set for this -new message that caused overwriting of the old one. The -CYGNUM_CAN_EVENT_OVERRUN_RX flag will be set also if -a overrun occures in hardware message buffers of the CAN device. +The internal receive buffers of the CAN device driver are circular +buffers. That means that even if the buffers are completely filled +new messages will be received. In this case the newest message will +always overwrite the oldest message in the receive buffer. If this +happens the +CYGNUM_CAN_EVENT_OVERRUN_RX flag will be set for +this new message that caused overwriting of the old one. However if an +overrun occurs in the hardware message buffers of the CAN controller, +the flag CYGNUM_CAN_EVENT_OVERRUN_RX_HW is raised +instead. @@ -656,6 +664,7 @@ CYG_IO_GET_CONFIG_CAN_MSGBUF_INFO CYG_IO_GET_CONFIG_CAN_TIMEOUT CYG_IO_GET_CONFIG_CAN_HDI CYG_IO_GET_CONFIG_CAN_STATE +CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS @@ -692,6 +701,8 @@ CYG_IO_SET_CONFIG_CAN_MSGBUF CYG_IO_SET_CONFIG_CAN_MODE CYG_IO_SET_CONFIG_CAN_ABORT CYG_IO_SET_CONFIG_CAN_CALLBACK +CYG_IO_SET_CONFIG_CAN_RANGE_FILTER +CYG_IO_SET_CONFIG_CAN_MASK_FILTER @@ -875,8 +886,8 @@ The following flags are available in the | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | -+-------+-------+-------+-------+-------+-------+-------+-------+ -| res | res | res |timest.|SW-Filt|FullCAN| Frametype | ++-------+-------+-------+-------+--------+-------+-------+-------+ +|ListenO|Mask F |Range F|timest.|autobaud|FullCAN| Frametype | @@ -900,17 +911,38 @@ the CAN controller supports more than on - SW-Filter + autobaud -If Bit 3 - CYGNUM_CAN_HDI_FILT_SW - is set to one then -the CAN driver supports some kind of software message filtering. +If Bit 3 - CYGNUM_CAN_HDI_AUTBAUD - is set to one then +the CAN driver supports an autobaud feature. Timestamp If Bit 4 - CYGNUM_CAN_HDI_TIMESTAMP - is set to one then -the CAN hardware supports timestamps for CAN messages +the CAN hardware supports timestamps for CAN messages. + + + + Identifier Range filtering + +If Bit 5 - CYGNUM_CAN_HDI_RANGE_FILTERING - is set to one +then the CAN hardware supports message filtering based on identifier ranges. + + + + Identifier Mask filtering + +If Bit 6 - CYGNUM_CAN_HDI_MASK_FILTERING - is set to one +then the CAN hardware supports message filtering based on identifier masks. + + + + Listen Only mode + +If Bit 7 - CYGNUM_CAN_HDI_LISTEN_ONLY - is set to one +then the CAN hardware supports a 'listen-only' mode. @@ -921,8 +953,8 @@ the CAN hardware supports timestamps for typedef struct cyg_can_msgbox_info_st { - cyg_uint8 count; // number of message buffers available for this device - cyg_uint8 free; // number of free message buffers + cyg_uint16 count; // number of message buffers available for this device + cyg_uint16 free; // number of free message buffers } cyg_can_msgbuf_info; @@ -937,13 +969,13 @@ free message buffers. - cyg_uint8 count + cyg_uint16 count Counts the number of message buffers supported by the device. - cyg_uint8 free + cyg_uint16 free Contains the number of free message buffers. The free message buffers are available for setting up remote buffers (CYG_IO_SET_CONFIG_CAN_REMOTE_BUF) @@ -978,6 +1010,26 @@ present state of the CAN controller. Pos +
+Reading CAN hardware error counters + + +typedef struct cyg_can_err_count_info_st +{ + cyg_uint8 rx_err_count; + cyg_uint8 tx_err_count; +} cyg_can_err_count_info; + + + +Each CAN node maintains two error counters: the Transmit Error Counter (TEC) +and the Receive Error Counter (REC). There are several rules governing how +these counters are incremented and/or decremented. +CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS retrieves the present +value of both error counters (TEC and REC). + +
+
Changing mode of CAN hardware @@ -993,7 +1045,10 @@ typedef enum { CYGNUM_CAN_MODE_STOP, // set controller into stop mode CYGNUM_CAN_MODE_START, // set controller into operational mode - CYGNUM_CAN_MODE_STANDBY // set controller into standby / sleep mode + CYGNUM_CAN_MODE_STANDBY,// set controller into standby / sleep mode + CYGNUM_CAN_MODE_CONFIG, // safe mode to add/delete message buffers + CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER, // set controller into listen only mode. + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT // set controller out of listen only mode. } cyg_can_mode; @@ -1016,13 +1071,35 @@ Set controller into operational mode Set controller into standby / sleep mode. + + CYGNUM_CAN_MODE_CONFIG + +Set controller into a mode allowing modifying message buffers. + + + + CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER + Make controller enter listen-only mode (if +supported by hardware). In such a mode the CAN controller won't +acknowledge the messages it sees on the bus. This mode can help to +perform autobaud at application level if the underlying hardware does +not support it directly. Depending on your CAN transceiver, such a +mode may also be implemented by the transceiver. + + + + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT + Make controller exit of listen-only +mode. The controller will acknowledge all messages it sees on the bus. + + Before the hardware configuration of the device is changed, that means if baud rate is changed or the message buffer and filter configuration -is changed, the CAN hardware should be set into stop mode and if -configuration is finished, then device should be set back into +is changed, the CAN hardware should be set into stop or config mode +and if configuration is finished, then device should be set back into operational mode. Before the device is set into standby mode, the output buffers should be flushed or drained because transmission of a CAN message may wake up the CAN hardware. If a received message wakes @@ -1032,6 +1109,12 @@ inserted into receive message buffer or the CYGNUM_CAN_EVENT_LEAVING_STANDBY flag will be set for the message that caused wake up of CAN hardware. + + +You must also check with the CAN controller data sheet if an incoming +message waking up the controller is fully received and processed by +the controller, or if such a wake up message is lost. +
@@ -1072,7 +1155,7 @@ CYG_IO_SET_CONFIG_WRITE_BLOCKING enable switching between blocking and nonblocking calls separatly for read and write calls. If blocking calls are configured then the read/write functions return only if a message was stored into TX -buffer or a event was received from RX buffer. If non-blocking calls +buffer or an event was received from RX buffer. If non-blocking calls are enabled and there is no space in TX buffer or RX buffer is empty then the function returns immediately with -EAGAIN. @@ -1103,7 +1186,7 @@ CYG_IO_GET_CONFIG_WRITE_BLOCKING Message buffer management -Full CAN controllers often support more the one message buffer. These +Full CAN controllers often support more than one message buffer. These message buffers are often configurable for transmission or reception of certain CAN messages or as a remote buffers. If a CAN hardware supports more than one message buffer then it is possible to configure @@ -1177,7 +1260,7 @@ CYGNUM_CAN_MSGBUF_REMOTE_BUF_WRITE // st CYGNUM_CAN_MSGBUF_RESET_ALL -Clears alle message buffers - no message will be received and all remote buffers are deleted. +Clears all message buffers - no message will be received and all remote buffers are deleted. @@ -1437,7 +1520,7 @@ if (ENOERR != cyg_io_set_config(hDrvFlex } // prepare the message filter -rx_filter.cfg_id = CYGNUM_CAN_MSGBUF_RX_FILTER_ADD +rx_filter.cfg_id = CYGNUM_CAN_MSGBUF_RX_FILTER_ADD; rx_filter.msg.id = 0x800; rx_filter.msg.ext = CYGNUM_CAN_ID_EXT; @@ -1497,6 +1580,160 @@ if (ENOERR != cyg_io_set_config(hDrvFlex
+
+Message filtering using identifier ranges + + +If the low level driver supports it, you can filter messages using +identifier ranges. Such filtering is interesting if it is directly +supported by the CAN controller hardware. Instead of waiting for a +particular message identifier, the application can define one or more +ranges of identifiers. If a received message has an identifier value +(and type) matching a defined identifier range, then the message +passes the filter and is made available to the application. + + + +To add such a filter, use this configuration ID: + + + +CYG_IO_SET_CONFIG_CAN_RANGE_FILTER + + + +The buffer argument given to cyg_io_set_config() +must point to an area holding the following structure: + + + +typedef struct cyg_can_filter_range_cfg_st +{ + cyg_can_id_type ext; // type of identifier concerned + cyg_uint32 lower_id_bound; // lower bound identifier (included) + cyg_uint32 upper_id_bound; // upper bound identifier (included) +} cyg_can_filter_range_cfg; + + + + + cyg_can_id_type ext + Extended ID. If this field +is CYGNUM_CAN_ID_EXT then the next two fields contains +29 bit extended ID. If ext +contains CYGNUM_CAN_ID_STD then the next two fields +represent 11 bits identifiers. + + + + cyg_uint32 lower_id_bound + +Combined with upper_id_bound an identifier range is +defined. All messages having an identifier of the type defined by +ext and included in the range lower_id_bound +to upper_id_bound will pass the filter. The identifiers +lower_id_bound and upper_id_bound are +included in the defined range. + + + + cyg_uint32 upper_id_bound + +Upper identifier value of the defined range. + + + + + +If no free buffers or filters are available, -ENOSPC is +returned. + + +
+ +
+Message filtering using identifier masks + + +If the low level driver supports it, you can filter messages using +identifier masks. Such filtering is interesting if it is directly +supported by the CAN controller hardware. Instead of waiting for a +particular message identifier, the application can define one or more +pair of identifier and mask. If a received message has an identifier +value (and type) that, for each bit set of the mask, matches the +corresponding bit in the provided identifier, then the message passes +the filter and is made available to the application. + + + +To add such a filter, use this configuration ID: + + + +CYG_IO_SET_CONFIG_CAN_MASK_FILTER + + + +The buffer argument given to cyg_io_set_config() +must point to an area holding the following structure: + + + +typedef struct cyg_can_filter_mask_cfg_st +{ + cyg_can_id_type ext; // type of identifier concerned + cyg_uint32 id; // identifier to use for filtering + cyg_uint32 mask; // mask to apply for filtering +} cyg_can_filter_mask_cfg; + + + + + cyg_can_id_type ext + +Extended ID. If this field is CYGNUM_CAN_ID_EXT then the +id field contains a 29 bit extended ID. If it +contains CYGNUM_CAN_ID_STD then the ID is 11 bits. + + + + cyg_uint32 id + +Message ID. This is the ID to be matched with an incoming message, after +having considered the mask field. + + + + cyg_uint32 mask + +Mask value. A message will pass the filter if, for each bit set in +mask, the received message ID has its corresponding +bit equals to the corresponding bit in the id field. + + + + + +For instance let's suppose that the id field is +0x05 (bits 0 and 2 are set) and the mask field is +0x07 (bits 0, 1 and 2 are set). If an incoming message has an ID of +0x01: bit 0 matches since bit 0 is set in the mask and both the +incoming message and the id field have a similar +value for bit 0. The message ID has its bit 1 set to 0, as +the id field and the mask tells the controller to +check this bit: it passes too. However the message ID has its bit 2 +unset, while bit 2 of the mask tells the controller to check bit +2. Bit 2 of the identifier isn't set in the id +field, hence this example message does not pass the filter. + + + +If no free buffers or filters are available, -ENOSPC is +returned. + + +
+
Configuring a callback on events @@ -1527,7 +1764,7 @@ typedef void (*cyg_can_event_cb_t)(cyg_u typedef struct cyg_can_callback_cfg_st { cyg_can_event_cb_t callback_func; // callback function - cyg_uint16 flag_mask; // flags mask + cyg_can_event_flags_t flag_mask; // flags mask CYG_ADDRWORD data; // data passed to callback } cyg_can_callback_cfg; @@ -1538,7 +1775,7 @@ typedef struct cyg_can_callback_cfg_st Pointer to the callback function. The function will be called from DSR context so you should be careful to only call API functions that are safe in DSR -context. The First parameter is a combination of event flags for events that have +context. The first parameter is a combination of event flags for events that have occurred. Second parameter is a user defined data pointer or value. @@ -1549,17 +1786,72 @@ Additional user data that will be passed - cyg_uint16 flag_mask + cyg_can_event_flags_t flag_mask Should be set with a combination of CYGNUM_CAN_EVENT_* flags. If one of these events happens, the callback function will be called, with the actually event flags passed as a parameter. To disable the callback -function from being called set flag_mask to 0. +function from being called set flag_mask to 0. To +set all possible flags use the CYGNUM_CAN_EVENT_ALL macro. + +Instead of using a thread dedicated to reading CAN events, it is +possible, if the CAN controller I/O handle was set in non-blocking +mode for read operations, to have the callback function to read each +event it is waiting for. However the callback function runs in DSR +mode, so it must be carefully written to avoid any blocking call. + + + +If you plan to have the callback function to perform read operations, +be aware that cyg_io_read() retrieves events of +all kinds while the callback function is triggered only on events it +is expecting, as defined by the flag_mask +field. The side effect is that the callback function, if it is not +waiting for all events, may see its first parameter (the flag(s) +describing why the callback function is called) different from an +event it get from cyg_io_read(). + + + +For instance, let's suppose the callback function is expecting +only CYGNUM_CAN_EVENT_RX events while the bus +activity triggers other kind of events, like +the CYGNUM_CAN_EVENT_WARNING_RX event. It is +possible to have in the receive queue a first event of +type CYGNUM_CAN_EVENT_WARNING_RX followed by a +second event of type CYGNUM_CAN_EVENT_RX. In that +case, the callback function is triggered and have its first parameter +set to CYGNUM_CAN_EVENT_RX exactly +when CYGNUM_CAN_EVENT_RX occurs, but if the +callback function reads the event queue, it will first get +the CYGNUM_CAN_EVENT_WARNING_RX event. + + + +If the callback function is set to process all kind of events and +always call cyg_io_read() to get each event, it +is possible to have a receive queue size of one event. + + + +If the CAN controller does not provide message timestamps of its own, +or if the provided timestamps do not match your needs, the callback +function mechanism can be helpful since it is called from the DSR +processing the hardware related events. The callback function can +manage timestamps in the way that suits you the best however there is +a slight delay between an event related to the CAN bus activity occurs +and the time the callback function runs. If you implement your own +timestamps this way, pay also attention to what gives you the current +time. For instance the granularity +of cyg_current_time() may not be accurate enough, +according to the clock resolution and your needs of accuracy. + +
@@ -1951,24 +2243,30 @@ void (*can_init)(can_channel *chan) This function is used to initialize the CAN channel. -void (*xmt_msg)(can_channel *chan, void *pdata) +cyg_bool (*xmt_msg)(can_channel *chan, void *pdata) This function would be called from an interrupt handler after a transmit interrupt indicating that additional messages may be sent. The upper driver will call the putmsg -function as appropriate to send more data to the device. +function as appropriate to send more data to the +device. xmt_msg() returns true +if a message has been provided to the low level +driver, false otherwise. -void (*rcv_event)(can_channel *chan, void *pdata) +cyg_bool (*rcv_event)(can_channel *chan, void *pdata) -This function is used to tell the driver that a message has arrived -at the interface or that an event has occurred. This function is typically -called from the interrupt handler. +This function is used to tell the driver that a message has arrived at +the interface or that an event has occurred. This function is +typically called from the interrupt +handler. rcv_event() +returns true if an event has been provided by the +low level driver, false otherwise. diff --git a/packages/io/can/current/doc/can_driver_doc.html b/packages/io/can/current/doc/can_driver_doc.html --- a/packages/io/can/current/doc/can_driver_doc.html +++ b/packages/io/can/current/doc/can_driver_doc.html @@ -79,7 +79,7 @@

It is possible to configure the read call to be blocking (default) or non-blocking. Non-blocking mode requires both the configuration option CYGOPT_IO_CAN_SUPPORT_NONBLOCKING to be enabled, and the specific device to be set to non-blocking mode for reads (see cyg_io_set_config()). In blocking mode, the call will not return until one single CAN event has been read. In non-blocking mode, if there is no CAN event in buffer, the call returns immediately with -EAGAIN and the caller must try again.

It is possible to configure the write call to be non-blocking with timeout. None-blocking mode with timeout requires the configuration option CYGOPT_IO_CAN_SUPPORT_NONBLOCKING and CYGOPT_IO_CAN_SUPPORT_TIMEOUTS to be enabled, requires the eCos kernel package to be included and the specific device to be set to non-blocking mode for reads (see cyg_io_set_config()). In non-blocking mode with timeouts, if there is no CAN event in receive buffer, the driver waits a certain amound of time (the timeout time) for a CAN event to arrive. If there is still no CAN event in buffer after expiration of the timeout time, -EINTR is returned and the caller must try again.

-

If a event was sucessfully received, the function returns ENOERR.

+

If an event was sucessfully received, the function returns ENOERR.

typedef struct cyg_can_event_st
{
    cyg_uint32      timestamp;
@@ -332,7 +332,7 @@ CYG_IO_GET_CONFIG_READ_BLOCKING
CYG_IO_GET_CONFIG_WRITE_BLOCKING

-
enable switching between blocking and nonblocking calls separatly for read and write calls. If blocking calls are configured then the read/write functions return only if a message was stored into TX buffer or a event was received from RX buffer. If nonblocking calls are enabled and there is no space in TX buffer or RX buffer is empty then the function returns immediatelly with -EAGAIN. If nonblocking calls are enabled and additionally timeouts are supported by driver, then the read/write functions wait until timeout value is expired and then return witn -EINTR. If the read/write operation succeeds during the timed wait then the functions return succesfully with ENOERR. +
enable switching between blocking and nonblocking calls separatly for read and write calls. If blocking calls are configured then the read/write functions return only if a message was stored into TX buffer or an event was received from RX buffer. If nonblocking calls are enabled and there is no space in TX buffer or RX buffer is empty then the function returns immediatelly with -EAGAIN. If nonblocking calls are enabled and additionally timeouts are supported by driver, then the read/write functions wait until timeout value is expired and then return witn -EINTR. If the read/write operation succeeds during the timed wait then the functions return succesfully with ENOERR.

Message buffer configuration

typedef struct cyg_can_msgbox_cfg_st
@@ -345,7 +345,7 @@

CYG_IO_SET_CONFIG_CAN_MSGBUF

and exchanging cyg_can_msgbuf_cfg data structures. The cfg_id field contains the configuration ID that tells the driver what to do with a message buffer, the handle field contains a reference to a certain message buffer and the msg field is necessary for configuration of message buffer parameters. The following configuration identifiers are supported:

-

CYGNUM_CAN_MSGBUF_RESET_ALL        // clears alle message buffers, no message will be received, all remote buffers deleted
+

CYGNUM_CAN_MSGBUF_RESET_ALL        // clears all message buffers, no message will be received, all remote buffers deleted
CYGNUM_CAN_MSGBUF_RX_FILTER_ALL    // cfg driver for reception of all can messges
CYGNUM_CAN_MSGBUF_RX_FILTER_ADD    // add single message filter
CYGNUM_CAN_MSGBUF_REMOTE_BUF_ADD   // add new remote response buffer
diff --git a/packages/io/can/current/include/can.h b/packages/io/can/current/include/can.h --- a/packages/io/can/current/include/can.h +++ b/packages/io/can/current/include/can.h @@ -109,9 +109,9 @@ typedef struct can_lowlevel_funs can_low // typedef struct { - void (*can_init)(can_channel *chan); // Initialize the can channel - void (*xmt_msg)(can_channel *chan, void *pdata); // transmit one single message - void (*rcv_event)(can_channel *chan, void *pdata);// indicate can event occurance + void (*can_init)(can_channel *chan); // Initialize the CAN channel + cyg_bool (*xmt_msg)(can_channel *chan, void *pdata); // transmit one single message + cyg_bool (*rcv_event)(can_channel *chan, void *pdata); // indicate CAN event occurance } can_callbacks_t; diff --git a/packages/io/can/current/include/canio.h b/packages/io/can/current/include/canio.h --- a/packages/io/can/current/include/canio.h +++ b/packages/io/can/current/include/canio.h @@ -99,25 +99,46 @@ typedef enum { // hardware but normally these events should cover the most common CAN events // that may occur. A combination of the event type values is allowed. // -typedef enum -{ - CYGNUM_CAN_EVENT_RX = 0x0001, // message received - CYGNUM_CAN_EVENT_TX = 0x0002, // mesage transmitted - CYGNUM_CAN_EVENT_WARNING_RX = 0x0004, // tx error counter (TEC) reached warning level (>96) - CYGNUM_CAN_EVENT_WARNING_TX = 0x0008, // rx error counter (REC) reached warning level (>96) - CYGNUM_CAN_EVENT_ERR_PASSIVE = 0x0010, // CAN "error passive" occured - CYGNUM_CAN_EVENT_BUS_OFF = 0x0020, // CAN "bus off" error occured - CYGNUM_CAN_EVENT_OVERRUN_RX = 0x0040, // overrun in RX queue or hardware occured - CYGNUM_CAN_EVENT_OVERRUN_TX = 0x0080, // overrun in TX queue occured - CYGNUM_CAN_EVENT_CAN_ERR = 0x0100, // a CAN bit or frame error occured - CYGNUM_CAN_EVENT_LEAVING_STANDBY = 0x0200, // CAN hardware leaves standby / power don mode or is waked up - CYGNUM_CAN_EVENT_ENTERING_STANDBY = 0x0400, // CAN hardware enters standby / power down mode - CYGNUM_CAN_EVENT_ARBITRATION_LOST = 0x0800, // arbitration lost - CYGNUM_CAN_EVENT_FILTER_ERR = 0x1000, // CAN message filter / acceptance filter error - CYGNUM_CAN_EVENT_PHY_FAULT = 0x2000, // General failure of physical layer detected (if supported by hardware) - CYGNUM_CAN_EVENT_PHY_H = 0x4000, // Fault on CAN-H detected (Low Speed CAN) - CYGNUM_CAN_EVENT_PHY_L = 0x8000, // Fault on CAN-L detected (Low Speed CAN) -} cyg_can_event_flags; +#define CYGNUM_CAN_EVENT_RX 0x00000001 // message received +#define CYGNUM_CAN_EVENT_TX 0x00000002 // mesage transmitted +#define CYGNUM_CAN_EVENT_WARNING_RX 0x00000004 // tx error counter (TEC) reached warning level (>96) +#define CYGNUM_CAN_EVENT_WARNING_TX 0x00000008 // rx error counter (REC) reached warning level (>96) +#define CYGNUM_CAN_EVENT_ERR_PASSIVE 0x00000010 // CAN "error passive" occured +#define CYGNUM_CAN_EVENT_BUS_OFF 0x00000020 // CAN "bus off" error occured +#define CYGNUM_CAN_EVENT_OVERRUN_RX 0x00000040 // overrun in RX queue occured +#define CYGNUM_CAN_EVENT_OVERRUN_TX 0x00000080 // overrun in TX queue occured +#define CYGNUM_CAN_EVENT_CAN_ERR 0x00000100 // a CAN bit or frame error occured +#define CYGNUM_CAN_EVENT_LEAVING_STANDBY 0x00000200 // CAN hardware leaves standby/power down mode or is waked up +#define CYGNUM_CAN_EVENT_ENTERING_STANDBY 0x00000400 // CAN hardware enters standby/power down mode +#define CYGNUM_CAN_EVENT_ARBITRATION_LOST 0x00000800 // arbitration lost +#define CYGNUM_CAN_EVENT_FILTER_ERR 0x00001000 // CAN message filter / acceptance filter error +#define CYGNUM_CAN_EVENT_PHY_FAULT 0x00002000 // General failure of physical layer detected (if supported by hardware) +#define CYGNUM_CAN_EVENT_PHY_H 0x00004000 // Fault on CAN-H detected (Low Speed CAN) +#define CYGNUM_CAN_EVENT_PHY_L 0x00008000 // Fault on CAN-L detected (Low Speed CAN) +#define CYGNUM_CAN_EVENT_ERR_ACTIVE 0x00010000 // CAN controller now "error active" +#define CYGNUM_CAN_EVENT_OVERRUN_RX_HW 0x00020000 // CAN controller reports a RX overrun + +typedef cyg_int32 cyg_can_event_flags_t; + +#define CYGNUM_CAN_EVENT_ALL \ + CYGNUM_CAN_EVENT_RX \ + |CYGNUM_CAN_EVENT_TX \ + |CYGNUM_CAN_EVENT_WARNING_RX \ + |CYGNUM_CAN_EVENT_WARNING_TX \ + |CYGNUM_CAN_EVENT_ERR_PASSIVE \ + |CYGNUM_CAN_EVENT_BUS_OFF \ + |CYGNUM_CAN_EVENT_OVERRUN_RX \ + |CYGNUM_CAN_EVENT_OVERRUN_TX \ + |CYGNUM_CAN_EVENT_CAN_ERR \ + |CYGNUM_CAN_EVENT_LEAVING_STANDBY \ + |CYGNUM_CAN_EVENT_ENTERING_STANDBY \ + |CYGNUM_CAN_EVENT_ARBITRATION_LOST \ + |CYGNUM_CAN_EVENT_FILTER_ERR \ + |CYGNUM_CAN_EVENT_PHY_FAULT \ + |CYGNUM_CAN_EVENT_PHY_H \ + |CYGNUM_CAN_EVENT_PHY_L \ + |CYGNUM_CAN_EVENT_ERR_ACTIVE \ + |CYGNUM_CAN_EVENT_OVERRUN_RX_HW // // State of CAN controller @@ -144,7 +165,9 @@ typedef enum e_cyg_can_mode CYGNUM_CAN_MODE_STOP, // set controller into stop mode CYGNUM_CAN_MODE_START, // set controller into operational mode CYGNUM_CAN_MODE_STANDBY,// set controller into standby / sleep mode - CYGNUM_CAN_MODE_CONFIG // set controller and driver into a state where it is safe to add/delete message buffers + CYGNUM_CAN_MODE_CONFIG, // safe mode to add/delete message buffers + CYGNUM_CAN_MODE_LISTEN_ONLY_ENTER, // set controller into listen only mode. + CYGNUM_CAN_MODE_LISTEN_ONLY_EXIT // set controller out of listen only mode. } cyg_can_mode; // @@ -211,8 +234,8 @@ typedef struct st_cyg_can_message typedef struct cyg_can_event_st { cyg_uint32 timestamp; + cyg_can_event_flags_t flags; cyg_can_message msg; - cyg_uint16 flags; } cyg_can_event; // @@ -260,6 +283,16 @@ typedef struct cyg_can_timeout_info_st // +// For reading error counter values from CAN controller +// +typedef struct cyg_can_err_count_info_st +{ + cyg_uint8 rx_err_count; + cyg_uint8 tx_err_count; +} cyg_can_err_count_info; + + +// // this data type defines a handle to a message buffer or message box // of the CAN hardware device // @@ -277,6 +310,26 @@ typedef struct cyg_can_msgbox_cfg_st } cyg_can_msgbuf_cfg; // +// structure for configuration of identifier range filtering +// +typedef struct cyg_can_filter_range_cfg_st +{ + cyg_can_id_type ext; // type of identifier concerned + cyg_uint32 lower_id_bound; // lower bound identifier (included) + cyg_uint32 upper_id_bound; // upper bound identifier (included) +} cyg_can_filter_range_cfg; + +// +// structure for configuration of identifier/mask filtering +// +typedef struct cyg_can_filter_mask_cfg_st +{ + cyg_can_id_type ext; // type of identifier concerned + cyg_uint32 id; // identifier to use for filtering + cyg_uint32 mask; // mask to apply for filtering +} cyg_can_filter_mask_cfg; + +// // this data type defines a CAN message filter. It consits // of a handle to a message box or message buffer and a CAN message. // For the filtering only the id and the ext field of the CAN message are @@ -306,7 +359,7 @@ typedef cyg_can_msgbuf_cfg cyg_can_remot // Support flags: // | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | // +-------+-------+-------+-------+--------+-------+-------+--------+ -// | res | res | res |timest.|autobaud|FullCAN| Frametype | +// |ListenO|Mask F |Range F|timest.|autobaud|FullCAN| Frametype | // typedef struct cyg_can_hdi_st { @@ -324,7 +377,9 @@ typedef struct cyg_can_hdi_st #define CYGNUM_CAN_HDI_FULLCAN 0x04 // controller supports more than one receive and transmit buffer #define CYGNUM_CAN_HDI_AUTBAUD 0x08 // driver supports automatic baudrate detection #define CYGNUM_CAN_HDI_TIMESTAMP 0x10 // driver supports timestamps - +#define CYGNUM_CAN_HDI_RANGE_FILTERING 0x20 // driver supports identifier range filtering +#define CYGNUM_CAN_HDI_MASK_FILTERING 0x40 // driver supports identifier mask filtering +#define CYGNUM_CAN_HDI_LISTEN_ONLY 0x80 // driver supports 'listen-only' mode. // // Callback configuration structure. @@ -339,7 +394,7 @@ typedef void (*cyg_can_event_cb_t)(cyg_u typedef struct cyg_can_callback_cfg_st { cyg_can_event_cb_t callback_func; // callback function - cyg_uint16 flag_mask; // flags mask + cyg_can_event_flags_t flag_mask; // flags mask CYG_ADDRWORD data; // data passed to callback } cyg_can_callback_cfg; diff --git a/packages/io/can/current/src/can.c b/packages/io/can/current/src/can.c --- a/packages/io/can/current/src/can.c +++ b/packages/io/can/current/src/can.c @@ -89,8 +89,8 @@ static Cyg_ErrNo can_set_config(cyg_io_h // Callback functions into upper layer driver // static void can_init(can_channel *chan); -static void can_rcv_event(can_channel *chan, void *pdata); -static void can_xmt_msg(can_channel *chan, void *pdata); +static cyg_bool can_rcv_event(can_channel *chan, void *pdata); +static cyg_bool can_xmt_msg(can_channel *chan, void *pdata); // // Device I/O table @@ -710,13 +710,14 @@ static cyg_bool can_select(cyg_io_handle //=========================================================================== // Callback for received events //=========================================================================== -static void can_rcv_event(can_channel *chan, void *pdata) +static cyg_bool can_rcv_event(can_channel *chan, void *pdata) { can_cbuf_t *cbuf = &chan->in_cbuf; CYG_CAN_EVENT_T *prxbuf = (CYG_CAN_EVENT_T *)cbuf->pdata; #ifdef CYGOPT_IO_CAN_SUPPORT_CALLBACK - cyg_uint16 flags; + cyg_can_event_flags_t flags; #endif + cyg_bool res = false; // // cbuf is a ring buffer - if the buffer is full, then we overwrite the @@ -730,6 +731,7 @@ static void can_rcv_event(can_channel *c prxbuf[cbuf->put].flags = 0; // clear flags because it is a new event if (chan->funs->getevent(chan, &prxbuf[cbuf->put], pdata)) { + res = true; if (cbuf->data_cnt < cbuf->len) { cbuf->data_cnt++; @@ -769,18 +771,21 @@ static void can_rcv_event(can_channel *c } cyg_drv_dsr_unlock(); + + return res; } //=========================================================================== // Callback function for transmit events //=========================================================================== -static void can_xmt_msg(can_channel *chan, void *pdata) +static cyg_bool can_xmt_msg(can_channel *chan, void *pdata) { can_cbuf_t *cbuf = &chan->out_cbuf; can_lowlevel_funs *funs = chan->funs; CYG_CAN_MSG_T *ptxbuf = (CYG_CAN_MSG_T *)cbuf->pdata; CYG_CAN_MSG_T *pbuf_txmsg; + cyg_bool res = false; // // transmit messages as long as there are messages in the buffer @@ -793,6 +798,7 @@ static void can_xmt_msg(can_channel *cha { cbuf->get = (cbuf->get + 1) % cbuf->len; cbuf->data_cnt--; + res = true; } else { @@ -809,7 +815,7 @@ static void can_xmt_msg(can_channel *cha cyg_drv_cond_broadcast(&cbuf->wait); } } - return; + return res; } } // while (cbuf->data_cnt > 0) funs->stop_xmit(chan); // Done with transmit @@ -819,6 +825,8 @@ static void can_xmt_msg(can_channel *cha cbuf->waiting = false; cyg_drv_cond_broadcast(&cbuf->wait); } + + return res; } diff --git a/packages/io/common/current/ChangeLog b/packages/io/common/current/ChangeLog --- a/packages/io/common/current/ChangeLog +++ b/packages/io/common/current/ChangeLog @@ -1,3 +1,28 @@ +2013-06-24 Uwe Kindler + + * include/config_keys.h: Add config key + CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS to read TX and RX error counters + from CAN hardware. + +2012-01-22 Bernard Fouché + + * include/config_keys.h: Add two new keys to configure CAN driver: + CYG_IO_SET_CONFIG_CAN_{RANGE,MASK}_FILTER. [ Bugzilla 1001453 ] + +2011-08-16 Sergei Gavrikov + + * doc/io.sgml (Callbacks): Fixed prototypes of several functions, + reported by Stano Menuna. [ Bugzilla 1001293 ] + +2010-06-06 ccoutand + *doc/io.sgml + Updated DEVIO_TABLE definition, missing select argument + +2010-05-25 ccoutand + * include/config_keys.h: + Add new key to ADC driver to flush data buffer: + CYG_IO_SET_CONFIG_ADC_DATA_FLUSH + 2008-08-08 Nick Garnett * include/config_keys.h: Add keys for ADC devices. diff --git a/packages/io/common/current/doc/io.sgml b/packages/io/common/current/doc/io.sgml --- a/packages/io/common/current/doc/io.sgml +++ b/packages/io/common/current/doc/io.sgml @@ -1091,7 +1091,7 @@ routines. This table is defined by the m -DEVIO_TABLE(l, write, read, get_config, set_config) +DEVIO_TABLE(l, write, read, select, get_config, set_config) @@ -1111,6 +1111,11 @@ DEVIO_TABLE(l, write, read, get_config, cyg_io_read(). + select + The function called as a result of + cyg_io_select(). + + get_config The function called as a result of cyg_io_get_config(). @@ -1433,11 +1438,11 @@ CYGINT_IO_SERIAL_BLOCK_TRANSFER"). functions are available as well: -bool (*data_xmt_req)(serial_channel *chan, +xmt_req_reply_t (*data_xmt_req)(serial_channel *chan, int space, int* chars_avail, unsigned char** chars) -void (*data_xmt_done)(serial_channel *chan) +void (*data_xmt_done)(serial_channel *chan, int chars_sent) @@ -1460,11 +1465,11 @@ driver must call data_xmt_done -bool (*data_rcv_req)(serial_channel *chan, +rcv_req_reply_t (*data_rcv_req)(serial_channel *chan, int avail, int* space_avail, unsigned char** space) -void (*data_rcv_done)(serial_channel *chan) +void (*data_rcv_done)(serial_channel *chan, int chars_rcvd) Instead of calling rcv_char() with a single diff --git a/packages/io/common/current/include/config_keys.h b/packages/io/common/current/include/config_keys.h --- a/packages/io/common/current/include/config_keys.h +++ b/packages/io/common/current/include/config_keys.h @@ -140,6 +140,7 @@ #define CYG_IO_GET_CONFIG_CAN_TIMEOUT 0x0804 #define CYG_IO_GET_CONFIG_CAN_HDI 0x0805 #define CYG_IO_GET_CONFIG_CAN_STATE 0x0806 +#define CYG_IO_GET_CONFIG_CAN_ERR_COUNTERS 0x0807 #define CYG_IO_SET_CONFIG_CAN_INFO 0x0881 #define CYG_IO_SET_CONFIG_CAN_OUTPUT_DRAIN 0x0882 @@ -150,6 +151,8 @@ #define CYG_IO_SET_CONFIG_CAN_MODE 0x0887 #define CYG_IO_SET_CONFIG_CAN_ABORT 0x0888 #define CYG_IO_SET_CONFIG_CAN_CALLBACK 0x0889 +#define CYG_IO_SET_CONFIG_CAN_RANGE_FILTER 0x088A +#define CYG_IO_SET_CONFIG_CAN_MASK_FILTER 0x088B // ======== 0x900 ADC ======================================================== // Get/Set configuration 'key' values for ADC I/O @@ -159,6 +162,7 @@ #define CYG_IO_SET_CONFIG_ADC_RATE 0x0981 #define CYG_IO_SET_CONFIG_ADC_ENABLE 0x0982 #define CYG_IO_SET_CONFIG_ADC_DISABLE 0x0983 +#define CYG_IO_SET_CONFIG_ADC_DATA_FLUSH 0x0984 // ======== 0x1000 Generic =================================================== // Get/Set configuration 'key' values that can apply to more than one diff --git a/packages/io/eth/current/src/lwip/README b/packages/io/eth/current/src/lwip/README deleted file mode 100644 --- a/packages/io/eth/current/src/lwip/README +++ /dev/null @@ -1,10 +0,0 @@ -An EPK of lwip is available from http://humans.iv.ro/jani which has the most -up-to-date package (at least until it all gets integrated). - -It has just been tested on another ARM similar to the EB40 with CS89000 -and it works there too (that board has 128K of RAM). - -Alternatively, lw.diff is the diff against the lwip-0.5.3 tree. It contains -eCos support + an eCos project sample based on unixsim. Look at -lwip-0.5.3/proj/ecos to see how to use it. Modify the Makefile to suit -your needs and to reflect your eCos project dir. diff --git a/packages/io/fileio/current/ChangeLog b/packages/io/fileio/current/ChangeLog --- a/packages/io/fileio/current/ChangeLog +++ b/packages/io/fileio/current/ChangeLog @@ -1,3 +1,18 @@ +2012-03-04 Sergei Gavrikov + + * tests/fnmatch.c: Add missed CYG_TEST_INIT(). + +2011-05-23 Manuel Borchers + + * src/dir.cxx (rewinddir): Fix tracing of rewinddir(). + * src/fio.h: Add new function entry macro (FILEIO_ENTRY_VOID). + [ Bugzilla 1001243 ] + +2010-02-08 Jay Foster + + * tests/pselect.c: Corrected return value of pthread_kill() + to match POSIX standard. + 2008-11-18 Rutger Hofman * src/file.cxx: add a chmod() call, implemented by calling diff --git a/packages/io/fileio/current/src/dir.cxx b/packages/io/fileio/current/src/dir.cxx --- a/packages/io/fileio/current/src/dir.cxx +++ b/packages/io/fileio/current/src/dir.cxx @@ -214,7 +214,7 @@ extern int readdir_r( DIR *dirp, struct extern void rewinddir( DIR *dirp ) { - FILEIO_ENTRY(); + FILEIO_ENTRY_VOID(); int fd = (int)dirp; diff --git a/packages/io/fileio/current/src/fio.h b/packages/io/fileio/current/src/fio.h --- a/packages/io/fileio/current/src/fio.h +++ b/packages/io/fileio/current/src/fio.h @@ -139,6 +139,11 @@ typedef int sigset_t; CYG_REPORT_FUNCTYPE( "returning %d" ); \ CYG_FILEIO_FUNCTION_START(); \ +#define FILEIO_ENTRY_VOID() \ + CYG_REPORT_FUNCTION(); \ + CYG_FILEIO_FUNCTION_START(); \ + + // Do a fileio package defined return. This requires the error code // to be placed in errno, and if it is non-zero, -1 returned as the // result of the function. This also gives us a place to put any diff --git a/packages/io/fileio/current/tests/fnmatch.c b/packages/io/fileio/current/tests/fnmatch.c --- a/packages/io/fileio/current/tests/fnmatch.c +++ b/packages/io/fileio/current/tests/fnmatch.c @@ -119,6 +119,8 @@ int main( int argc, char **argv ) { 0, FNM_PERIOD|FNM_PATHNAME, "/.abc", "/.abc" } }; + CYG_TEST_INIT(); + for (i=0; i < CYG_NELEM(test_case); i++) { if (test_case[i].result != fnmatch(test_case[i].pattern, diff --git a/packages/io/fileio/current/tests/pselect.c b/packages/io/fileio/current/tests/pselect.c --- a/packages/io/fileio/current/tests/pselect.c +++ b/packages/io/fileio/current/tests/pselect.c @@ -273,7 +273,8 @@ void *pthread_entry2( void *arg) nanosleep( &zzz, NULL ); err = pthread_kill( thread1, SIGUSR1 ); - if( err < 0 ) SHOW_RESULT( pthread_kill, err ); + if( err != 0 ) + diag_printf("INFO: pthread_kill() returned %d %s\n", err, strerror(err)); sigusr1_sent++; diff --git a/packages/io/flash/current/ChangeLog b/packages/io/flash/current/ChangeLog --- a/packages/io/flash/current/ChangeLog +++ b/packages/io/flash/current/ChangeLog @@ -1,3 +1,19 @@ +2011-12-21 John Dallaway + + * doc/flash.sgml: Fix block_info field name. Issue reported by Keith + Smith. [ Bugzilla 1001431 ] + +2011-05-13 John Dallaway + + * doc/flash.sgml: Fix cyg_flash_get_into_addr() function name. Issue + reported by Christophe Coutand. [ Bugzilla 1001233 ] + +2010-05-15 Christophe Coutand + + * src/flashiodev.c (flashiodev_lookup): Fix wrong code execution if + CYGFUN_IO_FLASH_BLOCK_FROM_FIS is enabled and + CYGFUN_IO_FLASH_BLOCK_FROM_DEVOFFSET is disabled. + 2010-03-25 Daniel Helgason * cdl/io_flash.cdl: Fix "requires" constraint on @@ -706,7 +722,7 @@ 2000-07-29 Gary Thomas - + @@ -154,7 +154,7 @@ typedef struct { cyg_flashaddr_t start; // First address cyg_flashaddr_t end; // Last address cyg_uint32 num_block_infos;// Number of entries - const cyg_flash_block_info_t *blocks_info; // Info about one block size + const cyg_flash_block_info_t *block_info; // Info about one block size } cyg_flash_info_t; @@ -165,7 +165,7 @@ flash devices, starting from 0. If the d structure pointed to by info is filled in and CYG_FLASH_ERR_OK is returned, otherwise CYG_FLASH_ERR_INVALID. -cyg_flash_get_info() is similar, but returns the +cyg_flash_get_info_addr() is similar, but returns the information about the flash device at the given address. cyg_flash_block_size() returns the size of the block at the given address. cyg_flash_verify_addr() diff --git a/packages/io/flash/current/src/flashiodev.c b/packages/io/flash/current/src/flashiodev.c --- a/packages/io/flash/current/src/flashiodev.c +++ b/packages/io/flash/current/src/flashiodev.c @@ -247,7 +247,10 @@ flashiodev_lookup(struct cyg_devtab_entr start = flash_base; end = flash_base + size - 1; valid = true; - } else + } +# ifdef CYGFUN_IO_FLASH_BLOCK_FROM_DEVOFFSET + else +# endif #endif // ifdef CYGFUN_IO_FLASH_BLOCK_FROM_FIS #ifdef CYGFUN_IO_FLASH_BLOCK_FROM_DEVOFFSET // Next, support device numbers with offsets encoded in path name diff --git a/packages/io/i2c/current/ChangeLog b/packages/io/i2c/current/ChangeLog --- a/packages/io/i2c/current/ChangeLog +++ b/packages/io/i2c/current/ChangeLog @@ -1,3 +1,8 @@ +2013-04-10 Ilija Kocho * cdl/i2c.cdl, src/i2c.cxx, doc/i2c.sgml: I2C buses now initialize diff --git a/packages/io/i2c/current/include/i2c.h b/packages/io/i2c/current/include/i2c.h --- a/packages/io/i2c/current/include/i2c.h +++ b/packages/io/i2c/current/include/i2c.h @@ -82,6 +82,10 @@ typedef struct cyg_i2c_device { // The information needed for interacting over a particular I2C bus. // Most hardware will only have one bus, but multiple buses are // supported. Thread synchronization happens on a per-bus level. +#ifndef CYGBLD_I2C_DEVICE_CONST +#define CYGBLD_I2C_DEVICE_CONST const +#endif + typedef struct cyg_i2c_bus { cyg_drv_mutex_t i2c_lock; #ifdef CYGDBG_USE_ASSERTS @@ -89,8 +93,8 @@ typedef struct cyg_i2c_bus { #endif // The hardware-specific functions that do the real work void (*i2c_init_fn)(struct cyg_i2c_bus*); - cyg_uint32 (*i2c_tx_fn)(const cyg_i2c_device*, cyg_bool, const cyg_uint8*, cyg_uint32, cyg_bool); - cyg_uint32 (*i2c_rx_fn)(const cyg_i2c_device*, cyg_bool, cyg_uint8*, cyg_uint32, cyg_bool, cyg_bool); + cyg_uint32 (*i2c_tx_fn)(CYGBLD_I2C_DEVICE_CONST cyg_i2c_device*, cyg_bool, const cyg_uint8*, cyg_uint32, cyg_bool); + cyg_uint32 (*i2c_rx_fn)(CYGBLD_I2C_DEVICE_CONST cyg_i2c_device*, cyg_bool, cyg_uint8*, cyg_uint32, cyg_bool, cyg_bool); void (*i2c_stop_fn)(const cyg_i2c_device*); // A spare field for use by the driver void* i2c_extra; diff --git a/packages/io/serial/current/ChangeLog b/packages/io/serial/current/ChangeLog --- a/packages/io/serial/current/ChangeLog +++ b/packages/io/serial/current/ChangeLog @@ -1,3 +1,21 @@ +2012-03-13 Sergei Gavrikov + + * tests/serial1.c: Fix compiler warning about variable that is set but + not used. + * tests/tty1.c: Ditto. + +2011-03-28 Ilija Kocho + Sergei Gavrikov + + * src/common/termiostty.c: Add a possibility to define a few + additional DEVTAB entries. + * src/common/tty.c: Same. + +2010-06-02 Jay Foster + + * src/common/termios.c : Fix tcflush() and tcdrain(). They were + effectively no-op functions. + 2008-09-02 Steven Clugston * tests/ser_test_protocol.inl : Add mpc555 generic platform diff --git a/packages/io/serial/current/src/common/termios.c b/packages/io/serial/current/src/common/termios.c --- a/packages/io/serial/current/src/common/termios.c +++ b/packages/io/serial/current/src/common/termios.c @@ -263,7 +263,7 @@ tcdrain( int fildes ) ret = fp->f_ops->fo_getinfo( fp, CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN, - NULL, 0 ); + NULL, 1 ); cyg_fp_free( fp ); if ( ret > 0 ) { @@ -302,17 +302,17 @@ tcflush( int fildes, int queue_sel ) case TCIOFLUSH: ret = fp->f_ops->fo_getinfo( fp, CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH, - NULL, 0 ); + NULL, 1 ); // fallthrough case TCIFLUSH: ret = fp->f_ops->fo_getinfo( fp, CYG_IO_GET_CONFIG_SERIAL_INPUT_FLUSH, - NULL, 0 ); + NULL, 1 ); break; case TCOFLUSH: ret = fp->f_ops->fo_getinfo( fp, CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH, - NULL, 0 ); + NULL, 1 ); break; default: ret = EINVAL; diff --git a/packages/io/serial/current/src/common/termiostty.c b/packages/io/serial/current/src/common/termiostty.c --- a/packages/io/serial/current/src/common/termiostty.c +++ b/packages/io/serial/current/src/common/termiostty.c @@ -166,6 +166,11 @@ DEVTAB_ENTRY(termios_io3, &termios_private_info3); #endif +// More DEVTAB entries can be added using an inclusion +#ifdef CYGDAT_IO_SERIAL_TERMIOS_ADD_INL +# include CYGDAT_IO_SERIAL_TERMIOS_ADD_INL +#endif + static const cc_t c_cc_init[ NCCS ] = { 0x04, /* EOF == ^D */ 0, /* EOL */ diff --git a/packages/io/serial/current/src/common/tty.c b/packages/io/serial/current/src/common/tty.c --- a/packages/io/serial/current/src/common/tty.c +++ b/packages/io/serial/current/src/common/tty.c @@ -137,6 +137,11 @@ DEVTAB_ENTRY(tty_io3, &tty_private_info3); #endif +// More DEVTAB entries can be added using an inclusion +#ifdef CYGDAT_IO_SERIAL_TTY_ADD_INL +# include CYGDAT_IO_SERIAL_TTY_ADD_INL +#endif + static bool tty_init(struct cyg_devtab_entry *tab) { diff --git a/packages/io/serial/current/tests/serial1.c b/packages/io/serial/current/tests/serial1.c --- a/packages/io/serial/current/tests/serial1.c +++ b/packages/io/serial/current/tests/serial1.c @@ -75,7 +75,6 @@ void serial_api_test(int dummy) { cyg_io_handle_t handle; - int res; cyg_uint32 len; unsigned char buffer[16]; @@ -88,8 +87,8 @@ serial_api_test(int dummy) test_open_ser(&handle); // read & write - res = cyg_io_read(handle, &buffer[0], &len); - res = cyg_io_write(handle, &buffer[0], &len); + cyg_io_read(handle, &buffer[0], &len); + cyg_io_write(handle, &buffer[0], &len); // cyg_io_get_config cyg_io_get_config(handle, diff --git a/packages/io/serial/current/tests/tty1.c b/packages/io/serial/current/tests/tty1.c --- a/packages/io/serial/current/tests/tty1.c +++ b/packages/io/serial/current/tests/tty1.c @@ -74,7 +74,6 @@ cyg_handle_t thread_handle; void tty_api_test(cyg_io_handle_t* handle) { - int res; cyg_uint32 len; unsigned char buffer[16]; @@ -85,8 +84,8 @@ tty_api_test(cyg_io_handle_t* handle) CYG_TEST_FAIL_FINISH("Not reached"); // read & write - res = cyg_io_read(handle, &buffer[0], &len); - res = cyg_io_write(handle, &buffer[0], &len); + cyg_io_read(handle, &buffer[0], &len); + cyg_io_write(handle, &buffer[0], &len); // cyg_io_get_config // TTY layer diff --git a/packages/io/usb/msd/slave/current/ChangeLog b/packages/io/usb/msd/slave/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/ChangeLog @@ -0,0 +1,44 @@ +2010-11-13 John Dallaway + + * cdl/usbs_msd.cdl: Reference per-package documentation. + +2010-11-13 Christophe Coutand + + * doc/usbs_msd.sgml: Added package documentation + +2010-11-12 Christophe Coutand + + *include/usbs_msd_opcode.h + *include/usbs_msd_io.h + *include/usbs_msd.h + *include/usbs_msd.inl + *include/usbs_msd_scsi.h + *tests/usbs_test_ramdisk.c + *src/usbs_msd_handler.c + *src/usbs_msd_scsi.c + *src/usbs_msd.c + *cdl/usbs_msd.cdl: Initial contribution. [ Bugzilla 1000987 ] + +//=========================================================================== +// ####GPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2010 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 or (at your option) any +// later version. +// +// This program 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 +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., 51 Franklin Street, +// Fifth Floor, Boston, MA 02110-1301, USA. +// ------------------------------------------- +// ####GPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl b/packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/cdl/usbs_msd.cdl @@ -0,0 +1,364 @@ +# ==================================================================== +# +# usbs_msd.cdl +# +# USB slave-side mass storage package. +# +# ==================================================================== +## ####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later +## version. +## +## eCos 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 General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License +## along with eCos; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +## +## As a special exception, if other files instantiate templates or use +## macros or inline functions from this file, or you compile this file +## and link it with other works to produce a work based on this file, +## this file does not by itself cause the resulting work to be covered by +## the GNU General Public License. However the source code for this file +## must still be made available in accordance with section (3) of the GNU +## General Public License v2. +## +## This exception does not invalidate any other reasons why a work based +## on this file might be covered by the GNU General Public License. +## ------------------------------------------- +## ####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): USB Slave Mass Storage, ccoutand +# +# Contributors: jld +# Date: 2010-06-04 +# +#####DESCRIPTIONEND#### +# ==================================================================== + +cdl_package CYGPKG_IO_USB_SLAVE_MSD { + + display "USB slave mass storage support" + include_dir "cyg/io/usb" + parent CYGPKG_IO_USB_SLAVE + doc ref/io-usb-slave-msd.html + + requires { CYGPKG_KERNEL } + requires { CYGPKG_IO_DISK } + requires { CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS >= 1 } + requires { CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS >= 1 } + + compile usbs_msd.c usbs_msd_handler.c usbs_msd_scsi.c + + implements CYGINT_IO_USB_SLAVE_CLIENTS + + define_proc { + puts $::cdl_system_header "#define CYGDAT_IO_USB_SLAVE_MSD_INL " + } + + description " + The USB slave mass storage device (MSD) package supports + the development of USB peripherals which act has mass storage + device to the host machine. The actual storage must be implemented + on top of the disk package." + + # + # Mass Storage Device 0 + # + cdl_component CYGPKG_IO_USB_SLAVE_MSD0 { + display "USB slave mass storage support for device 0" + flavor bool + default_value 1 + description " + This option implement the USB MSD device 0." + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_SUB_CLASS_TYPE { + display "Mass-storage Device USB Sub Class" + flavor data + default_value { "SCSI" } + legal_values { "SCSI" "RBC" } + description " + Specify the transport protocols and command code systems + transported by the interface. Currently only the SCSI + transparent command set is implemented." + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_EP0 { + display "Name of EP0 structure" + flavor data + default_value { "usbs_at91_ep0" } + description " + The name of the variable that contains the endpoint 0 + structure. This should be set to the EP0 structure for + the desired USB device driver such as usbs_at91_ep0, + usbs_sa11x0_ep0, etc" + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_EP0_MAX_PACKET_SIZE { + display "The size of EP0" + flavor data + default_value 8 + legal_values { 8 16 64 } + description " + The size of the EP0 hardware buffer on the specific USB + chip used." + } + + + cdl_component CYGPKG_IO_USB_SLAVE_MSD0_STATIC_EP { + display "Use static I/O endpoint structures" + flavor bool + default_value 1 + description " + Enables the use of static I/O endpoint structures. Some + USB slave device drivers implement dynamic endpoint + configuration and therefore require this component to be + disabled." + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_TX_EP { + display "The Tx (USB IN) endpoint structure" + flavor data + default_value { "usbs_at91_ep1" } + description " + The endpoint structure that corresponds to the selected + Tx endpoint number. This is dependent on the USBS device + driver selected, and could be usbs_at91_ep1, + usbs_sa11x0_ep1, etc" + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_RX_EP { + display "The Rx (USB OUT) endpoint structure" + flavor data + default_value { "usbs_at91_ep2" } + description " + The endpoint structure that corresponds to the selected + Rx endpoint number. This is dependent on the USBS device + driver selected, and could be usbs_at91_ep2, + usbs_sa11x0_ep2, etc" + } + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_NUM { + display "Tx (USB IN) endpoint number" + flavor data + default_value 1 + description " + The endpoint that should be used for the device-side + transmitter, which is the USB IN direction." + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_MAX_PACKET_SIZE { + display "Tx (USB IN) endpoint sze" + flavor data + default_value 64 + legal_values { 32 64 128 256 512 } + description " + The size of the Tx EP hardware buffer on the specific USB + chip used." + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_NUM { + display "Rx (USB OUT) endpoint number" + flavor data + default_value 2 + description " + The endpoint that should be used for the device-side + receiver, which is the USB OUT direction." + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_MAX_PACKET_SIZE { + display "Rx (USB OUT) endpoint size" + flavor data + default_value 64 + legal_values { 32 64 128 256 512} + description " + The size of the Rx EP hardware buffer on the specific USB + chip used." + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_VENDOR_ID { + display "USB Forum Vendor ID" + flavor data + default_value 0xFFFF + legal_values 1 to 0xFFFF + description " + Each USB vendor has an Vendor ID allocated to it by the + USB-IF organization. Any arbitrary value can be selected + for testing provided that it doesn't conflict with devices + on the development host, but a device should NEVER be + released publicly without a valid Vendor ID" + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_PRODUCT_ID { + display "USB product ID" + flavor data + default_value 1 + legal_values 1 to 0xFFFF + description " + You are free to select an arbitrary 16-bit Product ID for + a device. The combination of Vendor ID and Product ID + uniquely identified a USB device." + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR { + display "The Device Vendor's Name (Manufacturer String)" + flavor data + default_value { "\"eCos\"" } + description " + The standard USB enumeration allows for a + manufacturer's name which is normally reported to the + user when the device is first plugged into the host." + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_PRODUCT_STR { + display "The Device Product Name" + flavor data + default_value { "\"eCos USB Mass Storage Device\"" } + description " + The standard USB enumeration allows for a product name + which is normally reported to the user when the device + is first plugged into the host." + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_SERIAL_STR { + display "The Device Product Serial Number" + flavor data + default_value { "\"123456789AB\"" } + description " + The standard USB enumeration allows for a serial number." + } + + cdl_option CYGDAT_IO_USB_SLAVE_MSD0_LUN0_NAME { + display "LUN0 entry name" + flavor data + default_value { "\"/dev/ramdisk0/1\"" } + description " + Specify the logical unit 0 devtab entry name. The default value + correspond to the partition 1 of the RAM disk created in the + USBS mass storage example application." + } + + cdl_option CYGOPT_IO_USB_SLAVE_MSD0_BUSPOWERED { + display "The Device is bus powered" + default_value 0 + flavor bool + description " + Tells the host whether the Device is a bus powered + device or a self powered device." + } + + cdl_option CYGNUM_IO_USB_SLAVE_MSD0_CURRENTDRAW { + display "Maximum current (in mA) drawn from USB bus" + flavor data + default_value 100 + legal_values 1 to 500 + requires { (CYGNUM_IO_USB_SLAVE_MSD_CURRENTDRAW > 100) + implies CYGOPT_IO_USB_SLAVE_MSD_BUSPOWERED } + description " + The maximum current drawn by the Device from the USB bus. + It should report the peak value. A self powered device + can draw up to 100mA, a bus powered device can draw up to + 500mA. (If it is sometimes below 100mA and sometimes over, + then a transition could be done at runtime between self and + bus powered modes, but that would be complicated and the + device would have to return from configured to addressed + state. For details, see the USB specification.)" + } + + } + + cdl_option CYGBLD_IO_USB_SLAVE_MSD_DEBUG { + display "Enable debug output from the driver" + default_value 0 + flavor bool + description " + The driver may produce debug output which can be + useful to work out why it is not working as expected." + } + + cdl_option CYGBLD_IO_USB_SLAVE_MSD_TRACE { + display "Enable trace output from the driver" + default_value 0 + flavor bool + description " + Allow tracing of every USB transaction for debugging + purpose." + } + + cdl_option CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE { + display "Enable application to stall endpoints" + default_value 0 + flavor bool + description " + A mass storage device must stall one or both bulk endpoints in + several situations. However, not all USB device drivers seems + to implement this functionality correctly. Hence this option is + disable be default. Testing shows that both Linux and Windows can + handle mass storage with stall disable." + } + + cdl_component CYGPKG_IO_USB_SLAVE_MSD_OPTIONS { + display "Build options" + flavor none + + description " + Package-specific build options including control over compiler + flags used only in building this package." + + cdl_option CYGPKG_IO_USB_SLAVE_MSD_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building this package. These flags are used in addition + to the set of global flags." + } + + cdl_option CYGPKG_IO_USB_SLAVE_MSD_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building this package. These flags are removed from + the set of global flags if present." + } + + cdl_component CYGBLD_IO_USB_SLAVE_MSD_EXAMPLES { + display "Build example programs" + no_define + description " + Enabling this option will cause the example program + to be built using the normal test case infrastructure." + + cdl_option CYGPKG_IO_USB_SLAVE_MSD_TESTS { + display "USBS MSD example/test program" + no_define + flavor data + calculated { "tests/usbs_test_ramdisk" } + description " + usbs_test_ramdisk creates a tiny FAT12 file-system + on top of a 'ram disk' device. The USB MSD service is + started and the disk should appear at the host side as + a regular mass storage device. If the FAT file-system + package is included, some files will be created prior to + the USB MSD device to be started." + } + } + + } +} diff --git a/packages/io/usb/msd/slave/current/doc/usbs_msd.sgml b/packages/io/usb/msd/slave/current/doc/usbs_msd.sgml new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/doc/usbs_msd.sgml @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eCos Support for USB Mass Storage Peripherals + + + + + + Introduction + + + Introduction + + eCos support for USB Mass Storage Peripherals + + + + Introduction + + Currently, the eCos USB-Mass Storage Device (MSD) slave package + provides support only for the SCSI transparent command set. The + package flexibility allows future extension for other sub-class, + .i.e. RBC, UFI etc.. + The package requires the actual storage media to use the eCos disk + interface. Disk sector size is assumed 512 bytes. + + + The USB-MSD package is not tied to any specific + hardware. It requires the presence of USB hardware on the + target and a suitable device driver to make endpoints + available for this code to use. The configuration system + cannot load the eCos package automatically for specific + targets, in the way that a USB device driver or an ethernet + driver can be loaded automatically. Instead, the package has + to be added explicitly. When using the command line tools this + will involve an operation like the following: + + + $ ecosconfig add usbs_msd + + + Typically, this will automatically cause the USB device driver + to become active. The USB-Mass Storage Device driver runs as a + thread, therefore requires the kernel package to be active. To + start the MSD interface, user must call the usbs_msd_start() + function. No other user intervention is required. + The MSD driver will interact directly with the storage media. + Care should be taken not to mount/use the filesystem present on + the media while used as a mass storage. This could potentially + damage the filesystem. + + + + + + + + + + Configuration + + + Configuration + Configuration USB Mass Storage Peripherals + + + Configuration + + The USB Mass Storage Device interface uses the bulk transfer mode. It needs + three endpoints for the communication with the host to be complete. + The control endpoint (commonly EP0), the transmission and reception + endpoints. The default CDL file contains configuration for + the USB-Mass Storage Device 0. While it is uncommon to have several USB + ports on a device, it is not impossible, hence user can update the package and + create a second device .e.g. MSD1. + + + Endpoints + + Each endpoint shall be configured according to the underlying hardware. + The endpoints configuration includes, the structure name, endpoint number + and buffer size according to the USB chip specification. + + The control endpoint is selected with + CYGDAT_IO_USB_SLAVE_MSD0_EP0. + The default values is set to "usbs_at91_ep0". This is the control + endpoint for the Atmel AT91 USB device driver. + + The TX and RX endpoints can be assigned statically or dynamically (assuming the USB + device driver supports it). In case of static configuration, the bulk IN and bulk OUT + endpoints are configured with CYGDAT_IO_USB_SLAVE_MSD0_TX_EP + and CYGDAT_IO_USB_SLAVE_MSD0_RX_EP respectively. + + In addition, the TX and RX enpoints number must be provided by the user. + They are configured with CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_NUM + and CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_NUM + + In case of dynamic endpoints configuration, only the endpoint number is mandatory. + + + + The last endpoints configuration parameters are the entpoints buffer size. They are set with: + + CYGNUM_IO_USB_SLAVE_MSD0_EP0_MAX_PACKET_SIZE + CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_MAX_PACKET_SIZE + CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_MAX_PACKET_SIZE + + A mass storage device must stall one or both bulk endpoints in + several situations. However, not all eCos USB device drivers seems + to implement this functionality correctly. Hence, this option is + disable by default. Testing shows that both Linux and Windows can + handle mass storage device with stall disable as long as all data transfer phase + are handled correctly. Enpoint stall can be enable with + CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE. + + + Enumeration + + The USB MSD device will make its vendor:product ID known to + the host. This should be configured + with CYGNUM_IO_USB_SLAVE_MSD0_VENDOR_ID and + CYGNUM_IO_USB_SLAVE_MSD0_PRODUCT_ID NOTE: + The default configurations are not valid for commercial products, but + should work for testing. + + + The USB enumeration also contains text strings to describe the + device. The manufacturer string can be set with + CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR. The product name + can be set with CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR, + finally, the serial number can be set + with CYGDAT_IO_USB_SLAVE_MSD0_SERIAL_STR. + + + Storage + + To access the storage media, the USB MSD package requires the storage + media to use the eCos disk interface. The disk sector size is assumed + to be 512 bytes. Multiple logical units are supported by the package + (2 by default). + More logical units can be supported by changing the + USBS_MSD_CBW_MAX_LUN definition according + to the user needs. Two logical units can be either 2 partitions on the same + disk or 2 partitions on 2 different physical disks. + The first logical unit can be set with + CYGDAT_IO_USB_SLAVE_MSD0_LUN0_NAME. The default value + is assigned to "/dev/ramdisk0/1", the first partition of the ramdisk + used by the test application. + + + + + + + + + + + Host Configuration + + + Host Configuration + Host Configuration for USB Mass Storage like Peripherals + + + + + Host Configuration + + With modern host operating system, no specific configuration of the + host shall be required to bring up the eCos USB-Mass Storage Device. + + SCSI command set + + The USB-Mass Storage device will respond to a set of SCSI commands: + + INQUIRY + READ_CAPACITY + READ_10 + WRITE_10 + REQUEST_SENSE + TEST_UNIT_READY + + and partially to the commands: + + SENSE_6 + VERIFY_10 + REVENT_ALLOW_MEDIUM_REMOVAL + + + + + + + + + + + + Example + + + Example + Example for USB Mass Storage like Peripherals + + + + RAM disk + + The "ram disk" is a test application supplied to verify / debug the USB-Mass Storage + package. The minimal functionality of this test case is to create a tiny "ram disk" + device large of around 32 sectors of 512 bytes each. The disk devtab entry + is "/dev/ramdisk0". A FAT12 filesystem is created on top of it + as the first partition of the disk. The partition is therefore accessible from + "/dev/ramdisk0/1". The default behavior of the application is to + start the USB MSD thread. Once plugged into the host machine, an empty drive + called eCos-3.0 shall appear in the host explorer. + To test further, the FAT filesystem package can be included while compiling the test + application. If included, before the MSD driver is started, the application will + create 2 files (fee and foo) and 1 directory (bar) in the filesystem. Both files and + directory shall appear in the host explorer. + + Configuration + + The test application was primarly tested with the AT91 architecture. The control + endpoint is set to "usbs_at91_ep0" and the buffer size + to 8 bytes. + The TX endpoint is set to "usbs_at91_ep1" and the buffer size + to 64 bytes (with Tx (USB IN) endpoint number set to 1). + The RX endpoint is set to "usbs_at91_ep2" and the buffer size + to 64 bytes (with Rx (USB OUT) endpoint number set to 2). + + + + + + + + diff --git a/packages/io/usb/msd/slave/current/include/usbs_msd.h b/packages/io/usb/msd/slave/current/include/usbs_msd.h new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/include/usbs_msd.h @@ -0,0 +1,282 @@ +#ifndef CYGONCE_USBS_MSD_H +#define CYGONCE_USBS_MSD_H +//========================================================================== +// +// include/usbs_msd.h +// +// Description of the USB slave-side MSD +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2010-06-03 +// Purpose: +// Description: USB slave-side MSD support +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +// ---------------------------------------------------------------------------- +// The Mass Storage class requests +// +#define USBS_MSD_CLASS_REQ_ADSC 0x00 +#define USBS_MSD_CLASS_REQ_GET_REQUEST 0xFC +#define USBS_MSD_CLASS_REQ_PUT_REQUEST 0xFD +#define USBS_MSD_CLASS_REQ_GET_MAX_LUN 0xFE +#define USBS_MSD_CLASS_REQ_BOMSR 0xFF + +// ---------------------------------------------------------------------------- +// Subclass values +// +#define USBS_MSD_SUB_CLASS_RBC 0x01 // Reduced Block Commands, typically for flash device +#define USBS_MSD_SUB_CLASS_SFF8020I 0x02 // For CDROM devices +#define USBS_MSD_SUB_CLASS_QIC_157 0x03 // QIC-157, Tape devices +#define USBS_MSD_SUB_CLASS_UFI 0x04 // For Floppy Drive Device +#define USBS_MSD_SUB_CLASS_SFF8070I 0x05 // For Floppy Drive Device +#define USBS_MSD_SUB_CLASS_SCSI 0x06 // SCSI transparent + +#define USBS_MSD_DATA_IFACE_CLASS 0x8 // mass-storage + +// ---------------------------------------------------------------------------- +// Command Wrapper values +// +#define USBS_MSD_CSW_STATUS_PASSED 0x0 +#define USBS_MSD_CSW_STATUS_FAILED 0x1 + +#define USBS_MSD_CBW_SIGNATURE 0x43425355 +#define USBS_MSD_CSW_SIGNATURE 0x53425355 + +#define USBS_MSD_CBW_HOST2DEVICE 0x00 +#define USBS_MSD_CBW_DEVICE2HOST 0x80 + +#define USBS_MSD_DEVICE_CLASS 0 +#define USBS_MSD_NUM_IFACE 1 +#define USBS_MSD_NUM_ENDP 2 + +// ---------------------------------------------------------------------------- +// Helper macros +// +#define LO_BYTE_16(word16) ((cyg_uint8) ((word16) & 0xFF)) +#define HI_BYTE_16(word16) ((cyg_uint8) (((word16) >> 8) & 0xFF)) + +#define BYTE0_32(word32) ((cyg_uint8) ((word32) & 0xFF)) +#define BYTE1_32(word32) ((cyg_uint8) (((word32) >> 8) & 0xFF)) +#define BYTE2_32(word32) ((cyg_uint8) (((word32) >> 16) & 0xFF)) +#define BYTE3_32(word32) ((cyg_uint8) (((word32) >> 24) & 0xFF)) + +#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH(interfaces, endpoints) \ + (USB_CONFIGURATION_DESCRIPTOR_LENGTH + \ + ((interfaces) * USB_INTERFACE_DESCRIPTOR_LENGTH) + \ + ((endpoints) * USB_ENDPOINT_DESCRIPTOR_LENGTH)) + +// ---------------------------------------------------------------------------- +// Interface values +// +#define USBS_MSD_INTERFACE_PROTO 0x50 // Bulk mode + +#define USBS_MSD_CBW_MAX_LUN 2 +#define USBS_MSD_CBW_MIN_SCSI_CMD_LEN 1 +#define USBS_MSD_CBW_MAX_SCSI_CMD_LEN 16 + +#define USBS_MSD_DISK_SECTOR_SIZE 512 + +// ---------------------------------------------------------------------------- +// Mass Storage task constant +// +#define USBS_MSD_THREAD_STACK_SIZE 2048 +#define USBS_MSD_THREAD_STACK_PRIORITY 15 + +// command block wrapper +typedef struct usbs_msd_cbw { + cyg_uint32 signature; + cyg_uint32 tag; + cyg_uint32 data_transfert_len; + cyg_uint8 flags; + cyg_uint8 lun; + struct cb { + cyg_uint8 len; + cyg_uint8 data[16]; + } cb; +} __attribute__((packed)) usbs_msd_cbw; + +// command status wrapper +typedef struct usbs_msd_csw { + cyg_uint32 signature; + cyg_uint32 tag; + cyg_uint32 data_residue; + cyg_uint8 status; +} __attribute__((packed)) usbs_msd_csw; + +// command block wrapper state +typedef enum { + CYG_USBS_MSD_WAIT, + CYG_USBS_MSD_DATA_IN, + CYG_USBS_MSD_DATA_OUT +} usbs_msd_state_t; + +// End-point type +typedef enum { + CYG_USBS_EP0, + CYG_USBS_EP_RX, + CYG_USBS_EP_TX +} usbs_msd_ep_t; + +// End-point status / control +typedef struct usbs_msd_ep_sc_t { + cyg_sem_t ready; + cyg_int32 result; +} usbs_msd_ep_sc_t; + +// Storage devices +typedef struct usbs_msd_lun { + cyg_io_handle_t handle[USBS_MSD_CBW_MAX_LUN]; + const char * name[USBS_MSD_CBW_MAX_LUN]; + cyg_uint8 max_lun; +} usbs_msd_lun; + +typedef struct usbs_msd usbs_msd; + +// Sub Class Handler +typedef cyg_int32 (*handler_cmd_fn)( usbs_msd * ); +typedef bool (*handler_init_fn)(void **); + +// End-point functions +typedef cyg_int32 (*send_fn) ( usbs_msd *, const void * , cyg_int32 ); +typedef cyg_int32 (*receive_fn)( usbs_msd *, const void * , cyg_int32 ); +typedef cyg_int32 (*stall_fn) ( usbs_msd* msd, usbs_msd_ep_t ep ); + +// Mass-storage device structure +struct usbs_msd { + // Specify end-points to be used + usbs_control_endpoint* ctrl_ep; + usbs_tx_endpoint* tx_ep; + usbs_rx_endpoint* rx_ep; + + cyg_uint8 tx_ep_num; + cyg_uint8 rx_ep_num; + + cyg_bool static_ep; + + // Enumeration data for this device + usbs_enumeration_data* enum_data; + + // Enumeration string + const char* mfg_str; + const char* product_str; + const char* serial_str; + char* enum_mfg_str; + char* enum_product_str; + char* enum_serial_str; + + // End-point internal status/control + usbs_msd_ep_sc_t rx; + usbs_msd_ep_sc_t tx; + + // Lock for the state + cyg_mutex_t lock; + + // Condition variable for state changes + cyg_cond_t state_cond; + + // State of the USB interface + cyg_uint32 usb_state; + + // Data transport-phase buffer + cyg_uint8 buffer[USBS_MSD_DISK_SECTOR_SIZE]; + + // State of the MSD + usbs_msd_state_t state; + + void (*app_state_change_fn)(struct usbs_control_endpoint*, + void*, usbs_state_change, int); + + // Pointer to handler data + void* handler_data; + + // Commands Handler + handler_cmd_fn handler_cmd; + + // Initialize Command Handler + handler_init_fn handler_init; + + send_fn send; + receive_fn receive; + stall_fn stall; + + // Mass-Storage Service + char serv_stack[USBS_MSD_THREAD_STACK_SIZE]; + cyg_handle_t serv_handle; + cyg_thread serv_thread; + char* serv_name; + + // Storage Device + usbs_msd_lun* lun; + + // Command Block Wrapper + usbs_msd_cbw cbw; + + // Command Status Wrapper + usbs_msd_csw csw; +}; + +// ---------------------------------------------------------------------------- +// A C interface to the MSD USB code. +// This is the interface for internal code + +// Block the calling thread until the host configures the USB device. +void usbs_msd_wait_until_configured( usbs_msd* ); + +// Determines if the USB subsystem is configured +cyg_bool usbs_msd_is_configured( usbs_msd* ); + +// MSD main thread +void usbs_msd_handler( cyg_addrword_t ); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // CYGONCE_USBS_MSD_H + diff --git a/packages/io/usb/msd/slave/current/include/usbs_msd.inl b/packages/io/usb/msd/slave/current/include/usbs_msd.inl new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/include/usbs_msd.inl @@ -0,0 +1,241 @@ +//========================================================================== +// +// usbs_msd.inl +// +// Support for slave-side USB mass storage devices +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// +// Contributors: jld +// Date: 2010-06-06 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef CYGONCE_IO_USB_SLAVE_MSD_INL +#define CYGONCE_IO_USB_SLAVE_MSD_INL + +#define MFG_STR_INDEX '\x01' +#define PRODUCT_STR_INDEX '\x02' +#define SERIAL_STR_INDEX '\x03' + +#define USB_MAX_STR_LEN 256 + +// Declare Mass Storage Device 0 +#ifdef CYGPKG_IO_USB_SLAVE_MSD0 + +#ifdef CYGDAT_IO_USB_SLAVE_MSD0_SUB_CLASS_TYPE_SCSI +#define USBS_MSD0_DATA_IFACE_SUB_CLASS USBS_MSD_SUB_CLASS_SCSI +#else +# error "Only SCSI Sub Class is implemented" +#endif + +// ----- USB external definition +extern usbs_control_endpoint CYGDAT_IO_USB_SLAVE_MSD0_EP0; +#if defined(CYGPKG_IO_USB_SLAVE_MSD0_STATIC_EP) +extern usbs_tx_endpoint CYGDAT_IO_USB_SLAVE_MSD0_TX_EP; +extern usbs_rx_endpoint CYGDAT_IO_USB_SLAVE_MSD0_RX_EP; +#endif + + +// ----- Configuration Descriptor ----- + +static const usb_configuration_descriptor usbs_msd0_configuration = { + length : sizeof(usb_configuration_descriptor), + type : USB_CONFIGURATION_DESCRIPTOR_TYPE, + total_length_lo : + USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(USBS_MSD_NUM_IFACE, + USBS_MSD_NUM_ENDP), + total_length_hi : + USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(USBS_MSD_NUM_IFACE, + USBS_MSD_NUM_ENDP), + number_interfaces : USBS_MSD_NUM_IFACE, + configuration_id : 1, + configuration_str : 0, +#ifdef CYGOPT_IO_USB_SLAVE_MSD0_BUSPOWERED + attributes : (USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED), +#else + attributes : (USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED | + USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED), +#endif + max_power : ((CYGNUM_IO_USB_SLAVE_MSD0_CURRENTDRAW+1) >> 1) +}; + +// ----- Interface Descriptor ----- + +static const usb_interface_descriptor usbs_msd0_interface[] = { + { + length: sizeof(usb_interface_descriptor), + type: USB_INTERFACE_DESCRIPTOR_TYPE, + interface_id: 0, + alternate_setting: 0, + number_endpoints: 2, + interface_class: USBS_MSD_DATA_IFACE_CLASS, + interface_subclass: USBS_MSD0_DATA_IFACE_SUB_CLASS, + interface_protocol: USBS_MSD_INTERFACE_PROTO, + interface_str: 0x00 + } +}; + +// ----- Endpoint Descriptors ----- + +static const usb_endpoint_descriptor usbs_msd0_endpoints[] = +{ + // Tx (Bulk IN) Endpoint Descriptor + { + sizeof(usb_endpoint_descriptor), + USB_ENDPOINT_DESCRIPTOR_TYPE, + USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN | \ + CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_NUM, + USB_ENDPOINT_DESCRIPTOR_ATTR_BULK, + LO_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_MAX_PACKET_SIZE), + HI_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_MAX_PACKET_SIZE), + 0 + }, + + // Rx (Bulk OUT) Endpoint Descriptor + { + sizeof(usb_endpoint_descriptor), + USB_ENDPOINT_DESCRIPTOR_TYPE, + USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT | \ + CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_NUM, + USB_ENDPOINT_DESCRIPTOR_ATTR_BULK, + LO_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_MAX_PACKET_SIZE), + HI_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_MAX_PACKET_SIZE), + 0 + } +}; + +// ----- String Descriptors ----- + +static char usbs_msd0_mfg_str_descr[USB_MAX_STR_LEN], + usbs_msd0_product_str_descr[USB_MAX_STR_LEN], + usbs_msd0_serial_str_descr[USB_MAX_STR_LEN]; + +static const char* usbs_msd0_strings[] = { + "\x04\x03\x09\x04", + usbs_msd0_mfg_str_descr, + usbs_msd0_product_str_descr, + usbs_msd0_serial_str_descr +}; + +// ----- Enumeration Data w/ Device Descriptor ----- + +static usbs_enumeration_data usbs_msd0_enum_data = { + { + length: sizeof(usb_device_descriptor), + type: USB_DEVICE_DESCRIPTOR_TYPE, + usb_spec_lo: 0x00, + usb_spec_hi: 0x02, + device_class: USBS_MSD_DEVICE_CLASS, + device_subclass: 0, + device_protocol: 0, + max_packet_size: CYGNUM_IO_USB_SLAVE_MSD0_EP0_MAX_PACKET_SIZE, + vendor_lo: LO_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_VENDOR_ID), + vendor_hi: HI_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_VENDOR_ID), + product_lo: LO_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_PRODUCT_ID), + product_hi: HI_BYTE_16(CYGNUM_IO_USB_SLAVE_MSD0_PRODUCT_ID), + device_lo: 0x00, + device_hi: 0x00, + manufacturer_str: MFG_STR_INDEX, + product_str: PRODUCT_STR_INDEX, + serial_number_str: SERIAL_STR_INDEX, // must be > 0 for mass-storage + number_configurations: 1 + }, + + total_number_interfaces: USBS_MSD_NUM_IFACE, + total_number_endpoints: USBS_MSD_NUM_ENDP, + total_number_strings: 3, + configurations: &usbs_msd0_configuration, + interfaces: usbs_msd0_interface, + endpoints: usbs_msd0_endpoints, + strings: (const unsigned char **) usbs_msd0_strings +}; + +// Logical Unit +usbs_msd_lun msd0_lun = { +#ifdef CYGDAT_IO_USB_SLAVE_MSD0_LUN0_NAME + .name[0] = CYGDAT_IO_USB_SLAVE_MSD0_LUN0_NAME, +#else + .name[0] = NULL, +#endif +#ifdef CYGDAT_IO_USB_SLAVE_MSD0_LUN1_NAME + .name[1] = CYGDAT_IO_USB_SLAVE_MSD0_LUN1_NAME +#else + .name[1] = NULL +#endif +}; + + +// USBS Mass Storage Device 0 +usbs_msd msd0 = { +#ifdef CYGDAT_IO_USB_SLAVE_MSD0_SUB_CLASS_TYPE_SCSI + .handler_cmd = usbs_msd_scsi_handle_cmd, + .handler_init = usbs_msd_scsi_init, +#else + .handler_cmd = NULL, + .handler_init = NULL, +#endif + .ctrl_ep = &CYGDAT_IO_USB_SLAVE_MSD0_EP0, +#if defined(CYGPKG_IO_USB_SLAVE_MSD0_STATIC_EP) + .tx_ep = &CYGDAT_IO_USB_SLAVE_MSD0_TX_EP, + .rx_ep = &CYGDAT_IO_USB_SLAVE_MSD0_RX_EP, + .static_ep = true, +#else + .static_ep = false, +#endif + .tx_ep_num = CYGNUM_IO_USB_SLAVE_MSD0_TX_EP_NUM, + .rx_ep_num = CYGNUM_IO_USB_SLAVE_MSD0_RX_EP_NUM, + .lun = &msd0_lun, + .handler_data = NULL, + .serv_name = "msd0_service", + .enum_data = &usbs_msd0_enum_data, + .enum_mfg_str = &usbs_msd0_mfg_str_descr[0], + .enum_product_str = &usbs_msd0_product_str_descr[0], + .enum_serial_str = &usbs_msd0_serial_str_descr[0], + .mfg_str = CYGDAT_IO_USB_SLAVE_MSD0_MFG_STR, + .product_str = CYGDAT_IO_USB_SLAVE_MSD0_PRODUCT_STR, + .serial_str = CYGDAT_IO_USB_SLAVE_MSD0_SERIAL_STR +}; + +#endif // CYGPKG_IO_USB_SLAVE_MSD0 + +#endif // CYGONCE_IO_USB_SLAVE_MSD_INL diff --git a/packages/io/usb/msd/slave/current/include/usbs_msd_io.h b/packages/io/usb/msd/slave/current/include/usbs_msd_io.h new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/include/usbs_msd_io.h @@ -0,0 +1,66 @@ +#ifndef CYGONCE_USBS_MSD_IO_H +#define CYGONCE_USBS_MSD_IO_H +//========================================================================== +// +// include/usbs_msd_io.h +// +// Application API for the USB slave-side MSD device +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2010-06-04 +// Purpose: +// Description: USB slave-side MSD support +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + +// Starts the USB subsystem +bool usbs_msd_start(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // CYGONCE_USBS_MSD_IO_H + diff --git a/packages/io/usb/msd/slave/current/include/usbs_msd_opcode.h b/packages/io/usb/msd/slave/current/include/usbs_msd_opcode.h new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/include/usbs_msd_opcode.h @@ -0,0 +1,114 @@ +#ifndef CYGONCE_USBS_MSD_OPCODE_H +#define CYGONCE_USBS_MSD_OPCODE_H +//========================================================================== +// +// include/usbs_msd_opcode.h +// +// SCSI support for the USB slave-side MSD device +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2010-06-02 +// Purpose: +// Description: USB slave-side MSD support +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + +// SCSI commands from SBC-2 or SBC-3 +#define USBS_SCSI_FORMAT_UNIT 0x04 +#define USBS_SCSI_INQUIRY 0x12 +#define USBS_SCSI_MODE_SELECT_6 0x15 +#define USBS_SCSI_MODE_SELECT_10 0x55 +#define USBS_SCSI_SENSE_6 0x1A +#define USBS_SCSI_SENSE_10 0x5A +#define USBS_SCSI_READ_6 0x08 +#define USBS_SCSI_READ_10 0x28 +#define USBS_SCSI_READ_12 0xA8 +#define USBS_SCSI_READ_CAPACITY 0x25 +#define USBS_SCSI_READ_FORMAT_CAPACITIES 0x23 +#define USBS_SCSI_READ_TOC 0x43 +#define USBS_SCSI_REPORT_LUNS 0xA0 +#define USBS_SCSI_REQUEST_SENSE 0x03 +#define USBS_SCSI_SEND_DIAGNOSTIC 0x1D +#define USBS_SCSI_START_STOP_UNIT 0x1B +#define USBS_SCSI_SYNC_CACHE_10 0x35 +#define USBS_SCSI_TEST_UNIT_READY 0x00 +#define USBS_SCSI_VERIFY_10 0x2F +#define USBS_SCSI_WRITE_6 0x0A +#define USBS_SCSI_WRITE_10 0x2A +#define USBS_SCSI_WRITE_12 0xAA +#define USBS_SCSI_PREVENT_ALLOW_REMOVAL 0x1E + +// Sense result +#define USBS_MSD_SCSI_SENSE_NOT_READY 0x2 +#define USBS_MSD_SCSI_SENSE_MEDIUM_ERROR 0x3 +#define USBS_MSD_SCSI_SENSE_ILLEGAL_REQUEST 0x5 +#define USBS_MSD_SCSI_SENSE_UNIT_ATTENTION 0x6 +#define USBS_MSD_SCSI_SENSE_ASC_LOGICAL_BLOCK_ADDR_OUT_OF_RANGE 0x21 +#define USBS_MSD_SCSI_SENSE_ASCQ_LOGICAL_BLOCK_ADDR_OUT_OF_RANGE 0x0 +#define USBS_MSD_SCSI_SENSE_ASC_INVALID_OPCODE 0x20 +#define USBS_MSD_SCSI_SENSE_ASCQ_INVALID_OPCODE 0x0 +#define USBS_MSD_SCSI_SENSE_ASC_MEDIUM_NOT_PRESENT 0x3a +#define USBS_MSD_SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT 0x00 +#define USBS_MSD_SCSI_SENSE_ASC_PERIPHERAL_DEVICE_WRITE_FAULT 0x03 +#define USBS_MSD_SCSI_SENSE_ASCQ_PERIPHERAL_DEVICE_WRITE_FAULT 0x00 +#define USBS_MSD_SCSI_SENSE_ASC_UNRECOVERED_READ_ERROR 0x11 +#define USBS_MSD_SCSI_SENSE_ASCQ_UNRECOVERED_READ_ERROR 0x00 +#define USBS_MSD_SCSI_SENSE_ASC_WRITE_ERROR 0x0C +#define USBS_MSD_SCSI_SENSE_ASCQ_WRITE_ERROR 0x00 +#define USBS_MSD_SCSI_SENSE_ASC_WRITE_PROTECTED 0x27 +#define USBS_MSD_SCSI_SENSE_ASCQ_WRITE_PROTECTED 0x00 +#define USBS_MSD_SCSI_SENSE_ASC_INVALID_FIELD_IN_CBD 0x24 + +// Mode Page +#define USBS_MSD_SCSI_MODE_PAGE_CODE_ALL 0x3F +#define USBS_MSD_SCSI_MODE_PAGE_CODE_IEC 0x1C +#define USBS_MSD_SCSI_MODE_PAGE_CODE_CACHING 0x08 +#define USBS_MSD_SCSI_MODE_PAGE_CODE_FDM 0x05 + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // CYGONCE_USBS_MSD_OPCODE_H diff --git a/packages/io/usb/msd/slave/current/include/usbs_msd_scsi.h b/packages/io/usb/msd/slave/current/include/usbs_msd_scsi.h new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/include/usbs_msd_scsi.h @@ -0,0 +1,143 @@ +#ifndef CYGONCE_USBS_MSD_SCSI_H +#define CYGONCE_USBS_MSD_SCSI_H +//========================================================================== +// +// include/usbs_msd_scsi.h +// +// SCSI support for the USB slave-side MSD device +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2010-06-02 +// Purpose: +// Description: USB slave-side MSD support +// +// +//####DESCRIPTIONEND#### +//========================================================================== + +#ifdef __cplusplus +extern "C" { +#endif + +// The standard INQUIRY data shall contain at least 36 bytes +// This is the reduced structure for Mass Storage Devices +typedef struct +{ + cyg_uint8 peripheral; // Device Type + cyg_uint8 rmb; // Removable Media Bit + cyg_uint8 version; // Version Field + cyg_uint8 resp_data_format; // Response Data Format + cyg_uint8 additional_len; // Additional Length + cyg_uint8 sccstp; // SCC Supported (include embedded storage array) + cyg_uint8 bque; // Basic Queuing + cyg_uint8 cmdque; // Command Queuing + cyg_uint8 vendor_id[8]; + cyg_uint8 product_id[16]; + cyg_uint8 product_rev[4]; +} msd_scsi_inq_resp; + +#define USBS_SCSI_DIRECT_ACCESS_BLOCK_DEVICE 0x00 +#define USBS_SCSI_REMOVABLE_DEVICE 0x80 + +// Fixed-format Sense Data ( defined as a 18 bytes array ) +typedef struct +{ + cyg_uint8 byte[18]; +} msd_scsi_req_sense_resp; + +// Set Valid information field +#define USBS_MSD_SCSI_SET_SENSE_VALID( ptr_sense, _valid_ ) \ +{ \ + if( _valid_ ) \ + ptr_sense[0] |= 0x80; \ + else \ + ptr_sense[0] &= ~0x80; \ +}; + +// Set Response Code field +#define USBS_MSD_SCSI_SET_SENSE_RESP_CODE( ptr_sense, _code_ ) \ +{ \ + cyg_uint8 byte = ptr_sense[0] & 0x80; \ + ptr_sense[0] = ((_code_ & 0x7F) | byte); \ +}; + +// Set Sense Key field +#define USBS_MSD_SCSI_SET_SENSE_KEY( ptr_sense, _key_ ) \ +{ \ + cyg_uint8 byte = ptr_sense[0] & 0xF0; \ + ptr_sense[0] = ((_key_ & 0x0F) | byte); \ +}; + +// Set Additional Sense Length field +#define USBS_MSD_SCSI_SET_SENSE_ASL( ptr_sense, _asl_ ) \ +{ \ + ptr_sense[7] = _asl_; \ +}; + +// Set Additional Sense Code field +#define USBS_MSD_SCSI_SET_SENSE_ASC( ptr_sense, _asc_ ) \ +{ \ + ptr_sense[12] = _asc_; \ +}; + +// Set Additional Sense Code Qualifier field +#define USBS_MSD_SCSI_SET_SENSE_ASCQ( ptr_sense, _ascq_ ) \ +{ \ + ptr_sense[13] = _ascq_; \ +}; + +// Init Sense Data structure +#define USBS_MSD_SCSI_INIT_SENSE_DATA( _array_ ) \ +{ \ + cyg_int32 i; \ + for(i = 0; i < sizeof(msd_scsi_req_sense_resp); i++) \ + _array_[i] = 0; \ + USBS_MSD_SCSI_SET_SENSE_VALID( _array_, 1); \ + USBS_MSD_SCSI_SET_SENSE_RESP_CODE( _array_, 0x70 ); \ + USBS_MSD_SCSI_SET_SENSE_ASC( _array_, 0x0a ); \ +}; + +cyg_int32 usbs_msd_scsi_handle_cmd( usbs_msd * ); +bool usbs_msd_scsi_init( void ** ctxt ); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // CYGONCE_USBS_MSD_SCSI_H diff --git a/packages/io/usb/msd/slave/current/src/usbs_msd.c b/packages/io/usb/msd/slave/current/src/usbs_msd.c new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/src/usbs_msd.c @@ -0,0 +1,471 @@ +//========================================================================== +// +// usbs_msd.c +// +// Support for slave-side USB mass storage devices. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// +// Contributors: jld +// Date: 2010-05-27 +// +//####DESCRIPTIONEND#### +// +//========================================================================== +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef CYGDAT_IO_USB_SLAVE_MSD0_SUB_CLASS_TYPE_SCSI +#include +#endif + +#include + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_DEBUG) +#define DBG diag_printf +#else +#define DBG (1) ? (void)0 : diag_printf +#endif + +#include CYGDAT_IO_USB_SLAVE_MSD_INL // Declaration of the Mass Storage devices + +// -------------------------------------------------------------------------- +// Create a USB String Descriptor from a C string. +// +void +usbs_msd_create_str_descriptor(char descr[], const char *str) +{ + cyg_uint32 i, n = strlen(str); + + if (n > (USB_MAX_STR_LEN/2 - 2)) + n = USB_MAX_STR_LEN/2 - 2; + + descr[0] = (cyg_uint8) (2*n + 2); + descr[1] = USB_DEVREQ_DESCRIPTOR_TYPE_STRING; + + for (i=0; icontrol_buffer; + usbs_msd *msd = (usbs_msd *) callback_data; + static cyg_uint8 rsp_buf[32]; + + DBG("USB MSD Class Handler: "); + + switch (req->request) { + + case USBS_MSD_CLASS_REQ_GET_MAX_LUN : + DBG("USB MSD Request: Get MAX LUN %d\n", \ + msd->lun->max_lun); + rsp_buf[0] = msd->lun->max_lun - 1; + ep0->buffer = rsp_buf; + ep0->buffer_size = 1; + result = USBS_CONTROL_RETURN_HANDLED; + break; + + case USBS_MSD_CLASS_REQ_BOMSR : + DBG("USB MSD Request: Reset\n"); + // FIXME : Handle Reset + ep0->buffer_size = 0; + result = USBS_CONTROL_RETURN_HANDLED; + break; + + default : + DBG("*** USB MSD Request: 0x%02X not implemented !***\n", + (unsigned) req->request); + } + + return result; +} + + +// -------------------------------------------------------------------------- +// Callback for a USB state change +// +void +usbs_msd_state_change_handler(usbs_control_endpoint* ep, void* callback_data, + usbs_state_change change, int prev_state) +{ + usbs_msd *msd = (usbs_msd *) callback_data; + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_DEBUG) + const char *STATE_CHG_STR[] = { "Detached", "Attached", "Powered", "Reset", + "Addressed", "Configured", "Deconfigured", + "Suspended", "Resumed" }; + + if (change > 0 && change < 10) { + DBG("### %d:%s ###\n", change, STATE_CHG_STR[(int) change-1]); + } + else { + DBG("### %d ###\n", change); + } +#endif + + // Called from DSR, cond broadcast should be ok without mutex lock + msd->usb_state = msd->ctrl_ep->state; + + cyg_cond_broadcast( &msd->state_cond ); + + if (msd->app_state_change_fn) + (*msd->app_state_change_fn)(ep, callback_data, change, prev_state); + +} + + +// -------------------------------------------------------------------------- +// Block the calling thread until the USB is configured. + // +void +usbs_msd_wait_until_configured( usbs_msd* msd ) +{ + cyg_mutex_lock( &msd->lock ); + while ( msd->usb_state != USBS_STATE_CONFIGURED ) + cyg_cond_wait( &msd->state_cond ); + + // Dynamic end-points configuration + if ( msd->static_ep == false ) + { + msd->tx_ep = usbs_get_tx_endpoint( msd->ctrl_ep, msd->tx_ep_num ); + msd->rx_ep = usbs_get_rx_endpoint( msd->ctrl_ep, msd->rx_ep_num ); + DBG("tx_ep = %p\n", msd->tx_ep); + DBG("rx_ep = %p\n", msd->rx_ep); + } + + cyg_mutex_unlock( &msd->lock ); +} + + +// -------------------------------------------------------------------------- +// Determine if the device is currently configured. +// +cyg_bool +usbs_msd_is_configured( usbs_msd* msd ) +{ + return msd->usb_state == USBS_STATE_CONFIGURED; +} + + +// -------------------------------------------------------------------------- +// Callback for when a transmit / stall is complete +// +static void +usbs_msd_tx_complete( void *p, cyg_int32 result ) +{ + usbs_msd* msd = (usbs_msd*) p; + msd->tx.result = result; + cyg_semaphore_post( &msd->tx.ready ); +} + + +// -------------------------------------------------------------------------- +// Callback for when a receive / stall is complete +// +static void +usbs_msd_rx_complete( void *p, cyg_int32 result ) +{ + usbs_msd* msd = (usbs_msd*) p; + msd->rx.result = result; + cyg_semaphore_post( &msd->rx.ready ); +} + + +// -------------------------------------------------------------------------- +// Start an asynchronous transmit of a buffer. +// +static void +usbs_msd_start_tx(usbs_msd* msd, const void* buf, cyg_int32 n) +{ + usbs_start_tx_buffer( msd->tx_ep, (unsigned char*) buf, n, + usbs_msd_tx_complete, msd ); +} + + +// -------------------------------------------------------------------------- +// Block the caller until the transmit / stall is complete +// +static int +usbs_msd_wait_for_tx(usbs_msd* msd) +{ + cyg_semaphore_wait( &msd->tx.ready ); + return msd->tx.result; +} + + +// -------------------------------------------------------------------------- +// Perform a synchronous transmit and wait for it to complete. +// +static cyg_int32 +usbs_msd_tx(usbs_msd* msd, const void* buf, cyg_int32 n) +{ + usbs_msd_start_tx( msd, buf, n ); + return usbs_msd_wait_for_tx( msd ); +} + + +// -------------------------------------------------------------------------- +// Start an asynchronous receive of a buffer. +// +static void +usbs_msd_start_rx(usbs_msd* msd, void* buf, cyg_int32 n) +{ + usbs_start_rx_buffer( msd->rx_ep, (unsigned char*) buf, n, + usbs_msd_rx_complete, msd ); +} + + +// -------------------------------------------------------------------------- +// Block the caller until the receive / stall is complete +// +static cyg_int32 +usbs_msd_wait_for_rx(usbs_msd* msd) +{ + cyg_semaphore_wait( &msd->rx.ready ); + return msd->rx.result; +} + + +// -------------------------------------------------------------------------- +// Perform a synchronous receive and wait for it to complete +// +static cyg_int32 +usbs_msd_rx(usbs_msd* msd, void* buf, cyg_int32 n) +{ + usbs_msd_start_rx( msd, buf, n ); + return usbs_msd_wait_for_rx( msd ); +} + + +// -------------------------------------------------------------------------- +// Halt end-point +// +static void +usbs_msd_set_ep_halted( usbs_msd* msd , usbs_msd_ep_t ep, cyg_bool state ) +{ + if( ep == CYG_USBS_EP_RX ) + usbs_set_rx_endpoint_halted( msd->rx_ep , state ); + else if( ep == CYG_USBS_EP_TX ) + usbs_set_tx_endpoint_halted( msd->tx_ep , state ); +} + + +// -------------------------------------------------------------------------- +// Perform a synchronous end-point halt and wait for host to restart it +// +static cyg_int32 +usbs_msd_ep_stall(usbs_msd* msd, usbs_msd_ep_t ep ) +{ + cyg_sem_t *ready; + cyg_int32 *result; + +#if !defined(CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE) + return 1; +#endif + + if( ep == CYG_USBS_EP_RX ) + { + ready = &msd->rx.ready; + result = &msd->rx.result; + } + else if( ep == CYG_USBS_EP_TX ) + { + ready = &msd->tx.ready; + result = &msd->tx.result; + } + else + return 0; + + // Halt End-point + usbs_msd_set_ep_halted( msd, ep , 1 ); + + // Wait + if( ep == CYG_USBS_EP_RX ) + usbs_start_rx_endpoint_wait( msd->rx_ep, usbs_msd_rx_complete, msd ); + else if( ep == CYG_USBS_EP_TX ) + usbs_start_tx_endpoint_wait( msd->tx_ep, usbs_msd_tx_complete, msd ); + + cyg_semaphore_wait( ready ); + + return ( *result ); + +} + + +// -------------------------------------------------------------------------- +// Initialize a Mass Storage Device structure +// +static bool +usbs_msd_init( usbs_msd* msd ) +{ + cyg_io_handle_t handle; + cyg_uint8 i = 0; + + if( msd->ctrl_ep == NULL ) + return false; + + // Lookup storage devices + msd->lun->max_lun = 0; + for (i = 0; i < USBS_MSD_CBW_MAX_LUN; i++) + { + if ( msd->lun->name[i] != NULL ) + { + DBG("USB Slave MSD: Lookup %s \n", msd->lun->name[i] ); + if( cyg_io_lookup( msd->lun->name[i] , &handle ) != ENOERR ) + return false; + msd->lun->handle[i] = handle; + msd->lun->max_lun++; + } + } + + msd->tx.result = 0; + msd->rx.result = 0; + + // Initialize TX and RX semaphore + cyg_semaphore_init( &msd->tx.ready, 0 ); + cyg_semaphore_init( &msd->rx.ready, 0 ); + + cyg_mutex_init( &msd->lock ); + + cyg_cond_init( &msd->state_cond, &msd->lock ); + + // Make USB string descriptors + usbs_msd_create_str_descriptor( \ + msd->enum_mfg_str,\ + msd->mfg_str ); + usbs_msd_create_str_descriptor( \ + msd->enum_product_str,\ + msd->product_str ); + usbs_msd_create_str_descriptor( \ + msd->enum_serial_str,\ + msd->serial_str ); + + // Set up enumeration & USB call-backs + msd->usb_state = msd->ctrl_ep->state; + + msd->ctrl_ep->enumeration_data = msd->enum_data; + + if ( msd->ctrl_ep->state_change_fn ) + msd->app_state_change_fn = msd->ctrl_ep->state_change_fn; + + msd->ctrl_ep->state_change_fn = usbs_msd_state_change_handler; + msd->ctrl_ep->state_change_data = (void*) msd; + msd->ctrl_ep->class_control_fn = usbs_msd_class_handler; + msd->ctrl_ep->class_control_data = (void*) msd; + + if ( msd->handler_init ) + msd->handler_init( &msd->handler_data ); + + msd->send = usbs_msd_tx; + msd->receive = usbs_msd_rx; + msd->stall = usbs_msd_ep_stall; + + // Setup initial state + msd->state = CYG_USBS_MSD_WAIT; + + return true; +} + + +// -------------------------------------------------------------------------- +// Initialize a Mass Storage Device structure +// +static void +usbs_msd_start_service(usbs_msd* msd) +{ + + cyg_thread_create( USBS_MSD_THREAD_STACK_PRIORITY , &usbs_msd_handler, \ + (cyg_addrword_t) msd, msd->serv_name, msd->serv_stack, \ + USBS_MSD_THREAD_STACK_SIZE, &msd->serv_handle, \ + &msd->serv_thread); + + cyg_thread_resume( msd->serv_handle ); + +} + + +// -------------------------------------------------------------------------- +// Start the USB subsystem +// +bool +usbs_msd_start(void) +{ + +#ifdef CYGPKG_IO_USB_SLAVE_MSD0 + + DBG("USB Slave Mass-Storage 0 starts\n"); + + if ( usbs_msd_init( &msd0 ) == false ) + { + DBG("USB Slave Mass-Storage 0 startup failed\n"); + return false; + } + + // ----- Start USB subsystem ----- + // + usbs_start( msd0.ctrl_ep ); + + usbs_msd_start_service( &msd0 ); + +#endif + + return true; +} + + + + diff --git a/packages/io/usb/msd/slave/current/src/usbs_msd_handler.c b/packages/io/usb/msd/slave/current/src/usbs_msd_handler.c new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/src/usbs_msd_handler.c @@ -0,0 +1,266 @@ +//========================================================================== +// +// usbs_msd_handler.c +// +// Support for slave-side USB mass storage devices. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// +// Date: 2010-06-02 +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include // for memcpy + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_DEBUG) +#define DBG diag_printf +#else +#define DBG (1) ? (void)0 : diag_printf +#endif + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_TRACE) +#define TRACE diag_printf +#else +#define TRACE (1) ? (void)0 : diag_printf +#endif + +#define CONSTRUCT_CSW( _csw_, _tag_ ) \ +{ \ + _csw_.tag = _tag_; \ + _csw_.signature = USBS_MSD_CSW_SIGNATURE; \ +}; + + +// Validate a command block wrapper +// CBW is sent from host in little endian format, hence it +// must be converted to the CPU endianness +// +static inline bool +usbs_msd_validate_cbw(usbs_msd_cbw *cbw, cyg_int32 len) +{ + + // Convert to CPU endianness + cbw->signature = CYG_LE32_TO_CPU( cbw->signature ); + cbw->tag = CYG_LE32_TO_CPU( cbw->tag ); + cbw->data_transfert_len = CYG_LE32_TO_CPU( cbw->data_transfert_len ); + + if( len != sizeof( usbs_msd_cbw ) || + cbw->signature != USBS_MSD_CBW_SIGNATURE ) + { + DBG("USB Slave MSD: CBW signature %x, len %d\n\r", \ + cbw->signature, len); + return false; + } + else + return true; +} + + +// Validate a command block wrapper content +// +static inline bool +usbs_msd_validate_cbw_data(usbs_msd_cbw *cbw) +{ + if( ( cbw->lun < USBS_MSD_CBW_MAX_LUN ) && \ + ( cbw->cb.len <= USBS_MSD_CBW_MAX_SCSI_CMD_LEN ) && \ + ( cbw->cb.len >= USBS_MSD_CBW_MIN_SCSI_CMD_LEN ) && \ + ( ( cbw->flags == USBS_MSD_CBW_HOST2DEVICE ) || \ + ( cbw->flags == USBS_MSD_CBW_DEVICE2HOST ) ) ) + { + return true; + } + else + { + DBG("USB Slave MSD: CBW Invalid data, LUN %d, len %d, flag %x\n\r", \ + cbw->lun, cbw->cb.len, cbw->flags); + } + return false; +} + + +// Send Command Status Wrapper +// +static inline cyg_int32 +usbs_msd_send_csw( usbs_msd* msd ) +{ + // Convert to host endianness + msd->csw.signature = CYG_CPU_TO_LE32( msd->csw.signature ); + msd->csw.tag = CYG_CPU_TO_LE32( msd->csw.tag ); + msd->csw.data_residue = CYG_CPU_TO_LE32( msd->csw.data_residue ); + + return msd->send( msd, &msd->csw, sizeof( usbs_msd_csw )); +} + + +// Receive Command Status Wrapper +// +static cyg_int32 +usbs_msd_wait_for_cbw( usbs_msd *msd ) +{ + cyg_uint8 cbw[sizeof( usbs_msd_cbw ) + 1]; + cyg_int32 n; + + TRACE("USB Slave MSD: Wait for CBW\n\r"); + n = msd->receive( msd, cbw, sizeof( cbw ) ); + + TRACE("USB Slave MSD: CBW received, len %d\n\r", n); + + if ( n < 0) + return n; + + memcpy(&msd->cbw, cbw, sizeof( usbs_msd_cbw )); + + if ( ( true == usbs_msd_validate_cbw( &msd->cbw, n ) ) && \ + ( true == usbs_msd_validate_cbw_data( &msd->cbw ) ) ) + { + CONSTRUCT_CSW( msd->csw , msd->cbw.tag ); + + if( msd->cbw.flags == USBS_MSD_CBW_DEVICE2HOST ) + { + msd->state = CYG_USBS_MSD_DATA_OUT; + } + else if ( msd->cbw.flags == USBS_MSD_CBW_HOST2DEVICE ) + { + msd->state = CYG_USBS_MSD_DATA_IN; + } + } + + return n; +} + +// USB slave side Mass-Storage Handler +// +void +usbs_msd_handler( cyg_addrword_t data ) +{ + usbs_msd* msd = (usbs_msd*) data; + cyg_int32 transfered = 0; + cyg_int32 received = 0; + + while(1) + { + + // Wait for device to be configured + DBG("USB Slave MSD: Wait for device configuration\n\r"); + usbs_msd_wait_until_configured( msd ); + cyg_thread_delay( (cyg_tick_count_t) 10 ); + + while(1) + { + + switch( msd->state ) + { + case CYG_USBS_MSD_WAIT: + // FIXME, check for return values + // For the time being, -EPIPE and -EAGAIN triggers the + // driver to wait for the device to be configured again. + received = usbs_msd_wait_for_cbw( msd ); + if ( received < 0 ) + break; + // Fall through + + case CYG_USBS_MSD_DATA_IN: + case CYG_USBS_MSD_DATA_OUT: + // Handle data transfer IN and OUT + transfered = msd->handler_cmd( msd ); + + // Data transfer failed because of -EPIPE or -EAGAIN. For + // the time being just wait for the device to be re-configured + if(transfered < 0) + { + DBG("USB Slave MSD: Data transfer error\n\r"); + msd->state = CYG_USBS_MSD_WAIT; + break; + } + + // Compute the data residue value to be recorded in the + // Command Status Wrapper + msd->csw.data_residue = msd->cbw.data_transfert_len - transfered; + + // Check if all data has been transfered / received to / from + // the host + if( msd->csw.data_residue != 0 ) + { + DBG("USB Slave MSD: Transfer not complete %d / %d\n\r", \ + msd->cbw.data_transfert_len, transfered); + + // Stall endpoint, this is a waiting call until the host has + // cleared the stall. AT91 USB driver does not seem to handle + // it! + msd->stall( msd, CYG_USBS_EP_TX ); +#if defined(CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE) + TRACE("USB Slave MSD: Stall completed\n\r"); +#endif + } + + // Complete the transaction by sending the command status + usbs_msd_send_csw( msd ); + + TRACE("USB Slave MSD: CSW sent\n\r"); + + // Wait for next command + msd->state = CYG_USBS_MSD_WAIT; + break; + + default: + DBG("USB Slave MSD: Invalid state\n\r"); + break; + } + + if( ( transfered < 0 ) || ( received < 0 ) ) + break; + + } + } +} + + diff --git a/packages/io/usb/msd/slave/current/src/usbs_msd_scsi.c b/packages/io/usb/msd/slave/current/src/usbs_msd_scsi.c new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/src/usbs_msd_scsi.c @@ -0,0 +1,510 @@ +//========================================================================== +// +// usbs_msd_scsi.c +// +// Support for slave-side USB mass storage SCSI devices. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// +// Date: 2010-06-02 +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include // for memcpy + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_DEBUG) +#define DBG diag_printf +#else +#define DBG (1) ? (void)0 : diag_printf +#endif + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_TRACE) +#define TRACE diag_printf +#else +#define TRACE (1) ? (void)0 : diag_printf +#endif + + +const msd_scsi_inq_resp inq_resp = { + USBS_SCSI_DIRECT_ACCESS_BLOCK_DEVICE, // Direct Access Block device + USBS_SCSI_REMOVABLE_DEVICE, // Device is removable + 0x04, // Comply with SPC-2 + 0x02, // Standard format + 0x20, // Response is 0x20 + 4 bytes + 0x00, + 0x00, + 0x00, + {'e','C','o','s',' ',' ',' ',' '}, + {'M','a','s','s',' ','S','t','o','r','a','g','e',' ',' ',' ',' '}, + {'0','.','0','1'}, +}; + + +// Handle Mode Sense Command +// +static inline void +usbs_msd_scsi_update_sense(msd_scsi_req_sense_resp *sense, \ + cyg_uint8 asc, cyg_uint8 ascq, cyg_uint8 key ) +{ + USBS_MSD_SCSI_SET_SENSE_ASC( sense->byte , asc ); + USBS_MSD_SCSI_SET_SENSE_ASCQ( sense->byte , ascq ); + USBS_MSD_SCSI_SET_SENSE_KEY( sense->byte , key ); +} + + +// Handle Inquiry Request Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_inquiry( usbs_msd * msd ) +{ + cyg_int32 tx_bytes = sizeof(msd_scsi_inq_resp); + + TRACE("USB Slave MSD: SCSI inquiry\n\r"); + + // Copy over to message buffer + memcpy( msd->buffer, (cyg_uint8 *) &inq_resp, tx_bytes ); + + tx_bytes = msd->send( msd, msd->buffer, tx_bytes ); + + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + return tx_bytes; +} + + +// Handle Read Capacity Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_capacity( usbs_msd * msd ) +{ + cyg_disk_info_t disk_info; + cyg_int32 tx_bytes = sizeof(cyg_uint32) << 1; + cyg_uint32 len = sizeof(cyg_disk_info_t); + cyg_uint32 key = CYG_IO_GET_CONFIG_DISK_INFO; + cyg_io_handle_t lun = msd->lun->handle[msd->cbw.lun]; + + TRACE("USB Slave MSD: SCSI capacity\n\r"); + + // Get the configuration of a device + cyg_io_get_config( lun, key, &disk_info, &len ); + + msd->buffer[0] = BYTE3_32( disk_info.blocks_num ); + msd->buffer[1] = BYTE2_32( disk_info.blocks_num ); + msd->buffer[2] = BYTE1_32( disk_info.blocks_num ); + msd->buffer[3] = BYTE0_32( disk_info.blocks_num ); + + msd->buffer[4] = BYTE3_32( disk_info.block_size ); + msd->buffer[5] = BYTE2_32( disk_info.block_size ); + msd->buffer[6] = BYTE1_32( disk_info.block_size ); + msd->buffer[7] = BYTE0_32( disk_info.block_size ); + + tx_bytes = msd->send( msd, msd->buffer, tx_bytes ); + + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + return tx_bytes; +} + + +// Handle Read Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_read( usbs_msd * msd, msd_scsi_req_sense_resp *sense ) +{ + Cyg_ErrNo ret; + cyg_uint32 transfert_len = 0, pos = 0, len = 1; + cyg_int32 ret_len = 0; + cyg_int32 tx_byte = 0; + cyg_io_handle_t lun = msd->lun->handle[msd->cbw.lun]; + + TRACE("USB Slave MSD: SCSI read\n\r"); + + pos = ( msd->cbw.cb.data[2] << 24 ) | \ + ( msd->cbw.cb.data[3] << 16 ) | \ + ( msd->cbw.cb.data[4] << 8 ) | \ + msd->cbw.cb.data[5]; + + transfert_len = ( msd->cbw.cb.data[7] << 8 ) | msd->cbw.cb.data[8]; + + // Read data from a block device + while ( transfert_len > 0 ) { + if( ( ret = cyg_io_bread( lun, msd->buffer, &len, pos)) != ENOERR ) + break; + tx_byte = msd->send( msd, msd->buffer, (USBS_MSD_DISK_SECTOR_SIZE) ); + TRACE("USB Slave MSD: Read %d block, %d bytes\n\r", transfert_len, tx_byte); + ret_len += tx_byte; + // Substract 1 sector + transfert_len -= 1; + pos += 1; + } + + if ( ret == ENOERR ) + { + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + } + else + { + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + usbs_msd_scsi_update_sense( sense, \ + USBS_MSD_SCSI_SENSE_ASC_UNRECOVERED_READ_ERROR, \ + USBS_MSD_SCSI_SENSE_ASCQ_UNRECOVERED_READ_ERROR, \ + USBS_MSD_SCSI_SENSE_MEDIUM_ERROR ); + } + + return ret_len; +} + + +// Handle Write Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_write( usbs_msd * msd , msd_scsi_req_sense_resp *sense ) +{ + Cyg_ErrNo ret; + cyg_uint32 transfert_len = 0, pos = 0, len = 1; + cyg_int32 ret_len = 0; + cyg_int32 rx_byte = 0; + cyg_io_handle_t lun = msd->lun->handle[msd->cbw.lun]; + + DBG("USB Slave MSD: SCSI Write\n\r"); + + pos = ( msd->cbw.cb.data[2] << 24 ) | \ + ( msd->cbw.cb.data[3] << 16 ) | \ + ( msd->cbw.cb.data[4] << 8 ) | \ + msd->cbw.cb.data[5]; + + transfert_len = ( msd->cbw.cb.data[7] << 8 ) | msd->cbw.cb.data[8]; + + // Read data from a block device + while ( transfert_len > 0 ) { + rx_byte = msd->receive( msd, msd->buffer, (USBS_MSD_DISK_SECTOR_SIZE) ); + if( ( ret = cyg_io_bwrite( lun, msd->buffer, &len, pos)) != ENOERR ) + break; + TRACE("USB Slave MSD: Write %d block, %d bytes\n\r", transfert_len, rx_byte); + ret_len += ( rx_byte ); + // Substract 1 sector + transfert_len -= 1; + pos += 1; + } + + if ( ret == ENOERR ) + { + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + } + else + { + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + usbs_msd_scsi_update_sense( sense, \ + USBS_MSD_SCSI_SENSE_ASC_WRITE_ERROR, \ + USBS_MSD_SCSI_SENSE_ASCQ_WRITE_ERROR, \ + USBS_MSD_SCSI_SENSE_MEDIUM_ERROR ); + } + + return ret_len; +} + + +// Handle Request Sense Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_req_sense( usbs_msd * msd, \ + msd_scsi_req_sense_resp *sense ) +{ + cyg_uint8 i = 0; + cyg_int32 tx_bytes = sizeof(msd_scsi_req_sense_resp); + + TRACE("USB Slave MSD: SCSI request sense\n\r"); + + // Copy over to message buffer + for(i = 0 ; i < tx_bytes ; i++) + msd->buffer[i] = sense->byte[i]; + + tx_bytes = msd->send( msd, msd->buffer, tx_bytes ); + + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + return tx_bytes; +} + + +// Handle Mode Sense Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_sense( usbs_msd * msd, \ + msd_scsi_req_sense_resp *sense ) +{ + cyg_int32 tx_bytes = 0x0; + DBG("USB Slave MSD: SCSI sense\n\r"); + + msd->buffer[0] = 0x03; // Number of byte in the following message + msd->buffer[1] = 0x00; // Media type + msd->buffer[2] = 0x00; // Not Write protected, no cache-control-bit support + msd->buffer[3] = 0x00; // No Mode parameter + + // FIXME : handle different option correctly. For the time being, + // just respond with minimum data + if( ( msd->cbw.cb.data[2] & 0x3F ) == \ + USBS_MSD_SCSI_MODE_PAGE_CODE_ALL ) + { + DBG("USB Slave MSD: SCSI sense all\n\r"); + + tx_bytes = msd->send( msd, msd->buffer, 4 ); + + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + } + else + { + DBG("USB Slave MSD: SCSI sense page: %x\n\r", \ + msd->cbw.cb.data[2]); + + tx_bytes = msd->send( msd, msd->buffer, 4 ); + + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + } + + return tx_bytes; +} + + +// Handle Test Unit Ready Command +// +static inline cyg_int32 +usbs_msd_scsi_handle_test_unit_ready( usbs_msd * msd , \ + msd_scsi_req_sense_resp *sense ) +{ + cyg_disk_info_t disk_info; + Cyg_ErrNo ret; + cyg_uint32 len = sizeof(cyg_disk_info_t); + cyg_uint32 key = CYG_IO_GET_CONFIG_DISK_INFO; + cyg_io_handle_t lun = msd->lun->handle[msd->cbw.lun]; + + TRACE("USB Slave MSD: SCSI test unit ready\n\r"); + + // Get the configuration of a device + ret = cyg_io_get_config( lun, key, &disk_info, &len); + + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + USBS_MSD_SCSI_INIT_SENSE_DATA( sense->byte ); + + // check if disk is connected / mounted here + if( disk_info.connected == false ) + { + DBG("USB Slave MSD: Disk not mounted \n\r"); + usbs_msd_scsi_update_sense( sense, \ + USBS_MSD_SCSI_SENSE_ASC_MEDIUM_NOT_PRESENT, \ + USBS_MSD_SCSI_SENSE_ASCQ_MEDIUM_NOT_PRESENT, \ + USBS_MSD_SCSI_SENSE_UNIT_ATTENTION); + + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + } + + // No data to transfer + return 0; +} + + +// Windows host operating system uses this command. Usually if +// a command is not supported, the CSW should return failure. +// Since no data is sent in the data transfer phase, the TX +// endpoint shall be stalled. Since some USB driver in eCos +// do not support endpoint stall, is it required to respond +// with some data, otherwise the driver would freeze. In the +// following case, we fill the data structure but report +// failure in the CSW. +#if !defined(CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE) +// Handle Read Format Capacities +// +static inline cyg_int32 +usbs_msd_scsi_read_format_capacities( usbs_msd * msd ) +{ + cyg_int32 i = 0; + DBG("USB Slave MSD: SCSI read format capacities\n\r"); + + for(i = 0 ; i < msd->cbw.data_transfert_len; i++) + { + msd->buffer[i] = 0; + } + + i = msd->send( msd, msd->buffer, i ); + + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + + return i; +} +#endif + + +// Handle Verify +// +static inline cyg_int32 +usbs_msd_scsi_handle_verify( usbs_msd * msd ) +{ + DBG("USB Slave MSD: SCSI test unit verify\n\r"); + + // FIXME: Should do something here? + // Return success, command is optional + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + // No data to transfer + return 0; +} + + +// Handle Medium Removal +// +static inline cyg_int32 +usbs_msd_scsi_handle_removal( usbs_msd * msd ) +{ + DBG("USB Slave MSD: SCSI Prevent / Allow device removal, LUN %d, flag %d %d\n\r", + ( msd->cbw.cb.data[1] & 0xf0 >> 4 ) , ( msd->cbw.cb.data[4] & 0x01 ), + msd->cbw.data_transfert_len ); + + // Support for this command is not mandatory. + // No specific handling of this command is implemented. + // Maybe mount / umount the disc? + msd->csw.status = USBS_MSD_CSW_STATUS_PASSED; + + // No data to transfer + return 0; +} + + +// Handle SCSI command +// +cyg_int32 +usbs_msd_scsi_handle_cmd( usbs_msd * msd ) +{ + bool ret; + cyg_uint8 cmd = msd->cbw.cb.data[0]; + msd_scsi_req_sense_resp *sense = (msd_scsi_req_sense_resp *) msd->handler_data; + + switch( cmd ) + { + case USBS_SCSI_INQUIRY: + ret = usbs_msd_scsi_handle_inquiry( msd ); + break; + + case USBS_SCSI_READ_CAPACITY: + ret = usbs_msd_scsi_handle_capacity( msd ); + break; + + case USBS_SCSI_READ_10: + ret = usbs_msd_scsi_handle_read(msd , sense ); + break; + + case USBS_SCSI_WRITE_10: + ret = usbs_msd_scsi_handle_write( msd , sense ); + break; + + case USBS_SCSI_REQUEST_SENSE: + ret = usbs_msd_scsi_handle_req_sense( msd , sense ); + break; + + case USBS_SCSI_SENSE_6: + ret = usbs_msd_scsi_handle_sense( msd , sense); + break; + + case USBS_SCSI_TEST_UNIT_READY: + ret = usbs_msd_scsi_handle_test_unit_ready( msd , sense ); + break; + + case USBS_SCSI_VERIFY_10: + ret = usbs_msd_scsi_handle_verify( msd ); + break; + +#if !defined(CYGSEM_IO_USB_SLAVE_MSD_STALL_ENABLE) + case USBS_SCSI_READ_FORMAT_CAPACITIES: + ret = usbs_msd_scsi_read_format_capacities( msd ); + break; +#endif + + case USBS_SCSI_PREVENT_ALLOW_REMOVAL: + ret = usbs_msd_scsi_handle_removal( msd ); + break; + + default: + // Use for all commands not implemented, not + // supported + DBG("USB Slave MSD: SCSI illegal request %x \n\r", cmd ); + USBS_MSD_SCSI_INIT_SENSE_DATA( sense->byte ); + usbs_msd_scsi_update_sense( sense, \ + USBS_MSD_SCSI_SENSE_ASC_INVALID_OPCODE, \ + USBS_MSD_SCSI_SENSE_ASCQ_INVALID_OPCODE, \ + USBS_MSD_SCSI_SENSE_ILLEGAL_REQUEST); + msd->csw.status = USBS_MSD_CSW_STATUS_FAILED; + ret = 0; + break; + + } + + return ret; + +} + +// SCSI initialization +// +bool +usbs_msd_scsi_init( void ** ctxt ) +{ + static msd_scsi_req_sense_resp sense; + + DBG("USB Slave MSD: SCSI init %p\n", &sense); + + USBS_MSD_SCSI_INIT_SENSE_DATA( sense.byte ); + + *ctxt = &sense; + + return true; +} diff --git a/packages/io/usb/msd/slave/current/tests/usbs_test_ramdisk.c b/packages/io/usb/msd/slave/current/tests/usbs_test_ramdisk.c new file mode 100644 --- /dev/null +++ b/packages/io/usb/msd/slave/current/tests/usbs_test_ramdisk.c @@ -0,0 +1,738 @@ +//========================================================================== +// +// usb_test_ramdisk.c +// +// Example application for the USB MSD layer in eCos. +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2008 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ccoutand +// Contributors: +// Date: 2010-06-27 +// Description: USB Slave Mass Storage example application. +// +//####DESCRIPTIONEND#### +//=========================================================================== + +#include +#include + +#if defined(CYGPKG_FS_FAT) +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#if defined(CYGPKG_FS_FAT) +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#if defined(CYGBLD_IO_USB_SLAVE_MSD_DEBUG) +#define DBG diag_printf +#else +#define DBG (1) ? (void)0 : diag_printf +#endif + +// ---------------------------------------------------------------------------- +// FAT12 file-system FBR, FAT and ROOT directory entries are hardcoded +// and later copied over to the RAM disk +// + +#define USBS_MSD_RAMDISK_BLOCKLEN 512 +#define USBS_MSD_RAMDISK_NUM_BLOCK 32 + +// Allocate space for the RAM disk +static char ram_disk[ USBS_MSD_RAMDISK_BLOCKLEN * USBS_MSD_RAMDISK_NUM_BLOCK ] __attribute__((aligned(4))); + +// FAT12 Boot Record +const char fat12_br[] = { + 0xEB, 0x3C, 0x90, // Field for Bootable Media + 0x4D, 0x53, 0x57, 0x49, 0x4E, 0x34, 0x2E, 0x31, // MSWIN4.1 + 0x00, 0x02, // 512 bytes sector + 0x01, // 1 sector per cluster + 0x01, 0x00, // 1 reserved sector (including MBR) + 0x02, // 2 FATs + 0x40, 0x00, // 64 entries + USBS_MSD_RAMDISK_NUM_BLOCK, 0x00, // Number of sectors is less than 32K: 32 sectors + 0xF0, // Removable media + 0x01, 0x00, // 1sector per FAT + 0x00, 0x00, // Sector per track (not used in LBA) + 0x00, 0x00, // Number of Heads (not used in LBA) + 0x00, 0x00, 0x00, 0x00, // Hidden sector + 0x00, 0x00, 0x00, 0x00, // Number of sectors is more than 32K + 0x00, // Logical drive number + 0x00, // Reserved + 0x29, // Extended boot signature + 0x04, 0x03, 0x02, 0x01, // Serial Number + 0x65, 0x43, 0x6F, 0x73, 0x20, 0x64, 0x69, 0x73, // VOLUME: eCos disk + 0x6B, 0x20, 0x20, + 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20 // FAT12 +}; + +// MBR and Volume sector signature +const char mbr_signature[] = { + 0x55, 0xAA +}; + +// Partition table +const char partition_tbl[] = { + // First (FAT12) + 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, (USBS_MSD_RAMDISK_NUM_BLOCK-1), 0x00, 0x00, 0x00, + // Second + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Third + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Fourth + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// Root directory (eCos-3.0) +const char root_dir[] = { + 0x65, 0x43, 0x6F, 0x73, 0x2d, 0x33, 0x2e, 0x30, + 0x20, 0x20, 0x20, 0x28, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x9e, + 0x65, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// File-system Allocation Table +const char fat[] = { + 0xF0, 0xff, 0xff +}; + +// Initialize FAT12 +static void +init_fat12_disk( char *start_addr ) +{ + char * dst = start_addr; + + // Copy partition table + dst = start_addr + 446; + memcpy(dst, partition_tbl, 64); + + // Copy signature + dst = start_addr + (USBS_MSD_RAMDISK_BLOCKLEN - 2 ); + memcpy(dst, mbr_signature, 2); + + // Copy FBR + dst = start_addr + USBS_MSD_RAMDISK_BLOCKLEN; + memcpy(dst, fat12_br, 62); + + // Copy signature + dst = start_addr + (( USBS_MSD_RAMDISK_BLOCKLEN * 2 ) - 2 ); + memcpy(dst, mbr_signature, 2); + + // Copy FAT0 + dst = start_addr + ( USBS_MSD_RAMDISK_BLOCKLEN * 2); + memcpy(dst, fat, 3); + + // Copy FAT1 + dst = start_addr + ( USBS_MSD_RAMDISK_BLOCKLEN * 3); + memcpy(dst, fat, 3); + + // Copy Root directory + dst = start_addr + ( USBS_MSD_RAMDISK_BLOCKLEN * 4); + memcpy(dst, root_dir, 32); + +} + + +// ---------------------------------------------------------------------------- +// Create a tiny "RAM disk" device +// +// + +#define RAM_DISK_NAME "/dev/ramdisk0/" + +typedef struct { + volatile cyg_uint8 *base; + cyg_uint16 size; +} ram_disk_info_t; + +static cyg_bool ram_disk_init(struct cyg_devtab_entry *tab); + +static Cyg_ErrNo ram_disk_bread(disk_channel *chan, + void *buf, + cyg_uint32 len, + cyg_uint32 block_num); + + +static Cyg_ErrNo ram_disk_bwrite(disk_channel *chan, + const void *buf, + cyg_uint32 len, + cyg_uint32 block_num); + +static Cyg_ErrNo ram_disk_get_config(disk_channel *chan, + cyg_uint32 key, + const void *xbuf, + cyg_uint32 *len); + +static Cyg_ErrNo ram_disk_set_config(disk_channel *chan, + cyg_uint32 key, + const void *xbuf, + cyg_uint32 *len); + +static Cyg_ErrNo ram_disk_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name); + +DISK_FUNS(ram_disk_funs, + ram_disk_bread, + ram_disk_bwrite, + ram_disk_get_config, + ram_disk_set_config +); + +DISK_CONTROLLER(ram_disk_controller, ram_disk_controller); + +#define RAM_DISK_INSTANCE(_number_,_base_,_mbr_supp_,_name_) \ +static ram_disk_info_t ram_disk_info##_number_ = { \ + base: (volatile cyg_uint8 *)_base_, \ +}; \ +DISK_CHANNEL(ram_disk_channel##_number_, \ + ram_disk_funs, \ + ram_disk_info##_number_, \ + ram_disk_controller, \ + _mbr_supp_, \ + 1 \ +); \ +BLOCK_DEVTAB_ENTRY(ram_disk_io##_number_, \ + _name_, \ + 0, \ + &cyg_io_disk_devio, \ + ram_disk_init, \ + ram_disk_lookup, \ + &ram_disk_channel##_number_ \ +); + +RAM_DISK_INSTANCE(0, 0, true, RAM_DISK_NAME); + + +// ---------------------------------------------------------------------------- +static void +read_data(volatile cyg_uint8 *base, + void *buf, + cyg_uint32 len) +{ + cyg_uint8 *dst = (cyg_uint8 *)buf; + cyg_uint8 *src = (cyg_uint8 *)base; + cyg_uint32 i = 0; + + for (i = 0; i < len; i += 1) + { + *dst = *src; + dst = dst + 1; src = src + 1; + } + +} + +static void +write_data(volatile cyg_uint8 *base, + const void *buf, + cyg_uint16 len) +{ + cyg_uint8 *dst = (cyg_uint8 *)base; + cyg_uint8 *src = (cyg_uint8 *)buf; + cyg_uint32 i = 0; + + for (i = 0; i < len; i += 1) + { + *dst = *src; + dst = dst + 1; src = src + 1; + } +} + +// ---------------------------------------------------------------------------- +static cyg_bool +ram_disk_init(struct cyg_devtab_entry *tab) +{ + disk_channel *chan = (disk_channel *) tab->priv; + ram_disk_info_t *info = (ram_disk_info_t *) chan->dev_priv; + cyg_disk_identify_t ident; + + if (chan->init) + return true; + + info->base = (volatile cyg_uint8 *) &ram_disk[0]; + info->size = USBS_MSD_RAMDISK_BLOCKLEN * USBS_MSD_RAMDISK_NUM_BLOCK; + + DBG("RAM DISK ( %p ) init\n", info->base); + + init_fat12_disk( &ram_disk[0] ); + + ident.cylinders_num = 0; + ident.heads_num = 0; + ident.lba_sectors_num = USBS_MSD_RAMDISK_NUM_BLOCK-2; + ident.phys_block_size = USBS_MSD_RAMDISK_BLOCKLEN; + ident.max_transfer = USBS_MSD_RAMDISK_BLOCKLEN; + + if (!(chan->callbacks->disk_init)(tab)) + return false; + + if (ENOERR != (chan->callbacks->disk_connected)(tab, &ident)) + return false; + + return true; +} + +static Cyg_ErrNo +ram_disk_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name) +{ + disk_channel *chan = (disk_channel *) (*tab)->priv; + return (chan->callbacks->disk_lookup)(tab, sub_tab, name); +} + +static Cyg_ErrNo +ram_disk_bread(disk_channel *chan, + void *buf, + cyg_uint32 len, + cyg_uint32 block_num) +{ + ram_disk_info_t *info = (ram_disk_info_t *)chan->dev_priv; + volatile cyg_uint8 *src = info->base + USBS_MSD_RAMDISK_BLOCKLEN * block_num; + cyg_uint32 len_byte = len * USBS_MSD_RAMDISK_BLOCKLEN; + + if ( len_byte == 0 ) + return EINVAL; + + read_data(src, buf, len_byte); + + return ENOERR; +} + +static Cyg_ErrNo +ram_disk_bwrite(disk_channel *chan, + const void *buf, + cyg_uint32 len, + cyg_uint32 block_num) +{ + ram_disk_info_t *info = (ram_disk_info_t *)chan->dev_priv; + volatile cyg_uint8 *dst = info->base + USBS_MSD_RAMDISK_BLOCKLEN * block_num; + cyg_uint32 len_byte = len * USBS_MSD_RAMDISK_BLOCKLEN; + + if ( len_byte == 0 ) + return EINVAL; + + write_data(dst, buf, len_byte); + + return ENOERR; +} + +static Cyg_ErrNo +ram_disk_get_config(disk_channel *chan, + cyg_uint32 key, + const void *xbuf, + cyg_uint32 *len) +{ + return -EINVAL; +} + +static Cyg_ErrNo +ram_disk_set_config(disk_channel *chan, + cyg_uint32 key, + const void *xbuf, + cyg_uint32 *len) +{ + return -EINVAL; +} + + +// ---------------------------------------------------------------------------- +// In case FAT file-system package is included, this application will try +// to play with the file-system before it is mounted as a mass storage device. +// The following code is a copy of the fatfs1.c from the fs/test directory +// +#if defined(CYGPKG_FS_FAT) + +#define SHOW_RESULT( _fn, _res ) \ + DBG(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + +#define IOSIZE 100 + +//========================================================================== + +void checkcwd( const char *cwd ) +{ + static char cwdbuf[PATH_MAX]; + char *ret; + + ret = getcwd( cwdbuf, sizeof(cwdbuf)); + if( ret == NULL ) SHOW_RESULT( getcwd, (int)ret ); + + if( strcmp( cwdbuf, cwd ) != 0 ) + { + DBG( "cwdbuf %s cwd %s\n",cwdbuf, cwd ); + CYG_TEST_FAIL( "Current directory mismatch"); + } +} + +//========================================================================== + +static void listdir( char *name, int statp, int numexpected, int *numgot ) +{ + int err; + DIR *dirp; + int num=0; + + DBG(": reading directory %s\n",name); + + dirp = opendir( name ); + if( dirp == NULL ) SHOW_RESULT( opendir, -1 ); + + for(;;) + { + struct dirent *entry = readdir( dirp ); + + if( entry == NULL ) + break; + num++; + DBG(": entry %14s",entry->d_name); +#ifdef CYGPKG_FS_FAT_RET_DIRENT_DTYPE + DBG(" d_type %2x", entry->d_type); +#endif + if( statp ) + { + char fullname[PATH_MAX]; + struct stat sbuf; + + if( name[0] ) + { + strcpy(fullname, name ); + if( !(name[0] == '/' && name[1] == 0 ) ) + strcat(fullname, "/" ); + } + else fullname[0] = 0; + + strcat(fullname, entry->d_name ); + + err = stat( fullname, &sbuf ); + if( err < 0 ) + { + if( errno == ENOSYS ) + DBG(" "); + else SHOW_RESULT( stat, err ); + } + else + { + DBG(" [mode %08x ino %08x nlink %d size %ld]", + sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,(long)sbuf.st_size); + } +#ifdef CYGPKG_FS_FAT_RET_DIRENT_DTYPE + if ((entry->d_type & S_IFMT) != (sbuf.st_mode & S_IFMT)) + CYG_TEST_FAIL("File mode's don't match between dirent and stat"); +#endif + } + + DBG("\n"); + } + + err = closedir( dirp ); + if( err < 0 ) SHOW_RESULT( stat, err ); + if (numexpected >= 0 && num != numexpected) + CYG_TEST_FAIL("Wrong number of dir entries\n"); + if ( numgot != NULL ) + *numgot = num; +} + +//========================================================================== + +static void createfile( char *name, size_t size ) +{ + char buf[IOSIZE]; + int fd; + ssize_t wrote; + int i; + int err; + + DBG(": create file %s size %zd \n",name,size); + + err = access( name, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256; + + fd = open( name, O_WRONLY|O_CREAT ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + while( size > 0 ) + { + ssize_t len = size; + if ( len > IOSIZE ) len = IOSIZE; + + wrote = write( fd, buf, len ); + if( wrote != len ) SHOW_RESULT( write, (int)wrote ); + + size -= wrote; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +static void checkfile( char *name ) +{ + char buf[IOSIZE]; + int fd; + ssize_t done; + int i; + int err; + off_t pos = 0; + + DBG(": check file %s\n",name); + + err = access( name, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd = open( name, O_RDONLY ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + for(;;) + { + done = read( fd, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, (int)done ); + + if( done == 0 ) break; + + for( i = 0; i < done; i++ ) + if( buf[i] != i%256 ) + { + DBG("buf[%ld+%d](%02x) != %02x\n",pos,i,buf[i],i%256); + CYG_TEST_FAIL("Data read not equal to data written\n"); + } + + pos += done; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +static void copyfile( char *name2, char *name1 ) +{ + + int err; + char buf[IOSIZE]; + int fd1, fd2; + ssize_t done, wrote; + + DBG(": copy file %s -> %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + err = access( name2, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_WRONLY|O_CREAT ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, (int)done ); + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) SHOW_RESULT( write, (int) wrote ); + + if( wrote != done ) break; + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +static void comparefiles( char *name2, char *name1 ) +{ + int err; + char buf1[IOSIZE]; + char buf2[IOSIZE]; + int fd1, fd2; + ssize_t done1, done2; + int i; + + DBG(": compare files %s == %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_RDONLY ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done1 = read( fd1, buf1, IOSIZE ); + if( done1 < 0 ) SHOW_RESULT( read, (int)done1 ); + + done2 = read( fd2, buf2, IOSIZE ); + if( done2 < 0 ) SHOW_RESULT( read, (int)done2 ); + + if( done1 != done2 ) + DBG("Files different sizes\n"); + + if( done1 == 0 ) break; + + for( i = 0; i < done1; i++ ) + if( buf1[i] != buf2[i] ) + { + DBG("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]); + CYG_TEST_FAIL("Data in files not equal\n"); + } + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +#endif + + + +// ---------------------------------------------------------------------------- +// Entry point of the test application. If the FAT file-system package is +// included, the file-system is mounted and tested before the USB Mass Storage +// service is started. +// +// Once the mass storage device is mounted on the host computer, 2 files +// (foo and fee) and one directory (bar) should appear in the device +// + +int cyg_start(void) +{ +#if defined(CYGPKG_FS_FAT) + int err; + int existingdirents=-1; +#endif + + DBG("Start USB MSD application\n\r"); + +#if defined(CYGPKG_FS_FAT) + + // Mount RAM disk partition 1 + err = mount( "/dev/ramdisk0/1", "/", "fatfs" ); + + if( err < 0 ) + SHOW_RESULT( mount, err ); + + err = chdir( "/" ); + if( err < 0 ) + SHOW_RESULT( chdir, err ); + + checkcwd( "/" ); + + // Display list of all files/directories from root + listdir( "/", true, -1, &existingdirents ); + + // Play around with the file-system, create / copy / + // compare files + createfile( "/foo", 1000 ); + checkfile( "foo" ); + copyfile( "foo", "fee" ); + checkfile( "fee" ); + comparefiles( "foo", "/fee" ); + DBG(": mkdir bar\n"); + + // Create new directory + err = mkdir( "/bar", 0 ); + if( err < 0 ) + SHOW_RESULT( mkdir, err ); + + // Display list of all files/directories from root + listdir( "/" , true, existingdirents+3, NULL ); + + // Umount file-system + err = umount( "/" ); + + if( err < 0 ) + SHOW_RESULT( umount, err ); + +#endif + + // Start Mass Storage Service + usbs_msd_start(); + + // Start scheduler + cyg_scheduler_start(); + +} diff --git a/packages/io/usb/serial/slave/current/ChangeLog b/packages/io/usb/serial/slave/current/ChangeLog --- a/packages/io/usb/serial/slave/current/ChangeLog +++ b/packages/io/usb/serial/slave/current/ChangeLog @@ -1,3 +1,14 @@ +2010-10-27 John Dallaway + + * cdl/usb_serial.cdl: Place static endpoint struct options in a CDL + component. + * src/usbs_serial.c: Use usbs_get_[tr]x_endpoint() when static + endpoint structs are disabled. [ Bugzilla 1001024 ] + * tests/usbserial_echo.c, tests/usb2serial.c: Eliminate inclusion of + the AT91 USB slave driver header file. + * doc/usbs_serial.sgml: Mention the new static endpoint struct CDL + component. + 2009-11-13 John Dallaway * cdl/usb_serial.cdl: Specify test executable names for compatibility @@ -38,7 +49,7 @@ 2008-07-12 Frank Pagliughi - + @@ -26,6 +26,7 @@ + @@ -111,7 +112,9 @@ The CYGDAT_IO_USB_SLAVE_SERIAL_EP0 must be configured with the control end point of the USB - device. CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP + device. When using static endpoint configuration, + CYGPKG_IO_USB_SLAVE_SERIAL_STATIC_EP must be + enabled, CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP must be configured with the endpoint to be used for transmission and CYGDAT_IO_USB_SLAVE_SERIAL_RX_EP must be diff --git a/packages/io/usb/serial/slave/current/src/usbs_serial.c b/packages/io/usb/serial/slave/current/src/usbs_serial.c --- a/packages/io/usb/serial/slave/current/src/usbs_serial.c +++ b/packages/io/usb/serial/slave/current/src/usbs_serial.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -40,6 +40,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): Frank M. Pagliughi (fmp), SoRo Systems, Inc. +// Contributors: jld // Date: 2008-06-02 // //####DESCRIPTIONEND#### @@ -67,16 +68,19 @@ #define EP0_MAX_PACKET_SIZE CYGNUM_IO_USB_SLAVE_SERIAL_EP0_MAX_PACKET_SIZE extern usbs_control_endpoint CYGDAT_IO_USB_SLAVE_SERIAL_EP0; + +#if defined(CYGPKG_IO_USB_SLAVE_SERIAL_STATIC_EP) extern usbs_tx_endpoint CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP; extern usbs_rx_endpoint CYGDAT_IO_USB_SLAVE_SERIAL_RX_EP; +#define TX_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP) +#define RX_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_RX_EP) +#define INTR_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_INTR_EP) +#endif #define TX_EP_NUM CYGNUM_IO_USB_SLAVE_SERIAL_TX_EP_NUM #define RX_EP_NUM CYGNUM_IO_USB_SLAVE_SERIAL_RX_EP_NUM #define INTR_EP_NUM CYGNUM_IO_USB_SLAVE_SERIAL_INTR_EP_NUM #define EP0 (&CYGDAT_IO_USB_SLAVE_SERIAL_EP0) -#define TX_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_TX_EP) -#define RX_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_RX_EP) -#define INTR_EP (&CYGDAT_IO_USB_SLAVE_SERIAL_INTR_EP) #define VENDOR_ID CYGNUM_IO_USB_SLAVE_SERIAL_VENDOR_ID @@ -279,8 +283,6 @@ cyg_cond_t usbs_serial_state_cond; int usbs_serial_state; usbs_serial usbs_ser0 = { - tx_ep: TX_EP, - rx_ep: RX_EP, tx_result: 0, rx_result: 0, }; @@ -402,6 +404,12 @@ usbs_serial_wait_until_configured(void) cyg_mutex_lock(&usbs_serial_lock); while (usbs_serial_state != USBS_STATE_CONFIGURED) cyg_cond_wait(&usbs_serial_state_cond); + +#if !defined(CYGPKG_IO_USB_SLAVE_SERIAL_STATIC_EP) + usbs_ser0.tx_ep = usbs_get_tx_endpoint(usbs_serial_ep0, TX_EP_NUM); + usbs_ser0.rx_ep = usbs_get_rx_endpoint(usbs_serial_ep0, RX_EP_NUM); +#endif + cyg_mutex_unlock(&usbs_serial_lock); } @@ -517,7 +525,11 @@ usbs_serial_init(usbs_serial* ser, usbs_ void usbs_serial_start(void) { +#if defined(CYGPKG_IO_USB_SLAVE_SERIAL_STATIC_EP) usbs_serial_init(&usbs_ser0, TX_EP, RX_EP); +#else + usbs_serial_init(&usbs_ser0, NULL, NULL); +#endif cyg_mutex_init(&usbs_serial_lock); cyg_cond_init(&usbs_serial_state_cond, &usbs_serial_lock); diff --git a/packages/io/usb/serial/slave/current/tests/usb2serial.c b/packages/io/usb/serial/slave/current/tests/usb2serial.c --- a/packages/io/usb/serial/slave/current/tests/usb2serial.c +++ b/packages/io/usb/serial/slave/current/tests/usb2serial.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -53,8 +53,6 @@ #include #include -// Replace this with any other USB driver desired. -#include #include #include diff --git a/packages/io/usb/serial/slave/current/tests/usbserial_echo.c b/packages/io/usb/serial/slave/current/tests/usbserial_echo.c --- a/packages/io/usb/serial/slave/current/tests/usbserial_echo.c +++ b/packages/io/usb/serial/slave/current/tests/usbserial_echo.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation, Inc. +// Copyright (C) 2008, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -51,7 +51,6 @@ #include #include #include -#include #include #include diff --git a/packages/io/usb/slave/current/ChangeLog b/packages/io/usb/slave/current/ChangeLog --- a/packages/io/usb/slave/current/ChangeLog +++ b/packages/io/usb/slave/current/ChangeLog @@ -1,3 +1,13 @@ +2010-10-26 John Dallaway + + * src/usbs.c, include/usbs.h: Extend usbs_control_endpoint struct and + provide usbs_get_*_endpoint() functions to facilitate dynamic data + endpoint configuration. Contributed by Chris Holgate. + [ Bugzilla 1001024] + * doc/usbs.sgml: Document the above changes. + * cdl/usbs.cdl: Fix erroneous CYGPKG_IO_USB_SLAVE_TESTS display + string. + 2008-08-28 Bart Veer * host/configure: regenerate after update of Tcl macro @@ -186,7 +196,7 @@ 2000-11-21 Bart Veer - + @@ -26,6 +26,7 @@ + @@ -1952,6 +1953,28 @@ be identified in the data structure as w +Dynamic Data Endpoint Support + +typedef struct usbs_control_endpoint { + struct usbs_rx_endpoint* (*get_rxep_fn)(struct usbs_control_endpoint*, cyg_uint8); + struct usbs_tx_endpoint* (*get_txep_fn)(struct usbs_control_endpoint*, cyg_uint8); + … +} usbs_control_endpoint; + + +USB slave hardware may support multiple USB configurations via +configurable data endpoints. If the device driver can support such +operation, it will provide a pair of functions via the +get_rxep_fn and +get_txep_fn fields which enable retrieval +of the receive and transmit data endpoint structures using the logical +endpoint IDs specified in a USB class descriptor. Access to these +functions from higher-level code is provided by the +usbs_get_rx_endpoint and +usbs_get_tx_endpoint functions. + + + diff --git a/packages/io/usb/slave/current/include/usbs.h b/packages/io/usb/slave/current/include/usbs.h --- a/packages/io/usb/slave/current/include/usbs.h +++ b/packages/io/usb/slave/current/include/usbs.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -171,6 +171,10 @@ typedef enum { USBS_CONTROL_RETURN_STALL = 2 } usbs_control_return; +// Forward type definitions - see below for structure detail. +struct usbs_rx_endpoint; +struct usbs_tx_endpoint; + typedef struct usbs_control_endpoint { // The state is maintained by the USB code and should not be // modified by anything higher up. @@ -274,6 +278,27 @@ typedef struct usbs_control_endpoint { void* fill_data; int fill_index; usbs_control_return (*complete_fn)(struct usbs_control_endpoint*, int); + + // The following two functions provide a common API for accessing + // USB data endpoints. This avoids class drivers needing to know + // about the physical configuration of endpoints for each underlying + // USB slave device driver. The functions are used to map the + // logical endpoint ID (as specified in the USB class descriptors) to + // the appropriate endpoint data structure (as used by the eCos USB + // slave API calls). Individual USB slave drivers are free to implement + // this mapping in the most appropriate manner for the underlying + // hardware. This may be via CDL compile time options or preferably + // by scanning the supplied class driver descriptors at runtime. + // The latter method allows eCos to support multiple USB configurations + // in a single USB device. For this reason, these functions will only + // yield a valid endpoint mapping while the USB device is in its + // configured state. In all other states they will return a null + // pointer. These functions should also return a null pointer if the + // requested endpoint ID is not valid for the currently selected + // configuration. + struct usbs_rx_endpoint* (*get_rxep_fn)(struct usbs_control_endpoint*, cyg_uint8); + struct usbs_tx_endpoint* (*get_txep_fn)(struct usbs_control_endpoint*, cyg_uint8); + } usbs_control_endpoint; // Data endpoints are a little bit simpler, but not much. From the @@ -341,6 +366,10 @@ extern void usbs_set_rx_endpoint_hal extern void usbs_set_tx_endpoint_halted(usbs_tx_endpoint*, cyg_bool); extern void usbs_start_rx_endpoint_wait(usbs_rx_endpoint*, void (*)(void*, int), void*); extern void usbs_start_tx_endpoint_wait(usbs_tx_endpoint*, void (*)(void*, int), void*); + +// Utility function to access USB data endpoints by logical endpoint ID. +extern usbs_rx_endpoint* usbs_get_rx_endpoint(usbs_control_endpoint*, cyg_uint8); +extern usbs_tx_endpoint* usbs_get_tx_endpoint(usbs_control_endpoint*, cyg_uint8); // Functions that can go into devtab entries. These should not be // called directly, they are intended only for use by USB device diff --git a/packages/io/usb/slave/current/src/usbs.c b/packages/io/usb/slave/current/src/usbs.c --- a/packages/io/usb/slave/current/src/usbs.c +++ b/packages/io/usb/slave/current/src/usbs.c @@ -8,7 +8,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -195,6 +195,28 @@ usbs_devtab_set_config(cyg_io_handle_t h // USB-specific functions that are useful for applications/packages which // do not want to use the devtab interface. These may get called in DSR // context. + +usbs_rx_endpoint* +usbs_get_rx_endpoint(usbs_control_endpoint* control_endpoint, + cyg_uint8 endpoint_id) +{ + CYG_CHECK_DATA_PTR(control_endpoint, "A valid control endpoint must be supplied"); + CYG_CHECK_FUNC_PTR(control_endpoint->get_rxep_fn, "Dynamic endpoint access not supported"); + if (control_endpoint->state != USBS_STATE_CONFIGURED) + return NULL; + return (*control_endpoint->get_rxep_fn)(control_endpoint, endpoint_id); +} + +usbs_tx_endpoint* +usbs_get_tx_endpoint(usbs_control_endpoint* control_endpoint, + cyg_uint8 endpoint_id) +{ + CYG_CHECK_DATA_PTR(control_endpoint, "A valid control endpoint must be supplied"); + CYG_CHECK_FUNC_PTR(control_endpoint->get_txep_fn, "Dynamic endpoint access not supported"); + if (control_endpoint->state != USBS_STATE_CONFIGURED) + return NULL; + return (*control_endpoint->get_txep_fn)(control_endpoint, endpoint_id); +} void usbs_start_rx(usbs_rx_endpoint* endpoint) diff --git a/packages/isoinfra/current/ChangeLog b/packages/isoinfra/current/ChangeLog --- a/packages/isoinfra/current/ChangeLog +++ b/packages/isoinfra/current/ChangeLog @@ -1,3 +1,13 @@ +2014-05-15 Andy Jackson + + * include/sys/select.h: Make select FD_COPY and FD_ZERO macros single + statements. [ Bugzilla 1001986 ] + +2012-03-09 Jonathan Larmour + + * include/time.h: Add suseconds_t and useconds_t here for now. + * include/sys/time.h: Use suseconds_t when defining struct timeval. + 2009-06-03 Ross Younger * include/sys/stat.h: Include cyg_type.h for __externC @@ -433,7 +443,7 @@ 2000-05-02 Jonathan Larmour fds_bits[(__n)/__NFDBITS] &= ~(1 << ((__n) % __NFDBITS))) #define FD_ISSET(__n, __p) ((__p)->fds_bits[(__n)/__NFDBITS] & (1 << ((__n) % __NFDBITS))) -#define FD_COPY(__f, __t) \ -{ \ +#define FD_COPY(__f, __t) CYG_MACRO_START \ unsigned int _i; \ for( _i = 0; _i < __howmany(FD_SETSIZE, __NFDBITS) ; _i++ ) \ (__t)->fds_bits[_i] = (__f)->fds_bits[_i]; \ -} +CYG_MACRO_END -#define FD_ZERO(__p) \ -{ \ +#define FD_ZERO(__p) CYG_MACRO_START \ unsigned int _i; \ for( _i = 0; _i < __howmany(FD_SETSIZE, __NFDBITS) ; _i++ ) \ (__p)->fds_bits[_i] = 0; \ -} +CYG_MACRO_END # endif /* CYGONCE_ISO_SYS_SELECT_FD_SETS */ diff --git a/packages/isoinfra/current/include/sys/time.h b/packages/isoinfra/current/include/sys/time.h --- a/packages/isoinfra/current/include/sys/time.h +++ b/packages/isoinfra/current/include/sys/time.h @@ -78,8 +78,8 @@ * and used in other calls such as select(2). */ struct timeval { - time_t tv_sec; /* seconds */ - time_t tv_usec; /* and microseconds */ + time_t tv_sec; /* seconds */ + suseconds_t tv_usec; /* and microseconds */ }; #endif diff --git a/packages/isoinfra/current/include/time.h b/packages/isoinfra/current/include/time.h --- a/packages/isoinfra/current/include/time.h +++ b/packages/isoinfra/current/include/time.h @@ -77,7 +77,16 @@ * Epoch (00:00:00 GMT, 1970-01-01), but don't rely on this - always use * the type opaquely */ -typedef int time_t; +typedef long time_t; + +/* Additional POSIX-derived types. Not the ideal place as these should + * also be defined in , along with time_t but that will + * require major upheaval to resolve these sorts of minor strict + * compliance issues properly. + */ +typedef long suseconds_t; +typedef long useconds_t; + # define __time_t_defined #endif diff --git a/packages/kernel/current/ChangeLog b/packages/kernel/current/ChangeLog --- a/packages/kernel/current/ChangeLog +++ b/packages/kernel/current/ChangeLog @@ -1,3 +1,72 @@ +2014-03-13 Ilija Kocho + + * tests/tm_basic.c: Increase resolution of time measurement for platforms + featuring HAL_CLOCK_READ_NS. [Bugzilla 1001958] + +2013-06-13 Ilija Kocho + + * tests/kintr0.c, tests/kcache1.c: Fix compiler warnings. + +2013-04-26 Ilija Kocho + + * tests/fpint_thread_switch.c: Fix missing semicolon. + Bug spotted and patch provided by John Dallaway. [ Bugzilla 1001835 ] + +2013-02-10 Ilija Kocho + Jonathan Larmour + + * cdl/kernel.cdl: + * tests/fpinttestf.c, tests/fpinttestf1.c, tests/fpinttestf2.c, + * tests/fpint_thread_switch.c: Add single precision floating point tests. + [ Bugzilla 1001607 ] + +2012-10-04 Ilija Kocho + + * tests/kcache2.c: Include CYGHWR_MEMORY_LAYOUT_H in order to + effectively test memory size. Bug reported and fix suggested by + Bernd Edlinger. [Bugzilla 1001650] + +2012-05-27 Ilija Kocho + + * tests/kcache2.c: Allow comilation for targets with less then + 128KiB RAM by conditionally reducing of MAXSIZE to (1<<16) + + +2012-03-19 Sergei Gavrikov + Jonathan Larmour + + * tests/except1.cxx (cause_exception): Fix compiler warning about + variable that is set but not used. Enter CYGBLD_ATTRIB_UNUSED. + * tests/kexcept1.c (cause_exception): Ditto. + * tests/kmbox1.c (entry1): Fix compiler warning about variable that + is set but not used. Use by a conditional CYGMTH_MBOX_PUT_CAN_WAIT. + * tests/mbox1.cxx (entry1): Ditto. + * tests/tm_basic.cxx (run_thread_tests, run_mbox_tests, + run_flag_tests): Remove unused variables. + +2012-03-06 Grant Edwards + + * src/intr/intr.cxx (attach): Fix compiler warning about unused + variable. [ Bugzilla 1001505 ] + +2011-07-09 Ilija Kocho + + * tests/bin_sem2.cxx (PHILOSOPHERS): + * tests/fptest.cx (TEST_NA): + * tests/kmutex3.c (NTHREADS): + * tests/kmutex4.c (NTHREADS): + * tests/mutex3.cxx (NTHREADS): + * tests/thread_gdb.c (NTHREADS): + * tests/timeslice.c (NTHREADS_MAX): + * tests/timeslice2.c (NTHREADS_MAX): + * tests/tm_basic.cxx (NTEST_THREADS): Given a chance to compile and + run more tests for low memory footprint targets. [ Bugzilla 1001253 ] + +2010-11-22 Andrew Lunn + + * tests/intr0.cxx (intr0_main): Fix a compiler warning by changing + a CHECK() statement. + 2010-03-29 Lars Povlsen * src/common/thread.cxx: Add volatile to idle_thread_loops for use with diff --git a/packages/kernel/current/cdl/kernel.cdl b/packages/kernel/current/cdl/kernel.cdl --- a/packages/kernel/current/cdl/kernel.cdl +++ b/packages/kernel/current/cdl/kernel.cdl @@ -151,14 +151,14 @@ cdl_package CYGPKG_KERNEL { # --------------------------------------------------------------------- # SMP support - + cdl_component CYGPKG_KERNEL_SMP_SUPPORT { display "SMP support" flavor bool requires CYGPKG_HAL_SMP_SUPPORT default_value 0 } - + # --------------------------------------------------------------------- cdl_component CYGPKG_KERNEL_COUNTERS { display "Counters and clocks" @@ -317,19 +317,32 @@ cdl_package CYGPKG_KERNEL { the set of global flags if present." } - cdl_option CYGPKG_KERNEL_TESTS { + cdl_component CYGPKG_KERNEL_TESTS { display "Kernel tests" flavor data no_define - calculated { - "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" - . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/fptest tests/kalarm0" : "") + calculated { + "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") } description " This option specifies the set of tests for the eCos kernel." + + cdl_option CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST { + display "Suppress multi thread floating point test" + flavor bool + default_value 0 + description "Hardware floating point configurations that do not + preserve FPU context are supposed to fail multi thread FPU + integrity tests. Setting this option to 1 shall suppress + building of such tests and shall build single thread fpu + integrity test instead." + } } } } diff --git a/packages/kernel/current/src/intr/intr.cxx b/packages/kernel/current/src/intr/intr.cxx --- a/packages/kernel/current/src/intr/intr.cxx +++ b/packages/kernel/current/src/intr/intr.cxx @@ -467,7 +467,7 @@ Cyg_Interrupt::attach(void) if( chain_list[index] == NULL ) { - int in_use; + int in_use CYGBLD_ATTRIB_UNUSED; // First Interrupt on this chain, just assign it and register // the chain_isr with the HAL. @@ -499,8 +499,7 @@ Cyg_Interrupt::attach(void) #else { - int in_use; - + int in_use CYGBLD_ATTRIB_UNUSED; HAL_INTERRUPT_IN_USE( vector, in_use ); CYG_ASSERT( 0 == in_use, "Interrupt vector not free."); diff --git a/packages/kernel/current/tests/bin_sem2.cxx b/packages/kernel/current/tests/bin_sem2.cxx --- a/packages/kernel/current/tests/bin_sem2.cxx +++ b/packages/kernel/current/tests/bin_sem2.cxx @@ -58,10 +58,19 @@ #include #include +#include CYGHWR_MEMORY_LAYOUT_H static cyg_ucount16 PHILO_LOOPS = 1000; -#define PHILOSOPHERS 15 +#if (CYGMEM_REGION_ram_SIZE <= 32768) +# define PHILOSOPHERS 5 +#elif (CYGMEM_REGION_ram_SIZE <= 49152) +# define PHILOSOPHERS 9 +#elif (CYGMEM_REGION_ram_SIZE <= 65536) +# define PHILOSOPHERS 11 +#else +# define PHILOSOPHERS 15 +#endif #define NTHREADS PHILOSOPHERS #include "testaux.hxx" diff --git a/packages/kernel/current/tests/except1.cxx b/packages/kernel/current/tests/except1.cxx --- a/packages/kernel/current/tests/except1.cxx +++ b/packages/kernel/current/tests/except1.cxx @@ -122,7 +122,7 @@ cause_fpe(int num) void cause_exception(void) { - int x; + int x CYGBLD_ATTRIB_UNUSED; unsigned int p=0; // First try for an address exception (unaligned access exception diff --git a/packages/kernel/current/tests/fpint_thread_switch.cxx b/packages/kernel/current/tests/fpint_thread_switch.cxx new file mode 100644 --- /dev/null +++ b/packages/kernel/current/tests/fpint_thread_switch.cxx @@ -0,0 +1,512 @@ +//========================================================================== +// +// fpint_thread_switch.cxx +// +// Thread switch delay measurement +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Original code: gthomas (tm_basic.cxx from kernel tests) +// Date: 2012-12-18 +// Description: Switch delay measurement between threads that do/don't use +// floating point operations. +//####DESCRIPTIONEND#### + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include CYGHWR_MEMORY_LAYOUT_H + + +#ifndef HAL_CLOCK_READ_NS +#define HAL_CLOCK_READ_NS(__pvalue) \ +CYG_MACRO_START \ + HAL_CLOCK_READ(__pvalue); \ + *__pvalue *= 1000; \ +CYG_MACRO_END +#endif + +//========================================================================== +// Random number generator. Ripped out of the C fptest.c. + +static int CYGBLD_ATTRIB_NO_INLINE rand( unsigned int *seed ) +{ +// This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom + +#define RAND_MAX 0x7fffffff +#define MM 2147483647 // a Mersenne prime +#define AA 48271 // this does well in the spectral test +#define QQ 44488 // (long)(MM/AA) +#define RR 3399 // MM % AA; it is important that RR 12) + +#define NTHREADS 4 +#include "testaux.hxx" + +// Structure used to keep track of times +typedef struct fun_times { + cyg_uint32 start; + cyg_uint32 end; +} fun_times; + +#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL + +#define NTEST_THREADS 2 + +#define NSAMPLES 2 + +#define NTHREAD_SWITCHES 128 +#define NTHREAD_SWITCHES_TS 16 + +#define NSAMPLES_SIM 2 +#define NTHREAD_SWITCHES_SIM 4 +#define NTHREAD_SWITCHES_TS_SIM 4 + +static int nsamples; +static int ntest_threads; +static int nthread_switches; +static int nthread_switches_ts; + +static char stacks[NTEST_THREADS][STACK_SIZE] CYGBLD_ATTRIB_ALIGN_MAX; +static cyg_thread test_threads[NTEST_THREADS]; +static cyg_handle_t threads[NTEST_THREADS]; +static cyg_sem_t test_sem[NTEST_THREADS]; +static int overhead; +static cyg_sem_t synchro; + +static fun_times test2_ft[4][NTHREAD_SWITCHES]; + + +static long rtc_resolution[] = CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION; +static long ns_per_system_clock; + +void run_thread_switch_test(int); + +#ifndef min +#define min(X,Y) ((X) < (Y) ? (X) : (Y)) +#endif + + + +// Wait until a clock tick [real time clock] has passed. This should keep it +// from happening again during a measurement, thus minimizing any fluctuations +void +wait_for_tick(void) +{ + cyg_tick_count_t tv0, tv1; + tv0 = cyg_current_time(); + while (true) { + tv1 = cyg_current_time(); + if (tv1 != tv0) break; + } +} + +// Display a number of ticks as nanoseconds +void +show_ticks_in_ns(cyg_uint32 ticks) +{ + long long ns; + ns = (ns_per_system_clock * (long long)ticks) / CYGNUM_KERNEL_COUNTERS_RTC_PERIOD; + diag_printf("%8d", (int)(ns)); +} + + +void +show_times_hdr(void) +{ + diag_printf("\n"); + diag_printf(" Confidence\n"); + diag_printf(" Ave Min Max Max-Min Ave Min Samp Function\n"); + diag_printf(" ====== ====== ====== ====== ==== ===== ===== ========\n"); +} + +void +show_times_detail(fun_times ft[], int nsamples, char *title, bool ignore_first) +{ + int i, delta, min, max, con_ave, con_min, ave_dev; + int start_sample, total_samples; + cyg_int32 total, ave; + + if (ignore_first) { + start_sample = 1; + total_samples = nsamples-1; + } else { + start_sample = 0; + total_samples = nsamples; + } + total = 0; + min = 0x7FFFFFFF; + max = 0; + for (i = start_sample; i < nsamples; i++) { + if (ft[i].end < ft[i].start) { + // Clock wrapped around (timer tick) + delta = (ft[i].end+CYGNUM_KERNEL_COUNTERS_RTC_PERIOD*1000) - ft[i].start; + } else { + delta = ft[i].end - ft[i].start; + } + delta -= overhead; + if (delta < 0) delta = 0; + total += delta; + if (delta < min) min = delta; + if (delta > max) max = delta; + } + ave = total / total_samples; + total = 0; + ave_dev = 0; + for (i = start_sample; i < nsamples; i++) { + if (ft[i].end < ft[i].start) { + // Clock wrapped around (timer tick) + delta = (ft[i].end+CYGNUM_KERNEL_COUNTERS_RTC_PERIOD*1000) - ft[i].start; + } else { + delta = ft[i].end - ft[i].start; + } + delta -= overhead; + if (delta < 0) delta = 0; + delta = delta - ave; + if (delta < 0) delta = -delta; + ave_dev += delta; + } + ave_dev /= total_samples; + con_ave = 0; + con_min = 0; + for (i = start_sample; i < nsamples; i++) { + if (ft[i].end < ft[i].start) { + // Clock wrapped around (timer tick) + delta = (ft[i].end+CYGNUM_KERNEL_COUNTERS_RTC_PERIOD*1000) - ft[i].start; + } else { + delta = ft[i].end - ft[i].start; + } + delta -= overhead; + if (delta < 0) delta = 0; + if ((delta <= (ave+ave_dev)) && (delta >= (ave-ave_dev))) con_ave++; + if ((delta <= (min+ave_dev)) && (delta >= (min-ave_dev))) con_min++; + } + con_ave = (con_ave * 100) / total_samples; + con_min = (con_min * 100) / total_samples; + show_ticks_in_ns(ave); + show_ticks_in_ns(min); + show_ticks_in_ns(max); + show_ticks_in_ns(max-min); + diag_printf(" %3d%% %3d%%", con_ave, con_min); + diag_printf(" %4d", total_samples); + diag_printf(" %s\n", title); +} + +void +show_times(fun_times ft[], int nsamples, char *title) +{ +#ifndef STATS_WITHOUT_FIRST_SAMPLE + show_times_detail(ft, nsamples, title, false); +#else// STATS_WITHOUT_FIRST_SAMPLE + show_times_detail(ft, nsamples, title, true); +#endif +} + +void +show_test_parameters(void) +{ + diag_printf("\nTesting parameters:\n"); + diag_printf(" Thread switches: %5d\n", nthread_switches); + diag_printf(" Time unit: nanoseconds [ns]\n"); +} + +void +end_of_test_group(void) +{ + diag_printf("\n"); +} + +// Compute a name for a thread +char * +thread_name(char *basename, int indx) { + return "<>"; // Not currently used +} + +// test0 - null test, never executed +void +test0(cyg_uint32 indx) +{ +#ifndef CYGPKG_KERNEL_SMP_SUPPORT + // In SMP, somw of these threads will execute + diag_printf("test0.%d executed?\n", indx); +#endif + cyg_thread_exit(); +} + +// test1 - empty test, simply exit. Last thread signals parent. +void +test1(cyg_uint32 indx) +{ + if (indx == (cyg_uint32)(ntest_threads-1)) { + cyg_semaphore_post(&synchro); // Signal that last thread is dying + } + cyg_thread_exit(); +} + +char title[128]; +char* thread_title[2]; + +volatile int ires __attribute__((unused)); + +// This thread does not use floating point +void +thread_int(cyg_uint32 indx_fp) +{ + int i; + int fp_i, indx; + unsigned int seed; + int iop1, iop2; + + fp_i = indx_fp & 0x3; + indx = (indx_fp & 0x4) >> 2; + thread_title[indx] = "int"; + + // Just for symmetry with thread_fp. + seed = indx_fp; + iop1 = rand(&seed); + iop2 = rand(&seed); + ires = iop1 + iop2; + cyg_semaphore_wait(&test_sem[indx]); + + for (i = 0; i < nthread_switches; i++) { + ires = iop1 + iop2; + if (indx == 0) { + HAL_CLOCK_READ_NS(&test2_ft[fp_i][i].start); + } else { + HAL_CLOCK_READ_NS(&test2_ft[fp_i][i].end); + } + cyg_thread_yield(); + } + if (indx) { + cyg_semaphore_post(&synchro); + } + cyg_thread_exit(); +} + +volatile float fres __attribute__((unused)); + +// This thread does use floating point +void +thread_fp(cyg_uint32 indx_fp) +{ + int i; + int fp_i, indx; + unsigned int seed; + float fop1, fop2; + + fp_i = indx_fp & 0x3; + indx = (indx_fp & 0x4) >> 2; + thread_title[indx] = "fpu"; + + // In LAZY mode we need some FP usage to enforce + // FPU context saving. + seed = indx_fp; + fop1 = (float)rand(&seed) / (float)0x7fffffff; + fop2 = (float)rand(&seed) / (float)0x7fffffff; + fres = fop1 + fop2; + cyg_semaphore_wait(&test_sem[indx]); + + for (i = 0; i < nthread_switches; i++) { + fres = fop1 + fop2; + if (indx == 0) { + HAL_CLOCK_READ_NS(&test2_ft[fp_i][i].start); + } else { + HAL_CLOCK_READ_NS(&test2_ft[fp_i][i].end); + } + cyg_thread_yield(); + } + if (indx) { + cyg_semaphore_post(&synchro); + } + cyg_thread_exit(); +} + +void +run_tests(CYG_ADDRESS id) +{ + int tst_i; + + ns_per_system_clock = 1000000/rtc_resolution[1]; + + diag_printf("Thread switch test\n"); + show_test_parameters(); + // Set my priority lower than any I plan to create + cyg_thread_set_priority(cyg_thread_self(), 3); + + // Set up the end-of-threads synchronizer + cyg_semaphore_init(&synchro, 0); + show_times_hdr(); +#if CYGNUM_TESTS_RUN_COUNT < 0 + while (1) +#else + int i; + for (i = 0; i < CYGNUM_TESTS_RUN_COUNT; i++) +#endif + for(tst_i = 0; tst_i < 4; tst_i ++){ + run_thread_switch_test(tst_i); + } + CYG_TEST_PASS_FINISH("Thread switching OK"); +} + + +void +run_thread_switch_test(int fp_i) +{ + int i; + cyg_thread_entry_t* thr_ent[2]; + + for (i = 0; i < 2; i++) { + cyg_semaphore_init(&test_sem[i], 0); + } + // Set up for thread context switch + thr_ent[0] = !(fp_i & 0x2) ? thread_int : thread_fp; + thr_ent[1] = !(fp_i & 0x1) ? thread_int : thread_fp; + + for (i = 0; i < 2; i++) { + cyg_thread_create(10, // Priority - just a number + thr_ent[i], // entry + (i << 2) | fp_i, // index + thread_name("thread", i), // Name + &stacks[i][0], // Stack + STACK_SIZE, // Size + &threads[i], // Handle + &test_threads[i] // Thread data structure + ); + } + for (i = 0; i < 2; i++) { + cyg_thread_resume(threads[i]); + } + cyg_thread_delay(2); + wait_for_tick(); // Wait until the next clock tick to minimize aberations + for (i = 0; i < 2; i++) { + cyg_semaphore_post(&test_sem[i]); + } + cyg_semaphore_wait(&synchro); + __builtin_strcpy(title, "Thread switch: "); + __builtin_strcat(title, thread_title[0]); + __builtin_strcat(title,"-"); + __builtin_strcat(title, thread_title[1]); + show_times(test2_ft[fp_i], nthread_switches, title); + // Clean up + for (i = 0; i < 2; i++) { + cyg_thread_delete(threads[i]); + } +} + +void thread_switch_main( void ) +{ + CYG_TEST_INIT(); + + if (cyg_test_is_simulator) { + nsamples = NSAMPLES_SIM; + nthread_switches = NTHREAD_SWITCHES_SIM; + nthread_switches_ts = NTHREAD_SWITCHES_TS_SIM; + } else { + nsamples = NSAMPLES; + nthread_switches = NTHREAD_SWITCHES; + nthread_switches_ts = NTHREAD_SWITCHES_TS; + } + + new_thread(run_tests, 0); + + Cyg_Scheduler::scheduler.start(); + +} + +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + +externC void +cyg_start( void ) +{ +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif + thread_switch_main(); +} + +#else // CYGFUN_KERNEL_API_C + +externC void +cyg_start( void ) +{ + CYG_TEST_INIT(); + CYG_TEST_INFO("Timing tests require:\n" + "CYGFUN_KERNEL_API_C && \n" + "CYGSEM_KERNEL_SCHED_MLQUEUE &&\n" + "CYGVAR_KERNEL_COUNTERS_CLOCK &&\n" + "!CYGDBG_INFRA_DIAG_USE_DEVICE &&\n" + "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12)\n"); + CYG_TEST_NA("Timing tests requirements"); +} +#endif // CYGFUN_KERNEL_API_C, etc. + +// EOF fpint_thread_switch.cxx diff --git a/packages/kernel/current/tests/fpinttestf.c b/packages/kernel/current/tests/fpinttestf.c new file mode 100644 --- /dev/null +++ b/packages/kernel/current/tests/fpinttestf.c @@ -0,0 +1,588 @@ +//========================================================================== +// +// fpinttestf.c +// +// Basic FPU integrity test +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Original code: nickg@calivar.com +// Contributors: +// Date: 2012-12-18 +// Description: Simple FPU test with a mix of threads that do and do not use +// floating point. +// This is a modification of the original FPU test, and presents +// both "integer" and "float" threads in order to enforce LAZY +// context switching. Single precision floating point is used. +// This is not very sophisticated as far +// as checking FPU performance or accuracy. It is more +// concerned with checking that several threads doing FP +// operations do not interfere with eachother's use of the +// FPU. +// Note: NONE context switching scheme should NOT pass this test with +// multiple FP threads. Look for fpinttestf1.c instead. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#include + +#include + +#include +#include + +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================== + +#ifndef FP_THREADS_N +#define FP_THREADS_N 3 +#define FP_TEST_NAME "FP test" +#endif + +#if defined(CYGFUN_KERNEL_API_C) && \ + defined(CYGSEM_KERNEL_SCHED_MLQUEUE) && \ + (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) && \ + (CYGMEM_REGION_ram_SIZE >= (49152-4096)) && \ + (!defined(CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST) || (FP_THREADS_N == 1)) + +//========================================================================== +// Base priority for all threads. + +#define BASE_PRI 5 + +//========================================================================== +// Runtime +// +// This is the number of ticks that the program will run for. 3000 +// ticks is equal to 30 seconds in the default configuration. For +// simulators we reduce the run time to 3 simulated seconds. + +#define RUN_TICKS 3000 +#define RUN_TICKS_SIM 300 + +//========================================================================== +// Thread parameters + +#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_MINIMUM +#define THREADS_N 8 +static cyg_uint8 stacks[THREADS_N][STACK_SIZE] CYGBLD_ATTRIB_ALIGN_MAX; +static cyg_handle_t thread[THREADS_N]; +static cyg_thread thread_struct[THREADS_N]; +static unsigned long iter_n[THREADS_N]; + +//========================================================================== +// Alarm parameters. + +static cyg_alarm alarm_struct; +static cyg_handle_t alarm; + +static cyg_count8 cur_thread = 0; +static cyg_count32 alarm_ticks = 0; +static cyg_count32 run_ticks = RUN_TICKS; + +//========================================================================== + +static int errors = 0; + +//========================================================================== +// Random number generator. Ripped out of the C library. + +static int CYGBLD_ATTRIB_NO_INLINE rand( unsigned int *seed ) +{ +// This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom + +#define RAND_MAX 0x7fffffff +#define MM 2147483647 // a Mersenne prime +#define AA 48271 // this does well in the spectral test +#define QQ 44488 // (long)(MM/AA) +#define RR 3399 // MM % AA; it is important that RR\n",name,j*count); +#endif + } +#if 0 + if(thread_i < 3) + diag_printf("INFO:<%s [%d]: %2d calculations done>\n",name,thread_i,j*count); +#endif + if(thread_i < 3) + iter_n[thread_i] = iter; +} + + +//========================================================================== +// Test calculation. +// +// Generates an array of random integer values and then repeatedly applies +// a calculation to them and checks that the same result is reached +// each time. + +static void do_int_test( int *values, + int count, + int loops, + int test, + const char *name) +{ + unsigned int i, j; + // volatiles necessary to force + // values to 32 bits for comparison + volatile int sum = 1; + volatile int last_sum; + unsigned int seed; +#if 0 + cyg_uint32 ctrlreg; +#endif + cyg_uint32 iter = 0; + int thread_i = name[__builtin_strlen(name)-1]-'1'; + +#define VI(__i) (values[(__i)%count]) +#define CALCI ((VI(i-1)*VI(i+1))*(VI(i-2)*VI(i+2))*(VI(i-3)*sum)) + + seed = ((unsigned int)&i)*count; + + // Set up an array of values... + for( i = 0; i < count; i++ ) + values[i] = rand( &seed ); + + // Now calculate something from them... + for( i = 0; i < count; i++ ) + sum += CALC; + + last_sum = sum; + + // Now recalculate the sum in a loop and look for errors + for( j = 0; j < loops ; j++ ) + { + iter++; + if(thread_i < 8) + iter_n[thread_i]++; + sum = 1; + for( i = 0; i < count; i++ ) + sum += CALC; + + if( sum != last_sum ) + { + errors++; + diag_printf("%s: Sum mismatch! %d sum=[%08x] last_sum=[%08x]\n", + name,j, sum, last_sum ); + } +#if 0 + CYGARC_MRS(ctrlreg, control); + if(ctrlreg & 0x04){ + diag_printf("%s: control = 0x%08x\n", name, ctrlreg); + } +#endif +#if 0 + if( ((j*count)%1000000) == 0 ) + diag_printf("INFO:<%s: %2d calculations done>\n",name,j*count); +#endif + } +} + +//========================================================================== +// Alarm handler +// +// This is called every tick. It lowers the priority of the currently +// running thread and raises the priority of the next. Thus we +// implement a form of timelslicing between the threads at one tick +// granularity. + +static void alarm_fn(cyg_handle_t alarm, cyg_addrword_t data) +{ + alarm_ticks++; + unsigned long iter_sum; + + if( alarm_ticks >= run_ticks ) + { + if( errors ) + CYG_TEST_FAIL("Errors detected"); + else + CYG_TEST_PASS("OK"); + + iter_sum = + iter_n[0] + iter_n[1] + iter_n[2] + iter_n[3]+ iter_n[4] + iter_n[5]+ iter_n[6] + iter_n[7]; + diag_printf("Iterations = %lu+%lu+%lu+%lu+%lu+%lu+%lu+%lu", + iter_n[0], iter_n[1], iter_n[2], iter_n[3], iter_n[4], iter_n[5], iter_n[6], iter_n[7]); + diag_printf("=%lu\n", iter_sum); + CYG_TEST_FINISH("FP Test done"); + } + else + { + cyg_thread_set_priority( thread[cur_thread], BASE_PRI ); + + cur_thread = (cur_thread+1)%8; + + cyg_thread_set_priority( thread[cur_thread], BASE_PRI-1 ); + } +} + + +//========================================================================== +// Floating point threads +// +#define FP1_COUNT 1000 + +static float fpt1_values[FP1_COUNT]; + +void fptest1( CYG_ADDRWORD id ) +{ + while(1) + do_test( fpt1_values, FP1_COUNT, 2000000000, id, "fptest1" ); +} + +//========================================================================== +#if (CYGMEM_REGION_ram_SIZE / 8 / 2) < 10000 +#define FP2_COUNT (CYGMEM_REGION_ram_SIZE / 8 / 2) +#else +#define FP2_COUNT 10000 +#endif + +static float fpt2_values[FP2_COUNT]; + +void fptest2( CYG_ADDRWORD id ) +{ + while(1) + do_test( fpt2_values, FP2_COUNT, 2000000000, id, "fptest2" ); +} + +//========================================================================== + +#define FP3_COUNT 100 + +static float fpt3_values[FP3_COUNT]; + +void fptest3( CYG_ADDRWORD id ) +{ + while(1) + do_test( fpt3_values, FP3_COUNT, 2000000000, id, "fptest3" ); +} + +//========================================================================== +// Integral threads +// + +#define INT1_COUNT 1000 + +static int int1_values[INT1_COUNT]; + +void inttest4( CYG_ADDRWORD id ) +{ + while(1) + do_int_test( int1_values, INT1_COUNT, 2000000000, id, "inttest4" ); +} + +#define INT2_COUNT 1000 + +static int int2_values[INT2_COUNT]; + +void inttest5( CYG_ADDRWORD id ) +{ + while(1) + do_int_test( int2_values, INT2_COUNT, 2000000000, id, "inttest5" ); +} + +#define INT3_COUNT 1000 + +static int int3_values[INT3_COUNT]; + +void inttest6( CYG_ADDRWORD id ) +{ + while(1) + do_int_test( int3_values, INT3_COUNT, 2000000000, id, "inttest6" ); +} + + +#define INT4_COUNT 1000 + +static int int4_values[INT4_COUNT]; + +void inttest7( CYG_ADDRWORD id ) +{ + while(1) + do_int_test( int4_values, INT4_COUNT, 2000000000, id, "inttest7" ); +} + +#define INT5_COUNT 1000 + +static int int5_values[INT5_COUNT]; + +void inttest8( CYG_ADDRWORD id ) +{ + while(1) + do_int_test( int5_values, INT5_COUNT, 2000000000, id, "inttest8" ); +} + +//====================================================================================== +// Main + +void fptest_main( void ) +{ + CYG_TEST_INIT(); + + if( cyg_test_is_simulator ) + { + run_ticks = RUN_TICKS_SIM; + } + CYG_TEST_INFO("Run fptest in cyg_start"); + do_test( fpt3_values, FP3_COUNT, 1000, 0, "start" ); + CYG_TEST_INFO( "cyg_start run done"); + + cyg_thread_create( BASE_PRI-1, + fptest1, + 0, + "fptest1", + &stacks[0][0], + STACK_SIZE, + &thread[0], + &thread_struct[0]); +#if FP_THREADS_N > 0 + cyg_thread_resume( thread[0] ); +#endif + cyg_thread_create( BASE_PRI, + fptest2, + 1, + "fptest2", + &stacks[1][0], + STACK_SIZE, + &thread[1], + &thread_struct[1]); + +#if FP_THREADS_N > 1 + cyg_thread_resume( thread[1] ); +#endif + cyg_thread_create( BASE_PRI, + fptest3, + 2, + "fptest3", + &stacks[2][0], + STACK_SIZE, + &thread[2], + &thread_struct[2]); + +#if FP_THREADS_N > 2 + cyg_thread_resume( thread[2] ); +#endif + + cyg_thread_create( BASE_PRI, + inttest4, + 3, + "inttest4", + &stacks[3][0], + STACK_SIZE, + &thread[3], + &thread_struct[3]); + + cyg_thread_resume( thread[3] ); + + cyg_thread_create( BASE_PRI, + inttest5, + 4, + "inttest5", + &stacks[4][0], + STACK_SIZE, + &thread[4], + &thread_struct[4]); + + cyg_thread_resume( thread[4] ); + + cyg_thread_create( BASE_PRI, + inttest6, + 5, + "inttest6", + &stacks[5][0], + STACK_SIZE, + &thread[5], + &thread_struct[5]); + + cyg_thread_resume( thread[5] ); + + cyg_thread_create( BASE_PRI, + inttest7, + 6, + "inttest7", + &stacks[6][0], + STACK_SIZE, + &thread[6], + &thread_struct[6]); + + cyg_thread_resume( thread[6] ); + + cyg_thread_create( BASE_PRI, + inttest8, + 7, + "inttest8", + &stacks[7][0], + STACK_SIZE, + &thread[7], + &thread_struct[7]); + + cyg_thread_resume( thread[7] ); + + cyg_alarm_create( cyg_real_time_clock(), + alarm_fn, + 0, + &alarm, + &alarm_struct ); + + cyg_alarm_initialize( alarm, cyg_current_time()+1, 1 ); + + cyg_scheduler_start(); + +} + +//========================================================================== + +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + +externC void +cyg_start( void ) +{ +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif + fptest_main(); +} + +//========================================================================== + +#else // CYGFUN_KERNEL_API_C... + +externC void +cyg_start( void ) +{ + CYG_TEST_INIT(); + CYG_TEST_INFO(FP_TEST_NAME " requires:\n" + "CYGFUN_KERNEL_API_C && \n" + "CYGSEM_KERNEL_SCHED_MLQUEUE && \n" + "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12) &&\n" + "(CYGMEM_REGION_ram_SIZE >= (49152-4096)) &&\n" + "(!defined(CYGHWR_HAL_CORTEXM_FPU_SWITCH_NONE) || (FP_THREADS_N == 1))" + ); + CYG_TEST_NA("FP test requirements"); +} + +#endif // CYGFUN_KERNEL_API_C, etc. + +//========================================================================== +// EOF fpinttestf.c diff --git a/packages/kernel/current/tests/fpinttestf1.c b/packages/kernel/current/tests/fpinttestf1.c new file mode 100644 --- /dev/null +++ b/packages/kernel/current/tests/fpinttestf1.c @@ -0,0 +1,58 @@ +//========================================================================== +// +// fpinttestf1.cxx +// +// Basic FPU integrity test for NONE context switching scheme +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2012-12-18 +// Description: Simple FPU test with a mix of threads that do and do not use +// floating point. +// This is a special case of fpinttestf.c with single FP thread. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#define FP_THREADS_N 1 +#define FP_TEST_NAME "FP test for switching scheme NONE" + +#include "fpinttestf.c" + +//========================================================================== +// EOF fpinttestf1.c diff --git a/packages/kernel/current/tests/fpinttestf2.c b/packages/kernel/current/tests/fpinttestf2.c new file mode 100644 --- /dev/null +++ b/packages/kernel/current/tests/fpinttestf2.c @@ -0,0 +1,400 @@ +//========================================================================== +// +// fpinttestf2.c +// +// Basic FPU integrity test +// +//========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Original code: nickg@calivar.com +// Contributors: +// Date: 2012-12-18 +// Description: Simple FPU test with a mix of threads that do and do not use +// floating point. +// This is a modification of the original FPU test, and presents +// both "integer" and "float" threads in order to enforce LAZY +// context switching. Single precision floating point is used. +// This is not very sophisticated as far +// as checking FPU performance or accuracy. It is more +// concerned with checking that several threads doing FP +// operations do not interfere with eachother's use of the +// FPU. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#include + +#include + +#include +#include + +#include +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================== + +#if defined(CYGFUN_KERNEL_API_C) && \ + defined(CYGSEM_KERNEL_SCHED_MLQUEUE) && \ + (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) && \ + (CYGMEM_REGION_ram_SIZE >= (49152-4096)) && \ + (!defined(CYGHWR_HAL_CORTEXM_FPU_SWITCH_NONE)) + + +//========================================================================== +// Base priority for all threads. + +#define BASE_PRI 5 + +//========================================================================== +// Runtime +// +// This is the number of ticks that the program will run for. 3000 +// ticks is equal to 30 seconds in the default configuration. For +// simulators we reduce the run time to 3 simulated seconds. + +#define RUN_TICKS 3000 +#define RUN_TICKS_SIM 300 + +//========================================================================== +// Thread parameters + +#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL +#define THREADS_N 2 +static cyg_uint8 stacks[THREADS_N][STACK_SIZE] CYGBLD_ATTRIB_ALIGN_MAX; +static cyg_handle_t thread[THREADS_N]; +static cyg_thread thread_struct[THREADS_N]; +static unsigned long iter_n[THREADS_N]; + +//========================================================================== +// Alarm parameters. + +static cyg_alarm alarm_struct; +static cyg_handle_t alarm; + +volatile static cyg_count32 alarm_ticks = 0; +static cyg_count32 run_ticks = RUN_TICKS; + +//========================================================================== + +static int errors = 0; + +//========================================================================== +// Random number generator. Ripped out of the C library. + +static int CYGBLD_ATTRIB_NO_INLINE rand( unsigned int *seed ) +{ +// This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom + +#define RAND_MAX 0x7fffffff +#define MM 2147483647 // a Mersenne prime +#define AA 48271 // this does well in the spectral test +#define QQ 44488 // (long)(MM/AA) +#define RR 3399 // MM % AA; it is important that RR\n",name,thread_i,j*count); +#endif + if(thread_i < 3) + iter_n[thread_i] = iter; +} + + +//========================================================================== +// Alarm handler +// +// This is called every tick. It lowers the priority of the currently +// running thread and raises the priority of the next. Thus we +// implement a form of timelslicing between the threads at one tick +// granularity. + +static void alarm_fn(cyg_handle_t alarm, cyg_addrword_t data) +{ + alarm_ticks++; + unsigned long iter_sum; + + if( alarm_ticks >= run_ticks ) + { + if( errors ) + CYG_TEST_FAIL("Errors detected"); + else + CYG_TEST_PASS("OK"); + + iter_sum = + iter_n[0] + iter_n[1]; + diag_printf("Iterations = %lu+%lu", + iter_n[0], iter_n[1]); + diag_printf("=%lu\n", iter_sum); + CYG_TEST_FINISH("FP Test done"); + } +} + + +//========================================================================== +// Floating point threads +// +#define FP1_COUNT 10 + +static float fpt1_values[FP1_COUNT]; + +void fptest1( CYG_ADDRWORD id ) +{ + while(1) + do_test1( fpt1_values, FP1_COUNT, 2000000000, id, "fptest1" ); +} + +//========================================================================== +#define FP2_COUNT 11 + +static float fpt2_values[FP2_COUNT]; + +void fptest2( CYG_ADDRWORD id ) +{ + while(1) + do_test1( fpt2_values, FP2_COUNT, 2000000000, id, "fptest2" ); +} + +//====================================================================================== +// Main + + +void fptest_main( void ) +{ + CYG_TEST_INIT(); + + if( cyg_test_is_simulator ) + { + run_ticks = RUN_TICKS_SIM; + } + CYG_TEST_INFO("Run fptest in cyg_start"); + CYG_TEST_INFO( "cyg_start run done"); + + cyg_thread_create( BASE_PRI, + fptest1, + 0, + "thread1", + &stacks[0][0], + STACK_SIZE, + &thread[0], + &thread_struct[0]); + cyg_thread_resume( thread[0] ); + + cyg_thread_create( BASE_PRI, + fptest2, + 1, + "thread2", + &stacks[1][0], + STACK_SIZE, + &thread[1], + &thread_struct[1]); + + cyg_thread_resume( thread[1] ); + + cyg_alarm_create( cyg_real_time_clock(), + alarm_fn, + 0, + &alarm, + &alarm_struct ); + + cyg_alarm_initialize( alarm, cyg_current_time()+1, 1 ); + + cyg_scheduler_start(); + +} + +//========================================================================== + +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + +externC void +cyg_start( void ) +{ +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif + fptest_main(); +} + +//========================================================================== + +#else // CYGFUN_KERNEL_API_C... + +externC void +cyg_start( void ) +{ + CYG_TEST_INIT(); + CYG_TEST_INFO("FP test 2 requires:\n" + "CYGFUN_KERNEL_API_C && \n" + "CYGSEM_KERNEL_SCHED_MLQUEUE && \n" + "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12) &&\n" + "(CYGMEM_REGION_ram_SIZE >= (49152-4096))\n" + "(!defined(CYGHWR_HAL_CORTEXM_FPU_SWITCH_NONE))\n" + ); + CYG_TEST_NA("FP test requirements"); +} + +#endif // CYGFUN_KERNEL_API_C, etc. + +//========================================================================== +// EOF fpinttestf2.c diff --git a/packages/kernel/current/tests/fptest.c b/packages/kernel/current/tests/fptest.c --- a/packages/kernel/current/tests/fptest.c +++ b/packages/kernel/current/tests/fptest.c @@ -68,7 +68,8 @@ #if defined(CYGFUN_KERNEL_API_C) && \ defined(CYGSEM_KERNEL_SCHED_MLQUEUE) && \ - (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) + (CYGNUM_KERNEL_SCHED_PRIORITIES > 12) && \ + (CYGMEM_REGION_ram_SIZE >= (49152-4096)) //========================================================================== // Base priority for all threads. @@ -358,7 +359,8 @@ cyg_start( void ) CYG_TEST_INFO("FP test requires:\n" "CYGFUN_KERNEL_API_C && \n" "CYGSEM_KERNEL_SCHED_MLQUEUE && \n" - "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12)\n"); + "(CYGNUM_KERNEL_SCHED_PRIORITIES > 12) &&\n" + "(CYGMEM_REGION_ram_SIZE >= (49152-4096))\n"); CYG_TEST_NA("FP test requirements"); } diff --git a/packages/kernel/current/tests/intr0.cxx b/packages/kernel/current/tests/intr0.cxx --- a/packages/kernel/current/tests/intr0.cxx +++ b/packages/kernel/current/tests/intr0.cxx @@ -197,8 +197,8 @@ void intr0_main( void ) new_vsr = NULL; Cyg_Interrupt::get_vsr( v, &new_vsr ); CHECK( old_vsr == new_vsr ); - - CHECK( NULL != vsr0 ); + + CHECK( NULL != new_vsr); cyg_vector v1; #ifdef CYGPKG_HAL_MIPS_TX39 diff --git a/packages/kernel/current/tests/kcache1.c b/packages/kernel/current/tests/kcache1.c --- a/packages/kernel/current/tests/kcache1.c +++ b/packages/kernel/current/tests/kcache1.c @@ -109,7 +109,7 @@ static void time0(register cyg_uint32 st register cyg_uint32 j,k; cyg_tick_count_t count0, count1; cyg_ucount32 t; - register char c; + register char c CYGBLD_ATTRIB_UNUSED; count0 = cyg_current_time(); @@ -147,7 +147,7 @@ static void time0II(register cyg_uint32 register cyg_uint32 j,k; cyg_tick_count_t count0, count1; cyg_ucount32 t; - register char c; + register char c CYGBLD_ATTRIB_UNUSED; count0 = cyg_current_time(); @@ -189,7 +189,7 @@ static void time0DI(register cyg_uint32 volatile cyg_tick_count_t count0; cyg_tick_count_t count1; cyg_ucount32 t; - register char c; + register char c CYGBLD_ATTRIB_UNUSED; register CYG_INTERRUPT_STATE oldints; count0 = cyg_current_time(); diff --git a/packages/kernel/current/tests/kcache2.c b/packages/kernel/current/tests/kcache2.c --- a/packages/kernel/current/tests/kcache2.c +++ b/packages/kernel/current/tests/kcache2.c @@ -57,6 +57,7 @@ #include #include +#include CYGHWR_MEMORY_LAYOUT_H // ------------------------------------------------------------------------- @@ -83,7 +84,11 @@ static cyg_handle_t thread[NTHREADS]; static cyg_thread thread_obj[NTHREADS]; static char stack[NTHREADS][STACKSIZE]; -#define MAXSIZE 1<<18 +#if (CYGMEM_REGION_ram_SIZE <= (128*1024)) +# define MAXSIZE (1<<16) +#else +# define MAXSIZE (1<<18) +#endif volatile char m[MAXSIZE]; diff --git a/packages/kernel/current/tests/kexcept1.c b/packages/kernel/current/tests/kexcept1.c --- a/packages/kernel/current/tests/kexcept1.c +++ b/packages/kernel/current/tests/kexcept1.c @@ -131,7 +131,7 @@ cause_fpe(int num) void cause_exception(void) { - int x; + int x CYGBLD_ATTRIB_UNUSED; unsigned int p=0; // First try for an address exception (unaligned access exception diff --git a/packages/kernel/current/tests/kintr0.c b/packages/kernel/current/tests/kintr0.c --- a/packages/kernel/current/tests/kintr0.c +++ b/packages/kernel/current/tests/kintr0.c @@ -142,10 +142,12 @@ static bool flash( void ) static cyg_VSR_t vsr0; -static void vsr0() +static void vsr0(void) { } +static void (*vsr0_p)(void) = vsr0; + void kintr0_main( void ) { cyg_vector_t v = (CYGNUM_HAL_VSR_MIN + 11) % CYGNUM_HAL_VSR_COUNT; @@ -221,7 +223,7 @@ void kintr0_main( void ) cyg_interrupt_get_vsr( v, &new_vsr ); CHECK( old_vsr == new_vsr ); - CHECK( NULL != vsr0 ); + CHECK( NULL != *vsr0_p ); cyg_interrupt_mask(v1); cyg_interrupt_unmask(v1); diff --git a/packages/kernel/current/tests/kmbox1.c b/packages/kernel/current/tests/kmbox1.c --- a/packages/kernel/current/tests/kmbox1.c +++ b/packages/kernel/current/tests/kmbox1.c @@ -151,8 +151,10 @@ static void entry0( cyg_addrword_t data static void entry1( cyg_addrword_t data ) { +#ifdef CYGMTH_MBOX_PUT_CAN_WAIT cyg_count8 i; i = (cyg_count8)cyg_mbox_get(m1); +#endif CYG_TEST_CHECK(1==q++, "bad synchronization"); cyg_mbox_PUT(m0, (void *)3); // wake t0 diff --git a/packages/kernel/current/tests/kmutex3.c b/packages/kernel/current/tests/kmutex3.c --- a/packages/kernel/current/tests/kmutex3.c +++ b/packages/kernel/current/tests/kmutex3.c @@ -79,6 +79,7 @@ cyg_hal_invoke_constructors(); #include #include #include // diag_printf +#include CYGHWR_MEMORY_LAYOUT_H // ------------------------------------------------------------------------ @@ -133,8 +134,11 @@ cyg_hal_invoke_constructors(); // // Translated into KAPI also. -#define NTHREADS 7 - +#if (CYGMEM_REGION_ram_SIZE <= 32768) +# define NTHREADS 5 +#else +# define NTHREADS 7 +#endif #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL static cyg_handle_t thread[NTHREADS] = { 0 }; diff --git a/packages/kernel/current/tests/kmutex4.c b/packages/kernel/current/tests/kmutex4.c --- a/packages/kernel/current/tests/kmutex4.c +++ b/packages/kernel/current/tests/kmutex4.c @@ -78,6 +78,7 @@ cyg_hal_invoke_constructors(); #include #include #include // diag_printf +#include CYGHWR_MEMORY_LAYOUT_H // ------------------------------------------------------------------------ @@ -116,7 +117,11 @@ static char * protnames[] = { // // Translated into KAPI also. -#define NTHREADS 7 +#if (CYGMEM_REGION_ram_SIZE <= 32768) +# define NTHREADS 5 +#else +# define NTHREADS 7 +#endif #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL diff --git a/packages/kernel/current/tests/mbox1.cxx b/packages/kernel/current/tests/mbox1.cxx --- a/packages/kernel/current/tests/mbox1.cxx +++ b/packages/kernel/current/tests/mbox1.cxx @@ -151,11 +151,15 @@ static void entry0( CYG_ADDRWORD data ) static void entry1( CYG_ADDRWORD data ) { +#ifdef CYGMTH_MBOX_PUT_CAN_WAIT cyg_count8 i; +#endif Cyg_Thread::self()->set_priority(5); +#ifdef CYGMTH_MBOX_PUT_CAN_WAIT i = (cyg_count8)m1.get(); +#endif CYG_TEST_CHECK(1==q++, "bad synchronization"); m0.PUT((void *)3); // wake t0 diff --git a/packages/kernel/current/tests/mutex3.cxx b/packages/kernel/current/tests/mutex3.cxx --- a/packages/kernel/current/tests/mutex3.cxx +++ b/packages/kernel/current/tests/mutex3.cxx @@ -59,6 +59,7 @@ #include #include // diag_printf +#include CYGHWR_MEMORY_LAYOUT_H #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG externC void @@ -128,7 +129,11 @@ cyg_hal_invoke_constructors(); // Stolen from testaux.hxx and copied in here because I want to be able to // reset the world also. -#define NTHREADS 7 +#if (CYGMEM_REGION_ram_SIZE <= 32768) +# define NTHREADS 5 +#else +# define NTHREADS 7 +#endif inline void *operator new(size_t size, void *ptr) { return ptr; }; diff --git a/packages/kernel/current/tests/thread_gdb.c b/packages/kernel/current/tests/thread_gdb.c --- a/packages/kernel/current/tests/thread_gdb.c +++ b/packages/kernel/current/tests/thread_gdb.c @@ -56,10 +56,17 @@ (CYGNUM_KERNEL_SCHED_PRIORITIES > 26) #include // for CYGNUM_HAL_STACK_SIZE_TYPICAL +#include CYGHWR_MEMORY_LAYOUT_H // ------------------------------------------------------------------------- -#define THREADS 10 +#if (CYGMEM_REGION_ram_SIZE <= 32768) +# define THREADS 5 +#elif (CYGMEM_REGION_ram_SIZE <= 49152) +# define THREADS 8 +#else +# define THREADS 10 +#endif #ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL diff --git a/packages/kernel/current/tests/timeslice.c b/packages/kernel/current/tests/timeslice.c --- a/packages/kernel/current/tests/timeslice.c +++ b/packages/kernel/current/tests/timeslice.c @@ -58,6 +58,7 @@ #include #include +#include CYGHWR_MEMORY_LAYOUT_H //========================================================================== @@ -72,7 +73,11 @@ #define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL +#if (CYGMEM_REGION_ram_SIZE <= 32768) +#define NTHREADS_MAX (CYGNUM_KERNEL_CPU_MAX*4) +#else #define NTHREADS_MAX (CYGNUM_KERNEL_CPU_MAX*6) +#endif static int ncpus = CYGNUM_KERNEL_CPU_MAX; diff --git a/packages/kernel/current/tests/timeslice2.c b/packages/kernel/current/tests/timeslice2.c --- a/packages/kernel/current/tests/timeslice2.c +++ b/packages/kernel/current/tests/timeslice2.c @@ -58,6 +58,7 @@ #include #include +#include CYGHWR_MEMORY_LAYOUT_H //========================================================================== @@ -72,7 +73,11 @@ #define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL +#if (CYGMEM_REGION_ram_SIZE <= 32768) +#define NTHREADS_MAX (CYGNUM_KERNEL_CPU_MAX*3) +#else #define NTHREADS_MAX (CYGNUM_KERNEL_CPU_MAX*6) +#endif static int ncpus = CYGNUM_KERNEL_CPU_MAX; diff --git a/packages/kernel/current/tests/tm_basic.cxx b/packages/kernel/current/tests/tm_basic.cxx --- a/packages/kernel/current/tests/tm_basic.cxx +++ b/packages/kernel/current/tests/tm_basic.cxx @@ -88,7 +88,8 @@ typedef struct fun_times { #ifdef CYGMEM_REGION_ram_SIZE #define CYG_THREAD_OVERHEAD (STACK_SIZE+sizeof(cyg_thread)+(sizeof(fun_times)*2)) -#define NTEST_THREADS ((CYGMEM_REGION_ram_SIZE/16)/CYG_THREAD_OVERHEAD) +#define NTEST_THREADS_AVAIL ((CYGMEM_REGION_ram_SIZE/16)/CYG_THREAD_OVERHEAD) +#define NTEST_THREADS (2>(NTEST_THREADS_AVAIL)?2:(NTEST_THREADS_AVAIL)) #define CYG_MUTEX_OVERHEAD (sizeof(cyg_mutex_t)+sizeof(fun_times)) #define NMUTEXES ((CYGMEM_REGION_ram_SIZE/16)/CYG_MUTEX_OVERHEAD) #define CYG_MBOX_OVERHEAD (sizeof(cyg_mbox)+sizeof(fun_times)) @@ -224,15 +225,26 @@ wait_for_tick(void) } } +#ifdef HAL_CLOCK_READ_NS +#define READ_CLOCK(__x) HAL_CLOCK_READ_NS(__x) +#define NSTICK (1) +#else +#define READ_CLOCK(__x) HAL_CLOCK_READ(__x) +#define NSTICK (1000) +#endif // Display a number of ticks as microseconds -// Note: for improved calculation significance, values are kept in ticks*1000 +// Note: for improved calculation significance, values are kept in ticks*NSTICK void show_ticks_in_us(cyg_uint32 ticks) { long long ns; ns = (ns_per_system_clock * (long long)ticks) / CYGNUM_KERNEL_COUNTERS_RTC_PERIOD; +#ifdef HAL_CLOCK_READ_NS + diag_printf("%4d.%03d", (int)(ns/1000), (int)(ns%1000)); +#else ns += 5; // for rounding to .01us diag_printf("%5d.%02d", (int)(ns/1000), (int)((ns%1000)/10)); +#endif } // @@ -324,7 +336,7 @@ show_times_detail(fun_times ft[], int ns } delta -= overhead; if (delta < 0) delta = 0; - delta *= 1000; + delta *= NSTICK; total += delta; if (delta < min) min = delta; if (delta > max) max = delta; @@ -341,7 +353,7 @@ show_times_detail(fun_times ft[], int ns } delta -= overhead; if (delta < 0) delta = 0; - delta *= 1000; + delta *= NSTICK; delta = delta - ave; if (delta < 0) delta = -delta; ave_dev += delta; @@ -358,7 +370,7 @@ show_times_detail(fun_times ft[], int ns } delta -= overhead; if (delta < 0) delta = 0; - delta *= 1000; + delta *= NSTICK; if ((delta <= (ave+ave_dev)) && (delta >= (ave-ave_dev))) con_ave++; if ((delta <= (min+ave_dev)) && (delta >= (min-ave_dev))) con_min++; } @@ -444,9 +456,9 @@ test2(cyg_uint32 indx) int i; for (i = 0; i < nthread_switches; i++) { if (indx == 0) { - HAL_CLOCK_READ(&test2_ft[i].start); + READ_CLOCK(&test2_ft[i].start); } else { - HAL_CLOCK_READ(&test2_ft[i].end); + READ_CLOCK(&test2_ft[i].end); } cyg_thread_yield(); } @@ -465,7 +477,7 @@ mutex_test(cyg_uint32 indx) for (i = 0; i < nmutexes; i++) { cyg_semaphore_wait(&synchro); wait_for_tick(); // Wait until the next clock tick to minimize aberations - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_unlock(&test_mutexes[0]); cyg_mutex_lock(&test_mutexes[0]); cyg_semaphore_post(&synchro); @@ -480,7 +492,7 @@ mbox_test(cyg_uint32 indx) void *item; do { item = cyg_mbox_get(test_mbox_handles[0]); - HAL_CLOCK_READ(&mbox_ft[(int)item].end); + READ_CLOCK(&mbox_ft[(int)item].end); cyg_semaphore_post(&synchro); } while ((int)item != (nmboxes-1)); cyg_thread_exit(); @@ -493,7 +505,7 @@ semaphore_test(cyg_uint32 indx) int i; for (i = 0; i < nsemaphores; i++) { cyg_semaphore_wait(&test_semaphores[0]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); cyg_semaphore_post(&synchro); } cyg_thread_exit(); @@ -506,14 +518,13 @@ void run_thread_tests(void) { int i; - cyg_priority_t prio; // Set my priority higher than any I plan to create cyg_thread_set_priority(cyg_thread_self(), 2); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_create(10, // Priority - just a number test0, // entry i, // index @@ -523,63 +534,63 @@ run_thread_tests(void) &threads[i], // Handle &test_threads[i] // Thread data structure ); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Create thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_yield(); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Yield thread [all suspended]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_suspend(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Suspend [suspended] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_resume(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Resume thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_set_priority(threads[i], 11); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Set priority"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); - prio = cyg_thread_get_priority(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].start); + cyg_thread_get_priority(threads[i]); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Get priority"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_kill(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Kill [suspended] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_yield(); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Yield [no other] thread"); @@ -601,42 +612,42 @@ run_thread_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_resume(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Resume [suspended low prio] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_resume(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Resume [runnable low prio] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_suspend(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Suspend [runnable] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_yield(); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Yield [only low prio] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_suspend(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Suspend [runnable->not runnable]"); for (i = 0; i < ntest_threads; i++) { @@ -645,17 +656,17 @@ run_thread_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_kill(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Kill [runnable] thread"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_delete(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Destroy [dead] thread"); @@ -675,9 +686,9 @@ run_thread_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_delete(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Destroy [runnable] thread"); @@ -702,9 +713,9 @@ run_thread_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ntest_threads; i++) { - HAL_CLOCK_READ(&thread_ft[i].start); + READ_CLOCK(&thread_ft[i].start); cyg_thread_resume(threads[i]); - HAL_CLOCK_READ(&thread_ft[i].end); + READ_CLOCK(&thread_ft[i].end); } show_times(thread_ft, ntest_threads, "Resume [high priority] thread"); cyg_semaphore_wait(&synchro); // Wait for all threads to finish @@ -754,41 +765,41 @@ run_mutex_tests(void) // Mutex primitives wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_init(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Init mutex"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_lock(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Lock [unlocked] mutex"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_unlock(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Unlock [locked] mutex"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_trylock(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Trylock [unlocked] mutex"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_trylock(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Trylock [locked] mutex"); @@ -799,9 +810,9 @@ run_mutex_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmutexes; i++) { - HAL_CLOCK_READ(&mutex_ft[i].start); + READ_CLOCK(&mutex_ft[i].start); cyg_mutex_destroy(&test_mutexes[i]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); } show_times(mutex_ft, nmutexes, "Destroy mutex"); run_mutex_circuit_test(); @@ -832,7 +843,7 @@ run_mutex_circuit_test(void) for (i = 0; i < nmutexes; i++) { cyg_semaphore_post(&synchro); cyg_mutex_lock(&test_mutexes[0]); - HAL_CLOCK_READ(&mutex_ft[i].end); + READ_CLOCK(&mutex_ft[i].end); cyg_mutex_unlock(&test_mutexes[0]); cyg_semaphore_wait(&synchro); } @@ -843,136 +854,135 @@ run_mutex_circuit_test(void) void run_mbox_tests(void) { - int i, cnt; - void *item; + int i; // Mailbox primitives wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_create(&test_mbox_handles[i], &test_mboxes[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Create mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - cnt = cyg_mbox_peek(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_peek(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Peek [empty] mbox"); #ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_put(test_mbox_handles[i], (void *)i); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Put [first] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - cnt = cyg_mbox_peek(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_peek(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Peek [1 msg] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_put(test_mbox_handles[i], (void *)i); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Put [second] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - cnt = cyg_mbox_peek(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_peek(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Peek [2 msgs] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_get(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_get(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Get [first] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_get(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_get(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Get [second] mbox"); #endif // ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_tryput(test_mbox_handles[i], (void *)i); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Tryput [first] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_peek_item(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_peek_item(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Peek item [non-empty] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_tryget(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_tryget(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Tryget [non-empty] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_peek_item(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_peek_item(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Peek item [empty] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); - item = cyg_mbox_tryget(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].start); + cyg_mbox_tryget(test_mbox_handles[i]); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Tryget [empty] mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_waiting_to_get(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Waiting to get mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_waiting_to_put(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Waiting to put mbox"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nmboxes; i++) { - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_delete(test_mbox_handles[i]); - HAL_CLOCK_READ(&mbox_ft[i].end); + READ_CLOCK(&mbox_ft[i].end); } show_times(mbox_ft, nmboxes, "Delete mbox"); @@ -1002,7 +1012,7 @@ run_mbox_circuit_test(void) cyg_thread_resume(mbox_test_thread_handle); for (i = 0; i < nmboxes; i++) { wait_for_tick(); // Wait until the next clock tick to minimize aberations - HAL_CLOCK_READ(&mbox_ft[i].start); + READ_CLOCK(&mbox_ft[i].start); cyg_mbox_put(test_mbox_handles[0], (void *)i); cyg_semaphore_wait(&synchro); } @@ -1019,58 +1029,58 @@ run_semaphore_tests(void) // Semaphore primitives wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_init(&test_semaphores[i], 0); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Init semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_post(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Post [0] semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_wait(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Wait [1] semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_trywait(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Trywait [0] semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { cyg_semaphore_post(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_trywait(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Trywait [1] semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_peek(&test_semaphores[i], &sem_val); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Peek semaphore"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nsemaphores; i++) { - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_destroy(&test_semaphores[i]); - HAL_CLOCK_READ(&semaphore_ft[i].end); + READ_CLOCK(&semaphore_ft[i].end); } show_times(semaphore_ft, nsemaphores, "Destroy semaphore"); @@ -1099,7 +1109,7 @@ run_semaphore_circuit_test(void) cyg_thread_resume(semaphore_test_thread_handle); for (i = 0; i < nsemaphores; i++) { wait_for_tick(); // Wait until the next clock tick to minimize aberations - HAL_CLOCK_READ(&semaphore_ft[i].start); + READ_CLOCK(&semaphore_ft[i].start); cyg_semaphore_post(&test_semaphores[0]); cyg_semaphore_wait(&synchro); } @@ -1115,41 +1125,41 @@ run_counter_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_create(&counters[i], &test_counters[i]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Create counter"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); val = cyg_counter_current_value(counters[i]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Get counter value"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_set_value(counters[i], val); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Set counter value"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_tick(counters[i]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_delete(counters[i]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Delete counter"); end_of_test_group(); @@ -1159,21 +1169,20 @@ void run_flag_tests(void) { int i; - cyg_flag_value_t val; wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_init(&test_flags[i]); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Init flag"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_destroy(&test_flags[i]); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Destroy flag"); @@ -1184,62 +1193,62 @@ run_flag_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_maskbits(&test_flags[i], 0); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Mask bits in flag"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Set bits in flag [no waiters]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_AND); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [AND]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_OR); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [OR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_AND|CYG_FLAG_WAITMODE_CLR); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [AND/CLR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].start); + READ_CLOCK(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_OR|CYG_FLAG_WAITMODE_CLR); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [OR/CLR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); - HAL_CLOCK_READ(&flag_ft[i].start); - val = cyg_flag_peek(&test_flags[i]); - HAL_CLOCK_READ(&flag_ft[i].end); + READ_CLOCK(&flag_ft[i].start); + cyg_flag_peek(&test_flags[i]); + READ_CLOCK(&flag_ft[i].end); } show_times(flag_ft, nflags, "Peek on flag"); @@ -1264,7 +1273,7 @@ alarm_cb2(cyg_handle_t alarm, cyg_addrwo { if (alarm_cnt == nscheds) return; sched_ft[alarm_cnt].start = 0; - HAL_CLOCK_READ(&sched_ft[alarm_cnt++].end); + READ_CLOCK(&sched_ft[alarm_cnt++].end); if (alarm_cnt == nscheds) { cyg_semaphore_post(&synchro); } @@ -1296,7 +1305,7 @@ alarm_test2(cyg_uint32 id) { cyg_handle_t me = cyg_thread_self(); while (true) { - HAL_CLOCK_READ(&sched_ft[alarm_cnt++].end); + READ_CLOCK(&sched_ft[alarm_cnt++].end); cyg_thread_suspend(me); } } @@ -1313,44 +1322,44 @@ run_alarm_tests(void) cyg_counter_create(&counters[i], &test_counters[i]); } for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_alarm_create(counters[0], alarm_cb, 0, &alarms[i], &test_alarms[i]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Create alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_alarm_initialize(alarms[i], init_val, step_val); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Initialize alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_alarm_disable(alarms[i]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Disable alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_alarm_enable(alarms[i]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Enable alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_alarm_delete(alarms[i]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Delete alarm"); @@ -1361,9 +1370,9 @@ run_alarm_tests(void) cyg_alarm_initialize(alarms[0], init_val, step_val); cyg_alarm_enable(alarms[0]); for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_tick(counters[0]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter [1 alarm]"); @@ -1376,9 +1385,9 @@ run_alarm_tests(void) cyg_alarm_enable(alarms[i]); } for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_tick(counters[0]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter [many alarms]"); @@ -1389,9 +1398,9 @@ run_alarm_tests(void) cyg_alarm_initialize(alarms[0], init_val, step_val); cyg_alarm_enable(alarms[0]); for (i = 0; i < ncounters; i++) { - HAL_CLOCK_READ(&counter_ft[i].start); + READ_CLOCK(&counter_ft[i].start); cyg_counter_tick(counters[0]); - HAL_CLOCK_READ(&counter_ft[i].end); + READ_CLOCK(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick & fire counter [1 alarm]"); @@ -1404,9 +1413,9 @@ run_alarm_tests(void) cyg_alarm_enable(alarms[i]); } for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_counter_tick(counters[0]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } for (i = 0; i < nalarms; i++) { cyg_alarm_delete(alarms[i]); @@ -1422,9 +1431,9 @@ run_alarm_tests(void) cyg_alarm_enable(alarms[i]); } for (i = 0; i < nalarms; i++) { - HAL_CLOCK_READ(&alarm_ft[i].start); + READ_CLOCK(&alarm_ft[i].start); cyg_counter_tick(counters[0]); - HAL_CLOCK_READ(&alarm_ft[i].end); + READ_CLOCK(&alarm_ft[i].end); } for (i = 0; i < nalarms; i++) { cyg_alarm_delete(alarms[i]); @@ -1539,9 +1548,9 @@ run_sched_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nscheds; i++) { - HAL_CLOCK_READ(&sched_ft[i].start); + READ_CLOCK(&sched_ft[i].start); cyg_scheduler_lock(); - HAL_CLOCK_READ(&sched_ft[i].end); + READ_CLOCK(&sched_ft[i].end); cyg_scheduler_unlock(); } show_times(sched_ft, nscheds, "Scheduler lock"); @@ -1549,9 +1558,9 @@ run_sched_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nscheds; i++) { cyg_scheduler_lock(); - HAL_CLOCK_READ(&sched_ft[i].start); + READ_CLOCK(&sched_ft[i].start); cyg_scheduler_unlock(); - HAL_CLOCK_READ(&sched_ft[i].end); + READ_CLOCK(&sched_ft[i].end); } show_times(sched_ft, nscheds, "Scheduler unlock [0 threads]"); @@ -1571,9 +1580,9 @@ run_sched_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nscheds; i++) { cyg_scheduler_lock(); - HAL_CLOCK_READ(&sched_ft[i].start); + READ_CLOCK(&sched_ft[i].start); cyg_scheduler_unlock(); - HAL_CLOCK_READ(&sched_ft[i].end); + READ_CLOCK(&sched_ft[i].end); } show_times(sched_ft, nscheds, "Scheduler unlock [1 suspended]"); for (i = 0; i < 1; i++) { @@ -1596,9 +1605,9 @@ run_sched_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nscheds; i++) { cyg_scheduler_lock(); - HAL_CLOCK_READ(&sched_ft[i].start); + READ_CLOCK(&sched_ft[i].start); cyg_scheduler_unlock(); - HAL_CLOCK_READ(&sched_ft[i].end); + READ_CLOCK(&sched_ft[i].end); } show_times(sched_ft, nscheds, "Scheduler unlock [many suspended]"); for (i = 0; i < ntest_threads; i++) { @@ -1622,9 +1631,9 @@ run_sched_tests(void) wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nscheds; i++) { cyg_scheduler_lock(); - HAL_CLOCK_READ(&sched_ft[i].start); + READ_CLOCK(&sched_ft[i].start); cyg_scheduler_unlock(); - HAL_CLOCK_READ(&sched_ft[i].end); + READ_CLOCK(&sched_ft[i].end); } show_times(sched_ft, nscheds, "Scheduler unlock [many low prio]"); for (i = 0; i < ntest_threads; i++) { @@ -1668,7 +1677,7 @@ static void wait_for_tick(); for (i = 0; i < nsamples; i++) { - HAL_CLOCK_READ(&tv[i]); + READ_CLOCK(&tv[i]); } tv0 = 0; for (i = 1; i < nsamples; i++) { @@ -1687,17 +1696,17 @@ static void tick1 = cyg_current_time(); if (tick0 != tick1) break; } - HAL_CLOCK_READ(&tv[i]); + READ_CLOCK(&tv[i]); } tv1 = 0; for (i = 0; i < nsamples; i++) { - tv1 += tv[i] * 1000; + tv1 += tv[i] * NSTICK; } tv1 = tv1 / nsamples; tv1 -= overhead; // Adjust out the cost of getting the timer value diag_printf("Clock interrupt took"); show_ticks_in_us(tv1); - diag_printf(" microseconds (%d raw clock ticks)\n", tv1/1000); + diag_printf(" microseconds (%d raw clock ticks)\n", tv1/NSTICK); enable_clock_latency_measurement(); ticks = cyg_current_time(); @@ -1728,10 +1737,10 @@ static void #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY) && defined(HAL_CLOCK_LATENCY) // Display latency figures in same format as all other numbers disable_clock_latency_measurement(); - clock_ave = (total_clock_latency*1000) / total_clock_interrupts; + clock_ave = (total_clock_latency*NSTICK) / total_clock_interrupts; show_ticks_in_us(clock_ave); - show_ticks_in_us(min_clock_latency*1000); - show_ticks_in_us(max_clock_latency*1000); + show_ticks_in_us(min_clock_latency*NSTICK); + show_ticks_in_us(max_clock_latency*NSTICK); show_ticks_in_us(0); diag_printf(" Clock/interrupt latency\n\n"); enable_clock_latency_measurement(); @@ -1739,10 +1748,10 @@ static void #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY) && defined(HAL_CLOCK_LATENCY) disable_clock_latency_measurement(); - clock_ave = (total_clock_dsr_latency*1000) / total_clock_dsr_calls; + clock_ave = (total_clock_dsr_latency*NSTICK) / total_clock_dsr_calls; show_ticks_in_us(clock_ave); - show_ticks_in_us(min_clock_dsr_latency*1000); - show_ticks_in_us(max_clock_dsr_latency*1000); + show_ticks_in_us(min_clock_dsr_latency*NSTICK); + show_ticks_in_us(max_clock_dsr_latency*NSTICK); show_ticks_in_us(0); diag_printf(" Clock DSR latency\n\n"); enable_clock_latency_measurement(); diff --git a/packages/language/c/libc/i18n/current/ChangeLog b/packages/language/c/libc/i18n/current/ChangeLog --- a/packages/language/c/libc/i18n/current/ChangeLog +++ b/packages/language/c/libc/i18n/current/ChangeLog @@ -1,3 +1,9 @@ +2012-03-19 Sergei Gavrikov + Jonathan Larmour + + * tests/i18nmb.c (main): Fix compiler warnings about variables are + set but not used. Enter CYGBLD_ATTRIB_UNUSED. + 2009-01-26 Jonathan Larmour * tests/ctype.c: Allow to run if CYGPKG_LIBC_STARTUP isn't there. diff --git a/packages/language/c/libc/i18n/current/tests/i18nmb.c b/packages/language/c/libc/i18n/current/tests/i18nmb.c --- a/packages/language/c/libc/i18n/current/tests/i18nmb.c +++ b/packages/language/c/libc/i18n/current/tests/i18nmb.c @@ -221,12 +221,10 @@ main( int argc, char *argv[] ) wchar_t wcbuff[100]; char buff[100]; - char *ptr, *locale; - int result, i, j, k; + char *ptr, *locale CYGBLD_ATTRIB_UNUSED; + int result, i, j, k CYGBLD_ATTRIB_UNUSED; wchar_t *wcptr; - k=0; locale=NULL; // silence warnings - CYG_TEST_INIT(); CYG_TEST_INFO( "Starting tests from testcase " __FILE__ " for C library " diff --git a/packages/language/c/libc/startup/current/ChangeLog b/packages/language/c/libc/startup/current/ChangeLog --- a/packages/language/c/libc/startup/current/ChangeLog +++ b/packages/language/c/libc/startup/current/ChangeLog @@ -1,3 +1,9 @@ +2012-03-06 Grant Edwards + + * src/abort.cxx (abort): + * src/exit.cxx (exit): Fix compiler warnings about unused 'rc' + variables. [ Bugzilla 1001506 ] + 2007-10-05 Jonathan Larmour * src/main.cxx (main): Suspend main thread, rather than exit. diff --git a/packages/language/c/libc/startup/current/src/abort.cxx b/packages/language/c/libc/startup/current/src/abort.cxx --- a/packages/language/c/libc/startup/current/src/abort.cxx +++ b/packages/language/c/libc/startup/current/src/abort.cxx @@ -75,7 +75,7 @@ abort( void ) CYG_REPORT_FUNCNAME( "abort" ); #if CYGINT_ISO_SIGNAL_IMPL > 0 - int rc; + int rc CYGBLD_ATTRIB_UNUSED; rc = raise(SIGABRT); diff --git a/packages/language/c/libc/startup/current/src/exit.cxx b/packages/language/c/libc/startup/current/src/exit.cxx --- a/packages/language/c/libc/startup/current/src/exit.cxx +++ b/packages/language/c/libc/startup/current/src/exit.cxx @@ -87,7 +87,7 @@ exit( int status ) #ifdef CYGSEM_LIBC_EXIT_CALLS_FFLUSH - int rc; + int rc CYGBLD_ATTRIB_UNUSED; CYG_TRACE0( true, "Calling fflush( NULL )" ); rc = fflush( NULL ); diff --git a/packages/language/c/libc/stdio/current/ChangeLog b/packages/language/c/libc/stdio/current/ChangeLog --- a/packages/language/c/libc/stdio/current/ChangeLog +++ b/packages/language/c/libc/stdio/current/ChangeLog @@ -1,6 +1,18 @@ +2014-07-03 John Dallaway + + * src/common/sprintf.cxx (__sprintf_chk): Implement alias for use + with libsupc++ in fortified linux distributions. [ Bugzilla 1001139 ] + +2012-02-19 Sergei Gavrikov + + * src/common/vsnprintf.c: If string truncated (C99 case), apply the + null termination in correct place. + * tests/sprintf2.c: Fix checks for return values if C99 implementation + snprintf() used. + 2009-08-20 Uwe Kindler - * cdl/stdio.cdl Added option CYGIMP_LIBC_STDIO_C99_SNPRINTF + * cdl/stdio.cdl: Added option CYGIMP_LIBC_STDIO_C99_SNPRINTF for activation of C99 compliant snprintf() return value. * src/output/vfnprintf.cxx: Added optional C99 compliant return value calculation. @@ -573,7 +585,7 @@ 2000-05-02 Jonathan Larmour = 0) && ((size_t)ret < size) ) s[ret] = '\0'; +#ifdef CYGIMP_LIBC_STDIO_C99_SNPRINTF + /* C99 case. If no error, and string truncated, apply null termination + * in correct place + */ + if ( (ret >= 0) && ((size_t)ret >= size) && (size > 0) ) + s[size-1] = '\0'; +#endif return ret; } // vsnprintf() diff --git a/packages/language/c/libc/stdio/current/tests/sprintf2.c b/packages/language/c/libc/stdio/current/tests/sprintf2.c --- a/packages/language/c/libc/stdio/current/tests/sprintf2.c +++ b/packages/language/c/libc/stdio/current/tests/sprintf2.c @@ -136,14 +136,22 @@ test( CYG_ADDRWORD data ) ret = snprintf(y, 19, "print up to here >< and not this bit" ); my_strcpy(z, "print up to here >"); CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "simple snprintf test #1"); +#ifdef CYGIMP_LIBC_STDIO_C99_SNPRINTF + CYG_TEST_PASS_FAIL(ret > my_strlen(z), +#else CYG_TEST_PASS_FAIL(ret == my_strlen(z), +#endif "simple snprintf test #1 return code" ); // Check 4 ret = snprintf(y, 31, "print a bit of this number: %05d nyer", 1234); my_strcpy(z, "print a bit of this number: 01"); CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "simple snprintf test #2"); +#ifdef CYGIMP_LIBC_STDIO_C99_SNPRINTF + CYG_TEST_PASS_FAIL(ret > my_strlen(z), +#else CYG_TEST_PASS_FAIL(ret == my_strlen(z), +#endif "simple snprintf test #2 return code" ); #ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT @@ -168,7 +176,11 @@ test( CYG_ADDRWORD data ) CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "snprintf double test #1"); +#ifdef CYGIMP_LIBC_STDIO_C99_SNPRINTF + CYG_TEST_PASS_FAIL(ret > my_strlen(z), +#else CYG_TEST_PASS_FAIL(ret == my_strlen(z), +#endif "snprintf double test #1 return code"); #endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT diff --git a/packages/language/c/libc/string/current/ChangeLog b/packages/language/c/libc/string/current/ChangeLog --- a/packages/language/c/libc/string/current/ChangeLog +++ b/packages/language/c/libc/string/current/ChangeLog @@ -1,3 +1,8 @@ +2013-06-13 Ilija Kocho + + * tests/memchr.c: Fix compiler warnings for discrediting const pointer. + [ Bugzilla 1001865 ] + 2010-05-10 Ross Younger * include/string.h: Declare strnlen. diff --git a/packages/language/c/libc/string/current/tests/memchr.c b/packages/language/c/libc/string/current/tests/memchr.c --- a/packages/language/c/libc/string/current/tests/memchr.c +++ b/packages/language/c/libc/string/current/tests/memchr.c @@ -75,7 +75,8 @@ void cyg_user_start(void) #endif { char x[] = "Your feeble skills are no match for the power of " - "the dark side!"; + "the dark side!"; + char x0[] = ""; void *ret; CYG_TEST_INIT(); @@ -104,7 +105,7 @@ void cyg_user_start(void) CYG_TEST_PASS_FAIL( ret == NULL, "Boundary test 2" ); // Check 6 (boundary condition) - ret = memchr( (void *)"", (int)'\0', 0 ); + ret = memchr(x0, (int)'\0', 0 ); CYG_TEST_PASS_FAIL( ret == NULL, "Boundary test 3" ); // CYG_TEST_NA("Testing is not applicable to this configuration"); diff --git a/packages/language/c/libm/current/ChangeLog b/packages/language/c/libm/current/ChangeLog --- a/packages/language/c/libm/current/ChangeLog +++ b/packages/language/c/libm/current/ChangeLog @@ -1,3 +1,129 @@ +2013-08-25 Ilija Kocho + + * src/complex/cabs.c, src/complex/casinf.c, src/complex/ccosh.c, src/complex/cimagf.c, + * src/complex/cprojf.c, src/complex/ctan.c, src/complex/cabsf.c, src/complex/casinh.c, + * src/complex/ccoshf.c, src/complex/clog.c, src/complex/creal.c, src/complex/ctanf.c, + * src/complex/cacos.c, src/complex/casinhf.c, src/complex/cephes_subr.c, + * src/complex/clogf.c, src/complex/crealf.c, src/complex/ctanh.c, src/complex/cacosf.c, + * src/complex/catan.c, src/complex/cephes_subrf.c, src/complex/src/complex.tex, + * src/complex/csin.c, src/complex/ctanhf.c, src/complex/cacosh.c, src/complex/catanf.c, + * src/complex/cephes_subrf.h src/complex/conj.c, src/complex/csinf.c, + * src/complex/cacoshf.c, src/complex/catanh.c, src/complex/cephes_subr.h + * src/complex/conjf.c, src/complex/csinh.c, src/complex/carg.c, src/complex/catanhf.c, + * src/complex/cexp.c, src/complex/cpow.c, src/complex/csinhf.c, src/complex/cargf.c, + * src/complex/ccos.c, src/complex/cexpf.c, src/complex/cpowf.c, src/complex/csqrt.c, + * src/complex/casin.c, src/complex/ccosf.c, src/complex/cimag.c, src/complex/cproj.c, + * src/complex/csqrtf.c, + * include/src/complex.h: + + Add: Complex number header and library (single and double precision floating point), + port from Newlib. [ Bugzilla 1001539 ] + +2013-08-25 Visar Zejnullahu + Ilija Kocho + + * cdl/compat.cdl, cdl/libm.cdl, include/complex.h, include/math.h, + * src/float/ieee754-api/wf_acos.c, src/float/ieee754-api/wf_acosh.c, + * src/float/ieee754-api/wf_asin.c, src/float/ieee754-api/wf_atan2.c, + * src/float/ieee754-api/wf_atanh.c, src/float/ieee754-api/wf_cosh.c, + * src/float/ieee754-api/wf_exp.c, src/float/ieee754-api/wf_fmod.c, + * src/float/ieee754-api/wf_gamma.c, src/float/ieee754-api/wf_gamma_r.c, + * src/float/ieee754-api/wf_hypot.c, src/float/ieee754-api/wf_j0.c, + * src/float/ieee754-api/wf_j1.c, src/float/ieee754-api/wf_jn.c, + * src/float/ieee754-api/wf_lgamma.c, src/float/ieee754-api/wf_lgamma_r.c, + * src/float/ieee754-api/wf_log10.c, src/float/ieee754-api/wf_log.c, + * src/float/ieee754-api/wf_pow.c, src/float/ieee754-api/wf_remainder.c, + * src/float/ieee754-api/wf_scalb.c, src/float/ieee754-api/wf_sinh.c, + * src/float/ieee754-api/wf_sqrt.c, + * src/float/ieee754-core/ef_acos.c, src/float/ieee754-core/ef_acosh.c, + * src/float/ieee754-core/ef_asin.c, src/float/ieee754-core/ef_atan2.c, + * src/float/ieee754-core/ef_atanh.c, src/float/ieee754-core/ef_cosh.c, + * src/float/ieee754-core/ef_exp.c, src/float/ieee754-core/ef_fmod.c, + * src/float/ieee754-core/ef_gamma.c, src/float/ieee754-core/ef_gamma_r.c, + * src/float/ieee754-core/ef_hypot.c, src/float/ieee754-core/ef_j0.c, + * src/float/ieee754-core/ef_j1.c, src/float/ieee754-core/ef_jn.c, + * src/float/ieee754-core/ef_lgamma.c, src/float/ieee754-core/ef_lgamma_r.c, + * src/float/ieee754-core/ef_log10.c, src/float/ieee754-core/ef_log.c, + * src/float/ieee754-core/ef_pow.c, src/float/ieee754-core/ef_remainder.c, + * src/float/ieee754-core/ef_rem_pio2.c, src/float/ieee754-core/ef_scalb.c, + * src/float/ieee754-core/ef_sinh.c, src/float/ieee754-core/ef_sqrt.c, + * src/float/internal/kf_cos.c, src/float/internal/kf_rem_pio2.c, + * src/float/internal/kf_sin.c, src/float/internal/kf_tan.c, + * src/float/portable-api/sf_asinh.c, src/float/portable-api/sf_atan.c, + * src/float/portable-api/sf_cbrt.c, src/float/portable-api/sf_ceil.c, + * src/float/portable-api/sf_copysign.c, src/float/portable-api/sf_cos.c, + * src/float/portable-api/sf_erf.c, src/float/portable-api/sf_expm1.c, + * src/float/portable-api/sf_fabs.c, src/float/portable-api/sf_finite.c, + * src/float/portable-api/sf_floor.c, src/float/portable-api/sf_frexp.c, + * src/float/portable-api/sf_ilogb.c, src/float/portable-api/sf_isnan.c, + * src/float/portable-api/sf_ldexp.c, src/float/portable-api/sf_log1p.c, + * src/float/portable-api/sf_logb.c, src/float/portable-api/sf_modf.c, + * src/float/portable-api/sf_nextafter.c, src/float/portable-api/sf_rint.c, + * src/float/portable-api/sf_scalbn.c, src/float/portable-api/sf_significand.c, + * src/float/portable-api/sf_sin.c, src/float/portable-api/sf_tan.c, + * src/float/portable-api/sf_tanh.c, + * src/mathincl/fdlibm.h, + * tests/vector_support.h, + * tests/vectors/acosf.c, tests/vectors/atan2.h, + * tests/vectors/copysignf.h, tests/vectors/expf.h, + * tests/vectors/fmodf.c, tests/vectors/ilogbf.h, + * tests/vectors/log10f.c, tests/vectors/modff.h, tests/vectors/scalbf.h, + * tests/vectors/sqrtf.h, tests/vectors/acosf.h, tests/vectors/atanf.c, + * tests/vectors/cosf.c, tests/vectors/exp.h, tests/vectors/fmodf.h, + * tests/vectors/isnanf.c, tests/vectors/log10f.h, tests/vectors/modf.h, + * tests/vectors/scalbnf.c, tests/vectors/sqrt.h, tests/vectors/acos.h, + * tests/vectors/atanf.h, tests/vectors/cosf.h, tests/vectors/expm1f.c, + * tests/vectors/fmod.h, tests/vectors/isnanf.h, tests/vectors/log10.h, + * tests/vectors/nextafterf.c, tests/vectors/scalbnf.h, tests/vectors/tanf.c, + * tests/vectors/acoshf.c, tests/vectors/atan.h, tests/vectors/cos.h, + * tests/vectors/expm1f.h, tests/vectors/frexpf.c, tests/vectors/j0f.c, + * tests/vectors/log1pf.c, tests/vectors/nextafterf.h, + * tests/vectors/significandf.c, tests/vectors/tanf.h, + * tests/vectors/acoshf.h, tests/vectors/atanhf.c, tests/vectors/coshf.c, + * tests/vectors/fabsf.c, tests/vectors/frexpf.h, tests/vectors/j0f.h, + * tests/vectors/log1pf.h, tests/vectors/powf.c, tests/vectors/significandf.h, + * tests/vectors/tan.h, tests/vectors/asinf.c, tests/vectors/atanhf.h, + * tests/vectors/coshf.h, tests/vectors/fabsf.h, + * tests/vectors/frexpf_visar.h, tests/vectors/j1f.c, + * tests/vectors/logbf.c, tests/vectors/powf.h, + * tests/vectors/sinf.c, tests/vectors/tanhf.c, + * tests/vectors/asinf.h, tests/vectors/cbrtf.c, tests/vectors/cosh.h, + * tests/vectors/fabs.h, tests/vectors/frexp.h, tests/vectors/j1f.h, + * tests/vectors/logbf.h, tests/vectors/pow.h, tests/vectors/sinf.h, + * tests/vectors/tanhf.h, tests/vectors/asin.h, tests/vectors/cbrtf.h, + * tests/vectors/erfcf.c, tests/vectors/finitef.c, + * tests/vectors/gammaf.c, tests/vectors/jnf.c, tests/vectors/logf.c, + * tests/vectors/remainderf.c, tests/vectors/sin.h, + * tests/vectors/tanh.h, tests/vectors/asinhf.c, tests/vectors/ceilf.c, + * tests/vectors/erfcf.h, tests/vectors/finitef.h, + * tests/vectors/gammaf.h, tests/vectors/jnf.h, + * tests/vectors/logf.h, tests/vectors/remainderf.h, + * tests/vectors/sinhf.c, tests/vectors/vector_support_float.h, + * tests/vectors/asinhf.h, tests/vectors/ceilf.h, tests/vectors/erff.c, + * tests/vectors/floorf.c, tests/vectors/hypotf.c, tests/vectors/ldexpf.c, + * tests/vectors/log.h, tests/vectors/rintf.c, tests/vectors/sinhf.h, + * tests/vectors/vector_support.h, tests/vectors/atan2f.c, + * tests/vectors/ceil.h, tests/vectors/erff.h, tests/vectors/floorf.h, + * tests/vectors/hypotf.h, tests/vectors/ldexpf.h, + * tests/vectors/modf.c, tests/vectors/rintf.h, tests/vectors/sinh.h, + * tests/vectors/atan2f.h, tests/vectors/copysignf.c, tests/vectors/expf.c, + * tests/vectors/floor.h, tests/vectors/ilogbf.c, tests/vectors/ldexp.h, + * tests/vectors/modff.c, tests/vectors/scalbf.c, tests/vectors/sqrtf.c: + + Add: Single precision floating point library, port from Newlib. + [ Bugzilla 1001539 ] + +2010-11-11 Sergei Gavrikov + + * cdl/libm.cdl (CYGPKG_LIBM_CFLAGS_ADD): Add a set of parentheses + around 'if-then-else' expression, simplified evaluated expression. + +2010-05-15 Jonathan Larmour + + * cdl/libm.cdl (CYGPKG_LIBM_CFLAGS_ADD): Compile with + -fno-strict-aliasing to avoid miscompilation. Workaround for a more + fundamental problem with CYG_LIBM_HI/LO. + 2008-11-20 Jonathan Larmour * cdl/libm.cdl: Rename X_TLOSS CDL option to match normal convention. @@ -813,7 +939,7 @@ Fri Jun 5 07:07:03 1998 Jonathan Larmo // ####GPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007, 2008, 2010, 2013 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/packages/language/c/libm/current/cdl/compat.cdl b/packages/language/c/libm/current/cdl/compat.cdl --- a/packages/language/c/libm/current/cdl/compat.cdl +++ b/packages/language/c/libm/current/cdl/compat.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2013 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -41,7 +41,7 @@ # # Author(s): jskov # Original data: jlarmour -# Contributors: +# Contributors: ilijak # Date: 1999-07-07 # #####DESCRIPTIONEND#### @@ -52,7 +52,7 @@ cdl_interface CYGINT_LIBM_COMPAT { requires 1 == CYGINT_LIBM_COMPAT } -cdl_option CYGSEM_LIBM_COMPAT_IEEE_ONLY { +cdl_component CYGSEM_LIBM_COMPAT_IEEE_ONLY { display "IEEE-only" default_value 0 implements CYGINT_LIBM_COMPAT @@ -66,6 +66,19 @@ cdl_option CYGSEM_LIBM_COMPAT_IEEE_ONLY modes. If not defined, the math library can be set at run-time to any of the supported compatibility modes." + + cdl_option CYGSEM_LIBM_IEEE_API_INLINE { + display "Inline IEEE754 API wrappers" + default_value 0 + + description " + IEEE754 API functions are just wrappers for + core functions. This introduces indirection which can can be + avoided by inlining. This will also prevent GCC from rendering + these functions as builtin. The HAL can override for a set of functions + by providing a list of builtin functions." + } + } cdl_component CYGNUM_LIBM_COMPATIBILITY { @@ -83,7 +96,7 @@ cdl_component CYGNUM_LIBM_COMPATIBILITY you choose which mode should be the default." cdl_option CYGNUM_LIBM_COMPAT_DEFAULT { - display "Numeric representation" + display "Numeric representation" flavor data calculated { \ CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" :\ @@ -97,6 +110,16 @@ cdl_component CYGNUM_LIBM_COMPATIBILITY mode for numeric representation in terms of the values used to set that mode at run-time." } + + cdl_option CYGOPT_LIBM_COMPAT_POSIX_IEEE { + display "POSIX return NaN for out-of-domain argument." + active_if { CYGNUM_LIBM_COMPATIBILITY == "POSIX" } + default_value 0 + description "Later POSIX specification states that functions + may return either NaN (like IEEE), or implementation defined + value when argument is out of domain. For backward compatibility + default value is set to 0." + } } cdl_option CYGFUN_LIBM_SVID3_scalb { diff --git a/packages/language/c/libm/current/cdl/libm.cdl b/packages/language/c/libm/current/cdl/libm.cdl --- a/packages/language/c/libm/current/cdl/libm.cdl +++ b/packages/language/c/libm/current/cdl/libm.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010, 2012, 2013 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -41,7 +41,7 @@ # # Author(s): bartv # Original data: jlarmour -# Contributors: +# Contributors: visar, ilijak # Date: 1999-06-13 # #####DESCRIPTIONEND#### @@ -56,38 +56,85 @@ cdl_package CYGPKG_LIBM { containing many useful functions for mathematical calculations." - compile misc/matherr.c misc/standard.c misc/compatmode.cxx \ - misc/infconst.c \ - \ - double/ieee754-core/e_acos.c double/ieee754-core/e_asin.c \ - double/ieee754-core/e_atan2.c double/ieee754-core/e_cosh.c \ - double/ieee754-core/e_exp.c double/ieee754-core/e_fmod.c \ - double/ieee754-core/e_log.c double/ieee754-core/e_log10.c \ - double/ieee754-core/e_pow.c \ - double/ieee754-core/e_rem_pio2.c \ - double/ieee754-core/e_scalb.c double/ieee754-core/e_sinh.c \ - double/ieee754-core/e_sqrt.c \ - \ - double/ieee754-api/w_acos.c double/ieee754-api/w_asin.c \ - double/ieee754-api/w_atan2.c double/ieee754-api/w_cosh.c \ - double/ieee754-api/w_exp.c double/ieee754-api/w_fmod.c \ - double/ieee754-api/w_log.c double/ieee754-api/w_log10.c \ - double/ieee754-api/w_pow.c double/ieee754-api/w_scalb.c \ - double/ieee754-api/w_sinh.c double/ieee754-api/w_sqrt.c \ - \ - double/internal/k_cos.c double/internal/k_rem_pio2.c \ - double/internal/k_sin.c double/internal/k_tan.c \ - \ - double/portable-api/s_atan.c double/portable-api/s_ceil.c \ - double/portable-api/s_copysign.c \ - double/portable-api/s_cos.c double/portable-api/s_expm1.c \ - double/portable-api/s_fabs.c double/portable-api/s_finite.c \ - double/portable-api/s_floor.c double/portable-api/s_frexp.c \ - double/portable-api/s_isnan.c double/portable-api/s_ldexp.c \ - double/portable-api/s_rint.c double/portable-api/s_scalbn.c \ - double/portable-api/s_sin.c double/portable-api/s_tan.c \ - double/portable-api/s_modf.c double/portable-api/s_tanh.c - + compile misc/matherr.c misc/standard.c misc/standard_float.c \ + misc/compatmode.cxx misc/infconst.c \ + \ + double/ieee754-core/e_acos.c double/ieee754-core/e_asin.c \ + double/ieee754-core/e_atan2.c double/ieee754-core/e_cosh.c \ + double/ieee754-core/e_exp.c double/ieee754-core/e_fmod.c \ + double/ieee754-core/e_log.c double/ieee754-core/e_log10.c \ + double/ieee754-core/e_pow.c \ + double/ieee754-core/e_rem_pio2.c \ + double/ieee754-core/e_scalb.c double/ieee754-core/e_sinh.c \ + double/ieee754-core/e_sqrt.c double/ieee754-core/e_hypot.c \ + \ + double/ieee754-api/w_acos.c double/ieee754-api/w_asin.c \ + double/ieee754-api/w_atan2.c double/ieee754-api/w_cosh.c \ + double/ieee754-api/w_exp.c double/ieee754-api/w_fmod.c \ + double/ieee754-api/w_log.c double/ieee754-api/w_log10.c \ + double/ieee754-api/w_pow.c double/ieee754-api/w_scalb.c \ + double/ieee754-api/w_sinh.c double/ieee754-api/w_sqrt.c \ + double/ieee754-api/w_hypot.c \ + double/ieee754-core/e_gamma.c double/ieee754-api/w_gamma.c \ + double/ieee754-core/e_gamma_r.c double/ieee754-api/w_gamma_r.c \ + double/ieee754-core/e_lgamma.c double/ieee754-api/w_lgamma.c \ + double/ieee754-core/e_lgamma_r.c double/ieee754-api/w_lgamma_r.c \ + \ + double/internal/k_cos.c double/internal/k_rem_pio2.c \ + double/internal/k_sin.c double/internal/k_tan.c \ + \ + float/internal/kf_cos.c float/internal/kf_sin.c \ + float/internal/kf_rem_pio2.c float/internal/kf_tan.c \ + \ + double/portable-api/s_atan.c double/portable-api/s_ceil.c \ + double/portable-api/s_copysign.c \ + double/portable-api/s_cos.c double/portable-api/s_expm1.c \ + double/portable-api/s_fabs.c double/portable-api/s_finite.c \ + double/portable-api/s_floor.c double/portable-api/s_frexp.c \ + double/portable-api/s_isnan.c double/portable-api/s_ldexp.c \ + double/portable-api/s_rint.c double/portable-api/s_scalbn.c \ + double/portable-api/s_sin.c double/portable-api/s_tan.c \ + double/portable-api/s_modf.c double/portable-api/s_tanh.c \ + \ + float/ieee754-core/ef_rem_pio2.c \ + float/ieee754-core/ef_sqrt.c float/ieee754-api/wf_sqrt.c \ + float/ieee754-core/ef_pow.c float/ieee754-api/wf_pow.c \ + float/ieee754-core/ef_exp.c float/ieee754-api/wf_exp.c \ + float/ieee754-core/ef_asin.c float/ieee754-api/wf_asin.c \ + float/ieee754-core/ef_log.c float/ieee754-api/wf_log.c \ + float/ieee754-core/ef_log10.c float/ieee754-api/wf_log10.c \ + float/ieee754-core/ef_hypot.c float/ieee754-api/wf_hypot.c \ + float/ieee754-core/ef_fmod.c float/ieee754-api/wf_fmod.c \ + float/ieee754-core/ef_remainder.c float/ieee754-api/wf_remainder.c \ + float/ieee754-core/ef_scalb.c float/ieee754-api/wf_scalb.c \ + float/ieee754-core/ef_acos.c float/ieee754-api/wf_acos.c \ + float/ieee754-core/ef_atan2.c float/ieee754-api/wf_atan2.c \ + float/ieee754-core/ef_acosh.c float/ieee754-api/wf_acosh.c \ + float/ieee754-core/ef_atanh.c float/ieee754-api/wf_atanh.c \ + float/ieee754-core/ef_cosh.c float/ieee754-api/wf_cosh.c \ + float/ieee754-core/ef_j0.c float/ieee754-api/wf_j0.c \ + float/ieee754-core/ef_j1.c float/ieee754-api/wf_j1.c \ + float/ieee754-core/ef_jn.c float/ieee754-api/wf_jn.c \ + float/ieee754-core/ef_sinh.c float/ieee754-api/wf_sinh.c \ + float/portable-api/sf_asinh.c float/portable-api/sf_ilogb.c \ + float/portable-api/sf_copysign.c \ + float/portable-api/sf_sin.c \ + float/portable-api/sf_finite.c float/portable-api/sf_erf.c \ + float/portable-api/sf_isnan.c float/portable-api/sf_floor.c \ + float/portable-api/sf_modf.c \ + float/portable-api/sf_atan.c \ + float/portable-api/sf_ldexp.c \ + float/portable-api/sf_nextafter.c \ + float/portable-api/sf_tan.c float/portable-api/sf_cbrt.c \ + float/portable-api/sf_expm1.c \ + float/portable-api/sf_frexp.c \ + float/portable-api/sf_log1p.c float/portable-api/sf_rint.c \ + float/portable-api/sf_tanh.c float/portable-api/sf_ceil.c \ + float/portable-api/sf_fabs.c \ + float/portable-api/sf_logb.c \ + float/portable-api/sf_scalbn.c \ + float/portable-api/sf_cos.c \ + float/portable-api/sf_significand.c # COMPATIBILITY-MODE RELATED CONFIGURATION OPTIONS cdl_component CYGPKG_LIBM_COMPATIBILITY { @@ -216,6 +263,43 @@ cdl_package CYGPKG_LIBM { puts $::cdl_header "/****** proc output end ******/" } + cdl_component CYGPKG_COMPLEX { + display "Complex" + flavor bool + default_value 1 + + description " + Complex library provides support for some basic operations + on complex numbers as well as mathematical functions in + complex domain." + + compile complex/cabs.c complex/cabsf.c \ + complex/carg.c complex/cargf.c \ + \ + complex/creal.c complex/crealf.c \ + complex/cimag.c complex/cimagf.c \ + complex/conj.c complex/conjf.c \ + \ + complex/cacos.c complex/cacosf.c \ + complex/cacosh.c complex/cacoshf.c \ + complex/casin.c complex/casinf.c \ + complex/casinh.c complex/casinhf.c \ + complex/catan.c complex/catanf.c \ + complex/catanh.c complex/catanhf.c \ + complex/ccos.c complex/ccosf.c \ + complex/ccosh.c complex/ccoshf.c \ + complex/cephes_subr.c complex/cephes_subrf.c \ + complex/cexp.c complex/cexpf.c \ + complex/clog.c complex/clogf.c \ + complex/cpow.c complex/cpowf.c \ + complex/cproj.c complex/cprojf.c \ + complex/csin.c complex/csinf.c \ + complex/csinh.c complex/csinhf.c \ + complex/csqrt.c complex/csqrtf.c \ + complex/ctan.c complex/ctanf.c \ + complex/ctanh.c complex/ctanhf.c + } + cdl_component CYGPKG_LIBM_OPTIONS { display "Math library build options" flavor none @@ -229,7 +313,8 @@ cdl_package CYGPKG_LIBM { display "Additional compiler flags" flavor data no_define - default_value { ((0 == CYGPKG_HAL_I386) && (0 == CYGPKG_HAL_SYNTH_I386)) ? "" : "-ffloat-store" } + default_value { "-fno-strict-aliasing" . \ + ((!CYGPKG_HAL_I386 && !CYGPKG_HAL_SYNTH_I386) ? "" : " -ffloat-store") } description " This option modifies the set of compiler flags for building the math library. These flags are used in addition @@ -251,9 +336,30 @@ cdl_package CYGPKG_LIBM { display "Math library tests" flavor data no_define - calculated { "tests/vectors/acos tests/vectors/asin tests/vectors/atan tests/vectors/atan2 tests/vectors/ceil tests/vectors/cos tests/vectors/cosh tests/vectors/exp tests/vectors/fabs tests/vectors/floor tests/vectors/fmod tests/vectors/frexp tests/vectors/ldexp tests/vectors/log tests/vectors/log10 tests/vectors/modf tests/vectors/pow tests/vectors/sin tests/vectors/sinh tests/vectors/sqrt tests/vectors/tan tests/vectors/tanh" } + calculated { "tests/vectors/acos tests/vectors/asin \ + tests/vectors/cos tests/vectors/cosh \ + tests/vectors/sin tests/vectors/sinh \ + tests/vectors/atan tests/vectors/atan2 \ + tests/vectors/tan tests/vectors/tanh \ + tests/vectors/sqrt tests/vectors/pow \ + tests/vectors/ceil tests/vectors/floor \ + tests/vectors/fabs tests/vectors/fmod \ + tests/vectors/frexp tests/vectors/ldexp \ + tests/vectors/exp tests/vectors/log tests/vectors/log10 \ + \ + tests/vectors/acosf tests/vectors/asinf \ + tests/vectors/cosf tests/vectors/coshf \ + tests/vectors/sinf tests/vectors/sinhf \ + tests/vectors/atanf tests/vectors/atan2f \ + tests/vectors/tanf tests/vectors/tanhf \ + tests/vectors/hypotf tests/vectors/sqrtf tests/vectors/powf \ + tests/vectors/floorf tests/vectors/ceilf \ + tests/vectors/fabsf tests/vectors/fmodf \ + tests/vectors/frexpf tests/vectors/ldexpf \ + tests/vectors/expf tests/vectors/logf tests/vectors/log10f " + } description " - This option specifies the set of tests for the math library." + this option specifies the set of tests for the math library." } } } diff --git a/packages/language/c/libm/current/include/complex.h b/packages/language/c/libm/current/include/complex.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/include/complex.h @@ -0,0 +1,202 @@ +#ifndef CYGONCE_COMPLEX_H +#define CYGONCE_COMPLEX_H + +//=========================================================================== +// +// complex.h +// +// Standard complex number functions conforming to ANSI and other standards +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Based on: see below +// Contributors: +// Date: 2013-06-05 +// Purpose: +// Description: Standard complex number mathematical functions. +// +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// This file was derived from a file with following copyright + +/* $NetBSD: complex.h,v 1.3 2010/09/15 16:11:30 christos Exp $ */ + +/* + * Written by Matthias Drochner. + * Public domain. + */ + +#ifndef _COMPLEX_H +#define _COMPLEX_H +#endif + +#define complex _Complex +#define _Complex_I (1.0fi) +#define I _Complex_I + +// 7.3.5 Trigonometric functions +// 7.3.5.1 The cacos functions +double complex cacos(double complex); +float complex cacosf(float complex); + +// 7.3.5.2 The casin functions +double complex casin(double complex); +float complex casinf(float complex); + +// 7.3.5.1 The catan functions +double complex catan(double complex); +float complex catanf(float complex); + +// 7.3.5.1 The ccos functions +double complex ccos(double complex); +float complex ccosf(float complex); + +// 7.3.5.1 The csin functions +double complex csin(double complex); +float complex csinf(float complex); + +// 7.3.5.1 The ctan functions +double complex ctan(double complex); +float complex ctanf(float complex); + +// 7.3.6 Hyperbolic functions +// 7.3.6.1 The cacosh functions +double complex cacosh(double complex); +float complex cacoshf(float complex); + +// 7.3.6.2 The casinh functions +double complex casinh(double complex); +float complex casinhf(float complex); + +// 7.3.6.3 The catanh functions +double complex catanh(double complex); +float complex catanhf(float complex); + +// 7.3.6.4 The ccosh functions +double complex ccosh(double complex); +float complex ccoshf(float complex); + +// 7.3.6.5 The csinh functions +double complex csinh(double complex); +float complex csinhf(float complex); + +// 7.3.6.6 The ctanh functions +double complex ctanh(double complex); +float complex ctanhf(float complex); + +// 7.3.7 Exponential and logarithmic functions +// 7.3.7.1 The cexp functions +double complex cexp(double complex); +float complex cexpf(float complex); + +// 7.3.7.2 The clog functions +double complex clog(double complex); +float complex clogf(float complex); + +// 7.3.9 Manipulation functions +// 7.3.9.2 The cimag functions +double cimag(double complex); +float cimagf(float complex); +//long double cimagl(long double complex); + +// 7.3.9.3 The conj functions +double complex conj(double complex); +float complex conjf(float complex); +//long double complex conjl(long double complex); + +// 7.3.9.4 The cproj functions +double complex cproj(double complex); +float complex cprojf(float complex); +//long double complex cprojl(long double complex); + +// 7.3.9.5 The creal functions +double creal(double complex); +float crealf(float complex); +//long double creall(long double complex); + +// 7.3.9.1 The carg functions +#ifdef CYGSEM_LIBM_IEEE_API_INLINE +CYGBLD_FORCE_INLINE double +carg(double complex z) +{ + return atan2( cimag(z) , creal(z) ); +} + +CYGBLD_FORCE_INLINE float +cargf(float complex z) +{ + return atan2f( cimagf(z) , crealf(z) ); +} +#else +double carg(double complex); +float cargf(float complex); +#endif + +// 7.3.8 Power and absolute-value functions +// 7.3.8.1 The cabs functions +#ifdef CYGSEM_LIBM_IEEE_API_INLINE +CYGBLD_FORCE_INLINE double +cabs(double complex z) +{ + return hypot( creal(z) , cimag(z) ); +} + +CYGBLD_FORCE_INLINE float +cabsf(float complex z) +{ + return hypotf( crealf(z) , cimagf(z) ); +} +#else +double cabs(double complex) ; +float cabsf(float complex) ; +#endif + +// 7.3.8.2 The cpow functions +double complex cpow(double complex, double complex); +float complex cpowf(float complex, float complex); + +// 7.3.8.3 The csqrt functions +double complex csqrt(double complex); +float complex csqrtf(float complex); + +#endif //CYGONCE_COMPLEX_H + +// End of complex.h diff --git a/packages/language/c/libm/current/include/math.h b/packages/language/c/libm/current/include/math.h --- a/packages/language/c/libm/current/include/math.h +++ b/packages/language/c/libm/current/include/math.h @@ -10,7 +10,7 @@ // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2012, 2013 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -42,9 +42,9 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): jlarmour -// Contributors: jlarmour +// Contributors: jlarmour, visar, ilijak // Date: 1998-02-13 -// Purpose: +// Purpose: // Description: Standard mathematical functions. These can be // configured to conform to ANSI section 7.5. There are also // a number of extensions conforming to IEEE-754 and behaviours @@ -57,33 +57,150 @@ // CONFIGURATION +#include // System configuration header #include // Configuration header // Include the Math library? -#ifdef CYGPKG_LIBM +#ifdef CYGPKG_LIBM + +#ifdef CYGBLD_HAL_LIBM_H +# include CYGBLD_HAL_LIBM_H +#endif + +// Inline IEEE754 API macros +#define CYGBLD_LIBM_INLINE CYGBLD_FORCE_INLINE + +#ifdef CYGSEM_LIBM_IEEE_API_INLINE + +#define CYGDCL_LIBM_IEEE_API_INLINE_F(_fun) \ +externC double __ieee754_##_fun(double); \ +CYGBLD_LIBM_INLINE double _fun(double x) \ +{ \ + return __ieee754_##_fun(x); \ +} \ +externC float __ieee754_##_fun##f(float); \ +CYGBLD_LIBM_INLINE float _fun##f(float x) \ +{ \ + return __ieee754_##_fun##f(x); \ +} + +#define CYGDCL_LIBM_IEEE_API_INLINE_FF(_fun) \ +externC double __ieee754_##_fun(double, double); \ +CYGBLD_LIBM_INLINE double _fun(double x, double y) \ +{ \ + return __ieee754_##_fun(x, y); \ +} \ +externC float __ieee754_##_fun##f(float, float); \ +CYGBLD_LIBM_INLINE float _fun##f(float x, float y) \ +{ \ + return __ieee754_##_fun##f(x, y); \ +} + +#define CYGDCL_LIBM_IEEE_API_INLINE_IF(_fun) \ +externC double __ieee754_##_fun(int, double); \ +CYGBLD_LIBM_INLINE double _fun(int x, double y) \ +{ \ + return __ieee754_##_fun(x, y); \ +} \ +externC float __ieee754_##_fun##f(int, float); \ +CYGBLD_LIBM_INLINE float _fun##f(int x, float y) \ +{ \ + return __ieee754_##_fun##f(x, y); \ +} + +#define CYGDCL_LIBM_IEEE_API_INLINE_FIP(_fun) \ +externC double __ieee754_##_fun(double, int *); \ +CYGBLD_LIBM_INLINE double _fun(double x, int *y) \ +{ \ + return __ieee754_##_fun(x, y); \ +} \ +externC float __ieee754_##_fun##f(float, int*); \ +CYGBLD_LIBM_INLINE float _fun##f(float x, int *y) \ +{ \ + return __ieee754_##_fun##f(x, y); \ +} + +#else + +#define CYGDCL_LIBM_IEEE_API_INLINE_F(_fun) \ +externC inline double _fun(double); \ +externC float inline _fun##f(float); + +#define CYGDCL_LIBM_IEEE_API_INLINE_FF(_fun) \ +externC inline double _fun(double, double); \ +externC inline float _fun##f(float, float); + +#define CYGDCL_LIBM_IEEE_API_INLINE_IF(_fun) \ +externC inline double _fun(int, double); \ +externC inline float _fun##f(int, float); + +#define CYGDCL_LIBM_IEEE_API_INLINE_FIP(_fun) \ +externC inline double _fun(double, int *); \ +externC inline float _fun##f(float, int *); + +#endif // INCLUDES #include // Common type definitions and support #include // Properties of FP representation on this // platform -#include // Cyg_libm_ieee_double_shape_type +#include // Cyg_libm_ieee_[double|float]_shape_type // CONSTANT DEFINITIONS +// Useful constants. + +#define MAXFLOAT 3.40282347e+38F + +#define M_E 2.7182818284590452354 +#define M_LOG2E 1.4426950408889634074 +#define M_LOG10E 0.43429448190325182765 +#define M_LN2 _M_LN2 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_TWOPI (M_PI * 2.0) +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.78539816339744830962 +#define M_3PI_4 2.3561944901923448370E0 +#define M_SQRTPI 1.77245385090551602792981 +#define M_1_PI 0.31830988618379067154 +#define M_2_PI 0.63661977236758134308 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.70710678118654752440 +#define M_LN2LO 1.9082149292705877000E-10 +#define M_LN2HI 6.9314718036912381649E-1 +#define M_SQRT3 1.73205080756887719000 +#define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ +#define M_LOG2_E _M_LN2 +#define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ // HUGE_VAL is a positive double (not necessarily representable as a float) // representing infinity as specified in ANSI 7.5. cyg_libm_infinity is // defined further down +#if 1 #define HUGE_VAL (cyg_libm_infinity.value) +#define HUGE_VALF (cyg_libm_float_infinity.value) +#else + /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ + +# ifndef HUGE_VAL +# define HUGE_VAL (__builtin_huge_val()) +# endif + +# ifndef HUGE_VALF +# define HUGE_VALF (__builtin_huge_valf()) +# endif + +#endif /* !gcc >= 3.3 */ #ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION // HUGE is defined in System V Interface Definition 3 (SVID3) as the largest // finite single precision number #define HUGE FLT_MAX // from float.h - // Values used in the type field of struct exception below #define DOMAIN 1 @@ -93,6 +210,9 @@ #define TLOSS 5 #define PLOSS 6 +#ifndef FP_ILOGBNAN +# define FP_ILOGBNAN INT_MAX +#endif // TYPE DEFINITIONS @@ -106,12 +226,20 @@ struct exception { double retval; // Value to be returned - can be altered by matherr() }; +struct exceptionf { + int type; // One of DOMAIN, SING, OVERFLOW, UNDERFLOW, TLOSS, PLOSS + char *name; // Name of the function generating the exception + float arg1; // First argument to the function + float arg2; // Second argument to the function + float retval; // Value to be returned - can be altered by matherr() +}; + #endif // ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION - // GLOBALS externC const Cyg_libm_ieee_double_shape_type cyg_libm_infinity; +externC const Cyg_libm_ieee_float_shape_type cyg_libm_float_infinity; //=========================================================================== // FUNCTION PROTOTYPES @@ -178,84 +306,108 @@ externC int signgam; // Trigonometric functions - ANSI 7.5.2 -externC double -acos( double ); // arc cosine i.e. inverse cos +// arc cosine i.e. inverse cos +CYGDCL_LIBM_IEEE_API_INLINE_F(acos) -externC double -asin( double ); // arc sine i.e. inverse sin +// arc sine i.e. inverse sin +CYGDCL_LIBM_IEEE_API_INLINE_F(asin) externC double atan( double ); // arc tan i.e. inverse tan -externC double -atan2( double, double ); // arc tan of (first arg/second arg) using signs - // of args to determine quadrant +externC float +atanf ( float ); + +// arc tan of (first arg/second arg) using signs +// of args to determine quadrant +CYGDCL_LIBM_IEEE_API_INLINE_FF(atan2) externC double cos( double ); // cosine +externC float +cosf( float ); + externC double sin( double ); // sine +externC float +sinf( float ); + externC double tan( double ); // tangent +externC float +tanf ( float ); + // Hyperbolic functions - ANSI 7.5.3 -externC double -cosh( double ); // hyperbolic cosine +// hyperbolic cosine +CYGDCL_LIBM_IEEE_API_INLINE_F(cosh) -externC double -sinh( double ); // hyperbolic sine +// hyperbolic sine +CYGDCL_LIBM_IEEE_API_INLINE_F(sinh) externC double tanh( double ); // hyperbolic tangent +externC float +tanhf ( float ); + // Exponential and Logarithmic Functions - ANSI 7.5.4 -externC double -exp( double ); // exponent +CYGDCL_LIBM_IEEE_API_INLINE_F(exp) externC double frexp( double, int * ); // break number into normalized fraction (returned) // and integral power of 2 (second arg) - -externC double -ldexp( double, int ); // multiples number by integral power of 2 +externC float +frexpf( float, int * ); externC double -log( double ); // natural logarithm +ldexp( double, int ); // multiples number by integral power of 2 + +externC float +ldexpf( float, int ); -externC double -log10( double ); // base ten logarithm +// natural logarithm +CYGDCL_LIBM_IEEE_API_INLINE_F(log) + +// base ten logarithm +CYGDCL_LIBM_IEEE_API_INLINE_F(log10) externC double modf( double, double * ); // break number into integral and fractional // parts, each of which has same sign as arg. - // It returns signed fractional part, and - // puts integral part in second arg +externC float // It returns signed fractional part, and +modff ( float, float *); // puts integral part in second arg // Power Functions - ANSI 7.5.5 -externC double -pow( double, double ); // (1st arg) to the power of (2nd arg) +// (1st arg) to the power of (2nd arg) +CYGDCL_LIBM_IEEE_API_INLINE_FF(pow) -externC double -sqrt( double ); // square root +// square root +CYGDCL_LIBM_IEEE_API_INLINE_F(sqrt) // Nearest integer, absolute value and remainder functions - ANSI 7.5.6 externC double ceil( double ); // smallest integer >= arg +externC float +ceilf ( float ); externC double fabs( double ); // absolute value +externC float +fabsf ( float ); externC double floor( double ); // largest integer <= arg +externC float +floorf ( float ); -externC double -fmod( double, double ); // remainder of (1st arg)/(2nd arg) +CYGDCL_LIBM_IEEE_API_INLINE_FF(fmod) //=========================================================================== // Other standard functions @@ -263,93 +415,121 @@ fmod( double, double ); // remainder #ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION externC int matherr( struct exception * ); // User-overridable error handling - see -#endif // for a discussion + // for a discussion +externC int +matherrf( struct exceptionf * ); +#endif // FIXME: from here needs to be documented and mentioned as non-ISO // Arc Hyperbolic trigonometric functions -externC double -acosh( double ); // Arc hyperbolic cos i.e. inverse cosh +// Arc hyperbolic cos i.e. inverse cosh +CYGDCL_LIBM_IEEE_API_INLINE_F(acosh) -externC double -asinh( double ); // Arc hyperbolic sin i.e. inverse sinh +// Arc hyperbolic sin i.e. inverse sinh +CYGDCL_LIBM_IEEE_API_INLINE_F(asinh) -externC double -atanh( double ); // Arc hyperbolic tan i.e. inverse tanh +// Arc hyperbolic tan i.e. inverse tanh +CYGDCL_LIBM_IEEE_API_INLINE_F(atanh) // Error functions externC double // Error function, such that erf( double ); // erf(x) = 2/sqrt(pi) * integral from // 0 to x of e**(-t**2) dt +externC float +erff ( float ); externC double // Complementary error function - simply erfc( double ); // 1.0 - erf(x) +externC float +erfcf ( float ); + // Gamma functions -externC double // Logarithm of the absolute value of the -lgamma( double ); // gamma function of the argument. The - // integer signgam is used to store the - // sign of the gamma function of the arg +// Logarithm of the absolute value of the +// gamma function of the argument. The +// integer signgam is used to store the +// sign of the gamma function of the arg +CYGDCL_LIBM_IEEE_API_INLINE_F(lgamma) -externC double -lgamma_r( double, int * ); // Re-entrant version of the above, where - // the user passes the location of signgam - // as the second argument +// Re-entrant version of the above, where +// the user passes the location of signgam +// as the second argument +CYGDCL_LIBM_IEEE_API_INLINE_FIP(lgamma_r) -externC double // Identical to lgamma()! -gamma( double ); // The reasons for this are historical, - // and may be changed in future standards - // - // To get the real gamma function, you should - // use: l=lgamma(x); g=signgam*exp(l); - // - // Do not just do signgam*exp(lgamma(x)) - // as lgamma() modifies signgam +// Identical to lgamma()! +// The reasons for this are historical, +// and may be changed in future standards +// +// To get the real gamma function, you should +// use: l=lgamma(x); g=signgam*exp(l); +// +// Do not just do signgam*exp(lgamma(x)) +// as lgamma() modifies signgam +CYGDCL_LIBM_IEEE_API_INLINE_F(gamma) externC double gamma_r( double, int * ); // Identical to lgamma_r(). See above. +externC float +gammaf_r( float, int * ); + // Bessel functions -externC double // Zero-th order Bessel function of the -j0( double ); // first kind at the ordinate of the argument +// Zero-th order Bessel function of the +// first kind at the ordinate of the argument +CYGDCL_LIBM_IEEE_API_INLINE_F(j0) -externC double // First-order Bessel function of the -j1( double ); // first kind at the ordinate of the argument +// First-order Bessel function of the +// first kind at the ordinate of the argument +CYGDCL_LIBM_IEEE_API_INLINE_F(j1) -externC double // Bessel function of the first kind of the -jn( int, double ); // order of the first argument at the - // ordinate of the second argument +// Bessel function of the first kind of the +// order of the first argument at the +// ordinate of the second argument +CYGDCL_LIBM_IEEE_API_INLINE_IF(jn) externC double // Zero-th order Bessel function of the y0( double ); // second kind at the ordinate of the - // argument + +externC float +y0f( float ); externC double // First-order Bessel function of the y1( double ); // second kind at the ordinate of the // argument +externC float +y1f( float ); externC double // Bessel function of the second kind of the yn( int, double ); // order of the first argument at the // ordinate of the second argument +externC float +ynf( int, float ); // scalb*() externC double // scalbn(x,n) returns x*(2**n) scalbn( double, int ); +externC float +scalbnf ( float, int); + #ifdef CYGFUN_LIBM_SVID3_scalb -externC double -scalb( double, double ); // as above except n is a floating point arg +// as above except n is a floating point arg +CYGDCL_LIBM_IEEE_API_INLINE_FF(scalb) #else externC double scalb( double, int ); // as scalbn() +externC float +scalbf( float, int ); + #endif // ifdef CYGFUN_LIBM_SVID3_scalb // And the rest @@ -357,58 +537,90 @@ scalb( double, int ); // as externC double cbrt( double ); // Cube Root -externC double // hypotenuse function, defined such that: -hypot( double, double ); // hypot(x,y)==sqrt(x**2 + y**2) +externC float +cbrtf( float ); + +// hypotenuse function, defined such that: +// hypotf(x,y)==sqrt(x**2 + y**2) + +CYGDCL_LIBM_IEEE_API_INLINE_FF(hypot) externC int // whether the argument is NaN isnan( double ); externC int +isnanf ( float ); + +externC int // wheteher the argument is infinite +isinf(double); + +externC int +isinff(float); + +externC int finite( double ); // whether the argument is finite +externC int +finitef ( float ); + externC double // logb returns the binary exponent of its logb( double ); // argument as an integral value // This is not recommended - use ilogb - // instead +externC float // instead +logbf ( float ); externC int // As for logb, but has the more correct ilogb( double ); // return value type of int +externC int +ilogbf ( float ); externC double // nextafter(x,y) returns the next nextafter( double, double ); // representable floating point number // adjacent to x in the direction of y - // i.e. the next greater FP if y>x, the next - // less FP if yx, the next +nextafterf ( float, float ); // less FP if y. + * Public domain. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex absolute-value + +INDEX + cabs +INDEX + cabsf + +ANSI_SYNOPSIS + #include + double cabs(double complex <[z]>); + float cabsf(float complex <[z]>); + + +DESCRIPTION + These functions compute compute the complex absolute value + (also called norm, modulus, or magnitude) of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + The cabs functions return the complex absolute value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double +cabs(double complex z) +{ + + return hypot( creal(z), cimag(z) ); +} diff --git a/packages/language/c/libm/current/src/complex/cabsf.c b/packages/language/c/libm/current/src/complex/cabsf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cabsf.c @@ -0,0 +1,19 @@ +/* $NetBSD: cabsf.c,v 1.1 2007/08/20 16:01:30 drochner Exp $ */ + +/* + * Written by Matthias Drochner . + * Public domain. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float +cabsf(float complex z) +{ + + return hypotf( crealf(z), cimagf(z) ); +} diff --git a/packages/language/c/libm/current/src/complex/cacos.c b/packages/language/c/libm/current/src/complex/cacos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cacos.c @@ -0,0 +1,99 @@ +/* $NetBSD: cacos.c,v 1.1 2007/08/20 16:01:30 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc cosine + +INDEX + cacos +INDEX + cacosf + +ANSI_SYNOPSIS + #include + double complex cacos(double complex <[z]>); + float complex cacosf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex arc cosine of <[z]>, + with branch cuts outside the interval [-1, +1] along the real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc cosine value, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [0, pi] along the real axis. + @end ifnottex + @tex + These functions return the complex arc cosine value, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [<<0>>, $\pi$] along the real axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + +#include +#include + +double complex +cacos(double complex z) +{ + double complex w; + + /* FIXME: The original NetBSD code results in an ICE when trying to + build this function on ARM/Thumb using gcc 4.5.1. For now we use + a hopefully temporary workaround. */ +#if 0 + w = casin(z); + w = (M_PI_2 - creal(w)) - cimag(w) * I; +#else + double complex tmp0, tmp1; + + tmp0 = casin(z); + tmp1 = M_PI_2 - creal(tmp0); + w = tmp1 - (cimag(tmp0) * I); +#endif + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cacosf.c b/packages/language/c/libm/current/src/complex/cacosf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cacosf.c @@ -0,0 +1,46 @@ +/* $NetBSD: cacosf.c,v 1.1 2007/08/20 16:01:30 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +cacosf(float complex z) +{ + float complex w; + + w = casinf(z); + w = ((float)M_PI_2 - crealf(w)) - cimagf(w) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cacosh.c b/packages/language/c/libm/current/src/complex/cacosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cacosh.c @@ -0,0 +1,93 @@ +/* $NetBSD: cacosh.c,v 1.2 2009/08/03 19:41:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc hyperbolic cosine + +INDEX + cacosh +INDEX + cacoshf + +ANSI_SYNOPSIS + #include + double complex cacosh(double complex <[z]>); + float complex cacoshf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex arc hyperbolic cosine of <[z]>, + with a branch cut at values less than 1 along the real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc hyperbolic cosine value, + in the range of a half-strip of non-negative values along the + real axis and in the interval [-i * pi, +i * pi] along the + imaginary axis. + @end ifnottex + @tex + These functions return the complex arc hyperbolic cosine value, + in the range of a half-strip of non-negative values along the + real axis and in the interval [$-i\pi$, $+i\pi$] along the + imaginary axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include + +double complex +cacosh(double complex z) +{ + double complex w; + +#if 0 /* does not give the principal value */ + w = I * cacos(z); +#else + w = clog(z + csqrt(z + 1) * csqrt(z - 1)); +#endif + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cacoshf.c b/packages/language/c/libm/current/src/complex/cacoshf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cacoshf.c @@ -0,0 +1,48 @@ +/* $NetBSD: cacoshf.c,v 1.2 2009/08/03 19:41:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include + +float complex +cacoshf(float complex z) +{ + float complex w; + +#if 0 /* does not give the principal value */ + w = I * cacosf(z); +#else + w = clogf(z + csqrtf(z + 1) * csqrtf(z - 1)); +#endif + return w; +} diff --git a/packages/language/c/libm/current/src/complex/carg.c b/packages/language/c/libm/current/src/complex/carg.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/carg.c @@ -0,0 +1,59 @@ +/* $NetBSD: carg.c,v 1.1 2007/08/20 16:01:31 drochner Exp $ */ + +/* + * Written by Matthias Drochner . + * Public domain. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---argument (phase angle) + +INDEX + carg +INDEX + cargf + +ANSI_SYNOPSIS + #include + double carg(double complex <[z]>); + float cargf(float complex <[z]>); + + +DESCRIPTION + These functions compute the argument (also called phase angle) + of <[z]>, with a branch cut along the negative real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + The carg functions return the value of the argument in the + interval [-pi, +pi] + @end ifnottex + @tex + The carg functions return the value of the argument in the + interval [$-\pi$, $+\pi$] + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + +#include +#include + +double +carg(double complex z) +{ + + return atan2( cimag(z) , creal(z) ); +} diff --git a/packages/language/c/libm/current/src/complex/cargf.c b/packages/language/c/libm/current/src/complex/cargf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cargf.c @@ -0,0 +1,19 @@ +/* $NetBSD: cargf.c,v 1.1 2007/08/20 16:01:31 drochner Exp $ */ + +/* + * Written by Matthias Drochner . + * Public domain. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float +cargf(float complex z) +{ + + return atan2f( cimagf(z), crealf(z) ); +} diff --git a/packages/language/c/libm/current/src/complex/casin.c b/packages/language/c/libm/current/src/complex/casin.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/casin.c @@ -0,0 +1,165 @@ +/* $NetBSD: casin.c,v 1.1 2007/08/20 16:01:31 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc sine + +INDEX + casin +INDEX + casinf + +ANSI_SYNOPSIS + #include + double complex casin(double complex <[z]>); + float complex casinf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex arc sine of <[z]>, + with branch cuts outside the interval [-1, +1] along the real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc sine value, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [-pi/2, +pi/2] along the real axis. + @end ifnottex + @tex + These functions return the complex arc sine value, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [$-\pi/2$, $+\pi/2$] along the real axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +#ifdef __weak_alias +__weak_alias(casin, _casin) +#endif + +double complex +casin(double complex z) +{ + double complex w; + double complex ca, ct, zz, z2; + double x, y; + + x = creal(z); + y = cimag(z); + +#if 0 /* MD: test is incorrect, casin(>1) is defined */ + if (y == 0.0) { + if (fabs(x) > 1.0) { + w = M_PI_2 + 0.0 * I; +#if 0 + mtherr ("casin", DOMAIN); +#endif + } else { + w = asin(x) + 0.0 * I; + } + return w; + } +#endif + +/* Power series expansion */ +/* +b = cabs(z); +if( b < 0.125 ) +{ +z2.r = (x - y) * (x + y); +z2.i = 2.0 * x * y; + +cn = 1.0; +n = 1.0; +ca.r = x; +ca.i = y; +sum.r = x; +sum.i = y; +do + { + ct.r = z2.r * ca.r - z2.i * ca.i; + ct.i = z2.r * ca.i + z2.i * ca.r; + ca.r = ct.r; + ca.i = ct.i; + + cn *= n; + n += 1.0; + cn /= n; + n += 1.0; + b = cn/n; + + ct.r *= b; + ct.i *= b; + sum.r += ct.r; + sum.i += ct.i; + b = fabs(ct.r) + fabs(ct.i); + } +while( b > MACHEP ); +w->r = sum.r; +w->i = sum.i; +return; +} +*/ + + + ca = x + y * I; + ct = ca * I; + /* sqrt( 1 - z*z) */ + /* cmul( &ca, &ca, &zz ) */ + /*x * x - y * y */ + zz = (x - y) * (x + y) + (2.0 * x * y) * I; + + zz = 1.0 - creal(zz) - cimag(zz) * I; + z2 = csqrt(zz); + + zz = ct + z2; + zz = clog(zz); + /* multiply by 1/i = -i */ + w = zz * (-1.0 * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/casinf.c b/packages/language/c/libm/current/src/complex/casinf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/casinf.c @@ -0,0 +1,122 @@ +/* $NetBSD: casinf.c,v 1.1 2007/08/20 16:01:31 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +#ifdef __weak_alias +__weak_alias(casinf, _casinf) +#endif + +float complex +casinf(float complex z) +{ + float complex w; + float complex ca, ct, zz, z2; + float x, y; + + x = crealf(z); + y = cimagf(z); + +#if 0 /* MD: test is incorrect, casin(>1) is defined */ + if (y == 0.0f) { + if (fabsf(x) > 1.0) { + w = M_PI_2 + 0.0f * I; +#if 0 + mtherr ("casin", DOMAIN); +#endif + } else { + w = asinf(x) + 0.0f * I; + } + return w; + } +#endif + +/* Power series expansion */ +/* +b = cabsf(z); +if( b < 0.125 ) +{ +z2.r = (x - y) * (x + y); +z2.i = 2.0 * x * y; + +cn = 1.0; +n = 1.0; +ca.r = x; +ca.i = y; +sum.r = x; +sum.i = y; +do + { + ct.r = z2.r * ca.r - z2.i * ca.i; + ct.i = z2.r * ca.i + z2.i * ca.r; + ca.r = ct.r; + ca.i = ct.i; + + cn *= n; + n += 1.0; + cn /= n; + n += 1.0; + b = cn/n; + + ct.r *= b; + ct.i *= b; + sum.r += ct.r; + sum.i += ct.i; + b = fabsf(ct.r) + fabsf(ct.i); + } +while( b > MACHEP ); +w->r = sum.r; +w->i = sum.i; +return; +} +*/ + + + ca = x + y * I; + ct = ca * I; + /* sqrt( 1 - z*z) */ + /* cmul( &ca, &ca, &zz ) */ + /*x * x - y * y */ + zz = (x - y) * (x + y) + (2.0f * x * y) * I; + + zz = 1.0f - crealf(zz) - cimagf(zz) * I; + z2 = csqrtf(zz); + + zz = ct + z2; + zz = clogf(zz); + /* multiply by 1/i = -i */ + w = zz * (-1.0f * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/casinh.c b/packages/language/c/libm/current/src/complex/casinh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/casinh.c @@ -0,0 +1,97 @@ +/* $NetBSD: casinh.c,v 1.1 2007/08/20 16:01:31 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc hyperbolic sine + +INDEX + casinh +INDEX + casinhf + +ANSI_SYNOPSIS + #include + double complex casinh(double complex <[z]>); + float complex casinhf(float complex <[z]>); + + +DESCRIPTION + @ifnottex + These functions compute the complex arc hyperbolic sine of <[z]>, + with branch cuts outside the interval [-i, +i] along the + imaginary axis. + @end ifnottex + @tex + These functions compute the complex arc hyperbolic sine of <[z]>, + with branch cuts outside the interval [$-i$, $+i$] along the + imaginary axis. + @end tex + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc hyperbolic sine value, + in the range of a strip mathematically unbounded along the + real axis and in the interval [-i*p/2, +i*p/2] along the + imaginary axis. + @end ifnottex + @tex + These functions return the complex arc hyperbolic sine value, + in the range of a strip mathematically unbounded along the + real axis and in the interval [$-i\pi/2$, $+i\pi/2$] along the + imaginary axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include + +double complex +casinh(double complex z) +{ + double complex w; + + w = -1.0 * I * casin(z * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/casinhf.c b/packages/language/c/libm/current/src/complex/casinhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/casinhf.c @@ -0,0 +1,44 @@ +/* $NetBSD: casinhf.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include + +float complex +casinhf(float complex z) +{ + float complex w; + + w = -1.0f * I * casinf(z * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/catan.c b/packages/language/c/libm/current/src/complex/catan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/catan.c @@ -0,0 +1,130 @@ +/* $NetBSD: catan.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc tangent + +INDEX + catan +INDEX + catanf + +ANSI_SYNOPSIS + #include + double complex catan(double complex <[z]>); + float complex catanf(float complex <[z]>); + + +DESCRIPTION + @ifnottex + These functions compute the complex arc tangent of <[z]>, + with branch cuts outside the interval [-i, +i] along the + imaginary axis. + @end ifnottex + @tex + These functions compute the complex arc tangent of <[z]>, + with branch cuts outside the interval [$-i$, $+i$] along the + imaginary axis. + @end tex + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc tangent value, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [-pi/2, +pi/2] along the real axis. + @end ifnottex + @tex + These functions return the complex arc tangent, in the range + of a strip mathematically unbounded along the imaginary axis + and in the interval [$-\pi/2$, $+\pi/2$] along the real axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include +#include "cephes_subr.h" + +#ifdef __weak_alias +__weak_alias(catan, _catan) +#endif + +double complex +catan(double complex z) +{ + double complex w; + double a, t, x, x2, y; + + x = creal(z); + y = cimag(z); + + if ((x == 0.0) && (y > 1.0)) + goto ovrf; + + x2 = x * x; + a = 1.0 - x2 - (y * y); + if (a == 0.0) + goto ovrf; + + t = 0.5 * atan2(2.0 * x, a); + w = _redupi(t); + + t = y - 1.0; + a = x2 + (t * t); + if (a == 0.0) + goto ovrf; + + t = y + 1.0; + a = (x2 + (t * t))/a; + w = w + (0.25 * log(a)) * I; + return w; + +ovrf: +#if 0 + mtherr ("catan", OVERFLOW); +#endif + w = HUGE_VAL + HUGE_VAL * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/catanf.c b/packages/language/c/libm/current/src/complex/catanf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/catanf.c @@ -0,0 +1,79 @@ +/* $NetBSD: catanf.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subrf.h" + +#ifdef __weak_alias +__weak_alias(catanf, _catanf) +#endif + +float complex +catanf(float complex z) +{ + float complex w; + float a, t, x, x2, y; + + x = crealf(z); + y = cimagf(z); + + if ((x == 0.0f) && (y > 1.0f)) + goto ovrf; + + x2 = x * x; + a = 1.0f - x2 - (y * y); + if (a == 0.0f) + goto ovrf; + + t = 0.5f * atan2f(2.0f * x, a); + w = _redupif(t); + + t = y - 1.0f; + a = x2 + (t * t); + if (a == 0.0f) + goto ovrf; + + t = y + 1.0f; + a = (x2 + (t * t))/a; + w = w + (0.25f * logf(a)) * I; + return w; + +ovrf: +#if 0 + mtherr ("catan", OVERFLOW); +#endif + w = HUGE_VALF + HUGE_VALF * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/catanh.c b/packages/language/c/libm/current/src/complex/catanh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/catanh.c @@ -0,0 +1,90 @@ +/* $NetBSD: catanh.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex arc hyperbolic tangent + +INDEX + catanh +INDEX + catanhf + +ANSI_SYNOPSIS + #include + double complex catanh(double complex <[z]>); + float complex catanhf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex arc hyperbolic tan of <[z]>, + with branch cuts outside the interval [-1, +1] along the + real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + These functions return the complex arc hyperbolic tangent value, + in the range of a strip mathematically unbounded along the + real axis and in the interval [-i*p/2, +i*p/2] along the + imaginary axis. + @end ifnottex + @tex + These functions return the complex arc hyperbolic tangent value, + in the range of a strip mathematically unbounded along the + real axis and in the interval [$-i\pi/2$, $+i\pi/2$] along the + imaginary axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include + +double complex +catanh(double complex z) +{ + double complex w; + + w = -1.0 * I * catan(z * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/catanhf.c b/packages/language/c/libm/current/src/complex/catanhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/catanhf.c @@ -0,0 +1,44 @@ +/* $NetBSD: catanhf.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include + +float complex +catanhf(float complex z) +{ + float complex w; + + w = -1.0f * I * catanf(z * I); + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ccos.c b/packages/language/c/libm/current/src/complex/ccos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ccos.c @@ -0,0 +1,81 @@ +/* $NetBSD: ccos.c,v 1.1 2007/08/20 16:01:32 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex cosine + +INDEX + ccos +INDEX + ccosf + +ANSI_SYNOPSIS + #include + double complex ccos(double complex <[z]>); + float complex ccosf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex cosine of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex cosine value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include +#include "cephes_subr.h" + +double complex +ccos(double complex z) +{ + double complex w; + double ch, sh; + + _cchsh(cimag(z), &ch, &sh); + w = cos(creal(z)) * ch - (sin(creal(z)) * sh) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ccosf.c b/packages/language/c/libm/current/src/complex/ccosf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ccosf.c @@ -0,0 +1,48 @@ +/* $NetBSD: ccosf.c,v 1.1 2007/08/20 16:01:33 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subrf.h" + +float complex +ccosf(float complex z) +{ + float complex w; + float ch, sh; + + _cchshf(cimagf(z), &ch, &sh); + w = cosf(crealf(z)) * ch - (sinf(crealf(z)) * sh) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ccosh.c b/packages/language/c/libm/current/src/complex/ccosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ccosh.c @@ -0,0 +1,81 @@ +/* $NetBSD: ccosh.c,v 1.1 2007/08/20 16:01:33 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex hyperbolic cosine + +INDEX + ccosh +INDEX + ccoshf + +ANSI_SYNOPSIS + #include + double complex ccosh(double complex <[z]>); + float complex ccoshf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex hyperbolic cosine of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex hyperbolic cosine value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double complex +ccosh(double complex z) +{ + double complex w; + double x, y; + + x = creal(z); + y = cimag(z); + w = cosh(x) * cos(y) + (sinh(x) * sin(y)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ccoshf.c b/packages/language/c/libm/current/src/complex/ccoshf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ccoshf.c @@ -0,0 +1,48 @@ +/* $NetBSD: ccoshf.c,v 1.1 2007/08/20 16:01:33 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +ccoshf(float complex z) +{ + float complex w; + float x, y; + + x = crealf(z); + y = cimagf(z); + w = coshf(x) * cosf(y) + (sinhf(x) * sinf(y)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cephes_subr.c b/packages/language/c/libm/current/src/complex/cephes_subr.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cephes_subr.c @@ -0,0 +1,126 @@ +/* $NetBSD: cephes_subr.c,v 1.1 2007/08/20 16:01:33 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subr.h" + +/* calculate cosh and sinh */ + +void +_cchsh(double x, double *c, double *s) +{ + double e, ei; + + if (fabs(x) <= 0.5) { + *c = cosh(x); + *s = sinh(x); + } else { + e = exp(x); + ei = 0.5 / e; + e = 0.5 * e; + *s = e - ei; + *c = e + ei; + } +} + +/* Program to subtract nearest integer multiple of PI */ + +/* extended precision value of PI: */ +static const double DP1 = 3.14159265160560607910E0; +static const double DP2 = 1.98418714791870343106E-9; +static const double DP3 = 1.14423774522196636802E-17; +#define MACHEP 1.1e-16 + +double +_redupi(double x) +{ + double t; + long i; + + t = x / M_PI; + if (t >= 0.0) + t += 0.5; + else + t -= 0.5; + + i = t; /* the multiple */ + t = i; + t = ((x - t * DP1) - t * DP2) - t * DP3; + return t; +} + +/* Taylor series expansion for cosh(2y) - cos(2x) */ + +double +_ctans(double complex z) +{ + double f, x, x2, y, y2, rn, t; + double d; + + x = fabs(2.0 * creal(z)); + y = fabs(2.0 * cimag(z)); + + x = _redupi(x); + + x = x * x; + y = y * y; + x2 = 1.0; + y2 = 1.0; + f = 1.0; + rn = 0.0; + d = 0.0; + do { + rn += 1.0; + f *= rn; + rn += 1.0; + f *= rn; + x2 *= x; + y2 *= y; + t = y2 + x2; + t /= f; + d += t; + + rn += 1.0; + f *= rn; + rn += 1.0; + f *= rn; + x2 *= x; + y2 *= y; + t = y2 - x2; + t /= f; + d += t; + } while (fabs(t/d) > MACHEP); + return d; +} diff --git a/packages/language/c/libm/current/src/complex/cephes_subr.h b/packages/language/c/libm/current/src/complex/cephes_subr.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cephes_subr.h @@ -0,0 +1,5 @@ +/* $NetBSD: cephes_subr.h,v 1.1 2007/08/20 16:01:33 drochner Exp $ */ + +void _cchsh(double, double *, double *); +double _redupi(double); +double _ctans(double complex); diff --git a/packages/language/c/libm/current/src/complex/cephes_subrf.c b/packages/language/c/libm/current/src/complex/cephes_subrf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cephes_subrf.c @@ -0,0 +1,125 @@ +/* $NetBSD: cephes_subrf.c,v 1.1 2007/08/20 16:01:34 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subrf.h" + +/* calculate cosh and sinh */ + +void +_cchshf(float x, float *c, float *s) +{ + float e, ei; + + if (fabsf(x) <= 0.5f) { + *c = coshf(x); + *s = sinhf(x); + } else { + e = expf(x); + ei = 0.5f / e; + e = 0.5f * e; + *s = e - ei; + *c = e + ei; + } +} + +/* Program to subtract nearest integer multiple of PI */ + +/* extended precision value of PI: */ +static const double DP1 = 3.140625; +static const double DP2 = 9.67502593994140625E-4; +static const double DP3 = 1.509957990978376432E-7; +#define MACHEPF 3.0e-8 + +float +_redupif(float x) +{ + float t; + long i; + + t = x / (float)M_PI; + if (t >= 0.0f) + t += 0.5f; + else + t -= 0.5f; + + i = t; /* the multiple */ + t = i; + t = ((x - t * DP1) - t * DP2) - t * DP3; + return t; +} + +/* Taylor series expansion for cosh(2y) - cos(2x) */ + +float +_ctansf(float complex z) +{ + float f, x, x2, y, y2, rn, t, d; + + x = fabsf(2.0f * crealf(z)); + y = fabsf(2.0f * cimagf(z)); + + x = _redupif(x); + + x = x * x; + y = y * y; + x2 = 1.0f; + y2 = 1.0f; + f = 1.0f; + rn = 0.0f; + d = 0.0f; + do { + rn += 1.0f; + f *= rn; + rn += 1.0f; + f *= rn; + x2 *= x; + y2 *= y; + t = y2 + x2; + t /= f; + d += t; + + rn += 1.0f; + f *= rn; + rn += 1.0f; + f *= rn; + x2 *= x; + y2 *= y; + t = y2 - x2; + t /= f; + d += t; + } while (fabsf(t/d) > MACHEPF); + return d; +} diff --git a/packages/language/c/libm/current/src/complex/cephes_subrf.h b/packages/language/c/libm/current/src/complex/cephes_subrf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cephes_subrf.h @@ -0,0 +1,5 @@ +/* $NetBSD: cephes_subrf.h,v 1.1 2007/08/20 16:01:34 drochner Exp $ */ + +void _cchshf(float, float *, float *); +float _redupif(float); +float _ctansf(float complex); diff --git a/packages/language/c/libm/current/src/complex/cexp.c b/packages/language/c/libm/current/src/complex/cexp.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cexp.c @@ -0,0 +1,82 @@ +/* $NetBSD: cexp.c,v 1.1 2007/08/20 16:01:34 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex base-e exponential + +INDEX + cexp +INDEX + cexpf + +ANSI_SYNOPSIS + #include + double complex cexp(double complex <[z]>); + float complex cexpf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex base-<[e]> exponential of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + The cexp functions return the complex base-<[e]> exponential value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double complex +cexp(double complex z) +{ + double complex w; + double r, x, y; + + x = creal(z); + y = cimag(z); + r = exp(x); + w = r * cos(y) + r * sin(y) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cexpf.c b/packages/language/c/libm/current/src/complex/cexpf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cexpf.c @@ -0,0 +1,49 @@ +/* $NetBSD: cexpf.c,v 1.1 2007/08/20 16:01:34 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +cexpf(float complex z) +{ + float complex w; + float r, x, y; + + x = crealf(z); + y = cimagf(z); + r = expf(x); + w = r * cosf(y) + r * sinf(y) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cimag.c b/packages/language/c/libm/current/src/complex/cimag.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cimag.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// cimag.c +// +// Complex numbr real part - double precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +double +cimag(double complex z) +{ + return __builtin_cimag(z); +} + +// End of cimag.c diff --git a/packages/language/c/libm/current/src/complex/cimagf.c b/packages/language/c/libm/current/src/complex/cimagf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cimagf.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// cimagf.c +// +// Complex numbr real part - single precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +float +cimagf(float complex z) +{ + return __builtin_cimagf(z); +} + +// End of cimagf.c diff --git a/packages/language/c/libm/current/src/complex/clog.c b/packages/language/c/libm/current/src/complex/clog.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/clog.c @@ -0,0 +1,91 @@ +/* $NetBSD: clog.c,v 1.1 2007/08/20 16:01:35 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex base-e logarithm + +INDEX + clog +INDEX + clogf + +ANSI_SYNOPSIS + #include + double complex clog(double complex <[z]>); + float complex clogf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex natural (base-<[e]>) logarithm + of <[z]>, with a branch cut along the negative real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + @ifnottex + The clog functions return the complex natural logarithm value, in + the range of a strip mathematically unbounded along the real axis + and in the interval [-i*pi , +i*pi] along the imaginary axis. + @end ifnottex + @tex + The clog functions return the complex natural logarithm value, in + the range of a strip mathematically unbounded along the real axis + and in the interval [$-i\pi$, $+i\pi$] along the imaginary axis. + @end tex + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + +#include +#include + +double complex +clog(double complex z) +{ + double complex w; + double p, rr; + + rr = cabs(z); + p = log(rr); + rr = atan2(cimag(z), creal(z)); + w = p + rr * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/clogf.c b/packages/language/c/libm/current/src/complex/clogf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/clogf.c @@ -0,0 +1,49 @@ +/* $NetBSD: clogf.c,v 1.1 2007/08/20 16:01:35 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +clogf(float complex z) +{ + float complex w; + float p, rr; + + rr = cabsf(z); + p = logf(rr); + rr = atan2f(cimagf(z), crealf(z)); + w = p + rr * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/complex.tex b/packages/language/c/libm/current/src/complex/complex.tex new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/complex.tex @@ -0,0 +1,55 @@ +@node Complex +@chapter Mathematical Complex Functions (@file{complex.h}) + +This chapter groups the complex mathematical functions. The +corresponding definitions and declarations are in @file{complex.h}. +Functions and documentations are taken from NetBSD. + +@menu +* cabs:: Complex absolute value +* cacos:: Complex arc cosine +* cacosh:: Complex arc hyperbolic cosine +* carg:: Argument (also called phase angle) +* casin:: Complex arc sine +* casinh:: Complex arc hyperbolic sine +* catan:: Complex arc tangent +* catanh:: Complex arc hyperbolic tangent +* ccos:: Complex cosine +* ccosh:: Complex hyperbolic cosine +* cexp:: Complex exponent +* cimag:: Imaginary part +* clog:: Complex natural (base e) logarithm +* conj:: Complex conjugate +* cpow:: Complex power function +* cproj:: Compute a projection on the Riemann sphere +* creal:: Real part +* csin:: Complex sine +* csinh:: Complex hyperbolic sine +* csqrt:: Complex square root +* ctan:: Complex tangent +* ctanh:: Complex hyperbolic tangent +@end menu + + +@page @include complex/cabs.def +@page @include complex/cacos.def +@page @include complex/cacosh.def +@page @include complex/carg.def +@page @include complex/casin.def +@page @include complex/casinh.def +@page @include complex/catan.def +@page @include complex/catanh.def +@page @include complex/ccos.def +@page @include complex/ccosh.def +@page @include complex/cexp.def +@page @include complex/cimag.def +@page @include complex/clog.def +@page @include complex/conj.def +@page @include complex/cpow.def +@page @include complex/cproj.def +@page @include complex/creal.def +@page @include complex/csin.def +@page @include complex/csinh.def +@page @include complex/csqrt.def +@page @include complex/ctan.def +@page @include complex/ctanh.def diff --git a/packages/language/c/libm/current/src/complex/conj.c b/packages/language/c/libm/current/src/complex/conj.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/conj.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// conj.c +// +// Complex cojugate - double precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +double complex +conj(double complex z) +{ + return __builtin_conj(z); +} + +// End of conj.c diff --git a/packages/language/c/libm/current/src/complex/conjf.c b/packages/language/c/libm/current/src/complex/conjf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/conjf.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// conjf.c +// +// Complex cojugate - single precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: ilijak +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +float complex +conjf(float complex z) +{ + return __builtin_conjf(z); +} + +// End of conjf.c diff --git a/packages/language/c/libm/current/src/complex/cpow.c b/packages/language/c/libm/current/src/complex/cpow.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cpow.c @@ -0,0 +1,101 @@ +/* $NetBSD: cpow.c,v 1.1 2007/08/20 16:01:35 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex power + +INDEX + cpow +INDEX + cpowf + +ANSI_SYNOPSIS + #include + double complex cpow(double complex <[x]>, double complex <[y]>); + float complex cpowf(float complex <[x]>, float complex <[y]>); + + +DESCRIPTION + @ifnottex + The cpow functions compute the complex power function x^y + power, with a branch cut for the first parameter along the + negative real axis. + @end ifnottex + @tex + The cpow functions compute the complex power function $x^y$ + power, with a branch cut for the first parameter along the + negative real axis. + @end tex + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + The cpow functions return the complex power function value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double complex +cpow(double complex a, double complex z) +{ + double complex w; + double x, y, r, theta, absa, arga; + + x = creal(z); + y = cimag(z); + absa = cabs(a); + if (absa == 0.0) { + return (0.0 + 0.0 * I); + } + arga = carg(a); + r = pow(absa, x); + theta = x * arga; + if (y != 0.0) { + r = r * exp(-y * arga); + theta = theta + y * log(absa); + } + w = r * cos(theta) + (r * sin(theta)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cpowf.c b/packages/language/c/libm/current/src/complex/cpowf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cpowf.c @@ -0,0 +1,59 @@ +/* $NetBSD: cpowf.c,v 1.1 2007/08/20 16:01:36 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +cpowf(float complex a, float complex z) +{ + float complex w; + float x, y, r, theta, absa, arga; + + x = crealf(z); + y = cimagf(z); + absa = cabsf(a); + if (absa == 0.0f) { + return (0.0f + 0.0f * I); + } + arga = cargf(a); + r = powf(absa, x); + theta = x * arga; + if (y != 0.0f) { + r = r * expf(-y * arga); + theta = theta + y * logf(absa); + } + w = r * cosf(theta) + (r * sinf(theta)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/cproj.c b/packages/language/c/libm/current/src/complex/cproj.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cproj.c @@ -0,0 +1,106 @@ +/* $NetBSD: cproj.c,v 1.3 2010/09/20 17:51:38 christos Exp $ */ + +/*- + * Copyright (c) 2010 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>--- Riemann sphere projection + +INDEX + cproj +INDEX + cprojf + +ANSI_SYNOPSIS + #include + double complex cproj(double complex <[z]>); + float complex cprojf(float complex <[z]>); + + +DESCRIPTION + These functions compute a projection of <[z]> onto the Riemann + sphere: <[z]> projects to <[z]> except that all complex infinities + (even those with one infinite part and one NaN part) project + to positive infinity on the real axis. If <[z]> has an infinite part, + then <>(<[z]>) is equivalent to + + INFINITY + I * copysign(0.0, cimag(z)) + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + The cproj functions return the value of the projection onto + the Riemann sphere. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + +//#include +/*__RCSID("$NetBSD: cproj.c,v 1.3 2010/09/20 17:51:38 christos Exp $"); */ + +#include +#include + +#include "../mathincl/fdlibm.h" + +/* + * cproj(double complex z) + * + * These functions return the value of the projection (not stereographic!) + * onto the Riemann sphere. + * + * z projects to z, except that all complex infinities (even those with one + * infinite part and one NaN part) project to positive infinity on the real axis. + * If z has an infinite part, then cproj(z) shall be equivalent to: + * + * INFINITY + I * copysign(0.0, cimag(z)) + */ +double complex +cproj(double complex z) +{ + double_complex w = { .z = z }; + + if (isinf(creal(z)) || isinf(cimag(z))) { +#ifdef __INFINITY + REAL_PART(w) = __INFINITY; +#else + REAL_PART(w) = HUGE_VAL; +#endif + IMAG_PART(w) = copysign(0.0, cimag(z)); + } + + return (w.z); +} diff --git a/packages/language/c/libm/current/src/complex/cprojf.c b/packages/language/c/libm/current/src/complex/cprojf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/cprojf.c @@ -0,0 +1,67 @@ +/* $NetBSD: cprojf.c,v 1.3 2010/09/20 17:51:38 christos Exp $ */ + +/*- + * Copyright (c) 2010 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/*__RCSID("$NetBSD: cprojf.c,v 1.3 2010/09/20 17:51:38 christos Exp $"); */ + +#include +#include + +#include "../mathincl/fdlibm.h" + +/* + * cprojf(float complex z) + * + * These functions return the value of the projection (not stereographic!) + * onto the Riemann sphere. + * + * z projects to z, except that all complex infinities (even those with one + * infinite part and one NaN part) project to positive infinity on the real axis. + * If z has an infinite part, then cproj(z) shall be equivalent to: + * + * INFINITY + I * copysign(0.0, cimag(z)) + */ + +float complex +cprojf(float complex z) +{ + float_complex w = { .z = z }; + + if (isinff(crealf(z)) || isinff(cimagf(z))) { +#ifdef __INFINITY + REAL_PART(w) = __INFINITY; +#else + REAL_PART(w) = HUGE_VALF; +#endif + IMAG_PART(w) = copysignf(0.0, cimagf(z)); + } + + return (w.z); +} diff --git a/packages/language/c/libm/current/src/complex/creal.c b/packages/language/c/libm/current/src/complex/creal.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/creal.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// creal.c +// +// Complex numbr real part - double precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +double +creal(double complex z) +{ + return __builtin_creal(z); +} + +// End of creal.c diff --git a/packages/language/c/libm/current/src/complex/crealf.c b/packages/language/c/libm/current/src/complex/crealf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/crealf.c @@ -0,0 +1,61 @@ +//=========================================================================== +// +// crealf.c +// +// Complex numbr real part - single precision. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-06 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include + +float +crealf(float complex z) +{ + return __builtin_crealf(z); +} + +// End of crealf.c diff --git a/packages/language/c/libm/current/src/complex/csin.c b/packages/language/c/libm/current/src/complex/csin.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csin.c @@ -0,0 +1,81 @@ +/* $NetBSD: csin.c,v 1.1 2007/08/20 16:01:36 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex sine + +INDEX + csin +INDEX + csinf + +ANSI_SYNOPSIS + #include + double complex csin(double complex <[z]>); + float complex csinf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex sine of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex sine value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include +#include "cephes_subr.h" + +double complex +csin(double complex z) +{ + double complex w; + double ch, sh; + + _cchsh(cimag(z), &ch, &sh); + w = sin(creal(z)) * ch + (cos(creal(z)) * sh) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/csinf.c b/packages/language/c/libm/current/src/complex/csinf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csinf.c @@ -0,0 +1,48 @@ +/* $NetBSD: csinf.c,v 1.1 2007/08/20 16:01:36 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subrf.h" + +float complex +csinf(float complex z) +{ + float complex w; + float ch, sh; + + _cchshf(cimagf(z), &ch, &sh); + w = sinf(crealf(z)) * ch + (cosf(crealf(z)) * sh) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/csinh.c b/packages/language/c/libm/current/src/complex/csinh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csinh.c @@ -0,0 +1,80 @@ +/* $NetBSD: csinh.c,v 1.1 2007/08/20 16:01:36 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex hyperbolic sine + +INDEX + csinh +INDEX + csinhf + +ANSI_SYNOPSIS + #include + double complex csinh(double complex <[z]>); + float complex csinhf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex hyperbolic sine of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex hyperbolic sine value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + +#include +#include + +double complex +csinh(double complex z) +{ + double complex w; + double x, y; + + x = creal(z); + y = cimag(z); + w = sinh(x) * cos(y) + (cosh(x) * sin(y)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/csinhf.c b/packages/language/c/libm/current/src/complex/csinhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csinhf.c @@ -0,0 +1,48 @@ +/* $NetBSD: csinhf.c,v 1.1 2007/08/20 16:01:37 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +csinhf(float complex z) +{ + float complex w; + float x, y; + + x = crealf(z); + y = cimagf(z); + w = sinhf(x) * cosf(y) + (coshf(x) * sinf(y)) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/csqrt.c b/packages/language/c/libm/current/src/complex/csqrt.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csqrt.c @@ -0,0 +1,137 @@ +/* $NetBSD: csqrt.c,v 1.1 2007/08/20 16:01:37 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex square root + +INDEX + csqrt +INDEX + csqrtf + +ANSI_SYNOPSIS + #include + double complex csqrt(double complex <[z]>); + float complex csqrtf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex square root of <[z]>, with + a branch cut along the negative real axis. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + The csqrt functions return the complex square root value, in + the range of the right halfplane (including the imaginary axis). + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double complex +csqrt(double complex z) +{ + double complex w; + double x, y, r, t, scale; + + x = creal (z); + y = cimag (z); + + if (y == 0.0) { + if (x == 0.0) { + w = 0.0 + y * I; + } else { + r = fabs(x); + r = sqrt(r); + if (x < 0.0) { + w = 0.0 + r * I; + } else { + w = r + y * I; + } + } + return w; + } + if (x == 0.0) { + r = fabs(y); + r = sqrt(0.5 * r); + if (y > 0) + w = r + r * I; + else + w = r - r * I; + return w; + } + /* Rescale to avoid internal overflow or underflow. */ + if ((fabs(x) > 4.0) || (fabs(y) > 4.0)) { + x *= 0.25; + y *= 0.25; + scale = 2.0; + } else { +#if 1 + x *= 1.8014398509481984e16; /* 2^54 */ + y *= 1.8014398509481984e16; + scale = 7.450580596923828125e-9; /* 2^-27 */ +#else + x *= 4.0; + y *= 4.0; + scale = 0.5; +#endif + } + w = x + y * I; + r = cabs(w); + if (x > 0) { + t = sqrt(0.5 * r + 0.5 * x); + r = scale * fabs((0.5 * y) / t ); + t *= scale; + } else { + r = sqrt(0.5 * r - 0.5 * x); + t = scale * fabs((0.5 * y) / r); + r *= scale; + } + if (y < 0) + w = t - r * I; + else + w = t + r * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/csqrtf.c b/packages/language/c/libm/current/src/complex/csqrtf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/csqrtf.c @@ -0,0 +1,102 @@ +/* $NetBSD: csqrtf.c,v 1.1 2007/08/20 16:01:37 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +csqrtf(float complex z) +{ + float complex w; + float x, y, r, t, scale; + + x = crealf (z); + y = cimagf (z); + + if (y == 0.0f) { + if (x < 0.0f) { + w = 0.0f + sqrtf(-x) * I; + return w; + } else if (x == 0.0f) { + return (0.0f + y * I); + } else { + w = sqrtf(x) + y * I; + return w; + } + } + + if (x == 0.0f) { + r = fabsf(y); + r = sqrtf(0.5f * r); + if (y > 0) + w = r + r * I; + else + w = r - r * I; + return w; + } + + /* Rescale to avoid internal overflow or underflow. */ + if ((fabsf(x) > 4.0f) || (fabsf(y) > 4.0f)) { + x *= 0.25f; + y *= 0.25f; + scale = 2.0f; + } else { +#if 1 + x *= 6.7108864e7f; /* 2^26 */ + y *= 6.7108864e7f; + scale = 1.220703125e-4f; /* 2^-13 */ +#else + x *= 4.0f; + y *= 4.0f; + scale = 0.5f; +#endif + } + w = x + y * I; + r = cabsf(w); + if( x > 0 ) { + t = sqrtf(0.5f * r + 0.5f * x); + r = scale * fabsf((0.5f * y) / t); + t *= scale; + } else { + r = sqrtf(0.5f * r - 0.5f * x); + t = scale * fabsf((0.5f * y) / r); + r *= scale; + } + + if (y < 0) + w = t - r * I; + else + w = t + r * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ctan.c b/packages/language/c/libm/current/src/complex/ctan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ctan.c @@ -0,0 +1,91 @@ +/* $NetBSD: ctan.c,v 1.1 2007/08/20 16:01:37 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex tangent + +INDEX + ctan +INDEX + ctanf + +ANSI_SYNOPSIS + #include + double complex ctan(double complex <[z]>); + float complex ctanf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex tangent of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex tangent value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include +#include "cephes_subr.h" + +double complex +ctan(double complex z) +{ + double complex w; + double d; + + d = cos(2.0 * creal(z)) + cosh(2.0 * cimag(z)); + + if (fabs(d) < 0.25) + d = _ctans(z); + + if (d == 0.0) { + /* mtherr ("ctan", OVERFLOW); */ + w = HUGE_VAL + HUGE_VAL * I; + return w; + } + + w = sin(2.0 * creal(z)) / d + (sinh(2.0 * cimag(z)) / d) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ctanf.c b/packages/language/c/libm/current/src/complex/ctanf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ctanf.c @@ -0,0 +1,58 @@ +/* $NetBSD: ctanf.c,v 1.1 2007/08/20 16:01:38 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include +#include "cephes_subrf.h" + +float complex +ctanf(float complex z) +{ + float complex w; + float d; + + d = cosf(2.0f * crealf(z)) + coshf(2.0f * cimagf(z)); + + if (fabsf(d) < 0.25f) + d = _ctansf(z); + + if (d == 0.0f) { + /* mtherr ("ctan", OVERFLOW); */ + w = HUGE_VALF + HUGE_VALF * I; + return w; + } + + w = sinf(2.0f * crealf(z)) / d + (sinhf(2.0f * cimagf(z)) / d) * I; + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ctanh.c b/packages/language/c/libm/current/src/complex/ctanh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ctanh.c @@ -0,0 +1,83 @@ +/* $NetBSD: ctanh.c,v 1.1 2007/08/20 16:01:38 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +/* +FUNCTION + <>, <>---complex hyperbolic tangent + +INDEX + ctanh +INDEX + ctanhf + +ANSI_SYNOPSIS + #include + double complex ctanh(double complex <[z]>); + float complex ctanhf(float complex <[z]>); + + +DESCRIPTION + These functions compute the complex hyperbolic tangent of <[z]>. + + <> is identical to <>, except that it performs + its calculations on <>. + +RETURNS + These functions return the complex hyperbolic tangent value. + +PORTABILITY + <> and <> are ISO C99 + +QUICKREF + <> and <> are ISO C99 + +*/ + + +#include +#include + +double complex +ctanh(double complex z) +{ + double complex w; + double x, y, d; + + x = creal(z); + y = cimag(z); + d = cosh(2.0 * x) + cos(2.0 * y); + w = sinh(2.0 * x) / d + (sin(2.0 * y) / d) * I; + + return w; +} diff --git a/packages/language/c/libm/current/src/complex/ctanhf.c b/packages/language/c/libm/current/src/complex/ctanhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/complex/ctanhf.c @@ -0,0 +1,50 @@ +/* $NetBSD: ctanhf.c,v 1.1 2007/08/20 16:01:38 drochner Exp $ */ + +/*- + * Copyright (c) 2007 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software written by Stephen L. Moshier. + * It is redistributed by the NetBSD Foundation by permission of the author. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * imported and modified include for newlib 2010/10/03 + * Marco Atzeri + */ + +#include +#include + +float complex +ctanhf(float complex z) +{ + float complex w; + float x, y, d; + + x = crealf(z); + y = cimagf(z); + d = coshf(2.0f * x) + cosf(2.0f * y); + w = sinhf(2.0f * x) / d + (sinf(2.0f * y) / d) * I; + + return w; +} diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_acos.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_acos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_acos.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// wf_acos.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrap_acosf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef _HAVE_STDC + float acosf(float x) /* wrapper acosf */ +#else + float acosf(x) /* wrapper acosf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_acosf(x); +#else + float z; + + z = __ieee754_acosf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(fabsf(x)>(float)1.0) { + return __kernel_standard_float(x,x,1); /* acos(|x|>1) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_acos.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_acosh.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_acosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_acosh.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// wf_acosh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* + * wrapper acoshf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float acoshf(float x) /* wrapper acoshf */ +#else + float acoshf(x) /* wrapper acoshf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_acoshf(x); +#else + float z; + z = __ieee754_acoshf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(x<1.0) { + return __kernel_standard(x,x,29); /* acosh(x<1) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_acosh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_asin.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_asin.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_asin.c @@ -0,0 +1,104 @@ +//=========================================================================== +// +// wf_asin.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* + * wrapper asinf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float asinf(float x) /* wrapper asinf */ +#else + float asinf(x) /* wrapper asinf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_asinf(x); +#else + float z; + + z = __ieee754_asinf(x); + if( cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(fabsf(x)>(float)1.0) { + return __kernel_standard_float(x,x,2); /* asin(|x|>1) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_asin.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_atan2.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_atan2.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_atan2.c @@ -0,0 +1,93 @@ +//=========================================================================== +// +// wf_atan2.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* + * wrapper atan2f(y,x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float atan2f(float y, float x) /* wrapper atan2f */ +#else + float atan2f(y,x) /* wrapper atan2 */ + float y,x; +#endif +{ + return __ieee754_atan2f(y,x); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_atan2.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_atanh.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_atanh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_atanh.c @@ -0,0 +1,105 @@ +//=========================================================================== +// +// wf_atanh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ +/* + * wrapper atanhf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float atanhf(float x) /* wrapper atanhf */ +#else + float atanhf(x) /* wrapper atanhf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_atanhf(x); +#else + float z,y; + z = __ieee754_atanhf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + y = fabs(x); + if(y>=1.0) { + if(y>1.0) + return __kernel_standard(x,x,30); /* atanh(|x|>1) */ + else + return __kernel_standard(x,x,31); /* atanh(|x|==1) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_atanh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_cosh.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_cosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_cosh.c @@ -0,0 +1,102 @@ +//=========================================================================== +// +// wf_cosh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper coshf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float coshf(float x) /* wrapper coshf */ +#else + float coshf(x) /* wrapper coshf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_coshf(x); +#else + float z; + z = __ieee754_coshf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(fabsf(x)>(float)8.9415985107e+01) { + return __kernel_standard(x,x,5); /* cosh overflow */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_cosh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_exp.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_exp.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_exp.c @@ -0,0 +1,114 @@ +//=========================================================================== +// +// wf_exp.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper expf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +o_threshold= 8.8721679688e+01, /* 0x42b17180 */ +u_threshold= -1.0397208405e+02; /* 0xc2cff1b5 */ + +#ifdef __STDC__ + float expf(float x) /* wrapper expf */ +#else + float expf(x) /* wrapper expf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_expf(x); +#else + float z; + //struct exception exc; + z = __ieee754_expf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if(finitef(x)) { + if(x>o_threshold) + return __kernel_standard(x,x,6); /* exp overflow */ + else if(x // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper fmodf(x,y) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float fmodf(float x, float y) /* wrapper fmodf */ +#else + float fmodf(x,y) /* wrapper fmodf */ + float x,y; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_fmodf(x,y); +#else + float z; + z = __ieee754_fmodf(x,y); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE ||isnanf(y)||isnanf(x)) return z; + if(y==0.0) { + return __kernel_standard(x,y,27); /* fmod(x,0) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_fmod.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// wf_gamma.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float gammaf(float x) +#else + float gammaf(x) + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_gammaf_r(x,&signgam); +#else + float y; + y = __ieee754_gammaf_r(x,&signgam); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return y; + if(!finitef(y)&&finitef(x)) { + if(floorf(x)==x&&x<=0.0) + return __kernel_standard(x,x,41); /* gamma pole */ + else + return __kernel_standard(x,x,40); /* gamma overflow */ + } else + return y; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_gamma.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma_r.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma_r.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_gamma_r.c @@ -0,0 +1,106 @@ +//=========================================================================== +// +// wf_gamma_r.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper float gammaf_r(float x, int *signgamp) + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float gammaf_r(float x, int *signgamp) /* wrapper lgammaf_r */ +#else + float gammaf_r(x,signgamp) /* wrapper lgammaf_r */ + float x; int *signgamp; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_gammaf_r(x,signgamp); +#else + float y; + y = __ieee754_gammaf_r(x,signgamp); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return y; + if(!finitef(y)&&finitef(x)) { + if(floorf(x)==x&&x<=0.0) + return __kernel_standard(x,x,41); /* gamma pole */ + else + return __kernel_standard(x,x,40); /* gamma overflow */ + } else + return y; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_gamma_r.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_hypot.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_hypot.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_hypot.c @@ -0,0 +1,102 @@ +//=========================================================================== +// +// wf_hypot.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper hypotf(x,y) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float hypotf(float x, float y) /* wrapper hypotf */ +#else + float hypotf(x,y) /* wrapper hypotf */ + float x,y; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_hypotf(x,y); +#else + float z; + z = __ieee754_hypotf(x,y); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if((!finitef(z))&&finitef(x)&&finitef(y)) + return __kernel_standard(x,y,4); /* hypot overflow */ + else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_hypot.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_j0.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_j0.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_j0.c @@ -0,0 +1,129 @@ +//=========================================================================== +// +// w_j0.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper j0f(float x), y0f(float x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float j0f(float x) /* wrapper j0f */ +#else + float j0f(x) /* wrapper j0f */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_j0f(x); +#else + float z = __ieee754_j0f(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(fabsf(x)>(float)X_TLOSS) { + return __kernel_standard(x,x,34); /* j0(|x|>X_TLOSS) */ + } else + return z; +#endif +} + +#ifdef __STDC__ + float y0f(float x) /* wrapper y0f */ +#else + float y0f(x) /* wrapper y0f */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_y0f(x); +#else + float z; + z = __ieee754_y0f(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,8); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,9); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,35); /* y0(x>X_TLOSS) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_j0.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_j1.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_j1.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_j1.c @@ -0,0 +1,130 @@ +//=========================================================================== +// +// wf_j1.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper of j1f,y1f + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float j1f(float x) /* wrapper j1f */ +#else + float j1f(x) /* wrapper j1f */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_j1f(x); +#else + float z; + z = __ieee754_j1f(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x) ) return z; + if(fabs(x)>X_TLOSS) { + return __kernel_standard(x,x,36); /* j1(|x|>X_TLOSS) */ + } else + return z; +#endif +} + +#ifdef __STDC__ + float y1f(float x) /* wrapper y1f */ +#else + float y1f(x) /* wrapper y1f */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_y1f(x); +#else + float z; + z = __ieee754_y1f(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard(x,x,10); + else + /* d = zero/(x-x); */ + return __kernel_standard(x,x,11); + } + if(x>X_TLOSS) { + return __kernel_standard(x,x,37); /* y1(x>X_TLOSS) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_j1.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_jn.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_jn.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_jn.c @@ -0,0 +1,117 @@ +//=========================================================================== +// +// wf_jn.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include "mathincl/fdlibm.h" + + float jnf(int n, float x) /* wrapper jnf */ +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_jnf(n,x); +#else + float z; + z = __ieee754_jnf(n,x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x) ) return z; + if(fabsf(x)>(float)X_TLOSS) { + return __kernel_standard((double)n,x,38); /* jn(|x|>X_TLOSS,n) */ + } else + return z; +#endif +} + + + float ynf(int n, float x) /* wrapper ynf */ +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_ynf(n,x); +#else + float z; + z = __ieee754_ynf(n,x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x) ) return z; + if(x <= 0.0){ + if(x==0.0) + /* d= -one/(x-x); */ + return __kernel_standard((double)n,x,12); + else + /* d = zero/(x-x); */ + return __kernel_standard((double)n,x,13); + } + if(x>X_TLOSS) { + return __kernel_standard((double)n,x,39); /* yn(x>X_TLOSS,n) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_jn.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// wf_lgamma.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float lgammaf(float x) +#else + float lgammaf(x) + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_lgammaf_r(x,&signgam); +#else + float y; + y = __ieee754_lgammaf_r(x,&signgam); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return y; + if(!finitef(y)&&finitef(x)) { + if(floorf(x)==x&&x<=0.0) + return __kernel_standard(x,x,15); /* lgamma pole */ + else + return __kernel_standard(x,x,14); /* lgamma overflow */ + } else + return y; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_lgamma.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma_r.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma_r.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_lgamma_r.c @@ -0,0 +1,105 @@ +//=========================================================================== +// +// w_lgamma_r.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper float lgammaf_r(float x, int *signgamp) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float lgammaf_r(float x, int *signgamp) /* wrapper lgammaf_r */ +#else + float lgammaf_r(x,signgamp) /* wrapper lgammaf_r */ + float x; int *signgamp; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_lgammaf_r(x,signgamp); +#else + float y; + y = __ieee754_lgammaf_r(x,signgamp); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return y; + if(!finitef(y)&&finitef(x)) { + if(floorf(x)==x&&x<=0.0) + return __kernel_standard(x,x,15); /* lgamma pole */ + else + return __kernel_standard(x,x,14); /* lgamma overflow */ + } else + return y; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_lgamma_r.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_log.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_log.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_log.c @@ -0,0 +1,102 @@ +//=========================================================================== +// +// wf_log.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper logf(x) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float logf(float x) /* wrapper logf */ +#else + float logf(x) /* wrapper logf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_logf(x); +#else + float z; + z = __ieee754_logf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnan(x) || x > 0.0) return z; + if(x==0.0) + return __kernel_standard_float(x,x,16); /* log(0) */ + else + return __kernel_standard_float(x,x,17); /* log(x<0) */ +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_log.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_log10.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_log10.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_log10.c @@ -0,0 +1,111 @@ +//=========================================================================== +// +// w_log10.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper log10f(X) + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float log10f(float x) /* wrapper log10f */ +#else + float log10f(x) /* wrapper log10f */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_log10f(x); +#else + float z; + cyg_uint32 compat_mode = cyg_libm_get_compat_mode(); + + z = __ieee754_log10f(x); + if( +#ifdef CYGOPT_LIBM_COMPAT_POSIX_IEEE + compat_mode == CYGNUM_LIBM_COMPAT_POSIX || +#endif + compat_mode == CYGNUM_LIBM_COMPAT_IEEE || isnanf(x)) return z; + if(x<=0.0) { + if(x==0.0) + return __kernel_standard(x,x,18); /* log10(0) */ + else + return __kernel_standard(x,x,19); /* log10(x<0) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_log10.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_pow.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_pow.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_pow.c @@ -0,0 +1,119 @@ +//======================================================================== +// +// wf_pow.c +// +// Part of the standard mathematical function library +// +//======================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//======================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper powf(x,y) return x**y + */ + +#include "mathincl/fdlibm.h" + + float powf(float x, float y) /* wrapper powf */ +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_powf(x,y); +#else + float z; + z=__ieee754_powf(x,y); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE|| + isnan(y)) + return z; + if(isnan(x)) { + if(y==0.0) + return __kernel_standard(x,y,42); /* pow(NaN,0.0) */ + else + return z; + } + if(x==0.0){ + if(y==0.0) + return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ + if(finitef(y)&&y<0.0) + return __kernel_standard(x,y,23); /* pow(0.0,negative) */ + return z; + } + if(!finitef(z)) { + if(finitef(x)&&finitef(y)) { + if(isnan(z)) + return __kernel_standard(x,y,24);/* pow neg**non-int */ + else + return __kernel_standard(x,y,21); /* pow overflow */ + } + } + if(z==0.0&&finitef(x)&&finitef(y)) + return __kernel_standard(x,y,22); /* pow underflow */ + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_pow.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_remainder.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_remainder.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_remainder.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// wf_remainder.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper remainderf(x,p) + */ + +#include "mathincl/fdlibm.h" +//#include + +#ifdef __STDC__ + float remainderf(float x, float y) /* wrapper remainder */ +#else + float remainderf(x,y) /* wrapper remainder */ + float x,y; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_remainderf(x,y); +#else + double z; + z = __ieee754_remainderf(x,y); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnanf(y)) return z; + if(y==0.0) + return __kernel_standard(x,y,28); /* remainder(x,0) */ + else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_remainder.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_scalb.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_scalb.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_scalb.c @@ -0,0 +1,124 @@ +//=========================================================================== +// +// wf_scalb.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper scalbf(float x, float fn) is provide for + * passing various standard test suite. One + * should use scalbn() instead. + */ + +// CONFIGURATION + + +#include "mathincl/fdlibm.h" +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY +# include +#endif + +#ifdef __STDC__ +#ifdef CYGFUN_LIBM_SVID3_scalb + float scalbf(float x, float fn) /* wrapper scalbf */ +#else + float scalbf(float x, int fn) /* wrapper scalbf */ +#endif +#else + float scalbf(x,fn) /* wrapper scalbf */ +#ifdef CYGFUN_LIBM_SVID3_scalb + float x,fn; +#else + float x; int fn; +#endif +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_scalbf(x,fn); +#else + double z; + z = __ieee754_scalbf(x,fn); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if(!(finitef(z)||isnanf(z))&&finitef(x)) { + return __kernel_standard(x,(double)fn,32); /* scalb overflow */ + } + if(z==0.0&&z!=x) { + return __kernel_standard(x,(double)fn,33); /* scalb underflow */ + } +#ifdef CYGFUN_LIBM_SVID3_scalb + if(!finitef(fn)) errno = ERANGE; +#endif + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_scalb.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_sinh.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_sinh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_sinh.c @@ -0,0 +1,104 @@ +//=========================================================================== +// +// wf_sinh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper sinhf(x) + */ + +// CONFIGURATION + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float sinhf(float x) /* wrapper sinhf */ +#else + float sinhf(x) /* wrapper sinhf */ + float x; +#endif +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_sinhf(x); +#else + float z; + z = __ieee754_sinhf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if(!finitef(z)&&finitef(x)) { + return __kernel_standard(x,x,25); /* sinh overflow */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_sinh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-api/wf_sqrt.c b/packages/language/c/libm/current/src/float/ieee754-api/wf_sqrt.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-api/wf_sqrt.c @@ -0,0 +1,98 @@ +//=========================================================================== +// +// wf_sqrt.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * wrapper sqrtf(x) + */ + +#include "mathincl/fdlibm.h" + +float sqrtf(float x) /* wrapper sqrtf */ + +{ +#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY + return __ieee754_sqrtf(x); +#else + float z; + z = __ieee754_sqrtf(x); + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || isnan(x)) return z; + if(x<0.0) { + return __kernel_standard(x,x,26); /* sqrt(negative) */ + } else + return z; +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF wf_sqrtf.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_acos.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_acos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_acos.c @@ -0,0 +1,151 @@ +//=========================================================================== +// +// ef_acos.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_acos.c -- float version of e_acos.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0000000000e+00, /* 0x3F800000 */ +pi = 3.1415925026e+00, /* 0x40490fda */ +pio2_hi = 1.5707962513e+00, /* 0x3fc90fda */ +pio2_lo = 7.5497894159e-08, /* 0x33a22168 */ +pS0 = 1.6666667163e-01, /* 0x3e2aaaab */ +pS1 = -3.2556581497e-01, /* 0xbea6b090 */ +pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */ +pS3 = -4.0055535734e-02, /* 0xbd241146 */ +pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */ +pS5 = 3.4793309169e-05, /* 0x3811ef08 */ +qS1 = -2.4033949375e+00, /* 0xc019d139 */ +qS2 = 2.0209457874e+00, /* 0x4001572d */ +qS3 = -6.8828397989e-01, /* 0xbf303361 */ +qS4 = 7.7038154006e-02; /* 0x3d9dc62e */ + +#ifdef __STDC__ + float __ieee754_acosf(float x) +#else + float __ieee754_acosf(x) + float x; +#endif +{ + float z,p,q,r,w,s,c,df; + __int32_t hx,ix; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(ix==0x3f800000) { /* |x|==1 */ + if(hx>0) return 0.0; /* acos(1) = 0 */ + else return pi+(float)2.0*pio2_lo; /* acos(-1)= pi */ + } else if(ix>0x3f800000) { /* |x| >= 1 */ + return (x-x)/(x-x); /* acos(|x|>1) is NaN */ + } + if(ix<0x3f000000) { /* |x| < 0.5 */ + if(ix<=0x23000000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/ + z = x*x; + p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); + q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); + r = p/q; + return pio2_hi - (x - (pio2_lo-x*r)); + } else if (hx<0) { /* x < -0.5 */ + z = (one+x)*(float)0.5; + p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); + q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); + s = __ieee754_sqrtf(z); + r = p/q; + w = r*s-pio2_lo; + return pi - (float)2.0*(s+w); + } else { /* x > 0.5 */ + __int32_t idf; + z = (one-x)*(float)0.5; + s = __ieee754_sqrtf(z); + df = s; + idf = CYG_LIBM_WORD(df); + SET_FLOAT_WORD(df,idf&0xfffff000); + c = (z-df*df)/(s+df); + p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); + q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); + r = p/q; + w = r*s+c; + return (float)2.0*(df+w); + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_acos.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_acosh.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_acosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_acosh.c @@ -0,0 +1,120 @@ +//=========================================================================== +// +// ef_acosh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_acosh.c -- float version of e_acosh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0, +ln2 = 6.9314718246e-01; /* 0x3f317218 */ + +#ifdef __STDC__ + float __ieee754_acoshf(float x) +#else + float __ieee754_acoshf(x) + float x; +#endif +{ + float t; + __int32_t hx; + hx = CYG_LIBM_WORD(x); + if(hx<0x3f800000) { /* x < 1 */ + return (x-x)/(x-x); + } else if(hx >=0x4d800000) { /* x > 2**28 */ + if(!FLT_UWORD_IS_FINITE(hx)) { /* x is inf of NaN */ + return x+x; + } else + return __ieee754_logf(x)+ln2; /* acosh(huge)=log(2x) */ + } else if (hx==0x3f800000) { + return 0.0; /* acosh(1) = 0 */ + } else if (hx > 0x40000000) { /* 2**28 > x > 2 */ + t=x*x; + return __ieee754_logf((float)2.0*x-one/(x+__ieee754_sqrtf(t-one))); + } else { /* 1 // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0000000000e+00, /* 0x3F800000 */ +huge = 1.000e+30, +pio2_hi = 1.57079637050628662109375f, +pio2_lo = -4.37113900018624283e-8f, +pio4_hi = 0.785398185253143310546875f, + /* coefficient for R(x^2) */ +pS0 = 1.6666667163e-01, /* 0x3e2aaaab */ +pS1 = -3.2556581497e-01, /* 0xbea6b090 */ +pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */ +pS3 = -4.0055535734e-02, /* 0xbd241146 */ +pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */ +pS5 = 3.4793309169e-05, /* 0x3811ef08 */ +qS1 = -2.4033949375e+00, /* 0xc019d139 */ +qS2 = 2.0209457874e+00, /* 0x4001572d */ +qS3 = -6.8828397989e-01, /* 0xbf303361 */ +qS4 = 7.7038154006e-02; /* 0x3d9dc62e */ + +#ifdef __STDC__ + float __ieee754_asinf(float x) +#else + float __ieee754_asinf(x) + float x; +#endif +{ + float t,w,p,q,c,r,s; + __int32_t hx,ix; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(ix==0x3f800000) { + /* asin(1)=+-pi/2 with inexact */ + return x*pio2_hi+x*pio2_lo; + } else if(ix> 0x3f800000) { /* |x|>= 1 */ + return (x-x)/(x-x); /* asin(|x|>1) is NaN */ + } else if (ix<0x3f000000) { /* |x|<0.5 */ + if(ix<0x32000000) { /* if |x| < 2**-27 */ + if(huge+x>one) return x;/* return x with inexact if x!=0*/ + } else { + t = x*x; + p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); + q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); + w = p/q; + return x+x*w; + } + } + /* 1> |x|>= 0.5 */ + w = one-fabsf(x); + t = w*(float)0.5; + p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); + q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); + s = __ieee754_sqrtf(t); + if(ix>=0x3F79999A) { /* if |x| > 0.975 */ + w = p/q; + t = pio2_hi-((float)2.0*(s+s*w)-pio2_lo); + } else { + __int32_t iw; + w = s; + iw = CYG_LIBM_WORD(w); + SET_FLOAT_WORD(w,iw&0xfffff000); + c = (t-w*w)/(s+w); + r = p/q; + p = (float)2.0*s*r-(pio2_lo-(float)2.0*c); + q = pio4_hi-(float)2.0*w; + t = pio4_hi-(p-q); + } + if(hx>0) return t; else return -t; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_asin.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_atan2.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_atan2.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_atan2.c @@ -0,0 +1,167 @@ +//=========================================================================== +// +// e_atan2.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_atan2.c -- float version of e_atan2.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +tiny = 1.0e-30, +zero = 0.0, +pi_o_4 = 7.8539818525e-01, /* 0x3f490fdb */ +pi_o_2 = 1.5707963705e+00, /* 0x3fc90fdb */ +pi = 3.1415927410e+00, /* 0x40490fdb */ +pi_lo = -8.7422776573e-08; /* 0xb3bbbd2e */ + +#ifdef __STDC__ + float __ieee754_atan2f(float y, float x) +#else + float __ieee754_atan2f(y,x) + float y,x; +#endif +{ + float z; + __int32_t k,m,hx,hy,ix,iy; + + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + hy = CYG_LIBM_WORD(y); + iy = hy&0x7fffffff; + if(FLT_UWORD_IS_NAN(ix)|| + FLT_UWORD_IS_NAN(iy)) /* x or y is NaN */ + return x+y; + if(hx==0x3f800000) return atanf(y); /* x=1.0 */ + m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ + + /* when y = 0 */ + if(FLT_UWORD_IS_ZERO(iy)) { + switch(m) { + case 0: + case 1: return y; /* atan(+-0,+anything)=+-0 */ + case 2: return pi+tiny;/* atan(+0,-anything) = pi */ + case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if(FLT_UWORD_IS_ZERO(ix)) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; + + /* when x is INF */ + if(FLT_UWORD_IS_INFINITE(ix)) { + if(FLT_UWORD_IS_INFINITE(iy)) { + switch(m) { + case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ + case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ + case 2: return (float)3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/ + case 3: return (float)-3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/ + } + } else { + switch(m) { + case 0: return zero ; /* atan(+...,+INF) */ + case 1: return -zero ; /* atan(-...,+INF) */ + case 2: return pi+tiny ; /* atan(+...,-INF) */ + case 3: return -pi-tiny ; /* atan(-...,-INF) */ + } + } + } + /* when y is INF */ + if(FLT_UWORD_IS_INFINITE(iy)) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; + + /* compute y/x */ + k = (iy-ix)>>23; + if(k > 60) z=pi_o_2+(float)0.5*pi_lo; /* |y/x| > 2**60 */ + else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */ + else z=atanf(fabsf(y/x)); /* safe to do y/x */ + switch (m) { + case 0: return z ; /* atan(+,+) */ + case 1: { + __uint32_t zh; + zh = CYG_LIBM_WORD(z); + SET_FLOAT_WORD(z,zh ^ 0x80000000); + } + return z ; /* atan(-,+) */ + case 2: return pi-(z-pi_lo);/* atan(+,-) */ + default: /* case 3 */ + return (z-pi_lo)-pi;/* atan(-,-) */ + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_atan2.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_atanh.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_atanh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_atanh.c @@ -0,0 +1,121 @@ +//=========================================================================== +// +// ef_atanh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_atanh.c -- float version of e_atanh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one = 1.0, huge = 1e30; +#else +static float one = 1.0, huge = 1e30; +#endif + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float __ieee754_atanhf(float x) +#else + float __ieee754_atanhf(x) + float x; +#endif +{ + float t; + __int32_t hx,ix; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if (ix>0x3f800000) /* |x|>1 */ + return (x-x)/(x-x); + if(ix==0x3f800000) + return x/zero; + if(ix<0x31800000&&(huge+x)>zero) return x; /* x<2**-28 */ + SET_FLOAT_WORD(x,ix); + if(ix<0x3f000000) { /* x < 0.5 */ + t = x+x; + t = (float)0.5*log1pf(t+t*x/(one-x)); + } else + t = (float)0.5*log1pf((x+x)/(one-x)); + if(hx>=0) return t; else return -t; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_atanh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_cosh.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_cosh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_cosh.c @@ -0,0 +1,134 @@ +//=========================================================================== +// +// ef_cosh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_cosh.c -- float version of e_cosh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one = 1.0, half=0.5, huge = 1.0e30; +#else +static float one = 1.0, half=0.5, huge = 1.0e30; +#endif + +#ifdef __STDC__ + float __ieee754_coshf(float x) +#else + float __ieee754_coshf(x) + float x; +#endif +{ + float t,w; + __int32_t ix; + + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + + /* x is INF or NaN */ + if(!FLT_UWORD_IS_FINITE(ix)) return x*x; + + /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ + if(ix<0x3eb17218) { + t = expm1f(fabsf(x)); + w = one+t; + if (ix<0x24000000) return w; /* cosh(tiny) = 1 */ + return one+(t*t)/(w+w); + } + + /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */ + if (ix < 0x41b00000) { + t = __ieee754_expf(fabsf(x)); + return half*t+half/t; + } + + /* |x| in [22, log(maxdouble)] return half*exp(|x|) */ + if (ix <= FLT_UWORD_LOG_MAX) + return half*__ieee754_expf(fabsf(x)); + + /* |x| in [log(maxdouble), overflowthresold] */ + if (ix <= FLT_UWORD_LOG_2MAX) { + w = __ieee754_expf(half*fabsf(x)); + t = half*w; + return t*w; + } + + /* |x| > overflowthresold, cosh(x) overflow */ + return huge*huge; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_cosh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_exp.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_exp.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_exp.c @@ -0,0 +1,165 @@ +//=========================================================================== +// +// ef_exp.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_exp.c -- float version of e_exp.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0, +halF[2] = {0.5,-0.5,}, +huge = 1.0e+30, +twom100 = 7.8886090522e-31, /* 2**-100=0x0d800000 */ +ln2HI[2] ={ 6.9313812256e-01, /* 0x3f317180 */ + -6.9313812256e-01,}, /* 0xbf317180 */ +ln2LO[2] ={ 9.0580006145e-06, /* 0x3717f7d1 */ + -9.0580006145e-06,}, /* 0xb717f7d1 */ +invln2 = 1.4426950216e+00, /* 0x3fb8aa3b */ +P1 = 1.6666667163e-01, /* 0x3e2aaaab */ +P2 = -2.7777778450e-03, /* 0xbb360b61 */ +P3 = 6.6137559770e-05, /* 0x388ab355 */ +P4 = -1.6533901999e-06, /* 0xb5ddea0e */ +P5 = 4.1381369442e-08; /* 0x3331bb4c */ + +#ifdef __STDC__ + float __ieee754_expf(float x) /* default IEEE double exp */ +#else + float __ieee754_expf(x) /* default IEEE double exp */ + float x; +#endif +{ + float y,hi,lo,c,t; + __int32_t k,xsb,sx; + __uint32_t hx; + + sx = CYG_LIBM_WORD(x); + xsb = (sx>>31)&1; /* sign bit of x */ + hx = sx & 0x7fffffff; /* high word of |x| */ + + /* filter out non-finite argument */ + if(FLT_UWORD_IS_NAN(hx)) + return x+x; /* NaN */ + if(FLT_UWORD_IS_INFINITE(hx)) + return (xsb==0)? x:0.0; /* exp(+-inf)={inf,0} */ + if(sx > FLT_UWORD_LOG_MAX) + return huge*huge; /* overflow */ + if(sx < 0 && hx > FLT_UWORD_LOG_MIN) + return twom100*twom100; /* underflow */ + + /* argument reduction */ + if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ + if(hx < 0x3F851592) { /* and |x| < 1.5 ln2 */ + hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb; + } else { + k = invln2*x+halF[xsb]; + t = k; + hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */ + lo = t*ln2LO[0]; + } + x = hi - lo; + } + else if(hx < 0x31800000) { /* when |x|<2**-28 */ + if(huge+x>one) + return one+x;/* trigger inexact */ + else // VAE + k = 0; + } + else k = 0; + + /* x is now in primary range */ + t = x*x; + c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); + if(k==0) return one-((x*c)/(c-(float)2.0)-x); + else y = one-((lo-(x*c)/((float)2.0-c))-hi); + if(k >= -125) { + __uint32_t hy; + hy = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y,hy+(k<<23)); /* add k to y's exponent */ + return y; + } else { + __uint32_t hy; + hy = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y,hy+((k+100)<<23)); /* add k to y's exponent */ + return y*twom100; + } +} +#endif // ifdef CYGPKG_LIBM + +// EOF ef_exp.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_fmod.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_fmod.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_fmod.c @@ -0,0 +1,180 @@ +//=========================================================================== +// +// ef_fmod.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_fmod.c -- float version of e_fmod.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * __ieee754_fmodf(x,y) + * Return x mod y in exact arithmetic + * Method: shift and subtract + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one = 1.0, Zero[] = {0.0, -0.0,}; +#else +static float one = 1.0, Zero[] = {0.0, -0.0,}; +#endif + +#ifdef __STDC__ + float __ieee754_fmodf(float x, float y) +#else + float __ieee754_fmodf(x,y) + float x,y ; +#endif +{ + __int32_t n,hx,hy,hz,ix,iy,sx,i; + + hx = CYG_LIBM_WORD(x); + hy = CYG_LIBM_WORD(y); + sx = hx&0x80000000; /* sign of x */ + hx ^=sx; /* |x| */ + hy &= 0x7fffffff; /* |y| */ + + /* purge off exception values */ + if(FLT_UWORD_IS_ZERO(hy)|| + !FLT_UWORD_IS_FINITE(hx)|| + FLT_UWORD_IS_NAN(hy)) + return (x*y)/(x*y); + if(hx>31]; /* |x|=|y| return x*0*/ + + /* Note: y cannot be zero if we reach here. */ + + /* determine ix = ilogb(x) */ + if(FLT_UWORD_IS_SUBNORMAL(hx)) { /* subnormal x */ + for (ix = -126,i=(hx<<8); i>0; i<<=1) ix -=1; + } else ix = (hx>>23)-127; + + /* determine iy = ilogb(y) */ + if(FLT_UWORD_IS_SUBNORMAL(hy)) { /* subnormal y */ + for (iy = -126,i=(hy<<8); i>=0; i<<=1) iy -=1; + } else iy = (hy>>23)-127; + + /* set up {hx,lx}, {hy,ly} and align y to x */ + if(ix >= -126) + hx = 0x00800000|(0x007fffff&hx); + else { /* subnormal x, shift x to normal */ + n = -126-ix; + hx = hx<= -126) + hy = 0x00800000|(0x007fffff&hy); + else { /* subnormal y, shift y to normal */ + n = -126-iy; + hy = hy<>31]; + hx = hz+hz; + } + } + hz=hx-hy; + if(hz>=0) {hx=hz;} + + /* convert back to floating value and restore the sign */ + if(hx==0) /* return sign(x)*0 */ + return Zero[(__uint32_t)sx>>31]; + while(hx<0x00800000) { /* normalize x */ + hx = hx+hx; + iy -= 1; + } + if(iy>= -126) { /* normalize output */ + hx = ((hx-0x00800000)|((iy+127)<<23)); + SET_FLOAT_WORD(x,hx|sx); + } else { /* subnormal output */ + /* If denormals are not supported, this code will generate a + zero representation. */ + n = -126 - iy; + hx >>= n; + SET_FLOAT_WORD(x,hx|sx); + x *= one; /* create necessary signal */ + } + return x; /* exact output */ +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_fmod.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma.c @@ -0,0 +1,93 @@ +//=========================================================================== +// +// ef_gamma.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* @(#)ef_gamma.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* __ieee754_gamma(x) + * Return the logarithm of the Gamma function of x. + * + * Method: call __ieee754_gamma_r + */ + +#include +#include "mathincl/fdlibm.h" + +float +__ieee754_gammaf(float x) +{ + return __ieee754_gammaf_r(x,&signgam); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_gamma.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma_r.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma_r.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_gamma_r.c @@ -0,0 +1,106 @@ +//=========================================================================== +// +// ef_gamma_r.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + +/* erf_gamma.c -- float version of er_gamma.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* __ieee754_gammaf_r(x, signgamp) + * Reentrant version of the logarithm of the Gamma function + * with user provide pointer for the sign of Gamma(x). + * + * Method: See __ieee754_lgammaf_r + */ + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float __ieee754_gammaf_r(float x, int *signgamp) +#else + float __ieee754_gammaf_r(x,signgamp) + float x; int *signgamp; +#endif +{ + return __ieee754_lgammaf_r(x,signgamp); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_gamma_r.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_hypot.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_hypot.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_hypot.c @@ -0,0 +1,149 @@ +//=========================================================================== +// +// ef_hypot.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_hypot.c -- float version of e_hypot.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float __ieee754_hypotf(float x, float y) +#else + float __ieee754_hypotf(x,y) + float x, y; +#endif +{ + float a=x,b=y,t1,t2,y1,y2,w; + __int32_t j,k,ha,hb; + + ha = CYG_LIBM_WORD(x); + ha &= 0x7fffffffL; + hb = CYG_LIBM_WORD(y); + hb &= 0x7fffffffL; + if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} + SET_FLOAT_WORD(a,ha); /* a <- |a| */ + SET_FLOAT_WORD(b,hb); /* b <- |b| */ + if((ha-hb)>0xf000000L) {return a+b;} /* x/y > 2**30 */ + k=0; + if(ha > 0x58800000L) { /* a>2**50 */ + if(!FLT_UWORD_IS_FINITE(ha)) { /* Inf or NaN */ + w = a+b; /* for sNaN */ + if(FLT_UWORD_IS_INFINITE(ha)) w = a; + if(FLT_UWORD_IS_INFINITE(hb)) w = b; + return w; + } + /* scale a and b by 2**-68 */ + ha -= 0x22000000L; hb -= 0x22000000L; k += 68; + SET_FLOAT_WORD(a,ha); + SET_FLOAT_WORD(b,hb); + } + if(hb < 0x26800000L) { /* b < 2**-50 */ + if(FLT_UWORD_IS_ZERO(hb)) { + return a; + } else if(FLT_UWORD_IS_SUBNORMAL(hb)) { + SET_FLOAT_WORD(t1,0x7e800000L); /* t1=2^126 */ + b *= t1; + a *= t1; + k -= 126; + } else { /* scale a and b by 2^68 */ + ha += 0x22000000; /* a *= 2^68 */ + hb += 0x22000000; /* b *= 2^68 */ + k -= 68; + SET_FLOAT_WORD(a,ha); + SET_FLOAT_WORD(b,hb); + } + } + /* medium size a and b */ + w = a-b; + if (w>b) { + SET_FLOAT_WORD(t1,ha&0xfffff000L); + t2 = a-t1; + w = __ieee754_sqrtf(t1*t1-(b*(-b)-t2*(a+t1))); + } else { + a = a+a; + SET_FLOAT_WORD(y1,hb&0xfffff000L); + y2 = b - y1; + SET_FLOAT_WORD(t1,ha+0x00800000L); + t2 = a - t1; + w = __ieee754_sqrtf(t1*y1-(w*(-w)-(t1*y2+t2*b))); + } + if(k!=0) { + SET_FLOAT_WORD(t1,0x3f800000L+(k<<23)); + return t1*w; + } else return w; +} +#endif // ifdef CYGPKG_LIBM + +// EOF ef_hypot.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_j0.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_j0.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_j0.c @@ -0,0 +1,506 @@ +//=========================================================================== +// +// ef_j0.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_j0.c -- float version of e_j0.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static float pzerof(float), qzerof(float); +#else +static float pzerof(), qzerof(); +#endif + +#ifdef __STDC__ +static const float +#else +static float +#endif +huge = 1e30, +one = 1.0, +invsqrtpi= 5.6418961287e-01, /* 0x3f106ebb */ +tpi = 6.3661974669e-01, /* 0x3f22f983 */ + /* R0/S0 on [0, 2.00] */ +R02 = 1.5625000000e-02, /* 0x3c800000 */ +R03 = -1.8997929874e-04, /* 0xb947352e */ +R04 = 1.8295404516e-06, /* 0x35f58e88 */ +R05 = -4.6183270541e-09, /* 0xb19eaf3c */ +S01 = 1.5619102865e-02, /* 0x3c7fe744 */ +S02 = 1.1692678527e-04, /* 0x38f53697 */ +S03 = 5.1354652442e-07, /* 0x3509daa6 */ +S04 = 1.1661400734e-09; /* 0x30a045e8 */ + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float __ieee754_j0f(float x) +#else + float __ieee754_j0f(x) + float x; +#endif +{ + float z, s,c,ss,cc,r,u,v; + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(!FLT_UWORD_IS_FINITE(ix)) return one/(x*x); + x = fabsf(x); + if(ix >= 0x40000000) { /* |x| >= 2.0 */ + s = sinf(x); + c = cosf(x); + ss = s-c; + cc = s+c; + if(ix<=FLT_UWORD_HALF_MAX) { /* make sure x+x not overflow */ + z = -cosf(x+x); + if ((s*c)0x80000000) z = (invsqrtpi*cc)/__ieee754_sqrtf(x); + else { + u = pzerof(x); v = qzerof(x); + z = invsqrtpi*(u*cc-v*ss)/__ieee754_sqrtf(x); + } + return z; + } + if(ix<0x39000000) { /* |x| < 2**-13 */ + if(huge+x>one) { /* raise inexact if x != 0 */ + if(ix<0x32000000) return one; /* |x|<2**-27 */ + else return one - (float)0.25*x*x; + } + } + z = x*x; + r = z*(R02+z*(R03+z*(R04+z*R05))); + s = one+z*(S01+z*(S02+z*(S03+z*S04))); + if(ix < 0x3F800000) { /* |x| < 1.00 */ + return one + z*((float)-0.25+(r/s)); + } else { + u = (float)0.5*x; + return((one+u)*(one-u)+z*(r/s)); + } +} + +#ifdef __STDC__ +static const float +#else +static float +#endif +u00 = -7.3804296553e-02, /* 0xbd9726b5 */ +u01 = 1.7666645348e-01, /* 0x3e34e80d */ +u02 = -1.3818567619e-02, /* 0xbc626746 */ +u03 = 3.4745343146e-04, /* 0x39b62a69 */ +u04 = -3.8140706238e-06, /* 0xb67ff53c */ +u05 = 1.9559013964e-08, /* 0x32a802ba */ +u06 = -3.9820518410e-11, /* 0xae2f21eb */ +v01 = 1.2730483897e-02, /* 0x3c509385 */ +v02 = 7.6006865129e-05, /* 0x389f65e0 */ +v03 = 2.5915085189e-07, /* 0x348b216c */ +v04 = 4.4111031494e-10; /* 0x2ff280c2 */ + +#ifdef __STDC__ + float __ieee754_y0f(float x) +#else + float __ieee754_y0f(x) + float x; +#endif +{ + float z, s,c,ss,cc,u,v; + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + ix = 0x7fffffff&hx; + /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0 */ + if(!FLT_UWORD_IS_FINITE(ix)) return one/(x+x*x); + if(FLT_UWORD_IS_ZERO(ix)) return -one/zero; + if(hx<0) return zero/zero; + if(ix >= 0x40000000) { /* |x| >= 2.0 */ + /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0)) + * where x0 = x-pi/4 + * Better formula: + * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) + * = 1/sqrt(2) * (sin(x) + cos(x)) + * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) + * = 1/sqrt(2) * (sin(x) - cos(x)) + * To avoid cancellation, use + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + * to compute the worse one. + */ + s = sinf(x); + c = cosf(x); + ss = s-c; + cc = s+c; + /* + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) + */ + if(ix<=FLT_UWORD_HALF_MAX) { /* make sure x+x not overflow */ + z = -cosf(x+x); + if ((s*c)0x80000000) z = (invsqrtpi*ss)/__ieee754_sqrtf(x); + else { + u = pzerof(x); v = qzerof(x); + z = invsqrtpi*(u*ss+v*cc)/__ieee754_sqrtf(x); + } + return z; + } + if(ix<=0x32000000) { /* x < 2**-27 */ + return(u00 + tpi*__ieee754_logf(x)); + } + z = x*x; + u = u00+z*(u01+z*(u02+z*(u03+z*(u04+z*(u05+z*u06))))); + v = one+z*(v01+z*(v02+z*(v03+z*v04))); + return(u/v + tpi*(__ieee754_j0f(x)*__ieee754_logf(x))); +} + +/* The asymptotic expansions of pzero is + * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. + * For x >= 2, We approximate pzero by + * pzero(x) = 1 + (R/S) + * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 + * S = 1 + pS0*s^2 + ... + pS4*s^10 + * and + * | pzero(x)-1-R/S | <= 2 ** ( -60.26) + */ +#ifdef __STDC__ +static const float pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#else +static float pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#endif + 0.0000000000e+00, /* 0x00000000 */ + -7.0312500000e-02, /* 0xbd900000 */ + -8.0816707611e+00, /* 0xc1014e86 */ + -2.5706311035e+02, /* 0xc3808814 */ + -2.4852163086e+03, /* 0xc51b5376 */ + -5.2530439453e+03, /* 0xc5a4285a */ +}; +#ifdef __STDC__ +static const float pS8[5] = { +#else +static float pS8[5] = { +#endif + 1.1653436279e+02, /* 0x42e91198 */ + 3.8337448730e+03, /* 0x456f9beb */ + 4.0597855469e+04, /* 0x471e95db */ + 1.1675296875e+05, /* 0x47e4087c */ + 4.7627726562e+04, /* 0x473a0bba */ +}; +#ifdef __STDC__ +static const float pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#else +static float pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#endif + -1.1412546255e-11, /* 0xad48c58a */ + -7.0312492549e-02, /* 0xbd8fffff */ + -4.1596107483e+00, /* 0xc0851b88 */ + -6.7674766541e+01, /* 0xc287597b */ + -3.3123129272e+02, /* 0xc3a59d9b */ + -3.4643338013e+02, /* 0xc3ad3779 */ +}; +#ifdef __STDC__ +static const float pS5[5] = { +#else +static float pS5[5] = { +#endif + 6.0753936768e+01, /* 0x42730408 */ + 1.0512523193e+03, /* 0x44836813 */ + 5.9789707031e+03, /* 0x45bad7c4 */ + 9.6254453125e+03, /* 0x461665c8 */ + 2.4060581055e+03, /* 0x451660ee */ +}; + +#ifdef __STDC__ +static const float pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#else +static float pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#endif + -2.5470459075e-09, /* 0xb12f081b */ + -7.0311963558e-02, /* 0xbd8fffb8 */ + -2.4090321064e+00, /* 0xc01a2d95 */ + -2.1965976715e+01, /* 0xc1afba52 */ + -5.8079170227e+01, /* 0xc2685112 */ + -3.1447946548e+01, /* 0xc1fb9565 */ +}; +#ifdef __STDC__ +static const float pS3[5] = { +#else +static float pS3[5] = { +#endif + 3.5856033325e+01, /* 0x420f6c94 */ + 3.6151397705e+02, /* 0x43b4c1ca */ + 1.1936077881e+03, /* 0x44953373 */ + 1.1279968262e+03, /* 0x448cffe6 */ + 1.7358093262e+02, /* 0x432d94b8 */ +}; + +#ifdef __STDC__ +static const float pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#else +static float pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#endif + -8.8753431271e-08, /* 0xb3be98b7 */ + -7.0303097367e-02, /* 0xbd8ffb12 */ + -1.4507384300e+00, /* 0xbfb9b1cc */ + -7.6356959343e+00, /* 0xc0f4579f */ + -1.1193166733e+01, /* 0xc1331736 */ + -3.2336456776e+00, /* 0xc04ef40d */ +}; +#ifdef __STDC__ +static const float pS2[5] = { +#else +static float pS2[5] = { +#endif + 2.2220300674e+01, /* 0x41b1c32d */ + 1.3620678711e+02, /* 0x430834f0 */ + 2.7047027588e+02, /* 0x43873c32 */ + 1.5387539673e+02, /* 0x4319e01a */ + 1.4657617569e+01, /* 0x416a859a */ +}; + +#ifdef __STDC__ + static float pzerof(float x) +#else + static float pzerof(x) + float x; +#endif +{ +#ifdef __STDC__ + const float *p,*q; +#else + float *p,*q; +#endif + float z,r,s; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + if(ix>=0x41000000) {p = pR8; q= pS8;} + else if(ix>=0x40f71c58){p = pR5; q= pS5;} + else if(ix>=0x4036db68){p = pR3; q= pS3;} + else {p = pR2; q= pS2;} + z = one/(x*x); + r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); + s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); + return one+ r/s; +} + + +/* For x >= 8, the asymptotic expansions of qzero is + * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. + * We approximate qzero by + * qzero(x) = s*(-1.25 + (R/S)) + * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 + * S = 1 + qS0*s^2 + ... + qS5*s^12 + * and + * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) + */ +#ifdef __STDC__ +static const float qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#else +static float qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#endif + 0.0000000000e+00, /* 0x00000000 */ + 7.3242187500e-02, /* 0x3d960000 */ + 1.1768206596e+01, /* 0x413c4a93 */ + 5.5767340088e+02, /* 0x440b6b19 */ + 8.8591972656e+03, /* 0x460a6cca */ + 3.7014625000e+04, /* 0x471096a0 */ +}; +#ifdef __STDC__ +static const float qS8[6] = { +#else +static float qS8[6] = { +#endif + 1.6377603149e+02, /* 0x4323c6aa */ + 8.0983447266e+03, /* 0x45fd12c2 */ + 1.4253829688e+05, /* 0x480b3293 */ + 8.0330925000e+05, /* 0x49441ed4 */ + 8.4050156250e+05, /* 0x494d3359 */ + -3.4389928125e+05, /* 0xc8a7eb69 */ +}; + +#ifdef __STDC__ +static const float qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#else +static float qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#endif + 1.8408595828e-11, /* 0x2da1ec79 */ + 7.3242180049e-02, /* 0x3d95ffff */ + 5.8356351852e+00, /* 0x40babd86 */ + 1.3511157227e+02, /* 0x43071c90 */ + 1.0272437744e+03, /* 0x448067cd */ + 1.9899779053e+03, /* 0x44f8bf4b */ +}; +#ifdef __STDC__ +static const float qS5[6] = { +#else +static float qS5[6] = { +#endif + 8.2776611328e+01, /* 0x42a58da0 */ + 2.0778142090e+03, /* 0x4501dd07 */ + 1.8847289062e+04, /* 0x46933e94 */ + 5.6751113281e+04, /* 0x475daf1d */ + 3.5976753906e+04, /* 0x470c88c1 */ + -5.3543427734e+03, /* 0xc5a752be */ +}; + +#ifdef __STDC__ +static const float qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#else +static float qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#endif + 4.3774099900e-09, /* 0x3196681b */ + 7.3241114616e-02, /* 0x3d95ff70 */ + 3.3442313671e+00, /* 0x405607e3 */ + 4.2621845245e+01, /* 0x422a7cc5 */ + 1.7080809021e+02, /* 0x432acedf */ + 1.6673394775e+02, /* 0x4326bbe4 */ +}; +#ifdef __STDC__ +static const float qS3[6] = { +#else +static float qS3[6] = { +#endif + 4.8758872986e+01, /* 0x42430916 */ + 7.0968920898e+02, /* 0x44316c1c */ + 3.7041481934e+03, /* 0x4567825f */ + 6.4604252930e+03, /* 0x45c9e367 */ + 2.5163337402e+03, /* 0x451d4557 */ + -1.4924745178e+02, /* 0xc3153f59 */ +}; + +#ifdef __STDC__ +static const float qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#else +static float qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#endif + 1.5044444979e-07, /* 0x342189db */ + 7.3223426938e-02, /* 0x3d95f62a */ + 1.9981917143e+00, /* 0x3fffc4bf */ + 1.4495602608e+01, /* 0x4167edfd */ + 3.1666231155e+01, /* 0x41fd5471 */ + 1.6252708435e+01, /* 0x4182058c */ +}; +#ifdef __STDC__ +static const float qS2[6] = { +#else +static float qS2[6] = { +#endif + 3.0365585327e+01, /* 0x41f2ecb8 */ + 2.6934811401e+02, /* 0x4386ac8f */ + 8.4478375244e+02, /* 0x44533229 */ + 8.8293585205e+02, /* 0x445cbbe5 */ + 2.1266638184e+02, /* 0x4354aa98 */ + -5.3109550476e+00, /* 0xc0a9f358 */ +}; + +#ifdef __STDC__ + static float qzerof(float x) +#else + static float qzerof(x) + float x; +#endif +{ +#ifdef __STDC__ + const float *p,*q; +#else + float *p,*q; +#endif + float s,r,z; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + if(ix>=0x41000000) {p = qR8; q= qS8;} + else if(ix>=0x40f71c58){p = qR5; q= qS5;} + else if(ix>=0x4036db68){p = qR3; q= qS3;} + else {p = qR2; q= qS2;} + z = one/(x*x); + r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); + s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5]))))); + return (-(float).125 + r/s)/x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_j0.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_j1.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_j1.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_j1.c @@ -0,0 +1,506 @@ +//=========================================================================== +// +// ef_j1.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_j1.c -- float version of e_j1.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static float ponef(float), qonef(float); +#else +static float ponef(), qonef(); +#endif + +#ifdef __STDC__ +static const float +#else +static float +#endif +huge = 1e30, +one = 1.0, +invsqrtpi= 5.6418961287e-01, /* 0x3f106ebb */ +tpi = 6.3661974669e-01, /* 0x3f22f983 */ + /* R0/S0 on [0,2] */ +r00 = -6.2500000000e-02, /* 0xbd800000 */ +r01 = 1.4070566976e-03, /* 0x3ab86cfd */ +r02 = -1.5995563444e-05, /* 0xb7862e36 */ +r03 = 4.9672799207e-08, /* 0x335557d2 */ +s01 = 1.9153760746e-02, /* 0x3c9ce859 */ +s02 = 1.8594678841e-04, /* 0x3942fab6 */ +s03 = 1.1771846857e-06, /* 0x359dffc2 */ +s04 = 5.0463624390e-09, /* 0x31ad6446 */ +s05 = 1.2354227016e-11; /* 0x2d59567e */ + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float __ieee754_j1f(float x) +#else + float __ieee754_j1f(x) + float x; +#endif +{ + float z, s,c,ss,cc,r,u,v,y; + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(!FLT_UWORD_IS_FINITE(ix)) return one/x; + y = fabsf(x); + if(ix >= 0x40000000) { /* |x| >= 2.0 */ + s = sinf(y); + c = cosf(y); + ss = -s-c; + cc = s-c; + if(ix<=FLT_UWORD_HALF_MAX) { /* make sure y+y not overflow */ + z = cosf(y+y); + if ((s*c)>zero) cc = z/ss; + else ss = z/cc; + } + /* + * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x) + * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x) + */ + if(ix>0x80000000) z = (invsqrtpi*cc)/__ieee754_sqrtf(y); + else { + u = ponef(y); v = qonef(y); + z = invsqrtpi*(u*cc-v*ss)/__ieee754_sqrtf(y); + } + if(hx<0) return -z; + else return z; + } + if(ix<0x32000000) { /* |x|<2**-27 */ + if(huge+x>one) return (float)0.5*x;/* inexact if x!=0 necessary */ + } + z = x*x; + r = z*(r00+z*(r01+z*(r02+z*r03))); + s = one+z*(s01+z*(s02+z*(s03+z*(s04+z*s05)))); + r *= x; + return(x*(float)0.5+r/s); +} + +#ifdef __STDC__ +static const float U0[5] = { +#else +static float U0[5] = { +#endif + -1.9605709612e-01, /* 0xbe48c331 */ + 5.0443872809e-02, /* 0x3d4e9e3c */ + -1.9125689287e-03, /* 0xbafaaf2a */ + 2.3525259166e-05, /* 0x37c5581c */ + -9.1909917899e-08, /* 0xb3c56003 */ +}; +#ifdef __STDC__ +static const float V0[5] = { +#else +static float V0[5] = { +#endif + 1.9916731864e-02, /* 0x3ca3286a */ + 2.0255257550e-04, /* 0x3954644b */ + 1.3560879779e-06, /* 0x35b602d4 */ + 6.2274145840e-09, /* 0x31d5f8eb */ + 1.6655924903e-11, /* 0x2d9281cf */ +}; + +#ifdef __STDC__ + float __ieee754_y1f(float x) +#else + float __ieee754_y1f(x) + float x; +#endif +{ + float z, s,c,ss,cc,u,v; + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + ix = 0x7fffffff&hx; + /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ + if(!FLT_UWORD_IS_FINITE(ix)) return one/(x+x*x); + if(FLT_UWORD_IS_ZERO(ix)) return -one/zero; + if(hx<0) return zero/zero; + if(ix >= 0x40000000) { /* |x| >= 2.0 */ + s = sinf(x); + c = cosf(x); + ss = -s-c; + cc = s-c; + if(ix<=FLT_UWORD_HALF_MAX) { /* make sure x+x not overflow */ + z = cosf(x+x); + if ((s*c)>zero) cc = z/ss; + else ss = z/cc; + } + /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0)) + * where x0 = x-3pi/4 + * Better formula: + * cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) + * = 1/sqrt(2) * (sin(x) - cos(x)) + * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) + * = -1/sqrt(2) * (cos(x) + sin(x)) + * To avoid cancellation, use + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) + * to compute the worse one. + */ + if(ix>0x48000000) z = (invsqrtpi*ss)/__ieee754_sqrtf(x); + else { + u = ponef(x); v = qonef(x); + z = invsqrtpi*(u*ss+v*cc)/__ieee754_sqrtf(x); + } + return z; + } + if(ix<=0x24800000) { /* x < 2**-54 */ + return(-tpi/x); + } + z = x*x; + u = U0[0]+z*(U0[1]+z*(U0[2]+z*(U0[3]+z*U0[4]))); + v = one+z*(V0[0]+z*(V0[1]+z*(V0[2]+z*(V0[3]+z*V0[4])))); + return(x*(u/v) + tpi*(__ieee754_j1f(x)*__ieee754_logf(x)-one/x)); +} + +/* For x >= 8, the asymptotic expansions of pone is + * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. + * We approximate pone by + * pone(x) = 1 + (R/S) + * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 + * S = 1 + ps0*s^2 + ... + ps4*s^10 + * and + * | pone(x)-1-R/S | <= 2 ** ( -60.06) + */ + +#ifdef __STDC__ +static const float pr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#else +static float pr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#endif + 0.0000000000e+00, /* 0x00000000 */ + 1.1718750000e-01, /* 0x3df00000 */ + 1.3239480972e+01, /* 0x4153d4ea */ + 4.1205184937e+02, /* 0x43ce06a3 */ + 3.8747453613e+03, /* 0x45722bed */ + 7.9144794922e+03, /* 0x45f753d6 */ +}; +#ifdef __STDC__ +static const float ps8[5] = { +#else +static float ps8[5] = { +#endif + 1.1420736694e+02, /* 0x42e46a2c */ + 3.6509309082e+03, /* 0x45642ee5 */ + 3.6956207031e+04, /* 0x47105c35 */ + 9.7602796875e+04, /* 0x47bea166 */ + 3.0804271484e+04, /* 0x46f0a88b */ +}; + +#ifdef __STDC__ +static const float pr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#else +static float pr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#endif + 1.3199052094e-11, /* 0x2d68333f */ + 1.1718749255e-01, /* 0x3defffff */ + 6.8027510643e+00, /* 0x40d9b023 */ + 1.0830818176e+02, /* 0x42d89dca */ + 5.1763616943e+02, /* 0x440168b7 */ + 5.2871520996e+02, /* 0x44042dc6 */ +}; +#ifdef __STDC__ +static const float ps5[5] = { +#else +static float ps5[5] = { +#endif + 5.9280597687e+01, /* 0x426d1f55 */ + 9.9140142822e+02, /* 0x4477d9b1 */ + 5.3532670898e+03, /* 0x45a74a23 */ + 7.8446904297e+03, /* 0x45f52586 */ + 1.5040468750e+03, /* 0x44bc0180 */ +}; + +#ifdef __STDC__ +static const float pr3[6] = { +#else +static float pr3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#endif + 3.0250391081e-09, /* 0x314fe10d */ + 1.1718686670e-01, /* 0x3defffab */ + 3.9329774380e+00, /* 0x407bb5e7 */ + 3.5119403839e+01, /* 0x420c7a45 */ + 9.1055007935e+01, /* 0x42b61c2a */ + 4.8559066772e+01, /* 0x42423c7c */ +}; +#ifdef __STDC__ +static const float ps3[5] = { +#else +static float ps3[5] = { +#endif + 3.4791309357e+01, /* 0x420b2a4d */ + 3.3676245117e+02, /* 0x43a86198 */ + 1.0468714600e+03, /* 0x4482dbe3 */ + 8.9081134033e+02, /* 0x445eb3ed */ + 1.0378793335e+02, /* 0x42cf936c */ +}; + +#ifdef __STDC__ +static const float pr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#else +static float pr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#endif + 1.0771083225e-07, /* 0x33e74ea8 */ + 1.1717621982e-01, /* 0x3deffa16 */ + 2.3685150146e+00, /* 0x401795c0 */ + 1.2242610931e+01, /* 0x4143e1bc */ + 1.7693971634e+01, /* 0x418d8d41 */ + 5.0735230446e+00, /* 0x40a25a4d */ +}; +#ifdef __STDC__ +static const float ps2[5] = { +#else +static float ps2[5] = { +#endif + 2.1436485291e+01, /* 0x41ab7dec */ + 1.2529022980e+02, /* 0x42fa9499 */ + 2.3227647400e+02, /* 0x436846c7 */ + 1.1767937469e+02, /* 0x42eb5bd7 */ + 8.3646392822e+00, /* 0x4105d590 */ +}; + +#ifdef __STDC__ + static float ponef(float x) +#else + static float ponef(x) + float x; +#endif +{ +#ifdef __STDC__ + const float *p,*q; +#else + float *p,*q; +#endif + float z,r,s; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + if(ix>=0x41000000) {p = pr8; q= ps8;} + else if(ix>=0x40f71c58){p = pr5; q= ps5;} + else if(ix>=0x4036db68){p = pr3; q= ps3;} + else {p = pr2; q= ps2;} + z = one/(x*x); + r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); + s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); + return one+ r/s; +} + + +/* For x >= 8, the asymptotic expansions of qone is + * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. + * We approximate qone by + * qone(x) = s*(0.375 + (R/S)) + * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 + * S = 1 + qs1*s^2 + ... + qs6*s^12 + * and + * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) + */ + +#ifdef __STDC__ +static const float qr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#else +static float qr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ +#endif + 0.0000000000e+00, /* 0x00000000 */ + -1.0253906250e-01, /* 0xbdd20000 */ + -1.6271753311e+01, /* 0xc1822c8d */ + -7.5960174561e+02, /* 0xc43de683 */ + -1.1849806641e+04, /* 0xc639273a */ + -4.8438511719e+04, /* 0xc73d3683 */ +}; +#ifdef __STDC__ +static const float qs8[6] = { +#else +static float qs8[6] = { +#endif + 1.6139537048e+02, /* 0x43216537 */ + 7.8253862305e+03, /* 0x45f48b17 */ + 1.3387534375e+05, /* 0x4802bcd6 */ + 7.1965775000e+05, /* 0x492fb29c */ + 6.6660125000e+05, /* 0x4922be94 */ + -2.9449025000e+05, /* 0xc88fcb48 */ +}; + +#ifdef __STDC__ +static const float qr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#else +static float qr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ +#endif + -2.0897993405e-11, /* 0xadb7d219 */ + -1.0253904760e-01, /* 0xbdd1fffe */ + -8.0564479828e+00, /* 0xc100e736 */ + -1.8366960144e+02, /* 0xc337ab6b */ + -1.3731937256e+03, /* 0xc4aba633 */ + -2.6124443359e+03, /* 0xc523471c */ +}; +#ifdef __STDC__ +static const float qs5[6] = { +#else +static float qs5[6] = { +#endif + 8.1276550293e+01, /* 0x42a28d98 */ + 1.9917987061e+03, /* 0x44f8f98f */ + 1.7468484375e+04, /* 0x468878f8 */ + 4.9851425781e+04, /* 0x4742bb6d */ + 2.7948074219e+04, /* 0x46da5826 */ + -4.7191835938e+03, /* 0xc5937978 */ +}; + +#ifdef __STDC__ +static const float qr3[6] = { +#else +static float qr3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ +#endif + -5.0783124372e-09, /* 0xb1ae7d4f */ + -1.0253783315e-01, /* 0xbdd1ff5b */ + -4.6101160049e+00, /* 0xc0938612 */ + -5.7847221375e+01, /* 0xc267638e */ + -2.2824453735e+02, /* 0xc3643e9a */ + -2.1921012878e+02, /* 0xc35b35cb */ +}; +#ifdef __STDC__ +static const float qs3[6] = { +#else +static float qs3[6] = { +#endif + 4.7665153503e+01, /* 0x423ea91e */ + 6.7386511230e+02, /* 0x4428775e */ + 3.3801528320e+03, /* 0x45534272 */ + 5.5477290039e+03, /* 0x45ad5dd5 */ + 1.9031191406e+03, /* 0x44ede3d0 */ + -1.3520118713e+02, /* 0xc3073381 */ +}; + +#ifdef __STDC__ +static const float qr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#else +static float qr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ +#endif + -1.7838172539e-07, /* 0xb43f8932 */ + -1.0251704603e-01, /* 0xbdd1f475 */ + -2.7522056103e+00, /* 0xc0302423 */ + -1.9663616180e+01, /* 0xc19d4f16 */ + -4.2325313568e+01, /* 0xc2294d1f */ + -2.1371921539e+01, /* 0xc1aaf9b2 */ +}; +#ifdef __STDC__ +static const float qs2[6] = { +#else +static float qs2[6] = { +#endif + 2.9533363342e+01, /* 0x41ec4454 */ + 2.5298155212e+02, /* 0x437cfb47 */ + 7.5750280762e+02, /* 0x443d602e */ + 7.3939318848e+02, /* 0x4438d92a */ + 1.5594900513e+02, /* 0x431bf2f2 */ + -4.9594988823e+00, /* 0xc09eb437 */ +}; + +#ifdef __STDC__ + static float qonef(float x) +#else + static float qonef(x) + float x; +#endif +{ +#ifdef __STDC__ + const float *p,*q; +#else + float *p,*q; +#endif + float s,r,z; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + if(ix>=0x40200000) {p = qr8; q= qs8;} + else if(ix>=0x40f71c58){p = qr5; q= qs5;} + else if(ix>=0x4036db68){p = qr3; q= qs3;} + else {p = qr2; q= qs2;} + z = one/(x*x); + r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); + s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5]))))); + return ((float).375 + r/s)/x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_j1.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_jn.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_jn.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_jn.c @@ -0,0 +1,274 @@ +//=========================================================================== +// +// ef_jn.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_jn.c -- float version of e_jn.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +invsqrtpi= 5.6418961287e-01, /* 0x3f106ebb */ +two = 2.0000000000e+00, /* 0x40000000 */ +one = 1.0000000000e+00; /* 0x3F800000 */ + +#ifdef __STDC__ +static const float zero = 0.0000000000e+00; +#else +static float zero = 0.0000000000e+00; +#endif + +#ifdef __STDC__ + float __ieee754_jnf(int n, float x) +#else + float __ieee754_jnf(n,x) + int n; float x; +#endif +{ + __int32_t i,hx,ix, sgn; + float a, b, temp, di; + float z, w; + + /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) + * Thus, J(-n,x) = J(n,-x) + */ + hx = CYG_LIBM_WORD(x); + ix = 0x7fffffff&hx; + /* if J(n,NaN) is NaN */ + if(FLT_UWORD_IS_NAN(ix)) return x+x; + if(n<0){ + n = -n; + x = -x; + hx ^= 0x80000000; + } + if(n==0) return(__ieee754_j0f(x)); + if(n==1) return(__ieee754_j1f(x)); + sgn = (n&1)&(hx>>31); /* even n -- 0, odd n -- sign(x) */ + x = fabsf(x); + if(FLT_UWORD_IS_ZERO(ix)||FLT_UWORD_IS_INFINITE(ix)) + b = zero; + else if((float)n<=x) { + /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ + a = __ieee754_j0f(x); + b = __ieee754_j1f(x); + for(i=1;i33) /* underflow */ + b = zero; + else { + temp = x*(float)0.5; b = temp; + for (a=one,i=2;i<=n;i++) { + a *= (float)i; /* a = n! */ + b *= temp; /* b = (x/2)^n */ + } + b = b/a; + } + } else { + /* use backward recurrence */ + /* x x^2 x^2 + * J(n,x)/J(n-1,x) = ---- ------ ------ ..... + * 2n - 2(n+1) - 2(n+2) + * + * 1 1 1 + * (for large x) = ---- ------ ------ ..... + * 2n 2(n+1) 2(n+2) + * -- - ------ - ------ - + * x x x + * + * Let w = 2n/x and h=2/x, then the above quotient + * is equal to the continued fraction: + * 1 + * = ----------------------- + * 1 + * w - ----------------- + * 1 + * w+h - --------- + * w+2h - ... + * + * To determine how many terms needed, let + * Q(0) = w, Q(1) = w(w+h) - 1, + * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), + * When Q(k) > 1e4 good for single + * When Q(k) > 1e9 good for double + * When Q(k) > 1e17 good for quadruple + */ + /* determine k */ + float t,v; + float q0,q1,h,tmp; __int32_t k,m; + w = (n+n)/(float)x; h = (float)2.0/(float)x; + q0 = w; z = w+h; q1 = w*z - (float)1.0; k=1; + while(q1<(float)1.0e9) { + k += 1; z += h; + tmp = z*q1 - q0; + q0 = q1; + q1 = tmp; + } + m = n+n; + for(t=zero, i = 2*(n+k); i>=m; i -= 2) t = one/(i/x-t); + a = t; + b = one; + /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) + * Hence, if n*(log(2n/x)) > ... + * single 8.8722839355e+01 + * double 7.09782712893383973096e+02 + * long double 1.1356523406294143949491931077970765006170e+04 + * then recurrent value may overflow and the result is + * likely underflow to zero + */ + tmp = n; + v = two/x; + tmp = tmp*__ieee754_logf(fabsf(v*tmp)); + if(tmp<(float)8.8721679688e+01) { + for(i=n-1,di=(float)(i+i);i>0;i--){ + temp = b; + b *= di; + b = b/x - a; + a = temp; + di -= two; + } + } else { + for(i=n-1,di=(float)(i+i);i>0;i--){ + temp = b; + b *= di; + b = b/x - a; + a = temp; + di -= two; + /* scale b to avoid spurious overflow */ + if(b>(float)1e10) { + a /= b; + t /= b; + b = one; + } + } + } + b = (t*__ieee754_j0f(x)/b); + } + } + if(sgn==1) return -b; else return b; +} + +#ifdef __STDC__ + float __ieee754_ynf(int n, float x) +#else + float __ieee754_ynf(n,x) + int n; float x; +#endif +{ + __int32_t i,hx,ix,ib; + __int32_t sign; + float a, b, temp; + + hx = CYG_LIBM_WORD(x); + ix = 0x7fffffff&hx; + /* if Y(n,NaN) is NaN */ + if(FLT_UWORD_IS_NAN(ix)) return x+x; + if(FLT_UWORD_IS_ZERO(ix)) return -one/zero; + if(hx<0) return zero/zero; + sign = 1; + if(n<0){ + n = -n; + sign = 1 - ((n&1)<<1); + } + if(n==0) return(__ieee754_y0f(x)); + if(n==1) return(sign*__ieee754_y1f(x)); + if(FLT_UWORD_IS_INFINITE(ix)) return zero; + + a = __ieee754_y0f(x); + b = __ieee754_y1f(x); + /* quit if b is -inf */ + ib = CYG_LIBM_WORD(b); + for(i=1;i0) return b; else return -b; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_jn.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma.c @@ -0,0 +1,93 @@ +//=========================================================================== +// +// ef_lgamma.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* @(#)e_lgamma.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* __ieee754_lgamma(x) + * Return the logarithm of the Gamma function of x. + * + * Method: call __ieee754_lgamma_r + */ + +#include +#include "mathincl/fdlibm.h" + +float +__ieee754_lgammaf(float x) +{ + return __ieee754_lgammaf_r(x,&signgam); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_lgamma.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma_r.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma_r.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_lgamma_r.c @@ -0,0 +1,316 @@ +//=========================================================================== +// +// ef_lgamma_r.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + +/* erf_lgamma.c -- float version of er_lgamma.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +two23= 8.3886080000e+06, /* 0x4b000000 */ +half= 5.0000000000e-01, /* 0x3f000000 */ +one = 1.0000000000e+00, /* 0x3f800000 */ +pi = 3.1415927410e+00, /* 0x40490fdb */ +a0 = 7.7215664089e-02, /* 0x3d9e233f */ +a1 = 3.2246702909e-01, /* 0x3ea51a66 */ +a2 = 6.7352302372e-02, /* 0x3d89f001 */ +a3 = 2.0580807701e-02, /* 0x3ca89915 */ +a4 = 7.3855509982e-03, /* 0x3bf2027e */ +a5 = 2.8905137442e-03, /* 0x3b3d6ec6 */ +a6 = 1.1927076848e-03, /* 0x3a9c54a1 */ +a7 = 5.1006977446e-04, /* 0x3a05b634 */ +a8 = 2.2086278477e-04, /* 0x39679767 */ +a9 = 1.0801156895e-04, /* 0x38e28445 */ +a10 = 2.5214456400e-05, /* 0x37d383a2 */ +a11 = 4.4864096708e-05, /* 0x383c2c75 */ +tc = 1.4616321325e+00, /* 0x3fbb16c3 */ +tf = -1.2148628384e-01, /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +tt = 6.6971006518e-09, /* 0x31e61c52 */ +t0 = 4.8383611441e-01, /* 0x3ef7b95e */ +t1 = -1.4758771658e-01, /* 0xbe17213c */ +t2 = 6.4624942839e-02, /* 0x3d845a15 */ +t3 = -3.2788541168e-02, /* 0xbd064d47 */ +t4 = 1.7970675603e-02, /* 0x3c93373d */ +t5 = -1.0314224288e-02, /* 0xbc28fcfe */ +t6 = 6.1005386524e-03, /* 0x3bc7e707 */ +t7 = -3.6845202558e-03, /* 0xbb7177fe */ +t8 = 2.2596477065e-03, /* 0x3b141699 */ +t9 = -1.4034647029e-03, /* 0xbab7f476 */ +t10 = 8.8108185446e-04, /* 0x3a66f867 */ +t11 = -5.3859531181e-04, /* 0xba0d3085 */ +t12 = 3.1563205994e-04, /* 0x39a57b6b */ +t13 = -3.1275415677e-04, /* 0xb9a3f927 */ +t14 = 3.3552918467e-04, /* 0x39afe9f7 */ +u0 = -7.7215664089e-02, /* 0xbd9e233f */ +u1 = 6.3282704353e-01, /* 0x3f2200f4 */ +u2 = 1.4549225569e+00, /* 0x3fba3ae7 */ +u3 = 9.7771751881e-01, /* 0x3f7a4bb2 */ +u4 = 2.2896373272e-01, /* 0x3e6a7578 */ +u5 = 1.3381091878e-02, /* 0x3c5b3c5e */ +v1 = 2.4559779167e+00, /* 0x401d2ebe */ +v2 = 2.1284897327e+00, /* 0x4008392d */ +v3 = 7.6928514242e-01, /* 0x3f44efdf */ +v4 = 1.0422264785e-01, /* 0x3dd572af */ +v5 = 3.2170924824e-03, /* 0x3b52d5db */ +s0 = -7.7215664089e-02, /* 0xbd9e233f */ +s1 = 2.1498242021e-01, /* 0x3e5c245a */ +s2 = 3.2577878237e-01, /* 0x3ea6cc7a */ +s3 = 1.4635047317e-01, /* 0x3e15dce6 */ +s4 = 2.6642270386e-02, /* 0x3cda40e4 */ +s5 = 1.8402845599e-03, /* 0x3af135b4 */ +s6 = 3.1947532989e-05, /* 0x3805ff67 */ +r1 = 1.3920053244e+00, /* 0x3fb22d3b */ +r2 = 7.2193557024e-01, /* 0x3f38d0c5 */ +r3 = 1.7193385959e-01, /* 0x3e300f6e */ +r4 = 1.8645919859e-02, /* 0x3c98bf54 */ +r5 = 7.7794247773e-04, /* 0x3a4beed6 */ +r6 = 7.3266842264e-06, /* 0x36f5d7bd */ +w0 = 4.1893854737e-01, /* 0x3ed67f1d */ +w1 = 8.3333335817e-02, /* 0x3daaaaab */ +w2 = -2.7777778450e-03, /* 0xbb360b61 */ +w3 = 7.9365057172e-04, /* 0x3a500cfd */ +w4 = -5.9518753551e-04, /* 0xba1c065c */ +w5 = 8.3633989561e-04, /* 0x3a5b3dd2 */ +w6 = -1.6309292987e-03; /* 0xbad5c4e8 */ + +#ifdef __STDC__ +static const float zero= 0.0000000000e+00; +#else +static float zero= 0.0000000000e+00; +#endif + +#ifdef __STDC__ + static float sin_pif(float x) +#else + static float sin_pif(x) + float x; +#endif +{ + float y,z; + __int32_t n,ix; + + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + + if(ix<0x3e800000) return __kernel_sinf(pi*x,zero,0); + y = -x; /* x is assume negative */ + + /* + * argument reduction, make sure inexact flag not raised if input + * is an integer + */ + z = floorf(y); + if(z!=y) { /* inexact anyway */ + y *= (float)0.5; + y = (float)2.0*(y - floorf(y)); /* y = |x| mod 2.0 */ + n = (__int32_t) (y*(float)4.0); + } else { + if(ix>=0x4b800000) { + y = zero; n = 0; /* y must be even */ + } else { + if(ix<0x4b000000) z = y+two23; /* exact */ + n = CYG_LIBM_WORD(z); + n &= 1; + y = n; + n<<= 2; + } + } + switch (n) { + case 0: y = __kernel_sinf(pi*y,zero,0); break; + case 1: + case 2: y = __kernel_cosf(pi*((float)0.5-y),zero); break; + case 3: + case 4: y = __kernel_sinf(pi*(one-y),zero,0); break; + case 5: + case 6: y = -__kernel_cosf(pi*(y-(float)1.5),zero); break; + default: y = __kernel_sinf(pi*(y-(float)2.0),zero,0); break; + } + return -y; +} + + +#ifdef __STDC__ + float __ieee754_lgammaf_r(float x, int *signgamp) +#else + float __ieee754_lgammaf_r(x,signgamp) + float x; int *signgamp; +#endif +{ + float t,y,z,nadj,p,p1,p2,p3,q,r,w; + __int32_t i,hx,ix; + + hx = CYG_LIBM_WORD(x); + + /* purge off +-inf, NaN, +-0, and negative arguments */ + *signgamp = 1; + ix = hx&0x7fffffff; + if(ix>=0x7f800000) return x*x; + if(ix==0) return one/zero; + if(ix<0x1c800000) { /* |x|<2**-70, return -log(|x|) */ + if(hx<0) { + *signgamp = -1; + return -__ieee754_logf(-x); + } else return -__ieee754_logf(x); + } + if(hx<0) { + if(ix>=0x4b000000) /* |x|>=2**23, must be -integer */ + return one/zero; + t = sin_pif(x); + if(t==zero) return one/zero; /* -integer */ + nadj = __ieee754_logf(pi/fabsf(t*x)); + if(t=0x3f3b4a20) {y = one-x; i= 0;} + else if(ix>=0x3e6d3308) {y= x-(tc-one); i=1;} + else {y = x; i=2;} + } else { + r = zero; + if(ix>=0x3fdda618) {y=(float)2.0-x;i=0;} /* [1.7316,2] */ + else if(ix>=0x3F9da620) {y=x-tc;i=1;} /* [1.23,1.73] */ + else {y=x-one;i=2;} + } + switch(i) { + case 0: + z = y*y; + p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))); + p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))); + p = y*p1+p2; + r += (p-(float)0.5*y); break; + case 1: + z = y*y; + w = z*y; + p1 = t0+w*(t3+w*(t6+w*(t9 +w*t12))); /* parallel comp */ + p2 = t1+w*(t4+w*(t7+w*(t10+w*t13))); + p3 = t2+w*(t5+w*(t8+w*(t11+w*t14))); + p = z*p1-(tt-w*(p2+y*p3)); + r += (tf + p); break; + case 2: + p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))); + p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))); + r += (-(float)0.5*y + p1/p2); + } + } + else if(ix<0x41000000) { /* x < 8.0 */ + i = (__int32_t)x; + t = zero; + y = x-(float)i; + p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))); + q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))); + r = half*y+p/q; + z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ + switch(i) { + case 7: z *= (y+(float)6.0); /* FALLTHRU */ + case 6: z *= (y+(float)5.0); /* FALLTHRU */ + case 5: z *= (y+(float)4.0); /* FALLTHRU */ + case 4: z *= (y+(float)3.0); /* FALLTHRU */ + case 3: z *= (y+(float)2.0); /* FALLTHRU */ + r += __ieee754_logf(z); break; + } + /* 8.0 <= x < 2**58 */ + } else if (ix < 0x5c800000) { + t = __ieee754_logf(x); + z = one/x; + y = z*z; + w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))); + r = (x-half)*(t-one)+w; + } else + /* 2**58 <= x <= inf */ + r = x*(__ieee754_logf(x)-one); + if(hx<0) r = nadj - r; + return r; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_lgamma_r.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_log.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_log.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_log.c @@ -0,0 +1,159 @@ +//=========================================================================== +// +// ef_log.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_log.c -- float version of e_log.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ +ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ +two25 = 3.355443200e+07, /* 0x4c000000 */ +Lg1 = 6.6666668653e-01, /* 3F2AAAAB */ +Lg2 = 4.0000000596e-01, /* 3ECCCCCD */ +Lg3 = 2.8571429849e-01, /* 3E924925 */ +Lg4 = 2.2222198546e-01, /* 3E638E29 */ +Lg5 = 1.8183572590e-01, /* 3E3A3325 */ +Lg6 = 1.5313838422e-01, /* 3E1CD04F */ +Lg7 = 1.4798198640e-01; /* 3E178897 */ + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float __ieee754_logf(float x) +#else + float __ieee754_logf(x) + float x; +#endif +{ + float hfsq,f,s,z,R,w,t1,t2,dk; + __int32_t k,ix,i,j; + + ix = CYG_LIBM_WORD(x); + + k=0; + if (FLT_UWORD_IS_ZERO(ix&0x7fffffff)) + return -two25/zero; /* log(+-0)=-inf */ + if (ix<0) return (x-x)/zero; /* log(-#) = NaN */ + if (!FLT_UWORD_IS_FINITE(ix)) return x+x; + if (FLT_UWORD_IS_SUBNORMAL(ix)) { + k -= 25; x *= two25; /* subnormal number, scale up x */ + ix = CYG_LIBM_WORD(x); + } + k += (ix>>23)-127; + ix &= 0x007fffff; + i = (ix+(0x95f64<<3))&0x800000; + SET_FLOAT_WORD(x,ix|(i^0x3f800000)); /* normalize x or x/2 */ + k += (i>>23); + f = x-(float)1.0; + if((0x007fffff&(15+ix))<16) { /* |f| < 2**-20 */ + if(f==zero) { if(k==0) return zero; else {dk=(float)k; + return dk*ln2_hi+dk*ln2_lo;}} + R = f*f*((float)0.5-(float)0.33333333333333333*f); + if(k==0) return f-R; else {dk=(float)k; + return dk*ln2_hi-((R-dk*ln2_lo)-f);} + } + s = f/((float)2.0+f); + dk = (float)k; + z = s*s; + i = ix-(0x6147a<<3); + w = z*z; + j = (0x6b851<<3)-ix; + t1= w*(Lg2+w*(Lg4+w*Lg6)); + t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); + i |= j; + R = t2+t1; + if(i>0) { + hfsq=(float)0.5*f*f; + if(k==0) return f-(hfsq-s*(hfsq+R)); else + return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f); + } else { + if(k==0) return f-s*(f-R); else + return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f); + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_log.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_log10.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_log10.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_log10.c @@ -0,0 +1,129 @@ +//=========================================================================== +// +// ef_log10.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_log10.c -- float version of e_log10.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +two25 = 3.3554432000e+07, /* 0x4c000000 */ +ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */ +log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */ +log10_2lo = 7.9034151668e-07; /* 0x355427db */ + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float __ieee754_log10f(float x) +#else + float __ieee754_log10f(x) + float x; +#endif +{ + float y,z; + __int32_t i,k,hx; + + hx = CYG_LIBM_WORD(x); + + k=0; + if (FLT_UWORD_IS_ZERO(hx&0x7fffffff)) + return -two25/zero; /* log(+-0)=-inf */ + if (hx<0) return (x-x)/zero; /* log(-#) = NaN */ + if (!FLT_UWORD_IS_FINITE(hx)) return x+x; + if (FLT_UWORD_IS_SUBNORMAL(hx)) { + k -= 25; x *= two25; /* subnormal number, scale up x */ + hx = CYG_LIBM_WORD(x); + } + k += (hx>>23)-127; + i = ((__uint32_t)k&0x80000000)>>31; + hx = (hx&0x007fffff)|((0x7f-i)<<23); + y = (float)(k+i); + SET_FLOAT_WORD(x,hx); + z = y*log10_2lo + ivln10*__ieee754_logf(x); + return z+y*log10_2hi; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_log10.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_pow.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_pow.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_pow.c @@ -0,0 +1,325 @@ +//======================================================================== +// +// ef_pow.c +// +// Part of the standard mathematical function library +// +//======================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//======================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2001-07-20 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +// CONFIGURATION + +#include // Configuration header + + +/* ef_pow.c -- float version of e_pow.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include // Configuration header + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +bp[] = {1.0, 1.5,}, +dp_h[] = { 0.0, 5.84960938e-01,}, /* 0x3f15c000 */ +dp_l[] = { 0.0, 1.56322085e-06,}, /* 0x35d1cfdc */ +zero = 0.0, +one = 1.0, +two = 2.0, +two24 = 16777216.0, /* 0x4b800000 */ +huge = 1.0e30, +tiny = 1.0e-30, + /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */ +L1 = 6.0000002384e-01, /* 0x3f19999a */ +L2 = 4.2857143283e-01, /* 0x3edb6db7 */ +L3 = 3.3333334327e-01, /* 0x3eaaaaab */ +L4 = 2.7272811532e-01, /* 0x3e8ba305 */ +L5 = 2.3066075146e-01, /* 0x3e6c3255 */ +L6 = 2.0697501302e-01, /* 0x3e53f142 */ +P1 = 1.6666667163e-01, /* 0x3e2aaaab */ +P2 = -2.7777778450e-03, /* 0xbb360b61 */ +P3 = 6.6137559770e-05, /* 0x388ab355 */ +P4 = -1.6533901999e-06, /* 0xb5ddea0e */ +P5 = 4.1381369442e-08, /* 0x3331bb4c */ +lg2 = 6.9314718246e-01, /* 0x3f317218 */ +lg2_h = 6.93145752e-01, /* 0x3f317200 */ +lg2_l = 1.42860654e-06, /* 0x35bfbe8c */ +ovt = 4.2995665694e-08, /* -(128-log2(ovfl+.5ulp)) */ +cp = 9.6179670095e-01, /* 0x3f76384f =2/(3ln2) */ +cp_h = 9.6179199219e-01, /* 0x3f763800 =head of cp */ +cp_l = 4.7017383622e-06, /* 0x369dc3a0 =tail of cp_h */ +ivln2 = 1.4426950216e+00, /* 0x3fb8aa3b =1/ln2 */ +ivln2_h = 1.4426879883e+00, /* 0x3fb8aa00 =16b 1/ln2*/ +ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ + +/* VAE +static float +my_abs_f( float x ) +{ + Cyg_libm_ieee_float_shape_type t; + + t.value = x; + + t.number.sign = 0; + + return t.value; +} // my_abs_f() +*/ + +#ifdef __STDC__ + float __ieee754_powf(float x, float y) +#else + float __ieee754_powf(x,y) + float x, y; +#endif +{ + float z,ax,z_h,z_l,p_h,p_l; + float y1,t1,t2,r,s,t,u,v,w; + __int32_t i,j,k,yisint,n; + __int32_t hx,hy,ix,iy,is; + + hx = CYG_LIBM_WORD(x); + hy = CYG_LIBM_WORD(y); + ix = hx&0x7fffffff; iy = hy&0x7fffffff; + + /* y==zero: x**0 = 1 */ + if(FLT_UWORD_IS_ZERO(iy)) return one; + + /* x|y==NaN return NaN unless x==1 then return 1 */ + if(FLT_UWORD_IS_NAN(ix) || + FLT_UWORD_IS_NAN(iy)) { // VAE + if(ix==0x3f800000) return one; + else return 2143289344u; + } + /* determine if y is an odd int when x < 0 + * yisint = 0 ... y is not an integer + * yisint = 1 ... y is an odd int + * yisint = 2 ... y is an even int + */ + yisint = 0; + if(hx<0) { + if(iy>=0x4b800000) yisint = 2; /* even integer y */ + else if(iy>=0x3f800000) { + k = (iy>>23)-0x7f; /* exponent */ + j = iy>>(23-k); + if((j<<(23-k))==iy) yisint = 2-(j&1); + } + } + + /* special value of y */ + if (FLT_UWORD_IS_INFINITE(iy)) { /* y is +-inf */ + if (ix==0x3f800000) + return one; /* +-1**+-inf = 1 */ + else if (ix > 0x3f800000)/* (|x|>1)**+-inf = inf,0 */ + return (hy>=0)? y: zero; + else /* (|x|<1)**-,+inf = inf,0 */ + return (hy<0)?-y: zero; + } + if(iy==0x3f800000) { /* y is +-1 */ + if(hy<0) return one/x; else return x; + } + if(hy==0x40000000) return x*x; /* y is 2 */ + if(hy==0x3f000000) { /* y is 0.5 */ + if(hx>=0) /* x >= +0 */ + return __ieee754_sqrtf(x); + } + + ax = fabsf(x); + /* special value of x */ + if(FLT_UWORD_IS_INFINITE(ix)||FLT_UWORD_IS_ZERO(ix)||ix==0x3f800000){ + z = ax; /*x is +-0,+-inf,+-1*/ + if(hy<0) z = one/z; /* z = (1/|x|) */ + if(hx<0) { + if(((ix-0x3f800000)|yisint)==0) { + z = (z-z)/(z-z); /* (-1)**non-int is NaN */ + } else if(yisint==1) + z = -z; /* (x<0)**odd = -(|x|**odd) */ + } + return z; + } + + /* (x<0)**(non-int) is NaN */ + if(((((__uint32_t)hx>>31)-1)|yisint)==0) return (x-x)/(x-x); + + /* |y| is huge */ + if(iy>0x4d000000) { /* if |y| > 2**27 */ + /* over/underflow if x is not close to one */ + if(ix<0x3f7ffff8) return (hy<0)? huge*huge:tiny*tiny; + if(ix>0x3f800007) return (hy>0)? huge*huge:tiny*tiny; + /* now |1-x| is tiny <= 2**-20, suffice to compute + log(x) by x-x^2/2+x^3/3-x^4/4 */ + t = ax-1; /* t has 20 trailing zeros */ + w = (t*t)*((float)0.5-t*((float)0.333333333333-t*(float)0.25)); + u = ivln2_h*t; /* ivln2_h has 16 sig. bits */ + v = t*ivln2_l-w*ivln2; + t1 = u+v; + is = CYG_LIBM_WORD(t1); + SET_FLOAT_WORD(t1,is&0xfffff000); + t2 = v-(t1-u); + } else { + float s2,s_h,s_l,t_h,t_l; + n = 0; + /* take care subnormal number */ + if(FLT_UWORD_IS_SUBNORMAL(ix)) + {ax *= two24; n -= 24; ix = CYG_LIBM_WORD(ax); } + n += ((ix)>>23)-0x7f; + j = ix&0x007fffff; + /* determine interval */ + ix = j|0x3f800000; /* normalize ix */ + if(j<=0x1cc471) k=0; /* |x|>1)|0x20000000)+0x0040000+(k<<21)); + t_l = ax - (t_h-bp[k]); + s_l = v*((u-s_h*t_h)-s_h*t_l); + /* compute log(ax) */ + s2 = s*s; + r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6))))); + r += s_l*(s_h+s); + s2 = s_h*s_h; + t_h = (float)3.0+s2+r; + is = CYG_LIBM_WORD(t_h); + SET_FLOAT_WORD(t_h,is&0xfffff000); + t_l = r-((t_h-(float)3.0)-s2); + /* u+v = s*(1+...) */ + u = s_h*t_h; + v = s_l*t_h+t_l*s; + /* 2/(3log2)*(s+...) */ + p_h = u+v; + is = CYG_LIBM_WORD(p_h); + SET_FLOAT_WORD(p_h,is&0xfffff000); + p_l = v-(p_h-u); + z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */ + z_l = cp_l*p_h+p_l*cp+dp_l[k]; + /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ + t = (float)n; + t1 = (((z_h+z_l)+dp_h[k])+t); + is = CYG_LIBM_WORD(t1); + SET_FLOAT_WORD(t1,is&0xfffff000); + t2 = z_l-(((t1-t)-dp_h[k])-z_h); + } + + s = one; /* s (sign of result -ve**odd) = -1 else = 1 */ + if(((((__uint32_t)hx>>31)-1)|(yisint-1))==0) + s = -one; /* (-ve)**(odd int) */ + + /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ + is = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y1,is&0xfffff000); + p_l = (y-y1)*t1+y*t2; + p_h = y1*t1; + z = p_l+p_h; + j = CYG_LIBM_WORD(z); + i = j&0x7fffffff; + if (j>0) { + if (i>FLT_UWORD_EXP_MAX) + return s*huge*huge; /* overflow */ + else if (i==FLT_UWORD_EXP_MAX) + if(p_l+ovt>z-p_h) return s*huge*huge; /* overflow */ + } else { + if (i>FLT_UWORD_EXP_MIN) + return s*tiny*tiny; /* underflow */ + else if (i==FLT_UWORD_EXP_MIN) + if(p_l<=z-p_h) return s*tiny*tiny; /* underflow */ + } + /* + * compute 2**(p_h+p_l) + */ + k = (i>>23)-0x7f; + n = 0; + if(i>0x3f000000) { /* if |z| > 0.5, set n = [z+0.5] */ + n = j+(0x00800000>>(k+1)); + k = ((n&0x7fffffff)>>23)-0x7f; /* new k for n */ + SET_FLOAT_WORD(t,n&~(0x007fffff>>k)); + n = ((n&0x007fffff)|0x00800000)>>(23-k); + if(j<0) n = -n; + p_h -= t; + } + t = p_l+p_h; + is = CYG_LIBM_WORD(t); + SET_FLOAT_WORD(t,is&0xfffff000); + u = t*lg2_h; + v = (p_l-(t-p_h))*lg2+t*lg2_l; + z = u+v; + w = v-(z-u); + t = z*z; + t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); + r = (z*t1)/(t1-two)-(w+z*w); + z = one-(r-z); + j = CYG_LIBM_WORD(z); + j += (n<<23); + if((j>>23)<=0) z = scalbn(z,(int)n); /* subnormal output */ + else SET_FLOAT_WORD(z,j); + return s*z; +} + +// EOF ef_pow.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_rem_pio2.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_rem_pio2.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_rem_pio2.c @@ -0,0 +1,260 @@ +//=========================================================================== +// +// ef_rem_pio2.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_rem_pio2.c -- float version of e_rem_pio2.c + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* __ieee754_rem_pio2f(x,y) + * + * return the remainder of x rem pi/2 in y[0]+y[1] + * use __kernel_rem_pio2f() + */ + + +#include "mathincl/fdlibm.h" + +/* + * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi + */ +#ifdef __STDC__ +static const __int32_t two_over_pi[] = { +#else +static __int32_t two_over_pi[] = { +#endif +0xA2, 0xF9, 0x83, 0x6E, 0x4E, 0x44, 0x15, 0x29, 0xFC, +0x27, 0x57, 0xD1, 0xF5, 0x34, 0xDD, 0xC0, 0xDB, 0x62, +0x95, 0x99, 0x3C, 0x43, 0x90, 0x41, 0xFE, 0x51, 0x63, +0xAB, 0xDE, 0xBB, 0xC5, 0x61, 0xB7, 0x24, 0x6E, 0x3A, +0x42, 0x4D, 0xD2, 0xE0, 0x06, 0x49, 0x2E, 0xEA, 0x09, +0xD1, 0x92, 0x1C, 0xFE, 0x1D, 0xEB, 0x1C, 0xB1, 0x29, +0xA7, 0x3E, 0xE8, 0x82, 0x35, 0xF5, 0x2E, 0xBB, 0x44, +0x84, 0xE9, 0x9C, 0x70, 0x26, 0xB4, 0x5F, 0x7E, 0x41, +0x39, 0x91, 0xD6, 0x39, 0x83, 0x53, 0x39, 0xF4, 0x9C, +0x84, 0x5F, 0x8B, 0xBD, 0xF9, 0x28, 0x3B, 0x1F, 0xF8, +0x97, 0xFF, 0xDE, 0x05, 0x98, 0x0F, 0xEF, 0x2F, 0x11, +0x8B, 0x5A, 0x0A, 0x6D, 0x1F, 0x6D, 0x36, 0x7E, 0xCF, +0x27, 0xCB, 0x09, 0xB7, 0x4F, 0x46, 0x3F, 0x66, 0x9E, +0x5F, 0xEA, 0x2D, 0x75, 0x27, 0xBA, 0xC7, 0xEB, 0xE5, +0xF1, 0x7B, 0x3D, 0x07, 0x39, 0xF7, 0x8A, 0x52, 0x92, +0xEA, 0x6B, 0xFB, 0x5F, 0xB1, 0x1F, 0x8D, 0x5D, 0x08, +0x56, 0x03, 0x30, 0x46, 0xFC, 0x7B, 0x6B, 0xAB, 0xF0, +0xCF, 0xBC, 0x20, 0x9A, 0xF4, 0x36, 0x1D, 0xA9, 0xE3, +0x91, 0x61, 0x5E, 0xE6, 0x1B, 0x08, 0x65, 0x99, 0x85, +0x5F, 0x14, 0xA0, 0x68, 0x40, 0x8D, 0xFF, 0xD8, 0x80, +0x4D, 0x73, 0x27, 0x31, 0x06, 0x06, 0x15, 0x56, 0xCA, +0x73, 0xA8, 0xC9, 0x60, 0xE2, 0x7B, 0xC0, 0x8C, 0x6B, +}; + +/* This array is like the one in e_rem_pio2.c, but the numbers are + single precision and the last 8 bits are forced to 0. */ +#ifdef __STDC__ +static const __int32_t npio2_hw[] = { +#else +static __int32_t npio2_hw[] = { +#endif +0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, +0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, +0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, +0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, +0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, +0x4242c700, 0x42490f00 +}; + +/* + * invpio2: 24 bits of 2/pi + * pio2_1: first 17 bit of pi/2 + * pio2_1t: pi/2 - pio2_1 + * pio2_2: second 17 bit of pi/2 + * pio2_2t: pi/2 - (pio2_1+pio2_2) + * pio2_3: third 17 bit of pi/2 + * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) + */ + +#ifdef __STDC__ +static const float +#else +static float +#endif +zero = 0.0000000000e+00, /* 0x00000000 */ +half = 5.0000000000e-01, /* 0x3f000000 */ +two8 = 2.5600000000e+02, /* 0x43800000 */ +invpio2 = 6.3661980629e-01, /* 0x3f22f984 */ +pio2_1 = 1.5707855225e+00, /* 0x3fc90f80 */ +pio2_1t = 1.0804334124e-05, /* 0x37354443 */ +pio2_2 = 1.0804273188e-05, /* 0x37354400 */ +pio2_2t = 6.0770999344e-11, /* 0x2e85a308 */ +pio2_3 = 6.0770943833e-11, /* 0x2e85a300 */ +pio2_3t = 6.1232342629e-17; /* 0x248d3132 */ + +#ifdef __STDC__ + __int32_t __ieee754_rem_pio2f(float x, float *y) +#else + __int32_t __ieee754_rem_pio2f(x,y) + float x,y[]; +#endif +{ + float z,w,t,r,fn; + float tx[3]; + __int32_t i,j,n,ix,hx; + int e0,nx; + + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */ + {y[0] = x; y[1] = 0; return 0;} + if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */ + if(hx>0) { + z = x - pio2_1; + if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ + y[0] = z - pio2_1t; + y[1] = (z-y[0])-pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z -= pio2_2; + y[0] = z - pio2_2t; + y[1] = (z-y[0])-pio2_2t; + } + return 1; + } else { /* negative x */ + z = x + pio2_1; + if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ + y[0] = z + pio2_1t; + y[1] = (z-y[0])+pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z += pio2_2; + y[0] = z + pio2_2t; + y[1] = (z-y[0])+pio2_2t; + } + return -1; + } + } + if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */ + t = fabsf(x); + n = (__int32_t) (t*invpio2+half); + fn = (float)n; + r = t-fn*pio2_1; + w = fn*pio2_1t; /* 1st round good to 40 bit */ + if(n<32&&(ix&0xffffff00)!=npio2_hw[n-1]) { + y[0] = r-w; /* quick check no cancellation */ + } else { + __uint32_t high; + j = ix>>23; + y[0] = r-w; + high = CYG_LIBM_WORD(y[0]); + i = j-((high>>23)&0xff); + if(i>8) { /* 2nd iteration needed, good to 57 */ + t = r; + w = fn*pio2_2; + r = t-w; + w = fn*pio2_2t-((t-r)-w); + y[0] = r-w; + high = CYG_LIBM_WORD(y[0]); + i = j-((high>>23)&0xff); + if(i>25) { /* 3rd iteration need, 74 bits acc */ + t = r; /* will cover all possible cases */ + w = fn*pio2_3; + r = t-w; + w = fn*pio2_3t-((t-r)-w); + y[0] = r-w; + } + } + } + y[1] = (r-y[0])-w; + if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} + else return n; + } + /* + * all other (large) arguments + */ + if(!FLT_UWORD_IS_FINITE(ix)) { + y[0]=y[1]=x-x; return 0; + } + /* set z = scalbn(|x|,ilogb(x)-7) */ + e0 = (int)((ix>>23)-134); /* e0 = ilogb(z)-7; */ + SET_FLOAT_WORD(z, ix - ((__int32_t)e0<<23)); + for(i=0;i<2;i++) { + tx[i] = (float)((__int32_t)(z)); + z = (z-tx[i])*two8; + } + tx[2] = z; + nx = 3; + while(tx[nx-1]==zero) nx--; /* skip zero term */ + n = __kernel_rem_pio2f(tx,y,e0,nx,2,two_over_pi); + if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} + return n; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_rem_pio2.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_remainder.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_remainder.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_remainder.c @@ -0,0 +1,135 @@ +//=========================================================================== +// +// ef_remainder.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_remainder.c -- float version of e_remainder.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + + +#ifdef __STDC__ + float __ieee754_remainderf(float x, float p) +#else + float __ieee754_remainderf(x,p) + float x,p; +#endif +{ + __int32_t hx,hp; + __uint32_t sx; + float p_half; + + hx = CYG_LIBM_WORD(x); + hp = CYG_LIBM_WORD(p); + sx = hx&0x80000000; + hp &= 0x7fffffff; + hx &= 0x7fffffff; + + /* purge off exception values */ + if(FLT_UWORD_IS_ZERO(hp)|| + !FLT_UWORD_IS_FINITE(hx)|| + FLT_UWORD_IS_NAN(hp)) + return (x*p)/(x*p); + + + if (hp<=FLT_UWORD_HALF_MAX) x = __ieee754_fmodf(x,p+p); /* now x < 2p */ + if ((hx-hp)==0) return zero*x; + x = fabsf(x); + p = fabsf(p); + if (hp<0x01000000) { + if(x+x>p) { + x-=p; + if(x+x>=p) x -= p; + } + } else { + p_half = (float)0.5*p; + if(x>p_half) { + x-=p; + if(x>=p_half) x -= p; + } + } + hx = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(x,hx^sx); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_remainder.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_scalb.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_scalb.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_scalb.c @@ -0,0 +1,118 @@ +//=========================================================================== +// +// ef_scalb.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_scalb.c -- float version of e_scalb.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef CYGFUN_LIBM_SVID3_scalb +#ifdef __STDC__ + float __ieee754_scalbf(float x, float fn) +#else + float __ieee754_scalbf(float x, int fn) +#endif +#else +#ifdef __STDC__ + float __ieee754_scalbf(float x, float fn) +#else + float __ieee754_scalbf(x,fn) + float x, fn; +#endif +#endif +{ +#ifdef CYGFUN_LIBM_SVID3_scalb + return scalbnf(x,fn); +#else + if (isnan(x)||isnan(fn)) return x*fn; + if (!finitef(fn)) { + if(fn>(float)0.0) return x*fn; + else return x/(-fn); + } + if (rintf(fn)!=fn) return (fn-fn)/(fn-fn); +#if INT_MAX > 65000 + if ( fn > (float)65000.0) return scalbnf(x, 65000); + if (-fn > (float)65000.0) return scalbnf(x,-65000); +#else + if ( fn > (float)32000.0) return scalbnf(x, 32000); + if (-fn > (float)32000.0) return scalbnf(x,-32000); +#endif + return scalbnf(x,(int)fn); +#endif +} + +#endif // ifdef CYGPKG_LIBM + +// EOF e_scalb.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_sinh.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_sinh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_sinh.c @@ -0,0 +1,130 @@ +//=========================================================================== +// +// ef_sinh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_sinh.c -- float version of e_sinh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one = 1.0, shuge = 1.0e37; +#else +static float one = 1.0, shuge = 1.0e37; +#endif + +#ifdef __STDC__ + float __ieee754_sinhf(float x) +#else + float __ieee754_sinhf(x) + float x; +#endif +{ + float t,w,h; + __int32_t ix,jx; + + jx = CYG_LIBM_WORD(x); + ix = jx&0x7fffffff; + + /* x is INF or NaN */ + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; + + h = 0.5; + if (jx<0) h = -h; + /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */ + if (ix < 0x41b00000) { /* |x|<22 */ + if (ix<0x31800000) /* |x|<2**-28 */ + if(shuge+x>one) return x;/* sinh(tiny) = tiny with inexact */ + t = expm1f(fabsf(x)); + if(ix<0x3f800000) return h*((float)2.0*t-t*t/(t+one)); + return h*(t+t/(t+one)); + } + + /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */ + if (ix<=FLT_UWORD_LOG_MAX) return h*__ieee754_expf(fabsf(x)); + + /* |x| in [log(maxdouble), overflowthresold] */ + if (ix<=FLT_UWORD_LOG_2MAX) { + w = __ieee754_expf((float)0.5*fabsf(x)); + t = h*w; + return t*w; + } + + /* |x| > overflowthresold, sinh(x) overflow */ + return x*shuge; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_sinh.c diff --git a/packages/language/c/libm/current/src/float/ieee754-core/ef_sqrt.c b/packages/language/c/libm/current/src/float/ieee754-core/ef_sqrt.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/ieee754-core/ef_sqrt.c @@ -0,0 +1,148 @@ +//=========================================================================== +// +// ef_sqrt.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* ef_sqrtf.c -- float version of e_sqrt.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +static const float one = 1.0, tiny=1.0e-30; + +float __ieee754_sqrtf(float x) +{ + float z; + cyg_uint32 r,hx; + cyg_int32 ix,s,q,m,t,i; + + ix = CYG_LIBM_WORD(x); + + hx = ix&0x7fffffff; + + /* take care of Inf and NaN */ + if(!FLT_UWORD_IS_FINITE(hx)) + return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf + sqrt(-inf)=sNaN */ + /* take care of zero and -ves */ + if(FLT_UWORD_IS_ZERO(hx)) return x;/* sqrt(+-0) = +-0 */ + if(ix<0) return (x-x)/(x-x); /* sqrt(-ve) = sNaN */ + + /* normalize x */ + m = (ix>>23); + if(FLT_UWORD_IS_SUBNORMAL(hx)) { /* subnormal x */ + for(i=0;(ix&0x00800000L)==0;i++) ix<<=1; + m -= i-1; + } + m -= 127; /* unbias exponent */ + ix = (ix&0x007fffffL)|0x00800000L; + if(m&1) /* odd m, double x to make it even */ + ix += ix; + m >>= 1; /* m = [m/2] */ + + /* generate sqrt(x) bit by bit */ + ix += ix; + q = s = 0; /* q = sqrt(x) */ + r = 0x01000000L; /* r = moving bit from right to left */ + + while(r!=0) { + t = s+r; + if(t<=ix) { + s = t+r; + ix -= t; + q += r; + } + ix += ix; + r>>=1; + } + + /* use floating add to find out rounding direction */ + if(ix!=0) { + z = one-tiny; /* trigger inexact flag */ + if (z>=one) { + z = one+tiny; + if (z>one) + q += 2; + else + q += (q&1); + } + } + ix = (q>>1)+0x3f000000L; + ix += (m <<23); + SET_FLOAT_WORD(z,ix); + return z; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF ef_sqrt.c diff --git a/packages/language/c/libm/current/src/float/internal/kf_cos.c b/packages/language/c/libm/current/src/float/internal/kf_cos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/internal/kf_cos.c @@ -0,0 +1,126 @@ +//=========================================================================== +// +// kf_cos.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* kf_cos.c -- float version of k_cos.c + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0000000000e+00, /* 0x3f800000 */ +C1 = 4.1666667908e-02, /* 0x3d2aaaab */ +C2 = -1.3888889225e-03, /* 0xbab60b61 */ +C3 = 2.4801587642e-05, /* 0x37d00d01 */ +C4 = -2.7557314297e-07, /* 0xb493f27c */ +C5 = 2.0875723372e-09, /* 0x310f74f6 */ +C6 = -1.1359647598e-11; /* 0xad47d74e */ + +#ifdef __STDC__ + float __kernel_cosf(float x, float y) +#else + float __kernel_cosf(x, y) + float x,y; +#endif +{ + float a,hz,z,r,qx; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; /* ix = |x|'s high word*/ + if(ix<0x32000000) { /* if x < 2**27 */ + if(((int)x)==0) return one; /* generate inexact */ + } + z = x*x; + r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6))))); + if(ix < 0x3e99999a) /* if |x| < 0.3 */ + return one - ((float)0.5*z - (z*r - x*y)); + else { + if(ix > 0x3f480000) { /* x > 0.78125 */ + qx = (float)0.28125; + } else { + SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */ + } + hz = (float)0.5*z-qx; + a = one-qx; + return a - (hz - (z*r-x*y)); + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF kf_cos.c diff --git a/packages/language/c/libm/current/src/float/internal/kf_rem_pio2.c b/packages/language/c/libm/current/src/float/internal/kf_rem_pio2.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/internal/kf_rem_pio2.c @@ -0,0 +1,275 @@ +//=========================================================================== +// +// kf_rem_pio2.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* kf_rem_pio2.c -- float version of k_rem_pio2.c + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +/* In the float version, the input parameter x contains 8 bit + integers, not 24 bit integers. 113 bit precision is not supported. */ + +#ifdef __STDC__ +static const int init_jk[] = {4,7,9}; /* initial value for jk */ +#else +static int init_jk[] = {4,7,9}; +#endif + +#ifdef __STDC__ +static const float PIo2[] = { +#else +static float PIo2[] = { +#endif + 1.5703125000e+00, /* 0x3fc90000 */ + 4.5776367188e-04, /* 0x39f00000 */ + 2.5987625122e-05, /* 0x37da0000 */ + 7.5437128544e-08, /* 0x33a20000 */ + 6.0026650317e-11, /* 0x2e840000 */ + 7.3896444519e-13, /* 0x2b500000 */ + 5.3845816694e-15, /* 0x27c20000 */ + 5.6378512969e-18, /* 0x22d00000 */ + 8.3009228831e-20, /* 0x1fc40000 */ + 3.2756352257e-22, /* 0x1bc60000 */ + 6.3331015649e-25, /* 0x17440000 */ +}; + +#ifdef __STDC__ +static const float +#else +static float +#endif +zero = 0.0, +one = 1.0, +two8 = 2.5600000000e+02, /* 0x43800000 */ +twon8 = 3.9062500000e-03; /* 0x3b800000 */ + +#ifdef __STDC__ + int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const __int32_t *ipio2) +#else + int __kernel_rem_pio2f(x,y,e0,nx,prec,ipio2) + float x[], y[]; int e0,nx,prec; __int32_t ipio2[]; +#endif +{ + __int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; + float z,fw,f[20],fq[20],q[20]; + + /* initialize jk*/ + jk = init_jk[prec]; + jp = jk; + + /* determine jx,jv,q0, note that 3>q0 */ + jx = nx-1; + jv = (e0-3)/8; if(jv<0) jv=0; + q0 = e0-8*(jv+1); + + /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ + j = jv-jx; m = jx+jk; + for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (float) ipio2[j]; + + /* compute q[0],q[1],...q[jk] */ + for (i=0;i<=jk;i++) { + for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw; + } + + jz = jk; +recompute: + /* distill q[] into iq[] reversingly */ + for(i=0,j=jz,z=q[jz];j>0;i++,j--) { + fw = (float)((__int32_t)(twon8* z)); + iq[i] = (__int32_t)(z-two8*fw); + z = q[j-1]+fw; + } + + /* compute n */ + z = scalbnf(z,(int)q0); /* actual value of z */ + z -= (float)8.0*floorf(z*(float)0.125); /* trim off integer >= 8 */ + n = (__int32_t) z; + z -= (float)n; + ih = 0; + if(q0>0) { /* need iq[jz-1] to determine n */ + i = (iq[jz-1]>>(8-q0)); n += i; + iq[jz-1] -= i<<(8-q0); + ih = iq[jz-1]>>(7-q0); + } + else if(q0==0) ih = iq[jz-1]>>8; + else if(z>=(float)0.5) ih=2; + + if(ih>0) { /* q > 0.5 */ + n += 1; carry = 0; + for(i=0;i0) { /* rare case: chance is 1 in 12 */ + switch(q0) { + case 1: + iq[jz-1] &= 0x7f; break; + case 2: + iq[jz-1] &= 0x3f; break; + } + } + if(ih==2) { + z = one - z; + if(carry!=0) z -= scalbnf(one,(int)q0); + } + } + + /* check if recomputation is needed */ + if(z==zero) { + j = 0; + for (i=jz-1;i>=jk;i--) j |= iq[i]; + if(j==0) { /* need recomputation */ + for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */ + + for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */ + f[jx+i] = (float) ipio2[jv+i]; + for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; + q[i] = fw; + } + jz += k; + goto recompute; + } + } + + /* chop off zero terms */ + if(z==(float)0.0) { + jz -= 1; q0 -= 8; + while(iq[jz]==0) { jz--; q0-=8;} + } else { /* break z into 8-bit if necessary */ + z = scalbnf(z,-(int)q0); + if(z>=two8) { + fw = (float)((__int32_t)(twon8*z)); + iq[jz] = (__int32_t)(z-two8*fw); + jz += 1; q0 += 8; + iq[jz] = (__int32_t) fw; + } else iq[jz] = (__int32_t) z ; + } + + /* convert integer "bit" chunk to floating-point value */ + fw = scalbnf(one,(int)q0); + for(i=jz;i>=0;i--) { + q[i] = fw*(float)iq[i]; fw*=twon8; + } + + /* compute PIo2[0,...,jp]*q[jz,...,0] */ + for(i=jz;i>=0;i--) { + for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k]; + fq[jz-i] = fw; + } + + /* compress fq[] into y[] */ + switch(prec) { + case 0: + fw = 0.0; + for (i=jz;i>=0;i--) fw += fq[i]; + y[0] = (ih==0)? fw: -fw; + break; + case 1: + case 2: + fw = 0.0; + for (i=jz;i>=0;i--) fw += fq[i]; + y[0] = (ih==0)? fw: -fw; + fw = fq[0]-fw; + for (i=1;i<=jz;i++) fw += fq[i]; + y[1] = (ih==0)? fw: -fw; + break; + case 3: /* painful */ + for (i=jz;i>0;i--) { + fw = fq[i-1]+fq[i]; + fq[i] += fq[i-1]-fw; + fq[i-1] = fw; + } + for (i=jz;i>1;i--) { + fw = fq[i-1]+fq[i]; + fq[i] += fq[i-1]-fw; + fq[i-1] = fw; + } + for (fw=0.0,i=jz;i>=2;i--) fw += fq[i]; + if(ih==0) { + y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; + } else { + y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; + } + } + return n&7; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF kf_rem_pio2.c diff --git a/packages/language/c/libm/current/src/float/internal/kf_sin.c b/packages/language/c/libm/current/src/float/internal/kf_sin.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/internal/kf_sin.c @@ -0,0 +1,116 @@ +//=========================================================================== +// +// kf_sin.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* kf_sin.c -- float version of k_sin.c + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +half = 5.0000000000e-01,/* 0x3f000000 */ +S1 = -1.6666667163e-01, /* 0xbe2aaaab */ +S2 = 8.3333337680e-03, /* 0x3c088889 */ +S3 = -1.9841270114e-04, /* 0xb9500d01 */ +S4 = 2.7557314297e-06, /* 0x3638ef1b */ +S5 = -2.5050759689e-08, /* 0xb2d72f34 */ +S6 = 1.5896910177e-10; /* 0x2f2ec9d3 */ + +#ifdef __STDC__ + float __kernel_sinf(float x, float y, int iy) +#else + float __kernel_sinf(x, y, iy) + float x,y; int iy; /* iy=0 if y is zero */ +#endif +{ + float z,r,v; + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; /* high word of x */ + if(ix<0x32000000) /* |x| < 2**-27 */ + {if((int)x==0) return x;} /* generate inexact */ + z = x*x; + v = z*x; + r = S2+z*(S3+z*(S4+z*(S5+z*S6))); + if(iy==0) return x+v*(S1+z*r); + else return x-((z*(half*y-v*r)-y)-v*S1); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF kf_sin.c diff --git a/packages/language/c/libm/current/src/float/internal/kf_tan.c b/packages/language/c/libm/current/src/float/internal/kf_tan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/internal/kf_tan.c @@ -0,0 +1,163 @@ +//=========================================================================== +// +// kf_tan.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* kf_tan.c -- float version of k_tan.c + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0000000000e+00, /* 0x3f800000 */ +pio4 = 7.8539812565e-01, /* 0x3f490fda */ +pio4lo= 3.7748947079e-08, /* 0x33222168 */ +T[] = { + 3.3333334327e-01, /* 0x3eaaaaab */ + 1.3333334029e-01, /* 0x3e088889 */ + 5.3968254477e-02, /* 0x3d5d0dd1 */ + 2.1869488060e-02, /* 0x3cb327a4 */ + 8.8632395491e-03, /* 0x3c11371f */ + 3.5920790397e-03, /* 0x3b6b6916 */ + 1.4562094584e-03, /* 0x3abede48 */ + 5.8804126456e-04, /* 0x3a1a26c8 */ + 2.4646313977e-04, /* 0x398137b9 */ + 7.8179444245e-05, /* 0x38a3f445 */ + 7.1407252108e-05, /* 0x3895c07a */ + -1.8558637748e-05, /* 0xb79bae5f */ + 2.5907305826e-05, /* 0x37d95384 */ +}; + +#ifdef __STDC__ + float __kernel_tanf(float x, float y, int iy) +#else + float __kernel_tanf(x, y, iy) + float x,y; int iy; +#endif +{ + float z,r,v,w,s; + __int32_t ix,hx; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; /* high word of |x| */ + if(ix<0x31800000) /* x < 2**-28 */ + {if((int)x==0) { /* generate inexact */ + if((ix|(iy+1))==0) return one/fabsf(x); + else return (iy==1)? x: -one/x; + } + } + if(ix>=0x3f2ca140) { /* |x|>=0.6744 */ + if(hx<0) {x = -x; y = -y;} + z = pio4-x; + w = pio4lo-y; + x = z+w; y = 0.0; + } + z = x*x; + w = z*z; + /* Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11])))); + v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12]))))); + s = z*x; + r = y + z*(s*(r+v)+y); + r += T[0]*s; + w = x+r; + if(ix>=0x3f2ca140) { + v = (float)iy; + return (float)(1-((hx>>30)&2))*(v-(float)2.0*(x-(w*w/(w+v)-r))); + } + if(iy==1) return w; + else { /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ + /* compute -1.0/(x+r) accurately */ + float a,t; + __int32_t i; + z = w; + i = CYG_LIBM_WORD(z); + SET_FLOAT_WORD(z,i&0xfffff000); + v = r-(z - x); /* z+v = r+x */ + t = a = -(float)1.0/w; /* a = -1.0/w */ + i = CYG_LIBM_WORD(t); + SET_FLOAT_WORD(t,i&0xfffff000); + s = (float)1.0+t*z; + return t+a*(s+t*v); + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF kf_tan.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_asinh.c b/packages/language/c/libm/current/src/float/portable-api/sf_asinh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_asinh.c @@ -0,0 +1,118 @@ +//=========================================================================== +// +// sf_asinh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_asinh.c -- float version of s_asinh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0000000000e+00, /* 0x3F800000 */ +ln2 = 6.9314718246e-01, /* 0x3f317218 */ +huge= 1.0000000000e+30; + +#ifdef __STDC__ + float asinhf(float x) +#else + float asinhf(x) + float x; +#endif +{ + float t,w; + __int32_t hx,ix; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; /* x is inf or NaN */ + if(ix< 0x31800000) { /* |x|<2**-28 */ + if(huge+x>one) return x; /* return x inexact except 0 */ + } + if(ix>0x4d800000) { /* |x| > 2**28 */ + w = __ieee754_logf(fabsf(x))+ln2; + } else if (ix>0x40000000) { /* 2**28 > |x| > 2.0 */ + t = fabsf(x); + w = __ieee754_logf((float)2.0*t+one/(__ieee754_sqrtf(x*x+one)+t)); + } else { /* 2.0 > |x| > 2**-28 */ + t = x*x; + w =log1pf(fabsf(x)+t/(one+__ieee754_sqrtf(one+t))); + } + if(hx>0) return w; else return -w; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_asinh.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_atan.c b/packages/language/c/libm/current/src/float/portable-api/sf_atan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_atan.c @@ -0,0 +1,183 @@ +//=========================================================================== +// +// sf_atan.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_atan.c -- float version of s_atan.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float atanhi[] = { +#else +static float atanhi[] = { +#endif + 4.6364760399e-01, /* atan(0.5)hi 0x3eed6338 */ + 7.8539812565e-01, /* atan(1.0)hi 0x3f490fda */ + 9.8279368877e-01, /* atan(1.5)hi 0x3f7b985e */ + 1.5707962513e+00, /* atan(inf)hi 0x3fc90fda */ +}; + +#ifdef __STDC__ +static const float atanlo[] = { +#else +static float atanlo[] = { +#endif + 5.0121582440e-09, /* atan(0.5)lo 0x31ac3769 */ + 3.7748947079e-08, /* atan(1.0)lo 0x33222168 */ + 3.4473217170e-08, /* atan(1.5)lo 0x33140fb4 */ + 7.5497894159e-08, /* atan(inf)lo 0x33a22168 */ +}; + +#ifdef __STDC__ +static const float aT[] = { +#else +static float aT[] = { +#endif + 3.3333334327e-01, /* 0x3eaaaaaa */ + -2.0000000298e-01, /* 0xbe4ccccd */ + 1.4285714924e-01, /* 0x3e124925 */ + -1.1111110449e-01, /* 0xbde38e38 */ + 9.0908870101e-02, /* 0x3dba2e6e */ + -7.6918758452e-02, /* 0xbd9d8795 */ + 6.6610731184e-02, /* 0x3d886b35 */ + -5.8335702866e-02, /* 0xbd6ef16b */ + 4.9768779427e-02, /* 0x3d4bda59 */ + -3.6531571299e-02, /* 0xbd15a221 */ + 1.6285819933e-02, /* 0x3c8569d7 */ +}; + +#ifdef __STDC__ + static const float +#else + static float +#endif +one = 1.0, +huge = 1.0e30; + +#ifdef __STDC__ + float atanf(float x) +#else + float atanf(x) + float x; +#endif +{ + float w,s1,s2,z; + __int32_t ix,hx,id; + + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(ix>=0x50800000) { /* if |x| >= 2^34 */ + if(FLT_UWORD_IS_NAN(ix)) + return x+x; /* NaN */ + if(hx>0) return atanhi[3]+atanlo[3]; + else return -atanhi[3]-atanlo[3]; + } if (ix < 0x3ee00000) { /* |x| < 0.4375 */ + if (ix < 0x31000000) { /* |x| < 2^-29 */ + if(huge+x>one) return x; /* raise inexact */ + } + id = -1; + } else { + x = fabsf(x); + if (ix < 0x3f980000) { /* |x| < 1.1875 */ + if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */ + id = 0; x = ((float)2.0*x-one)/((float)2.0+x); + } else { /* 11/16<=|x|< 19/16 */ + id = 1; x = (x-one)/(x+one); + } + } else { + if (ix < 0x401c0000) { /* |x| < 2.4375 */ + id = 2; x = (x-(float)1.5)/(one+(float)1.5*x); + } else { /* 2.4375 <= |x| < 2^66 */ + id = 3; x = -(float)1.0/x; + } + }} + /* end of argument reduction */ + z = x*x; + w = z*z; + /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + s1 = z*(aT[0]+w*(aT[2]+w*(aT[4]+w*(aT[6]+w*(aT[8]+w*aT[10]))))); + s2 = w*(aT[1]+w*(aT[3]+w*(aT[5]+w*(aT[7]+w*aT[9])))); + if (id<0) return x - x*(s1+s2); + else { + z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x); + return (hx<0)? -z:z; + } +} + + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_atan.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_cbrt.c b/packages/language/c/libm/current/src/float/portable-api/sf_cbrt.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_cbrt.c @@ -0,0 +1,147 @@ +//=========================================================================== +// +// sf_cbrt.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_cbrt.c -- float version of s_cbrt.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + + +#include "mathincl/fdlibm.h" + +/* cbrtf(x) + * Return cube root of x + */ +#ifdef __STDC__ +static const __uint32_t +#else +static __uint32_t +#endif + B1 = 709958130, /* B1 = (84+2/3-0.03306235651)*2**23 */ + B2 = 642849266; /* B2 = (76+2/3-0.03306235651)*2**23 */ + +#ifdef __STDC__ +static const float +#else +static float +#endif +C = 5.4285717010e-01, /* 19/35 = 0x3f0af8b0 */ +D = -7.0530611277e-01, /* -864/1225 = 0xbf348ef1 */ +E = 1.4142856598e+00, /* 99/70 = 0x3fb50750 */ +F = 1.6071428061e+00, /* 45/28 = 0x3fcdb6db */ +G = 3.5714286566e-01; /* 5/14 = 0x3eb6db6e */ + +#ifdef __STDC__ + float cbrtf(float x) +#else + float cbrtf(x) + float x; +#endif +{ + __int32_t hx; + float r,s,t; + __uint32_t sign; + __uint32_t high; + + hx = CYG_LIBM_WORD(x); + sign=hx&0x80000000; /* sign= sign(x) */ + hx ^=sign; + if(!FLT_UWORD_IS_FINITE(hx)) + return(x+x); /* cbrt(NaN,INF) is itself */ + if(FLT_UWORD_IS_ZERO(hx)) + return(x); /* cbrt(0) is itself */ + + SET_FLOAT_WORD(x,hx); /* x <- |x| */ + /* rough cbrt to 5 bits */ + if(FLT_UWORD_IS_SUBNORMAL(hx)) /* subnormal number */ + {SET_FLOAT_WORD(t,0x4b800000); /* set t= 2**24 */ + t*=x; high = CYG_LIBM_WORD(t); SET_FLOAT_WORD(t,high/3+B2); + } + else + SET_FLOAT_WORD(t,hx/3+B1); + + + /* new cbrt to 23 bits */ + r=t*t/x; + s=C+r*t; + t*=G+F/(s+E+D/s); + + /* retore the sign bit */ + high = CYG_LIBM_WORD(t); + SET_FLOAT_WORD(t,high|sign); + return(t); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_cbrt.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_ceil.c b/packages/language/c/libm/current/src/float/portable-api/sf_ceil.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_ceil.c @@ -0,0 +1,124 @@ +//=========================================================================== +// +// sf_ceil.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_ceil.c -- float version of s_ceil.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float huge = 1.0e30; +#else +static float huge = 1.0e30; +#endif + +#ifdef __STDC__ + float ceilf(float x) +#else + float ceilf(x) + float x; +#endif +{ + __int32_t i0,j0; + __uint32_t i,ix; + i0 = CYG_LIBM_WORD(x); + ix = (i0&0x7fffffff); + j0 = (ix>>23)-0x7f; + if(j0<23) { + if(j0<0) { /* raise inexact if x != 0 */ + if(huge+x>(float)0.0) {/* return 0*sign(x) if |x|<1 */ + if(i0<0) {i0=0x80000000;} + else if(!FLT_UWORD_IS_ZERO(ix)) { i0=0x3f800000;} + } + } else { + i = (0x007fffff)>>j0; + if((i0&i)==0) return x; /* x is integral */ + if(huge+x>(float)0.0) { /* raise inexact flag */ + if(i0>0) i0 += (0x00800000)>>j0; + i0 &= (~i); + } + } + } else { + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; /* inf or NaN */ + else return x; /* x is integral */ + } + SET_FLOAT_WORD(x,i0); + return x; +} + + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_ceil.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_copysign.c b/packages/language/c/libm/current/src/float/portable-api/sf_copysign.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_copysign.c @@ -0,0 +1,103 @@ +//=========================================================================== +// +// sf_copysign.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_copysign.c -- float version of s_copysign.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * copysignf(float x, float y) + * copysignf(x,y) returns a value with the magnitude of x and + * with the sign bit of y. + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float copysignf(float x, float y) +#else + float copysignf(x,y) + float x,y; +#endif +{ + __uint32_t ix,iy; + ix = CYG_LIBM_WORD(x); + iy = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(x,(ix&0x7fffffff)|(iy&0x80000000)); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_copysign.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_cos.c b/packages/language/c/libm/current/src/float/portable-api/sf_cos.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_cos.c @@ -0,0 +1,120 @@ +//=========================================================================== +// +// sf_cos.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + +/* sf_cos.c -- float version of s_cos.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one=1.0; +#else +static float one=1.0; +#endif + +#ifdef __STDC__ + float cosf(float x) +#else + float cosf(x) + float x; +#endif +{ + float y[2],z=0.0; + __int32_t n,ix; + + ix = CYG_LIBM_WORD(x); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if(ix <= 0x3f490fd8) return __kernel_cosf(x,z); + + /* cos(Inf or NaN) is NaN */ + else if (!FLT_UWORD_IS_FINITE(ix)) return x-x; + + /* argument reduction needed */ + else { + n = __ieee754_rem_pio2f(x,y); + switch(n&3) { + case 0: return __kernel_cosf(y[0],y[1]); + case 1: return -__kernel_sinf(y[0],y[1],1); + case 2: return -__kernel_cosf(y[0],y[1]); + default: + return __kernel_sinf(y[0],y[1],1); + } + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_cos.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_erf.c b/packages/language/c/libm/current/src/float/portable-api/sf_erf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_erf.c @@ -0,0 +1,285 @@ +//=========================================================================== +// +// sf_erf.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_erf.c -- float version of s_erf.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +tiny = 1e-30, +half= 5.0000000000e-01, /* 0x3F000000 */ +one = 1.0000000000e+00, /* 0x3F800000 */ +two = 2.0000000000e+00, /* 0x40000000 */ + /* c = (subfloat)0.84506291151 */ +erx = 8.4506291151e-01, /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +efx = 1.2837916613e-01, /* 0x3e0375d4 */ +efx8= 1.0270333290e+00, /* 0x3f8375d4 */ +pp0 = 1.2837916613e-01, /* 0x3e0375d4 */ +pp1 = -3.2504209876e-01, /* 0xbea66beb */ +pp2 = -2.8481749818e-02, /* 0xbce9528f */ +pp3 = -5.7702702470e-03, /* 0xbbbd1489 */ +pp4 = -2.3763017452e-05, /* 0xb7c756b1 */ +qq1 = 3.9791721106e-01, /* 0x3ecbbbce */ +qq2 = 6.5022252500e-02, /* 0x3d852a63 */ +qq3 = 5.0813062117e-03, /* 0x3ba68116 */ +qq4 = 1.3249473704e-04, /* 0x390aee49 */ +qq5 = -3.9602282413e-06, /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */ +pa1 = 4.1485610604e-01, /* 0x3ed46805 */ +pa2 = -3.7220788002e-01, /* 0xbebe9208 */ +pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */ +pa4 = -1.1089469492e-01, /* 0xbde31cc2 */ +pa5 = 3.5478305072e-02, /* 0x3d1151b3 */ +pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */ +qa1 = 1.0642088205e-01, /* 0x3dd9f331 */ +qa2 = 5.4039794207e-01, /* 0x3f0a5785 */ +qa3 = 7.1828655899e-02, /* 0x3d931ae7 */ +qa4 = 1.2617121637e-01, /* 0x3e013307 */ +qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */ +qa6 = 1.1984500103e-02, /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +ra0 = -9.8649440333e-03, /* 0xbc21a093 */ +ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */ +ra2 = -1.0558626175e+01, /* 0xc128f022 */ +ra3 = -6.2375331879e+01, /* 0xc2798057 */ +ra4 = -1.6239666748e+02, /* 0xc322658c */ +ra5 = -1.8460508728e+02, /* 0xc3389ae7 */ +ra6 = -8.1287437439e+01, /* 0xc2a2932b */ +ra7 = -9.8143291473e+00, /* 0xc11d077e */ +sa1 = 1.9651271820e+01, /* 0x419d35ce */ +sa2 = 1.3765776062e+02, /* 0x4309a863 */ +sa3 = 4.3456588745e+02, /* 0x43d9486f */ +sa4 = 6.4538726807e+02, /* 0x442158c9 */ +sa5 = 4.2900814819e+02, /* 0x43d6810b */ +sa6 = 1.0863500214e+02, /* 0x42d9451f */ +sa7 = 6.5702495575e+00, /* 0x40d23f7c */ +sa8 = -6.0424413532e-02, /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +rb0 = -9.8649431020e-03, /* 0xbc21a092 */ +rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */ +rb2 = -1.7757955551e+01, /* 0xc18e104b */ +rb3 = -1.6063638306e+02, /* 0xc320a2ea */ +rb4 = -6.3756646729e+02, /* 0xc41f6441 */ +rb5 = -1.0250950928e+03, /* 0xc480230b */ +rb6 = -4.8351919556e+02, /* 0xc3f1c275 */ +sb1 = 3.0338060379e+01, /* 0x41f2b459 */ +sb2 = 3.2579251099e+02, /* 0x43a2e571 */ +sb3 = 1.5367296143e+03, /* 0x44c01759 */ +sb4 = 3.1998581543e+03, /* 0x4547fdbb */ +sb5 = 2.5530502930e+03, /* 0x451f90ce */ +sb6 = 4.7452853394e+02, /* 0x43ed43a7 */ +sb7 = -2.2440952301e+01; /* 0xc1b38712 */ + +#ifdef __STDC__ + float erff(float x) +#else + float erff(x) + float x; +#endif +{ + __int32_t hx,ix,i; + float R,S,P,Q,s,y,z,r; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(!FLT_UWORD_IS_FINITE(ix)) { /* erf(nan)=nan */ + i = ((__uint32_t)hx>>31)<<1; + return (float)(1-i)+one/x; /* erf(+-inf)=+-1 */ + } + + if(ix < 0x3f580000) { /* |x|<0.84375 */ + if(ix < 0x31800000) { /* |x|<2**-28 */ + if (ix < 0x04000000) + /*avoid underflow */ + return (float)0.125*((float)8.0*x+efx8*x); + return x + efx*x; + } + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); + y = r/s; + return x + x*y; + } + if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ + s = fabsf(x)-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); + if(hx>=0) return erx + P/Q; else return -erx - P/Q; + } + if (ix >= 0x40c00000) { /* inf>|x|>=6 */ + if(hx>=0) return one-tiny; else return tiny-one; + } + x = fabsf(x); + s = one/(x*x); + if(ix< 0x4036DB6E) { /* |x| < 1/0.35 */ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( + ra5+s*(ra6+s*ra7)))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( + sa5+s*(sa6+s*(sa7+s*sa8))))))); + } else { /* |x| >= 1/0.35 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( + rb5+s*rb6))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( + sb5+s*(sb6+s*sb7)))))); + } + ix = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(z,ix&0xfffff000); + r = __ieee754_expf(-z*z-(float)0.5625)*__ieee754_expf((z-x)*(z+x)+R/S); + if(hx>=0) return one-r/x; else return r/x-one; +} + +#ifdef __STDC__ + float erfcf(float x) +#else + float erfcf(x) + float x; +#endif +{ + __int32_t hx,ix; + float R,S,P,Q,s,y,z,r; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + if(!FLT_UWORD_IS_FINITE(ix)) { /* erfc(nan)=nan */ + /* erfc(+-inf)=0,2 */ + return (float)(((__uint32_t)hx>>31)<<1)+one/x; + } + + if(ix < 0x3f580000) { /* |x|<0.84375 */ + if(ix < 0x23800000) /* |x|<2**-56 */ + return one-x; + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); + y = r/s; + if(hx < 0x3e800000) { /* x<1/4 */ + return one-(x+x*y); + } else { + r = x*y; + r += (x-half); + return half - r ; + } + } + if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ + s = fabsf(x)-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); + if(hx>=0) { + z = one-erx; return z - P/Q; + } else { + z = erx+P/Q; return one+z; + } + } + if (ix < 0x41e00000) { /* |x|<28 */ + x = fabsf(x); + s = one/(x*x); + if(ix< 0x4036DB6D) { /* |x| < 1/.35 ~ 2.857143*/ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( + ra5+s*(ra6+s*ra7)))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( + sa5+s*(sa6+s*(sa7+s*sa8))))))); + } else { /* |x| >= 1/.35 ~ 2.857143 */ + if(hx<0&&ix>=0x40c00000) return two-tiny;/* x < -6 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( + rb5+s*rb6))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( + sb5+s*(sb6+s*sb7)))))); + } + ix = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(z,ix&0xfffff000); + r = __ieee754_expf(-z*z-(float)0.5625)* + __ieee754_expf((z-x)*(z+x)+R/S); + if(hx>0) return r/x; else return two-r/x; + } else { + if(hx>0) return tiny*tiny; else return two-tiny; + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_erf.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_expm1.c b/packages/language/c/libm/current/src/float/portable-api/sf_expm1.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_expm1.c @@ -0,0 +1,186 @@ +//=========================================================================== +// +// s_expm1.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2001-07-20 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + + +/* sf_expm1.c -- float version of s_expm1.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +one = 1.0, +huge = 1.0e+30, +tiny = 1.0e-30, +ln2_hi = 6.9313812256e-01,/* 0x3f317180 */ +ln2_lo = 9.0580006145e-06,/* 0x3717f7d1 */ +invln2 = 1.4426950216e+00,/* 0x3fb8aa3b */ + /* scaled coefficients related to expm1 */ +Q1 = -3.3333335072e-02, /* 0xbd088889 */ +Q2 = 1.5873016091e-03, /* 0x3ad00d01 */ +Q3 = -7.9365076090e-05, /* 0xb8a670cd */ +Q4 = 4.0082177293e-06, /* 0x36867e54 */ +Q5 = -2.0109921195e-07; /* 0xb457edbb */ + +#ifdef __STDC__ + float expm1f(float x) +#else + float expm1f(x) + float x; +#endif +{ + float y,hi,lo,c,t,e,hxs,hfx,r1; + __int32_t k,xsb; + __uint32_t hx; + + hx = CYG_LIBM_WORD(x); + xsb = hx&0x80000000; /* sign bit of x */ + if(xsb==0) y=x; else y= -x; /* y = |x| */ + hx &= 0x7fffffff; /* high word of |x| */ + + /* filter out huge and non-finite argument */ + if(hx >= 0x4195b844) { /* if |x|>=27*ln2 */ + if(FLT_UWORD_IS_NAN(hx)) + return x+x; + if(FLT_UWORD_IS_INFINITE(hx)) + return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */ + if(xsb == 0 && hx > FLT_UWORD_LOG_MAX) /* if x>=o_threshold */ + return huge*huge; /* overflow */ + if(xsb!=0) { /* x < -27*ln2, return -1.0 with inexact */ + if(x+tiny<(float)0.0) /* raise inexact */ + return tiny-one; /* return -1 */ + } + } + + /* argument reduction */ + if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ + if(hx < 0x3F851592) { /* and |x| < 1.5 ln2 */ + if(xsb==0) + {hi = x - ln2_hi; lo = ln2_lo; k = 1;} + else + {hi = x + ln2_hi; lo = -ln2_lo; k = -1;} + } else { + k = invln2*x+((xsb==0)?(float)0.5:(float)-0.5); + t = k; + hi = x - t*ln2_hi; /* t*ln2_hi is exact here */ + lo = t*ln2_lo; + } + x = hi - lo; + c = (hi-x)-lo; + } + else if(hx < 0x33000000) { /* when |x|<2**-25, return x */ + t = huge+x; /* return x with inexact flags when x!=0 */ + return x - (t-(huge+x)); + } + else k = 0; + + /* x is now in primary range */ + hfx = (float)0.5*x; + hxs = x*hfx; + r1 = one+hxs*(Q1+hxs*(Q2+hxs*(Q3+hxs*(Q4+hxs*Q5)))); + t = (float)3.0-r1*hfx; + e = hxs*((r1-t)/((float)6.0 - x*t)); + if(k==0) return x - (x*e-hxs); /* c is 0 */ + else { + e = (x*(e-c)-c); + e -= hxs; + if(k== -1) return (float)0.5*(x-e)-(float)0.5; + if(k==1) { + if(x < (float)-0.25) return -(float)2.0*(e-(x+(float)0.5)); + else return one+(float)2.0*(x-e); + } + if (k <= -2 || k>56) { /* suffice to return exp(x)-1 */ + __int32_t i; + y = one-(e-x); + i = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ + return y-one; + } + t = one; + if(k<23) { + __int32_t i; + SET_FLOAT_WORD(t,0x3f800000 - (0x1000000>>k)); /* t=1-2^-k */ + y = t-(e-x); + i = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ + } else { + __int32_t i; + SET_FLOAT_WORD(t,((0x7f-k)<<23)); /* 2^-k */ + y = x-(e+t); + y += one; + i = CYG_LIBM_WORD(y); + SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ + } + } + return y; +} + diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_fabs.c b/packages/language/c/libm/current/src/float/portable-api/sf_fabs.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_fabs.c @@ -0,0 +1,100 @@ +//=========================================================================== +// +// sf_fabs.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_fabs.c -- float version of s_fabs.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * fabsf(x) returns the absolute value of x. + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float fabsf(float x) +#else + float fabsf(x) + float x; +#endif +{ + __uint32_t ix; + ix = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(x,ix&0x7fffffff); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_fabs.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_finite.c b/packages/language/c/libm/current/src/float/portable-api/sf_finite.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_finite.c @@ -0,0 +1,101 @@ +//=========================================================================== +// +// sf_finite.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_finite.c -- float version of s_finite.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * finitef(x) returns 1 is x is finite, else 0; + * no branching! + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + int finitef(float x) +#else + int finitef(x) + float x; +#endif +{ + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + return (FLT_UWORD_IS_FINITE(ix)); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_finite.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_floor.c b/packages/language/c/libm/current/src/float/portable-api/sf_floor.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_floor.c @@ -0,0 +1,133 @@ +//=========================================================================== +// +// sf_floor.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_floor.c -- float version of s_floor.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * floorf(x) + * Return x rounded toward -inf to integral value + * Method: + * Bit twiddling. + * Exception: + * Inexact flag raised if x not equal to floorf(x). + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float huge = 1.0e30; +#else +static float huge = 1.0e30; +#endif + +#ifdef __STDC__ + float floorf(float x) +#else + float floorf(x) + float x; +#endif +{ + __int32_t i0,j0; + __uint32_t i,ix; + i0 = CYG_LIBM_WORD(x); + ix = (i0&0x7fffffff); + j0 = (ix>>23)-0x7f; + if(j0<23) { + if(j0<0) { /* raise inexact if x != 0 */ + if(huge+x>(float)0.0) {/* return 0*sign(x) if |x|<1 */ + if(i0>=0) {i0=0;} + else if(!FLT_UWORD_IS_ZERO(ix)) + { i0=0xbf800000;} + } + } else { + i = (0x007fffff)>>j0; + if((i0&i)==0) return x; /* x is integral */ + if(huge+x>(float)0.0) { /* raise inexact flag */ + if(i0<0) i0 += (0x00800000)>>j0; + i0 &= (~i); + } + } + } else { + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; /* inf or NaN */ + else return x; /* x is integral */ + } + SET_FLOAT_WORD(x,i0); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_floor.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_frexp.c b/packages/language/c/libm/current/src/float/portable-api/sf_frexp.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_frexp.c @@ -0,0 +1,113 @@ +//=========================================================================== +// +// sf_frexp.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + +/* sf_frexp.c -- float version of s_frexp.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +two25 = 3.3554432000e+07; /* 0x4c000000 */ + +#ifdef __STDC__ + float frexpf(float x, int *eptr) +#else + float frexpf(x, eptr) + float x; int *eptr; +#endif +{ + __int32_t hx, ix; + hx = CYG_LIBM_WORD(x); + ix = 0x7fffffff&hx; + *eptr = 0; + if(!FLT_UWORD_IS_FINITE(ix)||FLT_UWORD_IS_ZERO(ix)) return x; /* 0,inf,nan */ + if (FLT_UWORD_IS_SUBNORMAL(ix)) { /* subnormal */ + x *= two25; + hx = CYG_LIBM_WORD(x); + ix = hx&0x7fffffff; + *eptr = -25; + } + *eptr += (ix>>23)-126; + hx = (hx&0x807fffff)|0x3f000000; + SET_FLOAT_WORD(x,hx); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_frexp.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_ilogb.c b/packages/language/c/libm/current/src/float/portable-api/sf_ilogb.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_ilogb.c @@ -0,0 +1,109 @@ +//=========================================================================== +// +// sf_ilogb.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_ilogb.c -- float version of s_ilogb.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + int ilogbf(float x) +#else + int ilogbf(x) + float x; +#endif +{ + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + hx &= 0x7fffffff; + if(FLT_UWORD_IS_ZERO(hx)) + return 0x80000001; /* ilogb(0) = special case error */ + if(FLT_UWORD_IS_SUBNORMAL(hx)) { + for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1; + return ix; + } + #if FP_ILOGBNAN != INT_MAX + else if (FLT_UWORD_IS_NAN(hx)) return FP_ILOGBNAN; /* NAN */ + #endif + else if (!FLT_UWORD_IS_FINITE(hx)) return INT_MAX; + else + return (hx>>=23)-127; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_ilogb.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_isnan.c b/packages/language/c/libm/current/src/float/portable-api/sf_isnan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_isnan.c @@ -0,0 +1,99 @@ +//=========================================================================== +// +// sf_isnan.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_c_isnan.c -- float version of s_c_isnan.c. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * isnanf(x) returns 1 is x is nan, else 0; + * + * isnanf is an extension declared in . + */ + + +#include "mathincl/fdlibm.h" +//#include + +#undef isnanf + + int isnanf(float x) +{ + __int32_t ix; + ix = CYG_LIBM_WORD(x); + ix &= 0x7fffffff; + return FLT_UWORD_IS_NAN(ix); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_isnan.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_ldexp.c b/packages/language/c/libm/current/src/float/portable-api/sf_ldexp.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_ldexp.c @@ -0,0 +1,109 @@ +//=========================================================================== +// +// sf_ldexp.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_ldexp.c -- float version of s_ldexp.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" +#include + +#ifdef __STDC__ + float ldexpf(float value, int exp) +#else + float ldexpf(value, exp) + float value; int exp; +#endif +{ + float z; + + z = scalbnf(value,exp); + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if(!(finitef(z)||isnanf(z))&&finitef(value)) { + return __kernel_standard(value,(float)exp,43); /* ldexp overflow */ + } + if(z==0.0&&z!=value) { + return __kernel_standard(value,(float)exp,44); /* ldexp underflow */ + } +#endif + + return z; +} + + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_ldexp.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_log1p.c b/packages/language/c/libm/current/src/float/portable-api/sf_log1p.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_log1p.c @@ -0,0 +1,174 @@ +//=========================================================================== +// +// sf_log1p.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_log1p.c -- float version of s_log1p.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ +ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ +two25 = 3.355443200e+07, /* 0x4c000000 */ +Lp1 = 6.6666668653e-01, /* 3F2AAAAB */ +Lp2 = 4.0000000596e-01, /* 3ECCCCCD */ +Lp3 = 2.8571429849e-01, /* 3E924925 */ +Lp4 = 2.2222198546e-01, /* 3E638E29 */ +Lp5 = 1.8183572590e-01, /* 3E3A3325 */ +Lp6 = 1.5313838422e-01, /* 3E1CD04F */ +Lp7 = 1.4798198640e-01; /* 3E178897 */ + +#ifdef __STDC__ +static const float zero = 0.0; +#else +static float zero = 0.0; +#endif + +#ifdef __STDC__ + float log1pf(float x) +#else + float log1pf(x) + float x; +#endif +{ + float hfsq,f,c,s,z,R,u; + __int32_t k,hx,hu,ax; + + hx = CYG_LIBM_WORD(x); + ax = hx&0x7fffffff; + + k = 1; + if (!FLT_UWORD_IS_FINITE(hx)) return x+x; + if (hx < 0x3ed413d7) { /* x < 0.41422 */ + if(ax>=0x3f800000) { /* x <= -1.0 */ + if(x==(float)-1.0) return -two25/zero; /* log1p(-1)=+inf */ + else return (x-x)/(x-x); /* log1p(x<-1)=NaN */ + } + if(ax<0x31000000) { /* |x| < 2**-29 */ + if(two25+x>zero /* raise inexact */ + &&ax<0x24800000) /* |x| < 2**-54 */ + return x; + else + return x - x*x*(float)0.5; + } + if(hx>0||hx<=((__int32_t)0xbe95f61f)) { + k=0;f=x;hu=1;} /* -0.2929>23)-127; + /* correction term */ + c = (k>0)? (float)1.0-(u-x):x-(u-(float)1.0); + c /= u; + } else { + u = x; + hu = CYG_LIBM_WORD(u); + k = (hu>>23)-127; + c = 0; + } + hu &= 0x007fffff; + if(hu<0x3504f7) { + SET_FLOAT_WORD(u,hu|0x3f800000);/* normalize u */ + } else { + k += 1; + SET_FLOAT_WORD(u,hu|0x3f000000); /* normalize u/2 */ + hu = (0x00800000-hu)>>2; + } + f = u-(float)1.0; + } + hfsq=(float)0.5*f*f; + if(hu==0) { /* |f| < 2**-20 */ + if(f==zero) { if(k==0) return zero; + else {c += k*ln2_lo; return k*ln2_hi+c;}} + R = hfsq*((float)1.0-(float)0.66666666666666666*f); + if(k==0) return f-R; else + return k*ln2_hi-((R-(k*ln2_lo+c))-f); + } + s = f/((float)2.0+f); + z = s*s; + R = z*(Lp1+z*(Lp2+z*(Lp3+z*(Lp4+z*(Lp5+z*(Lp6+z*Lp7)))))); + if(k==0) return f-(hfsq-s*(hfsq+R)); else + return k*ln2_hi-((hfsq-(s*(hfsq+R)+(k*ln2_lo+c)))-f); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_log1p.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_logb.c b/packages/language/c/libm/current/src/float/portable-api/sf_logb.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_logb.c @@ -0,0 +1,114 @@ +//=========================================================================== +// +// sf_logb.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + +/* 2009 for Newlib: Sun's sf_ilogb.c converted to be sf_logb.c. */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* float logb(float x) + * return the binary exponent of non-zero x + * logbf(0) = -inf, raise divide-by-zero floating point exception + * logbf(+inf|-inf) = +inf (no signal is raised) + * logbf(NaN) = NaN (no signal is raised) + * Per C99 recommendation, a NaN argument is returned unchanged. + */ + + +#include "mathincl/fdlibm.h" + +float +#ifdef __STDC__ +logbf(float x) +#else +logbf(x) +float x; +#endif +{ + __int32_t hx,ix; + + hx = CYG_LIBM_WORD(x); + hx &= 0x7fffffff; + if(FLT_UWORD_IS_ZERO(hx)) { + float xx; + /* arg==0: return -inf and raise divide-by-zero exception */ + SET_FLOAT_WORD(xx,hx); /* +0.0 */ + return -1./xx; /* logbf(0) = -inf */ + } + if(FLT_UWORD_IS_SUBNORMAL(hx)) { + for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1; + return (float) ix; + } + else if (FLT_UWORD_IS_INFINITE(hx)) return HUGE_VALF; /* x==+|-inf */ + else if (FLT_UWORD_IS_NAN(hx)) return x; + else return (float) ((hx>>23)-127); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_logb.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_modf.c b/packages/language/c/libm/current/src/float/portable-api/sf_modf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_modf.c @@ -0,0 +1,126 @@ +//=========================================================================== +// +// sf_modf.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_modf.c -- float version of s_modf.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one = 1.0; +#else +static float one = 1.0; +#endif + +#ifdef __STDC__ + float modff(float x, float *iptr) +#else + float modff(x, iptr) + float x,*iptr; +#endif +{ + __int32_t i0,j0; + __uint32_t i; + i0 = CYG_LIBM_WORD(x); + j0 = ((i0>>23)&0xff)-0x7f; /* exponent of x */ + if(j0<23) { /* integer part in x */ + if(j0<0) { /* |x|<1 */ + SET_FLOAT_WORD(*iptr,i0&0x80000000); /* *iptr = +-0 */ + return x; + } else { + i = (0x007fffff)>>j0; + if((i0&i)==0) { /* x is integral */ + __uint32_t ix; + *iptr = x; + ix = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(x,ix&0x80000000); /* return +-0 */ + return x; + } else { + SET_FLOAT_WORD(*iptr,i0&(~i)); + return x - *iptr; + } + } + } else { /* no fraction part */ + __uint32_t ix; + *iptr = x*one; + ix = CYG_LIBM_WORD(x); + SET_FLOAT_WORD(x,ix&0x80000000); /* return +-0 */ + return x; + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_modf.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_nextafter.c b/packages/language/c/libm/current/src/float/portable-api/sf_nextafter.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_nextafter.c @@ -0,0 +1,132 @@ +//=========================================================================== +// +// sf_nextafter.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_nextafter.c -- float version of s_nextafter.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float nextafterf(float x, float y) +#else + float nextafterf(x,y) + float x,y; +#endif +{ + __int32_t hx,hy,ix,iy; + + hx = CYG_LIBM_WORD(x); + hy = CYG_LIBM_WORD(y); + ix = hx&0x7fffffff; /* |x| */ + iy = hy&0x7fffffff; /* |y| */ + + if(FLT_UWORD_IS_NAN(ix) || + FLT_UWORD_IS_NAN(iy)) + return x+y; + if(x==y) return x; /* x=y, return x */ + if(FLT_UWORD_IS_ZERO(ix)) { /* x == 0 */ + SET_FLOAT_WORD(x,(hy&0x80000000)|FLT_UWORD_MIN); + y = x*x; + if(y==x) return y; else return x; /* raise underflow flag */ + } + if(hx>=0) { /* x > 0 */ + if(hx>hy) { /* x > y, x -= ulp */ + hx -= 1; + } else { /* x < y, x += ulp */ + hx += 1; + } + } else { /* x < 0 */ + if(hy>=0||hx>hy){ /* x < y, x -= ulp */ + hx -= 1; + } else { /* x > y, x += ulp */ + hx += 1; + } + } + hy = hx&0x7f800000; + if(hy>FLT_UWORD_MAX) return x+x; /* overflow */ + if(hy<0x00800000) { /* underflow */ + y = x*x; + if(y!=x) { /* raise underflow flag */ + SET_FLOAT_WORD(y,hx); + return y; + } + } + SET_FLOAT_WORD(x,hx); + return x; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_nextafter.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_rint.c b/packages/language/c/libm/current/src/float/portable-api/sf_rint.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_rint.c @@ -0,0 +1,137 @@ +//=========================================================================== +// +// sf_rint.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_rint.c -- float version of s_rint.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float +#else +static float +#endif +TWO23[2]={ + 8.3886080000e+06, /* 0x4b000000 */ + -8.3886080000e+06, /* 0xcb000000 */ +}; + +#ifdef __STDC__ + float rintf(float x) +#else + float rintf(x) + float x; +#endif +{ + __int32_t i0,j0,sx; + __uint32_t i,i1,ix; + float t; + volatile float w; + i0 = CYG_LIBM_WORD(x); + sx = (i0>>31)&1; + ix = (i0&0x7fffffff); + j0 = (ix>>23)-0x7f; + if(j0<23) { + if(FLT_UWORD_IS_ZERO(ix)) + return x; + if(j0<0) { + i1 = (i0&0x07fffff); + i0 &= 0xfff00000; + i0 |= ((i1|-i1)>>9)&0x400000; + SET_FLOAT_WORD(x,i0); + w = TWO23[sx]+x; + t = w-TWO23[sx]; + i0 = CYG_LIBM_WORD(t); + SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31)); + return t; + } else { + i = (0x007fffff)>>j0; + if((i0&i)==0) return x; /* x is integral */ + i>>=1; + if((i0&i)!=0) i0 = (i0&(~i))|((0x200000)>>j0); + } + } else { + if(!FLT_UWORD_IS_FINITE(ix)) return x+x; /* inf or NaN */ + else + return x; /* x is integral */ + } + SET_FLOAT_WORD(x,i0); + w = TWO23[sx]+x; + return w-TWO23[sx]; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_rint.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_scalbn.c b/packages/language/c/libm/current/src/float/portable-api/sf_scalbn.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_scalbn.c @@ -0,0 +1,136 @@ +//=========================================================================== +// +// sf_scalbn.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_scalbn.c -- float version of s_scalbn.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +// VAE #if INT_MAX > 50000 +#define OVERFLOW_INT 50000 +//#else +//#define OVERFLOW_INT 30000 +//#endif + +#ifdef __STDC__ +static const float +#else +static float +#endif +two25 = 3.355443200e+07, /* 0x4c000000 */ +twom25 = 2.9802322388e-08, /* 0x33000000 */ +huge = 1.0e+30, +tiny = 1.0e-30; + +#ifdef __STDC__ + float scalbnf (float x, int n) +#else + float scalbnf (x,n) + float x; int n; +#endif +{ + __int32_t k,ix; + __uint32_t hx; + + ix = CYG_LIBM_WORD(x); + hx = ix&0x7fffffff; + k = hx>>23; /* extract exponent */ + if (FLT_UWORD_IS_ZERO(hx)) + return x; + if (!FLT_UWORD_IS_FINITE(hx)) + return x+x; /* NaN or Inf */ + if (FLT_UWORD_IS_SUBNORMAL(hx)) { + x *= two25; + ix = CYG_LIBM_WORD(x); + k = ((ix&0x7f800000)>>23) - 25; + if (n< -50000) return tiny*x; /*underflow*/ + } + k = k+n; + if (k > FLT_LARGEST_EXP) return huge*copysignf(huge,x); /* overflow */ + if (k > 0) /* normal result */ + {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;} + if (k < FLT_SMALLEST_EXP) { + if (n > OVERFLOW_INT) /* in case integer overflow in n+k */ + return huge*copysignf(huge,x); /*overflow*/ + else return tiny*copysignf(tiny,x); /*underflow*/ + } + k += 25; /* subnormal result */ + SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); + return x*twom25; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_scalbn.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_significand.c b/packages/language/c/libm/current/src/float/portable-api/sf_significand.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_significand.c @@ -0,0 +1,93 @@ +//=========================================================================== +// +// sf_significand.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_signif.c -- float version of s_signif.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include "mathincl/fdlibm.h" + + +#ifdef __STDC__ + float significandf(float x) +#else + float significandf(x) + float x; +#endif +{ + return __ieee754_scalbf(x,(float) -ilogbf(x)); +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_significand.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_sin.c b/packages/language/c/libm/current/src/float/portable-api/sf_sin.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_sin.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// sf_sin.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_sin.c -- float version of s_sin.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float sinf(float x) +#else + float sinf(x) + float x; +#endif +{ + float y[2],z=0.0; + __int32_t n,ix; + + ix = CYG_LIBM_WORD(x); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if(ix <= 0x3f490fd8) return __kernel_sinf(x,z,0); + + /* sin(Inf or NaN) is NaN */ + else if (!FLT_UWORD_IS_FINITE(ix)) return x-x; + + /* argument reduction needed */ + else { + n = __ieee754_rem_pio2f(x,y); + switch(n&3) { + case 0: return __kernel_sinf(y[0],y[1],1); + case 1: return __kernel_cosf(y[0],y[1]); + case 2: return -__kernel_sinf(y[0],y[1],1); + default: + return -__kernel_cosf(y[0],y[1]); + } + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_cos.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_tan.c b/packages/language/c/libm/current/src/float/portable-api/sf_tan.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_tan.c @@ -0,0 +1,110 @@ +//=========================================================================== +// +// sf_tan.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_tan.c -- float version of s_tan.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ + float tanf(float x) +#else + float tanf(x) + float x; +#endif +{ + float y[2],z=0.0; + __int32_t n,ix; + + ix = CYG_LIBM_WORD(x); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if(ix <= 0x3f490fda) return __kernel_tanf(x,z,1); + + /* tan(Inf or NaN) is NaN */ + else if (!FLT_UWORD_IS_FINITE(ix)) return x-x; /* NaN */ + + /* argument reduction needed */ + else { + n = __ieee754_rem_pio2f(x,y); + return __kernel_tanf(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even + -1 -- n odd */ + } +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_tan.c diff --git a/packages/language/c/libm/current/src/float/portable-api/sf_tanh.c b/packages/language/c/libm/current/src/float/portable-api/sf_tanh.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_tanh.c @@ -0,0 +1,126 @@ +//=========================================================================== +// +// sf_tanh.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_tanh.c -- float version of s_tanh.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" + +#ifdef __STDC__ +static const float one=1.0, two=2.0, tiny = 1.0e-30; +#else +static float one=1.0, two=2.0, tiny = 1.0e-30; +#endif + +#ifdef __STDC__ + float tanhf(float x) +#else + float tanhf(x) + float x; +#endif +{ + float t,z; + __int32_t jx,ix; + + jx = CYG_LIBM_WORD(x); + ix = jx&0x7fffffff; + + /* x is INF or NaN */ + if(!FLT_UWORD_IS_FINITE(ix)) { + if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */ + else return one/x-one; /* tanh(NaN) = NaN */ + } + + /* |x| < 22 */ + if (ix < 0x41b00000) { /* |x|<22 */ + if (ix<0x24000000) /* |x|<2**-55 */ + return x*(one+x); /* tanh(small) = small */ + if (ix>=0x3f800000) { /* |x|>=1 */ + t = expm1f(two*fabsf(x)); + z = one - two/(t+two); + } else { + t = expm1f(-two*fabsf(x)); + z= -t/(t+two); + } + /* |x| > 22, return +-1 */ + } else { + z = one - tiny; /* raised inexact flag */ + } + return (jx>=0)? z: -z; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_tanh.c diff --git a/packages/language/c/libm/current/src/mathincl/fdlibm.h b/packages/language/c/libm/current/src/mathincl/fdlibm.h --- a/packages/language/c/libm/current/src/mathincl/fdlibm.h +++ b/packages/language/c/libm/current/src/mathincl/fdlibm.h @@ -84,6 +84,111 @@ typedef cyg_int32 __int32_t; typedef cyg_uint32 __uint32_t; typedef Cyg_libm_ieee_double_shape_type ieee_double_shape_type; +typedef Cyg_libm_ieee_float_shape_type ieee_float_shape_type; + +/* Most routines need to check whether a float is finite, infinite, or not a + number, and many need to know whether the result of an operation will + overflow. These conditions depend on whether the largest exponent is + used for NaNs & infinities, or whether it's used for finite numbers. The + macros below wrap up that kind of information: + + FLT_UWORD_IS_FINITE(X) + True if a positive float with bitmask X is finite. + + FLT_UWORD_IS_NAN(X) + True if a positive float with bitmask X is not a number. + + FLT_UWORD_IS_INFINITE(X) + True if a positive float with bitmask X is +infinity. + + FLT_UWORD_MAX + The bitmask of FLT_MAX. + + FLT_UWORD_HALF_MAX + The bitmask of FLT_MAX/2. + + FLT_UWORD_EXP_MAX + The bitmask of the largest finite exponent (129 if the largest + exponent is used for finite numbers, 128 otherwise). + + FLT_UWORD_LOG_MAX + The bitmask of log(FLT_MAX), rounded down. This value is the largest + input that can be passed to exp() without producing overflow. + + FLT_UWORD_LOG_2MAX + The bitmask of log(2*FLT_MAX), rounded down. This value is the + largest input than can be passed to cosh() without producing + overflow. + + FLT_LARGEST_EXP + The largest biased exponent that can be used for finite numbers + (255 if the largest exponent is used for finite numbers, 254 + otherwise) */ + +#ifdef _FLT_LARGEST_EXPONENT_IS_NORMAL +#define FLT_UWORD_IS_FINITE(x) 1 +#define FLT_UWORD_IS_NAN(x) 0 +#define FLT_UWORD_IS_INFINITE(x) 0 +#define FLT_UWORD_MAX 0x7fffffff +#define FLT_UWORD_EXP_MAX 0x43010000 +#define FLT_UWORD_LOG_MAX 0x42b2d4fc +#define FLT_UWORD_LOG_2MAX 0x42b437e0 +//#define HUGE ((float)0X1.FFFFFEP128) +#else +#define FLT_UWORD_IS_FINITE(x) ((x)<0x7f800000L) +#define FLT_UWORD_IS_NAN(x) ((x)>0x7f800000L) +#define FLT_UWORD_IS_INFINITE(x) ((x)==0x7f800000L) +#define FLT_UWORD_MAX 0x7f7fffffL +#define FLT_UWORD_EXP_MAX 0x43000000 +#define FLT_UWORD_LOG_MAX 0x42b17217 +#define FLT_UWORD_LOG_2MAX 0x42b2d4fc +//#define HUGE ((float)3.40282346638528860e+38) +#endif +#define FLT_UWORD_HALF_MAX (FLT_UWORD_MAX-(1L<<23)) +#define FLT_LARGEST_EXP (FLT_UWORD_MAX>>23) + +/* Many routines check for zero and subnormal numbers. Such things depend + on whether the target supports denormals or not: + + FLT_UWORD_IS_ZERO(X) + True if a positive float with bitmask X is +0. Without denormals, + any float with a zero exponent is a +0 representation. With + denormals, the only +0 representation is a 0 bitmask. + + FLT_UWORD_IS_SUBNORMAL(X) + True if a non-zero positive float with bitmask X is subnormal. + (Routines should check for zeros first.) + + FLT_UWORD_MIN + The bitmask of the smallest float above +0. Call this number + REAL_FLT_MIN... + + FLT_UWORD_EXP_MIN + The bitmask of the float representation of REAL_FLT_MIN's exponent. + + FLT_UWORD_LOG_MIN + The bitmask of |log(REAL_FLT_MIN)|, rounding down. + + FLT_SMALLEST_EXP + REAL_FLT_MIN's exponent - EXP_BIAS (1 if denormals are not supported, + -22 if they are). +*/ + +#ifdef _FLT_NO_DENORMALS +#define FLT_UWORD_IS_ZERO(x) ((x)<0x00800000L) +#define FLT_UWORD_IS_SUBNORMAL(x) 0 +#define FLT_UWORD_MIN 0x00800000 +#define FLT_UWORD_EXP_MIN 0x42fc0000 +#define FLT_UWORD_LOG_MIN 0x42aeac50 +#define FLT_SMALLEST_EXP 1 +#else +#define FLT_UWORD_IS_ZERO(x) ((x)==0) +#define FLT_UWORD_IS_SUBNORMAL(x) ((x)<0x00800000L) +#define FLT_UWORD_MIN 0x00000001 +#define FLT_UWORD_EXP_MIN 0x43160000 +#define FLT_UWORD_LOG_MIN 0x42cff1b5 +#define FLT_SMALLEST_EXP -22 +#endif // MACRO DEFINITIONS @@ -95,7 +200,25 @@ typedef Cyg_libm_ieee_double_shape_type #define CYG_LIBM_HIp(__x) (((Cyg_libm_ieee_double_shape_type *)__x)->parts.msw) #define CYG_LIBM_LOp(__x) (((Cyg_libm_ieee_double_shape_type *)__x)->parts.lsw) +#define CYG_LIBM_WORD(__x) (((Cyg_libm_ieee_float_shape_type *)&__x)->asi32) +/* Get a 32 bit int from a float. */ + +#define GET_FLOAT_WORD(i,f) \ +do { \ + Cyg_libm_ieee_float_shape_type gf_u; \ + gf_u.value = (f); \ + (i) = gf_u.asi32; \ +} while (0) + +/* Set a float from a 32 bit int. */ + +#define SET_FLOAT_WORD(f,i) \ +do { \ + Cyg_libm_ieee_float_shape_type sf_u; \ + sf_u.asi32 = (i); \ + (f) = sf_u.value; \ +} while (0) /* Get two 32 bit ints from a double. */ @@ -179,9 +302,19 @@ struct exception { externC int matherr( struct exception * ); // User-overridable error handling - see // for a discussion +struct exceptionf { + int type; // One of DOMAIN, SING, OVERFLOW, UNDERFLOW, TLOSS, PLOSS + char *name; // Name of the function generating the exception + float arg1; // First argument to the function + float arg2; // Second argument to the function + float retval; // Value to be returned - can be altered by matherr() +}; + +externC int +matherrf( struct exceptionf * ); + #endif // ifdef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION - // FUNCTION PROTOTYPES // IEEE-754 style elementary functions */ @@ -289,6 +422,85 @@ externC double externC int __kernel_rem_pio2( double *, double *, int, int, int, const int * ); +/* ieee style elementary float functions */ +externC float __ieee754_sqrtf (float); +externC float __ieee754_acosf (float); +externC float __ieee754_acoshf (float); +externC float __ieee754_logf (float); +externC float __ieee754_atanhf (float); +externC float __ieee754_asinf (float); +externC float __ieee754_atan2f (float,float); +externC float __ieee754_expf (float); +externC float __ieee754_coshf (float); +externC float __ieee754_fmodf (float,float); +externC float __ieee754_powf (float,float); +externC float +__ieee754_lgammaf_r( float, int * ); + +externC float +__ieee754_gammaf_r( float, int * ); + +externC float +__ieee754_lgammaf( float ); + +externC float +__ieee754_gammaf( float ); +externC float __ieee754_log10f (float); +externC float __ieee754_sinhf (float); +externC float __ieee754_hypotf (float,float); +externC float __ieee754_j0f (float); +externC float __ieee754_j1f (float); +externC float __ieee754_y0f (float); +externC float __ieee754_y1f (float); +externC float __ieee754_jnf (int,float); +externC float __ieee754_ynf (int,float); +externC float __ieee754_remainderf (float,float); +externC cyg_int32 __ieee754_rem_pio2f (float,float*); +#ifdef _SCALB_INT +externC float __ieee754_scalbf ((float,int)); +#else +externC float __ieee754_scalbf (float,float); +#endif + +/* float versions of fdlibm kernel functions */ +externC float __kernel_standard_float( float, float, int ); +externC float __kernel_sinf (float,float,int); +externC float __kernel_cosf (float,float); +externC float __kernel_tanf (float,float,int); +externC int __kernel_rem_pio2f (float*,float*,int,int,int,const cyg_int32*); + +#ifdef _COMPLEX_H + +/* + * Quoting from ISO/IEC 9899:TC2: + * + * 6.2.5.13 Types + * Each complex type has the same representation and alignment requirements as + * an array type containing exactly two elements of the corresponding real type; + * the first element is equal to the real part, and the second element to the + * imaginary part, of the complex number. + */ +typedef union { + float complex z; + float parts[2]; +} float_complex; + +typedef union { + double complex z; + double parts[2]; +} double_complex; + +typedef union { + long double complex z; + long double parts[2]; +} long_double_complex; + +#define REAL_PART(z) ((z).parts[0]) +#define IMAG_PART(z) ((z).parts[1]) + +#endif /* _COMPLEX_H */ + + #endif // ifdef CYGPKG_LIBM #endif // CYGONCE_LIBM_MATHINCL_FDLIBM_H multiple inclusion protection diff --git a/packages/language/c/libm/current/src/misc/matherr.c b/packages/language/c/libm/current/src/misc/matherr.c --- a/packages/language/c/libm/current/src/misc/matherr.c +++ b/packages/language/c/libm/current/src/misc/matherr.c @@ -74,13 +74,28 @@ matherr( struct exception *x ) { CYG_REPORT_FUNCNAMETYPE( "matherr", "returning %d" ); - CYG_UNUSED_PARAM( struct exception *, x ); +// CYG_UNUSED_PARAM( struct exception *, x ); CYG_EMPTY_STATEMENT; CYG_REPORT_RETVAL( 0 ); return 0; } // matherr() +int +matherrf( struct exceptionf *x ) __attribute__ ((weak)); + +int +matherrf( struct exceptionf *x ) +{ + CYG_REPORT_FUNCNAMETYPE( "matherrf", "returning %d" ); + +// CYG_UNUSED_PARAM( struct exceptionf *, x ); + CYG_EMPTY_STATEMENT; + + CYG_REPORT_RETVAL( 0 ); + return 0; +} // matherrf() + #endif // if defined(CYGPKG_LIBM) diff --git a/packages/language/c/libm/current/src/misc/standard.c b/packages/language/c/libm/current/src/misc/standard.c --- a/packages/language/c/libm/current/src/misc/standard.c +++ b/packages/language/c/libm/current/src/misc/standard.c @@ -1,14 +1,14 @@ //=========================================================================== // -// signgam.cxx +// standard_float.c // -// Support sign of the gamma*() functions in Math library +// Standard conformance (non-IEEE) on exception cases. // //=========================================================================== // ####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 2013 Free Software Foundation, Inc. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -39,793 +39,21 @@ //=========================================================================== //#####DESCRIPTIONBEGIN#### // -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 +// Author(s): ilijak +// Contributors: +// Date: 2013-06-17 // Purpose: -// Description: Contains the accessor functions to get and set the stored sign -// of the gamma*() functions in the math library +// Description: +// // Usage: // //####DESCRIPTIONEND#### // //=========================================================================== -/* @(#)k_standard.c 1.3 95/01/18 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - * - */ - -// CONFIGURATION - -#include // Configuration header - -// Include the Math library? -#ifdef CYGPKG_LIBM - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing macros - -#include // Main header for math library -#include "mathincl/fdlibm.h" // Internal header for math library - -#include // standard error codes - -#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY -#include -#else -static int errno; // this whole file won't be used if we're IEEE only, but - // doing this keeps the compiler happy -#endif - -#ifdef CYGSEM_LIBM_USE_STDERR - -#include -#define WRITE2(u,v) fputs(u, stderr) - -#else - -#define WRITE2(u,v) 0 - -#endif // ifdef CYGSEM_LIBM_USE_STDERR - - -// GLOBALS - -static const double zero = 0.0; - -// FUNCTIONS - -/* - * Standard conformance (non-IEEE) on exception cases. - * Mapping: - * 1 -- acos(|x|>1) - * 2 -- asin(|x|>1) - * 3 -- atan2(+-0,+-0) - * 4 -- hypot overflow - * 5 -- cosh overflow - * 6 -- exp overflow - * 7 -- exp underflow - * 8 -- y0(0) - * 9 -- y0(-ve) - * 10-- y1(0) - * 11-- y1(-ve) - * 12-- yn(0) - * 13-- yn(-ve) - * 14-- lgamma(finite) overflow - * 15-- lgamma(-integer) - * 16-- log(0) - * 17-- log(x<0) - * 18-- log10(0) - * 19-- log10(x<0) - * 20-- pow(0.0,0.0) - * 21-- pow(x,y) overflow - * 22-- pow(x,y) underflow - * 23-- pow(0,negative) - * 24-- pow(neg,non-integral) - * 25-- sinh(finite) overflow - * 26-- sqrt(negative) - * 27-- fmod(x,0) - * 28-- remainder(x,0) - * 29-- acosh(x<1) - * 30-- atanh(|x|>1) - * 31-- atanh(|x|=1) - * 32-- scalb overflow - * 33-- scalb underflow - * 34-- j0(|x|>X_TLOSS) - * 35-- y0(x>X_TLOSS) - * 36-- j1(|x|>X_TLOSS) - * 37-- y1(x>X_TLOSS) - * 38-- jn(|x|>X_TLOSS, n) - * 39-- yn(x>X_TLOSS, n) - * 40-- gamma(finite) overflow - * 41-- gamma(-integer) - * 42-- pow(NaN,0.0) - * 43-- ldexp overflow - * 44-- ldexp underflow - */ - - -double -__kernel_standard(double x, double y, int type) -{ - struct exception exc; +#define CYG_STANDARD_FLOAT_T double +#define CYGSTR_FLOAT_SUFFIX +#define MATHERR(__exc_p) matherr(__exc_p) +#include "standard.inl" -#ifdef CYGSEM_LIBM_USE_STDERR - (void) fflush(stdout); -#endif - exc.arg1 = x; - exc.arg2 = y; - switch(type) { - case 1: - /* acos(|x|>1) */ - exc.type = DOMAIN; - exc.name = "acos"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("acos: DOMAIN error\n", 19); - } - errno = EDOM; - } - break; - case 2: - /* asin(|x|>1) */ - exc.type = DOMAIN; - exc.name = "asin"; - exc.retval = zero; - if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("asin: DOMAIN error\n", 19); - } - errno = EDOM; - } - break; - case 3: - /* atan2(+-0,+-0) */ - exc.arg1 = y; - exc.arg2 = x; - exc.type = DOMAIN; - exc.name = "atan2"; - exc.retval = zero; - if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("atan2: DOMAIN error\n", 20); - } - errno = EDOM; - } - break; - case 4: - /* hypot(finite,finite) overflow */ - exc.type = OVERFLOW; - exc.name = "hypot"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 5: - /* cosh(finite) overflow */ - exc.type = OVERFLOW; - exc.name = "cosh"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 6: - /* exp(finite) overflow */ - exc.type = OVERFLOW; - exc.name = "exp"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 7: - /* exp(finite) underflow */ - exc.type = UNDERFLOW; - exc.name = "exp"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 8: - /* y0(0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = "y0"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("y0: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 9: - /* y0(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = "y0"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("y0: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 10: - /* y1(0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = "y1"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("y1: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 11: - /* y1(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = "y1"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("y1: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 12: - /* yn(n,0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = "yn"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("yn: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 13: - /* yn(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = "yn"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("yn: DOMAIN error\n", 17); - } - errno = EDOM; - } - break; - case 14: - /* lgamma(finite) overflow */ - exc.type = OVERFLOW; - exc.name = "lgamma"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 15: - /* lgamma(-integer) or lgamma(0) */ - exc.type = SING; - exc.name = "lgamma"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("lgamma: SING error\n", 19); - } - errno = EDOM; - } - break; - case 16: - /* log(0) */ - exc.type = SING; - exc.name = "log"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("log: SING error\n", 16); - } - errno = EDOM; - } - break; - case 17: - /* log(x<0) */ - exc.type = DOMAIN; - exc.name = "log"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("log: DOMAIN error\n", 18); - } - errno = EDOM; - } - break; - case 18: - /* log10(0) */ - exc.type = SING; - exc.name = "log10"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("log10: SING error\n", 18); - } - errno = EDOM; - } - break; - case 19: - /* log10(x<0) */ - exc.type = DOMAIN; - exc.name = "log10"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("log10: DOMAIN error\n", 20); - } - errno = EDOM; - } - break; - case 20: - /* pow(0.0,0.0) */ - /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID */ - exc.type = DOMAIN; - exc.name = "pow"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() != CYGNUM_LIBM_COMPAT_SVID) exc.retval = 1.0; - else if (!matherr(&exc)) { - (void) WRITE2("pow(0,0): DOMAIN error\n", 23); - errno = EDOM; - } - break; - case 21: - /* pow(x,y) overflow */ - exc.type = OVERFLOW; - exc.name = "pow"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - exc.retval = HUGE; - y *= 0.5; - if(xzero) ? HUGE : -HUGE); - else - exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL); - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 26: - /* sqrt(x<0) */ - exc.type = DOMAIN; - exc.name = "sqrt"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = zero; - else - exc.retval = zero/zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("sqrt: DOMAIN error\n", 19); - } - errno = EDOM; - } - break; - case 27: - /* fmod(x,0) */ - exc.type = DOMAIN; - exc.name = "fmod"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = x; - else - exc.retval = zero/zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("fmod: DOMAIN error\n", 20); - } - errno = EDOM; - } - break; - case 28: - /* remainder(x,0) */ - exc.type = DOMAIN; - exc.name = "remainder"; - exc.retval = zero/zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("remainder: DOMAIN error\n", 24); - } - errno = EDOM; - } - break; - case 29: - /* acosh(x<1) */ - exc.type = DOMAIN; - exc.name = "acosh"; - exc.retval = zero/zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("acosh: DOMAIN error\n", 20); - } - errno = EDOM; - } - break; - case 30: - /* atanh(|x|>1) */ - exc.type = DOMAIN; - exc.name = "atanh"; - exc.retval = zero/zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("atanh: DOMAIN error\n", 20); - } - errno = EDOM; - } - break; - case 31: - /* atanh(|x|=1) */ - exc.type = SING; - exc.name = "atanh"; - exc.retval = x/zero; /* sign(x)*inf */ - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("atanh: SING error\n", 18); - } - errno = EDOM; - } - break; - case 32: - /* scalb overflow; SVID also returns +-HUGE_VAL */ - exc.type = OVERFLOW; - exc.name = "scalb"; - exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 33: - /* scalb underflow */ - exc.type = UNDERFLOW; - exc.name = "scalb"; - exc.retval = copysign(zero,x); - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 34: - /* j0(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "j0"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 35: - /* y0(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "y0"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 36: - /* j1(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "j1"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 37: - /* y1(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "y1"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 38: - /* jn(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "jn"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 39: - /* yn(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = "yn"; - exc.retval = zero; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - errno = ERANGE; - } - break; - case 40: - /* gamma(finite) overflow */ - exc.type = OVERFLOW; - exc.name = "gamma"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 41: - /* gamma(-integer) or gamma(0) */ - exc.type = SING; - exc.name = "gamma"; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = EDOM; - else if (!matherr(&exc)) { - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { - (void) WRITE2("gamma: SING error\n", 18); - } - errno = EDOM; - } - break; - case 42: - /* pow(NaN,0.0) */ - /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID & CYGNUM_LIBM_COMPAT_XOPEN */ - exc.type = DOMAIN; - exc.name = "pow"; - exc.retval = x; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || - cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) exc.retval = 1.0; - else if (!matherr(&exc)) { - errno = EDOM; - } - break; - case 43: - /* ldexp overflow; SVID also returns +-HUGE_VAL */ - exc.type = OVERFLOW; - exc.name = "ldexp"; - exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - case 44: - /* ldexp underflow */ - exc.type = UNDERFLOW; - exc.name = "ldexp"; - exc.retval = copysign(zero,x); - if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) - errno = ERANGE; - else if (!matherr(&exc)) { - errno = ERANGE; - } - break; - } - return exc.retval; -} - -#endif // ifdef CYGPKG_LIBM - -// EOF standard.c +// EOF standard_float.c diff --git a/packages/language/c/libm/current/src/misc/standard.inl b/packages/language/c/libm/current/src/misc/standard.inl new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/misc/standard.inl @@ -0,0 +1,860 @@ +//=========================================================================== +// +// standard.inl +// +// +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// +// Usage: This file is included by standard.c and standard_float.c +// Note: The contents of this file originally existed in standard.c +// with addition of single precision math library the body was +// transfered here, while standard.c and standard_float.c include +// and instantiate this file for double and single precision floats +// respectively. +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +/* @(#)k_standard.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +// CONFIGURATION + +#include // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// INCLUDES + +#include // Common type definitions and support +#include // Tracing macros + +#include // Main header for math library +#include "mathincl/fdlibm.h" // Internal header for math library + +#include // standard error codes + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY +#include +#else +static int errno; // this whole file won't be used if we're IEEE only, but + // doing this keeps the compiler happy +#endif + +#ifdef CYGSEM_LIBM_USE_STDERR + +#include +#define WRITE2(u,v) fputs(u, stderr) + +#else + +#define WRITE2(u,v) 0 + +#endif // ifdef CYGSEM_LIBM_USE_STDERR + + +// GLOBALS + +static const CYG_STANDARD_FLOAT_T zero = (CYG_STANDARD_FLOAT_T)0.0; + +// FUNCTIONS + +/* + * Standard conformance (non-IEEE) on exception cases. + * Mapping: + * 1 -- acos(|x|>1) + * 2 -- asin(|x|>1) + * 3 -- atan2(+-0,+-0) + * 4 -- hypot overflow + * 5 -- cosh overflow + * 6 -- exp overflow + * 7 -- exp underflow + * 8 -- y0(0) + * 9 -- y0(-ve) + * 10-- y1(0) + * 11-- y1(-ve) + * 12-- yn(0) + * 13-- yn(-ve) + * 14-- lgamma(finite) overflow + * 15-- lgamma(-integer) + * 16-- log(0) + * 17-- log(x<0) + * 18-- log10(0) + * 19-- log10(x<0) + * 20-- pow(0.0,0.0) + * 21-- pow(x,y) overflow + * 22-- pow(x,y) underflow + * 23-- pow(0,negative) + * 24-- pow(neg,non-integral) + * 25-- sinh(finite) overflow + * 26-- sqrt(negative) + * 27-- fmod(x,0) + * 28-- remainder(x,0) + * 29-- acosh(x<1) + * 30-- atanh(|x|>1) + * 31-- atanh(|x|=1) + * 32-- scalb overflow + * 33-- scalb underflow + * 34-- j0(|x|>X_TLOSS) + * 35-- y0(x>X_TLOSS) + * 36-- j1(|x|>X_TLOSS) + * 37-- y1(x>X_TLOSS) + * 38-- jn(|x|>X_TLOSS, n) + * 39-- yn(x>X_TLOSS, n) + * 40-- gamma(finite) overflow + * 41-- gamma(-integer) + * 42-- pow(NaN,0.0) + * 43-- ldexp overflow + * 44-- ldexp underflow + */ + +#ifdef FLOAT_SINGLE_PRECISION +float +__kernel_standard_float(float x, float y, int type) +{ + struct exceptionf exc; + +#else +double +__kernel_standard(double x, double y, int type) +{ + struct exception exc; + +#endif + +#ifdef CYGSEM_LIBM_USE_STDERR + (void) fflush(stdout); +#endif + exc.arg1 = x; + exc.arg2 = y; + switch(type) { + case 1: + /* acos(|x|>1) */ + exc.type = DOMAIN; + exc.name = "acos" CYGSTR_FLOAT_SUFFIX; +#ifdef CYGOPT_LIBM_COMPAT_POSIX_IEEE + exc.retval = (x-x)/(x-x); +#else + exc.retval = zero; +#endif + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("acos: DOMAIN error\n", 19); + } + errno = EDOM; + } + break; + case 2: + /* asin(|x|>1) */ + exc.type = DOMAIN; + exc.name = "asin" CYGSTR_FLOAT_SUFFIX; +#ifdef CYGOPT_LIBM_COMPAT_POSIX_IEEE + exc.retval = (x-x)/(x-x); +#else + exc.retval = zero; +#endif + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("asin: DOMAIN error\n", 19); + } + errno = EDOM; + } + break; + case 3: + /* atan2(+-0,+-0) */ + exc.arg1 = y; + exc.arg2 = x; + exc.type = DOMAIN; + exc.name = "atan2" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("atan2: DOMAIN error\n", 20); + } + errno = EDOM; + } + break; + case 4: + /* hypot(finite,finite) overflow */ + exc.type = OVERFLOW; + exc.name = "hypot" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 5: + /* cosh(finite) overflow */ + exc.type = OVERFLOW; + exc.name = "cosh" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 6: + /* exp(finite) overflow */ + exc.type = OVERFLOW; + exc.name = "exp" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 7: + /* exp(finite) underflow */ + exc.type = UNDERFLOW; + exc.name = "exp" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 8: + /* y0(0) = -inf */ + exc.type = DOMAIN; /* should be SING for IEEE */ + exc.name = "y0" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("y0: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 9: + /* y0(x<0) = NaN */ + exc.type = DOMAIN; + exc.name = "y0" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("y0: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 10: + /* y1(0) = -inf */ + exc.type = DOMAIN; /* should be SING for IEEE */ + exc.name = "y1" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("y1: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 11: + /* y1(x<0) = NaN */ + exc.type = DOMAIN; + exc.name = "y1" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("y1: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 12: + /* yn(n,0) = -inf */ + exc.type = DOMAIN; /* should be SING for IEEE */ + exc.name = "yn" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("yn: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 13: + /* yn(x<0) = NaN */ + exc.type = DOMAIN; + exc.name = "yn" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("yn: DOMAIN error\n", 17); + } + errno = EDOM; + } + break; + case 14: + /* lgamma(finite) overflow */ + exc.type = OVERFLOW; + exc.name = "lgamma" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 15: + /* lgamma(-integer) or lgamma(0) */ + exc.type = SING; + exc.name = "lgamma" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("lgamma: SING error\n", 19); + } + errno = EDOM; + } + break; + case 16: + /* log(0) */ + exc.type = SING; + exc.name = "log" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("log: SING error\n", 16); + } + errno = EDOM; + } + break; + case 17: + /* log(x<0) */ + exc.type = DOMAIN; + exc.name = "log" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else +#ifdef CYGOPT_LIBM_COMPAT_POSIX_IEEE + exc.retval = (x-x)/(x-x); +#else + exc.retval = -HUGE_VAL; +#endif + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("log: DOMAIN error\n", 18); + } + errno = EDOM; + } + break; + case 18: + /* log10(0) */ + exc.type = SING; + exc.name = "log10" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else + exc.retval = -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("log10: SING error\n", 18); + } + errno = EDOM; + } + break; + case 19: + /* log10(x<0) */ + exc.type = DOMAIN; + exc.name = "log10" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = -HUGE; + else +#ifdef CYGOPT_LIBM_COMPAT_POSIX_IEEE + exc.retval = (x-x)/(x-x); +#else + exc.retval = -HUGE_VAL; +#endif + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("log10: DOMAIN error\n", 20); + } + errno = EDOM; + } + break; + case 20: + /* pow(0.0,0.0) */ + /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID */ + exc.type = DOMAIN; + exc.name = "pow" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() != CYGNUM_LIBM_COMPAT_SVID) exc.retval = 1.0; + else if (!MATHERR(&exc)) { + (void) WRITE2("pow(0,0): DOMAIN error\n", 23); + errno = EDOM; + } + break; + case 21: + /* pow(x,y) overflow */ + exc.type = OVERFLOW; + exc.name = "pow" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + exc.retval = HUGE; + y *= 0.5; + if(xzero) ? HUGE : -HUGE); + else + exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL); + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 26: + /* sqrt(x<0) */ + exc.type = DOMAIN; + exc.name = "sqrt" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = zero; + else + exc.retval = zero/zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("sqrt: DOMAIN error\n", 19); + } + errno = EDOM; + } + break; + case 27: + /* fmod(x,0) */ + exc.type = DOMAIN; + exc.name = "fmod" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = x; + else + exc.retval = zero/zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("fmod: DOMAIN error\n", 20); + } + errno = EDOM; + } + break; + case 28: + /* remainder(x,0) */ + exc.type = DOMAIN; + exc.name = "remainder" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero/zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("remainder: DOMAIN error\n", 24); + } + errno = EDOM; + } + break; + case 29: + /* acosh(x<1) */ + exc.type = DOMAIN; + exc.name = "acosh" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero/zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("acosh: DOMAIN error\n", 20); + } + errno = EDOM; + } + break; + case 30: + /* atanh(|x|>1) */ + exc.type = DOMAIN; + exc.name = "atanh" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero/zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("atanh: DOMAIN error\n", 20); + } + errno = EDOM; + } + break; + case 31: + /* atanh(|x|=1) */ + exc.type = SING; + exc.name = "atanh" CYGSTR_FLOAT_SUFFIX; + exc.retval = x/zero; /* sign(x)*inf */ + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("atanh: SING error\n", 18); + } + errno = EDOM; + } + break; + case 32: + /* scalb overflow; SVID also returns +-HUGE_VAL */ + exc.type = OVERFLOW; + exc.name = "scalb" CYGSTR_FLOAT_SUFFIX; + exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 33: + /* scalb underflow */ + exc.type = UNDERFLOW; + exc.name = "scalb" CYGSTR_FLOAT_SUFFIX; + exc.retval = copysign(zero,x); + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 34: + /* j0(|x|>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "j0" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 35: + /* y0(x>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "y0" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 36: + /* j1(|x|>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "j1" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 37: + /* y1(x>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "y1" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 38: + /* jn(|x|>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "jn" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 39: + /* yn(x>X_TLOSS) */ + exc.type = TLOSS; + exc.name = "yn" CYGSTR_FLOAT_SUFFIX; + exc.retval = zero; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2(exc.name, 2); + (void) WRITE2(": TLOSS error\n", 14); + } + errno = ERANGE; + } + break; + case 40: + /* gamma(finite) overflow */ + exc.type = OVERFLOW; + exc.name = "gamma" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 41: + /* gamma(-integer) or gamma(0) */ + exc.type = SING; + exc.name = "gamma" CYGSTR_FLOAT_SUFFIX; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) + exc.retval = HUGE; + else + exc.retval = HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = EDOM; + else if (!MATHERR(&exc)) { + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) { + (void) WRITE2("gamma: SING error\n", 18); + } + errno = EDOM; + } + break; + case 42: + /* pow(NaN,0.0) */ + /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID & CYGNUM_LIBM_COMPAT_XOPEN */ + exc.type = DOMAIN; + exc.name = "pow" CYGSTR_FLOAT_SUFFIX; + exc.retval = x; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE || + cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) exc.retval = 1.0; + else if (!MATHERR(&exc)) { + errno = EDOM; + } + break; + case 43: + /* ldexp overflow; SVID also returns +-HUGE_VAL */ + exc.type = OVERFLOW; + exc.name = "ldexp" CYGSTR_FLOAT_SUFFIX; + exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + case 44: + /* ldexp underflow */ + exc.type = UNDERFLOW; + exc.name = "ldexp" CYGSTR_FLOAT_SUFFIX; + exc.retval = copysign(zero,x); + if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) + errno = ERANGE; + else if (!MATHERR(&exc)) { + errno = ERANGE; + } + break; + } + return exc.retval; +} + +#endif // ifdef CYGPKG_LIBM + +// EOF standard.c diff --git a/packages/language/c/libm/current/src/misc/standard_float.c b/packages/language/c/libm/current/src/misc/standard_float.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/misc/standard_float.c @@ -0,0 +1,60 @@ +//=========================================================================== +// +// standard_float.c +// +// Standard conformance (non-IEEE) on exception cases. +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ilijak +// Contributors: +// Date: 2013-06-17 +// Purpose: +// Description: +// +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#define FLOAT_SINGLE_PRECISION +#define CYG_STANDARD_FLOAT_T float +#define CYGSTR_FLOAT_SUFFIX "f" +#define MATHERR(__exc_p) matherrf(__exc_p) +#include "standard.inl" + +// EOF standard_float.c diff --git a/packages/language/c/libm/current/tests/vectors/acosf.c b/packages/language/c/libm/current/tests/vectors/acosf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/acosf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// acosf.c +// +// Test of acosf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/acosf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(acosf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &acosf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &acosf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("acosf() is stable"); + } // if + else + { + CYG_TEST_FAIL("acosf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library acosf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "acosf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF acosf.c diff --git a/packages/language/c/libm/current/tests/vectors/acosf.h b/packages/language/c/libm/current/tests/vectors/acosf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/acosf.h @@ -0,0 +1,901 @@ +#ifndef CYGONCE_LIBM_ACOS_H +#define CYGONCE_LIBM_ACOS_H +//=========================================================================== +// +// acosf.h +// +// Test vectors for testing of acosf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/acosf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ACOS_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t acosf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{20, 3212836864u, 1078530011u, 1078530011u, 0, ACOS_TOLERANCE, 0}, +{21, 3212669092u, 1077936352u, 1077936352u, 0, ACOS_TOLERANCE, 0}, +{22, 3212501320u, 1077689746u, 1077689746u, 0, ACOS_TOLERANCE, 0}, +{23, 3212333548u, 1077500035u, 1077500035u, 0, ACOS_TOLERANCE, 0}, +{24, 3212165775u, 1077339692u, 1077339692u, 0, ACOS_TOLERANCE, 0}, +{25, 3211998003u, 1077198066u, 1077198066u, 0, ACOS_TOLERANCE, 0}, +{26, 3211830231u, 1077069697u, 1077069697u, 0, ACOS_TOLERANCE, 0}, +{27, 3211662459u, 1076951344u, 1076951344u, 0, ACOS_TOLERANCE, 0}, +{28, 3211494687u, 1076840899u, 1076840899u, 0, ACOS_TOLERANCE, 0}, +{29, 3211326915u, 1076736895u, 1076736895u, 0, ACOS_TOLERANCE, 0}, +{30, 3211159142u, 1076638267u, 1076638267u, 0, ACOS_TOLERANCE, 0}, +{31, 3210991370u, 1076544213u, 1076544213u, 0, ACOS_TOLERANCE, 0}, +{32, 3210823598u, 1076454107u, 1076454107u, 0, ACOS_TOLERANCE, 0}, +{33, 3210655826u, 1076367453u, 1076367453u, 0, ACOS_TOLERANCE, 0}, +{34, 3210488054u, 1076283850u, 1076283850u, 0, ACOS_TOLERANCE, 0}, +{35, 3210320282u, 1076202965u, 1076202965u, 0, ACOS_TOLERANCE, 0}, +{36, 3210152509u, 1076124522u, 1076124522u, 0, ACOS_TOLERANCE, 0}, +{37, 3209984737u, 1076048289u, 1076048289u, 0, ACOS_TOLERANCE, 0}, +{38, 3209816965u, 1075974064u, 1075974064u, 0, ACOS_TOLERANCE, 0}, +{39, 3209649193u, 1075901675u, 1075901675u, 0, ACOS_TOLERANCE, 0}, +{40, 3209481421u, 1075830972u, 1075830972u, 0, ACOS_TOLERANCE, 0}, +{41, 3209313649u, 1075761824u, 1075761824u, 0, ACOS_TOLERANCE, 0}, +{42, 3209145876u, 1075694114u, 1075694114u, 0, ACOS_TOLERANCE, 0}, +{43, 3208978104u, 1075627740u, 1075627740u, 0, ACOS_TOLERANCE, 0}, +{44, 3208810332u, 1075562612u, 1075562612u, 0, ACOS_TOLERANCE, 0}, +{45, 3208642560u, 1075498644u, 1075498644u, 0, ACOS_TOLERANCE, 0}, +{46, 3208474788u, 1075435764u, 1075435764u, 0, ACOS_TOLERANCE, 0}, +{47, 3208307016u, 1075373905u, 1075373905u, 0, ACOS_TOLERANCE, 0}, +{48, 3208139244u, 1075313005u, 1075313005u, 0, ACOS_TOLERANCE, 0}, +{49, 3207971471u, 1075253009u, 1075253009u, 0, ACOS_TOLERANCE, 0}, +{50, 3207803699u, 1075193866u, 1075193866u, 0, ACOS_TOLERANCE, 0}, +{51, 3207635927u, 1075135530u, 1075135530u, 0, ACOS_TOLERANCE, 0}, +{52, 3207468155u, 1075077958u, 1075077958u, 0, ACOS_TOLERANCE, 0}, +{53, 3207300383u, 1075021109u, 1075021109u, 0, ACOS_TOLERANCE, 0}, +{54, 3207132611u, 1074964947u, 1074964947u, 0, ACOS_TOLERANCE, 0}, +{55, 3206964838u, 1074909438u, 1074909438u, 0, ACOS_TOLERANCE, 0}, +{56, 3206797066u, 1074854550u, 1074854550u, 0, ACOS_TOLERANCE, 0}, +{57, 3206629294u, 1074800255u, 1074800255u, 0, ACOS_TOLERANCE, 0}, +{58, 3206461522u, 1074746524u, 1074746524u, 0, ACOS_TOLERANCE, 0}, +{59, 3206293750u, 1074693331u, 1074693331u, 0, ACOS_TOLERANCE, 0}, +{60, 3206125978u, 1074640653u, 1074640653u, 0, ACOS_TOLERANCE, 0}, +{61, 3205958205u, 1074588466u, 1074588466u, 0, ACOS_TOLERANCE, 0}, +{62, 3205790433u, 1074536750u, 1074536750u, 0, ACOS_TOLERANCE, 0}, +{63, 3205622661u, 1074485484u, 1074485484u, 0, ACOS_TOLERANCE, 0}, +{64, 3205454889u, 1074434648u, 1074434648u, 0, ACOS_TOLERANCE, 0}, +{65, 3205287117u, 1074384226u, 1074384226u, 0, ACOS_TOLERANCE, 0}, +{66, 3205119345u, 1074334200u, 1074334200u, 0, ACOS_TOLERANCE, 0}, +{67, 3204951572u, 1074284554u, 1074284554u, 0, ACOS_TOLERANCE, 0}, +{68, 3204783800u, 1074235272u, 1074235272u, 0, ACOS_TOLERANCE, 0}, +{69, 3204616028u, 1074186342u, 1074186342u, 0, ACOS_TOLERANCE, 0}, +{70, 3204448256u, 1074137746u, 1074137746u, 0, ACOS_TOLERANCE, 0}, +{71, 3204112712u, 1074089474u, 1074089474u, 0, ACOS_TOLERANCE, 0}, +{72, 3203777167u, 1074041512u, 1074041512u, 0, ACOS_TOLERANCE, 0}, +{73, 3203441623u, 1073993848u, 1073993848u, 0, ACOS_TOLERANCE, 0}, +{74, 3203106079u, 1073946471u, 1073946471u, 0, ACOS_TOLERANCE, 0}, +{75, 3202770534u, 1073899369u, 1073899369u, 0, ACOS_TOLERANCE, 0}, +{76, 3202434990u, 1073852533u, 1073852533u, 0, ACOS_TOLERANCE, 0}, +{77, 3202099446u, 1073805951u, 1073805951u, 0, ACOS_TOLERANCE, 0}, +{78, 3201763901u, 1073759615u, 1073759615u, 0, ACOS_TOLERANCE, 0}, +{79, 3201428357u, 1073685204u, 1073685204u, 0, ACOS_TOLERANCE, 0}, +{80, 3201092813u, 1073593456u, 1073593456u, 0, ACOS_TOLERANCE, 0}, +{81, 3200757268u, 1073502144u, 1073502144u, 0, ACOS_TOLERANCE, 0}, +{82, 3200421724u, 1073411251u, 1073411251u, 0, ACOS_TOLERANCE, 0}, +{83, 3200086180u, 1073320761u, 1073320761u, 0, ACOS_TOLERANCE, 0}, +{84, 3199750636u, 1073230658u, 1073230658u, 0, ACOS_TOLERANCE, 0}, +{85, 3199415091u, 1073140927u, 1073140927u, 0, ACOS_TOLERANCE, 0}, +{86, 3199079547u, 1073051553u, 1073051553u, 0, ACOS_TOLERANCE, 0}, +{87, 3198744003u, 1072962522u, 1072962522u, 0, ACOS_TOLERANCE, 0}, +{88, 3198408458u, 1072873820u, 1072873820u, 0, ACOS_TOLERANCE, 0}, +{89, 3198072914u, 1072785434u, 1072785434u, 0, ACOS_TOLERANCE, 0}, +{90, 3197737370u, 1072697350u, 1072697350u, 0, ACOS_TOLERANCE, 0}, +{91, 3197401825u, 1072609556u, 1072609556u, 0, ACOS_TOLERANCE, 0}, +{92, 3197066281u, 1072522040u, 1072522040u, 0, ACOS_TOLERANCE, 0}, +{93, 3196730737u, 1072434790u, 1072434790u, 0, ACOS_TOLERANCE, 0}, +{94, 3196395192u, 1072347793u, 1072347793u, 0, ACOS_TOLERANCE, 0}, +{95, 3196059648u, 1072261038u, 1072261038u, 0, ACOS_TOLERANCE, 0}, +{96, 3195388559u, 1072174515u, 1072174515u, 0, ACOS_TOLERANCE, 0}, +{97, 3194717471u, 1072088212u, 1072088212u, 0, ACOS_TOLERANCE, 0}, +{98, 3194046382u, 1072002118u, 1072002118u, 0, ACOS_TOLERANCE, 0}, +{99, 3193375293u, 1071916222u, 1071916222u, 0, ACOS_TOLERANCE, 0}, +{100, 3192704205u, 1071830516u, 1071830516u, 0, ACOS_TOLERANCE, 0}, +{101, 3192033116u, 1071744987u, 1071744987u, 0, ACOS_TOLERANCE, 0}, +{102, 3191362028u, 1071659628u, 1071659628u, 0, ACOS_TOLERANCE, 0}, +{103, 3190690939u, 1071574426u, 1071574426u, 0, ACOS_TOLERANCE, 0}, +{104, 3190019850u, 1071489374u, 1071489374u, 0, ACOS_TOLERANCE, 0}, +{105, 3189348762u, 1071404461u, 1071404461u, 0, ACOS_TOLERANCE, 0}, +{106, 3188677673u, 1071319679u, 1071319679u, 0, ACOS_TOLERANCE, 0}, +{107, 3188006584u, 1071235017u, 1071235017u, 0, ACOS_TOLERANCE, 0}, +{108, 3186999951u, 1071150468u, 1071150468u, 0, ACOS_TOLERANCE, 0}, +{109, 3185657774u, 1071066021u, 1071066021u, 0, ACOS_TOLERANCE, 0}, +{110, 3184315597u, 1070981668u, 1070981668u, 0, ACOS_TOLERANCE, 0}, +{111, 3182973420u, 1070897401u, 1070897401u, 0, ACOS_TOLERANCE, 0}, +{112, 3181631242u, 1070813210u, 1070813210u, 0, ACOS_TOLERANCE, 0}, +{113, 3180289065u, 1070729086u, 1070729086u, 0, ACOS_TOLERANCE, 0}, +{114, 3178611343u, 1070645022u, 1070645022u, 0, ACOS_TOLERANCE, 0}, +{115, 3175926989u, 1070561008u, 1070561008u, 0, ACOS_TOLERANCE, 0}, +{116, 3173242634u, 1070477037u, 1070477037u, 0, ACOS_TOLERANCE, 0}, +{117, 3170222735u, 1070393099u, 1070393099u, 0, ACOS_TOLERANCE, 0}, +{118, 3164854026u, 1070309186u, 1070309186u, 0, ACOS_TOLERANCE, 0}, +{119, 3156465418u, 1070225290u, 1070225290u, 0, ACOS_TOLERANCE, 0}, +{120, 1008981770u, 1070057516u, 1070057516u, 0, ACOS_TOLERANCE, 0}, +{121, 1017370378u, 1069973620u, 1069973620u, 0, ACOS_TOLERANCE, 0}, +{122, 1022739087u, 1069889707u, 1069889707u, 0, ACOS_TOLERANCE, 0}, +{123, 1025758986u, 1069805769u, 1069805769u, 0, ACOS_TOLERANCE, 0}, +{124, 1028443341u, 1069721798u, 1069721798u, 0, ACOS_TOLERANCE, 0}, +{125, 1031127695u, 1069637784u, 1069637784u, 0, ACOS_TOLERANCE, 0}, +{126, 1032805417u, 1069553720u, 1069553720u, 0, ACOS_TOLERANCE, 0}, +{127, 1034147594u, 1069469596u, 1069469596u, 0, ACOS_TOLERANCE, 0}, +{128, 1035489772u, 1069385405u, 1069385405u, 0, ACOS_TOLERANCE, 0}, +{129, 1036831949u, 1069301138u, 1069301138u, 0, ACOS_TOLERANCE, 0}, +{130, 1038174126u, 1069216785u, 1069216785u, 0, ACOS_TOLERANCE, 0}, +{131, 1039516303u, 1069132338u, 1069132338u, 0, ACOS_TOLERANCE, 0}, +{132, 1040522936u, 1069047789u, 1069047789u, 0, ACOS_TOLERANCE, 0}, +{133, 1041194025u, 1068963127u, 1068963127u, 0, ACOS_TOLERANCE, 0}, +{134, 1041865114u, 1068878345u, 1068878345u, 0, ACOS_TOLERANCE, 0}, +{135, 1042536202u, 1068793432u, 1068793432u, 0, ACOS_TOLERANCE, 0}, +{136, 1043207291u, 1068708380u, 1068708380u, 0, ACOS_TOLERANCE, 0}, +{137, 1043878380u, 1068623178u, 1068623178u, 0, ACOS_TOLERANCE, 0}, +{138, 1044549468u, 1068537819u, 1068537819u, 0, ACOS_TOLERANCE, 0}, +{139, 1045220557u, 1068452290u, 1068452290u, 0, ACOS_TOLERANCE, 0}, +{140, 1045891645u, 1068366584u, 1068366584u, 0, ACOS_TOLERANCE, 0}, +{141, 1046562734u, 1068280688u, 1068280688u, 0, ACOS_TOLERANCE, 0}, +{142, 1047233823u, 1068194594u, 1068194594u, 0, ACOS_TOLERANCE, 0}, +{143, 1047904911u, 1068108291u, 1068108291u, 0, ACOS_TOLERANCE, 0}, +{144, 1048576000u, 1068021768u, 1068021768u, 0, ACOS_TOLERANCE, 0}, +{145, 1048911544u, 1067935013u, 1067935013u, 0, ACOS_TOLERANCE, 0}, +{146, 1049247089u, 1067848016u, 1067848016u, 0, ACOS_TOLERANCE, 0}, +{147, 1049582633u, 1067760766u, 1067760766u, 0, ACOS_TOLERANCE, 0}, +{148, 1049918177u, 1067673250u, 1067673250u, 0, ACOS_TOLERANCE, 0}, +{149, 1050253722u, 1067585456u, 1067585456u, 0, ACOS_TOLERANCE, 0}, +{150, 1050589266u, 1067497372u, 1067497372u, 0, ACOS_TOLERANCE, 0}, +{151, 1050924810u, 1067408986u, 1067408986u, 0, ACOS_TOLERANCE, 0}, +{152, 1051260355u, 1067320284u, 1067320284u, 0, ACOS_TOLERANCE, 0}, +{153, 1051595899u, 1067231253u, 1067231253u, 0, ACOS_TOLERANCE, 0}, +{154, 1051931443u, 1067141879u, 1067141879u, 0, ACOS_TOLERANCE, 0}, +{155, 1052266988u, 1067052148u, 1067052148u, 0, ACOS_TOLERANCE, 0}, +{156, 1052602532u, 1066962045u, 1066962045u, 0, ACOS_TOLERANCE, 0}, +{157, 1052938076u, 1066871555u, 1066871555u, 0, ACOS_TOLERANCE, 0}, +{158, 1053273620u, 1066780662u, 1066780662u, 0, ACOS_TOLERANCE, 0}, +{159, 1053609165u, 1066689350u, 1066689350u, 0, ACOS_TOLERANCE, 0}, +{160, 1053944709u, 1066597602u, 1066597602u, 0, ACOS_TOLERANCE, 0}, +{161, 1054280253u, 1066505400u, 1066505400u, 0, ACOS_TOLERANCE, 0}, +{162, 1054615798u, 1066412727u, 1066412727u, 0, ACOS_TOLERANCE, 0}, +{163, 1054951342u, 1066319564u, 1066319564u, 0, ACOS_TOLERANCE, 0}, +{164, 1055286886u, 1066225892u, 1066225892u, 0, ACOS_TOLERANCE, 0}, +{165, 1055622431u, 1066131688u, 1066131688u, 0, ACOS_TOLERANCE, 0}, +{166, 1055957975u, 1066036934u, 1066036934u, 0, ACOS_TOLERANCE, 0}, +{167, 1056293519u, 1065941607u, 1065941607u, 0, ACOS_TOLERANCE, 0}, +{168, 1056629064u, 1065845682u, 1065845682u, 0, ACOS_TOLERANCE, 0}, +{169, 1056964608u, 1065749138u, 1065749138u, 0, ACOS_TOLERANCE, 0}, +{170, 1057132380u, 1065651947u, 1065651947u, 0, ACOS_TOLERANCE, 0}, +{171, 1057300152u, 1065554085u, 1065554085u, 0, ACOS_TOLERANCE, 0}, +{172, 1057467924u, 1065455522u, 1065455522u, 0, ACOS_TOLERANCE, 0}, +{173, 1057635697u, 1065356229u, 1065356229u, 0, ACOS_TOLERANCE, 0}, +{174, 1057803469u, 1065159138u, 1065159138u, 0, ACOS_TOLERANCE, 0}, +{175, 1057971241u, 1064957451u, 1064957451u, 0, ACOS_TOLERANCE, 0}, +{176, 1058139013u, 1064754109u, 1064754109u, 0, ACOS_TOLERANCE, 0}, +{177, 1058306785u, 1064549045u, 1064549045u, 0, ACOS_TOLERANCE, 0}, +{178, 1058474557u, 1064342180u, 1064342180u, 0, ACOS_TOLERANCE, 0}, +{179, 1058642330u, 1064133432u, 1064133432u, 0, ACOS_TOLERANCE, 0}, +{180, 1058810102u, 1063922719u, 1063922719u, 0, ACOS_TOLERANCE, 0}, +{181, 1058977874u, 1063709949u, 1063709949u, 0, ACOS_TOLERANCE, 0}, +{182, 1059145646u, 1063495024u, 1063495024u, 0, ACOS_TOLERANCE, 0}, +{183, 1059313418u, 1063277842u, 1063277842u, 0, ACOS_TOLERANCE, 0}, +{184, 1059481190u, 1063058292u, 1063058292u, 0, ACOS_TOLERANCE, 0}, +{185, 1059648963u, 1062836256u, 1062836256u, 0, ACOS_TOLERANCE, 0}, +{186, 1059816735u, 1062611609u, 1062611609u, 0, ACOS_TOLERANCE, 0}, +{187, 1059984507u, 1062384214u, 1062384214u, 0, ACOS_TOLERANCE, 0}, +{188, 1060152279u, 1062153923u, 1062153923u, 0, ACOS_TOLERANCE, 0}, +{189, 1060320051u, 1061920578u, 1061920578u, 0, ACOS_TOLERANCE, 0}, +{190, 1060487823u, 1061684008u, 1061684008u, 0, ACOS_TOLERANCE, 0}, +{191, 1060655596u, 1061444023u, 1061444023u, 0, ACOS_TOLERANCE, 0}, +{192, 1060823368u, 1061200425u, 1061200425u, 0, ACOS_TOLERANCE, 0}, +{193, 1060991140u, 1060952987u, 1060952987u, 0, ACOS_TOLERANCE, 0}, +{194, 1061158912u, 1060701468u, 1060701468u, 0, ACOS_TOLERANCE, 0}, +{195, 1061326684u, 1060445598u, 1060445598u, 0, ACOS_TOLERANCE, 0}, +{196, 1061494456u, 1060185082u, 1060185082u, 0, ACOS_TOLERANCE, 0}, +{197, 1061662228u, 1059919589u, 1059919589u, 0, ACOS_TOLERANCE, 0}, +{198, 1061830001u, 1059648749u, 1059648749u, 0, ACOS_TOLERANCE, 0}, +{199, 1061997773u, 1059372157u, 1059372157u, 0, ACOS_TOLERANCE, 0}, +{200, 1062165545u, 1059089345u, 1059089345u, 0, ACOS_TOLERANCE, 0}, +{201, 1062333317u, 1058799789u, 1058799789u, 0, ACOS_TOLERANCE, 0}, +{202, 1062501089u, 1058502888u, 1058502888u, 0, ACOS_TOLERANCE, 0}, +{203, 1062668861u, 1058197954u, 1058197954u, 0, ACOS_TOLERANCE, 0}, +{204, 1062836634u, 1057884184u, 1057884184u, 0, ACOS_TOLERANCE, 0}, +{205, 1063004406u, 1057560646u, 1057560646u, 0, ACOS_TOLERANCE, 0}, +{206, 1063172178u, 1057226232u, 1057226232u, 0, ACOS_TOLERANCE, 0}, +{207, 1063339950u, 1056794626u, 1056794626u, 0, ACOS_TOLERANCE, 0}, +{208, 1063507722u, 1056073778u, 1056073778u, 0, ACOS_TOLERANCE, 0}, +{209, 1063675494u, 1055321342u, 1055321342u, 0, ACOS_TOLERANCE, 0}, +{210, 1063843267u, 1054532321u, 1054532321u, 0, ACOS_TOLERANCE, 0}, +{211, 1064011039u, 1053700291u, 1053700291u, 0, ACOS_TOLERANCE, 0}, +{212, 1064178811u, 1052816725u, 1052816725u, 0, ACOS_TOLERANCE, 0}, +{213, 1064346583u, 1051869905u, 1051869905u, 0, ACOS_TOLERANCE, 0}, +{214, 1064514355u, 1050842953u, 1050842953u, 0, ACOS_TOLERANCE, 0}, +{215, 1064682127u, 1049709945u, 1049709945u, 0, ACOS_TOLERANCE, 0}, +{216, 1064849900u, 1048278399u, 1048278399u, 0, ACOS_TOLERANCE, 0}, +{217, 1065017672u, 1045243021u, 1045243021u, 0, ACOS_TOLERANCE, 0}, +{218, 1065185444u, 1041297333u, 1041297333u, 0, ACOS_TOLERANCE, 0}, +{219, 1065437102u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{220, 1065520988u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{221, 1065604874u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{222, 1065688760u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{223, 1065772646u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{224, 1065856532u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{225, 1065940419u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{226, 1066024305u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{227, 1066108191u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{228, 1066192077u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{229, 1066275963u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{230, 1066359849u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{231, 1066443735u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{232, 1066527621u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{233, 1066611507u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{234, 1066695393u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{235, 1066779279u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{236, 1066863165u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{237, 1066947052u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{238, 3234402267u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{239, 3231108068u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{240, 3226013659u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{241, 3217625051u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{242, 1070141403u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{243, 1078530011u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{244, 1083624420u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{245, 3253731328u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{246, 3252840038u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{247, 3251948749u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{248, 3251057459u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{249, 3250166170u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{250, 3249274880u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{251, 3248383590u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{252, 3247492301u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{253, 3246601011u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{254, 3245028147u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{255, 3243245568u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{256, 3241462989u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{257, 3239680410u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{258, 3237792973u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{259, 3234227814u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{260, 3230662656u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{261, 3224580915u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{262, 3213675725u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{263, 1058642330u, 1064133432u, 1064133432u, 0, ACOS_TOLERANCE, 0}, +{264, 1075000115u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{265, 1082130432u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{266, 1085695590u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{267, 1089260749u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{268, 1091672474u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{269, 1093455053u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{270, 1095237632u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{271, 1097020211u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{272, 1098802790u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{273, 1099746509u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{274, 1100637798u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{275, 1101529088u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{276, 1102420378u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{277, 1103311667u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{278, 1104202957u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{279, 1105094246u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{280, 1105985536u, 1115684864u, 2143289344u, EDOM, ACOS_TOLERANCE, 0}, +{281, 2147483648u, 1052069095u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{282, 2147483648u, 1071072428u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{283, 2147483648u, 3296950845u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{284, 2147483648u, 3156566413u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{285, 2147483648u, 3358077510u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{286, 2147483648u, 1025523870u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{287, 2147483648u, 1243001035u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{288, 2147483648u, 972638352u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{289, 810619489u, 3185903817u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{290, 2147491935u, 1278817364u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{291, 2147483648u, 3171458120u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{292, 288269848u, 1320608539u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{293, 2147483648u, 931147479u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{294, 2147483648u, 1037515180u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{295, 2277437585u, 3100002586u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{296, 2147483648u, 3192719340u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{297, 2147483648u, 1021132553u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{298, 591881758u, 951277634u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{299, 2147483648u, 3330035379u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{300, 2147483648u, 1001673627u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{301, 2749599591u, 851226131u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{302, 2147483648u, 906737571u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{303, 749404886u, 3268990607u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{304, 2147483648u, 1275963161u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{305, 2147483648u, 3253933764u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{306, 2147483648u, 3484034384u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{307, 2147483648u, 1233424920u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{308, 2334905811u, 938541324u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{309, 2147483648u, 1267908299u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{310, 2147483648u, 1017806823u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{311, 2147483648u, 2991550291u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{312, 363647387u, 3260698942u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{313, 2147483648u, 842980605u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{314, 2147483648u, 1081230948u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{315, 2743120633u, 3414609019u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{316, 2267257448u, 1021746912u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{317, 2147483648u, 1182202773u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{318, 2147483648u, 991146039u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{319, 2147483648u, 906951239u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{320, 2147483648u, 1118207485u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{321, 2147483648u, 1196181063u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{322, 2689012108u, 3480992834u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{323, 2147483648u, 3477870099u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{324, 2147483648u, 813029006u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{325, 2837565631u, 988745783u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{326, 2147483648u, 1205426478u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{327, 2147888351u, 3188486667u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{328, 2147483648u, 3372681320u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{329, 2147483648u, 960989701u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{330, 2147483744u, 3213319290u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{331, 2147483648u, 2994036021u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{332, 2147483648u, 1163818382u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{333, 2147483648u, 3030724760u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{334, 2147483648u, 3251462098u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{335, 448400401u, 936708769u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{336, 2147483648u, 845007087u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{337, 2444070966u, 3144245472u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{338, 2147483648u, 3162429103u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{339, 2147483648u, 976891930u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{340, 2147483648u, 856188678u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{341, 2147483648u, 898585738u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{342, 2147483648u, 3006490973u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{343, 2147483648u, 956052691u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{344, 391u, 3480430994u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{345, 2147483648u, 3206874009u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{346, 2756996510u, 1061834641u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{347, 2873449850u, 1051903437u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{348, 2147483648u, 1250159739u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{349, 2147483648u, 1000330041u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{350, 119045454u, 3402754560u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{351, 2147483648u, 1060741775u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{352, 160249855u, 3349719404u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{353, 2147483648u, 3422089012u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{354, 920u, 3207629620u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{355, 2147483648u, 3262490615u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{356, 2147483648u, 968020321u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{357, 2147483648u, 918937712u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{358, 2147483648u, 3361987866u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{359, 2147483648u, 1037918217u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{360, 340020199u, 1094190727u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{361, 2147483648u, 1053266823u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{362, 2147877445u, 3113871093u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{363, 2147483648u, 924982045u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{364, 2147483648u, 3075674944u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{365, 2147483648u, 3343511749u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{366, 2147483648u, 3472160795u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{367, 2147483648u, 1185255822u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{368, 2147483648u, 2964473730u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{369, 2723075543u, 3293073011u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{370, 2314131156u, 1131488075u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{371, 2147483648u, 1155973549u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{372, 2147483648u, 1273466037u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{373, 2147483648u, 3160115806u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{374, 2147483648u, 3421884736u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{375, 490459729u, 896142227u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{376, 2147483648u, 824119322u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{377, 2147483648u, 1226409254u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{378, 2724754778u, 3052084797u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{379, 2147483648u, 1043837748u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{380, 2147483648u, 3023809388u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{381, 2147483648u, 3184462258u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{382, 3u, 3117479148u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{383, 2147483648u, 3454151744u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{384, 2147483648u, 997035638u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{385, 2147483648u, 1205909956u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{386, 2147483648u, 2961687578u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{387, 2147483648u, 3129523970u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{388, 719549432u, 891539868u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{389, 2147483648u, 1092464984u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{390, 440779482u, 3412981093u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{391, 2147483648u, 3265523505u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{392, 2147483648u, 3232569165u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{393, 2147483648u, 1209839368u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{394, 2147483648u, 904437268u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{395, 2410584209u, 3238493878u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{396, 2147483648u, 3232169970u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{397, 2147483648u, 859974315u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{398, 2147483648u, 1129234809u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{399, 2147483648u, 916838473u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{400, 2147483648u, 1167070004u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{401, 2147483648u, 3031347719u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{402, 2147483648u, 3177294154u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{403, 108031518u, 3304796832u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{404, 2147483648u, 3171306569u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{405, 2147483648u, 3020473908u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{406, 2147483648u, 1096158518u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{407, 2147483648u, 3179481213u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{408, 2147483648u, 1281942534u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{409, 2147483648u, 3441620273u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{410, 728778715u, 1194063479u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{411, 2147483648u, 1269521406u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{412, 2147483648u, 1080781593u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{413, 391u, 3017708315u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{414, 2147483648u, 1305758312u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{415, 321062391u, 3276701541u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{416, 2147483648u, 3341726399u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{417, 2147483648u, 906796922u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{418, 2147483648u, 1224014884u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{419, 2147483648u, 966599478u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{420, 2326921734u, 835476614u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{421, 2147483648u, 923275921u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{422, 46071684u, 3343681859u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{423, 2147483648u, 3021544263u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{424, 2147483648u, 1178287186u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{425, 2147483648u, 829189744u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{426, 393982026u, 1143885245u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{427, 2147483648u, 3046898319u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{428, 2147483648u, 867967302u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{429, 2147483648u, 3338770855u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{430, 2147483648u, 3475508255u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{431, 2147483648u, 1202693903u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{432, 284154797u, 3427090024u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{433, 2264306954u, 1056262920u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{434, 2147483648u, 3264549339u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{435, 2147483648u, 1276853215u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{436, 2550407686u, 1096828073u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{437, 2147483648u, 1012272490u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{438, 2147483648u, 1295490054u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{439, 2147483648u, 1164664124u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{440, 570155606u, 3450612343u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{441, 480515653u, 3283738666u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{442, 2611692162u, 1106497311u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{443, 2147483648u, 3351032791u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{444, 2147483648u, 3046751162u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{445, 2147483648u, 838969199u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{446, 2324006503u, 3232806352u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{447, 141980743u, 1191954283u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{448, 2147483648u, 3441975288u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{449, 2147483648u, 3112892091u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{450, 2147483648u, 1336130408u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{451, 2147483648u, 813667607u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{452, 2147483648u, 3446438152u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{453, 2147483648u, 3270337976u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{454, 59461286u, 1214457631u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{455, 2147483648u, 3282519962u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{456, 2147483648u, 3108384823u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{457, 478163079u, 1090165393u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{458, 2147483648u, 882977381u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{459, 2147483648u, 1112072452u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{460, 2147483648u, 1028145400u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{461, 2147483648u, 1286245415u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{462, 2147483648u, 806097243u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{463, 2147483648u, 3412765608u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{464, 2147483648u, 940691906u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{465, 2147483648u, 3364307110u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{466, 2147483648u, 3065390393u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{467, 2147483648u, 3038555590u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{468, 2677724809u, 1314588083u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{469, 75734u, 3253167645u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{470, 797989396u, 1127052054u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{471, 2880582777u, 3331526060u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{472, 2147483648u, 3303828921u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{473, 2147483648u, 1059458160u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{474, 2147483648u, 1271766333u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{475, 2147483648u, 994934087u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{476, 2147483648u, 3349215575u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{477, 2147483648u, 1280179344u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{478, 2917059631u, 3430128441u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{479, 2147483648u, 3121491888u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{480, 2383125370u, 3134983555u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{481, 2490969476u, 1274271338u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{482, 2147483648u, 3137789275u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{483, 2147483648u, 3421282265u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{484, 2147483648u, 1176648675u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{485, 2147483648u, 3318141593u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{486, 2147483648u, 2953745031u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{487, 2147483648u, 3120393778u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{488, 2147483648u, 3057446844u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{489, 2147483648u, 1301684858u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{490, 2147483648u, 3268263719u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{491, 2147483648u, 1125665786u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{492, 2147483648u, 1164064095u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{493, 2147483648u, 3294185127u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{494, 2147483648u, 1210292360u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{495, 2147483648u, 1252991340u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{496, 2147483648u, 1129547574u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{497, 2690145161u, 3166174863u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{498, 2147483648u, 1246902946u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{499, 2147483648u, 821713786u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{500, 2147483648u, 1234682085u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{501, 2147483648u, 3196797581u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{502, 2147483648u, 3216636846u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{503, 2147483648u, 886552820u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{504, 2147483648u, 3275838921u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{505, 2147483648u, 3431026150u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{506, 2147483648u, 3013546177u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{507, 2147483648u, 3207228055u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{508, 2147483648u, 1189849849u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{509, 2147483648u, 1324123675u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{510, 2147483648u, 1284669825u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{511, 2147483648u, 1215659576u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{512, 2147483648u, 3313440410u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{513, 1049501u, 1325911234u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{514, 2147483648u, 865445870u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{515, 2147483648u, 3317255445u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{516, 234742983u, 1296303326u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{517, 2147483648u, 3141459622u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{518, 2147483648u, 3059263153u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{519, 2147483648u, 1150362008u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{520, 2147483648u, 3413901925u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{521, 2147483648u, 2970282274u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{522, 2385195833u, 1103833874u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{523, 2564584176u, 3380095806u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{524, 2513707978u, 3321602471u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{525, 2147483648u, 3149379368u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{526, 2147483648u, 1227380036u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{527, 2147483648u, 1030612298u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{528, 2147483648u, 1274230155u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{529, 2170277926u, 943702773u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{530, 2147483648u, 3455490212u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{531, 2147483648u, 3397380506u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{532, 2147653175u, 1070703949u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{533, 2147483648u, 946724121u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{534, 2147483648u, 1142740742u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{535, 2897405230u, 1257041821u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{536, 2147483648u, 3223269892u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{537, 2147483648u, 3369970587u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{538, 2147483648u, 911179122u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{539, 2147483648u, 3163556685u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{540, 2938612105u, 1098390556u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{541, 2147483648u, 3333087577u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{542, 2147483648u, 1138833401u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{543, 2147483648u, 1340199001u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{544, 2147483648u, 1153598995u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{545, 2147483648u, 3343190157u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{546, 2147483648u, 3327511577u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{547, 2687462036u, 1246668916u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{548, 2147483648u, 3364525678u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{549, 2147483648u, 841477222u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{550, 2147483648u, 3094865367u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{551, 2147483648u, 823554575u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{552, 2147483648u, 3426895417u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{553, 2147483648u, 3462258576u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{554, 843704503u, 3393355960u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{555, 2147483648u, 1100950868u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{556, 2147483648u, 891772654u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{557, 2147483648u, 3201307027u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{558, 2147483648u, 3034243695u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{559, 2147483648u, 3361467010u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{560, 2147483648u, 1252032904u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{561, 2147483648u, 1075881433u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{562, 33406260u, 1076793020u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{563, 2147483648u, 1198013705u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{564, 400127762u, 1226901593u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{565, 2147483648u, 3169114927u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{566, 149822278u, 1322250198u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{567, 2147483648u, 3037360125u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{568, 3392684u, 925229709u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{569, 2147483648u, 1041547928u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{570, 840558416u, 3019447745u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{571, 2147483648u, 851189486u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{572, 2147483648u, 3178983748u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{573, 2147483648u, 846808247u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{574, 2147483648u, 3362274638u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{575, 2652324524u, 940145823u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{576, 2156232923u, 3258645378u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{577, 486701u, 3392968785u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{578, 763674077u, 819117302u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{579, 2147483648u, 1087159751u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{580, 2147483648u, 3112136590u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{581, 2147483648u, 1093996718u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{582, 2147483648u, 1221138363u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{583, 2147483648u, 3082454432u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{584, 2147483648u, 905107980u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{585, 2147483648u, 1327101792u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{586, 2147483648u, 1130799489u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{587, 2147483648u, 3019855125u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{588, 2147483648u, 3403051413u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{589, 2147483648u, 1177352432u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{590, 2147483648u, 3033883446u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{591, 2147483648u, 1248810001u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{592, 2147483648u, 3065502249u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{593, 2147483648u, 970336973u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{594, 2468094017u, 1200966067u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{595, 637394373u, 816383247u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{596, 2147483648u, 933435023u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{597, 2147483648u, 3247983449u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{598, 2147483648u, 3377417079u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{599, 2147483648u, 1202153484u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{600, 2147483648u, 1258550065u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{601, 2147483648u, 3135303960u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{602, 501121108u, 1170420310u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{603, 2147483648u, 1161379350u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{604, 472266126u, 3040081476u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{605, 2147483648u, 3126785738u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{606, 2147483648u, 1135720261u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{607, 2147483648u, 834161190u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{608, 2147483648u, 1195849454u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{609, 2147483648u, 1031113622u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{610, 2147483648u, 3041923509u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{611, 2741465718u, 1268459262u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{612, 2147483648u, 3245406322u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{613, 2147483648u, 2958435407u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{614, 864473987u, 3475052219u, 1070141402u, 0, ACOS_TOLERANCE, 0}, +{615, 193530813u, 1034349331u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{616, 2147483648u, 875370373u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{617, 2147483648u, 1326938231u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{618, 2147483648u, 3081333275u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{619, 2147483648u, 1083849288u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{620, 2147483648u, 1160615461u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{621, 2147483648u, 1057159525u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{622, 2147483648u, 1099193347u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{623, 2147483648u, 1156923458u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{624, 2147483648u, 1173759936u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{625, 2147483648u, 3051974545u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{626, 2147483648u, 1270944913u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{627, 2147483648u, 1068842002u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{628, 453373699u, 2987148017u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{629, 2147483648u, 3188146033u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{630, 2147483648u, 1292551278u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{631, 2147483648u, 3472203760u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{632, 2147483672u, 3151507159u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{633, 2147483648u, 1022984119u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{634, 2147483648u, 831320715u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{635, 2147483648u, 1236928772u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{636, 2147483648u, 833633147u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{637, 2255937854u, 3272421852u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{638, 2147483648u, 1274899097u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{639, 2147483648u, 1203700708u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{640, 2147483648u, 1219956070u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{641, 2147483648u, 3250328831u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{642, 2147483648u, 3115437331u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{643, 2147483648u, 3436353675u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{644, 2147483648u, 970565586u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{645, 733874287u, 1140723341u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{646, 2147483648u, 1094978498u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{647, 339953634u, 3229870615u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{648, 2147483648u, 1100875500u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{649, 2147483648u, 1281399060u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{650, 2147483648u, 3339857921u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{651, 2670707199u, 3289859792u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{652, 2147483648u, 905068959u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{653, 2147483648u, 2967285726u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{654, 2594850059u, 1229268598u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{655, 2147483648u, 817642171u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{656, 2147483648u, 3296217738u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{657, 2147483648u, 886781716u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{658, 2147483648u, 822243042u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{659, 2147483648u, 1232836633u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{660, 2147483648u, 3012101436u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{661, 2147483648u, 2985875633u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{662, 2898702392u, 3271988538u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{663, 2147483648u, 3255541781u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{664, 2147483648u, 3012527353u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{665, 2147483648u, 853459706u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{666, 2147483648u, 1032597076u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{667, 2147483648u, 3396154986u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{668, 2147483648u, 1280578799u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{669, 2147483648u, 3177612111u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{670, 2147483648u, 3086531260u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{671, 368559080u, 1200160986u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{672, 2374565676u, 1146511497u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{673, 409663799u, 3322946721u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{674, 2147483648u, 3286432366u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{675, 2147483648u, 3250061248u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{676, 2147483648u, 1195896327u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{677, 2147483648u, 1171219623u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{678, 2147483648u, 1093697541u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{679, 2147483648u, 3032135104u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{680, 2147483648u, 3411964796u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{681, 244369307u, 3136168070u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{682, 2147483648u, 1147204146u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{683, 2169506506u, 952770933u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{684, 2147483648u, 1038197181u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{685, 31340u, 812862946u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{686, 2147483650u, 1327912576u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{687, 197631173u, 3443552129u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{688, 2147483648u, 2953199494u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{689, 2147483648u, 1184612738u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{690, 2147483648u, 3402547824u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{691, 2147483648u, 894632143u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{692, 2728370577u, 897541752u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{693, 2147483648u, 1261942977u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{694, 2147483648u, 1099200954u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{695, 2147483648u, 3154292435u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{696, 2147483648u, 3152683606u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{697, 2147483648u, 1121826464u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{698, 2147483648u, 880804546u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{699, 2147483648u, 3141673859u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{700, 2446012935u, 3133522904u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{701, 2147483648u, 954983712u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{702, 2147483648u, 854348972u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{703, 308447u, 3231395033u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{704, 2147483648u, 3231323929u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{705, 236u, 3463576490u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{706, 2147483648u, 3276600049u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{707, 2147483648u, 1012037114u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{708, 428667909u, 827589466u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{709, 2709748098u, 3349525030u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{710, 2147483648u, 3030201286u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{711, 2147483648u, 3395574276u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{712, 2147483648u, 3037433263u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{713, 2147483648u, 3367144216u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{714, 2147483648u, 3296624630u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{715, 2147483648u, 3185505910u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{716, 225982867u, 855857523u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{717, 2147483648u, 1190400416u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{718, 2147483648u, 3268819116u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{719, 487188428u, 3025581813u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{720, 2147483648u, 3452213962u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{721, 2147483648u, 2994137867u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{722, 2147483648u, 1097262576u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{723, 71316482u, 3285809933u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{724, 2147483648u, 891257783u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{725, 1131u, 3188660897u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{726, 2147483648u, 3448533274u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{727, 2345099095u, 1024052164u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{728, 2147483648u, 893873945u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{729, 2147483648u, 1318917723u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{730, 2811770800u, 1094056396u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{731, 2147483648u, 971406232u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{732, 2147483648u, 1156679346u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{733, 505481166u, 1327433469u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{734, 2147483648u, 1158002738u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{735, 80634256u, 3217565926u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{736, 2147483648u, 3348046043u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{737, 2147483648u, 3042603886u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{738, 2147483648u, 3401478939u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{739, 117882441u, 2975268107u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{740, 622405526u, 933456504u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{741, 2147483648u, 1275983938u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{742, 2147483648u, 3064757885u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{743, 2147483648u, 3213261231u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{744, 2147483648u, 1257170393u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{745, 2147483648u, 968803479u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{746, 2147483648u, 3190256226u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{747, 2147483648u, 3107269354u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{748, 2147483648u, 3276193236u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{749, 651028769u, 3381966453u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{750, 2147483648u, 3137791426u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{751, 2147483648u, 3392203888u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{752, 2678157437u, 959123675u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{753, 372854u, 2997685349u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{754, 2147483648u, 3365775178u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{755, 2147483648u, 1200179013u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{756, 788951227u, 3254453434u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{757, 2957296123u, 2972152223u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{758, 2147483648u, 1273440283u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{759, 701665361u, 1227824408u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{760, 2147483648u, 938291177u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{761, 2147483648u, 3086279225u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{762, 2147483648u, 1223209034u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{763, 2147483648u, 1154573712u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{764, 2147483648u, 955325067u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{765, 2147483648u, 3113982619u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{766, 2147483648u, 1295331892u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{767, 2147483648u, 3134912135u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{768, 2863444097u, 815271840u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{769, 491705664u, 1193124813u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{770, 2147483648u, 1130046118u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{771, 2147483648u, 3422483143u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{772, 2147483648u, 963588452u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{773, 2147483648u, 3040968274u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{774, 2147483648u, 1029390534u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{775, 2147495995u, 1200467128u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{776, 2584489366u, 3233768835u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{777, 2147483648u, 3410148475u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{778, 2151563707u, 913267570u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{779, 2147483648u, 3388531942u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{780, 2147483648u, 3200345720u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{781, 780554677u, 1168166977u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{782, 2984790262u, 1225900941u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{783, 2147483648u, 3225037855u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{784, 2147483648u, 3391018698u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{785, 2147483648u, 1069185756u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{786, 2147483648u, 3123041418u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{787, 2147483648u, 1066846928u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{788, 2147483648u, 3461136033u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{789, 2147483648u, 912815101u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{790, 730526127u, 3412416876u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{791, 2147483654u, 1015752130u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{792, 2147483648u, 826306215u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{793, 2147483648u, 3169816394u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{794, 2915338033u, 3341154295u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{795, 2147483648u, 956765468u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{796, 635019546u, 3395476366u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{797, 2147483648u, 903755282u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{798, 2147483648u, 1184548899u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{799, 230260625u, 3475052132u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{800, 2147483648u, 3061939312u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{801, 2147483648u, 1130024229u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{802, 2147483648u, 2992012112u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{803, 15126300u, 3116086293u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{804, 2147483648u, 1247679409u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{805, 2147483648u, 1206496619u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{806, 632617934u, 3033764041u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{807, 256321691u, 3371852521u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{808, 2147483648u, 3320833608u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{809, 2147483648u, 893808771u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{810, 504952999u, 1266922074u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{811, 2147483648u, 1180498658u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{812, 2677787743u, 3136744746u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{813, 2147483648u, 992654477u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{814, 2147483648u, 1244289498u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{815, 154625229u, 2984576643u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{816, 2147483649u, 3184572184u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{817, 2147483648u, 3328004548u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{818, 2147483648u, 1110034241u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{819, 2147483648u, 3342934766u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{820, 2147483648u, 965658941u, 1070141403u, 0, ACOS_TOLERANCE, 0}, +{821, 2147483648u, 3037575685u, 1070141403u, 0, ACOS_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ACOS_H multiple inclusion protection + +// EOF acosf.h diff --git a/packages/language/c/libm/current/tests/vectors/acoshf.c b/packages/language/c/libm/current/tests/vectors/acoshf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/acoshf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// acoshf.c +// +// Test of acoshf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/acoshf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(acoshf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &acoshf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &acoshf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("acoshf() is stable"); + } // if + else + { + CYG_TEST_FAIL("acoshf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library acoshf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "acoshf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF acoshf.c diff --git a/packages/language/c/libm/current/tests/vectors/acoshf.h b/packages/language/c/libm/current/tests/vectors/acoshf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/acoshf.h @@ -0,0 +1,360 @@ +#ifndef CYGONCE_LIBM_ACOSH_H +#define CYGONCE_LIBM_ACOSH_H +//=========================================================================== +// +// acoshf.h +// +// Test vectors for testing of acoshf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/acoshf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ACOSH_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t acoshf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{20, 3212836864u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{21, 3212669092u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{22, 3212501320u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{23, 3212333548u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{24, 3212165775u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{25, 3211998003u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{26, 3211830231u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{27, 3211662459u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{28, 3211494687u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{29, 3211326915u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{30, 3211159142u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{31, 3210991370u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{32, 3210823598u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{33, 3210655826u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{34, 3210488054u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{35, 3210320282u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{36, 3210152509u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{37, 3209984737u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{38, 3209816965u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{39, 3209649193u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{40, 3209481421u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{41, 3209313649u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{42, 3209145876u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{43, 3208978104u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{44, 3208810332u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{45, 3208642560u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{46, 3208474788u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{47, 3208307016u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{48, 3208139244u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{49, 3207971471u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{50, 3207803699u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{51, 3207635927u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{52, 3207468155u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{53, 3207300383u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{54, 3207132611u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{55, 3206964838u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{56, 3206797066u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{57, 3206629294u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{58, 3206461522u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{59, 3206293750u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{60, 3206125978u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{61, 3205958205u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{62, 3205790433u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{63, 3205622661u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{64, 3205454889u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{65, 3205287117u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{66, 3205119345u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{67, 3204951572u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{68, 3204783800u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{69, 3204616028u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{70, 3204448256u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{71, 3204112712u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{72, 3203777167u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{73, 3203441623u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{74, 3203106079u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{75, 3202770534u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{76, 3202434990u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{77, 3202099446u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{78, 3201763901u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{79, 3201428357u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{80, 3201092813u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{81, 3200757268u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{82, 3200421724u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{83, 3200086180u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{84, 3199750636u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{85, 3199415091u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{86, 3199079547u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{87, 3198744003u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{88, 3198408458u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{89, 3198072914u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{90, 3197737370u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{91, 3197401825u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{92, 3197066281u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{93, 3196730737u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{94, 3196395192u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{95, 3196059648u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{96, 3195388559u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{97, 3194717471u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{98, 3194046382u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{99, 3193375293u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{100, 3192704205u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{101, 3192033116u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{102, 3191362028u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{103, 3190690939u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{104, 3190019850u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{105, 3189348762u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{106, 3188677673u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{107, 3188006584u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{108, 3186999951u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{109, 3185657774u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{110, 3184315597u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{111, 3182973420u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{112, 3181631242u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{113, 3180289065u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{114, 3178611343u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{115, 3175926989u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{116, 3173242634u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{117, 3170222735u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{118, 3164854026u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{119, 3156465418u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{120, 1008981770u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{121, 1017370378u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{122, 1022739087u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{123, 1025758986u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{124, 1028443341u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{125, 1031127695u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{126, 1032805417u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{127, 1034147594u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{128, 1035489772u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{129, 1036831949u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{130, 1038174126u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{131, 1039516303u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{132, 1040522936u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{133, 1041194025u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{134, 1041865114u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{135, 1042536202u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{136, 1043207291u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{137, 1043878380u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{138, 1044549468u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{139, 1045220557u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{140, 1045891645u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{141, 1046562734u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{142, 1047233823u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{143, 1047904911u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{144, 1048576000u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{145, 1048911544u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{146, 1049247089u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{147, 1049582633u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{148, 1049918177u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{149, 1050253722u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{150, 1050589266u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{151, 1050924810u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{152, 1051260355u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{153, 1051595899u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{154, 1051931443u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{155, 1052266988u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{156, 1052602532u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{157, 1052938076u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{158, 1053273620u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{159, 1053609165u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{160, 1053944709u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{161, 1054280253u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{162, 1054615798u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{163, 1054951342u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{164, 1055286886u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{165, 1055622431u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{166, 1055957975u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{167, 1056293519u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{168, 1056629064u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{169, 1056964608u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{170, 1057132380u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{171, 1057300152u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{172, 1057467924u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{173, 1057635697u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{174, 1057803469u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{175, 1057971241u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{176, 1058139013u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{177, 1058306785u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{178, 1058474557u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{179, 1058642330u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{180, 1058810102u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{181, 1058977874u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{182, 1059145646u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{183, 1059313418u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{184, 1059481190u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{185, 1059648963u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{186, 1059816735u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{187, 1059984507u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{188, 1060152279u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{189, 1060320051u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{190, 1060487823u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{191, 1060655596u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{192, 1060823368u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{193, 1060991140u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{194, 1061158912u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{195, 1061326684u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{196, 1061494456u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{197, 1061662228u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{198, 1061830001u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{199, 1061997773u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{200, 1062165545u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{201, 1062333317u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{202, 1062501089u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{203, 1062668861u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{204, 1062836634u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{205, 1063004406u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{206, 1063172178u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{207, 1063339950u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{208, 1063507722u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{209, 1063675494u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{210, 1063843267u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{211, 1064011039u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{212, 1064178811u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{213, 1064346583u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{214, 1064514355u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{215, 1064682127u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{216, 1064849900u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{217, 1065017672u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{218, 1065185444u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{219, 1065437102u, 1041281514u, 1041281514u, 0, ACOSH_TOLERANCE, 0}, +{220, 1065520988u, 1045198281u, 1045198281u, 0, ACOSH_TOLERANCE, 0}, +{221, 1065604874u, 1048196204u, 1048196204u, 0, ACOSH_TOLERANCE, 0}, +{222, 1065688760u, 1049646660u, 1049646660u, 0, ACOSH_TOLERANCE, 0}, +{223, 1065772646u, 1050754509u, 1050754509u, 0, ACOSH_TOLERANCE, 0}, +{224, 1065856532u, 1051753636u, 1051753636u, 0, ACOSH_TOLERANCE, 0}, +{225, 1065940419u, 1052670210u, 1052670210u, 0, ACOSH_TOLERANCE, 0}, +{226, 1066024305u, 1053521262u, 1053521262u, 0, ACOSH_TOLERANCE, 0}, +{227, 1066108191u, 1054318670u, 1054318670u, 0, ACOSH_TOLERANCE, 0}, +{228, 1066192077u, 1055071074u, 1055071074u, 0, ACOSH_TOLERANCE, 0}, +{229, 1066275963u, 1055785005u, 1055785005u, 0, ACOSH_TOLERANCE, 0}, +{230, 1066359849u, 1056465542u, 1056465542u, 0, ACOSH_TOLERANCE, 0}, +{231, 1066443735u, 1057040669u, 1057040669u, 0, ACOSH_TOLERANCE, 0}, +{232, 1066527621u, 1057353227u, 1057353227u, 0, ACOSH_TOLERANCE, 0}, +{233, 1066611507u, 1057654105u, 1057654105u, 0, ACOSH_TOLERANCE, 0}, +{234, 1066695393u, 1057944433u, 1057944433u, 0, ACOSH_TOLERANCE, 0}, +{235, 1066779279u, 1058225171u, 1058225171u, 0, ACOSH_TOLERANCE, 0}, +{236, 1066863165u, 1058497140u, 1058497140u, 0, ACOSH_TOLERANCE, 0}, +{237, 1066947052u, 1058761049u, 1058761049u, 0, ACOSH_TOLERANCE, 0}, +{238, 3234402267u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{239, 3231108068u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{240, 3226013659u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{241, 3217625051u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{242, 1070141403u, 1065548063u, 1065548063u, 0, ACOSH_TOLERANCE, 0}, +{243, 1078530011u, 1072160792u, 1072160792u, 0, ACOSH_TOLERANCE, 0}, +{244, 1083624420u, 1074714438u, 1074714438u, 0, ACOSH_TOLERANCE, 0}, +{245, 3253731328u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{246, 3252840038u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{247, 3251948749u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{248, 3251057459u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{249, 3250166170u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{250, 3249274880u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{251, 3248383590u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{252, 3247492301u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{253, 3246601011u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{254, 3245028147u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{255, 3243245568u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{256, 3241462989u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{257, 3239680410u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{258, 3237792973u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{259, 3234227814u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{260, 3230662656u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{261, 3224580915u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{262, 3213675725u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{263, 1058642330u, 1115684864u, 2143289344u, EDOM, ACOSH_TOLERANCE, 0}, +{264, 1075000115u, 1069338181u, 1069338181u, 0, ACOSH_TOLERANCE, 0}, +{265, 1082130432u, 1074007898u, 1074007898u, 0, ACOSH_TOLERANCE, 0}, +{266, 1085695590u, 1075527877u, 1075527877u, 0, ACOSH_TOLERANCE, 0}, +{267, 1089260749u, 1076636021u, 1076636021u, 0, ACOSH_TOLERANCE, 0}, +{268, 1091672474u, 1077509940u, 1077509940u, 0, ACOSH_TOLERANCE, 0}, +{269, 1093455053u, 1078232007u, 1078232007u, 0, ACOSH_TOLERANCE, 0}, +{270, 1095237632u, 1078847433u, 1078847433u, 0, ACOSH_TOLERANCE, 0}, +{271, 1097020211u, 1079383779u, 1079383779u, 0, ACOSH_TOLERANCE, 0}, +{272, 1098802790u, 1079859115u, 1079859115u, 0, ACOSH_TOLERANCE, 0}, +{273, 1099746509u, 1080285937u, 1080285937u, 0, ACOSH_TOLERANCE, 0}, +{274, 1100637798u, 1080673248u, 1080673248u, 0, ACOSH_TOLERANCE, 0}, +{275, 1101529088u, 1081027759u, 1081027759u, 0, ACOSH_TOLERANCE, 0}, +{276, 1102420378u, 1081354598u, 1081354598u, 0, ACOSH_TOLERANCE, 0}, +{277, 1103311667u, 1081657776u, 1081657776u, 0, ACOSH_TOLERANCE, 0}, +{278, 1104202957u, 1081940495u, 1081940495u, 0, ACOSH_TOLERANCE, 0}, +{279, 1105094246u, 1082167886u, 1082167886u, 0, ACOSH_TOLERANCE, 0}, +{280, 1105985536u, 1082292437u, 1082292437u, 0, ACOSH_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ACOSH_H multiple inclusion protection + +// EOF acoshf.h diff --git a/packages/language/c/libm/current/tests/vectors/asinf.c b/packages/language/c/libm/current/tests/vectors/asinf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/asinf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// asin.c +// +// Test of asin() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/asinf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(asinf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &asinf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &asinf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("asinf() is stable"); + } // if + else + { + CYG_TEST_FAIL("asinf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library asinf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "asinf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF asin.c diff --git a/packages/language/c/libm/current/tests/vectors/asinf.h b/packages/language/c/libm/current/tests/vectors/asinf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/asinf.h @@ -0,0 +1,820 @@ +#ifndef CYGONCE_LIBM_ASIN_H +#define CYGONCE_LIBM_ASIN_H +//=========================================================================== +// +// asin.h +// +// Test vectors for testing of asin() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/asin.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ASIN_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t asinf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{20, 3212836864u, 3217625051u, 3217625051u, 0, ASIN_TOLERANCE, 0}, +{21, 3212669092u, 3216437732u, 3216437732u, 0, ASIN_TOLERANCE, 0}, +{22, 3212501320u, 3215944521u, 3215944521u, 0, ASIN_TOLERANCE, 0}, +{23, 3212333548u, 3215565099u, 3215565099u, 0, ASIN_TOLERANCE, 0}, +{24, 3212165775u, 3215244413u, 3215244413u, 0, ASIN_TOLERANCE, 0}, +{25, 3211998003u, 3214961161u, 3214961161u, 0, ASIN_TOLERANCE, 0}, +{26, 3211830231u, 3214704423u, 3214704423u, 0, ASIN_TOLERANCE, 0}, +{27, 3211662459u, 3214467718u, 3214467718u, 0, ASIN_TOLERANCE, 0}, +{28, 3211494687u, 3214246826u, 3214246826u, 0, ASIN_TOLERANCE, 0}, +{29, 3211326915u, 3214038819u, 3214038819u, 0, ASIN_TOLERANCE, 0}, +{30, 3211159142u, 3213841564u, 3213841564u, 0, ASIN_TOLERANCE, 0}, +{31, 3210991370u, 3213653454u, 3213653454u, 0, ASIN_TOLERANCE, 0}, +{32, 3210823598u, 3213473242u, 3213473242u, 0, ASIN_TOLERANCE, 0}, +{33, 3210655826u, 3213299935u, 3213299935u, 0, ASIN_TOLERANCE, 0}, +{34, 3210488054u, 3213132728u, 3213132728u, 0, ASIN_TOLERANCE, 0}, +{35, 3210320282u, 3212970959u, 3212970959u, 0, ASIN_TOLERANCE, 0}, +{36, 3210152509u, 3212791284u, 3212791284u, 0, ASIN_TOLERANCE, 0}, +{37, 3209984737u, 3212486350u, 3212486350u, 0, ASIN_TOLERANCE, 0}, +{38, 3209816965u, 3212189449u, 3212189449u, 0, ASIN_TOLERANCE, 0}, +{39, 3209649193u, 3211899893u, 3211899893u, 0, ASIN_TOLERANCE, 0}, +{40, 3209481421u, 3211617081u, 3211617081u, 0, ASIN_TOLERANCE, 0}, +{41, 3209313649u, 3211340489u, 3211340489u, 0, ASIN_TOLERANCE, 0}, +{42, 3209145876u, 3211069649u, 3211069649u, 0, ASIN_TOLERANCE, 0}, +{43, 3208978104u, 3210804156u, 3210804156u, 0, ASIN_TOLERANCE, 0}, +{44, 3208810332u, 3210543640u, 3210543640u, 0, ASIN_TOLERANCE, 0}, +{45, 3208642560u, 3210287770u, 3210287770u, 0, ASIN_TOLERANCE, 0}, +{46, 3208474788u, 3210036251u, 3210036251u, 0, ASIN_TOLERANCE, 0}, +{47, 3208307016u, 3209788813u, 3209788813u, 0, ASIN_TOLERANCE, 0}, +{48, 3208139244u, 3209545215u, 3209545215u, 0, ASIN_TOLERANCE, 0}, +{49, 3207971471u, 3209305230u, 3209305230u, 0, ASIN_TOLERANCE, 0}, +{50, 3207803699u, 3209068660u, 3209068660u, 0, ASIN_TOLERANCE, 0}, +{51, 3207635927u, 3208835315u, 3208835315u, 0, ASIN_TOLERANCE, 0}, +{52, 3207468155u, 3208605024u, 3208605024u, 0, ASIN_TOLERANCE, 0}, +{53, 3207300383u, 3208377629u, 3208377629u, 0, ASIN_TOLERANCE, 0}, +{54, 3207132611u, 3208152982u, 3208152982u, 0, ASIN_TOLERANCE, 0}, +{55, 3206964838u, 3207930946u, 3207930946u, 0, ASIN_TOLERANCE, 0}, +{56, 3206797066u, 3207711396u, 3207711396u, 0, ASIN_TOLERANCE, 0}, +{57, 3206629294u, 3207494214u, 3207494214u, 0, ASIN_TOLERANCE, 0}, +{58, 3206461522u, 3207279289u, 3207279289u, 0, ASIN_TOLERANCE, 0}, +{59, 3206293750u, 3207066519u, 3207066519u, 0, ASIN_TOLERANCE, 0}, +{60, 3206125978u, 3206855806u, 3206855806u, 0, ASIN_TOLERANCE, 0}, +{61, 3205958205u, 3206647058u, 3206647058u, 0, ASIN_TOLERANCE, 0}, +{62, 3205790433u, 3206440193u, 3206440193u, 0, ASIN_TOLERANCE, 0}, +{63, 3205622661u, 3206235129u, 3206235129u, 0, ASIN_TOLERANCE, 0}, +{64, 3205454889u, 3206031787u, 3206031787u, 0, ASIN_TOLERANCE, 0}, +{65, 3205287117u, 3205830100u, 3205830100u, 0, ASIN_TOLERANCE, 0}, +{66, 3205119345u, 3205629996u, 3205629996u, 0, ASIN_TOLERANCE, 0}, +{67, 3204951572u, 3205431410u, 3205431410u, 0, ASIN_TOLERANCE, 0}, +{68, 3204783800u, 3205234284u, 3205234284u, 0, ASIN_TOLERANCE, 0}, +{69, 3204616028u, 3205038560u, 3205038560u, 0, ASIN_TOLERANCE, 0}, +{70, 3204448256u, 3204844178u, 3204844178u, 0, ASIN_TOLERANCE, 0}, +{71, 3204112712u, 3204651089u, 3204651089u, 0, ASIN_TOLERANCE, 0}, +{72, 3203777167u, 3204459240u, 3204459240u, 0, ASIN_TOLERANCE, 0}, +{73, 3203441623u, 3204088914u, 3204088914u, 0, ASIN_TOLERANCE, 0}, +{74, 3203106079u, 3203709898u, 3203709898u, 0, ASIN_TOLERANCE, 0}, +{75, 3202770534u, 3203333085u, 3203333085u, 0, ASIN_TOLERANCE, 0}, +{76, 3202434990u, 3202958395u, 3202958395u, 0, ASIN_TOLERANCE, 0}, +{77, 3202099446u, 3202585743u, 3202585743u, 0, ASIN_TOLERANCE, 0}, +{78, 3201763901u, 3202215051u, 3202215051u, 0, ASIN_TOLERANCE, 0}, +{79, 3201428357u, 3201846246u, 3201846246u, 0, ASIN_TOLERANCE, 0}, +{80, 3201092813u, 3201479254u, 3201479254u, 0, ASIN_TOLERANCE, 0}, +{81, 3200757268u, 3201114005u, 3201114005u, 0, ASIN_TOLERANCE, 0}, +{82, 3200421724u, 3200750433u, 3200750433u, 0, ASIN_TOLERANCE, 0}, +{83, 3200086180u, 3200388473u, 3200388473u, 0, ASIN_TOLERANCE, 0}, +{84, 3199750636u, 3200028060u, 3200028060u, 0, ASIN_TOLERANCE, 0}, +{85, 3199415091u, 3199669135u, 3199669135u, 0, ASIN_TOLERANCE, 0}, +{86, 3199079547u, 3199311640u, 3199311640u, 0, ASIN_TOLERANCE, 0}, +{87, 3198744003u, 3198955516u, 3198955516u, 0, ASIN_TOLERANCE, 0}, +{88, 3198408458u, 3198600708u, 3198600708u, 0, ASIN_TOLERANCE, 0}, +{89, 3198072914u, 3198247163u, 3198247163u, 0, ASIN_TOLERANCE, 0}, +{90, 3197737370u, 3197894829u, 3197894829u, 0, ASIN_TOLERANCE, 0}, +{91, 3197401825u, 3197543654u, 3197543654u, 0, ASIN_TOLERANCE, 0}, +{92, 3197066281u, 3197193590u, 3197193590u, 0, ASIN_TOLERANCE, 0}, +{93, 3196730737u, 3196844588u, 3196844588u, 0, ASIN_TOLERANCE, 0}, +{94, 3196395192u, 3196496600u, 3196496600u, 0, ASIN_TOLERANCE, 0}, +{95, 3196059648u, 3196149582u, 3196149582u, 0, ASIN_TOLERANCE, 0}, +{96, 3195388559u, 3195547329u, 3195547329u, 0, ASIN_TOLERANCE, 0}, +{97, 3194717471u, 3194856902u, 3194856902u, 0, ASIN_TOLERANCE, 0}, +{98, 3194046382u, 3194168149u, 3194168149u, 0, ASIN_TOLERANCE, 0}, +{99, 3193375293u, 3193480987u, 3193480987u, 0, ASIN_TOLERANCE, 0}, +{100, 3192704205u, 3192795334u, 3192795334u, 0, ASIN_TOLERANCE, 0}, +{101, 3192033116u, 3192111106u, 3192111106u, 0, ASIN_TOLERANCE, 0}, +{102, 3191362028u, 3191428228u, 3191428228u, 0, ASIN_TOLERANCE, 0}, +{103, 3190690939u, 3190746617u, 3190746617u, 0, ASIN_TOLERANCE, 0}, +{104, 3190019850u, 3190066199u, 3190066199u, 0, ASIN_TOLERANCE, 0}, +{105, 3189348762u, 3189386898u, 3189386898u, 0, ASIN_TOLERANCE, 0}, +{106, 3188677673u, 3188708638u, 3188708638u, 0, ASIN_TOLERANCE, 0}, +{107, 3188006584u, 3188031346u, 3188031346u, 0, ASIN_TOLERANCE, 0}, +{108, 3186999951u, 3187038858u, 3187038858u, 0, ASIN_TOLERANCE, 0}, +{109, 3185657774u, 3185687711u, 3185687711u, 0, ASIN_TOLERANCE, 0}, +{110, 3184315597u, 3184338068u, 3184338068u, 0, ASIN_TOLERANCE, 0}, +{111, 3182973420u, 3182989787u, 3182989787u, 0, ASIN_TOLERANCE, 0}, +{112, 3181631242u, 3181642728u, 3181642728u, 0, ASIN_TOLERANCE, 0}, +{113, 3180289065u, 3180296755u, 3180296755u, 0, ASIN_TOLERANCE, 0}, +{114, 3178611343u, 3178621022u, 3178621022u, 0, ASIN_TOLERANCE, 0}, +{115, 3175926989u, 3175932588u, 3175932588u, 0, ASIN_TOLERANCE, 0}, +{116, 3173242634u, 3173245499u, 3173245499u, 0, ASIN_TOLERANCE, 0}, +{117, 3170222735u, 3170225152u, 3170225152u, 0, ASIN_TOLERANCE, 0}, +{118, 3164854026u, 3164854742u, 3164854742u, 0, ASIN_TOLERANCE, 0}, +{119, 3156465418u, 3156465597u, 3156465597u, 0, ASIN_TOLERANCE, 0}, +{120, 1008981770u, 1008981949u, 1008981949u, 0, ASIN_TOLERANCE, 0}, +{121, 1017370378u, 1017371094u, 1017371094u, 0, ASIN_TOLERANCE, 0}, +{122, 1022739087u, 1022741504u, 1022741504u, 0, ASIN_TOLERANCE, 0}, +{123, 1025758986u, 1025761851u, 1025761851u, 0, ASIN_TOLERANCE, 0}, +{124, 1028443341u, 1028448940u, 1028448940u, 0, ASIN_TOLERANCE, 0}, +{125, 1031127695u, 1031137374u, 1031137374u, 0, ASIN_TOLERANCE, 0}, +{126, 1032805417u, 1032813107u, 1032813107u, 0, ASIN_TOLERANCE, 0}, +{127, 1034147594u, 1034159080u, 1034159080u, 0, ASIN_TOLERANCE, 0}, +{128, 1035489772u, 1035506139u, 1035506139u, 0, ASIN_TOLERANCE, 0}, +{129, 1036831949u, 1036854420u, 1036854420u, 0, ASIN_TOLERANCE, 0}, +{130, 1038174126u, 1038204063u, 1038204063u, 0, ASIN_TOLERANCE, 0}, +{131, 1039516303u, 1039555210u, 1039555210u, 0, ASIN_TOLERANCE, 0}, +{132, 1040522936u, 1040547698u, 1040547698u, 0, ASIN_TOLERANCE, 0}, +{133, 1041194025u, 1041224990u, 1041224990u, 0, ASIN_TOLERANCE, 0}, +{134, 1041865114u, 1041903250u, 1041903250u, 0, ASIN_TOLERANCE, 0}, +{135, 1042536202u, 1042582551u, 1042582551u, 0, ASIN_TOLERANCE, 0}, +{136, 1043207291u, 1043262969u, 1043262969u, 0, ASIN_TOLERANCE, 0}, +{137, 1043878380u, 1043944580u, 1043944580u, 0, ASIN_TOLERANCE, 0}, +{138, 1044549468u, 1044627458u, 1044627458u, 0, ASIN_TOLERANCE, 0}, +{139, 1045220557u, 1045311686u, 1045311686u, 0, ASIN_TOLERANCE, 0}, +{140, 1045891645u, 1045997339u, 1045997339u, 0, ASIN_TOLERANCE, 0}, +{141, 1046562734u, 1046684501u, 1046684501u, 0, ASIN_TOLERANCE, 0}, +{142, 1047233823u, 1047373254u, 1047373254u, 0, ASIN_TOLERANCE, 0}, +{143, 1047904911u, 1048063681u, 1048063681u, 0, ASIN_TOLERANCE, 0}, +{144, 1048576000u, 1048665934u, 1048665934u, 0, ASIN_TOLERANCE, 0}, +{145, 1048911544u, 1049012952u, 1049012952u, 0, ASIN_TOLERANCE, 0}, +{146, 1049247089u, 1049360940u, 1049360940u, 0, ASIN_TOLERANCE, 0}, +{147, 1049582633u, 1049709942u, 1049709942u, 0, ASIN_TOLERANCE, 0}, +{148, 1049918177u, 1050060006u, 1050060006u, 0, ASIN_TOLERANCE, 0}, +{149, 1050253722u, 1050411181u, 1050411181u, 0, ASIN_TOLERANCE, 0}, +{150, 1050589266u, 1050763515u, 1050763515u, 0, ASIN_TOLERANCE, 0}, +{151, 1050924810u, 1051117060u, 1051117060u, 0, ASIN_TOLERANCE, 0}, +{152, 1051260355u, 1051471868u, 1051471868u, 0, ASIN_TOLERANCE, 0}, +{153, 1051595899u, 1051827992u, 1051827992u, 0, ASIN_TOLERANCE, 0}, +{154, 1051931443u, 1052185487u, 1052185487u, 0, ASIN_TOLERANCE, 0}, +{155, 1052266988u, 1052544412u, 1052544412u, 0, ASIN_TOLERANCE, 0}, +{156, 1052602532u, 1052904825u, 1052904825u, 0, ASIN_TOLERANCE, 0}, +{157, 1052938076u, 1053266785u, 1053266785u, 0, ASIN_TOLERANCE, 0}, +{158, 1053273620u, 1053630357u, 1053630357u, 0, ASIN_TOLERANCE, 0}, +{159, 1053609165u, 1053995606u, 1053995606u, 0, ASIN_TOLERANCE, 0}, +{160, 1053944709u, 1054362598u, 1054362598u, 0, ASIN_TOLERANCE, 0}, +{161, 1054280253u, 1054731403u, 1054731403u, 0, ASIN_TOLERANCE, 0}, +{162, 1054615798u, 1055102095u, 1055102095u, 0, ASIN_TOLERANCE, 0}, +{163, 1054951342u, 1055474747u, 1055474747u, 0, ASIN_TOLERANCE, 0}, +{164, 1055286886u, 1055849437u, 1055849437u, 0, ASIN_TOLERANCE, 0}, +{165, 1055622431u, 1056226250u, 1056226250u, 0, ASIN_TOLERANCE, 0}, +{166, 1055957975u, 1056605266u, 1056605266u, 0, ASIN_TOLERANCE, 0}, +{167, 1056293519u, 1056975592u, 1056975592u, 0, ASIN_TOLERANCE, 0}, +{168, 1056629064u, 1057167441u, 1057167441u, 0, ASIN_TOLERANCE, 0}, +{169, 1056964608u, 1057360530u, 1057360530u, 0, ASIN_TOLERANCE, 0}, +{170, 1057132380u, 1057554912u, 1057554912u, 0, ASIN_TOLERANCE, 0}, +{171, 1057300152u, 1057750636u, 1057750636u, 0, ASIN_TOLERANCE, 0}, +{172, 1057467924u, 1057947762u, 1057947762u, 0, ASIN_TOLERANCE, 0}, +{173, 1057635697u, 1058146348u, 1058146348u, 0, ASIN_TOLERANCE, 0}, +{174, 1057803469u, 1058346452u, 1058346452u, 0, ASIN_TOLERANCE, 0}, +{175, 1057971241u, 1058548139u, 1058548139u, 0, ASIN_TOLERANCE, 0}, +{176, 1058139013u, 1058751481u, 1058751481u, 0, ASIN_TOLERANCE, 0}, +{177, 1058306785u, 1058956545u, 1058956545u, 0, ASIN_TOLERANCE, 0}, +{178, 1058474557u, 1059163410u, 1059163410u, 0, ASIN_TOLERANCE, 0}, +{179, 1058642330u, 1059372158u, 1059372158u, 0, ASIN_TOLERANCE, 0}, +{180, 1058810102u, 1059582871u, 1059582871u, 0, ASIN_TOLERANCE, 0}, +{181, 1058977874u, 1059795641u, 1059795641u, 0, ASIN_TOLERANCE, 0}, +{182, 1059145646u, 1060010566u, 1060010566u, 0, ASIN_TOLERANCE, 0}, +{183, 1059313418u, 1060227748u, 1060227748u, 0, ASIN_TOLERANCE, 0}, +{184, 1059481190u, 1060447298u, 1060447298u, 0, ASIN_TOLERANCE, 0}, +{185, 1059648963u, 1060669334u, 1060669334u, 0, ASIN_TOLERANCE, 0}, +{186, 1059816735u, 1060893981u, 1060893981u, 0, ASIN_TOLERANCE, 0}, +{187, 1059984507u, 1061121376u, 1061121376u, 0, ASIN_TOLERANCE, 0}, +{188, 1060152279u, 1061351667u, 1061351667u, 0, ASIN_TOLERANCE, 0}, +{189, 1060320051u, 1061585012u, 1061585012u, 0, ASIN_TOLERANCE, 0}, +{190, 1060487823u, 1061821582u, 1061821582u, 0, ASIN_TOLERANCE, 0}, +{191, 1060655596u, 1062061567u, 1062061567u, 0, ASIN_TOLERANCE, 0}, +{192, 1060823368u, 1062305165u, 1062305165u, 0, ASIN_TOLERANCE, 0}, +{193, 1060991140u, 1062552603u, 1062552603u, 0, ASIN_TOLERANCE, 0}, +{194, 1061158912u, 1062804122u, 1062804122u, 0, ASIN_TOLERANCE, 0}, +{195, 1061326684u, 1063059992u, 1063059992u, 0, ASIN_TOLERANCE, 0}, +{196, 1061494456u, 1063320508u, 1063320508u, 0, ASIN_TOLERANCE, 0}, +{197, 1061662228u, 1063586001u, 1063586001u, 0, ASIN_TOLERANCE, 0}, +{198, 1061830001u, 1063856841u, 1063856841u, 0, ASIN_TOLERANCE, 0}, +{199, 1061997773u, 1064133433u, 1064133433u, 0, ASIN_TOLERANCE, 0}, +{200, 1062165545u, 1064416245u, 1064416245u, 0, ASIN_TOLERANCE, 0}, +{201, 1062333317u, 1064705801u, 1064705801u, 0, ASIN_TOLERANCE, 0}, +{202, 1062501089u, 1065002702u, 1065002702u, 0, ASIN_TOLERANCE, 0}, +{203, 1062668861u, 1065307636u, 1065307636u, 0, ASIN_TOLERANCE, 0}, +{204, 1062836634u, 1065487311u, 1065487311u, 0, ASIN_TOLERANCE, 0}, +{205, 1063004406u, 1065649080u, 1065649080u, 0, ASIN_TOLERANCE, 0}, +{206, 1063172178u, 1065816287u, 1065816287u, 0, ASIN_TOLERANCE, 0}, +{207, 1063339950u, 1065989594u, 1065989594u, 0, ASIN_TOLERANCE, 0}, +{208, 1063507722u, 1066169806u, 1066169806u, 0, ASIN_TOLERANCE, 0}, +{209, 1063675494u, 1066357916u, 1066357916u, 0, ASIN_TOLERANCE, 0}, +{210, 1063843267u, 1066555171u, 1066555171u, 0, ASIN_TOLERANCE, 0}, +{211, 1064011039u, 1066763178u, 1066763178u, 0, ASIN_TOLERANCE, 0}, +{212, 1064178811u, 1066984070u, 1066984070u, 0, ASIN_TOLERANCE, 0}, +{213, 1064346583u, 1067220775u, 1067220775u, 0, ASIN_TOLERANCE, 0}, +{214, 1064514355u, 1067477513u, 1067477513u, 0, ASIN_TOLERANCE, 0}, +{215, 1064682127u, 1067760765u, 1067760765u, 0, ASIN_TOLERANCE, 0}, +{216, 1064849900u, 1068081451u, 1068081451u, 0, ASIN_TOLERANCE, 0}, +{217, 1065017672u, 1068460873u, 1068460873u, 0, ASIN_TOLERANCE, 0}, +{218, 1065185444u, 1068954084u, 1068954084u, 0, ASIN_TOLERANCE, 0}, +{219, 1065353216u, 1070141403u, 1070141403u, 0, ASIN_TOLERANCE, 0}, +{220, 1065437102u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{221, 1065520988u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{222, 1065604874u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{223, 1065688760u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{224, 1065772646u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{225, 1065856532u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{226, 1065940419u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{227, 1066024305u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{228, 1066108191u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{229, 1066192077u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{230, 1066275963u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{231, 1066359849u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{232, 1066443735u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{233, 1066527621u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{234, 1066611507u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{235, 1066695393u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{236, 1066779279u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{237, 1066863165u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{238, 1066947052u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{239, 3234402267u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{240, 3231108068u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{241, 3226013659u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{242, 3217625051u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{243, 0u, 0u, 0u, 0, ASIN_TOLERANCE, 0}, +{244, 1070141403u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{245, 1078530011u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{246, 1083624420u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{247, 3253731328u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{248, 3252840038u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{249, 3251948749u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{250, 3251057459u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{251, 3250166170u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{252, 3249274880u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{253, 3248383590u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{254, 3247492301u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{255, 3246601011u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{256, 3245028147u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{257, 3243245568u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{258, 3241462989u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{259, 3239680410u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{260, 3237792973u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{261, 3234227814u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{262, 3230662656u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{263, 3224580915u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{264, 3213675725u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{265, 1058642330u, 1059372158u, 1059372158u, 0, ASIN_TOLERANCE, 0}, +{266, 1075000115u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{267, 1082130432u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{268, 1085695590u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{269, 1089260749u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{270, 1091672474u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{271, 1093455053u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{272, 1095237632u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{273, 1097020211u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{274, 1098802790u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{275, 1099746509u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{276, 1100637798u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{277, 1101529088u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{278, 1102420378u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{279, 1103311667u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{280, 1104202957u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{281, 1105094246u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{282, 1105985536u, 1115684864u, 2143289344u, EDOM, ASIN_TOLERANCE, 0}, +{283, 0u, 3169600404u, 0u, 0, ASIN_TOLERANCE, 0}, +{284, 0u, 1339715816u, 0u, 0, ASIN_TOLERANCE, 0}, +{285, 0u, 1137623440u, 0u, 0, ASIN_TOLERANCE, 0}, +{286, 0u, 1318077703u, 0u, 0, ASIN_TOLERANCE, 0}, +{287, 0u, 3138716210u, 0u, 0, ASIN_TOLERANCE, 0}, +{288, 0u, 956731690u, 0u, 0, ASIN_TOLERANCE, 0}, +{289, 0u, 3090780435u, 0u, 0, ASIN_TOLERANCE, 0}, +{290, 0u, 1184078964u, 0u, 0, ASIN_TOLERANCE, 0}, +{291, 0u, 805930990u, 0u, 0, ASIN_TOLERANCE, 0}, +{292, 0u, 2961815950u, 0u, 0, ASIN_TOLERANCE, 0}, +{293, 0u, 3293150194u, 0u, 0, ASIN_TOLERANCE, 0}, +{294, 0u, 3446630737u, 0u, 0, ASIN_TOLERANCE, 0}, +{295, 3207495939u, 1009178246u, 3208642957u, 0, ASIN_TOLERANCE, 0}, +{296, 0u, 1011741316u, 0u, 0, ASIN_TOLERANCE, 0}, +{297, 0u, 924152434u, 0u, 0, ASIN_TOLERANCE, 0}, +{298, 0u, 1046519338u, 0u, 0, ASIN_TOLERANCE, 0}, +{299, 0u, 843024648u, 0u, 0, ASIN_TOLERANCE, 0}, +{300, 0u, 1207613046u, 0u, 0, ASIN_TOLERANCE, 0}, +{301, 0u, 3373702511u, 0u, 0, ASIN_TOLERANCE, 0}, +{302, 0u, 1287042017u, 0u, 0, ASIN_TOLERANCE, 0}, +{303, 0u, 3174764041u, 0u, 0, ASIN_TOLERANCE, 0}, +{304, 0u, 3366639803u, 0u, 0, ASIN_TOLERANCE, 0}, +{305, 0u, 927668332u, 0u, 0, ASIN_TOLERANCE, 0}, +{306, 0u, 1231561331u, 0u, 0, ASIN_TOLERANCE, 0}, +{307, 0u, 846986655u, 0u, 0, ASIN_TOLERANCE, 0}, +{308, 0u, 1325838529u, 0u, 0, ASIN_TOLERANCE, 0}, +{309, 0u, 2994813381u, 0u, 0, ASIN_TOLERANCE, 0}, +{310, 0u, 1319183848u, 0u, 0, ASIN_TOLERANCE, 0}, +{311, 0u, 3059184837u, 0u, 0, ASIN_TOLERANCE, 0}, +{312, 0u, 3234638157u, 0u, 0, ASIN_TOLERANCE, 0}, +{313, 0u, 3468333016u, 0u, 0, ASIN_TOLERANCE, 0}, +{314, 0u, 973297633u, 0u, 0, ASIN_TOLERANCE, 0}, +{315, 0u, 3060497453u, 0u, 0, ASIN_TOLERANCE, 0}, +{316, 0u, 3053313644u, 0u, 0, ASIN_TOLERANCE, 0}, +{317, 0u, 905204998u, 0u, 0, ASIN_TOLERANCE, 0}, +{318, 0u, 1031869860u, 0u, 0, ASIN_TOLERANCE, 0}, +{319, 0u, 3090663336u, 0u, 0, ASIN_TOLERANCE, 0}, +{320, 0u, 3325365308u, 0u, 0, ASIN_TOLERANCE, 0}, +{321, 0u, 1222145080u, 0u, 0, ASIN_TOLERANCE, 0}, +{322, 0u, 3182301130u, 0u, 0, ASIN_TOLERANCE, 0}, +{323, 0u, 3141898978u, 0u, 0, ASIN_TOLERANCE, 0}, +{324, 0u, 3250208698u, 0u, 0, ASIN_TOLERANCE, 0}, +{325, 0u, 850607273u, 0u, 0, ASIN_TOLERANCE, 0}, +{326, 0u, 986147596u, 0u, 0, ASIN_TOLERANCE, 0}, +{327, 0u, 817336158u, 0u, 0, ASIN_TOLERANCE, 0}, +{328, 0u, 1228929743u, 0u, 0, ASIN_TOLERANCE, 0}, +{329, 0u, 1285620759u, 0u, 0, ASIN_TOLERANCE, 0}, +{330, 0u, 3150558310u, 0u, 0, ASIN_TOLERANCE, 0}, +{331, 0u, 1026729590u, 0u, 0, ASIN_TOLERANCE, 0}, +{332, 0u, 1322457908u, 0u, 0, ASIN_TOLERANCE, 0}, +{333, 0u, 3293402534u, 0u, 0, ASIN_TOLERANCE, 0}, +{334, 0u, 3376286224u, 0u, 0, ASIN_TOLERANCE, 0}, +{335, 0u, 1262396132u, 0u, 0, ASIN_TOLERANCE, 0}, +{336, 0u, 3357890790u, 0u, 0, ASIN_TOLERANCE, 0}, +{337, 0u, 1227031652u, 0u, 0, ASIN_TOLERANCE, 0}, +{338, 0u, 3486821126u, 0u, 0, ASIN_TOLERANCE, 0}, +{339, 0u, 3361769033u, 0u, 0, ASIN_TOLERANCE, 0}, +{340, 0u, 3099071752u, 0u, 0, ASIN_TOLERANCE, 0}, +{341, 3064942859u, 3410406460u, 3064942859u, 0, ASIN_TOLERANCE, 0}, +{342, 0u, 1218561473u, 0u, 0, ASIN_TOLERANCE, 0}, +{343, 0u, 936690127u, 0u, 0, ASIN_TOLERANCE, 0}, +{344, 0u, 1127391340u, 0u, 0, ASIN_TOLERANCE, 0}, +{345, 0u, 3036142101u, 0u, 0, ASIN_TOLERANCE, 0}, +{346, 0u, 3471390739u, 0u, 0, ASIN_TOLERANCE, 0}, +{347, 0u, 3241193975u, 0u, 0, ASIN_TOLERANCE, 0}, +{348, 0u, 820404624u, 0u, 0, ASIN_TOLERANCE, 0}, +{349, 0u, 905618576u, 0u, 0, ASIN_TOLERANCE, 0}, +{350, 0u, 1263769881u, 0u, 0, ASIN_TOLERANCE, 0}, +{351, 0u, 3422581846u, 0u, 0, ASIN_TOLERANCE, 0}, +{352, 0u, 3020874439u, 0u, 0, ASIN_TOLERANCE, 0}, +{353, 1044854841u, 3441293384u, 1044938638u, 0, ASIN_TOLERANCE, 0}, +{354, 0u, 1327700779u, 0u, 0, ASIN_TOLERANCE, 0}, +{355, 0u, 1053048637u, 0u, 0, ASIN_TOLERANCE, 0}, +{356, 0u, 3390124302u, 0u, 0, ASIN_TOLERANCE, 0}, +{357, 0u, 1326155577u, 0u, 0, ASIN_TOLERANCE, 0}, +{358, 0u, 3009485985u, 0u, 0, ASIN_TOLERANCE, 0}, +{359, 0u, 976507183u, 0u, 0, ASIN_TOLERANCE, 0}, +{360, 0u, 3465702297u, 0u, 0, ASIN_TOLERANCE, 0}, +{361, 0u, 3162613159u, 0u, 0, ASIN_TOLERANCE, 0}, +{362, 0u, 3424831780u, 0u, 0, ASIN_TOLERANCE, 0}, +{363, 0u, 1315193884u, 0u, 0, ASIN_TOLERANCE, 0}, +{364, 0u, 3393434856u, 0u, 0, ASIN_TOLERANCE, 0}, +{365, 0u, 3075595653u, 0u, 0, ASIN_TOLERANCE, 0}, +{366, 0u, 1073959932u, 0u, 0, ASIN_TOLERANCE, 0}, +{367, 0u, 984063398u, 0u, 0, ASIN_TOLERANCE, 0}, +{368, 0u, 3051776777u, 0u, 0, ASIN_TOLERANCE, 0}, +{369, 0u, 3333928591u, 0u, 0, ASIN_TOLERANCE, 0}, +{370, 0u, 3277810397u, 0u, 0, ASIN_TOLERANCE, 0}, +{371, 0u, 3375812155u, 0u, 0, ASIN_TOLERANCE, 0}, +{372, 0u, 879559037u, 0u, 0, ASIN_TOLERANCE, 0}, +{373, 0u, 3359727790u, 0u, 0, ASIN_TOLERANCE, 0}, +{374, 0u, 1094033983u, 0u, 0, ASIN_TOLERANCE, 0}, +{375, 0u, 965490084u, 0u, 0, ASIN_TOLERANCE, 0}, +{376, 0u, 1063615282u, 0u, 0, ASIN_TOLERANCE, 0}, +{377, 0u, 916132262u, 0u, 0, ASIN_TOLERANCE, 0}, +{378, 0u, 3214499901u, 0u, 0, ASIN_TOLERANCE, 0}, +{379, 0u, 1149498437u, 0u, 0, ASIN_TOLERANCE, 0}, +{380, 0u, 957867294u, 0u, 0, ASIN_TOLERANCE, 0}, +{381, 0u, 1292682598u, 0u, 0, ASIN_TOLERANCE, 0}, +{382, 0u, 3181128080u, 0u, 0, ASIN_TOLERANCE, 0}, +{383, 1034143548u, 3146558751u, 1034155022u, 0, ASIN_TOLERANCE, 0}, +{384, 0u, 3118386084u, 0u, 0, ASIN_TOLERANCE, 0}, +{385, 0u, 3281577923u, 0u, 0, ASIN_TOLERANCE, 0}, +{386, 0u, 3108459270u, 0u, 0, ASIN_TOLERANCE, 0}, +{387, 0u, 877939434u, 0u, 0, ASIN_TOLERANCE, 0}, +{388, 0u, 1092863108u, 0u, 0, ASIN_TOLERANCE, 0}, +{389, 0u, 2984618214u, 0u, 0, ASIN_TOLERANCE, 0}, +{390, 0u, 3230867340u, 0u, 0, ASIN_TOLERANCE, 0}, +{391, 0u, 1299947984u, 0u, 0, ASIN_TOLERANCE, 0}, +{392, 0u, 1014533799u, 0u, 0, ASIN_TOLERANCE, 0}, +{393, 0u, 3294931045u, 0u, 0, ASIN_TOLERANCE, 0}, +{394, 0u, 1234530539u, 0u, 0, ASIN_TOLERANCE, 0}, +{395, 0u, 1167174417u, 0u, 0, ASIN_TOLERANCE, 0}, +{396, 0u, 1033515667u, 0u, 0, ASIN_TOLERANCE, 0}, +{397, 0u, 3461029208u, 0u, 0, ASIN_TOLERANCE, 0}, +{398, 0u, 2963999387u, 0u, 0, ASIN_TOLERANCE, 0}, +{399, 0u, 1289841195u, 0u, 0, ASIN_TOLERANCE, 0}, +{400, 0u, 991614550u, 0u, 0, ASIN_TOLERANCE, 0}, +{401, 0u, 3005733479u, 0u, 0, ASIN_TOLERANCE, 0}, +{402, 0u, 3028772689u, 0u, 0, ASIN_TOLERANCE, 0}, +{403, 0u, 3461908440u, 0u, 0, ASIN_TOLERANCE, 0}, +{404, 0u, 3395559071u, 0u, 0, ASIN_TOLERANCE, 0}, +{405, 0u, 3386631630u, 0u, 0, ASIN_TOLERANCE, 0}, +{406, 0u, 1302044669u, 0u, 0, ASIN_TOLERANCE, 0}, +{407, 0u, 3136041385u, 0u, 0, ASIN_TOLERANCE, 0}, +{408, 0u, 819212976u, 0u, 0, ASIN_TOLERANCE, 0}, +{409, 0u, 1308276557u, 0u, 0, ASIN_TOLERANCE, 0}, +{410, 0u, 890279471u, 0u, 0, ASIN_TOLERANCE, 0}, +{411, 0u, 3391162308u, 0u, 0, ASIN_TOLERANCE, 0}, +{412, 0u, 3366933172u, 0u, 0, ASIN_TOLERANCE, 0}, +{413, 0u, 2972468923u, 0u, 0, ASIN_TOLERANCE, 0}, +{414, 0u, 1096223283u, 0u, 0, ASIN_TOLERANCE, 0}, +{415, 0u, 2985540645u, 0u, 0, ASIN_TOLERANCE, 0}, +{416, 0u, 3045939684u, 0u, 0, ASIN_TOLERANCE, 0}, +{417, 0u, 3289105549u, 0u, 0, ASIN_TOLERANCE, 0}, +{418, 0u, 3118459546u, 0u, 0, ASIN_TOLERANCE, 0}, +{419, 0u, 805655869u, 0u, 0, ASIN_TOLERANCE, 0}, +{420, 0u, 1298783885u, 0u, 0, ASIN_TOLERANCE, 0}, +{421, 0u, 3314827933u, 0u, 0, ASIN_TOLERANCE, 0}, +{422, 0u, 1010844213u, 0u, 0, ASIN_TOLERANCE, 0}, +{423, 0u, 3185364965u, 0u, 0, ASIN_TOLERANCE, 0}, +{424, 0u, 1196910312u, 0u, 0, ASIN_TOLERANCE, 0}, +{425, 0u, 3036177925u, 0u, 0, ASIN_TOLERANCE, 0}, +{426, 0u, 1260339199u, 0u, 0, ASIN_TOLERANCE, 0}, +{427, 0u, 3421558958u, 0u, 0, ASIN_TOLERANCE, 0}, +{428, 1009721212u, 1046112320u, 1009721431u, 0, ASIN_TOLERANCE, 0}, +{429, 0u, 3361661885u, 0u, 0, ASIN_TOLERANCE, 0}, +{430, 0u, 927278934u, 0u, 0, ASIN_TOLERANCE, 0}, +{431, 0u, 3168337905u, 0u, 0, ASIN_TOLERANCE, 0}, +{432, 3209292679u, 3097629295u, 3211306330u, 0, ASIN_TOLERANCE, 0}, +{433, 0u, 900870557u, 0u, 0, ASIN_TOLERANCE, 0}, +{434, 0u, 1018873558u, 0u, 0, ASIN_TOLERANCE, 0}, +{435, 0u, 1336758936u, 0u, 0, ASIN_TOLERANCE, 0}, +{436, 0u, 3333739154u, 0u, 0, ASIN_TOLERANCE, 0}, +{437, 0u, 1320787767u, 0u, 0, ASIN_TOLERANCE, 0}, +{438, 0u, 3388356571u, 0u, 0, ASIN_TOLERANCE, 0}, +{439, 0u, 1178658982u, 0u, 0, ASIN_TOLERANCE, 0}, +{440, 0u, 1052318349u, 0u, 0, ASIN_TOLERANCE, 0}, +{441, 0u, 1305787839u, 0u, 0, ASIN_TOLERANCE, 0}, +{442, 0u, 3343304699u, 0u, 0, ASIN_TOLERANCE, 0}, +{443, 0u, 3210802820u, 0u, 0, ASIN_TOLERANCE, 0}, +{444, 0u, 2981916252u, 0u, 0, ASIN_TOLERANCE, 0}, +{445, 0u, 3331408262u, 0u, 0, ASIN_TOLERANCE, 0}, +{446, 0u, 3398215908u, 0u, 0, ASIN_TOLERANCE, 0}, +{447, 0u, 1200012284u, 0u, 0, ASIN_TOLERANCE, 0}, +{448, 0u, 3334899880u, 0u, 0, ASIN_TOLERANCE, 0}, +{449, 0u, 3254921054u, 0u, 0, ASIN_TOLERANCE, 0}, +{450, 0u, 1327067896u, 0u, 0, ASIN_TOLERANCE, 0}, +{451, 0u, 3322159484u, 0u, 0, ASIN_TOLERANCE, 0}, +{452, 0u, 1170972749u, 0u, 0, ASIN_TOLERANCE, 0}, +{453, 0u, 1088950833u, 0u, 0, ASIN_TOLERANCE, 0}, +{454, 0u, 1021298336u, 0u, 0, ASIN_TOLERANCE, 0}, +{455, 0u, 3396911457u, 0u, 0, ASIN_TOLERANCE, 0}, +{456, 0u, 1226465223u, 0u, 0, ASIN_TOLERANCE, 0}, +{457, 0u, 3032345638u, 0u, 0, ASIN_TOLERANCE, 0}, +{458, 0u, 3372887038u, 0u, 0, ASIN_TOLERANCE, 0}, +{459, 0u, 3047298800u, 0u, 0, ASIN_TOLERANCE, 0}, +{460, 0u, 1328903537u, 0u, 0, ASIN_TOLERANCE, 0}, +{461, 0u, 943122002u, 0u, 0, ASIN_TOLERANCE, 0}, +{462, 0u, 3240474694u, 0u, 0, ASIN_TOLERANCE, 0}, +{463, 0u, 1321478210u, 0u, 0, ASIN_TOLERANCE, 0}, +{464, 0u, 3150110905u, 0u, 0, ASIN_TOLERANCE, 0}, +{465, 1044716314u, 1175058883u, 1044797442u, 0, ASIN_TOLERANCE, 0}, +{466, 0u, 1113112437u, 0u, 0, ASIN_TOLERANCE, 0}, +{467, 0u, 1133955508u, 0u, 0, ASIN_TOLERANCE, 0}, +{468, 0u, 3322269242u, 0u, 0, ASIN_TOLERANCE, 0}, +{469, 0u, 1007037967u, 0u, 0, ASIN_TOLERANCE, 0}, +{470, 0u, 1034712760u, 0u, 0, ASIN_TOLERANCE, 0}, +{471, 0u, 3242154340u, 0u, 0, ASIN_TOLERANCE, 0}, +{472, 0u, 3198746395u, 0u, 0, ASIN_TOLERANCE, 0}, +{473, 0u, 871518549u, 0u, 0, ASIN_TOLERANCE, 0}, +{474, 0u, 1076307289u, 0u, 0, ASIN_TOLERANCE, 0}, +{475, 0u, 1093265845u, 0u, 0, ASIN_TOLERANCE, 0}, +{476, 0u, 3425791859u, 0u, 0, ASIN_TOLERANCE, 0}, +{477, 0u, 1132019346u, 0u, 0, ASIN_TOLERANCE, 0}, +{478, 0u, 3188748064u, 0u, 0, ASIN_TOLERANCE, 0}, +{479, 0u, 2959991506u, 0u, 0, ASIN_TOLERANCE, 0}, +{480, 0u, 3424322165u, 0u, 0, ASIN_TOLERANCE, 0}, +{481, 0u, 3159354376u, 0u, 0, ASIN_TOLERANCE, 0}, +{482, 0u, 3191112451u, 0u, 0, ASIN_TOLERANCE, 0}, +{483, 0u, 3268491661u, 0u, 0, ASIN_TOLERANCE, 0}, +{484, 0u, 1228416507u, 0u, 0, ASIN_TOLERANCE, 0}, +{485, 0u, 1006050163u, 0u, 0, ASIN_TOLERANCE, 0}, +{486, 0u, 3194999530u, 0u, 0, ASIN_TOLERANCE, 0}, +{487, 0u, 3455139526u, 0u, 0, ASIN_TOLERANCE, 0}, +{488, 0u, 1028994668u, 0u, 0, ASIN_TOLERANCE, 0}, +{489, 0u, 827857784u, 0u, 0, ASIN_TOLERANCE, 0}, +{490, 0u, 1089013253u, 0u, 0, ASIN_TOLERANCE, 0}, +{491, 0u, 3332044773u, 0u, 0, ASIN_TOLERANCE, 0}, +{492, 0u, 955602880u, 0u, 0, ASIN_TOLERANCE, 0}, +{493, 0u, 834883605u, 0u, 0, ASIN_TOLERANCE, 0}, +{494, 0u, 2967925613u, 0u, 0, ASIN_TOLERANCE, 0}, +{495, 0u, 3273003721u, 0u, 0, ASIN_TOLERANCE, 0}, +{496, 0u, 3114823772u, 0u, 0, ASIN_TOLERANCE, 0}, +{497, 0u, 2978999239u, 0u, 0, ASIN_TOLERANCE, 0}, +{498, 0u, 1241824475u, 0u, 0, ASIN_TOLERANCE, 0}, +{499, 0u, 1331775131u, 0u, 0, ASIN_TOLERANCE, 0}, +{500, 0u, 3141296194u, 0u, 0, ASIN_TOLERANCE, 0}, +{501, 0u, 1337844885u, 0u, 0, ASIN_TOLERANCE, 0}, +{502, 0u, 3106714954u, 0u, 0, ASIN_TOLERANCE, 0}, +{503, 0u, 3096592046u, 0u, 0, ASIN_TOLERANCE, 0}, +{504, 0u, 1073304723u, 0u, 0, ASIN_TOLERANCE, 0}, +{505, 0u, 1241050896u, 0u, 0, ASIN_TOLERANCE, 0}, +{506, 0u, 3396048528u, 0u, 0, ASIN_TOLERANCE, 0}, +{507, 0u, 815233034u, 0u, 0, ASIN_TOLERANCE, 0}, +{508, 0u, 1336420810u, 0u, 0, ASIN_TOLERANCE, 0}, +{509, 0u, 3385978192u, 0u, 0, ASIN_TOLERANCE, 0}, +{510, 0u, 865415249u, 0u, 0, ASIN_TOLERANCE, 0}, +{511, 0u, 1098069770u, 0u, 0, ASIN_TOLERANCE, 0}, +{512, 0u, 1309182624u, 0u, 0, ASIN_TOLERANCE, 0}, +{513, 0u, 3090687943u, 0u, 0, ASIN_TOLERANCE, 0}, +{514, 0u, 3294568849u, 0u, 0, ASIN_TOLERANCE, 0}, +{515, 0u, 1248962235u, 0u, 0, ASIN_TOLERANCE, 0}, +{516, 0u, 1181971466u, 0u, 0, ASIN_TOLERANCE, 0}, +{517, 0u, 3364325750u, 0u, 0, ASIN_TOLERANCE, 0}, +{518, 0u, 3438080027u, 0u, 0, ASIN_TOLERANCE, 0}, +{519, 0u, 1092687408u, 0u, 0, ASIN_TOLERANCE, 0}, +{520, 0u, 3314756782u, 0u, 0, ASIN_TOLERANCE, 0}, +{521, 3155280708u, 1025618776u, 3155280834u, 0, ASIN_TOLERANCE, 0}, +{522, 3157435720u, 933489446u, 3157435952u, 0, ASIN_TOLERANCE, 0}, +{523, 0u, 1124703898u, 0u, 0, ASIN_TOLERANCE, 0}, +{524, 0u, 988628692u, 0u, 0, ASIN_TOLERANCE, 0}, +{525, 0u, 3448856777u, 0u, 0, ASIN_TOLERANCE, 0}, +{526, 0u, 3203377685u, 0u, 0, ASIN_TOLERANCE, 0}, +{527, 0u, 811346780u, 0u, 0, ASIN_TOLERANCE, 0}, +{528, 0u, 3263906037u, 0u, 0, ASIN_TOLERANCE, 0}, +{529, 0u, 3005448018u, 0u, 0, ASIN_TOLERANCE, 0}, +{530, 0u, 983776939u, 0u, 0, ASIN_TOLERANCE, 0}, +{531, 0u, 3283111355u, 0u, 0, ASIN_TOLERANCE, 0}, +{532, 0u, 3483799470u, 0u, 0, ASIN_TOLERANCE, 0}, +{533, 0u, 1224362550u, 0u, 0, ASIN_TOLERANCE, 0}, +{534, 0u, 989304021u, 0u, 0, ASIN_TOLERANCE, 0}, +{535, 0u, 1266021967u, 0u, 0, ASIN_TOLERANCE, 0}, +{536, 0u, 821670697u, 0u, 0, ASIN_TOLERANCE, 0}, +{537, 0u, 1094961730u, 0u, 0, ASIN_TOLERANCE, 0}, +{538, 0u, 865575622u, 0u, 0, ASIN_TOLERANCE, 0}, +{539, 0u, 3105373037u, 0u, 0, ASIN_TOLERANCE, 0}, +{540, 0u, 3230771910u, 0u, 0, ASIN_TOLERANCE, 0}, +{541, 0u, 3018555990u, 0u, 0, ASIN_TOLERANCE, 0}, +{542, 0u, 976031447u, 0u, 0, ASIN_TOLERANCE, 0}, +{543, 0u, 1176712907u, 0u, 0, ASIN_TOLERANCE, 0}, +{544, 0u, 3060368257u, 0u, 0, ASIN_TOLERANCE, 0}, +{545, 0u, 3445308988u, 0u, 0, ASIN_TOLERANCE, 0}, +{546, 0u, 3180028770u, 0u, 0, ASIN_TOLERANCE, 0}, +{547, 0u, 1124209516u, 0u, 0, ASIN_TOLERANCE, 0}, +{548, 0u, 1336654718u, 0u, 0, ASIN_TOLERANCE, 0}, +{549, 0u, 947482291u, 0u, 0, ASIN_TOLERANCE, 0}, +{550, 0u, 3118293357u, 0u, 0, ASIN_TOLERANCE, 0}, +{551, 0u, 3118498177u, 0u, 0, ASIN_TOLERANCE, 0}, +{552, 0u, 3229444200u, 0u, 0, ASIN_TOLERANCE, 0}, +{553, 0u, 3258228828u, 0u, 0, ASIN_TOLERANCE, 0}, +{554, 0u, 922323270u, 0u, 0, ASIN_TOLERANCE, 0}, +{555, 0u, 3114663401u, 0u, 0, ASIN_TOLERANCE, 0}, +{556, 0u, 885324962u, 0u, 0, ASIN_TOLERANCE, 0}, +{557, 0u, 1317998064u, 0u, 0, ASIN_TOLERANCE, 0}, +{558, 0u, 3403521222u, 0u, 0, ASIN_TOLERANCE, 0}, +{559, 0u, 994818884u, 0u, 0, ASIN_TOLERANCE, 0}, +{560, 0u, 3308921926u, 0u, 0, ASIN_TOLERANCE, 0}, +{561, 0u, 837597103u, 0u, 0, ASIN_TOLERANCE, 0}, +{562, 0u, 818395888u, 0u, 0, ASIN_TOLERANCE, 0}, +{563, 0u, 3385546293u, 0u, 0, ASIN_TOLERANCE, 0}, +{564, 0u, 1307494704u, 0u, 0, ASIN_TOLERANCE, 0}, +{565, 0u, 3195630702u, 0u, 0, ASIN_TOLERANCE, 0}, +{566, 0u, 3452970791u, 0u, 0, ASIN_TOLERANCE, 0}, +{567, 0u, 969181440u, 0u, 0, ASIN_TOLERANCE, 0}, +{568, 0u, 3198823742u, 0u, 0, ASIN_TOLERANCE, 0}, +{569, 0u, 859215836u, 0u, 0, ASIN_TOLERANCE, 0}, +{570, 0u, 1032431894u, 0u, 0, ASIN_TOLERANCE, 0}, +{571, 0u, 1317167489u, 0u, 0, ASIN_TOLERANCE, 0}, +{572, 0u, 1168321640u, 0u, 0, ASIN_TOLERANCE, 0}, +{573, 0u, 3419973892u, 0u, 0, ASIN_TOLERANCE, 0}, +{574, 0u, 3233127658u, 0u, 0, ASIN_TOLERANCE, 0}, +{575, 0u, 3080940727u, 0u, 0, ASIN_TOLERANCE, 0}, +{576, 0u, 3347164575u, 0u, 0, ASIN_TOLERANCE, 0}, +{577, 0u, 1252328733u, 0u, 0, ASIN_TOLERANCE, 0}, +{578, 0u, 3419080316u, 0u, 0, ASIN_TOLERANCE, 0}, +{579, 0u, 2972433958u, 0u, 0, ASIN_TOLERANCE, 0}, +{580, 0u, 1116045545u, 0u, 0, ASIN_TOLERANCE, 0}, +{581, 0u, 998741069u, 0u, 0, ASIN_TOLERANCE, 0}, +{582, 957816867u, 3201187455u, 957816867u, 0, ASIN_TOLERANCE, 0}, +{583, 0u, 3053678168u, 0u, 0, ASIN_TOLERANCE, 0}, +{584, 0u, 1305765795u, 0u, 0, ASIN_TOLERANCE, 0}, +{585, 0u, 1103014375u, 0u, 0, ASIN_TOLERANCE, 0}, +{586, 0u, 3232872279u, 0u, 0, ASIN_TOLERANCE, 0}, +{587, 0u, 1181934749u, 0u, 0, ASIN_TOLERANCE, 0}, +{588, 0u, 1190838126u, 0u, 0, ASIN_TOLERANCE, 0}, +{589, 0u, 867988931u, 0u, 0, ASIN_TOLERANCE, 0}, +{590, 0u, 991229856u, 0u, 0, ASIN_TOLERANCE, 0}, +{591, 0u, 3364998151u, 0u, 0, ASIN_TOLERANCE, 0}, +{592, 0u, 1315543293u, 0u, 0, ASIN_TOLERANCE, 0}, +{593, 0u, 1057448325u, 0u, 0, ASIN_TOLERANCE, 0}, +{594, 0u, 1267482842u, 0u, 0, ASIN_TOLERANCE, 0}, +{595, 0u, 934466263u, 0u, 0, ASIN_TOLERANCE, 0}, +{596, 0u, 1245869105u, 0u, 0, ASIN_TOLERANCE, 0}, +{597, 0u, 1108490809u, 0u, 0, ASIN_TOLERANCE, 0}, +{598, 0u, 3400104881u, 0u, 0, ASIN_TOLERANCE, 0}, +{599, 0u, 1319516167u, 0u, 0, ASIN_TOLERANCE, 0}, +{600, 0u, 1340013152u, 0u, 0, ASIN_TOLERANCE, 0}, +{601, 0u, 1178045349u, 0u, 0, ASIN_TOLERANCE, 0}, +{602, 0u, 999587166u, 0u, 0, ASIN_TOLERANCE, 0}, +{603, 0u, 1311927022u, 0u, 0, ASIN_TOLERANCE, 0}, +{604, 0u, 3367551312u, 0u, 0, ASIN_TOLERANCE, 0}, +{605, 0u, 1288794633u, 0u, 0, ASIN_TOLERANCE, 0}, +{606, 0u, 3187139195u, 0u, 0, ASIN_TOLERANCE, 0}, +{607, 0u, 3454228018u, 0u, 0, ASIN_TOLERANCE, 0}, +{608, 0u, 1027563924u, 0u, 0, ASIN_TOLERANCE, 0}, +{609, 0u, 1113104661u, 0u, 0, ASIN_TOLERANCE, 0}, +{610, 0u, 3245719778u, 0u, 0, ASIN_TOLERANCE, 0}, +{611, 0u, 3316389232u, 0u, 0, ASIN_TOLERANCE, 0}, +{612, 0u, 1282310126u, 0u, 0, ASIN_TOLERANCE, 0}, +{613, 0u, 1054537352u, 0u, 0, ASIN_TOLERANCE, 0}, +{614, 0u, 1030482448u, 0u, 0, ASIN_TOLERANCE, 0}, +{615, 0u, 898656161u, 0u, 0, ASIN_TOLERANCE, 0}, +{616, 0u, 3168363256u, 0u, 0, ASIN_TOLERANCE, 0}, +{617, 0u, 3100289712u, 0u, 0, ASIN_TOLERANCE, 0}, +{618, 0u, 1002569587u, 0u, 0, ASIN_TOLERANCE, 0}, +{619, 0u, 1295189320u, 0u, 0, ASIN_TOLERANCE, 0}, +{620, 0u, 3292709189u, 0u, 0, ASIN_TOLERANCE, 0}, +{621, 0u, 1154162408u, 0u, 0, ASIN_TOLERANCE, 0}, +{622, 0u, 1163075690u, 0u, 0, ASIN_TOLERANCE, 0}, +{623, 0u, 876100581u, 0u, 0, ASIN_TOLERANCE, 0}, +{624, 0u, 2992721023u, 0u, 0, ASIN_TOLERANCE, 0}, +{625, 0u, 822384047u, 0u, 0, ASIN_TOLERANCE, 0}, +{626, 0u, 1028558726u, 0u, 0, ASIN_TOLERANCE, 0}, +{627, 0u, 979448121u, 0u, 0, ASIN_TOLERANCE, 0}, +{628, 0u, 1258114435u, 0u, 0, ASIN_TOLERANCE, 0}, +{629, 0u, 3391984950u, 0u, 0, ASIN_TOLERANCE, 0}, +{630, 0u, 3106769746u, 0u, 0, ASIN_TOLERANCE, 0}, +{631, 0u, 3401317856u, 0u, 0, ASIN_TOLERANCE, 0}, +{632, 0u, 941984293u, 0u, 0, ASIN_TOLERANCE, 0}, +{633, 0u, 3104817582u, 0u, 0, ASIN_TOLERANCE, 0}, +{634, 0u, 887134496u, 0u, 0, ASIN_TOLERANCE, 0}, +{635, 0u, 3355201503u, 0u, 0, ASIN_TOLERANCE, 0}, +{636, 0u, 977588436u, 0u, 0, ASIN_TOLERANCE, 0}, +{637, 0u, 1191609115u, 0u, 0, ASIN_TOLERANCE, 0}, +{638, 0u, 1047298999u, 0u, 0, ASIN_TOLERANCE, 0}, +{639, 0u, 3483356946u, 0u, 0, ASIN_TOLERANCE, 0}, +{640, 0u, 3353529760u, 0u, 0, ASIN_TOLERANCE, 0}, +{641, 0u, 928612885u, 0u, 0, ASIN_TOLERANCE, 0}, +{642, 0u, 3162606086u, 0u, 0, ASIN_TOLERANCE, 0}, +{643, 3042097453u, 3471777274u, 3042097453u, 0, ASIN_TOLERANCE, 0}, +{644, 0u, 3202575407u, 0u, 0, ASIN_TOLERANCE, 0}, +{645, 0u, 1255148034u, 0u, 0, ASIN_TOLERANCE, 0}, +{646, 0u, 1218488455u, 0u, 0, ASIN_TOLERANCE, 0}, +{647, 0u, 1043585640u, 0u, 0, ASIN_TOLERANCE, 0}, +{648, 0u, 860904453u, 0u, 0, ASIN_TOLERANCE, 0}, +{649, 0u, 3070312723u, 0u, 0, ASIN_TOLERANCE, 0}, +{650, 0u, 3269996350u, 0u, 0, ASIN_TOLERANCE, 0}, +{651, 0u, 3451862908u, 0u, 0, ASIN_TOLERANCE, 0}, +{652, 0u, 3159551767u, 0u, 0, ASIN_TOLERANCE, 0}, +{653, 0u, 3150026558u, 0u, 0, ASIN_TOLERANCE, 0}, +{654, 0u, 3018474595u, 0u, 0, ASIN_TOLERANCE, 0}, +{655, 0u, 3092228268u, 0u, 0, ASIN_TOLERANCE, 0}, +{656, 0u, 3177295669u, 0u, 0, ASIN_TOLERANCE, 0}, +{657, 0u, 1281912088u, 0u, 0, ASIN_TOLERANCE, 0}, +{658, 0u, 1011694414u, 0u, 0, ASIN_TOLERANCE, 0}, +{659, 0u, 3017590098u, 0u, 0, ASIN_TOLERANCE, 0}, +{660, 0u, 932275550u, 0u, 0, ASIN_TOLERANCE, 0}, +{661, 0u, 925977317u, 0u, 0, ASIN_TOLERANCE, 0}, +{662, 0u, 3172338958u, 0u, 0, ASIN_TOLERANCE, 0}, +{663, 0u, 950074301u, 0u, 0, ASIN_TOLERANCE, 0}, +{664, 0u, 1031925638u, 0u, 0, ASIN_TOLERANCE, 0}, +{665, 0u, 3234909547u, 0u, 0, ASIN_TOLERANCE, 0}, +{666, 0u, 1309726409u, 0u, 0, ASIN_TOLERANCE, 0}, +{667, 0u, 2975716887u, 0u, 0, ASIN_TOLERANCE, 0}, +{668, 0u, 3070622494u, 0u, 0, ASIN_TOLERANCE, 0}, +{669, 3097616807u, 1185177793u, 3097616807u, 0, ASIN_TOLERANCE, 0}, +{670, 0u, 1086032676u, 0u, 0, ASIN_TOLERANCE, 0}, +{671, 0u, 3143814681u, 0u, 0, ASIN_TOLERANCE, 0}, +{672, 0u, 3071087132u, 0u, 0, ASIN_TOLERANCE, 0}, +{673, 0u, 868114980u, 0u, 0, ASIN_TOLERANCE, 0}, +{674, 0u, 1082239587u, 0u, 0, ASIN_TOLERANCE, 0}, +{675, 928394985u, 3470455863u, 928394985u, 0, ASIN_TOLERANCE, 0}, +{676, 0u, 3038104593u, 0u, 0, ASIN_TOLERANCE, 0}, +{677, 0u, 3266487747u, 0u, 0, ASIN_TOLERANCE, 0}, +{678, 0u, 931954492u, 0u, 0, ASIN_TOLERANCE, 0}, +{679, 0u, 845877036u, 0u, 0, ASIN_TOLERANCE, 0}, +{680, 0u, 3361912856u, 0u, 0, ASIN_TOLERANCE, 0}, +{681, 0u, 1288217553u, 0u, 0, ASIN_TOLERANCE, 0}, +{682, 994042498u, 1228207362u, 994042516u, 0, ASIN_TOLERANCE, 0}, +{683, 3026246945u, 3323646643u, 3026246945u, 0, ASIN_TOLERANCE, 0}, +{684, 0u, 931002785u, 0u, 0, ASIN_TOLERANCE, 0}, +{685, 0u, 852275082u, 0u, 0, ASIN_TOLERANCE, 0}, +{686, 0u, 3208517087u, 0u, 0, ASIN_TOLERANCE, 0}, +{687, 0u, 950619617u, 0u, 0, ASIN_TOLERANCE, 0}, +{688, 0u, 3062617950u, 0u, 0, ASIN_TOLERANCE, 0}, +{689, 0u, 2954695230u, 0u, 0, ASIN_TOLERANCE, 0}, +{690, 0u, 1249768800u, 0u, 0, ASIN_TOLERANCE, 0}, +{691, 0u, 3430381004u, 0u, 0, ASIN_TOLERANCE, 0}, +{692, 0u, 3468526321u, 0u, 0, ASIN_TOLERANCE, 0}, +{693, 0u, 3314169584u, 0u, 0, ASIN_TOLERANCE, 0}, +{694, 0u, 1252586244u, 0u, 0, ASIN_TOLERANCE, 0}, +{695, 0u, 807089907u, 0u, 0, ASIN_TOLERANCE, 0}, +{696, 0u, 1273960227u, 0u, 0, ASIN_TOLERANCE, 0}, +{697, 0u, 847765686u, 0u, 0, ASIN_TOLERANCE, 0}, +{698, 0u, 925967342u, 0u, 0, ASIN_TOLERANCE, 0}, +{699, 0u, 1232375752u, 0u, 0, ASIN_TOLERANCE, 0}, +{700, 0u, 1315058051u, 0u, 0, ASIN_TOLERANCE, 0}, +{701, 0u, 1134517149u, 0u, 0, ASIN_TOLERANCE, 0}, +{702, 0u, 1277946299u, 0u, 0, ASIN_TOLERANCE, 0}, +{703, 0u, 1071856519u, 0u, 0, ASIN_TOLERANCE, 0}, +{704, 0u, 1146993272u, 0u, 0, ASIN_TOLERANCE, 0}, +{705, 0u, 3474395292u, 0u, 0, ASIN_TOLERANCE, 0}, +{706, 0u, 3483908964u, 0u, 0, ASIN_TOLERANCE, 0}, +{707, 951674212u, 815317784u, 951674212u, 0, ASIN_TOLERANCE, 0}, +{708, 0u, 865935606u, 0u, 0, ASIN_TOLERANCE, 0}, +{709, 0u, 1318415694u, 0u, 0, ASIN_TOLERANCE, 0}, +{710, 0u, 880973446u, 0u, 0, ASIN_TOLERANCE, 0}, +{711, 0u, 949780485u, 0u, 0, ASIN_TOLERANCE, 0}, +{712, 0u, 986578339u, 0u, 0, ASIN_TOLERANCE, 0}, +{713, 0u, 3045907993u, 0u, 0, ASIN_TOLERANCE, 0}, +{714, 0u, 3092473439u, 0u, 0, ASIN_TOLERANCE, 0}, +{715, 0u, 1284508208u, 0u, 0, ASIN_TOLERANCE, 0}, +{716, 0u, 845285114u, 0u, 0, ASIN_TOLERANCE, 0}, +{717, 0u, 3251252972u, 0u, 0, ASIN_TOLERANCE, 0}, +{718, 0u, 3057474479u, 0u, 0, ASIN_TOLERANCE, 0}, +{719, 0u, 1335933001u, 0u, 0, ASIN_TOLERANCE, 0}, +{720, 0u, 843284752u, 0u, 0, ASIN_TOLERANCE, 0}, +{721, 0u, 3431817697u, 0u, 0, ASIN_TOLERANCE, 0}, +{722, 0u, 3245903485u, 0u, 0, ASIN_TOLERANCE, 0}, +{723, 0u, 1173153950u, 0u, 0, ASIN_TOLERANCE, 0}, +{724, 0u, 919202446u, 0u, 0, ASIN_TOLERANCE, 0}, +{725, 0u, 3274909610u, 0u, 0, ASIN_TOLERANCE, 0}, +{726, 0u, 913211241u, 0u, 0, ASIN_TOLERANCE, 0}, +{727, 0u, 994489862u, 0u, 0, ASIN_TOLERANCE, 0}, +{728, 0u, 1157022610u, 0u, 0, ASIN_TOLERANCE, 0}, +{729, 0u, 2962468497u, 0u, 0, ASIN_TOLERANCE, 0}, +{730, 0u, 3371554093u, 0u, 0, ASIN_TOLERANCE, 0}, +{731, 0u, 3188178213u, 0u, 0, ASIN_TOLERANCE, 0}, +{732, 0u, 860714230u, 0u, 0, ASIN_TOLERANCE, 0}, +{733, 0u, 3031764695u, 0u, 0, ASIN_TOLERANCE, 0}, +{734, 0u, 3438580893u, 0u, 0, ASIN_TOLERANCE, 0}, +{735, 0u, 1174324978u, 0u, 0, ASIN_TOLERANCE, 0}, +{736, 0u, 3489323653u, 0u, 0, ASIN_TOLERANCE, 0}, +{737, 0u, 3302139250u, 0u, 0, ASIN_TOLERANCE, 0}, +{738, 0u, 808328507u, 0u, 0, ASIN_TOLERANCE, 0}, +{739, 0u, 1030880169u, 0u, 0, ASIN_TOLERANCE, 0}, +{740, 0u, 831593944u, 0u, 0, ASIN_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ASIN_H multiple inclusion protection + +// EOF asin.h diff --git a/packages/language/c/libm/current/tests/vectors/asinhf.c b/packages/language/c/libm/current/tests/vectors/asinhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/asinhf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// asin.c +// +// Test of asin() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/asinhf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(asinhf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &asinhf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &asinhf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("asinhf() is stable"); + } // if + else + { + CYG_TEST_FAIL("asinhf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library asinhf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "asinhf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF asin.c diff --git a/packages/language/c/libm/current/tests/vectors/asinhf.h b/packages/language/c/libm/current/tests/vectors/asinhf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/asinhf.h @@ -0,0 +1,364 @@ +#ifndef CYGONCE_LIBM_ASINH_H +#define CYGONCE_LIBM_ASINH_H +//=========================================================================== +// +// asinh.h +// +// Test vectors for testing of asinh() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/asinh.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ASINH_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t asinhf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 2147495668u, 3212970857u, 0, ASINH_TOLERANCE, 0}, +{1, 3214430700u, 2147495668u, 3212917021u, 0, ASINH_TOLERANCE, 0}, +{2, 3214346813u, 2147495668u, 3212862920u, 0, ASINH_TOLERANCE, 0}, +{3, 3214262927u, 2147495668u, 3212780240u, 0, ASINH_TOLERANCE, 0}, +{4, 3214179041u, 2147495668u, 3212670966u, 0, ASINH_TOLERANCE, 0}, +{5, 3214095155u, 2147495668u, 3212561149u, 0, ASINH_TOLERANCE, 0}, +{6, 3214011269u, 2147495668u, 3212450788u, 0, ASINH_TOLERANCE, 0}, +{7, 3213927383u, 2147495668u, 3212339878u, 0, ASINH_TOLERANCE, 0}, +{8, 3213843497u, 2147495668u, 3212228416u, 0, ASINH_TOLERANCE, 0}, +{9, 3213759611u, 2147495668u, 3212116399u, 0, ASINH_TOLERANCE, 0}, +{10, 3213675725u, 2147495668u, 3212003823u, 0, ASINH_TOLERANCE, 0}, +{11, 3213591839u, 2147495668u, 3211890687u, 0, ASINH_TOLERANCE, 0}, +{12, 3213507953u, 2147495668u, 3211776985u, 0, ASINH_TOLERANCE, 0}, +{13, 3213424067u, 2147495668u, 3211662714u, 0, ASINH_TOLERANCE, 0}, +{14, 3213340180u, 2147495668u, 3211547871u, 0, ASINH_TOLERANCE, 0}, +{15, 3213256294u, 2147495668u, 3211432455u, 0, ASINH_TOLERANCE, 0}, +{16, 3213172408u, 2147495668u, 3211316461u, 0, ASINH_TOLERANCE, 0}, +{17, 3213088522u, 2147495668u, 3211199885u, 0, ASINH_TOLERANCE, 0}, +{18, 3213004636u, 2147495668u, 3211082726u, 0, ASINH_TOLERANCE, 0}, +{19, 3212920750u, 2147495668u, 3210964979u, 0, ASINH_TOLERANCE, 0}, +{20, 3212836864u, 2147495668u, 3210846643u, 0, ASINH_TOLERANCE, 0}, +{21, 3212669092u, 2147495668u, 3210727713u, 0, ASINH_TOLERANCE, 0}, +{22, 3212501320u, 2147495668u, 3210608188u, 0, ASINH_TOLERANCE, 0}, +{23, 3212333548u, 2147495668u, 3210488062u, 0, ASINH_TOLERANCE, 0}, +{24, 3212165775u, 2147495668u, 3210367335u, 0, ASINH_TOLERANCE, 0}, +{25, 3211998003u, 2147495668u, 3210246003u, 0, ASINH_TOLERANCE, 0}, +{26, 3211830231u, 2147495668u, 3210124064u, 0, ASINH_TOLERANCE, 0}, +{27, 3211662459u, 2147495668u, 3210001516u, 0, ASINH_TOLERANCE, 0}, +{28, 3211494687u, 2147495668u, 3209878354u, 0, ASINH_TOLERANCE, 0}, +{29, 3211326915u, 2147495668u, 3209754578u, 0, ASINH_TOLERANCE, 0}, +{30, 3211159142u, 2147495668u, 3209630183u, 0, ASINH_TOLERANCE, 0}, +{31, 3210991370u, 2147495668u, 3209505169u, 0, ASINH_TOLERANCE, 0}, +{32, 3210823598u, 2147495668u, 3209379532u, 0, ASINH_TOLERANCE, 0}, +{33, 3210655826u, 2147495668u, 3209253271u, 0, ASINH_TOLERANCE, 0}, +{34, 3210488054u, 2147495668u, 3209126382u, 0, ASINH_TOLERANCE, 0}, +{35, 3210320282u, 2147495668u, 3208998865u, 0, ASINH_TOLERANCE, 0}, +{36, 3210152509u, 2147495668u, 3208870717u, 0, ASINH_TOLERANCE, 0}, +{37, 3209984737u, 2147495668u, 3208741936u, 0, ASINH_TOLERANCE, 0}, +{38, 3209816965u, 2147495668u, 3208612522u, 0, ASINH_TOLERANCE, 0}, +{39, 3209649193u, 2147495668u, 3208482470u, 0, ASINH_TOLERANCE, 0}, +{40, 3209481421u, 2147495668u, 3208351781u, 0, ASINH_TOLERANCE, 0}, +{41, 3209313649u, 2147495668u, 3208220454u, 0, ASINH_TOLERANCE, 0}, +{42, 3209145876u, 2147495668u, 3208088485u, 0, ASINH_TOLERANCE, 0}, +{43, 3208978104u, 2147495668u, 3207955876u, 0, ASINH_TOLERANCE, 0}, +{44, 3208810332u, 2147495668u, 3207822623u, 0, ASINH_TOLERANCE, 0}, +{45, 3208642560u, 2147495668u, 3207688728u, 0, ASINH_TOLERANCE, 0}, +{46, 3208474788u, 2147495668u, 3207554188u, 0, ASINH_TOLERANCE, 0}, +{47, 3208307016u, 2147495668u, 3207419003u, 0, ASINH_TOLERANCE, 0}, +{48, 3208139244u, 2147495668u, 3207283173u, 0, ASINH_TOLERANCE, 0}, +{49, 3207971471u, 2147495668u, 3207146697u, 0, ASINH_TOLERANCE, 0}, +{50, 3207803699u, 2147495668u, 3207009576u, 0, ASINH_TOLERANCE, 0}, +{51, 3207635927u, 2147495668u, 3206871809u, 0, ASINH_TOLERANCE, 0}, +{52, 3207468155u, 2147495668u, 3206733396u, 0, ASINH_TOLERANCE, 0}, +{53, 3207300383u, 2147495668u, 3206594339u, 0, ASINH_TOLERANCE, 0}, +{54, 3207132611u, 2147495668u, 3206454637u, 0, ASINH_TOLERANCE, 0}, +{55, 3206964838u, 2147495668u, 3206314290u, 0, ASINH_TOLERANCE, 0}, +{56, 3206797066u, 2147495668u, 3206173301u, 0, ASINH_TOLERANCE, 0}, +{57, 3206629294u, 2147495668u, 3206031671u, 0, ASINH_TOLERANCE, 0}, +{58, 3206461522u, 2147495668u, 3205889401u, 0, ASINH_TOLERANCE, 0}, +{59, 3206293750u, 2147495668u, 3205746492u, 0, ASINH_TOLERANCE, 0}, +{60, 3206125978u, 2147495668u, 3205602946u, 0, ASINH_TOLERANCE, 0}, +{61, 3205958205u, 2147495668u, 3205458765u, 0, ASINH_TOLERANCE, 0}, +{62, 3205790433u, 2147495668u, 3205313953u, 0, ASINH_TOLERANCE, 0}, +{63, 3205622661u, 2147495668u, 3205168510u, 0, ASINH_TOLERANCE, 0}, +{64, 3205454889u, 2147495668u, 3205022440u, 0, ASINH_TOLERANCE, 0}, +{65, 3205287117u, 2147495668u, 3204875747u, 0, ASINH_TOLERANCE, 0}, +{66, 3205119345u, 2147495668u, 3204728433u, 0, ASINH_TOLERANCE, 0}, +{67, 3204951572u, 2147495668u, 3204580501u, 0, ASINH_TOLERANCE, 0}, +{68, 3204783800u, 2147495668u, 3204415655u, 0, ASINH_TOLERANCE, 0}, +{69, 3204616028u, 2147495668u, 3204117348u, 0, ASINH_TOLERANCE, 0}, +{70, 3204448256u, 2147495668u, 3203817830u, 0, ASINH_TOLERANCE, 0}, +{71, 3204112712u, 2147495668u, 3203517110u, 0, ASINH_TOLERANCE, 0}, +{72, 3203777167u, 2147495668u, 3203215201u, 0, ASINH_TOLERANCE, 0}, +{73, 3203441623u, 2147495668u, 3202912112u, 0, ASINH_TOLERANCE, 0}, +{74, 3203106079u, 2147495668u, 3202607855u, 0, ASINH_TOLERANCE, 0}, +{75, 3202770534u, 2147495668u, 3202302439u, 0, ASINH_TOLERANCE, 0}, +{76, 3202434990u, 2147495668u, 3201995878u, 0, ASINH_TOLERANCE, 0}, +{77, 3202099446u, 2147495668u, 3201688186u, 0, ASINH_TOLERANCE, 0}, +{78, 3201763901u, 2147495668u, 3201379374u, 0, ASINH_TOLERANCE, 0}, +{79, 3201428357u, 2147495668u, 3201069459u, 0, ASINH_TOLERANCE, 0}, +{80, 3201092813u, 2147495668u, 3200758454u, 0, ASINH_TOLERANCE, 0}, +{81, 3200757268u, 2147495668u, 3200446374u, 0, ASINH_TOLERANCE, 0}, +{82, 3200421724u, 2147495668u, 3200133237u, 0, ASINH_TOLERANCE, 0}, +{83, 3200086180u, 2147495668u, 3199819057u, 0, ASINH_TOLERANCE, 0}, +{84, 3199750636u, 2147495668u, 3199503854u, 0, ASINH_TOLERANCE, 0}, +{85, 3199415091u, 2147495668u, 3199187644u, 0, ASINH_TOLERANCE, 0}, +{86, 3199079547u, 2147495668u, 3198870448u, 0, ASINH_TOLERANCE, 0}, +{87, 3198744003u, 2147495668u, 3198552283u, 0, ASINH_TOLERANCE, 0}, +{88, 3198408458u, 2147495668u, 3198233169u, 0, ASINH_TOLERANCE, 0}, +{89, 3198072914u, 2147495668u, 3197913129u, 0, ASINH_TOLERANCE, 0}, +{90, 3197737370u, 2147495668u, 3197592182u, 0, ASINH_TOLERANCE, 0}, +{91, 3197401825u, 2147495668u, 3197270349u, 0, ASINH_TOLERANCE, 0}, +{92, 3197066281u, 2147495668u, 3196947656u, 0, ASINH_TOLERANCE, 0}, +{93, 3196730737u, 2147495668u, 3196624123u, 0, ASINH_TOLERANCE, 0}, +{94, 3196395192u, 2147495668u, 3196299775u, 0, ASINH_TOLERANCE, 0}, +{95, 3196059648u, 2147495668u, 3195889625u, 0, ASINH_TOLERANCE, 0}, +{96, 3195388559u, 2147495668u, 3195237815u, 0, ASINH_TOLERANCE, 0}, +{97, 3194717471u, 2147495668u, 3194584526u, 0, ASINH_TOLERANCE, 0}, +{98, 3194046382u, 2147495668u, 3193929807u, 0, ASINH_TOLERANCE, 0}, +{99, 3193375293u, 2147495668u, 3193273714u, 0, ASINH_TOLERANCE, 0}, +{100, 3192704205u, 2147495668u, 3192616299u, 0, ASINH_TOLERANCE, 0}, +{101, 3192033116u, 2147495668u, 3191957620u, 0, ASINH_TOLERANCE, 0}, +{102, 3191362028u, 2147495668u, 3191297731u, 0, ASINH_TOLERANCE, 0}, +{103, 3190690939u, 2147495668u, 3190636690u, 0, ASINH_TOLERANCE, 0}, +{104, 3190019850u, 2147495668u, 3189974557u, 0, ASINH_TOLERANCE, 0}, +{105, 3189348762u, 2147495668u, 3189311390u, 0, ASINH_TOLERANCE, 0}, +{106, 3188677673u, 2147495668u, 3188647250u, 0, ASINH_TOLERANCE, 0}, +{107, 3188006584u, 2147495668u, 3187982196u, 0, ASINH_TOLERANCE, 0}, +{108, 3186999951u, 2147495668u, 3186961544u, 0, ASINH_TOLERANCE, 0}, +{109, 3185657774u, 2147495668u, 3185628161u, 0, ASINH_TOLERANCE, 0}, +{110, 3184315597u, 2147495668u, 3184293327u, 0, ASINH_TOLERANCE, 0}, +{111, 3182973420u, 2147495668u, 3182957172u, 0, ASINH_TOLERANCE, 0}, +{112, 3181631242u, 2147495668u, 3181619822u, 0, ASINH_TOLERANCE, 0}, +{113, 3180289065u, 2147495668u, 3180281409u, 0, ASINH_TOLERANCE, 0}, +{114, 3178611343u, 2147495668u, 3178601695u, 0, ASINH_TOLERANCE, 0}, +{115, 3175926989u, 2147495668u, 3175921403u, 0, ASINH_TOLERANCE, 0}, +{116, 3173242634u, 2147495668u, 3173239773u, 0, ASINH_TOLERANCE, 0}, +{117, 3170222735u, 2147495668u, 3170220320u, 0, ASINH_TOLERANCE, 0}, +{118, 3164854026u, 2147495668u, 3164853310u, 0, ASINH_TOLERANCE, 0}, +{119, 3156465418u, 2147495668u, 3156465239u, 0, ASINH_TOLERANCE, 0}, +{120, 646742016u, 2147495668u, 646742016u, 0, ASINH_TOLERANCE, 0}, +{121, 1008981770u, 2147495668u, 1008981591u, 0, ASINH_TOLERANCE, 0}, +{122, 1017370378u, 2147495668u, 1017369662u, 0, ASINH_TOLERANCE, 0}, +{123, 1022739087u, 2147495668u, 1022736672u, 0, ASINH_TOLERANCE, 0}, +{124, 1025758986u, 2147495668u, 1025756125u, 0, ASINH_TOLERANCE, 0}, +{125, 1028443341u, 2147495668u, 1028437755u, 0, ASINH_TOLERANCE, 0}, +{126, 1031127695u, 2147495668u, 1031118047u, 0, ASINH_TOLERANCE, 0}, +{127, 1032805417u, 2147495668u, 1032797761u, 0, ASINH_TOLERANCE, 0}, +{128, 1034147594u, 2147495668u, 1034136174u, 0, ASINH_TOLERANCE, 0}, +{129, 1035489772u, 2147495668u, 1035473524u, 0, ASINH_TOLERANCE, 0}, +{130, 1036831949u, 2147495668u, 1036809679u, 0, ASINH_TOLERANCE, 0}, +{131, 1038174126u, 2147495668u, 1038144513u, 0, ASINH_TOLERANCE, 0}, +{132, 1039516303u, 2147495668u, 1039477896u, 0, ASINH_TOLERANCE, 0}, +{133, 1040522936u, 2147495668u, 1040498548u, 0, ASINH_TOLERANCE, 0}, +{134, 1041194025u, 2147495668u, 1041163602u, 0, ASINH_TOLERANCE, 0}, +{135, 1041865114u, 2147495668u, 1041827742u, 0, ASINH_TOLERANCE, 0}, +{136, 1042536202u, 2147495668u, 1042490909u, 0, ASINH_TOLERANCE, 0}, +{137, 1043207291u, 2147495668u, 1043153042u, 0, ASINH_TOLERANCE, 0}, +{138, 1043878380u, 2147495668u, 1043814083u, 0, ASINH_TOLERANCE, 0}, +{139, 1044549468u, 2147495668u, 1044473972u, 0, ASINH_TOLERANCE, 0}, +{140, 1045220557u, 2147495668u, 1045132651u, 0, ASINH_TOLERANCE, 0}, +{141, 1045891645u, 2147495668u, 1045790066u, 0, ASINH_TOLERANCE, 0}, +{142, 1046562734u, 2147495668u, 1046446159u, 0, ASINH_TOLERANCE, 0}, +{143, 1047233823u, 2147495668u, 1047100878u, 0, ASINH_TOLERANCE, 0}, +{144, 1047904911u, 2147495668u, 1047754167u, 0, ASINH_TOLERANCE, 0}, +{145, 1048576000u, 2147495668u, 1048405977u, 0, ASINH_TOLERANCE, 0}, +{146, 1048911544u, 2147495668u, 1048816127u, 0, ASINH_TOLERANCE, 0}, +{147, 1049247089u, 2147495668u, 1049140475u, 0, ASINH_TOLERANCE, 0}, +{148, 1049582633u, 2147495668u, 1049464008u, 0, ASINH_TOLERANCE, 0}, +{149, 1049918177u, 2147495668u, 1049786701u, 0, ASINH_TOLERANCE, 0}, +{150, 1050253722u, 2147495668u, 1050108534u, 0, ASINH_TOLERANCE, 0}, +{151, 1050589266u, 2147495668u, 1050429481u, 0, ASINH_TOLERANCE, 0}, +{152, 1050924810u, 2147495668u, 1050749521u, 0, ASINH_TOLERANCE, 0}, +{153, 1051260355u, 2147495668u, 1051068635u, 0, ASINH_TOLERANCE, 0}, +{154, 1051595899u, 2147495668u, 1051386800u, 0, ASINH_TOLERANCE, 0}, +{155, 1051931443u, 2147495668u, 1051703996u, 0, ASINH_TOLERANCE, 0}, +{156, 1052266988u, 2147495668u, 1052020206u, 0, ASINH_TOLERANCE, 0}, +{157, 1052602532u, 2147495668u, 1052335409u, 0, ASINH_TOLERANCE, 0}, +{158, 1052938076u, 2147495668u, 1052649589u, 0, ASINH_TOLERANCE, 0}, +{159, 1053273620u, 2147495668u, 1052962726u, 0, ASINH_TOLERANCE, 0}, +{160, 1053609165u, 2147495668u, 1053274806u, 0, ASINH_TOLERANCE, 0}, +{161, 1053944709u, 2147495668u, 1053585811u, 0, ASINH_TOLERANCE, 0}, +{162, 1054280253u, 2147495668u, 1053895726u, 0, ASINH_TOLERANCE, 0}, +{163, 1054615798u, 2147495668u, 1054204538u, 0, ASINH_TOLERANCE, 0}, +{164, 1054951342u, 2147495668u, 1054512230u, 0, ASINH_TOLERANCE, 0}, +{165, 1055286886u, 2147495668u, 1054818791u, 0, ASINH_TOLERANCE, 0}, +{166, 1055622431u, 2147495668u, 1055124207u, 0, ASINH_TOLERANCE, 0}, +{167, 1055957975u, 2147495668u, 1055428464u, 0, ASINH_TOLERANCE, 0}, +{168, 1056293519u, 2147495668u, 1055731553u, 0, ASINH_TOLERANCE, 0}, +{169, 1056629064u, 2147495668u, 1056033462u, 0, ASINH_TOLERANCE, 0}, +{170, 1056964608u, 2147495668u, 1056334182u, 0, ASINH_TOLERANCE, 0}, +{171, 1057132380u, 2147495668u, 1056633700u, 0, ASINH_TOLERANCE, 0}, +{172, 1057300152u, 2147495668u, 1056932007u, 0, ASINH_TOLERANCE, 0}, +{173, 1057467924u, 2147495668u, 1057096853u, 0, ASINH_TOLERANCE, 0}, +{174, 1057635697u, 2147495668u, 1057244785u, 0, ASINH_TOLERANCE, 0}, +{175, 1057803469u, 2147495668u, 1057392099u, 0, ASINH_TOLERANCE, 0}, +{176, 1057971241u, 2147495668u, 1057538792u, 0, ASINH_TOLERANCE, 0}, +{177, 1058139013u, 2147495668u, 1057684862u, 0, ASINH_TOLERANCE, 0}, +{178, 1058306785u, 2147495668u, 1057830305u, 0, ASINH_TOLERANCE, 0}, +{179, 1058474557u, 2147495668u, 1057975117u, 0, ASINH_TOLERANCE, 0}, +{180, 1058642330u, 2147495668u, 1058119298u, 0, ASINH_TOLERANCE, 0}, +{181, 1058810102u, 2147495668u, 1058262844u, 0, ASINH_TOLERANCE, 0}, +{182, 1058977874u, 2147495668u, 1058405753u, 0, ASINH_TOLERANCE, 0}, +{183, 1059145646u, 2147495668u, 1058548023u, 0, ASINH_TOLERANCE, 0}, +{184, 1059313418u, 2147495668u, 1058689653u, 0, ASINH_TOLERANCE, 0}, +{185, 1059481190u, 2147495668u, 1058830642u, 0, ASINH_TOLERANCE, 0}, +{186, 1059648963u, 2147495668u, 1058970989u, 0, ASINH_TOLERANCE, 0}, +{187, 1059816735u, 2147495668u, 1059110691u, 0, ASINH_TOLERANCE, 0}, +{188, 1059984507u, 2147495668u, 1059249748u, 0, ASINH_TOLERANCE, 0}, +{189, 1060152279u, 2147495668u, 1059388161u, 0, ASINH_TOLERANCE, 0}, +{190, 1060320051u, 2147495668u, 1059525928u, 0, ASINH_TOLERANCE, 0}, +{191, 1060487823u, 2147495668u, 1059663049u, 0, ASINH_TOLERANCE, 0}, +{192, 1060655596u, 2147495668u, 1059799525u, 0, ASINH_TOLERANCE, 0}, +{193, 1060823368u, 2147495668u, 1059935355u, 0, ASINH_TOLERANCE, 0}, +{194, 1060991140u, 2147495668u, 1060070540u, 0, ASINH_TOLERANCE, 0}, +{195, 1061158912u, 2147495668u, 1060205080u, 0, ASINH_TOLERANCE, 0}, +{196, 1061326684u, 2147495668u, 1060338975u, 0, ASINH_TOLERANCE, 0}, +{197, 1061494456u, 2147495668u, 1060472228u, 0, ASINH_TOLERANCE, 0}, +{198, 1061662228u, 2147495668u, 1060604837u, 0, ASINH_TOLERANCE, 0}, +{199, 1061830001u, 2147495668u, 1060736806u, 0, ASINH_TOLERANCE, 0}, +{200, 1061997773u, 2147495668u, 1060868133u, 0, ASINH_TOLERANCE, 0}, +{201, 1062165545u, 2147495668u, 1060998822u, 0, ASINH_TOLERANCE, 0}, +{202, 1062333317u, 2147495668u, 1061128874u, 0, ASINH_TOLERANCE, 0}, +{203, 1062501089u, 2147495668u, 1061258288u, 0, ASINH_TOLERANCE, 0}, +{204, 1062668861u, 2147495668u, 1061387069u, 0, ASINH_TOLERANCE, 0}, +{205, 1062836634u, 2147495668u, 1061515217u, 0, ASINH_TOLERANCE, 0}, +{206, 1063004406u, 2147495668u, 1061642734u, 0, ASINH_TOLERANCE, 0}, +{207, 1063172178u, 2147495668u, 1061769623u, 0, ASINH_TOLERANCE, 0}, +{208, 1063339950u, 2147495668u, 1061895884u, 0, ASINH_TOLERANCE, 0}, +{209, 1063507722u, 2147495668u, 1062021521u, 0, ASINH_TOLERANCE, 0}, +{210, 1063675494u, 2147495668u, 1062146535u, 0, ASINH_TOLERANCE, 0}, +{211, 1063843267u, 2147495668u, 1062270930u, 0, ASINH_TOLERANCE, 0}, +{212, 1064011039u, 2147495668u, 1062394706u, 0, ASINH_TOLERANCE, 0}, +{213, 1064178811u, 2147495668u, 1062517868u, 0, ASINH_TOLERANCE, 0}, +{214, 1064346583u, 2147495668u, 1062640416u, 0, ASINH_TOLERANCE, 0}, +{215, 1064514355u, 2147495668u, 1062762355u, 0, ASINH_TOLERANCE, 0}, +{216, 1064682127u, 2147495668u, 1062883687u, 0, ASINH_TOLERANCE, 0}, +{217, 1064849900u, 2147495668u, 1063004414u, 0, ASINH_TOLERANCE, 0}, +{218, 1065017672u, 2147495668u, 1063124540u, 0, ASINH_TOLERANCE, 0}, +{219, 1065185444u, 2147495668u, 1063244065u, 0, ASINH_TOLERANCE, 0}, +{220, 1065353216u, 2147495668u, 1063362995u, 0, ASINH_TOLERANCE, 0}, +{221, 1065437102u, 2147495668u, 1063481331u, 0, ASINH_TOLERANCE, 0}, +{222, 1065520988u, 2147495668u, 1063599078u, 0, ASINH_TOLERANCE, 0}, +{223, 1065604874u, 2147495668u, 1063716237u, 0, ASINH_TOLERANCE, 0}, +{224, 1065688760u, 2147495668u, 1063832813u, 0, ASINH_TOLERANCE, 0}, +{225, 1065772646u, 2147495668u, 1063948807u, 0, ASINH_TOLERANCE, 0}, +{226, 1065856532u, 2147495668u, 1064064223u, 0, ASINH_TOLERANCE, 0}, +{227, 1065940419u, 2147495668u, 1064179066u, 0, ASINH_TOLERANCE, 0}, +{228, 1066024305u, 2147495668u, 1064293337u, 0, ASINH_TOLERANCE, 0}, +{229, 1066108191u, 2147495668u, 1064407039u, 0, ASINH_TOLERANCE, 0}, +{230, 1066192077u, 2147495668u, 1064520175u, 0, ASINH_TOLERANCE, 0}, +{231, 1066275963u, 2147495668u, 1064632751u, 0, ASINH_TOLERANCE, 0}, +{232, 1066359849u, 2147495668u, 1064744768u, 0, ASINH_TOLERANCE, 0}, +{233, 1066443735u, 2147495668u, 1064856230u, 0, ASINH_TOLERANCE, 0}, +{234, 1066527621u, 2147495668u, 1064967140u, 0, ASINH_TOLERANCE, 0}, +{235, 1066611507u, 2147495668u, 1065077501u, 0, ASINH_TOLERANCE, 0}, +{236, 1066695393u, 2147495668u, 1065187318u, 0, ASINH_TOLERANCE, 0}, +{237, 1066779279u, 2147495668u, 1065296592u, 0, ASINH_TOLERANCE, 0}, +{238, 1066863165u, 2147495668u, 1065379272u, 0, ASINH_TOLERANCE, 0}, +{239, 1066947052u, 2147495668u, 1065433373u, 0, ASINH_TOLERANCE, 0}, +{240, 3234402267u, 2147495668u, 3223479061u, 0, ASINH_TOLERANCE, 0}, +{241, 3231108068u, 2147495668u, 3222292564u, 0, ASINH_TOLERANCE, 0}, +{242, 3226013659u, 2147495668u, 3220070325u, 0, ASINH_TOLERANCE, 0}, +{243, 3217625051u, 2147495668u, 3214794791u, 0, ASINH_TOLERANCE, 0}, +{244, 0u, 2147495668u, 0u, 0, ASINH_TOLERANCE, 0}, +{245, 1070141403u, 2147495668u, 1067311143u, 0, ASINH_TOLERANCE, 0}, +{246, 1078530011u, 2147495668u, 1072586677u, 0, ASINH_TOLERANCE, 0}, +{247, 1083624420u, 2147495668u, 1074808916u, 0, ASINH_TOLERANCE, 0}, +{248, 3253731328u, 2147495668u, 3229812517u, 0, ASINH_TOLERANCE, 0}, +{249, 3252840038u, 2147495668u, 3229690251u, 0, ASINH_TOLERANCE, 0}, +{250, 3251948749u, 2147495668u, 3229506754u, 0, ASINH_TOLERANCE, 0}, +{251, 3251057459u, 2147495668u, 3229229957u, 0, ASINH_TOLERANCE, 0}, +{252, 3250166170u, 2147495668u, 3228933611u, 0, ASINH_TOLERANCE, 0}, +{253, 3249274880u, 2147495668u, 3228614747u, 0, ASINH_TOLERANCE, 0}, +{254, 3248383590u, 2147495668u, 3228269663u, 0, ASINH_TOLERANCE, 0}, +{255, 3247492301u, 2147495668u, 3227893666u, 0, ASINH_TOLERANCE, 0}, +{256, 3246601011u, 2147495668u, 3227480676u, 0, ASINH_TOLERANCE, 0}, +{257, 3245028147u, 2147495668u, 3227022627u, 0, ASINH_TOLERANCE, 0}, +{258, 3243245568u, 2147495668u, 3226508502u, 0, ASINH_TOLERANCE, 0}, +{259, 3241462989u, 2147495668u, 3225922682u, 0, ASINH_TOLERANCE, 0}, +{260, 3239680410u, 2147495668u, 3225241988u, 0, ASINH_TOLERANCE, 0}, +{261, 3237792973u, 2147495668u, 3224429886u, 0, ASINH_TOLERANCE, 0}, +{262, 3234227814u, 2147495668u, 3223423864u, 0, ASINH_TOLERANCE, 0}, +{263, 3230662656u, 2147495668u, 3222103540u, 0, ASINH_TOLERANCE, 0}, +{264, 3224580915u, 2147495668u, 3219155405u, 0, ASINH_TOLERANCE, 0}, +{265, 3213675725u, 2147495668u, 3212003823u, 0, ASINH_TOLERANCE, 0}, +{266, 1058642330u, 2147495668u, 1058119298u, 0, ASINH_TOLERANCE, 0}, +{267, 1075000115u, 2147495668u, 1070137059u, 0, ASINH_TOLERANCE, 0}, +{268, 1082130432u, 2147495668u, 1074139077u, 0, ASINH_TOLERANCE, 0}, +{269, 1085695590u, 2147495668u, 1075592438u, 0, ASINH_TOLERANCE, 0}, +{270, 1089260749u, 2147495668u, 1076674320u, 0, ASINH_TOLERANCE, 0}, +{271, 1091672474u, 2147495668u, 1077535266u, 0, ASINH_TOLERANCE, 0}, +{272, 1093455053u, 2147495668u, 1078249987u, 0, ASINH_TOLERANCE, 0}, +{273, 1095237632u, 2147495668u, 1078860855u, 0, ASINH_TOLERANCE, 0}, +{274, 1097020211u, 2147495668u, 1079394180u, 0, ASINH_TOLERANCE, 0}, +{275, 1098802790u, 2147495668u, 1079867411u, 0, ASINH_TOLERANCE, 0}, +{276, 1099746509u, 2147495668u, 1080292707u, 0, ASINH_TOLERANCE, 0}, +{277, 1100637798u, 2147495668u, 1080678879u, 0, ASINH_TOLERANCE, 0}, +{278, 1101529088u, 2147495668u, 1081032514u, 0, ASINH_TOLERANCE, 0}, +{279, 1102420378u, 2147495668u, 1081358667u, 0, ASINH_TOLERANCE, 0}, +{280, 1103311667u, 2147495668u, 1081661299u, 0, ASINH_TOLERANCE, 0}, +{281, 1104202957u, 2147495668u, 1081943573u, 0, ASINH_TOLERANCE, 0}, +{282, 1105094246u, 2147495668u, 1082169243u, 0, ASINH_TOLERANCE, 0}, +{283, 1105985536u, 2147495668u, 1082293642u, 0, ASINH_TOLERANCE, 0}, +{284, 0u, 2147495668u, 0u, 0, ASINH_TOLERANCE, 0}, + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ASINH_H multiple inclusion protection + +// EOF asinh.h diff --git a/packages/language/c/libm/current/tests/vectors/atan2f.c b/packages/language/c/libm/current/tests/vectors/atan2f.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atan2f.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// atan2f.c +// +// Test of atan2f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/atan2f.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(atan2f_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &atan2f, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &atan2f_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("atan2f() is stable"); + } // if + else + { + CYG_TEST_FAIL("atan2f() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library atan2f() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "atan2f() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF atan2f.c diff --git a/packages/language/c/libm/current/tests/vectors/atan2f.h b/packages/language/c/libm/current/tests/vectors/atan2f.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atan2f.h @@ -0,0 +1,2294 @@ +#ifndef CYGONCE_LIBM_ATAN2_H +#define CYGONCE_LIBM_ATAN2_H +//=========================================================================== +// +// atan2f.h +// +// Test vectors for testing of atan2f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/atan2f.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ATAN2_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t atan2f_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3212836864u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{1, 3212836864u, 3211998003u, 3222611937u, 0, ATAN2_TOLERANCE, 0}, +{2, 3212836864u, 3211159142u, 3222498911u, 0, ATAN2_TOLERANCE, 0}, +{3, 3212836864u, 3210320282u, 3222380124u, 0, ATAN2_TOLERANCE, 0}, +{4, 3212836864u, 3209481421u, 3222255330u, 0, ATAN2_TOLERANCE, 0}, +{5, 3212836864u, 3208642560u, 3222124301u, 0, ATAN2_TOLERANCE, 0}, +{6, 3212836864u, 3207803699u, 3221986832u, 0, ATAN2_TOLERANCE, 0}, +{7, 3212836864u, 3206964838u, 3221842754u, 0, ATAN2_TOLERANCE, 0}, +{8, 3212836864u, 3206125978u, 3221691945u, 0, ATAN2_TOLERANCE, 0}, +{9, 3212836864u, 3205287117u, 3221534339u, 0, ATAN2_TOLERANCE, 0}, +{10, 3212836864u, 3204448256u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{11, 3212836864u, 3202770534u, 3221172206u, 0, ATAN2_TOLERANCE, 0}, +{12, 3212836864u, 3201092813u, 3220816969u, 0, ATAN2_TOLERANCE, 0}, +{13, 3212836864u, 3199415091u, 3220449284u, 0, ATAN2_TOLERANCE, 0}, +{14, 3212836864u, 3197737370u, 3220069967u, 0, ATAN2_TOLERANCE, 0}, +{15, 3212836864u, 3196059648u, 3219680081u, 0, ATAN2_TOLERANCE, 0}, +{16, 3212836864u, 3192704205u, 3219280925u, 0, ATAN2_TOLERANCE, 0}, +{17, 3212836864u, 3189348762u, 3218874030u, 0, ATAN2_TOLERANCE, 0}, +{18, 3212836864u, 3184315597u, 3218461132u, 0, ATAN2_TOLERANCE, 0}, +{19, 3212836864u, 3175926989u, 3218044132u, 0, ATAN2_TOLERANCE, 0}, +{20, 3212836864u, 1028443341u, 3217205969u, 0, ATAN2_TOLERANCE, 0}, +{21, 3212836864u, 1036831949u, 3216788969u, 0, ATAN2_TOLERANCE, 0}, +{22, 3212836864u, 1041865114u, 3216376071u, 0, ATAN2_TOLERANCE, 0}, +{23, 3212836864u, 1045220557u, 3215969177u, 0, ATAN2_TOLERANCE, 0}, +{24, 3212836864u, 1048576000u, 3215570021u, 0, ATAN2_TOLERANCE, 0}, +{25, 3212836864u, 1050253722u, 3215180134u, 0, ATAN2_TOLERANCE, 0}, +{26, 3212836864u, 1051931443u, 3214800818u, 0, ATAN2_TOLERANCE, 0}, +{27, 3212836864u, 1053609165u, 3214433132u, 0, ATAN2_TOLERANCE, 0}, +{28, 3212836864u, 1055286886u, 3214077895u, 0, ATAN2_TOLERANCE, 0}, +{29, 3212836864u, 1056964608u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{30, 3212836864u, 1057803469u, 3213406896u, 0, ATAN2_TOLERANCE, 0}, +{31, 3212836864u, 1058642330u, 3213091683u, 0, ATAN2_TOLERANCE, 0}, +{32, 3212836864u, 1059481190u, 3212743266u, 0, ATAN2_TOLERANCE, 0}, +{33, 3212836864u, 1060320051u, 3212166956u, 0, ATAN2_TOLERANCE, 0}, +{34, 3212836864u, 1061158912u, 3211617080u, 0, ATAN2_TOLERANCE, 0}, +{35, 3212836864u, 1061997773u, 3211092963u, 0, ATAN2_TOLERANCE, 0}, +{36, 3212836864u, 1062836634u, 3210593788u, 0, ATAN2_TOLERANCE, 0}, +{37, 3212836864u, 1063675494u, 3210118640u, 0, ATAN2_TOLERANCE, 0}, +{38, 3212836864u, 1064514355u, 3209666533u, 0, ATAN2_TOLERANCE, 0}, +{39, 3211998003u, 3212836864u, 3222826983u, 0, ATAN2_TOLERANCE, 0}, +{40, 3211998003u, 3211998003u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{41, 3211998003u, 3211159142u, 3222606128u, 0, ATAN2_TOLERANCE, 0}, +{42, 3211998003u, 3210320282u, 3222486682u, 0, ATAN2_TOLERANCE, 0}, +{43, 3211998003u, 3209481421u, 3222360825u, 0, ATAN2_TOLERANCE, 0}, +{44, 3211998003u, 3208642560u, 3222228270u, 0, ATAN2_TOLERANCE, 0}, +{45, 3211998003u, 3207803699u, 3222088756u, 0, ATAN2_TOLERANCE, 0}, +{46, 3211998003u, 3206964838u, 3221942054u, 0, ATAN2_TOLERANCE, 0}, +{47, 3211998003u, 3206125978u, 3221787981u, 0, ATAN2_TOLERANCE, 0}, +{48, 3211998003u, 3205287117u, 3221626414u, 0, ATAN2_TOLERANCE, 0}, +{49, 3211998003u, 3204448256u, 3221457309u, 0, ATAN2_TOLERANCE, 0}, +{50, 3211998003u, 3202770534u, 3221280713u, 0, ATAN2_TOLERANCE, 0}, +{51, 3211998003u, 3201092813u, 3220968099u, 0, ATAN2_TOLERANCE, 0}, +{52, 3211998003u, 3199415091u, 3220586149u, 0, ATAN2_TOLERANCE, 0}, +{53, 3211998003u, 3197737370u, 3220190949u, 0, ATAN2_TOLERANCE, 0}, +{54, 3211998003u, 3196059648u, 3219783638u, 0, ATAN2_TOLERANCE, 0}, +{55, 3211998003u, 3192704205u, 3219365655u, 0, ATAN2_TOLERANCE, 0}, +{56, 3211998003u, 3189348762u, 3218938722u, 0, ATAN2_TOLERANCE, 0}, +{57, 3211998003u, 3184315597u, 3218504822u, 0, ATAN2_TOLERANCE, 0}, +{58, 3211998003u, 3175926989u, 3218066149u, 0, ATAN2_TOLERANCE, 0}, +{59, 3211998003u, 1028443341u, 3217183952u, 0, ATAN2_TOLERANCE, 0}, +{60, 3211998003u, 1036831949u, 3216745279u, 0, ATAN2_TOLERANCE, 0}, +{61, 3211998003u, 1041865114u, 3216311379u, 0, ATAN2_TOLERANCE, 0}, +{62, 3211998003u, 1045220557u, 3215884446u, 0, ATAN2_TOLERANCE, 0}, +{63, 3211998003u, 1048576000u, 3215466463u, 0, ATAN2_TOLERANCE, 0}, +{64, 3211998003u, 1050253722u, 3215059153u, 0, ATAN2_TOLERANCE, 0}, +{65, 3211998003u, 1051931443u, 3214663953u, 0, ATAN2_TOLERANCE, 0}, +{66, 3211998003u, 1053609165u, 3214282002u, 0, ATAN2_TOLERANCE, 0}, +{67, 3211998003u, 1055286886u, 3213914147u, 0, ATAN2_TOLERANCE, 0}, +{68, 3211998003u, 1056964608u, 3213560955u, 0, ATAN2_TOLERANCE, 0}, +{69, 3211998003u, 1057803469u, 3213222745u, 0, ATAN2_TOLERANCE, 0}, +{70, 3211998003u, 1058642330u, 3212899611u, 0, ATAN2_TOLERANCE, 0}, +{71, 3211998003u, 1059481190u, 3212346065u, 0, ATAN2_TOLERANCE, 0}, +{72, 3211998003u, 1060320051u, 3211759257u, 0, ATAN2_TOLERANCE, 0}, +{73, 3211998003u, 1061158912u, 3211201201u, 0, ATAN2_TOLERANCE, 0}, +{74, 3211998003u, 1061997773u, 3210670983u, 0, ATAN2_TOLERANCE, 0}, +{75, 3211998003u, 1062836634u, 3210167553u, 0, ATAN2_TOLERANCE, 0}, +{76, 3211998003u, 1063675494u, 3209689771u, 0, ATAN2_TOLERANCE, 0}, +{77, 3211998003u, 1064514355u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{78, 3211159142u, 3212836864u, 3222940009u, 0, ATAN2_TOLERANCE, 0}, +{79, 3211159142u, 3211998003u, 3222832792u, 0, ATAN2_TOLERANCE, 0}, +{80, 3211159142u, 3211159142u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{81, 3211159142u, 3210320282u, 3222599655u, 0, ATAN2_TOLERANCE, 0}, +{82, 3211159142u, 3209481421u, 3222473020u, 0, ATAN2_TOLERANCE, 0}, +{83, 3211159142u, 3208642560u, 3222339205u, 0, ATAN2_TOLERANCE, 0}, +{84, 3211159142u, 3207803699u, 3222197877u, 0, ATAN2_TOLERANCE, 0}, +{85, 3211159142u, 3206964838u, 3222048736u, 0, ATAN2_TOLERANCE, 0}, +{86, 3211159142u, 3206125978u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{87, 3211159142u, 3205287117u, 3221726044u, 0, ATAN2_TOLERANCE, 0}, +{88, 3211159142u, 3204448256u, 3221552187u, 0, ATAN2_TOLERANCE, 0}, +{89, 3211159142u, 3202770534u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{90, 3211159142u, 3201092813u, 3221133371u, 0, ATAN2_TOLERANCE, 0}, +{91, 3211159142u, 3199415091u, 3220736312u, 0, ATAN2_TOLERANCE, 0}, +{92, 3211159142u, 3197737370u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{93, 3211159142u, 3196059648u, 3219897918u, 0, ATAN2_TOLERANCE, 0}, +{94, 3211159142u, 3192704205u, 3219459379u, 0, ATAN2_TOLERANCE, 0}, +{95, 3211159142u, 3189348762u, 3219010418u, 0, ATAN2_TOLERANCE, 0}, +{96, 3211159142u, 3184315597u, 3218553311u, 0, ATAN2_TOLERANCE, 0}, +{97, 3211159142u, 3175926989u, 3218090606u, 0, ATAN2_TOLERANCE, 0}, +{98, 3211159142u, 1028443341u, 3217159495u, 0, ATAN2_TOLERANCE, 0}, +{99, 3211159142u, 1036831949u, 3216696791u, 0, ATAN2_TOLERANCE, 0}, +{100, 3211159142u, 1041865114u, 3216239683u, 0, ATAN2_TOLERANCE, 0}, +{101, 3211159142u, 1045220557u, 3215790723u, 0, ATAN2_TOLERANCE, 0}, +{102, 3211159142u, 1048576000u, 3215352184u, 0, ATAN2_TOLERANCE, 0}, +{103, 3211159142u, 1050253722u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{104, 3211159142u, 1051931443u, 3214513789u, 0, ATAN2_TOLERANCE, 0}, +{105, 3211159142u, 1053609165u, 3214116731u, 0, ATAN2_TOLERANCE, 0}, +{106, 3211159142u, 1055286886u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{107, 3211159142u, 1056964608u, 3213371200u, 0, ATAN2_TOLERANCE, 0}, +{108, 3211159142u, 1057803469u, 3213023485u, 0, ATAN2_TOLERANCE, 0}, +{109, 3211159142u, 1058642330u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{110, 3211159142u, 1059481190u, 3211919340u, 0, ATAN2_TOLERANCE, 0}, +{111, 3211159142u, 1060320051u, 3211322773u, 0, ATAN2_TOLERANCE, 0}, +{112, 3211159142u, 1061158912u, 3210757463u, 0, ATAN2_TOLERANCE, 0}, +{113, 3211159142u, 1061997773u, 3210222202u, 0, ATAN2_TOLERANCE, 0}, +{114, 3211159142u, 1062836634u, 3209715661u, 0, ATAN2_TOLERANCE, 0}, +{115, 3211159142u, 1063675494u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{116, 3211159142u, 1064514355u, 3208783115u, 0, ATAN2_TOLERANCE, 0}, +{117, 3210320282u, 3212836864u, 3223058796u, 0, ATAN2_TOLERANCE, 0}, +{118, 3210320282u, 3211998003u, 3222952238u, 0, ATAN2_TOLERANCE, 0}, +{119, 3210320282u, 3211159142u, 3222839265u, 0, ATAN2_TOLERANCE, 0}, +{120, 3210320282u, 3210320282u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{121, 3210320282u, 3209481421u, 3222592399u, 0, ATAN2_TOLERANCE, 0}, +{122, 3210320282u, 3208642560u, 3222457657u, 0, ATAN2_TOLERANCE, 0}, +{123, 3210320282u, 3207803699u, 3222314820u, 0, ATAN2_TOLERANCE, 0}, +{124, 3210320282u, 3206964838u, 3222163499u, 0, ATAN2_TOLERANCE, 0}, +{125, 3210320282u, 3206125978u, 3222003345u, 0, ATAN2_TOLERANCE, 0}, +{126, 3210320282u, 3205287117u, 3221834070u, 0, ATAN2_TOLERANCE, 0}, +{127, 3210320282u, 3204448256u, 3221655474u, 0, ATAN2_TOLERANCE, 0}, +{128, 3210320282u, 3202770534u, 3221467465u, 0, ATAN2_TOLERANCE, 0}, +{129, 3210320282u, 3201092813u, 3221270095u, 0, ATAN2_TOLERANCE, 0}, +{130, 3210320282u, 3199415091u, 3220901700u, 0, ATAN2_TOLERANCE, 0}, +{131, 3210320282u, 3197737370u, 3220471243u, 0, ATAN2_TOLERANCE, 0}, +{132, 3210320282u, 3196059648u, 3220024624u, 0, ATAN2_TOLERANCE, 0}, +{133, 3210320282u, 3192704205u, 3219563580u, 0, ATAN2_TOLERANCE, 0}, +{134, 3210320282u, 3189348762u, 3219090307u, 0, ATAN2_TOLERANCE, 0}, +{135, 3210320282u, 3184315597u, 3218607430u, 0, ATAN2_TOLERANCE, 0}, +{136, 3210320282u, 3175926989u, 3218117930u, 0, ATAN2_TOLERANCE, 0}, +{137, 3210320282u, 1028443341u, 3217132171u, 0, ATAN2_TOLERANCE, 0}, +{138, 3210320282u, 1036831949u, 3216642671u, 0, ATAN2_TOLERANCE, 0}, +{139, 3210320282u, 1041865114u, 3216159794u, 0, ATAN2_TOLERANCE, 0}, +{140, 3210320282u, 1045220557u, 3215686522u, 0, ATAN2_TOLERANCE, 0}, +{141, 3210320282u, 1048576000u, 3215225477u, 0, ATAN2_TOLERANCE, 0}, +{142, 3210320282u, 1050253722u, 3214778858u, 0, ATAN2_TOLERANCE, 0}, +{143, 3210320282u, 1051931443u, 3214348401u, 0, ATAN2_TOLERANCE, 0}, +{144, 3210320282u, 1053609165u, 3213935384u, 0, ATAN2_TOLERANCE, 0}, +{145, 3210320282u, 1055286886u, 3213540644u, 0, ATAN2_TOLERANCE, 0}, +{146, 3210320282u, 1056964608u, 3213164626u, 0, ATAN2_TOLERANCE, 0}, +{147, 3210320282u, 1057803469u, 3212778001u, 0, ATAN2_TOLERANCE, 0}, +{148, 3210320282u, 1058642330u, 3212100904u, 0, ATAN2_TOLERANCE, 0}, +{149, 3210320282u, 1059481190u, 3211460288u, 0, ATAN2_TOLERANCE, 0}, +{150, 3210320282u, 1060320051u, 3210855004u, 0, ATAN2_TOLERANCE, 0}, +{151, 3210320282u, 1061158912u, 3210283656u, 0, ATAN2_TOLERANCE, 0}, +{152, 3210320282u, 1061997773u, 3209744688u, 0, ATAN2_TOLERANCE, 0}, +{153, 3210320282u, 1062836634u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{154, 3210320282u, 1063675494u, 3208757224u, 0, ATAN2_TOLERANCE, 0}, +{155, 3210320282u, 1064514355u, 3208305332u, 0, ATAN2_TOLERANCE, 0}, +{156, 3209481421u, 3212836864u, 3223183590u, 0, ATAN2_TOLERANCE, 0}, +{157, 3209481421u, 3211998003u, 3223078095u, 0, ATAN2_TOLERANCE, 0}, +{158, 3209481421u, 3211159142u, 3222965900u, 0, ATAN2_TOLERANCE, 0}, +{159, 3209481421u, 3210320282u, 3222846521u, 0, ATAN2_TOLERANCE, 0}, +{160, 3209481421u, 3209481421u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{161, 3209481421u, 3208642560u, 3222584207u, 0, ATAN2_TOLERANCE, 0}, +{162, 3209481421u, 3207803699u, 3222440253u, 0, ATAN2_TOLERANCE, 0}, +{163, 3209481421u, 3206964838u, 3222287104u, 0, ATAN2_TOLERANCE, 0}, +{164, 3209481421u, 3206125978u, 3222124301u, 0, ATAN2_TOLERANCE, 0}, +{165, 3209481421u, 3205287117u, 3221951438u, 0, ATAN2_TOLERANCE, 0}, +{166, 3209481421u, 3204448256u, 3221768197u, 0, ATAN2_TOLERANCE, 0}, +{167, 3209481421u, 3202770534u, 3221574378u, 0, ATAN2_TOLERANCE, 0}, +{168, 3209481421u, 3201092813u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{169, 3209481421u, 3199415091u, 3221084600u, 0, ATAN2_TOLERANCE, 0}, +{170, 3209481421u, 3197737370u, 3220634637u, 0, ATAN2_TOLERANCE, 0}, +{171, 3209481421u, 3196059648u, 3220165833u, 0, ATAN2_TOLERANCE, 0}, +{172, 3209481421u, 3192704205u, 3219680081u, 0, ATAN2_TOLERANCE, 0}, +{173, 3209481421u, 3189348762u, 3219179862u, 0, ATAN2_TOLERANCE, 0}, +{174, 3209481421u, 3184315597u, 3218668216u, 0, ATAN2_TOLERANCE, 0}, +{175, 3209481421u, 3175926989u, 3218148658u, 0, ATAN2_TOLERANCE, 0}, +{176, 3209481421u, 1028443341u, 3217101444u, 0, ATAN2_TOLERANCE, 0}, +{177, 3209481421u, 1036831949u, 3216581885u, 0, ATAN2_TOLERANCE, 0}, +{178, 3209481421u, 1041865114u, 3216070239u, 0, ATAN2_TOLERANCE, 0}, +{179, 3209481421u, 1045220557u, 3215570021u, 0, ATAN2_TOLERANCE, 0}, +{180, 3209481421u, 1048576000u, 3215084268u, 0, ATAN2_TOLERANCE, 0}, +{181, 3209481421u, 1050253722u, 3214615464u, 0, ATAN2_TOLERANCE, 0}, +{182, 3209481421u, 1051931443u, 3214165501u, 0, ATAN2_TOLERANCE, 0}, +{183, 3209481421u, 1053609165u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{184, 3209481421u, 1055286886u, 3213326816u, 0, ATAN2_TOLERANCE, 0}, +{185, 3209481421u, 1056964608u, 3212939180u, 0, ATAN2_TOLERANCE, 0}, +{186, 3209481421u, 1057803469u, 3212308532u, 0, ATAN2_TOLERANCE, 0}, +{187, 3209481421u, 1058642330u, 3211617080u, 0, ATAN2_TOLERANCE, 0}, +{188, 3209481421u, 1059481190u, 3210965865u, 0, ATAN2_TOLERANCE, 0}, +{189, 3209481421u, 1060320051u, 3210353271u, 0, ATAN2_TOLERANCE, 0}, +{190, 3209481421u, 1061158912u, 3209777456u, 0, ATAN2_TOLERANCE, 0}, +{191, 3209481421u, 1061997773u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{192, 3209481421u, 1062836634u, 3208728198u, 0, ATAN2_TOLERANCE, 0}, +{193, 3209481421u, 1063675494u, 3208250684u, 0, ATAN2_TOLERANCE, 0}, +{194, 3209481421u, 1064514355u, 3207801902u, 0, ATAN2_TOLERANCE, 0}, +{195, 3208642560u, 3212836864u, 3223314619u, 0, ATAN2_TOLERANCE, 0}, +{196, 3208642560u, 3211998003u, 3223210650u, 0, ATAN2_TOLERANCE, 0}, +{197, 3208642560u, 3211159142u, 3223099715u, 0, ATAN2_TOLERANCE, 0}, +{198, 3208642560u, 3210320282u, 3222981263u, 0, ATAN2_TOLERANCE, 0}, +{199, 3208642560u, 3209481421u, 3222854713u, 0, ATAN2_TOLERANCE, 0}, +{200, 3208642560u, 3208642560u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{201, 3208642560u, 3207803699u, 3222574886u, 0, ATAN2_TOLERANCE, 0}, +{202, 3208642560u, 3206964838u, 3222420375u, 0, ATAN2_TOLERANCE, 0}, +{203, 3208642560u, 3206125978u, 3222255330u, 0, ATAN2_TOLERANCE, 0}, +{204, 3208642560u, 3205287117u, 3222079202u, 0, ATAN2_TOLERANCE, 0}, +{205, 3208642560u, 3204448256u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{206, 3208642560u, 3202770534u, 3221691945u, 0, ATAN2_TOLERANCE, 0}, +{207, 3208642560u, 3201092813u, 3221480291u, 0, ATAN2_TOLERANCE, 0}, +{208, 3208642560u, 3199415091u, 3221256608u, 0, ATAN2_TOLERANCE, 0}, +{209, 3208642560u, 3197737370u, 3220816969u, 0, ATAN2_TOLERANCE, 0}, +{210, 3208642560u, 3196059648u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{211, 3208642560u, 3192704205u, 3219811142u, 0, ATAN2_TOLERANCE, 0}, +{212, 3208642560u, 3189348762u, 3219280925u, 0, ATAN2_TOLERANCE, 0}, +{213, 3208642560u, 3184315597u, 3218736973u, 0, ATAN2_TOLERANCE, 0}, +{214, 3208642560u, 3175926989u, 3218183465u, 0, ATAN2_TOLERANCE, 0}, +{215, 3208642560u, 1028443341u, 3217066636u, 0, ATAN2_TOLERANCE, 0}, +{216, 3208642560u, 1036831949u, 3216513128u, 0, ATAN2_TOLERANCE, 0}, +{217, 3208642560u, 1041865114u, 3215969177u, 0, ATAN2_TOLERANCE, 0}, +{218, 3208642560u, 1045220557u, 3215438959u, 0, ATAN2_TOLERANCE, 0}, +{219, 3208642560u, 1048576000u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{220, 3208642560u, 1050253722u, 3214433132u, 0, ATAN2_TOLERANCE, 0}, +{221, 3208642560u, 1051931443u, 3213962357u, 0, ATAN2_TOLERANCE, 0}, +{222, 3208642560u, 1053609165u, 3213514991u, 0, ATAN2_TOLERANCE, 0}, +{223, 3208642560u, 1055286886u, 3213091683u, 0, ATAN2_TOLERANCE, 0}, +{224, 3208642560u, 1056964608u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{225, 3208642560u, 1057803469u, 3211797473u, 0, ATAN2_TOLERANCE, 0}, +{226, 3208642560u, 1058642330u, 3211092963u, 0, ATAN2_TOLERANCE, 0}, +{227, 3208642560u, 1059481190u, 3210432783u, 0, ATAN2_TOLERANCE, 0}, +{228, 3208642560u, 1060320051u, 3209814738u, 0, ATAN2_TOLERANCE, 0}, +{229, 3208642560u, 1061158912u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{230, 3208642560u, 1061997773u, 3208695430u, 0, ATAN2_TOLERANCE, 0}, +{231, 3208642560u, 1062836634u, 3208189229u, 0, ATAN2_TOLERANCE, 0}, +{232, 3208642560u, 1063675494u, 3207715422u, 0, ATAN2_TOLERANCE, 0}, +{233, 3208642560u, 1064514355u, 3207271684u, 0, ATAN2_TOLERANCE, 0}, +{234, 3207803699u, 3212836864u, 3223452088u, 0, ATAN2_TOLERANCE, 0}, +{235, 3207803699u, 3211998003u, 3223350163u, 0, ATAN2_TOLERANCE, 0}, +{236, 3207803699u, 3211159142u, 3223241043u, 0, ATAN2_TOLERANCE, 0}, +{237, 3207803699u, 3210320282u, 3223124100u, 0, ATAN2_TOLERANCE, 0}, +{238, 3207803699u, 3209481421u, 3222998667u, 0, ATAN2_TOLERANCE, 0}, +{239, 3207803699u, 3208642560u, 3222864034u, 0, ATAN2_TOLERANCE, 0}, +{240, 3207803699u, 3207803699u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{241, 3207803699u, 3206964838u, 3222564186u, 0, ATAN2_TOLERANCE, 0}, +{242, 3207803699u, 3206125978u, 3222397455u, 0, ATAN2_TOLERANCE, 0}, +{243, 3207803699u, 3205287117u, 3222218539u, 0, ATAN2_TOLERANCE, 0}, +{244, 3207803699u, 3204448256u, 3222026776u, 0, ATAN2_TOLERANCE, 0}, +{245, 3207803699u, 3202770534u, 3221821624u, 0, ATAN2_TOLERANCE, 0}, +{246, 3207803699u, 3201092813u, 3221602718u, 0, ATAN2_TOLERANCE, 0}, +{247, 3207803699u, 3199415091u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{248, 3207803699u, 3197737370u, 3221021529u, 0, ATAN2_TOLERANCE, 0}, +{249, 3207803699u, 3196059648u, 3220502544u, 0, ATAN2_TOLERANCE, 0}, +{250, 3207803699u, 3192704205u, 3219959597u, 0, ATAN2_TOLERANCE, 0}, +{251, 3207803699u, 3189348762u, 3219395830u, 0, ATAN2_TOLERANCE, 0}, +{252, 3207803699u, 3184315597u, 3218815369u, 0, ATAN2_TOLERANCE, 0}, +{253, 3207803699u, 3175926989u, 3218223221u, 0, ATAN2_TOLERANCE, 0}, +{254, 3207803699u, 1028443341u, 3217026880u, 0, ATAN2_TOLERANCE, 0}, +{255, 3207803699u, 1036831949u, 3216434732u, 0, ATAN2_TOLERANCE, 0}, +{256, 3207803699u, 1041865114u, 3215854271u, 0, ATAN2_TOLERANCE, 0}, +{257, 3207803699u, 1045220557u, 3215290504u, 0, ATAN2_TOLERANCE, 0}, +{258, 3207803699u, 1048576000u, 3214747557u, 0, ATAN2_TOLERANCE, 0}, +{259, 3207803699u, 1050253722u, 3214228572u, 0, ATAN2_TOLERANCE, 0}, +{260, 3207803699u, 1051931443u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{261, 3207803699u, 1053609165u, 3213270137u, 0, ATAN2_TOLERANCE, 0}, +{262, 3207803699u, 1055286886u, 3212827785u, 0, ATAN2_TOLERANCE, 0}, +{263, 3207803699u, 1056964608u, 3212007178u, 0, ATAN2_TOLERANCE, 0}, +{264, 3207803699u, 1057803469u, 3211240128u, 0, ATAN2_TOLERANCE, 0}, +{265, 3207803699u, 1058642330u, 3210524461u, 0, ATAN2_TOLERANCE, 0}, +{266, 3207803699u, 1059481190u, 3209857537u, 0, ATAN2_TOLERANCE, 0}, +{267, 3207803699u, 1060320051u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{268, 3207803699u, 1061158912u, 3208658147u, 0, ATAN2_TOLERANCE, 0}, +{269, 3207803699u, 1061997773u, 3208119614u, 0, ATAN2_TOLERANCE, 0}, +{270, 3207803699u, 1062836634u, 3207617881u, 0, ATAN2_TOLERANCE, 0}, +{271, 3207803699u, 1063675494u, 3207150112u, 0, ATAN2_TOLERANCE, 0}, +{272, 3207803699u, 1064514355u, 3206713629u, 0, ATAN2_TOLERANCE, 0}, +{273, 3206964838u, 3212836864u, 3223596166u, 0, ATAN2_TOLERANCE, 0}, +{274, 3206964838u, 3211998003u, 3223496866u, 0, ATAN2_TOLERANCE, 0}, +{275, 3206964838u, 3211159142u, 3223390184u, 0, ATAN2_TOLERANCE, 0}, +{276, 3206964838u, 3210320282u, 3223275421u, 0, ATAN2_TOLERANCE, 0}, +{277, 3206964838u, 3209481421u, 3223151816u, 0, ATAN2_TOLERANCE, 0}, +{278, 3206964838u, 3208642560u, 3223018545u, 0, ATAN2_TOLERANCE, 0}, +{279, 3206964838u, 3207803699u, 3222874734u, 0, ATAN2_TOLERANCE, 0}, +{280, 3206964838u, 3206964838u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{281, 3206964838u, 3206125978u, 3222551777u, 0, ATAN2_TOLERANCE, 0}, +{282, 3206964838u, 3205287117u, 3222370740u, 0, ATAN2_TOLERANCE, 0}, +{283, 3206964838u, 3204448256u, 3222175448u, 0, ATAN2_TOLERANCE, 0}, +{284, 3206964838u, 3202770534u, 3221965100u, 0, ATAN2_TOLERANCE, 0}, +{285, 3206964838u, 3201092813u, 3221739070u, 0, ATAN2_TOLERANCE, 0}, +{286, 3206964838u, 3199415091u, 3221497002u, 0, ATAN2_TOLERANCE, 0}, +{287, 3206964838u, 3197737370u, 3221238911u, 0, ATAN2_TOLERANCE, 0}, +{288, 3206964838u, 3196059648u, 3220705128u, 0, ATAN2_TOLERANCE, 0}, +{289, 3206964838u, 3192704205u, 3220129041u, 0, ATAN2_TOLERANCE, 0}, +{290, 3206964838u, 3189348762u, 3219527577u, 0, ATAN2_TOLERANCE, 0}, +{291, 3206964838u, 3184315597u, 3218905566u, 0, ATAN2_TOLERANCE, 0}, +{292, 3206964838u, 3175926989u, 3218269060u, 0, ATAN2_TOLERANCE, 0}, +{293, 3206964838u, 1028443341u, 3216981041u, 0, ATAN2_TOLERANCE, 0}, +{294, 3206964838u, 1036831949u, 3216344535u, 0, ATAN2_TOLERANCE, 0}, +{295, 3206964838u, 1041865114u, 3215722524u, 0, ATAN2_TOLERANCE, 0}, +{296, 3206964838u, 1045220557u, 3215121060u, 0, ATAN2_TOLERANCE, 0}, +{297, 3206964838u, 1048576000u, 3214544973u, 0, ATAN2_TOLERANCE, 0}, +{298, 3206964838u, 1050253722u, 3213997751u, 0, ATAN2_TOLERANCE, 0}, +{299, 3206964838u, 1051931443u, 3213481570u, 0, ATAN2_TOLERANCE, 0}, +{300, 3206964838u, 1053609165u, 3212997433u, 0, ATAN2_TOLERANCE, 0}, +{301, 3206964838u, 1055286886u, 3212253884u, 0, ATAN2_TOLERANCE, 0}, +{302, 3206964838u, 1056964608u, 3211412490u, 0, ATAN2_TOLERANCE, 0}, +{303, 3206964838u, 1057803469u, 3210631321u, 0, ATAN2_TOLERANCE, 0}, +{304, 3206964838u, 1058642330u, 3209907174u, 0, ATAN2_TOLERANCE, 0}, +{305, 3206964838u, 1059481190u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{306, 3206964838u, 1060320051u, 3208615348u, 0, ATAN2_TOLERANCE, 0}, +{307, 3206964838u, 1061158912u, 3208040102u, 0, ATAN2_TOLERANCE, 0}, +{308, 3206964838u, 1061997773u, 3207507020u, 0, ATAN2_TOLERANCE, 0}, +{309, 3206964838u, 1062836634u, 3207012597u, 0, ATAN2_TOLERANCE, 0}, +{310, 3206964838u, 1063675494u, 3206553546u, 0, ATAN2_TOLERANCE, 0}, +{311, 3206964838u, 1064514355u, 3206126820u, 0, ATAN2_TOLERANCE, 0}, +{312, 3206125978u, 3212836864u, 3223746975u, 0, ATAN2_TOLERANCE, 0}, +{313, 3206125978u, 3211998003u, 3223650939u, 0, ATAN2_TOLERANCE, 0}, +{314, 3206125978u, 3211159142u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{315, 3206125978u, 3210320282u, 3223435575u, 0, ATAN2_TOLERANCE, 0}, +{316, 3206125978u, 3209481421u, 3223314619u, 0, ATAN2_TOLERANCE, 0}, +{317, 3206125978u, 3208642560u, 3223183590u, 0, ATAN2_TOLERANCE, 0}, +{318, 3206125978u, 3207803699u, 3223041465u, 0, ATAN2_TOLERANCE, 0}, +{319, 3206125978u, 3206964838u, 3222887143u, 0, ATAN2_TOLERANCE, 0}, +{320, 3206125978u, 3206125978u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{321, 3206125978u, 3205287117u, 3222537214u, 0, ATAN2_TOLERANCE, 0}, +{322, 3206125978u, 3204448256u, 3222339205u, 0, ATAN2_TOLERANCE, 0}, +{323, 3206125978u, 3202770534u, 3222124301u, 0, ATAN2_TOLERANCE, 0}, +{324, 3206125978u, 3201092813u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{325, 3206125978u, 3199415091u, 3221640166u, 0, ATAN2_TOLERANCE, 0}, +{326, 3206125978u, 3197737370u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{327, 3206125978u, 3196059648u, 3220936799u, 0, ATAN2_TOLERANCE, 0}, +{328, 3206125978u, 3192704205u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{329, 3206125978u, 3189348762u, 3219680081u, 0, ATAN2_TOLERANCE, 0}, +{330, 3206125978u, 3184315597u, 3219010418u, 0, ATAN2_TOLERANCE, 0}, +{331, 3206125978u, 3175926989u, 3218322490u, 0, ATAN2_TOLERANCE, 0}, +{332, 3206125978u, 1028443341u, 3216927611u, 0, ATAN2_TOLERANCE, 0}, +{333, 3206125978u, 1036831949u, 3216239683u, 0, ATAN2_TOLERANCE, 0}, +{334, 3206125978u, 1041865114u, 3215570021u, 0, ATAN2_TOLERANCE, 0}, +{335, 3206125978u, 1045220557u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{336, 3206125978u, 1048576000u, 3214313303u, 0, ATAN2_TOLERANCE, 0}, +{337, 3206125978u, 1050253722u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{338, 3206125978u, 1051931443u, 3213195241u, 0, ATAN2_TOLERANCE, 0}, +{339, 3206125978u, 1053609165u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{340, 3206125978u, 1055286886u, 3211617080u, 0, ATAN2_TOLERANCE, 0}, +{341, 3206125978u, 1056964608u, 3210757463u, 0, ATAN2_TOLERANCE, 0}, +{342, 3206125978u, 1057803469u, 3209965428u, 0, ATAN2_TOLERANCE, 0}, +{343, 3206125978u, 1058642330u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{344, 3206125978u, 1059481190u, 3208565712u, 0, ATAN2_TOLERANCE, 0}, +{345, 3206125978u, 1060320051u, 3207948424u, 0, ATAN2_TOLERANCE, 0}, +{346, 3206125978u, 1061158912u, 3207379923u, 0, ATAN2_TOLERANCE, 0}, +{347, 3206125978u, 1061997773u, 3206855805u, 0, ATAN2_TOLERANCE, 0}, +{348, 3206125978u, 1062836634u, 3206371981u, 0, ATAN2_TOLERANCE, 0}, +{349, 3206125978u, 1063675494u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{350, 3206125978u, 1064514355u, 3205510527u, 0, ATAN2_TOLERANCE, 0}, +{351, 3205287117u, 3212836864u, 3223904581u, 0, ATAN2_TOLERANCE, 0}, +{352, 3205287117u, 3211998003u, 3223812506u, 0, ATAN2_TOLERANCE, 0}, +{353, 3205287117u, 3211159142u, 3223712876u, 0, ATAN2_TOLERANCE, 0}, +{354, 3205287117u, 3210320282u, 3223604850u, 0, ATAN2_TOLERANCE, 0}, +{355, 3205287117u, 3209481421u, 3223487482u, 0, ATAN2_TOLERANCE, 0}, +{356, 3205287117u, 3208642560u, 3223359718u, 0, ATAN2_TOLERANCE, 0}, +{357, 3205287117u, 3207803699u, 3223220381u, 0, ATAN2_TOLERANCE, 0}, +{358, 3205287117u, 3206964838u, 3223068180u, 0, ATAN2_TOLERANCE, 0}, +{359, 3205287117u, 3206125978u, 3222901706u, 0, ATAN2_TOLERANCE, 0}, +{360, 3205287117u, 3205287117u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{361, 3205287117u, 3204448256u, 3222519882u, 0, ATAN2_TOLERANCE, 0}, +{362, 3205287117u, 3202770534u, 3222301419u, 0, ATAN2_TOLERANCE, 0}, +{363, 3205287117u, 3201092813u, 3222062624u, 0, ATAN2_TOLERANCE, 0}, +{364, 3205287117u, 3199415091u, 3221802296u, 0, ATAN2_TOLERANCE, 0}, +{365, 3205287117u, 3197737370u, 3221519673u, 0, ATAN2_TOLERANCE, 0}, +{366, 3205287117u, 3196059648u, 3221203861u, 0, ATAN2_TOLERANCE, 0}, +{367, 3205287117u, 3192704205u, 3220550754u, 0, ATAN2_TOLERANCE, 0}, +{368, 3205287117u, 3189348762u, 3219858535u, 0, ATAN2_TOLERANCE, 0}, +{369, 3205287117u, 3184315597u, 3219133771u, 0, ATAN2_TOLERANCE, 0}, +{370, 3205287117u, 3175926989u, 3218385561u, 0, ATAN2_TOLERANCE, 0}, +{371, 3205287117u, 1028443341u, 3216864540u, 0, ATAN2_TOLERANCE, 0}, +{372, 3205287117u, 1036831949u, 3216116330u, 0, ATAN2_TOLERANCE, 0}, +{373, 3205287117u, 1041865114u, 3215391567u, 0, ATAN2_TOLERANCE, 0}, +{374, 3205287117u, 1045220557u, 3214699347u, 0, ATAN2_TOLERANCE, 0}, +{375, 3205287117u, 1048576000u, 3214046240u, 0, ATAN2_TOLERANCE, 0}, +{376, 3205287117u, 1050253722u, 3213436227u, 0, ATAN2_TOLERANCE, 0}, +{377, 3205287117u, 1051931443u, 3212870981u, 0, ATAN2_TOLERANCE, 0}, +{378, 3205287117u, 1053609165u, 3211863786u, 0, ATAN2_TOLERANCE, 0}, +{379, 3205287117u, 1055286886u, 3210908605u, 0, ATAN2_TOLERANCE, 0}, +{380, 3205287117u, 1056964608u, 3210034755u, 0, ATAN2_TOLERANCE, 0}, +{381, 3205287117u, 1057803469u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{382, 3205287117u, 1058642330u, 3208507458u, 0, ATAN2_TOLERANCE, 0}, +{383, 3205287117u, 1059481190u, 3207841564u, 0, ATAN2_TOLERANCE, 0}, +{384, 3205287117u, 1060320051u, 3207232758u, 0, ATAN2_TOLERANCE, 0}, +{385, 3205287117u, 1061158912u, 3206675412u, 0, ATAN2_TOLERANCE, 0}, +{386, 3205287117u, 1061997773u, 3206164353u, 0, ATAN2_TOLERANCE, 0}, +{387, 3205287117u, 1062836634u, 3205694884u, 0, ATAN2_TOLERANCE, 0}, +{388, 3205287117u, 1063675494u, 3205262780u, 0, ATAN2_TOLERANCE, 0}, +{389, 3205287117u, 1064514355u, 3204864260u, 0, ATAN2_TOLERANCE, 0}, +{390, 3204448256u, 3212836864u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{391, 3204448256u, 3211998003u, 3223981611u, 0, ATAN2_TOLERANCE, 0}, +{392, 3204448256u, 3211159142u, 3223886733u, 0, ATAN2_TOLERANCE, 0}, +{393, 3204448256u, 3210320282u, 3223783446u, 0, ATAN2_TOLERANCE, 0}, +{394, 3204448256u, 3209481421u, 3223670723u, 0, ATAN2_TOLERANCE, 0}, +{395, 3204448256u, 3208642560u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{396, 3204448256u, 3207803699u, 3223412144u, 0, ATAN2_TOLERANCE, 0}, +{397, 3204448256u, 3206964838u, 3223263472u, 0, ATAN2_TOLERANCE, 0}, +{398, 3204448256u, 3206125978u, 3223099715u, 0, ATAN2_TOLERANCE, 0}, +{399, 3204448256u, 3205287117u, 3222919038u, 0, ATAN2_TOLERANCE, 0}, +{400, 3204448256u, 3204448256u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{401, 3204448256u, 3202770534u, 3222498911u, 0, ATAN2_TOLERANCE, 0}, +{402, 3204448256u, 3201092813u, 3222255330u, 0, ATAN2_TOLERANCE, 0}, +{403, 3204448256u, 3199415091u, 3221986832u, 0, ATAN2_TOLERANCE, 0}, +{404, 3204448256u, 3197737370u, 3221691945u, 0, ATAN2_TOLERANCE, 0}, +{405, 3204448256u, 3196059648u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{406, 3204448256u, 3192704205u, 3220816969u, 0, ATAN2_TOLERANCE, 0}, +{407, 3204448256u, 3189348762u, 3220069967u, 0, ATAN2_TOLERANCE, 0}, +{408, 3204448256u, 3184315597u, 3219280925u, 0, ATAN2_TOLERANCE, 0}, +{409, 3204448256u, 3175926989u, 3218461132u, 0, ATAN2_TOLERANCE, 0}, +{410, 3204448256u, 1028443341u, 3216788969u, 0, ATAN2_TOLERANCE, 0}, +{411, 3204448256u, 1036831949u, 3215969177u, 0, ATAN2_TOLERANCE, 0}, +{412, 3204448256u, 1041865114u, 3215180134u, 0, ATAN2_TOLERANCE, 0}, +{413, 3204448256u, 1045220557u, 3214433132u, 0, ATAN2_TOLERANCE, 0}, +{414, 3204448256u, 1048576000u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{415, 3204448256u, 1050253722u, 3213091683u, 0, ATAN2_TOLERANCE, 0}, +{416, 3204448256u, 1051931443u, 3212166956u, 0, ATAN2_TOLERANCE, 0}, +{417, 3204448256u, 1053609165u, 3211092963u, 0, ATAN2_TOLERANCE, 0}, +{418, 3204448256u, 1055286886u, 3210118640u, 0, ATAN2_TOLERANCE, 0}, +{419, 3204448256u, 1056964608u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{420, 3204448256u, 1057803469u, 3208438131u, 0, ATAN2_TOLERANCE, 0}, +{421, 3204448256u, 1058642330u, 3207715422u, 0, ATAN2_TOLERANCE, 0}, +{422, 3204448256u, 1059481190u, 3207060395u, 0, ATAN2_TOLERANCE, 0}, +{423, 3204448256u, 1060320051u, 3206465708u, 0, ATAN2_TOLERANCE, 0}, +{424, 3204448256u, 1061158912u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{425, 3204448256u, 1061997773u, 3205431389u, 0, ATAN2_TOLERANCE, 0}, +{426, 3204448256u, 1062836634u, 3204980498u, 0, ATAN2_TOLERANCE, 0}, +{427, 3204448256u, 1063675494u, 3204567349u, 0, ATAN2_TOLERANCE, 0}, +{428, 3204448256u, 1064514355u, 3203927422u, 0, ATAN2_TOLERANCE, 0}, +{429, 3202770534u, 3212836864u, 3224240081u, 0, ATAN2_TOLERANCE, 0}, +{430, 3202770534u, 3211998003u, 3224158207u, 0, ATAN2_TOLERANCE, 0}, +{431, 3202770534u, 3211159142u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{432, 3202770534u, 3210320282u, 3223971455u, 0, ATAN2_TOLERANCE, 0}, +{433, 3202770534u, 3209481421u, 3223864541u, 0, ATAN2_TOLERANCE, 0}, +{434, 3202770534u, 3208642560u, 3223746975u, 0, ATAN2_TOLERANCE, 0}, +{435, 3202770534u, 3207803699u, 3223617296u, 0, ATAN2_TOLERANCE, 0}, +{436, 3202770534u, 3206964838u, 3223473820u, 0, ATAN2_TOLERANCE, 0}, +{437, 3202770534u, 3206125978u, 3223314619u, 0, ATAN2_TOLERANCE, 0}, +{438, 3202770534u, 3205287117u, 3223137501u, 0, ATAN2_TOLERANCE, 0}, +{439, 3202770534u, 3204448256u, 3222940009u, 0, ATAN2_TOLERANCE, 0}, +{440, 3202770534u, 3202770534u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{441, 3202770534u, 3201092813u, 3222473020u, 0, ATAN2_TOLERANCE, 0}, +{442, 3202770534u, 3199415091u, 3222197877u, 0, ATAN2_TOLERANCE, 0}, +{443, 3202770534u, 3197737370u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{444, 3202770534u, 3196059648u, 3221552187u, 0, ATAN2_TOLERANCE, 0}, +{445, 3202770534u, 3192704205u, 3221133371u, 0, ATAN2_TOLERANCE, 0}, +{446, 3202770534u, 3189348762u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{447, 3202770534u, 3184315597u, 3219459379u, 0, ATAN2_TOLERANCE, 0}, +{448, 3202770534u, 3175926989u, 3218553311u, 0, ATAN2_TOLERANCE, 0}, +{449, 3202770534u, 1028443341u, 3216696791u, 0, ATAN2_TOLERANCE, 0}, +{450, 3202770534u, 1036831949u, 3215790723u, 0, ATAN2_TOLERANCE, 0}, +{451, 3202770534u, 1041865114u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{452, 3202770534u, 1045220557u, 3214116731u, 0, ATAN2_TOLERANCE, 0}, +{453, 3202770534u, 1048576000u, 3213371200u, 0, ATAN2_TOLERANCE, 0}, +{454, 3202770534u, 1050253722u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{455, 3202770534u, 1051931443u, 3211322773u, 0, ATAN2_TOLERANCE, 0}, +{456, 3202770534u, 1053609165u, 3210222202u, 0, ATAN2_TOLERANCE, 0}, +{457, 3202770534u, 1055286886u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{458, 3202770534u, 1056964608u, 3208354245u, 0, ATAN2_TOLERANCE, 0}, +{459, 3202770534u, 1057803469u, 3207564280u, 0, ATAN2_TOLERANCE, 0}, +{460, 3202770534u, 1058642330u, 3206855805u, 0, ATAN2_TOLERANCE, 0}, +{461, 3202770534u, 1059481190u, 3206219002u, 0, ATAN2_TOLERANCE, 0}, +{462, 3202770534u, 1060320051u, 3205645100u, 0, ATAN2_TOLERANCE, 0}, +{463, 3202770534u, 1061158912u, 3205126383u, 0, ATAN2_TOLERANCE, 0}, +{464, 3202770534u, 1061997773u, 3204656117u, 0, ATAN2_TOLERANCE, 0}, +{465, 3202770534u, 1062836634u, 3204008667u, 0, ATAN2_TOLERANCE, 0}, +{466, 3202770534u, 1063675494u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{467, 3202770534u, 1064514355u, 3202514656u, 0, ATAN2_TOLERANCE, 0}, +{468, 3201092813u, 3212836864u, 3224417699u, 0, ATAN2_TOLERANCE, 0}, +{469, 3201092813u, 3211998003u, 3224342134u, 0, ATAN2_TOLERANCE, 0}, +{470, 3201092813u, 3211159142u, 3224259499u, 0, ATAN2_TOLERANCE, 0}, +{471, 3201092813u, 3210320282u, 3224168825u, 0, ATAN2_TOLERANCE, 0}, +{472, 3201092813u, 3209481421u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{473, 3201092813u, 3208642560u, 3223958629u, 0, ATAN2_TOLERANCE, 0}, +{474, 3201092813u, 3207803699u, 3223836202u, 0, ATAN2_TOLERANCE, 0}, +{475, 3201092813u, 3206964838u, 3223699850u, 0, ATAN2_TOLERANCE, 0}, +{476, 3201092813u, 3206125978u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{477, 3201092813u, 3205287117u, 3223376296u, 0, ATAN2_TOLERANCE, 0}, +{478, 3201092813u, 3204448256u, 3223183590u, 0, ATAN2_TOLERANCE, 0}, +{479, 3201092813u, 3202770534u, 3222965900u, 0, ATAN2_TOLERANCE, 0}, +{480, 3201092813u, 3201092813u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{481, 3201092813u, 3199415091u, 3222440253u, 0, ATAN2_TOLERANCE, 0}, +{482, 3201092813u, 3197737370u, 3222124301u, 0, ATAN2_TOLERANCE, 0}, +{483, 3201092813u, 3196059648u, 3221768197u, 0, ATAN2_TOLERANCE, 0}, +{484, 3201092813u, 3192704205u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{485, 3201092813u, 3189348762u, 3220634637u, 0, ATAN2_TOLERANCE, 0}, +{486, 3201092813u, 3184315597u, 3219680081u, 0, ATAN2_TOLERANCE, 0}, +{487, 3201092813u, 3175926989u, 3218668216u, 0, ATAN2_TOLERANCE, 0}, +{488, 3201092813u, 1028443341u, 3216581885u, 0, ATAN2_TOLERANCE, 0}, +{489, 3201092813u, 1036831949u, 3215570021u, 0, ATAN2_TOLERANCE, 0}, +{490, 3201092813u, 1041865114u, 3214615464u, 0, ATAN2_TOLERANCE, 0}, +{491, 3201092813u, 1045220557u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{492, 3201092813u, 1048576000u, 3212939180u, 0, ATAN2_TOLERANCE, 0}, +{493, 3201092813u, 1050253722u, 3211617080u, 0, ATAN2_TOLERANCE, 0}, +{494, 3201092813u, 1051931443u, 3210353271u, 0, ATAN2_TOLERANCE, 0}, +{495, 3201092813u, 1053609165u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{496, 3201092813u, 1055286886u, 3208250684u, 0, ATAN2_TOLERANCE, 0}, +{497, 3201092813u, 1056964608u, 3207379923u, 0, ATAN2_TOLERANCE, 0}, +{498, 3201092813u, 1057803469u, 3206609099u, 0, ATAN2_TOLERANCE, 0}, +{499, 3201092813u, 1058642330u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{500, 3201092813u, 1059481190u, 3205314883u, 0, ATAN2_TOLERANCE, 0}, +{501, 3201092813u, 1060320051u, 3204769474u, 0, ATAN2_TOLERANCE, 0}, +{502, 3201092813u, 1061158912u, 3204111280u, 0, ATAN2_TOLERANCE, 0}, +{503, 3201092813u, 1061997773u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{504, 3201092813u, 1062836634u, 3202429708u, 0, ATAN2_TOLERANCE, 0}, +{505, 3201092813u, 1063675494u, 3201704320u, 0, ATAN2_TOLERANCE, 0}, +{506, 3201092813u, 1064514355u, 3201043234u, 0, ATAN2_TOLERANCE, 0}, +{507, 3199415091u, 3212836864u, 3224601542u, 0, ATAN2_TOLERANCE, 0}, +{508, 3199415091u, 3211998003u, 3224533110u, 0, ATAN2_TOLERANCE, 0}, +{509, 3199415091u, 3211159142u, 3224458028u, 0, ATAN2_TOLERANCE, 0}, +{510, 3199415091u, 3210320282u, 3224375334u, 0, ATAN2_TOLERANCE, 0}, +{511, 3199415091u, 3209481421u, 3224283884u, 0, ATAN2_TOLERANCE, 0}, +{512, 3199415091u, 3208642560u, 3224182312u, 0, ATAN2_TOLERANCE, 0}, +{513, 3199415091u, 3207803699u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{514, 3199415091u, 3206964838u, 3223941918u, 0, ATAN2_TOLERANCE, 0}, +{515, 3199415091u, 3206125978u, 3223798754u, 0, ATAN2_TOLERANCE, 0}, +{516, 3199415091u, 3205287117u, 3223636624u, 0, ATAN2_TOLERANCE, 0}, +{517, 3199415091u, 3204448256u, 3223452088u, 0, ATAN2_TOLERANCE, 0}, +{518, 3199415091u, 3202770534u, 3223241043u, 0, ATAN2_TOLERANCE, 0}, +{519, 3199415091u, 3201092813u, 3222998667u, 0, ATAN2_TOLERANCE, 0}, +{520, 3199415091u, 3199415091u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{521, 3199415091u, 3197737370u, 3222397455u, 0, ATAN2_TOLERANCE, 0}, +{522, 3199415091u, 3196059648u, 3222026776u, 0, ATAN2_TOLERANCE, 0}, +{523, 3199415091u, 3192704205u, 3221602718u, 0, ATAN2_TOLERANCE, 0}, +{524, 3199415091u, 3189348762u, 3221021529u, 0, ATAN2_TOLERANCE, 0}, +{525, 3199415091u, 3184315597u, 3219959597u, 0, ATAN2_TOLERANCE, 0}, +{526, 3199415091u, 3175926989u, 3218815369u, 0, ATAN2_TOLERANCE, 0}, +{527, 3199415091u, 1028443341u, 3216434732u, 0, ATAN2_TOLERANCE, 0}, +{528, 3199415091u, 1036831949u, 3215290504u, 0, ATAN2_TOLERANCE, 0}, +{529, 3199415091u, 1041865114u, 3214228572u, 0, ATAN2_TOLERANCE, 0}, +{530, 3199415091u, 1045220557u, 3213270137u, 0, ATAN2_TOLERANCE, 0}, +{531, 3199415091u, 1048576000u, 3212007178u, 0, ATAN2_TOLERANCE, 0}, +{532, 3199415091u, 1050253722u, 3210524461u, 0, ATAN2_TOLERANCE, 0}, +{533, 3199415091u, 1051931443u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{534, 3199415091u, 1053609165u, 3208119614u, 0, ATAN2_TOLERANCE, 0}, +{535, 3199415091u, 1055286886u, 3207150112u, 0, ATAN2_TOLERANCE, 0}, +{536, 3199415091u, 1056964608u, 3206305929u, 0, ATAN2_TOLERANCE, 0}, +{537, 3199415091u, 1057803469u, 3205567786u, 0, ATAN2_TOLERANCE, 0}, +{538, 3199415091u, 1058642330u, 3204919267u, 0, ATAN2_TOLERANCE, 0}, +{539, 3199415091u, 1059481190u, 3204244962u, 0, ATAN2_TOLERANCE, 0}, +{540, 3199415091u, 1060320051u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{541, 3199415091u, 1061158912u, 3202321816u, 0, ATAN2_TOLERANCE, 0}, +{542, 3199415091u, 1061997773u, 3201509238u, 0, ATAN2_TOLERANCE, 0}, +{543, 3199415091u, 1062836634u, 3200777637u, 0, ATAN2_TOLERANCE, 0}, +{544, 3199415091u, 1063675494u, 3200116087u, 0, ATAN2_TOLERANCE, 0}, +{545, 3199415091u, 1064514355u, 3199515432u, 0, ATAN2_TOLERANCE, 0}, +{546, 3197737370u, 3212836864u, 3224791200u, 0, ATAN2_TOLERANCE, 0}, +{547, 3197737370u, 3211998003u, 3224730710u, 0, ATAN2_TOLERANCE, 0}, +{548, 3197737370u, 3211159142u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{549, 3197737370u, 3210320282u, 3224590562u, 0, ATAN2_TOLERANCE, 0}, +{550, 3197737370u, 3209481421u, 3224508865u, 0, ATAN2_TOLERANCE, 0}, +{551, 3197737370u, 3208642560u, 3224417699u, 0, ATAN2_TOLERANCE, 0}, +{552, 3197737370u, 3207803699u, 3224315419u, 0, ATAN2_TOLERANCE, 0}, +{553, 3197737370u, 3206964838u, 3224200009u, 0, ATAN2_TOLERANCE, 0}, +{554, 3197737370u, 3206125978u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{555, 3197737370u, 3205287117u, 3223919247u, 0, ATAN2_TOLERANCE, 0}, +{556, 3197737370u, 3204448256u, 3223746975u, 0, ATAN2_TOLERANCE, 0}, +{557, 3197737370u, 3202770534u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{558, 3197737370u, 3201092813u, 3223314619u, 0, ATAN2_TOLERANCE, 0}, +{559, 3197737370u, 3199415091u, 3223041465u, 0, ATAN2_TOLERANCE, 0}, +{560, 3197737370u, 3197737370u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{561, 3197737370u, 3196059648u, 3222339205u, 0, ATAN2_TOLERANCE, 0}, +{562, 3197737370u, 3192704205u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{563, 3197737370u, 3189348762u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{564, 3197737370u, 3184315597u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{565, 3197737370u, 3175926989u, 3219010418u, 0, ATAN2_TOLERANCE, 0}, +{566, 3197737370u, 1028443341u, 3216239683u, 0, ATAN2_TOLERANCE, 0}, +{567, 3197737370u, 1036831949u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{568, 3197737370u, 1041865114u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{569, 3197737370u, 1045220557u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{570, 3197737370u, 1048576000u, 3210757463u, 0, ATAN2_TOLERANCE, 0}, +{571, 3197737370u, 1050253722u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{572, 3197737370u, 1051931443u, 3207948424u, 0, ATAN2_TOLERANCE, 0}, +{573, 3197737370u, 1053609165u, 3206855805u, 0, ATAN2_TOLERANCE, 0}, +{574, 3197737370u, 1055286886u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{575, 3197737370u, 1056964608u, 3205126383u, 0, ATAN2_TOLERANCE, 0}, +{576, 3197737370u, 1057803469u, 3204426336u, 0, ATAN2_TOLERANCE, 0}, +{577, 3197737370u, 1058642330u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{578, 3197737370u, 1059481190u, 3202180237u, 0, ATAN2_TOLERANCE, 0}, +{579, 3197737370u, 1060320051u, 3201256954u, 0, ATAN2_TOLERANCE, 0}, +{580, 3197737370u, 1061158912u, 3200438715u, 0, ATAN2_TOLERANCE, 0}, +{581, 3197737370u, 1061997773u, 3199709386u, 0, ATAN2_TOLERANCE, 0}, +{582, 3197737370u, 1062836634u, 3199055811u, 0, ATAN2_TOLERANCE, 0}, +{583, 3197737370u, 1063675494u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{584, 3197737370u, 1064514355u, 3197934632u, 0, ATAN2_TOLERANCE, 0}, +{585, 3196059648u, 3212836864u, 3224986144u, 0, ATAN2_TOLERANCE, 0}, +{586, 3196059648u, 3211998003u, 3224934365u, 0, ATAN2_TOLERANCE, 0}, +{587, 3196059648u, 3211159142u, 3224877225u, 0, ATAN2_TOLERANCE, 0}, +{588, 3196059648u, 3210320282u, 3224813872u, 0, ATAN2_TOLERANCE, 0}, +{589, 3196059648u, 3209481421u, 3224743267u, 0, ATAN2_TOLERANCE, 0}, +{590, 3196059648u, 3208642560u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{591, 3196059648u, 3207803699u, 3224574912u, 0, ATAN2_TOLERANCE, 0}, +{592, 3196059648u, 3206964838u, 3224473620u, 0, ATAN2_TOLERANCE, 0}, +{593, 3196059648u, 3206125978u, 3224357785u, 0, ATAN2_TOLERANCE, 0}, +{594, 3196059648u, 3205287117u, 3224224253u, 0, ATAN2_TOLERANCE, 0}, +{595, 3196059648u, 3204448256u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{596, 3196059648u, 3202770534u, 3223886733u, 0, ATAN2_TOLERANCE, 0}, +{597, 3196059648u, 3201092813u, 3223670723u, 0, ATAN2_TOLERANCE, 0}, +{598, 3196059648u, 3199415091u, 3223412144u, 0, ATAN2_TOLERANCE, 0}, +{599, 3196059648u, 3197737370u, 3223099715u, 0, ATAN2_TOLERANCE, 0}, +{600, 3196059648u, 3196059648u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{601, 3196059648u, 3192704205u, 3222255330u, 0, ATAN2_TOLERANCE, 0}, +{602, 3196059648u, 3189348762u, 3221691945u, 0, ATAN2_TOLERANCE, 0}, +{603, 3196059648u, 3184315597u, 3220816969u, 0, ATAN2_TOLERANCE, 0}, +{604, 3196059648u, 3175926989u, 3219280925u, 0, ATAN2_TOLERANCE, 0}, +{605, 3196059648u, 1028443341u, 3215969177u, 0, ATAN2_TOLERANCE, 0}, +{606, 3196059648u, 1036831949u, 3214433132u, 0, ATAN2_TOLERANCE, 0}, +{607, 3196059648u, 1041865114u, 3213091683u, 0, ATAN2_TOLERANCE, 0}, +{608, 3196059648u, 1045220557u, 3211092963u, 0, ATAN2_TOLERANCE, 0}, +{609, 3196059648u, 1048576000u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{610, 3196059648u, 1050253722u, 3207715422u, 0, ATAN2_TOLERANCE, 0}, +{611, 3196059648u, 1051931443u, 3206465708u, 0, ATAN2_TOLERANCE, 0}, +{612, 3196059648u, 1053609165u, 3205431389u, 0, ATAN2_TOLERANCE, 0}, +{613, 3196059648u, 1055286886u, 3204567349u, 0, ATAN2_TOLERANCE, 0}, +{614, 3196059648u, 1056964608u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{615, 3196059648u, 1057803469u, 3201986283u, 0, ATAN2_TOLERANCE, 0}, +{616, 3196059648u, 1058642330u, 3200918032u, 0, ATAN2_TOLERANCE, 0}, +{617, 3196059648u, 1059481190u, 3199991349u, 0, ATAN2_TOLERANCE, 0}, +{618, 3196059648u, 1060320051u, 3199181013u, 0, ATAN2_TOLERANCE, 0}, +{619, 3196059648u, 1061158912u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{620, 3196059648u, 1061997773u, 3197834170u, 0, ATAN2_TOLERANCE, 0}, +{621, 3196059648u, 1062836634u, 3197269334u, 0, ATAN2_TOLERANCE, 0}, +{622, 3196059648u, 1063675494u, 3196762508u, 0, ATAN2_TOLERANCE, 0}, +{623, 3196059648u, 1064514355u, 3196305391u, 0, ATAN2_TOLERANCE, 0}, +{624, 3192704205u, 3212836864u, 3225185722u, 0, ATAN2_TOLERANCE, 0}, +{625, 3192704205u, 3211998003u, 3225143356u, 0, ATAN2_TOLERANCE, 0}, +{626, 3192704205u, 3211159142u, 3225096495u, 0, ATAN2_TOLERANCE, 0}, +{627, 3192704205u, 3210320282u, 3225044394u, 0, ATAN2_TOLERANCE, 0}, +{628, 3192704205u, 3209481421u, 3224986144u, 0, ATAN2_TOLERANCE, 0}, +{629, 3192704205u, 3208642560u, 3224920613u, 0, ATAN2_TOLERANCE, 0}, +{630, 3192704205u, 3207803699u, 3224846385u, 0, ATAN2_TOLERANCE, 0}, +{631, 3192704205u, 3206964838u, 3224761663u, 0, ATAN2_TOLERANCE, 0}, +{632, 3192704205u, 3206125978u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{633, 3192704205u, 3205287117u, 3224550807u, 0, ATAN2_TOLERANCE, 0}, +{634, 3192704205u, 3204448256u, 3224417699u, 0, ATAN2_TOLERANCE, 0}, +{635, 3192704205u, 3202770534u, 3224259499u, 0, ATAN2_TOLERANCE, 0}, +{636, 3192704205u, 3201092813u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{637, 3192704205u, 3199415091u, 3223836202u, 0, ATAN2_TOLERANCE, 0}, +{638, 3192704205u, 3197737370u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{639, 3192704205u, 3196059648u, 3223183590u, 0, ATAN2_TOLERANCE, 0}, +{640, 3192704205u, 3192704205u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{641, 3192704205u, 3189348762u, 3222124301u, 0, ATAN2_TOLERANCE, 0}, +{642, 3192704205u, 3184315597u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{643, 3192704205u, 3175926989u, 3219680081u, 0, ATAN2_TOLERANCE, 0}, +{644, 3192704205u, 1028443341u, 3215570021u, 0, ATAN2_TOLERANCE, 0}, +{645, 3192704205u, 1036831949u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{646, 3192704205u, 1041865114u, 3211617080u, 0, ATAN2_TOLERANCE, 0}, +{647, 3192704205u, 1045220557u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{648, 3192704205u, 1048576000u, 3207379923u, 0, ATAN2_TOLERANCE, 0}, +{649, 3192704205u, 1050253722u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{650, 3192704205u, 1051931443u, 3204769474u, 0, ATAN2_TOLERANCE, 0}, +{651, 3192704205u, 1053609165u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{652, 3192704205u, 1055286886u, 3201704320u, 0, ATAN2_TOLERANCE, 0}, +{653, 3192704205u, 1056964608u, 3200438715u, 0, ATAN2_TOLERANCE, 0}, +{654, 3192704205u, 1057803469u, 3199373853u, 0, ATAN2_TOLERANCE, 0}, +{655, 3192704205u, 1058642330u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{656, 3192704205u, 1059481190u, 3197687002u, 0, ATAN2_TOLERANCE, 0}, +{657, 3192704205u, 1060320051u, 3197009227u, 0, ATAN2_TOLERANCE, 0}, +{658, 3192704205u, 1061158912u, 3196415405u, 0, ATAN2_TOLERANCE, 0}, +{659, 3192704205u, 1061997773u, 3195722672u, 0, ATAN2_TOLERANCE, 0}, +{660, 3192704205u, 1062836634u, 3194790664u, 0, ATAN2_TOLERANCE, 0}, +{661, 3192704205u, 1063675494u, 3193957057u, 0, ATAN2_TOLERANCE, 0}, +{662, 3192704205u, 1064514355u, 3193207268u, 0, ATAN2_TOLERANCE, 0}, +{663, 3189348762u, 3212836864u, 3225389169u, 0, ATAN2_TOLERANCE, 0}, +{664, 3189348762u, 3211998003u, 3225356823u, 0, ATAN2_TOLERANCE, 0}, +{665, 3189348762u, 3211159142u, 3225320975u, 0, ATAN2_TOLERANCE, 0}, +{666, 3189348762u, 3210320282u, 3225281030u, 0, ATAN2_TOLERANCE, 0}, +{667, 3189348762u, 3209481421u, 3225236253u, 0, ATAN2_TOLERANCE, 0}, +{668, 3189348762u, 3208642560u, 3225185722u, 0, ATAN2_TOLERANCE, 0}, +{669, 3189348762u, 3207803699u, 3225128269u, 0, ATAN2_TOLERANCE, 0}, +{670, 3189348762u, 3206964838u, 3225062395u, 0, ATAN2_TOLERANCE, 0}, +{671, 3189348762u, 3206125978u, 3224986144u, 0, ATAN2_TOLERANCE, 0}, +{672, 3189348762u, 3205287117u, 3224896917u, 0, ATAN2_TOLERANCE, 0}, +{673, 3189348762u, 3204448256u, 3224791200u, 0, ATAN2_TOLERANCE, 0}, +{674, 3189348762u, 3202770534u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{675, 3189348762u, 3201092813u, 3224508865u, 0, ATAN2_TOLERANCE, 0}, +{676, 3189348762u, 3199415091u, 3224315419u, 0, ATAN2_TOLERANCE, 0}, +{677, 3189348762u, 3197737370u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{678, 3189348762u, 3196059648u, 3223746975u, 0, ATAN2_TOLERANCE, 0}, +{679, 3189348762u, 3192704205u, 3223314619u, 0, ATAN2_TOLERANCE, 0}, +{680, 3189348762u, 3189348762u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{681, 3189348762u, 3184315597u, 3221891523u, 0, ATAN2_TOLERANCE, 0}, +{682, 3189348762u, 3175926989u, 3220324090u, 0, ATAN2_TOLERANCE, 0}, +{683, 3189348762u, 1028443341u, 3214926011u, 0, ATAN2_TOLERANCE, 0}, +{684, 3189348762u, 1036831949u, 3212548191u, 0, ATAN2_TOLERANCE, 0}, +{685, 3189348762u, 1041865114u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{686, 3189348762u, 1045220557u, 3206855805u, 0, ATAN2_TOLERANCE, 0}, +{687, 3189348762u, 1048576000u, 3205126383u, 0, ATAN2_TOLERANCE, 0}, +{688, 3189348762u, 1050253722u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{689, 3189348762u, 1051931443u, 3201256954u, 0, ATAN2_TOLERANCE, 0}, +{690, 3189348762u, 1053609165u, 3199709386u, 0, ATAN2_TOLERANCE, 0}, +{691, 3189348762u, 1055286886u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{692, 3189348762u, 1056964608u, 3197450707u, 0, ATAN2_TOLERANCE, 0}, +{693, 3189348762u, 1057803469u, 3196604976u, 0, ATAN2_TOLERANCE, 0}, +{694, 3189348762u, 1058642330u, 3195722672u, 0, ATAN2_TOLERANCE, 0}, +{695, 3189348762u, 1059481190u, 3194502645u, 0, ATAN2_TOLERANCE, 0}, +{696, 3189348762u, 1060320051u, 3193448666u, 0, ATAN2_TOLERANCE, 0}, +{697, 3189348762u, 1061158912u, 3192529424u, 0, ATAN2_TOLERANCE, 0}, +{698, 3189348762u, 1061997773u, 3191720922u, 0, ATAN2_TOLERANCE, 0}, +{699, 3189348762u, 1062836634u, 3191004485u, 0, ATAN2_TOLERANCE, 0}, +{700, 3189348762u, 1063675494u, 3190365372u, 0, ATAN2_TOLERANCE, 0}, +{701, 3189348762u, 1064514355u, 3189791806u, 0, ATAN2_TOLERANCE, 0}, +{702, 3184315597u, 3212836864u, 3225595618u, 0, ATAN2_TOLERANCE, 0}, +{703, 3184315597u, 3211998003u, 3225573773u, 0, ATAN2_TOLERANCE, 0}, +{704, 3184315597u, 3211159142u, 3225549529u, 0, ATAN2_TOLERANCE, 0}, +{705, 3184315597u, 3210320282u, 3225522469u, 0, ATAN2_TOLERANCE, 0}, +{706, 3184315597u, 3209481421u, 3225492076u, 0, ATAN2_TOLERANCE, 0}, +{707, 3184315597u, 3208642560u, 3225457697u, 0, ATAN2_TOLERANCE, 0}, +{708, 3184315597u, 3207803699u, 3225418499u, 0, ATAN2_TOLERANCE, 0}, +{709, 3184315597u, 3206964838u, 3225373401u, 0, ATAN2_TOLERANCE, 0}, +{710, 3184315597u, 3206125978u, 3225320975u, 0, ATAN2_TOLERANCE, 0}, +{711, 3184315597u, 3205287117u, 3225259298u, 0, ATAN2_TOLERANCE, 0}, +{712, 3184315597u, 3204448256u, 3225185722u, 0, ATAN2_TOLERANCE, 0}, +{713, 3184315597u, 3202770534u, 3225096495u, 0, ATAN2_TOLERANCE, 0}, +{714, 3184315597u, 3201092813u, 3224986144u, 0, ATAN2_TOLERANCE, 0}, +{715, 3184315597u, 3199415091u, 3224846385u, 0, ATAN2_TOLERANCE, 0}, +{716, 3184315597u, 3197737370u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{717, 3184315597u, 3196059648u, 3224417699u, 0, ATAN2_TOLERANCE, 0}, +{718, 3184315597u, 3192704205u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{719, 3184315597u, 3189348762u, 3223547397u, 0, ATAN2_TOLERANCE, 0}, +{720, 3184315597u, 3184315597u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{721, 3184315597u, 3175926989u, 3221369940u, 0, ATAN2_TOLERANCE, 0}, +{722, 3184315597u, 1028443341u, 3213735693u, 0, ATAN2_TOLERANCE, 0}, +{723, 3184315597u, 1036831949u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{724, 3184315597u, 1041865114u, 3205924695u, 0, ATAN2_TOLERANCE, 0}, +{725, 3184315597u, 1045220557u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{726, 3184315597u, 1048576000u, 3200438715u, 0, ATAN2_TOLERANCE, 0}, +{727, 3184315597u, 1050253722u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{728, 3184315597u, 1051931443u, 3197009227u, 0, ATAN2_TOLERANCE, 0}, +{729, 3184315597u, 1053609165u, 3195722672u, 0, ATAN2_TOLERANCE, 0}, +{730, 3184315597u, 1055286886u, 3193957057u, 0, ATAN2_TOLERANCE, 0}, +{731, 3184315597u, 1056964608u, 3192529424u, 0, ATAN2_TOLERANCE, 0}, +{732, 3184315597u, 1057803469u, 3191352196u, 0, ATAN2_TOLERANCE, 0}, +{733, 3184315597u, 1058642330u, 3190365372u, 0, ATAN2_TOLERANCE, 0}, +{734, 3184315597u, 1059481190u, 3189526555u, 0, ATAN2_TOLERANCE, 0}, +{735, 3184315597u, 1060320051u, 3188804982u, 0, ATAN2_TOLERANCE, 0}, +{736, 3184315597u, 1061158912u, 3188177815u, 0, ATAN2_TOLERANCE, 0}, +{737, 3184315597u, 1061997773u, 3187584469u, 0, ATAN2_TOLERANCE, 0}, +{738, 3184315597u, 1062836634u, 3186611894u, 0, ATAN2_TOLERANCE, 0}, +{739, 3184315597u, 1063675494u, 3185745985u, 0, ATAN2_TOLERANCE, 0}, +{740, 3184315597u, 1064514355u, 3184970168u, 0, ATAN2_TOLERANCE, 0}, +{741, 3175926989u, 3212836864u, 3225804118u, 0, ATAN2_TOLERANCE, 0}, +{742, 3175926989u, 3211998003u, 3225793109u, 0, ATAN2_TOLERANCE, 0}, +{743, 3175926989u, 3211159142u, 3225780881u, 0, ATAN2_TOLERANCE, 0}, +{744, 3175926989u, 3210320282u, 3225767219u, 0, ATAN2_TOLERANCE, 0}, +{745, 3175926989u, 3209481421u, 3225751855u, 0, ATAN2_TOLERANCE, 0}, +{746, 3175926989u, 3208642560u, 3225734452u, 0, ATAN2_TOLERANCE, 0}, +{747, 3175926989u, 3207803699u, 3225714573u, 0, ATAN2_TOLERANCE, 0}, +{748, 3175926989u, 3206964838u, 3225691654u, 0, ATAN2_TOLERANCE, 0}, +{749, 3175926989u, 3206125978u, 3225664939u, 0, ATAN2_TOLERANCE, 0}, +{750, 3175926989u, 3205287117u, 3225633404u, 0, ATAN2_TOLERANCE, 0}, +{751, 3175926989u, 3204448256u, 3225595618u, 0, ATAN2_TOLERANCE, 0}, +{752, 3175926989u, 3202770534u, 3225549529u, 0, ATAN2_TOLERANCE, 0}, +{753, 3175926989u, 3201092813u, 3225492076u, 0, ATAN2_TOLERANCE, 0}, +{754, 3175926989u, 3199415091u, 3225418499u, 0, ATAN2_TOLERANCE, 0}, +{755, 3175926989u, 3197737370u, 3225320975u, 0, ATAN2_TOLERANCE, 0}, +{756, 3175926989u, 3196059648u, 3225185722u, 0, ATAN2_TOLERANCE, 0}, +{757, 3175926989u, 3192704205u, 3224986144u, 0, ATAN2_TOLERANCE, 0}, +{758, 3175926989u, 3189348762u, 3224664139u, 0, ATAN2_TOLERANCE, 0}, +{759, 3175926989u, 3184315597u, 3224068980u, 0, ATAN2_TOLERANCE, 0}, +{760, 3175926989u, 3175926989u, 3222719460u, 0, ATAN2_TOLERANCE, 0}, +{761, 3175926989u, 1028443341u, 3209236443u, 0, ATAN2_TOLERANCE, 0}, +{762, 3175926989u, 1036831949u, 3203228472u, 0, ATAN2_TOLERANCE, 0}, +{763, 3175926989u, 1041865114u, 3198467197u, 0, ATAN2_TOLERANCE, 0}, +{764, 3175926989u, 1045220557u, 3195722672u, 0, ATAN2_TOLERANCE, 0}, +{765, 3175926989u, 1048576000u, 3192529424u, 0, ATAN2_TOLERANCE, 0}, +{766, 3175926989u, 1050253722u, 3190365372u, 0, ATAN2_TOLERANCE, 0}, +{767, 3175926989u, 1051931443u, 3188804982u, 0, ATAN2_TOLERANCE, 0}, +{768, 3175926989u, 1053609165u, 3187584469u, 0, ATAN2_TOLERANCE, 0}, +{769, 3175926989u, 1055286886u, 3185745985u, 0, ATAN2_TOLERANCE, 0}, +{770, 3175926989u, 1056964608u, 3184271124u, 0, ATAN2_TOLERANCE, 0}, +{771, 3175926989u, 1057803469u, 3183061988u, 0, ATAN2_TOLERANCE, 0}, +{772, 3175926989u, 1058642330u, 3182052851u, 0, ATAN2_TOLERANCE, 0}, +{773, 3175926989u, 1059481190u, 3181197973u, 0, ATAN2_TOLERANCE, 0}, +{774, 3175926989u, 1060320051u, 3180464550u, 0, ATAN2_TOLERANCE, 0}, +{775, 3175926989u, 1061158912u, 3179828452u, 0, ATAN2_TOLERANCE, 0}, +{776, 3175926989u, 1061997773u, 3179260638u, 0, ATAN2_TOLERANCE, 0}, +{777, 3175926989u, 1062836634u, 3178277362u, 0, ATAN2_TOLERANCE, 0}, +{778, 3175926989u, 1063675494u, 3177402983u, 0, ATAN2_TOLERANCE, 0}, +{779, 3175926989u, 1064514355u, 3176620374u, 0, ATAN2_TOLERANCE, 0}, +{780, 1028443341u, 3212836864u, 1078320470u, 0, ATAN2_TOLERANCE, 0}, +{781, 1028443341u, 3211998003u, 1078309461u, 0, ATAN2_TOLERANCE, 0}, +{782, 1028443341u, 3211159142u, 1078297233u, 0, ATAN2_TOLERANCE, 0}, +{783, 1028443341u, 3210320282u, 1078283571u, 0, ATAN2_TOLERANCE, 0}, +{784, 1028443341u, 3209481421u, 1078268207u, 0, ATAN2_TOLERANCE, 0}, +{785, 1028443341u, 3208642560u, 1078250804u, 0, ATAN2_TOLERANCE, 0}, +{786, 1028443341u, 3207803699u, 1078230925u, 0, ATAN2_TOLERANCE, 0}, +{787, 1028443341u, 3206964838u, 1078208006u, 0, ATAN2_TOLERANCE, 0}, +{788, 1028443341u, 3206125978u, 1078181291u, 0, ATAN2_TOLERANCE, 0}, +{789, 1028443341u, 3205287117u, 1078149756u, 0, ATAN2_TOLERANCE, 0}, +{790, 1028443341u, 3204448256u, 1078111970u, 0, ATAN2_TOLERANCE, 0}, +{791, 1028443341u, 3202770534u, 1078065881u, 0, ATAN2_TOLERANCE, 0}, +{792, 1028443341u, 3201092813u, 1078008428u, 0, ATAN2_TOLERANCE, 0}, +{793, 1028443341u, 3199415091u, 1077934851u, 0, ATAN2_TOLERANCE, 0}, +{794, 1028443341u, 3197737370u, 1077837327u, 0, ATAN2_TOLERANCE, 0}, +{795, 1028443341u, 3196059648u, 1077702074u, 0, ATAN2_TOLERANCE, 0}, +{796, 1028443341u, 3192704205u, 1077502496u, 0, ATAN2_TOLERANCE, 0}, +{797, 1028443341u, 3189348762u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{798, 1028443341u, 3184315597u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{799, 1028443341u, 3175926989u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{800, 1028443341u, 1028443341u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{801, 1028443341u, 1036831949u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{802, 1028443341u, 1041865114u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{803, 1028443341u, 1045220557u, 1048239024u, 0, ATAN2_TOLERANCE, 0}, +{804, 1028443341u, 1048576000u, 1045045776u, 0, ATAN2_TOLERANCE, 0}, +{805, 1028443341u, 1050253722u, 1042881724u, 0, ATAN2_TOLERANCE, 0}, +{806, 1028443341u, 1051931443u, 1041321334u, 0, ATAN2_TOLERANCE, 0}, +{807, 1028443341u, 1053609165u, 1040100821u, 0, ATAN2_TOLERANCE, 0}, +{808, 1028443341u, 1055286886u, 1038262337u, 0, ATAN2_TOLERANCE, 0}, +{809, 1028443341u, 1056964608u, 1036787476u, 0, ATAN2_TOLERANCE, 0}, +{810, 1028443341u, 1057803469u, 1035578340u, 0, ATAN2_TOLERANCE, 0}, +{811, 1028443341u, 1058642330u, 1034569203u, 0, ATAN2_TOLERANCE, 0}, +{812, 1028443341u, 1059481190u, 1033714325u, 0, ATAN2_TOLERANCE, 0}, +{813, 1028443341u, 1060320051u, 1032980902u, 0, ATAN2_TOLERANCE, 0}, +{814, 1028443341u, 1061158912u, 1032344804u, 0, ATAN2_TOLERANCE, 0}, +{815, 1028443341u, 1061997773u, 1031776990u, 0, ATAN2_TOLERANCE, 0}, +{816, 1028443341u, 1062836634u, 1030793714u, 0, ATAN2_TOLERANCE, 0}, +{817, 1028443341u, 1063675494u, 1029919335u, 0, ATAN2_TOLERANCE, 0}, +{818, 1028443341u, 1064514355u, 1029136726u, 0, ATAN2_TOLERANCE, 0}, +{819, 1036831949u, 3212836864u, 1078111970u, 0, ATAN2_TOLERANCE, 0}, +{820, 1036831949u, 3211998003u, 1078090125u, 0, ATAN2_TOLERANCE, 0}, +{821, 1036831949u, 3211159142u, 1078065881u, 0, ATAN2_TOLERANCE, 0}, +{822, 1036831949u, 3210320282u, 1078038821u, 0, ATAN2_TOLERANCE, 0}, +{823, 1036831949u, 3209481421u, 1078008428u, 0, ATAN2_TOLERANCE, 0}, +{824, 1036831949u, 3208642560u, 1077974049u, 0, ATAN2_TOLERANCE, 0}, +{825, 1036831949u, 3207803699u, 1077934851u, 0, ATAN2_TOLERANCE, 0}, +{826, 1036831949u, 3206964838u, 1077889753u, 0, ATAN2_TOLERANCE, 0}, +{827, 1036831949u, 3206125978u, 1077837327u, 0, ATAN2_TOLERANCE, 0}, +{828, 1036831949u, 3205287117u, 1077775650u, 0, ATAN2_TOLERANCE, 0}, +{829, 1036831949u, 3204448256u, 1077702074u, 0, ATAN2_TOLERANCE, 0}, +{830, 1036831949u, 3202770534u, 1077612847u, 0, ATAN2_TOLERANCE, 0}, +{831, 1036831949u, 3201092813u, 1077502496u, 0, ATAN2_TOLERANCE, 0}, +{832, 1036831949u, 3199415091u, 1077362737u, 0, ATAN2_TOLERANCE, 0}, +{833, 1036831949u, 3197737370u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{834, 1036831949u, 3196059648u, 1076934051u, 0, ATAN2_TOLERANCE, 0}, +{835, 1036831949u, 3192704205u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{836, 1036831949u, 3189348762u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{837, 1036831949u, 3184315597u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{838, 1036831949u, 3175926989u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{839, 1036831949u, 1028443341u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{840, 1036831949u, 1036831949u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{841, 1036831949u, 1041865114u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{842, 1036831949u, 1045220557u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{843, 1036831949u, 1048576000u, 1052955067u, 0, ATAN2_TOLERANCE, 0}, +{844, 1036831949u, 1050253722u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{845, 1036831949u, 1051931443u, 1049525579u, 0, ATAN2_TOLERANCE, 0}, +{846, 1036831949u, 1053609165u, 1048239024u, 0, ATAN2_TOLERANCE, 0}, +{847, 1036831949u, 1055286886u, 1046473409u, 0, ATAN2_TOLERANCE, 0}, +{848, 1036831949u, 1056964608u, 1045045776u, 0, ATAN2_TOLERANCE, 0}, +{849, 1036831949u, 1057803469u, 1043868548u, 0, ATAN2_TOLERANCE, 0}, +{850, 1036831949u, 1058642330u, 1042881724u, 0, ATAN2_TOLERANCE, 0}, +{851, 1036831949u, 1059481190u, 1042042907u, 0, ATAN2_TOLERANCE, 0}, +{852, 1036831949u, 1060320051u, 1041321334u, 0, ATAN2_TOLERANCE, 0}, +{853, 1036831949u, 1061158912u, 1040694167u, 0, ATAN2_TOLERANCE, 0}, +{854, 1036831949u, 1061997773u, 1040100821u, 0, ATAN2_TOLERANCE, 0}, +{855, 1036831949u, 1062836634u, 1039128246u, 0, ATAN2_TOLERANCE, 0}, +{856, 1036831949u, 1063675494u, 1038262337u, 0, ATAN2_TOLERANCE, 0}, +{857, 1036831949u, 1064514355u, 1037486520u, 0, ATAN2_TOLERANCE, 0}, +{858, 1041865114u, 3212836864u, 1077905521u, 0, ATAN2_TOLERANCE, 0}, +{859, 1041865114u, 3211998003u, 1077873175u, 0, ATAN2_TOLERANCE, 0}, +{860, 1041865114u, 3211159142u, 1077837327u, 0, ATAN2_TOLERANCE, 0}, +{861, 1041865114u, 3210320282u, 1077797382u, 0, ATAN2_TOLERANCE, 0}, +{862, 1041865114u, 3209481421u, 1077752605u, 0, ATAN2_TOLERANCE, 0}, +{863, 1041865114u, 3208642560u, 1077702074u, 0, ATAN2_TOLERANCE, 0}, +{864, 1041865114u, 3207803699u, 1077644621u, 0, ATAN2_TOLERANCE, 0}, +{865, 1041865114u, 3206964838u, 1077578747u, 0, ATAN2_TOLERANCE, 0}, +{866, 1041865114u, 3206125978u, 1077502496u, 0, ATAN2_TOLERANCE, 0}, +{867, 1041865114u, 3205287117u, 1077413269u, 0, ATAN2_TOLERANCE, 0}, +{868, 1041865114u, 3204448256u, 1077307552u, 0, ATAN2_TOLERANCE, 0}, +{869, 1041865114u, 3202770534u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{870, 1041865114u, 3201092813u, 1077025217u, 0, ATAN2_TOLERANCE, 0}, +{871, 1041865114u, 3199415091u, 1076831771u, 0, ATAN2_TOLERANCE, 0}, +{872, 1041865114u, 3197737370u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{873, 1041865114u, 3196059648u, 1076263327u, 0, ATAN2_TOLERANCE, 0}, +{874, 1041865114u, 3192704205u, 1075830971u, 0, ATAN2_TOLERANCE, 0}, +{875, 1041865114u, 3189348762u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{876, 1041865114u, 3184315597u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{877, 1041865114u, 3175926989u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{878, 1041865114u, 1028443341u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{879, 1041865114u, 1036831949u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{880, 1041865114u, 1041865114u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{881, 1041865114u, 1045220557u, 1059372157u, 0, ATAN2_TOLERANCE, 0}, +{882, 1041865114u, 1048576000u, 1057642735u, 0, ATAN2_TOLERANCE, 0}, +{883, 1041865114u, 1050253722u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{884, 1041865114u, 1051931443u, 1053773306u, 0, ATAN2_TOLERANCE, 0}, +{885, 1041865114u, 1053609165u, 1052225738u, 0, ATAN2_TOLERANCE, 0}, +{886, 1041865114u, 1055286886u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{887, 1041865114u, 1056964608u, 1049967059u, 0, ATAN2_TOLERANCE, 0}, +{888, 1041865114u, 1057803469u, 1049121328u, 0, ATAN2_TOLERANCE, 0}, +{889, 1041865114u, 1058642330u, 1048239024u, 0, ATAN2_TOLERANCE, 0}, +{890, 1041865114u, 1059481190u, 1047018997u, 0, ATAN2_TOLERANCE, 0}, +{891, 1041865114u, 1060320051u, 1045965018u, 0, ATAN2_TOLERANCE, 0}, +{892, 1041865114u, 1061158912u, 1045045776u, 0, ATAN2_TOLERANCE, 0}, +{893, 1041865114u, 1061997773u, 1044237274u, 0, ATAN2_TOLERANCE, 0}, +{894, 1041865114u, 1062836634u, 1043520837u, 0, ATAN2_TOLERANCE, 0}, +{895, 1041865114u, 1063675494u, 1042881724u, 0, ATAN2_TOLERANCE, 0}, +{896, 1041865114u, 1064514355u, 1042308158u, 0, ATAN2_TOLERANCE, 0}, +{897, 1045220557u, 3212836864u, 1077702074u, 0, ATAN2_TOLERANCE, 0}, +{898, 1045220557u, 3211998003u, 1077659708u, 0, ATAN2_TOLERANCE, 0}, +{899, 1045220557u, 3211159142u, 1077612847u, 0, ATAN2_TOLERANCE, 0}, +{900, 1045220557u, 3210320282u, 1077560746u, 0, ATAN2_TOLERANCE, 0}, +{901, 1045220557u, 3209481421u, 1077502496u, 0, ATAN2_TOLERANCE, 0}, +{902, 1045220557u, 3208642560u, 1077436965u, 0, ATAN2_TOLERANCE, 0}, +{903, 1045220557u, 3207803699u, 1077362737u, 0, ATAN2_TOLERANCE, 0}, +{904, 1045220557u, 3206964838u, 1077278015u, 0, ATAN2_TOLERANCE, 0}, +{905, 1045220557u, 3206125978u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{906, 1045220557u, 3205287117u, 1077067159u, 0, ATAN2_TOLERANCE, 0}, +{907, 1045220557u, 3204448256u, 1076934051u, 0, ATAN2_TOLERANCE, 0}, +{908, 1045220557u, 3202770534u, 1076775851u, 0, ATAN2_TOLERANCE, 0}, +{909, 1045220557u, 3201092813u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{910, 1045220557u, 3199415091u, 1076352554u, 0, ATAN2_TOLERANCE, 0}, +{911, 1045220557u, 3197737370u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{912, 1045220557u, 3196059648u, 1075699942u, 0, ATAN2_TOLERANCE, 0}, +{913, 1045220557u, 3192704205u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{914, 1045220557u, 3189348762u, 1074640653u, 0, ATAN2_TOLERANCE, 0}, +{915, 1045220557u, 3184315597u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{916, 1045220557u, 3175926989u, 1072196433u, 0, ATAN2_TOLERANCE, 0}, +{917, 1045220557u, 1028443341u, 1068086373u, 0, ATAN2_TOLERANCE, 0}, +{918, 1045220557u, 1036831949u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{919, 1045220557u, 1041865114u, 1064133432u, 0, ATAN2_TOLERANCE, 0}, +{920, 1045220557u, 1045220557u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{921, 1045220557u, 1048576000u, 1059896275u, 0, ATAN2_TOLERANCE, 0}, +{922, 1045220557u, 1050253722u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{923, 1045220557u, 1051931443u, 1057285826u, 0, ATAN2_TOLERANCE, 0}, +{924, 1045220557u, 1053609165u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{925, 1045220557u, 1055286886u, 1054220672u, 0, ATAN2_TOLERANCE, 0}, +{926, 1045220557u, 1056964608u, 1052955067u, 0, ATAN2_TOLERANCE, 0}, +{927, 1045220557u, 1057803469u, 1051890205u, 0, ATAN2_TOLERANCE, 0}, +{928, 1045220557u, 1058642330u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{929, 1045220557u, 1059481190u, 1050203354u, 0, ATAN2_TOLERANCE, 0}, +{930, 1045220557u, 1060320051u, 1049525579u, 0, ATAN2_TOLERANCE, 0}, +{931, 1045220557u, 1061158912u, 1048931757u, 0, ATAN2_TOLERANCE, 0}, +{932, 1045220557u, 1061997773u, 1048239024u, 0, ATAN2_TOLERANCE, 0}, +{933, 1045220557u, 1062836634u, 1047307016u, 0, ATAN2_TOLERANCE, 0}, +{934, 1045220557u, 1063675494u, 1046473409u, 0, ATAN2_TOLERANCE, 0}, +{935, 1045220557u, 1064514355u, 1045723620u, 0, ATAN2_TOLERANCE, 0}, +{936, 1048576000u, 3212836864u, 1077502496u, 0, ATAN2_TOLERANCE, 0}, +{937, 1048576000u, 3211998003u, 1077450717u, 0, ATAN2_TOLERANCE, 0}, +{938, 1048576000u, 3211159142u, 1077393577u, 0, ATAN2_TOLERANCE, 0}, +{939, 1048576000u, 3210320282u, 1077330224u, 0, ATAN2_TOLERANCE, 0}, +{940, 1048576000u, 3209481421u, 1077259619u, 0, ATAN2_TOLERANCE, 0}, +{941, 1048576000u, 3208642560u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{942, 1048576000u, 3207803699u, 1077091264u, 0, ATAN2_TOLERANCE, 0}, +{943, 1048576000u, 3206964838u, 1076989972u, 0, ATAN2_TOLERANCE, 0}, +{944, 1048576000u, 3206125978u, 1076874137u, 0, ATAN2_TOLERANCE, 0}, +{945, 1048576000u, 3205287117u, 1076740605u, 0, ATAN2_TOLERANCE, 0}, +{946, 1048576000u, 3204448256u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{947, 1048576000u, 3202770534u, 1076403085u, 0, ATAN2_TOLERANCE, 0}, +{948, 1048576000u, 3201092813u, 1076187075u, 0, ATAN2_TOLERANCE, 0}, +{949, 1048576000u, 3199415091u, 1075928496u, 0, ATAN2_TOLERANCE, 0}, +{950, 1048576000u, 3197737370u, 1075616067u, 0, ATAN2_TOLERANCE, 0}, +{951, 1048576000u, 3196059648u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{952, 1048576000u, 3192704205u, 1074771682u, 0, ATAN2_TOLERANCE, 0}, +{953, 1048576000u, 3189348762u, 1074208297u, 0, ATAN2_TOLERANCE, 0}, +{954, 1048576000u, 3184315597u, 1073333321u, 0, ATAN2_TOLERANCE, 0}, +{955, 1048576000u, 3175926989u, 1071797277u, 0, ATAN2_TOLERANCE, 0}, +{956, 1048576000u, 1028443341u, 1068485529u, 0, ATAN2_TOLERANCE, 0}, +{957, 1048576000u, 1036831949u, 1066949484u, 0, ATAN2_TOLERANCE, 0}, +{958, 1048576000u, 1041865114u, 1065608035u, 0, ATAN2_TOLERANCE, 0}, +{959, 1048576000u, 1045220557u, 1063609315u, 0, ATAN2_TOLERANCE, 0}, +{960, 1048576000u, 1048576000u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{961, 1048576000u, 1050253722u, 1060231774u, 0, ATAN2_TOLERANCE, 0}, +{962, 1048576000u, 1051931443u, 1058982060u, 0, ATAN2_TOLERANCE, 0}, +{963, 1048576000u, 1053609165u, 1057947741u, 0, ATAN2_TOLERANCE, 0}, +{964, 1048576000u, 1055286886u, 1057083701u, 0, ATAN2_TOLERANCE, 0}, +{965, 1048576000u, 1056964608u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{966, 1048576000u, 1057803469u, 1054502635u, 0, ATAN2_TOLERANCE, 0}, +{967, 1048576000u, 1058642330u, 1053434384u, 0, ATAN2_TOLERANCE, 0}, +{968, 1048576000u, 1059481190u, 1052507701u, 0, ATAN2_TOLERANCE, 0}, +{969, 1048576000u, 1060320051u, 1051697365u, 0, ATAN2_TOLERANCE, 0}, +{970, 1048576000u, 1061158912u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{971, 1048576000u, 1061997773u, 1050350522u, 0, ATAN2_TOLERANCE, 0}, +{972, 1048576000u, 1062836634u, 1049785686u, 0, ATAN2_TOLERANCE, 0}, +{973, 1048576000u, 1063675494u, 1049278860u, 0, ATAN2_TOLERANCE, 0}, +{974, 1048576000u, 1064514355u, 1048821743u, 0, ATAN2_TOLERANCE, 0}, +{975, 1050253722u, 3212836864u, 1077307552u, 0, ATAN2_TOLERANCE, 0}, +{976, 1050253722u, 3211998003u, 1077247062u, 0, ATAN2_TOLERANCE, 0}, +{977, 1050253722u, 3211159142u, 1077180491u, 0, ATAN2_TOLERANCE, 0}, +{978, 1050253722u, 3210320282u, 1077106914u, 0, ATAN2_TOLERANCE, 0}, +{979, 1050253722u, 3209481421u, 1077025217u, 0, ATAN2_TOLERANCE, 0}, +{980, 1050253722u, 3208642560u, 1076934051u, 0, ATAN2_TOLERANCE, 0}, +{981, 1050253722u, 3207803699u, 1076831771u, 0, ATAN2_TOLERANCE, 0}, +{982, 1050253722u, 3206964838u, 1076716361u, 0, ATAN2_TOLERANCE, 0}, +{983, 1050253722u, 3206125978u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{984, 1050253722u, 3205287117u, 1076435599u, 0, ATAN2_TOLERANCE, 0}, +{985, 1050253722u, 3204448256u, 1076263327u, 0, ATAN2_TOLERANCE, 0}, +{986, 1050253722u, 3202770534u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{987, 1050253722u, 3201092813u, 1075830971u, 0, ATAN2_TOLERANCE, 0}, +{988, 1050253722u, 3199415091u, 1075557817u, 0, ATAN2_TOLERANCE, 0}, +{989, 1050253722u, 3197737370u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{990, 1050253722u, 3196059648u, 1074855557u, 0, ATAN2_TOLERANCE, 0}, +{991, 1050253722u, 3192704205u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{992, 1050253722u, 3189348762u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{993, 1050253722u, 3184315597u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{994, 1050253722u, 3175926989u, 1071526770u, 0, ATAN2_TOLERANCE, 0}, +{995, 1050253722u, 1028443341u, 1068756035u, 0, ATAN2_TOLERANCE, 0}, +{996, 1050253722u, 1036831949u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{997, 1050253722u, 1041865114u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{998, 1050253722u, 1045220557u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{999, 1050253722u, 1048576000u, 1063273815u, 0, ATAN2_TOLERANCE, 0}, +{1000, 1050253722u, 1050253722u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1001, 1050253722u, 1051931443u, 1060464776u, 0, ATAN2_TOLERANCE, 0}, +{1002, 1050253722u, 1053609165u, 1059372157u, 0, ATAN2_TOLERANCE, 0}, +{1003, 1050253722u, 1055286886u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{1004, 1050253722u, 1056964608u, 1057642735u, 0, ATAN2_TOLERANCE, 0}, +{1005, 1050253722u, 1057803469u, 1056942688u, 0, ATAN2_TOLERANCE, 0}, +{1006, 1050253722u, 1058642330u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{1007, 1050253722u, 1059481190u, 1054696589u, 0, ATAN2_TOLERANCE, 0}, +{1008, 1050253722u, 1060320051u, 1053773306u, 0, ATAN2_TOLERANCE, 0}, +{1009, 1050253722u, 1061158912u, 1052955067u, 0, ATAN2_TOLERANCE, 0}, +{1010, 1050253722u, 1061997773u, 1052225738u, 0, ATAN2_TOLERANCE, 0}, +{1011, 1050253722u, 1062836634u, 1051572163u, 0, ATAN2_TOLERANCE, 0}, +{1012, 1050253722u, 1063675494u, 1050983549u, 0, ATAN2_TOLERANCE, 0}, +{1013, 1050253722u, 1064514355u, 1050450984u, 0, ATAN2_TOLERANCE, 0}, +{1014, 1051931443u, 3212836864u, 1077117894u, 0, ATAN2_TOLERANCE, 0}, +{1015, 1051931443u, 3211998003u, 1077049462u, 0, ATAN2_TOLERANCE, 0}, +{1016, 1051931443u, 3211159142u, 1076974380u, 0, ATAN2_TOLERANCE, 0}, +{1017, 1051931443u, 3210320282u, 1076891686u, 0, ATAN2_TOLERANCE, 0}, +{1018, 1051931443u, 3209481421u, 1076800236u, 0, ATAN2_TOLERANCE, 0}, +{1019, 1051931443u, 3208642560u, 1076698664u, 0, ATAN2_TOLERANCE, 0}, +{1020, 1051931443u, 3207803699u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{1021, 1051931443u, 3206964838u, 1076458270u, 0, ATAN2_TOLERANCE, 0}, +{1022, 1051931443u, 3206125978u, 1076315106u, 0, ATAN2_TOLERANCE, 0}, +{1023, 1051931443u, 3205287117u, 1076152976u, 0, ATAN2_TOLERANCE, 0}, +{1024, 1051931443u, 3204448256u, 1075968440u, 0, ATAN2_TOLERANCE, 0}, +{1025, 1051931443u, 3202770534u, 1075757395u, 0, ATAN2_TOLERANCE, 0}, +{1026, 1051931443u, 3201092813u, 1075515019u, 0, ATAN2_TOLERANCE, 0}, +{1027, 1051931443u, 3199415091u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1028, 1051931443u, 3197737370u, 1074913807u, 0, ATAN2_TOLERANCE, 0}, +{1029, 1051931443u, 3196059648u, 1074543128u, 0, ATAN2_TOLERANCE, 0}, +{1030, 1051931443u, 3192704205u, 1074119070u, 0, ATAN2_TOLERANCE, 0}, +{1031, 1051931443u, 3189348762u, 1073537881u, 0, ATAN2_TOLERANCE, 0}, +{1032, 1051931443u, 3184315597u, 1072475949u, 0, ATAN2_TOLERANCE, 0}, +{1033, 1051931443u, 3175926989u, 1071331721u, 0, ATAN2_TOLERANCE, 0}, +{1034, 1051931443u, 1028443341u, 1068951084u, 0, ATAN2_TOLERANCE, 0}, +{1035, 1051931443u, 1036831949u, 1067806856u, 0, ATAN2_TOLERANCE, 0}, +{1036, 1051931443u, 1041865114u, 1066744924u, 0, ATAN2_TOLERANCE, 0}, +{1037, 1051931443u, 1045220557u, 1065786489u, 0, ATAN2_TOLERANCE, 0}, +{1038, 1051931443u, 1048576000u, 1064523530u, 0, ATAN2_TOLERANCE, 0}, +{1039, 1051931443u, 1050253722u, 1063040813u, 0, ATAN2_TOLERANCE, 0}, +{1040, 1051931443u, 1051931443u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1041, 1051931443u, 1053609165u, 1060635966u, 0, ATAN2_TOLERANCE, 0}, +{1042, 1051931443u, 1055286886u, 1059666464u, 0, ATAN2_TOLERANCE, 0}, +{1043, 1051931443u, 1056964608u, 1058822281u, 0, ATAN2_TOLERANCE, 0}, +{1044, 1051931443u, 1057803469u, 1058084138u, 0, ATAN2_TOLERANCE, 0}, +{1045, 1051931443u, 1058642330u, 1057435619u, 0, ATAN2_TOLERANCE, 0}, +{1046, 1051931443u, 1059481190u, 1056761314u, 0, ATAN2_TOLERANCE, 0}, +{1047, 1051931443u, 1060320051u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{1048, 1051931443u, 1061158912u, 1054838168u, 0, ATAN2_TOLERANCE, 0}, +{1049, 1051931443u, 1061997773u, 1054025590u, 0, ATAN2_TOLERANCE, 0}, +{1050, 1051931443u, 1062836634u, 1053293989u, 0, ATAN2_TOLERANCE, 0}, +{1051, 1051931443u, 1063675494u, 1052632439u, 0, ATAN2_TOLERANCE, 0}, +{1052, 1051931443u, 1064514355u, 1052031784u, 0, ATAN2_TOLERANCE, 0}, +{1053, 1053609165u, 3212836864u, 1076934051u, 0, ATAN2_TOLERANCE, 0}, +{1054, 1053609165u, 3211998003u, 1076858486u, 0, ATAN2_TOLERANCE, 0}, +{1055, 1053609165u, 3211159142u, 1076775851u, 0, ATAN2_TOLERANCE, 0}, +{1056, 1053609165u, 3210320282u, 1076685177u, 0, ATAN2_TOLERANCE, 0}, +{1057, 1053609165u, 3209481421u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{1058, 1053609165u, 3208642560u, 1076474981u, 0, ATAN2_TOLERANCE, 0}, +{1059, 1053609165u, 3207803699u, 1076352554u, 0, ATAN2_TOLERANCE, 0}, +{1060, 1053609165u, 3206964838u, 1076216202u, 0, ATAN2_TOLERANCE, 0}, +{1061, 1053609165u, 3206125978u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{1062, 1053609165u, 3205287117u, 1075892648u, 0, ATAN2_TOLERANCE, 0}, +{1063, 1053609165u, 3204448256u, 1075699942u, 0, ATAN2_TOLERANCE, 0}, +{1064, 1053609165u, 3202770534u, 1075482252u, 0, ATAN2_TOLERANCE, 0}, +{1065, 1053609165u, 3201092813u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1066, 1053609165u, 3199415091u, 1074956605u, 0, ATAN2_TOLERANCE, 0}, +{1067, 1053609165u, 3197737370u, 1074640653u, 0, ATAN2_TOLERANCE, 0}, +{1068, 1053609165u, 3196059648u, 1074284549u, 0, ATAN2_TOLERANCE, 0}, +{1069, 1053609165u, 3192704205u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1070, 1053609165u, 3189348762u, 1073150989u, 0, ATAN2_TOLERANCE, 0}, +{1071, 1053609165u, 3184315597u, 1072196433u, 0, ATAN2_TOLERANCE, 0}, +{1072, 1053609165u, 3175926989u, 1071184568u, 0, ATAN2_TOLERANCE, 0}, +{1073, 1053609165u, 1028443341u, 1069098237u, 0, ATAN2_TOLERANCE, 0}, +{1074, 1053609165u, 1036831949u, 1068086373u, 0, ATAN2_TOLERANCE, 0}, +{1075, 1053609165u, 1041865114u, 1067131816u, 0, ATAN2_TOLERANCE, 0}, +{1076, 1053609165u, 1045220557u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1077, 1053609165u, 1048576000u, 1065455532u, 0, ATAN2_TOLERANCE, 0}, +{1078, 1053609165u, 1050253722u, 1064133432u, 0, ATAN2_TOLERANCE, 0}, +{1079, 1053609165u, 1051931443u, 1062869623u, 0, ATAN2_TOLERANCE, 0}, +{1080, 1053609165u, 1053609165u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1081, 1053609165u, 1055286886u, 1060767036u, 0, ATAN2_TOLERANCE, 0}, +{1082, 1053609165u, 1056964608u, 1059896275u, 0, ATAN2_TOLERANCE, 0}, +{1083, 1053609165u, 1057803469u, 1059125451u, 0, ATAN2_TOLERANCE, 0}, +{1084, 1053609165u, 1058642330u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{1085, 1053609165u, 1059481190u, 1057831235u, 0, ATAN2_TOLERANCE, 0}, +{1086, 1053609165u, 1060320051u, 1057285826u, 0, ATAN2_TOLERANCE, 0}, +{1087, 1053609165u, 1061158912u, 1056627632u, 0, ATAN2_TOLERANCE, 0}, +{1088, 1053609165u, 1061997773u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{1089, 1053609165u, 1062836634u, 1054946060u, 0, ATAN2_TOLERANCE, 0}, +{1090, 1053609165u, 1063675494u, 1054220672u, 0, ATAN2_TOLERANCE, 0}, +{1091, 1053609165u, 1064514355u, 1053559586u, 0, ATAN2_TOLERANCE, 0}, +{1092, 1055286886u, 3212836864u, 1076756433u, 0, ATAN2_TOLERANCE, 0}, +{1093, 1055286886u, 3211998003u, 1076674559u, 0, ATAN2_TOLERANCE, 0}, +{1094, 1055286886u, 3211159142u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{1095, 1055286886u, 3210320282u, 1076487807u, 0, ATAN2_TOLERANCE, 0}, +{1096, 1055286886u, 3209481421u, 1076380893u, 0, ATAN2_TOLERANCE, 0}, +{1097, 1055286886u, 3208642560u, 1076263327u, 0, ATAN2_TOLERANCE, 0}, +{1098, 1055286886u, 3207803699u, 1076133648u, 0, ATAN2_TOLERANCE, 0}, +{1099, 1055286886u, 3206964838u, 1075990172u, 0, ATAN2_TOLERANCE, 0}, +{1100, 1055286886u, 3206125978u, 1075830971u, 0, ATAN2_TOLERANCE, 0}, +{1101, 1055286886u, 3205287117u, 1075653853u, 0, ATAN2_TOLERANCE, 0}, +{1102, 1055286886u, 3204448256u, 1075456361u, 0, ATAN2_TOLERANCE, 0}, +{1103, 1055286886u, 3202770534u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1104, 1055286886u, 3201092813u, 1074989372u, 0, ATAN2_TOLERANCE, 0}, +{1105, 1055286886u, 3199415091u, 1074714229u, 0, ATAN2_TOLERANCE, 0}, +{1106, 1055286886u, 3197737370u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{1107, 1055286886u, 3196059648u, 1074068539u, 0, ATAN2_TOLERANCE, 0}, +{1108, 1055286886u, 3192704205u, 1073649723u, 0, ATAN2_TOLERANCE, 0}, +{1109, 1055286886u, 3189348762u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{1110, 1055286886u, 3184315597u, 1071975731u, 0, ATAN2_TOLERANCE, 0}, +{1111, 1055286886u, 3175926989u, 1071069663u, 0, ATAN2_TOLERANCE, 0}, +{1112, 1055286886u, 1028443341u, 1069213143u, 0, ATAN2_TOLERANCE, 0}, +{1113, 1055286886u, 1036831949u, 1068307075u, 0, ATAN2_TOLERANCE, 0}, +{1114, 1055286886u, 1041865114u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{1115, 1055286886u, 1045220557u, 1066633083u, 0, ATAN2_TOLERANCE, 0}, +{1116, 1055286886u, 1048576000u, 1065887552u, 0, ATAN2_TOLERANCE, 0}, +{1117, 1055286886u, 1050253722u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{1118, 1055286886u, 1051931443u, 1063839125u, 0, ATAN2_TOLERANCE, 0}, +{1119, 1055286886u, 1053609165u, 1062738554u, 0, ATAN2_TOLERANCE, 0}, +{1120, 1055286886u, 1055286886u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1121, 1055286886u, 1056964608u, 1060870597u, 0, ATAN2_TOLERANCE, 0}, +{1122, 1055286886u, 1057803469u, 1060080632u, 0, ATAN2_TOLERANCE, 0}, +{1123, 1055286886u, 1058642330u, 1059372157u, 0, ATAN2_TOLERANCE, 0}, +{1124, 1055286886u, 1059481190u, 1058735354u, 0, ATAN2_TOLERANCE, 0}, +{1125, 1055286886u, 1060320051u, 1058161452u, 0, ATAN2_TOLERANCE, 0}, +{1126, 1055286886u, 1061158912u, 1057642735u, 0, ATAN2_TOLERANCE, 0}, +{1127, 1055286886u, 1061997773u, 1057172469u, 0, ATAN2_TOLERANCE, 0}, +{1128, 1055286886u, 1062836634u, 1056525019u, 0, ATAN2_TOLERANCE, 0}, +{1129, 1055286886u, 1063675494u, 1055744824u, 0, ATAN2_TOLERANCE, 0}, +{1130, 1055286886u, 1064514355u, 1055031008u, 0, ATAN2_TOLERANCE, 0}, +{1131, 1056964608u, 3212836864u, 1076585332u, 0, ATAN2_TOLERANCE, 0}, +{1132, 1056964608u, 3211998003u, 1076497963u, 0, ATAN2_TOLERANCE, 0}, +{1133, 1056964608u, 3211159142u, 1076403085u, 0, ATAN2_TOLERANCE, 0}, +{1134, 1056964608u, 3210320282u, 1076299798u, 0, ATAN2_TOLERANCE, 0}, +{1135, 1056964608u, 3209481421u, 1076187075u, 0, ATAN2_TOLERANCE, 0}, +{1136, 1056964608u, 3208642560u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{1137, 1056964608u, 3207803699u, 1075928496u, 0, ATAN2_TOLERANCE, 0}, +{1138, 1056964608u, 3206964838u, 1075779824u, 0, ATAN2_TOLERANCE, 0}, +{1139, 1056964608u, 3206125978u, 1075616067u, 0, ATAN2_TOLERANCE, 0}, +{1140, 1056964608u, 3205287117u, 1075435390u, 0, ATAN2_TOLERANCE, 0}, +{1141, 1056964608u, 3204448256u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1142, 1056964608u, 3202770534u, 1075015263u, 0, ATAN2_TOLERANCE, 0}, +{1143, 1056964608u, 3201092813u, 1074771682u, 0, ATAN2_TOLERANCE, 0}, +{1144, 1056964608u, 3199415091u, 1074503184u, 0, ATAN2_TOLERANCE, 0}, +{1145, 1056964608u, 3197737370u, 1074208297u, 0, ATAN2_TOLERANCE, 0}, +{1146, 1056964608u, 3196059648u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1147, 1056964608u, 3192704205u, 1073333321u, 0, ATAN2_TOLERANCE, 0}, +{1148, 1056964608u, 3189348762u, 1072586319u, 0, ATAN2_TOLERANCE, 0}, +{1149, 1056964608u, 3184315597u, 1071797277u, 0, ATAN2_TOLERANCE, 0}, +{1150, 1056964608u, 3175926989u, 1070977484u, 0, ATAN2_TOLERANCE, 0}, +{1151, 1056964608u, 1028443341u, 1069305321u, 0, ATAN2_TOLERANCE, 0}, +{1152, 1056964608u, 1036831949u, 1068485529u, 0, ATAN2_TOLERANCE, 0}, +{1153, 1056964608u, 1041865114u, 1067696486u, 0, ATAN2_TOLERANCE, 0}, +{1154, 1056964608u, 1045220557u, 1066949484u, 0, ATAN2_TOLERANCE, 0}, +{1155, 1056964608u, 1048576000u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1156, 1056964608u, 1050253722u, 1065608035u, 0, ATAN2_TOLERANCE, 0}, +{1157, 1056964608u, 1051931443u, 1064683308u, 0, ATAN2_TOLERANCE, 0}, +{1158, 1056964608u, 1053609165u, 1063609315u, 0, ATAN2_TOLERANCE, 0}, +{1159, 1056964608u, 1055286886u, 1062634992u, 0, ATAN2_TOLERANCE, 0}, +{1160, 1056964608u, 1056964608u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1161, 1056964608u, 1057803469u, 1060954483u, 0, ATAN2_TOLERANCE, 0}, +{1162, 1056964608u, 1058642330u, 1060231774u, 0, ATAN2_TOLERANCE, 0}, +{1163, 1056964608u, 1059481190u, 1059576747u, 0, ATAN2_TOLERANCE, 0}, +{1164, 1056964608u, 1060320051u, 1058982060u, 0, ATAN2_TOLERANCE, 0}, +{1165, 1056964608u, 1061158912u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{1166, 1056964608u, 1061997773u, 1057947741u, 0, ATAN2_TOLERANCE, 0}, +{1167, 1056964608u, 1062836634u, 1057496850u, 0, ATAN2_TOLERANCE, 0}, +{1168, 1056964608u, 1063675494u, 1057083701u, 0, ATAN2_TOLERANCE, 0}, +{1169, 1056964608u, 1064514355u, 1056443774u, 0, ATAN2_TOLERANCE, 0}, +{1170, 1057803469u, 3212836864u, 1076420933u, 0, ATAN2_TOLERANCE, 0}, +{1171, 1057803469u, 3211998003u, 1076328858u, 0, ATAN2_TOLERANCE, 0}, +{1172, 1057803469u, 3211159142u, 1076229228u, 0, ATAN2_TOLERANCE, 0}, +{1173, 1057803469u, 3210320282u, 1076121202u, 0, ATAN2_TOLERANCE, 0}, +{1174, 1057803469u, 3209481421u, 1076003834u, 0, ATAN2_TOLERANCE, 0}, +{1175, 1057803469u, 3208642560u, 1075876070u, 0, ATAN2_TOLERANCE, 0}, +{1176, 1057803469u, 3207803699u, 1075736733u, 0, ATAN2_TOLERANCE, 0}, +{1177, 1057803469u, 3206964838u, 1075584532u, 0, ATAN2_TOLERANCE, 0}, +{1178, 1057803469u, 3206125978u, 1075418058u, 0, ATAN2_TOLERANCE, 0}, +{1179, 1057803469u, 3205287117u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1180, 1057803469u, 3204448256u, 1075036234u, 0, ATAN2_TOLERANCE, 0}, +{1181, 1057803469u, 3202770534u, 1074817771u, 0, ATAN2_TOLERANCE, 0}, +{1182, 1057803469u, 3201092813u, 1074578976u, 0, ATAN2_TOLERANCE, 0}, +{1183, 1057803469u, 3199415091u, 1074318648u, 0, ATAN2_TOLERANCE, 0}, +{1184, 1057803469u, 3197737370u, 1074036025u, 0, ATAN2_TOLERANCE, 0}, +{1185, 1057803469u, 3196059648u, 1073720213u, 0, ATAN2_TOLERANCE, 0}, +{1186, 1057803469u, 3192704205u, 1073067106u, 0, ATAN2_TOLERANCE, 0}, +{1187, 1057803469u, 3189348762u, 1072374887u, 0, ATAN2_TOLERANCE, 0}, +{1188, 1057803469u, 3184315597u, 1071650123u, 0, ATAN2_TOLERANCE, 0}, +{1189, 1057803469u, 3175926989u, 1070901913u, 0, ATAN2_TOLERANCE, 0}, +{1190, 1057803469u, 1028443341u, 1069380892u, 0, ATAN2_TOLERANCE, 0}, +{1191, 1057803469u, 1036831949u, 1068632682u, 0, ATAN2_TOLERANCE, 0}, +{1192, 1057803469u, 1041865114u, 1067907919u, 0, ATAN2_TOLERANCE, 0}, +{1193, 1057803469u, 1045220557u, 1067215699u, 0, ATAN2_TOLERANCE, 0}, +{1194, 1057803469u, 1048576000u, 1066562592u, 0, ATAN2_TOLERANCE, 0}, +{1195, 1057803469u, 1050253722u, 1065952579u, 0, ATAN2_TOLERANCE, 0}, +{1196, 1057803469u, 1051931443u, 1065387333u, 0, ATAN2_TOLERANCE, 0}, +{1197, 1057803469u, 1053609165u, 1064380138u, 0, ATAN2_TOLERANCE, 0}, +{1198, 1057803469u, 1055286886u, 1063424957u, 0, ATAN2_TOLERANCE, 0}, +{1199, 1057803469u, 1056964608u, 1062551107u, 0, ATAN2_TOLERANCE, 0}, +{1200, 1057803469u, 1057803469u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1201, 1057803469u, 1058642330u, 1061023810u, 0, ATAN2_TOLERANCE, 0}, +{1202, 1057803469u, 1059481190u, 1060357916u, 0, ATAN2_TOLERANCE, 0}, +{1203, 1057803469u, 1060320051u, 1059749110u, 0, ATAN2_TOLERANCE, 0}, +{1204, 1057803469u, 1061158912u, 1059191764u, 0, ATAN2_TOLERANCE, 0}, +{1205, 1057803469u, 1061997773u, 1058680705u, 0, ATAN2_TOLERANCE, 0}, +{1206, 1057803469u, 1062836634u, 1058211236u, 0, ATAN2_TOLERANCE, 0}, +{1207, 1057803469u, 1063675494u, 1057779132u, 0, ATAN2_TOLERANCE, 0}, +{1208, 1057803469u, 1064514355u, 1057380612u, 0, ATAN2_TOLERANCE, 0}, +{1209, 1058642330u, 3212836864u, 1076263327u, 0, ATAN2_TOLERANCE, 0}, +{1210, 1058642330u, 3211998003u, 1076167291u, 0, ATAN2_TOLERANCE, 0}, +{1211, 1058642330u, 3211159142u, 1076063749u, 0, ATAN2_TOLERANCE, 0}, +{1212, 1058642330u, 3210320282u, 1075951927u, 0, ATAN2_TOLERANCE, 0}, +{1213, 1058642330u, 3209481421u, 1075830971u, 0, ATAN2_TOLERANCE, 0}, +{1214, 1058642330u, 3208642560u, 1075699942u, 0, ATAN2_TOLERANCE, 0}, +{1215, 1058642330u, 3207803699u, 1075557817u, 0, ATAN2_TOLERANCE, 0}, +{1216, 1058642330u, 3206964838u, 1075403495u, 0, ATAN2_TOLERANCE, 0}, +{1217, 1058642330u, 3206125978u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1218, 1058642330u, 3205287117u, 1075053566u, 0, ATAN2_TOLERANCE, 0}, +{1219, 1058642330u, 3204448256u, 1074855557u, 0, ATAN2_TOLERANCE, 0}, +{1220, 1058642330u, 3202770534u, 1074640653u, 0, ATAN2_TOLERANCE, 0}, +{1221, 1058642330u, 3201092813u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{1222, 1058642330u, 3199415091u, 1074156518u, 0, ATAN2_TOLERANCE, 0}, +{1223, 1058642330u, 3197737370u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1224, 1058642330u, 3196059648u, 1073453151u, 0, ATAN2_TOLERANCE, 0}, +{1225, 1058642330u, 3192704205u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{1226, 1058642330u, 3189348762u, 1072196433u, 0, ATAN2_TOLERANCE, 0}, +{1227, 1058642330u, 3184315597u, 1071526770u, 0, ATAN2_TOLERANCE, 0}, +{1228, 1058642330u, 3175926989u, 1070838842u, 0, ATAN2_TOLERANCE, 0}, +{1229, 1058642330u, 1028443341u, 1069443963u, 0, ATAN2_TOLERANCE, 0}, +{1230, 1058642330u, 1036831949u, 1068756035u, 0, ATAN2_TOLERANCE, 0}, +{1231, 1058642330u, 1041865114u, 1068086373u, 0, ATAN2_TOLERANCE, 0}, +{1232, 1058642330u, 1045220557u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{1233, 1058642330u, 1048576000u, 1066829655u, 0, ATAN2_TOLERANCE, 0}, +{1234, 1058642330u, 1050253722u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1235, 1058642330u, 1051931443u, 1065711593u, 0, ATAN2_TOLERANCE, 0}, +{1236, 1058642330u, 1053609165u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{1237, 1058642330u, 1055286886u, 1064133432u, 0, ATAN2_TOLERANCE, 0}, +{1238, 1058642330u, 1056964608u, 1063273815u, 0, ATAN2_TOLERANCE, 0}, +{1239, 1058642330u, 1057803469u, 1062481780u, 0, ATAN2_TOLERANCE, 0}, +{1240, 1058642330u, 1058642330u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1241, 1058642330u, 1059481190u, 1061082064u, 0, ATAN2_TOLERANCE, 0}, +{1242, 1058642330u, 1060320051u, 1060464776u, 0, ATAN2_TOLERANCE, 0}, +{1243, 1058642330u, 1061158912u, 1059896275u, 0, ATAN2_TOLERANCE, 0}, +{1244, 1058642330u, 1061997773u, 1059372157u, 0, ATAN2_TOLERANCE, 0}, +{1245, 1058642330u, 1062836634u, 1058888333u, 0, ATAN2_TOLERANCE, 0}, +{1246, 1058642330u, 1063675494u, 1058441047u, 0, ATAN2_TOLERANCE, 0}, +{1247, 1058642330u, 1064514355u, 1058026879u, 0, ATAN2_TOLERANCE, 0}, +{1248, 1059481190u, 3212836864u, 1076112518u, 0, ATAN2_TOLERANCE, 0}, +{1249, 1059481190u, 3211998003u, 1076013218u, 0, ATAN2_TOLERANCE, 0}, +{1250, 1059481190u, 3211159142u, 1075906536u, 0, ATAN2_TOLERANCE, 0}, +{1251, 1059481190u, 3210320282u, 1075791773u, 0, ATAN2_TOLERANCE, 0}, +{1252, 1059481190u, 3209481421u, 1075668168u, 0, ATAN2_TOLERANCE, 0}, +{1253, 1059481190u, 3208642560u, 1075534897u, 0, ATAN2_TOLERANCE, 0}, +{1254, 1059481190u, 3207803699u, 1075391086u, 0, ATAN2_TOLERANCE, 0}, +{1255, 1059481190u, 3206964838u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1256, 1059481190u, 3206125978u, 1075068129u, 0, ATAN2_TOLERANCE, 0}, +{1257, 1059481190u, 3205287117u, 1074887092u, 0, ATAN2_TOLERANCE, 0}, +{1258, 1059481190u, 3204448256u, 1074691800u, 0, ATAN2_TOLERANCE, 0}, +{1259, 1059481190u, 3202770534u, 1074481452u, 0, ATAN2_TOLERANCE, 0}, +{1260, 1059481190u, 3201092813u, 1074255422u, 0, ATAN2_TOLERANCE, 0}, +{1261, 1059481190u, 3199415091u, 1074013354u, 0, ATAN2_TOLERANCE, 0}, +{1262, 1059481190u, 3197737370u, 1073755263u, 0, ATAN2_TOLERANCE, 0}, +{1263, 1059481190u, 3196059648u, 1073221480u, 0, ATAN2_TOLERANCE, 0}, +{1264, 1059481190u, 3192704205u, 1072645393u, 0, ATAN2_TOLERANCE, 0}, +{1265, 1059481190u, 3189348762u, 1072043929u, 0, ATAN2_TOLERANCE, 0}, +{1266, 1059481190u, 3184315597u, 1071421918u, 0, ATAN2_TOLERANCE, 0}, +{1267, 1059481190u, 3175926989u, 1070785412u, 0, ATAN2_TOLERANCE, 0}, +{1268, 1059481190u, 1028443341u, 1069497393u, 0, ATAN2_TOLERANCE, 0}, +{1269, 1059481190u, 1036831949u, 1068860887u, 0, ATAN2_TOLERANCE, 0}, +{1270, 1059481190u, 1041865114u, 1068238876u, 0, ATAN2_TOLERANCE, 0}, +{1271, 1059481190u, 1045220557u, 1067637412u, 0, ATAN2_TOLERANCE, 0}, +{1272, 1059481190u, 1048576000u, 1067061325u, 0, ATAN2_TOLERANCE, 0}, +{1273, 1059481190u, 1050253722u, 1066514103u, 0, ATAN2_TOLERANCE, 0}, +{1274, 1059481190u, 1051931443u, 1065997922u, 0, ATAN2_TOLERANCE, 0}, +{1275, 1059481190u, 1053609165u, 1065513785u, 0, ATAN2_TOLERANCE, 0}, +{1276, 1059481190u, 1055286886u, 1064770236u, 0, ATAN2_TOLERANCE, 0}, +{1277, 1059481190u, 1056964608u, 1063928842u, 0, ATAN2_TOLERANCE, 0}, +{1278, 1059481190u, 1057803469u, 1063147673u, 0, ATAN2_TOLERANCE, 0}, +{1279, 1059481190u, 1058642330u, 1062423526u, 0, ATAN2_TOLERANCE, 0}, +{1280, 1059481190u, 1059481190u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1281, 1059481190u, 1060320051u, 1061131700u, 0, ATAN2_TOLERANCE, 0}, +{1282, 1059481190u, 1061158912u, 1060556454u, 0, ATAN2_TOLERANCE, 0}, +{1283, 1059481190u, 1061997773u, 1060023372u, 0, ATAN2_TOLERANCE, 0}, +{1284, 1059481190u, 1062836634u, 1059528949u, 0, ATAN2_TOLERANCE, 0}, +{1285, 1059481190u, 1063675494u, 1059069898u, 0, ATAN2_TOLERANCE, 0}, +{1286, 1059481190u, 1064514355u, 1058643172u, 0, ATAN2_TOLERANCE, 0}, +{1287, 1060320051u, 3212836864u, 1075968440u, 0, ATAN2_TOLERANCE, 0}, +{1288, 1060320051u, 3211998003u, 1075866515u, 0, ATAN2_TOLERANCE, 0}, +{1289, 1060320051u, 3211159142u, 1075757395u, 0, ATAN2_TOLERANCE, 0}, +{1290, 1060320051u, 3210320282u, 1075640452u, 0, ATAN2_TOLERANCE, 0}, +{1291, 1060320051u, 3209481421u, 1075515019u, 0, ATAN2_TOLERANCE, 0}, +{1292, 1060320051u, 3208642560u, 1075380386u, 0, ATAN2_TOLERANCE, 0}, +{1293, 1060320051u, 3207803699u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1294, 1060320051u, 3206964838u, 1075080538u, 0, ATAN2_TOLERANCE, 0}, +{1295, 1060320051u, 3206125978u, 1074913807u, 0, ATAN2_TOLERANCE, 0}, +{1296, 1060320051u, 3205287117u, 1074734891u, 0, ATAN2_TOLERANCE, 0}, +{1297, 1060320051u, 3204448256u, 1074543128u, 0, ATAN2_TOLERANCE, 0}, +{1298, 1060320051u, 3202770534u, 1074337976u, 0, ATAN2_TOLERANCE, 0}, +{1299, 1060320051u, 3201092813u, 1074119070u, 0, ATAN2_TOLERANCE, 0}, +{1300, 1060320051u, 3199415091u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1301, 1060320051u, 3197737370u, 1073537881u, 0, ATAN2_TOLERANCE, 0}, +{1302, 1060320051u, 3196059648u, 1073018896u, 0, ATAN2_TOLERANCE, 0}, +{1303, 1060320051u, 3192704205u, 1072475949u, 0, ATAN2_TOLERANCE, 0}, +{1304, 1060320051u, 3189348762u, 1071912182u, 0, ATAN2_TOLERANCE, 0}, +{1305, 1060320051u, 3184315597u, 1071331721u, 0, ATAN2_TOLERANCE, 0}, +{1306, 1060320051u, 3175926989u, 1070739573u, 0, ATAN2_TOLERANCE, 0}, +{1307, 1060320051u, 1028443341u, 1069543232u, 0, ATAN2_TOLERANCE, 0}, +{1308, 1060320051u, 1036831949u, 1068951084u, 0, ATAN2_TOLERANCE, 0}, +{1309, 1060320051u, 1041865114u, 1068370623u, 0, ATAN2_TOLERANCE, 0}, +{1310, 1060320051u, 1045220557u, 1067806856u, 0, ATAN2_TOLERANCE, 0}, +{1311, 1060320051u, 1048576000u, 1067263909u, 0, ATAN2_TOLERANCE, 0}, +{1312, 1060320051u, 1050253722u, 1066744924u, 0, ATAN2_TOLERANCE, 0}, +{1313, 1060320051u, 1051931443u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1314, 1060320051u, 1053609165u, 1065786489u, 0, ATAN2_TOLERANCE, 0}, +{1315, 1060320051u, 1055286886u, 1065344137u, 0, ATAN2_TOLERANCE, 0}, +{1316, 1060320051u, 1056964608u, 1064523530u, 0, ATAN2_TOLERANCE, 0}, +{1317, 1060320051u, 1057803469u, 1063756480u, 0, ATAN2_TOLERANCE, 0}, +{1318, 1060320051u, 1058642330u, 1063040813u, 0, ATAN2_TOLERANCE, 0}, +{1319, 1060320051u, 1059481190u, 1062373889u, 0, ATAN2_TOLERANCE, 0}, +{1320, 1060320051u, 1060320051u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1321, 1060320051u, 1061158912u, 1061174499u, 0, ATAN2_TOLERANCE, 0}, +{1322, 1060320051u, 1061997773u, 1060635966u, 0, ATAN2_TOLERANCE, 0}, +{1323, 1060320051u, 1062836634u, 1060134233u, 0, ATAN2_TOLERANCE, 0}, +{1324, 1060320051u, 1063675494u, 1059666464u, 0, ATAN2_TOLERANCE, 0}, +{1325, 1060320051u, 1064514355u, 1059229981u, 0, ATAN2_TOLERANCE, 0}, +{1326, 1061158912u, 3212836864u, 1075830971u, 0, ATAN2_TOLERANCE, 0}, +{1327, 1061158912u, 3211998003u, 1075727002u, 0, ATAN2_TOLERANCE, 0}, +{1328, 1061158912u, 3211159142u, 1075616067u, 0, ATAN2_TOLERANCE, 0}, +{1329, 1061158912u, 3210320282u, 1075497615u, 0, ATAN2_TOLERANCE, 0}, +{1330, 1061158912u, 3209481421u, 1075371065u, 0, ATAN2_TOLERANCE, 0}, +{1331, 1061158912u, 3208642560u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1332, 1061158912u, 3207803699u, 1075091238u, 0, ATAN2_TOLERANCE, 0}, +{1333, 1061158912u, 3206964838u, 1074936727u, 0, ATAN2_TOLERANCE, 0}, +{1334, 1061158912u, 3206125978u, 1074771682u, 0, ATAN2_TOLERANCE, 0}, +{1335, 1061158912u, 3205287117u, 1074595554u, 0, ATAN2_TOLERANCE, 0}, +{1336, 1061158912u, 3204448256u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{1337, 1061158912u, 3202770534u, 1074208297u, 0, ATAN2_TOLERANCE, 0}, +{1338, 1061158912u, 3201092813u, 1073996643u, 0, ATAN2_TOLERANCE, 0}, +{1339, 1061158912u, 3199415091u, 1073772960u, 0, ATAN2_TOLERANCE, 0}, +{1340, 1061158912u, 3197737370u, 1073333321u, 0, ATAN2_TOLERANCE, 0}, +{1341, 1061158912u, 3196059648u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{1342, 1061158912u, 3192704205u, 1072327494u, 0, ATAN2_TOLERANCE, 0}, +{1343, 1061158912u, 3189348762u, 1071797277u, 0, ATAN2_TOLERANCE, 0}, +{1344, 1061158912u, 3184315597u, 1071253325u, 0, ATAN2_TOLERANCE, 0}, +{1345, 1061158912u, 3175926989u, 1070699817u, 0, ATAN2_TOLERANCE, 0}, +{1346, 1061158912u, 1028443341u, 1069582988u, 0, ATAN2_TOLERANCE, 0}, +{1347, 1061158912u, 1036831949u, 1069029480u, 0, ATAN2_TOLERANCE, 0}, +{1348, 1061158912u, 1041865114u, 1068485529u, 0, ATAN2_TOLERANCE, 0}, +{1349, 1061158912u, 1045220557u, 1067955311u, 0, ATAN2_TOLERANCE, 0}, +{1350, 1061158912u, 1048576000u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{1351, 1061158912u, 1050253722u, 1066949484u, 0, ATAN2_TOLERANCE, 0}, +{1352, 1061158912u, 1051931443u, 1066478709u, 0, ATAN2_TOLERANCE, 0}, +{1353, 1061158912u, 1053609165u, 1066031343u, 0, ATAN2_TOLERANCE, 0}, +{1354, 1061158912u, 1055286886u, 1065608035u, 0, ATAN2_TOLERANCE, 0}, +{1355, 1061158912u, 1056964608u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{1356, 1061158912u, 1057803469u, 1064313825u, 0, ATAN2_TOLERANCE, 0}, +{1357, 1061158912u, 1058642330u, 1063609315u, 0, ATAN2_TOLERANCE, 0}, +{1358, 1061158912u, 1059481190u, 1062949135u, 0, ATAN2_TOLERANCE, 0}, +{1359, 1061158912u, 1060320051u, 1062331090u, 0, ATAN2_TOLERANCE, 0}, +{1360, 1061158912u, 1061158912u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1361, 1061158912u, 1061997773u, 1061211782u, 0, ATAN2_TOLERANCE, 0}, +{1362, 1061158912u, 1062836634u, 1060705581u, 0, ATAN2_TOLERANCE, 0}, +{1363, 1061158912u, 1063675494u, 1060231774u, 0, ATAN2_TOLERANCE, 0}, +{1364, 1061158912u, 1064514355u, 1059788036u, 0, ATAN2_TOLERANCE, 0}, +{1365, 1061997773u, 3212836864u, 1075699942u, 0, ATAN2_TOLERANCE, 0}, +{1366, 1061997773u, 3211998003u, 1075594447u, 0, ATAN2_TOLERANCE, 0}, +{1367, 1061997773u, 3211159142u, 1075482252u, 0, ATAN2_TOLERANCE, 0}, +{1368, 1061997773u, 3210320282u, 1075362873u, 0, ATAN2_TOLERANCE, 0}, +{1369, 1061997773u, 3209481421u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1370, 1061997773u, 3208642560u, 1075100559u, 0, ATAN2_TOLERANCE, 0}, +{1371, 1061997773u, 3207803699u, 1074956605u, 0, ATAN2_TOLERANCE, 0}, +{1372, 1061997773u, 3206964838u, 1074803456u, 0, ATAN2_TOLERANCE, 0}, +{1373, 1061997773u, 3206125978u, 1074640653u, 0, ATAN2_TOLERANCE, 0}, +{1374, 1061997773u, 3205287117u, 1074467790u, 0, ATAN2_TOLERANCE, 0}, +{1375, 1061997773u, 3204448256u, 1074284549u, 0, ATAN2_TOLERANCE, 0}, +{1376, 1061997773u, 3202770534u, 1074090730u, 0, ATAN2_TOLERANCE, 0}, +{1377, 1061997773u, 3201092813u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1378, 1061997773u, 3199415091u, 1073600952u, 0, ATAN2_TOLERANCE, 0}, +{1379, 1061997773u, 3197737370u, 1073150989u, 0, ATAN2_TOLERANCE, 0}, +{1380, 1061997773u, 3196059648u, 1072682185u, 0, ATAN2_TOLERANCE, 0}, +{1381, 1061997773u, 3192704205u, 1072196433u, 0, ATAN2_TOLERANCE, 0}, +{1382, 1061997773u, 3189348762u, 1071696214u, 0, ATAN2_TOLERANCE, 0}, +{1383, 1061997773u, 3184315597u, 1071184568u, 0, ATAN2_TOLERANCE, 0}, +{1384, 1061997773u, 3175926989u, 1070665010u, 0, ATAN2_TOLERANCE, 0}, +{1385, 1061997773u, 1028443341u, 1069617796u, 0, ATAN2_TOLERANCE, 0}, +{1386, 1061997773u, 1036831949u, 1069098237u, 0, ATAN2_TOLERANCE, 0}, +{1387, 1061997773u, 1041865114u, 1068586591u, 0, ATAN2_TOLERANCE, 0}, +{1388, 1061997773u, 1045220557u, 1068086373u, 0, ATAN2_TOLERANCE, 0}, +{1389, 1061997773u, 1048576000u, 1067600620u, 0, ATAN2_TOLERANCE, 0}, +{1390, 1061997773u, 1050253722u, 1067131816u, 0, ATAN2_TOLERANCE, 0}, +{1391, 1061997773u, 1051931443u, 1066681853u, 0, ATAN2_TOLERANCE, 0}, +{1392, 1061997773u, 1053609165u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1393, 1061997773u, 1055286886u, 1065843168u, 0, ATAN2_TOLERANCE, 0}, +{1394, 1061997773u, 1056964608u, 1065455532u, 0, ATAN2_TOLERANCE, 0}, +{1395, 1061997773u, 1057803469u, 1064824884u, 0, ATAN2_TOLERANCE, 0}, +{1396, 1061997773u, 1058642330u, 1064133432u, 0, ATAN2_TOLERANCE, 0}, +{1397, 1061997773u, 1059481190u, 1063482217u, 0, ATAN2_TOLERANCE, 0}, +{1398, 1061997773u, 1060320051u, 1062869623u, 0, ATAN2_TOLERANCE, 0}, +{1399, 1061997773u, 1061158912u, 1062293808u, 0, ATAN2_TOLERANCE, 0}, +{1400, 1061997773u, 1061997773u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1401, 1061997773u, 1062836634u, 1061244550u, 0, ATAN2_TOLERANCE, 0}, +{1402, 1061997773u, 1063675494u, 1060767036u, 0, ATAN2_TOLERANCE, 0}, +{1403, 1061997773u, 1064514355u, 1060318254u, 0, ATAN2_TOLERANCE, 0}, +{1404, 1062836634u, 3212836864u, 1075575148u, 0, ATAN2_TOLERANCE, 0}, +{1405, 1062836634u, 3211998003u, 1075468590u, 0, ATAN2_TOLERANCE, 0}, +{1406, 1062836634u, 3211159142u, 1075355617u, 0, ATAN2_TOLERANCE, 0}, +{1407, 1062836634u, 3210320282u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1408, 1062836634u, 3209481421u, 1075108751u, 0, ATAN2_TOLERANCE, 0}, +{1409, 1062836634u, 3208642560u, 1074974009u, 0, ATAN2_TOLERANCE, 0}, +{1410, 1062836634u, 3207803699u, 1074831172u, 0, ATAN2_TOLERANCE, 0}, +{1411, 1062836634u, 3206964838u, 1074679851u, 0, ATAN2_TOLERANCE, 0}, +{1412, 1062836634u, 3206125978u, 1074519697u, 0, ATAN2_TOLERANCE, 0}, +{1413, 1062836634u, 3205287117u, 1074350422u, 0, ATAN2_TOLERANCE, 0}, +{1414, 1062836634u, 3204448256u, 1074171826u, 0, ATAN2_TOLERANCE, 0}, +{1415, 1062836634u, 3202770534u, 1073983817u, 0, ATAN2_TOLERANCE, 0}, +{1416, 1062836634u, 3201092813u, 1073786447u, 0, ATAN2_TOLERANCE, 0}, +{1417, 1062836634u, 3199415091u, 1073418052u, 0, ATAN2_TOLERANCE, 0}, +{1418, 1062836634u, 3197737370u, 1072987595u, 0, ATAN2_TOLERANCE, 0}, +{1419, 1062836634u, 3196059648u, 1072540976u, 0, ATAN2_TOLERANCE, 0}, +{1420, 1062836634u, 3192704205u, 1072079932u, 0, ATAN2_TOLERANCE, 0}, +{1421, 1062836634u, 3189348762u, 1071606659u, 0, ATAN2_TOLERANCE, 0}, +{1422, 1062836634u, 3184315597u, 1071123782u, 0, ATAN2_TOLERANCE, 0}, +{1423, 1062836634u, 3175926989u, 1070634282u, 0, ATAN2_TOLERANCE, 0}, +{1424, 1062836634u, 1028443341u, 1069648523u, 0, ATAN2_TOLERANCE, 0}, +{1425, 1062836634u, 1036831949u, 1069159023u, 0, ATAN2_TOLERANCE, 0}, +{1426, 1062836634u, 1041865114u, 1068676146u, 0, ATAN2_TOLERANCE, 0}, +{1427, 1062836634u, 1045220557u, 1068202874u, 0, ATAN2_TOLERANCE, 0}, +{1428, 1062836634u, 1048576000u, 1067741829u, 0, ATAN2_TOLERANCE, 0}, +{1429, 1062836634u, 1050253722u, 1067295210u, 0, ATAN2_TOLERANCE, 0}, +{1430, 1062836634u, 1051931443u, 1066864753u, 0, ATAN2_TOLERANCE, 0}, +{1431, 1062836634u, 1053609165u, 1066451736u, 0, ATAN2_TOLERANCE, 0}, +{1432, 1062836634u, 1055286886u, 1066056996u, 0, ATAN2_TOLERANCE, 0}, +{1433, 1062836634u, 1056964608u, 1065680978u, 0, ATAN2_TOLERANCE, 0}, +{1434, 1062836634u, 1057803469u, 1065294353u, 0, ATAN2_TOLERANCE, 0}, +{1435, 1062836634u, 1058642330u, 1064617256u, 0, ATAN2_TOLERANCE, 0}, +{1436, 1062836634u, 1059481190u, 1063976640u, 0, ATAN2_TOLERANCE, 0}, +{1437, 1062836634u, 1060320051u, 1063371356u, 0, ATAN2_TOLERANCE, 0}, +{1438, 1062836634u, 1061158912u, 1062800008u, 0, ATAN2_TOLERANCE, 0}, +{1439, 1062836634u, 1061997773u, 1062261040u, 0, ATAN2_TOLERANCE, 0}, +{1440, 1062836634u, 1062836634u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1441, 1062836634u, 1063675494u, 1061273576u, 0, ATAN2_TOLERANCE, 0}, +{1442, 1062836634u, 1064514355u, 1060821684u, 0, ATAN2_TOLERANCE, 0}, +{1443, 1063675494u, 3212836864u, 1075456361u, 0, ATAN2_TOLERANCE, 0}, +{1444, 1063675494u, 3211998003u, 1075349144u, 0, ATAN2_TOLERANCE, 0}, +{1445, 1063675494u, 3211159142u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1446, 1063675494u, 3210320282u, 1075116007u, 0, ATAN2_TOLERANCE, 0}, +{1447, 1063675494u, 3209481421u, 1074989372u, 0, ATAN2_TOLERANCE, 0}, +{1448, 1063675494u, 3208642560u, 1074855557u, 0, ATAN2_TOLERANCE, 0}, +{1449, 1063675494u, 3207803699u, 1074714229u, 0, ATAN2_TOLERANCE, 0}, +{1450, 1063675494u, 3206964838u, 1074565088u, 0, ATAN2_TOLERANCE, 0}, +{1451, 1063675494u, 3206125978u, 1074407875u, 0, ATAN2_TOLERANCE, 0}, +{1452, 1063675494u, 3205287117u, 1074242396u, 0, ATAN2_TOLERANCE, 0}, +{1453, 1063675494u, 3204448256u, 1074068539u, 0, ATAN2_TOLERANCE, 0}, +{1454, 1063675494u, 3202770534u, 1073886292u, 0, ATAN2_TOLERANCE, 0}, +{1455, 1063675494u, 3201092813u, 1073649723u, 0, ATAN2_TOLERANCE, 0}, +{1456, 1063675494u, 3199415091u, 1073252664u, 0, ATAN2_TOLERANCE, 0}, +{1457, 1063675494u, 3197737370u, 1072840442u, 0, ATAN2_TOLERANCE, 0}, +{1458, 1063675494u, 3196059648u, 1072414270u, 0, ATAN2_TOLERANCE, 0}, +{1459, 1063675494u, 3192704205u, 1071975731u, 0, ATAN2_TOLERANCE, 0}, +{1460, 1063675494u, 3189348762u, 1071526770u, 0, ATAN2_TOLERANCE, 0}, +{1461, 1063675494u, 3184315597u, 1071069663u, 0, ATAN2_TOLERANCE, 0}, +{1462, 1063675494u, 3175926989u, 1070606958u, 0, ATAN2_TOLERANCE, 0}, +{1463, 1063675494u, 1028443341u, 1069675847u, 0, ATAN2_TOLERANCE, 0}, +{1464, 1063675494u, 1036831949u, 1069213143u, 0, ATAN2_TOLERANCE, 0}, +{1465, 1063675494u, 1041865114u, 1068756035u, 0, ATAN2_TOLERANCE, 0}, +{1466, 1063675494u, 1045220557u, 1068307075u, 0, ATAN2_TOLERANCE, 0}, +{1467, 1063675494u, 1048576000u, 1067868536u, 0, ATAN2_TOLERANCE, 0}, +{1468, 1063675494u, 1050253722u, 1067442363u, 0, ATAN2_TOLERANCE, 0}, +{1469, 1063675494u, 1051931443u, 1067030141u, 0, ATAN2_TOLERANCE, 0}, +{1470, 1063675494u, 1053609165u, 1066633083u, 0, ATAN2_TOLERANCE, 0}, +{1471, 1063675494u, 1055286886u, 1066252045u, 0, ATAN2_TOLERANCE, 0}, +{1472, 1063675494u, 1056964608u, 1065887552u, 0, ATAN2_TOLERANCE, 0}, +{1473, 1063675494u, 1057803469u, 1065539837u, 0, ATAN2_TOLERANCE, 0}, +{1474, 1063675494u, 1058642330u, 1065064543u, 0, ATAN2_TOLERANCE, 0}, +{1475, 1063675494u, 1059481190u, 1064435692u, 0, ATAN2_TOLERANCE, 0}, +{1476, 1063675494u, 1060320051u, 1063839125u, 0, ATAN2_TOLERANCE, 0}, +{1477, 1063675494u, 1061158912u, 1063273815u, 0, ATAN2_TOLERANCE, 0}, +{1478, 1063675494u, 1061997773u, 1062738554u, 0, ATAN2_TOLERANCE, 0}, +{1479, 1063675494u, 1062836634u, 1062232013u, 0, ATAN2_TOLERANCE, 0}, +{1480, 1063675494u, 1063675494u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1481, 1063675494u, 1064514355u, 1061299467u, 0, ATAN2_TOLERANCE, 0}, +{1482, 1064514355u, 3212836864u, 1075343335u, 0, ATAN2_TOLERANCE, 0}, +{1483, 1064514355u, 3211998003u, 1075235812u, 0, ATAN2_TOLERANCE, 0}, +{1484, 1064514355u, 3211159142u, 1075122480u, 0, ATAN2_TOLERANCE, 0}, +{1485, 1064514355u, 3210320282u, 1075003034u, 0, ATAN2_TOLERANCE, 0}, +{1486, 1064514355u, 3209481421u, 1074877177u, 0, ATAN2_TOLERANCE, 0}, +{1487, 1064514355u, 3208642560u, 1074744622u, 0, ATAN2_TOLERANCE, 0}, +{1488, 1064514355u, 3207803699u, 1074605108u, 0, ATAN2_TOLERANCE, 0}, +{1489, 1064514355u, 3206964838u, 1074458406u, 0, ATAN2_TOLERANCE, 0}, +{1490, 1064514355u, 3206125978u, 1074304333u, 0, ATAN2_TOLERANCE, 0}, +{1491, 1064514355u, 3205287117u, 1074142766u, 0, ATAN2_TOLERANCE, 0}, +{1492, 1064514355u, 3204448256u, 1073973661u, 0, ATAN2_TOLERANCE, 0}, +{1493, 1064514355u, 3202770534u, 1073797065u, 0, ATAN2_TOLERANCE, 0}, +{1494, 1064514355u, 3201092813u, 1073484451u, 0, ATAN2_TOLERANCE, 0}, +{1495, 1064514355u, 3199415091u, 1073102501u, 0, ATAN2_TOLERANCE, 0}, +{1496, 1064514355u, 3197737370u, 1072707301u, 0, ATAN2_TOLERANCE, 0}, +{1497, 1064514355u, 3196059648u, 1072299990u, 0, ATAN2_TOLERANCE, 0}, +{1498, 1064514355u, 3192704205u, 1071882007u, 0, ATAN2_TOLERANCE, 0}, +{1499, 1064514355u, 3189348762u, 1071455074u, 0, ATAN2_TOLERANCE, 0}, +{1500, 1064514355u, 3184315597u, 1071021174u, 0, ATAN2_TOLERANCE, 0}, +{1501, 1064514355u, 3175926989u, 1070582501u, 0, ATAN2_TOLERANCE, 0}, +{1502, 1064514355u, 1028443341u, 1069700304u, 0, ATAN2_TOLERANCE, 0}, +{1503, 1064514355u, 1036831949u, 1069261631u, 0, ATAN2_TOLERANCE, 0}, +{1504, 1064514355u, 1041865114u, 1068827731u, 0, ATAN2_TOLERANCE, 0}, +{1505, 1064514355u, 1045220557u, 1068400798u, 0, ATAN2_TOLERANCE, 0}, +{1506, 1064514355u, 1048576000u, 1067982815u, 0, ATAN2_TOLERANCE, 0}, +{1507, 1064514355u, 1050253722u, 1067575505u, 0, ATAN2_TOLERANCE, 0}, +{1508, 1064514355u, 1051931443u, 1067180305u, 0, ATAN2_TOLERANCE, 0}, +{1509, 1064514355u, 1053609165u, 1066798354u, 0, ATAN2_TOLERANCE, 0}, +{1510, 1064514355u, 1055286886u, 1066430499u, 0, ATAN2_TOLERANCE, 0}, +{1511, 1064514355u, 1056964608u, 1066077307u, 0, ATAN2_TOLERANCE, 0}, +{1512, 1064514355u, 1057803469u, 1065739097u, 0, ATAN2_TOLERANCE, 0}, +{1513, 1064514355u, 1058642330u, 1065415963u, 0, ATAN2_TOLERANCE, 0}, +{1514, 1064514355u, 1059481190u, 1064862417u, 0, ATAN2_TOLERANCE, 0}, +{1515, 1064514355u, 1060320051u, 1064275609u, 0, ATAN2_TOLERANCE, 0}, +{1516, 1064514355u, 1061158912u, 1063717553u, 0, ATAN2_TOLERANCE, 0}, +{1517, 1064514355u, 1061997773u, 1063187335u, 0, ATAN2_TOLERANCE, 0}, +{1518, 1064514355u, 1062836634u, 1062683905u, 0, ATAN2_TOLERANCE, 0}, +{1519, 1064514355u, 1063675494u, 1062206123u, 0, ATAN2_TOLERANCE, 0}, +{1520, 1064514355u, 1064514355u, 1061752795u, 0, ATAN2_TOLERANCE, 0}, +{1521, 1107800421u, 1203999711u, 967941446u, 0, ATAN2_TOLERANCE, 0}, +{1522, 3196650934u, 896005582u, 3217625024u, 0, ATAN2_TOLERANCE, 0}, +{1523, 3368700125u, 3308232444u, 3217681947u, 0, ATAN2_TOLERANCE, 0}, +{1524, 1224242132u, 3061363425u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1525, 1198712763u, 919636942u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1526, 3090780435u, 1035260608u, 3120782230u, 0, ATAN2_TOLERANCE, 0}, +{1527, 966554515u, 3234538174u, 1078529813u, 0, ATAN2_TOLERANCE, 0}, +{1528, 1312607135u, 1194999402u, 1070140898u, 0, ATAN2_TOLERANCE, 0}, +{1529, 1166191415u, 1018661564u, 1070141358u, 0, ATAN2_TOLERANCE, 0}, +{1530, 3111900019u, 1130472166u, 3046038371u, 0, ATAN2_TOLERANCE, 0}, +{1531, 1302107128u, 3370647675u, 1070153541u, 0, ATAN2_TOLERANCE, 0}, +{1532, 1052801068u, 3039122570u, 1070141416u, 0, ATAN2_TOLERANCE, 0}, +{1533, 1060849628u, 3081357692u, 1070141635u, 0, ATAN2_TOLERANCE, 0}, +{1534, 3484320003u, 3033957825u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1535, 3181522772u, 3305392896u, 3226013502u, 0, ATAN2_TOLERANCE, 0}, +{1536, 968192794u, 878547432u, 1070136401u, 0, ATAN2_TOLERANCE, 0}, +{1537, 3122346862u, 1111584337u, 3075305969u, 0, ATAN2_TOLERANCE, 0}, +{1538, 3471653172u, 1154138102u, 3217625044u, 0, ATAN2_TOLERANCE, 0}, +{1539, 3231467496u, 934336592u, 3217625014u, 0, ATAN2_TOLERANCE, 0}, +{1540, 1341514497u, 3466051188u, 1071425492u, 0, ATAN2_TOLERANCE, 0}, +{1541, 1272351391u, 3373485062u, 1070321354u, 0, ATAN2_TOLERANCE, 0}, +{1542, 3319724992u, 3354615790u, 3225773741u, 0, ATAN2_TOLERANCE, 0}, +{1543, 940236348u, 3304072663u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1544, 3251541546u, 3174764041u, 3217639886u, 0, ATAN2_TOLERANCE, 0}, +{1545, 3099843889u, 3355962282u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1546, 3371863479u, 1014861921u, 3217625050u, 0, ATAN2_TOLERANCE, 0}, +{1547, 3204069187u, 966573255u, 3217619919u, 0, ATAN2_TOLERANCE, 0}, +{1548, 1306460502u, 903489435u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1549, 1197542187u, 3024598921u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1550, 1184239996u, 3224098462u, 1070142575u, 0, ATAN2_TOLERANCE, 0}, +{1551, 1252490238u, 1173619825u, 1070129467u, 0, ATAN2_TOLERANCE, 0}, +{1552, 1001673627u, 3462631271u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1553, 976098044u, 1151967422u, 889412329u, 0, ATAN2_TOLERANCE, 0}, +{1554, 941796645u, 886451963u, 1070055119u, 0, ATAN2_TOLERANCE, 0}, +{1555, 1143233714u, 1007268238u, 1070141295u, 0, ATAN2_TOLERANCE, 0}, +{1556, 1139941253u, 1147688821u, 1056305106u, 0, ATAN2_TOLERANCE, 0}, +{1557, 3143717025u, 3234638157u, 3226011404u, 0, ATAN2_TOLERANCE, 0}, +{1558, 3048866608u, 3449209899u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1559, 3240298487u, 1020260821u, 3217604153u, 0, ATAN2_TOLERANCE, 0}, +{1560, 1288902137u, 3123875978u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1561, 1333134799u, 1338107877u, 1058060514u, 0, ATAN2_TOLERANCE, 0}, +{1562, 1187847971u, 1317663644u, 935219985u, 0, ATAN2_TOLERANCE, 0}, +{1563, 3329354473u, 3165437289u, 3217625062u, 0, ATAN2_TOLERANCE, 0}, +{1564, 1309289088u, 1019883016u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1565, 3444653659u, 1279248024u, 3215735586u, 0, ATAN2_TOLERANCE, 0}, +{1566, 1106778573u, 3304487767u, 1078464050u, 0, ATAN2_TOLERANCE, 0}, +{1567, 1140567947u, 3069174149u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1568, 1238569473u, 873035665u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1569, 1261071232u, 1182202773u, 1070129530u, 0, ATAN2_TOLERANCE, 0}, +{1570, 1175011025u, 3029705783u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1571, 1082692850u, 1211581107u, 935250732u, 0, ATAN2_TOLERANCE, 0}, +{1572, 974547519u, 3475164509u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1573, 3058097085u, 3104309359u, 3225917850u, 0, ATAN2_TOLERANCE, 0}, +{1574, 3107252546u, 1071134451u, 3101045579u, 0, ATAN2_TOLERANCE, 0}, +{1575, 3197942144u, 3094120030u, 3217626596u, 0, ATAN2_TOLERANCE, 0}, +{1576, 3403348556u, 3184653669u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1577, 3182301130u, 3460764044u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1578, 1136411063u, 1118097422u, 1068333915u, 0, ATAN2_TOLERANCE, 0}, +{1579, 3239231622u, 3302723069u, 3225991756u, 0, ATAN2_TOLERANCE, 0}, +{1580, 3417964312u, 1321337529u, 3161810981u, 0, ATAN2_TOLERANCE, 0}, +{1581, 3109481038u, 1143864063u, 3030261193u, 0, ATAN2_TOLERANCE, 0}, +{1582, 1148867223u, 1256486202u, 957104149u, 0, ATAN2_TOLERANCE, 0}, +{1583, 989687421u, 3372681320u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1584, 1152956913u, 3166480640u, 1070141533u, 0, ATAN2_TOLERANCE, 0}, +{1585, 892922651u, 3373029087u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1586, 1307091856u, 1103202538u, 1070141402u, 0, ATAN2_TOLERANCE, 0}, +{1587, 1077234132u, 3272167130u, 1078443495u, 0, ATAN2_TOLERANCE, 0}, +{1588, 1142167709u, 1096445242u, 1069948119u, 0, ATAN2_TOLERANCE, 0}, +{1589, 3426232834u, 1036705270u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1590, 3368566779u, 967249167u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1591, 3030724760u, 3349013503u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1592, 1138741813u, 3073453199u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1593, 982950501u, 982549888u, 1062100212u, 0, ATAN2_TOLERANCE, 0}, +{1594, 1142981585u, 1015602236u, 1070141184u, 0, ATAN2_TOLERANCE, 0}, +{1595, 3347165962u, 3135486696u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1596, 1009535440u, 3381353228u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1597, 3103736980u, 3402950505u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1598, 3126820946u, 1077903063u, 3113575606u, 0, ATAN2_TOLERANCE, 0}, +{1599, 3473956030u, 976891930u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1600, 3349098349u, 1055327704u, 3217625004u, 0, ATAN2_TOLERANCE, 0}, +{1601, 3152729489u, 1060398533u, 3156647575u, 0, ATAN2_TOLERANCE, 0}, +{1602, 945568720u, 3313485084u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1603, 3345489836u, 1108392401u, 3217619943u, 0, ATAN2_TOLERANCE, 0}, +{1604, 976791751u, 3230678102u, 1078529355u, 0, ATAN2_TOLERANCE, 0}, +{1605, 1004442355u, 3036510596u, 1070141986u, 0, ATAN2_TOLERANCE, 0}, +{1606, 1108485380u, 3173536878u, 1070150838u, 0, ATAN2_TOLERANCE, 0}, +{1607, 1061834641u, 972388096u, 1070136433u, 0, ATAN2_TOLERANCE, 0}, +{1608, 3381268392u, 1146976802u, 3217618480u, 0, ATAN2_TOLERANCE, 0}, +{1609, 3212952285u, 3329407365u, 3226013385u, 0, ATAN2_TOLERANCE, 0}, +{1610, 3466188568u, 1041678304u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1611, 3072456205u, 3160254633u, 3226010666u, 0, ATAN2_TOLERANCE, 0}, +{1612, 3319315516u, 3422089012u, 3226012767u, 0, ATAN2_TOLERANCE, 0}, +{1613, 3212614372u, 1152633030u, 3123959940u, 0, ATAN2_TOLERANCE, 0}, +{1614, 1315030230u, 3336225884u, 1070141651u, 0, ATAN2_TOLERANCE, 0}, +{1615, 1134593658u, 3456812581u, 1078530008u, 0, ATAN2_TOLERANCE, 0}, +{1616, 977281449u, 879922831u, 1070138817u, 0, ATAN2_TOLERANCE, 0}, +{1617, 1086198791u, 920125958u, 1070141394u, 0, ATAN2_TOLERANCE, 0}, +{1618, 1135271264u, 3284878412u, 1075598160u, 0, ATAN2_TOLERANCE, 0}, +{1619, 1094190727u, 1056854532u, 1069779349u, 0, ATAN2_TOLERANCE, 0}, +{1620, 1294665325u, 991185677u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1621, 3439134022u, 1043829691u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1622, 1325668223u, 970681762u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1623, 1092037607u, 1027330835u, 1070100690u, 0, ATAN2_TOLERANCE, 0}, +{1624, 3316278408u, 3455589207u, 3226013615u, 0, ATAN2_TOLERANCE, 0}, +{1625, 3295436768u, 3129873731u, 3217625060u, 0, ATAN2_TOLERANCE, 0}, +{1626, 1151984049u, 3074547120u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1627, 1129287043u, 3076527544u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1628, 1243664530u, 972879810u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1629, 950829092u, 929114193u, 1068784696u, 0, ATAN2_TOLERANCE, 0}, +{1630, 1115471979u, 3047246262u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1631, 3351092088u, 3024661404u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1632, 3424479544u, 3312047722u, 3217625811u, 0, ATAN2_TOLERANCE, 0}, +{1633, 3241193975u, 884465785u, 3217625050u, 0, ATAN2_TOLERANCE, 0}, +{1634, 1030934236u, 1045139240u, 1049911720u, 0, ATAN2_TOLERANCE, 0}, +{1635, 3131791114u, 3408392958u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1636, 1025254314u, 3057812821u, 1070142040u, 0, ATAN2_TOLERANCE, 0}, +{1637, 1110545760u, 3240144177u, 1072007490u, 0, ATAN2_TOLERANCE, 0}, +{1638, 3180213739u, 1108793820u, 3136378415u, 0, ATAN2_TOLERANCE, 0}, +{1639, 3361976590u, 3138179993u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1640, 881280146u, 3421884736u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1641, 3264443610u, 3222916705u, 3217898386u, 0, ATAN2_TOLERANCE, 0}, +{1642, 3374550627u, 3055856293u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1643, 899599265u, 3240118211u, 1078530010u, 0, ATAN2_TOLERANCE, 0}, +{1644, 1268194719u, 1332489410u, 1000590502u, 0, ATAN2_TOLERANCE, 0}, +{1645, 1133420220u, 1245770860u, 951924760u, 0, ATAN2_TOLERANCE, 0}, +{1646, 3295996963u, 3453334307u, 3226013649u, 0, ATAN2_TOLERANCE, 0}, +{1647, 1270887389u, 1156123987u, 1070140782u, 0, ATAN2_TOLERANCE, 0}, +{1648, 3325193181u, 993979179u, 3217625048u, 0, ATAN2_TOLERANCE, 0}, +{1649, 3116607482u, 3224327456u, 3226013087u, 0, ATAN2_TOLERANCE, 0}, +{1650, 3187892415u, 3118097315u, 3217652286u, 0, ATAN2_TOLERANCE, 0}, +{1651, 1189120494u, 978961471u, 1070141402u, 0, ATAN2_TOLERANCE, 0}, +{1652, 889030794u, 3129523970u, 1078528112u, 0, ATAN2_TOLERANCE, 0}, +{1653, 1323529208u, 3100744786u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1654, 3465768388u, 3190881451u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1655, 3426099899u, 1118756120u, 3217625035u, 0, ATAN2_TOLERANCE, 0}, +{1656, 3224857113u, 3398166843u, 3226013656u, 0, ATAN2_TOLERANCE, 0}, +{1657, 3357819026u, 3148475462u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1658, 1273397670u, 901308750u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1659, 3424831780u, 1304806106u, 3184655445u, 0, ATAN2_TOLERANCE, 0}, +{1660, 1257596246u, 3420832544u, 1077435618u, 0, ATAN2_TOLERANCE, 0}, +{1661, 1051773536u, 896271348u, 1070141381u, 0, ATAN2_TOLERANCE, 0}, +{1662, 3294752507u, 3113225954u, 3217625053u, 0, ATAN2_TOLERANCE, 0}, +{1663, 1090870906u, 3294742905u, 1078491301u, 0, ATAN2_TOLERANCE, 0}, +{1664, 1227582289u, 1208979668u, 1068410023u, 0, ATAN2_TOLERANCE, 0}, +{1665, 1137854355u, 3335041917u, 1078461353u, 0, ATAN2_TOLERANCE, 0}, +{1666, 3440773058u, 3204192793u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1667, 3101598400u, 3057760708u, 3217853098u, 0, ATAN2_TOLERANCE, 0}, +{1668, 3451216836u, 3347783723u, 3217626621u, 0, ATAN2_TOLERANCE, 0}, +{1669, 3437062994u, 3106834845u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1670, 1131196082u, 1164573183u, 1031884516u, 0, ATAN2_TOLERANCE, 0}, +{1671, 3460915348u, 1219372260u, 3217621509u, 0, ATAN2_TOLERANCE, 0}, +{1672, 3303035472u, 3153013020u, 3217625085u, 0, ATAN2_TOLERANCE, 0}, +{1673, 1053698677u, 3284313107u, 1078525672u, 0, ATAN2_TOLERANCE, 0}, +{1674, 3396166221u, 1201894512u, 3217444575u, 0, ATAN2_TOLERANCE, 0}, +{1675, 3458934263u, 1005577835u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1676, 1065761827u, 3333928591u, 1078529824u, 0, ATAN2_TOLERANCE, 0}, +{1677, 926665223u, 3150815797u, 1078522530u, 0, ATAN2_TOLERANCE, 0}, +{1678, 1199816046u, 3143776186u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1679, 3333779015u, 952421041u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1680, 948398145u, 3238273189u, 1078529978u, 0, ATAN2_TOLERANCE, 0}, +{1681, 1080781593u, 1213908300u, 931773831u, 0, ATAN2_TOLERANCE, 0}, +{1682, 3235326590u, 1271705594u, 3028716927u, 0, ATAN2_TOLERANCE, 0}, +{1683, 3118883815u, 1051802647u, 3131466655u, 0, ATAN2_TOLERANCE, 0}, +{1684, 3226990408u, 1110755136u, 3180896673u, 0, ATAN2_TOLERANCE, 0}, +{1685, 3117098218u, 1122474770u, 3059780203u, 0, ATAN2_TOLERANCE, 0}, +{1686, 1283624229u, 906796922u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1687, 970649315u, 1078286437u, 957218953u, 0, ATAN2_TOLERANCE, 0}, +{1688, 959776291u, 3280345347u, 1078530008u, 0, ATAN2_TOLERANCE, 0}, +{1689, 3341117305u, 3294559023u, 3217801722u, 0, ATAN2_TOLERANCE, 0}, +{1690, 1270734970u, 3355874874u, 1070187855u, 0, ATAN2_TOLERANCE, 0}, +{1691, 1106502045u, 1290849316u, 880911273u, 0, ATAN2_TOLERANCE, 0}, +{1692, 1157598381u, 3309023746u, 1076023102u, 0, ATAN2_TOLERANCE, 0}, +{1693, 3335234513u, 1002337336u, 3217625049u, 0, ATAN2_TOLERANCE, 0}, +{1694, 1279489061u, 1006049444u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1695, 3143920719u, 3131608518u, 3220590061u, 0, ATAN2_TOLERANCE, 0}, +{1696, 1148920078u, 1007674793u, 1070141329u, 0, ATAN2_TOLERANCE, 0}, +{1697, 3064988156u, 3230867340u, 3226013654u, 0, ATAN2_TOLERANCE, 0}, +{1698, 1109198803u, 1221754614u, 952039946u, 0, ATAN2_TOLERANCE, 0}, +{1699, 3219949483u, 1056167693u, 3215509131u, 0, ATAN2_TOLERANCE, 0}, +{1700, 3361149474u, 3387342069u, 3225527164u, 0, ATAN2_TOLERANCE, 0}, +{1701, 1207502108u, 3388073586u, 1078260522u, 0, ATAN2_TOLERANCE, 0}, +{1702, 3161756316u, 3143659754u, 3219516841u, 0, ATAN2_TOLERANCE, 0}, +{1703, 3160728744u, 3382954009u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1704, 1234530539u, 1079988872u, 1070141379u, 0, ATAN2_TOLERANCE, 0}, +{1705, 1017843965u, 1193076204u, 889949957u, 0, ATAN2_TOLERANCE, 0}, +{1706, 3306328852u, 1118701064u, 3217313958u, 0, ATAN2_TOLERANCE, 0}, +{1707, 1291910469u, 1211303367u, 1070130033u, 0, ATAN2_TOLERANCE, 0}, +{1708, 1131927531u, 3182962700u, 1070144446u, 0, ATAN2_TOLERANCE, 0}, +{1709, 3449879391u, 991614550u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1710, 970094304u, 3344590506u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1711, 1125551064u, 3331248076u, 1078495469u, 0, ATAN2_TOLERANCE, 0}, +{1712, 3427296372u, 3455289118u, 3225583748u, 0, ATAN2_TOLERANCE, 0}, +{1713, 1198917460u, 1327195159u, 936028460u, 0, ATAN2_TOLERANCE, 0}, +{1714, 3114686212u, 3476082461u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1715, 3393557778u, 3383396815u, 3221042705u, 0, ATAN2_TOLERANCE, 0}, +{1716, 1276853215u, 873199561u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1717, 3462778440u, 3349284325u, 3217625773u, 0, ATAN2_TOLERANCE, 0}, +{1718, 3360170117u, 3048354042u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1719, 3224245428u, 3271307999u, 3225923200u, 0, ATAN2_TOLERANCE, 0}, +{1720, 1120124467u, 1135619937u, 1049278053u, 0, ATAN2_TOLERANCE, 0}, +{1721, 1064364381u, 3180675544u, 1070789756u, 0, ATAN2_TOLERANCE, 0}, +{1722, 1268744779u, 3328452652u, 1070147261u, 0, ATAN2_TOLERANCE, 0}, +{1723, 1165195428u, 3390323168u, 1078523283u, 0, ATAN2_TOLERANCE, 0}, +{1724, 3247790039u, 909788142u, 3217625049u, 0, ATAN2_TOLERANCE, 0}, +{1725, 3215244648u, 1083988595u, 3196313290u, 0, ATAN2_TOLERANCE, 0}, +{1726, 3095275931u, 989153382u, 3171194471u, 0, ATAN2_TOLERANCE, 0}, +{1727, 3275973009u, 3450721670u, 3226013656u, 0, ATAN2_TOLERANCE, 0}, +{1728, 3028857014u, 3188853813u, 3226013651u, 0, ATAN2_TOLERANCE, 0}, +{1729, 3391162308u, 1291220039u, 3165077124u, 0, ATAN2_TOLERANCE, 0}, +{1730, 1044867873u, 3369493273u, 1078530009u, 0, ATAN2_TOLERANCE, 0}, +{1731, 1089986803u, 3462160118u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1732, 1251462432u, 3171021770u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1733, 3485236902u, 980772835u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1734, 3262169538u, 1268270462u, 3058327958u, 0, ATAN2_TOLERANCE, 0}, +{1735, 3080852256u, 994641495u, 3150865718u, 0, ATAN2_TOLERANCE, 0}, +{1736, 1022211242u, 922124181u, 1070139279u, 0, ATAN2_TOLERANCE, 0}, +{1737, 3071422941u, 3271100396u, 3226013658u, 0, ATAN2_TOLERANCE, 0}, +{1738, 989762529u, 3362011135u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1739, 1295475718u, 3212305413u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1740, 1002632518u, 3330388441u, 1078530009u, 0, ATAN2_TOLERANCE, 0}, +{1741, 3404372005u, 3450484255u, 3225923347u, 0, ATAN2_TOLERANCE, 0}, +{1742, 3158912530u, 3105501826u, 3217725508u, 0, ATAN2_TOLERANCE, 0}, +{1743, 1125800069u, 3256265749u, 1072149389u, 0, ATAN2_TOLERANCE, 0}, +{1744, 3138037576u, 3103365227u, 3218096449u, 0, ATAN2_TOLERANCE, 0}, +{1745, 999985470u, 3409354318u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1746, 1189421739u, 1056599002u, 1070141263u, 0, ATAN2_TOLERANCE, 0}, +{1747, 3075182644u, 3144159778u, 3225999287u, 0, ATAN2_TOLERANCE, 0}, +{1748, 3028099649u, 3391513557u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1749, 3132541814u, 3444521949u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1750, 1164046161u, 3440635788u, 1078529913u, 0, ATAN2_TOLERANCE, 0}, +{1751, 1292596266u, 3116569667u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1752, 3469748379u, 3412765608u, 3217698932u, 0, ATAN2_TOLERANCE, 0}, +{1753, 1314644642u, 3123051784u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1754, 948775569u, 3485444126u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1755, 1034611395u, 882288581u, 1070141374u, 0, ATAN2_TOLERANCE, 0}, +{1756, 3489122735u, 3372450889u, 3217625594u, 0, ATAN2_TOLERANCE, 0}, +{1757, 1181604787u, 3363067409u, 1078275131u, 0, ATAN2_TOLERANCE, 0}, +{1758, 3059042077u, 3204983963u, 3226013634u, 0, ATAN2_TOLERANCE, 0}, +{1759, 1043691622u, 3402603223u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1760, 3157534378u, 3451674717u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1761, 3400949680u, 3073750220u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1762, 3365581801u, 1175843167u, 3217371050u, 0, ATAN2_TOLERANCE, 0}, +{1763, 3189917167u, 927278934u, 3217624429u, 0, ATAN2_TOLERANCE, 0}, +{1764, 969804941u, 3355439348u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1765, 1139120919u, 3270515074u, 1072286397u, 0, ATAN2_TOLERANCE, 0}, +{1766, 934308144u, 3118191228u, 1078319812u, 0, ATAN2_TOLERANCE, 0}, +{1767, 1220524226u, 1152648002u, 1070110636u, 0, ATAN2_TOLERANCE, 0}, +{1768, 3162548604u, 3461790298u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1769, 3382391700u, 3296962745u, 3217632000u, 0, ATAN2_TOLERANCE, 0}, +{1770, 1156767533u, 1088986462u, 1070110019u, 0, ATAN2_TOLERANCE, 0}, +{1771, 3079222483u, 3312324949u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1772, 994934087u, 967678094u, 1069258844u, 0, ATAN2_TOLERANCE, 0}, +{1773, 3185240099u, 1123403720u, 3127116361u, 0, ATAN2_TOLERANCE, 0}, +{1774, 3479873563u, 1246277393u, 3217618045u, 0, ATAN2_TOLERANCE, 0}, +{1775, 3424264117u, 3434026174u, 3224274563u, 0, ATAN2_TOLERANCE, 0}, +{1776, 3228365887u, 1216775310u, 3076618514u, 0, ATAN2_TOLERANCE, 0}, +{1777, 3125775254u, 955826310u, 3216377565u, 0, ATAN2_TOLERANCE, 0}, +{1778, 1037464105u, 3121544932u, 1070185103u, 0, ATAN2_TOLERANCE, 0}, +{1779, 1311706596u, 1254918706u, 1070064830u, 0, ATAN2_TOLERANCE, 0}, +{1780, 918212457u, 1017468331u, 965779528u, 0, ATAN2_TOLERANCE, 0}, +{1781, 1337315179u, 3461361185u, 1071333966u, 0, ATAN2_TOLERANCE, 0}, +{1782, 1131358407u, 3325958870u, 1078447574u, 0, ATAN2_TOLERANCE, 0}, +{1783, 1156517523u, 3343716230u, 1078377276u, 0, ATAN2_TOLERANCE, 0}, +{1784, 3210802820u, 3207408574u, 3222176882u, 0, ATAN2_TOLERANCE, 0}, +{1785, 3337499209u, 1226297264u, 3175656659u, 0, ATAN2_TOLERANCE, 0}, +{1786, 3468429030u, 3253874001u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1787, 3253515800u, 1189005947u, 3129474916u, 0, ATAN2_TOLERANCE, 0}, +{1788, 3055299953u, 3047908678u, 3221530216u, 0, ATAN2_TOLERANCE, 0}, +{1789, 959956547u, 876324728u, 1070133038u, 0, ATAN2_TOLERANCE, 0}, +{1790, 3425290480u, 1139193797u, 3217624964u, 0, ATAN2_TOLERANCE, 0}, +{1791, 1039917375u, 1122740999u, 982044192u, 0, ATAN2_TOLERANCE, 0}, +{1792, 3220979495u, 3429223871u, 3226013658u, 0, ATAN2_TOLERANCE, 0}, +{1793, 1311016004u, 3334899880u, 1070141712u, 0, ATAN2_TOLERANCE, 0}, +{1794, 1128016396u, 1105151547u, 1068906176u, 0, ATAN2_TOLERANCE, 0}, +{1795, 3210335769u, 3100646155u, 3217626029u, 0, ATAN2_TOLERANCE, 0}, +{1796, 3022705759u, 3404762495u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1797, 3144504834u, 1162227076u, 3046722218u, 0, ATAN2_TOLERANCE, 0}, +{1798, 1213609983u, 919983950u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1799, 1246902946u, 3064047808u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1800, 3362082828u, 3374056268u, 3224536668u, 0, ATAN2_TOLERANCE, 0}, +{1801, 1029480631u, 3047777170u, 1070141599u, 0, ATAN2_TOLERANCE, 0}, +{1802, 3153568584u, 3106514232u, 3217804606u, 0, ATAN2_TOLERANCE, 0}, +{1803, 3384988527u, 3109485565u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1804, 3235395924u, 1132055244u, 3168635683u, 0, ATAN2_TOLERANCE, 0}, +{1805, 1228636133u, 886552820u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1806, 3161654634u, 3335899347u, 3226013656u, 0, ATAN2_TOLERANCE, 0}, +{1807, 3162655243u, 3307203982u, 3226013633u, 0, ATAN2_TOLERANCE, 0}, +{1808, 1165476654u, 3350219111u, 1078345914u, 0, ATAN2_TOLERANCE, 0}, +{1809, 1017239798u, 3438501281u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1810, 1149651309u, 970030475u, 1070141400u, 0, ATAN2_TOLERANCE, 0}, +{1811, 1111943722u, 3122211334u, 1070141501u, 0, ATAN2_TOLERANCE, 0}, +{1812, 1189849849u, 3382739134u, 1078433800u, 0, ATAN2_TOLERANCE, 0}, +{1813, 3204848496u, 3141519085u, 3217671909u, 0, ATAN2_TOLERANCE, 0}, +{1814, 1249758327u, 3104759211u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1815, 3092982276u, 3445282331u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1816, 1168098747u, 1316854744u, 916539235u, 0, ATAN2_TOLERANCE, 0}, +{1817, 3301009024u, 3406174560u, 3226012920u, 0, ATAN2_TOLERANCE, 0}, +{1818, 3233089227u, 1212652543u, 3085445853u, 0, ATAN2_TOLERANCE, 0}, +{1819, 3218245284u, 1238873830u, 3044661167u, 0, ATAN2_TOLERANCE, 0}, +{1820, 3215981890u, 3240474694u, 3225460117u, 0, ATAN2_TOLERANCE, 0}, +{1821, 1266687209u, 3092038122u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1822, 3487959775u, 3331372071u, 3217625071u, 0, ATAN2_TOLERANCE, 0}, +{1823, 3345065699u, 3282620725u, 3217674080u, 0, ATAN2_TOLERANCE, 0}, +{1824, 935847271u, 1067255804u, 933425332u, 0, ATAN2_TOLERANCE, 0}, +{1825, 3410336089u, 1111437780u, 3217625020u, 0, ATAN2_TOLERANCE, 0}, +{1826, 1141063391u, 1168908072u, 1036164544u, 0, ATAN2_TOLERANCE, 0}, +{1827, 3059263153u, 3067795684u, 3224085849u, 0, ATAN2_TOLERANCE, 0}, +{1828, 3353679791u, 897158391u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1829, 1001823878u, 1016826861u, 1049766982u, 0, ATAN2_TOLERANCE, 0}, +{1830, 1009130212u, 1004302940u, 1065100489u, 0, ATAN2_TOLERANCE, 0}, +{1831, 3367127535u, 943136342u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1832, 1032920919u, 3449126417u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1833, 3281952870u, 3147012185u, 3217625170u, 0, ATAN2_TOLERANCE, 0}, +{1834, 1237868497u, 3048281802u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1835, 1153753924u, 3322269242u, 1077767076u, 0, ATAN2_TOLERANCE, 0}, +{1836, 1120261759u, 892210998u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1837, 3226328360u, 3366432856u, 3226013619u, 0, ATAN2_TOLERANCE, 0}, +{1838, 3349595986u, 3251588707u, 3217627596u, 0, ATAN2_TOLERANCE, 0}, +{1839, 3166889490u, 3306023523u, 3226013615u, 0, ATAN2_TOLERANCE, 0}, +{1840, 1087750238u, 1099325523u, 1052887712u, 0, ATAN2_TOLERANCE, 0}, +{1841, 3121620061u, 3359488363u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1842, 1066116543u, 3072159933u, 1070141475u, 0, ATAN2_TOLERANCE, 0}, +{1843, 3051923237u, 3364074347u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1844, 1030612298u, 3345396001u, 1078530007u, 0, ATAN2_TOLERANCE, 0}, +{1845, 1331680743u, 1009396165u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1846, 1045232522u, 3234993273u, 1078402159u, 0, ATAN2_TOLERANCE, 0}, +{1847, 3119858470u, 962515365u, 3214048321u, 0, ATAN2_TOLERANCE, 0}, +{1848, 3349432725u, 928848003u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1849, 912423027u, 3184646319u, 1078529872u, 0, ATAN2_TOLERANCE, 0}, +{1850, 3228795133u, 3273940030u, 3225916583u, 0, ATAN2_TOLERANCE, 0}, +{1851, 3194674746u, 3112269709u, 3217634082u, 0, ATAN2_TOLERANCE, 0}, +{1852, 3296784303u, 3276182352u, 3219220450u, 0, ATAN2_TOLERANCE, 0}, +{1853, 965402291u, 3107104376u, 1074339079u, 0, ATAN2_TOLERANCE, 0}, +{1854, 3388153589u, 3426245389u, 3225840904u, 0, ATAN2_TOLERANCE, 0}, +{1855, 1133410485u, 3329658993u, 1078454282u, 0, ATAN2_TOLERANCE, 0}, +{1856, 3136790322u, 1088652637u, 3112914680u, 0, ATAN2_TOLERANCE, 0}, +{1857, 3369970587u, 959121458u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1858, 1270451568u, 928393353u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1859, 989498922u, 3088358419u, 1070296868u, 0, ATAN2_TOLERANCE, 0}, +{1860, 1280215674u, 3148135875u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1861, 1171873518u, 954709738u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1862, 3298258100u, 935525182u, 3217625050u, 0, ATAN2_TOLERANCE, 0}, +{1863, 1001897182u, 3191875320u, 1078404716u, 0, ATAN2_TOLERANCE, 0}, +{1864, 3152777939u, 3245830463u, 3226011709u, 0, ATAN2_TOLERANCE, 0}, +{1865, 985903305u, 3333087577u, 1078530010u, 0, ATAN2_TOLERANCE, 0}, +{1866, 982612185u, 923582663u, 1070077994u, 0, ATAN2_TOLERANCE, 0}, +{1867, 3267868136u, 1208301947u, 3124748530u, 0, ATAN2_TOLERANCE, 0}, +{1868, 3319048157u, 1172271145u, 3208821711u, 0, ATAN2_TOLERANCE, 0}, +{1869, 3301461672u, 1233693827u, 3132856391u, 0, ATAN2_TOLERANCE, 0}, +{1870, 3364525678u, 3089849671u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1871, 3146660041u, 3143695961u, 3222232199u, 0, ATAN2_TOLERANCE, 0}, +{1872, 3467121799u, 3023584354u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1873, 1151257041u, 3084216427u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1874, 3097873255u, 3219266640u, 3226013471u, 0, ATAN2_TOLERANCE, 0}, +{1875, 3130670309u, 3192399254u, 3225988407u, 0, ATAN2_TOLERANCE, 0}, +{1876, 1017573824u, 3130901062u, 1070636269u, 0, ATAN2_TOLERANCE, 0}, +{1877, 1258369714u, 3462258576u, 1078491850u, 0, ATAN2_TOLERANCE, 0}, +{1878, 1216602683u, 3371396332u, 1076447486u, 0, ATAN2_TOLERANCE, 0}, +{1879, 3297265739u, 1214184410u, 3147593150u, 0, ATAN2_TOLERANCE, 0}, +{1880, 1071940738u, 3311731012u, 1078527967u, 0, ATAN2_TOLERANCE, 0}, +{1881, 922601356u, 3337171870u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1882, 3462285635u, 3444030332u, 3219478650u, 0, ATAN2_TOLERANCE, 0}, +{1883, 3357177805u, 1085464241u, 3217624754u, 0, ATAN2_TOLERANCE, 0}, +{1884, 3049120080u, 900832851u, 3209796011u, 0, ATAN2_TOLERANCE, 0}, +{1885, 1153863660u, 1011991342u, 1070141335u, 0, ATAN2_TOLERANCE, 0}, +{1886, 3034243695u, 917098003u, 3181683726u, 0, ATAN2_TOLERANCE, 0}, +{1887, 1249365132u, 3278686216u, 1070141892u, 0, ATAN2_TOLERANCE, 0}, +{1888, 3046215730u, 3211219980u, 3226013654u, 0, ATAN2_TOLERANCE, 0}, +{1889, 3047251716u, 1090787353u, 3021758111u, 0, ATAN2_TOLERANCE, 0}, +{1890, 3131219358u, 3471261157u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1891, 3222096285u, 1198013705u, 3088825940u, 0, ATAN2_TOLERANCE, 0}, +{1892, 1297708818u, 3079166173u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1893, 3345532722u, 3383708463u, 3225839704u, 0, ATAN2_TOLERANCE, 0}, +{1894, 3418753236u, 3481843070u, 3225989925u, 0, ATAN2_TOLERANCE, 0}, +{1895, 1277417964u, 3487506626u, 1078505948u, 0, ATAN2_TOLERANCE, 0}, +{1896, 987577257u, 1152077087u, 900026212u, 0, ATAN2_TOLERANCE, 0}, +{1897, 3161606610u, 3190282989u, 3225636292u, 0, ATAN2_TOLERANCE, 0}, +{1898, 888030585u, 3062367380u, 1078072618u, 0, ATAN2_TOLERANCE, 0}, +{1899, 1043442869u, 3311393817u, 1078529807u, 0, ATAN2_TOLERANCE, 0}, +{1900, 3320923228u, 3464544249u, 3226013629u, 0, ATAN2_TOLERANCE, 0}, +{1901, 1337400405u, 3488844154u, 1075825929u, 0, ATAN2_TOLERANCE, 0}, +{1902, 3400348640u, 3129868490u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1903, 1250249095u, 1069023744u, 1070141400u, 0, ATAN2_TOLERANCE, 0}, +{1904, 3284411233u, 1173613526u, 3175984512u, 0, ATAN2_TOLERANCE, 0}, +{1905, 1215968622u, 3469884568u, 1078529401u, 0, ATAN2_TOLERANCE, 0}, +{1906, 3061638260u, 3116222327u, 3225969995u, 0, ATAN2_TOLERANCE, 0}, +{1907, 1025404104u, 1066370251u, 1024277766u, 0, ATAN2_TOLERANCE, 0}, +{1908, 3138086437u, 3195983510u, 3225977811u, 0, ATAN2_TOLERANCE, 0}, +{1909, 3091024506u, 3456196859u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1910, 3362748242u, 3369843597u, 3223921029u, 0, ATAN2_TOLERANCE, 0}, +{1911, 3099671635u, 3218383623u, 3226013426u, 0, ATAN2_TOLERANCE, 0}, +{1912, 1252237719u, 1121169249u, 1070141237u, 0, ATAN2_TOLERANCE, 0}, +{1913, 3327895594u, 1224511805u, 3168704100u, 0, ATAN2_TOLERANCE, 0}, +{1914, 3082454432u, 889268276u, 3217443557u, 0, ATAN2_TOLERANCE, 0}, +{1915, 3396161504u, 1182798837u, 3217589681u, 0, ATAN2_TOLERANCE, 0}, +{1916, 1099710167u, 887180181u, 1070141402u, 0, ATAN2_TOLERANCE, 0}, +{1917, 1157186482u, 1288722647u, 932782932u, 0, ATAN2_TOLERANCE, 0}, +{1918, 1282110851u, 3176633124u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1919, 3477008113u, 1331845018u, 3207816178u, 0, ATAN2_TOLERANCE, 0}, +{1920, 3292127294u, 3409957764u, 3226013411u, 0, ATAN2_TOLERANCE, 0}, +{1921, 1123357102u, 3281307320u, 1076891530u, 0, ATAN2_TOLERANCE, 0}, +{1922, 1106837025u, 3088080674u, 1070141412u, 0, ATAN2_TOLERANCE, 0}, +{1923, 1049949008u, 1130799489u, 983913904u, 0, ATAN2_TOLERANCE, 0}, +{1924, 1253017688u, 942062372u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1925, 1108543194u, 3281299199u, 1078014074u, 0, ATAN2_TOLERANCE, 0}, +{1926, 1160162706u, 1264067367u, 960850742u, 0, ATAN2_TOLERANCE, 0}, +{1927, 3438080027u, 3107114149u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1928, 3344574751u, 3111270744u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1929, 1152416724u, 962669179u, 1070141401u, 0, ATAN2_TOLERANCE, 0}, +{1930, 1218239308u, 1126238113u, 1070137198u, 0, ATAN2_TOLERANCE, 0}, +{1931, 3263310567u, 1030748197u, 3217617499u, 0, ATAN2_TOLERANCE, 0}, +{1932, 972485427u, 1124312043u, 913317624u, 0, ATAN2_TOLERANCE, 0}, +{1933, 3290264612u, 1124703898u, 3215820437u, 0, ATAN2_TOLERANCE, 0}, +{1934, 3222106584u, 1183748648u, 3103652430u, 0, ATAN2_TOLERANCE, 0}, +{1935, 947914771u, 3181847068u, 1078526873u, 0, ATAN2_TOLERANCE, 0}, +{1936, 3167730654u, 3195765940u, 3225582168u, 0, ATAN2_TOLERANCE, 0}, +{1937, 1098530298u, 3255870890u, 1076817855u, 0, ATAN2_TOLERANCE, 0}, +{1938, 1277649137u, 961171401u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1939, 3090306474u, 3124785016u, 3225770994u, 0, ATAN2_TOLERANCE, 0}, +{1940, 3244032016u, 3045313345u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1941, 3033122376u, 3049877065u, 3224984460u, 0, ATAN2_TOLERANCE, 0}, +{1942, 1096155623u, 1256423752u, 904974295u, 0, ATAN2_TOLERANCE, 0}, +{1943, 873151908u, 3246562559u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1944, 3317196817u, 989537151u, 3217625048u, 0, ATAN2_TOLERANCE, 0}, +{1945, 3345634950u, 959901149u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1946, 3189860276u, 883598767u, 3217625034u, 0, ATAN2_TOLERANCE, 0}, +{1947, 3396917283u, 3066326686u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1948, 3317032737u, 3143803722u, 3217625056u, 0, ATAN2_TOLERANCE, 0}, +{1949, 1200051436u, 1163802508u, 1069711335u, 0, ATAN2_TOLERANCE, 0}, +{1950, 1306520561u, 957302464u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1951, 3475052219u, 1284049853u, 3217402085u, 0, ATAN2_TOLERANCE, 0}, +{1952, 3085636260u, 1107682820u, 3043014567u, 0, ATAN2_TOLERANCE, 0}, +{1953, 3393227708u, 3271879112u, 3217625404u, 0, ATAN2_TOLERANCE, 0}, +{1954, 3349005404u, 3080993030u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1955, 3154720153u, 3443720494u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1956, 1262863321u, 1219003129u, 1069918088u, 0, ATAN2_TOLERANCE, 0}, +{1957, 1053387478u, 3184880021u, 1072313561u, 0, ATAN2_TOLERANCE, 0}, +{1958, 3387653691u, 3347783852u, 3217934656u, 0, ATAN2_TOLERANCE, 0}, +{1959, 3136364836u, 1018492227u, 3182046039u, 0, ATAN2_TOLERANCE, 0}, +{1960, 1338680611u, 1166078045u, 1070141398u, 0, ATAN2_TOLERANCE, 0}, +{1961, 1112891928u, 3074730425u, 1070141404u, 0, ATAN2_TOLERANCE, 0}, +{1962, 893449284u, 1052877339u, 905910827u, 0, ATAN2_TOLERANCE, 0}, +{1963, 3105373037u, 3246705916u, 3226013622u, 0, ATAN2_TOLERANCE, 0}, +{1964, 1190105283u, 3033907262u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{1965, 1011225926u, 1180485180u, 895856689u, 0, ATAN2_TOLERANCE, 0}, +{1966, 1043025031u, 987068973u, 1070059733u, 0, ATAN2_TOLERANCE, 0}, +{1967, 3125834184u, 896953754u, 3217615366u, 0, ATAN2_TOLERANCE, 0}, +{1968, 1120888322u, 1086209113u, 1069661027u, 0, ATAN2_TOLERANCE, 0}, +{1969, 1315217243u, 3396371713u, 1070175876u, 0, ATAN2_TOLERANCE, 0}, +{1970, 3137758475u, 1039403054u, 3163355342u, 0, ATAN2_TOLERANCE, 0}, +{1971, 1040617590u, 1034835971u, 1065285491u, 0, ATAN2_TOLERANCE, 0}, +{1972, 955384253u, 3344785562u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1973, 904255535u, 1019967545u, 949000081u, 0, ATAN2_TOLERANCE, 0}, +{1974, 1022984119u, 3113891410u, 1070222414u, 0, ATAN2_TOLERANCE, 0}, +{1975, 997362368u, 3112875428u, 1070740064u, 0, ATAN2_TOLERANCE, 0}, +{1976, 1168623062u, 1143306482u, 1069112396u, 0, ATAN2_TOLERANCE, 0}, +{1977, 878737490u, 3269908326u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{1978, 1039827284u, 1072928888u, 1032024878u, 0, ATAN2_TOLERANCE, 0}, +{1979, 1021564080u, 1064468397u, 1022390853u, 0, ATAN2_TOLERANCE, 0}, +{1980, 3458669745u, 3033299853u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1981, 3327516316u, 3405380971u, 3226006650u, 0, ATAN2_TOLERANCE, 0}, +{1982, 1040711112u, 3229444200u, 1078389384u, 0, ATAN2_TOLERANCE, 0}, +{1983, 1134528351u, 3365952513u, 1078525936u, 0, ATAN2_TOLERANCE, 0}, +{1984, 3414352838u, 3350285760u, 3217669438u, 0, ATAN2_TOLERANCE, 0}, +{1985, 1133689539u, 1067460093u, 1070105638u, 0, ATAN2_TOLERANCE, 0}, +{1986, 3455688478u, 3333091960u, 3217625401u, 0, ATAN2_TOLERANCE, 0}, +{1987, 1137634874u, 1137038869u, 1062129683u, 0, ATAN2_TOLERANCE, 0}, +{1988, 3415502662u, 955510692u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{1989, 954999730u, 969618597u, 1049674404u, 0, ATAN2_TOLERANCE, 0}, +{1990, 1066157309u, 3241712664u, 1078132839u, 0, ATAN2_TOLERANCE, 0}, +{1991, 3436353675u, 1174967495u, 3217624387u, 0, ATAN2_TOLERANCE, 0}, +{1992, 3108347547u, 3434003435u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{1993, 3064200154u, 3158080507u, 3226011877u, 0, ATAN2_TOLERANCE, 0}, +{1994, 3272661536u, 3461799138u, 3226013658u, 0, ATAN2_TOLERANCE, 0}, +{1995, 1170245333u, 1233406410u, 1002064036u, 0, ATAN2_TOLERANCE, 0}, +{1996, 1219052056u, 3369557946u, 1075736302u, 0, ATAN2_TOLERANCE, 0}, +{1997, 3318983619u, 3259663338u, 3217687751u, 0, ATAN2_TOLERANCE, 0}, +{1998, 3146190320u, 889646054u, 3217624028u, 0, ATAN2_TOLERANCE, 0}, +{1999, 1299683827u, 966031619u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2000, 3086068902u, 3484245751u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2001, 3064155399u, 3176569312u, 3226013269u, 0, ATAN2_TOLERANCE, 0}, +{2002, 3040314717u, 1071290674u, 3033983935u, 0, ATAN2_TOLERANCE, 0}, +{2003, 3257224022u, 3361778245u, 3226012905u, 0, ATAN2_TOLERANCE, 0}, +{2004, 1229268598u, 1066965677u, 1070141390u, 0, ATAN2_TOLERANCE, 0}, +{2005, 1086717248u, 3423795374u, 1078530010u, 0, ATAN2_TOLERANCE, 0}, +{2006, 3434884607u, 3029593823u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2007, 3464955606u, 1017987696u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2008, 1025278524u, 3121856207u, 1070265127u, 0, ATAN2_TOLERANCE, 0}, +{2009, 1242829722u, 3233935671u, 1070141424u, 0, ATAN2_TOLERANCE, 0}, +{2010, 3075149137u, 1117325737u, 3022640362u, 0, ATAN2_TOLERANCE, 0}, +{2011, 1200927971u, 1317167489u, 949091767u, 0, ATAN2_TOLERANCE, 0}, +{2012, 3326858092u, 3452602832u, 3226013530u, 0, ATAN2_TOLERANCE, 0}, +{2013, 3184801644u, 1137974313u, 3112177779u, 0, ATAN2_TOLERANCE, 0}, +{2014, 1136052740u, 3244616020u, 1070469525u, 0, ATAN2_TOLERANCE, 0}, +{2015, 1015670780u, 1101217251u, 978863264u, 0, ATAN2_TOLERANCE, 0}, +{2016, 1012543234u, 1116520440u, 960916317u, 0, ATAN2_TOLERANCE, 0}, +{2017, 3316611992u, 3394732912u, 3226006988u, 0, ATAN2_TOLERANCE, 0}, +{2018, 1087942795u, 3316660295u, 1078524974u, 0, ATAN2_TOLERANCE, 0}, +{2019, 3426365713u, 3069778532u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2020, 3066654389u, 3443934204u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2021, 3295326432u, 1313396175u, 3046478811u, 0, ATAN2_TOLERANCE, 0}, +{2022, 3318835308u, 3277583511u, 3217900300u, 0, ATAN2_TOLERANCE, 0}, +{2023, 3283555717u, 891875120u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2024, 3040485181u, 3375450886u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2025, 3388772093u, 1032597076u, 3217625050u, 0, ATAN2_TOLERANCE, 0}, +{2026, 954670189u, 1144923689u, 874222309u, 0, ATAN2_TOLERANCE, 0}, +{2027, 1319200415u, 3387555900u, 1070153279u, 0, ATAN2_TOLERANCE, 0}, +{2028, 1279324488u, 3228401212u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2029, 3455131757u, 1260217257u, 3217453967u, 0, ATAN2_TOLERANCE, 0}, +{2030, 1246947517u, 1087951909u, 1070141386u, 0, ATAN2_TOLERANCE, 0}, +{2031, 3433761025u, 3060143904u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2032, 3201187455u, 900233172u, 3217625024u, 0, ATAN2_TOLERANCE, 0}, +{2033, 1173247961u, 1191127979u, 1047193748u, 0, ATAN2_TOLERANCE, 0}, +{2034, 3037297123u, 3346394818u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2035, 3083019343u, 3033309444u, 3217762483u, 0, ATAN2_TOLERANCE, 0}, +{2036, 3042018375u, 3203882372u, 3226013652u, 0, ATAN2_TOLERANCE, 0}, +{2037, 1082862511u, 3032804719u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2038, 3157626955u, 3483653298u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2039, 3182695954u, 3256861672u, 3226004425u, 0, ATAN2_TOLERANCE, 0}, +{2040, 1105291533u, 3482971524u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2041, 1016023520u, 3227712090u, 1078509325u, 0, ATAN2_TOLERANCE, 0}, +{2042, 3370691006u, 1295870514u, 3139254705u, 0, ATAN2_TOLERANCE, 0}, +{2043, 1156767169u, 1049756240u, 1070140171u, 0, ATAN2_TOLERANCE, 0}, +{2044, 3077020499u, 894671462u, 3217146564u, 0, ATAN2_TOLERANCE, 0}, +{2045, 1104284039u, 3040211914u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2046, 3335212901u, 3486414589u, 3226013643u, 0, ATAN2_TOLERANCE, 0}, +{2047, 1093697541u, 3193708441u, 1070304849u, 0, ATAN2_TOLERANCE, 0}, +{2048, 3266691185u, 1160074593u, 3171723218u, 0, ATAN2_TOLERANCE, 0}, +{2049, 3179003144u, 1108615803u, 3134817668u, 0, ATAN2_TOLERANCE, 0}, +{2050, 3424086808u, 3260140004u, 3217625062u, 0, ATAN2_TOLERANCE, 0}, +{2051, 3353608773u, 1134068114u, 3217603133u, 0, ATAN2_TOLERANCE, 0}, +{2052, 882878091u, 3136970767u, 1078529358u, 0, ATAN2_TOLERANCE, 0}, +{2053, 927582555u, 947955456u, 1044791214u, 0, ATAN2_TOLERANCE, 0}, +{2054, 3111440310u, 3067634077u, 3217856693u, 0, ATAN2_TOLERANCE, 0}, +{2055, 3476083859u, 966439623u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2056, 3038754840u, 932009686u, 3171980751u, 0, ATAN2_TOLERANCE, 0}, +{2057, 3464546616u, 3205527253u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2058, 1002542205u, 3152136093u, 1075557233u, 0, ATAN2_TOLERANCE, 0}, +{2059, 3443552129u, 3165561391u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2060, 1287620154u, 3119707283u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2061, 3073260205u, 3093124531u, 3225198660u, 0, ATAN2_TOLERANCE, 0}, +{2062, 1245702957u, 894348966u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2063, 1002715618u, 1191006977u, 877022332u, 0, ATAN2_TOLERANCE, 0}, +{2064, 3087802274u, 897541752u, 3217386213u, 0, ATAN2_TOLERANCE, 0}, +{2065, 3415763001u, 3032518431u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2066, 3283471961u, 1260093226u, 3088427057u, 0, ATAN2_TOLERANCE, 0}, +{2067, 3311210827u, 1192192264u, 3183785110u, 0, ATAN2_TOLERANCE, 0}, +{2068, 1198307901u, 1116328249u, 1070131864u, 0, ATAN2_TOLERANCE, 0}, +{2069, 1288901567u, 1296370667u, 1056686848u, 0, ATAN2_TOLERANCE, 0}, +{2070, 922255363u, 958305289u, 1028156442u, 0, ATAN2_TOLERANCE, 0}, +{2071, 1113104661u, 944376032u, 1070141395u, 0, ATAN2_TOLERANCE, 0}, +{2072, 948856035u, 1015466475u, 998717622u, 0, ATAN2_TOLERANCE, 0}, +{2073, 1062512367u, 3229559531u, 1077668471u, 0, ATAN2_TOLERANCE, 0}, +{2074, 1162027071u, 3308983387u, 1075147524u, 0, ATAN2_TOLERANCE, 0}, +{2075, 1034561811u, 1054043114u, 1045123831u, 0, ATAN2_TOLERANCE, 0}, +{2076, 3271615417u, 3209997200u, 3217679118u, 0, ATAN2_TOLERANCE, 0}, +{2077, 1042014529u, 1146708584u, 959943147u, 0, ATAN2_TOLERANCE, 0}, +{2078, 1177157787u, 3090208179u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2079, 3196144817u, 1056118717u, 3204073657u, 0, ATAN2_TOLERANCE, 0}, +{2080, 1309658335u, 1010219988u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2081, 3100289712u, 3456334210u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2082, 3375507013u, 1306310823u, 3134103462u, 0, ATAN2_TOLERANCE, 0}, +{2083, 3460699001u, 3096700943u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2084, 3079231719u, 1044386263u, 3099004977u, 0, ATAN2_TOLERANCE, 0}, +{2085, 3093951884u, 1014115231u, 3145159061u, 0, ATAN2_TOLERANCE, 0}, +{2086, 3468023178u, 1209565017u, 3217624192u, 0, ATAN2_TOLERANCE, 0}, +{2087, 1204196034u, 3298625731u, 1070245051u, 0, ATAN2_TOLERANCE, 0}, +{2088, 1161439847u, 943449277u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2089, 908663107u, 939489763u, 1034489716u, 0, ATAN2_TOLERANCE, 0}, +{2090, 1055319316u, 3261813492u, 1078497860u, 0, ATAN2_TOLERANCE, 0}, +{2091, 1084378658u, 1009650785u, 1070123833u, 0, ATAN2_TOLERANCE, 0}, +{2092, 3053887750u, 3341786453u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2093, 3022828828u, 881335251u, 3205544878u, 0, ATAN2_TOLERANCE, 0}, +{2094, 1123114742u, 1229815537u, 957765780u, 0, ATAN2_TOLERANCE, 0}, +{2095, 1258114435u, 1291336083u, 1031958809u, 0, ATAN2_TOLERANCE, 0}, +{2096, 3468040845u, 3066966245u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2097, 1178825761u, 1113195286u, 1070104853u, 0, ATAN2_TOLERANCE, 0}, +{2098, 3059266302u, 878503862u, 3217091308u, 0, ATAN2_TOLERANCE, 0}, +{2099, 3223384012u, 1130486973u, 3157682004u, 0, ATAN2_TOLERANCE, 0}, +{2100, 3445262427u, 3465211174u, 3225199336u, 0, ATAN2_TOLERANCE, 0}, +{2101, 1125653081u, 1207799746u, 983142602u, 0, ATAN2_TOLERANCE, 0}, +{2102, 3337652712u, 3025581813u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2103, 1184753508u, 3147374485u, 1070141405u, 0, ATAN2_TOLERANCE, 0}, +{2104, 996404791u, 3353251979u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2105, 1188439315u, 1113484271u, 1070124385u, 0, ATAN2_TOLERANCE, 0}, +{2106, 916831283u, 999465787u, 982559633u, 0, ATAN2_TOLERANCE, 0}, +{2107, 996786317u, 3179221951u, 1078290045u, 0, ATAN2_TOLERANCE, 0}, +{2108, 3461635065u, 1004690387u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2109, 1188167943u, 1200744896u, 1051776672u, 0, ATAN2_TOLERANCE, 0}, +{2110, 1102061604u, 3424449935u, 1078530008u, 0, ATAN2_TOLERANCE, 0}, +{2111, 1282351521u, 3039376424u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2112, 3458861065u, 3392466405u, 3217659919u, 0, ATAN2_TOLERANCE, 0}, +{2113, 3095256878u, 1023623326u, 3136787620u, 0, ATAN2_TOLERANCE, 0}, +{2114, 3422194733u, 893873945u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2115, 3083885296u, 974543672u, 3174122414u, 0, ATAN2_TOLERANCE, 0}, +{2116, 1261940623u, 3402349985u, 1074065444u, 0, ATAN2_TOLERANCE, 0}, +{2117, 3400603081u, 3234396843u, 3217625060u, 0, ATAN2_TOLERANCE, 0}, +{2118, 3139250800u, 3079109479u, 3217681544u, 0, ATAN2_TOLERANCE, 0}, +{2119, 886201503u, 3272760705u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2120, 3297366026u, 1089966380u, 3217566187u, 0, ATAN2_TOLERANCE, 0}, +{2121, 1218488455u, 3309646450u, 1070221841u, 0, ATAN2_TOLERANCE, 0}, +{2122, 3040358923u, 3093401553u, 3225960144u, 0, ATAN2_TOLERANCE, 0}, +{2123, 1283938137u, 1196383822u, 1070135127u, 0, ATAN2_TOLERANCE, 0}, +{2124, 3182551696u, 3029982441u, 3217625078u, 0, ATAN2_TOLERANCE, 0}, +{2125, 1317098613u, 949986176u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2126, 3116209179u, 3303588342u, 3226013658u, 0, ATAN2_TOLERANCE, 0}, +{2127, 3239728775u, 927815421u, 3217625040u, 0, ATAN2_TOLERANCE, 0}, +{2128, 3207141672u, 933456504u, 3217624803u, 0, ATAN2_TOLERANCE, 0}, +{2129, 3154378805u, 905462392u, 3217623125u, 0, ATAN2_TOLERANCE, 0}, +{2130, 3069658155u, 1041452042u, 3092701021u, 0, ATAN2_TOLERANCE, 0}, +{2131, 3207056527u, 3384206601u, 3226013657u, 0, ATAN2_TOLERANCE, 0}, +{2132, 1284174954u, 3436881197u, 1076155477u, 0, ATAN2_TOLERANCE, 0}, +{2133, 3156081645u, 3308839704u, 3226013645u, 0, ATAN2_TOLERANCE, 0}, +{2134, 1063693032u, 976661408u, 1070134915u, 0, ATAN2_TOLERANCE, 0}, +{2135, 1102631663u, 3396951425u, 1078529987u, 0, ATAN2_TOLERANCE, 0}, +{2136, 968803479u, 992989712u, 1040845349u, 0, ATAN2_TOLERANCE, 0}, +{2137, 3273080388u, 3109405906u, 3217625062u, 0, ATAN2_TOLERANCE, 0}, +{2138, 1172529774u, 3294550127u, 1071163952u, 0, ATAN2_TOLERANCE, 0}, +{2139, 1306695905u, 1292690378u, 1067612994u, 0, ATAN2_TOLERANCE, 0}, +{2140, 3158855023u, 3151283866u, 3221473110u, 0, ATAN2_TOLERANCE, 0}, +{2141, 1165177679u, 3276237026u, 1070570911u, 0, ATAN2_TOLERANCE, 0}, +{2142, 3403009513u, 3381966453u, 3219069294u, 0, ATAN2_TOLERANCE, 0}, +{2143, 952348506u, 3377573987u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2144, 1222777442u, 1125769920u, 1070138615u, 0, ATAN2_TOLERANCE, 0}, +{2145, 1325324763u, 978336043u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2146, 3363524213u, 3202991311u, 3217625066u, 0, ATAN2_TOLERANCE, 0}, +{2147, 1158950321u, 1073578913u, 1070134395u, 0, ATAN2_TOLERANCE, 0}, +{2148, 903129873u, 3416864271u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2149, 3078339944u, 988173985u, 3154895797u, 0, ATAN2_TOLERANCE, 0}, +{2150, 1208345407u, 1254181270u, 1018252503u, 0, ATAN2_TOLERANCE, 0}, +{2151, 1258634105u, 1247426200u, 1066881297u, 0, ATAN2_TOLERANCE, 0}, +{2152, 1248478509u, 1287895126u, 1025057766u, 0, ATAN2_TOLERANCE, 0}, +{2153, 1153863988u, 3430539165u, 1078529909u, 0, ATAN2_TOLERANCE, 0}, +{2154, 1097120930u, 3221726305u, 1071376032u, 0, ATAN2_TOLERANCE, 0}, +{2155, 3469778622u, 1200179013u, 3217624714u, 0, ATAN2_TOLERANCE, 0}, +{2156, 1147712200u, 931865525u, 1070141402u, 0, ATAN2_TOLERANCE, 0}, +{2157, 1124721745u, 3058969650u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2158, 3261744304u, 1043806501u, 3217599423u, 0, ATAN2_TOLERANCE, 0}, +{2159, 3303160152u, 3075455322u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2160, 1315090496u, 3269683237u, 1070141404u, 0, ATAN2_TOLERANCE, 0}, +{2161, 1335399673u, 974138676u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2162, 1072458508u, 3372833993u, 1078529997u, 0, ATAN2_TOLERANCE, 0}, +{2163, 3252139741u, 1059615003u, 3217420395u, 0, ATAN2_TOLERANCE, 0}, +{2164, 3468519966u, 3113982619u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2165, 1006231203u, 897530770u, 1070140357u, 0, ATAN2_TOLERANCE, 0}, +{2166, 951554138u, 1001144381u, 1015571681u, 0, ATAN2_TOLERANCE, 0}, +{2167, 942046828u, 986341002u, 1020432919u, 0, ATAN2_TOLERANCE, 0}, +{2168, 3319723279u, 3414482416u, 3226011940u, 0, ATAN2_TOLERANCE, 0}, +{2169, 3255104167u, 928827688u, 3217625047u, 0, ATAN2_TOLERANCE, 0}, +{2170, 1155477903u, 3104812800u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2171, 3273889176u, 980486479u, 3217625003u, 0, ATAN2_TOLERANCE, 0}, +{2172, 3237813668u, 3441016803u, 3226013658u, 0, ATAN2_TOLERANCE, 0}, +{2173, 981908840u, 3314038398u, 1078530010u, 0, ATAN2_TOLERANCE, 0}, +{2174, 941187647u, 1107765599u, 898711988u, 0, ATAN2_TOLERANCE, 0}, +{2175, 1214223128u, 3225536822u, 1070141514u, 0, ATAN2_TOLERANCE, 0}, +{2176, 3422922584u, 1086391131u, 3217625049u, 0, ATAN2_TOLERANCE, 0}, +{2177, 1315857601u, 3487600045u, 1077976642u, 0, ATAN2_TOLERANCE, 0}, +{2178, 3453226030u, 3233768835u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2179, 1078359574u, 3199175230u, 1071065122u, 0, ATAN2_TOLERANCE, 0}, +{2180, 1029557624u, 3302959071u, 1078529883u, 0, ATAN2_TOLERANCE, 0}, +{2181, 1207675424u, 3042692550u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2182, 1028355074u, 3442294040u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2183, 1248421894u, 3367769132u, 1070983505u, 0, ATAN2_TOLERANCE, 0}, +{2184, 3353251994u, 1095517730u, 3217624111u, 0, ATAN2_TOLERANCE, 0}, +{2185, 876926659u, 3288089977u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2186, 1076752219u, 876236939u, 1070141402u, 0, ATAN2_TOLERANCE, 0}, +{2187, 1273395082u, 3031189261u, 1070141403u, 0, ATAN2_TOLERANCE, 0}, +{2188, 3385588183u, 3258252464u, 3217625278u, 0, ATAN2_TOLERANCE, 0}, +{2189, 3192315328u, 3289489214u, 3226012260u, 0, ATAN2_TOLERANCE, 0}, +{2190, 3441804648u, 3274638356u, 3217625059u, 0, ATAN2_TOLERANCE, 0}, +{2191, 3392827417u, 1277961150u, 3179965369u, 0, ATAN2_TOLERANCE, 0}, +{2192, 1161241793u, 1328003707u, 898352014u, 0, ATAN2_TOLERANCE, 0}, +{2193, 3034494183u, 3041579130u, 3223907672u, 0, ATAN2_TOLERANCE, 0}, +{2194, 1171318485u, 3374409104u, 1078487599u, 0, ATAN2_TOLERANCE, 0}, +{2195, 1001216371u, 3052357038u, 1070144229u, 0, ATAN2_TOLERANCE, 0}, +{2196, 912515889u, 1074635609u, 902689232u, 0, ATAN2_TOLERANCE, 0}, +{2197, 3391452505u, 897989232u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2198, 3249603369u, 3147662248u, 3217626873u, 0, ATAN2_TOLERANCE, 0}, +{2199, 3169816394u, 988430929u, 3217113000u, 0, ATAN2_TOLERANCE, 0}, +{2200, 3282212423u, 3174079140u, 3217626163u, 0, ATAN2_TOLERANCE, 0}, +{2201, 3352293320u, 3247843425u, 3217626530u, 0, ATAN2_TOLERANCE, 0}, +{2202, 3296358441u, 875645354u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2203, 1197828352u, 3245614728u, 1070143582u, 0, ATAN2_TOLERANCE, 0}, +{2204, 3340510371u, 914930263u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2205, 1127109339u, 3368125489u, 1078528166u, 0, ATAN2_TOLERANCE, 0}, +{2206, 3192887808u, 3191848339u, 3222552959u, 0, ATAN2_TOLERANCE, 0}, +{2207, 3237183876u, 3179379969u, 3217694749u, 0, ATAN2_TOLERANCE, 0}, +{2208, 939285924u, 3056079386u, 1070838127u, 0, ATAN2_TOLERANCE, 0}, +{2209, 944050180u, 3452557879u, 1078530011u, 0, ATAN2_TOLERANCE, 0}, +{2210, 3058135703u, 3090284601u, 3225720409u, 0, ATAN2_TOLERANCE, 0}, +{2211, 3480592662u, 3261728191u, 3217625051u, 0, ATAN2_TOLERANCE, 0}, +{2212, 3061939312u, 3274418540u, 3226013659u, 0, ATAN2_TOLERANCE, 0}, +{2213, 1155775526u, 1255814444u, 965056178u, 0, ATAN2_TOLERANCE, 0}, +{2214, 1234491880u, 3408568717u, 1078074444u, 0, ATAN2_TOLERANCE, 0}, + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ATAN2_H multiple inclusion protection + +// EOF atan2f.h diff --git a/packages/language/c/libm/current/tests/vectors/atanf.c b/packages/language/c/libm/current/tests/vectors/atanf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atanf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// atanf.c +// +// Test of atanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/atanf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(atanf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &atanf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &atanf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("atanf() is stable"); + } // if + else + { + CYG_TEST_FAIL("atanf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library atanf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "atanf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF atanf.c diff --git a/packages/language/c/libm/current/tests/vectors/atanf.h b/packages/language/c/libm/current/tests/vectors/atanf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atanf.h @@ -0,0 +1,1235 @@ +#ifndef CYGONCE_LIBM_ATANF_H +#define CYGONCE_LIBM_ATANF_H +//=========================================================================== +// +// atanf.h +// +// Test vectors for testing of atanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/atanf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ATANF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t atanf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3210757463u, 0, ATANF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3210688365u, 0, ATANF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3210618582u, 0, ATANF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3210548107u, 0, ATANF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3210476934u, 0, ATANF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3210405052u, 0, ATANF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3210332456u, 0, ATANF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3210259136u, 0, ATANF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3210185084u, 0, ATANF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3210110293u, 0, ATANF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3210034755u, 0, ATANF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3209958461u, 0, ATANF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3209881403u, 0, ATANF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3209803572u, 0, ATANF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3209724961u, 0, ATANF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3209645562u, 0, ATANF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3209565365u, 0, ATANF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3209484364u, 0, ATANF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3209402548u, 0, ATANF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3209319911u, 0, ATANF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3209236443u, 0, ATANF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3209152136u, 0, ATANF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3209066982u, 0, ATANF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3208980972u, 0, ATANF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3208894098u, 0, ATANF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3208806352u, 0, ATANF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3208717725u, 0, ATANF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3208628209u, 0, ATANF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3208537796u, 0, ATANF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3208446478u, 0, ATANF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3208354245u, 0, ATANF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3208261091u, 0, ATANF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3208167007u, 0, ATANF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3208071986u, 0, ATANF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3207976018u, 0, ATANF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3207879097u, 0, ATANF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3207781215u, 0, ATANF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3207682363u, 0, ATANF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3207582536u, 0, ATANF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3207481725u, 0, ATANF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3207379923u, 0, ATANF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3207277122u, 0, ATANF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3207173317u, 0, ATANF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3207068500u, 0, ATANF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3206962665u, 0, ATANF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3206855805u, 0, ATANF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3206747915u, 0, ATANF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3206638987u, 0, ATANF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3206529018u, 0, ATANF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3206418000u, 0, ATANF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3206305929u, 0, ATANF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3206192801u, 0, ATANF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3206078610u, 0, ATANF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3205963352u, 0, ATANF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3205847023u, 0, ATANF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3205729619u, 0, ATANF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3205611138u, 0, ATANF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3205491576u, 0, ATANF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3205370931u, 0, ATANF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3205249201u, 0, ATANF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3205126383u, 0, ATANF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3205002476u, 0, ATANF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3204877480u, 0, ATANF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3204751396u, 0, ATANF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3204624221u, 0, ATANF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3204495957u, 0, ATANF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3204284955u, 0, ATANF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3204024080u, 0, ATANF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3203761037u, 0, ATANF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3203495832u, 0, ATANF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3203228473u, 0, ATANF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3202958965u, 0, ATANF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3202687318u, 0, ATANF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3202413545u, 0, ATANF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3202137655u, 0, ATANF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3201859663u, 0, ATANF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3201579583u, 0, ATANF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3201297430u, 0, ATANF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3201013221u, 0, ATANF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3200726976u, 0, ATANF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3200438715u, 0, ATANF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3200148459u, 0, ATANF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3199856232u, 0, ATANF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3199562057u, 0, ATANF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3199265962u, 0, ATANF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3198967972u, 0, ATANF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3198668120u, 0, ATANF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3198366433u, 0, ATANF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3198062946u, 0, ATANF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3197757693u, 0, ATANF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3197450707u, 0, ATANF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3197142027u, 0, ATANF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3196831691u, 0, ATANF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3196519741u, 0, ATANF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3196206216u, 0, ATANF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3195722672u, 0, ATANF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3195089588u, 0, ATANF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3194453624u, 0, ATANF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3193814877u, 0, ATANF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3193173443u, 0, ATANF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3192529424u, 0, ATANF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3191882923u, 0, ATANF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3191234047u, 0, ATANF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3190582904u, 0, ATANF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3189929606u, 0, ATANF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3189274267u, 0, ATANF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3188617003u, 0, ATANF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3187957930u, 0, ATANF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3186923303u, 0, ATANF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3185598655u, 0, ATANF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3184271124u, 0, ATANF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3182940963u, 0, ATANF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3181608423u, 0, ATANF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3180273764u, 0, ATANF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3178592058u, 0, ATANF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3175915821u, 0, ATANF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3173236913u, 0, ATANF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3170217906u, 0, ATANF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3164852594u, 0, ATANF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3156465060u, 0, ATANF_TOLERANCE, 0}, +{120, 646742016u, 0u, 646742016u, 0, ATANF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 1008981412u, 0, ATANF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 1017368946u, 0, ATANF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 1022734258u, 0, ATANF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 1025753265u, 0, ATANF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 1028432173u, 0, ATANF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 1031108410u, 0, ATANF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 1032790116u, 0, ATANF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 1034124775u, 0, ATANF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 1035457315u, 0, ATANF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 1036787476u, 0, ATANF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 1038115007u, 0, ATANF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 1039439655u, 0, ATANF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 1040474282u, 0, ATANF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 1041133355u, 0, ATANF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 1041790619u, 0, ATANF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 1042445958u, 0, ATANF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 1043099256u, 0, ATANF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 1043750399u, 0, ATANF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 1044399275u, 0, ATANF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 1045045776u, 0, ATANF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 1045689795u, 0, ATANF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 1046331229u, 0, ATANF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 1046969976u, 0, ATANF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 1047605940u, 0, ATANF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 1048239024u, 0, ATANF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 1048722568u, 0, ATANF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 1049036093u, 0, ATANF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 1049348043u, 0, ATANF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 1049658379u, 0, ATANF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 1049967059u, 0, ATANF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 1050274045u, 0, ATANF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 1050579298u, 0, ATANF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 1050882785u, 0, ATANF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 1051184472u, 0, ATANF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 1051484324u, 0, ATANF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 1051782314u, 0, ATANF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 1052078409u, 0, ATANF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 1052372584u, 0, ATANF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 1052664811u, 0, ATANF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 1052955067u, 0, ATANF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 1053243328u, 0, ATANF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 1053529573u, 0, ATANF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 1053813782u, 0, ATANF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 1054095935u, 0, ATANF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 1054376015u, 0, ATANF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 1054654007u, 0, ATANF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 1054929897u, 0, ATANF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 1055203670u, 0, ATANF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 1055475317u, 0, ATANF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 1055744825u, 0, ATANF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 1056012184u, 0, ATANF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 1056277389u, 0, ATANF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 1056540432u, 0, ATANF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 1056801307u, 0, ATANF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 1057012309u, 0, ATANF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 1057140573u, 0, ATANF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 1057267748u, 0, ATANF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 1057393832u, 0, ATANF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 1057518828u, 0, ATANF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 1057642735u, 0, ATANF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 1057765553u, 0, ATANF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 1057887283u, 0, ATANF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 1058007928u, 0, ATANF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 1058127490u, 0, ATANF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 1058245971u, 0, ATANF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 1058363375u, 0, ATANF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 1058479704u, 0, ATANF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 1058594962u, 0, ATANF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 1058709153u, 0, ATANF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 1058822281u, 0, ATANF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 1058934352u, 0, ATANF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 1059045370u, 0, ATANF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 1059155339u, 0, ATANF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 1059264267u, 0, ATANF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 1059372157u, 0, ATANF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 1059479017u, 0, ATANF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 1059584852u, 0, ATANF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 1059689669u, 0, ATANF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 1059793474u, 0, ATANF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 1059896275u, 0, ATANF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 1059998077u, 0, ATANF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 1060098888u, 0, ATANF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 1060198715u, 0, ATANF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 1060297567u, 0, ATANF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 1060395449u, 0, ATANF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 1060492370u, 0, ATANF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 1060588338u, 0, ATANF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 1060683359u, 0, ATANF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 1060777443u, 0, ATANF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 1060870597u, 0, ATANF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 1060962830u, 0, ATANF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 1061054148u, 0, ATANF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 1061144561u, 0, ATANF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 1061234077u, 0, ATANF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 1061322704u, 0, ATANF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 1061410450u, 0, ATANF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 1061497324u, 0, ATANF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 1061583334u, 0, ATANF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 1061668488u, 0, ATANF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1061752795u, 0, ATANF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1061836263u, 0, ATANF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1061918900u, 0, ATANF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1062000716u, 0, ATANF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1062081717u, 0, ATANF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1062161914u, 0, ATANF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1062241313u, 0, ATANF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1062319924u, 0, ATANF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1062397755u, 0, ATANF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1062474813u, 0, ATANF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1062551107u, 0, ATANF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1062626645u, 0, ATANF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1062701436u, 0, ATANF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1062775488u, 0, ATANF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1062848808u, 0, ATANF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1062921404u, 0, ATANF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1062993286u, 0, ATANF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1063064459u, 0, ATANF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1063134934u, 0, ATANF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1063204717u, 0, ATANF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 3216301067u, 0, ATANF_TOLERANCE, 0}, +{241, 3231108068u, 0u, 3215870954u, 0, ATANF_TOLERANCE, 0}, +{242, 3226013659u, 0u, 3215039941u, 0, ATANF_TOLERANCE, 0}, +{243, 3217625051u, 0u, 3212869452u, 0, ATANF_TOLERANCE, 0}, +{244, 0u, 0u, 0u, 0, ATANF_TOLERANCE, 0}, +{245, 1070141403u, 0u, 1065385804u, 0, ATANF_TOLERANCE, 0}, +{246, 1078530011u, 0u, 1067556293u, 0, ATANF_TOLERANCE, 0}, +{247, 1083624420u, 0u, 1068387306u, 0, ATANF_TOLERANCE, 0}, +{248, 3253731328u, 0u, 3217345534u, 0, ATANF_TOLERANCE, 0}, +{249, 3252840038u, 0u, 3217328757u, 0, ATANF_TOLERANCE, 0}, +{250, 3251948749u, 0u, 3217309838u, 0, ATANF_TOLERANCE, 0}, +{251, 3251057459u, 0u, 3217288340u, 0, ATANF_TOLERANCE, 0}, +{252, 3250166170u, 0u, 3217263696u, 0, ATANF_TOLERANCE, 0}, +{253, 3249274880u, 0u, 3217235164u, 0, ATANF_TOLERANCE, 0}, +{254, 3248383590u, 0u, 3217201743u, 0, ATANF_TOLERANCE, 0}, +{255, 3247492301u, 0u, 3217162062u, 0, ATANF_TOLERANCE, 0}, +{256, 3246601011u, 0u, 3217114183u, 0, ATANF_TOLERANCE, 0}, +{257, 3245028147u, 0u, 3217055275u, 0, ATANF_TOLERANCE, 0}, +{258, 3243245568u, 0u, 3216981041u, 0, ATANF_TOLERANCE, 0}, +{259, 3241462989u, 0u, 3216884625u, 0, ATANF_TOLERANCE, 0}, +{260, 3239680410u, 0u, 3216754377u, 0, ATANF_TOLERANCE, 0}, +{261, 3237792973u, 0u, 3216568819u, 0, ATANF_TOLERANCE, 0}, +{262, 3234227814u, 0u, 3216283602u, 0, ATANF_TOLERANCE, 0}, +{263, 3230662656u, 0u, 3215790723u, 0, ATANF_TOLERANCE, 0}, +{264, 3224580915u, 0u, 3214747557u, 0, ATANF_TOLERANCE, 0}, +{265, 3213675725u, 0u, 3210034755u, 0, ATANF_TOLERANCE, 0}, +{266, 1058642330u, 0u, 1057642735u, 0, ATANF_TOLERANCE, 0}, +{267, 1075000115u, 0u, 1066701005u, 0, ATANF_TOLERANCE, 0}, +{268, 1082130432u, 0u, 1068086373u, 0, ATANF_TOLERANCE, 0}, +{269, 1085695590u, 0u, 1068684543u, 0, ATANF_TOLERANCE, 0}, +{270, 1089260749u, 0u, 1069014633u, 0, ATANF_TOLERANCE, 0}, +{271, 1091672474u, 0u, 1069223262u, 0, ATANF_TOLERANCE, 0}, +{272, 1093455053u, 0u, 1069366888u, 0, ATANF_TOLERANCE, 0}, +{273, 1095237632u, 0u, 1069471740u, 0, ATANF_TOLERANCE, 0}, +{274, 1097020211u, 0u, 1069551629u, 0, ATANF_TOLERANCE, 0}, +{275, 1098802790u, 0u, 1069614511u, 0, ATANF_TOLERANCE, 0}, +{276, 1099746509u, 0u, 1069665289u, 0, ATANF_TOLERANCE, 0}, +{277, 1100637798u, 0u, 1069707148u, 0, ATANF_TOLERANCE, 0}, +{278, 1101529088u, 0u, 1069742247u, 0, ATANF_TOLERANCE, 0}, +{279, 1102420378u, 0u, 1069772099u, 0, ATANF_TOLERANCE, 0}, +{280, 1103311667u, 0u, 1069797799u, 0, ATANF_TOLERANCE, 0}, +{281, 1104202957u, 0u, 1069820157u, 0, ATANF_TOLERANCE, 0}, +{282, 1105094246u, 0u, 1069839784u, 0, ATANF_TOLERANCE, 0}, +{283, 1105985536u, 0u, 1069857152u, 0, ATANF_TOLERANCE, 0}, +{284, 1107800421u, 1203999711u, 1069894192u, 0, ATANF_TOLERANCE, 0}, +{285, 3196650934u, 896005582u, 3196445316u, 0, ATANF_TOLERANCE, 0}, +{286, 3368700125u, 3308232444u, 3217625030u, 0, ATANF_TOLERANCE, 0}, +{287, 1224242132u, 3061363425u, 1070141386u, 0, ATANF_TOLERANCE, 0}, +{288, 3221027117u, 1284201705u, 3213695643u, 0, ATANF_TOLERANCE, 0}, +{289, 1198712763u, 919636942u, 1070141268u, 0, ATANF_TOLERANCE, 0}, +{290, 3159309973u, 852521077u, 3159309249u, 0, ATANF_TOLERANCE, 0}, +{291, 954173073u, 850531830u, 954173073u, 0, ATANF_TOLERANCE, 0}, +{292, 3090780435u, 1035260608u, 3090780435u, 0, ATANF_TOLERANCE, 0}, +{293, 966554515u, 3234538174u, 966554515u, 0, ATANF_TOLERANCE, 0}, +{294, 1312607135u, 1194999402u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{295, 1166191415u, 1018661564u, 1070139396u, 0, ATANF_TOLERANCE, 0}, +{296, 3111900019u, 1130472166u, 3111900018u, 0, ATANF_TOLERANCE, 0}, +{297, 1234419246u, 2984575812u, 1070141396u, 0, ATANF_TOLERANCE, 0}, +{298, 1302107128u, 3370647675u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{299, 1052801068u, 3039122570u, 1052252701u, 0, ATANF_TOLERANCE, 0}, +{300, 1060849628u, 3081357692u, 1059172458u, 0, ATANF_TOLERANCE, 0}, +{301, 3484320003u, 3033957825u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{302, 3181522772u, 3305392896u, 3181500636u, 0, ATANF_TOLERANCE, 0}, +{303, 882596369u, 1256676590u, 882596369u, 0, ATANF_TOLERANCE, 0}, +{304, 1167223673u, 846102364u, 1070139612u, 0, ATANF_TOLERANCE, 0}, +{305, 968192794u, 878547432u, 968192794u, 0, ATANF_TOLERANCE, 0}, +{306, 3122346862u, 1111584337u, 3122346861u, 0, ATANF_TOLERANCE, 0}, +{307, 1052361612u, 1280025214u, 1051866006u, 0, ATANF_TOLERANCE, 0}, +{308, 906701409u, 2968301825u, 906701409u, 0, ATANF_TOLERANCE, 0}, +{309, 3471653172u, 1154138102u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{310, 3231467496u, 934336592u, 3215930822u, 0, ATANF_TOLERANCE, 0}, +{311, 1341514497u, 3466051188u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{312, 1272351391u, 3373485062u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{313, 3319724992u, 3354615790u, 3217623875u, 0, ATANF_TOLERANCE, 0}, +{314, 917622040u, 1334966485u, 917622040u, 0, ATANF_TOLERANCE, 0}, +{315, 940236348u, 3304072663u, 940236348u, 0, ATANF_TOLERANCE, 0}, +{316, 3251541546u, 3174764041u, 3217300367u, 0, ATANF_TOLERANCE, 0}, +{317, 3099843889u, 3355962282u, 3099843889u, 0, ATANF_TOLERANCE, 0}, +{318, 3110358400u, 851145088u, 3110358400u, 0, ATANF_TOLERANCE, 0}, +{319, 3371863479u, 1014861921u, 3217625034u, 0, ATANF_TOLERANCE, 0}, +{320, 3204069187u, 966573255u, 3202923849u, 0, ATANF_TOLERANCE, 0}, +{321, 1306460502u, 903489435u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{322, 1197542187u, 3024598921u, 1070141257u, 0, ATANF_TOLERANCE, 0}, +{323, 922888249u, 1139392309u, 922888249u, 0, ATANF_TOLERANCE, 0}, +{324, 1184239996u, 3224098462u, 1070140966u, 0, ATANF_TOLERANCE, 0}, +{325, 1252490238u, 1173619825u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{326, 1001673627u, 3462631271u, 1001673508u, 0, ATANF_TOLERANCE, 0}, +{327, 976098044u, 1151967422u, 976098042u, 0, ATANF_TOLERANCE, 0}, +{328, 941796645u, 886451963u, 941796645u, 0, ATANF_TOLERANCE, 0}, +{329, 3287199470u, 854245542u, 3217607478u, 0, ATANF_TOLERANCE, 0}, +{330, 893184329u, 1243067084u, 893184329u, 0, ATANF_TOLERANCE, 0}, +{331, 1143233714u, 1007268238u, 1070128643u, 0, ATANF_TOLERANCE, 0}, +{332, 1139941253u, 1147688821u, 1070124080u, 0, ATANF_TOLERANCE, 0}, +{333, 3143717025u, 3234638157u, 3143716967u, 0, ATANF_TOLERANCE, 0}, +{334, 3048866608u, 3449209899u, 3048866608u, 0, ATANF_TOLERANCE, 0}, +{335, 3240298487u, 1020260821u, 3216804414u, 0, ATANF_TOLERANCE, 0}, +{336, 1288902137u, 3123875978u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{337, 1333134799u, 1338107877u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{338, 1187847971u, 1317663644u, 1070141083u, 0, ATANF_TOLERANCE, 0}, +{339, 1038851706u, 1327544110u, 1038784113u, 0, ATANF_TOLERANCE, 0}, +{340, 3329354473u, 3165437289u, 3217624509u, 0, ATANF_TOLERANCE, 0}, +{341, 3077218579u, 1308397879u, 3077218579u, 0, ATANF_TOLERANCE, 0}, +{342, 1309289088u, 1019883016u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{343, 3444653659u, 1279248024u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{344, 3405585402u, 2962345057u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{345, 3106647724u, 853848387u, 3106647724u, 0, ATANF_TOLERANCE, 0}, +{346, 1106778573u, 3304487767u, 1069871006u, 0, ATANF_TOLERANCE, 0}, +{347, 1140567947u, 3069174149u, 1070124738u, 0, ATANF_TOLERANCE, 0}, +{348, 1238569473u, 873035665u, 1070141398u, 0, ATANF_TOLERANCE, 0}, +{349, 3154871957u, 1276671061u, 3154871736u, 0, ATANF_TOLERANCE, 0}, +{350, 1261071232u, 1182202773u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{351, 1175011025u, 3029705783u, 1070140448u, 0, ATANF_TOLERANCE, 0}, +{352, 1082692850u, 1211581107u, 1068210842u, 0, ATANF_TOLERANCE, 0}, +{353, 974547519u, 3475164509u, 974547518u, 0, ATANF_TOLERANCE, 0}, +{354, 3058097085u, 3104309359u, 3058097085u, 0, ATANF_TOLERANCE, 0}, +{355, 3107252546u, 1071134451u, 3107252545u, 0, ATANF_TOLERANCE, 0}, +{356, 3096032662u, 2976848821u, 3096032662u, 0, ATANF_TOLERANCE, 0}, +{357, 3197942144u, 3094120030u, 3197638256u, 0, ATANF_TOLERANCE, 0}, +{358, 3403348556u, 3184653669u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{359, 3182301130u, 3460764044u, 3182273782u, 0, ATANF_TOLERANCE, 0}, +{360, 1136411063u, 1118097422u, 1070119123u, 0, ATANF_TOLERANCE, 0}, +{361, 3239231622u, 3302723069u, 3216714060u, 0, ATANF_TOLERANCE, 0}, +{362, 3340615780u, 870350055u, 3217624843u, 0, ATANF_TOLERANCE, 0}, +{363, 998567360u, 2995278691u, 998567312u, 0, ATANF_TOLERANCE, 0}, +{364, 3417964312u, 1321337529u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{365, 3109481038u, 1143864063u, 3109481038u, 0, ATANF_TOLERANCE, 0}, +{366, 1148867223u, 1256486202u, 1070133025u, 0, ATANF_TOLERANCE, 0}, +{367, 989687421u, 3372681320u, 989687400u, 0, ATANF_TOLERANCE, 0}, +{368, 1152956913u, 3166480640u, 1070135726u, 0, ATANF_TOLERANCE, 0}, +{369, 892922651u, 3373029087u, 892922651u, 0, ATANF_TOLERANCE, 0}, +{370, 1109627625u, 1314158257u, 1069936310u, 0, ATANF_TOLERANCE, 0}, +{371, 1307091856u, 1103202538u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{372, 1077234132u, 3272167130u, 1067294557u, 0, ATANF_TOLERANCE, 0}, +{373, 1142167709u, 1096445242u, 1070127242u, 0, ATANF_TOLERANCE, 0}, +{374, 3426232834u, 1036705270u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{375, 3368566779u, 967249167u, 3217625030u, 0, ATANF_TOLERANCE, 0}, +{376, 3030724760u, 3349013503u, 3030724760u, 0, ATANF_TOLERANCE, 0}, +{377, 1138741813u, 3073453199u, 1070122663u, 0, ATANF_TOLERANCE, 0}, +{378, 982950501u, 982549888u, 982950496u, 0, ATANF_TOLERANCE, 0}, +{379, 1142981585u, 1015602236u, 1070128337u, 0, ATANF_TOLERANCE, 0}, +{380, 3347165962u, 3135486696u, 3217624924u, 0, ATANF_TOLERANCE, 0}, +{381, 1009535440u, 3381353228u, 1009535024u, 0, ATANF_TOLERANCE, 0}, +{382, 3103736980u, 3402950505u, 3103736980u, 0, ATANF_TOLERANCE, 0}, +{383, 3126820946u, 1077903063u, 3126820943u, 0, ATANF_TOLERANCE, 0}, +{384, 3473956030u, 976891930u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{385, 3349098349u, 1055327704u, 3217624948u, 0, ATANF_TOLERANCE, 0}, +{386, 3152729489u, 1060398533u, 3152729225u, 0, ATANF_TOLERANCE, 0}, +{387, 945568720u, 3313485084u, 945568720u, 0, ATANF_TOLERANCE, 0}, +{388, 3345489836u, 1108392401u, 3217624909u, 0, ATANF_TOLERANCE, 0}, +{389, 940893161u, 1137000140u, 940893161u, 0, ATANF_TOLERANCE, 0}, +{390, 976791751u, 3230678102u, 976791749u, 0, ATANF_TOLERANCE, 0}, +{391, 1004442355u, 3036510596u, 1004442131u, 0, ATANF_TOLERANCE, 0}, +{392, 1108485380u, 3173536878u, 1069911862u, 0, ATANF_TOLERANCE, 0}, +{393, 1061834641u, 972388096u, 1059796331u, 0, ATANF_TOLERANCE, 0}, +{394, 3381268392u, 1146976802u, 3217625043u, 0, ATANF_TOLERANCE, 0}, +{395, 1087189715u, 2952822478u, 1068843681u, 0, ATANF_TOLERANCE, 0}, +{396, 3212952285u, 3329407365u, 3209351073u, 0, ATANF_TOLERANCE, 0}, +{397, 1000611335u, 857599439u, 1000611245u, 0, ATANF_TOLERANCE, 0}, +{398, 3466188568u, 1041678304u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{399, 3072456205u, 3160254633u, 3072456205u, 0, ATANF_TOLERANCE, 0}, +{400, 3319315516u, 3422089012u, 3217623841u, 0, ATANF_TOLERANCE, 0}, +{401, 935938416u, 1146676692u, 935938416u, 0, ATANF_TOLERANCE, 0}, +{402, 3212614372u, 1152633030u, 3209124456u, 0, ATANF_TOLERANCE, 0}, +{403, 1315030230u, 3336225884u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{404, 1134593658u, 3456812581u, 1070115274u, 0, ATANF_TOLERANCE, 0}, +{405, 977281449u, 879922831u, 977281446u, 0, ATANF_TOLERANCE, 0}, +{406, 1086198791u, 920125958u, 1068742286u, 0, ATANF_TOLERANCE, 0}, +{407, 1255152035u, 851754050u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{408, 1135271264u, 3284878412u, 1070116855u, 0, ATANF_TOLERANCE, 0}, +{409, 1094190727u, 1056854532u, 1069413889u, 0, ATANF_TOLERANCE, 0}, +{410, 1294665325u, 991185677u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{411, 1036608591u, 805416536u, 1036566293u, 0, ATANF_TOLERANCE, 0}, +{412, 3229998064u, 825237063u, 3215656635u, 0, ATANF_TOLERANCE, 0}, +{413, 3439134022u, 1043829691u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{414, 3073083133u, 1317170485u, 3073083133u, 0, ATANF_TOLERANCE, 0}, +{415, 1325668223u, 970681762u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{416, 1092037607u, 1027330835u, 1069256845u, 0, ATANF_TOLERANCE, 0}, +{417, 3316278408u, 3455589207u, 3217623512u, 0, ATANF_TOLERANCE, 0}, +{418, 3295436768u, 3129873731u, 3217616178u, 0, ATANF_TOLERANCE, 0}, +{419, 1151984049u, 3074547120u, 1070135230u, 0, ATANF_TOLERANCE, 0}, +{420, 1129287043u, 3076527544u, 1070100986u, 0, ATANF_TOLERANCE, 0}, +{421, 1243664530u, 972879810u, 1070141399u, 0, ATANF_TOLERANCE, 0}, +{422, 950829092u, 929114193u, 950829092u, 0, ATANF_TOLERANCE, 0}, +{423, 1115471979u, 3047246262u, 1070008657u, 0, ATANF_TOLERANCE, 0}, +{424, 3351092088u, 3024661404u, 3217624964u, 0, ATANF_TOLERANCE, 0}, +{425, 3424479544u, 3312047722u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{426, 3241193975u, 884465785u, 3216867516u, 0, ATANF_TOLERANCE, 0}, +{427, 1030934236u, 1045139240u, 1030915636u, 0, ATANF_TOLERANCE, 0}, +{428, 3131791114u, 3408392958u, 3131791108u, 0, ATANF_TOLERANCE, 0}, +{429, 1025254314u, 3057812821u, 1025249362u, 0, ATANF_TOLERANCE, 0}, +{430, 1110545760u, 3240144177u, 1069952484u, 0, ATANF_TOLERANCE, 0}, +{431, 3180213739u, 1108793820u, 3180198803u, 0, ATANF_TOLERANCE, 0}, +{432, 3361976590u, 3138179993u, 3217625015u, 0, ATANF_TOLERANCE, 0}, +{433, 881280146u, 3421884736u, 881280146u, 0, ATANF_TOLERANCE, 0}, +{434, 1304154705u, 2961937089u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{435, 3264443610u, 3222916705u, 3217511280u, 0, ATANF_TOLERANCE, 0}, +{436, 3374550627u, 3055856293u, 3217625038u, 0, ATANF_TOLERANCE, 0}, +{437, 899599265u, 3240118211u, 899599265u, 0, ATANF_TOLERANCE, 0}, +{438, 1268194719u, 1332489410u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{439, 1133420220u, 1245770860u, 1070111994u, 0, ATANF_TOLERANCE, 0}, +{440, 1161858787u, 815362075u, 1070138680u, 0, ATANF_TOLERANCE, 0}, +{441, 3184462258u, 1263529646u, 3184416318u, 0, ATANF_TOLERANCE, 0}, +{442, 3295996963u, 3453334307u, 3217616488u, 0, ATANF_TOLERANCE, 0}, +{443, 1270887389u, 1156123987u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{444, 3325193181u, 993979179u, 3217624316u, 0, ATANF_TOLERANCE, 0}, +{445, 925657343u, 1315159742u, 925657343u, 0, ATANF_TOLERANCE, 0}, +{446, 3115275450u, 3008350271u, 3115275450u, 0, ATANF_TOLERANCE, 0}, +{447, 3116607482u, 3224327456u, 3116607481u, 0, ATANF_TOLERANCE, 0}, +{448, 3187892415u, 3118097315u, 3187845635u, 0, ATANF_TOLERANCE, 0}, +{449, 1189120494u, 978961471u, 1070141111u, 0, ATANF_TOLERANCE, 0}, +{450, 889030794u, 3129523970u, 889030794u, 0, ATANF_TOLERANCE, 0}, +{451, 1323529208u, 3100744786u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{452, 3465768388u, 3190881451u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{453, 3426099899u, 1118756120u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{454, 3224857113u, 3398166843u, 3214808768u, 0, ATANF_TOLERANCE, 0}, +{455, 1065798296u, 816191940u, 1062186276u, 0, ATANF_TOLERANCE, 0}, +{456, 3328989444u, 850266225u, 3217624496u, 0, ATANF_TOLERANCE, 0}, +{457, 3357819026u, 3148475462u, 3217625001u, 0, ATANF_TOLERANCE, 0}, +{458, 1273397670u, 901308750u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{459, 3424831780u, 1304806106u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{460, 1257596246u, 3420832544u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{461, 1051773536u, 896271348u, 1051343444u, 0, ATANF_TOLERANCE, 0}, +{462, 3294752507u, 3113225954u, 3217615768u, 0, ATANF_TOLERANCE, 0}, +{463, 3424848725u, 2973850350u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{464, 1090870906u, 3294742905u, 1069139826u, 0, ATANF_TOLERANCE, 0}, +{465, 1227582289u, 1208979668u, 1070141391u, 0, ATANF_TOLERANCE, 0}, +{466, 1272325814u, 3004311296u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{467, 3359508271u, 859974315u, 3217625008u, 0, ATANF_TOLERANCE, 0}, +{468, 1137854355u, 3335041917u, 1070121456u, 0, ATANF_TOLERANCE, 0}, +{469, 3440773058u, 3204192793u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{470, 3101598400u, 3057760708u, 3101598400u, 0, ATANF_TOLERANCE, 0}, +{471, 3451216836u, 3347783723u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{472, 3437062994u, 3106834845u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{473, 1131196082u, 1164573183u, 1070105960u, 0, ATANF_TOLERANCE, 0}, +{474, 3177294154u, 1282436638u, 3177279218u, 0, ATANF_TOLERANCE, 0}, +{475, 3258097678u, 1305882290u, 3217437234u, 0, ATANF_TOLERANCE, 0}, +{476, 3460915348u, 1219372260u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{477, 3303035472u, 3153013020u, 3217620376u, 0, ATANF_TOLERANCE, 0}, +{478, 1053698677u, 3284313107u, 1053032162u, 0, ATANF_TOLERANCE, 0}, +{479, 3396166221u, 1201894512u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{480, 3037541131u, 1085398440u, 3037541131u, 0, ATANF_TOLERANCE, 0}, +{481, 3458934263u, 1005577835u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{482, 1065761827u, 3333928591u, 1062151616u, 0, ATANF_TOLERANCE, 0}, +{483, 3025843188u, 820250112u, 3025843188u, 0, ATANF_TOLERANCE, 0}, +{484, 926665223u, 3150815797u, 926665223u, 0, ATANF_TOLERANCE, 0}, +{485, 1199816046u, 3143776186u, 1070141278u, 0, ATANF_TOLERANCE, 0}, +{486, 3333779015u, 952421041u, 3217624689u, 0, ATANF_TOLERANCE, 0}, +{487, 948398145u, 3238273189u, 948398145u, 0, ATANF_TOLERANCE, 0}, +{488, 3054021468u, 1270257895u, 3054021468u, 0, ATANF_TOLERANCE, 0}, +{489, 1080781593u, 1213908300u, 1067914719u, 0, ATANF_TOLERANCE, 0}, +{490, 3164749613u, 3010837763u, 3164748223u, 0, ATANF_TOLERANCE, 0}, +{491, 3235326590u, 1271705594u, 3216386555u, 0, ATANF_TOLERANCE, 0}, +{492, 3118883815u, 1051802647u, 3118883814u, 0, ATANF_TOLERANCE, 0}, +{493, 965378004u, 1292594138u, 965378004u, 0, ATANF_TOLERANCE, 0}, +{494, 3226990408u, 1110755136u, 3215208306u, 0, ATANF_TOLERANCE, 0}, +{495, 3117098218u, 1122474770u, 3117098217u, 0, ATANF_TOLERANCE, 0}, +{496, 1283624229u, 906796922u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{497, 970649315u, 1078286437u, 970649314u, 0, ATANF_TOLERANCE, 0}, +{498, 959776291u, 3280345347u, 959776291u, 0, ATANF_TOLERANCE, 0}, +{499, 3341117305u, 3294559023u, 3217624853u, 0, ATANF_TOLERANCE, 0}, +{500, 1270734970u, 3355874874u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{501, 3454816067u, 868771977u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{502, 917206623u, 1172710814u, 917206623u, 0, ATANF_TOLERANCE, 0}, +{503, 1106502045u, 1290849316u, 1069866331u, 0, ATANF_TOLERANCE, 0}, +{504, 1157598381u, 3309023746u, 1070137299u, 0, ATANF_TOLERANCE, 0}, +{505, 3335234513u, 1002337336u, 3217624729u, 0, ATANF_TOLERANCE, 0}, +{506, 1279489061u, 1006049444u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{507, 3157416480u, 1309984610u, 3157416019u, 0, ATANF_TOLERANCE, 0}, +{508, 3143920719u, 3131608518u, 3143920658u, 0, ATANF_TOLERANCE, 0}, +{509, 1233171235u, 826460580u, 1070141395u, 0, ATANF_TOLERANCE, 0}, +{510, 1148920078u, 1007674793u, 1070133052u, 0, ATANF_TOLERANCE, 0}, +{511, 3064988156u, 3230867340u, 3064988156u, 0, ATANF_TOLERANCE, 0}, +{512, 3083619260u, 1159415661u, 3083619260u, 0, ATANF_TOLERANCE, 0}, +{513, 1109198803u, 1221754614u, 1069927768u, 0, ATANF_TOLERANCE, 0}, +{514, 3219949483u, 1056167693u, 3213464057u, 0, ATANF_TOLERANCE, 0}, +{515, 3361149474u, 3387342069u, 3217625013u, 0, ATANF_TOLERANCE, 0}, +{516, 1207502108u, 3388073586u, 1070141337u, 0, ATANF_TOLERANCE, 0}, +{517, 1000014431u, 831213088u, 1000014355u, 0, ATANF_TOLERANCE, 0}, +{518, 3161756316u, 3143659754u, 3161755126u, 0, ATANF_TOLERANCE, 0}, +{519, 3160728744u, 3382954009u, 3160727769u, 0, ATANF_TOLERANCE, 0}, +{520, 1234530539u, 1079988872u, 1070141396u, 0, ATANF_TOLERANCE, 0}, +{521, 1017843965u, 1193076204u, 1017842336u, 0, ATANF_TOLERANCE, 0}, +{522, 951862956u, 1173464654u, 951862956u, 0, ATANF_TOLERANCE, 0}, +{523, 3306328852u, 1118701064u, 3217621474u, 0, ATANF_TOLERANCE, 0}, +{524, 1291910469u, 1211303367u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{525, 3027442905u, 1173894400u, 3027442905u, 0, ATANF_TOLERANCE, 0}, +{526, 1131927531u, 3182962700u, 1070107556u, 0, ATANF_TOLERANCE, 0}, +{527, 3449879391u, 991614550u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{528, 970094304u, 3344590506u, 970094303u, 0, ATANF_TOLERANCE, 0}, +{529, 1125551064u, 3331248076u, 1070085682u, 0, ATANF_TOLERANCE, 0}, +{530, 3427296372u, 3455289118u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{531, 1198917460u, 1327195159u, 1070141269u, 0, ATANF_TOLERANCE, 0}, +{532, 3201603336u, 820047343u, 3200876499u, 0, ATANF_TOLERANCE, 0}, +{533, 3114686212u, 3476082461u, 3114686212u, 0, ATANF_TOLERANCE, 0}, +{534, 921940707u, 2967544056u, 921940707u, 0, ATANF_TOLERANCE, 0}, +{535, 1091906532u, 3011904455u, 1069245075u, 0, ATANF_TOLERANCE, 0}, +{536, 3393557778u, 3383396815u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{537, 1276853215u, 873199561u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{538, 3462778440u, 3349284325u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{539, 3360170117u, 3048354042u, 3217625010u, 0, ATANF_TOLERANCE, 0}, +{540, 3224245428u, 3271307999u, 3214669684u, 0, ATANF_TOLERANCE, 0}, +{541, 1120124467u, 1135619937u, 1070055695u, 0, ATANF_TOLERANCE, 0}, +{542, 1064364381u, 3180675544u, 1061243521u, 0, ATANF_TOLERANCE, 0}, +{543, 1268744779u, 3328452652u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{544, 1165195428u, 3390323168u, 1070139249u, 0, ATANF_TOLERANCE, 0}, +{545, 3044092739u, 1106497311u, 3044092739u, 0, ATANF_TOLERANCE, 0}, +{546, 3149469534u, 1278465842u, 3149469405u, 0, ATANF_TOLERANCE, 0}, +{547, 3247790039u, 909788142u, 3217176119u, 0, ATANF_TOLERANCE, 0}, +{548, 3215244648u, 1083988595u, 3211331089u, 0, ATANF_TOLERANCE, 0}, +{549, 3095275931u, 989153382u, 3095275931u, 0, ATANF_TOLERANCE, 0}, +{550, 3059688264u, 1117455718u, 3059688264u, 0, ATANF_TOLERANCE, 0}, +{551, 1212717473u, 837873779u, 1070141362u, 0, ATANF_TOLERANCE, 0}, +{552, 3275973009u, 3450721670u, 3217582116u, 0, ATANF_TOLERANCE, 0}, +{553, 3028857014u, 3188853813u, 3028857014u, 0, ATANF_TOLERANCE, 0}, +{554, 3391162308u, 1291220039u, 3217625047u, 0, ATANF_TOLERANCE, 0}, +{555, 1044867873u, 3369493273u, 1044706316u, 0, ATANF_TOLERANCE, 0}, +{556, 1089986803u, 3462160118u, 1069064428u, 0, ATANF_TOLERANCE, 0}, +{557, 1296314700u, 2957454177u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{558, 1251462432u, 3171021770u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{559, 3485236902u, 980772835u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{560, 3262169538u, 1268270462u, 3217485693u, 0, ATANF_TOLERANCE, 0}, +{561, 3080852256u, 994641495u, 3080852256u, 0, ATANF_TOLERANCE, 0}, +{562, 1022211242u, 922124181u, 1022206872u, 0, ATANF_TOLERANCE, 0}, +{563, 884661176u, 2985540645u, 884661176u, 0, ATANF_TOLERANCE, 0}, +{564, 3071422941u, 3271100396u, 3071422941u, 0, ATANF_TOLERANCE, 0}, +{565, 989762529u, 3362011135u, 989762508u, 0, ATANF_TOLERANCE, 0}, +{566, 1295475718u, 3212305413u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{567, 1002632518u, 3330388441u, 1002632368u, 0, ATANF_TOLERANCE, 0}, +{568, 3404372005u, 3450484255u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{569, 3158912530u, 3105501826u, 3158911867u, 0, ATANF_TOLERANCE, 0}, +{570, 1125800069u, 3256265749u, 1070087054u, 0, ATANF_TOLERANCE, 0}, +{571, 3138037576u, 3103365227u, 3138037562u, 0, ATANF_TOLERANCE, 0}, +{572, 3108384823u, 1300246663u, 3108384823u, 0, ATANF_TOLERANCE, 0}, +{573, 999985470u, 3409354318u, 999985394u, 0, ATANF_TOLERANCE, 0}, +{574, 1189421739u, 1056599002u, 1070141117u, 0, ATANF_TOLERANCE, 0}, +{575, 3075182644u, 3144159778u, 3075182644u, 0, ATANF_TOLERANCE, 0}, +{576, 3028099649u, 3391513557u, 3028099649u, 0, ATANF_TOLERANCE, 0}, +{577, 3132541814u, 3444521949u, 3132541806u, 0, ATANF_TOLERANCE, 0}, +{578, 1164046161u, 3440635788u, 1070139082u, 0, ATANF_TOLERANCE, 0}, +{579, 1292596266u, 3116569667u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{580, 3469748379u, 3412765608u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{581, 1314644642u, 3123051784u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{582, 3399813173u, 828743798u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{583, 948775569u, 3485444126u, 948775569u, 0, ATANF_TOLERANCE, 0}, +{584, 1034611395u, 882288581u, 1034585499u, 0, ATANF_TOLERANCE, 0}, +{585, 3489122735u, 3372450889u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{586, 1181604787u, 3363067409u, 1070140852u, 0, ATANF_TOLERANCE, 0}, +{587, 3059042077u, 3204983963u, 3059042077u, 0, ATANF_TOLERANCE, 0}, +{588, 1043691622u, 3402603223u, 1043569415u, 0, ATANF_TOLERANCE, 0}, +{589, 1314588083u, 856187848u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{590, 3141533334u, 3010142974u, 3141533298u, 0, ATANF_TOLERANCE, 0}, +{591, 3157534378u, 3451674717u, 3157533902u, 0, ATANF_TOLERANCE, 0}, +{592, 3400949680u, 3073750220u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{593, 3365581801u, 1175843167u, 3217625024u, 0, ATANF_TOLERANCE, 0}, +{594, 1110424755u, 3011308654u, 1069950500u, 0, ATANF_TOLERANCE, 0}, +{595, 3189917167u, 927278934u, 3189829462u, 0, ATANF_TOLERANCE, 0}, +{596, 969804941u, 3355439348u, 969804940u, 0, ATANF_TOLERANCE, 0}, +{597, 1139120919u, 3270515074u, 1070123135u, 0, ATANF_TOLERANCE, 0}, +{598, 934308144u, 3118191228u, 934308144u, 0, ATANF_TOLERANCE, 0}, +{599, 1220524226u, 1152648002u, 1070141381u, 0, ATANF_TOLERANCE, 0}, +{600, 3162548604u, 3461790298u, 3162547910u, 0, ATANF_TOLERANCE, 0}, +{601, 3382391700u, 3296962745u, 3217625044u, 0, ATANF_TOLERANCE, 0}, +{602, 1156767533u, 1088986462u, 1070137085u, 0, ATANF_TOLERANCE, 0}, +{603, 3079222483u, 3312324949u, 3079222483u, 0, ATANF_TOLERANCE, 0}, +{604, 994934087u, 967678094u, 994934043u, 0, ATANF_TOLERANCE, 0}, +{605, 3185240099u, 1123403720u, 3185185835u, 0, ATANF_TOLERANCE, 0}, +{606, 3479873563u, 1246277393u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{607, 3424264117u, 3434026174u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{608, 3228365887u, 1216775310u, 3215412136u, 0, ATANF_TOLERANCE, 0}, +{609, 1035909900u, 1249532942u, 1035873949u, 0, ATANF_TOLERANCE, 0}, +{610, 3024951184u, 1247632131u, 3024951184u, 0, ATANF_TOLERANCE, 0}, +{611, 1212129651u, 3017366784u, 1070141360u, 0, ATANF_TOLERANCE, 0}, +{612, 3125775254u, 955826310u, 3125775251u, 0, ATANF_TOLERANCE, 0}, +{613, 1037464105u, 3121544932u, 1037413077u, 0, ATANF_TOLERANCE, 0}, +{614, 1311706596u, 1254918706u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{615, 918212457u, 1017468331u, 918212457u, 0, ATANF_TOLERANCE, 0}, +{616, 1337315179u, 3461361185u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{617, 1131358407u, 3325958870u, 1070106327u, 0, ATANF_TOLERANCE, 0}, +{618, 1156517523u, 3343716230u, 1070137016u, 0, ATANF_TOLERANCE, 0}, +{619, 3210802820u, 3207408574u, 3208155290u, 0, ATANF_TOLERANCE, 0}, +{620, 3337499209u, 1226297264u, 3217624775u, 0, ATANF_TOLERANCE, 0}, +{621, 3468429030u, 3253874001u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{622, 3253515800u, 1189005947u, 3217341653u, 0, ATANF_TOLERANCE, 0}, +{623, 3055299953u, 3047908678u, 3055299953u, 0, ATANF_TOLERANCE, 0}, +{624, 959956547u, 876324728u, 959956547u, 0, ATANF_TOLERANCE, 0}, +{625, 3425290480u, 1139193797u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{626, 1039917375u, 1122740999u, 1039834892u, 0, ATANF_TOLERANCE, 0}, +{627, 3220979495u, 3429223871u, 3213685914u, 0, ATANF_TOLERANCE, 0}, +{628, 1311016004u, 3334899880u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{629, 1128016396u, 1105151547u, 1070096822u, 0, ATANF_TOLERANCE, 0}, +{630, 3210335769u, 3100646155u, 3207888084u, 0, ATANF_TOLERANCE, 0}, +{631, 3022705759u, 3404762495u, 3022705759u, 0, ATANF_TOLERANCE, 0}, +{632, 1206054701u, 826010009u, 1070141330u, 0, ATANF_TOLERANCE, 0}, +{633, 3144504834u, 1162227076u, 3144504766u, 0, ATANF_TOLERANCE, 0}, +{634, 1213609983u, 919983950u, 1070141364u, 0, ATANF_TOLERANCE, 0}, +{635, 1246902946u, 3064047808u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{636, 995850843u, 1332031130u, 995850789u, 0, ATANF_TOLERANCE, 0}, +{637, 3362082828u, 3374056268u, 3217625015u, 0, ATANF_TOLERANCE, 0}, +{638, 1029480631u, 3047777170u, 1029466672u, 0, ATANF_TOLERANCE, 0}, +{639, 3153568584u, 3106514232u, 3153568275u, 0, ATANF_TOLERANCE, 0}, +{640, 3384988527u, 3109485565u, 3217625045u, 0, ATANF_TOLERANCE, 0}, +{641, 1317696241u, 870681806u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{642, 3235395924u, 1132055244u, 3216392527u, 0, ATANF_TOLERANCE, 0}, +{643, 3341877624u, 2969495570u, 3217624866u, 0, ATANF_TOLERANCE, 0}, +{644, 1228636133u, 886552820u, 1070141392u, 0, ATANF_TOLERANCE, 0}, +{645, 3161654634u, 3335899347u, 3161653466u, 0, ATANF_TOLERANCE, 0}, +{646, 3162655243u, 3307203982u, 3162654523u, 0, ATANF_TOLERANCE, 0}, +{647, 1207246237u, 859223639u, 1070141336u, 0, ATANF_TOLERANCE, 0}, +{648, 1165476654u, 3350219111u, 1070139287u, 0, ATANF_TOLERANCE, 0}, +{649, 1215278023u, 3019755242u, 1070141368u, 0, ATANF_TOLERANCE, 0}, +{650, 1017239798u, 3438501281u, 1017238418u, 0, ATANF_TOLERANCE, 0}, +{651, 1149651309u, 970030475u, 1070133594u, 0, ATANF_TOLERANCE, 0}, +{652, 1111943722u, 3122211334u, 1069972738u, 0, ATANF_TOLERANCE, 0}, +{653, 1189849849u, 3382739134u, 1070141125u, 0, ATANF_TOLERANCE, 0}, +{654, 3204848496u, 3141519085u, 3203862728u, 0, ATANF_TOLERANCE, 0}, +{655, 1249758327u, 3104759211u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{656, 3092982276u, 3445282331u, 3092982276u, 0, ATANF_TOLERANCE, 0}, +{657, 1168098747u, 1316854744u, 1070139762u, 0, ATANF_TOLERANCE, 0}, +{658, 892549317u, 1179637545u, 892549317u, 0, ATANF_TOLERANCE, 0}, +{659, 3301009024u, 3406174560u, 3217619629u, 0, ATANF_TOLERANCE, 0}, +{660, 3233089227u, 1212652543u, 3216157361u, 0, ATANF_TOLERANCE, 0}, +{661, 3218245284u, 1238873830u, 3213042506u, 0, ATANF_TOLERANCE, 0}, +{662, 3215981890u, 3240474694u, 3211863300u, 0, ATANF_TOLERANCE, 0}, +{663, 1266687209u, 3092038122u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{664, 3487959775u, 3331372071u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{665, 943645710u, 852875779u, 943645710u, 0, ATANF_TOLERANCE, 0}, +{666, 3345065699u, 3282620725u, 3217624905u, 0, ATANF_TOLERANCE, 0}, +{667, 935847271u, 1067255804u, 935847271u, 0, ATANF_TOLERANCE, 0}, +{668, 3410336089u, 1111437780u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{669, 3082940740u, 1336840432u, 3082940740u, 0, ATANF_TOLERANCE, 0}, +{670, 1141063391u, 1168908072u, 1070125424u, 0, ATANF_TOLERANCE, 0}, +{671, 3059263153u, 3067795684u, 3059263153u, 0, ATANF_TOLERANCE, 0}, +{672, 3353679791u, 897158391u, 3217624979u, 0, ATANF_TOLERANCE, 0}, +{673, 1001823878u, 1016826861u, 1001823754u, 0, ATANF_TOLERANCE, 0}, +{674, 1009130212u, 1004302940u, 1009129839u, 0, ATANF_TOLERANCE, 0}, +{675, 3367127535u, 943136342u, 3217625028u, 0, ATANF_TOLERANCE, 0}, +{676, 1032920919u, 3449126417u, 1032905048u, 0, ATANF_TOLERANCE, 0}, +{677, 3281952870u, 3147012185u, 3217598609u, 0, ATANF_TOLERANCE, 0}, +{678, 1237868497u, 3048281802u, 1070141398u, 0, ATANF_TOLERANCE, 0}, +{679, 1153753924u, 3322269242u, 1070136077u, 0, ATANF_TOLERANCE, 0}, +{680, 1120261759u, 892210998u, 1070056603u, 0, ATANF_TOLERANCE, 0}, +{681, 3226328360u, 3366432856u, 3215096616u, 0, ATANF_TOLERANCE, 0}, +{682, 3349595986u, 3251588707u, 3217624952u, 0, ATANF_TOLERANCE, 0}, +{683, 3166889490u, 3306023523u, 3166887081u, 0, ATANF_TOLERANCE, 0}, +{684, 1087750238u, 1099325523u, 1068894830u, 0, ATANF_TOLERANCE, 0}, +{685, 3121620061u, 3359488363u, 3121620060u, 0, ATANF_TOLERANCE, 0}, +{686, 1066116543u, 3072159933u, 1062482443u, 0, ATANF_TOLERANCE, 0}, +{687, 3210898034u, 2981803389u, 3208208865u, 0, ATANF_TOLERANCE, 0}, +{688, 3051923237u, 3364074347u, 3051923237u, 0, ATANF_TOLERANCE, 0}, +{689, 1030612298u, 3345396001u, 1030594803u, 0, ATANF_TOLERANCE, 0}, +{690, 1186234578u, 858134374u, 1070141040u, 0, ATANF_TOLERANCE, 0}, +{691, 1331680743u, 1009396165u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{692, 3060774997u, 1326067357u, 3060774997u, 0, ATANF_TOLERANCE, 0}, +{693, 887589411u, 1292305693u, 887589411u, 0, ATANF_TOLERANCE, 0}, +{694, 1045232522u, 3234993273u, 1045057281u, 0, ATANF_TOLERANCE, 0}, +{695, 3119858470u, 962515365u, 3119858468u, 0, ATANF_TOLERANCE, 0}, +{696, 3349432725u, 928848003u, 3217624951u, 0, ATANF_TOLERANCE, 0}, +{697, 912423027u, 3184646319u, 912423027u, 0, ATANF_TOLERANCE, 0}, +{698, 3228795133u, 3273940030u, 3215469039u, 0, ATANF_TOLERANCE, 0}, +{699, 3194674746u, 3112269709u, 3194413041u, 0, ATANF_TOLERANCE, 0}, +{700, 3296784303u, 3276182352u, 3217616918u, 0, ATANF_TOLERANCE, 0}, +{701, 965402291u, 3107104376u, 965402291u, 0, ATANF_TOLERANCE, 0}, +{702, 3388153589u, 3426245389u, 3217625046u, 0, ATANF_TOLERANCE, 0}, +{703, 1133410485u, 3329658993u, 1070111963u, 0, ATANF_TOLERANCE, 0}, +{704, 3136790322u, 1088652637u, 3136790303u, 0, ATANF_TOLERANCE, 0}, +{705, 3369970587u, 959121458u, 3217625032u, 0, ATANF_TOLERANCE, 0}, +{706, 1270451568u, 928393353u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{707, 989498922u, 3088358419u, 989498902u, 0, ATANF_TOLERANCE, 0}, +{708, 1280215674u, 3148135875u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{709, 1171873518u, 954709738u, 1070140197u, 0, ATANF_TOLERANCE, 0}, +{710, 3298258100u, 935525182u, 3217618126u, 0, ATANF_TOLERANCE, 0}, +{711, 3415208824u, 822843236u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{712, 1001897182u, 3191875320u, 1001897056u, 0, ATANF_TOLERANCE, 0}, +{713, 3152777939u, 3245830463u, 3152777673u, 0, ATANF_TOLERANCE, 0}, +{714, 985903305u, 3333087577u, 985903296u, 0, ATANF_TOLERANCE, 0}, +{715, 3357328848u, 859306298u, 3217624998u, 0, ATANF_TOLERANCE, 0}, +{716, 982612185u, 923582663u, 982612181u, 0, ATANF_TOLERANCE, 0}, +{717, 3267868136u, 1208301947u, 3217541046u, 0, ATANF_TOLERANCE, 0}, +{718, 3319048157u, 1172271145u, 3217623818u, 0, ATANF_TOLERANCE, 0}, +{719, 1144755661u, 860947435u, 1070130223u, 0, ATANF_TOLERANCE, 0}, +{720, 898467286u, 839254959u, 898467286u, 0, ATANF_TOLERANCE, 0}, +{721, 3301461672u, 1233693827u, 3217619816u, 0, ATANF_TOLERANCE, 0}, +{722, 3364525678u, 3089849671u, 3217625021u, 0, ATANF_TOLERANCE, 0}, +{723, 931441127u, 1133424555u, 931441127u, 0, ATANF_TOLERANCE, 0}, +{724, 3146660041u, 3143695961u, 3146659983u, 0, ATANF_TOLERANCE, 0}, +{725, 3467121799u, 3023584354u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{726, 1151257041u, 3084216427u, 1070134799u, 0, ATANF_TOLERANCE, 0}, +{727, 3097873255u, 3219266640u, 3097873255u, 0, ATANF_TOLERANCE, 0}, +{728, 3130670309u, 3192399254u, 3130670304u, 0, ATANF_TOLERANCE, 0}, +{729, 1017573824u, 3130901062u, 1017572310u, 0, ATANF_TOLERANCE, 0}, +{730, 1258369714u, 3462258576u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{731, 1216602683u, 3371396332u, 1070141372u, 0, ATANF_TOLERANCE, 0}, +{732, 3297265739u, 1214184410u, 3217617356u, 0, ATANF_TOLERANCE, 0}, +{733, 1071940738u, 3311731012u, 1065858274u, 0, ATANF_TOLERANCE, 0}, +{734, 922601356u, 3337171870u, 922601356u, 0, ATANF_TOLERANCE, 0}, +{735, 3462285635u, 3444030332u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{736, 3357177805u, 1085464241u, 3217624998u, 0, ATANF_TOLERANCE, 0}, +{737, 3049120080u, 900832851u, 3049120080u, 0, ATANF_TOLERANCE, 0}, +{738, 1153863660u, 1011991342u, 1070136122u, 0, ATANF_TOLERANCE, 0}, +{739, 3034243695u, 917098003u, 3034243695u, 0, ATANF_TOLERANCE, 0}, +{740, 1249365132u, 3278686216u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{741, 3046215730u, 3211219980u, 3046215730u, 0, ATANF_TOLERANCE, 0}, +{742, 3047251716u, 1090787353u, 3047251716u, 0, ATANF_TOLERANCE, 0}, +{743, 3131219358u, 3471261157u, 3131219352u, 0, ATANF_TOLERANCE, 0}, +{744, 3222096285u, 1198013705u, 3214057151u, 0, ATANF_TOLERANCE, 0}, +{745, 1297708818u, 3079166173u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{746, 3345532722u, 3383708463u, 3217624910u, 0, ATANF_TOLERANCE, 0}, +{747, 3418753236u, 3481843070u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{748, 1277417964u, 3487506626u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{749, 987577257u, 1152077087u, 987577244u, 0, ATANF_TOLERANCE, 0}, +{750, 3161606610u, 3190282989u, 3161605452u, 0, ATANF_TOLERANCE, 0}, +{751, 888030585u, 3062367380u, 888030585u, 0, ATANF_TOLERANCE, 0}, +{752, 1043442869u, 3311393817u, 1043328084u, 0, ATANF_TOLERANCE, 0}, +{753, 3320923228u, 3464544249u, 3217623964u, 0, ATANF_TOLERANCE, 0}, +{754, 1337400405u, 3488844154u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{755, 3400348640u, 3129868490u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{756, 1250249095u, 1069023744u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{757, 3284411233u, 1173613526u, 3217603666u, 0, ATANF_TOLERANCE, 0}, +{758, 3020883322u, 2953622587u, 3020883322u, 0, ATANF_TOLERANCE, 0}, +{759, 1215968622u, 3469884568u, 1070141370u, 0, ATANF_TOLERANCE, 0}, +{760, 3202319550u, 819117302u, 3201482744u, 0, ATANF_TOLERANCE, 0}, +{761, 3061638260u, 3116222327u, 3061638260u, 0, ATANF_TOLERANCE, 0}, +{762, 1025404104u, 1066370251u, 1025398931u, 0, ATANF_TOLERANCE, 0}, +{763, 3138086437u, 3195983510u, 3138086424u, 0, ATANF_TOLERANCE, 0}, +{764, 3091024506u, 3456196859u, 3091024506u, 0, ATANF_TOLERANCE, 0}, +{765, 3362748242u, 3369843597u, 3217625016u, 0, ATANF_TOLERANCE, 0}, +{766, 3099671635u, 3218383623u, 3099671635u, 0, ATANF_TOLERANCE, 0}, +{767, 3068014841u, 2978226656u, 3068014841u, 0, ATANF_TOLERANCE, 0}, +{768, 1252237719u, 1121169249u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{769, 3327895594u, 1224511805u, 3217624454u, 0, ATANF_TOLERANCE, 0}, +{770, 3082454432u, 889268276u, 3082454432u, 0, ATANF_TOLERANCE, 0}, +{771, 3396161504u, 1182798837u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{772, 1099710167u, 887180181u, 1069663411u, 0, ATANF_TOLERANCE, 0}, +{773, 1157186482u, 1288722647u, 1070137196u, 0, ATANF_TOLERANCE, 0}, +{774, 1282110851u, 3176633124u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{775, 3477008113u, 1331845018u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{776, 3292127294u, 3409957764u, 3217613768u, 0, ATANF_TOLERANCE, 0}, +{777, 1123357102u, 3281307320u, 1070072945u, 0, ATANF_TOLERANCE, 0}, +{778, 1106837025u, 3088080674u, 1069871974u, 0, ATANF_TOLERANCE, 0}, +{779, 1049949008u, 1130799489u, 1049686811u, 0, ATANF_TOLERANCE, 0}, +{780, 1253017688u, 942062372u, 1070141401u, 0, ATANF_TOLERANCE, 0}, +{781, 1108543194u, 3281299199u, 1069913239u, 0, ATANF_TOLERANCE, 0}, +{782, 3087985411u, 1238341456u, 3087985411u, 0, ATANF_TOLERANCE, 0}, +{783, 3163283126u, 1328636961u, 3163282235u, 0, ATANF_TOLERANCE, 0}, +{784, 1160162706u, 1264067367u, 1070138257u, 0, ATANF_TOLERANCE, 0}, +{785, 3305715025u, 3017496063u, 3217621230u, 0, ATANF_TOLERANCE, 0}, +{786, 1266928623u, 811778614u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{787, 3025340297u, 1193925540u, 3025340297u, 0, ATANF_TOLERANCE, 0}, +{788, 3438080027u, 3107114149u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{789, 3344574751u, 3111270744u, 3217624900u, 0, ATANF_TOLERANCE, 0}, +{790, 1152416724u, 962669179u, 1070135461u, 0, ATANF_TOLERANCE, 0}, +{791, 1218239308u, 1126238113u, 1070141377u, 0, ATANF_TOLERANCE, 0}, +{792, 3263310567u, 1030748197u, 3217496171u, 0, ATANF_TOLERANCE, 0}, +{793, 3041998669u, 1160635263u, 3041998669u, 0, ATANF_TOLERANCE, 0}, +{794, 1000313118u, 2980130729u, 1000313035u, 0, ATANF_TOLERANCE, 0}, +{795, 972485427u, 1124312043u, 972485425u, 0, ATANF_TOLERANCE, 0}, +{796, 3290264612u, 1124703898u, 3217611731u, 0, ATANF_TOLERANCE, 0}, +{797, 3222106584u, 1183748648u, 3214060655u, 0, ATANF_TOLERANCE, 0}, +{798, 1278946388u, 825129857u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{799, 947914771u, 3181847068u, 947914771u, 0, ATANF_TOLERANCE, 0}, +{800, 3167730654u, 3195765940u, 3167727737u, 0, ATANF_TOLERANCE, 0}, +{801, 1098530298u, 3255870890u, 1069605780u, 0, ATANF_TOLERANCE, 0}, +{802, 3232726036u, 871038882u, 3216111995u, 0, ATANF_TOLERANCE, 0}, +{803, 1297190916u, 811863044u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{804, 1277649137u, 961171401u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{805, 3203377685u, 1306427476u, 3202361137u, 0, ATANF_TOLERANCE, 0}, +{806, 3090306474u, 3124785016u, 3090306474u, 0, ATANF_TOLERANCE, 0}, +{807, 3244032016u, 3045313345u, 3217016043u, 0, ATANF_TOLERANCE, 0}, +{808, 3033122376u, 3049877065u, 3033122376u, 0, ATANF_TOLERANCE, 0}, +{809, 1096155623u, 1256423752u, 1069515403u, 0, ATANF_TOLERANCE, 0}, +{810, 873151908u, 3246562559u, 873151908u, 0, ATANF_TOLERANCE, 0}, +{811, 3238729605u, 1298769842u, 3216664316u, 0, ATANF_TOLERANCE, 0}, +{812, 3317196817u, 989537151u, 3217623629u, 0, ATANF_TOLERANCE, 0}, +{813, 3374748510u, 834161190u, 3217625038u, 0, ATANF_TOLERANCE, 0}, +{814, 3345634950u, 959901149u, 3217624911u, 0, ATANF_TOLERANCE, 0}, +{815, 3189860276u, 883598767u, 3189773958u, 0, ATANF_TOLERANCE, 0}, +{816, 887311687u, 1175312255u, 887311687u, 0, ATANF_TOLERANCE, 0}, +{817, 3396917283u, 3066326686u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{818, 3317032737u, 3143803722u, 3217623610u, 0, ATANF_TOLERANCE, 0}, +{819, 1200051436u, 1163802508u, 1070141282u, 0, ATANF_TOLERANCE, 0}, +{820, 3105291012u, 1194385202u, 3105291012u, 0, ATANF_TOLERANCE, 0}, +{821, 1306520561u, 957302464u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{822, 1314936356u, 2985592532u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{823, 3475052219u, 1284049853u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{824, 3085636260u, 1107682820u, 3085636260u, 0, ATANF_TOLERANCE, 0}, +{825, 3393227708u, 3271879112u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{826, 3182540197u, 852580839u, 3182511098u, 0, ATANF_TOLERANCE, 0}, +{827, 3349005404u, 3080993030u, 3217624947u, 0, ATANF_TOLERANCE, 0}, +{828, 3154720153u, 3443720494u, 3154719943u, 0, ATANF_TOLERANCE, 0}, +{829, 1262863321u, 1219003129u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{830, 882902102u, 1224362550u, 882902102u, 0, ATANF_TOLERANCE, 0}, +{831, 1053387478u, 3184880021u, 1052763523u, 0, ATANF_TOLERANCE, 0}, +{832, 3387653691u, 3347783852u, 3217625046u, 0, ATANF_TOLERANCE, 0}, +{833, 3136364836u, 1018492227u, 3136364818u, 0, ATANF_TOLERANCE, 0}, +{834, 1338680611u, 1166078045u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{835, 1112891928u, 3074730425u, 1069984171u, 0, ATANF_TOLERANCE, 0}, +{836, 893449284u, 1052877339u, 893449284u, 0, ATANF_TOLERANCE, 0}, +{837, 892311459u, 1097338393u, 892311459u, 0, ATANF_TOLERANCE, 0}, +{838, 3105373037u, 3246705916u, 3105373037u, 0, ATANF_TOLERANCE, 0}, +{839, 1190105283u, 3033907262u, 1070141129u, 0, ATANF_TOLERANCE, 0}, +{840, 1011225926u, 1180485180u, 1011225294u, 0, ATANF_TOLERANCE, 0}, +{841, 1043025031u, 987068973u, 1042922036u, 0, ATANF_TOLERANCE, 0}, +{842, 3410531037u, 2953541915u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{843, 3125834184u, 896953754u, 3125834181u, 0, ATANF_TOLERANCE, 0}, +{844, 902318189u, 849277289u, 902318189u, 0, ATANF_TOLERANCE, 0}, +{845, 3213624815u, 2987148017u, 3209988543u, 0, ATANF_TOLERANCE, 0}, +{846, 1120888322u, 1086209113u, 1070060512u, 0, ATANF_TOLERANCE, 0}, +{847, 1315217243u, 3396371713u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{848, 3137758475u, 1039403054u, 3137758463u, 0, ATANF_TOLERANCE, 0}, +{849, 1040617590u, 1034835971u, 1040567347u, 0, ATANF_TOLERANCE, 0}, +{850, 955384253u, 3344785562u, 955384253u, 0, ATANF_TOLERANCE, 0}, +{851, 3061417900u, 1172208065u, 3061417900u, 0, ATANF_TOLERANCE, 0}, +{852, 904255535u, 1019967545u, 904255535u, 0, ATANF_TOLERANCE, 0}, +{853, 1022984119u, 3113891410u, 1022979067u, 0, ATANF_TOLERANCE, 0}, +{854, 997362368u, 3112875428u, 997362295u, 0, ATANF_TOLERANCE, 0}, +{855, 900933520u, 1100589187u, 900933520u, 0, ATANF_TOLERANCE, 0}, +{856, 1168623062u, 1143306482u, 1070139840u, 0, ATANF_TOLERANCE, 0}, +{857, 878737490u, 3269908326u, 878737490u, 0, ATANF_TOLERANCE, 0}, +{858, 1039827284u, 1072928888u, 1039746136u, 0, ATANF_TOLERANCE, 0}, +{859, 1021564080u, 1064468397u, 1021560233u, 0, ATANF_TOLERANCE, 0}, +{860, 3458669745u, 3033299853u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{861, 3327516316u, 3405380971u, 3217624438u, 0, ATANF_TOLERANCE, 0}, +{862, 1040711112u, 3229444200u, 1040659264u, 0, ATANF_TOLERANCE, 0}, +{863, 1134528351u, 3365952513u, 1070115111u, 0, ATANF_TOLERANCE, 0}, +{864, 3039884464u, 1170612785u, 3039884464u, 0, ATANF_TOLERANCE, 0}, +{865, 3414352838u, 3350285760u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{866, 1133689539u, 1067460093u, 1070112817u, 0, ATANF_TOLERANCE, 0}, +{867, 3455688478u, 3333091960u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{868, 1137634874u, 1137038869u, 1070121134u, 0, ATANF_TOLERANCE, 0}, +{869, 3415502662u, 955510692u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{870, 954999730u, 969618597u, 954999730u, 0, ATANF_TOLERANCE, 0}, +{871, 1066157309u, 3241712664u, 1062519577u, 0, ATANF_TOLERANCE, 0}, +{872, 3436353675u, 1174967495u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{873, 940437609u, 860372396u, 940437609u, 0, ATANF_TOLERANCE, 0}, +{874, 3108347547u, 3434003435u, 3108347546u, 0, ATANF_TOLERANCE, 0}, +{875, 3064200154u, 3158080507u, 3064200154u, 0, ATANF_TOLERANCE, 0}, +{876, 1023889593u, 2979304683u, 1023886369u, 0, ATANF_TOLERANCE, 0}, +{877, 3272661536u, 3461799138u, 3217567140u, 0, ATANF_TOLERANCE, 0}, +{878, 1170245333u, 1233406410u, 1070140041u, 0, ATANF_TOLERANCE, 0}, +{879, 1219052056u, 3369557946u, 1070141378u, 0, ATANF_TOLERANCE, 0}, +{880, 3318983619u, 3259663338u, 3217623812u, 0, ATANF_TOLERANCE, 0}, +{881, 3372118621u, 837597103u, 3217625035u, 0, ATANF_TOLERANCE, 0}, +{882, 3146190320u, 889646054u, 3146190269u, 0, ATANF_TOLERANCE, 0}, +{883, 1299683827u, 966031619u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{884, 3190796331u, 1320011850u, 3190685309u, 0, ATANF_TOLERANCE, 0}, +{885, 3086068902u, 3484245751u, 3086068902u, 0, ATANF_TOLERANCE, 0}, +{886, 3064155399u, 3176569312u, 3064155399u, 0, ATANF_TOLERANCE, 0}, +{887, 3040314717u, 1071290674u, 3040314717u, 0, ATANF_TOLERANCE, 0}, +{888, 3257224022u, 3361778245u, 3217422092u, 0, ATANF_TOLERANCE, 0}, +{889, 1229268598u, 1066965677u, 1070141392u, 0, ATANF_TOLERANCE, 0}, +{890, 3184078812u, 871003709u, 3184036643u, 0, ATANF_TOLERANCE, 0}, +{891, 1086717248u, 3423795374u, 1068797219u, 0, ATANF_TOLERANCE, 0}, +{892, 3434884607u, 3029593823u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{893, 3464955606u, 1017987696u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{894, 1025278524u, 3121856207u, 1025273537u, 0, ATANF_TOLERANCE, 0}, +{895, 1242829722u, 3233935671u, 1070141399u, 0, ATANF_TOLERANCE, 0}, +{896, 3075149137u, 1117325737u, 3075149137u, 0, ATANF_TOLERANCE, 0}, +{897, 1200927971u, 1317167489u, 1070141292u, 0, ATANF_TOLERANCE, 0}, +{898, 3326858092u, 3452602832u, 3217624408u, 0, ATANF_TOLERANCE, 0}, +{899, 1246019790u, 850632217u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{900, 3184801644u, 1137974313u, 3184752184u, 0, ATANF_TOLERANCE, 0}, +{901, 1136052740u, 3244616020u, 1070118457u, 0, ATANF_TOLERANCE, 0}, +{902, 1069009211u, 3002507482u, 1064723212u, 0, ATANF_TOLERANCE, 0}, +{903, 1015670780u, 1101217251u, 1015669926u, 0, ATANF_TOLERANCE, 0}, +{904, 1012543234u, 1116520440u, 1012542389u, 0, ATANF_TOLERANCE, 0}, +{905, 3316611992u, 3394732912u, 3217623557u, 0, ATANF_TOLERANCE, 0}, +{906, 1087942795u, 3316660295u, 1068911490u, 0, ATANF_TOLERANCE, 0}, +{907, 3426365713u, 3069778532u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{908, 3066654389u, 3443934204u, 3066654389u, 0, ATANF_TOLERANCE, 0}, +{909, 3295326432u, 1313396175u, 3217616115u, 0, ATANF_TOLERANCE, 0}, +{910, 3318835308u, 3277583511u, 3217623799u, 0, ATANF_TOLERANCE, 0}, +{911, 3283555717u, 891875120u, 3217602142u, 0, ATANF_TOLERANCE, 0}, +{912, 3381255420u, 3015406047u, 3217625043u, 0, ATANF_TOLERANCE, 0}, +{913, 3040485181u, 3375450886u, 3040485181u, 0, ATANF_TOLERANCE, 0}, +{914, 3388772093u, 1032597076u, 3217625047u, 0, ATANF_TOLERANCE, 0}, +{915, 954670189u, 1144923689u, 954670189u, 0, ATANF_TOLERANCE, 0}, +{916, 1319200415u, 3387555900u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{917, 1279324488u, 3228401212u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{918, 3217795424u, 865577227u, 3212918140u, 0, ATANF_TOLERANCE, 0}, +{919, 3455131757u, 1260217257u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{920, 1246947517u, 1087951909u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{921, 3396723577u, 869285240u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{922, 3433761025u, 3060143904u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{923, 3201187455u, 900233172u, 3200520224u, 0, ATANF_TOLERANCE, 0}, +{924, 1173247961u, 1191127979u, 1070140303u, 0, ATANF_TOLERANCE, 0}, +{925, 3037297123u, 3346394818u, 3037297123u, 0, ATANF_TOLERANCE, 0}, +{926, 3248534678u, 1323683800u, 3217207806u, 0, ATANF_TOLERANCE, 0}, +{927, 3083019343u, 3033309444u, 3083019343u, 0, ATANF_TOLERANCE, 0}, +{928, 3042018375u, 3203882372u, 3042018375u, 0, ATANF_TOLERANCE, 0}, +{929, 1082862511u, 3032804719u, 1068245533u, 0, ATANF_TOLERANCE, 0}, +{930, 3157626955u, 3483653298u, 3157626468u, 0, ATANF_TOLERANCE, 0}, +{931, 1341821683u, 3003675365u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{932, 881101379u, 1190838126u, 881101379u, 0, ATANF_TOLERANCE, 0}, +{933, 1079061705u, 2960507663u, 1067650663u, 0, ATANF_TOLERANCE, 0}, +{934, 3182695954u, 3256861672u, 3182665676u, 0, ATANF_TOLERANCE, 0}, +{935, 1105291533u, 3482971524u, 1069843809u, 0, ATANF_TOLERANCE, 0}, +{936, 1016023520u, 3227712090u, 1016022562u, 0, ATANF_TOLERANCE, 0}, +{937, 3370691006u, 1295870514u, 3217625033u, 0, ATANF_TOLERANCE, 0}, +{938, 1156767169u, 1049756240u, 1070137085u, 0, ATANF_TOLERANCE, 0}, +{939, 3077020499u, 894671462u, 3077020499u, 0, ATANF_TOLERANCE, 0}, +{940, 1104284039u, 3040211914u, 1069822048u, 0, ATANF_TOLERANCE, 0}, +{941, 3335212901u, 3486414589u, 3217624728u, 0, ATANF_TOLERANCE, 0}, +{942, 1093697541u, 3193708441u, 1069383035u, 0, ATANF_TOLERANCE, 0}, +{943, 3266691185u, 1160074593u, 3217532746u, 0, ATANF_TOLERANCE, 0}, +{944, 3179003144u, 1108615803u, 3178982419u, 0, ATANF_TOLERANCE, 0}, +{945, 1094115255u, 3008610212u, 1069409331u, 0, ATANF_TOLERANCE, 0}, +{946, 3424086808u, 3260140004u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{947, 3353608773u, 1134068114u, 3217624979u, 0, ATANF_TOLERANCE, 0}, +{948, 973664327u, 1319516167u, 973664326u, 0, ATANF_TOLERANCE, 0}, +{949, 882878091u, 3136970767u, 882878091u, 0, ATANF_TOLERANCE, 0}, +{950, 1098662266u, 833740182u, 1069610044u, 0, ATANF_TOLERANCE, 0}, +{951, 927582555u, 947955456u, 927582555u, 0, ATANF_TOLERANCE, 0}, +{952, 3111440310u, 3067634077u, 3111440309u, 0, ATANF_TOLERANCE, 0}, +{953, 3476083859u, 966439623u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{954, 3038754840u, 932009686u, 3038754840u, 0, ATANF_TOLERANCE, 0}, +{955, 979878744u, 1232482646u, 979878740u, 0, ATANF_TOLERANCE, 0}, +{956, 3464546616u, 3205527253u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{957, 1002542205u, 3152136093u, 1002542058u, 0, ATANF_TOLERANCE, 0}, +{958, 3443552129u, 3165561391u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{959, 1287620154u, 3119707283u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{960, 946058434u, 1249928879u, 946058434u, 0, ATANF_TOLERANCE, 0}, +{961, 3073260205u, 3093124531u, 3073260205u, 0, ATANF_TOLERANCE, 0}, +{962, 1245702957u, 894348966u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{963, 989655126u, 1308376568u, 989655106u, 0, ATANF_TOLERANCE, 0}, +{964, 1002715618u, 1191006977u, 1002715464u, 0, ATANF_TOLERANCE, 0}, +{965, 3087802274u, 897541752u, 3087802274u, 0, ATANF_TOLERANCE, 0}, +{966, 1000863905u, 1196831314u, 1000863808u, 0, ATANF_TOLERANCE, 0}, +{967, 3415763001u, 3032518431u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{968, 3283471961u, 1260093226u, 3217601980u, 0, ATANF_TOLERANCE, 0}, +{969, 3311210827u, 1192192264u, 3217622679u, 0, ATANF_TOLERANCE, 0}, +{970, 3026311911u, 2968974374u, 3026311911u, 0, ATANF_TOLERANCE, 0}, +{971, 1198307901u, 1116328249u, 1070141264u, 0, ATANF_TOLERANCE, 0}, +{972, 1288901567u, 1296370667u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{973, 922255363u, 958305289u, 922255363u, 0, ATANF_TOLERANCE, 0}, +{974, 1113104661u, 944376032u, 1069986527u, 0, ATANF_TOLERANCE, 0}, +{975, 1136714348u, 828849087u, 1070119658u, 0, ATANF_TOLERANCE, 0}, +{976, 948856035u, 1015466475u, 948856035u, 0, ATANF_TOLERANCE, 0}, +{977, 1062512367u, 3229559531u, 1060205391u, 0, ATANF_TOLERANCE, 0}, +{978, 3486907092u, 823220784u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{979, 1162027071u, 3308983387u, 1070138716u, 0, ATANF_TOLERANCE, 0}, +{980, 1034561811u, 1054043114u, 1034536255u, 0, ATANF_TOLERANCE, 0}, +{981, 3271615417u, 3209997200u, 3217559968u, 0, ATANF_TOLERANCE, 0}, +{982, 1042014529u, 1146708584u, 1041936699u, 0, ATANF_TOLERANCE, 0}, +{983, 1177157787u, 3090208179u, 1070140632u, 0, ATANF_TOLERANCE, 0}, +{984, 3196144817u, 1056118717u, 3195882893u, 0, ATANF_TOLERANCE, 0}, +{985, 3432084552u, 2997091781u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{986, 1309658335u, 1010219988u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{987, 1226494979u, 2991604792u, 1070141389u, 0, ATANF_TOLERANCE, 0}, +{988, 3100289712u, 3456334210u, 3100289712u, 0, ATANF_TOLERANCE, 0}, +{989, 3375507013u, 1306310823u, 3217625039u, 0, ATANF_TOLERANCE, 0}, +{990, 3460699001u, 3096700943u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{991, 3079231719u, 1044386263u, 3079231719u, 0, ATANF_TOLERANCE, 0}, +{992, 3093951884u, 1014115231u, 3093951884u, 0, ATANF_TOLERANCE, 0}, +{993, 3468023178u, 1209565017u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{994, 1204196034u, 3298625731u, 1070141320u, 0, ATANF_TOLERANCE, 0}, +{995, 3459877411u, 2960476959u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{996, 909696559u, 1163075690u, 909696559u, 0, ATANF_TOLERANCE, 0}, +{997, 1161439847u, 943449277u, 1070138586u, 0, ATANF_TOLERANCE, 0}, +{998, 908663107u, 939489763u, 908663107u, 0, ATANF_TOLERANCE, 0}, +{999, 1055319316u, 3261813492u, 1054402974u, 0, ATANF_TOLERANCE, 0}, +{1000, 1084378658u, 1009650785u, 1068508453u, 0, ATANF_TOLERANCE, 0}, +{1001, 3053887750u, 3341786453u, 3053887750u, 0, ATANF_TOLERANCE, 0}, +{1002, 3022828828u, 881335251u, 3022828828u, 0, ATANF_TOLERANCE, 0}, +{1003, 1226473697u, 821025132u, 1070141389u, 0, ATANF_TOLERANCE, 0}, +{1004, 1123114742u, 1229815537u, 1070071896u, 0, ATANF_TOLERANCE, 0}, +{1005, 1258114435u, 1291336083u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{1006, 3468040845u, 3066966245u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1007, 1178825761u, 1113195286u, 1070140732u, 0, ATANF_TOLERANCE, 0}, +{1008, 3059266302u, 878503862u, 3059266302u, 0, ATANF_TOLERANCE, 0}, +{1009, 3223384012u, 1130486973u, 3214449981u, 0, ATANF_TOLERANCE, 0}, +{1010, 1019964626u, 1235133609u, 1019961886u, 0, ATANF_TOLERANCE, 0}, +{1011, 3445262427u, 3465211174u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1012, 1125653081u, 1207799746u, 1070086253u, 0, ATANF_TOLERANCE, 0}, +{1013, 3337652712u, 3025581813u, 3217624778u, 0, ATANF_TOLERANCE, 0}, +{1014, 1184753508u, 3147374485u, 1070140988u, 0, ATANF_TOLERANCE, 0}, +{1015, 996404791u, 3353251979u, 996404731u, 0, ATANF_TOLERANCE, 0}, +{1016, 1188439315u, 1113484271u, 1070141097u, 0, ATANF_TOLERANCE, 0}, +{1017, 906557513u, 3006513432u, 906557513u, 0, ATANF_TOLERANCE, 0}, +{1018, 916831283u, 999465787u, 916831283u, 0, ATANF_TOLERANCE, 0}, +{1019, 996786317u, 3179221951u, 996786252u, 0, ATANF_TOLERANCE, 0}, +{1020, 3461635065u, 1004690387u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1021, 1188167943u, 1200744896u, 1070141091u, 0, ATANF_TOLERANCE, 0}, +{1022, 3036502395u, 1172597364u, 3036502395u, 0, ATANF_TOLERANCE, 0}, +{1023, 891257783u, 1267560050u, 891257783u, 0, ATANF_TOLERANCE, 0}, +{1024, 3290079438u, 846519377u, 3217611488u, 0, ATANF_TOLERANCE, 0}, +{1025, 3350690327u, 2967953392u, 3217624961u, 0, ATANF_TOLERANCE, 0}, +{1026, 1102061604u, 3424449935u, 1069760636u, 0, ATANF_TOLERANCE, 0}, +{1027, 1282351521u, 3039376424u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{1028, 3458861065u, 3392466405u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1029, 3095256878u, 1023623326u, 3095256878u, 0, ATANF_TOLERANCE, 0}, +{1030, 3163373610u, 843150426u, 3163372692u, 0, ATANF_TOLERANCE, 0}, +{1031, 3228793330u, 855146890u, 3215468806u, 0, ATANF_TOLERANCE, 0}, +{1032, 3422194733u, 893873945u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{1033, 3083885296u, 974543672u, 3083885296u, 0, ATANF_TOLERANCE, 0}, +{1034, 1261940623u, 3402349985u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{1035, 3400603081u, 3234396843u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{1036, 1219411812u, 2961857939u, 1070141379u, 0, ATANF_TOLERANCE, 0}, +{1037, 3094833770u, 805351108u, 3094833770u, 0, ATANF_TOLERANCE, 0}, +{1038, 3139250800u, 3079109479u, 3139250780u, 0, ATANF_TOLERANCE, 0}, +{1039, 886201503u, 3272760705u, 886201503u, 0, ATANF_TOLERANCE, 0}, +{1040, 3297366026u, 1089966380u, 3217617442u, 0, ATANF_TOLERANCE, 0}, +{1041, 1218488455u, 3309646450u, 1070141377u, 0, ATANF_TOLERANCE, 0}, +{1042, 3040358923u, 3093401553u, 3040358923u, 0, ATANF_TOLERANCE, 0}, +{1043, 1283938137u, 1196383822u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1044, 3182551696u, 3029982441u, 3182522512u, 0, ATANF_TOLERANCE, 0}, +{1045, 1317098613u, 949986176u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1046, 3116209179u, 3303588342u, 3116209179u, 0, ATANF_TOLERANCE, 0}, +{1047, 3431703657u, 3014443710u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1048, 3239728775u, 927815421u, 3216758511u, 0, ATANF_TOLERANCE, 0}, +{1049, 3207141672u, 933456504u, 3205853333u, 0, ATANF_TOLERANCE, 0}, +{1050, 3154378805u, 905462392u, 3154378618u, 0, ATANF_TOLERANCE, 0}, +{1051, 3069658155u, 1041452042u, 3069658155u, 0, ATANF_TOLERANCE, 0}, +{1052, 3313160088u, 2964063309u, 3217622960u, 0, ATANF_TOLERANCE, 0}, +{1053, 3207056527u, 3384206601u, 3205793915u, 0, ATANF_TOLERANCE, 0}, +{1054, 1284174954u, 3436881197u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1055, 3156081645u, 3308839704u, 3156081325u, 0, ATANF_TOLERANCE, 0}, +{1056, 1063693032u, 976661408u, 1060880281u, 0, ATANF_TOLERANCE, 0}, +{1057, 3036026175u, 1251203998u, 3036026175u, 0, ATANF_TOLERANCE, 0}, +{1058, 1102631663u, 3396951425u, 1069778533u, 0, ATANF_TOLERANCE, 0}, +{1059, 968803479u, 992989712u, 968803479u, 0, ATANF_TOLERANCE, 0}, +{1060, 3273080388u, 3109405906u, 3217569587u, 0, ATANF_TOLERANCE, 0}, +{1061, 1172529774u, 3294550127u, 1070140250u, 0, ATANF_TOLERANCE, 0}, +{1062, 1306695905u, 1292690378u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1063, 1003649752u, 1218792138u, 1003649562u, 0, ATANF_TOLERANCE, 0}, +{1064, 1078478376u, 1326246424u, 1067546758u, 0, ATANF_TOLERANCE, 0}, +{1065, 3158855023u, 3151283866u, 3158854369u, 0, ATANF_TOLERANCE, 0}, +{1066, 1165177679u, 3276237026u, 1070139247u, 0, ATANF_TOLERANCE, 0}, +{1067, 3403009513u, 3381966453u, 3217625049u, 0, ATANF_TOLERANCE, 0}, +{1068, 952348506u, 3377573987u, 952348506u, 0, ATANF_TOLERANCE, 0}, +{1069, 1222777442u, 1125769920u, 1070141385u, 0, ATANF_TOLERANCE, 0}, +{1070, 1325324763u, 978336043u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1071, 3363524213u, 3202991311u, 3217625018u, 0, ATANF_TOLERANCE, 0}, +{1072, 1158950321u, 1073578913u, 1070137864u, 0, ATANF_TOLERANCE, 0}, +{1073, 903129873u, 3416864271u, 903129873u, 0, ATANF_TOLERANCE, 0}, +{1074, 3078339944u, 988173985u, 3078339944u, 0, ATANF_TOLERANCE, 0}, +{1075, 1208345407u, 1254181270u, 1070141341u, 0, ATANF_TOLERANCE, 0}, +{1076, 1258634105u, 1247426200u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{1077, 1248478509u, 1287895126u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{1078, 1153863988u, 3430539165u, 1070136122u, 0, ATANF_TOLERANCE, 0}, +{1079, 1235620969u, 866627358u, 1070141396u, 0, ATANF_TOLERANCE, 0}, +{1080, 1097120930u, 3221726305u, 1069555579u, 0, ATANF_TOLERANCE, 0}, +{1081, 3469778622u, 1200179013u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1082, 1147712200u, 931865525u, 1070132390u, 0, ATANF_TOLERANCE, 0}, +{1083, 1124721745u, 3058969650u, 1070080569u, 0, ATANF_TOLERANCE, 0}, +{1084, 3261744304u, 1043806501u, 3217481834u, 0, ATANF_TOLERANCE, 0}, +{1085, 1064922416u, 1320485628u, 1061534605u, 0, ATANF_TOLERANCE, 0}, +{1086, 3303160152u, 3075455322u, 3217620416u, 0, ATANF_TOLERANCE, 0}, +{1087, 1315090496u, 3269683237u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1088, 3230403187u, 1322841992u, 3215740568u, 0, ATANF_TOLERANCE, 0}, +{1089, 1335399673u, 974138676u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1090, 1072458508u, 3372833993u, 1065978748u, 0, ATANF_TOLERANCE, 0}, +{1091, 3303015249u, 3015039539u, 3217620370u, 0, ATANF_TOLERANCE, 0}, +{1092, 3252139741u, 1059615003u, 3217314092u, 0, ATANF_TOLERANCE, 0}, +{1093, 3468519966u, 3113982619u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1094, 1006231203u, 897530770u, 1006230885u, 0, ATANF_TOLERANCE, 0}, +{1095, 951554138u, 1001144381u, 951554138u, 0, ATANF_TOLERANCE, 0}, +{1096, 942046828u, 986341002u, 942046828u, 0, ATANF_TOLERANCE, 0}, +{1097, 3319723279u, 3414482416u, 3217623875u, 0, ATANF_TOLERANCE, 0}, +{1098, 3255104167u, 928827688u, 3217372739u, 0, ATANF_TOLERANCE, 0}, +{1099, 1155477903u, 3104812800u, 1070136705u, 0, ATANF_TOLERANCE, 0}, +{1100, 3273889176u, 980486479u, 3217573771u, 0, ATANF_TOLERANCE, 0}, +{1101, 3237813668u, 3441016803u, 3216570123u, 0, ATANF_TOLERANCE, 0}, +{1102, 1228207362u, 2985476579u, 1070141391u, 0, ATANF_TOLERANCE, 0}, +{1103, 975349337u, 1311932596u, 975349336u, 0, ATANF_TOLERANCE, 0}, +{1104, 1290175785u, 3008182462u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1105, 981908840u, 3314038398u, 981908837u, 0, ATANF_TOLERANCE, 0}, +{1106, 941187647u, 1107765599u, 941187647u, 0, ATANF_TOLERANCE, 0}, +{1107, 1214223128u, 3225536822u, 1070141366u, 0, ATANF_TOLERANCE, 0}, +{1108, 3422922584u, 1086391131u, 3217625050u, 0, ATANF_TOLERANCE, 0}, +{1109, 1315857601u, 3487600045u, 1070141403u, 0, ATANF_TOLERANCE, 0}, +{1110, 3453226030u, 3233768835u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1111, 1078359574u, 3199175230u, 1067524560u, 0, ATANF_TOLERANCE, 0}, +{1112, 1029557624u, 3302959071u, 1029543441u, 0, ATANF_TOLERANCE, 0}, +{1113, 1207675424u, 3042692550u, 1070141338u, 0, ATANF_TOLERANCE, 0}, +{1114, 1028355074u, 3442294040u, 1028344125u, 0, ATANF_TOLERANCE, 0}, +{1115, 3119299090u, 1187096397u, 3119299089u, 0, ATANF_TOLERANCE, 0}, +{1116, 1248421894u, 3367769132u, 1070141400u, 0, ATANF_TOLERANCE, 0}, +{1117, 3353251994u, 1095517730u, 3217624977u, 0, ATANF_TOLERANCE, 0}, +{1118, 876926659u, 3288089977u, 876926659u, 0, ATANF_TOLERANCE, 0}, +{1119, 1076752219u, 876236939u, 1067183758u, 0, ATANF_TOLERANCE, 0}, +{1120, 3388531942u, 2988520062u, 3217625047u, 0, ATANF_TOLERANCE, 0}, +{1121, 1273395082u, 3031189261u, 1070141402u, 0, ATANF_TOLERANCE, 0}, +{1122, 3385588183u, 3258252464u, 3217625046u, 0, ATANF_TOLERANCE, 0}, +{1123, 3192315328u, 3289489214u, 3192155091u, 0, ATANF_TOLERANCE, 0}, +{1124, 3441804648u, 3274638356u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1125, 3392827417u, 1277961150u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{1126, 1161241793u, 1328003707u, 1070138540u, 0, ATANF_TOLERANCE, 0}, +{1127, 3034494183u, 3041579130u, 3034494183u, 0, ATANF_TOLERANCE, 0}, +{1128, 1171318485u, 3374409104u, 1070140148u, 0, ATANF_TOLERANCE, 0}, +{1129, 3047748143u, 831102792u, 3047748143u, 0, ATANF_TOLERANCE, 0}, +{1130, 1001216371u, 3052357038u, 1001216265u, 0, ATANF_TOLERANCE, 0}, +{1131, 912515889u, 1074635609u, 912515889u, 0, ATANF_TOLERANCE, 0}, +{1132, 3391452505u, 897989232u, 3217625048u, 0, ATANF_TOLERANCE, 0}, +{1133, 3249603369u, 3147662248u, 3217246189u, 0, ATANF_TOLERANCE, 0}, +{1134, 1220264047u, 2960450369u, 1070141381u, 0, ATANF_TOLERANCE, 0}, +{1135, 3169816394u, 988430929u, 3169811921u, 0, ATANF_TOLERANCE, 0}, +{1136, 3098997418u, 3002162688u, 3098997418u, 0, ATANF_TOLERANCE, 0}, +{1137, 3282212423u, 3174079140u, 3217599253u, 0, ATANF_TOLERANCE, 0}, +{1138, 3352293320u, 3247843425u, 3217624972u, 0, ATANF_TOLERANCE, 0}, +{1139, 3296358441u, 875645354u, 3217616677u, 0, ATANF_TOLERANCE, 0}, +{1140, 1197828352u, 3245614728u, 1070141260u, 0, ATANF_TOLERANCE, 0}, +{1141, 3340510371u, 914930263u, 3217624841u, 0, ATANF_TOLERANCE, 0}, +{1142, 1127109339u, 3368125489u, 1070093282u, 0, ATANF_TOLERANCE, 0}, +{1143, 909467381u, 1232375752u, 909467381u, 0, ATANF_TOLERANCE, 0}, +{1144, 1200599955u, 2981200675u, 1070141289u, 0, ATANF_TOLERANCE, 0}, +{1145, 962230977u, 2988248037u, 962230977u, 0, ATANF_TOLERANCE, 0}, +{1146, 3192887808u, 3191848339u, 3192705872u, 0, ATANF_TOLERANCE, 0}, +{1147, 3237183876u, 3179379969u, 3216528954u, 0, ATANF_TOLERANCE, 0}, +{1148, 939285924u, 3056079386u, 939285924u, 0, ATANF_TOLERANCE, 0}, +{1149, 944050180u, 3452557879u, 944050180u, 0, ATANF_TOLERANCE, 0}, +{1150, 3058135703u, 3090284601u, 3058135703u, 0, ATANF_TOLERANCE, 0}, +{1151, 3480592662u, 3261728191u, 3217625051u, 0, ATANF_TOLERANCE, 0}, +{1152, 3061939312u, 3274418540u, 3061939312u, 0, ATANF_TOLERANCE, 0}, +{1153, 1003299981u, 853295521u, 1003299805u, 0, ATANF_TOLERANCE, 0}, +{1154, 1155775526u, 1255814444u, 1070136798u, 0, ATANF_TOLERANCE, 0}, +{1155, 1234491880u, 3408568717u, 1070141396u, 0, ATANF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ATANF_H multiple inclusion protection + +// EOF atanf.h diff --git a/packages/language/c/libm/current/tests/vectors/atanhf.c b/packages/language/c/libm/current/tests/vectors/atanhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atanhf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// atanhf.c +// +// Test of atanhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/atanhf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(atanhf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &atanhf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &atanhf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("atanhf() is stable"); + } // if + else + { + CYG_TEST_FAIL("atanhf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library atanhf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "atanhf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF atanhf.c diff --git a/packages/language/c/libm/current/tests/vectors/atanhf.h b/packages/language/c/libm/current/tests/vectors/atanhf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/atanhf.h @@ -0,0 +1,361 @@ +#ifndef CYGONCE_LIBM_ATANHF_H +#define CYGONCE_LIBM_ATANHF_H +//=========================================================================== +// +// atanhf.h +// +// Test vectors for testing of atanhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/atanhf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ATANH_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t atanhf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{20, 3212836864u, 1115684864u, 4286578688u, EDOM, ATANH_TOLERANCE, 0}, +{21, 3212669092u, 3223937731u, 3223937731u, 0, ATANH_TOLERANCE, 0}, +{22, 3212501320u, 3222473531u, 3222473531u, 0, ATANH_TOLERANCE, 0}, +{23, 3212333548u, 3221612590u, 3221612590u, 0, ATANH_TOLERANCE, 0}, +{24, 3212165775u, 3220771731u, 3220771731u, 0, ATANH_TOLERANCE, 0}, +{25, 3211998003u, 3219814346u, 3219814346u, 0, ATANH_TOLERANCE, 0}, +{26, 3211830231u, 3219028070u, 3219028070u, 0, ATANH_TOLERANCE, 0}, +{27, 3211662459u, 3218359840u, 3218359840u, 0, ATANH_TOLERANCE, 0}, +{28, 3211494687u, 3217777981u, 3217777981u, 0, ATANH_TOLERANCE, 0}, +{29, 3211326915u, 3217262061u, 3217262061u, 0, ATANH_TOLERANCE, 0}, +{30, 3211159142u, 3216798127u, 3216798127u, 0, ATANH_TOLERANCE, 0}, +{31, 3210991370u, 3216376234u, 3216376234u, 0, ATANH_TOLERANCE, 0}, +{32, 3210823598u, 3215989031u, 3215989031u, 0, ATANH_TOLERANCE, 0}, +{33, 3210655826u, 3215630939u, 3215630939u, 0, ATANH_TOLERANCE, 0}, +{34, 3210488054u, 3215297618u, 3215297618u, 0, ATANH_TOLERANCE, 0}, +{35, 3210320282u, 3214985630u, 3214985630u, 0, ATANH_TOLERANCE, 0}, +{36, 3210152509u, 3214692201u, 3214692201u, 0, ATANH_TOLERANCE, 0}, +{37, 3209984737u, 3214415066u, 3214415066u, 0, ATANH_TOLERANCE, 0}, +{38, 3209816965u, 3214152344u, 3214152344u, 0, ATANH_TOLERANCE, 0}, +{39, 3209649193u, 3213902461u, 3213902461u, 0, ATANH_TOLERANCE, 0}, +{40, 3209481421u, 3213664084u, 3213664084u, 0, ATANH_TOLERANCE, 0}, +{41, 3209313649u, 3213436077u, 3213436077u, 0, ATANH_TOLERANCE, 0}, +{42, 3209145876u, 3213217459u, 3213217459u, 0, ATANH_TOLERANCE, 0}, +{43, 3208978104u, 3213007385u, 3213007385u, 0, ATANH_TOLERANCE, 0}, +{44, 3208810332u, 3212773363u, 3212773363u, 0, ATANH_TOLERANCE, 0}, +{45, 3208642560u, 3212383125u, 3212383125u, 0, ATANH_TOLERANCE, 0}, +{46, 3208474788u, 3212006046u, 3212006046u, 0, ATANH_TOLERANCE, 0}, +{47, 3208307016u, 3211641108u, 3211641108u, 0, ATANH_TOLERANCE, 0}, +{48, 3208139244u, 3211287405u, 3211287405u, 0, ATANH_TOLERANCE, 0}, +{49, 3207971471u, 3210944122u, 3210944122u, 0, ATANH_TOLERANCE, 0}, +{50, 3207803699u, 3210610536u, 3210610536u, 0, ATANH_TOLERANCE, 0}, +{51, 3207635927u, 3210285985u, 3210285985u, 0, ATANH_TOLERANCE, 0}, +{52, 3207468155u, 3209969873u, 3209969873u, 0, ATANH_TOLERANCE, 0}, +{53, 3207300383u, 3209661661u, 3209661661u, 0, ATANH_TOLERANCE, 0}, +{54, 3207132611u, 3209360854u, 3209360854u, 0, ATANH_TOLERANCE, 0}, +{55, 3206964838u, 3209067001u, 3209067001u, 0, ATANH_TOLERANCE, 0}, +{56, 3206797066u, 3208779692u, 3208779692u, 0, ATANH_TOLERANCE, 0}, +{57, 3206629294u, 3208498547u, 3208498547u, 0, ATANH_TOLERANCE, 0}, +{58, 3206461522u, 3208223215u, 3208223215u, 0, ATANH_TOLERANCE, 0}, +{59, 3206293750u, 3207953375u, 3207953375u, 0, ATANH_TOLERANCE, 0}, +{60, 3206125978u, 3207688728u, 3207688728u, 0, ATANH_TOLERANCE, 0}, +{61, 3205958205u, 3207428997u, 3207428997u, 0, ATANH_TOLERANCE, 0}, +{62, 3205790433u, 3207173927u, 3207173927u, 0, ATANH_TOLERANCE, 0}, +{63, 3205622661u, 3206923278u, 3206923278u, 0, ATANH_TOLERANCE, 0}, +{64, 3205454889u, 3206676827u, 3206676827u, 0, ATANH_TOLERANCE, 0}, +{65, 3205287117u, 3206434365u, 3206434365u, 0, ATANH_TOLERANCE, 0}, +{66, 3205119345u, 3206195697u, 3206195697u, 0, ATANH_TOLERANCE, 0}, +{67, 3204951572u, 3205960640u, 3205960640u, 0, ATANH_TOLERANCE, 0}, +{68, 3204783800u, 3205729024u, 3205729024u, 0, ATANH_TOLERANCE, 0}, +{69, 3204616028u, 3205500687u, 3205500687u, 0, ATANH_TOLERANCE, 0}, +{70, 3204448256u, 3205275476u, 3205275476u, 0, ATANH_TOLERANCE, 0}, +{71, 3204112712u, 3205053248u, 3205053248u, 0, ATANH_TOLERANCE, 0}, +{72, 3203777167u, 3204833868u, 3204833868u, 0, ATANH_TOLERANCE, 0}, +{73, 3203441623u, 3204617208u, 3204617208u, 0, ATANH_TOLERANCE, 0}, +{74, 3203106079u, 3204358038u, 3204358038u, 0, ATANH_TOLERANCE, 0}, +{75, 3202770534u, 3203934881u, 3203934881u, 0, ATANH_TOLERANCE, 0}, +{76, 3202434990u, 3203516476u, 3203516476u, 0, ATANH_TOLERANCE, 0}, +{77, 3202099446u, 3203102612u, 3203102612u, 0, ATANH_TOLERANCE, 0}, +{78, 3201763901u, 3202693091u, 3202693091u, 0, ATANH_TOLERANCE, 0}, +{79, 3201428357u, 3202287727u, 3202287727u, 0, ATANH_TOLERANCE, 0}, +{80, 3201092813u, 3201886339u, 3201886339u, 0, ATANH_TOLERANCE, 0}, +{81, 3200757268u, 3201488755u, 3201488755u, 0, ATANH_TOLERANCE, 0}, +{82, 3200421724u, 3201094814u, 3201094814u, 0, ATANH_TOLERANCE, 0}, +{83, 3200086180u, 3200704357u, 3200704357u, 0, ATANH_TOLERANCE, 0}, +{84, 3199750636u, 3200317233u, 3200317233u, 0, ATANH_TOLERANCE, 0}, +{85, 3199415091u, 3199933297u, 3199933297u, 0, ATANH_TOLERANCE, 0}, +{86, 3199079547u, 3199552413u, 3199552413u, 0, ATANH_TOLERANCE, 0}, +{87, 3198744003u, 3199174448u, 3199174448u, 0, ATANH_TOLERANCE, 0}, +{88, 3198408458u, 3198799270u, 3198799270u, 0, ATANH_TOLERANCE, 0}, +{89, 3198072914u, 3198426759u, 3198426759u, 0, ATANH_TOLERANCE, 0}, +{90, 3197737370u, 3198056795u, 3198056795u, 0, ATANH_TOLERANCE, 0}, +{91, 3197401825u, 3197689261u, 3197689261u, 0, ATANH_TOLERANCE, 0}, +{92, 3197066281u, 3197324049u, 3197324049u, 0, ATANH_TOLERANCE, 0}, +{93, 3196730737u, 3196961049u, 3196961049u, 0, ATANH_TOLERANCE, 0}, +{94, 3196395192u, 3196600156u, 3196600156u, 0, ATANH_TOLERANCE, 0}, +{95, 3196059648u, 3196241272u, 3196241272u, 0, ATANH_TOLERANCE, 0}, +{96, 3195388559u, 3195708944u, 3195708944u, 0, ATANH_TOLERANCE, 0}, +{97, 3194717471u, 3194998622u, 3194998622u, 0, ATANH_TOLERANCE, 0}, +{98, 3194046382u, 3194291739u, 3194291739u, 0, ATANH_TOLERANCE, 0}, +{99, 3193375293u, 3193588118u, 3193588118u, 0, ATANH_TOLERANCE, 0}, +{100, 3192704205u, 3192887583u, 3192887583u, 0, ATANH_TOLERANCE, 0}, +{101, 3192033116u, 3192189961u, 3192189961u, 0, ATANH_TOLERANCE, 0}, +{102, 3191362028u, 3191495084u, 3191495084u, 0, ATANH_TOLERANCE, 0}, +{103, 3190690939u, 3190802787u, 3190802787u, 0, ATANH_TOLERANCE, 0}, +{104, 3190019850u, 3190112909u, 3190112909u, 0, ATANH_TOLERANCE, 0}, +{105, 3189348762u, 3189425295u, 3189425295u, 0, ATANH_TOLERANCE, 0}, +{106, 3188677673u, 3188739788u, 3188739788u, 0, ATANH_TOLERANCE, 0}, +{107, 3188006584u, 3188056235u, 3188056235u, 0, ATANH_TOLERANCE, 0}, +{108, 3186999951u, 3187077935u, 3187077935u, 0, ATANH_TOLERANCE, 0}, +{109, 3185657774u, 3185717758u, 3185717758u, 0, ATANH_TOLERANCE, 0}, +{110, 3184315597u, 3184360607u, 3184360607u, 0, ATANH_TOLERANCE, 0}, +{111, 3182973420u, 3183006194u, 3183006194u, 0, ATANH_TOLERANCE, 0}, +{112, 3181631242u, 3181654236u, 3181654236u, 0, ATANH_TOLERANCE, 0}, +{113, 3180289065u, 3180304456u, 3180304456u, 0, ATANH_TOLERANCE, 0}, +{114, 3178611343u, 3178630713u, 3178630713u, 0, ATANH_TOLERANCE, 0}, +{115, 3175926989u, 3175938190u, 3175938190u, 0, ATANH_TOLERANCE, 0}, +{116, 3173242634u, 3173248366u, 3173248366u, 0, ATANH_TOLERANCE, 0}, +{117, 3170222735u, 3170227570u, 3170227570u, 0, ATANH_TOLERANCE, 0}, +{118, 3164854026u, 3164855458u, 3164855458u, 0, ATANH_TOLERANCE, 0}, +{119, 3156465418u, 3156465776u, 3156465776u, 0, ATANH_TOLERANCE, 0}, +{120, 1008981770u, 1008982128u, 1008982128u, 0, ATANH_TOLERANCE, 0}, +{121, 1017370378u, 1017371810u, 1017371810u, 0, ATANH_TOLERANCE, 0}, +{122, 1022739087u, 1022743922u, 1022743922u, 0, ATANH_TOLERANCE, 0}, +{123, 1025758986u, 1025764718u, 1025764718u, 0, ATANH_TOLERANCE, 0}, +{124, 1028443341u, 1028454542u, 1028454542u, 0, ATANH_TOLERANCE, 0}, +{125, 1031127695u, 1031147065u, 1031147065u, 0, ATANH_TOLERANCE, 0}, +{126, 1032805417u, 1032820808u, 1032820808u, 0, ATANH_TOLERANCE, 0}, +{127, 1034147594u, 1034170588u, 1034170588u, 0, ATANH_TOLERANCE, 0}, +{128, 1035489772u, 1035522546u, 1035522546u, 0, ATANH_TOLERANCE, 0}, +{129, 1036831949u, 1036876959u, 1036876959u, 0, ATANH_TOLERANCE, 0}, +{130, 1038174126u, 1038234110u, 1038234110u, 0, ATANH_TOLERANCE, 0}, +{131, 1039516303u, 1039594287u, 1039594287u, 0, ATANH_TOLERANCE, 0}, +{132, 1040522936u, 1040572587u, 1040572587u, 0, ATANH_TOLERANCE, 0}, +{133, 1041194025u, 1041256140u, 1041256140u, 0, ATANH_TOLERANCE, 0}, +{134, 1041865114u, 1041941647u, 1041941647u, 0, ATANH_TOLERANCE, 0}, +{135, 1042536202u, 1042629261u, 1042629261u, 0, ATANH_TOLERANCE, 0}, +{136, 1043207291u, 1043319139u, 1043319139u, 0, ATANH_TOLERANCE, 0}, +{137, 1043878380u, 1044011436u, 1044011436u, 0, ATANH_TOLERANCE, 0}, +{138, 1044549468u, 1044706313u, 1044706313u, 0, ATANH_TOLERANCE, 0}, +{139, 1045220557u, 1045403935u, 1045403935u, 0, ATANH_TOLERANCE, 0}, +{140, 1045891645u, 1046104470u, 1046104470u, 0, ATANH_TOLERANCE, 0}, +{141, 1046562734u, 1046808091u, 1046808091u, 0, ATANH_TOLERANCE, 0}, +{142, 1047233823u, 1047514974u, 1047514974u, 0, ATANH_TOLERANCE, 0}, +{143, 1047904911u, 1048225296u, 1048225296u, 0, ATANH_TOLERANCE, 0}, +{144, 1048576000u, 1048757624u, 1048757624u, 0, ATANH_TOLERANCE, 0}, +{145, 1048911544u, 1049116508u, 1049116508u, 0, ATANH_TOLERANCE, 0}, +{146, 1049247089u, 1049477401u, 1049477401u, 0, ATANH_TOLERANCE, 0}, +{147, 1049582633u, 1049840401u, 1049840401u, 0, ATANH_TOLERANCE, 0}, +{148, 1049918177u, 1050205613u, 1050205613u, 0, ATANH_TOLERANCE, 0}, +{149, 1050253722u, 1050573147u, 1050573147u, 0, ATANH_TOLERANCE, 0}, +{150, 1050589266u, 1050943111u, 1050943111u, 0, ATANH_TOLERANCE, 0}, +{151, 1050924810u, 1051315622u, 1051315622u, 0, ATANH_TOLERANCE, 0}, +{152, 1051260355u, 1051690800u, 1051690800u, 0, ATANH_TOLERANCE, 0}, +{153, 1051595899u, 1052068765u, 1052068765u, 0, ATANH_TOLERANCE, 0}, +{154, 1051931443u, 1052449649u, 1052449649u, 0, ATANH_TOLERANCE, 0}, +{155, 1052266988u, 1052833585u, 1052833585u, 0, ATANH_TOLERANCE, 0}, +{156, 1052602532u, 1053220709u, 1053220709u, 0, ATANH_TOLERANCE, 0}, +{157, 1052938076u, 1053611166u, 1053611166u, 0, ATANH_TOLERANCE, 0}, +{158, 1053273620u, 1054005107u, 1054005107u, 0, ATANH_TOLERANCE, 0}, +{159, 1053609165u, 1054402691u, 1054402691u, 0, ATANH_TOLERANCE, 0}, +{160, 1053944709u, 1054804079u, 1054804079u, 0, ATANH_TOLERANCE, 0}, +{161, 1054280253u, 1055209443u, 1055209443u, 0, ATANH_TOLERANCE, 0}, +{162, 1054615798u, 1055618964u, 1055618964u, 0, ATANH_TOLERANCE, 0}, +{163, 1054951342u, 1056032828u, 1056032828u, 0, ATANH_TOLERANCE, 0}, +{164, 1055286886u, 1056451233u, 1056451233u, 0, ATANH_TOLERANCE, 0}, +{165, 1055622431u, 1056874390u, 1056874390u, 0, ATANH_TOLERANCE, 0}, +{166, 1055957975u, 1057133560u, 1057133560u, 0, ATANH_TOLERANCE, 0}, +{167, 1056293519u, 1057350220u, 1057350220u, 0, ATANH_TOLERANCE, 0}, +{168, 1056629064u, 1057569600u, 1057569600u, 0, ATANH_TOLERANCE, 0}, +{169, 1056964608u, 1057791828u, 1057791828u, 0, ATANH_TOLERANCE, 0}, +{170, 1057132380u, 1058017039u, 1058017039u, 0, ATANH_TOLERANCE, 0}, +{171, 1057300152u, 1058245376u, 1058245376u, 0, ATANH_TOLERANCE, 0}, +{172, 1057467924u, 1058476992u, 1058476992u, 0, ATANH_TOLERANCE, 0}, +{173, 1057635697u, 1058712049u, 1058712049u, 0, ATANH_TOLERANCE, 0}, +{174, 1057803469u, 1058950717u, 1058950717u, 0, ATANH_TOLERANCE, 0}, +{175, 1057971241u, 1059193179u, 1059193179u, 0, ATANH_TOLERANCE, 0}, +{176, 1058139013u, 1059439630u, 1059439630u, 0, ATANH_TOLERANCE, 0}, +{177, 1058306785u, 1059690279u, 1059690279u, 0, ATANH_TOLERANCE, 0}, +{178, 1058474557u, 1059945349u, 1059945349u, 0, ATANH_TOLERANCE, 0}, +{179, 1058642330u, 1060205080u, 1060205080u, 0, ATANH_TOLERANCE, 0}, +{180, 1058810102u, 1060469727u, 1060469727u, 0, ATANH_TOLERANCE, 0}, +{181, 1058977874u, 1060739567u, 1060739567u, 0, ATANH_TOLERANCE, 0}, +{182, 1059145646u, 1061014899u, 1061014899u, 0, ATANH_TOLERANCE, 0}, +{183, 1059313418u, 1061296044u, 1061296044u, 0, ATANH_TOLERANCE, 0}, +{184, 1059481190u, 1061583353u, 1061583353u, 0, ATANH_TOLERANCE, 0}, +{185, 1059648963u, 1061877206u, 1061877206u, 0, ATANH_TOLERANCE, 0}, +{186, 1059816735u, 1062178013u, 1062178013u, 0, ATANH_TOLERANCE, 0}, +{187, 1059984507u, 1062486225u, 1062486225u, 0, ATANH_TOLERANCE, 0}, +{188, 1060152279u, 1062802337u, 1062802337u, 0, ATANH_TOLERANCE, 0}, +{189, 1060320051u, 1063126888u, 1063126888u, 0, ATANH_TOLERANCE, 0}, +{190, 1060487823u, 1063460474u, 1063460474u, 0, ATANH_TOLERANCE, 0}, +{191, 1060655596u, 1063803757u, 1063803757u, 0, ATANH_TOLERANCE, 0}, +{192, 1060823368u, 1064157460u, 1064157460u, 0, ATANH_TOLERANCE, 0}, +{193, 1060991140u, 1064522398u, 1064522398u, 0, ATANH_TOLERANCE, 0}, +{194, 1061158912u, 1064899477u, 1064899477u, 0, ATANH_TOLERANCE, 0}, +{195, 1061326684u, 1065289715u, 1065289715u, 0, ATANH_TOLERANCE, 0}, +{196, 1061494456u, 1065523737u, 1065523737u, 0, ATANH_TOLERANCE, 0}, +{197, 1061662228u, 1065733811u, 1065733811u, 0, ATANH_TOLERANCE, 0}, +{198, 1061830001u, 1065952429u, 1065952429u, 0, ATANH_TOLERANCE, 0}, +{199, 1061997773u, 1066180436u, 1066180436u, 0, ATANH_TOLERANCE, 0}, +{200, 1062165545u, 1066418813u, 1066418813u, 0, ATANH_TOLERANCE, 0}, +{201, 1062333317u, 1066668696u, 1066668696u, 0, ATANH_TOLERANCE, 0}, +{202, 1062501089u, 1066931418u, 1066931418u, 0, ATANH_TOLERANCE, 0}, +{203, 1062668861u, 1067208553u, 1067208553u, 0, ATANH_TOLERANCE, 0}, +{204, 1062836634u, 1067501982u, 1067501982u, 0, ATANH_TOLERANCE, 0}, +{205, 1063004406u, 1067813970u, 1067813970u, 0, ATANH_TOLERANCE, 0}, +{206, 1063172178u, 1068147291u, 1068147291u, 0, ATANH_TOLERANCE, 0}, +{207, 1063339950u, 1068505383u, 1068505383u, 0, ATANH_TOLERANCE, 0}, +{208, 1063507722u, 1068892586u, 1068892586u, 0, ATANH_TOLERANCE, 0}, +{209, 1063675494u, 1069314479u, 1069314479u, 0, ATANH_TOLERANCE, 0}, +{210, 1063843267u, 1069778413u, 1069778413u, 0, ATANH_TOLERANCE, 0}, +{211, 1064011039u, 1070294333u, 1070294333u, 0, ATANH_TOLERANCE, 0}, +{212, 1064178811u, 1070876192u, 1070876192u, 0, ATANH_TOLERANCE, 0}, +{213, 1064346583u, 1071544422u, 1071544422u, 0, ATANH_TOLERANCE, 0}, +{214, 1064514355u, 1072330698u, 1072330698u, 0, ATANH_TOLERANCE, 0}, +{215, 1064682127u, 1073288083u, 1073288083u, 0, ATANH_TOLERANCE, 0}, +{216, 1064849900u, 1074128942u, 1074128942u, 0, ATANH_TOLERANCE, 0}, +{217, 1065017672u, 1074989883u, 1074989883u, 0, ATANH_TOLERANCE, 0}, +{218, 1065185444u, 1076454083u, 1076454083u, 0, ATANH_TOLERANCE, 0}, +{219, 1065353216u, 1115684864u, 2139095040u, EDOM, ATANH_TOLERANCE, 0}, +{220, 1065437102u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{221, 1065520988u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{222, 1065604874u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{223, 1065688760u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{224, 1065772646u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{225, 1065856532u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{226, 1065940419u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{227, 1066024305u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{228, 1066108191u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{229, 1066192077u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{230, 1066275963u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{231, 1066359849u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{232, 1066443735u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{233, 1066527621u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{234, 1066611507u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{235, 1066695393u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{236, 1066779279u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{237, 1066863165u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{238, 1066947052u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{239, 3234402267u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{240, 3231108068u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{241, 3226013659u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{242, 3217625051u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{243, 1070141403u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{244, 1078530011u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{245, 1083624420u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{246, 3253731328u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{247, 3252840038u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{248, 3251948749u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{249, 3251057459u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{250, 3250166170u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{251, 3249274880u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{252, 3248383590u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{253, 3247492301u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{254, 3246601011u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{255, 3245028147u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{256, 3243245568u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{257, 3241462989u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{258, 3239680410u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{259, 3237792973u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{260, 3234227814u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{261, 3230662656u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{262, 3224580915u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{263, 3213675725u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{264, 1058642330u, 1060205080u, 1060205080u, 0, ATANH_TOLERANCE, 0}, +{265, 1075000115u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{266, 1082130432u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{267, 1085695590u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{268, 1089260749u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{269, 1091672474u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{270, 1093455053u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{271, 1095237632u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{272, 1097020211u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{273, 1098802790u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{274, 1099746509u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{275, 1100637798u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{276, 1101529088u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{277, 1102420378u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{278, 1103311667u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{279, 1104202957u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{280, 1105094246u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0}, +{281, 1105985536u, 1115684864u, 2143289344u, EDOM, ATANH_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ATANHF_H multiple inclusion protection + +// EOF atanhf.h diff --git a/packages/language/c/libm/current/tests/vectors/cbrtf.c b/packages/language/c/libm/current/tests/vectors/cbrtf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/cbrtf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// cbrtf.c +// +// Test of cbrtf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/cbrtf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(cbrtf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &cbrtf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &cbrtf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("cbrtf() is stable"); + } // if + else + { + CYG_TEST_FAIL("cbrtf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library cbrtf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "cbrtf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF cbrtf.c diff --git a/packages/language/c/libm/current/tests/vectors/cbrtf.h b/packages/language/c/libm/current/tests/vectors/cbrtf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/cbrtf.h @@ -0,0 +1,363 @@ +#ifndef CYGONCE_LIBM_CBRTF_H +#define CYGONCE_LIBM_CBRTF_H +//=========================================================================== +// +// cbrtf.h +// +// Test vectors for testing of cbrtf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/cbrtf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define CBRTF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t cbrtf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 2147497108u, 3213362482u, 0, CBRTF_TOLERANCE, 0}, +{1, 3214430700u, 2147497108u, 3213337651u, 0, CBRTF_TOLERANCE, 0}, +{2, 3214346813u, 2147497108u, 3213312681u, 0, CBRTF_TOLERANCE, 0}, +{3, 3214262927u, 2147497108u, 3213287569u, 0, CBRTF_TOLERANCE, 0}, +{4, 3214179041u, 2147497108u, 3213262314u, 0, CBRTF_TOLERANCE, 0}, +{5, 3214095155u, 2147497108u, 3213236913u, 0, CBRTF_TOLERANCE, 0}, +{6, 3214011269u, 2147497108u, 3213211364u, 0, CBRTF_TOLERANCE, 0}, +{7, 3213927383u, 2147497108u, 3213185666u, 0, CBRTF_TOLERANCE, 0}, +{8, 3213843497u, 2147497108u, 3213159816u, 0, CBRTF_TOLERANCE, 0}, +{9, 3213759611u, 2147497108u, 3213133811u, 0, CBRTF_TOLERANCE, 0}, +{10, 3213675725u, 2147497108u, 3213107649u, 0, CBRTF_TOLERANCE, 0}, +{11, 3213591839u, 2147497108u, 3213081329u, 0, CBRTF_TOLERANCE, 0}, +{12, 3213507953u, 2147497108u, 3213054847u, 0, CBRTF_TOLERANCE, 0}, +{13, 3213424067u, 2147497108u, 3213028201u, 0, CBRTF_TOLERANCE, 0}, +{14, 3213340180u, 2147497108u, 3213001388u, 0, CBRTF_TOLERANCE, 0}, +{15, 3213256294u, 2147497108u, 3212974407u, 0, CBRTF_TOLERANCE, 0}, +{16, 3213172408u, 2147497108u, 3212947253u, 0, CBRTF_TOLERANCE, 0}, +{17, 3213088522u, 2147497108u, 3212919925u, 0, CBRTF_TOLERANCE, 0}, +{18, 3213004636u, 2147497108u, 3212892419u, 0, CBRTF_TOLERANCE, 0}, +{19, 3212920750u, 2147497108u, 3212864733u, 0, CBRTF_TOLERANCE, 0}, +{20, 3212836864u, 2147497108u, 3212836864u, 0, CBRTF_TOLERANCE, 0}, +{21, 3212669092u, 2147497108u, 3212780752u, 0, CBRTF_TOLERANCE, 0}, +{22, 3212501320u, 2147497108u, 3212724262u, 0, CBRTF_TOLERANCE, 0}, +{23, 3212333548u, 2147497108u, 3212667386u, 0, CBRTF_TOLERANCE, 0}, +{24, 3212165775u, 2147497108u, 3212610117u, 0, CBRTF_TOLERANCE, 0}, +{25, 3211998003u, 2147497108u, 3212552449u, 0, CBRTF_TOLERANCE, 0}, +{26, 3211830231u, 2147497108u, 3212494376u, 0, CBRTF_TOLERANCE, 0}, +{27, 3211662459u, 2147497108u, 3212435889u, 0, CBRTF_TOLERANCE, 0}, +{28, 3211494687u, 2147497108u, 3212376981u, 0, CBRTF_TOLERANCE, 0}, +{29, 3211326915u, 2147497108u, 3212317645u, 0, CBRTF_TOLERANCE, 0}, +{30, 3211159142u, 2147497108u, 3212257872u, 0, CBRTF_TOLERANCE, 0}, +{31, 3210991370u, 2147497108u, 3212197655u, 0, CBRTF_TOLERANCE, 0}, +{32, 3210823598u, 2147497108u, 3212136985u, 0, CBRTF_TOLERANCE, 0}, +{33, 3210655826u, 2147497108u, 3212075854u, 0, CBRTF_TOLERANCE, 0}, +{34, 3210488054u, 2147497108u, 3212014253u, 0, CBRTF_TOLERANCE, 0}, +{35, 3210320282u, 2147497108u, 3211952172u, 0, CBRTF_TOLERANCE, 0}, +{36, 3210152509u, 2147497108u, 3211889602u, 0, CBRTF_TOLERANCE, 0}, +{37, 3209984737u, 2147497108u, 3211826534u, 0, CBRTF_TOLERANCE, 0}, +{38, 3209816965u, 2147497108u, 3211762957u, 0, CBRTF_TOLERANCE, 0}, +{39, 3209649193u, 2147497108u, 3211698861u, 0, CBRTF_TOLERANCE, 0}, +{40, 3209481421u, 2147497108u, 3211634236u, 0, CBRTF_TOLERANCE, 0}, +{41, 3209313649u, 2147497108u, 3211569069u, 0, CBRTF_TOLERANCE, 0}, +{42, 3209145876u, 2147497108u, 3211503351u, 0, CBRTF_TOLERANCE, 0}, +{43, 3208978104u, 2147497108u, 3211437068u, 0, CBRTF_TOLERANCE, 0}, +{44, 3208810332u, 2147497108u, 3211370209u, 0, CBRTF_TOLERANCE, 0}, +{45, 3208642560u, 2147497108u, 3211302760u, 0, CBRTF_TOLERANCE, 0}, +{46, 3208474788u, 2147497108u, 3211234710u, 0, CBRTF_TOLERANCE, 0}, +{47, 3208307016u, 2147497108u, 3211166043u, 0, CBRTF_TOLERANCE, 0}, +{48, 3208139244u, 2147497108u, 3211096747u, 0, CBRTF_TOLERANCE, 0}, +{49, 3207971471u, 2147497108u, 3211026806u, 0, CBRTF_TOLERANCE, 0}, +{50, 3207803699u, 2147497108u, 3210956205u, 0, CBRTF_TOLERANCE, 0}, +{51, 3207635927u, 2147497108u, 3210884929u, 0, CBRTF_TOLERANCE, 0}, +{52, 3207468155u, 2147497108u, 3210812960u, 0, CBRTF_TOLERANCE, 0}, +{53, 3207300383u, 2147497108u, 3210740283u, 0, CBRTF_TOLERANCE, 0}, +{54, 3207132611u, 2147497108u, 3210666878u, 0, CBRTF_TOLERANCE, 0}, +{55, 3206964838u, 2147497108u, 3210592729u, 0, CBRTF_TOLERANCE, 0}, +{56, 3206797066u, 2147497108u, 3210517814u, 0, CBRTF_TOLERANCE, 0}, +{57, 3206629294u, 2147497108u, 3210442116u, 0, CBRTF_TOLERANCE, 0}, +{58, 3206461522u, 2147497108u, 3210365612u, 0, CBRTF_TOLERANCE, 0}, +{59, 3206293750u, 2147497108u, 3210288281u, 0, CBRTF_TOLERANCE, 0}, +{60, 3206125978u, 2147497108u, 3210210100u, 0, CBRTF_TOLERANCE, 0}, +{61, 3205958205u, 2147497108u, 3210131046u, 0, CBRTF_TOLERANCE, 0}, +{62, 3205790433u, 2147497108u, 3210051093u, 0, CBRTF_TOLERANCE, 0}, +{63, 3205622661u, 2147497108u, 3209970215u, 0, CBRTF_TOLERANCE, 0}, +{64, 3205454889u, 2147497108u, 3209888387u, 0, CBRTF_TOLERANCE, 0}, +{65, 3205287117u, 2147497108u, 3209805578u, 0, CBRTF_TOLERANCE, 0}, +{66, 3205119345u, 2147497108u, 3209721759u, 0, CBRTF_TOLERANCE, 0}, +{67, 3204951572u, 2147497108u, 3209636899u, 0, CBRTF_TOLERANCE, 0}, +{68, 3204783800u, 2147497108u, 3209550965u, 0, CBRTF_TOLERANCE, 0}, +{69, 3204616028u, 2147497108u, 3209463922u, 0, CBRTF_TOLERANCE, 0}, +{70, 3204448256u, 2147497108u, 3209375733u, 0, CBRTF_TOLERANCE, 0}, +{71, 3204112712u, 2147497108u, 3209286361u, 0, CBRTF_TOLERANCE, 0}, +{72, 3203777167u, 2147497108u, 3209195764u, 0, CBRTF_TOLERANCE, 0}, +{73, 3203441623u, 2147497108u, 3209103900u, 0, CBRTF_TOLERANCE, 0}, +{74, 3203106079u, 2147497108u, 3209010724u, 0, CBRTF_TOLERANCE, 0}, +{75, 3202770534u, 2147497108u, 3208916187u, 0, CBRTF_TOLERANCE, 0}, +{76, 3202434990u, 2147497108u, 3208820239u, 0, CBRTF_TOLERANCE, 0}, +{77, 3202099446u, 2147497108u, 3208722826u, 0, CBRTF_TOLERANCE, 0}, +{78, 3201763901u, 2147497108u, 3208623891u, 0, CBRTF_TOLERANCE, 0}, +{79, 3201428357u, 2147497108u, 3208523373u, 0, CBRTF_TOLERANCE, 0}, +{80, 3201092813u, 2147497108u, 3208421206u, 0, CBRTF_TOLERANCE, 0}, +{81, 3200757268u, 2147497108u, 3208317323u, 0, CBRTF_TOLERANCE, 0}, +{82, 3200421724u, 2147497108u, 3208211648u, 0, CBRTF_TOLERANCE, 0}, +{83, 3200086180u, 2147497108u, 3208104103u, 0, CBRTF_TOLERANCE, 0}, +{84, 3199750636u, 2147497108u, 3207994601u, 0, CBRTF_TOLERANCE, 0}, +{85, 3199415091u, 2147497108u, 3207883053u, 0, CBRTF_TOLERANCE, 0}, +{86, 3199079547u, 2147497108u, 3207769360u, 0, CBRTF_TOLERANCE, 0}, +{87, 3198744003u, 2147497108u, 3207653414u, 0, CBRTF_TOLERANCE, 0}, +{88, 3198408458u, 2147497108u, 3207535102u, 0, CBRTF_TOLERANCE, 0}, +{89, 3198072914u, 2147497108u, 3207414299u, 0, CBRTF_TOLERANCE, 0}, +{90, 3197737370u, 2147497108u, 3207290869u, 0, CBRTF_TOLERANCE, 0}, +{91, 3197401825u, 2147497108u, 3207164665u, 0, CBRTF_TOLERANCE, 0}, +{92, 3197066281u, 2147497108u, 3207035525u, 0, CBRTF_TOLERANCE, 0}, +{93, 3196730737u, 2147497108u, 3206903273u, 0, CBRTF_TOLERANCE, 0}, +{94, 3196395192u, 2147497108u, 3206767713u, 0, CBRTF_TOLERANCE, 0}, +{95, 3196059648u, 2147497108u, 3206628632u, 0, CBRTF_TOLERANCE, 0}, +{96, 3195388559u, 2147497108u, 3206485790u, 0, CBRTF_TOLERANCE, 0}, +{97, 3194717471u, 2147497108u, 3206338924u, 0, CBRTF_TOLERANCE, 0}, +{98, 3194046382u, 2147497108u, 3206187736u, 0, CBRTF_TOLERANCE, 0}, +{99, 3193375293u, 2147497108u, 3206031894u, 0, CBRTF_TOLERANCE, 0}, +{100, 3192704205u, 2147497108u, 3205871023u, 0, CBRTF_TOLERANCE, 0}, +{101, 3192033116u, 2147497108u, 3205704697u, 0, CBRTF_TOLERANCE, 0}, +{102, 3191362028u, 2147497108u, 3205532427u, 0, CBRTF_TOLERANCE, 0}, +{103, 3190690939u, 2147497108u, 3205353652u, 0, CBRTF_TOLERANCE, 0}, +{104, 3190019850u, 2147497108u, 3205167722u, 0, CBRTF_TOLERANCE, 0}, +{105, 3189348762u, 2147497108u, 3204973874u, 0, CBRTF_TOLERANCE, 0}, +{106, 3188677673u, 2147497108u, 3204771208u, 0, CBRTF_TOLERANCE, 0}, +{107, 3188006584u, 2147497108u, 3204558645u, 0, CBRTF_TOLERANCE, 0}, +{108, 3186999951u, 2147497108u, 3204221509u, 0, CBRTF_TOLERANCE, 0}, +{109, 3185657774u, 2147497108u, 3203748377u, 0, CBRTF_TOLERANCE, 0}, +{110, 3184315597u, 2147497108u, 3203245628u, 0, CBRTF_TOLERANCE, 0}, +{111, 3182973420u, 2147497108u, 3202708139u, 0, CBRTF_TOLERANCE, 0}, +{112, 3181631242u, 2147497108u, 3202129206u, 0, CBRTF_TOLERANCE, 0}, +{113, 3180289065u, 2147497108u, 3201499779u, 0, CBRTF_TOLERANCE, 0}, +{114, 3178611343u, 2147497108u, 3200807156u, 0, CBRTF_TOLERANCE, 0}, +{115, 3175926989u, 2147497108u, 3200032598u, 0, CBRTF_TOLERANCE, 0}, +{116, 3173242634u, 2147497108u, 3199146494u, 0, CBRTF_TOLERANCE, 0}, +{117, 3170222735u, 2147497108u, 3198097182u, 0, CBRTF_TOLERANCE, 0}, +{118, 3164854026u, 2147497108u, 3196779114u, 0, CBRTF_TOLERANCE, 0}, +{119, 3156465418u, 2147497108u, 3193740598u, 0, CBRTF_TOLERANCE, 0}, +{120, 646742016u, 2147497108u, 925260670u, 0, CBRTF_TOLERANCE, 0}, +{121, 1008981770u, 2147497108u, 1046256950u, 0, CBRTF_TOLERANCE, 0}, +{122, 1017370378u, 2147497108u, 1049295466u, 0, CBRTF_TOLERANCE, 0}, +{123, 1022739087u, 2147497108u, 1050613534u, 0, CBRTF_TOLERANCE, 0}, +{124, 1025758986u, 2147497108u, 1051662846u, 0, CBRTF_TOLERANCE, 0}, +{125, 1028443341u, 2147497108u, 1052548950u, 0, CBRTF_TOLERANCE, 0}, +{126, 1031127695u, 2147497108u, 1053323508u, 0, CBRTF_TOLERANCE, 0}, +{127, 1032805417u, 2147497108u, 1054016131u, 0, CBRTF_TOLERANCE, 0}, +{128, 1034147594u, 2147497108u, 1054645558u, 0, CBRTF_TOLERANCE, 0}, +{129, 1035489772u, 2147497108u, 1055224491u, 0, CBRTF_TOLERANCE, 0}, +{130, 1036831949u, 2147497108u, 1055761980u, 0, CBRTF_TOLERANCE, 0}, +{131, 1038174126u, 2147497108u, 1056264729u, 0, CBRTF_TOLERANCE, 0}, +{132, 1039516303u, 2147497108u, 1056737861u, 0, CBRTF_TOLERANCE, 0}, +{133, 1040522936u, 2147497108u, 1057074997u, 0, CBRTF_TOLERANCE, 0}, +{134, 1041194025u, 2147497108u, 1057287560u, 0, CBRTF_TOLERANCE, 0}, +{135, 1041865114u, 2147497108u, 1057490226u, 0, CBRTF_TOLERANCE, 0}, +{136, 1042536202u, 2147497108u, 1057684074u, 0, CBRTF_TOLERANCE, 0}, +{137, 1043207291u, 2147497108u, 1057870004u, 0, CBRTF_TOLERANCE, 0}, +{138, 1043878380u, 2147497108u, 1058048779u, 0, CBRTF_TOLERANCE, 0}, +{139, 1044549468u, 2147497108u, 1058221049u, 0, CBRTF_TOLERANCE, 0}, +{140, 1045220557u, 2147497108u, 1058387375u, 0, CBRTF_TOLERANCE, 0}, +{141, 1045891645u, 2147497108u, 1058548246u, 0, CBRTF_TOLERANCE, 0}, +{142, 1046562734u, 2147497108u, 1058704088u, 0, CBRTF_TOLERANCE, 0}, +{143, 1047233823u, 2147497108u, 1058855276u, 0, CBRTF_TOLERANCE, 0}, +{144, 1047904911u, 2147497108u, 1059002142u, 0, CBRTF_TOLERANCE, 0}, +{145, 1048576000u, 2147497108u, 1059144984u, 0, CBRTF_TOLERANCE, 0}, +{146, 1048911544u, 2147497108u, 1059284065u, 0, CBRTF_TOLERANCE, 0}, +{147, 1049247089u, 2147497108u, 1059419625u, 0, CBRTF_TOLERANCE, 0}, +{148, 1049582633u, 2147497108u, 1059551877u, 0, CBRTF_TOLERANCE, 0}, +{149, 1049918177u, 2147497108u, 1059681017u, 0, CBRTF_TOLERANCE, 0}, +{150, 1050253722u, 2147497108u, 1059807221u, 0, CBRTF_TOLERANCE, 0}, +{151, 1050589266u, 2147497108u, 1059930651u, 0, CBRTF_TOLERANCE, 0}, +{152, 1050924810u, 2147497108u, 1060051454u, 0, CBRTF_TOLERANCE, 0}, +{153, 1051260355u, 2147497108u, 1060169766u, 0, CBRTF_TOLERANCE, 0}, +{154, 1051595899u, 2147497108u, 1060285712u, 0, CBRTF_TOLERANCE, 0}, +{155, 1051931443u, 2147497108u, 1060399405u, 0, CBRTF_TOLERANCE, 0}, +{156, 1052266988u, 2147497108u, 1060510953u, 0, CBRTF_TOLERANCE, 0}, +{157, 1052602532u, 2147497108u, 1060620455u, 0, CBRTF_TOLERANCE, 0}, +{158, 1052938076u, 2147497108u, 1060728000u, 0, CBRTF_TOLERANCE, 0}, +{159, 1053273620u, 2147497108u, 1060833675u, 0, CBRTF_TOLERANCE, 0}, +{160, 1053609165u, 2147497108u, 1060937558u, 0, CBRTF_TOLERANCE, 0}, +{161, 1053944709u, 2147497108u, 1061039725u, 0, CBRTF_TOLERANCE, 0}, +{162, 1054280253u, 2147497108u, 1061140243u, 0, CBRTF_TOLERANCE, 0}, +{163, 1054615798u, 2147497108u, 1061239178u, 0, CBRTF_TOLERANCE, 0}, +{164, 1054951342u, 2147497108u, 1061336591u, 0, CBRTF_TOLERANCE, 0}, +{165, 1055286886u, 2147497108u, 1061432539u, 0, CBRTF_TOLERANCE, 0}, +{166, 1055622431u, 2147497108u, 1061527076u, 0, CBRTF_TOLERANCE, 0}, +{167, 1055957975u, 2147497108u, 1061620252u, 0, CBRTF_TOLERANCE, 0}, +{168, 1056293519u, 2147497108u, 1061712116u, 0, CBRTF_TOLERANCE, 0}, +{169, 1056629064u, 2147497108u, 1061802713u, 0, CBRTF_TOLERANCE, 0}, +{170, 1056964608u, 2147497108u, 1061892085u, 0, CBRTF_TOLERANCE, 0}, +{171, 1057132380u, 2147497108u, 1061980274u, 0, CBRTF_TOLERANCE, 0}, +{172, 1057300152u, 2147497108u, 1062067317u, 0, CBRTF_TOLERANCE, 0}, +{173, 1057467924u, 2147497108u, 1062153251u, 0, CBRTF_TOLERANCE, 0}, +{174, 1057635697u, 2147497108u, 1062238111u, 0, CBRTF_TOLERANCE, 0}, +{175, 1057803469u, 2147497108u, 1062321930u, 0, CBRTF_TOLERANCE, 0}, +{176, 1057971241u, 2147497108u, 1062404739u, 0, CBRTF_TOLERANCE, 0}, +{177, 1058139013u, 2147497108u, 1062486567u, 0, CBRTF_TOLERANCE, 0}, +{178, 1058306785u, 2147497108u, 1062567445u, 0, CBRTF_TOLERANCE, 0}, +{179, 1058474557u, 2147497108u, 1062647398u, 0, CBRTF_TOLERANCE, 0}, +{180, 1058642330u, 2147497108u, 1062726452u, 0, CBRTF_TOLERANCE, 0}, +{181, 1058810102u, 2147497108u, 1062804633u, 0, CBRTF_TOLERANCE, 0}, +{182, 1058977874u, 2147497108u, 1062881964u, 0, CBRTF_TOLERANCE, 0}, +{183, 1059145646u, 2147497108u, 1062958468u, 0, CBRTF_TOLERANCE, 0}, +{184, 1059313418u, 2147497108u, 1063034166u, 0, CBRTF_TOLERANCE, 0}, +{185, 1059481190u, 2147497108u, 1063109081u, 0, CBRTF_TOLERANCE, 0}, +{186, 1059648963u, 2147497108u, 1063183230u, 0, CBRTF_TOLERANCE, 0}, +{187, 1059816735u, 2147497108u, 1063256635u, 0, CBRTF_TOLERANCE, 0}, +{188, 1059984507u, 2147497108u, 1063329312u, 0, CBRTF_TOLERANCE, 0}, +{189, 1060152279u, 2147497108u, 1063401281u, 0, CBRTF_TOLERANCE, 0}, +{190, 1060320051u, 2147497108u, 1063472557u, 0, CBRTF_TOLERANCE, 0}, +{191, 1060487823u, 2147497108u, 1063543158u, 0, CBRTF_TOLERANCE, 0}, +{192, 1060655596u, 2147497108u, 1063613099u, 0, CBRTF_TOLERANCE, 0}, +{193, 1060823368u, 2147497108u, 1063682395u, 0, CBRTF_TOLERANCE, 0}, +{194, 1060991140u, 2147497108u, 1063751062u, 0, CBRTF_TOLERANCE, 0}, +{195, 1061158912u, 2147497108u, 1063819112u, 0, CBRTF_TOLERANCE, 0}, +{196, 1061326684u, 2147497108u, 1063886561u, 0, CBRTF_TOLERANCE, 0}, +{197, 1061494456u, 2147497108u, 1063953420u, 0, CBRTF_TOLERANCE, 0}, +{198, 1061662228u, 2147497108u, 1064019703u, 0, CBRTF_TOLERANCE, 0}, +{199, 1061830001u, 2147497108u, 1064085421u, 0, CBRTF_TOLERANCE, 0}, +{200, 1061997773u, 2147497108u, 1064150588u, 0, CBRTF_TOLERANCE, 0}, +{201, 1062165545u, 2147497108u, 1064215213u, 0, CBRTF_TOLERANCE, 0}, +{202, 1062333317u, 2147497108u, 1064279309u, 0, CBRTF_TOLERANCE, 0}, +{203, 1062501089u, 2147497108u, 1064342886u, 0, CBRTF_TOLERANCE, 0}, +{204, 1062668861u, 2147497108u, 1064405954u, 0, CBRTF_TOLERANCE, 0}, +{205, 1062836634u, 2147497108u, 1064468524u, 0, CBRTF_TOLERANCE, 0}, +{206, 1063004406u, 2147497108u, 1064530605u, 0, CBRTF_TOLERANCE, 0}, +{207, 1063172178u, 2147497108u, 1064592206u, 0, CBRTF_TOLERANCE, 0}, +{208, 1063339950u, 2147497108u, 1064653337u, 0, CBRTF_TOLERANCE, 0}, +{209, 1063507722u, 2147497108u, 1064714007u, 0, CBRTF_TOLERANCE, 0}, +{210, 1063675494u, 2147497108u, 1064774224u, 0, CBRTF_TOLERANCE, 0}, +{211, 1063843267u, 2147497108u, 1064833997u, 0, CBRTF_TOLERANCE, 0}, +{212, 1064011039u, 2147497108u, 1064893333u, 0, CBRTF_TOLERANCE, 0}, +{213, 1064178811u, 2147497108u, 1064952241u, 0, CBRTF_TOLERANCE, 0}, +{214, 1064346583u, 2147497108u, 1065010728u, 0, CBRTF_TOLERANCE, 0}, +{215, 1064514355u, 2147497108u, 1065068801u, 0, CBRTF_TOLERANCE, 0}, +{216, 1064682127u, 2147497108u, 1065126469u, 0, CBRTF_TOLERANCE, 0}, +{217, 1064849900u, 2147497108u, 1065183738u, 0, CBRTF_TOLERANCE, 0}, +{218, 1065017672u, 2147497108u, 1065240614u, 0, CBRTF_TOLERANCE, 0}, +{219, 1065185444u, 2147497108u, 1065297104u, 0, CBRTF_TOLERANCE, 0}, +{220, 1065353216u, 2147497108u, 1065353216u, 0, CBRTF_TOLERANCE, 0}, +{221, 1065437102u, 2147497108u, 1065381085u, 0, CBRTF_TOLERANCE, 0}, +{222, 1065520988u, 2147497108u, 1065408771u, 0, CBRTF_TOLERANCE, 0}, +{223, 1065604874u, 2147497108u, 1065436277u, 0, CBRTF_TOLERANCE, 0}, +{224, 1065688760u, 2147497108u, 1065463605u, 0, CBRTF_TOLERANCE, 0}, +{225, 1065772646u, 2147497108u, 1065490759u, 0, CBRTF_TOLERANCE, 0}, +{226, 1065856532u, 2147497108u, 1065517740u, 0, CBRTF_TOLERANCE, 0}, +{227, 1065940419u, 2147497108u, 1065544553u, 0, CBRTF_TOLERANCE, 0}, +{228, 1066024305u, 2147497108u, 1065571199u, 0, CBRTF_TOLERANCE, 0}, +{229, 1066108191u, 2147497108u, 1065597681u, 0, CBRTF_TOLERANCE, 0}, +{230, 1066192077u, 2147497108u, 1065624001u, 0, CBRTF_TOLERANCE, 0}, +{231, 1066275963u, 2147497108u, 1065650163u, 0, CBRTF_TOLERANCE, 0}, +{232, 1066359849u, 2147497108u, 1065676168u, 0, CBRTF_TOLERANCE, 0}, +{233, 1066443735u, 2147497108u, 1065702018u, 0, CBRTF_TOLERANCE, 0}, +{234, 1066527621u, 2147497108u, 1065727716u, 0, CBRTF_TOLERANCE, 0}, +{235, 1066611507u, 2147497108u, 1065753265u, 0, CBRTF_TOLERANCE, 0}, +{236, 1066695393u, 2147497108u, 1065778666u, 0, CBRTF_TOLERANCE, 0}, +{237, 1066779279u, 2147497108u, 1065803921u, 0, CBRTF_TOLERANCE, 0}, +{238, 1066863165u, 2147497108u, 1065829033u, 0, CBRTF_TOLERANCE, 0}, +{239, 1066947052u, 2147497108u, 1065854003u, 0, CBRTF_TOLERANCE, 0}, +{240, 3234402267u, 2147497108u, 3219927504u, 0, CBRTF_TOLERANCE, 0}, +{241, 3231108068u, 2147497108u, 3218512086u, 0, CBRTF_TOLERANCE, 0}, +{242, 3226013659u, 2147497108u, 3216734143u, 0, CBRTF_TOLERANCE, 0}, +{243, 3217625051u, 2147497108u, 3214199571u, 0, CBRTF_TOLERANCE, 0}, +{244, 0u, 2147497108u, 0u, 0, CBRTF_TOLERANCE, 0}, +{245, 1070141403u, 2147497108u, 1066715923u, 0, CBRTF_TOLERANCE, 0}, +{246, 1078530011u, 2147497108u, 1069250495u, 0, CBRTF_TOLERANCE, 0}, +{247, 1083624420u, 2147497108u, 1071028438u, 0, CBRTF_TOLERANCE, 0}, +{248, 3253731328u, 2147497108u, 3225869542u, 0, CBRTF_TOLERANCE, 0}, +{249, 3252840038u, 2147497108u, 3225618567u, 0, CBRTF_TOLERANCE, 0}, +{250, 3251948749u, 2147497108u, 3225357329u, 0, CBRTF_TOLERANCE, 0}, +{251, 3251057459u, 2147497108u, 3225084709u, 0, CBRTF_TOLERANCE, 0}, +{252, 3250166170u, 2147497108u, 3224799381u, 0, CBRTF_TOLERANCE, 0}, +{253, 3249274880u, 2147497108u, 3224499751u, 0, CBRTF_TOLERANCE, 0}, +{254, 3248383590u, 2147497108u, 3224183879u, 0, CBRTF_TOLERANCE, 0}, +{255, 3247492301u, 2147497108u, 3223849368u, 0, CBRTF_TOLERANCE, 0}, +{256, 3246601011u, 2147497108u, 3223493199u, 0, CBRTF_TOLERANCE, 0}, +{257, 3245028147u, 2147497108u, 3223111482u, 0, CBRTF_TOLERANCE, 0}, +{258, 3243245568u, 2147497108u, 3222699076u, 0, CBRTF_TOLERANCE, 0}, +{259, 3241462989u, 2147497108u, 3222248954u, 0, CBRTF_TOLERANCE, 0}, +{260, 3239680410u, 2147497108u, 3221751090u, 0, CBRTF_TOLERANCE, 0}, +{261, 3237792973u, 2147497108u, 3221155274u, 0, CBRTF_TOLERANCE, 0}, +{262, 3234227814u, 2147497108u, 3219858888u, 0, CBRTF_TOLERANCE, 0}, +{263, 3230662656u, 2147497108u, 3218297543u, 0, CBRTF_TOLERANCE, 0}, +{264, 3224580915u, 2147497108u, 3216271661u, 0, CBRTF_TOLERANCE, 0}, +{265, 3213675725u, 2147497108u, 3213107649u, 0, CBRTF_TOLERANCE, 0}, +{266, 1058642330u, 2147497108u, 1062726452u, 0, CBRTF_TOLERANCE, 0}, +{267, 1075000115u, 2147497108u, 1068037622u, 0, CBRTF_TOLERANCE, 0}, +{268, 1082130432u, 2147497108u, 1070280693u, 0, CBRTF_TOLERANCE, 0}, +{269, 1085695590u, 2147497108u, 1071949313u, 0, CBRTF_TOLERANCE, 0}, +{270, 1089260749u, 2147497108u, 1073311448u, 0, CBRTF_TOLERANCE, 0}, +{271, 1091672474u, 2147497108u, 1074109914u, 0, CBRTF_TOLERANCE, 0}, +{272, 1093455053u, 2147497108u, 1074624385u, 0, CBRTF_TOLERANCE, 0}, +{273, 1095237632u, 2147497108u, 1075087333u, 0, CBRTF_TOLERANCE, 0}, +{274, 1097020211u, 2147497108u, 1075509995u, 0, CBRTF_TOLERANCE, 0}, +{275, 1098802790u, 2147497108u, 1075900135u, 0, CBRTF_TOLERANCE, 0}, +{276, 1099746509u, 2147497108u, 1076263368u, 0, CBRTF_TOLERANCE, 0}, +{277, 1100637798u, 2147497108u, 1076603902u, 0, CBRTF_TOLERANCE, 0}, +{278, 1101529088u, 2147497108u, 1076924983u, 0, CBRTF_TOLERANCE, 0}, +{279, 1102420378u, 2147497108u, 1077229170u, 0, CBRTF_TOLERANCE, 0}, +{280, 1103311667u, 2147497108u, 1077518526u, 0, CBRTF_TOLERANCE, 0}, +{281, 1104202957u, 2147497108u, 1077794735u, 0, CBRTF_TOLERANCE, 0}, +{282, 1105094246u, 2147497108u, 1078059196u, 0, CBRTF_TOLERANCE, 0}, +{283, 1105985536u, 2147497108u, 1078313084u, 0, CBRTF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_CBRTF_H multiple inclusion protection + +// EOF cbrtf.h diff --git a/packages/language/c/libm/current/tests/vectors/ceilf.c b/packages/language/c/libm/current/tests/vectors/ceilf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ceilf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// ceilf.c +// +// Test of ceilf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/ceilf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(ceilf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &ceilf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &ceilf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("ceilf() is stable"); + } // if + else + { + CYG_TEST_FAIL("ceilf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library ceilf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "ceilf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF ceilf.c diff --git a/packages/language/c/libm/current/tests/vectors/ceilf.h b/packages/language/c/libm/current/tests/vectors/ceilf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ceilf.h @@ -0,0 +1,1048 @@ +#ifndef CYGONCE_LIBM_CEILF_H +#define CYGONCE_LIBM_CEILF_H +//=========================================================================== +// +// ceilf.h +// +// Test vectors for testing of ceilf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/ceilf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define CEILF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t ceilf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{120, 646742016u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 3233808384u, 0, CEILF_TOLERANCE, 0}, +{241, 3231108068u, 0u, 3229614080u, 0, CEILF_TOLERANCE, 0}, +{242, 3226013659u, 0u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{243, 3217625051u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{244, 0u, 0u, 0u, 0, CEILF_TOLERANCE, 0}, +{245, 1070141403u, 0u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{246, 1078530011u, 0u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{247, 1083624420u, 0u, 1084227584u, 0, CEILF_TOLERANCE, 0}, +{248, 3253731328u, 0u, 3253731328u, 0, CEILF_TOLERANCE, 0}, +{249, 3252840038u, 0u, 3252682752u, 0, CEILF_TOLERANCE, 0}, +{250, 3251948749u, 0u, 3251634176u, 0, CEILF_TOLERANCE, 0}, +{251, 3251057459u, 0u, 3250585600u, 0, CEILF_TOLERANCE, 0}, +{252, 3250166170u, 0u, 3250061312u, 0, CEILF_TOLERANCE, 0}, +{253, 3249274880u, 0u, 3249012736u, 0, CEILF_TOLERANCE, 0}, +{254, 3248383590u, 0u, 3247964160u, 0, CEILF_TOLERANCE, 0}, +{255, 3247492301u, 0u, 3247439872u, 0, CEILF_TOLERANCE, 0}, +{256, 3246601011u, 0u, 3246391296u, 0, CEILF_TOLERANCE, 0}, +{257, 3245028147u, 0u, 3244294144u, 0, CEILF_TOLERANCE, 0}, +{258, 3243245568u, 0u, 3243245568u, 0, CEILF_TOLERANCE, 0}, +{259, 3241462989u, 0u, 3241148416u, 0, CEILF_TOLERANCE, 0}, +{260, 3239680410u, 0u, 3239051264u, 0, CEILF_TOLERANCE, 0}, +{261, 3237792973u, 0u, 3235905536u, 0, CEILF_TOLERANCE, 0}, +{262, 3234227814u, 0u, 3233808384u, 0, CEILF_TOLERANCE, 0}, +{263, 3230662656u, 0u, 3229614080u, 0, CEILF_TOLERANCE, 0}, +{264, 3224580915u, 0u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{265, 3213675725u, 0u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{266, 1058642330u, 0u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{267, 1075000115u, 0u, 1077936128u, 0, CEILF_TOLERANCE, 0}, +{268, 1082130432u, 0u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{269, 1085695590u, 0u, 1086324736u, 0, CEILF_TOLERANCE, 0}, +{270, 1089260749u, 0u, 1090519040u, 0, CEILF_TOLERANCE, 0}, +{271, 1091672474u, 0u, 1092616192u, 0, CEILF_TOLERANCE, 0}, +{272, 1093455053u, 0u, 1093664768u, 0, CEILF_TOLERANCE, 0}, +{273, 1095237632u, 0u, 1095761920u, 0, CEILF_TOLERANCE, 0}, +{274, 1097020211u, 0u, 1097859072u, 0, CEILF_TOLERANCE, 0}, +{275, 1098802790u, 0u, 1098907648u, 0, CEILF_TOLERANCE, 0}, +{276, 1099746509u, 0u, 1099956224u, 0, CEILF_TOLERANCE, 0}, +{277, 1100637798u, 0u, 1101004800u, 0, CEILF_TOLERANCE, 0}, +{278, 1101529088u, 0u, 1101529088u, 0, CEILF_TOLERANCE, 0}, +{279, 1102420378u, 0u, 1102577664u, 0, CEILF_TOLERANCE, 0}, +{280, 1103311667u, 0u, 1103626240u, 0, CEILF_TOLERANCE, 0}, +{281, 1104202957u, 0u, 1104674816u, 0, CEILF_TOLERANCE, 0}, +{282, 1105094246u, 0u, 1105199104u, 0, CEILF_TOLERANCE, 0}, +{283, 1105985536u, 0u, 1106247680u, 0, CEILF_TOLERANCE, 0}, +{284, 1107800421u, 1203999711u, 1107820544u, 0, CEILF_TOLERANCE, 0}, +{285, 3368700125u, 3308232444u, 3368700096u, 0, CEILF_TOLERANCE, 0}, +{286, 1224242132u, 3061363425u, 1224242144u, 0, CEILF_TOLERANCE, 0}, +{287, 3221027117u, 1284201705u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{288, 1198712763u, 919636942u, 1198712832u, 0, CEILF_TOLERANCE, 0}, +{289, 954173073u, 850531830u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{290, 966554515u, 3234538174u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{291, 1312607135u, 1194999402u, 1312607135u, 0, CEILF_TOLERANCE, 0}, +{292, 1166191415u, 1018661564u, 1166192640u, 0, CEILF_TOLERANCE, 0}, +{293, 1234419246u, 2984575812u, 1234419248u, 0, CEILF_TOLERANCE, 0}, +{294, 1302107128u, 3370647675u, 1302107128u, 0, CEILF_TOLERANCE, 0}, +{295, 1052801068u, 3039122570u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{296, 1060849628u, 3081357692u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{297, 3484320003u, 3033957825u, 3484320003u, 0, CEILF_TOLERANCE, 0}, +{298, 882596369u, 1256676590u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{299, 1167223673u, 846102364u, 1167224832u, 0, CEILF_TOLERANCE, 0}, +{300, 968192794u, 878547432u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{301, 1052361612u, 1280025214u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{302, 906701409u, 2968301825u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{303, 3471653172u, 1154138102u, 3471653172u, 0, CEILF_TOLERANCE, 0}, +{304, 3231467496u, 934336592u, 3229614080u, 0, CEILF_TOLERANCE, 0}, +{305, 1341514497u, 3466051188u, 1341514497u, 0, CEILF_TOLERANCE, 0}, +{306, 1272351391u, 3373485062u, 1272351391u, 0, CEILF_TOLERANCE, 0}, +{307, 3319724992u, 3354615790u, 3319724032u, 0, CEILF_TOLERANCE, 0}, +{308, 917622040u, 1334966485u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{309, 940236348u, 3304072663u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{310, 3251541546u, 3174764041u, 3251109888u, 0, CEILF_TOLERANCE, 0}, +{311, 3371863479u, 1014861921u, 3371863456u, 0, CEILF_TOLERANCE, 0}, +{312, 1306460502u, 903489435u, 1306460502u, 0, CEILF_TOLERANCE, 0}, +{313, 1197542187u, 3024598921u, 1197542400u, 0, CEILF_TOLERANCE, 0}, +{314, 922888249u, 1139392309u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{315, 1184239996u, 3224098462u, 1184240128u, 0, CEILF_TOLERANCE, 0}, +{316, 1252490238u, 1173619825u, 1252490238u, 0, CEILF_TOLERANCE, 0}, +{317, 1001673627u, 3462631271u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{318, 976098044u, 1151967422u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{319, 941796645u, 886451963u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{320, 3287199470u, 854245542u, 3287187456u, 0, CEILF_TOLERANCE, 0}, +{321, 893184329u, 1243067084u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{322, 1143233714u, 1007268238u, 1143242752u, 0, CEILF_TOLERANCE, 0}, +{323, 1139941253u, 1147688821u, 1139965952u, 0, CEILF_TOLERANCE, 0}, +{324, 3240298487u, 1020260821u, 3240099840u, 0, CEILF_TOLERANCE, 0}, +{325, 1288902137u, 3123875978u, 1288902137u, 0, CEILF_TOLERANCE, 0}, +{326, 1333134799u, 1338107877u, 1333134799u, 0, CEILF_TOLERANCE, 0}, +{327, 1187847971u, 1317663644u, 1187848192u, 0, CEILF_TOLERANCE, 0}, +{328, 1038851706u, 1327544110u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{329, 3329354473u, 3165437289u, 3329353728u, 0, CEILF_TOLERANCE, 0}, +{330, 1309289088u, 1019883016u, 1309289088u, 0, CEILF_TOLERANCE, 0}, +{331, 3444653659u, 1279248024u, 3444653659u, 0, CEILF_TOLERANCE, 0}, +{332, 3405585402u, 2962345057u, 3405585400u, 0, CEILF_TOLERANCE, 0}, +{333, 1106778573u, 3304487767u, 1107296256u, 0, CEILF_TOLERANCE, 0}, +{334, 1140567947u, 3069174149u, 1140588544u, 0, CEILF_TOLERANCE, 0}, +{335, 1238569473u, 873035665u, 1238569480u, 0, CEILF_TOLERANCE, 0}, +{336, 1261071232u, 1182202773u, 1261071233u, 0, CEILF_TOLERANCE, 0}, +{337, 1175011025u, 3029705783u, 1175011328u, 0, CEILF_TOLERANCE, 0}, +{338, 1082692850u, 1211581107u, 1084227584u, 0, CEILF_TOLERANCE, 0}, +{339, 974547519u, 3475164509u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{340, 3403348556u, 3184653669u, 3403348556u, 0, CEILF_TOLERANCE, 0}, +{341, 1136411063u, 1118097422u, 1136427008u, 0, CEILF_TOLERANCE, 0}, +{342, 3239231622u, 3302723069u, 3239051264u, 0, CEILF_TOLERANCE, 0}, +{343, 3340615780u, 870350055u, 3340615680u, 0, CEILF_TOLERANCE, 0}, +{344, 998567360u, 2995278691u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{345, 3417964312u, 1321337529u, 3417964312u, 0, CEILF_TOLERANCE, 0}, +{346, 1148867223u, 1256486202u, 1148878848u, 0, CEILF_TOLERANCE, 0}, +{347, 989687421u, 3372681320u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{348, 1152956913u, 3166480640u, 1152958464u, 0, CEILF_TOLERANCE, 0}, +{349, 892922651u, 3373029087u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{350, 1109627625u, 1314158257u, 1109655552u, 0, CEILF_TOLERANCE, 0}, +{351, 1307091856u, 1103202538u, 1307091856u, 0, CEILF_TOLERANCE, 0}, +{352, 1077234132u, 3272167130u, 1077936128u, 0, CEILF_TOLERANCE, 0}, +{353, 1142167709u, 1096445242u, 1142177792u, 0, CEILF_TOLERANCE, 0}, +{354, 3426232834u, 1036705270u, 3426232834u, 0, CEILF_TOLERANCE, 0}, +{355, 3368566779u, 967249167u, 3368566752u, 0, CEILF_TOLERANCE, 0}, +{356, 1138741813u, 3073453199u, 1138753536u, 0, CEILF_TOLERANCE, 0}, +{357, 982950501u, 982549888u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{358, 1142981585u, 1015602236u, 1142996992u, 0, CEILF_TOLERANCE, 0}, +{359, 3347165962u, 3135486696u, 3347165952u, 0, CEILF_TOLERANCE, 0}, +{360, 1009535440u, 3381353228u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{361, 3473956030u, 976891930u, 3473956030u, 0, CEILF_TOLERANCE, 0}, +{362, 3349098349u, 1055327704u, 3349098240u, 0, CEILF_TOLERANCE, 0}, +{363, 945568720u, 3313485084u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{364, 3345489836u, 1108392401u, 3345489664u, 0, CEILF_TOLERANCE, 0}, +{365, 940893161u, 1137000140u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{366, 976791751u, 3230678102u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{367, 1004442355u, 3036510596u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{368, 1108485380u, 3173536878u, 1108606976u, 0, CEILF_TOLERANCE, 0}, +{369, 1061834641u, 972388096u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{370, 3381268392u, 1146976802u, 3381268384u, 0, CEILF_TOLERANCE, 0}, +{371, 1087189715u, 2952822478u, 1088421888u, 0, CEILF_TOLERANCE, 0}, +{372, 3212952285u, 3329407365u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{373, 1000611335u, 857599439u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{374, 3466188568u, 1041678304u, 3466188568u, 0, CEILF_TOLERANCE, 0}, +{375, 3319315516u, 3422089012u, 3319314432u, 0, CEILF_TOLERANCE, 0}, +{376, 935938416u, 1146676692u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{377, 1315030230u, 3336225884u, 1315030230u, 0, CEILF_TOLERANCE, 0}, +{378, 1134593658u, 3456812581u, 1134624768u, 0, CEILF_TOLERANCE, 0}, +{379, 977281449u, 879922831u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{380, 1086198791u, 920125958u, 1086324736u, 0, CEILF_TOLERANCE, 0}, +{381, 1255152035u, 851754050u, 1255152036u, 0, CEILF_TOLERANCE, 0}, +{382, 1135271264u, 3284878412u, 1135280128u, 0, CEILF_TOLERANCE, 0}, +{383, 1094190727u, 1056854532u, 1094713344u, 0, CEILF_TOLERANCE, 0}, +{384, 1294665325u, 991185677u, 1294665325u, 0, CEILF_TOLERANCE, 0}, +{385, 1036608591u, 805416536u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{386, 3229998064u, 825237063u, 3229614080u, 0, CEILF_TOLERANCE, 0}, +{387, 3439134022u, 1043829691u, 3439134022u, 0, CEILF_TOLERANCE, 0}, +{388, 1325668223u, 970681762u, 1325668223u, 0, CEILF_TOLERANCE, 0}, +{389, 1092037607u, 1027330835u, 1092616192u, 0, CEILF_TOLERANCE, 0}, +{390, 3316278408u, 3455589207u, 3316277248u, 0, CEILF_TOLERANCE, 0}, +{391, 3295436768u, 3129873731u, 3295428608u, 0, CEILF_TOLERANCE, 0}, +{392, 1151984049u, 3074547120u, 1151991808u, 0, CEILF_TOLERANCE, 0}, +{393, 1129287043u, 3076527544u, 1129316352u, 0, CEILF_TOLERANCE, 0}, +{394, 1243664530u, 972879810u, 1243664532u, 0, CEILF_TOLERANCE, 0}, +{395, 950829092u, 929114193u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{396, 1115471979u, 3047246262u, 1115684864u, 0, CEILF_TOLERANCE, 0}, +{397, 3351092088u, 3024661404u, 3351091968u, 0, CEILF_TOLERANCE, 0}, +{398, 3424479544u, 3312047722u, 3424479544u, 0, CEILF_TOLERANCE, 0}, +{399, 3241193975u, 884465785u, 3241148416u, 0, CEILF_TOLERANCE, 0}, +{400, 1030934236u, 1045139240u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{401, 1025254314u, 3057812821u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{402, 1110545760u, 3240144177u, 1110704128u, 0, CEILF_TOLERANCE, 0}, +{403, 3361976590u, 3138179993u, 3361976576u, 0, CEILF_TOLERANCE, 0}, +{404, 881280146u, 3421884736u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{405, 1304154705u, 2961937089u, 1304154705u, 0, CEILF_TOLERANCE, 0}, +{406, 3264443610u, 3222916705u, 3264348160u, 0, CEILF_TOLERANCE, 0}, +{407, 3374550627u, 3055856293u, 3374550624u, 0, CEILF_TOLERANCE, 0}, +{408, 899599265u, 3240118211u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{409, 1268194719u, 1332489410u, 1268194720u, 0, CEILF_TOLERANCE, 0}, +{410, 1133420220u, 1245770860u, 1133445120u, 0, CEILF_TOLERANCE, 0}, +{411, 1161858787u, 815362075u, 1161859072u, 0, CEILF_TOLERANCE, 0}, +{412, 3295996963u, 3453334307u, 3295985664u, 0, CEILF_TOLERANCE, 0}, +{413, 1270887389u, 1156123987u, 1270887390u, 0, CEILF_TOLERANCE, 0}, +{414, 3325193181u, 993979179u, 3325192192u, 0, CEILF_TOLERANCE, 0}, +{415, 925657343u, 1315159742u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{416, 1189120494u, 978961471u, 1189120512u, 0, CEILF_TOLERANCE, 0}, +{417, 889030794u, 3129523970u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{418, 1323529208u, 3100744786u, 1323529208u, 0, CEILF_TOLERANCE, 0}, +{419, 3465768388u, 3190881451u, 3465768388u, 0, CEILF_TOLERANCE, 0}, +{420, 3426099899u, 1118756120u, 3426099899u, 0, CEILF_TOLERANCE, 0}, +{421, 3224857113u, 3398166843u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{422, 1065798296u, 816191940u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{423, 3328989444u, 850266225u, 3328989184u, 0, CEILF_TOLERANCE, 0}, +{424, 3357819026u, 3148475462u, 3357819008u, 0, CEILF_TOLERANCE, 0}, +{425, 1273397670u, 901308750u, 1273397670u, 0, CEILF_TOLERANCE, 0}, +{426, 3424831780u, 1304806106u, 3424831780u, 0, CEILF_TOLERANCE, 0}, +{427, 1257596246u, 3420832544u, 1257596248u, 0, CEILF_TOLERANCE, 0}, +{428, 1051773536u, 896271348u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{429, 3294752507u, 3113225954u, 3294740480u, 0, CEILF_TOLERANCE, 0}, +{430, 3424848725u, 2973850350u, 3424848724u, 0, CEILF_TOLERANCE, 0}, +{431, 1090870906u, 3294742905u, 1091567616u, 0, CEILF_TOLERANCE, 0}, +{432, 1227582289u, 1208979668u, 1227582304u, 0, CEILF_TOLERANCE, 0}, +{433, 1272325814u, 3004311296u, 1272325814u, 0, CEILF_TOLERANCE, 0}, +{434, 3359508271u, 859974315u, 3359508224u, 0, CEILF_TOLERANCE, 0}, +{435, 1137854355u, 3335041917u, 1137868800u, 0, CEILF_TOLERANCE, 0}, +{436, 3440773058u, 3204192793u, 3440773058u, 0, CEILF_TOLERANCE, 0}, +{437, 3451216836u, 3347783723u, 3451216836u, 0, CEILF_TOLERANCE, 0}, +{438, 3437062994u, 3106834845u, 3437062994u, 0, CEILF_TOLERANCE, 0}, +{439, 1131196082u, 1164573183u, 1131216896u, 0, CEILF_TOLERANCE, 0}, +{440, 3258097678u, 1305882290u, 3257925632u, 0, CEILF_TOLERANCE, 0}, +{441, 3460915348u, 1219372260u, 3460915348u, 0, CEILF_TOLERANCE, 0}, +{442, 3303035472u, 3153013020u, 3303030784u, 0, CEILF_TOLERANCE, 0}, +{443, 1053698677u, 3284313107u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{444, 3396166221u, 1201894512u, 3396166220u, 0, CEILF_TOLERANCE, 0}, +{445, 3458934263u, 1005577835u, 3458934263u, 0, CEILF_TOLERANCE, 0}, +{446, 1065761827u, 3333928591u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{447, 926665223u, 3150815797u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{448, 1199816046u, 3143776186u, 1199816064u, 0, CEILF_TOLERANCE, 0}, +{449, 3333779015u, 952421041u, 3333778944u, 0, CEILF_TOLERANCE, 0}, +{450, 948398145u, 3238273189u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{451, 1080781593u, 1213908300u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{452, 3235326590u, 1271705594u, 3233808384u, 0, CEILF_TOLERANCE, 0}, +{453, 965378004u, 1292594138u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{454, 3226990408u, 1110755136u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{455, 1283624229u, 906796922u, 1283624229u, 0, CEILF_TOLERANCE, 0}, +{456, 970649315u, 1078286437u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{457, 959776291u, 3280345347u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{458, 3341117305u, 3294559023u, 3341117184u, 0, CEILF_TOLERANCE, 0}, +{459, 1270734970u, 3355874874u, 1270734970u, 0, CEILF_TOLERANCE, 0}, +{460, 3454816067u, 868771977u, 3454816067u, 0, CEILF_TOLERANCE, 0}, +{461, 917206623u, 1172710814u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{462, 1106502045u, 1290849316u, 1106771968u, 0, CEILF_TOLERANCE, 0}, +{463, 1157598381u, 3309023746u, 1157603328u, 0, CEILF_TOLERANCE, 0}, +{464, 3335234513u, 1002337336u, 3335234048u, 0, CEILF_TOLERANCE, 0}, +{465, 1279489061u, 1006049444u, 1279489061u, 0, CEILF_TOLERANCE, 0}, +{466, 1233171235u, 826460580u, 1233171240u, 0, CEILF_TOLERANCE, 0}, +{467, 1148920078u, 1007674793u, 1148928000u, 0, CEILF_TOLERANCE, 0}, +{468, 1109198803u, 1221754614u, 1109393408u, 0, CEILF_TOLERANCE, 0}, +{469, 3219949483u, 1056167693u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{470, 3361149474u, 3387342069u, 3361149440u, 0, CEILF_TOLERANCE, 0}, +{471, 1207502108u, 3388073586u, 1207502208u, 0, CEILF_TOLERANCE, 0}, +{472, 1000014431u, 831213088u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{473, 1234530539u, 1079988872u, 1234530544u, 0, CEILF_TOLERANCE, 0}, +{474, 1017843965u, 1193076204u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{475, 951862956u, 1173464654u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{476, 3306328852u, 1118701064u, 3306328064u, 0, CEILF_TOLERANCE, 0}, +{477, 1291910469u, 1211303367u, 1291910469u, 0, CEILF_TOLERANCE, 0}, +{478, 1131927531u, 3182962700u, 1131937792u, 0, CEILF_TOLERANCE, 0}, +{479, 3449879391u, 991614550u, 3449879391u, 0, CEILF_TOLERANCE, 0}, +{480, 970094304u, 3344590506u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{481, 1125551064u, 3331248076u, 1125580800u, 0, CEILF_TOLERANCE, 0}, +{482, 3427296372u, 3455289118u, 3427296372u, 0, CEILF_TOLERANCE, 0}, +{483, 1198917460u, 1327195159u, 1198917632u, 0, CEILF_TOLERANCE, 0}, +{484, 921940707u, 2967544056u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{485, 1091906532u, 3011904455u, 1092616192u, 0, CEILF_TOLERANCE, 0}, +{486, 3393557778u, 3383396815u, 3393557776u, 0, CEILF_TOLERANCE, 0}, +{487, 1276853215u, 873199561u, 1276853215u, 0, CEILF_TOLERANCE, 0}, +{488, 3462778440u, 3349284325u, 3462778440u, 0, CEILF_TOLERANCE, 0}, +{489, 3360170117u, 3048354042u, 3360170112u, 0, CEILF_TOLERANCE, 0}, +{490, 3224245428u, 3271307999u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{491, 1120124467u, 1135619937u, 1120141312u, 0, CEILF_TOLERANCE, 0}, +{492, 1064364381u, 3180675544u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{493, 1268744779u, 3328452652u, 1268744779u, 0, CEILF_TOLERANCE, 0}, +{494, 1165195428u, 3390323168u, 1165197312u, 0, CEILF_TOLERANCE, 0}, +{495, 3247790039u, 909788142u, 3247439872u, 0, CEILF_TOLERANCE, 0}, +{496, 3215244648u, 1083988595u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{497, 1212717473u, 837873779u, 1212717504u, 0, CEILF_TOLERANCE, 0}, +{498, 3275973009u, 3450721670u, 3275948032u, 0, CEILF_TOLERANCE, 0}, +{499, 3391162308u, 1291220039u, 3391162304u, 0, CEILF_TOLERANCE, 0}, +{500, 1044867873u, 3369493273u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{501, 1089986803u, 3462160118u, 1090519040u, 0, CEILF_TOLERANCE, 0}, +{502, 1296314700u, 2957454177u, 1296314700u, 0, CEILF_TOLERANCE, 0}, +{503, 1251462432u, 3171021770u, 1251462434u, 0, CEILF_TOLERANCE, 0}, +{504, 3485236902u, 980772835u, 3485236902u, 0, CEILF_TOLERANCE, 0}, +{505, 3262169538u, 1268270462u, 3262119936u, 0, CEILF_TOLERANCE, 0}, +{506, 1022211242u, 922124181u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{507, 884661176u, 2985540645u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{508, 989762529u, 3362011135u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{509, 1295475718u, 3212305413u, 1295475718u, 0, CEILF_TOLERANCE, 0}, +{510, 1002632518u, 3330388441u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{511, 3404372005u, 3450484255u, 3404372004u, 0, CEILF_TOLERANCE, 0}, +{512, 1125800069u, 3256265749u, 1125842944u, 0, CEILF_TOLERANCE, 0}, +{513, 999985470u, 3409354318u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{514, 1189421739u, 1056599002u, 1189422080u, 0, CEILF_TOLERANCE, 0}, +{515, 1164046161u, 3440635788u, 1164046336u, 0, CEILF_TOLERANCE, 0}, +{516, 1292596266u, 3116569667u, 1292596266u, 0, CEILF_TOLERANCE, 0}, +{517, 3469748379u, 3412765608u, 3469748379u, 0, CEILF_TOLERANCE, 0}, +{518, 1314644642u, 3123051784u, 1314644642u, 0, CEILF_TOLERANCE, 0}, +{519, 3399813173u, 828743798u, 3399813172u, 0, CEILF_TOLERANCE, 0}, +{520, 948775569u, 3485444126u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{521, 1034611395u, 882288581u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{522, 3489122735u, 3372450889u, 3489122735u, 0, CEILF_TOLERANCE, 0}, +{523, 1181604787u, 3363067409u, 1181604864u, 0, CEILF_TOLERANCE, 0}, +{524, 1043691622u, 3402603223u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{525, 1314588083u, 856187848u, 1314588083u, 0, CEILF_TOLERANCE, 0}, +{526, 3400949680u, 3073750220u, 3400949678u, 0, CEILF_TOLERANCE, 0}, +{527, 3365581801u, 1175843167u, 3365581792u, 0, CEILF_TOLERANCE, 0}, +{528, 1110424755u, 3011308654u, 1110441984u, 0, CEILF_TOLERANCE, 0}, +{529, 969804941u, 3355439348u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{530, 1139120919u, 3270515074u, 1139146752u, 0, CEILF_TOLERANCE, 0}, +{531, 934308144u, 3118191228u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{532, 1220524226u, 1152648002u, 1220524256u, 0, CEILF_TOLERANCE, 0}, +{533, 3382391700u, 3296962745u, 3382391696u, 0, CEILF_TOLERANCE, 0}, +{534, 1156767533u, 1088986462u, 1156767744u, 0, CEILF_TOLERANCE, 0}, +{535, 994934087u, 967678094u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{536, 3479873563u, 1246277393u, 3479873563u, 0, CEILF_TOLERANCE, 0}, +{537, 3424264117u, 3434026174u, 3424264117u, 0, CEILF_TOLERANCE, 0}, +{538, 3228365887u, 1216775310u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{539, 1035909900u, 1249532942u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{540, 1212129651u, 3017366784u, 1212129664u, 0, CEILF_TOLERANCE, 0}, +{541, 1037464105u, 3121544932u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{542, 1311706596u, 1254918706u, 1311706596u, 0, CEILF_TOLERANCE, 0}, +{543, 918212457u, 1017468331u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{544, 1337315179u, 3461361185u, 1337315179u, 0, CEILF_TOLERANCE, 0}, +{545, 1131358407u, 3325958870u, 1131413504u, 0, CEILF_TOLERANCE, 0}, +{546, 1156517523u, 3343716230u, 1156521984u, 0, CEILF_TOLERANCE, 0}, +{547, 3337499209u, 1226297264u, 3337499136u, 0, CEILF_TOLERANCE, 0}, +{548, 3468429030u, 3253874001u, 3468429030u, 0, CEILF_TOLERANCE, 0}, +{549, 3253515800u, 1189005947u, 3253207040u, 0, CEILF_TOLERANCE, 0}, +{550, 959956547u, 876324728u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{551, 3425290480u, 1139193797u, 3425290480u, 0, CEILF_TOLERANCE, 0}, +{552, 1039917375u, 1122740999u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{553, 3220979495u, 3429223871u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{554, 1311016004u, 3334899880u, 1311016004u, 0, CEILF_TOLERANCE, 0}, +{555, 1128016396u, 1105151547u, 1128071168u, 0, CEILF_TOLERANCE, 0}, +{556, 1206054701u, 826010009u, 1206054784u, 0, CEILF_TOLERANCE, 0}, +{557, 1213609983u, 919983950u, 1213609984u, 0, CEILF_TOLERANCE, 0}, +{558, 1246902946u, 3064047808u, 1246902948u, 0, CEILF_TOLERANCE, 0}, +{559, 995850843u, 1332031130u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{560, 3362082828u, 3374056268u, 3362082816u, 0, CEILF_TOLERANCE, 0}, +{561, 1029480631u, 3047777170u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{562, 3384988527u, 3109485565u, 3384988520u, 0, CEILF_TOLERANCE, 0}, +{563, 1317696241u, 870681806u, 1317696241u, 0, CEILF_TOLERANCE, 0}, +{564, 3235395924u, 1132055244u, 3233808384u, 0, CEILF_TOLERANCE, 0}, +{565, 3341877624u, 2969495570u, 3341877504u, 0, CEILF_TOLERANCE, 0}, +{566, 1228636133u, 886552820u, 1228636144u, 0, CEILF_TOLERANCE, 0}, +{567, 1207246237u, 859223639u, 1207246336u, 0, CEILF_TOLERANCE, 0}, +{568, 1165476654u, 3350219111u, 1165479936u, 0, CEILF_TOLERANCE, 0}, +{569, 1215278023u, 3019755242u, 1215278080u, 0, CEILF_TOLERANCE, 0}, +{570, 1017239798u, 3438501281u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{571, 1149651309u, 970030475u, 1149657088u, 0, CEILF_TOLERANCE, 0}, +{572, 1111943722u, 3122211334u, 1112014848u, 0, CEILF_TOLERANCE, 0}, +{573, 1189849849u, 3382739134u, 1189850112u, 0, CEILF_TOLERANCE, 0}, +{574, 1249758327u, 3104759211u, 1249758328u, 0, CEILF_TOLERANCE, 0}, +{575, 1168098747u, 1316854744u, 1168099328u, 0, CEILF_TOLERANCE, 0}, +{576, 892549317u, 1179637545u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{577, 3301009024u, 3406174560u, 3301007360u, 0, CEILF_TOLERANCE, 0}, +{578, 3233089227u, 1212652543u, 3231711232u, 0, CEILF_TOLERANCE, 0}, +{579, 3218245284u, 1238873830u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{580, 3215981890u, 3240474694u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{581, 1266687209u, 3092038122u, 1266687210u, 0, CEILF_TOLERANCE, 0}, +{582, 3487959775u, 3331372071u, 3487959775u, 0, CEILF_TOLERANCE, 0}, +{583, 943645710u, 852875779u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{584, 3345065699u, 3282620725u, 3345065472u, 0, CEILF_TOLERANCE, 0}, +{585, 935847271u, 1067255804u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{586, 3410336089u, 1111437780u, 3410336088u, 0, CEILF_TOLERANCE, 0}, +{587, 1141063391u, 1168908072u, 1141063680u, 0, CEILF_TOLERANCE, 0}, +{588, 3353679791u, 897158391u, 3353679744u, 0, CEILF_TOLERANCE, 0}, +{589, 1001823878u, 1016826861u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{590, 1009130212u, 1004302940u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{591, 3367127535u, 943136342u, 3367127520u, 0, CEILF_TOLERANCE, 0}, +{592, 1032920919u, 3449126417u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{593, 3281952870u, 3147012185u, 3281944576u, 0, CEILF_TOLERANCE, 0}, +{594, 1237868497u, 3048281802u, 1237868504u, 0, CEILF_TOLERANCE, 0}, +{595, 1153753924u, 3322269242u, 1153761280u, 0, CEILF_TOLERANCE, 0}, +{596, 1120261759u, 892210998u, 1120272384u, 0, CEILF_TOLERANCE, 0}, +{597, 3226328360u, 3366432856u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{598, 3349595986u, 3251588707u, 3349595904u, 0, CEILF_TOLERANCE, 0}, +{599, 1087750238u, 1099325523u, 1088421888u, 0, CEILF_TOLERANCE, 0}, +{600, 1066116543u, 3072159933u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{601, 1030612298u, 3345396001u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{602, 1186234578u, 858134374u, 1186234880u, 0, CEILF_TOLERANCE, 0}, +{603, 1331680743u, 1009396165u, 1331680743u, 0, CEILF_TOLERANCE, 0}, +{604, 887589411u, 1292305693u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{605, 1045232522u, 3234993273u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{606, 3349432725u, 928848003u, 3349432704u, 0, CEILF_TOLERANCE, 0}, +{607, 912423027u, 3184646319u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{608, 3228795133u, 3273940030u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{609, 3296784303u, 3276182352u, 3296780288u, 0, CEILF_TOLERANCE, 0}, +{610, 965402291u, 3107104376u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{611, 3388153589u, 3426245389u, 3388153584u, 0, CEILF_TOLERANCE, 0}, +{612, 1133410485u, 3329658993u, 1133412352u, 0, CEILF_TOLERANCE, 0}, +{613, 3369970587u, 959121458u, 3369970560u, 0, CEILF_TOLERANCE, 0}, +{614, 1270451568u, 928393353u, 1270451568u, 0, CEILF_TOLERANCE, 0}, +{615, 989498922u, 3088358419u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{616, 1280215674u, 3148135875u, 1280215674u, 0, CEILF_TOLERANCE, 0}, +{617, 1171873518u, 954709738u, 1171873792u, 0, CEILF_TOLERANCE, 0}, +{618, 3298258100u, 935525182u, 3298254848u, 0, CEILF_TOLERANCE, 0}, +{619, 3415208824u, 822843236u, 3415208824u, 0, CEILF_TOLERANCE, 0}, +{620, 1001897182u, 3191875320u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{621, 985903305u, 3333087577u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{622, 3357328848u, 859306298u, 3357328832u, 0, CEILF_TOLERANCE, 0}, +{623, 982612185u, 923582663u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{624, 3267868136u, 1208301947u, 3267756032u, 0, CEILF_TOLERANCE, 0}, +{625, 3319048157u, 1172271145u, 3319046144u, 0, CEILF_TOLERANCE, 0}, +{626, 1144755661u, 860947435u, 1144766464u, 0, CEILF_TOLERANCE, 0}, +{627, 898467286u, 839254959u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{628, 3301461672u, 1233693827u, 3301457920u, 0, CEILF_TOLERANCE, 0}, +{629, 3364525678u, 3089849671u, 3364525664u, 0, CEILF_TOLERANCE, 0}, +{630, 931441127u, 1133424555u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{631, 3467121799u, 3023584354u, 3467121799u, 0, CEILF_TOLERANCE, 0}, +{632, 1151257041u, 3084216427u, 1151262720u, 0, CEILF_TOLERANCE, 0}, +{633, 1017573824u, 3130901062u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{634, 1258369714u, 3462258576u, 1258369714u, 0, CEILF_TOLERANCE, 0}, +{635, 1216602683u, 3371396332u, 1216602688u, 0, CEILF_TOLERANCE, 0}, +{636, 3297265739u, 1214184410u, 3297263616u, 0, CEILF_TOLERANCE, 0}, +{637, 1071940738u, 3311731012u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{638, 922601356u, 3337171870u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{639, 3462285635u, 3444030332u, 3462285635u, 0, CEILF_TOLERANCE, 0}, +{640, 3357177805u, 1085464241u, 3357177792u, 0, CEILF_TOLERANCE, 0}, +{641, 1153863660u, 1011991342u, 1153867776u, 0, CEILF_TOLERANCE, 0}, +{642, 1249365132u, 3278686216u, 1249365132u, 0, CEILF_TOLERANCE, 0}, +{643, 3222096285u, 1198013705u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{644, 1297708818u, 3079166173u, 1297708818u, 0, CEILF_TOLERANCE, 0}, +{645, 3345532722u, 3383708463u, 3345532672u, 0, CEILF_TOLERANCE, 0}, +{646, 3418753236u, 3481843070u, 3418753236u, 0, CEILF_TOLERANCE, 0}, +{647, 1277417964u, 3487506626u, 1277417964u, 0, CEILF_TOLERANCE, 0}, +{648, 987577257u, 1152077087u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{649, 888030585u, 3062367380u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{650, 1043442869u, 3311393817u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{651, 3320923228u, 3464544249u, 3320922112u, 0, CEILF_TOLERANCE, 0}, +{652, 1337400405u, 3488844154u, 1337400405u, 0, CEILF_TOLERANCE, 0}, +{653, 3400348640u, 3129868490u, 3400348640u, 0, CEILF_TOLERANCE, 0}, +{654, 1250249095u, 1069023744u, 1250249096u, 0, CEILF_TOLERANCE, 0}, +{655, 3284411233u, 1173613526u, 3284402176u, 0, CEILF_TOLERANCE, 0}, +{656, 1215968622u, 3469884568u, 1215968640u, 0, CEILF_TOLERANCE, 0}, +{657, 1025404104u, 1066370251u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{658, 3362748242u, 3369843597u, 3362748224u, 0, CEILF_TOLERANCE, 0}, +{659, 1252237719u, 1121169249u, 1252237720u, 0, CEILF_TOLERANCE, 0}, +{660, 3327895594u, 1224511805u, 3327895552u, 0, CEILF_TOLERANCE, 0}, +{661, 3396161504u, 1182798837u, 3396161500u, 0, CEILF_TOLERANCE, 0}, +{662, 1099710167u, 887180181u, 1099956224u, 0, CEILF_TOLERANCE, 0}, +{663, 1157186482u, 1288722647u, 1157193728u, 0, CEILF_TOLERANCE, 0}, +{664, 1282110851u, 3176633124u, 1282110852u, 0, CEILF_TOLERANCE, 0}, +{665, 3477008113u, 1331845018u, 3477008113u, 0, CEILF_TOLERANCE, 0}, +{666, 3292127294u, 3409957764u, 3292119040u, 0, CEILF_TOLERANCE, 0}, +{667, 1123357102u, 3281307320u, 1123418112u, 0, CEILF_TOLERANCE, 0}, +{668, 1106837025u, 3088080674u, 1107296256u, 0, CEILF_TOLERANCE, 0}, +{669, 1049949008u, 1130799489u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{670, 1253017688u, 942062372u, 1253017690u, 0, CEILF_TOLERANCE, 0}, +{671, 1108543194u, 3281299199u, 1108606976u, 0, CEILF_TOLERANCE, 0}, +{672, 1160162706u, 1264067367u, 1160163328u, 0, CEILF_TOLERANCE, 0}, +{673, 3305715025u, 3017496063u, 3305713664u, 0, CEILF_TOLERANCE, 0}, +{674, 1266928623u, 811778614u, 1266928624u, 0, CEILF_TOLERANCE, 0}, +{675, 3438080027u, 3107114149u, 3438080027u, 0, CEILF_TOLERANCE, 0}, +{676, 3344574751u, 3111270744u, 3344574720u, 0, CEILF_TOLERANCE, 0}, +{677, 1152416724u, 962669179u, 1152417792u, 0, CEILF_TOLERANCE, 0}, +{678, 1218239308u, 1126238113u, 1218239328u, 0, CEILF_TOLERANCE, 0}, +{679, 3263310567u, 1030748197u, 3263299584u, 0, CEILF_TOLERANCE, 0}, +{680, 1000313118u, 2980130729u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{681, 972485427u, 1124312043u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{682, 3290264612u, 1124703898u, 3290251264u, 0, CEILF_TOLERANCE, 0}, +{683, 3222106584u, 1183748648u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{684, 1278946388u, 825129857u, 1278946388u, 0, CEILF_TOLERANCE, 0}, +{685, 947914771u, 3181847068u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{686, 1098530298u, 3255870890u, 1098907648u, 0, CEILF_TOLERANCE, 0}, +{687, 3232726036u, 871038882u, 3231711232u, 0, CEILF_TOLERANCE, 0}, +{688, 1297190916u, 811863044u, 1297190916u, 0, CEILF_TOLERANCE, 0}, +{689, 1277649137u, 961171401u, 1277649137u, 0, CEILF_TOLERANCE, 0}, +{690, 3244032016u, 3045313345u, 3243245568u, 0, CEILF_TOLERANCE, 0}, +{691, 1096155623u, 1256423752u, 1096810496u, 0, CEILF_TOLERANCE, 0}, +{692, 873151908u, 3246562559u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{693, 3238729605u, 1298769842u, 3238002688u, 0, CEILF_TOLERANCE, 0}, +{694, 3317196817u, 989537151u, 3317196800u, 0, CEILF_TOLERANCE, 0}, +{695, 3374748510u, 834161190u, 3374748496u, 0, CEILF_TOLERANCE, 0}, +{696, 3345634950u, 959901149u, 3345634816u, 0, CEILF_TOLERANCE, 0}, +{697, 887311687u, 1175312255u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{698, 3396917283u, 3066326686u, 3396917280u, 0, CEILF_TOLERANCE, 0}, +{699, 3317032737u, 3143803722u, 3317030912u, 0, CEILF_TOLERANCE, 0}, +{700, 1200051436u, 1163802508u, 1200051456u, 0, CEILF_TOLERANCE, 0}, +{701, 1306520561u, 957302464u, 1306520561u, 0, CEILF_TOLERANCE, 0}, +{702, 1314936356u, 2985592532u, 1314936356u, 0, CEILF_TOLERANCE, 0}, +{703, 3475052219u, 1284049853u, 3475052219u, 0, CEILF_TOLERANCE, 0}, +{704, 3393227708u, 3271879112u, 3393227708u, 0, CEILF_TOLERANCE, 0}, +{705, 3349005404u, 3080993030u, 3349005312u, 0, CEILF_TOLERANCE, 0}, +{706, 1262863321u, 1219003129u, 1262863322u, 0, CEILF_TOLERANCE, 0}, +{707, 882902102u, 1224362550u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{708, 1053387478u, 3184880021u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{709, 3387653691u, 3347783852u, 3387653688u, 0, CEILF_TOLERANCE, 0}, +{710, 1338680611u, 1166078045u, 1338680611u, 0, CEILF_TOLERANCE, 0}, +{711, 1112891928u, 3074730425u, 1113063424u, 0, CEILF_TOLERANCE, 0}, +{712, 893449284u, 1052877339u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{713, 892311459u, 1097338393u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{714, 1190105283u, 3033907262u, 1190105600u, 0, CEILF_TOLERANCE, 0}, +{715, 1011225926u, 1180485180u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{716, 1043025031u, 987068973u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{717, 3410531037u, 2953541915u, 3410531037u, 0, CEILF_TOLERANCE, 0}, +{718, 902318189u, 849277289u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{719, 3213624815u, 2987148017u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{720, 1120888322u, 1086209113u, 1120927744u, 0, CEILF_TOLERANCE, 0}, +{721, 1315217243u, 3396371713u, 1315217243u, 0, CEILF_TOLERANCE, 0}, +{722, 1040617590u, 1034835971u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{723, 955384253u, 3344785562u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{724, 904255535u, 1019967545u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{725, 1022984119u, 3113891410u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{726, 997362368u, 3112875428u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{727, 900933520u, 1100589187u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{728, 1168623062u, 1143306482u, 1168623616u, 0, CEILF_TOLERANCE, 0}, +{729, 878737490u, 3269908326u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{730, 1039827284u, 1072928888u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{731, 1021564080u, 1064468397u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{732, 3458669745u, 3033299853u, 3458669745u, 0, CEILF_TOLERANCE, 0}, +{733, 3327516316u, 3405380971u, 3327515648u, 0, CEILF_TOLERANCE, 0}, +{734, 1040711112u, 3229444200u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{735, 1134528351u, 3365952513u, 1134559232u, 0, CEILF_TOLERANCE, 0}, +{736, 3414352838u, 3350285760u, 3414352838u, 0, CEILF_TOLERANCE, 0}, +{737, 1133689539u, 1067460093u, 1133707264u, 0, CEILF_TOLERANCE, 0}, +{738, 3455688478u, 3333091960u, 3455688478u, 0, CEILF_TOLERANCE, 0}, +{739, 1137634874u, 1137038869u, 1137639424u, 0, CEILF_TOLERANCE, 0}, +{740, 3415502662u, 955510692u, 3415502662u, 0, CEILF_TOLERANCE, 0}, +{741, 954999730u, 969618597u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{742, 1066157309u, 3241712664u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{743, 3436353675u, 1174967495u, 3436353675u, 0, CEILF_TOLERANCE, 0}, +{744, 940437609u, 860372396u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{745, 1023889593u, 2979304683u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{746, 3272661536u, 3461799138u, 3272605696u, 0, CEILF_TOLERANCE, 0}, +{747, 1170245333u, 1233406410u, 1170245632u, 0, CEILF_TOLERANCE, 0}, +{748, 1219052056u, 3369557946u, 1219052064u, 0, CEILF_TOLERANCE, 0}, +{749, 3318983619u, 3259663338u, 3318982656u, 0, CEILF_TOLERANCE, 0}, +{750, 3372118621u, 837597103u, 3372118592u, 0, CEILF_TOLERANCE, 0}, +{751, 1299683827u, 966031619u, 1299683827u, 0, CEILF_TOLERANCE, 0}, +{752, 3257224022u, 3361778245u, 3257139200u, 0, CEILF_TOLERANCE, 0}, +{753, 1229268598u, 1066965677u, 1229268608u, 0, CEILF_TOLERANCE, 0}, +{754, 1086717248u, 3423795374u, 1088421888u, 0, CEILF_TOLERANCE, 0}, +{755, 3434884607u, 3029593823u, 3434884607u, 0, CEILF_TOLERANCE, 0}, +{756, 3464955606u, 1017987696u, 3464955606u, 0, CEILF_TOLERANCE, 0}, +{757, 1025278524u, 3121856207u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{758, 1242829722u, 3233935671u, 1242829724u, 0, CEILF_TOLERANCE, 0}, +{759, 1200927971u, 1317167489u, 1200928000u, 0, CEILF_TOLERANCE, 0}, +{760, 3326858092u, 3452602832u, 3326857216u, 0, CEILF_TOLERANCE, 0}, +{761, 1246019790u, 850632217u, 1246019792u, 0, CEILF_TOLERANCE, 0}, +{762, 1136052740u, 3244616020u, 1136066560u, 0, CEILF_TOLERANCE, 0}, +{763, 1069009211u, 3002507482u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{764, 1015670780u, 1101217251u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{765, 1012543234u, 1116520440u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{766, 3316611992u, 3394732912u, 3316611072u, 0, CEILF_TOLERANCE, 0}, +{767, 1087942795u, 3316660295u, 1088421888u, 0, CEILF_TOLERANCE, 0}, +{768, 3426365713u, 3069778532u, 3426365712u, 0, CEILF_TOLERANCE, 0}, +{769, 3295326432u, 1313396175u, 3295313920u, 0, CEILF_TOLERANCE, 0}, +{770, 3318835308u, 3277583511u, 3318835200u, 0, CEILF_TOLERANCE, 0}, +{771, 3283555717u, 891875120u, 3283550208u, 0, CEILF_TOLERANCE, 0}, +{772, 3381255420u, 3015406047u, 3381255416u, 0, CEILF_TOLERANCE, 0}, +{773, 3388772093u, 1032597076u, 3388772088u, 0, CEILF_TOLERANCE, 0}, +{774, 954670189u, 1144923689u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{775, 1319200415u, 3387555900u, 1319200415u, 0, CEILF_TOLERANCE, 0}, +{776, 1279324488u, 3228401212u, 1279324488u, 0, CEILF_TOLERANCE, 0}, +{777, 3217795424u, 865577227u, 3212836864u, 0, CEILF_TOLERANCE, 0}, +{778, 3455131757u, 1260217257u, 3455131757u, 0, CEILF_TOLERANCE, 0}, +{779, 1246947517u, 1087951909u, 1246947520u, 0, CEILF_TOLERANCE, 0}, +{780, 3396723577u, 869285240u, 3396723576u, 0, CEILF_TOLERANCE, 0}, +{781, 3433761025u, 3060143904u, 3433761025u, 0, CEILF_TOLERANCE, 0}, +{782, 1173247961u, 1191127979u, 1173248000u, 0, CEILF_TOLERANCE, 0}, +{783, 3248534678u, 1323683800u, 3248488448u, 0, CEILF_TOLERANCE, 0}, +{784, 1082862511u, 3032804719u, 1084227584u, 0, CEILF_TOLERANCE, 0}, +{785, 1341821683u, 3003675365u, 1341821683u, 0, CEILF_TOLERANCE, 0}, +{786, 881101379u, 1190838126u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{787, 1079061705u, 2960507663u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{788, 1105291533u, 3482971524u, 1105723392u, 0, CEILF_TOLERANCE, 0}, +{789, 1016023520u, 3227712090u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{790, 3370691006u, 1295870514u, 3370690976u, 0, CEILF_TOLERANCE, 0}, +{791, 1156767169u, 1049756240u, 1156767744u, 0, CEILF_TOLERANCE, 0}, +{792, 1104284039u, 3040211914u, 1104674816u, 0, CEILF_TOLERANCE, 0}, +{793, 3335212901u, 3486414589u, 3335212544u, 0, CEILF_TOLERANCE, 0}, +{794, 1093697541u, 3193708441u, 1094713344u, 0, CEILF_TOLERANCE, 0}, +{795, 3266691185u, 1160074593u, 3266576384u, 0, CEILF_TOLERANCE, 0}, +{796, 1094115255u, 3008610212u, 1094713344u, 0, CEILF_TOLERANCE, 0}, +{797, 3424086808u, 3260140004u, 3424086808u, 0, CEILF_TOLERANCE, 0}, +{798, 3353608773u, 1134068114u, 3353608704u, 0, CEILF_TOLERANCE, 0}, +{799, 973664327u, 1319516167u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{800, 882878091u, 3136970767u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{801, 1098662266u, 833740182u, 1098907648u, 0, CEILF_TOLERANCE, 0}, +{802, 927582555u, 947955456u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{803, 3476083859u, 966439623u, 3476083859u, 0, CEILF_TOLERANCE, 0}, +{804, 979878744u, 1232482646u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{805, 3464546616u, 3205527253u, 3464546616u, 0, CEILF_TOLERANCE, 0}, +{806, 1002542205u, 3152136093u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{807, 3443552129u, 3165561391u, 3443552129u, 0, CEILF_TOLERANCE, 0}, +{808, 1287620154u, 3119707283u, 1287620154u, 0, CEILF_TOLERANCE, 0}, +{809, 946058434u, 1249928879u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{810, 1245702957u, 894348966u, 1245702960u, 0, CEILF_TOLERANCE, 0}, +{811, 989655126u, 1308376568u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{812, 1002715618u, 1191006977u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{813, 1000863905u, 1196831314u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{814, 3415763001u, 3032518431u, 3415763001u, 0, CEILF_TOLERANCE, 0}, +{815, 3283471961u, 1260093226u, 3283451904u, 0, CEILF_TOLERANCE, 0}, +{816, 3311210827u, 1192192264u, 3311210496u, 0, CEILF_TOLERANCE, 0}, +{817, 1198307901u, 1116328249u, 1198308096u, 0, CEILF_TOLERANCE, 0}, +{818, 1288901567u, 1296370667u, 1288901568u, 0, CEILF_TOLERANCE, 0}, +{819, 922255363u, 958305289u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{820, 1113104661u, 944376032u, 1113325568u, 0, CEILF_TOLERANCE, 0}, +{821, 1136714348u, 828849087u, 1136721920u, 0, CEILF_TOLERANCE, 0}, +{822, 948856035u, 1015466475u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{823, 1062512367u, 3229559531u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{824, 3486907092u, 823220784u, 3486907092u, 0, CEILF_TOLERANCE, 0}, +{825, 1162027071u, 3308983387u, 1162031104u, 0, CEILF_TOLERANCE, 0}, +{826, 1034561811u, 1054043114u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{827, 3271615417u, 3209997200u, 3271557120u, 0, CEILF_TOLERANCE, 0}, +{828, 1042014529u, 1146708584u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{829, 1177157787u, 3090208179u, 1177158656u, 0, CEILF_TOLERANCE, 0}, +{830, 3432084552u, 2997091781u, 3432084552u, 0, CEILF_TOLERANCE, 0}, +{831, 1309658335u, 1010219988u, 1309658335u, 0, CEILF_TOLERANCE, 0}, +{832, 1226494979u, 2991604792u, 1226494992u, 0, CEILF_TOLERANCE, 0}, +{833, 3375507013u, 1306310823u, 3375507008u, 0, CEILF_TOLERANCE, 0}, +{834, 3460699001u, 3096700943u, 3460699001u, 0, CEILF_TOLERANCE, 0}, +{835, 3468023178u, 1209565017u, 3468023178u, 0, CEILF_TOLERANCE, 0}, +{836, 1204196034u, 3298625731u, 1204196096u, 0, CEILF_TOLERANCE, 0}, +{837, 3459877411u, 2960476959u, 3459877411u, 0, CEILF_TOLERANCE, 0}, +{838, 909696559u, 1163075690u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{839, 1161439847u, 943449277u, 1161441280u, 0, CEILF_TOLERANCE, 0}, +{840, 908663107u, 939489763u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{841, 1055319316u, 3261813492u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{842, 1084378658u, 1009650785u, 1086324736u, 0, CEILF_TOLERANCE, 0}, +{843, 1226473697u, 821025132u, 1226473712u, 0, CEILF_TOLERANCE, 0}, +{844, 1123114742u, 1229815537u, 1123155968u, 0, CEILF_TOLERANCE, 0}, +{845, 1258114435u, 1291336083u, 1258114436u, 0, CEILF_TOLERANCE, 0}, +{846, 3468040845u, 3066966245u, 3468040845u, 0, CEILF_TOLERANCE, 0}, +{847, 1178825761u, 1113195286u, 1178826752u, 0, CEILF_TOLERANCE, 0}, +{848, 3223384012u, 1130486973u, 3221225472u, 0, CEILF_TOLERANCE, 0}, +{849, 1019964626u, 1235133609u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{850, 3445262427u, 3465211174u, 3445262426u, 0, CEILF_TOLERANCE, 0}, +{851, 1125653081u, 1207799746u, 1125711872u, 0, CEILF_TOLERANCE, 0}, +{852, 3337652712u, 3025581813u, 3337652224u, 0, CEILF_TOLERANCE, 0}, +{853, 1184753508u, 3147374485u, 1184753664u, 0, CEILF_TOLERANCE, 0}, +{854, 996404791u, 3353251979u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{855, 1188439315u, 1113484271u, 1188439552u, 0, CEILF_TOLERANCE, 0}, +{856, 906557513u, 3006513432u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{857, 916831283u, 999465787u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{858, 996786317u, 3179221951u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{859, 3461635065u, 1004690387u, 3461635065u, 0, CEILF_TOLERANCE, 0}, +{860, 1188167943u, 1200744896u, 1188168192u, 0, CEILF_TOLERANCE, 0}, +{861, 891257783u, 1267560050u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{862, 3290079438u, 846519377u, 3290071040u, 0, CEILF_TOLERANCE, 0}, +{863, 3350690327u, 2967953392u, 3350690304u, 0, CEILF_TOLERANCE, 0}, +{864, 1102061604u, 3424449935u, 1102577664u, 0, CEILF_TOLERANCE, 0}, +{865, 1282351521u, 3039376424u, 1282351521u, 0, CEILF_TOLERANCE, 0}, +{866, 3458861065u, 3392466405u, 3458861065u, 0, CEILF_TOLERANCE, 0}, +{867, 3228793330u, 855146890u, 3225419776u, 0, CEILF_TOLERANCE, 0}, +{868, 3422194733u, 893873945u, 3422194732u, 0, CEILF_TOLERANCE, 0}, +{869, 1261940623u, 3402349985u, 1261940623u, 0, CEILF_TOLERANCE, 0}, +{870, 3400603081u, 3234396843u, 3400603080u, 0, CEILF_TOLERANCE, 0}, +{871, 1219411812u, 2961857939u, 1219411840u, 0, CEILF_TOLERANCE, 0}, +{872, 886201503u, 3272760705u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{873, 3297366026u, 1089966380u, 3297361920u, 0, CEILF_TOLERANCE, 0}, +{874, 1218488455u, 3309646450u, 1218488480u, 0, CEILF_TOLERANCE, 0}, +{875, 1283938137u, 1196383822u, 1283938137u, 0, CEILF_TOLERANCE, 0}, +{876, 1317098613u, 949986176u, 1317098613u, 0, CEILF_TOLERANCE, 0}, +{877, 3431703657u, 3014443710u, 3431703657u, 0, CEILF_TOLERANCE, 0}, +{878, 3239728775u, 927815421u, 3239051264u, 0, CEILF_TOLERANCE, 0}, +{879, 3313160088u, 2964063309u, 3313156096u, 0, CEILF_TOLERANCE, 0}, +{880, 1284174954u, 3436881197u, 1284174954u, 0, CEILF_TOLERANCE, 0}, +{881, 1063693032u, 976661408u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{882, 1102631663u, 3396951425u, 1103101952u, 0, CEILF_TOLERANCE, 0}, +{883, 968803479u, 992989712u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{884, 3273080388u, 3109405906u, 3273064448u, 0, CEILF_TOLERANCE, 0}, +{885, 1172529774u, 3294550127u, 1172531200u, 0, CEILF_TOLERANCE, 0}, +{886, 1306695905u, 1292690378u, 1306695905u, 0, CEILF_TOLERANCE, 0}, +{887, 1003649752u, 1218792138u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{888, 1078478376u, 1326246424u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{889, 1165177679u, 3276237026u, 1165180928u, 0, CEILF_TOLERANCE, 0}, +{890, 3403009513u, 3381966453u, 3403009512u, 0, CEILF_TOLERANCE, 0}, +{891, 952348506u, 3377573987u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{892, 1222777442u, 1125769920u, 1222777472u, 0, CEILF_TOLERANCE, 0}, +{893, 1325324763u, 978336043u, 1325324763u, 0, CEILF_TOLERANCE, 0}, +{894, 3363524213u, 3202991311u, 3363524160u, 0, CEILF_TOLERANCE, 0}, +{895, 1158950321u, 1073578913u, 1158950912u, 0, CEILF_TOLERANCE, 0}, +{896, 903129873u, 3416864271u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{897, 1208345407u, 1254181270u, 1208345408u, 0, CEILF_TOLERANCE, 0}, +{898, 1258634105u, 1247426200u, 1258634105u, 0, CEILF_TOLERANCE, 0}, +{899, 1248478509u, 1287895126u, 1248478512u, 0, CEILF_TOLERANCE, 0}, +{900, 1153863988u, 3430539165u, 1153867776u, 0, CEILF_TOLERANCE, 0}, +{901, 1235620969u, 866627358u, 1235620976u, 0, CEILF_TOLERANCE, 0}, +{902, 1097120930u, 3221726305u, 1097859072u, 0, CEILF_TOLERANCE, 0}, +{903, 3469778622u, 1200179013u, 3469778622u, 0, CEILF_TOLERANCE, 0}, +{904, 1147712200u, 931865525u, 1147715584u, 0, CEILF_TOLERANCE, 0}, +{905, 1124721745u, 3058969650u, 1124728832u, 0, CEILF_TOLERANCE, 0}, +{906, 3261744304u, 1043806501u, 3261595648u, 0, CEILF_TOLERANCE, 0}, +{907, 1064922416u, 1320485628u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{908, 3303160152u, 3075455322u, 3303153664u, 0, CEILF_TOLERANCE, 0}, +{909, 1315090496u, 3269683237u, 1315090496u, 0, CEILF_TOLERANCE, 0}, +{910, 3230403187u, 1322841992u, 3229614080u, 0, CEILF_TOLERANCE, 0}, +{911, 1335399673u, 974138676u, 1335399673u, 0, CEILF_TOLERANCE, 0}, +{912, 1072458508u, 3372833993u, 1073741824u, 0, CEILF_TOLERANCE, 0}, +{913, 3303015249u, 3015039539u, 3303014400u, 0, CEILF_TOLERANCE, 0}, +{914, 3252139741u, 1059615003u, 3251634176u, 0, CEILF_TOLERANCE, 0}, +{915, 3468519966u, 3113982619u, 3468519966u, 0, CEILF_TOLERANCE, 0}, +{916, 1006231203u, 897530770u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{917, 951554138u, 1001144381u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{918, 942046828u, 986341002u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{919, 3319723279u, 3414482416u, 3319721984u, 0, CEILF_TOLERANCE, 0}, +{920, 3255104167u, 928827688u, 3255042048u, 0, CEILF_TOLERANCE, 0}, +{921, 1155477903u, 3104812800u, 1155481600u, 0, CEILF_TOLERANCE, 0}, +{922, 3273889176u, 980486479u, 3273850880u, 0, CEILF_TOLERANCE, 0}, +{923, 3237813668u, 3441016803u, 3235905536u, 0, CEILF_TOLERANCE, 0}, +{924, 1228207362u, 2985476579u, 1228207376u, 0, CEILF_TOLERANCE, 0}, +{925, 975349337u, 1311932596u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{926, 1290175785u, 3008182462u, 1290175786u, 0, CEILF_TOLERANCE, 0}, +{927, 981908840u, 3314038398u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{928, 941187647u, 1107765599u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{929, 1214223128u, 3225536822u, 1214223168u, 0, CEILF_TOLERANCE, 0}, +{930, 3422922584u, 1086391131u, 3422922584u, 0, CEILF_TOLERANCE, 0}, +{931, 1315857601u, 3487600045u, 1315857601u, 0, CEILF_TOLERANCE, 0}, +{932, 3453226030u, 3233768835u, 3453226030u, 0, CEILF_TOLERANCE, 0}, +{933, 1078359574u, 3199175230u, 1082130432u, 0, CEILF_TOLERANCE, 0}, +{934, 1029557624u, 3302959071u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{935, 1207675424u, 3042692550u, 1207675520u, 0, CEILF_TOLERANCE, 0}, +{936, 1028355074u, 3442294040u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{937, 1248421894u, 3367769132u, 1248421896u, 0, CEILF_TOLERANCE, 0}, +{938, 3353251994u, 1095517730u, 3353251968u, 0, CEILF_TOLERANCE, 0}, +{939, 876926659u, 3288089977u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{940, 1076752219u, 876236939u, 1077936128u, 0, CEILF_TOLERANCE, 0}, +{941, 3388531942u, 2988520062u, 3388531936u, 0, CEILF_TOLERANCE, 0}, +{942, 1273395082u, 3031189261u, 1273395082u, 0, CEILF_TOLERANCE, 0}, +{943, 3385588183u, 3258252464u, 3385588176u, 0, CEILF_TOLERANCE, 0}, +{944, 3441804648u, 3274638356u, 3441804648u, 0, CEILF_TOLERANCE, 0}, +{945, 3392827417u, 1277961150u, 3392827416u, 0, CEILF_TOLERANCE, 0}, +{946, 1161241793u, 1328003707u, 1161244672u, 0, CEILF_TOLERANCE, 0}, +{947, 1171318485u, 3374409104u, 1171318784u, 0, CEILF_TOLERANCE, 0}, +{948, 1001216371u, 3052357038u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{949, 912515889u, 1074635609u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{950, 3391452505u, 897989232u, 3391452504u, 0, CEILF_TOLERANCE, 0}, +{951, 3249603369u, 3147662248u, 3249537024u, 0, CEILF_TOLERANCE, 0}, +{952, 1220264047u, 2960450369u, 1220264064u, 0, CEILF_TOLERANCE, 0}, +{953, 3282212423u, 3174079140u, 3282206720u, 0, CEILF_TOLERANCE, 0}, +{954, 3352293320u, 3247843425u, 3352293248u, 0, CEILF_TOLERANCE, 0}, +{955, 3296358441u, 875645354u, 3296346112u, 0, CEILF_TOLERANCE, 0}, +{956, 1197828352u, 3245614728u, 1197828352u, 0, CEILF_TOLERANCE, 0}, +{957, 3340510371u, 914930263u, 3340510208u, 0, CEILF_TOLERANCE, 0}, +{958, 1127109339u, 3368125489u, 1127153664u, 0, CEILF_TOLERANCE, 0}, +{959, 909467381u, 1232375752u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{960, 1200599955u, 2981200675u, 1200600064u, 0, CEILF_TOLERANCE, 0}, +{961, 962230977u, 2988248037u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{962, 3237183876u, 3179379969u, 3235905536u, 0, CEILF_TOLERANCE, 0}, +{963, 939285924u, 3056079386u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{964, 944050180u, 3452557879u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{965, 3480592662u, 3261728191u, 3480592662u, 0, CEILF_TOLERANCE, 0}, +{966, 1003299981u, 853295521u, 1065353216u, 0, CEILF_TOLERANCE, 0}, +{967, 1155775526u, 1255814444u, 1155776512u, 0, CEILF_TOLERANCE, 0}, +{968, 1234491880u, 3408568717u, 1234491888u, 0, CEILF_TOLERANCE, 0}, + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_CEILF_H multiple inclusion protection + +// EOF ceilf.h diff --git a/packages/language/c/libm/current/tests/vectors/copysignf.c b/packages/language/c/libm/current/tests/vectors/copysignf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/copysignf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// copysignf.c +// +// Test of copysignf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/copysignf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(copysignf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) ©signf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + ©signf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("copysignf() is stable"); + } // if + else + { + CYG_TEST_FAIL("copysignf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library copysignf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "copysignf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF copysignf.c diff --git a/packages/language/c/libm/current/tests/vectors/copysignf.h b/packages/language/c/libm/current/tests/vectors/copysignf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/copysignf.h @@ -0,0 +1,2551 @@ +#ifndef CYGONCE_LIBM_COPYSIGNF_H +#define CYGONCE_LIBM_COPYSIGNF_H +//=========================================================================== +// +// copysignf.h +// +// Test vectors for testing of copysignf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/copysignf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define COPYSIGNF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t copysignf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3212836864u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{1, 3212836864u, 3211998003u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{2, 3212836864u, 3211159142u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{3, 3212836864u, 3210320282u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{4, 3212836864u, 3209481421u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{5, 3212836864u, 3208642560u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{6, 3212836864u, 3207803699u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{7, 3212836864u, 3206964838u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{8, 3212836864u, 3206125978u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{9, 3212836864u, 3205287117u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{10, 3212836864u, 3204448256u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{11, 3212836864u, 3202770534u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{12, 3212836864u, 3201092813u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{13, 3212836864u, 3199415091u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{14, 3212836864u, 3197737370u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{15, 3212836864u, 3196059648u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{16, 3212836864u, 3192704205u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{17, 3212836864u, 3189348762u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{18, 3212836864u, 3184315597u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{19, 3212836864u, 3175926989u, 3212836864u, 0, COPYSIGNF_TOLERANCE, 0}, +{20, 3212836864u, 632815616u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{21, 3212836864u, 1028443341u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{22, 3212836864u, 1036831949u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{23, 3212836864u, 1041865114u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{24, 3212836864u, 1045220557u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{25, 3212836864u, 1048576000u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{26, 3212836864u, 1050253722u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{27, 3212836864u, 1051931443u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{28, 3212836864u, 1053609165u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{29, 3212836864u, 1055286886u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{30, 3212836864u, 1056964608u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{31, 3212836864u, 1057803469u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{32, 3212836864u, 1058642330u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{33, 3212836864u, 1059481190u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{34, 3212836864u, 1060320051u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{35, 3212836864u, 1061158912u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{36, 3212836864u, 1061997773u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{37, 3212836864u, 1062836634u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{38, 3212836864u, 1063675494u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{39, 3212836864u, 1064514355u, 1065353216u, 0, COPYSIGNF_TOLERANCE, 0}, +{40, 3211998003u, 3212836864u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{41, 3211998003u, 3211998003u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{42, 3211998003u, 3211159142u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{43, 3211998003u, 3210320282u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{44, 3211998003u, 3209481421u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{45, 3211998003u, 3208642560u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{46, 3211998003u, 3207803699u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{47, 3211998003u, 3206964838u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{48, 3211998003u, 3206125978u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{49, 3211998003u, 3205287117u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{50, 3211998003u, 3204448256u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{51, 3211998003u, 3202770534u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{52, 3211998003u, 3201092813u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{53, 3211998003u, 3199415091u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{54, 3211998003u, 3197737370u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{55, 3211998003u, 3196059648u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{56, 3211998003u, 3192704205u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{57, 3211998003u, 3189348762u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{58, 3211998003u, 3184315597u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{59, 3211998003u, 3175926989u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{60, 3211998003u, 632815616u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{61, 3211998003u, 1028443341u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{62, 3211998003u, 1036831949u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{63, 3211998003u, 1041865114u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{64, 3211998003u, 1045220557u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{65, 3211998003u, 1048576000u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{66, 3211998003u, 1050253722u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{67, 3211998003u, 1051931443u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{68, 3211998003u, 1053609165u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{69, 3211998003u, 1055286886u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{70, 3211998003u, 1056964608u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{71, 3211998003u, 1057803469u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{72, 3211998003u, 1058642330u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{73, 3211998003u, 1059481190u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{74, 3211998003u, 1060320051u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{75, 3211998003u, 1061158912u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{76, 3211998003u, 1061997773u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{77, 3211998003u, 1062836634u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{78, 3211998003u, 1063675494u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{79, 3211998003u, 1064514355u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{80, 3211159142u, 3212836864u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{81, 3211159142u, 3211998003u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{82, 3211159142u, 3211159142u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{83, 3211159142u, 3210320282u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{84, 3211159142u, 3209481421u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{85, 3211159142u, 3208642560u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{86, 3211159142u, 3207803699u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{87, 3211159142u, 3206964838u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{88, 3211159142u, 3206125978u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{89, 3211159142u, 3205287117u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{90, 3211159142u, 3204448256u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{91, 3211159142u, 3202770534u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{92, 3211159142u, 3201092813u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{93, 3211159142u, 3199415091u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{94, 3211159142u, 3197737370u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{95, 3211159142u, 3196059648u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{96, 3211159142u, 3192704205u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{97, 3211159142u, 3189348762u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{98, 3211159142u, 3184315597u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{99, 3211159142u, 3175926989u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{100, 3211159142u, 632815616u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{101, 3211159142u, 1028443341u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{102, 3211159142u, 1036831949u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{103, 3211159142u, 1041865114u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{104, 3211159142u, 1045220557u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{105, 3211159142u, 1048576000u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{106, 3211159142u, 1050253722u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{107, 3211159142u, 1051931443u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{108, 3211159142u, 1053609165u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{109, 3211159142u, 1055286886u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{110, 3211159142u, 1056964608u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{111, 3211159142u, 1057803469u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{112, 3211159142u, 1058642330u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{113, 3211159142u, 1059481190u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{114, 3211159142u, 1060320051u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{115, 3211159142u, 1061158912u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{116, 3211159142u, 1061997773u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{117, 3211159142u, 1062836634u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{118, 3211159142u, 1063675494u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{119, 3211159142u, 1064514355u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{120, 3210320282u, 3212836864u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{121, 3210320282u, 3211998003u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{122, 3210320282u, 3211159142u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{123, 3210320282u, 3210320282u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{124, 3210320282u, 3209481421u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{125, 3210320282u, 3208642560u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{126, 3210320282u, 3207803699u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{127, 3210320282u, 3206964838u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{128, 3210320282u, 3206125978u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{129, 3210320282u, 3205287117u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{130, 3210320282u, 3204448256u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{131, 3210320282u, 3202770534u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{132, 3210320282u, 3201092813u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{133, 3210320282u, 3199415091u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{134, 3210320282u, 3197737370u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{135, 3210320282u, 3196059648u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{136, 3210320282u, 3192704205u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{137, 3210320282u, 3189348762u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{138, 3210320282u, 3184315597u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{139, 3210320282u, 3175926989u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{140, 3210320282u, 632815616u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{141, 3210320282u, 1028443341u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{142, 3210320282u, 1036831949u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{143, 3210320282u, 1041865114u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{144, 3210320282u, 1045220557u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{145, 3210320282u, 1048576000u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{146, 3210320282u, 1050253722u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{147, 3210320282u, 1051931443u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{148, 3210320282u, 1053609165u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{149, 3210320282u, 1055286886u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{150, 3210320282u, 1056964608u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{151, 3210320282u, 1057803469u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{152, 3210320282u, 1058642330u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{153, 3210320282u, 1059481190u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{154, 3210320282u, 1060320051u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{155, 3210320282u, 1061158912u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{156, 3210320282u, 1061997773u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{157, 3210320282u, 1062836634u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{158, 3210320282u, 1063675494u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{159, 3210320282u, 1064514355u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{160, 3209481421u, 3212836864u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{161, 3209481421u, 3211998003u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{162, 3209481421u, 3211159142u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{163, 3209481421u, 3210320282u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{164, 3209481421u, 3209481421u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{165, 3209481421u, 3208642560u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{166, 3209481421u, 3207803699u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{167, 3209481421u, 3206964838u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{168, 3209481421u, 3206125978u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{169, 3209481421u, 3205287117u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{170, 3209481421u, 3204448256u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{171, 3209481421u, 3202770534u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{172, 3209481421u, 3201092813u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{173, 3209481421u, 3199415091u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{174, 3209481421u, 3197737370u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{175, 3209481421u, 3196059648u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{176, 3209481421u, 3192704205u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{177, 3209481421u, 3189348762u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{178, 3209481421u, 3184315597u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{179, 3209481421u, 3175926989u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{180, 3209481421u, 632815616u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{181, 3209481421u, 1028443341u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{182, 3209481421u, 1036831949u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{183, 3209481421u, 1041865114u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{184, 3209481421u, 1045220557u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{185, 3209481421u, 1048576000u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{186, 3209481421u, 1050253722u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{187, 3209481421u, 1051931443u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{188, 3209481421u, 1053609165u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{189, 3209481421u, 1055286886u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{190, 3209481421u, 1056964608u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{191, 3209481421u, 1057803469u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{192, 3209481421u, 1058642330u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{193, 3209481421u, 1059481190u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{194, 3209481421u, 1060320051u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{195, 3209481421u, 1061158912u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{196, 3209481421u, 1061997773u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{197, 3209481421u, 1062836634u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{198, 3209481421u, 1063675494u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{199, 3209481421u, 1064514355u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{200, 3208642560u, 3212836864u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{201, 3208642560u, 3211998003u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{202, 3208642560u, 3211159142u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{203, 3208642560u, 3210320282u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{204, 3208642560u, 3209481421u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{205, 3208642560u, 3208642560u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{206, 3208642560u, 3207803699u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{207, 3208642560u, 3206964838u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{208, 3208642560u, 3206125978u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{209, 3208642560u, 3205287117u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{210, 3208642560u, 3204448256u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{211, 3208642560u, 3202770534u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{212, 3208642560u, 3201092813u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{213, 3208642560u, 3199415091u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{214, 3208642560u, 3197737370u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{215, 3208642560u, 3196059648u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{216, 3208642560u, 3192704205u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{217, 3208642560u, 3189348762u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{218, 3208642560u, 3184315597u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{219, 3208642560u, 3175926989u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{220, 3208642560u, 632815616u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{221, 3208642560u, 1028443341u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{222, 3208642560u, 1036831949u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{223, 3208642560u, 1041865114u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{224, 3208642560u, 1045220557u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{225, 3208642560u, 1048576000u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{226, 3208642560u, 1050253722u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{227, 3208642560u, 1051931443u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{228, 3208642560u, 1053609165u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{229, 3208642560u, 1055286886u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{230, 3208642560u, 1056964608u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{231, 3208642560u, 1057803469u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{232, 3208642560u, 1058642330u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{233, 3208642560u, 1059481190u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{234, 3208642560u, 1060320051u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{235, 3208642560u, 1061158912u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{236, 3208642560u, 1061997773u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{237, 3208642560u, 1062836634u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{238, 3208642560u, 1063675494u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{239, 3208642560u, 1064514355u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{240, 3207803699u, 3212836864u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{241, 3207803699u, 3211998003u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{242, 3207803699u, 3211159142u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{243, 3207803699u, 3210320282u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{244, 3207803699u, 3209481421u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{245, 3207803699u, 3208642560u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{246, 3207803699u, 3207803699u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{247, 3207803699u, 3206964838u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{248, 3207803699u, 3206125978u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{249, 3207803699u, 3205287117u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{250, 3207803699u, 3204448256u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{251, 3207803699u, 3202770534u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{252, 3207803699u, 3201092813u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{253, 3207803699u, 3199415091u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{254, 3207803699u, 3197737370u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{255, 3207803699u, 3196059648u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{256, 3207803699u, 3192704205u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{257, 3207803699u, 3189348762u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{258, 3207803699u, 3184315597u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{259, 3207803699u, 3175926989u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{260, 3207803699u, 632815616u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{261, 3207803699u, 1028443341u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{262, 3207803699u, 1036831949u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{263, 3207803699u, 1041865114u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{264, 3207803699u, 1045220557u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{265, 3207803699u, 1048576000u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{266, 3207803699u, 1050253722u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{267, 3207803699u, 1051931443u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{268, 3207803699u, 1053609165u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{269, 3207803699u, 1055286886u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{270, 3207803699u, 1056964608u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{271, 3207803699u, 1057803469u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{272, 3207803699u, 1058642330u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{273, 3207803699u, 1059481190u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{274, 3207803699u, 1060320051u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{275, 3207803699u, 1061158912u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{276, 3207803699u, 1061997773u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{277, 3207803699u, 1062836634u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{278, 3207803699u, 1063675494u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{279, 3207803699u, 1064514355u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{280, 3206964838u, 3212836864u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{281, 3206964838u, 3211998003u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{282, 3206964838u, 3211159142u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{283, 3206964838u, 3210320282u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{284, 3206964838u, 3209481421u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{285, 3206964838u, 3208642560u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{286, 3206964838u, 3207803699u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{287, 3206964838u, 3206964838u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{288, 3206964838u, 3206125978u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{289, 3206964838u, 3205287117u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{290, 3206964838u, 3204448256u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{291, 3206964838u, 3202770534u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{292, 3206964838u, 3201092813u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{293, 3206964838u, 3199415091u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{294, 3206964838u, 3197737370u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{295, 3206964838u, 3196059648u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{296, 3206964838u, 3192704205u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{297, 3206964838u, 3189348762u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{298, 3206964838u, 3184315597u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{299, 3206964838u, 3175926989u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{300, 3206964838u, 632815616u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{301, 3206964838u, 1028443341u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{302, 3206964838u, 1036831949u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{303, 3206964838u, 1041865114u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{304, 3206964838u, 1045220557u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{305, 3206964838u, 1048576000u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{306, 3206964838u, 1050253722u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{307, 3206964838u, 1051931443u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{308, 3206964838u, 1053609165u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{309, 3206964838u, 1055286886u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{310, 3206964838u, 1056964608u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{311, 3206964838u, 1057803469u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{312, 3206964838u, 1058642330u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{313, 3206964838u, 1059481190u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{314, 3206964838u, 1060320051u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{315, 3206964838u, 1061158912u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{316, 3206964838u, 1061997773u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{317, 3206964838u, 1062836634u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{318, 3206964838u, 1063675494u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{319, 3206964838u, 1064514355u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{320, 3206125978u, 3212836864u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{321, 3206125978u, 3211998003u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{322, 3206125978u, 3211159142u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{323, 3206125978u, 3210320282u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{324, 3206125978u, 3209481421u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{325, 3206125978u, 3208642560u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{326, 3206125978u, 3207803699u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{327, 3206125978u, 3206964838u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{328, 3206125978u, 3206125978u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{329, 3206125978u, 3205287117u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{330, 3206125978u, 3204448256u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{331, 3206125978u, 3202770534u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{332, 3206125978u, 3201092813u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{333, 3206125978u, 3199415091u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{334, 3206125978u, 3197737370u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{335, 3206125978u, 3196059648u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{336, 3206125978u, 3192704205u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{337, 3206125978u, 3189348762u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{338, 3206125978u, 3184315597u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{339, 3206125978u, 3175926989u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{340, 3206125978u, 632815616u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{341, 3206125978u, 1028443341u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{342, 3206125978u, 1036831949u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{343, 3206125978u, 1041865114u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{344, 3206125978u, 1045220557u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{345, 3206125978u, 1048576000u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{346, 3206125978u, 1050253722u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{347, 3206125978u, 1051931443u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{348, 3206125978u, 1053609165u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{349, 3206125978u, 1055286886u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{350, 3206125978u, 1056964608u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{351, 3206125978u, 1057803469u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{352, 3206125978u, 1058642330u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{353, 3206125978u, 1059481190u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{354, 3206125978u, 1060320051u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{355, 3206125978u, 1061158912u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{356, 3206125978u, 1061997773u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{357, 3206125978u, 1062836634u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{358, 3206125978u, 1063675494u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{359, 3206125978u, 1064514355u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{360, 3205287117u, 3212836864u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{361, 3205287117u, 3211998003u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{362, 3205287117u, 3211159142u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{363, 3205287117u, 3210320282u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{364, 3205287117u, 3209481421u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{365, 3205287117u, 3208642560u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{366, 3205287117u, 3207803699u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{367, 3205287117u, 3206964838u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{368, 3205287117u, 3206125978u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{369, 3205287117u, 3205287117u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{370, 3205287117u, 3204448256u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{371, 3205287117u, 3202770534u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{372, 3205287117u, 3201092813u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{373, 3205287117u, 3199415091u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{374, 3205287117u, 3197737370u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{375, 3205287117u, 3196059648u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{376, 3205287117u, 3192704205u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{377, 3205287117u, 3189348762u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{378, 3205287117u, 3184315597u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{379, 3205287117u, 3175926989u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{380, 3205287117u, 632815616u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{381, 3205287117u, 1028443341u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{382, 3205287117u, 1036831949u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{383, 3205287117u, 1041865114u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{384, 3205287117u, 1045220557u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{385, 3205287117u, 1048576000u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{386, 3205287117u, 1050253722u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{387, 3205287117u, 1051931443u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{388, 3205287117u, 1053609165u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{389, 3205287117u, 1055286886u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{390, 3205287117u, 1056964608u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{391, 3205287117u, 1057803469u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{392, 3205287117u, 1058642330u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{393, 3205287117u, 1059481190u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{394, 3205287117u, 1060320051u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{395, 3205287117u, 1061158912u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{396, 3205287117u, 1061997773u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{397, 3205287117u, 1062836634u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{398, 3205287117u, 1063675494u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{399, 3205287117u, 1064514355u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{400, 3204448256u, 3212836864u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{401, 3204448256u, 3211998003u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{402, 3204448256u, 3211159142u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{403, 3204448256u, 3210320282u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{404, 3204448256u, 3209481421u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{405, 3204448256u, 3208642560u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{406, 3204448256u, 3207803699u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{407, 3204448256u, 3206964838u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{408, 3204448256u, 3206125978u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{409, 3204448256u, 3205287117u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{410, 3204448256u, 3204448256u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{411, 3204448256u, 3202770534u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{412, 3204448256u, 3201092813u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{413, 3204448256u, 3199415091u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{414, 3204448256u, 3197737370u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{415, 3204448256u, 3196059648u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{416, 3204448256u, 3192704205u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{417, 3204448256u, 3189348762u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{418, 3204448256u, 3184315597u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{419, 3204448256u, 3175926989u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{420, 3204448256u, 632815616u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{421, 3204448256u, 1028443341u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{422, 3204448256u, 1036831949u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{423, 3204448256u, 1041865114u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{424, 3204448256u, 1045220557u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{425, 3204448256u, 1048576000u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{426, 3204448256u, 1050253722u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{427, 3204448256u, 1051931443u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{428, 3204448256u, 1053609165u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{429, 3204448256u, 1055286886u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{430, 3204448256u, 1056964608u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{431, 3204448256u, 1057803469u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{432, 3204448256u, 1058642330u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{433, 3204448256u, 1059481190u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{434, 3204448256u, 1060320051u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{435, 3204448256u, 1061158912u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{436, 3204448256u, 1061997773u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{437, 3204448256u, 1062836634u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{438, 3204448256u, 1063675494u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{439, 3204448256u, 1064514355u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{440, 3202770534u, 3212836864u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{441, 3202770534u, 3211998003u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{442, 3202770534u, 3211159142u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{443, 3202770534u, 3210320282u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{444, 3202770534u, 3209481421u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{445, 3202770534u, 3208642560u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{446, 3202770534u, 3207803699u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{447, 3202770534u, 3206964838u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{448, 3202770534u, 3206125978u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{449, 3202770534u, 3205287117u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{450, 3202770534u, 3204448256u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{451, 3202770534u, 3202770534u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{452, 3202770534u, 3201092813u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{453, 3202770534u, 3199415091u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{454, 3202770534u, 3197737370u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{455, 3202770534u, 3196059648u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{456, 3202770534u, 3192704205u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{457, 3202770534u, 3189348762u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{458, 3202770534u, 3184315597u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{459, 3202770534u, 3175926989u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{460, 3202770534u, 632815616u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{461, 3202770534u, 1028443341u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{462, 3202770534u, 1036831949u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{463, 3202770534u, 1041865114u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{464, 3202770534u, 1045220557u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{465, 3202770534u, 1048576000u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{466, 3202770534u, 1050253722u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{467, 3202770534u, 1051931443u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{468, 3202770534u, 1053609165u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{469, 3202770534u, 1055286886u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{470, 3202770534u, 1056964608u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{471, 3202770534u, 1057803469u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{472, 3202770534u, 1058642330u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{473, 3202770534u, 1059481190u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{474, 3202770534u, 1060320051u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{475, 3202770534u, 1061158912u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{476, 3202770534u, 1061997773u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{477, 3202770534u, 1062836634u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{478, 3202770534u, 1063675494u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{479, 3202770534u, 1064514355u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{480, 3201092813u, 3212836864u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{481, 3201092813u, 3211998003u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{482, 3201092813u, 3211159142u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{483, 3201092813u, 3210320282u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{484, 3201092813u, 3209481421u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{485, 3201092813u, 3208642560u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{486, 3201092813u, 3207803699u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{487, 3201092813u, 3206964838u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{488, 3201092813u, 3206125978u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{489, 3201092813u, 3205287117u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{490, 3201092813u, 3204448256u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{491, 3201092813u, 3202770534u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{492, 3201092813u, 3201092813u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{493, 3201092813u, 3199415091u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{494, 3201092813u, 3197737370u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{495, 3201092813u, 3196059648u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{496, 3201092813u, 3192704205u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{497, 3201092813u, 3189348762u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{498, 3201092813u, 3184315597u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{499, 3201092813u, 3175926989u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{500, 3201092813u, 632815616u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{501, 3201092813u, 1028443341u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{502, 3201092813u, 1036831949u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{503, 3201092813u, 1041865114u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{504, 3201092813u, 1045220557u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{505, 3201092813u, 1048576000u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{506, 3201092813u, 1050253722u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{507, 3201092813u, 1051931443u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{508, 3201092813u, 1053609165u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{509, 3201092813u, 1055286886u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{510, 3201092813u, 1056964608u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{511, 3201092813u, 1057803469u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{512, 3201092813u, 1058642330u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{513, 3201092813u, 1059481190u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{514, 3201092813u, 1060320051u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{515, 3201092813u, 1061158912u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{516, 3201092813u, 1061997773u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{517, 3201092813u, 1062836634u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{518, 3201092813u, 1063675494u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{519, 3201092813u, 1064514355u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{520, 3199415091u, 3212836864u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{521, 3199415091u, 3211998003u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{522, 3199415091u, 3211159142u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{523, 3199415091u, 3210320282u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{524, 3199415091u, 3209481421u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{525, 3199415091u, 3208642560u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{526, 3199415091u, 3207803699u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{527, 3199415091u, 3206964838u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{528, 3199415091u, 3206125978u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{529, 3199415091u, 3205287117u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{530, 3199415091u, 3204448256u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{531, 3199415091u, 3202770534u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{532, 3199415091u, 3201092813u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{533, 3199415091u, 3199415091u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{534, 3199415091u, 3197737370u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{535, 3199415091u, 3196059648u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{536, 3199415091u, 3192704205u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{537, 3199415091u, 3189348762u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{538, 3199415091u, 3184315597u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{539, 3199415091u, 3175926989u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{540, 3199415091u, 632815616u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{541, 3199415091u, 1028443341u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{542, 3199415091u, 1036831949u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{543, 3199415091u, 1041865114u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{544, 3199415091u, 1045220557u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{545, 3199415091u, 1048576000u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{546, 3199415091u, 1050253722u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{547, 3199415091u, 1051931443u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{548, 3199415091u, 1053609165u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{549, 3199415091u, 1055286886u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{550, 3199415091u, 1056964608u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{551, 3199415091u, 1057803469u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{552, 3199415091u, 1058642330u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{553, 3199415091u, 1059481190u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{554, 3199415091u, 1060320051u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{555, 3199415091u, 1061158912u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{556, 3199415091u, 1061997773u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{557, 3199415091u, 1062836634u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{558, 3199415091u, 1063675494u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{559, 3199415091u, 1064514355u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{560, 3197737370u, 3212836864u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{561, 3197737370u, 3211998003u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{562, 3197737370u, 3211159142u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{563, 3197737370u, 3210320282u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{564, 3197737370u, 3209481421u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{565, 3197737370u, 3208642560u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{566, 3197737370u, 3207803699u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{567, 3197737370u, 3206964838u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{568, 3197737370u, 3206125978u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{569, 3197737370u, 3205287117u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{570, 3197737370u, 3204448256u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{571, 3197737370u, 3202770534u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{572, 3197737370u, 3201092813u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{573, 3197737370u, 3199415091u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{574, 3197737370u, 3197737370u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{575, 3197737370u, 3196059648u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{576, 3197737370u, 3192704205u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{577, 3197737370u, 3189348762u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{578, 3197737370u, 3184315597u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{579, 3197737370u, 3175926989u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{580, 3197737370u, 632815616u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{581, 3197737370u, 1028443341u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{582, 3197737370u, 1036831949u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{583, 3197737370u, 1041865114u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{584, 3197737370u, 1045220557u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{585, 3197737370u, 1048576000u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{586, 3197737370u, 1050253722u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{587, 3197737370u, 1051931443u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{588, 3197737370u, 1053609165u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{589, 3197737370u, 1055286886u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{590, 3197737370u, 1056964608u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{591, 3197737370u, 1057803469u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{592, 3197737370u, 1058642330u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{593, 3197737370u, 1059481190u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{594, 3197737370u, 1060320051u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{595, 3197737370u, 1061158912u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{596, 3197737370u, 1061997773u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{597, 3197737370u, 1062836634u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{598, 3197737370u, 1063675494u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{599, 3197737370u, 1064514355u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{600, 3196059648u, 3212836864u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{601, 3196059648u, 3211998003u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{602, 3196059648u, 3211159142u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{603, 3196059648u, 3210320282u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{604, 3196059648u, 3209481421u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{605, 3196059648u, 3208642560u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{606, 3196059648u, 3207803699u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{607, 3196059648u, 3206964838u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{608, 3196059648u, 3206125978u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{609, 3196059648u, 3205287117u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{610, 3196059648u, 3204448256u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{611, 3196059648u, 3202770534u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{612, 3196059648u, 3201092813u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{613, 3196059648u, 3199415091u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{614, 3196059648u, 3197737370u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{615, 3196059648u, 3196059648u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{616, 3196059648u, 3192704205u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{617, 3196059648u, 3189348762u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{618, 3196059648u, 3184315597u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{619, 3196059648u, 3175926989u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{620, 3196059648u, 632815616u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{621, 3196059648u, 1028443341u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{622, 3196059648u, 1036831949u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{623, 3196059648u, 1041865114u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{624, 3196059648u, 1045220557u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{625, 3196059648u, 1048576000u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{626, 3196059648u, 1050253722u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{627, 3196059648u, 1051931443u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{628, 3196059648u, 1053609165u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{629, 3196059648u, 1055286886u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{630, 3196059648u, 1056964608u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{631, 3196059648u, 1057803469u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{632, 3196059648u, 1058642330u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{633, 3196059648u, 1059481190u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{634, 3196059648u, 1060320051u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{635, 3196059648u, 1061158912u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{636, 3196059648u, 1061997773u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{637, 3196059648u, 1062836634u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{638, 3196059648u, 1063675494u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{639, 3196059648u, 1064514355u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{640, 3192704205u, 3212836864u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{641, 3192704205u, 3211998003u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{642, 3192704205u, 3211159142u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{643, 3192704205u, 3210320282u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{644, 3192704205u, 3209481421u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{645, 3192704205u, 3208642560u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{646, 3192704205u, 3207803699u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{647, 3192704205u, 3206964838u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{648, 3192704205u, 3206125978u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{649, 3192704205u, 3205287117u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{650, 3192704205u, 3204448256u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{651, 3192704205u, 3202770534u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{652, 3192704205u, 3201092813u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{653, 3192704205u, 3199415091u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{654, 3192704205u, 3197737370u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{655, 3192704205u, 3196059648u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{656, 3192704205u, 3192704205u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{657, 3192704205u, 3189348762u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{658, 3192704205u, 3184315597u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{659, 3192704205u, 3175926989u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{660, 3192704205u, 632815616u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{661, 3192704205u, 1028443341u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{662, 3192704205u, 1036831949u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{663, 3192704205u, 1041865114u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{664, 3192704205u, 1045220557u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{665, 3192704205u, 1048576000u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{666, 3192704205u, 1050253722u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{667, 3192704205u, 1051931443u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{668, 3192704205u, 1053609165u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{669, 3192704205u, 1055286886u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{670, 3192704205u, 1056964608u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{671, 3192704205u, 1057803469u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{672, 3192704205u, 1058642330u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{673, 3192704205u, 1059481190u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{674, 3192704205u, 1060320051u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{675, 3192704205u, 1061158912u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{676, 3192704205u, 1061997773u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{677, 3192704205u, 1062836634u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{678, 3192704205u, 1063675494u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{679, 3192704205u, 1064514355u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{680, 3189348762u, 3212836864u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{681, 3189348762u, 3211998003u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{682, 3189348762u, 3211159142u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{683, 3189348762u, 3210320282u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{684, 3189348762u, 3209481421u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{685, 3189348762u, 3208642560u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{686, 3189348762u, 3207803699u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{687, 3189348762u, 3206964838u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{688, 3189348762u, 3206125978u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{689, 3189348762u, 3205287117u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{690, 3189348762u, 3204448256u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{691, 3189348762u, 3202770534u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{692, 3189348762u, 3201092813u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{693, 3189348762u, 3199415091u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{694, 3189348762u, 3197737370u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{695, 3189348762u, 3196059648u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{696, 3189348762u, 3192704205u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{697, 3189348762u, 3189348762u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{698, 3189348762u, 3184315597u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{699, 3189348762u, 3175926989u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{700, 3189348762u, 632815616u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{701, 3189348762u, 1028443341u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{702, 3189348762u, 1036831949u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{703, 3189348762u, 1041865114u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{704, 3189348762u, 1045220557u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{705, 3189348762u, 1048576000u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{706, 3189348762u, 1050253722u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{707, 3189348762u, 1051931443u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{708, 3189348762u, 1053609165u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{709, 3189348762u, 1055286886u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{710, 3189348762u, 1056964608u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{711, 3189348762u, 1057803469u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{712, 3189348762u, 1058642330u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{713, 3189348762u, 1059481190u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{714, 3189348762u, 1060320051u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{715, 3189348762u, 1061158912u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{716, 3189348762u, 1061997773u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{717, 3189348762u, 1062836634u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{718, 3189348762u, 1063675494u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{719, 3189348762u, 1064514355u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{720, 3184315597u, 3212836864u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{721, 3184315597u, 3211998003u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{722, 3184315597u, 3211159142u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{723, 3184315597u, 3210320282u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{724, 3184315597u, 3209481421u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{725, 3184315597u, 3208642560u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{726, 3184315597u, 3207803699u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{727, 3184315597u, 3206964838u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{728, 3184315597u, 3206125978u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{729, 3184315597u, 3205287117u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{730, 3184315597u, 3204448256u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{731, 3184315597u, 3202770534u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{732, 3184315597u, 3201092813u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{733, 3184315597u, 3199415091u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{734, 3184315597u, 3197737370u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{735, 3184315597u, 3196059648u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{736, 3184315597u, 3192704205u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{737, 3184315597u, 3189348762u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{738, 3184315597u, 3184315597u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{739, 3184315597u, 3175926989u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{740, 3184315597u, 632815616u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{741, 3184315597u, 1028443341u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{742, 3184315597u, 1036831949u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{743, 3184315597u, 1041865114u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{744, 3184315597u, 1045220557u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{745, 3184315597u, 1048576000u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{746, 3184315597u, 1050253722u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{747, 3184315597u, 1051931443u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{748, 3184315597u, 1053609165u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{749, 3184315597u, 1055286886u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{750, 3184315597u, 1056964608u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{751, 3184315597u, 1057803469u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{752, 3184315597u, 1058642330u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{753, 3184315597u, 1059481190u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{754, 3184315597u, 1060320051u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{755, 3184315597u, 1061158912u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{756, 3184315597u, 1061997773u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{757, 3184315597u, 1062836634u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{758, 3184315597u, 1063675494u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{759, 3184315597u, 1064514355u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{760, 3175926989u, 3212836864u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{761, 3175926989u, 3211998003u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{762, 3175926989u, 3211159142u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{763, 3175926989u, 3210320282u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{764, 3175926989u, 3209481421u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{765, 3175926989u, 3208642560u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{766, 3175926989u, 3207803699u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{767, 3175926989u, 3206964838u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{768, 3175926989u, 3206125978u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{769, 3175926989u, 3205287117u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{770, 3175926989u, 3204448256u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{771, 3175926989u, 3202770534u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{772, 3175926989u, 3201092813u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{773, 3175926989u, 3199415091u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{774, 3175926989u, 3197737370u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{775, 3175926989u, 3196059648u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{776, 3175926989u, 3192704205u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{777, 3175926989u, 3189348762u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{778, 3175926989u, 3184315597u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{779, 3175926989u, 3175926989u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{780, 3175926989u, 632815616u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{781, 3175926989u, 1028443341u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{782, 3175926989u, 1036831949u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{783, 3175926989u, 1041865114u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{784, 3175926989u, 1045220557u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{785, 3175926989u, 1048576000u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{786, 3175926989u, 1050253722u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{787, 3175926989u, 1051931443u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{788, 3175926989u, 1053609165u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{789, 3175926989u, 1055286886u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{790, 3175926989u, 1056964608u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{791, 3175926989u, 1057803469u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{792, 3175926989u, 1058642330u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{793, 3175926989u, 1059481190u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{794, 3175926989u, 1060320051u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{795, 3175926989u, 1061158912u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{796, 3175926989u, 1061997773u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{797, 3175926989u, 1062836634u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{798, 3175926989u, 1063675494u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{799, 3175926989u, 1064514355u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{800, 632815616u, 3212836864u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{801, 632815616u, 3211998003u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{802, 632815616u, 3211159142u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{803, 632815616u, 3210320282u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{804, 632815616u, 3209481421u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{805, 632815616u, 3208642560u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{806, 632815616u, 3207803699u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{807, 632815616u, 3206964838u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{808, 632815616u, 3206125978u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{809, 632815616u, 3205287117u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{810, 632815616u, 3204448256u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{811, 632815616u, 3202770534u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{812, 632815616u, 3201092813u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{813, 632815616u, 3199415091u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{814, 632815616u, 3197737370u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{815, 632815616u, 3196059648u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{816, 632815616u, 3192704205u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{817, 632815616u, 3189348762u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{818, 632815616u, 3184315597u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{819, 632815616u, 3175926989u, 2780299264u, 0, COPYSIGNF_TOLERANCE, 0}, +{820, 632815616u, 632815616u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{821, 632815616u, 1028443341u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{822, 632815616u, 1036831949u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{823, 632815616u, 1041865114u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{824, 632815616u, 1045220557u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{825, 632815616u, 1048576000u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{826, 632815616u, 1050253722u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{827, 632815616u, 1051931443u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{828, 632815616u, 1053609165u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{829, 632815616u, 1055286886u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{830, 632815616u, 1056964608u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{831, 632815616u, 1057803469u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{832, 632815616u, 1058642330u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{833, 632815616u, 1059481190u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{834, 632815616u, 1060320051u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{835, 632815616u, 1061158912u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{836, 632815616u, 1061997773u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{837, 632815616u, 1062836634u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{838, 632815616u, 1063675494u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{839, 632815616u, 1064514355u, 632815616u, 0, COPYSIGNF_TOLERANCE, 0}, +{840, 1028443341u, 3212836864u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{841, 1028443341u, 3211998003u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{842, 1028443341u, 3211159142u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{843, 1028443341u, 3210320282u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{844, 1028443341u, 3209481421u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{845, 1028443341u, 3208642560u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{846, 1028443341u, 3207803699u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{847, 1028443341u, 3206964838u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{848, 1028443341u, 3206125978u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{849, 1028443341u, 3205287117u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{850, 1028443341u, 3204448256u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{851, 1028443341u, 3202770534u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{852, 1028443341u, 3201092813u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{853, 1028443341u, 3199415091u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{854, 1028443341u, 3197737370u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{855, 1028443341u, 3196059648u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{856, 1028443341u, 3192704205u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{857, 1028443341u, 3189348762u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{858, 1028443341u, 3184315597u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{859, 1028443341u, 3175926989u, 3175926989u, 0, COPYSIGNF_TOLERANCE, 0}, +{860, 1028443341u, 632815616u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{861, 1028443341u, 1028443341u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{862, 1028443341u, 1036831949u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{863, 1028443341u, 1041865114u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{864, 1028443341u, 1045220557u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{865, 1028443341u, 1048576000u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{866, 1028443341u, 1050253722u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{867, 1028443341u, 1051931443u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{868, 1028443341u, 1053609165u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{869, 1028443341u, 1055286886u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{870, 1028443341u, 1056964608u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{871, 1028443341u, 1057803469u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{872, 1028443341u, 1058642330u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{873, 1028443341u, 1059481190u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{874, 1028443341u, 1060320051u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{875, 1028443341u, 1061158912u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{876, 1028443341u, 1061997773u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{877, 1028443341u, 1062836634u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{878, 1028443341u, 1063675494u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{879, 1028443341u, 1064514355u, 1028443341u, 0, COPYSIGNF_TOLERANCE, 0}, +{880, 1036831949u, 3212836864u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{881, 1036831949u, 3211998003u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{882, 1036831949u, 3211159142u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{883, 1036831949u, 3210320282u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{884, 1036831949u, 3209481421u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{885, 1036831949u, 3208642560u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{886, 1036831949u, 3207803699u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{887, 1036831949u, 3206964838u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{888, 1036831949u, 3206125978u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{889, 1036831949u, 3205287117u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{890, 1036831949u, 3204448256u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{891, 1036831949u, 3202770534u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{892, 1036831949u, 3201092813u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{893, 1036831949u, 3199415091u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{894, 1036831949u, 3197737370u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{895, 1036831949u, 3196059648u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{896, 1036831949u, 3192704205u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{897, 1036831949u, 3189348762u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{898, 1036831949u, 3184315597u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{899, 1036831949u, 3175926989u, 3184315597u, 0, COPYSIGNF_TOLERANCE, 0}, +{900, 1036831949u, 632815616u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{901, 1036831949u, 1028443341u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{902, 1036831949u, 1036831949u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{903, 1036831949u, 1041865114u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{904, 1036831949u, 1045220557u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{905, 1036831949u, 1048576000u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{906, 1036831949u, 1050253722u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{907, 1036831949u, 1051931443u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{908, 1036831949u, 1053609165u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{909, 1036831949u, 1055286886u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{910, 1036831949u, 1056964608u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{911, 1036831949u, 1057803469u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{912, 1036831949u, 1058642330u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{913, 1036831949u, 1059481190u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{914, 1036831949u, 1060320051u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{915, 1036831949u, 1061158912u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{916, 1036831949u, 1061997773u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{917, 1036831949u, 1062836634u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{918, 1036831949u, 1063675494u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{919, 1036831949u, 1064514355u, 1036831949u, 0, COPYSIGNF_TOLERANCE, 0}, +{920, 1041865114u, 3212836864u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{921, 1041865114u, 3211998003u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{922, 1041865114u, 3211159142u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{923, 1041865114u, 3210320282u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{924, 1041865114u, 3209481421u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{925, 1041865114u, 3208642560u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{926, 1041865114u, 3207803699u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{927, 1041865114u, 3206964838u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{928, 1041865114u, 3206125978u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{929, 1041865114u, 3205287117u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{930, 1041865114u, 3204448256u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{931, 1041865114u, 3202770534u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{932, 1041865114u, 3201092813u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{933, 1041865114u, 3199415091u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{934, 1041865114u, 3197737370u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{935, 1041865114u, 3196059648u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{936, 1041865114u, 3192704205u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{937, 1041865114u, 3189348762u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{938, 1041865114u, 3184315597u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{939, 1041865114u, 3175926989u, 3189348762u, 0, COPYSIGNF_TOLERANCE, 0}, +{940, 1041865114u, 632815616u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{941, 1041865114u, 1028443341u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{942, 1041865114u, 1036831949u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{943, 1041865114u, 1041865114u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{944, 1041865114u, 1045220557u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{945, 1041865114u, 1048576000u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{946, 1041865114u, 1050253722u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{947, 1041865114u, 1051931443u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{948, 1041865114u, 1053609165u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{949, 1041865114u, 1055286886u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{950, 1041865114u, 1056964608u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{951, 1041865114u, 1057803469u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{952, 1041865114u, 1058642330u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{953, 1041865114u, 1059481190u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{954, 1041865114u, 1060320051u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{955, 1041865114u, 1061158912u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{956, 1041865114u, 1061997773u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{957, 1041865114u, 1062836634u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{958, 1041865114u, 1063675494u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{959, 1041865114u, 1064514355u, 1041865114u, 0, COPYSIGNF_TOLERANCE, 0}, +{960, 1045220557u, 3212836864u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{961, 1045220557u, 3211998003u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{962, 1045220557u, 3211159142u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{963, 1045220557u, 3210320282u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{964, 1045220557u, 3209481421u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{965, 1045220557u, 3208642560u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{966, 1045220557u, 3207803699u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{967, 1045220557u, 3206964838u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{968, 1045220557u, 3206125978u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{969, 1045220557u, 3205287117u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{970, 1045220557u, 3204448256u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{971, 1045220557u, 3202770534u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{972, 1045220557u, 3201092813u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{973, 1045220557u, 3199415091u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{974, 1045220557u, 3197737370u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{975, 1045220557u, 3196059648u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{976, 1045220557u, 3192704205u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{977, 1045220557u, 3189348762u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{978, 1045220557u, 3184315597u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{979, 1045220557u, 3175926989u, 3192704205u, 0, COPYSIGNF_TOLERANCE, 0}, +{980, 1045220557u, 632815616u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{981, 1045220557u, 1028443341u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{982, 1045220557u, 1036831949u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{983, 1045220557u, 1041865114u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{984, 1045220557u, 1045220557u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{985, 1045220557u, 1048576000u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{986, 1045220557u, 1050253722u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{987, 1045220557u, 1051931443u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{988, 1045220557u, 1053609165u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{989, 1045220557u, 1055286886u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{990, 1045220557u, 1056964608u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{991, 1045220557u, 1057803469u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{992, 1045220557u, 1058642330u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{993, 1045220557u, 1059481190u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{994, 1045220557u, 1060320051u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{995, 1045220557u, 1061158912u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{996, 1045220557u, 1061997773u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{997, 1045220557u, 1062836634u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{998, 1045220557u, 1063675494u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{999, 1045220557u, 1064514355u, 1045220557u, 0, COPYSIGNF_TOLERANCE, 0}, +{1000, 1048576000u, 3212836864u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1001, 1048576000u, 3211998003u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1002, 1048576000u, 3211159142u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1003, 1048576000u, 3210320282u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1004, 1048576000u, 3209481421u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1005, 1048576000u, 3208642560u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1006, 1048576000u, 3207803699u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1007, 1048576000u, 3206964838u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1008, 1048576000u, 3206125978u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1009, 1048576000u, 3205287117u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1010, 1048576000u, 3204448256u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1011, 1048576000u, 3202770534u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1012, 1048576000u, 3201092813u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1013, 1048576000u, 3199415091u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1014, 1048576000u, 3197737370u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1015, 1048576000u, 3196059648u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1016, 1048576000u, 3192704205u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1017, 1048576000u, 3189348762u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1018, 1048576000u, 3184315597u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1019, 1048576000u, 3175926989u, 3196059648u, 0, COPYSIGNF_TOLERANCE, 0}, +{1020, 1048576000u, 632815616u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1021, 1048576000u, 1028443341u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1022, 1048576000u, 1036831949u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1023, 1048576000u, 1041865114u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1024, 1048576000u, 1045220557u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1025, 1048576000u, 1048576000u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1026, 1048576000u, 1050253722u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1027, 1048576000u, 1051931443u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1028, 1048576000u, 1053609165u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1029, 1048576000u, 1055286886u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1030, 1048576000u, 1056964608u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1031, 1048576000u, 1057803469u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1032, 1048576000u, 1058642330u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1033, 1048576000u, 1059481190u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1034, 1048576000u, 1060320051u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1035, 1048576000u, 1061158912u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1036, 1048576000u, 1061997773u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1037, 1048576000u, 1062836634u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1038, 1048576000u, 1063675494u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1039, 1048576000u, 1064514355u, 1048576000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1040, 1050253722u, 3212836864u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1041, 1050253722u, 3211998003u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1042, 1050253722u, 3211159142u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1043, 1050253722u, 3210320282u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1044, 1050253722u, 3209481421u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1045, 1050253722u, 3208642560u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1046, 1050253722u, 3207803699u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1047, 1050253722u, 3206964838u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1048, 1050253722u, 3206125978u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1049, 1050253722u, 3205287117u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1050, 1050253722u, 3204448256u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1051, 1050253722u, 3202770534u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1052, 1050253722u, 3201092813u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1053, 1050253722u, 3199415091u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1054, 1050253722u, 3197737370u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1055, 1050253722u, 3196059648u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1056, 1050253722u, 3192704205u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1057, 1050253722u, 3189348762u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1058, 1050253722u, 3184315597u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1059, 1050253722u, 3175926989u, 3197737370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1060, 1050253722u, 632815616u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1061, 1050253722u, 1028443341u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1062, 1050253722u, 1036831949u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1063, 1050253722u, 1041865114u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1064, 1050253722u, 1045220557u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1065, 1050253722u, 1048576000u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1066, 1050253722u, 1050253722u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1067, 1050253722u, 1051931443u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1068, 1050253722u, 1053609165u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1069, 1050253722u, 1055286886u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1070, 1050253722u, 1056964608u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1071, 1050253722u, 1057803469u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1072, 1050253722u, 1058642330u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1073, 1050253722u, 1059481190u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1074, 1050253722u, 1060320051u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1075, 1050253722u, 1061158912u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1076, 1050253722u, 1061997773u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1077, 1050253722u, 1062836634u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1078, 1050253722u, 1063675494u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1079, 1050253722u, 1064514355u, 1050253722u, 0, COPYSIGNF_TOLERANCE, 0}, +{1080, 1051931443u, 3212836864u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1081, 1051931443u, 3211998003u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1082, 1051931443u, 3211159142u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1083, 1051931443u, 3210320282u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1084, 1051931443u, 3209481421u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1085, 1051931443u, 3208642560u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1086, 1051931443u, 3207803699u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1087, 1051931443u, 3206964838u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1088, 1051931443u, 3206125978u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1089, 1051931443u, 3205287117u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1090, 1051931443u, 3204448256u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1091, 1051931443u, 3202770534u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1092, 1051931443u, 3201092813u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1093, 1051931443u, 3199415091u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1094, 1051931443u, 3197737370u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1095, 1051931443u, 3196059648u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1096, 1051931443u, 3192704205u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1097, 1051931443u, 3189348762u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1098, 1051931443u, 3184315597u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1099, 1051931443u, 3175926989u, 3199415091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1100, 1051931443u, 632815616u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1101, 1051931443u, 1028443341u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1102, 1051931443u, 1036831949u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1103, 1051931443u, 1041865114u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1104, 1051931443u, 1045220557u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1105, 1051931443u, 1048576000u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1106, 1051931443u, 1050253722u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1107, 1051931443u, 1051931443u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1108, 1051931443u, 1053609165u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1109, 1051931443u, 1055286886u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1110, 1051931443u, 1056964608u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1111, 1051931443u, 1057803469u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1112, 1051931443u, 1058642330u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1113, 1051931443u, 1059481190u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1114, 1051931443u, 1060320051u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1115, 1051931443u, 1061158912u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1116, 1051931443u, 1061997773u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1117, 1051931443u, 1062836634u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1118, 1051931443u, 1063675494u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1119, 1051931443u, 1064514355u, 1051931443u, 0, COPYSIGNF_TOLERANCE, 0}, +{1120, 1053609165u, 3212836864u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1121, 1053609165u, 3211998003u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1122, 1053609165u, 3211159142u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1123, 1053609165u, 3210320282u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1124, 1053609165u, 3209481421u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1125, 1053609165u, 3208642560u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1126, 1053609165u, 3207803699u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1127, 1053609165u, 3206964838u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1128, 1053609165u, 3206125978u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1129, 1053609165u, 3205287117u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1130, 1053609165u, 3204448256u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1131, 1053609165u, 3202770534u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1132, 1053609165u, 3201092813u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1133, 1053609165u, 3199415091u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1134, 1053609165u, 3197737370u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1135, 1053609165u, 3196059648u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1136, 1053609165u, 3192704205u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1137, 1053609165u, 3189348762u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1138, 1053609165u, 3184315597u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1139, 1053609165u, 3175926989u, 3201092813u, 0, COPYSIGNF_TOLERANCE, 0}, +{1140, 1053609165u, 632815616u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1141, 1053609165u, 1028443341u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1142, 1053609165u, 1036831949u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1143, 1053609165u, 1041865114u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1144, 1053609165u, 1045220557u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1145, 1053609165u, 1048576000u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1146, 1053609165u, 1050253722u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1147, 1053609165u, 1051931443u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1148, 1053609165u, 1053609165u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1149, 1053609165u, 1055286886u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1150, 1053609165u, 1056964608u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1151, 1053609165u, 1057803469u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1152, 1053609165u, 1058642330u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1153, 1053609165u, 1059481190u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1154, 1053609165u, 1060320051u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1155, 1053609165u, 1061158912u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1156, 1053609165u, 1061997773u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1157, 1053609165u, 1062836634u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1158, 1053609165u, 1063675494u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1159, 1053609165u, 1064514355u, 1053609165u, 0, COPYSIGNF_TOLERANCE, 0}, +{1160, 1055286886u, 3212836864u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1161, 1055286886u, 3211998003u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1162, 1055286886u, 3211159142u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1163, 1055286886u, 3210320282u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1164, 1055286886u, 3209481421u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1165, 1055286886u, 3208642560u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1166, 1055286886u, 3207803699u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1167, 1055286886u, 3206964838u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1168, 1055286886u, 3206125978u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1169, 1055286886u, 3205287117u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1170, 1055286886u, 3204448256u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1171, 1055286886u, 3202770534u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1172, 1055286886u, 3201092813u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1173, 1055286886u, 3199415091u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1174, 1055286886u, 3197737370u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1175, 1055286886u, 3196059648u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1176, 1055286886u, 3192704205u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1177, 1055286886u, 3189348762u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1178, 1055286886u, 3184315597u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1179, 1055286886u, 3175926989u, 3202770534u, 0, COPYSIGNF_TOLERANCE, 0}, +{1180, 1055286886u, 632815616u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1181, 1055286886u, 1028443341u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1182, 1055286886u, 1036831949u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1183, 1055286886u, 1041865114u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1184, 1055286886u, 1045220557u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1185, 1055286886u, 1048576000u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1186, 1055286886u, 1050253722u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1187, 1055286886u, 1051931443u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1188, 1055286886u, 1053609165u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1189, 1055286886u, 1055286886u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1190, 1055286886u, 1056964608u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1191, 1055286886u, 1057803469u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1192, 1055286886u, 1058642330u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1193, 1055286886u, 1059481190u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1194, 1055286886u, 1060320051u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1195, 1055286886u, 1061158912u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1196, 1055286886u, 1061997773u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1197, 1055286886u, 1062836634u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1198, 1055286886u, 1063675494u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1199, 1055286886u, 1064514355u, 1055286886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1200, 1056964608u, 3212836864u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1201, 1056964608u, 3211998003u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1202, 1056964608u, 3211159142u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1203, 1056964608u, 3210320282u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1204, 1056964608u, 3209481421u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1205, 1056964608u, 3208642560u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1206, 1056964608u, 3207803699u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1207, 1056964608u, 3206964838u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1208, 1056964608u, 3206125978u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1209, 1056964608u, 3205287117u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1210, 1056964608u, 3204448256u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1211, 1056964608u, 3202770534u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1212, 1056964608u, 3201092813u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1213, 1056964608u, 3199415091u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1214, 1056964608u, 3197737370u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1215, 1056964608u, 3196059648u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1216, 1056964608u, 3192704205u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1217, 1056964608u, 3189348762u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1218, 1056964608u, 3184315597u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1219, 1056964608u, 3175926989u, 3204448256u, 0, COPYSIGNF_TOLERANCE, 0}, +{1220, 1056964608u, 632815616u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1221, 1056964608u, 1028443341u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1222, 1056964608u, 1036831949u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1223, 1056964608u, 1041865114u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1224, 1056964608u, 1045220557u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1225, 1056964608u, 1048576000u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1226, 1056964608u, 1050253722u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1227, 1056964608u, 1051931443u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1228, 1056964608u, 1053609165u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1229, 1056964608u, 1055286886u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1230, 1056964608u, 1056964608u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1231, 1056964608u, 1057803469u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1232, 1056964608u, 1058642330u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1233, 1056964608u, 1059481190u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1234, 1056964608u, 1060320051u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1235, 1056964608u, 1061158912u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1236, 1056964608u, 1061997773u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1237, 1056964608u, 1062836634u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1238, 1056964608u, 1063675494u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1239, 1056964608u, 1064514355u, 1056964608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1240, 1057803469u, 3212836864u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1241, 1057803469u, 3211998003u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1242, 1057803469u, 3211159142u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1243, 1057803469u, 3210320282u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1244, 1057803469u, 3209481421u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1245, 1057803469u, 3208642560u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1246, 1057803469u, 3207803699u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1247, 1057803469u, 3206964838u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1248, 1057803469u, 3206125978u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1249, 1057803469u, 3205287117u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1250, 1057803469u, 3204448256u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1251, 1057803469u, 3202770534u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1252, 1057803469u, 3201092813u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1253, 1057803469u, 3199415091u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1254, 1057803469u, 3197737370u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1255, 1057803469u, 3196059648u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1256, 1057803469u, 3192704205u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1257, 1057803469u, 3189348762u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1258, 1057803469u, 3184315597u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1259, 1057803469u, 3175926989u, 3205287117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1260, 1057803469u, 632815616u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1261, 1057803469u, 1028443341u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1262, 1057803469u, 1036831949u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1263, 1057803469u, 1041865114u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1264, 1057803469u, 1045220557u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1265, 1057803469u, 1048576000u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1266, 1057803469u, 1050253722u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1267, 1057803469u, 1051931443u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1268, 1057803469u, 1053609165u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1269, 1057803469u, 1055286886u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1270, 1057803469u, 1056964608u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1271, 1057803469u, 1057803469u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1272, 1057803469u, 1058642330u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1273, 1057803469u, 1059481190u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1274, 1057803469u, 1060320051u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1275, 1057803469u, 1061158912u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1276, 1057803469u, 1061997773u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1277, 1057803469u, 1062836634u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1278, 1057803469u, 1063675494u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1279, 1057803469u, 1064514355u, 1057803469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1280, 1058642330u, 3212836864u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1281, 1058642330u, 3211998003u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1282, 1058642330u, 3211159142u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1283, 1058642330u, 3210320282u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1284, 1058642330u, 3209481421u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1285, 1058642330u, 3208642560u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1286, 1058642330u, 3207803699u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1287, 1058642330u, 3206964838u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1288, 1058642330u, 3206125978u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1289, 1058642330u, 3205287117u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1290, 1058642330u, 3204448256u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1291, 1058642330u, 3202770534u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1292, 1058642330u, 3201092813u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1293, 1058642330u, 3199415091u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1294, 1058642330u, 3197737370u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1295, 1058642330u, 3196059648u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1296, 1058642330u, 3192704205u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1297, 1058642330u, 3189348762u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1298, 1058642330u, 3184315597u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1299, 1058642330u, 3175926989u, 3206125978u, 0, COPYSIGNF_TOLERANCE, 0}, +{1300, 1058642330u, 632815616u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1301, 1058642330u, 1028443341u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1302, 1058642330u, 1036831949u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1303, 1058642330u, 1041865114u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1304, 1058642330u, 1045220557u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1305, 1058642330u, 1048576000u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1306, 1058642330u, 1050253722u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1307, 1058642330u, 1051931443u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1308, 1058642330u, 1053609165u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1309, 1058642330u, 1055286886u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1310, 1058642330u, 1056964608u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1311, 1058642330u, 1057803469u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1312, 1058642330u, 1058642330u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1313, 1058642330u, 1059481190u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1314, 1058642330u, 1060320051u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1315, 1058642330u, 1061158912u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1316, 1058642330u, 1061997773u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1317, 1058642330u, 1062836634u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1318, 1058642330u, 1063675494u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1319, 1058642330u, 1064514355u, 1058642330u, 0, COPYSIGNF_TOLERANCE, 0}, +{1320, 1059481190u, 3212836864u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1321, 1059481190u, 3211998003u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1322, 1059481190u, 3211159142u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1323, 1059481190u, 3210320282u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1324, 1059481190u, 3209481421u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1325, 1059481190u, 3208642560u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1326, 1059481190u, 3207803699u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1327, 1059481190u, 3206964838u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1328, 1059481190u, 3206125978u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1329, 1059481190u, 3205287117u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1330, 1059481190u, 3204448256u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1331, 1059481190u, 3202770534u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1332, 1059481190u, 3201092813u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1333, 1059481190u, 3199415091u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1334, 1059481190u, 3197737370u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1335, 1059481190u, 3196059648u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1336, 1059481190u, 3192704205u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1337, 1059481190u, 3189348762u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1338, 1059481190u, 3184315597u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1339, 1059481190u, 3175926989u, 3206964838u, 0, COPYSIGNF_TOLERANCE, 0}, +{1340, 1059481190u, 632815616u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1341, 1059481190u, 1028443341u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1342, 1059481190u, 1036831949u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1343, 1059481190u, 1041865114u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1344, 1059481190u, 1045220557u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1345, 1059481190u, 1048576000u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1346, 1059481190u, 1050253722u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1347, 1059481190u, 1051931443u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1348, 1059481190u, 1053609165u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1349, 1059481190u, 1055286886u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1350, 1059481190u, 1056964608u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1351, 1059481190u, 1057803469u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1352, 1059481190u, 1058642330u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1353, 1059481190u, 1059481190u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1354, 1059481190u, 1060320051u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1355, 1059481190u, 1061158912u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1356, 1059481190u, 1061997773u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1357, 1059481190u, 1062836634u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1358, 1059481190u, 1063675494u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1359, 1059481190u, 1064514355u, 1059481190u, 0, COPYSIGNF_TOLERANCE, 0}, +{1360, 1060320051u, 3212836864u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1361, 1060320051u, 3211998003u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1362, 1060320051u, 3211159142u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1363, 1060320051u, 3210320282u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1364, 1060320051u, 3209481421u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1365, 1060320051u, 3208642560u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1366, 1060320051u, 3207803699u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1367, 1060320051u, 3206964838u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1368, 1060320051u, 3206125978u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1369, 1060320051u, 3205287117u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1370, 1060320051u, 3204448256u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1371, 1060320051u, 3202770534u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1372, 1060320051u, 3201092813u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1373, 1060320051u, 3199415091u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1374, 1060320051u, 3197737370u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1375, 1060320051u, 3196059648u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1376, 1060320051u, 3192704205u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1377, 1060320051u, 3189348762u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1378, 1060320051u, 3184315597u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1379, 1060320051u, 3175926989u, 3207803699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1380, 1060320051u, 632815616u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1381, 1060320051u, 1028443341u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1382, 1060320051u, 1036831949u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1383, 1060320051u, 1041865114u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1384, 1060320051u, 1045220557u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1385, 1060320051u, 1048576000u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1386, 1060320051u, 1050253722u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1387, 1060320051u, 1051931443u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1388, 1060320051u, 1053609165u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1389, 1060320051u, 1055286886u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1390, 1060320051u, 1056964608u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1391, 1060320051u, 1057803469u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1392, 1060320051u, 1058642330u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1393, 1060320051u, 1059481190u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1394, 1060320051u, 1060320051u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1395, 1060320051u, 1061158912u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1396, 1060320051u, 1061997773u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1397, 1060320051u, 1062836634u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1398, 1060320051u, 1063675494u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1399, 1060320051u, 1064514355u, 1060320051u, 0, COPYSIGNF_TOLERANCE, 0}, +{1400, 1061158912u, 3212836864u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1401, 1061158912u, 3211998003u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1402, 1061158912u, 3211159142u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1403, 1061158912u, 3210320282u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1404, 1061158912u, 3209481421u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1405, 1061158912u, 3208642560u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1406, 1061158912u, 3207803699u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1407, 1061158912u, 3206964838u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1408, 1061158912u, 3206125978u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1409, 1061158912u, 3205287117u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1410, 1061158912u, 3204448256u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1411, 1061158912u, 3202770534u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1412, 1061158912u, 3201092813u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1413, 1061158912u, 3199415091u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1414, 1061158912u, 3197737370u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1415, 1061158912u, 3196059648u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1416, 1061158912u, 3192704205u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1417, 1061158912u, 3189348762u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1418, 1061158912u, 3184315597u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1419, 1061158912u, 3175926989u, 3208642560u, 0, COPYSIGNF_TOLERANCE, 0}, +{1420, 1061158912u, 632815616u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1421, 1061158912u, 1028443341u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1422, 1061158912u, 1036831949u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1423, 1061158912u, 1041865114u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1424, 1061158912u, 1045220557u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1425, 1061158912u, 1048576000u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1426, 1061158912u, 1050253722u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1427, 1061158912u, 1051931443u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1428, 1061158912u, 1053609165u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1429, 1061158912u, 1055286886u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1430, 1061158912u, 1056964608u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1431, 1061158912u, 1057803469u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1432, 1061158912u, 1058642330u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1433, 1061158912u, 1059481190u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1434, 1061158912u, 1060320051u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1435, 1061158912u, 1061158912u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1436, 1061158912u, 1061997773u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1437, 1061158912u, 1062836634u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1438, 1061158912u, 1063675494u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1439, 1061158912u, 1064514355u, 1061158912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1440, 1061997773u, 3212836864u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1441, 1061997773u, 3211998003u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1442, 1061997773u, 3211159142u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1443, 1061997773u, 3210320282u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1444, 1061997773u, 3209481421u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1445, 1061997773u, 3208642560u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1446, 1061997773u, 3207803699u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1447, 1061997773u, 3206964838u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1448, 1061997773u, 3206125978u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1449, 1061997773u, 3205287117u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1450, 1061997773u, 3204448256u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1451, 1061997773u, 3202770534u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1452, 1061997773u, 3201092813u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1453, 1061997773u, 3199415091u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1454, 1061997773u, 3197737370u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1455, 1061997773u, 3196059648u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1456, 1061997773u, 3192704205u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1457, 1061997773u, 3189348762u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1458, 1061997773u, 3184315597u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1459, 1061997773u, 3175926989u, 3209481421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1460, 1061997773u, 632815616u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1461, 1061997773u, 1028443341u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1462, 1061997773u, 1036831949u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1463, 1061997773u, 1041865114u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1464, 1061997773u, 1045220557u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1465, 1061997773u, 1048576000u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1466, 1061997773u, 1050253722u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1467, 1061997773u, 1051931443u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1468, 1061997773u, 1053609165u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1469, 1061997773u, 1055286886u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1470, 1061997773u, 1056964608u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1471, 1061997773u, 1057803469u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1472, 1061997773u, 1058642330u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1473, 1061997773u, 1059481190u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1474, 1061997773u, 1060320051u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1475, 1061997773u, 1061158912u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1476, 1061997773u, 1061997773u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1477, 1061997773u, 1062836634u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1478, 1061997773u, 1063675494u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1479, 1061997773u, 1064514355u, 1061997773u, 0, COPYSIGNF_TOLERANCE, 0}, +{1480, 1062836634u, 3212836864u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1481, 1062836634u, 3211998003u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1482, 1062836634u, 3211159142u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1483, 1062836634u, 3210320282u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1484, 1062836634u, 3209481421u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1485, 1062836634u, 3208642560u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1486, 1062836634u, 3207803699u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1487, 1062836634u, 3206964838u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1488, 1062836634u, 3206125978u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1489, 1062836634u, 3205287117u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1490, 1062836634u, 3204448256u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1491, 1062836634u, 3202770534u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1492, 1062836634u, 3201092813u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1493, 1062836634u, 3199415091u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1494, 1062836634u, 3197737370u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1495, 1062836634u, 3196059648u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1496, 1062836634u, 3192704205u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1497, 1062836634u, 3189348762u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1498, 1062836634u, 3184315597u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1499, 1062836634u, 3175926989u, 3210320282u, 0, COPYSIGNF_TOLERANCE, 0}, +{1500, 1062836634u, 632815616u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1501, 1062836634u, 1028443341u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1502, 1062836634u, 1036831949u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1503, 1062836634u, 1041865114u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1504, 1062836634u, 1045220557u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1505, 1062836634u, 1048576000u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1506, 1062836634u, 1050253722u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1507, 1062836634u, 1051931443u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1508, 1062836634u, 1053609165u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1509, 1062836634u, 1055286886u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1510, 1062836634u, 1056964608u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1511, 1062836634u, 1057803469u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1512, 1062836634u, 1058642330u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1513, 1062836634u, 1059481190u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1514, 1062836634u, 1060320051u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1515, 1062836634u, 1061158912u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1516, 1062836634u, 1061997773u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1517, 1062836634u, 1062836634u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1518, 1062836634u, 1063675494u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1519, 1062836634u, 1064514355u, 1062836634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1520, 1063675494u, 3212836864u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1521, 1063675494u, 3211998003u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1522, 1063675494u, 3211159142u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1523, 1063675494u, 3210320282u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1524, 1063675494u, 3209481421u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1525, 1063675494u, 3208642560u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1526, 1063675494u, 3207803699u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1527, 1063675494u, 3206964838u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1528, 1063675494u, 3206125978u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1529, 1063675494u, 3205287117u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1530, 1063675494u, 3204448256u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1531, 1063675494u, 3202770534u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1532, 1063675494u, 3201092813u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1533, 1063675494u, 3199415091u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1534, 1063675494u, 3197737370u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1535, 1063675494u, 3196059648u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1536, 1063675494u, 3192704205u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1537, 1063675494u, 3189348762u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1538, 1063675494u, 3184315597u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1539, 1063675494u, 3175926989u, 3211159142u, 0, COPYSIGNF_TOLERANCE, 0}, +{1540, 1063675494u, 632815616u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1541, 1063675494u, 1028443341u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1542, 1063675494u, 1036831949u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1543, 1063675494u, 1041865114u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1544, 1063675494u, 1045220557u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1545, 1063675494u, 1048576000u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1546, 1063675494u, 1050253722u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1547, 1063675494u, 1051931443u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1548, 1063675494u, 1053609165u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1549, 1063675494u, 1055286886u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1550, 1063675494u, 1056964608u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1551, 1063675494u, 1057803469u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1552, 1063675494u, 1058642330u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1553, 1063675494u, 1059481190u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1554, 1063675494u, 1060320051u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1555, 1063675494u, 1061158912u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1556, 1063675494u, 1061997773u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1557, 1063675494u, 1062836634u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1558, 1063675494u, 1063675494u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1559, 1063675494u, 1064514355u, 1063675494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1560, 1064514355u, 3212836864u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1561, 1064514355u, 3211998003u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1562, 1064514355u, 3211159142u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1563, 1064514355u, 3210320282u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1564, 1064514355u, 3209481421u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1565, 1064514355u, 3208642560u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1566, 1064514355u, 3207803699u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1567, 1064514355u, 3206964838u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1568, 1064514355u, 3206125978u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1569, 1064514355u, 3205287117u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1570, 1064514355u, 3204448256u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1571, 1064514355u, 3202770534u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1572, 1064514355u, 3201092813u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1573, 1064514355u, 3199415091u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1574, 1064514355u, 3197737370u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1575, 1064514355u, 3196059648u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1576, 1064514355u, 3192704205u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1577, 1064514355u, 3189348762u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1578, 1064514355u, 3184315597u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1579, 1064514355u, 3175926989u, 3211998003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1580, 1064514355u, 632815616u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1581, 1064514355u, 1028443341u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1582, 1064514355u, 1036831949u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1583, 1064514355u, 1041865114u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1584, 1064514355u, 1045220557u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1585, 1064514355u, 1048576000u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1586, 1064514355u, 1050253722u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1587, 1064514355u, 1051931443u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1588, 1064514355u, 1053609165u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1589, 1064514355u, 1055286886u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1590, 1064514355u, 1056964608u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1591, 1064514355u, 1057803469u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1592, 1064514355u, 1058642330u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1593, 1064514355u, 1059481190u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1594, 1064514355u, 1060320051u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1595, 1064514355u, 1061158912u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1596, 1064514355u, 1061997773u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1597, 1064514355u, 1062836634u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1598, 1064514355u, 1063675494u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1599, 1064514355u, 1064514355u, 1064514355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1600, 1107800421u, 1203999711u, 1107800421u, 0, COPYSIGNF_TOLERANCE, 0}, +{1601, 3196650934u, 896005582u, 1049167286u, 0, COPYSIGNF_TOLERANCE, 0}, +{1602, 3368700125u, 3308232444u, 3368700125u, 0, COPYSIGNF_TOLERANCE, 0}, +{1603, 1224242132u, 3061363425u, 3371725780u, 0, COPYSIGNF_TOLERANCE, 0}, +{1604, 3221027117u, 1284201705u, 1073543469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1605, 1198712763u, 919636942u, 1198712763u, 0, COPYSIGNF_TOLERANCE, 0}, +{1606, 3159309973u, 852521077u, 1011826325u, 0, COPYSIGNF_TOLERANCE, 0}, +{1607, 954173073u, 850531830u, 954173073u, 0, COPYSIGNF_TOLERANCE, 0}, +{1608, 3090780435u, 1035260608u, 943296787u, 0, COPYSIGNF_TOLERANCE, 0}, +{1609, 966554515u, 3234538174u, 3114038163u, 0, COPYSIGNF_TOLERANCE, 0}, +{1610, 1312607135u, 1194999402u, 1312607135u, 0, COPYSIGNF_TOLERANCE, 0}, +{1611, 1166191415u, 1018661564u, 1166191415u, 0, COPYSIGNF_TOLERANCE, 0}, +{1612, 3111900019u, 1130472166u, 964416371u, 0, COPYSIGNF_TOLERANCE, 0}, +{1613, 1234419246u, 2984575812u, 3381902894u, 0, COPYSIGNF_TOLERANCE, 0}, +{1614, 1302107128u, 3370647675u, 3449590776u, 0, COPYSIGNF_TOLERANCE, 0}, +{1615, 1052801068u, 3039122570u, 3200284716u, 0, COPYSIGNF_TOLERANCE, 0}, +{1616, 1060849628u, 3081357692u, 3208333276u, 0, COPYSIGNF_TOLERANCE, 0}, +{1617, 3484320003u, 3033957825u, 3484320003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1618, 3181522772u, 3305392896u, 3181522772u, 0, COPYSIGNF_TOLERANCE, 0}, +{1619, 882596369u, 1256676590u, 882596369u, 0, COPYSIGNF_TOLERANCE, 0}, +{1620, 1167223673u, 846102364u, 1167223673u, 0, COPYSIGNF_TOLERANCE, 0}, +{1621, 968192794u, 878547432u, 968192794u, 0, COPYSIGNF_TOLERANCE, 0}, +{1622, 3122346862u, 1111584337u, 974863214u, 0, COPYSIGNF_TOLERANCE, 0}, +{1623, 1052361612u, 1280025214u, 1052361612u, 0, COPYSIGNF_TOLERANCE, 0}, +{1624, 906701409u, 2968301825u, 3054185057u, 0, COPYSIGNF_TOLERANCE, 0}, +{1625, 3471653172u, 1154138102u, 1324169524u, 0, COPYSIGNF_TOLERANCE, 0}, +{1626, 3231467496u, 934336592u, 1083983848u, 0, COPYSIGNF_TOLERANCE, 0}, +{1627, 1341514497u, 3466051188u, 3488998145u, 0, COPYSIGNF_TOLERANCE, 0}, +{1628, 1272351391u, 3373485062u, 3419835039u, 0, COPYSIGNF_TOLERANCE, 0}, +{1629, 3319724992u, 3354615790u, 3319724992u, 0, COPYSIGNF_TOLERANCE, 0}, +{1630, 917622040u, 1334966485u, 917622040u, 0, COPYSIGNF_TOLERANCE, 0}, +{1631, 940236348u, 3304072663u, 3087719996u, 0, COPYSIGNF_TOLERANCE, 0}, +{1632, 3251541546u, 3174764041u, 3251541546u, 0, COPYSIGNF_TOLERANCE, 0}, +{1633, 3099843889u, 3355962282u, 3099843889u, 0, COPYSIGNF_TOLERANCE, 0}, +{1634, 3110358400u, 851145088u, 962874752u, 0, COPYSIGNF_TOLERANCE, 0}, +{1635, 3371863479u, 1014861921u, 1224379831u, 0, COPYSIGNF_TOLERANCE, 0}, +{1636, 3204069187u, 966573255u, 1056585539u, 0, COPYSIGNF_TOLERANCE, 0}, +{1637, 1306460502u, 903489435u, 1306460502u, 0, COPYSIGNF_TOLERANCE, 0}, +{1638, 1197542187u, 3024598921u, 3345025835u, 0, COPYSIGNF_TOLERANCE, 0}, +{1639, 922888249u, 1139392309u, 922888249u, 0, COPYSIGNF_TOLERANCE, 0}, +{1640, 1184239996u, 3224098462u, 3331723644u, 0, COPYSIGNF_TOLERANCE, 0}, +{1641, 1252490238u, 1173619825u, 1252490238u, 0, COPYSIGNF_TOLERANCE, 0}, +{1642, 1001673627u, 3462631271u, 3149157275u, 0, COPYSIGNF_TOLERANCE, 0}, +{1643, 976098044u, 1151967422u, 976098044u, 0, COPYSIGNF_TOLERANCE, 0}, +{1644, 941796645u, 886451963u, 941796645u, 0, COPYSIGNF_TOLERANCE, 0}, +{1645, 3287199470u, 854245542u, 1139715822u, 0, COPYSIGNF_TOLERANCE, 0}, +{1646, 893184329u, 1243067084u, 893184329u, 0, COPYSIGNF_TOLERANCE, 0}, +{1647, 1143233714u, 1007268238u, 1143233714u, 0, COPYSIGNF_TOLERANCE, 0}, +{1648, 1139941253u, 1147688821u, 1139941253u, 0, COPYSIGNF_TOLERANCE, 0}, +{1649, 3143717025u, 3234638157u, 3143717025u, 0, COPYSIGNF_TOLERANCE, 0}, +{1650, 3048866608u, 3449209899u, 3048866608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1651, 3240298487u, 1020260821u, 1092814839u, 0, COPYSIGNF_TOLERANCE, 0}, +{1652, 1288902137u, 3123875978u, 3436385785u, 0, COPYSIGNF_TOLERANCE, 0}, +{1653, 1333134799u, 1338107877u, 1333134799u, 0, COPYSIGNF_TOLERANCE, 0}, +{1654, 1187847971u, 1317663644u, 1187847971u, 0, COPYSIGNF_TOLERANCE, 0}, +{1655, 1038851706u, 1327544110u, 1038851706u, 0, COPYSIGNF_TOLERANCE, 0}, +{1656, 3329354473u, 3165437289u, 3329354473u, 0, COPYSIGNF_TOLERANCE, 0}, +{1657, 3077218579u, 1308397879u, 929734931u, 0, COPYSIGNF_TOLERANCE, 0}, +{1658, 1309289088u, 1019883016u, 1309289088u, 0, COPYSIGNF_TOLERANCE, 0}, +{1659, 3444653659u, 1279248024u, 1297170011u, 0, COPYSIGNF_TOLERANCE, 0}, +{1660, 3405585402u, 2962345057u, 3405585402u, 0, COPYSIGNF_TOLERANCE, 0}, +{1661, 3106647724u, 853848387u, 959164076u, 0, COPYSIGNF_TOLERANCE, 0}, +{1662, 1106778573u, 3304487767u, 3254262221u, 0, COPYSIGNF_TOLERANCE, 0}, +{1663, 1140567947u, 3069174149u, 3288051595u, 0, COPYSIGNF_TOLERANCE, 0}, +{1664, 1238569473u, 873035665u, 1238569473u, 0, COPYSIGNF_TOLERANCE, 0}, +{1665, 3154871957u, 1276671061u, 1007388309u, 0, COPYSIGNF_TOLERANCE, 0}, +{1666, 1261071232u, 1182202773u, 1261071232u, 0, COPYSIGNF_TOLERANCE, 0}, +{1667, 1175011025u, 3029705783u, 3322494673u, 0, COPYSIGNF_TOLERANCE, 0}, +{1668, 1082692850u, 1211581107u, 1082692850u, 0, COPYSIGNF_TOLERANCE, 0}, +{1669, 974547519u, 3475164509u, 3122031167u, 0, COPYSIGNF_TOLERANCE, 0}, +{1670, 3058097085u, 3104309359u, 3058097085u, 0, COPYSIGNF_TOLERANCE, 0}, +{1671, 3107252546u, 1071134451u, 959768898u, 0, COPYSIGNF_TOLERANCE, 0}, +{1672, 3096032662u, 2976848821u, 3096032662u, 0, COPYSIGNF_TOLERANCE, 0}, +{1673, 3197942144u, 3094120030u, 3197942144u, 0, COPYSIGNF_TOLERANCE, 0}, +{1674, 3403348556u, 3184653669u, 3403348556u, 0, COPYSIGNF_TOLERANCE, 0}, +{1675, 3182301130u, 3460764044u, 3182301130u, 0, COPYSIGNF_TOLERANCE, 0}, +{1676, 1136411063u, 1118097422u, 1136411063u, 0, COPYSIGNF_TOLERANCE, 0}, +{1677, 3239231622u, 3302723069u, 3239231622u, 0, COPYSIGNF_TOLERANCE, 0}, +{1678, 3340615780u, 870350055u, 1193132132u, 0, COPYSIGNF_TOLERANCE, 0}, +{1679, 998567360u, 2995278691u, 3146051008u, 0, COPYSIGNF_TOLERANCE, 0}, +{1680, 3417964312u, 1321337529u, 1270480664u, 0, COPYSIGNF_TOLERANCE, 0}, +{1681, 3109481038u, 1143864063u, 961997390u, 0, COPYSIGNF_TOLERANCE, 0}, +{1682, 1148867223u, 1256486202u, 1148867223u, 0, COPYSIGNF_TOLERANCE, 0}, +{1683, 989687421u, 3372681320u, 3137171069u, 0, COPYSIGNF_TOLERANCE, 0}, +{1684, 1152956913u, 3166480640u, 3300440561u, 0, COPYSIGNF_TOLERANCE, 0}, +{1685, 892922651u, 3373029087u, 3040406299u, 0, COPYSIGNF_TOLERANCE, 0}, +{1686, 1109627625u, 1314158257u, 1109627625u, 0, COPYSIGNF_TOLERANCE, 0}, +{1687, 1307091856u, 1103202538u, 1307091856u, 0, COPYSIGNF_TOLERANCE, 0}, +{1688, 1077234132u, 3272167130u, 3224717780u, 0, COPYSIGNF_TOLERANCE, 0}, +{1689, 1142167709u, 1096445242u, 1142167709u, 0, COPYSIGNF_TOLERANCE, 0}, +{1690, 3426232834u, 1036705270u, 1278749186u, 0, COPYSIGNF_TOLERANCE, 0}, +{1691, 3368566779u, 967249167u, 1221083131u, 0, COPYSIGNF_TOLERANCE, 0}, +{1692, 3030724760u, 3349013503u, 3030724760u, 0, COPYSIGNF_TOLERANCE, 0}, +{1693, 1138741813u, 3073453199u, 3286225461u, 0, COPYSIGNF_TOLERANCE, 0}, +{1694, 982950501u, 982549888u, 982950501u, 0, COPYSIGNF_TOLERANCE, 0}, +{1695, 1142981585u, 1015602236u, 1142981585u, 0, COPYSIGNF_TOLERANCE, 0}, +{1696, 3347165962u, 3135486696u, 3347165962u, 0, COPYSIGNF_TOLERANCE, 0}, +{1697, 1009535440u, 3381353228u, 3157019088u, 0, COPYSIGNF_TOLERANCE, 0}, +{1698, 3103736980u, 3402950505u, 3103736980u, 0, COPYSIGNF_TOLERANCE, 0}, +{1699, 3126820946u, 1077903063u, 979337298u, 0, COPYSIGNF_TOLERANCE, 0}, +{1700, 3473956030u, 976891930u, 1326472382u, 0, COPYSIGNF_TOLERANCE, 0}, +{1701, 3349098349u, 1055327704u, 1201614701u, 0, COPYSIGNF_TOLERANCE, 0}, +{1702, 3152729489u, 1060398533u, 1005245841u, 0, COPYSIGNF_TOLERANCE, 0}, +{1703, 945568720u, 3313485084u, 3093052368u, 0, COPYSIGNF_TOLERANCE, 0}, +{1704, 3345489836u, 1108392401u, 1198006188u, 0, COPYSIGNF_TOLERANCE, 0}, +{1705, 940893161u, 1137000140u, 940893161u, 0, COPYSIGNF_TOLERANCE, 0}, +{1706, 976791751u, 3230678102u, 3124275399u, 0, COPYSIGNF_TOLERANCE, 0}, +{1707, 1004442355u, 3036510596u, 3151926003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1708, 1108485380u, 3173536878u, 3255969028u, 0, COPYSIGNF_TOLERANCE, 0}, +{1709, 1061834641u, 972388096u, 1061834641u, 0, COPYSIGNF_TOLERANCE, 0}, +{1710, 3381268392u, 1146976802u, 1233784744u, 0, COPYSIGNF_TOLERANCE, 0}, +{1711, 1087189715u, 2952822478u, 3234673363u, 0, COPYSIGNF_TOLERANCE, 0}, +{1712, 3212952285u, 3329407365u, 3212952285u, 0, COPYSIGNF_TOLERANCE, 0}, +{1713, 1000611335u, 857599439u, 1000611335u, 0, COPYSIGNF_TOLERANCE, 0}, +{1714, 3466188568u, 1041678304u, 1318704920u, 0, COPYSIGNF_TOLERANCE, 0}, +{1715, 3072456205u, 3160254633u, 3072456205u, 0, COPYSIGNF_TOLERANCE, 0}, +{1716, 3319315516u, 3422089012u, 3319315516u, 0, COPYSIGNF_TOLERANCE, 0}, +{1717, 935938416u, 1146676692u, 935938416u, 0, COPYSIGNF_TOLERANCE, 0}, +{1718, 3212614372u, 1152633030u, 1065130724u, 0, COPYSIGNF_TOLERANCE, 0}, +{1719, 1315030230u, 3336225884u, 3462513878u, 0, COPYSIGNF_TOLERANCE, 0}, +{1720, 1134593658u, 3456812581u, 3282077306u, 0, COPYSIGNF_TOLERANCE, 0}, +{1721, 977281449u, 879922831u, 977281449u, 0, COPYSIGNF_TOLERANCE, 0}, +{1722, 1086198791u, 920125958u, 1086198791u, 0, COPYSIGNF_TOLERANCE, 0}, +{1723, 1255152035u, 851754050u, 1255152035u, 0, COPYSIGNF_TOLERANCE, 0}, +{1724, 1135271264u, 3284878412u, 3282754912u, 0, COPYSIGNF_TOLERANCE, 0}, +{1725, 1094190727u, 1056854532u, 1094190727u, 0, COPYSIGNF_TOLERANCE, 0}, +{1726, 1294665325u, 991185677u, 1294665325u, 0, COPYSIGNF_TOLERANCE, 0}, +{1727, 1036608591u, 805416536u, 1036608591u, 0, COPYSIGNF_TOLERANCE, 0}, +{1728, 3229998064u, 825237063u, 1082514416u, 0, COPYSIGNF_TOLERANCE, 0}, +{1729, 3439134022u, 1043829691u, 1291650374u, 0, COPYSIGNF_TOLERANCE, 0}, +{1730, 3073083133u, 1317170485u, 925599485u, 0, COPYSIGNF_TOLERANCE, 0}, +{1731, 1325668223u, 970681762u, 1325668223u, 0, COPYSIGNF_TOLERANCE, 0}, +{1732, 1092037607u, 1027330835u, 1092037607u, 0, COPYSIGNF_TOLERANCE, 0}, +{1733, 3316278408u, 3455589207u, 3316278408u, 0, COPYSIGNF_TOLERANCE, 0}, +{1734, 3295436768u, 3129873731u, 3295436768u, 0, COPYSIGNF_TOLERANCE, 0}, +{1735, 1151984049u, 3074547120u, 3299467697u, 0, COPYSIGNF_TOLERANCE, 0}, +{1736, 1129287043u, 3076527544u, 3276770691u, 0, COPYSIGNF_TOLERANCE, 0}, +{1737, 1243664530u, 972879810u, 1243664530u, 0, COPYSIGNF_TOLERANCE, 0}, +{1738, 950829092u, 929114193u, 950829092u, 0, COPYSIGNF_TOLERANCE, 0}, +{1739, 1115471979u, 3047246262u, 3262955627u, 0, COPYSIGNF_TOLERANCE, 0}, +{1740, 3351092088u, 3024661404u, 3351092088u, 0, COPYSIGNF_TOLERANCE, 0}, +{1741, 3424479544u, 3312047722u, 3424479544u, 0, COPYSIGNF_TOLERANCE, 0}, +{1742, 3241193975u, 884465785u, 1093710327u, 0, COPYSIGNF_TOLERANCE, 0}, +{1743, 1030934236u, 1045139240u, 1030934236u, 0, COPYSIGNF_TOLERANCE, 0}, +{1744, 3131791114u, 3408392958u, 3131791114u, 0, COPYSIGNF_TOLERANCE, 0}, +{1745, 1025254314u, 3057812821u, 3172737962u, 0, COPYSIGNF_TOLERANCE, 0}, +{1746, 1110545760u, 3240144177u, 3258029408u, 0, COPYSIGNF_TOLERANCE, 0}, +{1747, 3180213739u, 1108793820u, 1032730091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1748, 3361976590u, 3138179993u, 3361976590u, 0, COPYSIGNF_TOLERANCE, 0}, +{1749, 881280146u, 3421884736u, 3028763794u, 0, COPYSIGNF_TOLERANCE, 0}, +{1750, 1304154705u, 2961937089u, 3451638353u, 0, COPYSIGNF_TOLERANCE, 0}, +{1751, 3264443610u, 3222916705u, 3264443610u, 0, COPYSIGNF_TOLERANCE, 0}, +{1752, 3374550627u, 3055856293u, 3374550627u, 0, COPYSIGNF_TOLERANCE, 0}, +{1753, 899599265u, 3240118211u, 3047082913u, 0, COPYSIGNF_TOLERANCE, 0}, +{1754, 1268194719u, 1332489410u, 1268194719u, 0, COPYSIGNF_TOLERANCE, 0}, +{1755, 1133420220u, 1245770860u, 1133420220u, 0, COPYSIGNF_TOLERANCE, 0}, +{1756, 1161858787u, 815362075u, 1161858787u, 0, COPYSIGNF_TOLERANCE, 0}, +{1757, 3184462258u, 1263529646u, 1036978610u, 0, COPYSIGNF_TOLERANCE, 0}, +{1758, 3295996963u, 3453334307u, 3295996963u, 0, COPYSIGNF_TOLERANCE, 0}, +{1759, 1270887389u, 1156123987u, 1270887389u, 0, COPYSIGNF_TOLERANCE, 0}, +{1760, 3325193181u, 993979179u, 1177709533u, 0, COPYSIGNF_TOLERANCE, 0}, +{1761, 925657343u, 1315159742u, 925657343u, 0, COPYSIGNF_TOLERANCE, 0}, +{1762, 3115275450u, 3008350271u, 3115275450u, 0, COPYSIGNF_TOLERANCE, 0}, +{1763, 3116607482u, 3224327456u, 3116607482u, 0, COPYSIGNF_TOLERANCE, 0}, +{1764, 3187892415u, 3118097315u, 3187892415u, 0, COPYSIGNF_TOLERANCE, 0}, +{1765, 1189120494u, 978961471u, 1189120494u, 0, COPYSIGNF_TOLERANCE, 0}, +{1766, 889030794u, 3129523970u, 3036514442u, 0, COPYSIGNF_TOLERANCE, 0}, +{1767, 1323529208u, 3100744786u, 3471012856u, 0, COPYSIGNF_TOLERANCE, 0}, +{1768, 3465768388u, 3190881451u, 3465768388u, 0, COPYSIGNF_TOLERANCE, 0}, +{1769, 3426099899u, 1118756120u, 1278616251u, 0, COPYSIGNF_TOLERANCE, 0}, +{1770, 3224857113u, 3398166843u, 3224857113u, 0, COPYSIGNF_TOLERANCE, 0}, +{1771, 1065798296u, 816191940u, 1065798296u, 0, COPYSIGNF_TOLERANCE, 0}, +{1772, 3328989444u, 850266225u, 1181505796u, 0, COPYSIGNF_TOLERANCE, 0}, +{1773, 3357819026u, 3148475462u, 3357819026u, 0, COPYSIGNF_TOLERANCE, 0}, +{1774, 1273397670u, 901308750u, 1273397670u, 0, COPYSIGNF_TOLERANCE, 0}, +{1775, 3424831780u, 1304806106u, 1277348132u, 0, COPYSIGNF_TOLERANCE, 0}, +{1776, 1257596246u, 3420832544u, 3405079894u, 0, COPYSIGNF_TOLERANCE, 0}, +{1777, 1051773536u, 896271348u, 1051773536u, 0, COPYSIGNF_TOLERANCE, 0}, +{1778, 3294752507u, 3113225954u, 3294752507u, 0, COPYSIGNF_TOLERANCE, 0}, +{1779, 3424848725u, 2973850350u, 3424848725u, 0, COPYSIGNF_TOLERANCE, 0}, +{1780, 1090870906u, 3294742905u, 3238354554u, 0, COPYSIGNF_TOLERANCE, 0}, +{1781, 1227582289u, 1208979668u, 1227582289u, 0, COPYSIGNF_TOLERANCE, 0}, +{1782, 1272325814u, 3004311296u, 3419809462u, 0, COPYSIGNF_TOLERANCE, 0}, +{1783, 3359508271u, 859974315u, 1212024623u, 0, COPYSIGNF_TOLERANCE, 0}, +{1784, 1137854355u, 3335041917u, 3285338003u, 0, COPYSIGNF_TOLERANCE, 0}, +{1785, 3440773058u, 3204192793u, 3440773058u, 0, COPYSIGNF_TOLERANCE, 0}, +{1786, 3101598400u, 3057760708u, 3101598400u, 0, COPYSIGNF_TOLERANCE, 0}, +{1787, 3451216836u, 3347783723u, 3451216836u, 0, COPYSIGNF_TOLERANCE, 0}, +{1788, 3437062994u, 3106834845u, 3437062994u, 0, COPYSIGNF_TOLERANCE, 0}, +{1789, 1131196082u, 1164573183u, 1131196082u, 0, COPYSIGNF_TOLERANCE, 0}, +{1790, 3177294154u, 1282436638u, 1029810506u, 0, COPYSIGNF_TOLERANCE, 0}, +{1791, 3258097678u, 1305882290u, 1110614030u, 0, COPYSIGNF_TOLERANCE, 0}, +{1792, 3460915348u, 1219372260u, 1313431700u, 0, COPYSIGNF_TOLERANCE, 0}, +{1793, 3303035472u, 3153013020u, 3303035472u, 0, COPYSIGNF_TOLERANCE, 0}, +{1794, 1053698677u, 3284313107u, 3201182325u, 0, COPYSIGNF_TOLERANCE, 0}, +{1795, 3396166221u, 1201894512u, 1248682573u, 0, COPYSIGNF_TOLERANCE, 0}, +{1796, 3037541131u, 1085398440u, 890057483u, 0, COPYSIGNF_TOLERANCE, 0}, +{1797, 3458934263u, 1005577835u, 1311450615u, 0, COPYSIGNF_TOLERANCE, 0}, +{1798, 1065761827u, 3333928591u, 3213245475u, 0, COPYSIGNF_TOLERANCE, 0}, +{1799, 3025843188u, 820250112u, 878359540u, 0, COPYSIGNF_TOLERANCE, 0}, +{1800, 926665223u, 3150815797u, 3074148871u, 0, COPYSIGNF_TOLERANCE, 0}, +{1801, 1199816046u, 3143776186u, 3347299694u, 0, COPYSIGNF_TOLERANCE, 0}, +{1802, 3333779015u, 952421041u, 1186295367u, 0, COPYSIGNF_TOLERANCE, 0}, +{1803, 948398145u, 3238273189u, 3095881793u, 0, COPYSIGNF_TOLERANCE, 0}, +{1804, 3054021468u, 1270257895u, 906537820u, 0, COPYSIGNF_TOLERANCE, 0}, +{1805, 1080781593u, 1213908300u, 1080781593u, 0, COPYSIGNF_TOLERANCE, 0}, +{1806, 3164749613u, 3010837763u, 3164749613u, 0, COPYSIGNF_TOLERANCE, 0}, +{1807, 3235326590u, 1271705594u, 1087842942u, 0, COPYSIGNF_TOLERANCE, 0}, +{1808, 3118883815u, 1051802647u, 971400167u, 0, COPYSIGNF_TOLERANCE, 0}, +{1809, 965378004u, 1292594138u, 965378004u, 0, COPYSIGNF_TOLERANCE, 0}, +{1810, 3226990408u, 1110755136u, 1079506760u, 0, COPYSIGNF_TOLERANCE, 0}, +{1811, 3117098218u, 1122474770u, 969614570u, 0, COPYSIGNF_TOLERANCE, 0}, +{1812, 1283624229u, 906796922u, 1283624229u, 0, COPYSIGNF_TOLERANCE, 0}, +{1813, 970649315u, 1078286437u, 970649315u, 0, COPYSIGNF_TOLERANCE, 0}, +{1814, 959776291u, 3280345347u, 3107259939u, 0, COPYSIGNF_TOLERANCE, 0}, +{1815, 3341117305u, 3294559023u, 3341117305u, 0, COPYSIGNF_TOLERANCE, 0}, +{1816, 1270734970u, 3355874874u, 3418218618u, 0, COPYSIGNF_TOLERANCE, 0}, +{1817, 3454816067u, 868771977u, 1307332419u, 0, COPYSIGNF_TOLERANCE, 0}, +{1818, 917206623u, 1172710814u, 917206623u, 0, COPYSIGNF_TOLERANCE, 0}, +{1819, 1106502045u, 1290849316u, 1106502045u, 0, COPYSIGNF_TOLERANCE, 0}, +{1820, 1157598381u, 3309023746u, 3305082029u, 0, COPYSIGNF_TOLERANCE, 0}, +{1821, 3335234513u, 1002337336u, 1187750865u, 0, COPYSIGNF_TOLERANCE, 0}, +{1822, 1279489061u, 1006049444u, 1279489061u, 0, COPYSIGNF_TOLERANCE, 0}, +{1823, 3157416480u, 1309984610u, 1009932832u, 0, COPYSIGNF_TOLERANCE, 0}, +{1824, 3143920719u, 3131608518u, 3143920719u, 0, COPYSIGNF_TOLERANCE, 0}, +{1825, 1233171235u, 826460580u, 1233171235u, 0, COPYSIGNF_TOLERANCE, 0}, +{1826, 1148920078u, 1007674793u, 1148920078u, 0, COPYSIGNF_TOLERANCE, 0}, +{1827, 3064988156u, 3230867340u, 3064988156u, 0, COPYSIGNF_TOLERANCE, 0}, +{1828, 3083619260u, 1159415661u, 936135612u, 0, COPYSIGNF_TOLERANCE, 0}, +{1829, 1109198803u, 1221754614u, 1109198803u, 0, COPYSIGNF_TOLERANCE, 0}, +{1830, 3219949483u, 1056167693u, 1072465835u, 0, COPYSIGNF_TOLERANCE, 0}, +{1831, 3361149474u, 3387342069u, 3361149474u, 0, COPYSIGNF_TOLERANCE, 0}, +{1832, 1207502108u, 3388073586u, 3354985756u, 0, COPYSIGNF_TOLERANCE, 0}, +{1833, 1000014431u, 831213088u, 1000014431u, 0, COPYSIGNF_TOLERANCE, 0}, +{1834, 3161756316u, 3143659754u, 3161756316u, 0, COPYSIGNF_TOLERANCE, 0}, +{1835, 3160728744u, 3382954009u, 3160728744u, 0, COPYSIGNF_TOLERANCE, 0}, +{1836, 1234530539u, 1079988872u, 1234530539u, 0, COPYSIGNF_TOLERANCE, 0}, +{1837, 1017843965u, 1193076204u, 1017843965u, 0, COPYSIGNF_TOLERANCE, 0}, +{1838, 951862956u, 1173464654u, 951862956u, 0, COPYSIGNF_TOLERANCE, 0}, +{1839, 3306328852u, 1118701064u, 1158845204u, 0, COPYSIGNF_TOLERANCE, 0}, +{1840, 1291910469u, 1211303367u, 1291910469u, 0, COPYSIGNF_TOLERANCE, 0}, +{1841, 3027442905u, 1173894400u, 879959257u, 0, COPYSIGNF_TOLERANCE, 0}, +{1842, 1131927531u, 3182962700u, 3279411179u, 0, COPYSIGNF_TOLERANCE, 0}, +{1843, 3449879391u, 991614550u, 1302395743u, 0, COPYSIGNF_TOLERANCE, 0}, +{1844, 970094304u, 3344590506u, 3117577952u, 0, COPYSIGNF_TOLERANCE, 0}, +{1845, 1125551064u, 3331248076u, 3273034712u, 0, COPYSIGNF_TOLERANCE, 0}, +{1846, 3427296372u, 3455289118u, 3427296372u, 0, COPYSIGNF_TOLERANCE, 0}, +{1847, 1198917460u, 1327195159u, 1198917460u, 0, COPYSIGNF_TOLERANCE, 0}, +{1848, 3201603336u, 820047343u, 1054119688u, 0, COPYSIGNF_TOLERANCE, 0}, +{1849, 3114686212u, 3476082461u, 3114686212u, 0, COPYSIGNF_TOLERANCE, 0}, +{1850, 921940707u, 2967544056u, 3069424355u, 0, COPYSIGNF_TOLERANCE, 0}, +{1851, 1091906532u, 3011904455u, 3239390180u, 0, COPYSIGNF_TOLERANCE, 0}, +{1852, 3393557778u, 3383396815u, 3393557778u, 0, COPYSIGNF_TOLERANCE, 0}, +{1853, 1276853215u, 873199561u, 1276853215u, 0, COPYSIGNF_TOLERANCE, 0}, +{1854, 3462778440u, 3349284325u, 3462778440u, 0, COPYSIGNF_TOLERANCE, 0}, +{1855, 3360170117u, 3048354042u, 3360170117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1856, 3224245428u, 3271307999u, 3224245428u, 0, COPYSIGNF_TOLERANCE, 0}, +{1857, 1120124467u, 1135619937u, 1120124467u, 0, COPYSIGNF_TOLERANCE, 0}, +{1858, 1064364381u, 3180675544u, 3211848029u, 0, COPYSIGNF_TOLERANCE, 0}, +{1859, 1268744779u, 3328452652u, 3416228427u, 0, COPYSIGNF_TOLERANCE, 0}, +{1860, 1165195428u, 3390323168u, 3312679076u, 0, COPYSIGNF_TOLERANCE, 0}, +{1861, 3044092739u, 1106497311u, 896609091u, 0, COPYSIGNF_TOLERANCE, 0}, +{1862, 3149469534u, 1278465842u, 1001985886u, 0, COPYSIGNF_TOLERANCE, 0}, +{1863, 3247790039u, 909788142u, 1100306391u, 0, COPYSIGNF_TOLERANCE, 0}, +{1864, 3215244648u, 1083988595u, 1067761000u, 0, COPYSIGNF_TOLERANCE, 0}, +{1865, 3095275931u, 989153382u, 947792283u, 0, COPYSIGNF_TOLERANCE, 0}, +{1866, 3059688264u, 1117455718u, 912204616u, 0, COPYSIGNF_TOLERANCE, 0}, +{1867, 1212717473u, 837873779u, 1212717473u, 0, COPYSIGNF_TOLERANCE, 0}, +{1868, 3275973009u, 3450721670u, 3275973009u, 0, COPYSIGNF_TOLERANCE, 0}, +{1869, 3028857014u, 3188853813u, 3028857014u, 0, COPYSIGNF_TOLERANCE, 0}, +{1870, 3391162308u, 1291220039u, 1243678660u, 0, COPYSIGNF_TOLERANCE, 0}, +{1871, 1044867873u, 3369493273u, 3192351521u, 0, COPYSIGNF_TOLERANCE, 0}, +{1872, 1089986803u, 3462160118u, 3237470451u, 0, COPYSIGNF_TOLERANCE, 0}, +{1873, 1296314700u, 2957454177u, 3443798348u, 0, COPYSIGNF_TOLERANCE, 0}, +{1874, 1251462432u, 3171021770u, 3398946080u, 0, COPYSIGNF_TOLERANCE, 0}, +{1875, 3485236902u, 980772835u, 1337753254u, 0, COPYSIGNF_TOLERANCE, 0}, +{1876, 3262169538u, 1268270462u, 1114685890u, 0, COPYSIGNF_TOLERANCE, 0}, +{1877, 3080852256u, 994641495u, 933368608u, 0, COPYSIGNF_TOLERANCE, 0}, +{1878, 1022211242u, 922124181u, 1022211242u, 0, COPYSIGNF_TOLERANCE, 0}, +{1879, 884661176u, 2985540645u, 3032144824u, 0, COPYSIGNF_TOLERANCE, 0}, +{1880, 3071422941u, 3271100396u, 3071422941u, 0, COPYSIGNF_TOLERANCE, 0}, +{1881, 989762529u, 3362011135u, 3137246177u, 0, COPYSIGNF_TOLERANCE, 0}, +{1882, 1295475718u, 3212305413u, 3442959366u, 0, COPYSIGNF_TOLERANCE, 0}, +{1883, 1002632518u, 3330388441u, 3150116166u, 0, COPYSIGNF_TOLERANCE, 0}, +{1884, 3404372005u, 3450484255u, 3404372005u, 0, COPYSIGNF_TOLERANCE, 0}, +{1885, 3158912530u, 3105501826u, 3158912530u, 0, COPYSIGNF_TOLERANCE, 0}, +{1886, 1125800069u, 3256265749u, 3273283717u, 0, COPYSIGNF_TOLERANCE, 0}, +{1887, 3138037576u, 3103365227u, 3138037576u, 0, COPYSIGNF_TOLERANCE, 0}, +{1888, 3108384823u, 1300246663u, 960901175u, 0, COPYSIGNF_TOLERANCE, 0}, +{1889, 999985470u, 3409354318u, 3147469118u, 0, COPYSIGNF_TOLERANCE, 0}, +{1890, 1189421739u, 1056599002u, 1189421739u, 0, COPYSIGNF_TOLERANCE, 0}, +{1891, 3075182644u, 3144159778u, 3075182644u, 0, COPYSIGNF_TOLERANCE, 0}, +{1892, 3028099649u, 3391513557u, 3028099649u, 0, COPYSIGNF_TOLERANCE, 0}, +{1893, 3132541814u, 3444521949u, 3132541814u, 0, COPYSIGNF_TOLERANCE, 0}, +{1894, 1164046161u, 3440635788u, 3311529809u, 0, COPYSIGNF_TOLERANCE, 0}, +{1895, 1292596266u, 3116569667u, 3440079914u, 0, COPYSIGNF_TOLERANCE, 0}, +{1896, 3469748379u, 3412765608u, 3469748379u, 0, COPYSIGNF_TOLERANCE, 0}, +{1897, 1314644642u, 3123051784u, 3462128290u, 0, COPYSIGNF_TOLERANCE, 0}, +{1898, 3399813173u, 828743798u, 1252329525u, 0, COPYSIGNF_TOLERANCE, 0}, +{1899, 948775569u, 3485444126u, 3096259217u, 0, COPYSIGNF_TOLERANCE, 0}, +{1900, 1034611395u, 882288581u, 1034611395u, 0, COPYSIGNF_TOLERANCE, 0}, +{1901, 3489122735u, 3372450889u, 3489122735u, 0, COPYSIGNF_TOLERANCE, 0}, +{1902, 1181604787u, 3363067409u, 3329088435u, 0, COPYSIGNF_TOLERANCE, 0}, +{1903, 3059042077u, 3204983963u, 3059042077u, 0, COPYSIGNF_TOLERANCE, 0}, +{1904, 1043691622u, 3402603223u, 3191175270u, 0, COPYSIGNF_TOLERANCE, 0}, +{1905, 1314588083u, 856187848u, 1314588083u, 0, COPYSIGNF_TOLERANCE, 0}, +{1906, 3141533334u, 3010142974u, 3141533334u, 0, COPYSIGNF_TOLERANCE, 0}, +{1907, 3157534378u, 3451674717u, 3157534378u, 0, COPYSIGNF_TOLERANCE, 0}, +{1908, 3400949680u, 3073750220u, 3400949680u, 0, COPYSIGNF_TOLERANCE, 0}, +{1909, 3365581801u, 1175843167u, 1218098153u, 0, COPYSIGNF_TOLERANCE, 0}, +{1910, 1110424755u, 3011308654u, 3257908403u, 0, COPYSIGNF_TOLERANCE, 0}, +{1911, 3189917167u, 927278934u, 1042433519u, 0, COPYSIGNF_TOLERANCE, 0}, +{1912, 969804941u, 3355439348u, 3117288589u, 0, COPYSIGNF_TOLERANCE, 0}, +{1913, 1139120919u, 3270515074u, 3286604567u, 0, COPYSIGNF_TOLERANCE, 0}, +{1914, 934308144u, 3118191228u, 3081791792u, 0, COPYSIGNF_TOLERANCE, 0}, +{1915, 1220524226u, 1152648002u, 1220524226u, 0, COPYSIGNF_TOLERANCE, 0}, +{1916, 3162548604u, 3461790298u, 3162548604u, 0, COPYSIGNF_TOLERANCE, 0}, +{1917, 3382391700u, 3296962745u, 3382391700u, 0, COPYSIGNF_TOLERANCE, 0}, +{1918, 1156767533u, 1088986462u, 1156767533u, 0, COPYSIGNF_TOLERANCE, 0}, +{1919, 3079222483u, 3312324949u, 3079222483u, 0, COPYSIGNF_TOLERANCE, 0}, +{1920, 994934087u, 967678094u, 994934087u, 0, COPYSIGNF_TOLERANCE, 0}, +{1921, 3185240099u, 1123403720u, 1037756451u, 0, COPYSIGNF_TOLERANCE, 0}, +{1922, 3479873563u, 1246277393u, 1332389915u, 0, COPYSIGNF_TOLERANCE, 0}, +{1923, 3424264117u, 3434026174u, 3424264117u, 0, COPYSIGNF_TOLERANCE, 0}, +{1924, 3228365887u, 1216775310u, 1080882239u, 0, COPYSIGNF_TOLERANCE, 0}, +{1925, 1035909900u, 1249532942u, 1035909900u, 0, COPYSIGNF_TOLERANCE, 0}, +{1926, 3024951184u, 1247632131u, 877467536u, 0, COPYSIGNF_TOLERANCE, 0}, +{1927, 1212129651u, 3017366784u, 3359613299u, 0, COPYSIGNF_TOLERANCE, 0}, +{1928, 3125775254u, 955826310u, 978291606u, 0, COPYSIGNF_TOLERANCE, 0}, +{1929, 1037464105u, 3121544932u, 3184947753u, 0, COPYSIGNF_TOLERANCE, 0}, +{1930, 1311706596u, 1254918706u, 1311706596u, 0, COPYSIGNF_TOLERANCE, 0}, +{1931, 918212457u, 1017468331u, 918212457u, 0, COPYSIGNF_TOLERANCE, 0}, +{1932, 1337315179u, 3461361185u, 3484798827u, 0, COPYSIGNF_TOLERANCE, 0}, +{1933, 1131358407u, 3325958870u, 3278842055u, 0, COPYSIGNF_TOLERANCE, 0}, +{1934, 1156517523u, 3343716230u, 3304001171u, 0, COPYSIGNF_TOLERANCE, 0}, +{1935, 3210802820u, 3207408574u, 3210802820u, 0, COPYSIGNF_TOLERANCE, 0}, +{1936, 3337499209u, 1226297264u, 1190015561u, 0, COPYSIGNF_TOLERANCE, 0}, +{1937, 3468429030u, 3253874001u, 3468429030u, 0, COPYSIGNF_TOLERANCE, 0}, +{1938, 3253515800u, 1189005947u, 1106032152u, 0, COPYSIGNF_TOLERANCE, 0}, +{1939, 3055299953u, 3047908678u, 3055299953u, 0, COPYSIGNF_TOLERANCE, 0}, +{1940, 959956547u, 876324728u, 959956547u, 0, COPYSIGNF_TOLERANCE, 0}, +{1941, 3425290480u, 1139193797u, 1277806832u, 0, COPYSIGNF_TOLERANCE, 0}, +{1942, 1039917375u, 1122740999u, 1039917375u, 0, COPYSIGNF_TOLERANCE, 0}, +{1943, 3220979495u, 3429223871u, 3220979495u, 0, COPYSIGNF_TOLERANCE, 0}, +{1944, 1311016004u, 3334899880u, 3458499652u, 0, COPYSIGNF_TOLERANCE, 0}, +{1945, 1128016396u, 1105151547u, 1128016396u, 0, COPYSIGNF_TOLERANCE, 0}, +{1946, 3210335769u, 3100646155u, 3210335769u, 0, COPYSIGNF_TOLERANCE, 0}, +{1947, 3022705759u, 3404762495u, 3022705759u, 0, COPYSIGNF_TOLERANCE, 0}, +{1948, 1206054701u, 826010009u, 1206054701u, 0, COPYSIGNF_TOLERANCE, 0}, +{1949, 3144504834u, 1162227076u, 997021186u, 0, COPYSIGNF_TOLERANCE, 0}, +{1950, 1213609983u, 919983950u, 1213609983u, 0, COPYSIGNF_TOLERANCE, 0}, +{1951, 1246902946u, 3064047808u, 3394386594u, 0, COPYSIGNF_TOLERANCE, 0}, +{1952, 995850843u, 1332031130u, 995850843u, 0, COPYSIGNF_TOLERANCE, 0}, +{1953, 3362082828u, 3374056268u, 3362082828u, 0, COPYSIGNF_TOLERANCE, 0}, +{1954, 1029480631u, 3047777170u, 3176964279u, 0, COPYSIGNF_TOLERANCE, 0}, +{1955, 3153568584u, 3106514232u, 3153568584u, 0, COPYSIGNF_TOLERANCE, 0}, +{1956, 3384988527u, 3109485565u, 3384988527u, 0, COPYSIGNF_TOLERANCE, 0}, +{1957, 1317696241u, 870681806u, 1317696241u, 0, COPYSIGNF_TOLERANCE, 0}, +{1958, 3235395924u, 1132055244u, 1087912276u, 0, COPYSIGNF_TOLERANCE, 0}, +{1959, 3341877624u, 2969495570u, 3341877624u, 0, COPYSIGNF_TOLERANCE, 0}, +{1960, 1228636133u, 886552820u, 1228636133u, 0, COPYSIGNF_TOLERANCE, 0}, +{1961, 3161654634u, 3335899347u, 3161654634u, 0, COPYSIGNF_TOLERANCE, 0}, +{1962, 3162655243u, 3307203982u, 3162655243u, 0, COPYSIGNF_TOLERANCE, 0}, +{1963, 1207246237u, 859223639u, 1207246237u, 0, COPYSIGNF_TOLERANCE, 0}, +{1964, 1165476654u, 3350219111u, 3312960302u, 0, COPYSIGNF_TOLERANCE, 0}, +{1965, 1215278023u, 3019755242u, 3362761671u, 0, COPYSIGNF_TOLERANCE, 0}, +{1966, 1017239798u, 3438501281u, 3164723446u, 0, COPYSIGNF_TOLERANCE, 0}, +{1967, 1149651309u, 970030475u, 1149651309u, 0, COPYSIGNF_TOLERANCE, 0}, +{1968, 1111943722u, 3122211334u, 3259427370u, 0, COPYSIGNF_TOLERANCE, 0}, +{1969, 1189849849u, 3382739134u, 3337333497u, 0, COPYSIGNF_TOLERANCE, 0}, +{1970, 3204848496u, 3141519085u, 3204848496u, 0, COPYSIGNF_TOLERANCE, 0}, +{1971, 1249758327u, 3104759211u, 3397241975u, 0, COPYSIGNF_TOLERANCE, 0}, +{1972, 3092982276u, 3445282331u, 3092982276u, 0, COPYSIGNF_TOLERANCE, 0}, +{1973, 1168098747u, 1316854744u, 1168098747u, 0, COPYSIGNF_TOLERANCE, 0}, +{1974, 892549317u, 1179637545u, 892549317u, 0, COPYSIGNF_TOLERANCE, 0}, +{1975, 3301009024u, 3406174560u, 3301009024u, 0, COPYSIGNF_TOLERANCE, 0}, +{1976, 3233089227u, 1212652543u, 1085605579u, 0, COPYSIGNF_TOLERANCE, 0}, +{1977, 3218245284u, 1238873830u, 1070761636u, 0, COPYSIGNF_TOLERANCE, 0}, +{1978, 3215981890u, 3240474694u, 3215981890u, 0, COPYSIGNF_TOLERANCE, 0}, +{1979, 1266687209u, 3092038122u, 3414170857u, 0, COPYSIGNF_TOLERANCE, 0}, +{1980, 3487959775u, 3331372071u, 3487959775u, 0, COPYSIGNF_TOLERANCE, 0}, +{1981, 943645710u, 852875779u, 943645710u, 0, COPYSIGNF_TOLERANCE, 0}, +{1982, 3345065699u, 3282620725u, 3345065699u, 0, COPYSIGNF_TOLERANCE, 0}, +{1983, 935847271u, 1067255804u, 935847271u, 0, COPYSIGNF_TOLERANCE, 0}, +{1984, 3410336089u, 1111437780u, 1262852441u, 0, COPYSIGNF_TOLERANCE, 0}, +{1985, 3082940740u, 1336840432u, 935457092u, 0, COPYSIGNF_TOLERANCE, 0}, +{1986, 1141063391u, 1168908072u, 1141063391u, 0, COPYSIGNF_TOLERANCE, 0}, +{1987, 3059263153u, 3067795684u, 3059263153u, 0, COPYSIGNF_TOLERANCE, 0}, +{1988, 3353679791u, 897158391u, 1206196143u, 0, COPYSIGNF_TOLERANCE, 0}, +{1989, 1001823878u, 1016826861u, 1001823878u, 0, COPYSIGNF_TOLERANCE, 0}, +{1990, 1009130212u, 1004302940u, 1009130212u, 0, COPYSIGNF_TOLERANCE, 0}, +{1991, 3367127535u, 943136342u, 1219643887u, 0, COPYSIGNF_TOLERANCE, 0}, +{1992, 1032920919u, 3449126417u, 3180404567u, 0, COPYSIGNF_TOLERANCE, 0}, +{1993, 3281952870u, 3147012185u, 3281952870u, 0, COPYSIGNF_TOLERANCE, 0}, +{1994, 1237868497u, 3048281802u, 3385352145u, 0, COPYSIGNF_TOLERANCE, 0}, +{1995, 1153753924u, 3322269242u, 3301237572u, 0, COPYSIGNF_TOLERANCE, 0}, +{1996, 1120261759u, 892210998u, 1120261759u, 0, COPYSIGNF_TOLERANCE, 0}, +{1997, 3226328360u, 3366432856u, 3226328360u, 0, COPYSIGNF_TOLERANCE, 0}, +{1998, 3349595986u, 3251588707u, 3349595986u, 0, COPYSIGNF_TOLERANCE, 0}, +{1999, 3166889490u, 3306023523u, 3166889490u, 0, COPYSIGNF_TOLERANCE, 0}, +{2000, 1087750238u, 1099325523u, 1087750238u, 0, COPYSIGNF_TOLERANCE, 0}, +{2001, 3121620061u, 3359488363u, 3121620061u, 0, COPYSIGNF_TOLERANCE, 0}, +{2002, 1066116543u, 3072159933u, 3213600191u, 0, COPYSIGNF_TOLERANCE, 0}, +{2003, 3210898034u, 2981803389u, 3210898034u, 0, COPYSIGNF_TOLERANCE, 0}, +{2004, 3051923237u, 3364074347u, 3051923237u, 0, COPYSIGNF_TOLERANCE, 0}, +{2005, 1030612298u, 3345396001u, 3178095946u, 0, COPYSIGNF_TOLERANCE, 0}, +{2006, 1186234578u, 858134374u, 1186234578u, 0, COPYSIGNF_TOLERANCE, 0}, +{2007, 1331680743u, 1009396165u, 1331680743u, 0, COPYSIGNF_TOLERANCE, 0}, +{2008, 3060774997u, 1326067357u, 913291349u, 0, COPYSIGNF_TOLERANCE, 0}, +{2009, 887589411u, 1292305693u, 887589411u, 0, COPYSIGNF_TOLERANCE, 0}, +{2010, 1045232522u, 3234993273u, 3192716170u, 0, COPYSIGNF_TOLERANCE, 0}, +{2011, 3119858470u, 962515365u, 972374822u, 0, COPYSIGNF_TOLERANCE, 0}, +{2012, 3349432725u, 928848003u, 1201949077u, 0, COPYSIGNF_TOLERANCE, 0}, +{2013, 912423027u, 3184646319u, 3059906675u, 0, COPYSIGNF_TOLERANCE, 0}, +{2014, 3228795133u, 3273940030u, 3228795133u, 0, COPYSIGNF_TOLERANCE, 0}, +{2015, 3194674746u, 3112269709u, 3194674746u, 0, COPYSIGNF_TOLERANCE, 0}, +{2016, 3296784303u, 3276182352u, 3296784303u, 0, COPYSIGNF_TOLERANCE, 0}, +{2017, 965402291u, 3107104376u, 3112885939u, 0, COPYSIGNF_TOLERANCE, 0}, +{2018, 3388153589u, 3426245389u, 3388153589u, 0, COPYSIGNF_TOLERANCE, 0}, +{2019, 1133410485u, 3329658993u, 3280894133u, 0, COPYSIGNF_TOLERANCE, 0}, +{2020, 3136790322u, 1088652637u, 989306674u, 0, COPYSIGNF_TOLERANCE, 0}, +{2021, 3369970587u, 959121458u, 1222486939u, 0, COPYSIGNF_TOLERANCE, 0}, +{2022, 1270451568u, 928393353u, 1270451568u, 0, COPYSIGNF_TOLERANCE, 0}, +{2023, 989498922u, 3088358419u, 3136982570u, 0, COPYSIGNF_TOLERANCE, 0}, +{2024, 1280215674u, 3148135875u, 3427699322u, 0, COPYSIGNF_TOLERANCE, 0}, +{2025, 1171873518u, 954709738u, 1171873518u, 0, COPYSIGNF_TOLERANCE, 0}, +{2026, 3298258100u, 935525182u, 1150774452u, 0, COPYSIGNF_TOLERANCE, 0}, +{2027, 3415208824u, 822843236u, 1267725176u, 0, COPYSIGNF_TOLERANCE, 0}, +{2028, 1001897182u, 3191875320u, 3149380830u, 0, COPYSIGNF_TOLERANCE, 0}, +{2029, 3152777939u, 3245830463u, 3152777939u, 0, COPYSIGNF_TOLERANCE, 0}, +{2030, 985903305u, 3333087577u, 3133386953u, 0, COPYSIGNF_TOLERANCE, 0}, +{2031, 3357328848u, 859306298u, 1209845200u, 0, COPYSIGNF_TOLERANCE, 0}, +{2032, 982612185u, 923582663u, 982612185u, 0, COPYSIGNF_TOLERANCE, 0}, +{2033, 3267868136u, 1208301947u, 1120384488u, 0, COPYSIGNF_TOLERANCE, 0}, +{2034, 3319048157u, 1172271145u, 1171564509u, 0, COPYSIGNF_TOLERANCE, 0}, +{2035, 1144755661u, 860947435u, 1144755661u, 0, COPYSIGNF_TOLERANCE, 0}, +{2036, 898467286u, 839254959u, 898467286u, 0, COPYSIGNF_TOLERANCE, 0}, +{2037, 3301461672u, 1233693827u, 1153978024u, 0, COPYSIGNF_TOLERANCE, 0}, +{2038, 3364525678u, 3089849671u, 3364525678u, 0, COPYSIGNF_TOLERANCE, 0}, +{2039, 931441127u, 1133424555u, 931441127u, 0, COPYSIGNF_TOLERANCE, 0}, +{2040, 3146660041u, 3143695961u, 3146660041u, 0, COPYSIGNF_TOLERANCE, 0}, +{2041, 3467121799u, 3023584354u, 3467121799u, 0, COPYSIGNF_TOLERANCE, 0}, +{2042, 1151257041u, 3084216427u, 3298740689u, 0, COPYSIGNF_TOLERANCE, 0}, +{2043, 3097873255u, 3219266640u, 3097873255u, 0, COPYSIGNF_TOLERANCE, 0}, +{2044, 3130670309u, 3192399254u, 3130670309u, 0, COPYSIGNF_TOLERANCE, 0}, +{2045, 1017573824u, 3130901062u, 3165057472u, 0, COPYSIGNF_TOLERANCE, 0}, +{2046, 1258369714u, 3462258576u, 3405853362u, 0, COPYSIGNF_TOLERANCE, 0}, +{2047, 1216602683u, 3371396332u, 3364086331u, 0, COPYSIGNF_TOLERANCE, 0}, +{2048, 3297265739u, 1214184410u, 1149782091u, 0, COPYSIGNF_TOLERANCE, 0}, +{2049, 1071940738u, 3311731012u, 3219424386u, 0, COPYSIGNF_TOLERANCE, 0}, +{2050, 922601356u, 3337171870u, 3070085004u, 0, COPYSIGNF_TOLERANCE, 0}, +{2051, 3462285635u, 3444030332u, 3462285635u, 0, COPYSIGNF_TOLERANCE, 0}, +{2052, 3357177805u, 1085464241u, 1209694157u, 0, COPYSIGNF_TOLERANCE, 0}, +{2053, 3049120080u, 900832851u, 901636432u, 0, COPYSIGNF_TOLERANCE, 0}, +{2054, 1153863660u, 1011991342u, 1153863660u, 0, COPYSIGNF_TOLERANCE, 0}, +{2055, 3034243695u, 917098003u, 886760047u, 0, COPYSIGNF_TOLERANCE, 0}, +{2056, 1249365132u, 3278686216u, 3396848780u, 0, COPYSIGNF_TOLERANCE, 0}, +{2057, 3046215730u, 3211219980u, 3046215730u, 0, COPYSIGNF_TOLERANCE, 0}, +{2058, 3047251716u, 1090787353u, 899768068u, 0, COPYSIGNF_TOLERANCE, 0}, +{2059, 3131219358u, 3471261157u, 3131219358u, 0, COPYSIGNF_TOLERANCE, 0}, +{2060, 3222096285u, 1198013705u, 1074612637u, 0, COPYSIGNF_TOLERANCE, 0}, +{2061, 1297708818u, 3079166173u, 3445192466u, 0, COPYSIGNF_TOLERANCE, 0}, +{2062, 3345532722u, 3383708463u, 3345532722u, 0, COPYSIGNF_TOLERANCE, 0}, +{2063, 3418753236u, 3481843070u, 3418753236u, 0, COPYSIGNF_TOLERANCE, 0}, +{2064, 1277417964u, 3487506626u, 3424901612u, 0, COPYSIGNF_TOLERANCE, 0}, +{2065, 987577257u, 1152077087u, 987577257u, 0, COPYSIGNF_TOLERANCE, 0}, +{2066, 3161606610u, 3190282989u, 3161606610u, 0, COPYSIGNF_TOLERANCE, 0}, +{2067, 888030585u, 3062367380u, 3035514233u, 0, COPYSIGNF_TOLERANCE, 0}, +{2068, 1043442869u, 3311393817u, 3190926517u, 0, COPYSIGNF_TOLERANCE, 0}, +{2069, 3320923228u, 3464544249u, 3320923228u, 0, COPYSIGNF_TOLERANCE, 0}, +{2070, 1337400405u, 3488844154u, 3484884053u, 0, COPYSIGNF_TOLERANCE, 0}, +{2071, 3400348640u, 3129868490u, 3400348640u, 0, COPYSIGNF_TOLERANCE, 0}, +{2072, 1250249095u, 1069023744u, 1250249095u, 0, COPYSIGNF_TOLERANCE, 0}, +{2073, 3284411233u, 1173613526u, 1136927585u, 0, COPYSIGNF_TOLERANCE, 0}, +{2074, 3020883322u, 2953622587u, 3020883322u, 0, COPYSIGNF_TOLERANCE, 0}, +{2075, 1215968622u, 3469884568u, 3363452270u, 0, COPYSIGNF_TOLERANCE, 0}, +{2076, 3202319550u, 819117302u, 1054835902u, 0, COPYSIGNF_TOLERANCE, 0}, +{2077, 3061638260u, 3116222327u, 3061638260u, 0, COPYSIGNF_TOLERANCE, 0}, +{2078, 1025404104u, 1066370251u, 1025404104u, 0, COPYSIGNF_TOLERANCE, 0}, +{2079, 3138086437u, 3195983510u, 3138086437u, 0, COPYSIGNF_TOLERANCE, 0}, +{2080, 3091024506u, 3456196859u, 3091024506u, 0, COPYSIGNF_TOLERANCE, 0}, +{2081, 3362748242u, 3369843597u, 3362748242u, 0, COPYSIGNF_TOLERANCE, 0}, +{2082, 3099671635u, 3218383623u, 3099671635u, 0, COPYSIGNF_TOLERANCE, 0}, +{2083, 3068014841u, 2978226656u, 3068014841u, 0, COPYSIGNF_TOLERANCE, 0}, +{2084, 1252237719u, 1121169249u, 1252237719u, 0, COPYSIGNF_TOLERANCE, 0}, +{2085, 3327895594u, 1224511805u, 1180411946u, 0, COPYSIGNF_TOLERANCE, 0}, +{2086, 3082454432u, 889268276u, 934970784u, 0, COPYSIGNF_TOLERANCE, 0}, +{2087, 3396161504u, 1182798837u, 1248677856u, 0, COPYSIGNF_TOLERANCE, 0}, +{2088, 1099710167u, 887180181u, 1099710167u, 0, COPYSIGNF_TOLERANCE, 0}, +{2089, 1157186482u, 1288722647u, 1157186482u, 0, COPYSIGNF_TOLERANCE, 0}, +{2090, 1282110851u, 3176633124u, 3429594499u, 0, COPYSIGNF_TOLERANCE, 0}, +{2091, 3477008113u, 1331845018u, 1329524465u, 0, COPYSIGNF_TOLERANCE, 0}, +{2092, 3292127294u, 3409957764u, 3292127294u, 0, COPYSIGNF_TOLERANCE, 0}, +{2093, 1123357102u, 3281307320u, 3270840750u, 0, COPYSIGNF_TOLERANCE, 0}, +{2094, 1106837025u, 3088080674u, 3254320673u, 0, COPYSIGNF_TOLERANCE, 0}, +{2095, 1049949008u, 1130799489u, 1049949008u, 0, COPYSIGNF_TOLERANCE, 0}, +{2096, 1253017688u, 942062372u, 1253017688u, 0, COPYSIGNF_TOLERANCE, 0}, +{2097, 1108543194u, 3281299199u, 3256026842u, 0, COPYSIGNF_TOLERANCE, 0}, +{2098, 3087985411u, 1238341456u, 940501763u, 0, COPYSIGNF_TOLERANCE, 0}, +{2099, 3163283126u, 1328636961u, 1015799478u, 0, COPYSIGNF_TOLERANCE, 0}, +{2100, 1160162706u, 1264067367u, 1160162706u, 0, COPYSIGNF_TOLERANCE, 0}, +{2101, 3305715025u, 3017496063u, 3305715025u, 0, COPYSIGNF_TOLERANCE, 0}, +{2102, 1266928623u, 811778614u, 1266928623u, 0, COPYSIGNF_TOLERANCE, 0}, +{2103, 3025340297u, 1193925540u, 877856649u, 0, COPYSIGNF_TOLERANCE, 0}, +{2104, 3438080027u, 3107114149u, 3438080027u, 0, COPYSIGNF_TOLERANCE, 0}, +{2105, 3344574751u, 3111270744u, 3344574751u, 0, COPYSIGNF_TOLERANCE, 0}, +{2106, 1152416724u, 962669179u, 1152416724u, 0, COPYSIGNF_TOLERANCE, 0}, +{2107, 1218239308u, 1126238113u, 1218239308u, 0, COPYSIGNF_TOLERANCE, 0}, +{2108, 3263310567u, 1030748197u, 1115826919u, 0, COPYSIGNF_TOLERANCE, 0}, +{2109, 3041998669u, 1160635263u, 894515021u, 0, COPYSIGNF_TOLERANCE, 0}, +{2110, 1000313118u, 2980130729u, 3147796766u, 0, COPYSIGNF_TOLERANCE, 0}, +{2111, 972485427u, 1124312043u, 972485427u, 0, COPYSIGNF_TOLERANCE, 0}, +{2112, 3290264612u, 1124703898u, 1142780964u, 0, COPYSIGNF_TOLERANCE, 0}, +{2113, 3222106584u, 1183748648u, 1074622936u, 0, COPYSIGNF_TOLERANCE, 0}, +{2114, 1278946388u, 825129857u, 1278946388u, 0, COPYSIGNF_TOLERANCE, 0}, +{2115, 947914771u, 3181847068u, 3095398419u, 0, COPYSIGNF_TOLERANCE, 0}, +{2116, 3167730654u, 3195765940u, 3167730654u, 0, COPYSIGNF_TOLERANCE, 0}, +{2117, 1098530298u, 3255870890u, 3246013946u, 0, COPYSIGNF_TOLERANCE, 0}, +{2118, 3232726036u, 871038882u, 1085242388u, 0, COPYSIGNF_TOLERANCE, 0}, +{2119, 1297190916u, 811863044u, 1297190916u, 0, COPYSIGNF_TOLERANCE, 0}, +{2120, 1277649137u, 961171401u, 1277649137u, 0, COPYSIGNF_TOLERANCE, 0}, +{2121, 3203377685u, 1306427476u, 1055894037u, 0, COPYSIGNF_TOLERANCE, 0}, +{2122, 3090306474u, 3124785016u, 3090306474u, 0, COPYSIGNF_TOLERANCE, 0}, +{2123, 3244032016u, 3045313345u, 3244032016u, 0, COPYSIGNF_TOLERANCE, 0}, +{2124, 3033122376u, 3049877065u, 3033122376u, 0, COPYSIGNF_TOLERANCE, 0}, +{2125, 1096155623u, 1256423752u, 1096155623u, 0, COPYSIGNF_TOLERANCE, 0}, +{2126, 873151908u, 3246562559u, 3020635556u, 0, COPYSIGNF_TOLERANCE, 0}, +{2127, 3238729605u, 1298769842u, 1091245957u, 0, COPYSIGNF_TOLERANCE, 0}, +{2128, 3317196817u, 989537151u, 1169713169u, 0, COPYSIGNF_TOLERANCE, 0}, +{2129, 3374748510u, 834161190u, 1227264862u, 0, COPYSIGNF_TOLERANCE, 0}, +{2130, 3345634950u, 959901149u, 1198151302u, 0, COPYSIGNF_TOLERANCE, 0}, +{2131, 3189860276u, 883598767u, 1042376628u, 0, COPYSIGNF_TOLERANCE, 0}, +{2132, 887311687u, 1175312255u, 887311687u, 0, COPYSIGNF_TOLERANCE, 0}, +{2133, 3396917283u, 3066326686u, 3396917283u, 0, COPYSIGNF_TOLERANCE, 0}, +{2134, 3317032737u, 3143803722u, 3317032737u, 0, COPYSIGNF_TOLERANCE, 0}, +{2135, 1200051436u, 1163802508u, 1200051436u, 0, COPYSIGNF_TOLERANCE, 0}, +{2136, 3105291012u, 1194385202u, 957807364u, 0, COPYSIGNF_TOLERANCE, 0}, +{2137, 1306520561u, 957302464u, 1306520561u, 0, COPYSIGNF_TOLERANCE, 0}, +{2138, 1314936356u, 2985592532u, 3462420004u, 0, COPYSIGNF_TOLERANCE, 0}, +{2139, 3475052219u, 1284049853u, 1327568571u, 0, COPYSIGNF_TOLERANCE, 0}, +{2140, 3085636260u, 1107682820u, 938152612u, 0, COPYSIGNF_TOLERANCE, 0}, +{2141, 3393227708u, 3271879112u, 3393227708u, 0, COPYSIGNF_TOLERANCE, 0}, +{2142, 3182540197u, 852580839u, 1035056549u, 0, COPYSIGNF_TOLERANCE, 0}, +{2143, 3349005404u, 3080993030u, 3349005404u, 0, COPYSIGNF_TOLERANCE, 0}, +{2144, 3154720153u, 3443720494u, 3154720153u, 0, COPYSIGNF_TOLERANCE, 0}, +{2145, 1262863321u, 1219003129u, 1262863321u, 0, COPYSIGNF_TOLERANCE, 0}, +{2146, 882902102u, 1224362550u, 882902102u, 0, COPYSIGNF_TOLERANCE, 0}, +{2147, 1053387478u, 3184880021u, 3200871126u, 0, COPYSIGNF_TOLERANCE, 0}, +{2148, 3387653691u, 3347783852u, 3387653691u, 0, COPYSIGNF_TOLERANCE, 0}, +{2149, 3136364836u, 1018492227u, 988881188u, 0, COPYSIGNF_TOLERANCE, 0}, +{2150, 1338680611u, 1166078045u, 1338680611u, 0, COPYSIGNF_TOLERANCE, 0}, +{2151, 1112891928u, 3074730425u, 3260375576u, 0, COPYSIGNF_TOLERANCE, 0}, +{2152, 893449284u, 1052877339u, 893449284u, 0, COPYSIGNF_TOLERANCE, 0}, +{2153, 892311459u, 1097338393u, 892311459u, 0, COPYSIGNF_TOLERANCE, 0}, +{2154, 3105373037u, 3246705916u, 3105373037u, 0, COPYSIGNF_TOLERANCE, 0}, +{2155, 1190105283u, 3033907262u, 3337588931u, 0, COPYSIGNF_TOLERANCE, 0}, +{2156, 1011225926u, 1180485180u, 1011225926u, 0, COPYSIGNF_TOLERANCE, 0}, +{2157, 1043025031u, 987068973u, 1043025031u, 0, COPYSIGNF_TOLERANCE, 0}, +{2158, 3410531037u, 2953541915u, 3410531037u, 0, COPYSIGNF_TOLERANCE, 0}, +{2159, 3125834184u, 896953754u, 978350536u, 0, COPYSIGNF_TOLERANCE, 0}, +{2160, 902318189u, 849277289u, 902318189u, 0, COPYSIGNF_TOLERANCE, 0}, +{2161, 3213624815u, 2987148017u, 3213624815u, 0, COPYSIGNF_TOLERANCE, 0}, +{2162, 1120888322u, 1086209113u, 1120888322u, 0, COPYSIGNF_TOLERANCE, 0}, +{2163, 1315217243u, 3396371713u, 3462700891u, 0, COPYSIGNF_TOLERANCE, 0}, +{2164, 3137758475u, 1039403054u, 990274827u, 0, COPYSIGNF_TOLERANCE, 0}, +{2165, 1040617590u, 1034835971u, 1040617590u, 0, COPYSIGNF_TOLERANCE, 0}, +{2166, 955384253u, 3344785562u, 3102867901u, 0, COPYSIGNF_TOLERANCE, 0}, +{2167, 3061417900u, 1172208065u, 913934252u, 0, COPYSIGNF_TOLERANCE, 0}, +{2168, 904255535u, 1019967545u, 904255535u, 0, COPYSIGNF_TOLERANCE, 0}, +{2169, 1022984119u, 3113891410u, 3170467767u, 0, COPYSIGNF_TOLERANCE, 0}, +{2170, 997362368u, 3112875428u, 3144846016u, 0, COPYSIGNF_TOLERANCE, 0}, +{2171, 900933520u, 1100589187u, 900933520u, 0, COPYSIGNF_TOLERANCE, 0}, +{2172, 1168623062u, 1143306482u, 1168623062u, 0, COPYSIGNF_TOLERANCE, 0}, +{2173, 878737490u, 3269908326u, 3026221138u, 0, COPYSIGNF_TOLERANCE, 0}, +{2174, 1039827284u, 1072928888u, 1039827284u, 0, COPYSIGNF_TOLERANCE, 0}, +{2175, 1021564080u, 1064468397u, 1021564080u, 0, COPYSIGNF_TOLERANCE, 0}, +{2176, 3458669745u, 3033299853u, 3458669745u, 0, COPYSIGNF_TOLERANCE, 0}, +{2177, 3327516316u, 3405380971u, 3327516316u, 0, COPYSIGNF_TOLERANCE, 0}, +{2178, 1040711112u, 3229444200u, 3188194760u, 0, COPYSIGNF_TOLERANCE, 0}, +{2179, 1134528351u, 3365952513u, 3282011999u, 0, COPYSIGNF_TOLERANCE, 0}, +{2180, 3039884464u, 1170612785u, 892400816u, 0, COPYSIGNF_TOLERANCE, 0}, +{2181, 3414352838u, 3350285760u, 3414352838u, 0, COPYSIGNF_TOLERANCE, 0}, +{2182, 1133689539u, 1067460093u, 1133689539u, 0, COPYSIGNF_TOLERANCE, 0}, +{2183, 3455688478u, 3333091960u, 3455688478u, 0, COPYSIGNF_TOLERANCE, 0}, +{2184, 1137634874u, 1137038869u, 1137634874u, 0, COPYSIGNF_TOLERANCE, 0}, +{2185, 3415502662u, 955510692u, 1268019014u, 0, COPYSIGNF_TOLERANCE, 0}, +{2186, 954999730u, 969618597u, 954999730u, 0, COPYSIGNF_TOLERANCE, 0}, +{2187, 1066157309u, 3241712664u, 3213640957u, 0, COPYSIGNF_TOLERANCE, 0}, +{2188, 3436353675u, 1174967495u, 1288870027u, 0, COPYSIGNF_TOLERANCE, 0}, +{2189, 940437609u, 860372396u, 940437609u, 0, COPYSIGNF_TOLERANCE, 0}, +{2190, 3108347547u, 3434003435u, 3108347547u, 0, COPYSIGNF_TOLERANCE, 0}, +{2191, 3064200154u, 3158080507u, 3064200154u, 0, COPYSIGNF_TOLERANCE, 0}, +{2192, 1023889593u, 2979304683u, 3171373241u, 0, COPYSIGNF_TOLERANCE, 0}, +{2193, 3272661536u, 3461799138u, 3272661536u, 0, COPYSIGNF_TOLERANCE, 0}, +{2194, 1170245333u, 1233406410u, 1170245333u, 0, COPYSIGNF_TOLERANCE, 0}, +{2195, 1219052056u, 3369557946u, 3366535704u, 0, COPYSIGNF_TOLERANCE, 0}, +{2196, 3318983619u, 3259663338u, 3318983619u, 0, COPYSIGNF_TOLERANCE, 0}, +{2197, 3372118621u, 837597103u, 1224634973u, 0, COPYSIGNF_TOLERANCE, 0}, +{2198, 3146190320u, 889646054u, 998706672u, 0, COPYSIGNF_TOLERANCE, 0}, +{2199, 1299683827u, 966031619u, 1299683827u, 0, COPYSIGNF_TOLERANCE, 0}, +{2200, 3190796331u, 1320011850u, 1043312683u, 0, COPYSIGNF_TOLERANCE, 0}, +{2201, 3086068902u, 3484245751u, 3086068902u, 0, COPYSIGNF_TOLERANCE, 0}, +{2202, 3064155399u, 3176569312u, 3064155399u, 0, COPYSIGNF_TOLERANCE, 0}, +{2203, 3040314717u, 1071290674u, 892831069u, 0, COPYSIGNF_TOLERANCE, 0}, +{2204, 3257224022u, 3361778245u, 3257224022u, 0, COPYSIGNF_TOLERANCE, 0}, +{2205, 1229268598u, 1066965677u, 1229268598u, 0, COPYSIGNF_TOLERANCE, 0}, +{2206, 3184078812u, 871003709u, 1036595164u, 0, COPYSIGNF_TOLERANCE, 0}, +{2207, 1086717248u, 3423795374u, 3234200896u, 0, COPYSIGNF_TOLERANCE, 0}, +{2208, 3434884607u, 3029593823u, 3434884607u, 0, COPYSIGNF_TOLERANCE, 0}, +{2209, 3464955606u, 1017987696u, 1317471958u, 0, COPYSIGNF_TOLERANCE, 0}, +{2210, 1025278524u, 3121856207u, 3172762172u, 0, COPYSIGNF_TOLERANCE, 0}, +{2211, 1242829722u, 3233935671u, 3390313370u, 0, COPYSIGNF_TOLERANCE, 0}, +{2212, 3075149137u, 1117325737u, 927665489u, 0, COPYSIGNF_TOLERANCE, 0}, +{2213, 1200927971u, 1317167489u, 1200927971u, 0, COPYSIGNF_TOLERANCE, 0}, +{2214, 3326858092u, 3452602832u, 3326858092u, 0, COPYSIGNF_TOLERANCE, 0}, +{2215, 1246019790u, 850632217u, 1246019790u, 0, COPYSIGNF_TOLERANCE, 0}, +{2216, 3184801644u, 1137974313u, 1037317996u, 0, COPYSIGNF_TOLERANCE, 0}, +{2217, 1136052740u, 3244616020u, 3283536388u, 0, COPYSIGNF_TOLERANCE, 0}, +{2218, 1069009211u, 3002507482u, 3216492859u, 0, COPYSIGNF_TOLERANCE, 0}, +{2219, 1015670780u, 1101217251u, 1015670780u, 0, COPYSIGNF_TOLERANCE, 0}, +{2220, 1012543234u, 1116520440u, 1012543234u, 0, COPYSIGNF_TOLERANCE, 0}, +{2221, 3316611992u, 3394732912u, 3316611992u, 0, COPYSIGNF_TOLERANCE, 0}, +{2222, 1087942795u, 3316660295u, 3235426443u, 0, COPYSIGNF_TOLERANCE, 0}, +{2223, 3426365713u, 3069778532u, 3426365713u, 0, COPYSIGNF_TOLERANCE, 0}, +{2224, 3066654389u, 3443934204u, 3066654389u, 0, COPYSIGNF_TOLERANCE, 0}, +{2225, 3295326432u, 1313396175u, 1147842784u, 0, COPYSIGNF_TOLERANCE, 0}, +{2226, 3318835308u, 3277583511u, 3318835308u, 0, COPYSIGNF_TOLERANCE, 0}, +{2227, 3283555717u, 891875120u, 1136072069u, 0, COPYSIGNF_TOLERANCE, 0}, +{2228, 3381255420u, 3015406047u, 3381255420u, 0, COPYSIGNF_TOLERANCE, 0}, +{2229, 3040485181u, 3375450886u, 3040485181u, 0, COPYSIGNF_TOLERANCE, 0}, +{2230, 3388772093u, 1032597076u, 1241288445u, 0, COPYSIGNF_TOLERANCE, 0}, +{2231, 954670189u, 1144923689u, 954670189u, 0, COPYSIGNF_TOLERANCE, 0}, +{2232, 1319200415u, 3387555900u, 3466684063u, 0, COPYSIGNF_TOLERANCE, 0}, +{2233, 1279324488u, 3228401212u, 3426808136u, 0, COPYSIGNF_TOLERANCE, 0}, +{2234, 3217795424u, 865577227u, 1070311776u, 0, COPYSIGNF_TOLERANCE, 0}, +{2235, 3455131757u, 1260217257u, 1307648109u, 0, COPYSIGNF_TOLERANCE, 0}, +{2236, 1246947517u, 1087951909u, 1246947517u, 0, COPYSIGNF_TOLERANCE, 0}, +{2237, 3396723577u, 869285240u, 1249239929u, 0, COPYSIGNF_TOLERANCE, 0}, +{2238, 3433761025u, 3060143904u, 3433761025u, 0, COPYSIGNF_TOLERANCE, 0}, +{2239, 3201187455u, 900233172u, 1053703807u, 0, COPYSIGNF_TOLERANCE, 0}, +{2240, 1173247961u, 1191127979u, 1173247961u, 0, COPYSIGNF_TOLERANCE, 0}, +{2241, 3037297123u, 3346394818u, 3037297123u, 0, COPYSIGNF_TOLERANCE, 0}, +{2242, 3248534678u, 1323683800u, 1101051030u, 0, COPYSIGNF_TOLERANCE, 0}, +{2243, 3083019343u, 3033309444u, 3083019343u, 0, COPYSIGNF_TOLERANCE, 0}, +{2244, 3042018375u, 3203882372u, 3042018375u, 0, COPYSIGNF_TOLERANCE, 0}, +{2245, 1082862511u, 3032804719u, 3230346159u, 0, COPYSIGNF_TOLERANCE, 0}, +{2246, 3157626955u, 3483653298u, 3157626955u, 0, COPYSIGNF_TOLERANCE, 0}, +{2247, 1341821683u, 3003675365u, 3489305331u, 0, COPYSIGNF_TOLERANCE, 0}, +{2248, 881101379u, 1190838126u, 881101379u, 0, COPYSIGNF_TOLERANCE, 0}, +{2249, 1079061705u, 2960507663u, 3226545353u, 0, COPYSIGNF_TOLERANCE, 0}, +{2250, 3182695954u, 3256861672u, 3182695954u, 0, COPYSIGNF_TOLERANCE, 0}, +{2251, 1105291533u, 3482971524u, 3252775181u, 0, COPYSIGNF_TOLERANCE, 0}, +{2252, 1016023520u, 3227712090u, 3163507168u, 0, COPYSIGNF_TOLERANCE, 0}, +{2253, 3370691006u, 1295870514u, 1223207358u, 0, COPYSIGNF_TOLERANCE, 0}, +{2254, 1156767169u, 1049756240u, 1156767169u, 0, COPYSIGNF_TOLERANCE, 0}, +{2255, 3077020499u, 894671462u, 929536851u, 0, COPYSIGNF_TOLERANCE, 0}, +{2256, 1104284039u, 3040211914u, 3251767687u, 0, COPYSIGNF_TOLERANCE, 0}, +{2257, 3335212901u, 3486414589u, 3335212901u, 0, COPYSIGNF_TOLERANCE, 0}, +{2258, 1093697541u, 3193708441u, 3241181189u, 0, COPYSIGNF_TOLERANCE, 0}, +{2259, 3266691185u, 1160074593u, 1119207537u, 0, COPYSIGNF_TOLERANCE, 0}, +{2260, 3179003144u, 1108615803u, 1031519496u, 0, COPYSIGNF_TOLERANCE, 0}, +{2261, 1094115255u, 3008610212u, 3241598903u, 0, COPYSIGNF_TOLERANCE, 0}, +{2262, 3424086808u, 3260140004u, 3424086808u, 0, COPYSIGNF_TOLERANCE, 0}, +{2263, 3353608773u, 1134068114u, 1206125125u, 0, COPYSIGNF_TOLERANCE, 0}, +{2264, 973664327u, 1319516167u, 973664327u, 0, COPYSIGNF_TOLERANCE, 0}, +{2265, 882878091u, 3136970767u, 3030361739u, 0, COPYSIGNF_TOLERANCE, 0}, +{2266, 1098662266u, 833740182u, 1098662266u, 0, COPYSIGNF_TOLERANCE, 0}, +{2267, 927582555u, 947955456u, 927582555u, 0, COPYSIGNF_TOLERANCE, 0}, +{2268, 3111440310u, 3067634077u, 3111440310u, 0, COPYSIGNF_TOLERANCE, 0}, +{2269, 3476083859u, 966439623u, 1328600211u, 0, COPYSIGNF_TOLERANCE, 0}, +{2270, 3038754840u, 932009686u, 891271192u, 0, COPYSIGNF_TOLERANCE, 0}, +{2271, 979878744u, 1232482646u, 979878744u, 0, COPYSIGNF_TOLERANCE, 0}, +{2272, 3464546616u, 3205527253u, 3464546616u, 0, COPYSIGNF_TOLERANCE, 0}, +{2273, 1002542205u, 3152136093u, 3150025853u, 0, COPYSIGNF_TOLERANCE, 0}, +{2274, 3443552129u, 3165561391u, 3443552129u, 0, COPYSIGNF_TOLERANCE, 0}, +{2275, 1287620154u, 3119707283u, 3435103802u, 0, COPYSIGNF_TOLERANCE, 0}, +{2276, 946058434u, 1249928879u, 946058434u, 0, COPYSIGNF_TOLERANCE, 0}, +{2277, 3073260205u, 3093124531u, 3073260205u, 0, COPYSIGNF_TOLERANCE, 0}, +{2278, 1245702957u, 894348966u, 1245702957u, 0, COPYSIGNF_TOLERANCE, 0}, +{2279, 989655126u, 1308376568u, 989655126u, 0, COPYSIGNF_TOLERANCE, 0}, +{2280, 1002715618u, 1191006977u, 1002715618u, 0, COPYSIGNF_TOLERANCE, 0}, +{2281, 3087802274u, 897541752u, 940318626u, 0, COPYSIGNF_TOLERANCE, 0}, +{2282, 1000863905u, 1196831314u, 1000863905u, 0, COPYSIGNF_TOLERANCE, 0}, +{2283, 3415763001u, 3032518431u, 3415763001u, 0, COPYSIGNF_TOLERANCE, 0}, +{2284, 3283471961u, 1260093226u, 1135988313u, 0, COPYSIGNF_TOLERANCE, 0}, +{2285, 3311210827u, 1192192264u, 1163727179u, 0, COPYSIGNF_TOLERANCE, 0}, +{2286, 3026311911u, 2968974374u, 3026311911u, 0, COPYSIGNF_TOLERANCE, 0}, +{2287, 1198307901u, 1116328249u, 1198307901u, 0, COPYSIGNF_TOLERANCE, 0}, +{2288, 1288901567u, 1296370667u, 1288901567u, 0, COPYSIGNF_TOLERANCE, 0}, +{2289, 922255363u, 958305289u, 922255363u, 0, COPYSIGNF_TOLERANCE, 0}, +{2290, 1113104661u, 944376032u, 1113104661u, 0, COPYSIGNF_TOLERANCE, 0}, +{2291, 1136714348u, 828849087u, 1136714348u, 0, COPYSIGNF_TOLERANCE, 0}, +{2292, 948856035u, 1015466475u, 948856035u, 0, COPYSIGNF_TOLERANCE, 0}, +{2293, 1062512367u, 3229559531u, 3209996015u, 0, COPYSIGNF_TOLERANCE, 0}, +{2294, 3486907092u, 823220784u, 1339423444u, 0, COPYSIGNF_TOLERANCE, 0}, +{2295, 1162027071u, 3308983387u, 3309510719u, 0, COPYSIGNF_TOLERANCE, 0}, +{2296, 1034561811u, 1054043114u, 1034561811u, 0, COPYSIGNF_TOLERANCE, 0}, +{2297, 3271615417u, 3209997200u, 3271615417u, 0, COPYSIGNF_TOLERANCE, 0}, +{2298, 1042014529u, 1146708584u, 1042014529u, 0, COPYSIGNF_TOLERANCE, 0}, +{2299, 1177157787u, 3090208179u, 3324641435u, 0, COPYSIGNF_TOLERANCE, 0}, +{2300, 3196144817u, 1056118717u, 1048661169u, 0, COPYSIGNF_TOLERANCE, 0}, +{2301, 3432084552u, 2997091781u, 3432084552u, 0, COPYSIGNF_TOLERANCE, 0}, +{2302, 1309658335u, 1010219988u, 1309658335u, 0, COPYSIGNF_TOLERANCE, 0}, +{2303, 1226494979u, 2991604792u, 3373978627u, 0, COPYSIGNF_TOLERANCE, 0}, +{2304, 3100289712u, 3456334210u, 3100289712u, 0, COPYSIGNF_TOLERANCE, 0}, +{2305, 3375507013u, 1306310823u, 1228023365u, 0, COPYSIGNF_TOLERANCE, 0}, +{2306, 3460699001u, 3096700943u, 3460699001u, 0, COPYSIGNF_TOLERANCE, 0}, +{2307, 3079231719u, 1044386263u, 931748071u, 0, COPYSIGNF_TOLERANCE, 0}, +{2308, 3093951884u, 1014115231u, 946468236u, 0, COPYSIGNF_TOLERANCE, 0}, +{2309, 3468023178u, 1209565017u, 1320539530u, 0, COPYSIGNF_TOLERANCE, 0}, +{2310, 1204196034u, 3298625731u, 3351679682u, 0, COPYSIGNF_TOLERANCE, 0}, +{2311, 3459877411u, 2960476959u, 3459877411u, 0, COPYSIGNF_TOLERANCE, 0}, +{2312, 909696559u, 1163075690u, 909696559u, 0, COPYSIGNF_TOLERANCE, 0}, +{2313, 1161439847u, 943449277u, 1161439847u, 0, COPYSIGNF_TOLERANCE, 0}, +{2314, 908663107u, 939489763u, 908663107u, 0, COPYSIGNF_TOLERANCE, 0}, +{2315, 1055319316u, 3261813492u, 3202802964u, 0, COPYSIGNF_TOLERANCE, 0}, +{2316, 1084378658u, 1009650785u, 1084378658u, 0, COPYSIGNF_TOLERANCE, 0}, +{2317, 3053887750u, 3341786453u, 3053887750u, 0, COPYSIGNF_TOLERANCE, 0}, +{2318, 3022828828u, 881335251u, 875345180u, 0, COPYSIGNF_TOLERANCE, 0}, +{2319, 1226473697u, 821025132u, 1226473697u, 0, COPYSIGNF_TOLERANCE, 0}, +{2320, 1123114742u, 1229815537u, 1123114742u, 0, COPYSIGNF_TOLERANCE, 0}, +{2321, 1258114435u, 1291336083u, 1258114435u, 0, COPYSIGNF_TOLERANCE, 0}, +{2322, 3468040845u, 3066966245u, 3468040845u, 0, COPYSIGNF_TOLERANCE, 0}, +{2323, 1178825761u, 1113195286u, 1178825761u, 0, COPYSIGNF_TOLERANCE, 0}, +{2324, 3059266302u, 878503862u, 911782654u, 0, COPYSIGNF_TOLERANCE, 0}, +{2325, 3223384012u, 1130486973u, 1075900364u, 0, COPYSIGNF_TOLERANCE, 0}, +{2326, 1019964626u, 1235133609u, 1019964626u, 0, COPYSIGNF_TOLERANCE, 0}, +{2327, 3445262427u, 3465211174u, 3445262427u, 0, COPYSIGNF_TOLERANCE, 0}, +{2328, 1125653081u, 1207799746u, 1125653081u, 0, COPYSIGNF_TOLERANCE, 0}, +{2329, 3337652712u, 3025581813u, 3337652712u, 0, COPYSIGNF_TOLERANCE, 0}, +{2330, 1184753508u, 3147374485u, 3332237156u, 0, COPYSIGNF_TOLERANCE, 0}, +{2331, 996404791u, 3353251979u, 3143888439u, 0, COPYSIGNF_TOLERANCE, 0}, +{2332, 1188439315u, 1113484271u, 1188439315u, 0, COPYSIGNF_TOLERANCE, 0}, +{2333, 906557513u, 3006513432u, 3054041161u, 0, COPYSIGNF_TOLERANCE, 0}, +{2334, 916831283u, 999465787u, 916831283u, 0, COPYSIGNF_TOLERANCE, 0}, +{2335, 996786317u, 3179221951u, 3144269965u, 0, COPYSIGNF_TOLERANCE, 0}, +{2336, 3461635065u, 1004690387u, 1314151417u, 0, COPYSIGNF_TOLERANCE, 0}, +{2337, 1188167943u, 1200744896u, 1188167943u, 0, COPYSIGNF_TOLERANCE, 0}, +{2338, 3036502395u, 1172597364u, 889018747u, 0, COPYSIGNF_TOLERANCE, 0}, +{2339, 891257783u, 1267560050u, 891257783u, 0, COPYSIGNF_TOLERANCE, 0}, +{2340, 3290079438u, 846519377u, 1142595790u, 0, COPYSIGNF_TOLERANCE, 0}, +{2341, 3350690327u, 2967953392u, 3350690327u, 0, COPYSIGNF_TOLERANCE, 0}, +{2342, 1102061604u, 3424449935u, 3249545252u, 0, COPYSIGNF_TOLERANCE, 0}, +{2343, 1282351521u, 3039376424u, 3429835169u, 0, COPYSIGNF_TOLERANCE, 0}, +{2344, 3458861065u, 3392466405u, 3458861065u, 0, COPYSIGNF_TOLERANCE, 0}, +{2345, 3095256878u, 1023623326u, 947773230u, 0, COPYSIGNF_TOLERANCE, 0}, +{2346, 3163373610u, 843150426u, 1015889962u, 0, COPYSIGNF_TOLERANCE, 0}, +{2347, 3228793330u, 855146890u, 1081309682u, 0, COPYSIGNF_TOLERANCE, 0}, +{2348, 3422194733u, 893873945u, 1274711085u, 0, COPYSIGNF_TOLERANCE, 0}, +{2349, 3083885296u, 974543672u, 936401648u, 0, COPYSIGNF_TOLERANCE, 0}, +{2350, 1261940623u, 3402349985u, 3409424271u, 0, COPYSIGNF_TOLERANCE, 0}, +{2351, 3400603081u, 3234396843u, 3400603081u, 0, COPYSIGNF_TOLERANCE, 0}, +{2352, 1219411812u, 2961857939u, 3366895460u, 0, COPYSIGNF_TOLERANCE, 0}, +{2353, 3094833770u, 805351108u, 947350122u, 0, COPYSIGNF_TOLERANCE, 0}, +{2354, 3139250800u, 3079109479u, 3139250800u, 0, COPYSIGNF_TOLERANCE, 0}, +{2355, 886201503u, 3272760705u, 3033685151u, 0, COPYSIGNF_TOLERANCE, 0}, +{2356, 3297366026u, 1089966380u, 1149882378u, 0, COPYSIGNF_TOLERANCE, 0}, +{2357, 1218488455u, 3309646450u, 3365972103u, 0, COPYSIGNF_TOLERANCE, 0}, +{2358, 3040358923u, 3093401553u, 3040358923u, 0, COPYSIGNF_TOLERANCE, 0}, +{2359, 1283938137u, 1196383822u, 1283938137u, 0, COPYSIGNF_TOLERANCE, 0}, +{2360, 3182551696u, 3029982441u, 3182551696u, 0, COPYSIGNF_TOLERANCE, 0}, +{2361, 1317098613u, 949986176u, 1317098613u, 0, COPYSIGNF_TOLERANCE, 0}, +{2362, 3116209179u, 3303588342u, 3116209179u, 0, COPYSIGNF_TOLERANCE, 0}, +{2363, 3431703657u, 3014443710u, 3431703657u, 0, COPYSIGNF_TOLERANCE, 0}, +{2364, 3239728775u, 927815421u, 1092245127u, 0, COPYSIGNF_TOLERANCE, 0}, +{2365, 3207141672u, 933456504u, 1059658024u, 0, COPYSIGNF_TOLERANCE, 0}, +{2366, 3154378805u, 905462392u, 1006895157u, 0, COPYSIGNF_TOLERANCE, 0}, +{2367, 3069658155u, 1041452042u, 922174507u, 0, COPYSIGNF_TOLERANCE, 0}, +{2368, 3313160088u, 2964063309u, 3313160088u, 0, COPYSIGNF_TOLERANCE, 0}, +{2369, 3207056527u, 3384206601u, 3207056527u, 0, COPYSIGNF_TOLERANCE, 0}, +{2370, 1284174954u, 3436881197u, 3431658602u, 0, COPYSIGNF_TOLERANCE, 0}, +{2371, 3156081645u, 3308839704u, 3156081645u, 0, COPYSIGNF_TOLERANCE, 0}, +{2372, 1063693032u, 976661408u, 1063693032u, 0, COPYSIGNF_TOLERANCE, 0}, +{2373, 3036026175u, 1251203998u, 888542527u, 0, COPYSIGNF_TOLERANCE, 0}, +{2374, 1102631663u, 3396951425u, 3250115311u, 0, COPYSIGNF_TOLERANCE, 0}, +{2375, 968803479u, 992989712u, 968803479u, 0, COPYSIGNF_TOLERANCE, 0}, +{2376, 3273080388u, 3109405906u, 3273080388u, 0, COPYSIGNF_TOLERANCE, 0}, +{2377, 1172529774u, 3294550127u, 3320013422u, 0, COPYSIGNF_TOLERANCE, 0}, +{2378, 1306695905u, 1292690378u, 1306695905u, 0, COPYSIGNF_TOLERANCE, 0}, +{2379, 1003649752u, 1218792138u, 1003649752u, 0, COPYSIGNF_TOLERANCE, 0}, +{2380, 1078478376u, 1326246424u, 1078478376u, 0, COPYSIGNF_TOLERANCE, 0}, +{2381, 3158855023u, 3151283866u, 3158855023u, 0, COPYSIGNF_TOLERANCE, 0}, +{2382, 1165177679u, 3276237026u, 3312661327u, 0, COPYSIGNF_TOLERANCE, 0}, +{2383, 3403009513u, 3381966453u, 3403009513u, 0, COPYSIGNF_TOLERANCE, 0}, +{2384, 952348506u, 3377573987u, 3099832154u, 0, COPYSIGNF_TOLERANCE, 0}, +{2385, 1222777442u, 1125769920u, 1222777442u, 0, COPYSIGNF_TOLERANCE, 0}, +{2386, 1325324763u, 978336043u, 1325324763u, 0, COPYSIGNF_TOLERANCE, 0}, +{2387, 3363524213u, 3202991311u, 3363524213u, 0, COPYSIGNF_TOLERANCE, 0}, +{2388, 1158950321u, 1073578913u, 1158950321u, 0, COPYSIGNF_TOLERANCE, 0}, +{2389, 903129873u, 3416864271u, 3050613521u, 0, COPYSIGNF_TOLERANCE, 0}, +{2390, 3078339944u, 988173985u, 930856296u, 0, COPYSIGNF_TOLERANCE, 0}, +{2391, 1208345407u, 1254181270u, 1208345407u, 0, COPYSIGNF_TOLERANCE, 0}, +{2392, 1258634105u, 1247426200u, 1258634105u, 0, COPYSIGNF_TOLERANCE, 0}, +{2393, 1248478509u, 1287895126u, 1248478509u, 0, COPYSIGNF_TOLERANCE, 0}, +{2394, 1153863988u, 3430539165u, 3301347636u, 0, COPYSIGNF_TOLERANCE, 0}, +{2395, 1235620969u, 866627358u, 1235620969u, 0, COPYSIGNF_TOLERANCE, 0}, +{2396, 1097120930u, 3221726305u, 3244604578u, 0, COPYSIGNF_TOLERANCE, 0}, +{2397, 3469778622u, 1200179013u, 1322294974u, 0, COPYSIGNF_TOLERANCE, 0}, +{2398, 1147712200u, 931865525u, 1147712200u, 0, COPYSIGNF_TOLERANCE, 0}, +{2399, 1124721745u, 3058969650u, 3272205393u, 0, COPYSIGNF_TOLERANCE, 0}, +{2400, 3261744304u, 1043806501u, 1114260656u, 0, COPYSIGNF_TOLERANCE, 0}, +{2401, 1064922416u, 1320485628u, 1064922416u, 0, COPYSIGNF_TOLERANCE, 0}, +{2402, 3303160152u, 3075455322u, 3303160152u, 0, COPYSIGNF_TOLERANCE, 0}, +{2403, 1315090496u, 3269683237u, 3462574144u, 0, COPYSIGNF_TOLERANCE, 0}, +{2404, 3230403187u, 1322841992u, 1082919539u, 0, COPYSIGNF_TOLERANCE, 0}, +{2405, 1335399673u, 974138676u, 1335399673u, 0, COPYSIGNF_TOLERANCE, 0}, +{2406, 1072458508u, 3372833993u, 3219942156u, 0, COPYSIGNF_TOLERANCE, 0}, +{2407, 3303015249u, 3015039539u, 3303015249u, 0, COPYSIGNF_TOLERANCE, 0}, +{2408, 3252139741u, 1059615003u, 1104656093u, 0, COPYSIGNF_TOLERANCE, 0}, +{2409, 3468519966u, 3113982619u, 3468519966u, 0, COPYSIGNF_TOLERANCE, 0}, +{2410, 1006231203u, 897530770u, 1006231203u, 0, COPYSIGNF_TOLERANCE, 0}, +{2411, 951554138u, 1001144381u, 951554138u, 0, COPYSIGNF_TOLERANCE, 0}, +{2412, 942046828u, 986341002u, 942046828u, 0, COPYSIGNF_TOLERANCE, 0}, +{2413, 3319723279u, 3414482416u, 3319723279u, 0, COPYSIGNF_TOLERANCE, 0}, +{2414, 3255104167u, 928827688u, 1107620519u, 0, COPYSIGNF_TOLERANCE, 0}, +{2415, 1155477903u, 3104812800u, 3302961551u, 0, COPYSIGNF_TOLERANCE, 0}, +{2416, 3273889176u, 980486479u, 1126405528u, 0, COPYSIGNF_TOLERANCE, 0}, +{2417, 3237813668u, 3441016803u, 3237813668u, 0, COPYSIGNF_TOLERANCE, 0}, +{2418, 1228207362u, 2985476579u, 3375691010u, 0, COPYSIGNF_TOLERANCE, 0}, +{2419, 975349337u, 1311932596u, 975349337u, 0, COPYSIGNF_TOLERANCE, 0}, +{2420, 1290175785u, 3008182462u, 3437659433u, 0, COPYSIGNF_TOLERANCE, 0}, +{2421, 981908840u, 3314038398u, 3129392488u, 0, COPYSIGNF_TOLERANCE, 0}, +{2422, 941187647u, 1107765599u, 941187647u, 0, COPYSIGNF_TOLERANCE, 0}, +{2423, 1214223128u, 3225536822u, 3361706776u, 0, COPYSIGNF_TOLERANCE, 0}, +{2424, 3422922584u, 1086391131u, 1275438936u, 0, COPYSIGNF_TOLERANCE, 0}, +{2425, 1315857601u, 3487600045u, 3463341249u, 0, COPYSIGNF_TOLERANCE, 0}, +{2426, 3453226030u, 3233768835u, 3453226030u, 0, COPYSIGNF_TOLERANCE, 0}, +{2427, 1078359574u, 3199175230u, 3225843222u, 0, COPYSIGNF_TOLERANCE, 0}, +{2428, 1029557624u, 3302959071u, 3177041272u, 0, COPYSIGNF_TOLERANCE, 0}, +{2429, 1207675424u, 3042692550u, 3355159072u, 0, COPYSIGNF_TOLERANCE, 0}, +{2430, 1028355074u, 3442294040u, 3175838722u, 0, COPYSIGNF_TOLERANCE, 0}, +{2431, 3119299090u, 1187096397u, 971815442u, 0, COPYSIGNF_TOLERANCE, 0}, +{2432, 1248421894u, 3367769132u, 3395905542u, 0, COPYSIGNF_TOLERANCE, 0}, +{2433, 3353251994u, 1095517730u, 1205768346u, 0, COPYSIGNF_TOLERANCE, 0}, +{2434, 876926659u, 3288089977u, 3024410307u, 0, COPYSIGNF_TOLERANCE, 0}, +{2435, 1076752219u, 876236939u, 1076752219u, 0, COPYSIGNF_TOLERANCE, 0}, +{2436, 3388531942u, 2988520062u, 3388531942u, 0, COPYSIGNF_TOLERANCE, 0}, +{2437, 1273395082u, 3031189261u, 3420878730u, 0, COPYSIGNF_TOLERANCE, 0}, +{2438, 3385588183u, 3258252464u, 3385588183u, 0, COPYSIGNF_TOLERANCE, 0}, +{2439, 3192315328u, 3289489214u, 3192315328u, 0, COPYSIGNF_TOLERANCE, 0}, +{2440, 3441804648u, 3274638356u, 3441804648u, 0, COPYSIGNF_TOLERANCE, 0}, +{2441, 3392827417u, 1277961150u, 1245343769u, 0, COPYSIGNF_TOLERANCE, 0}, +{2442, 1161241793u, 1328003707u, 1161241793u, 0, COPYSIGNF_TOLERANCE, 0}, +{2443, 3034494183u, 3041579130u, 3034494183u, 0, COPYSIGNF_TOLERANCE, 0}, +{2444, 1171318485u, 3374409104u, 3318802133u, 0, COPYSIGNF_TOLERANCE, 0}, +{2445, 3047748143u, 831102792u, 900264495u, 0, COPYSIGNF_TOLERANCE, 0}, +{2446, 1001216371u, 3052357038u, 3148700019u, 0, COPYSIGNF_TOLERANCE, 0}, +{2447, 912515889u, 1074635609u, 912515889u, 0, COPYSIGNF_TOLERANCE, 0}, +{2448, 3391452505u, 897989232u, 1243968857u, 0, COPYSIGNF_TOLERANCE, 0}, +{2449, 3249603369u, 3147662248u, 3249603369u, 0, COPYSIGNF_TOLERANCE, 0}, +{2450, 1220264047u, 2960450369u, 3367747695u, 0, COPYSIGNF_TOLERANCE, 0}, +{2451, 3169816394u, 988430929u, 1022332746u, 0, COPYSIGNF_TOLERANCE, 0}, +{2452, 3098997418u, 3002162688u, 3098997418u, 0, COPYSIGNF_TOLERANCE, 0}, +{2453, 3282212423u, 3174079140u, 3282212423u, 0, COPYSIGNF_TOLERANCE, 0}, +{2454, 3352293320u, 3247843425u, 3352293320u, 0, COPYSIGNF_TOLERANCE, 0}, +{2455, 3296358441u, 875645354u, 1148874793u, 0, COPYSIGNF_TOLERANCE, 0}, +{2456, 1197828352u, 3245614728u, 3345312000u, 0, COPYSIGNF_TOLERANCE, 0}, +{2457, 3340510371u, 914930263u, 1193026723u, 0, COPYSIGNF_TOLERANCE, 0}, +{2458, 1127109339u, 3368125489u, 3274592987u, 0, COPYSIGNF_TOLERANCE, 0}, +{2459, 909467381u, 1232375752u, 909467381u, 0, COPYSIGNF_TOLERANCE, 0}, +{2460, 1200599955u, 2981200675u, 3348083603u, 0, COPYSIGNF_TOLERANCE, 0}, +{2461, 962230977u, 2988248037u, 3109714625u, 0, COPYSIGNF_TOLERANCE, 0}, +{2462, 3192887808u, 3191848339u, 3192887808u, 0, COPYSIGNF_TOLERANCE, 0}, +{2463, 3237183876u, 3179379969u, 3237183876u, 0, COPYSIGNF_TOLERANCE, 0}, +{2464, 939285924u, 3056079386u, 3086769572u, 0, COPYSIGNF_TOLERANCE, 0}, +{2465, 944050180u, 3452557879u, 3091533828u, 0, COPYSIGNF_TOLERANCE, 0}, +{2466, 3058135703u, 3090284601u, 3058135703u, 0, COPYSIGNF_TOLERANCE, 0}, +{2467, 3480592662u, 3261728191u, 3480592662u, 0, COPYSIGNF_TOLERANCE, 0}, +{2468, 3061939312u, 3274418540u, 3061939312u, 0, COPYSIGNF_TOLERANCE, 0}, +{2469, 1003299981u, 853295521u, 1003299981u, 0, COPYSIGNF_TOLERANCE, 0}, +{2470, 1155775526u, 1255814444u, 1155775526u, 0, COPYSIGNF_TOLERANCE, 0}, +{2471, 1234491880u, 3408568717u, 3381975528u, 0, COPYSIGNF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_COPYSIGNF_H multiple inclusion protection + +// EOF copysignf.h diff --git a/packages/language/c/libm/current/tests/vectors/cosf.c b/packages/language/c/libm/current/tests/vectors/cosf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/cosf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// cosf.c +// +// Test of cosf() math library function +// +//=========================================================================== +// ####ECOSFGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/cosf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(cosf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &cosf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &cosf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("cosf() is stable"); + } // if + else + { + CYG_TEST_FAIL("cosf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library cosf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "cosf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF cosf.c diff --git a/packages/language/c/libm/current/tests/vectors/cosf.h b/packages/language/c/libm/current/tests/vectors/cosf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/cosf.h @@ -0,0 +1,1234 @@ +#ifndef CYGONCE_LIBM_COSF_H +#define CYGONCE_LIBM_COSF_H +//=========================================================================== +// +// cosf.h +// +// Test vectors for testing of cosf() math library function +// +//=========================================================================== +// ####ECOSFGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/cosf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define COSF_TOLERANCE 1.0E4 + +static const Cyg_libm_test_float_vec_t cosf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 1052346099u, 0, COSF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 1052658226u, 0, COSF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 1052969110u, 0, COSF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 1053278711u, 0, COSF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 1053587004u, 0, COSF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 1053893957u, 0, COSF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 1054199539u, 0, COSF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 1054503720u, 0, COSF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 1054806469u, 0, COSF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 1055107756u, 0, COSF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 1055407551u, 0, COSF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 1055705825u, 0, COSF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 1056002546u, 0, COSF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 1056297686u, 0, COSF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 1056591219u, 0, COSF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 1056883107u, 0, COSF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 1057068967u, 0, COSF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 1057213227u, 0, COSF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 1057356624u, 0, COSF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 1057499142u, 0, COSF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 1057640768u, 0, COSF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 1057781488u, 0, COSF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 1057921287u, 0, COSF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 1058060152u, 0, COSF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 1058198069u, 0, COSF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 1058335023u, 0, COSF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 1058471001u, 0, COSF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 1058605990u, 0, COSF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 1058739975u, 0, COSF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 1058872945u, 0, COSF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 1059004885u, 0, COSF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 1059135782u, 0, COSF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 1059265622u, 0, COSF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 1059394394u, 0, COSF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 1059522084u, 0, COSF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 1059648679u, 0, COSF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 1059774168u, 0, COSF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 1059898537u, 0, COSF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 1060021773u, 0, COSF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 1060143864u, 0, COSF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 1060264799u, 0, COSF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 1060384565u, 0, COSF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 1060503150u, 0, COSF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 1060620543u, 0, COSF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 1060736730u, 0, COSF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 1060851702u, 0, COSF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 1060965446u, 0, COSF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 1061077952u, 0, COSF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 1061189207u, 0, COSF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 1061299201u, 0, COSF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 1061407923u, 0, COSF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 1061515361u, 0, COSF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 1061621505u, 0, COSF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 1061726345u, 0, COSF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 1061829870u, 0, COSF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 1061932070u, 0, COSF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 1062032934u, 0, COSF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 1062132452u, 0, COSF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 1062230615u, 0, COSF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 1062327412u, 0, COSF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 1062422834u, 0, COSF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 1062516872u, 0, COSF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 1062609515u, 0, COSF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 1062700755u, 0, COSF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 1062790582u, 0, COSF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 1062878988u, 0, COSF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 1062965964u, 0, COSF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 1063051501u, 0, COSF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 1063135590u, 0, COSF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 1063218223u, 0, COSF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 1063299392u, 0, COSF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 1063379089u, 0, COSF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 1063457305u, 0, COSF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 1063534034u, 0, COSF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 1063609266u, 0, COSF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 1063682996u, 0, COSF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 1063755214u, 0, COSF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 1063825915u, 0, COSF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 1063895090u, 0, COSF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 1063962734u, 0, COSF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 1064028839u, 0, COSF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 1064093399u, 0, COSF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 1064156407u, 0, COSF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 1064217857u, 0, COSF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 1064277743u, 0, COSF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 1064336059u, 0, COSF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 1064392799u, 0, COSF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 1064447957u, 0, COSF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 1064501528u, 0, COSF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 1064553506u, 0, COSF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 1064603887u, 0, COSF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 1064652665u, 0, COSF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 1064699835u, 0, COSF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 1064745392u, 0, COSF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 1064789333u, 0, COSF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 1064831653u, 0, COSF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 1064872347u, 0, COSF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 1064911411u, 0, COSF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 1064948842u, 0, COSF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 1064984636u, 0, COSF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 1065018789u, 0, COSF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 1065051297u, 0, COSF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 1065082158u, 0, COSF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 1065111369u, 0, COSF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 1065138925u, 0, COSF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 1065164826u, 0, COSF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 1065189068u, 0, COSF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 1065211648u, 0, COSF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 1065232565u, 0, COSF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 1065251816u, 0, COSF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 1065269400u, 0, COSF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 1065285314u, 0, COSF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 1065299558u, 0, COSF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 1065312129u, 0, COSF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 1065323026u, 0, COSF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 1065332249u, 0, COSF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 1065339796u, 0, COSF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 1065345667u, 0, COSF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 1065349861u, 0, COSF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 1065352377u, 0, COSF_TOLERANCE, 0}, +{120, 646742016u, 0u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 1065352377u, 0, COSF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 1065349861u, 0, COSF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 1065345667u, 0, COSF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 1065339796u, 0, COSF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 1065332249u, 0, COSF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 1065323026u, 0, COSF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 1065312129u, 0, COSF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 1065299558u, 0, COSF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 1065285314u, 0, COSF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 1065269400u, 0, COSF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 1065251816u, 0, COSF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 1065232565u, 0, COSF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 1065211648u, 0, COSF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 1065189068u, 0, COSF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 1065164826u, 0, COSF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 1065138925u, 0, COSF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 1065111369u, 0, COSF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 1065082158u, 0, COSF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 1065051297u, 0, COSF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 1065018789u, 0, COSF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 1064984636u, 0, COSF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 1064948842u, 0, COSF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 1064911411u, 0, COSF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 1064872347u, 0, COSF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 1064831653u, 0, COSF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 1064789333u, 0, COSF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 1064745392u, 0, COSF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 1064699835u, 0, COSF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 1064652665u, 0, COSF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 1064603887u, 0, COSF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 1064553506u, 0, COSF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 1064501528u, 0, COSF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 1064447957u, 0, COSF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 1064392799u, 0, COSF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 1064336059u, 0, COSF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 1064277743u, 0, COSF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 1064217857u, 0, COSF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 1064156407u, 0, COSF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 1064093399u, 0, COSF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 1064028839u, 0, COSF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 1063962734u, 0, COSF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 1063895090u, 0, COSF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 1063825915u, 0, COSF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 1063755214u, 0, COSF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 1063682996u, 0, COSF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 1063609266u, 0, COSF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 1063534034u, 0, COSF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 1063457305u, 0, COSF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 1063379089u, 0, COSF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 1063299392u, 0, COSF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 1063218223u, 0, COSF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 1063135590u, 0, COSF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 1063051501u, 0, COSF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 1062965964u, 0, COSF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 1062878988u, 0, COSF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 1062790582u, 0, COSF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 1062700755u, 0, COSF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 1062609515u, 0, COSF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 1062516872u, 0, COSF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 1062422834u, 0, COSF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 1062327412u, 0, COSF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 1062230615u, 0, COSF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 1062132452u, 0, COSF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 1062032934u, 0, COSF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 1061932070u, 0, COSF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 1061829870u, 0, COSF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 1061726345u, 0, COSF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 1061621505u, 0, COSF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 1061515361u, 0, COSF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 1061407923u, 0, COSF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 1061299201u, 0, COSF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 1061189207u, 0, COSF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 1061077952u, 0, COSF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 1060965446u, 0, COSF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 1060851702u, 0, COSF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 1060736730u, 0, COSF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 1060620543u, 0, COSF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 1060503150u, 0, COSF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 1060384565u, 0, COSF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 1060264799u, 0, COSF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 1060143864u, 0, COSF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 1060021773u, 0, COSF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 1059898537u, 0, COSF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 1059774168u, 0, COSF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 1059648679u, 0, COSF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 1059522084u, 0, COSF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 1059394394u, 0, COSF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 1059265622u, 0, COSF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 1059135782u, 0, COSF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 1059004885u, 0, COSF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 1058872945u, 0, COSF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 1058739975u, 0, COSF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 1058605990u, 0, COSF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 1058471001u, 0, COSF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 1058335023u, 0, COSF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 1058198069u, 0, COSF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 1058060152u, 0, COSF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 1057921287u, 0, COSF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 1057781488u, 0, COSF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1057640768u, 0, COSF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1057499142u, 0, COSF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1057356624u, 0, COSF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1057213227u, 0, COSF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1057068967u, 0, COSF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1056883107u, 0, COSF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1056591219u, 0, COSF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1056297686u, 0, COSF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1056002546u, 0, COSF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1055705825u, 0, COSF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1055407551u, 0, COSF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1055107756u, 0, COSF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1054806469u, 0, COSF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1054503720u, 0, COSF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1054199539u, 0, COSF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1053893957u, 0, COSF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1053587004u, 0, COSF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1053278711u, 0, COSF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1052969110u, 0, COSF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1052658226u, 0, COSF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 3212836864u, 0, COSF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 3007036718u, 0, COSF_TOLERANCE, 0}, +{243, 0u, 0u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{244, 1070141403u, 0u, 3007036718u, 0, COSF_TOLERANCE, 0}, +{245, 1078530011u, 0u, 3212836864u, 0, COSF_TOLERANCE, 0}, +{246, 1083624420u, 0u, 843898414u, 0, COSF_TOLERANCE, 0}, +{247, 3253731328u, 0u, 1042150424u, 0, COSF_TOLERANCE, 0}, +{248, 3252840038u, 0u, 3212831339u, 0, COSF_TOLERANCE, 0}, +{249, 3251948749u, 0u, 1037281885u, 0, COSF_TOLERANCE, 0}, +{250, 3251057459u, 0u, 1064900864u, 0, COSF_TOLERANCE, 0}, +{251, 3250166170u, 0u, 3199552432u, 0, COSF_TOLERANCE, 0}, +{252, 3249274880u, 0u, 3210853658u, 0, COSF_TOLERANCE, 0}, +{253, 3248383590u, 0u, 1058328972u, 0, COSF_TOLERANCE, 0}, +{254, 3247492301u, 0u, 1060856784u, 0, COSF_TOLERANCE, 0}, +{255, 3246601011u, 0u, 3208977235u, 0, COSF_TOLERANCE, 0}, +{256, 3245028147u, 0u, 3205011706u, 0, COSF_TOLERANCE, 0}, +{257, 3243245568u, 0u, 1063800431u, 0, COSF_TOLERANCE, 0}, +{258, 3241462989u, 0u, 1050245183u, 0, COSF_TOLERANCE, 0}, +{259, 3239680410u, 0u, 3212579968u, 0, COSF_TOLERANCE, 0}, +{260, 3237792973u, 0u, 3174853843u, 0, COSF_TOLERANCE, 0}, +{261, 3234227814u, 0u, 1065295202u, 0, COSF_TOLERANCE, 0}, +{262, 3230662656u, 0u, 3193428699u, 0, COSF_TOLERANCE, 0}, +{263, 3224580915u, 0u, 3211867515u, 0, COSF_TOLERANCE, 0}, +{264, 3213675725u, 0u, 1055407551u, 0, COSF_TOLERANCE, 0}, +{265, 1058642330u, 0u, 1062422834u, 0, COSF_TOLERANCE, 0}, +{266, 1075000115u, 0u, 3207237904u, 0, COSF_TOLERANCE, 0}, +{267, 1082130432u, 0u, 3207025968u, 0, COSF_TOLERANCE, 0}, +{268, 1085695590u, 0u, 1062580155u, 0, COSF_TOLERANCE, 0}, +{269, 1089260749u, 0u, 1054902596u, 0, COSF_TOLERANCE, 0}, +{270, 1091672474u, 0u, 3211959780u, 0, COSF_TOLERANCE, 0}, +{271, 1093455053u, 0u, 3192323679u, 0, COSF_TOLERANCE, 0}, +{272, 1095237632u, 0u, 1065316277u, 0, COSF_TOLERANCE, 0}, +{273, 1097020211u, 0u, 3179321561u, 0, COSF_TOLERANCE, 0}, +{274, 1098802790u, 0u, 3212528459u, 0, COSF_TOLERANCE, 0}, +{275, 1099746509u, 0u, 1050782006u, 0, COSF_TOLERANCE, 0}, +{276, 1100637798u, 0u, 1063679759u, 0, COSF_TOLERANCE, 0}, +{277, 1101529088u, 0u, 3205249020u, 0, COSF_TOLERANCE, 0}, +{278, 1102420378u, 0u, 3208795393u, 0, COSF_TOLERANCE, 0}, +{279, 1103311667u, 0u, 1061047231u, 0, COSF_TOLERANCE, 0}, +{280, 1104202957u, 0u, 1058098048u, 0, COSF_TOLERANCE, 0}, +{281, 1105094246u, 0u, 3210984606u, 0, COSF_TOLERANCE, 0}, +{282, 1105985536u, 0u, 3199023149u, 0, COSF_TOLERANCE, 0}, +{283, 1107800421u, 1203999711u, 3209573648u, 0, COSF_TOLERANCE, 0}, +{284, 3196650934u, 896005582u, 1064755990u, 0, COSF_TOLERANCE, 0}, +{285, 3368700125u, 3308232444u, 3212415424u, 0, COSF_TOLERANCE, 0}, +{286, 1224242132u, 3061363425u, 1062694130u, 0, COSF_TOLERANCE, 0}, +{287, 3221027117u, 1284201705u, 3200909320u, 0, COSF_TOLERANCE, 0}, +{288, 1198712763u, 919636942u, 1058273289u, 0, COSF_TOLERANCE, 0}, +{289, 3159309973u, 852521077u, 1065351874u, 0, COSF_TOLERANCE, 0}, +{290, 954173073u, 850531830u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{291, 3090780435u, 1035260608u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{292, 966554515u, 3234538174u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{293, 1312607135u, 1194999402u, 3211015536u, 0, COSF_TOLERANCE, 0}, +{294, 1166191415u, 1018661564u, 3212808685u, 0, COSF_TOLERANCE, 0}, +{295, 3111900019u, 1130472166u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{296, 1234419246u, 2984575812u, 1044118836u, 0, COSF_TOLERANCE, 0}, +{297, 1302107128u, 3370647675u, 1065238366u, 0, COSF_TOLERANCE, 0}, +{298, 1052801068u, 3039122570u, 1064181687u, 0, COSF_TOLERANCE, 0}, +{299, 1060849628u, 3081357692u, 1061060424u, 0, COSF_TOLERANCE, 0}, +{300, 3484320003u, 3033957825u, 3211534416u, 0, COSF_TOLERANCE, 0}, +{301, 3181522772u, 3305392896u, 1065300636u, 0, COSF_TOLERANCE, 0}, +{302, 882596369u, 1256676590u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{303, 1167223673u, 846102364u, 3195973898u, 0, COSF_TOLERANCE, 0}, +{304, 968192794u, 878547432u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{305, 3122346862u, 1111584337u, 1065353213u, 0, COSF_TOLERANCE, 0}, +{306, 1052361612u, 1280025214u, 1064261014u, 0, COSF_TOLERANCE, 0}, +{307, 906701409u, 2968301825u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{308, 3471653172u, 1154138102u, 1028780596u, 0, COSF_TOLERANCE, 0}, +{309, 3231467496u, 934336592u, 1043244255u, 0, COSF_TOLERANCE, 0}, +{310, 1341514497u, 3466051188u, 3212270872u, 0, COSF_TOLERANCE, 0}, +{311, 1272351391u, 3373485062u, 1049939301u, 0, COSF_TOLERANCE, 0}, +{312, 3319724992u, 3354615790u, 3206332287u, 0, COSF_TOLERANCE, 0}, +{313, 917622040u, 1334966485u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{314, 940236348u, 3304072663u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{315, 3251541546u, 3174764041u, 1061509153u, 0, COSF_TOLERANCE, 0}, +{316, 3099843889u, 3355962282u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{317, 3110358400u, 851145088u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{318, 3371863479u, 1014861921u, 1038395093u, 0, COSF_TOLERANCE, 0}, +{319, 3204069187u, 966573255u, 1063389318u, 0, COSF_TOLERANCE, 0}, +{320, 1306460502u, 903489435u, 3197908639u, 0, COSF_TOLERANCE, 0}, +{321, 1197542187u, 3024598921u, 1062014001u, 0, COSF_TOLERANCE, 0}, +{322, 922888249u, 1139392309u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{323, 1184239996u, 3224098462u, 1057000820u, 0, COSF_TOLERANCE, 0}, +{324, 1252490238u, 1173619825u, 3212300137u, 0, COSF_TOLERANCE, 0}, +{325, 1001673627u, 3462631271u, 1065352962u, 0, COSF_TOLERANCE, 0}, +{326, 976098044u, 1151967422u, 1065353212u, 0, COSF_TOLERANCE, 0}, +{327, 941796645u, 886451963u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{328, 3287199470u, 854245542u, 1065150928u, 0, COSF_TOLERANCE, 0}, +{329, 893184329u, 1243067084u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{330, 1143233714u, 1007268238u, 3207062841u, 0, COSF_TOLERANCE, 0}, +{331, 1139941253u, 1147688821u, 1063748220u, 0, COSF_TOLERANCE, 0}, +{332, 3143717025u, 3234638157u, 1065353117u, 0, COSF_TOLERANCE, 0}, +{333, 3048866608u, 3449209899u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{334, 3240298487u, 1020260821u, 3208166309u, 0, COSF_TOLERANCE, 0}, +{335, 1288902137u, 3123875978u, 3207694694u, 0, COSF_TOLERANCE, 0}, +{336, 1333134799u, 1338107877u, 1056301331u, 0, COSF_TOLERANCE, 0}, +{337, 1187847971u, 1317663644u, 3197338100u, 0, COSF_TOLERANCE, 0}, +{338, 1038851706u, 1327544110u, 1065242306u, 0, COSF_TOLERANCE, 0}, +{339, 3329354473u, 3165437289u, 1058212602u, 0, COSF_TOLERANCE, 0}, +{340, 3077218579u, 1308397879u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{341, 1309289088u, 1019883016u, 3206861402u, 0, COSF_TOLERANCE, 0}, +{342, 3444653659u, 1279248024u, 3205948454u, 0, COSF_TOLERANCE, 0}, +{343, 3405585402u, 2962345057u, 1049586375u, 0, COSF_TOLERANCE, 0}, +{344, 3106647724u, 853848387u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{345, 1106778573u, 3304487767u, 1064007007u, 0, COSF_TOLERANCE, 0}, +{346, 1140567947u, 3069174149u, 1061226693u, 0, COSF_TOLERANCE, 0}, +{347, 1238569473u, 873035665u, 1063385096u, 0, COSF_TOLERANCE, 0}, +{348, 3154871957u, 1276671061u, 1065352608u, 0, COSF_TOLERANCE, 0}, +{349, 1261071232u, 1182202773u, 3182360604u, 0, COSF_TOLERANCE, 0}, +{350, 1175011025u, 3029705783u, 1065054590u, 0, COSF_TOLERANCE, 0}, +{351, 1082692850u, 1211581107u, 3202090793u, 0, COSF_TOLERANCE, 0}, +{352, 974547519u, 3475164509u, 1065353213u, 0, COSF_TOLERANCE, 0}, +{353, 3058097085u, 3104309359u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{354, 3107252546u, 1071134451u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{355, 3096032662u, 2976848821u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{356, 3197942144u, 3094120030u, 1064573331u, 0, COSF_TOLERANCE, 0}, +{357, 3403348556u, 3184653669u, 1019220617u, 0, COSF_TOLERANCE, 0}, +{358, 3182301130u, 3460764044u, 1065292658u, 0, COSF_TOLERANCE, 0}, +{359, 1136411063u, 1118097422u, 1063474921u, 0, COSF_TOLERANCE, 0}, +{360, 3239231622u, 3302723069u, 3212303719u, 0, COSF_TOLERANCE, 0}, +{361, 3340615780u, 870350055u, 3207952094u, 0, COSF_TOLERANCE, 0}, +{362, 998567360u, 2995278691u, 1065353078u, 0, COSF_TOLERANCE, 0}, +{363, 3417964312u, 1321337529u, 1062054343u, 0, COSF_TOLERANCE, 0}, +{364, 3109481038u, 1143864063u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{365, 1148867223u, 1256486202u, 3206780400u, 0, COSF_TOLERANCE, 0}, +{366, 989687421u, 3372681320u, 1065353185u, 0, COSF_TOLERANCE, 0}, +{367, 1152956913u, 3166480640u, 1050381098u, 0, COSF_TOLERANCE, 0}, +{368, 892922651u, 3373029087u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{369, 1109627625u, 1314158257u, 3212813517u, 0, COSF_TOLERANCE, 0}, +{370, 1307091856u, 1103202538u, 1044886424u, 0, COSF_TOLERANCE, 0}, +{371, 1077234132u, 3272167130u, 3212042460u, 0, COSF_TOLERANCE, 0}, +{372, 1142167709u, 1096445242u, 3192244228u, 0, COSF_TOLERANCE, 0}, +{373, 3426232834u, 1036705270u, 3202908511u, 0, COSF_TOLERANCE, 0}, +{374, 3368566779u, 967249167u, 3203307532u, 0, COSF_TOLERANCE, 0}, +{375, 3030724760u, 3349013503u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{376, 1138741813u, 3073453199u, 1024337281u, 0, COSF_TOLERANCE, 0}, +{377, 982950501u, 982549888u, 1065353205u, 0, COSF_TOLERANCE, 0}, +{378, 1142981585u, 1015602236u, 1053132429u, 0, COSF_TOLERANCE, 0}, +{379, 3347165962u, 3135486696u, 1058907526u, 0, COSF_TOLERANCE, 0}, +{380, 1009535440u, 3381353228u, 1065352288u, 0, COSF_TOLERANCE, 0}, +{381, 3103736980u, 3402950505u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{382, 3126820946u, 1077903063u, 1065353210u, 0, COSF_TOLERANCE, 0}, +{383, 3473956030u, 976891930u, 3208545071u, 0, COSF_TOLERANCE, 0}, +{384, 3349098349u, 1055327704u, 3210674348u, 0, COSF_TOLERANCE, 0}, +{385, 3152729489u, 1060398533u, 1065352785u, 0, COSF_TOLERANCE, 0}, +{386, 945568720u, 3313485084u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{387, 3345489836u, 1108392401u, 3211189684u, 0, COSF_TOLERANCE, 0}, +{388, 940893161u, 1137000140u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{389, 976791751u, 3230678102u, 1065353212u, 0, COSF_TOLERANCE, 0}, +{390, 1004442355u, 3036510596u, 1065352829u, 0, COSF_TOLERANCE, 0}, +{391, 1108485380u, 3173536878u, 1053495770u, 0, COSF_TOLERANCE, 0}, +{392, 1061834641u, 972388096u, 1060381268u, 0, COSF_TOLERANCE, 0}, +{393, 3381268392u, 1146976802u, 1034505730u, 0, COSF_TOLERANCE, 0}, +{394, 1087189715u, 2952822478u, 1065213234u, 0, COSF_TOLERANCE, 0}, +{395, 3212952285u, 3329407365u, 1057445670u, 0, COSF_TOLERANCE, 0}, +{396, 1000611335u, 857599439u, 1065353006u, 0, COSF_TOLERANCE, 0}, +{397, 3466188568u, 1041678304u, 1047557643u, 0, COSF_TOLERANCE, 0}, +{398, 3072456205u, 3160254633u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{399, 3319315516u, 3422089012u, 1055189382u, 0, COSF_TOLERANCE, 0}, +{400, 935938416u, 1146676692u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{401, 3212614372u, 1152633030u, 1057827186u, 0, COSF_TOLERANCE, 0}, +{402, 1315030230u, 3336225884u, 3211146944u, 0, COSF_TOLERANCE, 0}, +{403, 1134593658u, 3456812581u, 1062345193u, 0, COSF_TOLERANCE, 0}, +{404, 977281449u, 879922831u, 1065353211u, 0, COSF_TOLERANCE, 0}, +{405, 1086198791u, 920125958u, 1064374585u, 0, COSF_TOLERANCE, 0}, +{406, 1255152035u, 851754050u, 3208616871u, 0, COSF_TOLERANCE, 0}, +{407, 1135271264u, 3284878412u, 3208847073u, 0, COSF_TOLERANCE, 0}, +{408, 1094190727u, 1056854532u, 1056451200u, 0, COSF_TOLERANCE, 0}, +{409, 1294665325u, 991185677u, 1060440078u, 0, COSF_TOLERANCE, 0}, +{410, 1036608591u, 805416536u, 1065272164u, 0, COSF_TOLERANCE, 0}, +{411, 3229998064u, 825237063u, 3204530827u, 0, COSF_TOLERANCE, 0}, +{412, 3439134022u, 1043829691u, 3205512708u, 0, COSF_TOLERANCE, 0}, +{413, 3073083133u, 1317170485u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{414, 1325668223u, 970681762u, 3207285914u, 0, COSF_TOLERANCE, 0}, +{415, 1092037607u, 1027330835u, 3212832255u, 0, COSF_TOLERANCE, 0}, +{416, 3316278408u, 3455589207u, 1051135228u, 0, COSF_TOLERANCE, 0}, +{417, 3295436768u, 3129873731u, 3212713503u, 0, COSF_TOLERANCE, 0}, +{418, 1151984049u, 3074547120u, 3198035925u, 0, COSF_TOLERANCE, 0}, +{419, 1129287043u, 3076527544u, 1064992757u, 0, COSF_TOLERANCE, 0}, +{420, 1243664530u, 972879810u, 3208729331u, 0, COSF_TOLERANCE, 0}, +{421, 950829092u, 929114193u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{422, 1115471979u, 3047246262u, 1064300936u, 0, COSF_TOLERANCE, 0}, +{423, 3351092088u, 3024661404u, 3210066335u, 0, COSF_TOLERANCE, 0}, +{424, 3424479544u, 3312047722u, 3209978045u, 0, COSF_TOLERANCE, 0}, +{425, 3241193975u, 884465785u, 1027867782u, 0, COSF_TOLERANCE, 0}, +{426, 1030934236u, 1045139240u, 1065323747u, 0, COSF_TOLERANCE, 0}, +{427, 3131791114u, 3408392958u, 1065353202u, 0, COSF_TOLERANCE, 0}, +{428, 1025254314u, 3057812821u, 1065341028u, 0, COSF_TOLERANCE, 0}, +{429, 1110545760u, 3240144177u, 1063938715u, 0, COSF_TOLERANCE, 0}, +{430, 3180213739u, 1108793820u, 1065312785u, 0, COSF_TOLERANCE, 0}, +{431, 3361976590u, 3138179993u, 1064942857u, 0, COSF_TOLERANCE, 0}, +{432, 881280146u, 3421884736u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{433, 1304154705u, 2961937089u, 1065316526u, 0, COSF_TOLERANCE, 0}, +{434, 3264443610u, 3222916705u, 3184186617u, 0, COSF_TOLERANCE, 0}, +{435, 3374550627u, 3055856293u, 1064004706u, 0, COSF_TOLERANCE, 0}, +{436, 899599265u, 3240118211u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{437, 1268194719u, 1332489410u, 1065342423u, 0, COSF_TOLERANCE, 0}, +{438, 1133420220u, 1245770860u, 3209468141u, 0, COSF_TOLERANCE, 0}, +{439, 1161858787u, 815362075u, 3205516474u, 0, COSF_TOLERANCE, 0}, +{440, 3184462258u, 1263529646u, 1065267560u, 0, COSF_TOLERANCE, 0}, +{441, 3295996963u, 3453334307u, 1063400576u, 0, COSF_TOLERANCE, 0}, +{442, 1270887389u, 1156123987u, 3212780406u, 0, COSF_TOLERANCE, 0}, +{443, 3325193181u, 993979179u, 3208634331u, 0, COSF_TOLERANCE, 0}, +{444, 925657343u, 1315159742u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{445, 3115275450u, 3008350271u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{446, 3116607482u, 3224327456u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{447, 3187892415u, 3118097315u, 1065215324u, 0, COSF_TOLERANCE, 0}, +{448, 1189120494u, 978961471u, 3184887707u, 0, COSF_TOLERANCE, 0}, +{449, 889030794u, 3129523970u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{450, 1323529208u, 3100744786u, 3202135945u, 0, COSF_TOLERANCE, 0}, +{451, 3465768388u, 3190881451u, 3212262509u, 0, COSF_TOLERANCE, 0}, +{452, 3426099899u, 1118756120u, 3207882716u, 0, COSF_TOLERANCE, 0}, +{453, 3224857113u, 3398166843u, 3212203079u, 0, COSF_TOLERANCE, 0}, +{454, 1065798296u, 816191940u, 1056794032u, 0, COSF_TOLERANCE, 0}, +{455, 3328989444u, 850266225u, 3210663044u, 0, COSF_TOLERANCE, 0}, +{456, 3357819026u, 3148475462u, 1064572647u, 0, COSF_TOLERANCE, 0}, +{457, 1273397670u, 901308750u, 3166465533u, 0, COSF_TOLERANCE, 0}, +{458, 3424831780u, 1304806106u, 1065348980u, 0, COSF_TOLERANCE, 0}, +{459, 1257596246u, 3420832544u, 3165249336u, 0, COSF_TOLERANCE, 0}, +{460, 1051773536u, 896271348u, 1064362957u, 0, COSF_TOLERANCE, 0}, +{461, 3294752507u, 3113225954u, 1057002112u, 0, COSF_TOLERANCE, 0}, +{462, 3424848725u, 2973850350u, 3212724060u, 0, COSF_TOLERANCE, 0}, +{463, 1090870906u, 3294742905u, 3203212900u, 0, COSF_TOLERANCE, 0}, +{464, 1227582289u, 1208979668u, 1064452265u, 0, COSF_TOLERANCE, 0}, +{465, 1272325814u, 3004311296u, 3208642571u, 0, COSF_TOLERANCE, 0}, +{466, 3359508271u, 859974315u, 1030101838u, 0, COSF_TOLERANCE, 0}, +{467, 1137854355u, 3335041917u, 1063934227u, 0, COSF_TOLERANCE, 0}, +{468, 3440773058u, 3204192793u, 3205801340u, 0, COSF_TOLERANCE, 0}, +{469, 3101598400u, 3057760708u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{470, 3451216836u, 3347783723u, 3211742026u, 0, COSF_TOLERANCE, 0}, +{471, 3437062994u, 3106834845u, 1062562754u, 0, COSF_TOLERANCE, 0}, +{472, 1131196082u, 1164573183u, 3203988310u, 0, COSF_TOLERANCE, 0}, +{473, 3177294154u, 1282436638u, 1065327761u, 0, COSF_TOLERANCE, 0}, +{474, 3258097678u, 1305882290u, 1061684501u, 0, COSF_TOLERANCE, 0}, +{475, 3460915348u, 1219372260u, 3198742303u, 0, COSF_TOLERANCE, 0}, +{476, 3303035472u, 3153013020u, 3208641160u, 0, COSF_TOLERANCE, 0}, +{477, 1053698677u, 3284313107u, 1064011355u, 0, COSF_TOLERANCE, 0}, +{478, 3396166221u, 1201894512u, 1050395522u, 0, COSF_TOLERANCE, 0}, +{479, 3037541131u, 1085398440u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{480, 3458934263u, 1005577835u, 3210301928u, 0, COSF_TOLERANCE, 0}, +{481, 1065761827u, 3333928591u, 1056920632u, 0, COSF_TOLERANCE, 0}, +{482, 3025843188u, 820250112u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{483, 926665223u, 3150815797u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{484, 1199816046u, 3143776186u, 1059457067u, 0, COSF_TOLERANCE, 0}, +{485, 3333779015u, 952421041u, 1063412304u, 0, COSF_TOLERANCE, 0}, +{486, 948398145u, 3238273189u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{487, 3054021468u, 1270257895u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{488, 1080781593u, 1213908300u, 3210476977u, 0, COSF_TOLERANCE, 0}, +{489, 3164749613u, 3010837763u, 1065349926u, 0, COSF_TOLERANCE, 0}, +{490, 3235326590u, 1271705594u, 1063749838u, 0, COSF_TOLERANCE, 0}, +{491, 3118883815u, 1051802647u, 1065353214u, 0, COSF_TOLERANCE, 0}, +{492, 965378004u, 1292594138u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{493, 3226990408u, 1110755136u, 3212383995u, 0, COSF_TOLERANCE, 0}, +{494, 3117098218u, 1122474770u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{495, 1283624229u, 906796922u, 3211981483u, 0, COSF_TOLERANCE, 0}, +{496, 970649315u, 1078286437u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{497, 959776291u, 3280345347u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{498, 3341117305u, 3294559023u, 1055798833u, 0, COSF_TOLERANCE, 0}, +{499, 1270734970u, 3355874874u, 1065302344u, 0, COSF_TOLERANCE, 0}, +{500, 3454816067u, 868771977u, 3212739421u, 0, COSF_TOLERANCE, 0}, +{501, 917206623u, 1172710814u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{502, 1106502045u, 1290849316u, 1058595715u, 0, COSF_TOLERANCE, 0}, +{503, 1157598381u, 3309023746u, 3207978544u, 0, COSF_TOLERANCE, 0}, +{504, 3335234513u, 1002337336u, 3212728047u, 0, COSF_TOLERANCE, 0}, +{505, 1279489061u, 1006049444u, 3188087006u, 0, COSF_TOLERANCE, 0}, +{506, 3157416480u, 1309984610u, 1065352222u, 0, COSF_TOLERANCE, 0}, +{507, 3143920719u, 3131608518u, 1065353114u, 0, COSF_TOLERANCE, 0}, +{508, 1233171235u, 826460580u, 3208947956u, 0, COSF_TOLERANCE, 0}, +{509, 1148920078u, 1007674793u, 1060346730u, 0, COSF_TOLERANCE, 0}, +{510, 3064988156u, 3230867340u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{511, 3083619260u, 1159415661u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{512, 1109198803u, 1221754614u, 1011415968u, 0, COSF_TOLERANCE, 0}, +{513, 3219949483u, 1056167693u, 3196850244u, 0, COSF_TOLERANCE, 0}, +{514, 3361149474u, 3387342069u, 1062393895u, 0, COSF_TOLERANCE, 0}, +{515, 1207502108u, 3388073586u, 1065089606u, 0, COSF_TOLERANCE, 0}, +{516, 1000014431u, 831213088u, 1065353028u, 0, COSF_TOLERANCE, 0}, +{517, 3161756316u, 3143659754u, 1065351347u, 0, COSF_TOLERANCE, 0}, +{518, 3160728744u, 3382954009u, 1065351579u, 0, COSF_TOLERANCE, 0}, +{519, 1234530539u, 1079988872u, 1061039433u, 0, COSF_TOLERANCE, 0}, +{520, 1017843965u, 1193076204u, 1065349558u, 0, COSF_TOLERANCE, 0}, +{521, 951862956u, 1173464654u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{522, 3306328852u, 1118701064u, 1003885353u, 0, COSF_TOLERANCE, 0}, +{523, 1291910469u, 1211303367u, 1063595141u, 0, COSF_TOLERANCE, 0}, +{524, 3027442905u, 1173894400u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{525, 1131927531u, 3182962700u, 3211863029u, 0, COSF_TOLERANCE, 0}, +{526, 3449879391u, 991614550u, 1061755886u, 0, COSF_TOLERANCE, 0}, +{527, 970094304u, 3344590506u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{528, 1125551064u, 3331248076u, 1064830894u, 0, COSF_TOLERANCE, 0}, +{529, 3427296372u, 3455289118u, 1065342989u, 0, COSF_TOLERANCE, 0}, +{530, 1198917460u, 1327195159u, 1061636200u, 0, COSF_TOLERANCE, 0}, +{531, 3201603336u, 820047343u, 1063927651u, 0, COSF_TOLERANCE, 0}, +{532, 3114686212u, 3476082461u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{533, 921940707u, 2967544056u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{534, 1091906532u, 3011904455u, 3212750410u, 0, COSF_TOLERANCE, 0}, +{535, 3393557778u, 3383396815u, 3211966318u, 0, COSF_TOLERANCE, 0}, +{536, 1276853215u, 873199561u, 1064578880u, 0, COSF_TOLERANCE, 0}, +{537, 3462778440u, 3349284325u, 1065155179u, 0, COSF_TOLERANCE, 0}, +{538, 3360170117u, 3048354042u, 3207160802u, 0, COSF_TOLERANCE, 0}, +{539, 3224245428u, 3271307999u, 3211367917u, 0, COSF_TOLERANCE, 0}, +{540, 1120124467u, 1135619937u, 3210924569u, 0, COSF_TOLERANCE, 0}, +{541, 1064364381u, 3180675544u, 1058456623u, 0, COSF_TOLERANCE, 0}, +{542, 1268744779u, 3328452652u, 3212264195u, 0, COSF_TOLERANCE, 0}, +{543, 1165195428u, 3390323168u, 1065343028u, 0, COSF_TOLERANCE, 0}, +{544, 3044092739u, 1106497311u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{545, 3149469534u, 1278465842u, 1065352948u, 0, COSF_TOLERANCE, 0}, +{546, 3247790039u, 909788142u, 1065077133u, 0, COSF_TOLERANCE, 0}, +{547, 3215244648u, 1083988595u, 1049581731u, 0, COSF_TOLERANCE, 0}, +{548, 3095275931u, 989153382u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{549, 3059688264u, 1117455718u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{550, 1212717473u, 837873779u, 3183067569u, 0, COSF_TOLERANCE, 0}, +{551, 3275973009u, 3450721670u, 1062400303u, 0, COSF_TOLERANCE, 0}, +{552, 3028857014u, 3188853813u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{553, 3391162308u, 1291220039u, 1056095531u, 0, COSF_TOLERANCE, 0}, +{554, 1044867873u, 3369493273u, 1065036078u, 0, COSF_TOLERANCE, 0}, +{555, 1089986803u, 3462160118u, 1037847106u, 0, COSF_TOLERANCE, 0}, +{556, 1296314700u, 2957454177u, 1063610521u, 0, COSF_TOLERANCE, 0}, +{557, 1251462432u, 3171021770u, 3204838869u, 0, COSF_TOLERANCE, 0}, +{558, 3485236902u, 980772835u, 3172410705u, 0, COSF_TOLERANCE, 0}, +{559, 3262169538u, 1268270462u, 3210791428u, 0, COSF_TOLERANCE, 0}, +{560, 3080852256u, 994641495u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{561, 1022211242u, 922124181u, 1065346153u, 0, COSF_TOLERANCE, 0}, +{562, 884661176u, 2985540645u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{563, 3071422941u, 3271100396u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{564, 989762529u, 3362011135u, 1065353184u, 0, COSF_TOLERANCE, 0}, +{565, 1295475718u, 3212305413u, 1064649568u, 0, COSF_TOLERANCE, 0}, +{566, 1002632518u, 3330388441u, 1065352919u, 0, COSF_TOLERANCE, 0}, +{567, 3404372005u, 3450484255u, 3187716709u, 0, COSF_TOLERANCE, 0}, +{568, 3158912530u, 3105501826u, 1065351951u, 0, COSF_TOLERANCE, 0}, +{569, 1125800069u, 3256265749u, 3211461461u, 0, COSF_TOLERANCE, 0}, +{570, 3138037576u, 3103365227u, 1065353178u, 0, COSF_TOLERANCE, 0}, +{571, 3108384823u, 1300246663u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{572, 999985470u, 3409354318u, 1065353029u, 0, COSF_TOLERANCE, 0}, +{573, 1189421739u, 1056599002u, 1062655041u, 0, COSF_TOLERANCE, 0}, +{574, 3075182644u, 3144159778u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{575, 3028099649u, 3391513557u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{576, 3132541814u, 3444521949u, 1065353200u, 0, COSF_TOLERANCE, 0}, +{577, 1164046161u, 3440635788u, 3204899255u, 0, COSF_TOLERANCE, 0}, +{578, 1292596266u, 3116569667u, 3206207983u, 0, COSF_TOLERANCE, 0}, +{579, 3469748379u, 3412765608u, 3209876572u, 0, COSF_TOLERANCE, 0}, +{580, 1314644642u, 3123051784u, 3212183739u, 0, COSF_TOLERANCE, 0}, +{581, 3399813173u, 828743798u, 3210005382u, 0, COSF_TOLERANCE, 0}, +{582, 948775569u, 3485444126u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{583, 1034611395u, 882288581u, 1065294825u, 0, COSF_TOLERANCE, 0}, +{584, 3489122735u, 3372450889u, 1062529522u, 0, COSF_TOLERANCE, 0}, +{585, 1181604787u, 3363067409u, 1051301464u, 0, COSF_TOLERANCE, 0}, +{586, 3059042077u, 3204983963u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{587, 1043691622u, 3402603223u, 1065090453u, 0, COSF_TOLERANCE, 0}, +{588, 1314588083u, 856187848u, 1047604398u, 0, COSF_TOLERANCE, 0}, +{589, 3141533334u, 3010142974u, 1065353144u, 0, COSF_TOLERANCE, 0}, +{590, 3157534378u, 3451674717u, 1065352202u, 0, COSF_TOLERANCE, 0}, +{591, 3400949680u, 3073750220u, 1031263669u, 0, COSF_TOLERANCE, 0}, +{592, 3365581801u, 1175843167u, 3183136117u, 0, COSF_TOLERANCE, 0}, +{593, 1110424755u, 3011308654u, 1065333876u, 0, COSF_TOLERANCE, 0}, +{594, 3189917167u, 927278934u, 1065142996u, 0, COSF_TOLERANCE, 0}, +{595, 969804941u, 3355439348u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{596, 1139120919u, 3270515074u, 1062973618u, 0, COSF_TOLERANCE, 0}, +{597, 934308144u, 3118191228u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{598, 1220524226u, 1152648002u, 3211590558u, 0, COSF_TOLERANCE, 0}, +{599, 3162548604u, 3461790298u, 1065351147u, 0, COSF_TOLERANCE, 0}, +{600, 3382391700u, 3296962745u, 3184174453u, 0, COSF_TOLERANCE, 0}, +{601, 1156767533u, 1088986462u, 1036918171u, 0, COSF_TOLERANCE, 0}, +{602, 3079222483u, 3312324949u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{603, 994934087u, 967678094u, 1065353134u, 0, COSF_TOLERANCE, 0}, +{604, 3185240099u, 1123403720u, 1065257467u, 0, COSF_TOLERANCE, 0}, +{605, 3479873563u, 1246277393u, 3205786479u, 0, COSF_TOLERANCE, 0}, +{606, 3424264117u, 3434026174u, 3212822518u, 0, COSF_TOLERANCE, 0}, +{607, 3228365887u, 1216775310u, 3210266963u, 0, COSF_TOLERANCE, 0}, +{608, 1035909900u, 1249532942u, 1065280512u, 0, COSF_TOLERANCE, 0}, +{609, 3024951184u, 1247632131u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{610, 1212129651u, 3017366784u, 1064257239u, 0, COSF_TOLERANCE, 0}, +{611, 3125775254u, 955826310u, 1065353211u, 0, COSF_TOLERANCE, 0}, +{612, 1037464105u, 3121544932u, 1065261326u, 0, COSF_TOLERANCE, 0}, +{613, 1311706596u, 1254918706u, 3206439060u, 0, COSF_TOLERANCE, 0}, +{614, 918212457u, 1017468331u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{615, 1337315179u, 3461361185u, 3190319503u, 0, COSF_TOLERANCE, 0}, +{616, 1131358407u, 3325958870u, 1064040283u, 0, COSF_TOLERANCE, 0}, +{617, 1156517523u, 3343716230u, 3208051727u, 0, COSF_TOLERANCE, 0}, +{618, 3210802820u, 3207408574u, 1059281629u, 0, COSF_TOLERANCE, 0}, +{619, 3337499209u, 1226297264u, 3212835190u, 0, COSF_TOLERANCE, 0}, +{620, 3468429030u, 3253874001u, 3192807433u, 0, COSF_TOLERANCE, 0}, +{621, 3253515800u, 1189005947u, 3196174508u, 0, COSF_TOLERANCE, 0}, +{622, 3055299953u, 3047908678u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{623, 959956547u, 876324728u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{624, 3425290480u, 1139193797u, 3212772076u, 0, COSF_TOLERANCE, 0}, +{625, 1039917375u, 1122740999u, 1065226489u, 0, COSF_TOLERANCE, 0}, +{626, 3220979495u, 3429223871u, 3200734071u, 0, COSF_TOLERANCE, 0}, +{627, 1311016004u, 3334899880u, 3196914076u, 0, COSF_TOLERANCE, 0}, +{628, 1128016396u, 1105151547u, 1064440802u, 0, COSF_TOLERANCE, 0}, +{629, 3210335769u, 3100646155u, 1059637040u, 0, COSF_TOLERANCE, 0}, +{630, 3022705759u, 3404762495u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{631, 1206054701u, 826010009u, 3186703559u, 0, COSF_TOLERANCE, 0}, +{632, 3144504834u, 1162227076u, 1065353106u, 0, COSF_TOLERANCE, 0}, +{633, 1213609983u, 919983950u, 1041951181u, 0, COSF_TOLERANCE, 0}, +{634, 1246902946u, 3064047808u, 1062608718u, 0, COSF_TOLERANCE, 0}, +{635, 995850843u, 1332031130u, 1065353122u, 0, COSF_TOLERANCE, 0}, +{636, 3362082828u, 3374056268u, 1057834720u, 0, COSF_TOLERANCE, 0}, +{637, 1029480631u, 3047777170u, 1065328884u, 0, COSF_TOLERANCE, 0}, +{638, 3153568584u, 3106514232u, 1065352737u, 0, COSF_TOLERANCE, 0}, +{639, 3384988527u, 3109485565u, 3212834710u, 0, COSF_TOLERANCE, 0}, +{640, 1317696241u, 870681806u, 3206783984u, 0, COSF_TOLERANCE, 0}, +{641, 3235395924u, 1132055244u, 1063504955u, 0, COSF_TOLERANCE, 0}, +{642, 3341877624u, 2969495570u, 1059475152u, 0, COSF_TOLERANCE, 0}, +{643, 1228636133u, 886552820u, 3188646051u, 0, COSF_TOLERANCE, 0}, +{644, 3161654634u, 3335899347u, 1065351370u, 0, COSF_TOLERANCE, 0}, +{645, 3162655243u, 3307203982u, 1065351094u, 0, COSF_TOLERANCE, 0}, +{646, 1207246237u, 859223639u, 1054904154u, 0, COSF_TOLERANCE, 0}, +{647, 1165476654u, 3350219111u, 1063369616u, 0, COSF_TOLERANCE, 0}, +{648, 1215278023u, 3019755242u, 3198241437u, 0, COSF_TOLERANCE, 0}, +{649, 1017239798u, 3438501281u, 1065349942u, 0, COSF_TOLERANCE, 0}, +{650, 1149651309u, 970030475u, 1065211361u, 0, COSF_TOLERANCE, 0}, +{651, 1111943722u, 3122211334u, 1062993436u, 0, COSF_TOLERANCE, 0}, +{652, 1189849849u, 3382739134u, 1065290733u, 0, COSF_TOLERANCE, 0}, +{653, 3204848496u, 3141519085u, 1063103336u, 0, COSF_TOLERANCE, 0}, +{654, 1249758327u, 3104759211u, 1062600614u, 0, COSF_TOLERANCE, 0}, +{655, 3092982276u, 3445282331u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{656, 1168098747u, 1316854744u, 3194302932u, 0, COSF_TOLERANCE, 0}, +{657, 892549317u, 1179637545u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{658, 3301009024u, 3406174560u, 1023410660u, 0, COSF_TOLERANCE, 0}, +{659, 3233089227u, 1212652543u, 1062170837u, 0, COSF_TOLERANCE, 0}, +{660, 3218245284u, 1238873830u, 3180808519u, 0, COSF_TOLERANCE, 0}, +{661, 3215981890u, 3240474694u, 1044860168u, 0, COSF_TOLERANCE, 0}, +{662, 1266687209u, 3092038122u, 3203985802u, 0, COSF_TOLERANCE, 0}, +{663, 3487959775u, 3331372071u, 1049182218u, 0, COSF_TOLERANCE, 0}, +{664, 943645710u, 852875779u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{665, 3345065699u, 3282620725u, 1061200314u, 0, COSF_TOLERANCE, 0}, +{666, 935847271u, 1067255804u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{667, 3410336089u, 1111437780u, 3212712938u, 0, COSF_TOLERANCE, 0}, +{668, 3082940740u, 1336840432u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{669, 1141063391u, 1168908072u, 3211896554u, 0, COSF_TOLERANCE, 0}, +{670, 3059263153u, 3067795684u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{671, 3353679791u, 897158391u, 1059472758u, 0, COSF_TOLERANCE, 0}, +{672, 1001823878u, 1016826861u, 1065352955u, 0, COSF_TOLERANCE, 0}, +{673, 1009130212u, 1004302940u, 1065352354u, 0, COSF_TOLERANCE, 0}, +{674, 3367127535u, 943136342u, 1061178206u, 0, COSF_TOLERANCE, 0}, +{675, 1032920919u, 3449126417u, 1065311113u, 0, COSF_TOLERANCE, 0}, +{676, 3281952870u, 3147012185u, 3212817745u, 0, COSF_TOLERANCE, 0}, +{677, 1237868497u, 3048281802u, 3211939539u, 0, COSF_TOLERANCE, 0}, +{678, 1153753924u, 3322269242u, 3200943446u, 0, COSF_TOLERANCE, 0}, +{679, 1120261759u, 892210998u, 3173569917u, 0, COSF_TOLERANCE, 0}, +{680, 3226328360u, 3366432856u, 3212789662u, 0, COSF_TOLERANCE, 0}, +{681, 3349595986u, 3251588707u, 3205275061u, 0, COSF_TOLERANCE, 0}, +{682, 3166889490u, 3306023523u, 1065348468u, 0, COSF_TOLERANCE, 0}, +{683, 1087750238u, 1099325523u, 1064051307u, 0, COSF_TOLERANCE, 0}, +{684, 3121620061u, 3359488363u, 1065353213u, 0, COSF_TOLERANCE, 0}, +{685, 1066116543u, 3072159933u, 1055676197u, 0, COSF_TOLERANCE, 0}, +{686, 3210898034u, 2981803389u, 1059208147u, 0, COSF_TOLERANCE, 0}, +{687, 3051923237u, 3364074347u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{688, 1030612298u, 3345396001u, 1065324927u, 0, COSF_TOLERANCE, 0}, +{689, 1186234578u, 858134374u, 1054267135u, 0, COSF_TOLERANCE, 0}, +{690, 1331680743u, 1009396165u, 3206173269u, 0, COSF_TOLERANCE, 0}, +{691, 3060774997u, 1326067357u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{692, 887589411u, 1292305693u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{693, 1045232522u, 3234993273u, 1065018194u, 0, COSF_TOLERANCE, 0}, +{694, 3119858470u, 962515365u, 1065353214u, 0, COSF_TOLERANCE, 0}, +{695, 3349432725u, 928848003u, 3205415559u, 0, COSF_TOLERANCE, 0}, +{696, 912423027u, 3184646319u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{697, 3228795133u, 3273940030u, 3209280997u, 0, COSF_TOLERANCE, 0}, +{698, 3194674746u, 3112269709u, 1064913843u, 0, COSF_TOLERANCE, 0}, +{699, 3296784303u, 3276182352u, 1056949368u, 0, COSF_TOLERANCE, 0}, +{700, 965402291u, 3107104376u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{701, 3388153589u, 3426245389u, 3209951206u, 0, COSF_TOLERANCE, 0}, +{702, 1133410485u, 3329658993u, 3205928783u, 0, COSF_TOLERANCE, 0}, +{703, 3136790322u, 1088652637u, 1065353186u, 0, COSF_TOLERANCE, 0}, +{704, 3369970587u, 959121458u, 3197103638u, 0, COSF_TOLERANCE, 0}, +{705, 1270451568u, 928393353u, 3206261789u, 0, COSF_TOLERANCE, 0}, +{706, 989498922u, 3088358419u, 1065353185u, 0, COSF_TOLERANCE, 0}, +{707, 1280215674u, 3148135875u, 1063832706u, 0, COSF_TOLERANCE, 0}, +{708, 1171873518u, 954709738u, 1064155935u, 0, COSF_TOLERANCE, 0}, +{709, 3298258100u, 935525182u, 1050519430u, 0, COSF_TOLERANCE, 0}, +{710, 3415208824u, 822843236u, 1055761783u, 0, COSF_TOLERANCE, 0}, +{711, 1001897182u, 3191875320u, 1065352952u, 0, COSF_TOLERANCE, 0}, +{712, 3152777939u, 3245830463u, 1065352782u, 0, COSF_TOLERANCE, 0}, +{713, 985903305u, 3333087577u, 1065353197u, 0, COSF_TOLERANCE, 0}, +{714, 3357328848u, 859306298u, 1065201471u, 0, COSF_TOLERANCE, 0}, +{715, 982612185u, 923582663u, 1065353206u, 0, COSF_TOLERANCE, 0}, +{716, 3267868136u, 1208301947u, 1061666965u, 0, COSF_TOLERANCE, 0}, +{717, 3319048157u, 1172271145u, 1064637121u, 0, COSF_TOLERANCE, 0}, +{718, 1144755661u, 860947435u, 3210782984u, 0, COSF_TOLERANCE, 0}, +{719, 898467286u, 839254959u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{720, 3301461672u, 1233693827u, 1064849129u, 0, COSF_TOLERANCE, 0}, +{721, 3364525678u, 3089849671u, 3212318569u, 0, COSF_TOLERANCE, 0}, +{722, 931441127u, 1133424555u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{723, 3146660041u, 3143695961u, 1065353058u, 0, COSF_TOLERANCE, 0}, +{724, 3467121799u, 3023584354u, 1065067045u, 0, COSF_TOLERANCE, 0}, +{725, 1151257041u, 3084216427u, 1055307869u, 0, COSF_TOLERANCE, 0}, +{726, 3097873255u, 3219266640u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{727, 3130670309u, 3192399254u, 1065353204u, 0, COSF_TOLERANCE, 0}, +{728, 1017573824u, 3130901062u, 1065349732u, 0, COSF_TOLERANCE, 0}, +{729, 1258369714u, 3462258576u, 3201969674u, 0, COSF_TOLERANCE, 0}, +{730, 1216602683u, 3371396332u, 3210050328u, 0, COSF_TOLERANCE, 0}, +{731, 3297265739u, 1214184410u, 3212702797u, 0, COSF_TOLERANCE, 0}, +{732, 1071940738u, 3311731012u, 3193566987u, 0, COSF_TOLERANCE, 0}, +{733, 922601356u, 3337171870u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{734, 3462285635u, 3444030332u, 3212427653u, 0, COSF_TOLERANCE, 0}, +{735, 3357177805u, 1085464241u, 3207190309u, 0, COSF_TOLERANCE, 0}, +{736, 3049120080u, 900832851u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{737, 1153863660u, 1011991342u, 1053945264u, 0, COSF_TOLERANCE, 0}, +{738, 3034243695u, 917098003u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{739, 1249365132u, 3278686216u, 3206794534u, 0, COSF_TOLERANCE, 0}, +{740, 3046215730u, 3211219980u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{741, 3047251716u, 1090787353u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{742, 3131219358u, 3471261157u, 1065353203u, 0, COSF_TOLERANCE, 0}, +{743, 3222096285u, 1198013705u, 3206036104u, 0, COSF_TOLERANCE, 0}, +{744, 1297708818u, 3079166173u, 3210136249u, 0, COSF_TOLERANCE, 0}, +{745, 3345532722u, 3383708463u, 1037468763u, 0, COSF_TOLERANCE, 0}, +{746, 3418753236u, 3481843070u, 1049116908u, 0, COSF_TOLERANCE, 0}, +{747, 1277417964u, 3487506626u, 3211166061u, 0, COSF_TOLERANCE, 0}, +{748, 987577257u, 1152077087u, 1065353192u, 0, COSF_TOLERANCE, 0}, +{749, 3161606610u, 3190282989u, 1065351382u, 0, COSF_TOLERANCE, 0}, +{750, 888030585u, 3062367380u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{751, 1043442869u, 3311393817u, 1065101303u, 0, COSF_TOLERANCE, 0}, +{752, 3320923228u, 3464544249u, 1034266674u, 0, COSF_TOLERANCE, 0}, +{753, 1337400405u, 3488844154u, 3212399289u, 0, COSF_TOLERANCE, 0}, +{754, 3400348640u, 3129868490u, 3212750692u, 0, COSF_TOLERANCE, 0}, +{755, 1250249095u, 1069023744u, 1064625332u, 0, COSF_TOLERANCE, 0}, +{756, 3284411233u, 1173613526u, 3211360322u, 0, COSF_TOLERANCE, 0}, +{757, 3020883322u, 2953622587u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{758, 1215968622u, 3469884568u, 3201990812u, 0, COSF_TOLERANCE, 0}, +{759, 3202319550u, 819117302u, 1063779709u, 0, COSF_TOLERANCE, 0}, +{760, 3061638260u, 3116222327u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{761, 1025404104u, 1066370251u, 1065340668u, 0, COSF_TOLERANCE, 0}, +{762, 3138086437u, 3195983510u, 1065353178u, 0, COSF_TOLERANCE, 0}, +{763, 3091024506u, 3456196859u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{764, 3362748242u, 3369843597u, 1062500671u, 0, COSF_TOLERANCE, 0}, +{765, 3099671635u, 3218383623u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{766, 3068014841u, 2978226656u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{767, 1252237719u, 1121169249u, 3193168278u, 0, COSF_TOLERANCE, 0}, +{768, 3327895594u, 1224511805u, 3210036731u, 0, COSF_TOLERANCE, 0}, +{769, 3082454432u, 889268276u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{770, 3396161504u, 1182798837u, 3212737452u, 0, COSF_TOLERANCE, 0}, +{771, 1099710167u, 887180181u, 1048526850u, 0, COSF_TOLERANCE, 0}, +{772, 1157186482u, 1288722647u, 3207798214u, 0, COSF_TOLERANCE, 0}, +{773, 1282110851u, 3176633124u, 1063172436u, 0, COSF_TOLERANCE, 0}, +{774, 3477008113u, 1331845018u, 1033803075u, 0, COSF_TOLERANCE, 0}, +{775, 3292127294u, 3409957764u, 3204259685u, 0, COSF_TOLERANCE, 0}, +{776, 1123357102u, 3281307320u, 3212835571u, 0, COSF_TOLERANCE, 0}, +{777, 1106837025u, 3088080674u, 1064643809u, 0, COSF_TOLERANCE, 0}, +{778, 1049949008u, 1130799489u, 1064648250u, 0, COSF_TOLERANCE, 0}, +{779, 1253017688u, 942062372u, 3202388818u, 0, COSF_TOLERANCE, 0}, +{780, 1108543194u, 3281299199u, 1058438173u, 0, COSF_TOLERANCE, 0}, +{781, 3087985411u, 1238341456u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{782, 3163283126u, 1328636961u, 1065350771u, 0, COSF_TOLERANCE, 0}, +{783, 1160162706u, 1264067367u, 3211737515u, 0, COSF_TOLERANCE, 0}, +{784, 3305715025u, 3017496063u, 3209506661u, 0, COSF_TOLERANCE, 0}, +{785, 1266928623u, 811778614u, 1059902219u, 0, COSF_TOLERANCE, 0}, +{786, 3025340297u, 1193925540u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{787, 3438080027u, 3107114149u, 3212289015u, 0, COSF_TOLERANCE, 0}, +{788, 3344574751u, 3111270744u, 3204718571u, 0, COSF_TOLERANCE, 0}, +{789, 1152416724u, 962669179u, 3196823613u, 0, COSF_TOLERANCE, 0}, +{790, 1218239308u, 1126238113u, 3200397114u, 0, COSF_TOLERANCE, 0}, +{791, 3263310567u, 1030748197u, 3206623965u, 0, COSF_TOLERANCE, 0}, +{792, 3041998669u, 1160635263u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{793, 1000313118u, 2980130729u, 1065353017u, 0, COSF_TOLERANCE, 0}, +{794, 972485427u, 1124312043u, 1065353214u, 0, COSF_TOLERANCE, 0}, +{795, 3290264612u, 1124703898u, 1033417520u, 0, COSF_TOLERANCE, 0}, +{796, 3222106584u, 1183748648u, 3206069195u, 0, COSF_TOLERANCE, 0}, +{797, 1278946388u, 825129857u, 3207337564u, 0, COSF_TOLERANCE, 0}, +{798, 947914771u, 3181847068u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{799, 3167730654u, 3195765940u, 1065347822u, 0, COSF_TOLERANCE, 0}, +{800, 1098530298u, 3255870890u, 3212798281u, 0, COSF_TOLERANCE, 0}, +{801, 3232726036u, 871038882u, 1060273352u, 0, COSF_TOLERANCE, 0}, +{802, 1297190916u, 811863044u, 1049557645u, 0, COSF_TOLERANCE, 0}, +{803, 1277649137u, 961171401u, 3186874497u, 0, COSF_TOLERANCE, 0}, +{804, 3203377685u, 1306427476u, 1063548485u, 0, COSF_TOLERANCE, 0}, +{805, 3090306474u, 3124785016u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{806, 3244032016u, 3045313345u, 1052855950u, 0, COSF_TOLERANCE, 0}, +{807, 3033122376u, 3049877065u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{808, 1096155623u, 1256423752u, 1060154871u, 0, COSF_TOLERANCE, 0}, +{809, 873151908u, 3246562559u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{810, 3238729605u, 1298769842u, 3208544401u, 0, COSF_TOLERANCE, 0}, +{811, 3317196817u, 989537151u, 1055488317u, 0, COSF_TOLERANCE, 0}, +{812, 3374748510u, 834161190u, 3211766708u, 0, COSF_TOLERANCE, 0}, +{813, 3345634950u, 959901149u, 1047810758u, 0, COSF_TOLERANCE, 0}, +{814, 3189860276u, 883598767u, 1065145234u, 0, COSF_TOLERANCE, 0}, +{815, 887311687u, 1175312255u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{816, 3396917283u, 3066326686u, 1065330581u, 0, COSF_TOLERANCE, 0}, +{817, 3317032737u, 3143803722u, 3210940381u, 0, COSF_TOLERANCE, 0}, +{818, 1200051436u, 1163802508u, 1054691063u, 0, COSF_TOLERANCE, 0}, +{819, 3105291012u, 1194385202u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{820, 1306520561u, 957302464u, 3202730728u, 0, COSF_TOLERANCE, 0}, +{821, 1314936356u, 2985592532u, 1059259508u, 0, COSF_TOLERANCE, 0}, +{822, 3475052219u, 1284049853u, 3212731294u, 0, COSF_TOLERANCE, 0}, +{823, 3085636260u, 1107682820u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{824, 3393227708u, 3271879112u, 3212746551u, 0, COSF_TOLERANCE, 0}, +{825, 3182540197u, 852580839u, 1065290094u, 0, COSF_TOLERANCE, 0}, +{826, 3349005404u, 3080993030u, 1065287645u, 0, COSF_TOLERANCE, 0}, +{827, 3154720153u, 3443720494u, 1065352628u, 0, COSF_TOLERANCE, 0}, +{828, 1262863321u, 1219003129u, 1062939840u, 0, COSF_TOLERANCE, 0}, +{829, 882902102u, 1224362550u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{830, 1053387478u, 3184880021u, 1064071666u, 0, COSF_TOLERANCE, 0}, +{831, 3387653691u, 3347783852u, 3143612867u, 0, COSF_TOLERANCE, 0}, +{832, 3136364836u, 1018492227u, 1065353188u, 0, COSF_TOLERANCE, 0}, +{833, 1338680611u, 1166078045u, 3211297596u, 0, COSF_TOLERANCE, 0}, +{834, 1112891928u, 3074730425u, 3212805372u, 0, COSF_TOLERANCE, 0}, +{835, 893449284u, 1052877339u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{836, 892311459u, 1097338393u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{837, 3105373037u, 3246705916u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{838, 1190105283u, 3033907262u, 3208837018u, 0, COSF_TOLERANCE, 0}, +{839, 1011225926u, 1180485180u, 1065351990u, 0, COSF_TOLERANCE, 0}, +{840, 1043025031u, 987068973u, 1065119016u, 0, COSF_TOLERANCE, 0}, +{841, 3410531037u, 2953541915u, 3210684265u, 0, COSF_TOLERANCE, 0}, +{842, 3125834184u, 896953754u, 1065353211u, 0, COSF_TOLERANCE, 0}, +{843, 902318189u, 849277289u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{844, 3213624815u, 2987148017u, 1055588756u, 0, COSF_TOLERANCE, 0}, +{845, 1120888322u, 1086209113u, 3212830895u, 0, COSF_TOLERANCE, 0}, +{846, 1315217243u, 3396371713u, 3205739778u, 0, COSF_TOLERANCE, 0}, +{847, 3137758475u, 1039403054u, 1065353181u, 0, COSF_TOLERANCE, 0}, +{848, 1040617590u, 1034835971u, 1065208564u, 0, COSF_TOLERANCE, 0}, +{849, 955384253u, 3344785562u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{850, 3061417900u, 1172208065u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{851, 904255535u, 1019967545u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{852, 1022984119u, 3113891410u, 1065345435u, 0, COSF_TOLERANCE, 0}, +{853, 997362368u, 3112875428u, 1065353101u, 0, COSF_TOLERANCE, 0}, +{854, 900933520u, 1100589187u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{855, 1168623062u, 1143306482u, 3212305490u, 0, COSF_TOLERANCE, 0}, +{856, 878737490u, 3269908326u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{857, 1039827284u, 1072928888u, 1065227867u, 0, COSF_TOLERANCE, 0}, +{858, 1021564080u, 1064468397u, 1065346728u, 0, COSF_TOLERANCE, 0}, +{859, 3458669745u, 3033299853u, 3207192275u, 0, COSF_TOLERANCE, 0}, +{860, 3327516316u, 3405380971u, 3212243066u, 0, COSF_TOLERANCE, 0}, +{861, 1040711112u, 3229444200u, 1065205484u, 0, COSF_TOLERANCE, 0}, +{862, 1134528351u, 3365952513u, 1044204722u, 0, COSF_TOLERANCE, 0}, +{863, 3039884464u, 1170612785u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{864, 3414352838u, 3350285760u, 1065213072u, 0, COSF_TOLERANCE, 0}, +{865, 1133689539u, 1067460093u, 3196938746u, 0, COSF_TOLERANCE, 0}, +{866, 3455688478u, 3333091960u, 3170953053u, 0, COSF_TOLERANCE, 0}, +{867, 1137634874u, 1137038869u, 1059909857u, 0, COSF_TOLERANCE, 0}, +{868, 3415502662u, 955510692u, 3207324162u, 0, COSF_TOLERANCE, 0}, +{869, 954999730u, 969618597u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{870, 1066157309u, 3241712664u, 1055531362u, 0, COSF_TOLERANCE, 0}, +{871, 3436353675u, 1174967495u, 1062525851u, 0, COSF_TOLERANCE, 0}, +{872, 940437609u, 860372396u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{873, 3108347547u, 3434003435u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{874, 3064200154u, 3158080507u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{875, 1023889593u, 2979304683u, 1065344062u, 0, COSF_TOLERANCE, 0}, +{876, 3272661536u, 3461799138u, 1064399564u, 0, COSF_TOLERANCE, 0}, +{877, 1170245333u, 1233406410u, 3212532373u, 0, COSF_TOLERANCE, 0}, +{878, 1219052056u, 3369557946u, 3210290288u, 0, COSF_TOLERANCE, 0}, +{879, 3318983619u, 3259663338u, 1065030505u, 0, COSF_TOLERANCE, 0}, +{880, 3372118621u, 837597103u, 3179313840u, 0, COSF_TOLERANCE, 0}, +{881, 3146190320u, 889646054u, 1065353074u, 0, COSF_TOLERANCE, 0}, +{882, 1299683827u, 966031619u, 3212569447u, 0, COSF_TOLERANCE, 0}, +{883, 3190796331u, 1320011850u, 1065106891u, 0, COSF_TOLERANCE, 0}, +{884, 3086068902u, 3484245751u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{885, 3064155399u, 3176569312u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{886, 3040314717u, 1071290674u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{887, 3257224022u, 3361778245u, 3210918690u, 0, COSF_TOLERANCE, 0}, +{888, 1229268598u, 1066965677u, 1065119672u, 0, COSF_TOLERANCE, 0}, +{889, 3184078812u, 871003709u, 1065272329u, 0, COSF_TOLERANCE, 0}, +{890, 1086717248u, 3423795374u, 1065275932u, 0, COSF_TOLERANCE, 0}, +{891, 3434884607u, 3029593823u, 3211446397u, 0, COSF_TOLERANCE, 0}, +{892, 3464955606u, 1017987696u, 3209420100u, 0, COSF_TOLERANCE, 0}, +{893, 1025278524u, 3121856207u, 1065340970u, 0, COSF_TOLERANCE, 0}, +{894, 1242829722u, 3233935671u, 3205152024u, 0, COSF_TOLERANCE, 0}, +{895, 3075149137u, 1117325737u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{896, 1200927971u, 1317167489u, 3197436878u, 0, COSF_TOLERANCE, 0}, +{897, 3326858092u, 3452602832u, 1058159947u, 0, COSF_TOLERANCE, 0}, +{898, 1246019790u, 850632217u, 3211310879u, 0, COSF_TOLERANCE, 0}, +{899, 3184801644u, 1137974313u, 1065263225u, 0, COSF_TOLERANCE, 0}, +{900, 1136052740u, 3244616020u, 1053786700u, 0, COSF_TOLERANCE, 0}, +{901, 1069009211u, 3002507482u, 1040828843u, 0, COSF_TOLERANCE, 0}, +{902, 1015670780u, 1101217251u, 1065350839u, 0, COSF_TOLERANCE, 0}, +{903, 1012543234u, 1116520440u, 1065351728u, 0, COSF_TOLERANCE, 0}, +{904, 3316611992u, 3394732912u, 3189155062u, 0, COSF_TOLERANCE, 0}, +{905, 1087942795u, 3316660295u, 1063391976u, 0, COSF_TOLERANCE, 0}, +{906, 3426365713u, 3069778532u, 1063585819u, 0, COSF_TOLERANCE, 0}, +{907, 3066654389u, 3443934204u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{908, 3295326432u, 1313396175u, 3210161438u, 0, COSF_TOLERANCE, 0}, +{909, 3318835308u, 3277583511u, 3212826231u, 0, COSF_TOLERANCE, 0}, +{910, 3283555717u, 891875120u, 3190806489u, 0, COSF_TOLERANCE, 0}, +{911, 3381255420u, 3015406047u, 3199347701u, 0, COSF_TOLERANCE, 0}, +{912, 3040485181u, 3375450886u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{913, 3388772093u, 1032597076u, 1058319659u, 0, COSF_TOLERANCE, 0}, +{914, 954670189u, 1144923689u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{915, 1319200415u, 3387555900u, 3212404062u, 0, COSF_TOLERANCE, 0}, +{916, 1279324488u, 3228401212u, 3198691552u, 0, COSF_TOLERANCE, 0}, +{917, 3217795424u, 865577227u, 3165019754u, 0, COSF_TOLERANCE, 0}, +{918, 3455131757u, 1260217257u, 3212759112u, 0, COSF_TOLERANCE, 0}, +{919, 1246947517u, 1087951909u, 3212751459u, 0, COSF_TOLERANCE, 0}, +{920, 3396723577u, 869285240u, 3199745081u, 0, COSF_TOLERANCE, 0}, +{921, 3433761025u, 3060143904u, 3209669423u, 0, COSF_TOLERANCE, 0}, +{922, 3201187455u, 900233172u, 1064010350u, 0, COSF_TOLERANCE, 0}, +{923, 1173247961u, 1191127979u, 1060192306u, 0, COSF_TOLERANCE, 0}, +{924, 3037297123u, 3346394818u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{925, 3248534678u, 1323683800u, 1051129506u, 0, COSF_TOLERANCE, 0}, +{926, 3083019343u, 3033309444u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{927, 3042018375u, 3203882372u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{928, 1082862511u, 3032804719u, 3199595173u, 0, COSF_TOLERANCE, 0}, +{929, 3157626955u, 3483653298u, 1065352186u, 0, COSF_TOLERANCE, 0}, +{930, 1341821683u, 3003675365u, 1031799938u, 0, COSF_TOLERANCE, 0}, +{931, 881101379u, 1190838126u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{932, 1079061705u, 2960507663u, 3212702243u, 0, COSF_TOLERANCE, 0}, +{933, 3182695954u, 3256861672u, 1065288396u, 0, COSF_TOLERANCE, 0}, +{934, 1105291533u, 3482971524u, 3212756299u, 0, COSF_TOLERANCE, 0}, +{935, 1016023520u, 3227712090u, 1065350650u, 0, COSF_TOLERANCE, 0}, +{936, 3370691006u, 1295870514u, 3207194610u, 0, COSF_TOLERANCE, 0}, +{937, 1156767169u, 1049756240u, 1041511887u, 0, COSF_TOLERANCE, 0}, +{938, 3077020499u, 894671462u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{939, 1104284039u, 3040211914u, 1054748732u, 0, COSF_TOLERANCE, 0}, +{940, 3335212901u, 3486414589u, 1050567781u, 0, COSF_TOLERANCE, 0}, +{941, 1093697541u, 3193708441u, 1024597442u, 0, COSF_TOLERANCE, 0}, +{942, 3266691185u, 1160074593u, 3212393816u, 0, COSF_TOLERANCE, 0}, +{943, 3179003144u, 1108615803u, 1065321540u, 0, COSF_TOLERANCE, 0}, +{944, 1094115255u, 3008610212u, 1054298469u, 0, COSF_TOLERANCE, 0}, +{945, 3424086808u, 3260140004u, 1062663944u, 0, COSF_TOLERANCE, 0}, +{946, 3353608773u, 1134068114u, 1057011823u, 0, COSF_TOLERANCE, 0}, +{947, 973664327u, 1319516167u, 1065353214u, 0, COSF_TOLERANCE, 0}, +{948, 882878091u, 3136970767u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{949, 1098662266u, 833740182u, 3212808631u, 0, COSF_TOLERANCE, 0}, +{950, 927582555u, 947955456u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{951, 3111440310u, 3067634077u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{952, 3476083859u, 966439623u, 3212788520u, 0, COSF_TOLERANCE, 0}, +{953, 3038754840u, 932009686u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{954, 979878744u, 1232482646u, 1065353209u, 0, COSF_TOLERANCE, 0}, +{955, 3464546616u, 3205527253u, 3177740345u, 0, COSF_TOLERANCE, 0}, +{956, 1002542205u, 3152136093u, 1065352923u, 0, COSF_TOLERANCE, 0}, +{957, 3443552129u, 3165561391u, 3212354566u, 0, COSF_TOLERANCE, 0}, +{958, 1287620154u, 3119707283u, 1055090182u, 0, COSF_TOLERANCE, 0}, +{959, 946058434u, 1249928879u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{960, 3073260205u, 3093124531u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{961, 1245702957u, 894348966u, 1064624749u, 0, COSF_TOLERANCE, 0}, +{962, 989655126u, 1308376568u, 1065353185u, 0, COSF_TOLERANCE, 0}, +{963, 1002715618u, 1191006977u, 1065352915u, 0, COSF_TOLERANCE, 0}, +{964, 3087802274u, 897541752u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{965, 1000863905u, 1196831314u, 1065352996u, 0, COSF_TOLERANCE, 0}, +{966, 3415763001u, 3032518431u, 1057972712u, 0, COSF_TOLERANCE, 0}, +{967, 3283471961u, 1260093226u, 1060111540u, 0, COSF_TOLERANCE, 0}, +{968, 3311210827u, 1192192264u, 1064321527u, 0, COSF_TOLERANCE, 0}, +{969, 3026311911u, 2968974374u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{970, 1198307901u, 1116328249u, 1058793373u, 0, COSF_TOLERANCE, 0}, +{971, 1288901567u, 1296370667u, 1060913244u, 0, COSF_TOLERANCE, 0}, +{972, 922255363u, 958305289u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{973, 1113104661u, 944376032u, 3208332702u, 0, COSF_TOLERANCE, 0}, +{974, 1136714348u, 828849087u, 3209446366u, 0, COSF_TOLERANCE, 0}, +{975, 948856035u, 1015466475u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{976, 1062512367u, 3229559531u, 1059890212u, 0, COSF_TOLERANCE, 0}, +{977, 3486907092u, 823220784u, 1060681519u, 0, COSF_TOLERANCE, 0}, +{978, 1162027071u, 3308983387u, 1061103464u, 0, COSF_TOLERANCE, 0}, +{979, 1034561811u, 1054043114u, 1065295340u, 0, COSF_TOLERANCE, 0}, +{980, 3271615417u, 3209997200u, 3212777366u, 0, COSF_TOLERANCE, 0}, +{981, 1042014529u, 1146708584u, 1065159203u, 0, COSF_TOLERANCE, 0}, +{982, 1177157787u, 3090208179u, 3207554300u, 0, COSF_TOLERANCE, 0}, +{983, 3196144817u, 1056118717u, 1064821065u, 0, COSF_TOLERANCE, 0}, +{984, 3432084552u, 2997091781u, 3201706790u, 0, COSF_TOLERANCE, 0}, +{985, 1309658335u, 1010219988u, 3210696537u, 0, COSF_TOLERANCE, 0}, +{986, 1226494979u, 2991604792u, 3189793814u, 0, COSF_TOLERANCE, 0}, +{987, 3100289712u, 3456334210u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{988, 3375507013u, 1306310823u, 3210320892u, 0, COSF_TOLERANCE, 0}, +{989, 3460699001u, 3096700943u, 3131659669u, 0, COSF_TOLERANCE, 0}, +{990, 3079231719u, 1044386263u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{991, 3093951884u, 1014115231u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{992, 3468023178u, 1209565017u, 1039445927u, 0, COSF_TOLERANCE, 0}, +{993, 1204196034u, 3298625731u, 1049351518u, 0, COSF_TOLERANCE, 0}, +{994, 3459877411u, 2960476959u, 1040321054u, 0, COSF_TOLERANCE, 0}, +{995, 909696559u, 1163075690u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{996, 1161439847u, 943449277u, 1063892963u, 0, COSF_TOLERANCE, 0}, +{997, 908663107u, 939489763u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{998, 1055319316u, 3261813492u, 1063675936u, 0, COSF_TOLERANCE, 0}, +{999, 1084378658u, 1009650785u, 1051996722u, 0, COSF_TOLERANCE, 0}, +{1000, 3053887750u, 3341786453u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1001, 3022828828u, 881335251u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1002, 1226473697u, 821025132u, 3210808958u, 0, COSF_TOLERANCE, 0}, +{1003, 1123114742u, 1229815537u, 1049003021u, 0, COSF_TOLERANCE, 0}, +{1004, 1258114435u, 1291336083u, 1063128407u, 0, COSF_TOLERANCE, 0}, +{1005, 3468040845u, 3066966245u, 3209603439u, 0, COSF_TOLERANCE, 0}, +{1006, 1178825761u, 1113195286u, 1060387901u, 0, COSF_TOLERANCE, 0}, +{1007, 3059266302u, 878503862u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1008, 3223384012u, 1130486973u, 3209646119u, 0, COSF_TOLERANCE, 0}, +{1009, 1019964626u, 1235133609u, 1065348044u, 0, COSF_TOLERANCE, 0}, +{1010, 3445262427u, 3465211174u, 3207388524u, 0, COSF_TOLERANCE, 0}, +{1011, 1125653081u, 1207799746u, 1048953689u, 0, COSF_TOLERANCE, 0}, +{1012, 3337652712u, 3025581813u, 1046815450u, 0, COSF_TOLERANCE, 0}, +{1013, 1184753508u, 3147374485u, 1048780362u, 0, COSF_TOLERANCE, 0}, +{1014, 996404791u, 3353251979u, 1065353115u, 0, COSF_TOLERANCE, 0}, +{1015, 1188439315u, 1113484271u, 3212669878u, 0, COSF_TOLERANCE, 0}, +{1016, 906557513u, 3006513432u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1017, 916831283u, 999465787u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1018, 996786317u, 3179221951u, 1065353109u, 0, COSF_TOLERANCE, 0}, +{1019, 3461635065u, 1004690387u, 1059256339u, 0, COSF_TOLERANCE, 0}, +{1020, 1188167943u, 1200744896u, 1056968528u, 0, COSF_TOLERANCE, 0}, +{1021, 3036502395u, 1172597364u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1022, 891257783u, 1267560050u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1023, 3290079438u, 846519377u, 3211632704u, 0, COSF_TOLERANCE, 0}, +{1024, 3350690327u, 2967953392u, 1064717520u, 0, COSF_TOLERANCE, 0}, +{1025, 1102061604u, 3424449935u, 3212831810u, 0, COSF_TOLERANCE, 0}, +{1026, 1282351521u, 3039376424u, 3206969204u, 0, COSF_TOLERANCE, 0}, +{1027, 3458861065u, 3392466405u, 1061025076u, 0, COSF_TOLERANCE, 0}, +{1028, 3095256878u, 1023623326u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1029, 3163373610u, 843150426u, 1065350722u, 0, COSF_TOLERANCE, 0}, +{1030, 3228793330u, 855146890u, 3209285436u, 0, COSF_TOLERANCE, 0}, +{1031, 3422194733u, 893873945u, 3189571899u, 0, COSF_TOLERANCE, 0}, +{1032, 3083885296u, 974543672u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1033, 1261940623u, 3402349985u, 1059371925u, 0, COSF_TOLERANCE, 0}, +{1034, 3400603081u, 3234396843u, 3194979617u, 0, COSF_TOLERANCE, 0}, +{1035, 1219411812u, 2961857939u, 1059936718u, 0, COSF_TOLERANCE, 0}, +{1036, 3094833770u, 805351108u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1037, 3139250800u, 3079109479u, 1065353168u, 0, COSF_TOLERANCE, 0}, +{1038, 886201503u, 3272760705u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1039, 3297366026u, 1089966380u, 3212509727u, 0, COSF_TOLERANCE, 0}, +{1040, 1218488455u, 3309646450u, 3212486799u, 0, COSF_TOLERANCE, 0}, +{1041, 3040358923u, 3093401553u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1042, 1283938137u, 1196383822u, 3212578488u, 0, COSF_TOLERANCE, 0}, +{1043, 3182551696u, 3029982441u, 1065289970u, 0, COSF_TOLERANCE, 0}, +{1044, 1317098613u, 949986176u, 3192636969u, 0, COSF_TOLERANCE, 0}, +{1045, 3116209179u, 3303588342u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{1046, 3431703657u, 3014443710u, 1061837671u, 0, COSF_TOLERANCE, 0}, +{1047, 3239728775u, 927815421u, 3212427544u, 0, COSF_TOLERANCE, 0}, +{1048, 3207141672u, 933456504u, 1061824313u, 0, COSF_TOLERANCE, 0}, +{1049, 3154378805u, 905462392u, 1065352671u, 0, COSF_TOLERANCE, 0}, +{1050, 3069658155u, 1041452042u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1051, 3313160088u, 2964063309u, 3201046321u, 0, COSF_TOLERANCE, 0}, +{1052, 3207056527u, 3384206601u, 1061876382u, 0, COSF_TOLERANCE, 0}, +{1053, 1284174954u, 3436881197u, 3197483672u, 0, COSF_TOLERANCE, 0}, +{1054, 3156081645u, 3308839704u, 1065352436u, 0, COSF_TOLERANCE, 0}, +{1055, 1063693032u, 976661408u, 1058991141u, 0, COSF_TOLERANCE, 0}, +{1056, 3036026175u, 1251203998u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1057, 1102631663u, 3396951425u, 3202535888u, 0, COSF_TOLERANCE, 0}, +{1058, 968803479u, 992989712u, 1065353215u, 0, COSF_TOLERANCE, 0}, +{1059, 3273080388u, 3109405906u, 1063706432u, 0, COSF_TOLERANCE, 0}, +{1060, 1172529774u, 3294550127u, 1064186558u, 0, COSF_TOLERANCE, 0}, +{1061, 1306695905u, 1292690378u, 3204586469u, 0, COSF_TOLERANCE, 0}, +{1062, 1003649752u, 1218792138u, 1065352870u, 0, COSF_TOLERANCE, 0}, +{1063, 1078478376u, 1326246424u, 3212835593u, 0, COSF_TOLERANCE, 0}, +{1064, 3158855023u, 3151283866u, 1065351962u, 0, COSF_TOLERANCE, 0}, +{1065, 1165177679u, 3276237026u, 3198996477u, 0, COSF_TOLERANCE, 0}, +{1066, 3403009513u, 3381966453u, 1064112873u, 0, COSF_TOLERANCE, 0}, +{1067, 952348506u, 3377573987u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1068, 1222777442u, 1125769920u, 1059372175u, 0, COSF_TOLERANCE, 0}, +{1069, 1325324763u, 978336043u, 3210385803u, 0, COSF_TOLERANCE, 0}, +{1070, 3363524213u, 3202991311u, 3210370597u, 0, COSF_TOLERANCE, 0}, +{1071, 1158950321u, 1073578913u, 3204454895u, 0, COSF_TOLERANCE, 0}, +{1072, 903129873u, 3416864271u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1073, 3078339944u, 988173985u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1074, 1208345407u, 1254181270u, 3197912734u, 0, COSF_TOLERANCE, 0}, +{1075, 1258634105u, 1247426200u, 3212159515u, 0, COSF_TOLERANCE, 0}, +{1076, 1248478509u, 1287895126u, 1013250315u, 0, COSF_TOLERANCE, 0}, +{1077, 1153863988u, 3430539165u, 1055159277u, 0, COSF_TOLERANCE, 0}, +{1078, 1235620969u, 866627358u, 3197807963u, 0, COSF_TOLERANCE, 0}, +{1079, 1097120930u, 3221726305u, 3189900284u, 0, COSF_TOLERANCE, 0}, +{1080, 3469778622u, 1200179013u, 3177965590u, 0, COSF_TOLERANCE, 0}, +{1081, 1147712200u, 931865525u, 1059239330u, 0, COSF_TOLERANCE, 0}, +{1082, 1124721745u, 3058969650u, 1064402756u, 0, COSF_TOLERANCE, 0}, +{1083, 3261744304u, 1043806501u, 3202193916u, 0, COSF_TOLERANCE, 0}, +{1084, 1064922416u, 1320485628u, 1058000246u, 0, COSF_TOLERANCE, 0}, +{1085, 3303160152u, 3075455322u, 1064893552u, 0, COSF_TOLERANCE, 0}, +{1086, 1315090496u, 3269683237u, 1065335705u, 0, COSF_TOLERANCE, 0}, +{1087, 3230403187u, 1322841992u, 3198737980u, 0, COSF_TOLERANCE, 0}, +{1088, 1335399673u, 974138676u, 1063062969u, 0, COSF_TOLERANCE, 0}, +{1089, 1072458508u, 3372833993u, 3196822050u, 0, COSF_TOLERANCE, 0}, +{1090, 3303015249u, 3015039539u, 1043481079u, 0, COSF_TOLERANCE, 0}, +{1091, 3252139741u, 1059615003u, 3196321587u, 0, COSF_TOLERANCE, 0}, +{1092, 3468519966u, 3113982619u, 3181119723u, 0, COSF_TOLERANCE, 0}, +{1093, 1006231203u, 897530770u, 1065352728u, 0, COSF_TOLERANCE, 0}, +{1094, 951554138u, 1001144381u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1095, 942046828u, 986341002u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1096, 3319723279u, 3414482416u, 3212789186u, 0, COSF_TOLERANCE, 0}, +{1097, 3255104167u, 928827688u, 3195901186u, 0, COSF_TOLERANCE, 0}, +{1098, 1155477903u, 3104812800u, 1054683158u, 0, COSF_TOLERANCE, 0}, +{1099, 3273889176u, 980486479u, 1064943212u, 0, COSF_TOLERANCE, 0}, +{1100, 3237813668u, 3441016803u, 3177499355u, 0, COSF_TOLERANCE, 0}, +{1101, 1228207362u, 2985476579u, 3204716343u, 0, COSF_TOLERANCE, 0}, +{1102, 975349337u, 1311932596u, 1065353213u, 0, COSF_TOLERANCE, 0}, +{1103, 1290175785u, 3008182462u, 3207719515u, 0, COSF_TOLERANCE, 0}, +{1104, 981908840u, 3314038398u, 1065353207u, 0, COSF_TOLERANCE, 0}, +{1105, 941187647u, 1107765599u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1106, 1214223128u, 3225536822u, 1065333862u, 0, COSF_TOLERANCE, 0}, +{1107, 3422922584u, 1086391131u, 1063595800u, 0, COSF_TOLERANCE, 0}, +{1108, 1315857601u, 3487600045u, 3207921796u, 0, COSF_TOLERANCE, 0}, +{1109, 3453226030u, 3233768835u, 3211093747u, 0, COSF_TOLERANCE, 0}, +{1110, 1078359574u, 3199175230u, 3212823014u, 0, COSF_TOLERANCE, 0}, +{1111, 1029557624u, 3302959071u, 1065328624u, 0, COSF_TOLERANCE, 0}, +{1112, 1207675424u, 3042692550u, 3212587330u, 0, COSF_TOLERANCE, 0}, +{1113, 1028355074u, 3442294040u, 1065332524u, 0, COSF_TOLERANCE, 0}, +{1114, 3119299090u, 1187096397u, 1065353214u, 0, COSF_TOLERANCE, 0}, +{1115, 1248421894u, 3367769132u, 1061302737u, 0, COSF_TOLERANCE, 0}, +{1116, 3353251994u, 1095517730u, 1046208216u, 0, COSF_TOLERANCE, 0}, +{1117, 876926659u, 3288089977u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1118, 1076752219u, 876236939u, 3211352228u, 0, COSF_TOLERANCE, 0}, +{1119, 3388531942u, 2988520062u, 3212836555u, 0, COSF_TOLERANCE, 0}, +{1120, 1273395082u, 3031189261u, 1064835354u, 0, COSF_TOLERANCE, 0}, +{1121, 3385588183u, 3258252464u, 3189580137u, 0, COSF_TOLERANCE, 0}, +{1122, 3192315328u, 3289489214u, 1065037827u, 0, COSF_TOLERANCE, 0}, +{1123, 3441804648u, 3274638356u, 3194945623u, 0, COSF_TOLERANCE, 0}, +{1124, 3392827417u, 1277961150u, 3210261568u, 0, COSF_TOLERANCE, 0}, +{1125, 1161241793u, 1328003707u, 3207641762u, 0, COSF_TOLERANCE, 0}, +{1126, 3034494183u, 3041579130u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1127, 1171318485u, 3374409104u, 1063645118u, 0, COSF_TOLERANCE, 0}, +{1128, 3047748143u, 831102792u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1129, 1001216371u, 3052357038u, 1065352981u, 0, COSF_TOLERANCE, 0}, +{1130, 912515889u, 1074635609u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1131, 3391452505u, 897989232u, 3209655482u, 0, COSF_TOLERANCE, 0}, +{1132, 3249603369u, 3147662248u, 3212683322u, 0, COSF_TOLERANCE, 0}, +{1133, 1220264047u, 2960450369u, 3212372154u, 0, COSF_TOLERANCE, 0}, +{1134, 3169816394u, 988430929u, 1065346043u, 0, COSF_TOLERANCE, 0}, +{1135, 3098997418u, 3002162688u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1136, 3282212423u, 3174079140u, 1016941376u, 0, COSF_TOLERANCE, 0}, +{1137, 3352293320u, 3247843425u, 1050107930u, 0, COSF_TOLERANCE, 0}, +{1138, 3296358441u, 875645354u, 3211409002u, 0, COSF_TOLERANCE, 0}, +{1139, 1197828352u, 3245614728u, 1065315648u, 0, COSF_TOLERANCE, 0}, +{1140, 3340510371u, 914930263u, 1057806643u, 0, COSF_TOLERANCE, 0}, +{1141, 1127109339u, 3368125489u, 3171828278u, 0, COSF_TOLERANCE, 0}, +{1142, 909467381u, 1232375752u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1143, 1200599955u, 2981200675u, 1058314411u, 0, COSF_TOLERANCE, 0}, +{1144, 962230977u, 2988248037u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1145, 3192887808u, 3191848339u, 1065009608u, 0, COSF_TOLERANCE, 0}, +{1146, 3237183876u, 3179379969u, 1048038805u, 0, COSF_TOLERANCE, 0}, +{1147, 939285924u, 3056079386u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1148, 944050180u, 3452557879u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1149, 3058135703u, 3090284601u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1150, 3480592662u, 3261728191u, 3210584153u, 0, COSF_TOLERANCE, 0}, +{1151, 3061939312u, 3274418540u, 1065353216u, 0, COSF_TOLERANCE, 0}, +{1152, 1003299981u, 853295521u, 1065352887u, 0, COSF_TOLERANCE, 0}, +{1153, 1155775526u, 1255814444u, 1064855858u, 0, COSF_TOLERANCE, 0}, +{1154, 1234491880u, 3408568717u, 1047219695u, 0, COSF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_COSF_H multiple inclusion protection + +// EOF cosf.h diff --git a/packages/language/c/libm/current/tests/vectors/coshf.c b/packages/language/c/libm/current/tests/vectors/coshf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/coshf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// coshf.c +// +// Test of coshf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/coshf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(coshf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &coshf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &coshf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("coshf() is stable"); + } // if + else + { + CYG_TEST_FAIL("coshf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library coshf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "coshf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF coshf.c diff --git a/packages/language/c/libm/current/tests/vectors/coshf.h b/packages/language/c/libm/current/tests/vectors/coshf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/coshf.h @@ -0,0 +1,517 @@ +#ifndef CYGONCE_LIBM_COSH_H +#define CYGONCE_LIBM_COSH_H +//=========================================================================== +// +// coshf.h +// +// Test vectors for testing of coshf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/coshf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define COSH_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t coshf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1072153489u, 1072153489u, 0, COSH_TOLERANCE, 0}, +{1, 3214430700u, 1072027623u, 1072027623u, 0, COSH_TOLERANCE, 0}, +{2, 3214346813u, 1071903263u, 1071903263u, 0, COSH_TOLERANCE, 0}, +{3, 3214262927u, 1071780397u, 1071780397u, 0, COSH_TOLERANCE, 0}, +{4, 3214179041u, 1071659013u, 1071659013u, 0, COSH_TOLERANCE, 0}, +{5, 3214095155u, 1071539100u, 1071539100u, 0, COSH_TOLERANCE, 0}, +{6, 3214011269u, 1071420643u, 1071420643u, 0, COSH_TOLERANCE, 0}, +{7, 3213927383u, 1071303632u, 1071303632u, 0, COSH_TOLERANCE, 0}, +{8, 3213843497u, 1071188056u, 1071188056u, 0, COSH_TOLERANCE, 0}, +{9, 3213759611u, 1071073900u, 1071073900u, 0, COSH_TOLERANCE, 0}, +{10, 3213675725u, 1070961157u, 1070961157u, 0, COSH_TOLERANCE, 0}, +{11, 3213591839u, 1070849813u, 1070849813u, 0, COSH_TOLERANCE, 0}, +{12, 3213507953u, 1070739857u, 1070739857u, 0, COSH_TOLERANCE, 0}, +{13, 3213424067u, 1070631278u, 1070631278u, 0, COSH_TOLERANCE, 0}, +{14, 3213340180u, 1070524066u, 1070524066u, 0, COSH_TOLERANCE, 0}, +{15, 3213256294u, 1070418210u, 1070418210u, 0, COSH_TOLERANCE, 0}, +{16, 3213172408u, 1070313701u, 1070313701u, 0, COSH_TOLERANCE, 0}, +{17, 3213088522u, 1070210525u, 1070210525u, 0, COSH_TOLERANCE, 0}, +{18, 3213004636u, 1070108675u, 1070108675u, 0, COSH_TOLERANCE, 0}, +{19, 3212920750u, 1070008138u, 1070008138u, 0, COSH_TOLERANCE, 0}, +{20, 3212836864u, 1069908906u, 1069908906u, 0, COSH_TOLERANCE, 0}, +{21, 3212669092u, 1069810970u, 1069810970u, 0, COSH_TOLERANCE, 0}, +{22, 3212501320u, 1069714317u, 1069714317u, 0, COSH_TOLERANCE, 0}, +{23, 3212333548u, 1069618939u, 1069618939u, 0, COSH_TOLERANCE, 0}, +{24, 3212165775u, 1069524826u, 1069524826u, 0, COSH_TOLERANCE, 0}, +{25, 3211998003u, 1069431969u, 1069431969u, 0, COSH_TOLERANCE, 0}, +{26, 3211830231u, 1069340360u, 1069340360u, 0, COSH_TOLERANCE, 0}, +{27, 3211662459u, 1069249988u, 1069249988u, 0, COSH_TOLERANCE, 0}, +{28, 3211494687u, 1069160844u, 1069160844u, 0, COSH_TOLERANCE, 0}, +{29, 3211326915u, 1069072921u, 1069072921u, 0, COSH_TOLERANCE, 0}, +{30, 3211159142u, 1068986208u, 1068986208u, 0, COSH_TOLERANCE, 0}, +{31, 3210991370u, 1068900697u, 1068900697u, 0, COSH_TOLERANCE, 0}, +{32, 3210823598u, 1068816380u, 1068816380u, 0, COSH_TOLERANCE, 0}, +{33, 3210655826u, 1068733248u, 1068733248u, 0, COSH_TOLERANCE, 0}, +{34, 3210488054u, 1068651292u, 1068651292u, 0, COSH_TOLERANCE, 0}, +{35, 3210320282u, 1068570506u, 1068570506u, 0, COSH_TOLERANCE, 0}, +{36, 3210152509u, 1068490879u, 1068490879u, 0, COSH_TOLERANCE, 0}, +{37, 3209984737u, 1068412406u, 1068412406u, 0, COSH_TOLERANCE, 0}, +{38, 3209816965u, 1068335079u, 1068335079u, 0, COSH_TOLERANCE, 0}, +{39, 3209649193u, 1068258888u, 1068258888u, 0, COSH_TOLERANCE, 0}, +{40, 3209481421u, 1068183826u, 1068183826u, 0, COSH_TOLERANCE, 0}, +{41, 3209313649u, 1068109886u, 1068109886u, 0, COSH_TOLERANCE, 0}, +{42, 3209145876u, 1068037060u, 1068037060u, 0, COSH_TOLERANCE, 0}, +{43, 3208978104u, 1067965341u, 1067965341u, 0, COSH_TOLERANCE, 0}, +{44, 3208810332u, 1067894723u, 1067894723u, 0, COSH_TOLERANCE, 0}, +{45, 3208642560u, 1067825198u, 1067825198u, 0, COSH_TOLERANCE, 0}, +{46, 3208474788u, 1067756759u, 1067756759u, 0, COSH_TOLERANCE, 0}, +{47, 3208307016u, 1067689400u, 1067689400u, 0, COSH_TOLERANCE, 0}, +{48, 3208139244u, 1067623113u, 1067623113u, 0, COSH_TOLERANCE, 0}, +{49, 3207971471u, 1067557890u, 1067557890u, 0, COSH_TOLERANCE, 0}, +{50, 3207803699u, 1067493729u, 1067493729u, 0, COSH_TOLERANCE, 0}, +{51, 3207635927u, 1067430620u, 1067430620u, 0, COSH_TOLERANCE, 0}, +{52, 3207468155u, 1067368557u, 1067368557u, 0, COSH_TOLERANCE, 0}, +{53, 3207300383u, 1067307535u, 1067307535u, 0, COSH_TOLERANCE, 0}, +{54, 3207132611u, 1067247547u, 1067247547u, 0, COSH_TOLERANCE, 0}, +{55, 3206964838u, 1067188587u, 1067188587u, 0, COSH_TOLERANCE, 0}, +{56, 3206797066u, 1067130650u, 1067130650u, 0, COSH_TOLERANCE, 0}, +{57, 3206629294u, 1067073729u, 1067073729u, 0, COSH_TOLERANCE, 0}, +{58, 3206461522u, 1067017820u, 1067017820u, 0, COSH_TOLERANCE, 0}, +{59, 3206293750u, 1066962916u, 1066962916u, 0, COSH_TOLERANCE, 0}, +{60, 3206125978u, 1066909011u, 1066909011u, 0, COSH_TOLERANCE, 0}, +{61, 3205958205u, 1066856101u, 1066856101u, 0, COSH_TOLERANCE, 0}, +{62, 3205790433u, 1066804180u, 1066804180u, 0, COSH_TOLERANCE, 0}, +{63, 3205622661u, 1066753243u, 1066753243u, 0, COSH_TOLERANCE, 0}, +{64, 3205454889u, 1066703285u, 1066703285u, 0, COSH_TOLERANCE, 0}, +{65, 3205287117u, 1066654301u, 1066654301u, 0, COSH_TOLERANCE, 0}, +{66, 3205119345u, 1066606286u, 1066606286u, 0, COSH_TOLERANCE, 0}, +{67, 3204951572u, 1066559235u, 1066559235u, 0, COSH_TOLERANCE, 0}, +{68, 3204783800u, 1066513143u, 1066513143u, 0, COSH_TOLERANCE, 0}, +{69, 3204616028u, 1066468007u, 1066468007u, 0, COSH_TOLERANCE, 0}, +{70, 3204448256u, 1066423820u, 1066423820u, 0, COSH_TOLERANCE, 0}, +{71, 3204112712u, 1066380580u, 1066380580u, 0, COSH_TOLERANCE, 0}, +{72, 3203777167u, 1066338281u, 1066338281u, 0, COSH_TOLERANCE, 0}, +{73, 3203441623u, 1066296920u, 1066296920u, 0, COSH_TOLERANCE, 0}, +{74, 3203106079u, 1066256491u, 1066256491u, 0, COSH_TOLERANCE, 0}, +{75, 3202770534u, 1066216992u, 1066216992u, 0, COSH_TOLERANCE, 0}, +{76, 3202434990u, 1066178419u, 1066178419u, 0, COSH_TOLERANCE, 0}, +{77, 3202099446u, 1066140766u, 1066140766u, 0, COSH_TOLERANCE, 0}, +{78, 3201763901u, 1066104032u, 1066104032u, 0, COSH_TOLERANCE, 0}, +{79, 3201428357u, 1066068211u, 1066068211u, 0, COSH_TOLERANCE, 0}, +{80, 3201092813u, 1066033300u, 1066033300u, 0, COSH_TOLERANCE, 0}, +{81, 3200757268u, 1065999297u, 1065999297u, 0, COSH_TOLERANCE, 0}, +{82, 3200421724u, 1065966197u, 1065966197u, 0, COSH_TOLERANCE, 0}, +{83, 3200086180u, 1065933997u, 1065933997u, 0, COSH_TOLERANCE, 0}, +{84, 3199750636u, 1065902694u, 1065902694u, 0, COSH_TOLERANCE, 0}, +{85, 3199415091u, 1065872285u, 1065872285u, 0, COSH_TOLERANCE, 0}, +{86, 3199079547u, 1065842767u, 1065842767u, 0, COSH_TOLERANCE, 0}, +{87, 3198744003u, 1065814136u, 1065814136u, 0, COSH_TOLERANCE, 0}, +{88, 3198408458u, 1065786390u, 1065786390u, 0, COSH_TOLERANCE, 0}, +{89, 3198072914u, 1065759527u, 1065759527u, 0, COSH_TOLERANCE, 0}, +{90, 3197737370u, 1065733543u, 1065733543u, 0, COSH_TOLERANCE, 0}, +{91, 3197401825u, 1065708436u, 1065708436u, 0, COSH_TOLERANCE, 0}, +{92, 3197066281u, 1065684204u, 1065684204u, 0, COSH_TOLERANCE, 0}, +{93, 3196730737u, 1065660843u, 1065660843u, 0, COSH_TOLERANCE, 0}, +{94, 3196395192u, 1065638352u, 1065638352u, 0, COSH_TOLERANCE, 0}, +{95, 3196059648u, 1065616728u, 1065616728u, 0, COSH_TOLERANCE, 0}, +{96, 3195388559u, 1065595970u, 1065595970u, 0, COSH_TOLERANCE, 0}, +{97, 3194717471u, 1065576075u, 1065576075u, 0, COSH_TOLERANCE, 0}, +{98, 3194046382u, 1065557040u, 1065557040u, 0, COSH_TOLERANCE, 0}, +{99, 3193375293u, 1065538865u, 1065538865u, 0, COSH_TOLERANCE, 0}, +{100, 3192704205u, 1065521548u, 1065521548u, 0, COSH_TOLERANCE, 0}, +{101, 3192033116u, 1065505086u, 1065505086u, 0, COSH_TOLERANCE, 0}, +{102, 3191362028u, 1065489479u, 1065489479u, 0, COSH_TOLERANCE, 0}, +{103, 3190690939u, 1065474723u, 1065474723u, 0, COSH_TOLERANCE, 0}, +{104, 3190019850u, 1065460819u, 1065460819u, 0, COSH_TOLERANCE, 0}, +{105, 3189348762u, 1065447765u, 1065447765u, 0, COSH_TOLERANCE, 0}, +{106, 3188677673u, 1065435559u, 1065435559u, 0, COSH_TOLERANCE, 0}, +{107, 3188006584u, 1065424200u, 1065424200u, 0, COSH_TOLERANCE, 0}, +{108, 3186999951u, 1065413686u, 1065413686u, 0, COSH_TOLERANCE, 0}, +{109, 3185657774u, 1065404018u, 1065404018u, 0, COSH_TOLERANCE, 0}, +{110, 3184315597u, 1065395194u, 1065395194u, 0, COSH_TOLERANCE, 0}, +{111, 3182973420u, 1065387213u, 1065387213u, 0, COSH_TOLERANCE, 0}, +{112, 3181631242u, 1065380074u, 1065380074u, 0, COSH_TOLERANCE, 0}, +{113, 3180289065u, 1065373776u, 1065373776u, 0, COSH_TOLERANCE, 0}, +{114, 3178611343u, 1065368320u, 1065368320u, 0, COSH_TOLERANCE, 0}, +{115, 3175926989u, 1065363704u, 1065363704u, 0, COSH_TOLERANCE, 0}, +{116, 3173242634u, 1065359928u, 1065359928u, 0, COSH_TOLERANCE, 0}, +{117, 3170222735u, 1065356991u, 1065356991u, 0, COSH_TOLERANCE, 0}, +{118, 3164854026u, 1065354894u, 1065354894u, 0, COSH_TOLERANCE, 0}, +{119, 3156465418u, 1065353635u, 1065353635u, 0, COSH_TOLERANCE, 0}, +{120, 1008981770u, 1065353635u, 1065353635u, 0, COSH_TOLERANCE, 0}, +{121, 1017370378u, 1065354894u, 1065354894u, 0, COSH_TOLERANCE, 0}, +{122, 1022739087u, 1065356991u, 1065356991u, 0, COSH_TOLERANCE, 0}, +{123, 1025758986u, 1065359928u, 1065359928u, 0, COSH_TOLERANCE, 0}, +{124, 1028443341u, 1065363704u, 1065363704u, 0, COSH_TOLERANCE, 0}, +{125, 1031127695u, 1065368320u, 1065368320u, 0, COSH_TOLERANCE, 0}, +{126, 1032805417u, 1065373776u, 1065373776u, 0, COSH_TOLERANCE, 0}, +{127, 1034147594u, 1065380074u, 1065380074u, 0, COSH_TOLERANCE, 0}, +{128, 1035489772u, 1065387213u, 1065387213u, 0, COSH_TOLERANCE, 0}, +{129, 1036831949u, 1065395194u, 1065395194u, 0, COSH_TOLERANCE, 0}, +{130, 1038174126u, 1065404018u, 1065404018u, 0, COSH_TOLERANCE, 0}, +{131, 1039516303u, 1065413686u, 1065413686u, 0, COSH_TOLERANCE, 0}, +{132, 1040522936u, 1065424200u, 1065424200u, 0, COSH_TOLERANCE, 0}, +{133, 1041194025u, 1065435559u, 1065435559u, 0, COSH_TOLERANCE, 0}, +{134, 1041865114u, 1065447765u, 1065447765u, 0, COSH_TOLERANCE, 0}, +{135, 1042536202u, 1065460819u, 1065460819u, 0, COSH_TOLERANCE, 0}, +{136, 1043207291u, 1065474723u, 1065474723u, 0, COSH_TOLERANCE, 0}, +{137, 1043878380u, 1065489479u, 1065489479u, 0, COSH_TOLERANCE, 0}, +{138, 1044549468u, 1065505086u, 1065505086u, 0, COSH_TOLERANCE, 0}, +{139, 1045220557u, 1065521548u, 1065521548u, 0, COSH_TOLERANCE, 0}, +{140, 1045891645u, 1065538865u, 1065538865u, 0, COSH_TOLERANCE, 0}, +{141, 1046562734u, 1065557040u, 1065557040u, 0, COSH_TOLERANCE, 0}, +{142, 1047233823u, 1065576075u, 1065576075u, 0, COSH_TOLERANCE, 0}, +{143, 1047904911u, 1065595970u, 1065595970u, 0, COSH_TOLERANCE, 0}, +{144, 1048576000u, 1065616728u, 1065616728u, 0, COSH_TOLERANCE, 0}, +{145, 1048911544u, 1065638352u, 1065638352u, 0, COSH_TOLERANCE, 0}, +{146, 1049247089u, 1065660843u, 1065660843u, 0, COSH_TOLERANCE, 0}, +{147, 1049582633u, 1065684204u, 1065684204u, 0, COSH_TOLERANCE, 0}, +{148, 1049918177u, 1065708436u, 1065708436u, 0, COSH_TOLERANCE, 0}, +{149, 1050253722u, 1065733543u, 1065733543u, 0, COSH_TOLERANCE, 0}, +{150, 1050589266u, 1065759527u, 1065759527u, 0, COSH_TOLERANCE, 0}, +{151, 1050924810u, 1065786390u, 1065786390u, 0, COSH_TOLERANCE, 0}, +{152, 1051260355u, 1065814136u, 1065814136u, 0, COSH_TOLERANCE, 0}, +{153, 1051595899u, 1065842767u, 1065842767u, 0, COSH_TOLERANCE, 0}, +{154, 1051931443u, 1065872285u, 1065872285u, 0, COSH_TOLERANCE, 0}, +{155, 1052266988u, 1065902694u, 1065902694u, 0, COSH_TOLERANCE, 0}, +{156, 1052602532u, 1065933997u, 1065933997u, 0, COSH_TOLERANCE, 0}, +{157, 1052938076u, 1065966197u, 1065966197u, 0, COSH_TOLERANCE, 0}, +{158, 1053273620u, 1065999297u, 1065999297u, 0, COSH_TOLERANCE, 0}, +{159, 1053609165u, 1066033300u, 1066033300u, 0, COSH_TOLERANCE, 0}, +{160, 1053944709u, 1066068211u, 1066068211u, 0, COSH_TOLERANCE, 0}, +{161, 1054280253u, 1066104032u, 1066104032u, 0, COSH_TOLERANCE, 0}, +{162, 1054615798u, 1066140766u, 1066140766u, 0, COSH_TOLERANCE, 0}, +{163, 1054951342u, 1066178419u, 1066178419u, 0, COSH_TOLERANCE, 0}, +{164, 1055286886u, 1066216992u, 1066216992u, 0, COSH_TOLERANCE, 0}, +{165, 1055622431u, 1066256491u, 1066256491u, 0, COSH_TOLERANCE, 0}, +{166, 1055957975u, 1066296920u, 1066296920u, 0, COSH_TOLERANCE, 0}, +{167, 1056293519u, 1066338281u, 1066338281u, 0, COSH_TOLERANCE, 0}, +{168, 1056629064u, 1066380580u, 1066380580u, 0, COSH_TOLERANCE, 0}, +{169, 1056964608u, 1066423820u, 1066423820u, 0, COSH_TOLERANCE, 0}, +{170, 1057132380u, 1066468007u, 1066468007u, 0, COSH_TOLERANCE, 0}, +{171, 1057300152u, 1066513143u, 1066513143u, 0, COSH_TOLERANCE, 0}, +{172, 1057467924u, 1066559235u, 1066559235u, 0, COSH_TOLERANCE, 0}, +{173, 1057635697u, 1066606286u, 1066606286u, 0, COSH_TOLERANCE, 0}, +{174, 1057803469u, 1066654301u, 1066654301u, 0, COSH_TOLERANCE, 0}, +{175, 1057971241u, 1066703285u, 1066703285u, 0, COSH_TOLERANCE, 0}, +{176, 1058139013u, 1066753243u, 1066753243u, 0, COSH_TOLERANCE, 0}, +{177, 1058306785u, 1066804180u, 1066804180u, 0, COSH_TOLERANCE, 0}, +{178, 1058474557u, 1066856101u, 1066856101u, 0, COSH_TOLERANCE, 0}, +{179, 1058642330u, 1066909011u, 1066909011u, 0, COSH_TOLERANCE, 0}, +{180, 1058810102u, 1066962916u, 1066962916u, 0, COSH_TOLERANCE, 0}, +{181, 1058977874u, 1067017820u, 1067017820u, 0, COSH_TOLERANCE, 0}, +{182, 1059145646u, 1067073729u, 1067073729u, 0, COSH_TOLERANCE, 0}, +{183, 1059313418u, 1067130650u, 1067130650u, 0, COSH_TOLERANCE, 0}, +{184, 1059481190u, 1067188587u, 1067188587u, 0, COSH_TOLERANCE, 0}, +{185, 1059648963u, 1067247547u, 1067247547u, 0, COSH_TOLERANCE, 0}, +{186, 1059816735u, 1067307535u, 1067307535u, 0, COSH_TOLERANCE, 0}, +{187, 1059984507u, 1067368557u, 1067368557u, 0, COSH_TOLERANCE, 0}, +{188, 1060152279u, 1067430620u, 1067430620u, 0, COSH_TOLERANCE, 0}, +{189, 1060320051u, 1067493729u, 1067493729u, 0, COSH_TOLERANCE, 0}, +{190, 1060487823u, 1067557890u, 1067557890u, 0, COSH_TOLERANCE, 0}, +{191, 1060655596u, 1067623113u, 1067623113u, 0, COSH_TOLERANCE, 0}, +{192, 1060823368u, 1067689400u, 1067689400u, 0, COSH_TOLERANCE, 0}, +{193, 1060991140u, 1067756759u, 1067756759u, 0, COSH_TOLERANCE, 0}, +{194, 1061158912u, 1067825198u, 1067825198u, 0, COSH_TOLERANCE, 0}, +{195, 1061326684u, 1067894723u, 1067894723u, 0, COSH_TOLERANCE, 0}, +{196, 1061494456u, 1067965341u, 1067965341u, 0, COSH_TOLERANCE, 0}, +{197, 1061662228u, 1068037060u, 1068037060u, 0, COSH_TOLERANCE, 0}, +{198, 1061830001u, 1068109886u, 1068109886u, 0, COSH_TOLERANCE, 0}, +{199, 1061997773u, 1068183826u, 1068183826u, 0, COSH_TOLERANCE, 0}, +{200, 1062165545u, 1068258888u, 1068258888u, 0, COSH_TOLERANCE, 0}, +{201, 1062333317u, 1068335079u, 1068335079u, 0, COSH_TOLERANCE, 0}, +{202, 1062501089u, 1068412406u, 1068412406u, 0, COSH_TOLERANCE, 0}, +{203, 1062668861u, 1068490879u, 1068490879u, 0, COSH_TOLERANCE, 0}, +{204, 1062836634u, 1068570506u, 1068570506u, 0, COSH_TOLERANCE, 0}, +{205, 1063004406u, 1068651292u, 1068651292u, 0, COSH_TOLERANCE, 0}, +{206, 1063172178u, 1068733248u, 1068733248u, 0, COSH_TOLERANCE, 0}, +{207, 1063339950u, 1068816380u, 1068816380u, 0, COSH_TOLERANCE, 0}, +{208, 1063507722u, 1068900697u, 1068900697u, 0, COSH_TOLERANCE, 0}, +{209, 1063675494u, 1068986208u, 1068986208u, 0, COSH_TOLERANCE, 0}, +{210, 1063843267u, 1069072921u, 1069072921u, 0, COSH_TOLERANCE, 0}, +{211, 1064011039u, 1069160844u, 1069160844u, 0, COSH_TOLERANCE, 0}, +{212, 1064178811u, 1069249988u, 1069249988u, 0, COSH_TOLERANCE, 0}, +{213, 1064346583u, 1069340360u, 1069340360u, 0, COSH_TOLERANCE, 0}, +{214, 1064514355u, 1069431969u, 1069431969u, 0, COSH_TOLERANCE, 0}, +{215, 1064682127u, 1069524826u, 1069524826u, 0, COSH_TOLERANCE, 0}, +{216, 1064849900u, 1069618939u, 1069618939u, 0, COSH_TOLERANCE, 0}, +{217, 1065017672u, 1069714317u, 1069714317u, 0, COSH_TOLERANCE, 0}, +{218, 1065185444u, 1069810970u, 1069810970u, 0, COSH_TOLERANCE, 0}, +{219, 1065353216u, 1069908906u, 1069908906u, 0, COSH_TOLERANCE, 0}, +{220, 1065437102u, 1070008138u, 1070008138u, 0, COSH_TOLERANCE, 0}, +{221, 1065520988u, 1070108675u, 1070108675u, 0, COSH_TOLERANCE, 0}, +{222, 1065604874u, 1070210525u, 1070210525u, 0, COSH_TOLERANCE, 0}, +{223, 1065688760u, 1070313701u, 1070313701u, 0, COSH_TOLERANCE, 0}, +{224, 1065772646u, 1070418210u, 1070418210u, 0, COSH_TOLERANCE, 0}, +{225, 1065856532u, 1070524066u, 1070524066u, 0, COSH_TOLERANCE, 0}, +{226, 1065940419u, 1070631278u, 1070631278u, 0, COSH_TOLERANCE, 0}, +{227, 1066024305u, 1070739857u, 1070739857u, 0, COSH_TOLERANCE, 0}, +{228, 1066108191u, 1070849813u, 1070849813u, 0, COSH_TOLERANCE, 0}, +{229, 1066192077u, 1070961157u, 1070961157u, 0, COSH_TOLERANCE, 0}, +{230, 1066275963u, 1071073900u, 1071073900u, 0, COSH_TOLERANCE, 0}, +{231, 1066359849u, 1071188056u, 1071188056u, 0, COSH_TOLERANCE, 0}, +{232, 1066443735u, 1071303632u, 1071303632u, 0, COSH_TOLERANCE, 0}, +{233, 1066527621u, 1071420643u, 1071420643u, 0, COSH_TOLERANCE, 0}, +{234, 1066611507u, 1071539100u, 1071539100u, 0, COSH_TOLERANCE, 0}, +{235, 1066695393u, 1071659013u, 1071659013u, 0, COSH_TOLERANCE, 0}, +{236, 1066779279u, 1071780397u, 1071780397u, 0, COSH_TOLERANCE, 0}, +{237, 1066863165u, 1071903263u, 1071903263u, 0, COSH_TOLERANCE, 0}, +{238, 1066947052u, 1072027623u, 1072027623u, 0, COSH_TOLERANCE, 0}, +{239, 3234402267u, 1132846996u, 1132846996u, 0, COSH_TOLERANCE, 0}, +{240, 3231108068u, 1113499468u, 1113499468u, 0, COSH_TOLERANCE, 0}, +{241, 3226013659u, 1094285476u, 1094285476u, 0, COSH_TOLERANCE, 0}, +{242, 3217625051u, 1075877474u, 1075877474u, 0, COSH_TOLERANCE, 0}, +{243, 0u, 1065353216u, 1065353216u, 0, COSH_TOLERANCE, 0}, +{244, 1070141403u, 1075877474u, 1075877474u, 0, COSH_TOLERANCE, 0}, +{245, 1078530011u, 1094285476u, 1094285476u, 0, COSH_TOLERANCE, 0}, +{246, 1083624420u, 1113499468u, 1113499468u, 0, COSH_TOLERANCE, 0}, +{247, 3253731328u, 1419477554u, 1419477554u, 0, COSH_TOLERANCE, 0}, +{248, 3252840038u, 1399014724u, 1399014724u, 0, COSH_TOLERANCE, 0}, +{249, 3251948749u, 1378226969u, 1378226969u, 0, COSH_TOLERANCE, 0}, +{250, 3251057459u, 1358083682u, 1358083682u, 0, COSH_TOLERANCE, 0}, +{251, 3250166170u, 1337023431u, 1337023431u, 0, COSH_TOLERANCE, 0}, +{252, 3249274880u, 1317116439u, 1317116439u, 0, COSH_TOLERANCE, 0}, +{253, 3248383590u, 1295870124u, 1295870124u, 0, COSH_TOLERANCE, 0}, +{254, 3247492301u, 1275750495u, 1275750495u, 0, COSH_TOLERANCE, 0}, +{255, 3246601011u, 1254770489u, 1254770489u, 0, COSH_TOLERANCE, 0}, +{256, 3245028147u, 1234423762u, 1234423762u, 0, COSH_TOLERANCE, 0}, +{257, 3243245568u, 1213728180u, 1213728180u, 0, COSH_TOLERANCE, 0}, +{258, 3241462989u, 1193138897u, 1193138897u, 0, COSH_TOLERANCE, 0}, +{259, 3239680410u, 1172747042u, 1172747042u, 0, COSH_TOLERANCE, 0}, +{260, 3237792973u, 1151898761u, 1151898761u, 0, COSH_TOLERANCE, 0}, +{261, 3234227814u, 1131831325u, 1131831325u, 0, COSH_TOLERANCE, 0}, +{262, 3230662656u, 1110707830u, 1110707830u, 0, COSH_TOLERANCE, 0}, +{263, 3224580915u, 1090784045u, 1090784045u, 0, COSH_TOLERANCE, 0}, +{264, 3213675725u, 1070961157u, 1070961157u, 0, COSH_TOLERANCE, 0}, +{265, 1058642330u, 1066909011u, 1066909011u, 0, COSH_TOLERANCE, 0}, +{266, 1075000115u, 1084305641u, 1084305641u, 0, COSH_TOLERANCE, 0}, +{267, 1082130432u, 1104836417u, 1104836417u, 0, COSH_TOLERANCE, 0}, +{268, 1085695590u, 1125478258u, 1125478258u, 0, COSH_TOLERANCE, 0}, +{269, 1089260749u, 1145864069u, 1145864069u, 0, COSH_TOLERANCE, 0}, +{270, 1091672474u, 1166798129u, 1166798129u, 0, COSH_TOLERANCE, 0}, +{271, 1093455053u, 1186954451u, 1186954451u, 0, COSH_TOLERANCE, 0}, +{272, 1095237632u, 1208157740u, 1208157740u, 0, COSH_TOLERANCE, 0}, +{273, 1097020211u, 1228099076u, 1228099076u, 0, COSH_TOLERANCE, 0}, +{274, 1098802790u, 1249206348u, 1249206348u, 0, COSH_TOLERANCE, 0}, +{275, 1099746509u, 1269294498u, 1269294498u, 0, COSH_TOLERANCE, 0}, +{276, 1100637798u, 1290126283u, 1290126283u, 0, COSH_TOLERANCE, 0}, +{277, 1101529088u, 1310537485u, 1310537485u, 0, COSH_TOLERANCE, 0}, +{278, 1102420378u, 1331111329u, 1331111329u, 0, COSH_TOLERANCE, 0}, +{279, 1103311667u, 1351825023u, 1351825023u, 0, COSH_TOLERANCE, 0}, +{280, 1104202957u, 1372157288u, 1372157288u, 0, COSH_TOLERANCE, 0}, +{281, 1105094246u, 1393154230u, 1393154230u, 0, COSH_TOLERANCE, 0}, +{282, 1105985536u, 1413260339u, 1413260339u, 0, COSH_TOLERANCE, 0}, +{283, 1136446367u, 1194999402u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{284, 1125946360u, 3370647675u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{285, 3282993411u, 3033957825u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{286, 3287103796u, 1154138102u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{287, 1140187905u, 3466051188u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{288, 1121356447u, 3373485062u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{289, 1130299734u, 903489435u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{290, 1129518585u, 3123875978u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{291, 1140196815u, 1338107877u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{292, 1133128320u, 1019883016u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{293, 3276881499u, 1279248024u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{294, 3271367674u, 2962345057u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{295, 3269130828u, 3184653669u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{296, 3266969368u, 1321337529u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{297, 1130931088u, 1103202538u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{298, 3275237890u, 1036705270u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{299, 3281018046u, 976891930u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{300, 3281639192u, 1041678304u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{301, 1138869462u, 3336225884u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{302, 1120934307u, 851754050u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{303, 1126893165u, 991185677u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{304, 3279750470u, 1043829691u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{305, 1132730239u, 970681762u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{306, 3273484600u, 3312047722u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{307, 1127993937u, 2961937089u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{308, 1119892445u, 1156123987u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{309, 1138979832u, 3100744786u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{310, 3281219012u, 3190881451u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{311, 3275104955u, 1118756120u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{312, 1122402726u, 901308750u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{313, 3273836836u, 1304806106u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{314, 1123378518u, 3420832544u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{315, 3273853781u, 2973850350u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{316, 1121330870u, 3004311296u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{317, 3273000898u, 3204192793u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{318, 3275056068u, 3347783723u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{319, 3277679442u, 3106834845u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{320, 3284754580u, 1219372260u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{321, 3270337101u, 1201894512u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{322, 3282773495u, 1005577835u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{323, 1124240677u, 906796922u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{324, 1119740026u, 3355874874u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{325, 3278655299u, 868771977u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{326, 1128494117u, 1006049444u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{327, 1124138309u, 1211303367u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{328, 3273718623u, 991614550u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{329, 3276301428u, 3455289118u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{330, 3267728658u, 3383396815u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{331, 1125858271u, 873199561u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{332, 3286617672u, 3349284325u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{333, 1128542540u, 2957454177u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{334, 3283910310u, 980772835u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{335, 1127703558u, 3212305413u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{336, 3270154277u, 3450484255u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{337, 1124824106u, 3116569667u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{338, 3285199003u, 3412765608u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{339, 1138483874u, 3123051784u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{340, 3287796143u, 3372450889u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{341, 1138427315u, 856187848u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{342, 3266731952u, 3073750220u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{343, 3286935579u, 1246277393u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{344, 3273269173u, 3434026174u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{345, 1135545828u, 1254918706u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{346, 1135988587u, 3461361185u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{347, 3283879654u, 3253874001u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{348, 3274295536u, 1139193797u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{349, 1134855236u, 3334899880u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{350, 1121073826u, 3064047808u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{351, 1133146865u, 870681806u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{352, 1123929207u, 3104759211u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{353, 3286633183u, 3331372071u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{354, 3267729753u, 1111437780u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{355, 1138742759u, 1009396165u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{356, 1119456624u, 928393353u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{357, 1129220730u, 3148135875u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{358, 3282572423u, 3023584354u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{359, 3286124867u, 3444030332u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{360, 1123536012u, 3278686216u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{361, 1129936658u, 3079166173u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{362, 3267758292u, 3481843070u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{363, 1126423020u, 3487506626u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{364, 1136073813u, 3488844154u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{365, 3270332384u, 1182798837u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{366, 1131115907u, 3176633124u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{367, 3284070129u, 1331845018u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{368, 3278696475u, 3107114149u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{369, 1127951444u, 825129857u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{370, 1129418756u, 811863044u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{371, 1126654193u, 961171401u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{372, 3271088163u, 3066326686u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{373, 1130359793u, 957302464u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{374, 1138775588u, 2985592532u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{375, 3282114235u, 1284049853u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{376, 3267398588u, 3271879112u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{377, 1120256985u, 1219003129u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{378, 1137354019u, 1166078045u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{379, 3267924701u, 2953541915u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{380, 1139056475u, 3396371713u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{381, 3282508977u, 3033299853u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{382, 3279527710u, 3333091960u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{383, 3276970123u, 1174967495u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{384, 1131911667u, 966031619u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{385, 3275501055u, 3029593823u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{386, 3280406230u, 1017987696u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{387, 1120190670u, 850632217u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{388, 3275370769u, 3069778532u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{389, 1134651039u, 3387555900u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{390, 1128329544u, 3228401212u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{391, 3278970989u, 1260217257u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{392, 1121118397u, 1087951909u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{393, 3270894457u, 869285240u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{394, 3274377473u, 3060143904u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{395, 1140495091u, 3003675365u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{396, 3273091864u, 3260140004u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{397, 3283145875u, 966439623u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{398, 3279997240u, 3205527253u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{399, 3275779969u, 3165561391u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{400, 1128236602u, 3119707283u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{401, 1119873837u, 894348966u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{402, 1129518015u, 1296370667u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{403, 3285580500u, 823220784u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{404, 3272701000u, 2997091781u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{405, 1133497567u, 1010219988u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{406, 3284538233u, 3096700943u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{407, 3283473802u, 1209565017u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{408, 3283716643u, 2960476959u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{409, 1123896707u, 1291336083u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{410, 3283491469u, 3066966245u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{411, 3277490267u, 3465211174u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{412, 3285474297u, 1004690387u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{413, 1131356577u, 3039376424u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{414, 3282700297u, 3392466405u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{415, 3271199789u, 893873945u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{416, 1119334287u, 3402349985u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{417, 1124554585u, 1196383822u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{418, 1132549237u, 949986176u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{419, 3272320105u, 3014443710u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{420, 1124791402u, 3436881197u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{421, 1130535137u, 1292690378u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{422, 3268791785u, 3381966453u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{423, 1140775387u, 978336043u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{424, 1122649389u, 1287895126u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{425, 3285229246u, 1200179013u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{426, 1138929728u, 3269683237u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{427, 1134073081u, 974138676u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{428, 3283970590u, 3113982619u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{429, 1130792233u, 3008182462u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{430, 3271927640u, 1086391131u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{431, 1139696833u, 3487600045u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{432, 3277065262u, 3233768835u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{433, 1122592774u, 3367769132u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{434, 1122400138u, 3031189261u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{435, 3274032488u, 3274638356u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{436, 3266998297u, 1277961150u, 2139095040u, 0, COSH_TOLERANCE, 0}, +{437, 3287654678u, 3261728191u, 2139095040u, 0, COSH_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_COSH_H multiple inclusion protection + +// EOF coshf.h diff --git a/packages/language/c/libm/current/tests/vectors/erfcf.c b/packages/language/c/libm/current/tests/vectors/erfcf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/erfcf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// erfcf.c +// +// Test of erfcf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####EERFFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/erfcf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(erfcf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &erfcf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &erfcf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("erfcf() is stable"); + } // if + else + { + CYG_TEST_FAIL("erfcf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library erfcf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "erfcf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF erfcf.c diff --git a/packages/language/c/libm/current/tests/vectors/erfcf.h b/packages/language/c/libm/current/tests/vectors/erfcf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/erfcf.h @@ -0,0 +1,361 @@ +#ifndef CYGONCE_LIBM_ERFCF_H +#define CYGONCE_LIBM_ERFCF_H +//=========================================================================== +// +// erfcf.h +// +// Test vectors for testing of erfcf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####EERFCFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/erfcf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ERFCF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t erfcf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 2147493556u, 1072989483u, 0, ERFCF_TOLERANCE, 0}, +{1, 3214430700u, 2147493556u, 1072966786u, 0, ERFCF_TOLERANCE, 0}, +{2, 3214346813u, 2147493556u, 1072943542u, 0, ERFCF_TOLERANCE, 0}, +{3, 3214262927u, 2147493556u, 1072919744u, 0, ERFCF_TOLERANCE, 0}, +{4, 3214179041u, 2147493556u, 1072895382u, 0, ERFCF_TOLERANCE, 0}, +{5, 3214095155u, 2147493556u, 1072870448u, 0, ERFCF_TOLERANCE, 0}, +{6, 3214011269u, 2147493556u, 1072844934u, 0, ERFCF_TOLERANCE, 0}, +{7, 3213927383u, 2147493556u, 1072818831u, 0, ERFCF_TOLERANCE, 0}, +{8, 3213843497u, 2147493556u, 1072792132u, 0, ERFCF_TOLERANCE, 0}, +{9, 3213759611u, 2147493556u, 1072764828u, 0, ERFCF_TOLERANCE, 0}, +{10, 3213675725u, 2147493556u, 1072736911u, 0, ERFCF_TOLERANCE, 0}, +{11, 3213591839u, 2147493556u, 1072708374u, 0, ERFCF_TOLERANCE, 0}, +{12, 3213507953u, 2147493556u, 1072679207u, 0, ERFCF_TOLERANCE, 0}, +{13, 3213424067u, 2147493556u, 1072649403u, 0, ERFCF_TOLERANCE, 0}, +{14, 3213340180u, 2147493556u, 1072618955u, 0, ERFCF_TOLERANCE, 0}, +{15, 3213256294u, 2147493556u, 1072587854u, 0, ERFCF_TOLERANCE, 0}, +{16, 3213172408u, 2147493556u, 1072556094u, 0, ERFCF_TOLERANCE, 0}, +{17, 3213088522u, 2147493556u, 1072523666u, 0, ERFCF_TOLERANCE, 0}, +{18, 3213004636u, 2147493556u, 1072490563u, 0, ERFCF_TOLERANCE, 0}, +{19, 3212920750u, 2147493556u, 1072456777u, 0, ERFCF_TOLERANCE, 0}, +{20, 3212836864u, 2147493556u, 1072422303u, 0, ERFCF_TOLERANCE, 0}, +{21, 3212669092u, 2147493556u, 1072387132u, 0, ERFCF_TOLERANCE, 0}, +{22, 3212501320u, 2147493556u, 1072351257u, 0, ERFCF_TOLERANCE, 0}, +{23, 3212333548u, 2147493556u, 1072314673u, 0, ERFCF_TOLERANCE, 0}, +{24, 3212165775u, 2147493556u, 1072277371u, 0, ERFCF_TOLERANCE, 0}, +{25, 3211998003u, 2147493556u, 1072239347u, 0, ERFCF_TOLERANCE, 0}, +{26, 3211662459u, 2147493556u, 1072161105u, 0, ERFCF_TOLERANCE, 0}, +{27, 3211494687u, 2147493556u, 1072120874u, 0, ERFCF_TOLERANCE, 0}, +{28, 3211326915u, 2147493556u, 1072079897u, 0, ERFCF_TOLERANCE, 0}, +{29, 3211159142u, 2147493556u, 1072038167u, 0, ERFCF_TOLERANCE, 0}, +{30, 3210991370u, 2147493556u, 1071995679u, 0, ERFCF_TOLERANCE, 0}, +{31, 3210823598u, 2147493556u, 1071952428u, 0, ERFCF_TOLERANCE, 0}, +{32, 3210655826u, 2147493556u, 1071908409u, 0, ERFCF_TOLERANCE, 0}, +{33, 3210488054u, 2147493556u, 1071863617u, 0, ERFCF_TOLERANCE, 0}, +{34, 3210320282u, 2147493556u, 1071818048u, 0, ERFCF_TOLERANCE, 0}, +{35, 3210152509u, 2147493556u, 1071771698u, 0, ERFCF_TOLERANCE, 0}, +{36, 3209984737u, 2147493556u, 1071724563u, 0, ERFCF_TOLERANCE, 0}, +{37, 3209816965u, 2147493556u, 1071676639u, 0, ERFCF_TOLERANCE, 0}, +{38, 3209649193u, 2147493556u, 1071627922u, 0, ERFCF_TOLERANCE, 0}, +{39, 3209481421u, 2147493556u, 1071578410u, 0, ERFCF_TOLERANCE, 0}, +{40, 3209313649u, 2147493556u, 1071528099u, 0, ERFCF_TOLERANCE, 0}, +{41, 3209145876u, 2147493556u, 1071476987u, 0, ERFCF_TOLERANCE, 0}, +{42, 3208978104u, 2147493556u, 1071425072u, 0, ERFCF_TOLERANCE, 0}, +{43, 3208810332u, 2147493556u, 1071372351u, 0, ERFCF_TOLERANCE, 0}, +{44, 3208642560u, 2147493556u, 1071318822u, 0, ERFCF_TOLERANCE, 0}, +{45, 3208474788u, 2147493556u, 1071264484u, 0, ERFCF_TOLERANCE, 0}, +{46, 3208307016u, 2147493556u, 1071209336u, 0, ERFCF_TOLERANCE, 0}, +{47, 3208139244u, 2147493556u, 1071153378u, 0, ERFCF_TOLERANCE, 0}, +{48, 3207971471u, 2147493556u, 1071096607u, 0, ERFCF_TOLERANCE, 0}, +{49, 3207803699u, 2147493556u, 1071039024u, 0, ERFCF_TOLERANCE, 0}, +{50, 3207635927u, 2147493556u, 1070980630u, 0, ERFCF_TOLERANCE, 0}, +{51, 3207468155u, 2147493556u, 1070921425u, 0, ERFCF_TOLERANCE, 0}, +{52, 3207300383u, 2147493556u, 1070861409u, 0, ERFCF_TOLERANCE, 0}, +{53, 3207132611u, 2147493556u, 1070800583u, 0, ERFCF_TOLERANCE, 0}, +{54, 3206964838u, 2147493556u, 1070738948u, 0, ERFCF_TOLERANCE, 0}, +{55, 3206797066u, 2147493556u, 1070676508u, 0, ERFCF_TOLERANCE, 0}, +{56, 3206629294u, 2147493556u, 1070613263u, 0, ERFCF_TOLERANCE, 0}, +{57, 3206461522u, 2147493556u, 1070549216u, 0, ERFCF_TOLERANCE, 0}, +{58, 3206293750u, 2147493556u, 1070484370u, 0, ERFCF_TOLERANCE, 0}, +{59, 3206125978u, 2147493556u, 1070418728u, 0, ERFCF_TOLERANCE, 0}, +{60, 3205958205u, 2147493556u, 1070352294u, 0, ERFCF_TOLERANCE, 0}, +{61, 3205790433u, 2147493556u, 1070285071u, 0, ERFCF_TOLERANCE, 0}, +{62, 3205622661u, 2147493556u, 1070217063u, 0, ERFCF_TOLERANCE, 0}, +{63, 3205454889u, 2147493556u, 1070148277u, 0, ERFCF_TOLERANCE, 0}, +{64, 3205287117u, 2147493556u, 1070078715u, 0, ERFCF_TOLERANCE, 0}, +{65, 3205119345u, 2147493556u, 1070008384u, 0, ERFCF_TOLERANCE, 0}, +{66, 3204951572u, 2147493556u, 1069937289u, 0, ERFCF_TOLERANCE, 0}, +{67, 3204783800u, 2147493556u, 1069865437u, 0, ERFCF_TOLERANCE, 0}, +{68, 3204616028u, 2147493556u, 1069792833u, 0, ERFCF_TOLERANCE, 0}, +{69, 3204448256u, 2147493556u, 1069719485u, 0, ERFCF_TOLERANCE, 0}, +{70, 3204112712u, 2147493556u, 1069645401u, 0, ERFCF_TOLERANCE, 0}, +{71, 3203777167u, 2147493556u, 1069570586u, 0, ERFCF_TOLERANCE, 0}, +{72, 3203441623u, 2147493556u, 1069495050u, 0, ERFCF_TOLERANCE, 0}, +{73, 3203106079u, 2147493556u, 1069418800u, 0, ERFCF_TOLERANCE, 0}, +{74, 3202770534u, 2147493556u, 1069341846u, 0, ERFCF_TOLERANCE, 0}, +{75, 3202434990u, 2147493556u, 1069264196u, 0, ERFCF_TOLERANCE, 0}, +{76, 3202099446u, 2147493556u, 1069185859u, 0, ERFCF_TOLERANCE, 0}, +{77, 3201763901u, 2147493556u, 1069106846u, 0, ERFCF_TOLERANCE, 0}, +{78, 3201428357u, 2147493556u, 1069027167u, 0, ERFCF_TOLERANCE, 0}, +{79, 3201092813u, 2147493556u, 1068946832u, 0, ERFCF_TOLERANCE, 0}, +{80, 3200757268u, 2147493556u, 1068865851u, 0, ERFCF_TOLERANCE, 0}, +{81, 3200421724u, 2147493556u, 1068784236u, 0, ERFCF_TOLERANCE, 0}, +{82, 3200086180u, 2147493556u, 1068701999u, 0, ERFCF_TOLERANCE, 0}, +{83, 3199750636u, 2147493556u, 1068619150u, 0, ERFCF_TOLERANCE, 0}, +{84, 3199415091u, 2147493556u, 1068535703u, 0, ERFCF_TOLERANCE, 0}, +{85, 3199079547u, 2147493556u, 1068451670u, 0, ERFCF_TOLERANCE, 0}, +{86, 3198744003u, 2147493556u, 1068367064u, 0, ERFCF_TOLERANCE, 0}, +{87, 3198408458u, 2147493556u, 1068281897u, 0, ERFCF_TOLERANCE, 0}, +{88, 3198072914u, 2147493556u, 1068196184u, 0, ERFCF_TOLERANCE, 0}, +{89, 3197737370u, 2147493556u, 1068109937u, 0, ERFCF_TOLERANCE, 0}, +{90, 3197401825u, 2147493556u, 1068023171u, 0, ERFCF_TOLERANCE, 0}, +{91, 3197066281u, 2147493556u, 1067935901u, 0, ERFCF_TOLERANCE, 0}, +{92, 3196730737u, 2147493556u, 1067848141u, 0, ERFCF_TOLERANCE, 0}, +{93, 3196395192u, 2147493556u, 1067759905u, 0, ERFCF_TOLERANCE, 0}, +{94, 3196059648u, 2147493556u, 1067671210u, 0, ERFCF_TOLERANCE, 0}, +{95, 3195388559u, 2147493556u, 1067582070u, 0, ERFCF_TOLERANCE, 0}, +{96, 3194717471u, 2147493556u, 1067492501u, 0, ERFCF_TOLERANCE, 0}, +{97, 3194046382u, 2147493556u, 1067402519u, 0, ERFCF_TOLERANCE, 0}, +{98, 3193375293u, 2147493556u, 1067312140u, 0, ERFCF_TOLERANCE, 0}, +{99, 3192704205u, 2147493556u, 1067221381u, 0, ERFCF_TOLERANCE, 0}, +{100, 3192033116u, 2147493556u, 1067130258u, 0, ERFCF_TOLERANCE, 0}, +{101, 3191362028u, 2147493556u, 1067038788u, 0, ERFCF_TOLERANCE, 0}, +{102, 3190690939u, 2147493556u, 1066946988u, 0, ERFCF_TOLERANCE, 0}, +{103, 3190019850u, 2147493556u, 1066854876u, 0, ERFCF_TOLERANCE, 0}, +{104, 3189348762u, 2147493556u, 1066762468u, 0, ERFCF_TOLERANCE, 0}, +{105, 3188677673u, 2147493556u, 1066669783u, 0, ERFCF_TOLERANCE, 0}, +{106, 3188006584u, 2147493556u, 1066576838u, 0, ERFCF_TOLERANCE, 0}, +{107, 3186999951u, 2147493556u, 1066483651u, 0, ERFCF_TOLERANCE, 0}, +{108, 3185657774u, 2147493556u, 1066390240u, 0, ERFCF_TOLERANCE, 0}, +{109, 3184315597u, 2147493556u, 1066296623u, 0, ERFCF_TOLERANCE, 0}, +{110, 3182973420u, 2147493556u, 1066202819u, 0, ERFCF_TOLERANCE, 0}, +{111, 3181631242u, 2147493556u, 1066108846u, 0, ERFCF_TOLERANCE, 0}, +{112, 3180289065u, 2147493556u, 1066014723u, 0, ERFCF_TOLERANCE, 0}, +{113, 3178611343u, 2147493556u, 1065920467u, 0, ERFCF_TOLERANCE, 0}, +{114, 3175926989u, 2147493556u, 1065826098u, 0, ERFCF_TOLERANCE, 0}, +{115, 3173242634u, 2147493556u, 1065731635u, 0, ERFCF_TOLERANCE, 0}, +{116, 3170222735u, 2147493556u, 1065637097u, 0, ERFCF_TOLERANCE, 0}, +{117, 3164854026u, 2147493556u, 1065542501u, 0, ERFCF_TOLERANCE, 0}, +{118, 3156465418u, 2147493556u, 1065447868u, 0, ERFCF_TOLERANCE, 0}, +{119, 646742016u, 2147493556u, 1065353216u, 0, ERFCF_TOLERANCE, 0}, +{120, 1008981770u, 2147493556u, 1065163912u, 0, ERFCF_TOLERANCE, 0}, +{121, 1017370378u, 2147493556u, 1064974645u, 0, ERFCF_TOLERANCE, 0}, +{122, 1022739087u, 2147493556u, 1064785455u, 0, ERFCF_TOLERANCE, 0}, +{123, 1025758986u, 2147493556u, 1064596377u, 0, ERFCF_TOLERANCE, 0}, +{124, 1028443341u, 2147493556u, 1064407451u, 0, ERFCF_TOLERANCE, 0}, +{125, 1031127695u, 2147493556u, 1064218714u, 0, ERFCF_TOLERANCE, 0}, +{126, 1032805417u, 2147493556u, 1064030203u, 0, ERFCF_TOLERANCE, 0}, +{127, 1034147594u, 2147493556u, 1063841956u, 0, ERFCF_TOLERANCE, 0}, +{128, 1035489772u, 2147493556u, 1063654010u, 0, ERFCF_TOLERANCE, 0}, +{129, 1036831949u, 2147493556u, 1063466401u, 0, ERFCF_TOLERANCE, 0}, +{130, 1038174126u, 2147493556u, 1063279168u, 0, ERFCF_TOLERANCE, 0}, +{131, 1039516303u, 2147493556u, 1063092346u, 0, ERFCF_TOLERANCE, 0}, +{132, 1040522936u, 2147493556u, 1062905972u, 0, ERFCF_TOLERANCE, 0}, +{133, 1041194025u, 2147493556u, 1062720082u, 0, ERFCF_TOLERANCE, 0}, +{134, 1041865114u, 2147493556u, 1062534711u, 0, ERFCF_TOLERANCE, 0}, +{135, 1042536202u, 2147493556u, 1062349896u, 0, ERFCF_TOLERANCE, 0}, +{136, 1043207291u, 2147493556u, 1062165671u, 0, ERFCF_TOLERANCE, 0}, +{137, 1043878380u, 2147493556u, 1061982072u, 0, ERFCF_TOLERANCE, 0}, +{138, 1044549468u, 2147493556u, 1061799132u, 0, ERFCF_TOLERANCE, 0}, +{139, 1045220557u, 2147493556u, 1061616887u, 0, ERFCF_TOLERANCE, 0}, +{140, 1045891645u, 2147493556u, 1061435368u, 0, ERFCF_TOLERANCE, 0}, +{141, 1046562734u, 2147493556u, 1061254611u, 0, ERFCF_TOLERANCE, 0}, +{142, 1047233823u, 2147493556u, 1061074647u, 0, ERFCF_TOLERANCE, 0}, +{143, 1047904911u, 2147493556u, 1060895509u, 0, ERFCF_TOLERANCE, 0}, +{144, 1048576000u, 2147493556u, 1060717228u, 0, ERFCF_TOLERANCE, 0}, +{145, 1048911544u, 2147493556u, 1060539838u, 0, ERFCF_TOLERANCE, 0}, +{146, 1049247089u, 2147493556u, 1060363366u, 0, ERFCF_TOLERANCE, 0}, +{147, 1049582633u, 2147493556u, 1060187846u, 0, ERFCF_TOLERANCE, 0}, +{148, 1049918177u, 2147493556u, 1060013305u, 0, ERFCF_TOLERANCE, 0}, +{149, 1050253722u, 2147493556u, 1059839774u, 0, ERFCF_TOLERANCE, 0}, +{150, 1050589266u, 2147493556u, 1059667281u, 0, ERFCF_TOLERANCE, 0}, +{151, 1050924810u, 2147493556u, 1059495854u, 0, ERFCF_TOLERANCE, 0}, +{152, 1051260355u, 2147493556u, 1059325520u, 0, ERFCF_TOLERANCE, 0}, +{153, 1051595899u, 2147493556u, 1059156307u, 0, ERFCF_TOLERANCE, 0}, +{154, 1051931443u, 2147493556u, 1058988241u, 0, ERFCF_TOLERANCE, 0}, +{155, 1052266988u, 2147493556u, 1058821347u, 0, ERFCF_TOLERANCE, 0}, +{156, 1052602532u, 2147493556u, 1058655651u, 0, ERFCF_TOLERANCE, 0}, +{157, 1052938076u, 2147493556u, 1058491176u, 0, ERFCF_TOLERANCE, 0}, +{158, 1053273620u, 2147493556u, 1058327947u, 0, ERFCF_TOLERANCE, 0}, +{159, 1053609165u, 2147493556u, 1058165985u, 0, ERFCF_TOLERANCE, 0}, +{160, 1053944709u, 2147493556u, 1058005314u, 0, ERFCF_TOLERANCE, 0}, +{161, 1054280253u, 2147493556u, 1057845955u, 0, ERFCF_TOLERANCE, 0}, +{162, 1054615798u, 2147493556u, 1057687929u, 0, ERFCF_TOLERANCE, 0}, +{163, 1054951342u, 2147493556u, 1057531257u, 0, ERFCF_TOLERANCE, 0}, +{164, 1055286886u, 2147493556u, 1057375957u, 0, ERFCF_TOLERANCE, 0}, +{165, 1055622431u, 2147493556u, 1057222048u, 0, ERFCF_TOLERANCE, 0}, +{166, 1055957975u, 2147493556u, 1057069549u, 0, ERFCF_TOLERANCE, 0}, +{167, 1056293519u, 2147493556u, 1056872345u, 0, ERFCF_TOLERANCE, 0}, +{168, 1056629064u, 2147493556u, 1056573086u, 0, ERFCF_TOLERANCE, 0}, +{169, 1056964608u, 2147493556u, 1056276746u, 0, ERFCF_TOLERANCE, 0}, +{170, 1057132380u, 2147493556u, 1055983355u, 0, ERFCF_TOLERANCE, 0}, +{171, 1057300152u, 2147493556u, 1055692942u, 0, ERFCF_TOLERANCE, 0}, +{172, 1057467924u, 2147493556u, 1055405532u, 0, ERFCF_TOLERANCE, 0}, +{173, 1057635697u, 2147493556u, 1055121152u, 0, ERFCF_TOLERANCE, 0}, +{174, 1057803469u, 2147493556u, 1054839828u, 0, ERFCF_TOLERANCE, 0}, +{175, 1057971241u, 2147493556u, 1054561582u, 0, ERFCF_TOLERANCE, 0}, +{176, 1058139013u, 2147493556u, 1054286434u, 0, ERFCF_TOLERANCE, 0}, +{177, 1058306785u, 2147493556u, 1054014405u, 0, ERFCF_TOLERANCE, 0}, +{178, 1058474557u, 2147493556u, 1053745514u, 0, ERFCF_TOLERANCE, 0}, +{179, 1058642330u, 2147493556u, 1053479775u, 0, ERFCF_TOLERANCE, 0}, +{180, 1058810102u, 2147493556u, 1053217208u, 0, ERFCF_TOLERANCE, 0}, +{181, 1058977874u, 2147493556u, 1052957824u, 0, ERFCF_TOLERANCE, 0}, +{182, 1059145646u, 2147493556u, 1052701637u, 0, ERFCF_TOLERANCE, 0}, +{183, 1059313418u, 2147493556u, 1052448657u, 0, ERFCF_TOLERANCE, 0}, +{184, 1059481190u, 2147493556u, 1052198895u, 0, ERFCF_TOLERANCE, 0}, +{185, 1059648963u, 2147493556u, 1051952357u, 0, ERFCF_TOLERANCE, 0}, +{186, 1059816735u, 2147493556u, 1051709054u, 0, ERFCF_TOLERANCE, 0}, +{187, 1059984507u, 2147493556u, 1051468989u, 0, ERFCF_TOLERANCE, 0}, +{188, 1060152279u, 2147493556u, 1051232167u, 0, ERFCF_TOLERANCE, 0}, +{189, 1060320051u, 2147493556u, 1050998590u, 0, ERFCF_TOLERANCE, 0}, +{190, 1060487823u, 2147493556u, 1050768261u, 0, ERFCF_TOLERANCE, 0}, +{191, 1060655596u, 2147493556u, 1050541178u, 0, ERFCF_TOLERANCE, 0}, +{192, 1060823368u, 2147493556u, 1050317342u, 0, ERFCF_TOLERANCE, 0}, +{193, 1060991140u, 2147493556u, 1050096751u, 0, ERFCF_TOLERANCE, 0}, +{194, 1061158912u, 2147493556u, 1049879401u, 0, ERFCF_TOLERANCE, 0}, +{195, 1061326684u, 2147493556u, 1049665286u, 0, ERFCF_TOLERANCE, 0}, +{196, 1061494456u, 2147493556u, 1049454401u, 0, ERFCF_TOLERANCE, 0}, +{197, 1061662228u, 2147493556u, 1049246739u, 0, ERFCF_TOLERANCE, 0}, +{198, 1061830001u, 2147493556u, 1049042290u, 0, ERFCF_TOLERANCE, 0}, +{199, 1061997773u, 2147493556u, 1048841047u, 0, ERFCF_TOLERANCE, 0}, +{200, 1062165545u, 2147493556u, 1048642999u, 0, ERFCF_TOLERANCE, 0}, +{201, 1062333317u, 2147493556u, 1048320265u, 0, ERFCF_TOLERANCE, 0}, +{202, 1062501089u, 2147493556u, 1047936872u, 0, ERFCF_TOLERANCE, 0}, +{203, 1062668861u, 2147493556u, 1047559791u, 0, ERFCF_TOLERANCE, 0}, +{204, 1062836634u, 2147493556u, 1047188989u, 0, ERFCF_TOLERANCE, 0}, +{205, 1063004406u, 2147493556u, 1046824440u, 0, ERFCF_TOLERANCE, 0}, +{206, 1063172178u, 2147493556u, 1046466107u, 0, ERFCF_TOLERANCE, 0}, +{207, 1063339950u, 2147493556u, 1046113956u, 0, ERFCF_TOLERANCE, 0}, +{208, 1063507722u, 2147493556u, 1045767948u, 0, ERFCF_TOLERANCE, 0}, +{209, 1063675494u, 2147493556u, 1045428044u, 0, ERFCF_TOLERANCE, 0}, +{210, 1063843267u, 2147493556u, 1045094202u, 0, ERFCF_TOLERANCE, 0}, +{211, 1064011039u, 2147493556u, 1044766382u, 0, ERFCF_TOLERANCE, 0}, +{212, 1064178811u, 2147493556u, 1044444539u, 0, ERFCF_TOLERANCE, 0}, +{213, 1064514355u, 2147493556u, 1043818599u, 0, ERFCF_TOLERANCE, 0}, +{214, 1064682127u, 2147493556u, 1043514405u, 0, ERFCF_TOLERANCE, 0}, +{215, 1064849900u, 2147493556u, 1043215994u, 0, ERFCF_TOLERANCE, 0}, +{216, 1065017672u, 2147493556u, 1042923319u, 0, ERFCF_TOLERANCE, 0}, +{217, 1065185444u, 2147493556u, 1042636324u, 0, ERFCF_TOLERANCE, 0}, +{218, 1065353216u, 2147493556u, 1042354955u, 0, ERFCF_TOLERANCE, 0}, +{219, 1065437102u, 2147493556u, 1042079158u, 0, ERFCF_TOLERANCE, 0}, +{220, 1065520988u, 2147493556u, 1041808876u, 0, ERFCF_TOLERANCE, 0}, +{221, 1065604874u, 2147493556u, 1041544051u, 0, ERFCF_TOLERANCE, 0}, +{222, 1065688760u, 2147493556u, 1041284627u, 0, ERFCF_TOLERANCE, 0}, +{223, 1065772646u, 2147493556u, 1041030542u, 0, ERFCF_TOLERANCE, 0}, +{224, 1065856532u, 2147493556u, 1040781737u, 0, ERFCF_TOLERANCE, 0}, +{225, 1065940419u, 2147493556u, 1040538149u, 0, ERFCF_TOLERANCE, 0}, +{226, 1066024305u, 2147493556u, 1040299721u, 0, ERFCF_TOLERANCE, 0}, +{227, 1066108191u, 2147493556u, 1039945382u, 0, ERFCF_TOLERANCE, 0}, +{228, 1066192077u, 2147493556u, 1039488778u, 0, ERFCF_TOLERANCE, 0}, +{229, 1066275963u, 2147493556u, 1039042110u, 0, ERFCF_TOLERANCE, 0}, +{230, 1066359849u, 2147493556u, 1038605248u, 0, ERFCF_TOLERANCE, 0}, +{231, 1066443735u, 2147493556u, 1038178063u, 0, ERFCF_TOLERANCE, 0}, +{232, 1066527621u, 2147493556u, 1037760424u, 0, ERFCF_TOLERANCE, 0}, +{233, 1066611507u, 2147493556u, 1037352199u, 0, ERFCF_TOLERANCE, 0}, +{234, 1066695393u, 2147493556u, 1036953256u, 0, ERFCF_TOLERANCE, 0}, +{235, 1066779279u, 2147493556u, 1036563462u, 0, ERFCF_TOLERANCE, 0}, +{236, 1066863165u, 2147493556u, 1036182683u, 0, ERFCF_TOLERANCE, 0}, +{237, 1066947052u, 2147493556u, 1035810780u, 0, ERFCF_TOLERANCE, 0}, +{238, 3234402267u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{239, 3231108068u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{240, 3226013659u, 2147493556u, 1073741750u, 0, ERFCF_TOLERANCE, 0}, +{241, 3217625051u, 2147493556u, 1073521027u, 0, ERFCF_TOLERANCE, 0}, +{242, 0u, 2147493556u, 1065353216u, 0, ERFCF_TOLERANCE, 0}, +{243, 1070141403u, 2147493556u, 1020763978u, 0, ERFCF_TOLERANCE, 0}, +{244, 1078530011u, 2147493556u, 924117692u, 0, ERFCF_TOLERANCE, 0}, +{245, 1083624420u, 2147493556u, 770301979u, 0, ERFCF_TOLERANCE, 0}, +{246, 3253731328u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{247, 3252840038u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{248, 3251948749u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{249, 3251057459u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{250, 3250166170u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{251, 3249274880u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{252, 3248383590u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{253, 3247492301u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{254, 3246601011u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{255, 3245028147u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{256, 3243245568u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{257, 3241462989u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{258, 3239680410u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{259, 3237792973u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{260, 3234227814u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{261, 3230662656u, 2147493556u, 1073741824u, 0, ERFCF_TOLERANCE, 0}, +{262, 3224580915u, 2147493556u, 1073741195u, 0, ERFCF_TOLERANCE, 0}, +{263, 3213675725u, 2147493556u, 1072736911u, 0, ERFCF_TOLERANCE, 0}, +{264, 1058642330u, 2147493556u, 1053479775u, 0, ERFCF_TOLERANCE, 0}, +{265, 1075000115u, 2147493556u, 982898342u, 0, ERFCF_TOLERANCE, 0}, +{266, 1082130432u, 2147493556u, 847539945u, 0, ERFCF_TOLERANCE, 0}, +{267, 1085695590u, 2147493556u, 643437802u, 0, ERFCF_TOLERANCE, 0}, +{268, 1089260749u, 2147493556u, 370838238u, 0, ERFCF_TOLERANCE, 0}, +{269, 1091672474u, 2147493556u, 28724802u, 0, ERFCF_TOLERANCE, 0}, +{270, 1093455053u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{271, 1095237632u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{272, 1097020211u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{273, 1098802790u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{274, 1099746509u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{275, 1100637798u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{276, 1101529088u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{277, 1102420378u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{278, 1103311667u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{279, 1104202957u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{280, 1105094246u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0}, +{281, 1105985536u, 2147493556u, 0u, 0, ERFCF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ERFCF_H multiple inclusion protection + +// EOF erfcf.h diff --git a/packages/language/c/libm/current/tests/vectors/erff.c b/packages/language/c/libm/current/tests/vectors/erff.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/erff.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// erff.c +// +// Test of erff() math library function +// +//=========================================================================== +// ####EERFFGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####EERFFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/erff.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(erff_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &erff, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &erff_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("erff() is stable"); + } // if + else + { + CYG_TEST_FAIL("erff() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library erff() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "erff() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF erff.c diff --git a/packages/language/c/libm/current/tests/vectors/erff.h b/packages/language/c/libm/current/tests/vectors/erff.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/erff.h @@ -0,0 +1,361 @@ +#ifndef CYGONCE_LIBM_ERFF_H +#define CYGONCE_LIBM_ERFF_H +//=========================================================================== +// +// erff.h +// +// Test vectors for testing of erff() math library function +// +//=========================================================================== +// ####EERFFGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####EERFFGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/erff.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ERFF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t erff_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 2147516072u, 3211332182u, 0, ERFF_TOLERANCE, 0}, +{1, 3214430700u, 2147516072u, 3211286788u, 0, ERFF_TOLERANCE, 0}, +{2, 3214346813u, 2147516072u, 3211240301u, 0, ERFF_TOLERANCE, 0}, +{3, 3214262927u, 2147516072u, 3211192703u, 0, ERFF_TOLERANCE, 0}, +{4, 3214179041u, 2147516072u, 3211143979u, 0, ERFF_TOLERANCE, 0}, +{5, 3214095155u, 2147516072u, 3211094111u, 0, ERFF_TOLERANCE, 0}, +{6, 3214011269u, 2147516072u, 3211043083u, 0, ERFF_TOLERANCE, 0}, +{7, 3213927383u, 2147516072u, 3210990878u, 0, ERFF_TOLERANCE, 0}, +{8, 3213843497u, 2147516072u, 3210937480u, 0, ERFF_TOLERANCE, 0}, +{9, 3213759611u, 2147516072u, 3210882872u, 0, ERFF_TOLERANCE, 0}, +{10, 3213675725u, 2147516072u, 3210827039u, 0, ERFF_TOLERANCE, 0}, +{11, 3213591839u, 2147516072u, 3210769963u, 0, ERFF_TOLERANCE, 0}, +{12, 3213507953u, 2147516072u, 3210711630u, 0, ERFF_TOLERANCE, 0}, +{13, 3213424067u, 2147516072u, 3210652023u, 0, ERFF_TOLERANCE, 0}, +{14, 3213340180u, 2147516072u, 3210591126u, 0, ERFF_TOLERANCE, 0}, +{15, 3213256294u, 2147516072u, 3210528924u, 0, ERFF_TOLERANCE, 0}, +{16, 3213172408u, 2147516072u, 3210465403u, 0, ERFF_TOLERANCE, 0}, +{17, 3213088522u, 2147516072u, 3210400547u, 0, ERFF_TOLERANCE, 0}, +{18, 3213004636u, 2147516072u, 3210334341u, 0, ERFF_TOLERANCE, 0}, +{19, 3212920750u, 2147516072u, 3210266770u, 0, ERFF_TOLERANCE, 0}, +{20, 3212836864u, 2147516072u, 3210197821u, 0, ERFF_TOLERANCE, 0}, +{21, 3212669092u, 2147516072u, 3210127479u, 0, ERFF_TOLERANCE, 0}, +{22, 3212501320u, 2147516072u, 3210055730u, 0, ERFF_TOLERANCE, 0}, +{23, 3212333548u, 2147516072u, 3209982561u, 0, ERFF_TOLERANCE, 0}, +{24, 3212165775u, 2147516072u, 3209907959u, 0, ERFF_TOLERANCE, 0}, +{25, 3211998003u, 2147516072u, 3209831910u, 0, ERFF_TOLERANCE, 0}, +{26, 3211662459u, 2147516072u, 3209675425u, 0, ERFF_TOLERANCE, 0}, +{27, 3211494687u, 2147516072u, 3209594964u, 0, ERFF_TOLERANCE, 0}, +{28, 3211326915u, 2147516072u, 3209513009u, 0, ERFF_TOLERANCE, 0}, +{29, 3211159142u, 2147516072u, 3209429548u, 0, ERFF_TOLERANCE, 0}, +{30, 3210991370u, 2147516072u, 3209344573u, 0, ERFF_TOLERANCE, 0}, +{31, 3210823598u, 2147516072u, 3209258071u, 0, ERFF_TOLERANCE, 0}, +{32, 3210655826u, 2147516072u, 3209170033u, 0, ERFF_TOLERANCE, 0}, +{33, 3210488054u, 2147516072u, 3209080450u, 0, ERFF_TOLERANCE, 0}, +{34, 3210320282u, 2147516072u, 3208989312u, 0, ERFF_TOLERANCE, 0}, +{35, 3210152509u, 2147516072u, 3208896612u, 0, ERFF_TOLERANCE, 0}, +{36, 3209984737u, 2147516072u, 3208802342u, 0, ERFF_TOLERANCE, 0}, +{37, 3209816965u, 2147516072u, 3208706493u, 0, ERFF_TOLERANCE, 0}, +{38, 3209649193u, 2147516072u, 3208609060u, 0, ERFF_TOLERANCE, 0}, +{39, 3209481421u, 2147516072u, 3208510036u, 0, ERFF_TOLERANCE, 0}, +{40, 3209313649u, 2147516072u, 3208409415u, 0, ERFF_TOLERANCE, 0}, +{41, 3209145876u, 2147516072u, 3208307190u, 0, ERFF_TOLERANCE, 0}, +{42, 3208978104u, 2147516072u, 3208203360u, 0, ERFF_TOLERANCE, 0}, +{43, 3208810332u, 2147516072u, 3208097918u, 0, ERFF_TOLERANCE, 0}, +{44, 3208642560u, 2147516072u, 3207990860u, 0, ERFF_TOLERANCE, 0}, +{45, 3208474788u, 2147516072u, 3207882184u, 0, ERFF_TOLERANCE, 0}, +{46, 3208307016u, 2147516072u, 3207771889u, 0, ERFF_TOLERANCE, 0}, +{47, 3208139244u, 2147516072u, 3207659971u, 0, ERFF_TOLERANCE, 0}, +{48, 3207971471u, 2147516072u, 3207546430u, 0, ERFF_TOLERANCE, 0}, +{49, 3207803699u, 2147516072u, 3207431265u, 0, ERFF_TOLERANCE, 0}, +{50, 3207635927u, 2147516072u, 3207314476u, 0, ERFF_TOLERANCE, 0}, +{51, 3207468155u, 2147516072u, 3207196066u, 0, ERFF_TOLERANCE, 0}, +{52, 3207300383u, 2147516072u, 3207076033u, 0, ERFF_TOLERANCE, 0}, +{53, 3207132611u, 2147516072u, 3206954381u, 0, ERFF_TOLERANCE, 0}, +{54, 3206964838u, 2147516072u, 3206831112u, 0, ERFF_TOLERANCE, 0}, +{55, 3206797066u, 2147516072u, 3206706232u, 0, ERFF_TOLERANCE, 0}, +{56, 3206629294u, 2147516072u, 3206579741u, 0, ERFF_TOLERANCE, 0}, +{57, 3206461522u, 2147516072u, 3206451648u, 0, ERFF_TOLERANCE, 0}, +{58, 3206293750u, 2147516072u, 3206321956u, 0, ERFF_TOLERANCE, 0}, +{59, 3206125978u, 2147516072u, 3206190672u, 0, ERFF_TOLERANCE, 0}, +{60, 3205958205u, 2147516072u, 3206057802u, 0, ERFF_TOLERANCE, 0}, +{61, 3205790433u, 2147516072u, 3205923357u, 0, ERFF_TOLERANCE, 0}, +{62, 3205622661u, 2147516072u, 3205787343u, 0, ERFF_TOLERANCE, 0}, +{63, 3205454889u, 2147516072u, 3205649769u, 0, ERFF_TOLERANCE, 0}, +{64, 3205287117u, 2147516072u, 3205510646u, 0, ERFF_TOLERANCE, 0}, +{65, 3205119345u, 2147516072u, 3205369984u, 0, ERFF_TOLERANCE, 0}, +{66, 3204951572u, 2147516072u, 3205227794u, 0, ERFF_TOLERANCE, 0}, +{67, 3204783800u, 2147516072u, 3205084089u, 0, ERFF_TOLERANCE, 0}, +{68, 3204616028u, 2147516072u, 3204938882u, 0, ERFF_TOLERANCE, 0}, +{69, 3204448256u, 2147516072u, 3204792187u, 0, ERFF_TOLERANCE, 0}, +{70, 3204112712u, 2147516072u, 3204644016u, 0, ERFF_TOLERANCE, 0}, +{71, 3203777167u, 2147516072u, 3204494388u, 0, ERFF_TOLERANCE, 0}, +{72, 3203441623u, 2147516072u, 3204238374u, 0, ERFF_TOLERANCE, 0}, +{73, 3203106079u, 2147516072u, 3203933377u, 0, ERFF_TOLERANCE, 0}, +{74, 3202770534u, 2147516072u, 3203625559u, 0, ERFF_TOLERANCE, 0}, +{75, 3202434990u, 2147516072u, 3203314959u, 0, ERFF_TOLERANCE, 0}, +{76, 3202099446u, 2147516072u, 3203001614u, 0, ERFF_TOLERANCE, 0}, +{77, 3201763901u, 2147516072u, 3202685561u, 0, ERFF_TOLERANCE, 0}, +{78, 3201428357u, 2147516072u, 3202366844u, 0, ERFF_TOLERANCE, 0}, +{79, 3201092813u, 2147516072u, 3202045502u, 0, ERFF_TOLERANCE, 0}, +{80, 3200757268u, 2147516072u, 3201721579u, 0, ERFF_TOLERANCE, 0}, +{81, 3200421724u, 2147516072u, 3201395120u, 0, ERFF_TOLERANCE, 0}, +{82, 3200086180u, 2147516072u, 3201066170u, 0, ERFF_TOLERANCE, 0}, +{83, 3199750636u, 2147516072u, 3200734777u, 0, ERFF_TOLERANCE, 0}, +{84, 3199415091u, 2147516072u, 3200400989u, 0, ERFF_TOLERANCE, 0}, +{85, 3199079547u, 2147516072u, 3200064857u, 0, ERFF_TOLERANCE, 0}, +{86, 3198744003u, 2147516072u, 3199726432u, 0, ERFF_TOLERANCE, 0}, +{87, 3198408458u, 2147516072u, 3199385764u, 0, ERFF_TOLERANCE, 0}, +{88, 3198072914u, 2147516072u, 3199042911u, 0, ERFF_TOLERANCE, 0}, +{89, 3197737370u, 2147516072u, 3198697925u, 0, ERFF_TOLERANCE, 0}, +{90, 3197401825u, 2147516072u, 3198350862u, 0, ERFF_TOLERANCE, 0}, +{91, 3197066281u, 2147516072u, 3198001781u, 0, ERFF_TOLERANCE, 0}, +{92, 3196730737u, 2147516072u, 3197650740u, 0, ERFF_TOLERANCE, 0}, +{93, 3196395192u, 2147516072u, 3197297797u, 0, ERFF_TOLERANCE, 0}, +{94, 3196059648u, 2147516072u, 3196943015u, 0, ERFF_TOLERANCE, 0}, +{95, 3195388559u, 2147516072u, 3196586454u, 0, ERFF_TOLERANCE, 0}, +{96, 3194717471u, 2147516072u, 3196228179u, 0, ERFF_TOLERANCE, 0}, +{97, 3194046382u, 2147516072u, 3195676853u, 0, ERFF_TOLERANCE, 0}, +{98, 3193375293u, 2147516072u, 3194953822u, 0, ERFF_TOLERANCE, 0}, +{99, 3192704205u, 2147516072u, 3194227750u, 0, ERFF_TOLERANCE, 0}, +{100, 3192033116u, 2147516072u, 3193498766u, 0, ERFF_TOLERANCE, 0}, +{101, 3191362028u, 2147516072u, 3192767008u, 0, ERFF_TOLERANCE, 0}, +{102, 3190690939u, 2147516072u, 3192032610u, 0, ERFF_TOLERANCE, 0}, +{103, 3190019850u, 2147516072u, 3191295711u, 0, ERFF_TOLERANCE, 0}, +{104, 3189348762u, 2147516072u, 3190556451u, 0, ERFF_TOLERANCE, 0}, +{105, 3188677673u, 2147516072u, 3189814969u, 0, ERFF_TOLERANCE, 0}, +{106, 3188006584u, 2147516072u, 3189071408u, 0, ERFF_TOLERANCE, 0}, +{107, 3186999951u, 2147516072u, 3188325912u, 0, ERFF_TOLERANCE, 0}, +{108, 3185657774u, 2147516072u, 3187486208u, 0, ERFF_TOLERANCE, 0}, +{109, 3184315597u, 2147516072u, 3185988341u, 0, ERFF_TOLERANCE, 0}, +{110, 3182973420u, 2147516072u, 3184487476u, 0, ERFF_TOLERANCE, 0}, +{111, 3181631242u, 2147516072u, 3182983905u, 0, ERFF_TOLERANCE, 0}, +{112, 3180289065u, 2147516072u, 3181477928u, 0, ERFF_TOLERANCE, 0}, +{113, 3178611343u, 2147516072u, 3179969841u, 0, ERFF_TOLERANCE, 0}, +{114, 3175926989u, 2147516072u, 3177637454u, 0, ERFF_TOLERANCE, 0}, +{115, 3173242634u, 2147516072u, 3174614636u, 0, ERFF_TOLERANCE, 0}, +{116, 3170222735u, 2147516072u, 3171589400u, 0, ERFF_TOLERANCE, 0}, +{117, 3164854026u, 2147516072u, 3166230872u, 0, ERFF_TOLERANCE, 0}, +{118, 3156465418u, 2147516072u, 3157843475u, 0, ERFF_TOLERANCE, 0}, +{119, 646742016u, 2147516072u, 647924107u, 0, ERFF_TOLERANCE, 0}, +{120, 1008981770u, 2147516072u, 1010359827u, 0, ERFF_TOLERANCE, 0}, +{121, 1017370378u, 2147516072u, 1018747224u, 0, ERFF_TOLERANCE, 0}, +{122, 1022739087u, 2147516072u, 1024105752u, 0, ERFF_TOLERANCE, 0}, +{123, 1025758986u, 2147516072u, 1027130988u, 0, ERFF_TOLERANCE, 0}, +{124, 1028443341u, 2147516072u, 1030153806u, 0, ERFF_TOLERANCE, 0}, +{125, 1031127695u, 2147516072u, 1032486193u, 0, ERFF_TOLERANCE, 0}, +{126, 1032805417u, 2147516072u, 1033994280u, 0, ERFF_TOLERANCE, 0}, +{127, 1034147594u, 2147516072u, 1035500257u, 0, ERFF_TOLERANCE, 0}, +{128, 1035489772u, 2147516072u, 1037003828u, 0, ERFF_TOLERANCE, 0}, +{129, 1036831949u, 2147516072u, 1038504693u, 0, ERFF_TOLERANCE, 0}, +{130, 1038174126u, 2147516072u, 1040002560u, 0, ERFF_TOLERANCE, 0}, +{131, 1039516303u, 2147516072u, 1040842264u, 0, ERFF_TOLERANCE, 0}, +{132, 1040522936u, 2147516072u, 1041587760u, 0, ERFF_TOLERANCE, 0}, +{133, 1041194025u, 2147516072u, 1042331321u, 0, ERFF_TOLERANCE, 0}, +{134, 1041865114u, 2147516072u, 1043072803u, 0, ERFF_TOLERANCE, 0}, +{135, 1042536202u, 2147516072u, 1043812063u, 0, ERFF_TOLERANCE, 0}, +{136, 1043207291u, 2147516072u, 1044548962u, 0, ERFF_TOLERANCE, 0}, +{137, 1043878380u, 2147516072u, 1045283360u, 0, ERFF_TOLERANCE, 0}, +{138, 1044549468u, 2147516072u, 1046015118u, 0, ERFF_TOLERANCE, 0}, +{139, 1045220557u, 2147516072u, 1046744102u, 0, ERFF_TOLERANCE, 0}, +{140, 1045891645u, 2147516072u, 1047470174u, 0, ERFF_TOLERANCE, 0}, +{141, 1046562734u, 2147516072u, 1048193205u, 0, ERFF_TOLERANCE, 0}, +{142, 1047233823u, 2147516072u, 1048744531u, 0, ERFF_TOLERANCE, 0}, +{143, 1047904911u, 2147516072u, 1049102806u, 0, ERFF_TOLERANCE, 0}, +{144, 1048576000u, 2147516072u, 1049459367u, 0, ERFF_TOLERANCE, 0}, +{145, 1048911544u, 2147516072u, 1049814149u, 0, ERFF_TOLERANCE, 0}, +{146, 1049247089u, 2147516072u, 1050167092u, 0, ERFF_TOLERANCE, 0}, +{147, 1049582633u, 2147516072u, 1050518133u, 0, ERFF_TOLERANCE, 0}, +{148, 1049918177u, 2147516072u, 1050867214u, 0, ERFF_TOLERANCE, 0}, +{149, 1050253722u, 2147516072u, 1051214277u, 0, ERFF_TOLERANCE, 0}, +{150, 1050589266u, 2147516072u, 1051559263u, 0, ERFF_TOLERANCE, 0}, +{151, 1050924810u, 2147516072u, 1051902116u, 0, ERFF_TOLERANCE, 0}, +{152, 1051260355u, 2147516072u, 1052242784u, 0, ERFF_TOLERANCE, 0}, +{153, 1051595899u, 2147516072u, 1052581209u, 0, ERFF_TOLERANCE, 0}, +{154, 1051931443u, 2147516072u, 1052917341u, 0, ERFF_TOLERANCE, 0}, +{155, 1052266988u, 2147516072u, 1053251129u, 0, ERFF_TOLERANCE, 0}, +{156, 1052602532u, 2147516072u, 1053582522u, 0, ERFF_TOLERANCE, 0}, +{157, 1052938076u, 2147516072u, 1053911472u, 0, ERFF_TOLERANCE, 0}, +{158, 1053273620u, 2147516072u, 1054237931u, 0, ERFF_TOLERANCE, 0}, +{159, 1053609165u, 2147516072u, 1054561854u, 0, ERFF_TOLERANCE, 0}, +{160, 1053944709u, 2147516072u, 1054883196u, 0, ERFF_TOLERANCE, 0}, +{161, 1054280253u, 2147516072u, 1055201913u, 0, ERFF_TOLERANCE, 0}, +{162, 1054615798u, 2147516072u, 1055517966u, 0, ERFF_TOLERANCE, 0}, +{163, 1054951342u, 2147516072u, 1055831311u, 0, ERFF_TOLERANCE, 0}, +{164, 1055286886u, 2147516072u, 1056141911u, 0, ERFF_TOLERANCE, 0}, +{165, 1055622431u, 2147516072u, 1056449729u, 0, ERFF_TOLERANCE, 0}, +{166, 1055957975u, 2147516072u, 1056754726u, 0, ERFF_TOLERANCE, 0}, +{167, 1056293519u, 2147516072u, 1057010740u, 0, ERFF_TOLERANCE, 0}, +{168, 1056629064u, 2147516072u, 1057160368u, 0, ERFF_TOLERANCE, 0}, +{169, 1056964608u, 2147516072u, 1057308539u, 0, ERFF_TOLERANCE, 0}, +{170, 1057132380u, 2147516072u, 1057455234u, 0, ERFF_TOLERANCE, 0}, +{171, 1057300152u, 2147516072u, 1057600441u, 0, ERFF_TOLERANCE, 0}, +{172, 1057467924u, 2147516072u, 1057744146u, 0, ERFF_TOLERANCE, 0}, +{173, 1057635697u, 2147516072u, 1057886336u, 0, ERFF_TOLERANCE, 0}, +{174, 1057803469u, 2147516072u, 1058026998u, 0, ERFF_TOLERANCE, 0}, +{175, 1057971241u, 2147516072u, 1058166121u, 0, ERFF_TOLERANCE, 0}, +{176, 1058139013u, 2147516072u, 1058303695u, 0, ERFF_TOLERANCE, 0}, +{177, 1058306785u, 2147516072u, 1058439709u, 0, ERFF_TOLERANCE, 0}, +{178, 1058474557u, 2147516072u, 1058574154u, 0, ERFF_TOLERANCE, 0}, +{179, 1058642330u, 2147516072u, 1058707024u, 0, ERFF_TOLERANCE, 0}, +{180, 1058810102u, 2147516072u, 1058838308u, 0, ERFF_TOLERANCE, 0}, +{181, 1058977874u, 2147516072u, 1058968000u, 0, ERFF_TOLERANCE, 0}, +{182, 1059145646u, 2147516072u, 1059096093u, 0, ERFF_TOLERANCE, 0}, +{183, 1059313418u, 2147516072u, 1059222584u, 0, ERFF_TOLERANCE, 0}, +{184, 1059481190u, 2147516072u, 1059347464u, 0, ERFF_TOLERANCE, 0}, +{185, 1059648963u, 2147516072u, 1059470733u, 0, ERFF_TOLERANCE, 0}, +{186, 1059816735u, 2147516072u, 1059592385u, 0, ERFF_TOLERANCE, 0}, +{187, 1059984507u, 2147516072u, 1059712418u, 0, ERFF_TOLERANCE, 0}, +{188, 1060152279u, 2147516072u, 1059830828u, 0, ERFF_TOLERANCE, 0}, +{189, 1060320051u, 2147516072u, 1059947617u, 0, ERFF_TOLERANCE, 0}, +{190, 1060487823u, 2147516072u, 1060062782u, 0, ERFF_TOLERANCE, 0}, +{191, 1060655596u, 2147516072u, 1060176323u, 0, ERFF_TOLERANCE, 0}, +{192, 1060823368u, 2147516072u, 1060288241u, 0, ERFF_TOLERANCE, 0}, +{193, 1060991140u, 2147516072u, 1060398536u, 0, ERFF_TOLERANCE, 0}, +{194, 1061158912u, 2147516072u, 1060507212u, 0, ERFF_TOLERANCE, 0}, +{195, 1061326684u, 2147516072u, 1060614270u, 0, ERFF_TOLERANCE, 0}, +{196, 1061494456u, 2147516072u, 1060719712u, 0, ERFF_TOLERANCE, 0}, +{197, 1061662228u, 2147516072u, 1060823542u, 0, ERFF_TOLERANCE, 0}, +{198, 1061830001u, 2147516072u, 1060925767u, 0, ERFF_TOLERANCE, 0}, +{199, 1061997773u, 2147516072u, 1061026388u, 0, ERFF_TOLERANCE, 0}, +{200, 1062165545u, 2147516072u, 1061125412u, 0, ERFF_TOLERANCE, 0}, +{201, 1062333317u, 2147516072u, 1061222845u, 0, ERFF_TOLERANCE, 0}, +{202, 1062501089u, 2147516072u, 1061318694u, 0, ERFF_TOLERANCE, 0}, +{203, 1062668861u, 2147516072u, 1061412964u, 0, ERFF_TOLERANCE, 0}, +{204, 1062836634u, 2147516072u, 1061505664u, 0, ERFF_TOLERANCE, 0}, +{205, 1063004406u, 2147516072u, 1061596802u, 0, ERFF_TOLERANCE, 0}, +{206, 1063172178u, 2147516072u, 1061686385u, 0, ERFF_TOLERANCE, 0}, +{207, 1063339950u, 2147516072u, 1061774423u, 0, ERFF_TOLERANCE, 0}, +{208, 1063507722u, 2147516072u, 1061860925u, 0, ERFF_TOLERANCE, 0}, +{209, 1063675494u, 2147516072u, 1061945900u, 0, ERFF_TOLERANCE, 0}, +{210, 1063843267u, 2147516072u, 1062029361u, 0, ERFF_TOLERANCE, 0}, +{211, 1064011039u, 2147516072u, 1062111316u, 0, ERFF_TOLERANCE, 0}, +{212, 1064178811u, 2147516072u, 1062191777u, 0, ERFF_TOLERANCE, 0}, +{213, 1064514355u, 2147516072u, 1062348262u, 0, ERFF_TOLERANCE, 0}, +{214, 1064682127u, 2147516072u, 1062424311u, 0, ERFF_TOLERANCE, 0}, +{215, 1064849900u, 2147516072u, 1062498913u, 0, ERFF_TOLERANCE, 0}, +{216, 1065017672u, 2147516072u, 1062572082u, 0, ERFF_TOLERANCE, 0}, +{217, 1065185444u, 2147516072u, 1062643831u, 0, ERFF_TOLERANCE, 0}, +{218, 1065353216u, 2147516072u, 1062714173u, 0, ERFF_TOLERANCE, 0}, +{219, 1065437102u, 2147516072u, 1062783122u, 0, ERFF_TOLERANCE, 0}, +{220, 1065520988u, 2147516072u, 1062850693u, 0, ERFF_TOLERANCE, 0}, +{221, 1065604874u, 2147516072u, 1062916899u, 0, ERFF_TOLERANCE, 0}, +{222, 1065688760u, 2147516072u, 1062981755u, 0, ERFF_TOLERANCE, 0}, +{223, 1065772646u, 2147516072u, 1063045276u, 0, ERFF_TOLERANCE, 0}, +{224, 1065856532u, 2147516072u, 1063107478u, 0, ERFF_TOLERANCE, 0}, +{225, 1065940419u, 2147516072u, 1063168375u, 0, ERFF_TOLERANCE, 0}, +{226, 1066024305u, 2147516072u, 1063227982u, 0, ERFF_TOLERANCE, 0}, +{227, 1066108191u, 2147516072u, 1063286315u, 0, ERFF_TOLERANCE, 0}, +{228, 1066192077u, 2147516072u, 1063343391u, 0, ERFF_TOLERANCE, 0}, +{229, 1066275963u, 2147516072u, 1063399224u, 0, ERFF_TOLERANCE, 0}, +{230, 1066359849u, 2147516072u, 1063453832u, 0, ERFF_TOLERANCE, 0}, +{231, 1066443735u, 2147516072u, 1063507230u, 0, ERFF_TOLERANCE, 0}, +{232, 1066527621u, 2147516072u, 1063559435u, 0, ERFF_TOLERANCE, 0}, +{233, 1066611507u, 2147516072u, 1063610463u, 0, ERFF_TOLERANCE, 0}, +{234, 1066695393u, 2147516072u, 1063660331u, 0, ERFF_TOLERANCE, 0}, +{235, 1066779279u, 2147516072u, 1063709055u, 0, ERFF_TOLERANCE, 0}, +{236, 1066863165u, 2147516072u, 1063756653u, 0, ERFF_TOLERANCE, 0}, +{237, 1066947052u, 2147516072u, 1063803140u, 0, ERFF_TOLERANCE, 0}, +{238, 3234402267u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{239, 3231108068u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{240, 3226013659u, 2147516072u, 3212836715u, 0, ERFF_TOLERANCE, 0}, +{241, 3217625051u, 2147516072u, 3212395270u, 0, ERFF_TOLERANCE, 0}, +{242, 0u, 2147516072u, 0u, 0, ERFF_TOLERANCE, 0}, +{243, 1070141403u, 2147516072u, 1064911622u, 0, ERFF_TOLERANCE, 0}, +{244, 1078530011u, 2147516072u, 1065353067u, 0, ERFF_TOLERANCE, 0}, +{245, 1083624420u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{246, 3253731328u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{247, 3252840038u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{248, 3251948749u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{249, 3251057459u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{250, 3250166170u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{251, 3249274880u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{252, 3248383590u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{253, 3247492301u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{254, 3246601011u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{255, 3245028147u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{256, 3243245568u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{257, 3241462989u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{258, 3239680410u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{259, 3237792973u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{260, 3234227814u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{261, 3230662656u, 2147516072u, 3212836864u, 0, ERFF_TOLERANCE, 0}, +{262, 3224580915u, 2147516072u, 3212835605u, 0, ERFF_TOLERANCE, 0}, +{263, 3213675725u, 2147516072u, 3210827039u, 0, ERFF_TOLERANCE, 0}, +{264, 1058642330u, 2147516072u, 1058707024u, 0, ERFF_TOLERANCE, 0}, +{265, 1075000115u, 2147516072u, 1065334037u, 0, ERFF_TOLERANCE, 0}, +{266, 1082130432u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{267, 1085695590u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{268, 1089260749u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{269, 1091672474u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{270, 1093455053u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{271, 1095237632u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{272, 1097020211u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{273, 1098802790u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{274, 1099746509u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{275, 1100637798u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{276, 1101529088u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{277, 1102420378u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{278, 1103311667u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{279, 1104202957u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{280, 1105094246u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0}, +{281, 1105985536u, 2147516072u, 1065353216u, 0, ERFF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ERFF_H multiple inclusion protection + +// EOF erff.h diff --git a/packages/language/c/libm/current/tests/vectors/expf.c b/packages/language/c/libm/current/tests/vectors/expf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/expf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// expf.c +// +// Test of expf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/expf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(expf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &expf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &expf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("expf() is stable"); + } // if + else + { + CYG_TEST_FAIL("expf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library exp() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "exp() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF expf.c diff --git a/packages/language/c/libm/current/tests/vectors/expf.h b/packages/language/c/libm/current/tests/vectors/expf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/expf.h @@ -0,0 +1,647 @@ +#ifndef CYGONCE_LIBM_EXPF_H +#define CYGONCE_LIBM_EXPF_H +//=========================================================================== +// +// expf.h +// +// Test vectors for testing of expf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/exp.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define EXP_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t expf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 646742016u, 1065353216u, 1065353216u, 0, EXP_TOLERANCE, 0}, +{1, 1008981770u, 1065437523u, 1065437523u, 0, EXP_TOLERANCE, 0}, +{2, 1017370378u, 1065522677u, 1065522677u, 0, EXP_TOLERANCE, 0}, +{3, 1022739087u, 1065608687u, 1065608687u, 0, EXP_TOLERANCE, 0}, +{4, 1025758986u, 1065695562u, 1065695562u, 0, EXP_TOLERANCE, 0}, +{5, 1028443341u, 1065783309u, 1065783309u, 0, EXP_TOLERANCE, 0}, +{6, 1031127695u, 1065871938u, 1065871938u, 0, EXP_TOLERANCE, 0}, +{7, 1032805417u, 1065961458u, 1065961458u, 0, EXP_TOLERANCE, 0}, +{8, 1034147594u, 1066051878u, 1066051878u, 0, EXP_TOLERANCE, 0}, +{9, 1035489772u, 1066143207u, 1066143207u, 0, EXP_TOLERANCE, 0}, +{10, 1036831949u, 1066235454u, 1066235454u, 0, EXP_TOLERANCE, 0}, +{11, 1038174126u, 1066328627u, 1066328627u, 0, EXP_TOLERANCE, 0}, +{12, 1039516303u, 1066422737u, 1066422737u, 0, EXP_TOLERANCE, 0}, +{13, 1040522936u, 1066517792u, 1066517792u, 0, EXP_TOLERANCE, 0}, +{14, 1041194025u, 1066613804u, 1066613804u, 0, EXP_TOLERANCE, 0}, +{15, 1041865114u, 1066710780u, 1066710780u, 0, EXP_TOLERANCE, 0}, +{16, 1042536202u, 1066808730u, 1066808730u, 0, EXP_TOLERANCE, 0}, +{17, 1043207291u, 1066907665u, 1066907665u, 0, EXP_TOLERANCE, 0}, +{18, 1043878380u, 1067007595u, 1067007595u, 0, EXP_TOLERANCE, 0}, +{19, 1044549468u, 1067108528u, 1067108528u, 0, EXP_TOLERANCE, 0}, +{20, 1045220557u, 1067210477u, 1067210477u, 0, EXP_TOLERANCE, 0}, +{21, 1045891645u, 1067313449u, 1067313449u, 0, EXP_TOLERANCE, 0}, +{22, 1046562734u, 1067417457u, 1067417457u, 0, EXP_TOLERANCE, 0}, +{23, 1047233823u, 1067522510u, 1067522510u, 0, EXP_TOLERANCE, 0}, +{24, 1047904911u, 1067628618u, 1067628618u, 0, EXP_TOLERANCE, 0}, +{25, 1048576000u, 1067735793u, 1067735793u, 0, EXP_TOLERANCE, 0}, +{26, 1048911544u, 1067844046u, 1067844046u, 0, EXP_TOLERANCE, 0}, +{27, 1049247089u, 1067953387u, 1067953387u, 0, EXP_TOLERANCE, 0}, +{28, 1049582633u, 1068063826u, 1068063826u, 0, EXP_TOLERANCE, 0}, +{29, 1049918177u, 1068175375u, 1068175375u, 0, EXP_TOLERANCE, 0}, +{30, 1050253722u, 1068288045u, 1068288045u, 0, EXP_TOLERANCE, 0}, +{31, 1050589266u, 1068401847u, 1068401847u, 0, EXP_TOLERANCE, 0}, +{32, 1050924810u, 1068516793u, 1068516793u, 0, EXP_TOLERANCE, 0}, +{33, 1051260355u, 1068632895u, 1068632895u, 0, EXP_TOLERANCE, 0}, +{34, 1051595899u, 1068750163u, 1068750163u, 0, EXP_TOLERANCE, 0}, +{35, 1051931443u, 1068868609u, 1068868609u, 0, EXP_TOLERANCE, 0}, +{36, 1052266988u, 1068988247u, 1068988247u, 0, EXP_TOLERANCE, 0}, +{37, 1052602532u, 1069109086u, 1069109086u, 0, EXP_TOLERANCE, 0}, +{38, 1052938076u, 1069231140u, 1069231140u, 0, EXP_TOLERANCE, 0}, +{39, 1053273620u, 1069354421u, 1069354421u, 0, EXP_TOLERANCE, 0}, +{40, 1053609165u, 1069478941u, 1069478941u, 0, EXP_TOLERANCE, 0}, +{41, 1053944709u, 1069604712u, 1069604712u, 0, EXP_TOLERANCE, 0}, +{42, 1054280253u, 1069731747u, 1069731747u, 0, EXP_TOLERANCE, 0}, +{43, 1054615798u, 1069860059u, 1069860059u, 0, EXP_TOLERANCE, 0}, +{44, 1054951342u, 1069989660u, 1069989660u, 0, EXP_TOLERANCE, 0}, +{45, 1055286886u, 1070120564u, 1070120564u, 0, EXP_TOLERANCE, 0}, +{46, 1055622431u, 1070252784u, 1070252784u, 0, EXP_TOLERANCE, 0}, +{47, 1055957975u, 1070386332u, 1070386332u, 0, EXP_TOLERANCE, 0}, +{48, 1056293519u, 1070521223u, 1070521223u, 0, EXP_TOLERANCE, 0}, +{49, 1056629064u, 1070657469u, 1070657469u, 0, EXP_TOLERANCE, 0}, +{50, 1056964608u, 1070795084u, 1070795084u, 0, EXP_TOLERANCE, 0}, +{51, 1057132380u, 1070934083u, 1070934083u, 0, EXP_TOLERANCE, 0}, +{52, 1057300152u, 1071074479u, 1071074479u, 0, EXP_TOLERANCE, 0}, +{53, 1057467924u, 1071216285u, 1071216285u, 0, EXP_TOLERANCE, 0}, +{54, 1057635697u, 1071359517u, 1071359517u, 0, EXP_TOLERANCE, 0}, +{55, 1057803469u, 1071504189u, 1071504189u, 0, EXP_TOLERANCE, 0}, +{56, 1057971241u, 1071650314u, 1071650314u, 0, EXP_TOLERANCE, 0}, +{57, 1058139013u, 1071797907u, 1071797907u, 0, EXP_TOLERANCE, 0}, +{58, 1058306785u, 1071946984u, 1071946984u, 0, EXP_TOLERANCE, 0}, +{59, 1058474557u, 1072097559u, 1072097559u, 0, EXP_TOLERANCE, 0}, +{60, 1058642330u, 1072249649u, 1072249649u, 0, EXP_TOLERANCE, 0}, +{61, 1058810102u, 1072403266u, 1072403266u, 0, EXP_TOLERANCE, 0}, +{62, 1058977874u, 1072558427u, 1072558427u, 0, EXP_TOLERANCE, 0}, +{63, 1059145646u, 1072715147u, 1072715147u, 0, EXP_TOLERANCE, 0}, +{64, 1059313418u, 1072873443u, 1072873443u, 0, EXP_TOLERANCE, 0}, +{65, 1059481190u, 1073033329u, 1073033329u, 0, EXP_TOLERANCE, 0}, +{66, 1059648963u, 1073194823u, 1073194823u, 0, EXP_TOLERANCE, 0}, +{67, 1059816735u, 1073357939u, 1073357939u, 0, EXP_TOLERANCE, 0}, +{68, 1059984507u, 1073522694u, 1073522694u, 0, EXP_TOLERANCE, 0}, +{69, 1060152279u, 1073689106u, 1073689106u, 0, EXP_TOLERANCE, 0}, +{70, 1060320051u, 1073799507u, 1073799507u, 0, EXP_TOLERANCE, 0}, +{71, 1060487823u, 1073884393u, 1073884393u, 0, EXP_TOLERANCE, 0}, +{72, 1060655596u, 1073970134u, 1073970134u, 0, EXP_TOLERANCE, 0}, +{73, 1060823368u, 1074056735u, 1074056735u, 0, EXP_TOLERANCE, 0}, +{74, 1060991140u, 1074144206u, 1074144206u, 0, EXP_TOLERANCE, 0}, +{75, 1061158912u, 1074232557u, 1074232557u, 0, EXP_TOLERANCE, 0}, +{76, 1061326684u, 1074321796u, 1074321796u, 0, EXP_TOLERANCE, 0}, +{77, 1061494456u, 1074411931u, 1074411931u, 0, EXP_TOLERANCE, 0}, +{78, 1061662228u, 1074502974u, 1074502974u, 0, EXP_TOLERANCE, 0}, +{79, 1061830001u, 1074594931u, 1074594931u, 0, EXP_TOLERANCE, 0}, +{80, 1061997773u, 1074687812u, 1074687812u, 0, EXP_TOLERANCE, 0}, +{81, 1062165545u, 1074781626u, 1074781626u, 0, EXP_TOLERANCE, 0}, +{82, 1062333317u, 1074876383u, 1074876383u, 0, EXP_TOLERANCE, 0}, +{83, 1062501089u, 1074972091u, 1074972091u, 0, EXP_TOLERANCE, 0}, +{84, 1062668861u, 1075068762u, 1075068762u, 0, EXP_TOLERANCE, 0}, +{85, 1062836634u, 1075166406u, 1075166406u, 0, EXP_TOLERANCE, 0}, +{86, 1063004406u, 1075265030u, 1075265030u, 0, EXP_TOLERANCE, 0}, +{87, 1063172178u, 1075364646u, 1075364646u, 0, EXP_TOLERANCE, 0}, +{88, 1063339950u, 1075465262u, 1075465262u, 0, EXP_TOLERANCE, 0}, +{89, 1063507722u, 1075566890u, 1075566890u, 0, EXP_TOLERANCE, 0}, +{90, 1063675494u, 1075669539u, 1075669539u, 0, EXP_TOLERANCE, 0}, +{91, 1063843267u, 1075773220u, 1075773220u, 0, EXP_TOLERANCE, 0}, +{92, 1064011039u, 1075877942u, 1075877942u, 0, EXP_TOLERANCE, 0}, +{93, 1064178811u, 1075983718u, 1075983718u, 0, EXP_TOLERANCE, 0}, +{94, 1064346583u, 1076090556u, 1076090556u, 0, EXP_TOLERANCE, 0}, +{95, 1064514355u, 1076198468u, 1076198468u, 0, EXP_TOLERANCE, 0}, +{96, 1064682127u, 1076307465u, 1076307465u, 0, EXP_TOLERANCE, 0}, +{97, 1064849900u, 1076417557u, 1076417557u, 0, EXP_TOLERANCE, 0}, +{98, 1065017672u, 1076528756u, 1076528756u, 0, EXP_TOLERANCE, 0}, +{99, 1065185444u, 1076641072u, 1076641072u, 0, EXP_TOLERANCE, 0}, +{100, 1065353216u, 1076754516u, 1076754516u, 0, EXP_TOLERANCE, 0}, +{101, 1065437102u, 1076869101u, 1076869101u, 0, EXP_TOLERANCE, 0}, +{102, 1065520988u, 1076984838u, 1076984838u, 0, EXP_TOLERANCE, 0}, +{103, 1065604874u, 1077101737u, 1077101737u, 0, EXP_TOLERANCE, 0}, +{104, 1065688760u, 1077219812u, 1077219812u, 0, EXP_TOLERANCE, 0}, +{105, 1065772646u, 1077339073u, 1077339073u, 0, EXP_TOLERANCE, 0}, +{106, 1065856532u, 1077459533u, 1077459533u, 0, EXP_TOLERANCE, 0}, +{107, 1065940419u, 1077581204u, 1077581204u, 0, EXP_TOLERANCE, 0}, +{108, 1066024305u, 1077704098u, 1077704098u, 0, EXP_TOLERANCE, 0}, +{109, 1066108191u, 1077828227u, 1077828227u, 0, EXP_TOLERANCE, 0}, +{110, 1066192077u, 1077953602u, 1077953602u, 0, EXP_TOLERANCE, 0}, +{111, 1066275963u, 1078080238u, 1078080238u, 0, EXP_TOLERANCE, 0}, +{112, 1066359849u, 1078208147u, 1078208147u, 0, EXP_TOLERANCE, 0}, +{113, 1066443735u, 1078337341u, 1078337341u, 0, EXP_TOLERANCE, 0}, +{114, 1066527621u, 1078467832u, 1078467832u, 0, EXP_TOLERANCE, 0}, +{115, 1066611507u, 1078599636u, 1078599636u, 0, EXP_TOLERANCE, 0}, +{116, 1066695393u, 1078732765u, 1078732765u, 0, EXP_TOLERANCE, 0}, +{117, 1066779279u, 1078867232u, 1078867232u, 0, EXP_TOLERANCE, 0}, +{118, 1066863165u, 1079003050u, 1079003050u, 0, EXP_TOLERANCE, 0}, +{119, 1066947052u, 1079140234u, 1079140234u, 0, EXP_TOLERANCE, 0}, +{120, 1070141403u, 1083830126u, 1083830126u, 0, EXP_TOLERANCE, 0}, +{121, 1078530011u, 1102651427u, 1102651427u, 0, EXP_TOLERANCE, 0}, +{122, 1083624420u, 1121886899u, 1121886899u, 0, EXP_TOLERANCE, 0}, +{123, 1058642330u, 1072249649u, 1072249649u, 0, EXP_TOLERANCE, 0}, +{124, 1075000115u, 1092589119u, 1092589119u, 0, EXP_TOLERANCE, 0}, +{125, 1082130432u, 1113220225u, 1113220225u, 0, EXP_TOLERANCE, 0}, +{126, 1085695590u, 1133866754u, 1133866754u, 0, EXP_TOLERANCE, 0}, +{127, 1089260749u, 1154252673u, 1154252673u, 0, EXP_TOLERANCE, 0}, +{128, 1091672474u, 1175186737u, 1175186737u, 0, EXP_TOLERANCE, 0}, +{129, 1093455053u, 1195343060u, 1195343060u, 0, EXP_TOLERANCE, 0}, +{130, 1095237632u, 1216546343u, 1216546343u, 0, EXP_TOLERANCE, 0}, +{131, 1097020211u, 1236487677u, 1236487677u, 0, EXP_TOLERANCE, 0}, +{132, 1098802790u, 1257594946u, 1257594946u, 0, EXP_TOLERANCE, 0}, +{133, 1099746509u, 1277683114u, 1277683114u, 0, EXP_TOLERANCE, 0}, +{134, 1100637798u, 1298514882u, 1298514882u, 0, EXP_TOLERANCE, 0}, +{135, 1101529088u, 1318926100u, 1318926100u, 0, EXP_TOLERANCE, 0}, +{136, 1102420378u, 1339499947u, 1339499947u, 0, EXP_TOLERANCE, 0}, +{137, 1103311667u, 1360213626u, 1360213626u, 0, EXP_TOLERANCE, 0}, +{138, 1104202957u, 1380545923u, 1380545923u, 0, EXP_TOLERANCE, 0}, +{139, 1105094246u, 1401542857u, 1401542857u, 0, EXP_TOLERANCE, 0}, +{140, 1105985536u, 1421648972u, 1421648972u, 0, EXP_TOLERANCE, 0}, +{141, 1082634597u, 1116397362u, 1116397362u, 0, EXP_TOLERANCE, 0}, +{142, 1115190228u, 1816356396u, 1816356396u, 0, EXP_TOLERANCE, 0}, +{143, 1106438075u, 1432328497u, 1432328497u, 0, EXP_TOLERANCE, 0}, +{144, 1018427456u, 1065539544u, 1065539544u, 0, EXP_TOLERANCE, 0}, +{145, 1046447761u, 1067399564u, 1067399564u, 0, EXP_TOLERANCE, 0}, +{146, 1042051987u, 1066737957u, 1066737957u, 0, EXP_TOLERANCE, 0}, +{147, 1090693943u, 1163665644u, 1163665644u, 0, EXP_TOLERANCE, 0}, +{148, 1108590126u, 1511795659u, 1511795659u, 0, EXP_TOLERANCE, 0}, +{149, 1069578284u, 1083175139u, 1083175139u, 0, EXP_TOLERANCE, 0}, +{150, 1069238236u, 1082800389u, 1082800389u, 0, EXP_TOLERANCE, 0}, +{151, 1025202705u, 1065677487u, 1065677487u, 0, EXP_TOLERANCE, 0}, +{152, 1091726201u, 1175668846u, 1175668846u, 0, EXP_TOLERANCE, 0}, +{153, 1043690266u, 1066979483u, 1066979483u, 0, EXP_TOLERANCE, 0}, +{154, 1069138828u, 1082693675u, 1082693675u, 0, EXP_TOLERANCE, 0}, +{155, 1032530529u, 1065943051u, 1065943051u, 0, EXP_TOLERANCE, 0}, +{156, 1019185416u, 1065551659u, 1065551659u, 0, EXP_TOLERANCE, 0}, +{157, 1035062552u, 1066114038u, 1066114038u, 0, EXP_TOLERANCE, 0}, +{158, 1040899644u, 1066571569u, 1066571569u, 0, EXP_TOLERANCE, 0}, +{159, 1105267499u, 1405080525u, 1405080525u, 0, EXP_TOLERANCE, 0}, +{160, 1031940153u, 1065903645u, 1065903645u, 0, EXP_TOLERANCE, 0}, +{161, 1100353916u, 1292219150u, 1292219150u, 0, EXP_TOLERANCE, 0}, +{162, 1118272510u, 2078349621u, 2078349621u, 0, EXP_TOLERANCE, 0}, +{163, 1052005275u, 1068894831u, 1068894831u, 0, EXP_TOLERANCE, 0}, +{164, 1051595516u, 1068750028u, 1068750028u, 0, EXP_TOLERANCE, 0}, +{165, 1042459941u, 1066797550u, 1066797550u, 0, EXP_TOLERANCE, 0}, +{166, 1015139825u, 1065487194u, 1065487194u, 0, EXP_TOLERANCE, 0}, +{167, 1027402057u, 1065749167u, 1065749167u, 0, EXP_TOLERANCE, 0}, +{168, 1092902066u, 1189217227u, 1189217227u, 0, EXP_TOLERANCE, 0}, +{169, 1089609605u, 1156678213u, 1156678213u, 0, EXP_TOLERANCE, 0}, +{170, 1103961891u, 1375627298u, 1375627298u, 0, EXP_TOLERANCE, 0}, +{171, 1064017530u, 1075882016u, 1075882016u, 0, EXP_TOLERANCE, 0}, +{172, 1081612749u, 1111558359u, 1111558359u, 0, EXP_TOLERANCE, 0}, +{173, 1090236299u, 1159909278u, 1159909278u, 0, EXP_TOLERANCE, 0}, +{174, 1112740353u, 1703662707u, 1703662707u, 0, EXP_TOLERANCE, 0}, +{175, 1016536733u, 1065509399u, 1065509399u, 0, EXP_TOLERANCE, 0}, +{176, 1118464896u, 2096379477u, 2096379477u, 0, EXP_TOLERANCE, 0}, +{177, 1099513553u, 1272403043u, 1272403043u, 0, EXP_TOLERANCE, 0}, +{178, 1074304242u, 1090990231u, 1090990231u, 0, EXP_TOLERANCE, 0}, +{179, 1050044991u, 1068217824u, 1068217824u, 0, EXP_TOLERANCE, 0}, +{180, 1086079415u, 1135833648u, 1135833648u, 0, EXP_TOLERANCE, 0}, +{181, 1048899008u, 1067839982u, 1067839982u, 0, EXP_TOLERANCE, 0}, +{182, 1098535575u, 1253977432u, 1253977432u, 0, EXP_TOLERANCE, 0}, +{183, 1056796285u, 1070725879u, 1070725879u, 0, EXP_TOLERANCE, 0}, +{184, 1094236657u, 1204404773u, 1204404773u, 0, EXP_TOLERANCE, 0}, +{185, 1027140379u, 1065740608u, 1065740608u, 0, EXP_TOLERANCE, 0}, +{186, 1084461801u, 1126560528u, 1126560528u, 0, EXP_TOLERANCE, 0}, +{187, 1077234132u, 1099426748u, 1099426748u, 0, EXP_TOLERANCE, 0}, +{188, 1091836061u, 1176734999u, 1176734999u, 0, EXP_TOLERANCE, 0}, +{189, 1088410165u, 1149784227u, 1149784227u, 0, EXP_TOLERANCE, 0}, +{190, 1050059365u, 1068222645u, 1068222645u, 0, EXP_TOLERANCE, 0}, +{191, 1092649937u, 1186051502u, 1186051502u, 0, EXP_TOLERANCE, 0}, +{192, 1059867088u, 1073407214u, 1073407214u, 0, EXP_TOLERANCE, 0}, +{193, 1046232016u, 1067366071u, 1067366071u, 0, EXP_TOLERANCE, 0}, +{194, 1041556457u, 1066666057u, 1066666057u, 0, EXP_TOLERANCE, 0}, +{195, 1052289223u, 1068996217u, 1068996217u, 0, EXP_TOLERANCE, 0}, +{196, 1054774003u, 1069921003u, 1069921003u, 0, EXP_TOLERANCE, 0}, +{197, 1083319556u, 1119912811u, 1119912811u, 0, EXP_TOLERANCE, 0}, +{198, 1070223249u, 1083929038u, 1083929038u, 0, EXP_TOLERANCE, 0}, +{199, 1078801107u, 1103461496u, 1103461496u, 0, EXP_TOLERANCE, 0}, +{200, 1050942983u, 1068523051u, 1068523051u, 0, EXP_TOLERANCE, 0}, +{201, 1023352018u, 1065618561u, 1065618561u, 0, EXP_TOLERANCE, 0}, +{202, 1036601712u, 1066219564u, 1066219564u, 0, EXP_TOLERANCE, 0}, +{203, 1014979800u, 1065484986u, 1065484986u, 0, EXP_TOLERANCE, 0}, +{204, 1084262010u, 1125572253u, 1125572253u, 0, EXP_TOLERANCE, 0}, +{205, 1052778921u, 1069173095u, 1069173095u, 0, EXP_TOLERANCE, 0}, +{206, 1077810183u, 1100738137u, 1100738137u, 0, EXP_TOLERANCE, 0}, +{207, 1084939616u, 1129343441u, 1129343441u, 0, EXP_TOLERANCE, 0}, +{208, 1077413511u, 1099815970u, 1099815970u, 0, EXP_TOLERANCE, 0}, +{209, 1061774415u, 1074564362u, 1074564362u, 0, EXP_TOLERANCE, 0}, +{210, 1075260391u, 1093258691u, 1093258691u, 0, EXP_TOLERANCE, 0}, +{211, 1011007332u, 1065453522u, 1065453522u, 0, EXP_TOLERANCE, 0}, +{212, 1093263793u, 1193250687u, 1193250687u, 0, EXP_TOLERANCE, 0}, +{213, 1087344003u, 1143208517u, 1143208517u, 0, EXP_TOLERANCE, 0}, +{214, 1117835410u, 2038450983u, 2038450983u, 0, EXP_TOLERANCE, 0}, +{215, 1043103780u, 1066892341u, 1066892341u, 0, EXP_TOLERANCE, 0}, +{216, 1090306155u, 1160270677u, 1160270677u, 0, EXP_TOLERANCE, 0}, +{217, 1013026833u, 1065469503u, 1065469503u, 0, EXP_TOLERANCE, 0}, +{218, 1064488668u, 1076181876u, 1076181876u, 0, EXP_TOLERANCE, 0}, +{219, 1058808746u, 1072402018u, 1072402018u, 0, EXP_TOLERANCE, 0}, +{220, 1085379936u, 1132498287u, 1132498287u, 0, EXP_TOLERANCE, 0}, +{221, 1011547567u, 1065457794u, 1065457794u, 0, EXP_TOLERANCE, 0}, +{222, 1023886482u, 1065634870u, 1065634870u, 0, EXP_TOLERANCE, 0}, +{223, 1025428385u, 1065684815u, 1065684815u, 0, EXP_TOLERANCE, 0}, +{224, 1018637212u, 1065542895u, 1065542895u, 0, EXP_TOLERANCE, 0}, +{225, 1117199775u, 1979751943u, 1979751943u, 0, EXP_TOLERANCE, 0}, +{226, 1083088572u, 1118596995u, 1118596995u, 0, EXP_TOLERANCE, 0}, +{227, 1094749923u, 1210357028u, 1210357028u, 0, EXP_TOLERANCE, 0}, +{228, 1034709247u, 1066089985u, 1066089985u, 0, EXP_TOLERANCE, 0}, +{229, 1105234414u, 1404311714u, 1404311714u, 0, EXP_TOLERANCE, 0}, +{230, 1031637130u, 1065888859u, 1065888859u, 0, EXP_TOLERANCE, 0}, +{231, 1065798296u, 1077375779u, 1077375779u, 0, EXP_TOLERANCE, 0}, +{232, 1068550752u, 1082044780u, 1082044780u, 0, EXP_TOLERANCE, 0}, +{233, 1074093690u, 1090556451u, 1090556451u, 0, EXP_TOLERANCE, 0}, +{234, 1110141777u, 1583544929u, 1583544929u, 0, EXP_TOLERANCE, 0}, +{235, 1087522707u, 1144164398u, 1144164398u, 0, EXP_TOLERANCE, 0}, +{236, 1089253042u, 1154203512u, 1154203512u, 0, EXP_TOLERANCE, 0}, +{237, 1070475893u, 1084240518u, 1084240518u, 0, EXP_TOLERANCE, 0}, +{238, 1065761827u, 1077323625u, 1077323625u, 0, EXP_TOLERANCE, 0}, +{239, 1035717127u, 1066158768u, 1066158768u, 0, EXP_TOLERANCE, 0}, +{240, 1099152750u, 1264084739u, 1264084739u, 0, EXP_TOLERANCE, 0}, +{241, 1015617571u, 1065494782u, 1065494782u, 0, EXP_TOLERANCE, 0}, +{242, 1040672833u, 1066539155u, 1066539155u, 0, EXP_TOLERANCE, 0}, +{243, 1080781593u, 1109284219u, 1109284219u, 0, EXP_TOLERANCE, 0}, +{244, 1040875476u, 1066568110u, 1066568110u, 0, EXP_TOLERANCE, 0}, +{245, 1020112556u, 1065566501u, 1065566501u, 0, EXP_TOLERANCE, 0}, +{246, 1046146787u, 1067352870u, 1067352870u, 0, EXP_TOLERANCE, 0}, +{247, 1043662371u, 1066975321u, 1066975321u, 0, EXP_TOLERANCE, 0}, +{248, 1034647135u, 1066085763u, 1066085763u, 0, EXP_TOLERANCE, 0}, +{249, 1081336221u, 1110751206u, 1110751206u, 0, EXP_TOLERANCE, 0}, +{250, 1098878125u, 1258542001u, 1258542001u, 0, EXP_TOLERANCE, 0}, +{251, 1011637382u, 1065458504u, 1065458504u, 0, EXP_TOLERANCE, 0}, +{252, 1008460484u, 1065433410u, 1065433410u, 0, EXP_TOLERANCE, 0}, +{253, 1107342115u, 1454053213u, 1454053213u, 0, EXP_TOLERANCE, 0}, +{254, 1098588430u, 1254621775u, 1254621775u, 0, EXP_TOLERANCE, 0}, +{255, 1084032979u, 1124549318u, 1124549318u, 0, EXP_TOLERANCE, 0}, +{256, 1012481176u, 1065465182u, 1065465182u, 0, EXP_TOLERANCE, 0}, +{257, 1106838812u, 1441798446u, 1441798446u, 0, EXP_TOLERANCE, 0}, +{258, 1050346079u, 1068319255u, 1068319255u, 0, EXP_TOLERANCE, 0}, +{259, 1108701419u, 1517208885u, 1517208885u, 0, EXP_TOLERANCE, 0}, +{260, 1059787005u, 1073328915u, 1073328915u, 0, EXP_TOLERANCE, 0}, +{261, 1044137644u, 1067046470u, 1067046470u, 0, EXP_TOLERANCE, 0}, +{262, 1010973520u, 1065453254u, 1065453254u, 0, EXP_TOLERANCE, 0}, +{263, 1089984491u, 1158702046u, 1158702046u, 0, EXP_TOLERANCE, 0}, +{264, 1045591776u, 1067267310u, 1067267310u, 0, EXP_TOLERANCE, 0}, +{265, 1083608024u, 1121773273u, 1121773273u, 0, EXP_TOLERANCE, 0}, +{266, 1106642772u, 1436889651u, 1436889651u, 0, EXP_TOLERANCE, 0}, +{267, 1039381219u, 1066413223u, 1066413223u, 0, EXP_TOLERANCE, 0}, +{268, 1075129316u, 1092916302u, 1092916302u, 0, EXP_TOLERANCE, 0}, +{269, 1009293126u, 1065439980u, 1065439980u, 0, EXP_TOLERANCE, 0}, +{270, 1086570035u, 1138933348u, 1138933348u, 0, EXP_TOLERANCE, 0}, +{271, 1072752989u, 1087514711u, 1087514711u, 0, EXP_TOLERANCE, 0}, +{272, 1117749835u, 2030407796u, 2030407796u, 0, EXP_TOLERANCE, 0}, +{273, 1098086564u, 1249369596u, 1249369596u, 0, EXP_TOLERANCE, 0}, +{274, 1112054177u, 1671645028u, 1671645028u, 0, EXP_TOLERANCE, 0}, +{275, 1070033697u, 1083701425u, 1083701425u, 0, EXP_TOLERANCE, 0}, +{276, 1081598195u, 1111514539u, 1111514539u, 0, EXP_TOLERANCE, 0}, +{277, 1117244704u, 1983198281u, 1983198281u, 0, EXP_TOLERANCE, 0}, +{278, 1064154282u, 1075968187u, 1075968187u, 0, EXP_TOLERANCE, 0}, +{279, 1027267512u, 1065744765u, 1065744765u, 0, EXP_TOLERANCE, 0}, +{280, 1056871393u, 1070756716u, 1070756716u, 0, EXP_TOLERANCE, 0}, +{281, 1052964166u, 1069240682u, 1069240682u, 0, EXP_TOLERANCE, 0}, +{282, 1083857029u, 1123598411u, 1123598411u, 0, EXP_TOLERANCE, 0}, +{283, 1050317118u, 1068309458u, 1068309458u, 0, EXP_TOLERANCE, 0}, +{284, 1105535659u, 1411380676u, 1411380676u, 0, EXP_TOLERANCE, 0}, +{285, 1013864474u, 1065476140u, 1065476140u, 0, EXP_TOLERANCE, 0}, +{286, 1096937297u, 1235594288u, 1235594288u, 0, EXP_TOLERANCE, 0}, +{287, 1041050257u, 1066593155u, 1066593155u, 0, EXP_TOLERANCE, 0}, +{288, 1059777219u, 1073319373u, 1073319373u, 0, EXP_TOLERANCE, 0}, +{289, 1106107315u, 1424881430u, 1424881430u, 0, EXP_TOLERANCE, 0}, +{290, 1068857446u, 1082398380u, 1082398380u, 0, EXP_TOLERANCE, 0}, +{291, 1020650268u, 1065575121u, 1065575121u, 0, EXP_TOLERANCE, 0}, +{292, 1085258931u, 1131589792u, 1131589792u, 0, EXP_TOLERANCE, 0}, +{293, 1045302413u, 1067222982u, 1067222982u, 0, EXP_TOLERANCE, 0}, +{294, 1088789271u, 1151554336u, 1151554336u, 0, EXP_TOLERANCE, 0}, +{295, 1009727125u, 1065443407u, 1065443407u, 0, EXP_TOLERANCE, 0}, +{296, 1034971440u, 1066107829u, 1066107829u, 0, EXP_TOLERANCE, 0}, +{297, 1111472322u, 1645079799u, 1645079799u, 0, EXP_TOLERANCE, 0}, +{298, 1098047277u, 1248772238u, 1248772238u, 0, EXP_TOLERANCE, 0}, +{299, 1053654343u, 1069495802u, 1069495802u, 0, EXP_TOLERANCE, 0}, +{300, 1017067235u, 1065517846u, 1065517846u, 0, EXP_TOLERANCE, 0}, +{301, 1021021288u, 1065581073u, 1065581073u, 0, EXP_TOLERANCE, 0}, +{302, 1061075724u, 1074188639u, 1074188639u, 0, EXP_TOLERANCE, 0}, +{303, 1111466355u, 1644870477u, 1644870477u, 0, EXP_TOLERANCE, 0}, +{304, 1062629929u, 1075046244u, 1075046244u, 0, EXP_TOLERANCE, 0}, +{305, 1035652969u, 1066154374u, 1066154374u, 0, EXP_TOLERANCE, 0}, +{306, 1089415367u, 1155278106u, 1155278106u, 0, EXP_TOLERANCE, 0}, +{307, 1097797267u, 1245452987u, 1245452987u, 0, EXP_TOLERANCE, 0}, +{308, 1043842627u, 1067002246u, 1067002246u, 0, EXP_TOLERANCE, 0}, +{309, 1065083199u, 1076572489u, 1076572489u, 0, EXP_TOLERANCE, 0}, +{310, 1086073356u, 1135799723u, 1135799723u, 0, EXP_TOLERANCE, 0}, +{311, 1105391405u, 1408432053u, 1408432053u, 0, EXP_TOLERANCE, 0}, +{312, 1007073386u, 1065422477u, 1065422477u, 0, EXP_TOLERANCE, 0}, +{313, 1112946687u, 1712954031u, 1712954031u, 0, EXP_TOLERANCE, 0}, +{314, 1054571099u, 1069842892u, 1069842892u, 0, EXP_TOLERANCE, 0}, +{315, 1063035063u, 1075283159u, 1075283159u, 0, EXP_TOLERANCE, 0}, +{316, 1111195621u, 1631948943u, 1631948943u, 0, EXP_TOLERANCE, 0}, +{317, 1106582941u, 1435722047u, 1435722047u, 0, EXP_TOLERANCE, 0}, +{318, 1098367790u, 1252134505u, 1252134505u, 0, EXP_TOLERANCE, 0}, +{319, 1114614727u, 1789788955u, 1789788955u, 0, EXP_TOLERANCE, 0}, +{320, 1059182838u, 1072750102u, 1072750102u, 0, EXP_TOLERANCE, 0}, +{321, 1090931053u, 1166671300u, 1166671300u, 0, EXP_TOLERANCE, 0}, +{322, 1086777898u, 1140481682u, 1140481682u, 0, EXP_TOLERANCE, 0}, +{323, 1015758316u, 1065497018u, 1065497018u, 0, EXP_TOLERANCE, 0}, +{324, 1105963769u, 1421146184u, 1421146184u, 0, EXP_TOLERANCE, 0}, +{325, 1092601275u, 1185523374u, 1185523374u, 0, EXP_TOLERANCE, 0}, +{326, 1026767045u, 1065728411u, 1065728411u, 0, EXP_TOLERANCE, 0}, +{327, 1115692265u, 1839892889u, 1839892889u, 0, EXP_TOLERANCE, 0}, +{328, 1009779956u, 1065443824u, 1065443824u, 0, EXP_TOLERANCE, 0}, +{329, 1044309006u, 1067072247u, 1067072247u, 0, EXP_TOLERANCE, 0}, +{330, 1036510567u, 1066213281u, 1066213281u, 0, EXP_TOLERANCE, 0}, +{331, 1090731743u, 1164195178u, 1164195178u, 0, EXP_TOLERANCE, 0}, +{332, 1017223107u, 1065520330u, 1065520330u, 0, EXP_TOLERANCE, 0}, +{333, 1052155526u, 1068948373u, 1068948373u, 0, EXP_TOLERANCE, 0}, +{334, 1059461860u, 1073014826u, 1073014826u, 0, EXP_TOLERANCE, 0}, +{335, 1058086743u, 1071751765u, 1071751765u, 0, EXP_TOLERANCE, 0}, +{336, 1112039377u, 1671057660u, 1671057660u, 0, EXP_TOLERANCE, 0}, +{337, 1095033668u, 1213708815u, 1213708815u, 0, EXP_TOLERANCE, 0}, +{338, 1086707327u, 1139938718u, 1139938718u, 0, EXP_TOLERANCE, 0}, +{339, 1079361630u, 1105312011u, 1105312011u, 0, EXP_TOLERANCE, 0}, +{340, 1066116543u, 1077840653u, 1077840653u, 0, EXP_TOLERANCE, 0}, +{341, 1064166730u, 1075976066u, 1075976066u, 0, EXP_TOLERANCE, 0}, +{342, 1102348498u, 1337693492u, 1337693492u, 0, EXP_TOLERANCE, 0}, +{343, 1015629204u, 1065494967u, 1065494967u, 0, EXP_TOLERANCE, 0}, +{344, 1030195747u, 1065841068u, 1065841068u, 0, EXP_TOLERANCE, 0}, +{345, 1070398346u, 1084143913u, 1084143913u, 0, EXP_TOLERANCE, 0}, +{346, 1038252147u, 1066334072u, 1066334072u, 0, EXP_TOLERANCE, 0}, +{347, 1040899763u, 1066571586u, 1066571586u, 0, EXP_TOLERANCE, 0}, +{348, 1083078837u, 1118544657u, 1118544657u, 0, EXP_TOLERANCE, 0}, +{349, 1056607786u, 1070648789u, 1070648789u, 0, EXP_TOLERANCE, 0}, +{350, 1096376046u, 1229062802u, 1229062802u, 0, EXP_TOLERANCE, 0}, +{351, 1052228830u, 1068974581u, 1068974581u, 0, EXP_TOLERANCE, 0}, +{352, 1053012169u, 1069258256u, 1069258256u, 0, EXP_TOLERANCE, 0}, +{353, 1049721049u, 1068109706u, 1068109706u, 0, EXP_TOLERANCE, 0}, +{354, 1094424013u, 1206991542u, 1206991542u, 0, EXP_TOLERANCE, 0}, +{355, 1016617613u, 1065510686u, 1065510686u, 0, EXP_TOLERANCE, 0}, +{356, 1024296406u, 1065648120u, 1065648120u, 0, EXP_TOLERANCE, 0}, +{357, 1022125625u, 1065598816u, 1065598816u, 0, EXP_TOLERANCE, 0}, +{358, 1032104423u, 1065914592u, 1065914592u, 0, EXP_TOLERANCE, 0}, +{359, 1092536785u, 1184860180u, 1184860180u, 0, EXP_TOLERANCE, 0}, +{360, 1059516864u, 1073067533u, 1073067533u, 0, EXP_TOLERANCE, 0}, +{361, 1115763378u, 1846718963u, 1846718963u, 0, EXP_TOLERANCE, 0}, +{362, 1107550779u, 1463656357u, 1463656357u, 0, EXP_TOLERANCE, 0}, +{363, 1071940738u, 1086243641u, 1086243641u, 0, EXP_TOLERANCE, 0}, +{364, 1040041868u, 1066459846u, 1066459846u, 0, EXP_TOLERANCE, 0}, +{365, 1095143404u, 1215268570u, 1215268570u, 0, EXP_TOLERANCE, 0}, +{366, 1010621254u, 1065450470u, 1065450470u, 0, EXP_TOLERANCE, 0}, +{367, 1006780558u, 1065420171u, 1065420171u, 0, EXP_TOLERANCE, 0}, +{368, 1021933565u, 1065595727u, 1065595727u, 0, EXP_TOLERANCE, 0}, +{369, 1054686121u, 1069887113u, 1069887113u, 0, EXP_TOLERANCE, 0}, +{370, 1016828331u, 1065514041u, 1065514041u, 0, EXP_TOLERANCE, 0}, +{371, 1030636921u, 1065855668u, 1065855668u, 0, EXP_TOLERANCE, 0}, +{372, 1068608693u, 1082145451u, 1082145451u, 0, EXP_TOLERANCE, 0}, +{373, 1018961646u, 1065548081u, 1065548081u, 0, EXP_TOLERANCE, 0}, +{374, 1116031367u, 1871555577u, 1871555577u, 0, EXP_TOLERANCE, 0}, +{375, 1115305326u, 1821871751u, 1821871751u, 0, EXP_TOLERANCE, 0}, +{376, 1058958536u, 1072540463u, 1072540463u, 0, EXP_TOLERANCE, 0}, +{377, 1118019991u, 2055414797u, 2055414797u, 0, EXP_TOLERANCE, 0}, +{378, 1074544343u, 1091512203u, 1091512203u, 0, EXP_TOLERANCE, 0}, +{379, 1098466226u, 1253179808u, 1253179808u, 0, EXP_TOLERANCE, 0}, +{380, 1089802670u, 1157916191u, 1157916191u, 0, EXP_TOLERANCE, 0}, +{381, 1081671201u, 1111735895u, 1111735895u, 0, EXP_TOLERANCE, 0}, +{382, 1066726224u, 1078782030u, 1078782030u, 0, EXP_TOLERANCE, 0}, +{383, 1118799960u, 2126821501u, 2126821501u, 0, EXP_TOLERANCE, 0}, +{384, 1083377370u, 1120265465u, 1120265465u, 0, EXP_TOLERANCE, 0}, +{385, 1093053842u, 1191353231u, 1191353231u, 0, EXP_TOLERANCE, 0}, +{386, 1115933679u, 1862695146u, 1862695146u, 0, EXP_TOLERANCE, 0}, +{387, 1093696468u, 1198591966u, 1198591966u, 0, EXP_TOLERANCE, 0}, +{388, 1109187404u, 1539214917u, 1539214917u, 0, EXP_TOLERANCE, 0}, +{389, 1011930984u, 1065460827u, 1065460827u, 0, EXP_TOLERANCE, 0}, +{390, 1050644766u, 1068420780u, 1068420780u, 0, EXP_TOLERANCE, 0}, +{391, 1047982899u, 1067641019u, 1067641019u, 0, EXP_TOLERANCE, 0}, +{392, 1020067601u, 1065565781u, 1065565781u, 0, EXP_TOLERANCE, 0}, +{393, 1040189459u, 1066470439u, 1066470439u, 0, EXP_TOLERANCE, 0}, +{394, 1081753082u, 1111988788u, 1111988788u, 0, EXP_TOLERANCE, 0}, +{395, 1079378407u, 1105371301u, 1105371301u, 0, EXP_TOLERANCE, 0}, +{396, 1024146852u, 1065643284u, 1065643284u, 0, EXP_TOLERANCE, 0}, +{397, 1029918023u, 1065831889u, 1065831889u, 0, EXP_TOLERANCE, 0}, +{398, 1099388140u, 1269400788u, 1269400788u, 0, EXP_TOLERANCE, 0}, +{399, 1025508438u, 1065687416u, 1065687416u, 0, EXP_TOLERANCE, 0}, +{400, 1070164694u, 1083858175u, 1083858175u, 0, EXP_TOLERANCE, 0}, +{401, 1009738856u, 1065443499u, 1065443499u, 0, EXP_TOLERANCE, 0}, +{402, 1087726104u, 1145356237u, 1145356237u, 0, EXP_TOLERANCE, 0}, +{403, 1027667012u, 1065757842u, 1065757842u, 0, EXP_TOLERANCE, 0}, +{404, 1026529187u, 1065720649u, 1065720649u, 0, EXP_TOLERANCE, 0}, +{405, 1106219203u, 1427327388u, 1427327388u, 0, EXP_TOLERANCE, 0}, +{406, 1061557574u, 1074446076u, 1074446076u, 0, EXP_TOLERANCE, 0}, +{407, 1068190855u, 1081343804u, 1081343804u, 0, EXP_TOLERANCE, 0}, +{408, 1028147309u, 1065773589u, 1065773589u, 0, EXP_TOLERANCE, 0}, +{409, 1011538415u, 1065457721u, 1065457721u, 0, EXP_TOLERANCE, 0}, +{410, 1087333890u, 1143156822u, 1143156822u, 0, EXP_TOLERANCE, 0}, +{411, 1065783414u, 1077354469u, 1077354469u, 0, EXP_TOLERANCE, 0}, +{412, 1047658941u, 1067589604u, 1067589604u, 0, EXP_TOLERANCE, 0}, +{413, 1020835656u, 1065578095u, 1065578095u, 0, EXP_TOLERANCE, 0}, +{414, 1007660778u, 1065427105u, 1065427105u, 0, EXP_TOLERANCE, 0}, +{415, 1030084655u, 1065837395u, 1065837395u, 0, EXP_TOLERANCE, 0}, +{416, 1064927159u, 1076468626u, 1076468626u, 0, EXP_TOLERANCE, 0}, +{417, 1056082624u, 1070436284u, 1070436284u, 0, EXP_TOLERANCE, 0}, +{418, 1026762640u, 1065728267u, 1065728267u, 0, EXP_TOLERANCE, 0}, +{419, 1093125590u, 1191959413u, 1191959413u, 0, EXP_TOLERANCE, 0}, +{420, 1029732434u, 1065825761u, 1065825761u, 0, EXP_TOLERANCE, 0}, +{421, 1064993108u, 1076512405u, 1076512405u, 0, EXP_TOLERANCE, 0}, +{422, 1063507120u, 1075566524u, 1075566524u, 0, EXP_TOLERANCE, 0}, +{423, 1065876936u, 1077489016u, 1077489016u, 0, EXP_TOLERANCE, 0}, +{424, 1084196703u, 1125269096u, 1125269096u, 0, EXP_TOLERANCE, 0}, +{425, 1083357891u, 1120145562u, 1120145562u, 0, EXP_TOLERANCE, 0}, +{426, 1087303226u, 1143001584u, 1143001584u, 0, EXP_TOLERANCE, 0}, +{427, 1047274418u, 1067528899u, 1067528899u, 0, EXP_TOLERANCE, 0}, +{428, 1066157309u, 1077901485u, 1077901485u, 0, EXP_TOLERANCE, 0}, +{429, 1041100905u, 1066600424u, 1066600424u, 0, EXP_TOLERANCE, 0}, +{430, 1057444025u, 1071195998u, 1071195998u, 0, EXP_TOLERANCE, 0}, +{431, 1094747861u, 1210335839u, 1210335839u, 0, EXP_TOLERANCE, 0}, +{432, 1110000152u, 1577335997u, 1577335997u, 0, EXP_TOLERANCE, 0}, +{433, 1013018969u, 1065469440u, 1065469440u, 0, EXP_TOLERANCE, 0}, +{434, 1111828086u, 1661589669u, 1661589669u, 0, EXP_TOLERANCE, 0}, +{435, 1022250020u, 1065600816u, 1065600816u, 0, EXP_TOLERANCE, 0}, +{436, 1078328640u, 1102082707u, 1102082707u, 0, EXP_TOLERANCE, 0}, +{437, 1058832956u, 1072424311u, 1072424311u, 0, EXP_TOLERANCE, 0}, +{438, 1117000602u, 1960911677u, 1960911677u, 0, EXP_TOLERANCE, 0}, +{439, 1100264675u, 1289849849u, 1289849849u, 0, EXP_TOLERANCE, 0}, +{440, 1085721092u, 1133986574u, 1133986574u, 0, EXP_TOLERANCE, 0}, +{441, 1069009211u, 1082556418u, 1082556418u, 0, EXP_TOLERANCE, 0}, +{442, 1057613820u, 1071340759u, 1071340759u, 0, EXP_TOLERANCE, 0}, +{443, 1062874882u, 1075188804u, 1075188804u, 0, EXP_TOLERANCE, 0}, +{444, 1079554187u, 1106006973u, 1106006973u, 0, EXP_TOLERANCE, 0}, +{445, 1046944877u, 1067477149u, 1067477149u, 0, EXP_TOLERANCE, 0}, +{446, 1097750489u, 1244915131u, 1244915131u, 0, EXP_TOLERANCE, 0}, +{447, 1074473903u, 1091355960u, 1091355960u, 0, EXP_TOLERANCE, 0}, +{448, 1023707715u, 1065629098u, 1065629098u, 0, EXP_TOLERANCE, 0}, +{449, 1079061705u, 1104291134u, 1104291134u, 0, EXP_TOLERANCE, 0}, +{450, 1080125709u, 1107782090u, 1107782090u, 0, EXP_TOLERANCE, 0}, +{451, 1057966560u, 1071646216u, 1071646216u, 0, EXP_TOLERANCE, 0}, +{452, 1098046913u, 1248766806u, 1248766806u, 0, EXP_TOLERANCE, 0}, +{453, 1079118215u, 1104477942u, 1104477942u, 0, EXP_TOLERANCE, 0}, +{454, 1076920325u, 1098661587u, 1098661587u, 0, EXP_TOLERANCE, 0}, +{455, 1077338039u, 1099650177u, 1099650177u, 0, EXP_TOLERANCE, 0}, +{456, 1049161799u, 1067925490u, 1067925490u, 0, EXP_TOLERANCE, 0}, +{457, 1025484427u, 1065686636u, 1065686636u, 0, EXP_TOLERANCE, 0}, +{458, 1081885050u, 1112406912u, 1112406912u, 0, EXP_TOLERANCE, 0}, +{459, 1036634459u, 1066221822u, 1066221822u, 0, EXP_TOLERANCE, 0}, +{460, 1055376216u, 1070155635u, 1070155635u, 0, EXP_TOLERANCE, 0}, +{461, 1052873853u, 1069207685u, 1069207685u, 0, EXP_TOLERANCE, 0}, +{462, 1013844829u, 1065475984u, 1065475984u, 0, EXP_TOLERANCE, 0}, +{463, 1019491913u, 1065556563u, 1065556563u, 0, EXP_TOLERANCE, 0}, +{464, 1046721730u, 1067442252u, 1067442252u, 0, EXP_TOLERANCE, 0}, +{465, 1056763990u, 1070712641u, 1070712641u, 0, EXP_TOLERANCE, 0}, +{466, 1053047266u, 1069271122u, 1069271122u, 0, EXP_TOLERANCE, 0}, +{467, 1051195553u, 1068610382u, 1068610382u, 0, EXP_TOLERANCE, 0}, +{468, 1106033213u, 1422825889u, 1422825889u, 0, EXP_TOLERANCE, 0}, +{469, 1039695875u, 1066435400u, 1066435400u, 0, EXP_TOLERANCE, 0}, +{470, 1087938837u, 1146732848u, 1146732848u, 0, EXP_TOLERANCE, 0}, +{471, 1086382700u, 1137663500u, 1137663500u, 0, EXP_TOLERANCE, 0}, +{472, 1041130723u, 1066604706u, 1066604706u, 0, EXP_TOLERANCE, 0}, +{473, 1070900975u, 1084786236u, 1084786236u, 0, EXP_TOLERANCE, 0}, +{474, 1094918207u, 1212234718u, 1212234718u, 0, EXP_TOLERANCE, 0}, +{475, 1059727635u, 1073271108u, 1073271108u, 0, EXP_TOLERANCE, 0}, +{476, 1021599538u, 1065590359u, 1065590359u, 0, EXP_TOLERANCE, 0}, +{477, 1067180353u, 1079529057u, 1079529057u, 0, EXP_TOLERANCE, 0}, +{478, 1101660315u, 1321856380u, 1321856380u, 0, EXP_TOLERANCE, 0}, +{479, 1109054467u, 1533379708u, 1533379708u, 0, EXP_TOLERANCE, 0}, +{480, 1103532738u, 1365273754u, 1365273754u, 0, EXP_TOLERANCE, 0}, +{481, 1035525679u, 1066145663u, 1066145663u, 0, EXP_TOLERANCE, 0}, +{482, 1094330983u, 1205649366u, 1205649366u, 0, EXP_TOLERANCE, 0}, +{483, 1034492227u, 1066075242u, 1066075242u, 0, EXP_TOLERANCE, 0}, +{484, 1072096532u, 1086477996u, 1086477996u, 0, EXP_TOLERANCE, 0}, +{485, 1075990050u, 1095373204u, 1095373204u, 0, EXP_TOLERANCE, 0}, +{486, 1109033185u, 1532206806u, 1532206806u, 0, EXP_TOLERANCE, 0}, +{487, 1089560310u, 1156310516u, 1156310516u, 0, EXP_TOLERANCE, 0}, +{488, 1103328289u, 1360524395u, 1360524395u, 0, EXP_TOLERANCE, 0}, +{489, 1061907666u, 1074637811u, 1074637811u, 0, EXP_TOLERANCE, 0}, +{490, 1083710041u, 1122494921u, 1122494921u, 0, EXP_TOLERANCE, 0}, +{491, 1100867428u, 1303512311u, 1303512311u, 0, EXP_TOLERANCE, 0}, +{492, 1055125047u, 1070057263u, 1070057263u, 0, EXP_TOLERANCE, 0}, +{493, 1104553235u, 1388607970u, 1388607970u, 0, EXP_TOLERANCE, 0}, +{494, 1032386633u, 1065933431u, 1065933431u, 0, EXP_TOLERANCE, 0}, +{495, 1034271795u, 1066060291u, 1066060291u, 0, EXP_TOLERANCE, 0}, +{496, 1055506573u, 1070206981u, 1070206981u, 0, EXP_TOLERANCE, 0}, +{497, 1104281863u, 1382690251u, 1382690251u, 0, EXP_TOLERANCE, 0}, +{498, 1025475511u, 1065686346u, 1065686346u, 0, EXP_TOLERANCE, 0}, +{499, 1076895780u, 1098565127u, 1098565127u, 0, EXP_TOLERANCE, 0}, +{500, 1009589036u, 1065442316u, 1065442316u, 0, EXP_TOLERANCE, 0}, +{501, 1110359908u, 1593993278u, 1593993278u, 0, EXP_TOLERANCE, 0}, +{502, 1028807839u, 1065795292u, 1065795292u, 0, EXP_TOLERANCE, 0}, +{503, 1109436551u, 1551267569u, 1551267569u, 0, EXP_TOLERANCE, 0}, +{504, 1021730413u, 1065592462u, 1065592462u, 0, EXP_TOLERANCE, 0}, +{505, 1072081640u, 1086455406u, 1086455406u, 0, EXP_TOLERANCE, 0}, +{506, 1077465839u, 1099932685u, 1099932685u, 0, EXP_TOLERANCE, 0}, +{507, 1044300951u, 1067071033u, 1067071033u, 0, EXP_TOLERANCE, 0}, +{508, 1097032302u, 1236623967u, 1236623967u, 0, EXP_TOLERANCE, 0}, +{509, 1053981400u, 1069618541u, 1069618541u, 0, EXP_TOLERANCE, 0}, +{510, 1078478376u, 1102502986u, 1102502986u, 0, EXP_TOLERANCE, 0}, +{511, 1098068815u, 1249096941u, 1249096941u, 0, EXP_TOLERANCE, 0}, +{512, 1021467071u, 1065588231u, 1065588231u, 0, EXP_TOLERANCE, 0}, +{513, 1009763492u, 1065443694u, 1065443694u, 0, EXP_TOLERANCE, 0}, +{514, 1044623194u, 1067119679u, 1067119679u, 0, EXP_TOLERANCE, 0}, +{515, 1015705469u, 1065496179u, 1065496179u, 0, EXP_TOLERANCE, 0}, +{516, 1113725538u, 1748718730u, 1748718730u, 0, EXP_TOLERANCE, 0}, +{517, 1091841457u, 1176790302u, 1176790302u, 0, EXP_TOLERANCE, 0}, +{518, 1028958993u, 1065800266u, 1065800266u, 0, EXP_TOLERANCE, 0}, +{519, 1107682111u, 1469872413u, 1469872413u, 0, EXP_TOLERANCE, 0}, +{520, 1116027769u, 1871304107u, 1871304107u, 0, EXP_TOLERANCE, 0}, +{521, 1095143732u, 1215273481u, 1215273481u, 0, EXP_TOLERANCE, 0}, +{522, 1109791849u, 1567552701u, 1567552701u, 0, EXP_TOLERANCE, 0}, +{523, 1080343714u, 1108255550u, 1108255550u, 0, EXP_TOLERANCE, 0}, +{524, 1097380552u, 1241306521u, 1241306521u, 0, EXP_TOLERANCE, 0}, +{525, 1014020764u, 1065477379u, 1065477379u, 0, EXP_TOLERANCE, 0}, +{526, 1021650291u, 1065591174u, 1065591174u, 0, EXP_TOLERANCE, 0}, +{527, 1082778705u, 1117044746u, 1117044746u, 0, EXP_TOLERANCE, 0}, +{528, 1008484823u, 1065433602u, 1065433602u, 0, EXP_TOLERANCE, 0}, +{529, 1007086271u, 1065422579u, 1065422579u, 0, EXP_TOLERANCE, 0}, +{530, 1073311024u, 1088462085u, 1088462085u, 0, EXP_TOLERANCE, 0}, +{531, 1019109924u, 1065550452u, 1065550452u, 0, EXP_TOLERANCE, 0}, +{532, 1018648250u, 1065543071u, 1065543071u, 0, EXP_TOLERANCE, 0}, +{533, 1072458508u, 1087039603u, 1087039603u, 0, EXP_TOLERANCE, 0}, +{534, 1056562851u, 1070630475u, 1070630475u, 0, EXP_TOLERANCE, 0}, +{535, 1043828826u, 1067000182u, 1067000182u, 0, EXP_TOLERANCE, 0}, +{536, 1042710124u, 1066834276u, 1066834276u, 0, EXP_TOLERANCE, 0}, +{537, 1096757647u, 1233884720u, 1233884720u, 0, EXP_TOLERANCE, 0}, +{538, 1110766850u, 1612314434u, 1612314434u, 0, EXP_TOLERANCE, 0}, +{539, 1050846809u, 1068489970u, 1068489970u, 0, EXP_TOLERANCE, 0}, +{540, 1049017704u, 1067878521u, 1067878521u, 0, EXP_TOLERANCE, 0}, +{541, 1041850943u, 1066708722u, 1066708722u, 0, EXP_TOLERANCE, 0}, +{542, 1113559832u, 1741102728u, 1741102728u, 0, EXP_TOLERANCE, 0}, +{543, 1078359574u, 1102168308u, 1102168308u, 0, EXP_TOLERANCE, 0}, +{544, 1063112056u, 1075328834u, 1075328834u, 0, EXP_TOLERANCE, 0}, +{545, 1107012128u, 1445401767u, 1445401767u, 0, EXP_TOLERANCE, 0}, +{546, 1061909506u, 1074638830u, 1074638830u, 0, EXP_TOLERANCE, 0}, +{547, 1027921603u, 1065766186u, 1065766186u, 0, EXP_TOLERANCE, 0}, +{548, 1076752219u, 1098012128u, 1098012128u, 0, EXP_TOLERANCE, 0}, +{549, 1021430647u, 1065587646u, 1065587646u, 0, EXP_TOLERANCE, 0}, +{550, 1013529335u, 1065473484u, 1065473484u, 0, EXP_TOLERANCE, 0}, +{551, 1094132929u, 1203159396u, 1203159396u, 0, EXP_TOLERANCE, 0}, +{552, 1015879284u, 1065498941u, 1065498941u, 0, EXP_TOLERANCE, 0}, +{553, 1095821013u, 1222937523u, 1222937523u, 0, EXP_TOLERANCE, 0}, +{554, 1051548019u, 1068733358u, 1068733358u, 0, EXP_TOLERANCE, 0}, +{555, 1038345009u, 1066340557u, 1066340557u, 0, EXP_TOLERANCE, 0}, +{556, 1111212143u, 1632791232u, 1632791232u, 0, EXP_TOLERANCE, 0}, +{557, 1105553664u, 1411746926u, 1411746926u, 0, EXP_TOLERANCE, 0}, +{558, 1085166299u, 1130902555u, 1130902555u, 0, EXP_TOLERANCE, 0}, +{559, 1009111476u, 1065438546u, 1065438546u, 0, EXP_TOLERANCE, 0}, +{560, 1035296501u, 1066130000u, 1066130000u, 0, EXP_TOLERANCE, 0}, +{561, 1099936659u, 1282493540u, 1282493540u, 0, EXP_TOLERANCE, 0}, +{562, 1046117057u, 1067348269u, 1067348269u, 0, EXP_TOLERANCE, 0}, +{563, 1039949220u, 1066453293u, 1066453293u, 0, EXP_TOLERANCE, 0}, +{564, 1044713476u, 1067133350u, 1067133350u, 0, EXP_TOLERANCE, 0}, +{565, 1053631629u, 1069487322u, 1069487322u, 0, EXP_TOLERANCE, 0}, +{566, 1097055270u, 1236887207u, 1236887207u, 0, EXP_TOLERANCE, 0}, +{567, 1108662760u, 1515063328u, 1515063328u, 0, EXP_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_EXPF_H multiple inclusion protection + +// EOF expf.h diff --git a/packages/language/c/libm/current/tests/vectors/expm1f.c b/packages/language/c/libm/current/tests/vectors/expm1f.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/expm1f.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// expm1f.c +// +// Test of expm1f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/expm1f.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(expm1f_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &expm1f, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &expm1f_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("expm1f() is stable"); + } // if + else + { + CYG_TEST_FAIL("expm1f() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library expm1f() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "expm1f() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF expm1f.c diff --git a/packages/language/c/libm/current/tests/vectors/expm1f.h b/packages/language/c/libm/current/tests/vectors/expm1f.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/expm1f.h @@ -0,0 +1,2551 @@ +#ifndef CYGONCE_LIBM_EXPM1F_H +#define CYGONCE_LIBM_EXPM1F_H +//=========================================================================== +// +// expm1f.h +// +// Test vectors for testing of expm1f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/expm1f.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define EXPM1F_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t expm1f_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{1, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{2, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{3, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{4, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{5, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{6, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{7, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{8, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{9, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{10, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{11, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{12, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{13, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{14, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{15, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{16, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{17, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{18, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{19, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{20, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{21, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{22, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{23, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{24, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{25, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{26, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{27, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{28, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{29, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{30, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{31, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{32, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{33, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{34, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{35, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{36, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{37, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{38, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{39, 3212836864u, 3079358544u, 3206664871u, 0, EXPM1F_TOLERANCE, 0}, +{40, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{41, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{42, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{43, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{44, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{45, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{46, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{47, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{48, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{49, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{50, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{51, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{52, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{53, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{54, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{55, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{56, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{57, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{58, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{59, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{60, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{61, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{62, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{63, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{64, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{65, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{66, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{67, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{68, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{69, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{70, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{71, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{72, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{73, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{74, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{75, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{76, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{77, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{78, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{79, 3211998003u, 3079358544u, 3206348426u, 0, EXPM1F_TOLERANCE, 0}, +{80, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{81, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{82, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{83, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{84, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{85, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{86, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{87, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{88, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{89, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{90, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{91, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{92, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{93, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{94, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{95, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{96, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{97, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{98, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{99, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{100, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{101, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{102, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{103, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{104, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{105, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{106, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{107, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{108, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{109, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{110, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{111, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{112, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{113, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{114, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{115, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{116, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{117, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{118, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{119, 3211159142u, 3079358544u, 3206015757u, 0, EXPM1F_TOLERANCE, 0}, +{120, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{121, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{122, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{123, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{124, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{125, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{126, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{127, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{128, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{129, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{130, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{131, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{132, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{133, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{134, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{135, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{136, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{137, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{138, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{139, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{140, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{141, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{142, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{143, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{144, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{145, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{146, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{147, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{148, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{149, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{150, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{151, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{152, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{153, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{154, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{155, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{156, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{157, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{158, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{159, 3210320282u, 3079358544u, 3205666032u, 0, EXPM1F_TOLERANCE, 0}, +{160, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{161, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{162, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{163, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{164, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{165, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{166, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{167, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{168, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{169, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{170, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{171, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{172, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{173, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{174, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{175, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{176, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{177, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{178, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{179, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{180, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{181, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{182, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{183, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{184, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{185, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{186, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{187, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{188, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{189, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{190, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{191, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{192, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{193, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{194, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{195, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{196, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{197, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{198, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{199, 3209481421u, 3079358544u, 3205298375u, 0, EXPM1F_TOLERANCE, 0}, +{200, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{201, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{202, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{203, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{204, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{205, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{206, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{207, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{208, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{209, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{210, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{211, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{212, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{213, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{214, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{215, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{216, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{217, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{218, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{219, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{220, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{221, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{222, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{223, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{224, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{225, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{226, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{227, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{228, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{229, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{230, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{231, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{232, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{233, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{234, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{235, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{236, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{237, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{238, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{239, 3208642560u, 3079358544u, 3204911868u, 0, EXPM1F_TOLERANCE, 0}, +{240, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{241, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{242, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{243, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{244, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{245, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{246, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{247, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{248, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{249, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{250, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{251, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{252, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{253, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{254, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{255, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{256, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{257, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{258, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{259, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{260, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{261, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{262, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{263, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{264, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{265, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{266, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{267, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{268, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{269, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{270, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{271, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{272, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{273, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{274, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{275, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{276, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{277, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{278, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{279, 3207803699u, 3079358544u, 3204505545u, 0, EXPM1F_TOLERANCE, 0}, +{280, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{281, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{282, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{283, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{284, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{285, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{286, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{287, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{288, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{289, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{290, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{291, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{292, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{293, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{294, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{295, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{296, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{297, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{298, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{299, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{300, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{301, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{302, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{303, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{304, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{305, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{306, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{307, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{308, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{309, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{310, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{311, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{312, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{313, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{314, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{315, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{316, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{317, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{318, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{319, 3206964838u, 3079358544u, 3203708522u, 0, EXPM1F_TOLERANCE, 0}, +{320, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{321, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{322, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{323, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{324, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{325, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{326, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{327, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{328, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{329, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{330, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{331, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{332, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{333, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{334, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{335, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{336, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{337, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{338, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{339, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{340, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{341, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{342, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{343, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{344, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{345, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{346, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{347, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{348, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{349, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{350, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{351, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{352, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{353, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{354, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{355, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{356, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{357, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{358, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{359, 3206125978u, 3079358544u, 3202810410u, 0, EXPM1F_TOLERANCE, 0}, +{360, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{361, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{362, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{363, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{364, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{365, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{366, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{367, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{368, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{369, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{370, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{371, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{372, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{373, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{374, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{375, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{376, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{377, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{378, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{379, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{380, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{381, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{382, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{383, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{384, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{385, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{386, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{387, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{388, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{389, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{390, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{391, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{392, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{393, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{394, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{395, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{396, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{397, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{398, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{399, 3205287117u, 3079358544u, 3201866249u, 0, EXPM1F_TOLERANCE, 0}, +{400, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{401, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{402, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{403, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{404, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{405, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{406, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{407, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{408, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{409, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{410, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{411, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{412, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{413, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{414, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{415, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{416, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{417, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{418, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{419, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{420, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{421, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{422, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{423, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{424, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{425, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{426, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{427, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{428, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{429, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{430, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{431, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{432, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{433, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{434, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{435, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{436, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{437, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{438, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{439, 3204448256u, 3079358544u, 3200873680u, 0, EXPM1F_TOLERANCE, 0}, +{440, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{441, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{442, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{443, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{444, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{445, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{446, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{447, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{448, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{449, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{450, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{451, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{452, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{453, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{454, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{455, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{456, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{457, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{458, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{459, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{460, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{461, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{462, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{463, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{464, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{465, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{466, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{467, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{468, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{469, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{470, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{471, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{472, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{473, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{474, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{475, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{476, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{477, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{478, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{479, 3202770534u, 3079358544u, 3199830221u, 0, EXPM1F_TOLERANCE, 0}, +{480, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{481, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{482, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{483, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{484, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{485, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{486, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{487, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{488, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{489, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{490, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{491, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{492, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{493, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{494, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{495, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{496, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{497, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{498, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{499, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{500, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{501, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{502, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{503, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{504, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{505, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{506, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{507, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{508, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{509, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{510, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{511, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{512, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{513, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{514, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{515, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{516, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{517, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{518, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{519, 3201092813u, 3079358544u, 3198733264u, 0, EXPM1F_TOLERANCE, 0}, +{520, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{521, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{522, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{523, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{524, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{525, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{526, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{527, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{528, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{529, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{530, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{531, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{532, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{533, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{534, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{535, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{536, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{537, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{538, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{539, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{540, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{541, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{542, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{543, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{544, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{545, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{546, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{547, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{548, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{549, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{550, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{551, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{552, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{553, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{554, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{555, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{556, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{557, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{558, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{559, 3199415091u, 3079358544u, 3197580063u, 0, EXPM1F_TOLERANCE, 0}, +{560, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{561, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{562, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{563, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{564, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{565, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{566, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{567, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{568, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{569, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{570, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{571, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{572, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{573, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{574, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{575, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{576, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{577, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{578, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{579, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{580, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{581, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{582, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{583, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{584, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{585, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{586, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{587, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{588, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{589, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{590, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{591, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{592, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{593, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{594, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{595, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{596, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{597, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{598, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{599, 3197737370u, 3079358544u, 3196367738u, 0, EXPM1F_TOLERANCE, 0}, +{600, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{601, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{602, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{603, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{604, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{605, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{606, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{607, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{608, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{609, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{610, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{611, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{612, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{613, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{614, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{615, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{616, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{617, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{618, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{619, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{620, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{621, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{622, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{623, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{624, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{625, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{626, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{627, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{628, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{629, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{630, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{631, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{632, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{633, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{634, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{635, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{636, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{637, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{638, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{639, 3196059648u, 3079358544u, 3194126860u, 0, EXPM1F_TOLERANCE, 0}, +{640, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{641, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{642, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{643, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{644, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{645, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{646, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{647, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{648, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{649, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{650, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{651, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{652, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{653, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{654, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{655, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{656, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{657, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{658, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{659, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{660, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{661, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{662, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{663, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{664, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{665, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{666, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{667, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{668, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{669, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{670, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{671, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{672, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{673, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{674, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{675, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{676, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{677, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{678, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{679, 3192704205u, 3079358544u, 3191447205u, 0, EXPM1F_TOLERANCE, 0}, +{680, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{681, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{682, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{683, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{684, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{685, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{686, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{687, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{688, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{689, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{690, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{691, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{692, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{693, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{694, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{695, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{696, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{697, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{698, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{699, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{700, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{701, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{702, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{703, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{704, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{705, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{706, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{707, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{708, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{709, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{710, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{711, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{712, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{713, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{714, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{715, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{716, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{717, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{718, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{719, 3189348762u, 3079358544u, 3188630162u, 0, EXPM1F_TOLERANCE, 0}, +{720, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{721, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{722, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{723, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{724, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{725, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{726, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{727, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{728, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{729, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{730, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{731, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{732, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{733, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{734, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{735, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{736, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{737, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{738, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{739, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{740, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{741, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{742, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{743, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{744, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{745, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{746, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{747, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{748, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{749, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{750, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{751, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{752, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{753, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{754, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{755, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{756, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{757, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{758, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{759, 3184315597u, 3079358544u, 3183666330u, 0, EXPM1F_TOLERANCE, 0}, +{760, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{761, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{762, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{763, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{764, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{765, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{766, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{767, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{768, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{769, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{770, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{771, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{772, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{773, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{774, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{775, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{776, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{777, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{778, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{779, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{780, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{781, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{782, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{783, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{784, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{785, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{786, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{787, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{788, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{789, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{790, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{791, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{792, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{793, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{794, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{795, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{796, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{797, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{798, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{799, 3175926989u, 3079358544u, 3175596968u, 0, EXPM1F_TOLERANCE, 0}, +{800, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{801, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{802, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{803, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{804, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{805, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{806, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{807, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{808, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{809, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{810, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{811, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{812, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{813, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{814, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{815, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{816, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{817, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{818, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{819, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{820, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{821, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{822, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{823, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{824, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{825, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{826, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{827, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{828, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{829, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{830, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{831, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{832, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{833, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{834, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{835, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{836, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{837, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{838, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{839, 632815616u, 3079358544u, 632815616u, 0, EXPM1F_TOLERANCE, 0}, +{840, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{841, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{842, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{843, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{844, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{845, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{846, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{847, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{848, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{849, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{850, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{851, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{852, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{853, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{854, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{855, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{856, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{857, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{858, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{859, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{860, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{861, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{862, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{863, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{864, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{865, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{866, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{867, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{868, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{869, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{870, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{871, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{872, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{873, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{874, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{875, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{876, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{877, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{878, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{879, 1028443341u, 3079358544u, 1028784548u, 0, EXPM1F_TOLERANCE, 0}, +{880, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{881, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{882, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{883, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{884, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{885, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{886, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{887, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{888, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{889, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{890, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{891, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{892, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{893, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{894, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{895, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{896, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{897, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{898, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{899, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{900, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{901, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{902, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{903, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{904, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{905, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{906, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{907, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{908, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{909, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{910, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{911, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{912, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{913, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{914, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{915, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{916, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{917, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{918, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{919, 1036831949u, 3079358544u, 1037525978u, 0, EXPM1F_TOLERANCE, 0}, +{920, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{921, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{922, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{923, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{924, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{925, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{926, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{927, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{928, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{929, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{930, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{931, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{932, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{933, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{934, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{935, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{936, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{937, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{938, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{939, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{940, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{941, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{942, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{943, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{944, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{945, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{946, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{947, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{948, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{949, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{950, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{951, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{952, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{953, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{954, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{955, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{956, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{957, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{958, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{959, 1041865114u, 3079358544u, 1042659297u, 0, EXPM1F_TOLERANCE, 0}, +{960, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{961, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{962, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{963, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{964, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{965, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{966, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{967, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{968, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{969, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{970, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{971, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{972, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{973, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{974, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{975, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{976, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{977, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{978, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{979, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{980, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{981, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{982, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{983, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{984, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{985, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{986, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{987, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{988, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{989, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{990, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{991, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{992, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{993, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{994, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{995, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{996, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{997, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{998, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{999, 1045220557u, 3079358544u, 1046656872u, 0, EXPM1F_TOLERANCE, 0}, +{1000, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1001, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1002, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1003, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1004, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1005, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1006, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1007, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1008, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1009, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1010, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1011, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1012, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1013, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1014, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1015, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1016, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1017, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1018, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1019, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1020, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1021, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1022, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1023, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1024, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1025, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1026, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1027, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1028, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1029, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1030, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1031, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1032, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1033, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1034, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1035, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1036, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1037, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1038, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1039, 1048576000u, 3079358544u, 1049717704u, 0, EXPM1F_TOLERANCE, 0}, +{1040, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1041, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1042, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1043, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1044, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1045, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1046, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1047, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1048, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1049, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1050, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1051, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1052, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1053, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1054, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1055, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1056, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1057, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1058, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1059, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1060, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1061, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1062, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1063, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1064, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1065, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1066, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1067, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1068, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1069, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1070, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1071, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1072, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1073, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1074, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1075, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1076, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1077, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1078, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1079, 1050253722u, 3079358544u, 1051926706u, 0, EXPM1F_TOLERANCE, 0}, +{1080, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1081, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1082, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1083, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1084, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1085, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1086, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1087, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1088, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1089, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1090, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1091, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1092, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1093, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1094, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1095, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1096, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1097, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1098, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1099, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1100, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1101, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1102, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1103, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1104, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1105, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1106, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1107, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1108, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1109, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1110, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1111, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1112, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1113, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1114, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1115, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1116, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1117, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1118, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1119, 1051931443u, 3079358544u, 1054248965u, 0, EXPM1F_TOLERANCE, 0}, +{1120, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1121, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1122, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1123, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1124, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1125, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1126, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1127, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1128, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1129, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1130, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1131, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1132, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1133, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1134, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1135, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1136, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1137, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1138, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1139, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1140, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1141, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1142, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1143, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1144, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1145, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1146, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1147, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1148, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1149, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1150, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1151, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1152, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1153, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1154, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1155, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1156, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1157, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1158, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1159, 1053609165u, 3079358544u, 1056690291u, 0, EXPM1F_TOLERANCE, 0}, +{1160, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1161, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1162, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1163, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1164, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1165, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1166, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1167, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1168, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1169, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1170, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1171, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1172, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1173, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1174, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1175, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1176, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1177, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1178, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1179, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1180, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1181, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1182, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1183, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1184, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1185, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1186, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1187, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1188, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1189, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1190, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1191, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1192, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1193, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1194, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1195, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1196, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1197, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1198, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1199, 1055286886u, 3079358544u, 1058110696u, 0, EXPM1F_TOLERANCE, 0}, +{1200, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1201, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1202, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1203, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1204, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1205, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1206, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1207, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1208, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1209, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1210, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1211, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1212, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1213, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1214, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1215, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1216, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1217, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1218, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1219, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1220, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1221, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1222, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1223, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1224, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1225, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1226, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1227, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1228, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1229, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1230, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1231, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1232, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1233, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1234, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1235, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1236, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1237, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1238, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1239, 1056964608u, 3079358544u, 1059459737u, 0, EXPM1F_TOLERANCE, 0}, +{1240, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1241, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1242, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1243, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1244, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1245, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1246, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1247, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1248, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1249, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1250, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1251, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1252, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1253, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1254, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1255, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1256, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1257, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1258, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1259, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1260, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1261, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1262, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1263, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1264, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1265, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1266, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1267, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1268, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1269, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1270, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1271, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1272, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1273, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1274, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1275, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1276, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1277, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1278, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1279, 1057803469u, 3079358544u, 1060877945u, 0, EXPM1F_TOLERANCE, 0}, +{1280, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1281, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1282, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1283, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1284, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1285, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1286, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1287, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1288, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1289, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1290, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1291, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1292, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1293, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1294, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1295, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1296, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1297, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1298, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1299, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1300, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1301, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1302, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1303, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1304, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1305, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1306, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1307, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1308, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1309, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1310, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1311, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1312, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1313, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1314, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1315, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1316, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1317, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1318, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1319, 1058642330u, 3079358544u, 1062368865u, 0, EXPM1F_TOLERANCE, 0}, +{1320, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1321, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1322, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1323, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1324, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1325, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1326, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1327, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1328, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1329, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1330, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1331, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1332, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1333, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1334, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1335, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1336, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1337, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1338, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1339, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1340, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1341, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1342, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1343, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1344, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1345, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1346, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1347, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1348, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1349, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1350, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1351, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1352, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1353, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1354, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1355, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1356, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1357, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1358, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1359, 1059481190u, 3079358544u, 1063936225u, 0, EXPM1F_TOLERANCE, 0}, +{1360, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1361, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1362, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1363, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1364, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1365, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1366, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1367, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1368, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1369, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1370, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1371, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1372, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1373, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1374, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1375, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1376, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1377, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1378, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1379, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1380, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1381, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1382, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1383, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1384, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1385, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1386, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1387, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1388, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1389, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1390, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1391, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1392, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1393, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1394, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1395, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1396, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1397, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1398, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1399, 1060320051u, 3079358544u, 1065468582u, 0, EXPM1F_TOLERANCE, 0}, +{1400, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1401, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1402, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1403, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1404, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1405, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1406, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1407, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1408, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1409, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1410, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1411, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1412, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1413, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1414, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1415, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1416, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1417, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1418, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1419, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1420, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1421, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1422, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1423, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1424, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1425, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1426, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1427, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1428, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1429, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1430, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1431, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1432, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1433, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1434, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1435, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1436, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1437, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1438, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1439, 1061158912u, 3079358544u, 1066334683u, 0, EXPM1F_TOLERANCE, 0}, +{1440, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1441, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1442, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1443, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1444, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1445, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1446, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1447, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1448, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1449, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1450, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1451, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1452, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1453, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1454, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1455, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1456, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1457, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1458, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1459, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1460, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1461, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1462, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1463, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1464, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1465, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1466, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1467, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1468, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1469, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1470, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1471, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1472, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1473, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1474, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1475, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1476, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1477, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1478, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1479, 1061997773u, 3079358544u, 1067245191u, 0, EXPM1F_TOLERANCE, 0}, +{1480, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1481, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1482, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1483, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1484, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1485, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1486, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1487, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1488, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1489, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1490, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1491, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1492, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1493, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1494, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1495, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1496, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1497, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1498, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1499, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1500, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1501, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1502, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1503, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1504, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1505, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1506, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1507, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1508, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1509, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1510, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1511, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1512, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1513, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1514, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1515, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1516, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1517, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1518, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1519, 1062836634u, 3079358544u, 1068202381u, 0, EXPM1F_TOLERANCE, 0}, +{1520, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1521, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1522, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1523, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1524, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1525, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1526, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1527, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1528, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1529, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1530, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1531, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1532, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1533, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1534, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1535, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1536, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1537, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1538, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1539, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1540, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1541, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1542, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1543, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1544, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1545, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1546, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1547, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1548, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1549, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1550, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1551, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1552, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1553, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1554, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1555, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1556, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1557, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1558, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1559, 1063675494u, 3079358544u, 1069208646u, 0, EXPM1F_TOLERANCE, 0}, +{1560, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1561, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1562, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1563, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1564, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1565, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1566, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1567, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1568, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1569, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1570, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1571, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1572, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1573, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1574, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1575, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1576, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1577, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1578, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1579, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1580, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1581, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1582, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1583, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1584, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1585, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1586, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1587, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1588, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1589, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1590, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1591, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1592, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1593, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1594, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1595, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1596, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1597, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1598, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1599, 1064514355u, 3079358544u, 1070266504u, 0, EXPM1F_TOLERANCE, 0}, +{1600, 1107800421u, 3079358544u, 1475721455u, 0, EXPM1F_TOLERANCE, 0}, +{1601, 3196650934u, 3079358544u, 3195039781u, 0, EXPM1F_TOLERANCE, 0}, +{1602, 3368700125u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1603, 1224242132u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1604, 3221027117u, 3079358544u, 3210511986u, 0, EXPM1F_TOLERANCE, 0}, +{1605, 1198712763u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1606, 3159309973u, 3079358544u, 3159224434u, 0, EXPM1F_TOLERANCE, 0}, +{1607, 954173073u, 3079358544u, 954173854u, 0, EXPM1F_TOLERANCE, 0}, +{1608, 3090780435u, 3079358544u, 3090780166u, 0, EXPM1F_TOLERANCE, 0}, +{1609, 966554515u, 3079358544u, 966556045u, 0, EXPM1F_TOLERANCE, 0}, +{1610, 1312607135u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1611, 1166191415u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1612, 3111900019u, 3079358544u, 3111898037u, 0, EXPM1F_TOLERANCE, 0}, +{1613, 1234419246u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1614, 1302107128u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1615, 1052801068u, 3079358544u, 1055499152u, 0, EXPM1F_TOLERANCE, 0}, +{1616, 1060849628u, 3079358544u, 1066010305u, 0, EXPM1F_TOLERANCE, 0}, +{1617, 3484320003u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1618, 3181522772u, 3079358544u, 3181112802u, 0, EXPM1F_TOLERANCE, 0}, +{1619, 882596369u, 3079358544u, 882596370u, 0, EXPM1F_TOLERANCE, 0}, +{1620, 1167223673u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1621, 968192794u, 3079358544u, 968194852u, 0, EXPM1F_TOLERANCE, 0}, +{1622, 3122346862u, 3079358544u, 3122343850u, 0, EXPM1F_TOLERANCE, 0}, +{1623, 1052361612u, 3079358544u, 1054863334u, 0, EXPM1F_TOLERANCE, 0}, +{1624, 906701409u, 3079358544u, 906701418u, 0, EXPM1F_TOLERANCE, 0}, +{1625, 3471653172u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1626, 3231467496u, 3079358544u, 3212709888u, 0, EXPM1F_TOLERANCE, 0}, +{1627, 1341514497u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1628, 1272351391u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1629, 3319724992u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1630, 917622040u, 3079358544u, 917622071u, 0, EXPM1F_TOLERANCE, 0}, +{1631, 940236348u, 3079358544u, 940236499u, 0, EXPM1F_TOLERANCE, 0}, +{1632, 3251541546u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1633, 3099843889u, 3079358544u, 3099843290u, 0, EXPM1F_TOLERANCE, 0}, +{1634, 3110358400u, 3079358544u, 3110356771u, 0, EXPM1F_TOLERANCE, 0}, +{1635, 3371863479u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1636, 3204069187u, 3079358544u, 3200642460u, 0, EXPM1F_TOLERANCE, 0}, +{1637, 1306460502u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1638, 1197542187u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1639, 922888249u, 3079358544u, 922888282u, 0, EXPM1F_TOLERANCE, 0}, +{1640, 1184239996u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1641, 1252490238u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1642, 1001673627u, 3079358544u, 1001706204u, 0, EXPM1F_TOLERANCE, 0}, +{1643, 976098044u, 3079358544u, 976101833u, 0, EXPM1F_TOLERANCE, 0}, +{1644, 941796645u, 3079358544u, 941796852u, 0, EXPM1F_TOLERANCE, 0}, +{1645, 3287199470u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1646, 893184329u, 3079358544u, 893184333u, 0, EXPM1F_TOLERANCE, 0}, +{1647, 1143233714u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1648, 1139941253u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1649, 3143717025u, 3079358544u, 3143691671u, 0, EXPM1F_TOLERANCE, 0}, +{1650, 3048866608u, 3079358544u, 3048866600u, 0, EXPM1F_TOLERANCE, 0}, +{1651, 3240298487u, 3079358544u, 3212836234u, 0, EXPM1F_TOLERANCE, 0}, +{1652, 1288902137u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1653, 1333134799u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1654, 1187847971u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1655, 1038851706u, 3079358544u, 1039775034u, 0, EXPM1F_TOLERANCE, 0}, +{1656, 3329354473u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1657, 3077218579u, 3079358544u, 3077218471u, 0, EXPM1F_TOLERANCE, 0}, +{1658, 1309289088u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1659, 3444653659u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1660, 3405585402u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1661, 3106647724u, 3079358544u, 3106646803u, 0, EXPM1F_TOLERANCE, 0}, +{1662, 1106778573u, 3079358544u, 1440090537u, 0, EXPM1F_TOLERANCE, 0}, +{1663, 1140567947u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1664, 1238569473u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1665, 3154871957u, 3079358544u, 3154833132u, 0, EXPM1F_TOLERANCE, 0}, +{1666, 1261071232u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1667, 1175011025u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1668, 1082692850u, 3079358544u, 1116522639u, 0, EXPM1F_TOLERANCE, 0}, +{1669, 974547519u, 3079358544u, 974550348u, 0, EXPM1F_TOLERANCE, 0}, +{1670, 3058097085u, 3079358544u, 3058097066u, 0, EXPM1F_TOLERANCE, 0}, +{1671, 3107252546u, 3079358544u, 3107251523u, 0, EXPM1F_TOLERANCE, 0}, +{1672, 3096032662u, 3079358544u, 3096032366u, 0, EXPM1F_TOLERANCE, 0}, +{1673, 3197942144u, 3079358544u, 3196518976u, 0, EXPM1F_TOLERANCE, 0}, +{1674, 3403348556u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1675, 3182301130u, 3079358544u, 3181829817u, 0, EXPM1F_TOLERANCE, 0}, +{1676, 1136411063u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1677, 3239231622u, 3079358544u, 3212835121u, 0, EXPM1F_TOLERANCE, 0}, +{1678, 3340615780u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1679, 998567360u, 3079358544u, 998585054u, 0, EXPM1F_TOLERANCE, 0}, +{1680, 3417964312u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1681, 3109481038u, 3079358544u, 3109479595u, 0, EXPM1F_TOLERANCE, 0}, +{1682, 1148867223u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1683, 989687421u, 3079358544u, 989703488u, 0, EXPM1F_TOLERANCE, 0}, +{1684, 1152956913u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1685, 892922651u, 3079358544u, 892922655u, 0, EXPM1F_TOLERANCE, 0}, +{1686, 1109627625u, 3079358544u, 1560243939u, 0, EXPM1F_TOLERANCE, 0}, +{1687, 1307091856u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1688, 1077234132u, 3079358544u, 1098897272u, 0, EXPM1F_TOLERANCE, 0}, +{1689, 1142167709u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1690, 3426232834u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1691, 3368566779u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1692, 3030724760u, 3079358544u, 3030724758u, 0, EXPM1F_TOLERANCE, 0}, +{1693, 1138741813u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1694, 982950501u, 3079358544u, 982956176u, 0, EXPM1F_TOLERANCE, 0}, +{1695, 1142981585u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1696, 3347165962u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1697, 1009535440u, 3079358544u, 1009595015u, 0, EXPM1F_TOLERANCE, 0}, +{1698, 3103736980u, 3079358544u, 3103735962u, 0, EXPM1F_TOLERANCE, 0}, +{1699, 3126820946u, 3079358544u, 3126814704u, 0, EXPM1F_TOLERANCE, 0}, +{1700, 3473956030u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1701, 3349098349u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1702, 3152729489u, 3079358544u, 3152674473u, 0, EXPM1F_TOLERANCE, 0}, +{1703, 945568720u, 3079358544u, 945569099u, 0, EXPM1F_TOLERANCE, 0}, +{1704, 3345489836u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1705, 940893161u, 3079358544u, 940893334u, 0, EXPM1F_TOLERANCE, 0}, +{1706, 976791751u, 3079358544u, 976796014u, 0, EXPM1F_TOLERANCE, 0}, +{1707, 1004442355u, 3079358544u, 1004492007u, 0, EXPM1F_TOLERANCE, 0}, +{1708, 1108485380u, 3079358544u, 1506899287u, 0, EXPM1F_TOLERANCE, 0}, +{1709, 1061834641u, 3079358544u, 1067064542u, 0, EXPM1F_TOLERANCE, 0}, +{1710, 3381268392u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1711, 1087189715u, 3079358544u, 1142429899u, 0, EXPM1F_TOLERANCE, 0}, +{1712, 3212952285u, 3079358544u, 3206749212u, 0, EXPM1F_TOLERANCE, 0}, +{1713, 1000611335u, 3079358544u, 1000638315u, 0, EXPM1F_TOLERANCE, 0}, +{1714, 3466188568u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1715, 3072456205u, 3079358544u, 3072456154u, 0, EXPM1F_TOLERANCE, 0}, +{1716, 3319315516u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1717, 935938416u, 3079358544u, 935938574u, 0, EXPM1F_TOLERANCE, 0}, +{1718, 3212614372u, 3079358544u, 3206582476u, 0, EXPM1F_TOLERANCE, 0}, +{1719, 1315030230u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1720, 1134593658u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1721, 977281449u, 3079358544u, 977286064u, 0, EXPM1F_TOLERANCE, 0}, +{1722, 1086198791u, 3079358544u, 1136489724u, 0, EXPM1F_TOLERANCE, 0}, +{1723, 1255152035u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1724, 1135271264u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1725, 1094190727u, 3079358544u, 1203837979u, 0, EXPM1F_TOLERANCE, 0}, +{1726, 1294665325u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1727, 1036608591u, 3079358544u, 1037279334u, 0, EXPM1F_TOLERANCE, 0}, +{1728, 3229998064u, 3079358544u, 3212580992u, 0, EXPM1F_TOLERANCE, 0}, +{1729, 3439134022u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1730, 3073083133u, 3079358544u, 3073083076u, 0, EXPM1F_TOLERANCE, 0}, +{1731, 1325668223u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1732, 1092037607u, 3079358544u, 1179005485u, 0, EXPM1F_TOLERANCE, 0}, +{1733, 3316278408u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1734, 3295436768u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1735, 1151984049u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1736, 1129287043u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1737, 1243664530u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1738, 950829092u, 3079358544u, 950829557u, 0, EXPM1F_TOLERANCE, 0}, +{1739, 1115471979u, 3079358544u, 1829706150u, 0, EXPM1F_TOLERANCE, 0}, +{1740, 3351092088u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1741, 3424479544u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1742, 3241193975u, 3079358544u, 3212836596u, 0, EXPM1F_TOLERANCE, 0}, +{1743, 1030934236u, 3079358544u, 1031415341u, 0, EXPM1F_TOLERANCE, 0}, +{1744, 3131791114u, 3079358544u, 3131783778u, 0, EXPM1F_TOLERANCE, 0}, +{1745, 1025254314u, 3079358544u, 1025451852u, 0, EXPM1F_TOLERANCE, 0}, +{1746, 1110545760u, 3079358544u, 1602518190u, 0, EXPM1F_TOLERANCE, 0}, +{1747, 3180213739u, 3079358544u, 3179897519u, 0, EXPM1F_TOLERANCE, 0}, +{1748, 3361976590u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1749, 881280146u, 3079358544u, 881280147u, 0, EXPM1F_TOLERANCE, 0}, +{1750, 1304154705u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1751, 3264443610u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1752, 3374550627u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1753, 899599265u, 3079358544u, 899599271u, 0, EXPM1F_TOLERANCE, 0}, +{1754, 1268194719u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1755, 1133420220u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1756, 1161858787u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1757, 3184462258u, 3079358544u, 3183798962u, 0, EXPM1F_TOLERANCE, 0}, +{1758, 3295996963u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1759, 1270887389u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1760, 3325193181u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1761, 925657343u, 3079358544u, 925657401u, 0, EXPM1F_TOLERANCE, 0}, +{1762, 3115275450u, 3079358544u, 3115273529u, 0, EXPM1F_TOLERANCE, 0}, +{1763, 3116607482u, 3079358544u, 3116605090u, 0, EXPM1F_TOLERANCE, 0}, +{1764, 3187892415u, 3079358544u, 3187054905u, 0, EXPM1F_TOLERANCE, 0}, +{1765, 1189120494u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1766, 889030794u, 3079358544u, 889030798u, 0, EXPM1F_TOLERANCE, 0}, +{1767, 1323529208u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1768, 3465768388u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1769, 3426099899u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1770, 3224857113u, 3079358544u, 3211881659u, 0, EXPM1F_TOLERANCE, 0}, +{1771, 1065798296u, 3079358544u, 1072621125u, 0, EXPM1F_TOLERANCE, 0}, +{1772, 3328989444u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1773, 3357819026u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1774, 1273397670u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1775, 3424831780u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1776, 1257596246u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1777, 1051773536u, 3079358544u, 1054025411u, 0, EXPM1F_TOLERANCE, 0}, +{1778, 3294752507u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1779, 3424848725u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1780, 1090870906u, 3079358544u, 1166165113u, 0, EXPM1F_TOLERANCE, 0}, +{1781, 1227582289u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1782, 1272325814u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1783, 3359508271u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1784, 1137854355u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1785, 3440773058u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1786, 3101598400u, 3079358544u, 3101597626u, 0, EXPM1F_TOLERANCE, 0}, +{1787, 3451216836u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1788, 3437062994u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1789, 1131196082u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1790, 3177294154u, 3079358544u, 3176894149u, 0, EXPM1F_TOLERANCE, 0}, +{1791, 3258097678u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1792, 3460915348u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1793, 3303035472u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1794, 1053698677u, 3079358544u, 1056824005u, 0, EXPM1F_TOLERANCE, 0}, +{1795, 3396166221u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1796, 3037541131u, 3079358544u, 3037541129u, 0, EXPM1F_TOLERANCE, 0}, +{1797, 3458934263u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1798, 1065761827u, 3079358544u, 1072516817u, 0, EXPM1F_TOLERANCE, 0}, +{1799, 3025843188u, 3079358544u, 3025843187u, 0, EXPM1F_TOLERANCE, 0}, +{1800, 926665223u, 3079358544u, 926665292u, 0, EXPM1F_TOLERANCE, 0}, +{1801, 1199816046u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1802, 3333779015u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1803, 948398145u, 3079358544u, 948398431u, 0, EXPM1F_TOLERANCE, 0}, +{1804, 3054021468u, 3079358544u, 3054021459u, 0, EXPM1F_TOLERANCE, 0}, +{1805, 1080781593u, 3079358544u, 1109022074u, 0, EXPM1F_TOLERANCE, 0}, +{1806, 3164749613u, 3079358544u, 3164645009u, 0, EXPM1F_TOLERANCE, 0}, +{1807, 3235326590u, 3079358544u, 3212816701u, 0, EXPM1F_TOLERANCE, 0}, +{1808, 3118883815u, 3079358544u, 3118880498u, 0, EXPM1F_TOLERANCE, 0}, +{1809, 965378004u, 3079358544u, 965379203u, 0, EXPM1F_TOLERANCE, 0}, +{1810, 3226990408u, 3079358544u, 3212262474u, 0, EXPM1F_TOLERANCE, 0}, +{1811, 3117098218u, 3079358544u, 3117095639u, 0, EXPM1F_TOLERANCE, 0}, +{1812, 1283624229u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1813, 970649315u, 3079358544u, 970652311u, 0, EXPM1F_TOLERANCE, 0}, +{1814, 959776291u, 3079358544u, 959777315u, 0, EXPM1F_TOLERANCE, 0}, +{1815, 3341117305u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1816, 1270734970u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1817, 3454816067u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1818, 917206623u, 3079358544u, 917206652u, 0, EXPM1F_TOLERANCE, 0}, +{1819, 1106502045u, 3079358544u, 1434230090u, 0, EXPM1F_TOLERANCE, 0}, +{1820, 1157598381u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1821, 3335234513u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1822, 1279489061u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1823, 3157416480u, 3079358544u, 3157353091u, 0, EXPM1F_TOLERANCE, 0}, +{1824, 3143920719u, 3079358544u, 3143894661u, 0, EXPM1F_TOLERANCE, 0}, +{1825, 1233171235u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1826, 1148920078u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1827, 3064988156u, 3079358544u, 3064988126u, 0, EXPM1F_TOLERANCE, 0}, +{1828, 3083619260u, 3079358544u, 3083619097u, 0, EXPM1F_TOLERANCE, 0}, +{1829, 1109198803u, 3079358544u, 1539769939u, 0, EXPM1F_TOLERANCE, 0}, +{1830, 3219949483u, 3079358544u, 3210193291u, 0, EXPM1F_TOLERANCE, 0}, +{1831, 3361149474u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1832, 1207502108u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1833, 1000014431u, 3079358544u, 1000038497u, 0, EXPM1F_TOLERANCE, 0}, +{1834, 3161756316u, 3079358544u, 3161637277u, 0, EXPM1F_TOLERANCE, 0}, +{1835, 3160728744u, 3079358544u, 3160624446u, 0, EXPM1F_TOLERANCE, 0}, +{1836, 1234530539u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1837, 1017843965u, 3079358544u, 1017961839u, 0, EXPM1F_TOLERANCE, 0}, +{1838, 951862956u, 3079358544u, 951863510u, 0, EXPM1F_TOLERANCE, 0}, +{1839, 3306328852u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1840, 1291910469u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1841, 3027442905u, 3079358544u, 3027442903u, 0, EXPM1F_TOLERANCE, 0}, +{1842, 1131927531u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1843, 3449879391u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1844, 970094304u, 3079358544u, 970097073u, 0, EXPM1F_TOLERANCE, 0}, +{1845, 1125551064u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1846, 3427296372u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1847, 1198917460u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1848, 3201603336u, 3079358544u, 3199072887u, 0, EXPM1F_TOLERANCE, 0}, +{1849, 3114686212u, 3079358544u, 3114684483u, 0, EXPM1F_TOLERANCE, 0}, +{1850, 921940707u, 3079358544u, 921940765u, 0, EXPM1F_TOLERANCE, 0}, +{1851, 1091906532u, 3079358544u, 1177479087u, 0, EXPM1F_TOLERANCE, 0}, +{1852, 3393557778u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1853, 1276853215u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1854, 3462778440u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1855, 3360170117u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1856, 3224245428u, 3079358544u, 3211731684u, 0, EXPM1F_TOLERANCE, 0}, +{1857, 1120124467u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1858, 1064364381u, 3079358544u, 1070073474u, 0, EXPM1F_TOLERANCE, 0}, +{1859, 1268744779u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1860, 1165195428u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1861, 3044092739u, 3079358544u, 3044092732u, 0, EXPM1F_TOLERANCE, 0}, +{1862, 3149469534u, 3079358544u, 3149435340u, 0, EXPM1F_TOLERANCE, 0}, +{1863, 3247790039u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1864, 3215244648u, 3079358544u, 3208204851u, 0, EXPM1F_TOLERANCE, 0}, +{1865, 3095275931u, 3079358544u, 3095275426u, 0, EXPM1F_TOLERANCE, 0}, +{1866, 3059688264u, 3079358544u, 3059688240u, 0, EXPM1F_TOLERANCE, 0}, +{1867, 1212717473u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1868, 3275973009u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1869, 3028857014u, 3079358544u, 3028857013u, 0, EXPM1F_TOLERANCE, 0}, +{1870, 3391162308u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1871, 1044867873u, 3079358544u, 1046227233u, 0, EXPM1F_TOLERANCE, 0}, +{1872, 1089986803u, 3079358544u, 1158708386u, 0, EXPM1F_TOLERANCE, 0}, +{1873, 1296314700u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1874, 1251462432u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1875, 3485236902u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1876, 3262169538u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1877, 3080852256u, 3079358544u, 3080852153u, 0, EXPM1F_TOLERANCE, 0}, +{1878, 1022211242u, 3079358544u, 1022439460u, 0, EXPM1F_TOLERANCE, 0}, +{1879, 884661176u, 3079358544u, 884661178u, 0, EXPM1F_TOLERANCE, 0}, +{1880, 3071422941u, 3079358544u, 3071422899u, 0, EXPM1F_TOLERANCE, 0}, +{1881, 989762529u, 3079358544u, 989778742u, 0, EXPM1F_TOLERANCE, 0}, +{1882, 1295475718u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1883, 1002632518u, 3079358544u, 1002670602u, 0, EXPM1F_TOLERANCE, 0}, +{1884, 3404372005u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1885, 3158912530u, 3079358544u, 3158831914u, 0, EXPM1F_TOLERANCE, 0}, +{1886, 1125800069u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1887, 3138037576u, 3079358544u, 3138027970u, 0, EXPM1F_TOLERANCE, 0}, +{1888, 3108384823u, 3079358544u, 3108383596u, 0, EXPM1F_TOLERANCE, 0}, +{1889, 999985470u, 3079358544u, 1000009399u, 0, EXPM1F_TOLERANCE, 0}, +{1890, 1189421739u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1891, 3075182644u, 3079358544u, 3075182563u, 0, EXPM1F_TOLERANCE, 0}, +{1892, 3028099649u, 3079358544u, 3028099647u, 0, EXPM1F_TOLERANCE, 0}, +{1893, 3132541814u, 3079358544u, 3132533464u, 0, EXPM1F_TOLERANCE, 0}, +{1894, 1164046161u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1895, 1292596266u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1896, 3469748379u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1897, 1314644642u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1898, 3399813173u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1899, 948775569u, 3079358544u, 948775880u, 0, EXPM1F_TOLERANCE, 0}, +{1900, 1034611395u, 3079358544u, 1035092075u, 0, EXPM1F_TOLERANCE, 0}, +{1901, 3489122735u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1902, 1181604787u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1903, 3059042077u, 3079358544u, 3059042055u, 0, EXPM1F_TOLERANCE, 0}, +{1904, 1043691622u, 3079358544u, 1044810539u, 0, EXPM1F_TOLERANCE, 0}, +{1905, 1314588083u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1906, 3141533334u, 3079358544u, 3141514921u, 0, EXPM1F_TOLERANCE, 0}, +{1907, 3157534378u, 3079358544u, 3157469706u, 0, EXPM1F_TOLERANCE, 0}, +{1908, 3400949680u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1909, 3365581801u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1910, 1110424755u, 3079358544u, 1596391869u, 0, EXPM1F_TOLERANCE, 0}, +{1911, 3189917167u, 3079358544u, 3189117326u, 0, EXPM1F_TOLERANCE, 0}, +{1912, 969804941u, 3079358544u, 969807595u, 0, EXPM1F_TOLERANCE, 0}, +{1913, 1139120919u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1914, 934308144u, 3079358544u, 934308266u, 0, EXPM1F_TOLERANCE, 0}, +{1915, 1220524226u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1916, 3162548604u, 3079358544u, 3162460251u, 0, EXPM1F_TOLERANCE, 0}, +{1917, 3382391700u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1918, 1156767533u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1919, 3079222483u, 3079358544u, 3079222409u, 0, EXPM1F_TOLERANCE, 0}, +{1920, 994934087u, 3079358544u, 994955222u, 0, EXPM1F_TOLERANCE, 0}, +{1921, 3185240099u, 3079358544u, 3184499979u, 0, EXPM1F_TOLERANCE, 0}, +{1922, 3479873563u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1923, 3424264117u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1924, 3228365887u, 3079358544u, 3212423070u, 0, EXPM1F_TOLERANCE, 0}, +{1925, 1035909900u, 3079358544u, 1036510448u, 0, EXPM1F_TOLERANCE, 0}, +{1926, 3024951184u, 3079358544u, 3024951183u, 0, EXPM1F_TOLERANCE, 0}, +{1927, 1212129651u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1928, 3125775254u, 3079358544u, 3125769871u, 0, EXPM1F_TOLERANCE, 0}, +{1929, 1037464105u, 3079358544u, 1038226266u, 0, EXPM1F_TOLERANCE, 0}, +{1930, 1311706596u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1931, 918212457u, 3079358544u, 918212491u, 0, EXPM1F_TOLERANCE, 0}, +{1932, 1337315179u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1933, 1131358407u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1934, 1156517523u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1935, 3210802820u, 3079358544u, 3205869338u, 0, EXPM1F_TOLERANCE, 0}, +{1936, 3337499209u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1937, 3468429030u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1938, 3253515800u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1939, 3055299953u, 3079358544u, 3055299941u, 0, EXPM1F_TOLERANCE, 0}, +{1940, 959956547u, 3079358544u, 959957602u, 0, EXPM1F_TOLERANCE, 0}, +{1941, 3425290480u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1942, 1039917375u, 3079358544u, 1040581395u, 0, EXPM1F_TOLERANCE, 0}, +{1943, 3220979495u, 3079358544u, 3210498750u, 0, EXPM1F_TOLERANCE, 0}, +{1944, 1311016004u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1945, 1128016396u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1946, 3210335769u, 3079358544u, 3205672648u, 0, EXPM1F_TOLERANCE, 0}, +{1947, 3022705759u, 3079358544u, 3022705758u, 0, EXPM1F_TOLERANCE, 0}, +{1948, 1206054701u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1949, 3144504834u, 3079358544u, 3144476704u, 0, EXPM1F_TOLERANCE, 0}, +{1950, 1213609983u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1951, 1246902946u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1952, 995850843u, 3079358544u, 995874955u, 0, EXPM1F_TOLERANCE, 0}, +{1953, 3362082828u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1954, 1029480631u, 3079358544u, 1029877131u, 0, EXPM1F_TOLERANCE, 0}, +{1955, 3153568584u, 3079358544u, 3153507414u, 0, EXPM1F_TOLERANCE, 0}, +{1956, 3384988527u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1957, 1317696241u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1958, 3235395924u, 3079358544u, 3212817357u, 0, EXPM1F_TOLERANCE, 0}, +{1959, 3341877624u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1960, 1228636133u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1961, 3161654634u, 3079358544u, 3161537097u, 0, EXPM1F_TOLERANCE, 0}, +{1962, 3162655243u, 3079358544u, 3162587700u, 0, EXPM1F_TOLERANCE, 0}, +{1963, 1207246237u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1964, 1165476654u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1965, 1215278023u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1966, 1017239798u, 3079358544u, 1017345270u, 0, EXPM1F_TOLERANCE, 0}, +{1967, 1149651309u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1968, 1111943722u, 3079358544u, 1666598447u, 0, EXPM1F_TOLERANCE, 0}, +{1969, 1189849849u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1970, 3204848496u, 3079358544u, 3201353450u, 0, EXPM1F_TOLERANCE, 0}, +{1971, 1249758327u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1972, 3092982276u, 3079358544u, 3092981901u, 0, EXPM1F_TOLERANCE, 0}, +{1973, 1168098747u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1974, 892549317u, 3079358544u, 892549321u, 0, EXPM1F_TOLERANCE, 0}, +{1975, 3301009024u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1976, 3233089227u, 3079358544u, 3212778266u, 0, EXPM1F_TOLERANCE, 0}, +{1977, 3218245284u, 3079358544u, 3209597789u, 0, EXPM1F_TOLERANCE, 0}, +{1978, 3215981890u, 3079358544u, 3208594564u, 0, EXPM1F_TOLERANCE, 0}, +{1979, 1266687209u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1980, 3487959775u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1981, 943645710u, 3079358544u, 943645995u, 0, EXPM1F_TOLERANCE, 0}, +{1982, 3345065699u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1983, 935847271u, 3079358544u, 935847427u, 0, EXPM1F_TOLERANCE, 0}, +{1984, 3410336089u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1985, 3082940740u, 3079358544u, 3082940593u, 0, EXPM1F_TOLERANCE, 0}, +{1986, 1141063391u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1987, 3059263153u, 3079358544u, 3059263130u, 0, EXPM1F_TOLERANCE, 0}, +{1988, 3353679791u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1989, 1001823878u, 3079358544u, 1001857290u, 0, EXPM1F_TOLERANCE, 0}, +{1990, 1009130212u, 3079358544u, 1009185581u, 0, EXPM1F_TOLERANCE, 0}, +{1991, 3367127535u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1992, 1032920919u, 3079358544u, 1033265990u, 0, EXPM1F_TOLERANCE, 0}, +{1993, 3281952870u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1994, 1237868497u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1995, 1153753924u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1996, 1120261759u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{1997, 3226328360u, 3079358544u, 3212164262u, 0, EXPM1F_TOLERANCE, 0}, +{1998, 3349595986u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{1999, 3166889490u, 3079358544u, 3166738746u, 0, EXPM1F_TOLERANCE, 0}, +{2000, 1087750238u, 3079358544u, 1145489096u, 0, EXPM1F_TOLERANCE, 0}, +{2001, 3121620061u, 3079358544u, 3121617464u, 0, EXPM1F_TOLERANCE, 0}, +{2002, 1066116543u, 3079358544u, 1073550874u, 0, EXPM1F_TOLERANCE, 0}, +{2003, 3210898034u, 3079358544u, 3205908768u, 0, EXPM1F_TOLERANCE, 0}, +{2004, 3051923237u, 3079358544u, 3051923224u, 0, EXPM1F_TOLERANCE, 0}, +{2005, 1030612298u, 3079358544u, 1031073947u, 0, EXPM1F_TOLERANCE, 0}, +{2006, 1186234578u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2007, 1331680743u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2008, 3060774997u, 3079358544u, 3060774969u, 0, EXPM1F_TOLERANCE, 0}, +{2009, 887589411u, 3079358544u, 887589414u, 0, EXPM1F_TOLERANCE, 0}, +{2010, 1045232522u, 3079358544u, 1046671487u, 0, EXPM1F_TOLERANCE, 0}, +{2011, 3119858470u, 3079358544u, 3119854711u, 0, EXPM1F_TOLERANCE, 0}, +{2012, 3349432725u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2013, 912423027u, 3079358544u, 912423052u, 0, EXPM1F_TOLERANCE, 0}, +{2014, 3228795133u, 3079358544u, 3212463322u, 0, EXPM1F_TOLERANCE, 0}, +{2015, 3194674746u, 3079358544u, 3193037091u, 0, EXPM1F_TOLERANCE, 0}, +{2016, 3296784303u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2017, 965402291u, 3079358544u, 965403496u, 0, EXPM1F_TOLERANCE, 0}, +{2018, 3388153589u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2019, 1133410485u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2020, 3136790322u, 3079358544u, 3136775003u, 0, EXPM1F_TOLERANCE, 0}, +{2021, 3369970587u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2022, 1270451568u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2023, 989498922u, 3079358544u, 989514626u, 0, EXPM1F_TOLERANCE, 0}, +{2024, 1280215674u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2025, 1171873518u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2026, 3298258100u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2027, 3415208824u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2028, 1001897182u, 3079358544u, 1001931005u, 0, EXPM1F_TOLERANCE, 0}, +{2029, 3152777939u, 3079358544u, 3152722577u, 0, EXPM1F_TOLERANCE, 0}, +{2030, 985903305u, 3079358544u, 985912883u, 0, EXPM1F_TOLERANCE, 0}, +{2031, 3357328848u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2032, 982612185u, 3079358544u, 982617477u, 0, EXPM1F_TOLERANCE, 0}, +{2033, 3267868136u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2034, 3319048157u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2035, 1144755661u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2036, 898467286u, 3079358544u, 898467291u, 0, EXPM1F_TOLERANCE, 0}, +{2037, 3301461672u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2038, 3364525678u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2039, 931441127u, 3079358544u, 931441196u, 0, EXPM1F_TOLERANCE, 0}, +{2040, 3146660041u, 3079358544u, 3146639843u, 0, EXPM1F_TOLERANCE, 0}, +{2041, 3467121799u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2042, 1151257041u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2043, 3097873255u, 3079358544u, 3097872826u, 0, EXPM1F_TOLERANCE, 0}, +{2044, 3130670309u, 3079358544u, 3130664364u, 0, EXPM1F_TOLERANCE, 0}, +{2045, 1017573824u, 3079358544u, 1017686067u, 0, EXPM1F_TOLERANCE, 0}, +{2046, 1258369714u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2047, 1216602683u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2048, 3297265739u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2049, 1071940738u, 3079358544u, 1084146490u, 0, EXPM1F_TOLERANCE, 0}, +{2050, 922601356u, 3079358544u, 922601419u, 0, EXPM1F_TOLERANCE, 0}, +{2051, 3462285635u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2052, 3357177805u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2053, 3049120080u, 3079358544u, 3049120071u, 0, EXPM1F_TOLERANCE, 0}, +{2054, 1153863660u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2055, 3034243695u, 3079358544u, 3034243692u, 0, EXPM1F_TOLERANCE, 0}, +{2056, 1249365132u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2057, 3046215730u, 3079358544u, 3046215725u, 0, EXPM1F_TOLERANCE, 0}, +{2058, 3047251716u, 3079358544u, 3047251710u, 0, EXPM1F_TOLERANCE, 0}, +{2059, 3131219358u, 3079358544u, 3131212750u, 0, EXPM1F_TOLERANCE, 0}, +{2060, 3222096285u, 3079358544u, 3210992003u, 0, EXPM1F_TOLERANCE, 0}, +{2061, 1297708818u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2062, 3345532722u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2063, 3418753236u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2064, 1277417964u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2065, 987577257u, 3079358544u, 987589500u, 0, EXPM1F_TOLERANCE, 0}, +{2066, 3161606610u, 3079358544u, 3161489779u, 0, EXPM1F_TOLERANCE, 0}, +{2067, 888030585u, 3079358544u, 888030588u, 0, EXPM1F_TOLERANCE, 0}, +{2068, 1043442869u, 3079358544u, 1044514105u, 0, EXPM1F_TOLERANCE, 0}, +{2069, 3320923228u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2070, 1337400405u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2071, 3400348640u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2072, 1250249095u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2073, 3284411233u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2074, 3020883322u, 3079358544u, 3020883321u, 0, EXPM1F_TOLERANCE, 0}, +{2075, 1215968622u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2076, 3202319550u, 3079358544u, 3199540720u, 0, EXPM1F_TOLERANCE, 0}, +{2077, 3061638260u, 3079358544u, 3061638229u, 0, EXPM1F_TOLERANCE, 0}, +{2078, 1025404104u, 3079358544u, 1025607506u, 0, EXPM1F_TOLERANCE, 0}, +{2079, 3138086437u, 3079358544u, 3138076728u, 0, EXPM1F_TOLERANCE, 0}, +{2080, 3091024506u, 3079358544u, 3091024226u, 0, EXPM1F_TOLERANCE, 0}, +{2081, 3362748242u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2082, 3099671635u, 3079358544u, 3099671052u, 0, EXPM1F_TOLERANCE, 0}, +{2083, 3068014841u, 3079358544u, 3068014793u, 0, EXPM1F_TOLERANCE, 0}, +{2084, 1252237719u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2085, 3327895594u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2086, 3082454432u, 3079358544u, 3082454296u, 0, EXPM1F_TOLERANCE, 0}, +{2087, 3396161504u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2088, 1099710167u, 3079358544u, 1276946230u, 0, EXPM1F_TOLERANCE, 0}, +{2089, 1157186482u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2090, 1282110851u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2091, 3477008113u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2092, 3292127294u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2093, 1123357102u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2094, 1106837025u, 3079358544u, 1441744913u, 0, EXPM1F_TOLERANCE, 0}, +{2095, 1049949008u, 3079358544u, 1051517247u, 0, EXPM1F_TOLERANCE, 0}, +{2096, 1253017688u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2097, 1108543194u, 3079358544u, 1510117963u, 0, EXPM1F_TOLERANCE, 0}, +{2098, 3087985411u, 3079358544u, 3087985251u, 0, EXPM1F_TOLERANCE, 0}, +{2099, 3163283126u, 3079358544u, 3163205315u, 0, EXPM1F_TOLERANCE, 0}, +{2100, 1160162706u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2101, 3305715025u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2102, 1266928623u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2103, 3025340297u, 3079358544u, 3025340296u, 0, EXPM1F_TOLERANCE, 0}, +{2104, 3438080027u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2105, 3344574751u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2106, 1152416724u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2107, 1218239308u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2108, 3263310567u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2109, 3041998669u, 3079358544u, 3041998664u, 0, EXPM1F_TOLERANCE, 0}, +{2110, 1000313118u, 3079358544u, 1000338621u, 0, EXPM1F_TOLERANCE, 0}, +{2111, 972485427u, 3079358544u, 972489239u, 0, EXPM1F_TOLERANCE, 0}, +{2112, 3290264612u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2113, 3222106584u, 3079358544u, 3210996528u, 0, EXPM1F_TOLERANCE, 0}, +{2114, 1278946388u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2115, 947914771u, 3079358544u, 947915027u, 0, EXPM1F_TOLERANCE, 0}, +{2116, 3167730654u, 3079358544u, 3167559490u, 0, EXPM1F_TOLERANCE, 0}, +{2117, 1098530298u, 3079358544u, 1253914864u, 0, EXPM1F_TOLERANCE, 0}, +{2118, 3232726036u, 3079358544u, 3212767186u, 0, EXPM1F_TOLERANCE, 0}, +{2119, 1297190916u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2120, 1277649137u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2121, 3203377685u, 3079358544u, 3200213876u, 0, EXPM1F_TOLERANCE, 0}, +{2122, 3090306474u, 3079358544u, 3090306226u, 0, EXPM1F_TOLERANCE, 0}, +{2123, 3244032016u, 3079358544u, 3212836846u, 0, EXPM1F_TOLERANCE, 0}, +{2124, 3033122376u, 3079358544u, 3033122374u, 0, EXPM1F_TOLERANCE, 0}, +{2125, 1096155623u, 3079358544u, 1226652252u, 0, EXPM1F_TOLERANCE, 0}, +{2126, 873151908u, 3079358544u, 873151909u, 0, EXPM1F_TOLERANCE, 0}, +{2127, 3238729605u, 3079358544u, 3212834050u, 0, EXPM1F_TOLERANCE, 0}, +{2128, 3317196817u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2129, 3374748510u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2130, 3345634950u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2131, 3189860276u, 3079358544u, 3189068752u, 0, EXPM1F_TOLERANCE, 0}, +{2132, 887311687u, 3079358544u, 887311690u, 0, EXPM1F_TOLERANCE, 0}, +{2133, 3396917283u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2134, 3317032737u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2135, 1200051436u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2136, 3105291012u, 3079358544u, 3105290300u, 0, EXPM1F_TOLERANCE, 0}, +{2137, 1306520561u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2138, 1314936356u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2139, 3475052219u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2140, 3085636260u, 3079358544u, 3085636044u, 0, EXPM1F_TOLERANCE, 0}, +{2141, 3393227708u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2142, 3182540197u, 3079358544u, 3182049210u, 0, EXPM1F_TOLERANCE, 0}, +{2143, 3349005404u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2144, 3154720153u, 3079358544u, 3154682605u, 0, EXPM1F_TOLERANCE, 0}, +{2145, 1262863321u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2146, 882902102u, 3079358544u, 882902104u, 0, EXPM1F_TOLERANCE, 0}, +{2147, 1053387478u, 3079358544u, 1056360663u, 0, EXPM1F_TOLERANCE, 0}, +{2148, 3387653691u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2149, 3136364836u, 3079358544u, 3136350309u, 0, EXPM1F_TOLERANCE, 0}, +{2150, 1338680611u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2151, 1112891928u, 3079358544u, 1710836650u, 0, EXPM1F_TOLERANCE, 0}, +{2152, 893449284u, 3079358544u, 893449289u, 0, EXPM1F_TOLERANCE, 0}, +{2153, 892311459u, 3079358544u, 892311463u, 0, EXPM1F_TOLERANCE, 0}, +{2154, 3105373037u, 3079358544u, 3105372313u, 0, EXPM1F_TOLERANCE, 0}, +{2155, 1190105283u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2156, 1011225926u, 3079358544u, 1011304717u, 0, EXPM1F_TOLERANCE, 0}, +{2157, 1043025031u, 3079358544u, 1044018642u, 0, EXPM1F_TOLERANCE, 0}, +{2158, 3410531037u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2159, 3125834184u, 3079358544u, 3125828754u, 0, EXPM1F_TOLERANCE, 0}, +{2160, 902318189u, 3079358544u, 902318199u, 0, EXPM1F_TOLERANCE, 0}, +{2161, 3213624815u, 3079358544u, 3207218218u, 0, EXPM1F_TOLERANCE, 0}, +{2162, 1120888322u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2163, 1315217243u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2164, 3137758475u, 3079358544u, 3137749450u, 0, EXPM1F_TOLERANCE, 0}, +{2165, 1040617590u, 3079358544u, 1041223269u, 0, EXPM1F_TOLERANCE, 0}, +{2166, 955384253u, 3079358544u, 955385168u, 0, EXPM1F_TOLERANCE, 0}, +{2167, 3061417900u, 3079358544u, 3061417870u, 0, EXPM1F_TOLERANCE, 0}, +{2168, 904255535u, 3079358544u, 904255548u, 0, EXPM1F_TOLERANCE, 0}, +{2169, 1022984119u, 3079358544u, 1023235665u, 0, EXPM1F_TOLERANCE, 0}, +{2170, 997362368u, 3079358544u, 997391818u, 0, EXPM1F_TOLERANCE, 0}, +{2171, 900933520u, 3079358544u, 900933528u, 0, EXPM1F_TOLERANCE, 0}, +{2172, 1168623062u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2173, 878737490u, 3079358544u, 878737492u, 0, EXPM1F_TOLERANCE, 0}, +{2174, 1039827284u, 3079358544u, 1040530471u, 0, EXPM1F_TOLERANCE, 0}, +{2175, 1021564080u, 3079358544u, 1021773646u, 0, EXPM1F_TOLERANCE, 0}, +{2176, 3458669745u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2177, 3327516316u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2178, 1040711112u, 3079358544u, 1041330000u, 0, EXPM1F_TOLERANCE, 0}, +{2179, 1134528351u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2180, 3039884464u, 3079358544u, 3039884460u, 0, EXPM1F_TOLERANCE, 0}, +{2181, 3414352838u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2182, 1133689539u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2183, 3455688478u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2184, 1137634874u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2185, 3415502662u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2186, 954999730u, 3079358544u, 955000601u, 0, EXPM1F_TOLERANCE, 0}, +{2187, 1066157309u, 3079358544u, 1073672539u, 0, EXPM1F_TOLERANCE, 0}, +{2188, 3436353675u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2189, 940437609u, 3079358544u, 940437766u, 0, EXPM1F_TOLERANCE, 0}, +{2190, 3108347547u, 3079358544u, 3108346327u, 0, EXPM1F_TOLERANCE, 0}, +{2191, 3064200154u, 3079358544u, 3064200128u, 0, EXPM1F_TOLERANCE, 0}, +{2192, 1023889593u, 3079358544u, 1024037701u, 0, EXPM1F_TOLERANCE, 0}, +{2193, 3272661536u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2194, 1170245333u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2195, 1219052056u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2196, 3318983619u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2197, 3372118621u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2198, 3146190320u, 3079358544u, 3146172105u, 0, EXPM1F_TOLERANCE, 0}, +{2199, 1299683827u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2200, 3190796331u, 3079358544u, 3189862754u, 0, EXPM1F_TOLERANCE, 0}, +{2201, 3086068902u, 3079358544u, 3086068674u, 0, EXPM1F_TOLERANCE, 0}, +{2202, 3064155399u, 3079358544u, 3064155373u, 0, EXPM1F_TOLERANCE, 0}, +{2203, 3040314717u, 3079358544u, 3040314713u, 0, EXPM1F_TOLERANCE, 0}, +{2204, 3257224022u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2205, 1229268598u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2206, 3184078812u, 3079358544u, 3183451889u, 0, EXPM1F_TOLERANCE, 0}, +{2207, 1086717248u, 3079358544u, 1139981179u, 0, EXPM1F_TOLERANCE, 0}, +{2208, 3434884607u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2209, 3464955606u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2210, 1025278524u, 3079358544u, 1025477004u, 0, EXPM1F_TOLERANCE, 0}, +{2211, 1242829722u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2212, 3075149137u, 3079358544u, 3075149056u, 0, EXPM1F_TOLERANCE, 0}, +{2213, 1200927971u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2214, 3326858092u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2215, 1246019790u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2216, 3184801644u, 3079358544u, 3184105328u, 0, EXPM1F_TOLERANCE, 0}, +{2217, 1136052740u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2218, 1069009211u, 3079358544u, 1078788101u, 0, EXPM1F_TOLERANCE, 0}, +{2219, 1015670780u, 3079358544u, 1015747281u, 0, EXPM1F_TOLERANCE, 0}, +{2220, 1012543234u, 3079358544u, 1012638866u, 0, EXPM1F_TOLERANCE, 0}, +{2221, 3316611992u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2222, 1087942795u, 3079358544u, 1146743424u, 0, EXPM1F_TOLERANCE, 0}, +{2223, 3426365713u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2224, 3066654389u, 3079358544u, 3066654349u, 0, EXPM1F_TOLERANCE, 0}, +{2225, 3295326432u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2226, 3318835308u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2227, 3283555717u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2228, 3381255420u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2229, 3040485181u, 3079358544u, 3040485177u, 0, EXPM1F_TOLERANCE, 0}, +{2230, 3388772093u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2231, 954670189u, 3079358544u, 954671024u, 0, EXPM1F_TOLERANCE, 0}, +{2232, 1319200415u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2233, 1279324488u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2234, 3217795424u, 3079358544u, 3209419343u, 0, EXPM1F_TOLERANCE, 0}, +{2235, 3455131757u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2236, 1246947517u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2237, 3396723577u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2238, 3433761025u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2239, 3201187455u, 3079358544u, 3198796615u, 0, EXPM1F_TOLERANCE, 0}, +{2240, 1173247961u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2241, 3037297123u, 3079358544u, 3037297121u, 0, EXPM1F_TOLERANCE, 0}, +{2242, 3248534678u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2243, 3083019343u, 3079358544u, 3083019194u, 0, EXPM1F_TOLERANCE, 0}, +{2244, 3042018375u, 3079358544u, 3042018370u, 0, EXPM1F_TOLERANCE, 0}, +{2245, 1082862511u, 3079358544u, 1117311128u, 0, EXPM1F_TOLERANCE, 0}, +{2246, 3157626955u, 3079358544u, 3157561267u, 0, EXPM1F_TOLERANCE, 0}, +{2247, 1341821683u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2248, 881101379u, 3079358544u, 881101380u, 0, EXPM1F_TOLERANCE, 0}, +{2249, 1079061705u, 3079358544u, 1103766846u, 0, EXPM1F_TOLERANCE, 0}, +{2250, 3182695954u, 3079358544u, 3182191938u, 0, EXPM1F_TOLERANCE, 0}, +{2251, 1105291533u, 3079358544u, 1405670241u, 0, EXPM1F_TOLERANCE, 0}, +{2252, 1016023520u, 3079358544u, 1016106127u, 0, EXPM1F_TOLERANCE, 0}, +{2253, 3370691006u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2254, 1156767169u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2255, 3077020499u, 3079358544u, 3077020394u, 0, EXPM1F_TOLERANCE, 0}, +{2256, 1104284039u, 3079358544u, 1382754095u, 0, EXPM1F_TOLERANCE, 0}, +{2257, 3335212901u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2258, 1093697541u, 3079358544u, 1198607884u, 0, EXPM1F_TOLERANCE, 0}, +{2259, 3266691185u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2260, 3179003144u, 3079358544u, 3178506395u, 0, EXPM1F_TOLERANCE, 0}, +{2261, 1094115255u, 3079358544u, 1202959080u, 0, EXPM1F_TOLERANCE, 0}, +{2262, 3424086808u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2263, 3353608773u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2264, 973664327u, 3079358544u, 973666671u, 0, EXPM1F_TOLERANCE, 0}, +{2265, 882878091u, 3079358544u, 882878093u, 0, EXPM1F_TOLERANCE, 0}, +{2266, 1098662266u, 3079358544u, 1255578035u, 0, EXPM1F_TOLERANCE, 0}, +{2267, 927582555u, 3079358544u, 927582635u, 0, EXPM1F_TOLERANCE, 0}, +{2268, 3111440310u, 3079358544u, 3111438437u, 0, EXPM1F_TOLERANCE, 0}, +{2269, 3476083859u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2270, 3038754840u, 3079358544u, 3038754837u, 0, EXPM1F_TOLERANCE, 0}, +{2271, 979878744u, 3079358544u, 979885460u, 0, EXPM1F_TOLERANCE, 0}, +{2272, 3464546616u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2273, 1002542205u, 3079358544u, 1002579752u, 0, EXPM1F_TOLERANCE, 0}, +{2274, 3443552129u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2275, 1287620154u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2276, 946058434u, 3079358544u, 946058839u, 0, EXPM1F_TOLERANCE, 0}, +{2277, 3073260205u, 3079358544u, 3073260146u, 0, EXPM1F_TOLERANCE, 0}, +{2278, 1245702957u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2279, 989655126u, 3079358544u, 989671131u, 0, EXPM1F_TOLERANCE, 0}, +{2280, 1002715618u, 3079358544u, 1002754200u, 0, EXPM1F_TOLERANCE, 0}, +{2281, 3087802274u, 3079358544u, 3087802121u, 0, EXPM1F_TOLERANCE, 0}, +{2282, 1000863905u, 3079358544u, 1000892168u, 0, EXPM1F_TOLERANCE, 0}, +{2283, 3415763001u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2284, 3283471961u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2285, 3311210827u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2286, 3026311911u, 3079358544u, 3026311909u, 0, EXPM1F_TOLERANCE, 0}, +{2287, 1198307901u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2288, 1288901567u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2289, 922255363u, 3079358544u, 922255423u, 0, EXPM1F_TOLERANCE, 0}, +{2290, 1113104661u, 3079358544u, 1720471412u, 0, EXPM1F_TOLERANCE, 0}, +{2291, 1136714348u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2292, 948856035u, 3079358544u, 948856352u, 0, EXPM1F_TOLERANCE, 0}, +{2293, 1062512367u, 3079358544u, 1067826688u, 0, EXPM1F_TOLERANCE, 0}, +{2294, 3486907092u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2295, 1162027071u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2296, 1034561811u, 3079358544u, 1035038186u, 0, EXPM1F_TOLERANCE, 0}, +{2297, 3271615417u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2298, 1042014529u, 3079358544u, 1042833086u, 0, EXPM1F_TOLERANCE, 0}, +{2299, 1177157787u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2300, 3196144817u, 3079358544u, 3194259351u, 0, EXPM1F_TOLERANCE, 0}, +{2301, 3432084552u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2302, 1309658335u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2303, 1226494979u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2304, 3100289712u, 3079358544u, 3100289070u, 0, EXPM1F_TOLERANCE, 0}, +{2305, 3375507013u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2306, 3460699001u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2307, 3079231719u, 3079358544u, 3079231645u, 0, EXPM1F_TOLERANCE, 0}, +{2308, 3093951884u, 3079358544u, 3093951456u, 0, EXPM1F_TOLERANCE, 0}, +{2309, 3468023178u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2310, 1204196034u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2311, 3459877411u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2312, 909696559u, 3079358544u, 909696576u, 0, EXPM1F_TOLERANCE, 0}, +{2313, 1161439847u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2314, 908663107u, 3079358544u, 908663121u, 0, EXPM1F_TOLERANCE, 0}, +{2315, 1055319316u, 3079358544u, 1058136138u, 0, EXPM1F_TOLERANCE, 0}, +{2316, 1084378658u, 3079358544u, 1126072255u, 0, EXPM1F_TOLERANCE, 0}, +{2317, 3053887750u, 3079358544u, 3053887741u, 0, EXPM1F_TOLERANCE, 0}, +{2318, 3022828828u, 3079358544u, 3022828827u, 0, EXPM1F_TOLERANCE, 0}, +{2319, 1226473697u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2320, 1123114742u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2321, 1258114435u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2322, 3468040845u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2323, 1178825761u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2324, 3059266302u, 3079358544u, 3059266279u, 0, EXPM1F_TOLERANCE, 0}, +{2325, 3223384012u, 3079358544u, 3211479716u, 0, EXPM1F_TOLERANCE, 0}, +{2326, 1019964626u, 3079358544u, 1020131532u, 0, EXPM1F_TOLERANCE, 0}, +{2327, 3445262427u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2328, 1125653081u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2329, 3337652712u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2330, 1184753508u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2331, 996404791u, 3079358544u, 996430797u, 0, EXPM1F_TOLERANCE, 0}, +{2332, 1188439315u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2333, 906557513u, 3079358544u, 906557522u, 0, EXPM1F_TOLERANCE, 0}, +{2334, 916831283u, 3079358544u, 916831310u, 0, EXPM1F_TOLERANCE, 0}, +{2335, 996786317u, 3079358544u, 996813670u, 0, EXPM1F_TOLERANCE, 0}, +{2336, 3461635065u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2337, 1188167943u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2338, 3036502395u, 3079358544u, 3036502391u, 0, EXPM1F_TOLERANCE, 0}, +{2339, 891257783u, 3079358544u, 891257786u, 0, EXPM1F_TOLERANCE, 0}, +{2340, 3290079438u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2341, 3350690327u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2342, 1102061604u, 3079358544u, 1331236523u, 0, EXPM1F_TOLERANCE, 0}, +{2343, 1282351521u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2344, 3458861065u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2345, 3095256878u, 3079358544u, 3095256374u, 0, EXPM1F_TOLERANCE, 0}, +{2346, 3163373610u, 3079358544u, 3163294260u, 0, EXPM1F_TOLERANCE, 0}, +{2347, 3228793330u, 3079358544u, 3212463162u, 0, EXPM1F_TOLERANCE, 0}, +{2348, 3422194733u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2349, 3083885296u, 3079358544u, 3083885126u, 0, EXPM1F_TOLERANCE, 0}, +{2350, 1261940623u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2351, 3400603081u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2352, 1219411812u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2353, 3094833770u, 3079358544u, 3094833292u, 0, EXPM1F_TOLERANCE, 0}, +{2354, 3139250800u, 3079358544u, 3139238459u, 0, EXPM1F_TOLERANCE, 0}, +{2355, 886201503u, 3079358544u, 886201506u, 0, EXPM1F_TOLERANCE, 0}, +{2356, 3297366026u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2357, 1218488455u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2358, 3040358923u, 3079358544u, 3040358919u, 0, EXPM1F_TOLERANCE, 0}, +{2359, 1283938137u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2360, 3182551696u, 3079358544u, 3182059752u, 0, EXPM1F_TOLERANCE, 0}, +{2361, 1317098613u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2362, 3116209179u, 3079358544u, 3116206933u, 0, EXPM1F_TOLERANCE, 0}, +{2363, 3431703657u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2364, 3239728775u, 3079358544u, 3212835779u, 0, EXPM1F_TOLERANCE, 0}, +{2365, 3207141672u, 3079358544u, 3203892183u, 0, EXPM1F_TOLERANCE, 0}, +{2366, 3154378805u, 3079358544u, 3154344050u, 0, EXPM1F_TOLERANCE, 0}, +{2367, 3069658155u, 3079358544u, 3069658095u, 0, EXPM1F_TOLERANCE, 0}, +{2368, 3313160088u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2369, 3207056527u, 3079358544u, 3203803993u, 0, EXPM1F_TOLERANCE, 0}, +{2370, 1284174954u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2371, 3156081645u, 3079358544u, 3156031887u, 0, EXPM1F_TOLERANCE, 0}, +{2372, 1063693032u, 3079358544u, 1069230225u, 0, EXPM1F_TOLERANCE, 0}, +{2373, 3036026175u, 3079358544u, 3036026171u, 0, EXPM1F_TOLERANCE, 0}, +{2374, 1102631663u, 3079358544u, 1344337477u, 0, EXPM1F_TOLERANCE, 0}, +{2375, 968803479u, 3079358544u, 968805754u, 0, EXPM1F_TOLERANCE, 0}, +{2376, 3273080388u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2377, 1172529774u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2378, 1306695905u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2379, 1003649752u, 3079358544u, 1003694149u, 0, EXPM1F_TOLERANCE, 0}, +{2380, 1078478376u, 3079358544u, 1101978697u, 0, EXPM1F_TOLERANCE, 0}, +{2381, 3158855023u, 3079358544u, 3158775107u, 0, EXPM1F_TOLERANCE, 0}, +{2382, 1165177679u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2383, 3403009513u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2384, 952348506u, 3079358544u, 952349104u, 0, EXPM1F_TOLERANCE, 0}, +{2385, 1222777442u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2386, 1325324763u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2387, 3363524213u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2388, 1158950321u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2389, 903129873u, 3079358544u, 903129884u, 0, EXPM1F_TOLERANCE, 0}, +{2390, 3078339944u, 3079358544u, 3078339820u, 0, EXPM1F_TOLERANCE, 0}, +{2391, 1208345407u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2392, 1258634105u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2393, 1248478509u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2394, 1153863988u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2395, 1235620969u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2396, 1097120930u, 3079358544u, 1237672369u, 0, EXPM1F_TOLERANCE, 0}, +{2397, 3469778622u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2398, 1147712200u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2399, 1124721745u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2400, 3261744304u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2401, 1064922416u, 3079358544u, 1070800536u, 0, EXPM1F_TOLERANCE, 0}, +{2402, 3303160152u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2403, 1315090496u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2404, 3230403187u, 3079358544u, 3212625939u, 0, EXPM1F_TOLERANCE, 0}, +{2405, 1335399673u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2406, 1072458508u, 3079358544u, 1084942451u, 0, EXPM1F_TOLERANCE, 0}, +{2407, 3303015249u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2408, 3252139741u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2409, 3468519966u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2410, 1006231203u, 3079358544u, 1006293797u, 0, EXPM1F_TOLERANCE, 0}, +{2411, 951554138u, 3079358544u, 951554665u, 0, EXPM1F_TOLERANCE, 0}, +{2412, 942046828u, 3079358544u, 942047045u, 0, EXPM1F_TOLERANCE, 0}, +{2413, 3319723279u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2414, 3255104167u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2415, 1155477903u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2416, 3273889176u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2417, 3237813668u, 3079358544u, 3212830705u, 0, EXPM1F_TOLERANCE, 0}, +{2418, 1228207362u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2419, 975349337u, 3079358544u, 975352645u, 0, EXPM1F_TOLERANCE, 0}, +{2420, 1290175785u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2421, 981908840u, 3079358544u, 981913380u, 0, EXPM1F_TOLERANCE, 0}, +{2422, 941187647u, 3079358544u, 941187831u, 0, EXPM1F_TOLERANCE, 0}, +{2423, 1214223128u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2424, 3422922584u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2425, 1315857601u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2426, 3453226030u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2427, 1078359574u, 3079358544u, 1101644019u, 0, EXPM1F_TOLERANCE, 0}, +{2428, 1029557624u, 3079358544u, 1029958397u, 0, EXPM1F_TOLERANCE, 0}, +{2429, 1207675424u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2430, 1028355074u, 3079358544u, 1028691771u, 0, EXPM1F_TOLERANCE, 0}, +{2431, 3119299090u, 3079358544u, 3119295588u, 0, EXPM1F_TOLERANCE, 0}, +{2432, 1248421894u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2433, 3353251994u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2434, 876926659u, 3079358544u, 876926660u, 0, EXPM1F_TOLERANCE, 0}, +{2435, 1076752219u, 3079358544u, 1096963550u, 0, EXPM1F_TOLERANCE, 0}, +{2436, 3388531942u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2437, 1273395082u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2438, 3385588183u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2439, 3192315328u, 3079358544u, 3191127896u, 0, EXPM1F_TOLERANCE, 0}, +{2440, 3441804648u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2441, 3392827417u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2442, 1161241793u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2443, 3034494183u, 3079358544u, 3034494180u, 0, EXPM1F_TOLERANCE, 0}, +{2444, 1171318485u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2445, 3047748143u, 3079358544u, 3047748136u, 0, EXPM1F_TOLERANCE, 0}, +{2446, 1001216371u, 3079358544u, 1001246474u, 0, EXPM1F_TOLERANCE, 0}, +{2447, 912515889u, 3079358544u, 912515914u, 0, EXPM1F_TOLERANCE, 0}, +{2448, 3391452505u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2449, 3249603369u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2450, 1220264047u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2451, 3169816394u, 3079358544u, 3169589060u, 0, EXPM1F_TOLERANCE, 0}, +{2452, 3098997418u, 3079358544u, 3098996895u, 0, EXPM1F_TOLERANCE, 0}, +{2453, 3282212423u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2454, 3352293320u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2455, 3296358441u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2456, 1197828352u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2457, 3340510371u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2458, 1127109339u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2459, 909467381u, 3079358544u, 909467397u, 0, EXPM1F_TOLERANCE, 0}, +{2460, 1200599955u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2461, 962230977u, 3079358544u, 962232469u, 0, EXPM1F_TOLERANCE, 0}, +{2462, 3192887808u, 3079358544u, 3191597321u, 0, EXPM1F_TOLERANCE, 0}, +{2463, 3237183876u, 3079358544u, 3212828548u, 0, EXPM1F_TOLERANCE, 0}, +{2464, 939285924u, 3079358544u, 939286173u, 0, EXPM1F_TOLERANCE, 0}, +{2465, 944050180u, 3079358544u, 944050483u, 0, EXPM1F_TOLERANCE, 0}, +{2466, 3058135703u, 3079358544u, 3058135684u, 0, EXPM1F_TOLERANCE, 0}, +{2467, 3480592662u, 3079358544u, 3212836864u, 0, EXPM1F_TOLERANCE, 0}, +{2468, 3061939312u, 3079358544u, 3061939296u, 0, EXPM1F_TOLERANCE, 0}, +{2469, 1003299981u, 3079358544u, 1003342153u, 0, EXPM1F_TOLERANCE, 0}, +{2470, 1155775526u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0}, +{2471, 1234491880u, 3079358544u, 2139095040u, 0, EXPM1F_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_EXPM1F_H multiple inclusion protection + +// EOF expm1f.h diff --git a/packages/language/c/libm/current/tests/vectors/fabsf.c b/packages/language/c/libm/current/tests/vectors/fabsf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/fabsf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// fabsf.c +// +// Test of fabsf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/fabsf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(fabsf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &fabsf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &fabsf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("fabsf() is stable"); + } // if + else + { + CYG_TEST_FAIL("fabsf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library fabsf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "fabsf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF fabsf.c diff --git a/packages/language/c/libm/current/tests/vectors/fabsf.h b/packages/language/c/libm/current/tests/vectors/fabsf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/fabsf.h @@ -0,0 +1,1235 @@ +#ifndef CYGONCE_LIBM_FABSF_H +#define CYGONCE_LIBM_FABSF_H +//=========================================================================== +// +// fabsf.h +// +// Test vectors for testing of fabsf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/fabsf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define FABSF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t fabsf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 1067030938u, 0, FABSF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 1066947052u, 0, FABSF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 1066863165u, 0, FABSF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 1066779279u, 0, FABSF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 1066695393u, 0, FABSF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 1066611507u, 0, FABSF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 1066527621u, 0, FABSF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 1066443735u, 0, FABSF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 1066359849u, 0, FABSF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 1066275963u, 0, FABSF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 1066192077u, 0, FABSF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 1066108191u, 0, FABSF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 1066024305u, 0, FABSF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 1065940419u, 0, FABSF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 1065856532u, 0, FABSF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 1065772646u, 0, FABSF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 1065688760u, 0, FABSF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 1065604874u, 0, FABSF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 1065520988u, 0, FABSF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 1065437102u, 0, FABSF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 1065353216u, 0, FABSF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 1065185444u, 0, FABSF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 1065017672u, 0, FABSF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 1064849900u, 0, FABSF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 1064682127u, 0, FABSF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 1064514355u, 0, FABSF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 1064346583u, 0, FABSF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 1064178811u, 0, FABSF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 1064011039u, 0, FABSF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 1063843267u, 0, FABSF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 1063675494u, 0, FABSF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 1063507722u, 0, FABSF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 1063339950u, 0, FABSF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 1063172178u, 0, FABSF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 1063004406u, 0, FABSF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 1062836634u, 0, FABSF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 1062668861u, 0, FABSF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 1062501089u, 0, FABSF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 1062333317u, 0, FABSF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 1062165545u, 0, FABSF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 1061997773u, 0, FABSF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 1061830001u, 0, FABSF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 1061662228u, 0, FABSF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 1061494456u, 0, FABSF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 1061326684u, 0, FABSF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 1061158912u, 0, FABSF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 1060991140u, 0, FABSF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 1060823368u, 0, FABSF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 1060655596u, 0, FABSF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 1060487823u, 0, FABSF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 1060320051u, 0, FABSF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 1060152279u, 0, FABSF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 1059984507u, 0, FABSF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 1059816735u, 0, FABSF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 1059648963u, 0, FABSF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 1059481190u, 0, FABSF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 1059313418u, 0, FABSF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 1059145646u, 0, FABSF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 1058977874u, 0, FABSF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 1058810102u, 0, FABSF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 1058642330u, 0, FABSF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 1058474557u, 0, FABSF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 1058306785u, 0, FABSF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 1058139013u, 0, FABSF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 1057971241u, 0, FABSF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 1057803469u, 0, FABSF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 1057635697u, 0, FABSF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 1057467924u, 0, FABSF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 1057300152u, 0, FABSF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 1057132380u, 0, FABSF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 1056964608u, 0, FABSF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 1056629064u, 0, FABSF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 1056293519u, 0, FABSF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 1055957975u, 0, FABSF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 1055622431u, 0, FABSF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 1055286886u, 0, FABSF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 1054951342u, 0, FABSF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 1054615798u, 0, FABSF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 1054280253u, 0, FABSF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 1053944709u, 0, FABSF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 1053609165u, 0, FABSF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 1053273620u, 0, FABSF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 1052938076u, 0, FABSF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 1052602532u, 0, FABSF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 1052266988u, 0, FABSF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 1051931443u, 0, FABSF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 1051595899u, 0, FABSF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 1051260355u, 0, FABSF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 1050924810u, 0, FABSF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 1050589266u, 0, FABSF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 1050253722u, 0, FABSF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 1049918177u, 0, FABSF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 1049582633u, 0, FABSF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 1049247089u, 0, FABSF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 1048911544u, 0, FABSF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 1048576000u, 0, FABSF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 1047904911u, 0, FABSF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 1047233823u, 0, FABSF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 1046562734u, 0, FABSF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 1045891645u, 0, FABSF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 1045220557u, 0, FABSF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 1044549468u, 0, FABSF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 1043878380u, 0, FABSF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 1043207291u, 0, FABSF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 1042536202u, 0, FABSF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 1041865114u, 0, FABSF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 1041194025u, 0, FABSF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 1040522936u, 0, FABSF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 1039516303u, 0, FABSF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 1038174126u, 0, FABSF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 1036831949u, 0, FABSF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 1035489772u, 0, FABSF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 1034147594u, 0, FABSF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 1032805417u, 0, FABSF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 1031127695u, 0, FABSF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 1028443341u, 0, FABSF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 1025758986u, 0, FABSF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 1022739087u, 0, FABSF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 1017370378u, 0, FABSF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 1008981770u, 0, FABSF_TOLERANCE, 0}, +{120, 646742016u, 0u, 646742016u, 0, FABSF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 1008981770u, 0, FABSF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 1017370378u, 0, FABSF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 1022739087u, 0, FABSF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 1025758986u, 0, FABSF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 1028443341u, 0, FABSF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 1031127695u, 0, FABSF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 1032805417u, 0, FABSF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 1034147594u, 0, FABSF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 1035489772u, 0, FABSF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 1036831949u, 0, FABSF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 1038174126u, 0, FABSF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 1039516303u, 0, FABSF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 1040522936u, 0, FABSF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 1041194025u, 0, FABSF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 1041865114u, 0, FABSF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 1042536202u, 0, FABSF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 1043207291u, 0, FABSF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 1043878380u, 0, FABSF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 1044549468u, 0, FABSF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 1045220557u, 0, FABSF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 1045891645u, 0, FABSF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 1046562734u, 0, FABSF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 1047233823u, 0, FABSF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 1047904911u, 0, FABSF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 1048576000u, 0, FABSF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 1048911544u, 0, FABSF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 1049247089u, 0, FABSF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 1049582633u, 0, FABSF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 1049918177u, 0, FABSF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 1050253722u, 0, FABSF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 1050589266u, 0, FABSF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 1050924810u, 0, FABSF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 1051260355u, 0, FABSF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 1051595899u, 0, FABSF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 1051931443u, 0, FABSF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 1052266988u, 0, FABSF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 1052602532u, 0, FABSF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 1052938076u, 0, FABSF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 1053273620u, 0, FABSF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 1053609165u, 0, FABSF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 1053944709u, 0, FABSF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 1054280253u, 0, FABSF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 1054615798u, 0, FABSF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 1054951342u, 0, FABSF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 1055286886u, 0, FABSF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 1055622431u, 0, FABSF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 1055957975u, 0, FABSF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 1056293519u, 0, FABSF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 1056629064u, 0, FABSF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 1056964608u, 0, FABSF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 1057132380u, 0, FABSF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 1057300152u, 0, FABSF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 1057467924u, 0, FABSF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 1057635697u, 0, FABSF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 1057803469u, 0, FABSF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 1057971241u, 0, FABSF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 1058139013u, 0, FABSF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 1058306785u, 0, FABSF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 1058474557u, 0, FABSF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 1058642330u, 0, FABSF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 1058810102u, 0, FABSF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 1058977874u, 0, FABSF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 1059145646u, 0, FABSF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 1059313418u, 0, FABSF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 1059481190u, 0, FABSF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 1059648963u, 0, FABSF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 1059816735u, 0, FABSF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 1059984507u, 0, FABSF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 1060152279u, 0, FABSF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 1060320051u, 0, FABSF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 1060487823u, 0, FABSF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 1060655596u, 0, FABSF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 1060823368u, 0, FABSF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 1060991140u, 0, FABSF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 1061158912u, 0, FABSF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 1061326684u, 0, FABSF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 1061494456u, 0, FABSF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 1061662228u, 0, FABSF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 1061830001u, 0, FABSF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 1061997773u, 0, FABSF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 1062165545u, 0, FABSF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 1062333317u, 0, FABSF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 1062501089u, 0, FABSF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 1062668861u, 0, FABSF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 1062836634u, 0, FABSF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 1063004406u, 0, FABSF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 1063172178u, 0, FABSF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 1063339950u, 0, FABSF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 1063507722u, 0, FABSF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 1063675494u, 0, FABSF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 1063843267u, 0, FABSF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 1064011039u, 0, FABSF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 1064178811u, 0, FABSF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 1064346583u, 0, FABSF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 1064514355u, 0, FABSF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 1064682127u, 0, FABSF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 1064849900u, 0, FABSF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 1065017672u, 0, FABSF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 1065185444u, 0, FABSF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1065353216u, 0, FABSF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1065437102u, 0, FABSF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1065520988u, 0, FABSF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1065604874u, 0, FABSF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1065688760u, 0, FABSF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1065772646u, 0, FABSF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1065856532u, 0, FABSF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1065940419u, 0, FABSF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1066024305u, 0, FABSF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1066108191u, 0, FABSF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1066192077u, 0, FABSF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1066275963u, 0, FABSF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1066359849u, 0, FABSF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1066443735u, 0, FABSF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1066527621u, 0, FABSF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1066611507u, 0, FABSF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1066695393u, 0, FABSF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1066779279u, 0, FABSF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1066863165u, 0, FABSF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1066947052u, 0, FABSF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 1086918619u, 0, FABSF_TOLERANCE, 0}, +{241, 3231108068u, 0u, 1083624420u, 0, FABSF_TOLERANCE, 0}, +{242, 3226013659u, 0u, 1078530011u, 0, FABSF_TOLERANCE, 0}, +{243, 3217625051u, 0u, 1070141403u, 0, FABSF_TOLERANCE, 0}, +{244, 0u, 0u, 0u, 0, FABSF_TOLERANCE, 0}, +{245, 1070141403u, 0u, 1070141403u, 0, FABSF_TOLERANCE, 0}, +{246, 1078530011u, 0u, 1078530011u, 0, FABSF_TOLERANCE, 0}, +{247, 1083624420u, 0u, 1083624420u, 0, FABSF_TOLERANCE, 0}, +{248, 3253731328u, 0u, 1106247680u, 0, FABSF_TOLERANCE, 0}, +{249, 3252840038u, 0u, 1105356390u, 0, FABSF_TOLERANCE, 0}, +{250, 3251948749u, 0u, 1104465101u, 0, FABSF_TOLERANCE, 0}, +{251, 3251057459u, 0u, 1103573811u, 0, FABSF_TOLERANCE, 0}, +{252, 3250166170u, 0u, 1102682522u, 0, FABSF_TOLERANCE, 0}, +{253, 3249274880u, 0u, 1101791232u, 0, FABSF_TOLERANCE, 0}, +{254, 3248383590u, 0u, 1100899942u, 0, FABSF_TOLERANCE, 0}, +{255, 3247492301u, 0u, 1100008653u, 0, FABSF_TOLERANCE, 0}, +{256, 3246601011u, 0u, 1099117363u, 0, FABSF_TOLERANCE, 0}, +{257, 3245028147u, 0u, 1097544499u, 0, FABSF_TOLERANCE, 0}, +{258, 3243245568u, 0u, 1095761920u, 0, FABSF_TOLERANCE, 0}, +{259, 3241462989u, 0u, 1093979341u, 0, FABSF_TOLERANCE, 0}, +{260, 3239680410u, 0u, 1092196762u, 0, FABSF_TOLERANCE, 0}, +{261, 3237792973u, 0u, 1090309325u, 0, FABSF_TOLERANCE, 0}, +{262, 3234227814u, 0u, 1086744166u, 0, FABSF_TOLERANCE, 0}, +{263, 3230662656u, 0u, 1083179008u, 0, FABSF_TOLERANCE, 0}, +{264, 3224580915u, 0u, 1077097267u, 0, FABSF_TOLERANCE, 0}, +{265, 3213675725u, 0u, 1066192077u, 0, FABSF_TOLERANCE, 0}, +{266, 1058642330u, 0u, 1058642330u, 0, FABSF_TOLERANCE, 0}, +{267, 1075000115u, 0u, 1075000115u, 0, FABSF_TOLERANCE, 0}, +{268, 1082130432u, 0u, 1082130432u, 0, FABSF_TOLERANCE, 0}, +{269, 1085695590u, 0u, 1085695590u, 0, FABSF_TOLERANCE, 0}, +{270, 1089260749u, 0u, 1089260749u, 0, FABSF_TOLERANCE, 0}, +{271, 1091672474u, 0u, 1091672474u, 0, FABSF_TOLERANCE, 0}, +{272, 1093455053u, 0u, 1093455053u, 0, FABSF_TOLERANCE, 0}, +{273, 1095237632u, 0u, 1095237632u, 0, FABSF_TOLERANCE, 0}, +{274, 1097020211u, 0u, 1097020211u, 0, FABSF_TOLERANCE, 0}, +{275, 1098802790u, 0u, 1098802790u, 0, FABSF_TOLERANCE, 0}, +{276, 1099746509u, 0u, 1099746509u, 0, FABSF_TOLERANCE, 0}, +{277, 1100637798u, 0u, 1100637798u, 0, FABSF_TOLERANCE, 0}, +{278, 1101529088u, 0u, 1101529088u, 0, FABSF_TOLERANCE, 0}, +{279, 1102420378u, 0u, 1102420378u, 0, FABSF_TOLERANCE, 0}, +{280, 1103311667u, 0u, 1103311667u, 0, FABSF_TOLERANCE, 0}, +{281, 1104202957u, 0u, 1104202957u, 0, FABSF_TOLERANCE, 0}, +{282, 1105094246u, 0u, 1105094246u, 0, FABSF_TOLERANCE, 0}, +{283, 1105985536u, 0u, 1105985536u, 0, FABSF_TOLERANCE, 0}, +{284, 1107800421u, 1203999711u, 1107800421u, 0, FABSF_TOLERANCE, 0}, +{285, 3196650934u, 896005582u, 1049167286u, 0, FABSF_TOLERANCE, 0}, +{286, 3368700125u, 3308232444u, 1221216477u, 0, FABSF_TOLERANCE, 0}, +{287, 1224242132u, 3061363425u, 1224242132u, 0, FABSF_TOLERANCE, 0}, +{288, 3221027117u, 1284201705u, 1073543469u, 0, FABSF_TOLERANCE, 0}, +{289, 1198712763u, 919636942u, 1198712763u, 0, FABSF_TOLERANCE, 0}, +{290, 3159309973u, 852521077u, 1011826325u, 0, FABSF_TOLERANCE, 0}, +{291, 954173073u, 850531830u, 954173073u, 0, FABSF_TOLERANCE, 0}, +{292, 3090780435u, 1035260608u, 943296787u, 0, FABSF_TOLERANCE, 0}, +{293, 966554515u, 3234538174u, 966554515u, 0, FABSF_TOLERANCE, 0}, +{294, 1312607135u, 1194999402u, 1312607135u, 0, FABSF_TOLERANCE, 0}, +{295, 1166191415u, 1018661564u, 1166191415u, 0, FABSF_TOLERANCE, 0}, +{296, 3111900019u, 1130472166u, 964416371u, 0, FABSF_TOLERANCE, 0}, +{297, 1234419246u, 2984575812u, 1234419246u, 0, FABSF_TOLERANCE, 0}, +{298, 1302107128u, 3370647675u, 1302107128u, 0, FABSF_TOLERANCE, 0}, +{299, 1052801068u, 3039122570u, 1052801068u, 0, FABSF_TOLERANCE, 0}, +{300, 1060849628u, 3081357692u, 1060849628u, 0, FABSF_TOLERANCE, 0}, +{301, 3484320003u, 3033957825u, 1336836355u, 0, FABSF_TOLERANCE, 0}, +{302, 3181522772u, 3305392896u, 1034039124u, 0, FABSF_TOLERANCE, 0}, +{303, 882596369u, 1256676590u, 882596369u, 0, FABSF_TOLERANCE, 0}, +{304, 1167223673u, 846102364u, 1167223673u, 0, FABSF_TOLERANCE, 0}, +{305, 968192794u, 878547432u, 968192794u, 0, FABSF_TOLERANCE, 0}, +{306, 3122346862u, 1111584337u, 974863214u, 0, FABSF_TOLERANCE, 0}, +{307, 1052361612u, 1280025214u, 1052361612u, 0, FABSF_TOLERANCE, 0}, +{308, 906701409u, 2968301825u, 906701409u, 0, FABSF_TOLERANCE, 0}, +{309, 3471653172u, 1154138102u, 1324169524u, 0, FABSF_TOLERANCE, 0}, +{310, 3231467496u, 934336592u, 1083983848u, 0, FABSF_TOLERANCE, 0}, +{311, 1341514497u, 3466051188u, 1341514497u, 0, FABSF_TOLERANCE, 0}, +{312, 1272351391u, 3373485062u, 1272351391u, 0, FABSF_TOLERANCE, 0}, +{313, 3319724992u, 3354615790u, 1172241344u, 0, FABSF_TOLERANCE, 0}, +{314, 917622040u, 1334966485u, 917622040u, 0, FABSF_TOLERANCE, 0}, +{315, 940236348u, 3304072663u, 940236348u, 0, FABSF_TOLERANCE, 0}, +{316, 3251541546u, 3174764041u, 1104057898u, 0, FABSF_TOLERANCE, 0}, +{317, 3099843889u, 3355962282u, 952360241u, 0, FABSF_TOLERANCE, 0}, +{318, 3110358400u, 851145088u, 962874752u, 0, FABSF_TOLERANCE, 0}, +{319, 3371863479u, 1014861921u, 1224379831u, 0, FABSF_TOLERANCE, 0}, +{320, 3204069187u, 966573255u, 1056585539u, 0, FABSF_TOLERANCE, 0}, +{321, 1306460502u, 903489435u, 1306460502u, 0, FABSF_TOLERANCE, 0}, +{322, 1197542187u, 3024598921u, 1197542187u, 0, FABSF_TOLERANCE, 0}, +{323, 922888249u, 1139392309u, 922888249u, 0, FABSF_TOLERANCE, 0}, +{324, 1184239996u, 3224098462u, 1184239996u, 0, FABSF_TOLERANCE, 0}, +{325, 1252490238u, 1173619825u, 1252490238u, 0, FABSF_TOLERANCE, 0}, +{326, 1001673627u, 3462631271u, 1001673627u, 0, FABSF_TOLERANCE, 0}, +{327, 976098044u, 1151967422u, 976098044u, 0, FABSF_TOLERANCE, 0}, +{328, 941796645u, 886451963u, 941796645u, 0, FABSF_TOLERANCE, 0}, +{329, 3287199470u, 854245542u, 1139715822u, 0, FABSF_TOLERANCE, 0}, +{330, 893184329u, 1243067084u, 893184329u, 0, FABSF_TOLERANCE, 0}, +{331, 1143233714u, 1007268238u, 1143233714u, 0, FABSF_TOLERANCE, 0}, +{332, 1139941253u, 1147688821u, 1139941253u, 0, FABSF_TOLERANCE, 0}, +{333, 3143717025u, 3234638157u, 996233377u, 0, FABSF_TOLERANCE, 0}, +{334, 3048866608u, 3449209899u, 901382960u, 0, FABSF_TOLERANCE, 0}, +{335, 3240298487u, 1020260821u, 1092814839u, 0, FABSF_TOLERANCE, 0}, +{336, 1288902137u, 3123875978u, 1288902137u, 0, FABSF_TOLERANCE, 0}, +{337, 1333134799u, 1338107877u, 1333134799u, 0, FABSF_TOLERANCE, 0}, +{338, 1187847971u, 1317663644u, 1187847971u, 0, FABSF_TOLERANCE, 0}, +{339, 1038851706u, 1327544110u, 1038851706u, 0, FABSF_TOLERANCE, 0}, +{340, 3329354473u, 3165437289u, 1181870825u, 0, FABSF_TOLERANCE, 0}, +{341, 3077218579u, 1308397879u, 929734931u, 0, FABSF_TOLERANCE, 0}, +{342, 1309289088u, 1019883016u, 1309289088u, 0, FABSF_TOLERANCE, 0}, +{343, 3444653659u, 1279248024u, 1297170011u, 0, FABSF_TOLERANCE, 0}, +{344, 3405585402u, 2962345057u, 1258101754u, 0, FABSF_TOLERANCE, 0}, +{345, 3106647724u, 853848387u, 959164076u, 0, FABSF_TOLERANCE, 0}, +{346, 1106778573u, 3304487767u, 1106778573u, 0, FABSF_TOLERANCE, 0}, +{347, 1140567947u, 3069174149u, 1140567947u, 0, FABSF_TOLERANCE, 0}, +{348, 1238569473u, 873035665u, 1238569473u, 0, FABSF_TOLERANCE, 0}, +{349, 3154871957u, 1276671061u, 1007388309u, 0, FABSF_TOLERANCE, 0}, +{350, 1261071232u, 1182202773u, 1261071232u, 0, FABSF_TOLERANCE, 0}, +{351, 1175011025u, 3029705783u, 1175011025u, 0, FABSF_TOLERANCE, 0}, +{352, 1082692850u, 1211581107u, 1082692850u, 0, FABSF_TOLERANCE, 0}, +{353, 974547519u, 3475164509u, 974547519u, 0, FABSF_TOLERANCE, 0}, +{354, 3058097085u, 3104309359u, 910613437u, 0, FABSF_TOLERANCE, 0}, +{355, 3107252546u, 1071134451u, 959768898u, 0, FABSF_TOLERANCE, 0}, +{356, 3096032662u, 2976848821u, 948549014u, 0, FABSF_TOLERANCE, 0}, +{357, 3197942144u, 3094120030u, 1050458496u, 0, FABSF_TOLERANCE, 0}, +{358, 3403348556u, 3184653669u, 1255864908u, 0, FABSF_TOLERANCE, 0}, +{359, 3182301130u, 3460764044u, 1034817482u, 0, FABSF_TOLERANCE, 0}, +{360, 1136411063u, 1118097422u, 1136411063u, 0, FABSF_TOLERANCE, 0}, +{361, 3239231622u, 3302723069u, 1091747974u, 0, FABSF_TOLERANCE, 0}, +{362, 3340615780u, 870350055u, 1193132132u, 0, FABSF_TOLERANCE, 0}, +{363, 998567360u, 2995278691u, 998567360u, 0, FABSF_TOLERANCE, 0}, +{364, 3417964312u, 1321337529u, 1270480664u, 0, FABSF_TOLERANCE, 0}, +{365, 3109481038u, 1143864063u, 961997390u, 0, FABSF_TOLERANCE, 0}, +{366, 1148867223u, 1256486202u, 1148867223u, 0, FABSF_TOLERANCE, 0}, +{367, 989687421u, 3372681320u, 989687421u, 0, FABSF_TOLERANCE, 0}, +{368, 1152956913u, 3166480640u, 1152956913u, 0, FABSF_TOLERANCE, 0}, +{369, 892922651u, 3373029087u, 892922651u, 0, FABSF_TOLERANCE, 0}, +{370, 1109627625u, 1314158257u, 1109627625u, 0, FABSF_TOLERANCE, 0}, +{371, 1307091856u, 1103202538u, 1307091856u, 0, FABSF_TOLERANCE, 0}, +{372, 1077234132u, 3272167130u, 1077234132u, 0, FABSF_TOLERANCE, 0}, +{373, 1142167709u, 1096445242u, 1142167709u, 0, FABSF_TOLERANCE, 0}, +{374, 3426232834u, 1036705270u, 1278749186u, 0, FABSF_TOLERANCE, 0}, +{375, 3368566779u, 967249167u, 1221083131u, 0, FABSF_TOLERANCE, 0}, +{376, 3030724760u, 3349013503u, 883241112u, 0, FABSF_TOLERANCE, 0}, +{377, 1138741813u, 3073453199u, 1138741813u, 0, FABSF_TOLERANCE, 0}, +{378, 982950501u, 982549888u, 982950501u, 0, FABSF_TOLERANCE, 0}, +{379, 1142981585u, 1015602236u, 1142981585u, 0, FABSF_TOLERANCE, 0}, +{380, 3347165962u, 3135486696u, 1199682314u, 0, FABSF_TOLERANCE, 0}, +{381, 1009535440u, 3381353228u, 1009535440u, 0, FABSF_TOLERANCE, 0}, +{382, 3103736980u, 3402950505u, 956253332u, 0, FABSF_TOLERANCE, 0}, +{383, 3126820946u, 1077903063u, 979337298u, 0, FABSF_TOLERANCE, 0}, +{384, 3473956030u, 976891930u, 1326472382u, 0, FABSF_TOLERANCE, 0}, +{385, 3349098349u, 1055327704u, 1201614701u, 0, FABSF_TOLERANCE, 0}, +{386, 3152729489u, 1060398533u, 1005245841u, 0, FABSF_TOLERANCE, 0}, +{387, 945568720u, 3313485084u, 945568720u, 0, FABSF_TOLERANCE, 0}, +{388, 3345489836u, 1108392401u, 1198006188u, 0, FABSF_TOLERANCE, 0}, +{389, 940893161u, 1137000140u, 940893161u, 0, FABSF_TOLERANCE, 0}, +{390, 976791751u, 3230678102u, 976791751u, 0, FABSF_TOLERANCE, 0}, +{391, 1004442355u, 3036510596u, 1004442355u, 0, FABSF_TOLERANCE, 0}, +{392, 1108485380u, 3173536878u, 1108485380u, 0, FABSF_TOLERANCE, 0}, +{393, 1061834641u, 972388096u, 1061834641u, 0, FABSF_TOLERANCE, 0}, +{394, 3381268392u, 1146976802u, 1233784744u, 0, FABSF_TOLERANCE, 0}, +{395, 1087189715u, 2952822478u, 1087189715u, 0, FABSF_TOLERANCE, 0}, +{396, 3212952285u, 3329407365u, 1065468637u, 0, FABSF_TOLERANCE, 0}, +{397, 1000611335u, 857599439u, 1000611335u, 0, FABSF_TOLERANCE, 0}, +{398, 3466188568u, 1041678304u, 1318704920u, 0, FABSF_TOLERANCE, 0}, +{399, 3072456205u, 3160254633u, 924972557u, 0, FABSF_TOLERANCE, 0}, +{400, 3319315516u, 3422089012u, 1171831868u, 0, FABSF_TOLERANCE, 0}, +{401, 935938416u, 1146676692u, 935938416u, 0, FABSF_TOLERANCE, 0}, +{402, 3212614372u, 1152633030u, 1065130724u, 0, FABSF_TOLERANCE, 0}, +{403, 1315030230u, 3336225884u, 1315030230u, 0, FABSF_TOLERANCE, 0}, +{404, 1134593658u, 3456812581u, 1134593658u, 0, FABSF_TOLERANCE, 0}, +{405, 977281449u, 879922831u, 977281449u, 0, FABSF_TOLERANCE, 0}, +{406, 1086198791u, 920125958u, 1086198791u, 0, FABSF_TOLERANCE, 0}, +{407, 1255152035u, 851754050u, 1255152035u, 0, FABSF_TOLERANCE, 0}, +{408, 1135271264u, 3284878412u, 1135271264u, 0, FABSF_TOLERANCE, 0}, +{409, 1094190727u, 1056854532u, 1094190727u, 0, FABSF_TOLERANCE, 0}, +{410, 1294665325u, 991185677u, 1294665325u, 0, FABSF_TOLERANCE, 0}, +{411, 1036608591u, 805416536u, 1036608591u, 0, FABSF_TOLERANCE, 0}, +{412, 3229998064u, 825237063u, 1082514416u, 0, FABSF_TOLERANCE, 0}, +{413, 3439134022u, 1043829691u, 1291650374u, 0, FABSF_TOLERANCE, 0}, +{414, 3073083133u, 1317170485u, 925599485u, 0, FABSF_TOLERANCE, 0}, +{415, 1325668223u, 970681762u, 1325668223u, 0, FABSF_TOLERANCE, 0}, +{416, 1092037607u, 1027330835u, 1092037607u, 0, FABSF_TOLERANCE, 0}, +{417, 3316278408u, 3455589207u, 1168794760u, 0, FABSF_TOLERANCE, 0}, +{418, 3295436768u, 3129873731u, 1147953120u, 0, FABSF_TOLERANCE, 0}, +{419, 1151984049u, 3074547120u, 1151984049u, 0, FABSF_TOLERANCE, 0}, +{420, 1129287043u, 3076527544u, 1129287043u, 0, FABSF_TOLERANCE, 0}, +{421, 1243664530u, 972879810u, 1243664530u, 0, FABSF_TOLERANCE, 0}, +{422, 950829092u, 929114193u, 950829092u, 0, FABSF_TOLERANCE, 0}, +{423, 1115471979u, 3047246262u, 1115471979u, 0, FABSF_TOLERANCE, 0}, +{424, 3351092088u, 3024661404u, 1203608440u, 0, FABSF_TOLERANCE, 0}, +{425, 3424479544u, 3312047722u, 1276995896u, 0, FABSF_TOLERANCE, 0}, +{426, 3241193975u, 884465785u, 1093710327u, 0, FABSF_TOLERANCE, 0}, +{427, 1030934236u, 1045139240u, 1030934236u, 0, FABSF_TOLERANCE, 0}, +{428, 3131791114u, 3408392958u, 984307466u, 0, FABSF_TOLERANCE, 0}, +{429, 1025254314u, 3057812821u, 1025254314u, 0, FABSF_TOLERANCE, 0}, +{430, 1110545760u, 3240144177u, 1110545760u, 0, FABSF_TOLERANCE, 0}, +{431, 3180213739u, 1108793820u, 1032730091u, 0, FABSF_TOLERANCE, 0}, +{432, 3361976590u, 3138179993u, 1214492942u, 0, FABSF_TOLERANCE, 0}, +{433, 881280146u, 3421884736u, 881280146u, 0, FABSF_TOLERANCE, 0}, +{434, 1304154705u, 2961937089u, 1304154705u, 0, FABSF_TOLERANCE, 0}, +{435, 3264443610u, 3222916705u, 1116959962u, 0, FABSF_TOLERANCE, 0}, +{436, 3374550627u, 3055856293u, 1227066979u, 0, FABSF_TOLERANCE, 0}, +{437, 899599265u, 3240118211u, 899599265u, 0, FABSF_TOLERANCE, 0}, +{438, 1268194719u, 1332489410u, 1268194719u, 0, FABSF_TOLERANCE, 0}, +{439, 1133420220u, 1245770860u, 1133420220u, 0, FABSF_TOLERANCE, 0}, +{440, 1161858787u, 815362075u, 1161858787u, 0, FABSF_TOLERANCE, 0}, +{441, 3184462258u, 1263529646u, 1036978610u, 0, FABSF_TOLERANCE, 0}, +{442, 3295996963u, 3453334307u, 1148513315u, 0, FABSF_TOLERANCE, 0}, +{443, 1270887389u, 1156123987u, 1270887389u, 0, FABSF_TOLERANCE, 0}, +{444, 3325193181u, 993979179u, 1177709533u, 0, FABSF_TOLERANCE, 0}, +{445, 925657343u, 1315159742u, 925657343u, 0, FABSF_TOLERANCE, 0}, +{446, 3115275450u, 3008350271u, 967791802u, 0, FABSF_TOLERANCE, 0}, +{447, 3116607482u, 3224327456u, 969123834u, 0, FABSF_TOLERANCE, 0}, +{448, 3187892415u, 3118097315u, 1040408767u, 0, FABSF_TOLERANCE, 0}, +{449, 1189120494u, 978961471u, 1189120494u, 0, FABSF_TOLERANCE, 0}, +{450, 889030794u, 3129523970u, 889030794u, 0, FABSF_TOLERANCE, 0}, +{451, 1323529208u, 3100744786u, 1323529208u, 0, FABSF_TOLERANCE, 0}, +{452, 3465768388u, 3190881451u, 1318284740u, 0, FABSF_TOLERANCE, 0}, +{453, 3426099899u, 1118756120u, 1278616251u, 0, FABSF_TOLERANCE, 0}, +{454, 3224857113u, 3398166843u, 1077373465u, 0, FABSF_TOLERANCE, 0}, +{455, 1065798296u, 816191940u, 1065798296u, 0, FABSF_TOLERANCE, 0}, +{456, 3328989444u, 850266225u, 1181505796u, 0, FABSF_TOLERANCE, 0}, +{457, 3357819026u, 3148475462u, 1210335378u, 0, FABSF_TOLERANCE, 0}, +{458, 1273397670u, 901308750u, 1273397670u, 0, FABSF_TOLERANCE, 0}, +{459, 3424831780u, 1304806106u, 1277348132u, 0, FABSF_TOLERANCE, 0}, +{460, 1257596246u, 3420832544u, 1257596246u, 0, FABSF_TOLERANCE, 0}, +{461, 1051773536u, 896271348u, 1051773536u, 0, FABSF_TOLERANCE, 0}, +{462, 3294752507u, 3113225954u, 1147268859u, 0, FABSF_TOLERANCE, 0}, +{463, 3424848725u, 2973850350u, 1277365077u, 0, FABSF_TOLERANCE, 0}, +{464, 1090870906u, 3294742905u, 1090870906u, 0, FABSF_TOLERANCE, 0}, +{465, 1227582289u, 1208979668u, 1227582289u, 0, FABSF_TOLERANCE, 0}, +{466, 1272325814u, 3004311296u, 1272325814u, 0, FABSF_TOLERANCE, 0}, +{467, 3359508271u, 859974315u, 1212024623u, 0, FABSF_TOLERANCE, 0}, +{468, 1137854355u, 3335041917u, 1137854355u, 0, FABSF_TOLERANCE, 0}, +{469, 3440773058u, 3204192793u, 1293289410u, 0, FABSF_TOLERANCE, 0}, +{470, 3101598400u, 3057760708u, 954114752u, 0, FABSF_TOLERANCE, 0}, +{471, 3451216836u, 3347783723u, 1303733188u, 0, FABSF_TOLERANCE, 0}, +{472, 3437062994u, 3106834845u, 1289579346u, 0, FABSF_TOLERANCE, 0}, +{473, 1131196082u, 1164573183u, 1131196082u, 0, FABSF_TOLERANCE, 0}, +{474, 3177294154u, 1282436638u, 1029810506u, 0, FABSF_TOLERANCE, 0}, +{475, 3258097678u, 1305882290u, 1110614030u, 0, FABSF_TOLERANCE, 0}, +{476, 3460915348u, 1219372260u, 1313431700u, 0, FABSF_TOLERANCE, 0}, +{477, 3303035472u, 3153013020u, 1155551824u, 0, FABSF_TOLERANCE, 0}, +{478, 1053698677u, 3284313107u, 1053698677u, 0, FABSF_TOLERANCE, 0}, +{479, 3396166221u, 1201894512u, 1248682573u, 0, FABSF_TOLERANCE, 0}, +{480, 3037541131u, 1085398440u, 890057483u, 0, FABSF_TOLERANCE, 0}, +{481, 3458934263u, 1005577835u, 1311450615u, 0, FABSF_TOLERANCE, 0}, +{482, 1065761827u, 3333928591u, 1065761827u, 0, FABSF_TOLERANCE, 0}, +{483, 3025843188u, 820250112u, 878359540u, 0, FABSF_TOLERANCE, 0}, +{484, 926665223u, 3150815797u, 926665223u, 0, FABSF_TOLERANCE, 0}, +{485, 1199816046u, 3143776186u, 1199816046u, 0, FABSF_TOLERANCE, 0}, +{486, 3333779015u, 952421041u, 1186295367u, 0, FABSF_TOLERANCE, 0}, +{487, 948398145u, 3238273189u, 948398145u, 0, FABSF_TOLERANCE, 0}, +{488, 3054021468u, 1270257895u, 906537820u, 0, FABSF_TOLERANCE, 0}, +{489, 1080781593u, 1213908300u, 1080781593u, 0, FABSF_TOLERANCE, 0}, +{490, 3164749613u, 3010837763u, 1017265965u, 0, FABSF_TOLERANCE, 0}, +{491, 3235326590u, 1271705594u, 1087842942u, 0, FABSF_TOLERANCE, 0}, +{492, 3118883815u, 1051802647u, 971400167u, 0, FABSF_TOLERANCE, 0}, +{493, 965378004u, 1292594138u, 965378004u, 0, FABSF_TOLERANCE, 0}, +{494, 3226990408u, 1110755136u, 1079506760u, 0, FABSF_TOLERANCE, 0}, +{495, 3117098218u, 1122474770u, 969614570u, 0, FABSF_TOLERANCE, 0}, +{496, 1283624229u, 906796922u, 1283624229u, 0, FABSF_TOLERANCE, 0}, +{497, 970649315u, 1078286437u, 970649315u, 0, FABSF_TOLERANCE, 0}, +{498, 959776291u, 3280345347u, 959776291u, 0, FABSF_TOLERANCE, 0}, +{499, 3341117305u, 3294559023u, 1193633657u, 0, FABSF_TOLERANCE, 0}, +{500, 1270734970u, 3355874874u, 1270734970u, 0, FABSF_TOLERANCE, 0}, +{501, 3454816067u, 868771977u, 1307332419u, 0, FABSF_TOLERANCE, 0}, +{502, 917206623u, 1172710814u, 917206623u, 0, FABSF_TOLERANCE, 0}, +{503, 1106502045u, 1290849316u, 1106502045u, 0, FABSF_TOLERANCE, 0}, +{504, 1157598381u, 3309023746u, 1157598381u, 0, FABSF_TOLERANCE, 0}, +{505, 3335234513u, 1002337336u, 1187750865u, 0, FABSF_TOLERANCE, 0}, +{506, 1279489061u, 1006049444u, 1279489061u, 0, FABSF_TOLERANCE, 0}, +{507, 3157416480u, 1309984610u, 1009932832u, 0, FABSF_TOLERANCE, 0}, +{508, 3143920719u, 3131608518u, 996437071u, 0, FABSF_TOLERANCE, 0}, +{509, 1233171235u, 826460580u, 1233171235u, 0, FABSF_TOLERANCE, 0}, +{510, 1148920078u, 1007674793u, 1148920078u, 0, FABSF_TOLERANCE, 0}, +{511, 3064988156u, 3230867340u, 917504508u, 0, FABSF_TOLERANCE, 0}, +{512, 3083619260u, 1159415661u, 936135612u, 0, FABSF_TOLERANCE, 0}, +{513, 1109198803u, 1221754614u, 1109198803u, 0, FABSF_TOLERANCE, 0}, +{514, 3219949483u, 1056167693u, 1072465835u, 0, FABSF_TOLERANCE, 0}, +{515, 3361149474u, 3387342069u, 1213665826u, 0, FABSF_TOLERANCE, 0}, +{516, 1207502108u, 3388073586u, 1207502108u, 0, FABSF_TOLERANCE, 0}, +{517, 1000014431u, 831213088u, 1000014431u, 0, FABSF_TOLERANCE, 0}, +{518, 3161756316u, 3143659754u, 1014272668u, 0, FABSF_TOLERANCE, 0}, +{519, 3160728744u, 3382954009u, 1013245096u, 0, FABSF_TOLERANCE, 0}, +{520, 1234530539u, 1079988872u, 1234530539u, 0, FABSF_TOLERANCE, 0}, +{521, 1017843965u, 1193076204u, 1017843965u, 0, FABSF_TOLERANCE, 0}, +{522, 951862956u, 1173464654u, 951862956u, 0, FABSF_TOLERANCE, 0}, +{523, 3306328852u, 1118701064u, 1158845204u, 0, FABSF_TOLERANCE, 0}, +{524, 1291910469u, 1211303367u, 1291910469u, 0, FABSF_TOLERANCE, 0}, +{525, 3027442905u, 1173894400u, 879959257u, 0, FABSF_TOLERANCE, 0}, +{526, 1131927531u, 3182962700u, 1131927531u, 0, FABSF_TOLERANCE, 0}, +{527, 3449879391u, 991614550u, 1302395743u, 0, FABSF_TOLERANCE, 0}, +{528, 970094304u, 3344590506u, 970094304u, 0, FABSF_TOLERANCE, 0}, +{529, 1125551064u, 3331248076u, 1125551064u, 0, FABSF_TOLERANCE, 0}, +{530, 3427296372u, 3455289118u, 1279812724u, 0, FABSF_TOLERANCE, 0}, +{531, 1198917460u, 1327195159u, 1198917460u, 0, FABSF_TOLERANCE, 0}, +{532, 3201603336u, 820047343u, 1054119688u, 0, FABSF_TOLERANCE, 0}, +{533, 3114686212u, 3476082461u, 967202564u, 0, FABSF_TOLERANCE, 0}, +{534, 921940707u, 2967544056u, 921940707u, 0, FABSF_TOLERANCE, 0}, +{535, 1091906532u, 3011904455u, 1091906532u, 0, FABSF_TOLERANCE, 0}, +{536, 3393557778u, 3383396815u, 1246074130u, 0, FABSF_TOLERANCE, 0}, +{537, 1276853215u, 873199561u, 1276853215u, 0, FABSF_TOLERANCE, 0}, +{538, 3462778440u, 3349284325u, 1315294792u, 0, FABSF_TOLERANCE, 0}, +{539, 3360170117u, 3048354042u, 1212686469u, 0, FABSF_TOLERANCE, 0}, +{540, 3224245428u, 3271307999u, 1076761780u, 0, FABSF_TOLERANCE, 0}, +{541, 1120124467u, 1135619937u, 1120124467u, 0, FABSF_TOLERANCE, 0}, +{542, 1064364381u, 3180675544u, 1064364381u, 0, FABSF_TOLERANCE, 0}, +{543, 1268744779u, 3328452652u, 1268744779u, 0, FABSF_TOLERANCE, 0}, +{544, 1165195428u, 3390323168u, 1165195428u, 0, FABSF_TOLERANCE, 0}, +{545, 3044092739u, 1106497311u, 896609091u, 0, FABSF_TOLERANCE, 0}, +{546, 3149469534u, 1278465842u, 1001985886u, 0, FABSF_TOLERANCE, 0}, +{547, 3247790039u, 909788142u, 1100306391u, 0, FABSF_TOLERANCE, 0}, +{548, 3215244648u, 1083988595u, 1067761000u, 0, FABSF_TOLERANCE, 0}, +{549, 3095275931u, 989153382u, 947792283u, 0, FABSF_TOLERANCE, 0}, +{550, 3059688264u, 1117455718u, 912204616u, 0, FABSF_TOLERANCE, 0}, +{551, 1212717473u, 837873779u, 1212717473u, 0, FABSF_TOLERANCE, 0}, +{552, 3275973009u, 3450721670u, 1128489361u, 0, FABSF_TOLERANCE, 0}, +{553, 3028857014u, 3188853813u, 881373366u, 0, FABSF_TOLERANCE, 0}, +{554, 3391162308u, 1291220039u, 1243678660u, 0, FABSF_TOLERANCE, 0}, +{555, 1044867873u, 3369493273u, 1044867873u, 0, FABSF_TOLERANCE, 0}, +{556, 1089986803u, 3462160118u, 1089986803u, 0, FABSF_TOLERANCE, 0}, +{557, 1296314700u, 2957454177u, 1296314700u, 0, FABSF_TOLERANCE, 0}, +{558, 1251462432u, 3171021770u, 1251462432u, 0, FABSF_TOLERANCE, 0}, +{559, 3485236902u, 980772835u, 1337753254u, 0, FABSF_TOLERANCE, 0}, +{560, 3262169538u, 1268270462u, 1114685890u, 0, FABSF_TOLERANCE, 0}, +{561, 3080852256u, 994641495u, 933368608u, 0, FABSF_TOLERANCE, 0}, +{562, 1022211242u, 922124181u, 1022211242u, 0, FABSF_TOLERANCE, 0}, +{563, 884661176u, 2985540645u, 884661176u, 0, FABSF_TOLERANCE, 0}, +{564, 3071422941u, 3271100396u, 923939293u, 0, FABSF_TOLERANCE, 0}, +{565, 989762529u, 3362011135u, 989762529u, 0, FABSF_TOLERANCE, 0}, +{566, 1295475718u, 3212305413u, 1295475718u, 0, FABSF_TOLERANCE, 0}, +{567, 1002632518u, 3330388441u, 1002632518u, 0, FABSF_TOLERANCE, 0}, +{568, 3404372005u, 3450484255u, 1256888357u, 0, FABSF_TOLERANCE, 0}, +{569, 3158912530u, 3105501826u, 1011428882u, 0, FABSF_TOLERANCE, 0}, +{570, 1125800069u, 3256265749u, 1125800069u, 0, FABSF_TOLERANCE, 0}, +{571, 3138037576u, 3103365227u, 990553928u, 0, FABSF_TOLERANCE, 0}, +{572, 3108384823u, 1300246663u, 960901175u, 0, FABSF_TOLERANCE, 0}, +{573, 999985470u, 3409354318u, 999985470u, 0, FABSF_TOLERANCE, 0}, +{574, 1189421739u, 1056599002u, 1189421739u, 0, FABSF_TOLERANCE, 0}, +{575, 3075182644u, 3144159778u, 927698996u, 0, FABSF_TOLERANCE, 0}, +{576, 3028099649u, 3391513557u, 880616001u, 0, FABSF_TOLERANCE, 0}, +{577, 3132541814u, 3444521949u, 985058166u, 0, FABSF_TOLERANCE, 0}, +{578, 1164046161u, 3440635788u, 1164046161u, 0, FABSF_TOLERANCE, 0}, +{579, 1292596266u, 3116569667u, 1292596266u, 0, FABSF_TOLERANCE, 0}, +{580, 3469748379u, 3412765608u, 1322264731u, 0, FABSF_TOLERANCE, 0}, +{581, 1314644642u, 3123051784u, 1314644642u, 0, FABSF_TOLERANCE, 0}, +{582, 3399813173u, 828743798u, 1252329525u, 0, FABSF_TOLERANCE, 0}, +{583, 948775569u, 3485444126u, 948775569u, 0, FABSF_TOLERANCE, 0}, +{584, 1034611395u, 882288581u, 1034611395u, 0, FABSF_TOLERANCE, 0}, +{585, 3489122735u, 3372450889u, 1341639087u, 0, FABSF_TOLERANCE, 0}, +{586, 1181604787u, 3363067409u, 1181604787u, 0, FABSF_TOLERANCE, 0}, +{587, 3059042077u, 3204983963u, 911558429u, 0, FABSF_TOLERANCE, 0}, +{588, 1043691622u, 3402603223u, 1043691622u, 0, FABSF_TOLERANCE, 0}, +{589, 1314588083u, 856187848u, 1314588083u, 0, FABSF_TOLERANCE, 0}, +{590, 3141533334u, 3010142974u, 994049686u, 0, FABSF_TOLERANCE, 0}, +{591, 3157534378u, 3451674717u, 1010050730u, 0, FABSF_TOLERANCE, 0}, +{592, 3400949680u, 3073750220u, 1253466032u, 0, FABSF_TOLERANCE, 0}, +{593, 3365581801u, 1175843167u, 1218098153u, 0, FABSF_TOLERANCE, 0}, +{594, 1110424755u, 3011308654u, 1110424755u, 0, FABSF_TOLERANCE, 0}, +{595, 3189917167u, 927278934u, 1042433519u, 0, FABSF_TOLERANCE, 0}, +{596, 969804941u, 3355439348u, 969804941u, 0, FABSF_TOLERANCE, 0}, +{597, 1139120919u, 3270515074u, 1139120919u, 0, FABSF_TOLERANCE, 0}, +{598, 934308144u, 3118191228u, 934308144u, 0, FABSF_TOLERANCE, 0}, +{599, 1220524226u, 1152648002u, 1220524226u, 0, FABSF_TOLERANCE, 0}, +{600, 3162548604u, 3461790298u, 1015064956u, 0, FABSF_TOLERANCE, 0}, +{601, 3382391700u, 3296962745u, 1234908052u, 0, FABSF_TOLERANCE, 0}, +{602, 1156767533u, 1088986462u, 1156767533u, 0, FABSF_TOLERANCE, 0}, +{603, 3079222483u, 3312324949u, 931738835u, 0, FABSF_TOLERANCE, 0}, +{604, 994934087u, 967678094u, 994934087u, 0, FABSF_TOLERANCE, 0}, +{605, 3185240099u, 1123403720u, 1037756451u, 0, FABSF_TOLERANCE, 0}, +{606, 3479873563u, 1246277393u, 1332389915u, 0, FABSF_TOLERANCE, 0}, +{607, 3424264117u, 3434026174u, 1276780469u, 0, FABSF_TOLERANCE, 0}, +{608, 3228365887u, 1216775310u, 1080882239u, 0, FABSF_TOLERANCE, 0}, +{609, 1035909900u, 1249532942u, 1035909900u, 0, FABSF_TOLERANCE, 0}, +{610, 3024951184u, 1247632131u, 877467536u, 0, FABSF_TOLERANCE, 0}, +{611, 1212129651u, 3017366784u, 1212129651u, 0, FABSF_TOLERANCE, 0}, +{612, 3125775254u, 955826310u, 978291606u, 0, FABSF_TOLERANCE, 0}, +{613, 1037464105u, 3121544932u, 1037464105u, 0, FABSF_TOLERANCE, 0}, +{614, 1311706596u, 1254918706u, 1311706596u, 0, FABSF_TOLERANCE, 0}, +{615, 918212457u, 1017468331u, 918212457u, 0, FABSF_TOLERANCE, 0}, +{616, 1337315179u, 3461361185u, 1337315179u, 0, FABSF_TOLERANCE, 0}, +{617, 1131358407u, 3325958870u, 1131358407u, 0, FABSF_TOLERANCE, 0}, +{618, 1156517523u, 3343716230u, 1156517523u, 0, FABSF_TOLERANCE, 0}, +{619, 3210802820u, 3207408574u, 1063319172u, 0, FABSF_TOLERANCE, 0}, +{620, 3337499209u, 1226297264u, 1190015561u, 0, FABSF_TOLERANCE, 0}, +{621, 3468429030u, 3253874001u, 1320945382u, 0, FABSF_TOLERANCE, 0}, +{622, 3253515800u, 1189005947u, 1106032152u, 0, FABSF_TOLERANCE, 0}, +{623, 3055299953u, 3047908678u, 907816305u, 0, FABSF_TOLERANCE, 0}, +{624, 959956547u, 876324728u, 959956547u, 0, FABSF_TOLERANCE, 0}, +{625, 3425290480u, 1139193797u, 1277806832u, 0, FABSF_TOLERANCE, 0}, +{626, 1039917375u, 1122740999u, 1039917375u, 0, FABSF_TOLERANCE, 0}, +{627, 3220979495u, 3429223871u, 1073495847u, 0, FABSF_TOLERANCE, 0}, +{628, 1311016004u, 3334899880u, 1311016004u, 0, FABSF_TOLERANCE, 0}, +{629, 1128016396u, 1105151547u, 1128016396u, 0, FABSF_TOLERANCE, 0}, +{630, 3210335769u, 3100646155u, 1062852121u, 0, FABSF_TOLERANCE, 0}, +{631, 3022705759u, 3404762495u, 875222111u, 0, FABSF_TOLERANCE, 0}, +{632, 1206054701u, 826010009u, 1206054701u, 0, FABSF_TOLERANCE, 0}, +{633, 3144504834u, 1162227076u, 997021186u, 0, FABSF_TOLERANCE, 0}, +{634, 1213609983u, 919983950u, 1213609983u, 0, FABSF_TOLERANCE, 0}, +{635, 1246902946u, 3064047808u, 1246902946u, 0, FABSF_TOLERANCE, 0}, +{636, 995850843u, 1332031130u, 995850843u, 0, FABSF_TOLERANCE, 0}, +{637, 3362082828u, 3374056268u, 1214599180u, 0, FABSF_TOLERANCE, 0}, +{638, 1029480631u, 3047777170u, 1029480631u, 0, FABSF_TOLERANCE, 0}, +{639, 3153568584u, 3106514232u, 1006084936u, 0, FABSF_TOLERANCE, 0}, +{640, 3384988527u, 3109485565u, 1237504879u, 0, FABSF_TOLERANCE, 0}, +{641, 1317696241u, 870681806u, 1317696241u, 0, FABSF_TOLERANCE, 0}, +{642, 3235395924u, 1132055244u, 1087912276u, 0, FABSF_TOLERANCE, 0}, +{643, 3341877624u, 2969495570u, 1194393976u, 0, FABSF_TOLERANCE, 0}, +{644, 1228636133u, 886552820u, 1228636133u, 0, FABSF_TOLERANCE, 0}, +{645, 3161654634u, 3335899347u, 1014170986u, 0, FABSF_TOLERANCE, 0}, +{646, 3162655243u, 3307203982u, 1015171595u, 0, FABSF_TOLERANCE, 0}, +{647, 1207246237u, 859223639u, 1207246237u, 0, FABSF_TOLERANCE, 0}, +{648, 1165476654u, 3350219111u, 1165476654u, 0, FABSF_TOLERANCE, 0}, +{649, 1215278023u, 3019755242u, 1215278023u, 0, FABSF_TOLERANCE, 0}, +{650, 1017239798u, 3438501281u, 1017239798u, 0, FABSF_TOLERANCE, 0}, +{651, 1149651309u, 970030475u, 1149651309u, 0, FABSF_TOLERANCE, 0}, +{652, 1111943722u, 3122211334u, 1111943722u, 0, FABSF_TOLERANCE, 0}, +{653, 1189849849u, 3382739134u, 1189849849u, 0, FABSF_TOLERANCE, 0}, +{654, 3204848496u, 3141519085u, 1057364848u, 0, FABSF_TOLERANCE, 0}, +{655, 1249758327u, 3104759211u, 1249758327u, 0, FABSF_TOLERANCE, 0}, +{656, 3092982276u, 3445282331u, 945498628u, 0, FABSF_TOLERANCE, 0}, +{657, 1168098747u, 1316854744u, 1168098747u, 0, FABSF_TOLERANCE, 0}, +{658, 892549317u, 1179637545u, 892549317u, 0, FABSF_TOLERANCE, 0}, +{659, 3301009024u, 3406174560u, 1153525376u, 0, FABSF_TOLERANCE, 0}, +{660, 3233089227u, 1212652543u, 1085605579u, 0, FABSF_TOLERANCE, 0}, +{661, 3218245284u, 1238873830u, 1070761636u, 0, FABSF_TOLERANCE, 0}, +{662, 3215981890u, 3240474694u, 1068498242u, 0, FABSF_TOLERANCE, 0}, +{663, 1266687209u, 3092038122u, 1266687209u, 0, FABSF_TOLERANCE, 0}, +{664, 3487959775u, 3331372071u, 1340476127u, 0, FABSF_TOLERANCE, 0}, +{665, 943645710u, 852875779u, 943645710u, 0, FABSF_TOLERANCE, 0}, +{666, 3345065699u, 3282620725u, 1197582051u, 0, FABSF_TOLERANCE, 0}, +{667, 935847271u, 1067255804u, 935847271u, 0, FABSF_TOLERANCE, 0}, +{668, 3410336089u, 1111437780u, 1262852441u, 0, FABSF_TOLERANCE, 0}, +{669, 3082940740u, 1336840432u, 935457092u, 0, FABSF_TOLERANCE, 0}, +{670, 1141063391u, 1168908072u, 1141063391u, 0, FABSF_TOLERANCE, 0}, +{671, 3059263153u, 3067795684u, 911779505u, 0, FABSF_TOLERANCE, 0}, +{672, 3353679791u, 897158391u, 1206196143u, 0, FABSF_TOLERANCE, 0}, +{673, 1001823878u, 1016826861u, 1001823878u, 0, FABSF_TOLERANCE, 0}, +{674, 1009130212u, 1004302940u, 1009130212u, 0, FABSF_TOLERANCE, 0}, +{675, 3367127535u, 943136342u, 1219643887u, 0, FABSF_TOLERANCE, 0}, +{676, 1032920919u, 3449126417u, 1032920919u, 0, FABSF_TOLERANCE, 0}, +{677, 3281952870u, 3147012185u, 1134469222u, 0, FABSF_TOLERANCE, 0}, +{678, 1237868497u, 3048281802u, 1237868497u, 0, FABSF_TOLERANCE, 0}, +{679, 1153753924u, 3322269242u, 1153753924u, 0, FABSF_TOLERANCE, 0}, +{680, 1120261759u, 892210998u, 1120261759u, 0, FABSF_TOLERANCE, 0}, +{681, 3226328360u, 3366432856u, 1078844712u, 0, FABSF_TOLERANCE, 0}, +{682, 3349595986u, 3251588707u, 1202112338u, 0, FABSF_TOLERANCE, 0}, +{683, 3166889490u, 3306023523u, 1019405842u, 0, FABSF_TOLERANCE, 0}, +{684, 1087750238u, 1099325523u, 1087750238u, 0, FABSF_TOLERANCE, 0}, +{685, 3121620061u, 3359488363u, 974136413u, 0, FABSF_TOLERANCE, 0}, +{686, 1066116543u, 3072159933u, 1066116543u, 0, FABSF_TOLERANCE, 0}, +{687, 3210898034u, 2981803389u, 1063414386u, 0, FABSF_TOLERANCE, 0}, +{688, 3051923237u, 3364074347u, 904439589u, 0, FABSF_TOLERANCE, 0}, +{689, 1030612298u, 3345396001u, 1030612298u, 0, FABSF_TOLERANCE, 0}, +{690, 1186234578u, 858134374u, 1186234578u, 0, FABSF_TOLERANCE, 0}, +{691, 1331680743u, 1009396165u, 1331680743u, 0, FABSF_TOLERANCE, 0}, +{692, 3060774997u, 1326067357u, 913291349u, 0, FABSF_TOLERANCE, 0}, +{693, 887589411u, 1292305693u, 887589411u, 0, FABSF_TOLERANCE, 0}, +{694, 1045232522u, 3234993273u, 1045232522u, 0, FABSF_TOLERANCE, 0}, +{695, 3119858470u, 962515365u, 972374822u, 0, FABSF_TOLERANCE, 0}, +{696, 3349432725u, 928848003u, 1201949077u, 0, FABSF_TOLERANCE, 0}, +{697, 912423027u, 3184646319u, 912423027u, 0, FABSF_TOLERANCE, 0}, +{698, 3228795133u, 3273940030u, 1081311485u, 0, FABSF_TOLERANCE, 0}, +{699, 3194674746u, 3112269709u, 1047191098u, 0, FABSF_TOLERANCE, 0}, +{700, 3296784303u, 3276182352u, 1149300655u, 0, FABSF_TOLERANCE, 0}, +{701, 965402291u, 3107104376u, 965402291u, 0, FABSF_TOLERANCE, 0}, +{702, 3388153589u, 3426245389u, 1240669941u, 0, FABSF_TOLERANCE, 0}, +{703, 1133410485u, 3329658993u, 1133410485u, 0, FABSF_TOLERANCE, 0}, +{704, 3136790322u, 1088652637u, 989306674u, 0, FABSF_TOLERANCE, 0}, +{705, 3369970587u, 959121458u, 1222486939u, 0, FABSF_TOLERANCE, 0}, +{706, 1270451568u, 928393353u, 1270451568u, 0, FABSF_TOLERANCE, 0}, +{707, 989498922u, 3088358419u, 989498922u, 0, FABSF_TOLERANCE, 0}, +{708, 1280215674u, 3148135875u, 1280215674u, 0, FABSF_TOLERANCE, 0}, +{709, 1171873518u, 954709738u, 1171873518u, 0, FABSF_TOLERANCE, 0}, +{710, 3298258100u, 935525182u, 1150774452u, 0, FABSF_TOLERANCE, 0}, +{711, 3415208824u, 822843236u, 1267725176u, 0, FABSF_TOLERANCE, 0}, +{712, 1001897182u, 3191875320u, 1001897182u, 0, FABSF_TOLERANCE, 0}, +{713, 3152777939u, 3245830463u, 1005294291u, 0, FABSF_TOLERANCE, 0}, +{714, 985903305u, 3333087577u, 985903305u, 0, FABSF_TOLERANCE, 0}, +{715, 3357328848u, 859306298u, 1209845200u, 0, FABSF_TOLERANCE, 0}, +{716, 982612185u, 923582663u, 982612185u, 0, FABSF_TOLERANCE, 0}, +{717, 3267868136u, 1208301947u, 1120384488u, 0, FABSF_TOLERANCE, 0}, +{718, 3319048157u, 1172271145u, 1171564509u, 0, FABSF_TOLERANCE, 0}, +{719, 1144755661u, 860947435u, 1144755661u, 0, FABSF_TOLERANCE, 0}, +{720, 898467286u, 839254959u, 898467286u, 0, FABSF_TOLERANCE, 0}, +{721, 3301461672u, 1233693827u, 1153978024u, 0, FABSF_TOLERANCE, 0}, +{722, 3364525678u, 3089849671u, 1217042030u, 0, FABSF_TOLERANCE, 0}, +{723, 931441127u, 1133424555u, 931441127u, 0, FABSF_TOLERANCE, 0}, +{724, 3146660041u, 3143695961u, 999176393u, 0, FABSF_TOLERANCE, 0}, +{725, 3467121799u, 3023584354u, 1319638151u, 0, FABSF_TOLERANCE, 0}, +{726, 1151257041u, 3084216427u, 1151257041u, 0, FABSF_TOLERANCE, 0}, +{727, 3097873255u, 3219266640u, 950389607u, 0, FABSF_TOLERANCE, 0}, +{728, 3130670309u, 3192399254u, 983186661u, 0, FABSF_TOLERANCE, 0}, +{729, 1017573824u, 3130901062u, 1017573824u, 0, FABSF_TOLERANCE, 0}, +{730, 1258369714u, 3462258576u, 1258369714u, 0, FABSF_TOLERANCE, 0}, +{731, 1216602683u, 3371396332u, 1216602683u, 0, FABSF_TOLERANCE, 0}, +{732, 3297265739u, 1214184410u, 1149782091u, 0, FABSF_TOLERANCE, 0}, +{733, 1071940738u, 3311731012u, 1071940738u, 0, FABSF_TOLERANCE, 0}, +{734, 922601356u, 3337171870u, 922601356u, 0, FABSF_TOLERANCE, 0}, +{735, 3462285635u, 3444030332u, 1314801987u, 0, FABSF_TOLERANCE, 0}, +{736, 3357177805u, 1085464241u, 1209694157u, 0, FABSF_TOLERANCE, 0}, +{737, 3049120080u, 900832851u, 901636432u, 0, FABSF_TOLERANCE, 0}, +{738, 1153863660u, 1011991342u, 1153863660u, 0, FABSF_TOLERANCE, 0}, +{739, 3034243695u, 917098003u, 886760047u, 0, FABSF_TOLERANCE, 0}, +{740, 1249365132u, 3278686216u, 1249365132u, 0, FABSF_TOLERANCE, 0}, +{741, 3046215730u, 3211219980u, 898732082u, 0, FABSF_TOLERANCE, 0}, +{742, 3047251716u, 1090787353u, 899768068u, 0, FABSF_TOLERANCE, 0}, +{743, 3131219358u, 3471261157u, 983735710u, 0, FABSF_TOLERANCE, 0}, +{744, 3222096285u, 1198013705u, 1074612637u, 0, FABSF_TOLERANCE, 0}, +{745, 1297708818u, 3079166173u, 1297708818u, 0, FABSF_TOLERANCE, 0}, +{746, 3345532722u, 3383708463u, 1198049074u, 0, FABSF_TOLERANCE, 0}, +{747, 3418753236u, 3481843070u, 1271269588u, 0, FABSF_TOLERANCE, 0}, +{748, 1277417964u, 3487506626u, 1277417964u, 0, FABSF_TOLERANCE, 0}, +{749, 987577257u, 1152077087u, 987577257u, 0, FABSF_TOLERANCE, 0}, +{750, 3161606610u, 3190282989u, 1014122962u, 0, FABSF_TOLERANCE, 0}, +{751, 888030585u, 3062367380u, 888030585u, 0, FABSF_TOLERANCE, 0}, +{752, 1043442869u, 3311393817u, 1043442869u, 0, FABSF_TOLERANCE, 0}, +{753, 3320923228u, 3464544249u, 1173439580u, 0, FABSF_TOLERANCE, 0}, +{754, 1337400405u, 3488844154u, 1337400405u, 0, FABSF_TOLERANCE, 0}, +{755, 3400348640u, 3129868490u, 1252864992u, 0, FABSF_TOLERANCE, 0}, +{756, 1250249095u, 1069023744u, 1250249095u, 0, FABSF_TOLERANCE, 0}, +{757, 3284411233u, 1173613526u, 1136927585u, 0, FABSF_TOLERANCE, 0}, +{758, 3020883322u, 2953622587u, 873399674u, 0, FABSF_TOLERANCE, 0}, +{759, 1215968622u, 3469884568u, 1215968622u, 0, FABSF_TOLERANCE, 0}, +{760, 3202319550u, 819117302u, 1054835902u, 0, FABSF_TOLERANCE, 0}, +{761, 3061638260u, 3116222327u, 914154612u, 0, FABSF_TOLERANCE, 0}, +{762, 1025404104u, 1066370251u, 1025404104u, 0, FABSF_TOLERANCE, 0}, +{763, 3138086437u, 3195983510u, 990602789u, 0, FABSF_TOLERANCE, 0}, +{764, 3091024506u, 3456196859u, 943540858u, 0, FABSF_TOLERANCE, 0}, +{765, 3362748242u, 3369843597u, 1215264594u, 0, FABSF_TOLERANCE, 0}, +{766, 3099671635u, 3218383623u, 952187987u, 0, FABSF_TOLERANCE, 0}, +{767, 3068014841u, 2978226656u, 920531193u, 0, FABSF_TOLERANCE, 0}, +{768, 1252237719u, 1121169249u, 1252237719u, 0, FABSF_TOLERANCE, 0}, +{769, 3327895594u, 1224511805u, 1180411946u, 0, FABSF_TOLERANCE, 0}, +{770, 3082454432u, 889268276u, 934970784u, 0, FABSF_TOLERANCE, 0}, +{771, 3396161504u, 1182798837u, 1248677856u, 0, FABSF_TOLERANCE, 0}, +{772, 1099710167u, 887180181u, 1099710167u, 0, FABSF_TOLERANCE, 0}, +{773, 1157186482u, 1288722647u, 1157186482u, 0, FABSF_TOLERANCE, 0}, +{774, 1282110851u, 3176633124u, 1282110851u, 0, FABSF_TOLERANCE, 0}, +{775, 3477008113u, 1331845018u, 1329524465u, 0, FABSF_TOLERANCE, 0}, +{776, 3292127294u, 3409957764u, 1144643646u, 0, FABSF_TOLERANCE, 0}, +{777, 1123357102u, 3281307320u, 1123357102u, 0, FABSF_TOLERANCE, 0}, +{778, 1106837025u, 3088080674u, 1106837025u, 0, FABSF_TOLERANCE, 0}, +{779, 1049949008u, 1130799489u, 1049949008u, 0, FABSF_TOLERANCE, 0}, +{780, 1253017688u, 942062372u, 1253017688u, 0, FABSF_TOLERANCE, 0}, +{781, 1108543194u, 3281299199u, 1108543194u, 0, FABSF_TOLERANCE, 0}, +{782, 3087985411u, 1238341456u, 940501763u, 0, FABSF_TOLERANCE, 0}, +{783, 3163283126u, 1328636961u, 1015799478u, 0, FABSF_TOLERANCE, 0}, +{784, 1160162706u, 1264067367u, 1160162706u, 0, FABSF_TOLERANCE, 0}, +{785, 3305715025u, 3017496063u, 1158231377u, 0, FABSF_TOLERANCE, 0}, +{786, 1266928623u, 811778614u, 1266928623u, 0, FABSF_TOLERANCE, 0}, +{787, 3025340297u, 1193925540u, 877856649u, 0, FABSF_TOLERANCE, 0}, +{788, 3438080027u, 3107114149u, 1290596379u, 0, FABSF_TOLERANCE, 0}, +{789, 3344574751u, 3111270744u, 1197091103u, 0, FABSF_TOLERANCE, 0}, +{790, 1152416724u, 962669179u, 1152416724u, 0, FABSF_TOLERANCE, 0}, +{791, 1218239308u, 1126238113u, 1218239308u, 0, FABSF_TOLERANCE, 0}, +{792, 3263310567u, 1030748197u, 1115826919u, 0, FABSF_TOLERANCE, 0}, +{793, 3041998669u, 1160635263u, 894515021u, 0, FABSF_TOLERANCE, 0}, +{794, 1000313118u, 2980130729u, 1000313118u, 0, FABSF_TOLERANCE, 0}, +{795, 972485427u, 1124312043u, 972485427u, 0, FABSF_TOLERANCE, 0}, +{796, 3290264612u, 1124703898u, 1142780964u, 0, FABSF_TOLERANCE, 0}, +{797, 3222106584u, 1183748648u, 1074622936u, 0, FABSF_TOLERANCE, 0}, +{798, 1278946388u, 825129857u, 1278946388u, 0, FABSF_TOLERANCE, 0}, +{799, 947914771u, 3181847068u, 947914771u, 0, FABSF_TOLERANCE, 0}, +{800, 3167730654u, 3195765940u, 1020247006u, 0, FABSF_TOLERANCE, 0}, +{801, 1098530298u, 3255870890u, 1098530298u, 0, FABSF_TOLERANCE, 0}, +{802, 3232726036u, 871038882u, 1085242388u, 0, FABSF_TOLERANCE, 0}, +{803, 1297190916u, 811863044u, 1297190916u, 0, FABSF_TOLERANCE, 0}, +{804, 1277649137u, 961171401u, 1277649137u, 0, FABSF_TOLERANCE, 0}, +{805, 3203377685u, 1306427476u, 1055894037u, 0, FABSF_TOLERANCE, 0}, +{806, 3090306474u, 3124785016u, 942822826u, 0, FABSF_TOLERANCE, 0}, +{807, 3244032016u, 3045313345u, 1096548368u, 0, FABSF_TOLERANCE, 0}, +{808, 3033122376u, 3049877065u, 885638728u, 0, FABSF_TOLERANCE, 0}, +{809, 1096155623u, 1256423752u, 1096155623u, 0, FABSF_TOLERANCE, 0}, +{810, 873151908u, 3246562559u, 873151908u, 0, FABSF_TOLERANCE, 0}, +{811, 3238729605u, 1298769842u, 1091245957u, 0, FABSF_TOLERANCE, 0}, +{812, 3317196817u, 989537151u, 1169713169u, 0, FABSF_TOLERANCE, 0}, +{813, 3374748510u, 834161190u, 1227264862u, 0, FABSF_TOLERANCE, 0}, +{814, 3345634950u, 959901149u, 1198151302u, 0, FABSF_TOLERANCE, 0}, +{815, 3189860276u, 883598767u, 1042376628u, 0, FABSF_TOLERANCE, 0}, +{816, 887311687u, 1175312255u, 887311687u, 0, FABSF_TOLERANCE, 0}, +{817, 3396917283u, 3066326686u, 1249433635u, 0, FABSF_TOLERANCE, 0}, +{818, 3317032737u, 3143803722u, 1169549089u, 0, FABSF_TOLERANCE, 0}, +{819, 1200051436u, 1163802508u, 1200051436u, 0, FABSF_TOLERANCE, 0}, +{820, 3105291012u, 1194385202u, 957807364u, 0, FABSF_TOLERANCE, 0}, +{821, 1306520561u, 957302464u, 1306520561u, 0, FABSF_TOLERANCE, 0}, +{822, 1314936356u, 2985592532u, 1314936356u, 0, FABSF_TOLERANCE, 0}, +{823, 3475052219u, 1284049853u, 1327568571u, 0, FABSF_TOLERANCE, 0}, +{824, 3085636260u, 1107682820u, 938152612u, 0, FABSF_TOLERANCE, 0}, +{825, 3393227708u, 3271879112u, 1245744060u, 0, FABSF_TOLERANCE, 0}, +{826, 3182540197u, 852580839u, 1035056549u, 0, FABSF_TOLERANCE, 0}, +{827, 3349005404u, 3080993030u, 1201521756u, 0, FABSF_TOLERANCE, 0}, +{828, 3154720153u, 3443720494u, 1007236505u, 0, FABSF_TOLERANCE, 0}, +{829, 1262863321u, 1219003129u, 1262863321u, 0, FABSF_TOLERANCE, 0}, +{830, 882902102u, 1224362550u, 882902102u, 0, FABSF_TOLERANCE, 0}, +{831, 1053387478u, 3184880021u, 1053387478u, 0, FABSF_TOLERANCE, 0}, +{832, 3387653691u, 3347783852u, 1240170043u, 0, FABSF_TOLERANCE, 0}, +{833, 3136364836u, 1018492227u, 988881188u, 0, FABSF_TOLERANCE, 0}, +{834, 1338680611u, 1166078045u, 1338680611u, 0, FABSF_TOLERANCE, 0}, +{835, 1112891928u, 3074730425u, 1112891928u, 0, FABSF_TOLERANCE, 0}, +{836, 893449284u, 1052877339u, 893449284u, 0, FABSF_TOLERANCE, 0}, +{837, 892311459u, 1097338393u, 892311459u, 0, FABSF_TOLERANCE, 0}, +{838, 3105373037u, 3246705916u, 957889389u, 0, FABSF_TOLERANCE, 0}, +{839, 1190105283u, 3033907262u, 1190105283u, 0, FABSF_TOLERANCE, 0}, +{840, 1011225926u, 1180485180u, 1011225926u, 0, FABSF_TOLERANCE, 0}, +{841, 1043025031u, 987068973u, 1043025031u, 0, FABSF_TOLERANCE, 0}, +{842, 3410531037u, 2953541915u, 1263047389u, 0, FABSF_TOLERANCE, 0}, +{843, 3125834184u, 896953754u, 978350536u, 0, FABSF_TOLERANCE, 0}, +{844, 902318189u, 849277289u, 902318189u, 0, FABSF_TOLERANCE, 0}, +{845, 3213624815u, 2987148017u, 1066141167u, 0, FABSF_TOLERANCE, 0}, +{846, 1120888322u, 1086209113u, 1120888322u, 0, FABSF_TOLERANCE, 0}, +{847, 1315217243u, 3396371713u, 1315217243u, 0, FABSF_TOLERANCE, 0}, +{848, 3137758475u, 1039403054u, 990274827u, 0, FABSF_TOLERANCE, 0}, +{849, 1040617590u, 1034835971u, 1040617590u, 0, FABSF_TOLERANCE, 0}, +{850, 955384253u, 3344785562u, 955384253u, 0, FABSF_TOLERANCE, 0}, +{851, 3061417900u, 1172208065u, 913934252u, 0, FABSF_TOLERANCE, 0}, +{852, 904255535u, 1019967545u, 904255535u, 0, FABSF_TOLERANCE, 0}, +{853, 1022984119u, 3113891410u, 1022984119u, 0, FABSF_TOLERANCE, 0}, +{854, 997362368u, 3112875428u, 997362368u, 0, FABSF_TOLERANCE, 0}, +{855, 900933520u, 1100589187u, 900933520u, 0, FABSF_TOLERANCE, 0}, +{856, 1168623062u, 1143306482u, 1168623062u, 0, FABSF_TOLERANCE, 0}, +{857, 878737490u, 3269908326u, 878737490u, 0, FABSF_TOLERANCE, 0}, +{858, 1039827284u, 1072928888u, 1039827284u, 0, FABSF_TOLERANCE, 0}, +{859, 1021564080u, 1064468397u, 1021564080u, 0, FABSF_TOLERANCE, 0}, +{860, 3458669745u, 3033299853u, 1311186097u, 0, FABSF_TOLERANCE, 0}, +{861, 3327516316u, 3405380971u, 1180032668u, 0, FABSF_TOLERANCE, 0}, +{862, 1040711112u, 3229444200u, 1040711112u, 0, FABSF_TOLERANCE, 0}, +{863, 1134528351u, 3365952513u, 1134528351u, 0, FABSF_TOLERANCE, 0}, +{864, 3039884464u, 1170612785u, 892400816u, 0, FABSF_TOLERANCE, 0}, +{865, 3414352838u, 3350285760u, 1266869190u, 0, FABSF_TOLERANCE, 0}, +{866, 1133689539u, 1067460093u, 1133689539u, 0, FABSF_TOLERANCE, 0}, +{867, 3455688478u, 3333091960u, 1308204830u, 0, FABSF_TOLERANCE, 0}, +{868, 1137634874u, 1137038869u, 1137634874u, 0, FABSF_TOLERANCE, 0}, +{869, 3415502662u, 955510692u, 1268019014u, 0, FABSF_TOLERANCE, 0}, +{870, 954999730u, 969618597u, 954999730u, 0, FABSF_TOLERANCE, 0}, +{871, 1066157309u, 3241712664u, 1066157309u, 0, FABSF_TOLERANCE, 0}, +{872, 3436353675u, 1174967495u, 1288870027u, 0, FABSF_TOLERANCE, 0}, +{873, 940437609u, 860372396u, 940437609u, 0, FABSF_TOLERANCE, 0}, +{874, 3108347547u, 3434003435u, 960863899u, 0, FABSF_TOLERANCE, 0}, +{875, 3064200154u, 3158080507u, 916716506u, 0, FABSF_TOLERANCE, 0}, +{876, 1023889593u, 2979304683u, 1023889593u, 0, FABSF_TOLERANCE, 0}, +{877, 3272661536u, 3461799138u, 1125177888u, 0, FABSF_TOLERANCE, 0}, +{878, 1170245333u, 1233406410u, 1170245333u, 0, FABSF_TOLERANCE, 0}, +{879, 1219052056u, 3369557946u, 1219052056u, 0, FABSF_TOLERANCE, 0}, +{880, 3318983619u, 3259663338u, 1171499971u, 0, FABSF_TOLERANCE, 0}, +{881, 3372118621u, 837597103u, 1224634973u, 0, FABSF_TOLERANCE, 0}, +{882, 3146190320u, 889646054u, 998706672u, 0, FABSF_TOLERANCE, 0}, +{883, 1299683827u, 966031619u, 1299683827u, 0, FABSF_TOLERANCE, 0}, +{884, 3190796331u, 1320011850u, 1043312683u, 0, FABSF_TOLERANCE, 0}, +{885, 3086068902u, 3484245751u, 938585254u, 0, FABSF_TOLERANCE, 0}, +{886, 3064155399u, 3176569312u, 916671751u, 0, FABSF_TOLERANCE, 0}, +{887, 3040314717u, 1071290674u, 892831069u, 0, FABSF_TOLERANCE, 0}, +{888, 3257224022u, 3361778245u, 1109740374u, 0, FABSF_TOLERANCE, 0}, +{889, 1229268598u, 1066965677u, 1229268598u, 0, FABSF_TOLERANCE, 0}, +{890, 3184078812u, 871003709u, 1036595164u, 0, FABSF_TOLERANCE, 0}, +{891, 1086717248u, 3423795374u, 1086717248u, 0, FABSF_TOLERANCE, 0}, +{892, 3434884607u, 3029593823u, 1287400959u, 0, FABSF_TOLERANCE, 0}, +{893, 3464955606u, 1017987696u, 1317471958u, 0, FABSF_TOLERANCE, 0}, +{894, 1025278524u, 3121856207u, 1025278524u, 0, FABSF_TOLERANCE, 0}, +{895, 1242829722u, 3233935671u, 1242829722u, 0, FABSF_TOLERANCE, 0}, +{896, 3075149137u, 1117325737u, 927665489u, 0, FABSF_TOLERANCE, 0}, +{897, 1200927971u, 1317167489u, 1200927971u, 0, FABSF_TOLERANCE, 0}, +{898, 3326858092u, 3452602832u, 1179374444u, 0, FABSF_TOLERANCE, 0}, +{899, 1246019790u, 850632217u, 1246019790u, 0, FABSF_TOLERANCE, 0}, +{900, 3184801644u, 1137974313u, 1037317996u, 0, FABSF_TOLERANCE, 0}, +{901, 1136052740u, 3244616020u, 1136052740u, 0, FABSF_TOLERANCE, 0}, +{902, 1069009211u, 3002507482u, 1069009211u, 0, FABSF_TOLERANCE, 0}, +{903, 1015670780u, 1101217251u, 1015670780u, 0, FABSF_TOLERANCE, 0}, +{904, 1012543234u, 1116520440u, 1012543234u, 0, FABSF_TOLERANCE, 0}, +{905, 3316611992u, 3394732912u, 1169128344u, 0, FABSF_TOLERANCE, 0}, +{906, 1087942795u, 3316660295u, 1087942795u, 0, FABSF_TOLERANCE, 0}, +{907, 3426365713u, 3069778532u, 1278882065u, 0, FABSF_TOLERANCE, 0}, +{908, 3066654389u, 3443934204u, 919170741u, 0, FABSF_TOLERANCE, 0}, +{909, 3295326432u, 1313396175u, 1147842784u, 0, FABSF_TOLERANCE, 0}, +{910, 3318835308u, 3277583511u, 1171351660u, 0, FABSF_TOLERANCE, 0}, +{911, 3283555717u, 891875120u, 1136072069u, 0, FABSF_TOLERANCE, 0}, +{912, 3381255420u, 3015406047u, 1233771772u, 0, FABSF_TOLERANCE, 0}, +{913, 3040485181u, 3375450886u, 893001533u, 0, FABSF_TOLERANCE, 0}, +{914, 3388772093u, 1032597076u, 1241288445u, 0, FABSF_TOLERANCE, 0}, +{915, 954670189u, 1144923689u, 954670189u, 0, FABSF_TOLERANCE, 0}, +{916, 1319200415u, 3387555900u, 1319200415u, 0, FABSF_TOLERANCE, 0}, +{917, 1279324488u, 3228401212u, 1279324488u, 0, FABSF_TOLERANCE, 0}, +{918, 3217795424u, 865577227u, 1070311776u, 0, FABSF_TOLERANCE, 0}, +{919, 3455131757u, 1260217257u, 1307648109u, 0, FABSF_TOLERANCE, 0}, +{920, 1246947517u, 1087951909u, 1246947517u, 0, FABSF_TOLERANCE, 0}, +{921, 3396723577u, 869285240u, 1249239929u, 0, FABSF_TOLERANCE, 0}, +{922, 3433761025u, 3060143904u, 1286277377u, 0, FABSF_TOLERANCE, 0}, +{923, 3201187455u, 900233172u, 1053703807u, 0, FABSF_TOLERANCE, 0}, +{924, 1173247961u, 1191127979u, 1173247961u, 0, FABSF_TOLERANCE, 0}, +{925, 3037297123u, 3346394818u, 889813475u, 0, FABSF_TOLERANCE, 0}, +{926, 3248534678u, 1323683800u, 1101051030u, 0, FABSF_TOLERANCE, 0}, +{927, 3083019343u, 3033309444u, 935535695u, 0, FABSF_TOLERANCE, 0}, +{928, 3042018375u, 3203882372u, 894534727u, 0, FABSF_TOLERANCE, 0}, +{929, 1082862511u, 3032804719u, 1082862511u, 0, FABSF_TOLERANCE, 0}, +{930, 3157626955u, 3483653298u, 1010143307u, 0, FABSF_TOLERANCE, 0}, +{931, 1341821683u, 3003675365u, 1341821683u, 0, FABSF_TOLERANCE, 0}, +{932, 881101379u, 1190838126u, 881101379u, 0, FABSF_TOLERANCE, 0}, +{933, 1079061705u, 2960507663u, 1079061705u, 0, FABSF_TOLERANCE, 0}, +{934, 3182695954u, 3256861672u, 1035212306u, 0, FABSF_TOLERANCE, 0}, +{935, 1105291533u, 3482971524u, 1105291533u, 0, FABSF_TOLERANCE, 0}, +{936, 1016023520u, 3227712090u, 1016023520u, 0, FABSF_TOLERANCE, 0}, +{937, 3370691006u, 1295870514u, 1223207358u, 0, FABSF_TOLERANCE, 0}, +{938, 1156767169u, 1049756240u, 1156767169u, 0, FABSF_TOLERANCE, 0}, +{939, 3077020499u, 894671462u, 929536851u, 0, FABSF_TOLERANCE, 0}, +{940, 1104284039u, 3040211914u, 1104284039u, 0, FABSF_TOLERANCE, 0}, +{941, 3335212901u, 3486414589u, 1187729253u, 0, FABSF_TOLERANCE, 0}, +{942, 1093697541u, 3193708441u, 1093697541u, 0, FABSF_TOLERANCE, 0}, +{943, 3266691185u, 1160074593u, 1119207537u, 0, FABSF_TOLERANCE, 0}, +{944, 3179003144u, 1108615803u, 1031519496u, 0, FABSF_TOLERANCE, 0}, +{945, 1094115255u, 3008610212u, 1094115255u, 0, FABSF_TOLERANCE, 0}, +{946, 3424086808u, 3260140004u, 1276603160u, 0, FABSF_TOLERANCE, 0}, +{947, 3353608773u, 1134068114u, 1206125125u, 0, FABSF_TOLERANCE, 0}, +{948, 973664327u, 1319516167u, 973664327u, 0, FABSF_TOLERANCE, 0}, +{949, 882878091u, 3136970767u, 882878091u, 0, FABSF_TOLERANCE, 0}, +{950, 1098662266u, 833740182u, 1098662266u, 0, FABSF_TOLERANCE, 0}, +{951, 927582555u, 947955456u, 927582555u, 0, FABSF_TOLERANCE, 0}, +{952, 3111440310u, 3067634077u, 963956662u, 0, FABSF_TOLERANCE, 0}, +{953, 3476083859u, 966439623u, 1328600211u, 0, FABSF_TOLERANCE, 0}, +{954, 3038754840u, 932009686u, 891271192u, 0, FABSF_TOLERANCE, 0}, +{955, 979878744u, 1232482646u, 979878744u, 0, FABSF_TOLERANCE, 0}, +{956, 3464546616u, 3205527253u, 1317062968u, 0, FABSF_TOLERANCE, 0}, +{957, 1002542205u, 3152136093u, 1002542205u, 0, FABSF_TOLERANCE, 0}, +{958, 3443552129u, 3165561391u, 1296068481u, 0, FABSF_TOLERANCE, 0}, +{959, 1287620154u, 3119707283u, 1287620154u, 0, FABSF_TOLERANCE, 0}, +{960, 946058434u, 1249928879u, 946058434u, 0, FABSF_TOLERANCE, 0}, +{961, 3073260205u, 3093124531u, 925776557u, 0, FABSF_TOLERANCE, 0}, +{962, 1245702957u, 894348966u, 1245702957u, 0, FABSF_TOLERANCE, 0}, +{963, 989655126u, 1308376568u, 989655126u, 0, FABSF_TOLERANCE, 0}, +{964, 1002715618u, 1191006977u, 1002715618u, 0, FABSF_TOLERANCE, 0}, +{965, 3087802274u, 897541752u, 940318626u, 0, FABSF_TOLERANCE, 0}, +{966, 1000863905u, 1196831314u, 1000863905u, 0, FABSF_TOLERANCE, 0}, +{967, 3415763001u, 3032518431u, 1268279353u, 0, FABSF_TOLERANCE, 0}, +{968, 3283471961u, 1260093226u, 1135988313u, 0, FABSF_TOLERANCE, 0}, +{969, 3311210827u, 1192192264u, 1163727179u, 0, FABSF_TOLERANCE, 0}, +{970, 3026311911u, 2968974374u, 878828263u, 0, FABSF_TOLERANCE, 0}, +{971, 1198307901u, 1116328249u, 1198307901u, 0, FABSF_TOLERANCE, 0}, +{972, 1288901567u, 1296370667u, 1288901567u, 0, FABSF_TOLERANCE, 0}, +{973, 922255363u, 958305289u, 922255363u, 0, FABSF_TOLERANCE, 0}, +{974, 1113104661u, 944376032u, 1113104661u, 0, FABSF_TOLERANCE, 0}, +{975, 1136714348u, 828849087u, 1136714348u, 0, FABSF_TOLERANCE, 0}, +{976, 948856035u, 1015466475u, 948856035u, 0, FABSF_TOLERANCE, 0}, +{977, 1062512367u, 3229559531u, 1062512367u, 0, FABSF_TOLERANCE, 0}, +{978, 3486907092u, 823220784u, 1339423444u, 0, FABSF_TOLERANCE, 0}, +{979, 1162027071u, 3308983387u, 1162027071u, 0, FABSF_TOLERANCE, 0}, +{980, 1034561811u, 1054043114u, 1034561811u, 0, FABSF_TOLERANCE, 0}, +{981, 3271615417u, 3209997200u, 1124131769u, 0, FABSF_TOLERANCE, 0}, +{982, 1042014529u, 1146708584u, 1042014529u, 0, FABSF_TOLERANCE, 0}, +{983, 1177157787u, 3090208179u, 1177157787u, 0, FABSF_TOLERANCE, 0}, +{984, 3196144817u, 1056118717u, 1048661169u, 0, FABSF_TOLERANCE, 0}, +{985, 3432084552u, 2997091781u, 1284600904u, 0, FABSF_TOLERANCE, 0}, +{986, 1309658335u, 1010219988u, 1309658335u, 0, FABSF_TOLERANCE, 0}, +{987, 1226494979u, 2991604792u, 1226494979u, 0, FABSF_TOLERANCE, 0}, +{988, 3100289712u, 3456334210u, 952806064u, 0, FABSF_TOLERANCE, 0}, +{989, 3375507013u, 1306310823u, 1228023365u, 0, FABSF_TOLERANCE, 0}, +{990, 3460699001u, 3096700943u, 1313215353u, 0, FABSF_TOLERANCE, 0}, +{991, 3079231719u, 1044386263u, 931748071u, 0, FABSF_TOLERANCE, 0}, +{992, 3093951884u, 1014115231u, 946468236u, 0, FABSF_TOLERANCE, 0}, +{993, 3468023178u, 1209565017u, 1320539530u, 0, FABSF_TOLERANCE, 0}, +{994, 1204196034u, 3298625731u, 1204196034u, 0, FABSF_TOLERANCE, 0}, +{995, 3459877411u, 2960476959u, 1312393763u, 0, FABSF_TOLERANCE, 0}, +{996, 909696559u, 1163075690u, 909696559u, 0, FABSF_TOLERANCE, 0}, +{997, 1161439847u, 943449277u, 1161439847u, 0, FABSF_TOLERANCE, 0}, +{998, 908663107u, 939489763u, 908663107u, 0, FABSF_TOLERANCE, 0}, +{999, 1055319316u, 3261813492u, 1055319316u, 0, FABSF_TOLERANCE, 0}, +{1000, 1084378658u, 1009650785u, 1084378658u, 0, FABSF_TOLERANCE, 0}, +{1001, 3053887750u, 3341786453u, 906404102u, 0, FABSF_TOLERANCE, 0}, +{1002, 3022828828u, 881335251u, 875345180u, 0, FABSF_TOLERANCE, 0}, +{1003, 1226473697u, 821025132u, 1226473697u, 0, FABSF_TOLERANCE, 0}, +{1004, 1123114742u, 1229815537u, 1123114742u, 0, FABSF_TOLERANCE, 0}, +{1005, 1258114435u, 1291336083u, 1258114435u, 0, FABSF_TOLERANCE, 0}, +{1006, 3468040845u, 3066966245u, 1320557197u, 0, FABSF_TOLERANCE, 0}, +{1007, 1178825761u, 1113195286u, 1178825761u, 0, FABSF_TOLERANCE, 0}, +{1008, 3059266302u, 878503862u, 911782654u, 0, FABSF_TOLERANCE, 0}, +{1009, 3223384012u, 1130486973u, 1075900364u, 0, FABSF_TOLERANCE, 0}, +{1010, 1019964626u, 1235133609u, 1019964626u, 0, FABSF_TOLERANCE, 0}, +{1011, 3445262427u, 3465211174u, 1297778779u, 0, FABSF_TOLERANCE, 0}, +{1012, 1125653081u, 1207799746u, 1125653081u, 0, FABSF_TOLERANCE, 0}, +{1013, 3337652712u, 3025581813u, 1190169064u, 0, FABSF_TOLERANCE, 0}, +{1014, 1184753508u, 3147374485u, 1184753508u, 0, FABSF_TOLERANCE, 0}, +{1015, 996404791u, 3353251979u, 996404791u, 0, FABSF_TOLERANCE, 0}, +{1016, 1188439315u, 1113484271u, 1188439315u, 0, FABSF_TOLERANCE, 0}, +{1017, 906557513u, 3006513432u, 906557513u, 0, FABSF_TOLERANCE, 0}, +{1018, 916831283u, 999465787u, 916831283u, 0, FABSF_TOLERANCE, 0}, +{1019, 996786317u, 3179221951u, 996786317u, 0, FABSF_TOLERANCE, 0}, +{1020, 3461635065u, 1004690387u, 1314151417u, 0, FABSF_TOLERANCE, 0}, +{1021, 1188167943u, 1200744896u, 1188167943u, 0, FABSF_TOLERANCE, 0}, +{1022, 3036502395u, 1172597364u, 889018747u, 0, FABSF_TOLERANCE, 0}, +{1023, 891257783u, 1267560050u, 891257783u, 0, FABSF_TOLERANCE, 0}, +{1024, 3290079438u, 846519377u, 1142595790u, 0, FABSF_TOLERANCE, 0}, +{1025, 3350690327u, 2967953392u, 1203206679u, 0, FABSF_TOLERANCE, 0}, +{1026, 1102061604u, 3424449935u, 1102061604u, 0, FABSF_TOLERANCE, 0}, +{1027, 1282351521u, 3039376424u, 1282351521u, 0, FABSF_TOLERANCE, 0}, +{1028, 3458861065u, 3392466405u, 1311377417u, 0, FABSF_TOLERANCE, 0}, +{1029, 3095256878u, 1023623326u, 947773230u, 0, FABSF_TOLERANCE, 0}, +{1030, 3163373610u, 843150426u, 1015889962u, 0, FABSF_TOLERANCE, 0}, +{1031, 3228793330u, 855146890u, 1081309682u, 0, FABSF_TOLERANCE, 0}, +{1032, 3422194733u, 893873945u, 1274711085u, 0, FABSF_TOLERANCE, 0}, +{1033, 3083885296u, 974543672u, 936401648u, 0, FABSF_TOLERANCE, 0}, +{1034, 1261940623u, 3402349985u, 1261940623u, 0, FABSF_TOLERANCE, 0}, +{1035, 3400603081u, 3234396843u, 1253119433u, 0, FABSF_TOLERANCE, 0}, +{1036, 1219411812u, 2961857939u, 1219411812u, 0, FABSF_TOLERANCE, 0}, +{1037, 3094833770u, 805351108u, 947350122u, 0, FABSF_TOLERANCE, 0}, +{1038, 3139250800u, 3079109479u, 991767152u, 0, FABSF_TOLERANCE, 0}, +{1039, 886201503u, 3272760705u, 886201503u, 0, FABSF_TOLERANCE, 0}, +{1040, 3297366026u, 1089966380u, 1149882378u, 0, FABSF_TOLERANCE, 0}, +{1041, 1218488455u, 3309646450u, 1218488455u, 0, FABSF_TOLERANCE, 0}, +{1042, 3040358923u, 3093401553u, 892875275u, 0, FABSF_TOLERANCE, 0}, +{1043, 1283938137u, 1196383822u, 1283938137u, 0, FABSF_TOLERANCE, 0}, +{1044, 3182551696u, 3029982441u, 1035068048u, 0, FABSF_TOLERANCE, 0}, +{1045, 1317098613u, 949986176u, 1317098613u, 0, FABSF_TOLERANCE, 0}, +{1046, 3116209179u, 3303588342u, 968725531u, 0, FABSF_TOLERANCE, 0}, +{1047, 3431703657u, 3014443710u, 1284220009u, 0, FABSF_TOLERANCE, 0}, +{1048, 3239728775u, 927815421u, 1092245127u, 0, FABSF_TOLERANCE, 0}, +{1049, 3207141672u, 933456504u, 1059658024u, 0, FABSF_TOLERANCE, 0}, +{1050, 3154378805u, 905462392u, 1006895157u, 0, FABSF_TOLERANCE, 0}, +{1051, 3069658155u, 1041452042u, 922174507u, 0, FABSF_TOLERANCE, 0}, +{1052, 3313160088u, 2964063309u, 1165676440u, 0, FABSF_TOLERANCE, 0}, +{1053, 3207056527u, 3384206601u, 1059572879u, 0, FABSF_TOLERANCE, 0}, +{1054, 1284174954u, 3436881197u, 1284174954u, 0, FABSF_TOLERANCE, 0}, +{1055, 3156081645u, 3308839704u, 1008597997u, 0, FABSF_TOLERANCE, 0}, +{1056, 1063693032u, 976661408u, 1063693032u, 0, FABSF_TOLERANCE, 0}, +{1057, 3036026175u, 1251203998u, 888542527u, 0, FABSF_TOLERANCE, 0}, +{1058, 1102631663u, 3396951425u, 1102631663u, 0, FABSF_TOLERANCE, 0}, +{1059, 968803479u, 992989712u, 968803479u, 0, FABSF_TOLERANCE, 0}, +{1060, 3273080388u, 3109405906u, 1125596740u, 0, FABSF_TOLERANCE, 0}, +{1061, 1172529774u, 3294550127u, 1172529774u, 0, FABSF_TOLERANCE, 0}, +{1062, 1306695905u, 1292690378u, 1306695905u, 0, FABSF_TOLERANCE, 0}, +{1063, 1003649752u, 1218792138u, 1003649752u, 0, FABSF_TOLERANCE, 0}, +{1064, 1078478376u, 1326246424u, 1078478376u, 0, FABSF_TOLERANCE, 0}, +{1065, 3158855023u, 3151283866u, 1011371375u, 0, FABSF_TOLERANCE, 0}, +{1066, 1165177679u, 3276237026u, 1165177679u, 0, FABSF_TOLERANCE, 0}, +{1067, 3403009513u, 3381966453u, 1255525865u, 0, FABSF_TOLERANCE, 0}, +{1068, 952348506u, 3377573987u, 952348506u, 0, FABSF_TOLERANCE, 0}, +{1069, 1222777442u, 1125769920u, 1222777442u, 0, FABSF_TOLERANCE, 0}, +{1070, 1325324763u, 978336043u, 1325324763u, 0, FABSF_TOLERANCE, 0}, +{1071, 3363524213u, 3202991311u, 1216040565u, 0, FABSF_TOLERANCE, 0}, +{1072, 1158950321u, 1073578913u, 1158950321u, 0, FABSF_TOLERANCE, 0}, +{1073, 903129873u, 3416864271u, 903129873u, 0, FABSF_TOLERANCE, 0}, +{1074, 3078339944u, 988173985u, 930856296u, 0, FABSF_TOLERANCE, 0}, +{1075, 1208345407u, 1254181270u, 1208345407u, 0, FABSF_TOLERANCE, 0}, +{1076, 1258634105u, 1247426200u, 1258634105u, 0, FABSF_TOLERANCE, 0}, +{1077, 1248478509u, 1287895126u, 1248478509u, 0, FABSF_TOLERANCE, 0}, +{1078, 1153863988u, 3430539165u, 1153863988u, 0, FABSF_TOLERANCE, 0}, +{1079, 1235620969u, 866627358u, 1235620969u, 0, FABSF_TOLERANCE, 0}, +{1080, 1097120930u, 3221726305u, 1097120930u, 0, FABSF_TOLERANCE, 0}, +{1081, 3469778622u, 1200179013u, 1322294974u, 0, FABSF_TOLERANCE, 0}, +{1082, 1147712200u, 931865525u, 1147712200u, 0, FABSF_TOLERANCE, 0}, +{1083, 1124721745u, 3058969650u, 1124721745u, 0, FABSF_TOLERANCE, 0}, +{1084, 3261744304u, 1043806501u, 1114260656u, 0, FABSF_TOLERANCE, 0}, +{1085, 1064922416u, 1320485628u, 1064922416u, 0, FABSF_TOLERANCE, 0}, +{1086, 3303160152u, 3075455322u, 1155676504u, 0, FABSF_TOLERANCE, 0}, +{1087, 1315090496u, 3269683237u, 1315090496u, 0, FABSF_TOLERANCE, 0}, +{1088, 3230403187u, 1322841992u, 1082919539u, 0, FABSF_TOLERANCE, 0}, +{1089, 1335399673u, 974138676u, 1335399673u, 0, FABSF_TOLERANCE, 0}, +{1090, 1072458508u, 3372833993u, 1072458508u, 0, FABSF_TOLERANCE, 0}, +{1091, 3303015249u, 3015039539u, 1155531601u, 0, FABSF_TOLERANCE, 0}, +{1092, 3252139741u, 1059615003u, 1104656093u, 0, FABSF_TOLERANCE, 0}, +{1093, 3468519966u, 3113982619u, 1321036318u, 0, FABSF_TOLERANCE, 0}, +{1094, 1006231203u, 897530770u, 1006231203u, 0, FABSF_TOLERANCE, 0}, +{1095, 951554138u, 1001144381u, 951554138u, 0, FABSF_TOLERANCE, 0}, +{1096, 942046828u, 986341002u, 942046828u, 0, FABSF_TOLERANCE, 0}, +{1097, 3319723279u, 3414482416u, 1172239631u, 0, FABSF_TOLERANCE, 0}, +{1098, 3255104167u, 928827688u, 1107620519u, 0, FABSF_TOLERANCE, 0}, +{1099, 1155477903u, 3104812800u, 1155477903u, 0, FABSF_TOLERANCE, 0}, +{1100, 3273889176u, 980486479u, 1126405528u, 0, FABSF_TOLERANCE, 0}, +{1101, 3237813668u, 3441016803u, 1090330020u, 0, FABSF_TOLERANCE, 0}, +{1102, 1228207362u, 2985476579u, 1228207362u, 0, FABSF_TOLERANCE, 0}, +{1103, 975349337u, 1311932596u, 975349337u, 0, FABSF_TOLERANCE, 0}, +{1104, 1290175785u, 3008182462u, 1290175785u, 0, FABSF_TOLERANCE, 0}, +{1105, 981908840u, 3314038398u, 981908840u, 0, FABSF_TOLERANCE, 0}, +{1106, 941187647u, 1107765599u, 941187647u, 0, FABSF_TOLERANCE, 0}, +{1107, 1214223128u, 3225536822u, 1214223128u, 0, FABSF_TOLERANCE, 0}, +{1108, 3422922584u, 1086391131u, 1275438936u, 0, FABSF_TOLERANCE, 0}, +{1109, 1315857601u, 3487600045u, 1315857601u, 0, FABSF_TOLERANCE, 0}, +{1110, 3453226030u, 3233768835u, 1305742382u, 0, FABSF_TOLERANCE, 0}, +{1111, 1078359574u, 3199175230u, 1078359574u, 0, FABSF_TOLERANCE, 0}, +{1112, 1029557624u, 3302959071u, 1029557624u, 0, FABSF_TOLERANCE, 0}, +{1113, 1207675424u, 3042692550u, 1207675424u, 0, FABSF_TOLERANCE, 0}, +{1114, 1028355074u, 3442294040u, 1028355074u, 0, FABSF_TOLERANCE, 0}, +{1115, 3119299090u, 1187096397u, 971815442u, 0, FABSF_TOLERANCE, 0}, +{1116, 1248421894u, 3367769132u, 1248421894u, 0, FABSF_TOLERANCE, 0}, +{1117, 3353251994u, 1095517730u, 1205768346u, 0, FABSF_TOLERANCE, 0}, +{1118, 876926659u, 3288089977u, 876926659u, 0, FABSF_TOLERANCE, 0}, +{1119, 1076752219u, 876236939u, 1076752219u, 0, FABSF_TOLERANCE, 0}, +{1120, 3388531942u, 2988520062u, 1241048294u, 0, FABSF_TOLERANCE, 0}, +{1121, 1273395082u, 3031189261u, 1273395082u, 0, FABSF_TOLERANCE, 0}, +{1122, 3385588183u, 3258252464u, 1238104535u, 0, FABSF_TOLERANCE, 0}, +{1123, 3192315328u, 3289489214u, 1044831680u, 0, FABSF_TOLERANCE, 0}, +{1124, 3441804648u, 3274638356u, 1294321000u, 0, FABSF_TOLERANCE, 0}, +{1125, 3392827417u, 1277961150u, 1245343769u, 0, FABSF_TOLERANCE, 0}, +{1126, 1161241793u, 1328003707u, 1161241793u, 0, FABSF_TOLERANCE, 0}, +{1127, 3034494183u, 3041579130u, 887010535u, 0, FABSF_TOLERANCE, 0}, +{1128, 1171318485u, 3374409104u, 1171318485u, 0, FABSF_TOLERANCE, 0}, +{1129, 3047748143u, 831102792u, 900264495u, 0, FABSF_TOLERANCE, 0}, +{1130, 1001216371u, 3052357038u, 1001216371u, 0, FABSF_TOLERANCE, 0}, +{1131, 912515889u, 1074635609u, 912515889u, 0, FABSF_TOLERANCE, 0}, +{1132, 3391452505u, 897989232u, 1243968857u, 0, FABSF_TOLERANCE, 0}, +{1133, 3249603369u, 3147662248u, 1102119721u, 0, FABSF_TOLERANCE, 0}, +{1134, 1220264047u, 2960450369u, 1220264047u, 0, FABSF_TOLERANCE, 0}, +{1135, 3169816394u, 988430929u, 1022332746u, 0, FABSF_TOLERANCE, 0}, +{1136, 3098997418u, 3002162688u, 951513770u, 0, FABSF_TOLERANCE, 0}, +{1137, 3282212423u, 3174079140u, 1134728775u, 0, FABSF_TOLERANCE, 0}, +{1138, 3352293320u, 3247843425u, 1204809672u, 0, FABSF_TOLERANCE, 0}, +{1139, 3296358441u, 875645354u, 1148874793u, 0, FABSF_TOLERANCE, 0}, +{1140, 1197828352u, 3245614728u, 1197828352u, 0, FABSF_TOLERANCE, 0}, +{1141, 3340510371u, 914930263u, 1193026723u, 0, FABSF_TOLERANCE, 0}, +{1142, 1127109339u, 3368125489u, 1127109339u, 0, FABSF_TOLERANCE, 0}, +{1143, 909467381u, 1232375752u, 909467381u, 0, FABSF_TOLERANCE, 0}, +{1144, 1200599955u, 2981200675u, 1200599955u, 0, FABSF_TOLERANCE, 0}, +{1145, 962230977u, 2988248037u, 962230977u, 0, FABSF_TOLERANCE, 0}, +{1146, 3192887808u, 3191848339u, 1045404160u, 0, FABSF_TOLERANCE, 0}, +{1147, 3237183876u, 3179379969u, 1089700228u, 0, FABSF_TOLERANCE, 0}, +{1148, 939285924u, 3056079386u, 939285924u, 0, FABSF_TOLERANCE, 0}, +{1149, 944050180u, 3452557879u, 944050180u, 0, FABSF_TOLERANCE, 0}, +{1150, 3058135703u, 3090284601u, 910652055u, 0, FABSF_TOLERANCE, 0}, +{1151, 3480592662u, 3261728191u, 1333109014u, 0, FABSF_TOLERANCE, 0}, +{1152, 3061939312u, 3274418540u, 914455664u, 0, FABSF_TOLERANCE, 0}, +{1153, 1003299981u, 853295521u, 1003299981u, 0, FABSF_TOLERANCE, 0}, +{1154, 1155775526u, 1255814444u, 1155775526u, 0, FABSF_TOLERANCE, 0}, +{1155, 1234491880u, 3408568717u, 1234491880u, 0, FABSF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_FABSF_H multiple inclusion protection + +// EOF fabsf.h diff --git a/packages/language/c/libm/current/tests/vectors/finitef.c b/packages/language/c/libm/current/tests/vectors/finitef.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/finitef.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// finitef.c +// +// Test of finitef() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/finitef.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(finitef_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &finitef, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &finitef_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("finitef() is stable"); + } // if + else + { + CYG_TEST_FAIL("finitef() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library finitef() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "finitef() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF finitef.c diff --git a/packages/language/c/libm/current/tests/vectors/finitef.h b/packages/language/c/libm/current/tests/vectors/finitef.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/finitef.h @@ -0,0 +1,1362 @@ +#ifndef CYGONCE_LIBM_FINITEF_H +#define CYGONCE_LIBM_FINITEF_H +//=========================================================================== +// +// finitef.h +// +// Test vectors for testing of finitef() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/finitef.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define FINITEF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t finitef_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{120, 646742016u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{241, 3231108068u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{242, 3226013659u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{243, 3217625051u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{244, 0u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{245, 1070141403u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{246, 1078530011u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{247, 1083624420u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{248, 3253731328u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{249, 3252840038u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{250, 3251948749u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{251, 3251057459u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{252, 3250166170u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{253, 3249274880u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{254, 3248383590u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{255, 3247492301u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{256, 3246601011u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{257, 3245028147u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{258, 3243245568u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{259, 3241462989u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{260, 3239680410u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{261, 3237792973u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{262, 3234227814u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{263, 3230662656u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{264, 3224580915u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{265, 3213675725u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{266, 1058642330u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{267, 1075000115u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{268, 1082130432u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{269, 1085695590u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{270, 1089260749u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{271, 1091672474u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{272, 1093455053u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{273, 1095237632u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{274, 1097020211u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{275, 1098802790u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{276, 1099746509u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{277, 1100637798u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{278, 1101529088u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{279, 1102420378u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{280, 1103311667u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{281, 1104202957u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{282, 1105094246u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{283, 1105985536u, 0u, 1u, 0, FINITEF_TOLERANCE, 0}, +{284, 1107800421u, 1203999711u, 1u, 0, FINITEF_TOLERANCE, 0}, +{285, 3196650934u, 896005582u, 1u, 0, FINITEF_TOLERANCE, 0}, +{286, 3368700125u, 3308232444u, 1u, 0, FINITEF_TOLERANCE, 0}, +{287, 1224242132u, 3061363425u, 1u, 0, FINITEF_TOLERANCE, 0}, +{288, 3221027117u, 1284201705u, 1u, 0, FINITEF_TOLERANCE, 0}, +{289, 1198712763u, 919636942u, 1u, 0, FINITEF_TOLERANCE, 0}, +{290, 867432512u, 3067736756u, 1u, 0, FINITEF_TOLERANCE, 0}, +{291, 3159309973u, 852521077u, 1u, 0, FINITEF_TOLERANCE, 0}, +{292, 954173073u, 850531830u, 1u, 0, FINITEF_TOLERANCE, 0}, +{293, 3090780435u, 1035260608u, 1u, 0, FINITEF_TOLERANCE, 0}, +{294, 966554515u, 3234538174u, 1u, 0, FINITEF_TOLERANCE, 0}, +{295, 1312607135u, 1194999402u, 1u, 0, FINITEF_TOLERANCE, 0}, +{296, 1166191415u, 1018661564u, 1u, 0, FINITEF_TOLERANCE, 0}, +{297, 3111900019u, 1130472166u, 1u, 0, FINITEF_TOLERANCE, 0}, +{298, 1234419246u, 2984575812u, 1u, 0, FINITEF_TOLERANCE, 0}, +{299, 1302107128u, 3370647675u, 1u, 0, FINITEF_TOLERANCE, 0}, +{300, 1052801068u, 3039122570u, 1u, 0, FINITEF_TOLERANCE, 0}, +{301, 1060849628u, 3081357692u, 1u, 0, FINITEF_TOLERANCE, 0}, +{302, 3010214568u, 3446630737u, 1u, 0, FINITEF_TOLERANCE, 0}, +{303, 3484320003u, 3033957825u, 1u, 0, FINITEF_TOLERANCE, 0}, +{304, 3181522772u, 3305392896u, 1u, 0, FINITEF_TOLERANCE, 0}, +{305, 882596369u, 1256676590u, 1u, 0, FINITEF_TOLERANCE, 0}, +{306, 1167223673u, 846102364u, 1u, 0, FINITEF_TOLERANCE, 0}, +{307, 968192794u, 878547432u, 1u, 0, FINITEF_TOLERANCE, 0}, +{308, 3122346862u, 1111584337u, 1u, 0, FINITEF_TOLERANCE, 0}, +{309, 1052361612u, 1280025214u, 1u, 0, FINITEF_TOLERANCE, 0}, +{310, 906701409u, 2968301825u, 1u, 0, FINITEF_TOLERANCE, 0}, +{311, 3471653172u, 1154138102u, 1u, 0, FINITEF_TOLERANCE, 0}, +{312, 843024648u, 3166833184u, 1u, 0, FINITEF_TOLERANCE, 0}, +{313, 3231467496u, 934336592u, 1u, 0, FINITEF_TOLERANCE, 0}, +{314, 1341514497u, 3466051188u, 1u, 0, FINITEF_TOLERANCE, 0}, +{315, 1272351391u, 3373485062u, 1u, 0, FINITEF_TOLERANCE, 0}, +{316, 3319724992u, 3354615790u, 1u, 0, FINITEF_TOLERANCE, 0}, +{317, 3013402113u, 3266377514u, 1u, 0, FINITEF_TOLERANCE, 0}, +{318, 917622040u, 1334966485u, 1u, 0, FINITEF_TOLERANCE, 0}, +{319, 940236348u, 3304072663u, 1u, 0, FINITEF_TOLERANCE, 0}, +{320, 2963234879u, 977028681u, 1u, 0, FINITEF_TOLERANCE, 0}, +{321, 3251541546u, 3174764041u, 1u, 0, FINITEF_TOLERANCE, 0}, +{322, 3099843889u, 3355962282u, 1u, 0, FINITEF_TOLERANCE, 0}, +{323, 3110358400u, 851145088u, 1u, 0, FINITEF_TOLERANCE, 0}, +{324, 3371863479u, 1014861921u, 1u, 0, FINITEF_TOLERANCE, 0}, +{325, 3204069187u, 966573255u, 1u, 0, FINITEF_TOLERANCE, 0}, +{326, 1306460502u, 903489435u, 1u, 0, FINITEF_TOLERANCE, 0}, +{327, 1197542187u, 3024598921u, 1u, 0, FINITEF_TOLERANCE, 0}, +{328, 922888249u, 1139392309u, 1u, 0, FINITEF_TOLERANCE, 0}, +{329, 1184239996u, 3224098462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{330, 1252490238u, 1173619825u, 1u, 0, FINITEF_TOLERANCE, 0}, +{331, 1001673627u, 3462631271u, 1u, 0, FINITEF_TOLERANCE, 0}, +{332, 976098044u, 1151967422u, 1u, 0, FINITEF_TOLERANCE, 0}, +{333, 941796645u, 886451963u, 1u, 0, FINITEF_TOLERANCE, 0}, +{334, 3006797923u, 1103058486u, 1u, 0, FINITEF_TOLERANCE, 0}, +{335, 855756273u, 3217259624u, 1u, 0, FINITEF_TOLERANCE, 0}, +{336, 3287199470u, 854245542u, 1u, 0, FINITEF_TOLERANCE, 0}, +{337, 893184329u, 1243067084u, 1u, 0, FINITEF_TOLERANCE, 0}, +{338, 1143233714u, 1007268238u, 1u, 0, FINITEF_TOLERANCE, 0}, +{339, 1139941253u, 1147688821u, 1u, 0, FINITEF_TOLERANCE, 0}, +{340, 3143717025u, 3234638157u, 1u, 0, FINITEF_TOLERANCE, 0}, +{341, 3048866608u, 3449209899u, 1u, 0, FINITEF_TOLERANCE, 0}, +{342, 3240298487u, 1020260821u, 1u, 0, FINITEF_TOLERANCE, 0}, +{343, 1288902137u, 3123875978u, 1u, 0, FINITEF_TOLERANCE, 0}, +{344, 1333134799u, 1338107877u, 1u, 0, FINITEF_TOLERANCE, 0}, +{345, 1187847971u, 1317663644u, 1u, 0, FINITEF_TOLERANCE, 0}, +{346, 1038851706u, 1327544110u, 1u, 0, FINITEF_TOLERANCE, 0}, +{347, 3329354473u, 3165437289u, 1u, 0, FINITEF_TOLERANCE, 0}, +{348, 3077218579u, 1308397879u, 1u, 0, FINITEF_TOLERANCE, 0}, +{349, 1309289088u, 1019883016u, 1u, 0, FINITEF_TOLERANCE, 0}, +{350, 2991550291u, 1294782875u, 1u, 0, FINITEF_TOLERANCE, 0}, +{351, 3444653659u, 1279248024u, 1u, 0, FINITEF_TOLERANCE, 0}, +{352, 3405585402u, 2962345057u, 1u, 0, FINITEF_TOLERANCE, 0}, +{353, 3106647724u, 853848387u, 1u, 0, FINITEF_TOLERANCE, 0}, +{354, 1106778573u, 3304487767u, 1u, 0, FINITEF_TOLERANCE, 0}, +{355, 1140567947u, 3069174149u, 1u, 0, FINITEF_TOLERANCE, 0}, +{356, 1238569473u, 873035665u, 1u, 0, FINITEF_TOLERANCE, 0}, +{357, 840375965u, 3223983207u, 1u, 0, FINITEF_TOLERANCE, 0}, +{358, 3154871957u, 1276671061u, 1u, 0, FINITEF_TOLERANCE, 0}, +{359, 1261071232u, 1182202773u, 1u, 0, FINITEF_TOLERANCE, 0}, +{360, 1175011025u, 3029705783u, 1u, 0, FINITEF_TOLERANCE, 0}, +{361, 1082692850u, 1211581107u, 1u, 0, FINITEF_TOLERANCE, 0}, +{362, 974547519u, 3475164509u, 1u, 0, FINITEF_TOLERANCE, 0}, +{363, 3058097085u, 3104309359u, 1u, 0, FINITEF_TOLERANCE, 0}, +{364, 3107252546u, 1071134451u, 1u, 0, FINITEF_TOLERANCE, 0}, +{365, 3096032662u, 2976848821u, 1u, 0, FINITEF_TOLERANCE, 0}, +{366, 3197942144u, 3094120030u, 1u, 0, FINITEF_TOLERANCE, 0}, +{367, 3403348556u, 3184653669u, 1u, 0, FINITEF_TOLERANCE, 0}, +{368, 2998032500u, 3373011130u, 1u, 0, FINITEF_TOLERANCE, 0}, +{369, 3182301130u, 3460764044u, 1u, 0, FINITEF_TOLERANCE, 0}, +{370, 1136411063u, 1118097422u, 1u, 0, FINITEF_TOLERANCE, 0}, +{371, 3239231622u, 3302723069u, 1u, 0, FINITEF_TOLERANCE, 0}, +{372, 3340615780u, 870350055u, 1u, 0, FINITEF_TOLERANCE, 0}, +{373, 998567360u, 2995278691u, 1u, 0, FINITEF_TOLERANCE, 0}, +{374, 3417964312u, 1321337529u, 1u, 0, FINITEF_TOLERANCE, 0}, +{375, 3109481038u, 1143864063u, 1u, 0, FINITEF_TOLERANCE, 0}, +{376, 1148867223u, 1256486202u, 1u, 0, FINITEF_TOLERANCE, 0}, +{377, 2960983878u, 1314196594u, 1u, 0, FINITEF_TOLERANCE, 0}, +{378, 989687421u, 3372681320u, 1u, 0, FINITEF_TOLERANCE, 0}, +{379, 1152956913u, 3166480640u, 1u, 0, FINITEF_TOLERANCE, 0}, +{380, 892922651u, 3373029087u, 1u, 0, FINITEF_TOLERANCE, 0}, +{381, 1109627625u, 1314158257u, 1u, 0, FINITEF_TOLERANCE, 0}, +{382, 1307091856u, 1103202538u, 1u, 0, FINITEF_TOLERANCE, 0}, +{383, 1077234132u, 3272167130u, 1u, 0, FINITEF_TOLERANCE, 0}, +{384, 1142167709u, 1096445242u, 1u, 0, FINITEF_TOLERANCE, 0}, +{385, 3426232834u, 1036705270u, 1u, 0, FINITEF_TOLERANCE, 0}, +{386, 3000726366u, 3172023300u, 1u, 0, FINITEF_TOLERANCE, 0}, +{387, 3368566779u, 967249167u, 1u, 0, FINITEF_TOLERANCE, 0}, +{388, 3030724760u, 3349013503u, 1u, 0, FINITEF_TOLERANCE, 0}, +{389, 1138741813u, 3073453199u, 1u, 0, FINITEF_TOLERANCE, 0}, +{390, 982950501u, 982549888u, 1u, 0, FINITEF_TOLERANCE, 0}, +{391, 1142981585u, 1015602236u, 1u, 0, FINITEF_TOLERANCE, 0}, +{392, 3016453868u, 3365560001u, 1u, 0, FINITEF_TOLERANCE, 0}, +{393, 3347165962u, 3135486696u, 1u, 0, FINITEF_TOLERANCE, 0}, +{394, 1009535440u, 3381353228u, 1u, 0, FINITEF_TOLERANCE, 0}, +{395, 3103736980u, 3402950505u, 1u, 0, FINITEF_TOLERANCE, 0}, +{396, 3126820946u, 1077903063u, 1u, 0, FINITEF_TOLERANCE, 0}, +{397, 3473956030u, 976891930u, 1u, 0, FINITEF_TOLERANCE, 0}, +{398, 3349098349u, 1055327704u, 1u, 0, FINITEF_TOLERANCE, 0}, +{399, 3152729489u, 1060398533u, 1u, 0, FINITEF_TOLERANCE, 0}, +{400, 945568720u, 3313485084u, 1u, 0, FINITEF_TOLERANCE, 0}, +{401, 3345489836u, 1108392401u, 1u, 0, FINITEF_TOLERANCE, 0}, +{402, 940893161u, 1137000140u, 1u, 0, FINITEF_TOLERANCE, 0}, +{403, 976791751u, 3230678102u, 1u, 0, FINITEF_TOLERANCE, 0}, +{404, 3013749677u, 1324802687u, 1u, 0, FINITEF_TOLERANCE, 0}, +{405, 1004442355u, 3036510596u, 1u, 0, FINITEF_TOLERANCE, 0}, +{406, 1108485380u, 3173536878u, 1u, 0, FINITEF_TOLERANCE, 0}, +{407, 1061834641u, 972388096u, 1u, 0, FINITEF_TOLERANCE, 0}, +{408, 3381268392u, 1146976802u, 1u, 0, FINITEF_TOLERANCE, 0}, +{409, 1087189715u, 2952822478u, 1u, 0, FINITEF_TOLERANCE, 0}, +{410, 3212952285u, 3329407365u, 1u, 0, FINITEF_TOLERANCE, 0}, +{411, 1000611335u, 857599439u, 1u, 0, FINITEF_TOLERANCE, 0}, +{412, 847191250u, 1227905777u, 1u, 0, FINITEF_TOLERANCE, 0}, +{413, 3466188568u, 1041678304u, 1u, 0, FINITEF_TOLERANCE, 0}, +{414, 2968337765u, 3091399866u, 1u, 0, FINITEF_TOLERANCE, 0}, +{415, 3072456205u, 3160254633u, 1u, 0, FINITEF_TOLERANCE, 0}, +{416, 3319315516u, 3422089012u, 1u, 0, FINITEF_TOLERANCE, 0}, +{417, 935938416u, 1146676692u, 1u, 0, FINITEF_TOLERANCE, 0}, +{418, 3212614372u, 1152633030u, 1u, 0, FINITEF_TOLERANCE, 0}, +{419, 1315030230u, 3336225884u, 1u, 0, FINITEF_TOLERANCE, 0}, +{420, 822041816u, 898402905u, 1u, 0, FINITEF_TOLERANCE, 0}, +{421, 1134593658u, 3456812581u, 1u, 0, FINITEF_TOLERANCE, 0}, +{422, 977281449u, 879922831u, 1u, 0, FINITEF_TOLERANCE, 0}, +{423, 1086198791u, 920125958u, 1u, 0, FINITEF_TOLERANCE, 0}, +{424, 1255152035u, 851754050u, 1u, 0, FINITEF_TOLERANCE, 0}, +{425, 1135271264u, 3284878412u, 1u, 0, FINITEF_TOLERANCE, 0}, +{426, 1094190727u, 1056854532u, 1u, 0, FINITEF_TOLERANCE, 0}, +{427, 1294665325u, 991185677u, 1u, 0, FINITEF_TOLERANCE, 0}, +{428, 1036608591u, 805416536u, 1u, 0, FINITEF_TOLERANCE, 0}, +{429, 2960459834u, 1296239160u, 1u, 0, FINITEF_TOLERANCE, 0}, +{430, 3229998064u, 825237063u, 1u, 0, FINITEF_TOLERANCE, 0}, +{431, 3439134022u, 1043829691u, 1u, 0, FINITEF_TOLERANCE, 0}, +{432, 3073083133u, 1317170485u, 1u, 0, FINITEF_TOLERANCE, 0}, +{433, 1325668223u, 970681762u, 1u, 0, FINITEF_TOLERANCE, 0}, +{434, 1092037607u, 1027330835u, 1u, 0, FINITEF_TOLERANCE, 0}, +{435, 826457956u, 3343511749u, 1u, 0, FINITEF_TOLERANCE, 0}, +{436, 3316278408u, 3455589207u, 1u, 0, FINITEF_TOLERANCE, 0}, +{437, 3295436768u, 3129873731u, 1u, 0, FINITEF_TOLERANCE, 0}, +{438, 1151984049u, 3074547120u, 1u, 0, FINITEF_TOLERANCE, 0}, +{439, 1129287043u, 3076527544u, 1u, 0, FINITEF_TOLERANCE, 0}, +{440, 1243664530u, 972879810u, 1u, 0, FINITEF_TOLERANCE, 0}, +{441, 950829092u, 929114193u, 1u, 0, FINITEF_TOLERANCE, 0}, +{442, 1115471979u, 3047246262u, 1u, 0, FINITEF_TOLERANCE, 0}, +{443, 3351092088u, 3024661404u, 1u, 0, FINITEF_TOLERANCE, 0}, +{444, 3424479544u, 3312047722u, 1u, 0, FINITEF_TOLERANCE, 0}, +{445, 3241193975u, 884465785u, 1u, 0, FINITEF_TOLERANCE, 0}, +{446, 811700241u, 3478509398u, 1u, 0, FINITEF_TOLERANCE, 0}, +{447, 1030934236u, 1045139240u, 1u, 0, FINITEF_TOLERANCE, 0}, +{448, 3131791114u, 3408392958u, 1u, 0, FINITEF_TOLERANCE, 0}, +{449, 1025254314u, 3057812821u, 1u, 0, FINITEF_TOLERANCE, 0}, +{450, 1110545760u, 3240144177u, 1u, 0, FINITEF_TOLERANCE, 0}, +{451, 826998191u, 1091496527u, 1u, 0, FINITEF_TOLERANCE, 0}, +{452, 3180213739u, 1108793820u, 1u, 0, FINITEF_TOLERANCE, 0}, +{453, 3361976590u, 3138179993u, 1u, 0, FINITEF_TOLERANCE, 0}, +{454, 881280146u, 3421884736u, 1u, 0, FINITEF_TOLERANCE, 0}, +{455, 1304154705u, 2961937089u, 1u, 0, FINITEF_TOLERANCE, 0}, +{456, 3264443610u, 3222916705u, 1u, 0, FINITEF_TOLERANCE, 0}, +{457, 3374550627u, 3055856293u, 1u, 0, FINITEF_TOLERANCE, 0}, +{458, 2979664918u, 3365394784u, 1u, 0, FINITEF_TOLERANCE, 0}, +{459, 899599265u, 3240118211u, 1u, 0, FINITEF_TOLERANCE, 0}, +{460, 842476444u, 3452685905u, 1u, 0, FINITEF_TOLERANCE, 0}, +{461, 1268194719u, 1332489410u, 1u, 0, FINITEF_TOLERANCE, 0}, +{462, 1133420220u, 1245770860u, 1u, 0, FINITEF_TOLERANCE, 0}, +{463, 1161858787u, 815362075u, 1u, 0, FINITEF_TOLERANCE, 0}, +{464, 3184462258u, 1263529646u, 1u, 0, FINITEF_TOLERANCE, 0}, +{465, 3295996963u, 3453334307u, 1u, 0, FINITEF_TOLERANCE, 0}, +{466, 1270887389u, 1156123987u, 1u, 0, FINITEF_TOLERANCE, 0}, +{467, 3325193181u, 993979179u, 1u, 0, FINITEF_TOLERANCE, 0}, +{468, 925657343u, 1315159742u, 1u, 0, FINITEF_TOLERANCE, 0}, +{469, 3115275450u, 3008350271u, 1u, 0, FINITEF_TOLERANCE, 0}, +{470, 3116607482u, 3224327456u, 1u, 0, FINITEF_TOLERANCE, 0}, +{471, 3187892415u, 3118097315u, 1u, 0, FINITEF_TOLERANCE, 0}, +{472, 1189120494u, 978961471u, 1u, 0, FINITEF_TOLERANCE, 0}, +{473, 889030794u, 3129523970u, 1u, 0, FINITEF_TOLERANCE, 0}, +{474, 1323529208u, 3100744786u, 1u, 0, FINITEF_TOLERANCE, 0}, +{475, 2975945347u, 940445933u, 1u, 0, FINITEF_TOLERANCE, 0}, +{476, 3465768388u, 3190881451u, 1u, 0, FINITEF_TOLERANCE, 0}, +{477, 3426099899u, 1118756120u, 1u, 0, FINITEF_TOLERANCE, 0}, +{478, 3224857113u, 3398166843u, 1u, 0, FINITEF_TOLERANCE, 0}, +{479, 1065798296u, 816191940u, 1u, 0, FINITEF_TOLERANCE, 0}, +{480, 3328989444u, 850266225u, 1u, 0, FINITEF_TOLERANCE, 0}, +{481, 3357819026u, 3148475462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{482, 1273397670u, 901308750u, 1u, 0, FINITEF_TOLERANCE, 0}, +{483, 3424831780u, 1304806106u, 1u, 0, FINITEF_TOLERANCE, 0}, +{484, 1257596246u, 3420832544u, 1u, 0, FINITEF_TOLERANCE, 0}, +{485, 1051773536u, 896271348u, 1u, 0, FINITEF_TOLERANCE, 0}, +{486, 3294752507u, 3113225954u, 1u, 0, FINITEF_TOLERANCE, 0}, +{487, 3424848725u, 2973850350u, 1u, 0, FINITEF_TOLERANCE, 0}, +{488, 1090870906u, 3294742905u, 1u, 0, FINITEF_TOLERANCE, 0}, +{489, 1227582289u, 1208979668u, 1u, 0, FINITEF_TOLERANCE, 0}, +{490, 2996780709u, 852318215u, 1u, 0, FINITEF_TOLERANCE, 0}, +{491, 1272325814u, 3004311296u, 1u, 0, FINITEF_TOLERANCE, 0}, +{492, 3359508271u, 859974315u, 1u, 0, FINITEF_TOLERANCE, 0}, +{493, 2992737514u, 2999023943u, 1u, 0, FINITEF_TOLERANCE, 0}, +{494, 1137854355u, 3335041917u, 1u, 0, FINITEF_TOLERANCE, 0}, +{495, 3440773058u, 3204192793u, 1u, 0, FINITEF_TOLERANCE, 0}, +{496, 3101598400u, 3057760708u, 1u, 0, FINITEF_TOLERANCE, 0}, +{497, 3451216836u, 3347783723u, 1u, 0, FINITEF_TOLERANCE, 0}, +{498, 3437062994u, 3106834845u, 1u, 0, FINITEF_TOLERANCE, 0}, +{499, 1131196082u, 1164573183u, 1u, 0, FINITEF_TOLERANCE, 0}, +{500, 3177294154u, 1282436638u, 1u, 0, FINITEF_TOLERANCE, 0}, +{501, 3258097678u, 1305882290u, 1u, 0, FINITEF_TOLERANCE, 0}, +{502, 3460915348u, 1219372260u, 1u, 0, FINITEF_TOLERANCE, 0}, +{503, 3009547195u, 1256074626u, 1u, 0, FINITEF_TOLERANCE, 0}, +{504, 3303035472u, 3153013020u, 1u, 0, FINITEF_TOLERANCE, 0}, +{505, 1053698677u, 3284313107u, 1u, 0, FINITEF_TOLERANCE, 0}, +{506, 3396166221u, 1201894512u, 1u, 0, FINITEF_TOLERANCE, 0}, +{507, 3037541131u, 1085398440u, 1u, 0, FINITEF_TOLERANCE, 0}, +{508, 3458934263u, 1005577835u, 1u, 0, FINITEF_TOLERANCE, 0}, +{509, 1065761827u, 3333928591u, 1u, 0, FINITEF_TOLERANCE, 0}, +{510, 3025843188u, 820250112u, 1u, 0, FINITEF_TOLERANCE, 0}, +{511, 3017430347u, 3009209071u, 1u, 0, FINITEF_TOLERANCE, 0}, +{512, 926665223u, 3150815797u, 1u, 0, FINITEF_TOLERANCE, 0}, +{513, 2970966181u, 3383521344u, 1u, 0, FINITEF_TOLERANCE, 0}, +{514, 1199816046u, 3143776186u, 1u, 0, FINITEF_TOLERANCE, 0}, +{515, 3333779015u, 952421041u, 1u, 0, FINITEF_TOLERANCE, 0}, +{516, 856234019u, 3091454180u, 1u, 0, FINITEF_TOLERANCE, 0}, +{517, 948398145u, 3238273189u, 1u, 0, FINITEF_TOLERANCE, 0}, +{518, 3054021468u, 1270257895u, 1u, 0, FINITEF_TOLERANCE, 0}, +{519, 1080781593u, 1213908300u, 1u, 0, FINITEF_TOLERANCE, 0}, +{520, 3164749613u, 3010837763u, 1u, 0, FINITEF_TOLERANCE, 0}, +{521, 2971341371u, 1014754300u, 1u, 0, FINITEF_TOLERANCE, 0}, +{522, 3235326590u, 1271705594u, 1u, 0, FINITEF_TOLERANCE, 0}, +{523, 3118883815u, 1051802647u, 1u, 0, FINITEF_TOLERANCE, 0}, +{524, 965378004u, 1292594138u, 1u, 0, FINITEF_TOLERANCE, 0}, +{525, 3226990408u, 1110755136u, 1u, 0, FINITEF_TOLERANCE, 0}, +{526, 2953069847u, 3293953199u, 1u, 0, FINITEF_TOLERANCE, 0}, +{527, 3117098218u, 1122474770u, 1u, 0, FINITEF_TOLERANCE, 0}, +{528, 1283624229u, 906796922u, 1u, 0, FINITEF_TOLERANCE, 0}, +{529, 860729004u, 1163935062u, 1u, 0, FINITEF_TOLERANCE, 0}, +{530, 970649315u, 1078286437u, 1u, 0, FINITEF_TOLERANCE, 0}, +{531, 959776291u, 3280345347u, 1u, 0, FINITEF_TOLERANCE, 0}, +{532, 3341117305u, 3294559023u, 1u, 0, FINITEF_TOLERANCE, 0}, +{533, 1270734970u, 3355874874u, 1u, 0, FINITEF_TOLERANCE, 0}, +{534, 3454816067u, 868771977u, 1u, 0, FINITEF_TOLERANCE, 0}, +{535, 917206623u, 1172710814u, 1u, 0, FINITEF_TOLERANCE, 0}, +{536, 1106502045u, 1290849316u, 1u, 0, FINITEF_TOLERANCE, 0}, +{537, 1157598381u, 3309023746u, 1u, 0, FINITEF_TOLERANCE, 0}, +{538, 835476614u, 1092590501u, 1u, 0, FINITEF_TOLERANCE, 0}, +{539, 3335234513u, 1002337336u, 1u, 0, FINITEF_TOLERANCE, 0}, +{540, 1279489061u, 1006049444u, 1u, 0, FINITEF_TOLERANCE, 0}, +{541, 807133892u, 1110992491u, 1u, 0, FINITEF_TOLERANCE, 0}, +{542, 3157416480u, 1309984610u, 1u, 0, FINITEF_TOLERANCE, 0}, +{543, 3143920719u, 3131608518u, 1u, 0, FINITEF_TOLERANCE, 0}, +{544, 2995340689u, 1165036009u, 1u, 0, FINITEF_TOLERANCE, 0}, +{545, 1233171235u, 826460580u, 1u, 0, FINITEF_TOLERANCE, 0}, +{546, 1148920078u, 1007674793u, 1u, 0, FINITEF_TOLERANCE, 0}, +{547, 3064988156u, 3230867340u, 1u, 0, FINITEF_TOLERANCE, 0}, +{548, 3083619260u, 1159415661u, 1u, 0, FINITEF_TOLERANCE, 0}, +{549, 1109198803u, 1221754614u, 1u, 0, FINITEF_TOLERANCE, 0}, +{550, 3219949483u, 1056167693u, 1u, 0, FINITEF_TOLERANCE, 0}, +{551, 3361149474u, 3387342069u, 1u, 0, FINITEF_TOLERANCE, 0}, +{552, 827931800u, 1118474231u, 1u, 0, FINITEF_TOLERANCE, 0}, +{553, 1207502108u, 3388073586u, 1u, 0, FINITEF_TOLERANCE, 0}, +{554, 1000014431u, 831213088u, 1u, 0, FINITEF_TOLERANCE, 0}, +{555, 3161756316u, 3143659754u, 1u, 0, FINITEF_TOLERANCE, 0}, +{556, 3160728744u, 3382954009u, 1u, 0, FINITEF_TOLERANCE, 0}, +{557, 1234530539u, 1079988872u, 1u, 0, FINITEF_TOLERANCE, 0}, +{558, 1017843965u, 1193076204u, 1u, 0, FINITEF_TOLERANCE, 0}, +{559, 2965746635u, 3248194237u, 1u, 0, FINITEF_TOLERANCE, 0}, +{560, 951862956u, 1173464654u, 1u, 0, FINITEF_TOLERANCE, 0}, +{561, 3306328852u, 1118701064u, 1u, 0, FINITEF_TOLERANCE, 0}, +{562, 1291910469u, 1211303367u, 1u, 0, FINITEF_TOLERANCE, 0}, +{563, 3027442905u, 1173894400u, 1u, 0, FINITEF_TOLERANCE, 0}, +{564, 809646928u, 3006525025u, 1u, 0, FINITEF_TOLERANCE, 0}, +{565, 1131927531u, 3182962700u, 1u, 0, FINITEF_TOLERANCE, 0}, +{566, 3449879391u, 991614550u, 1u, 0, FINITEF_TOLERANCE, 0}, +{567, 970094304u, 3344590506u, 1u, 0, FINITEF_TOLERANCE, 0}, +{568, 1125551064u, 3331248076u, 1u, 0, FINITEF_TOLERANCE, 0}, +{569, 3427296372u, 3455289118u, 1u, 0, FINITEF_TOLERANCE, 0}, +{570, 1198917460u, 1327195159u, 1u, 0, FINITEF_TOLERANCE, 0}, +{571, 3201603336u, 820047343u, 1u, 0, FINITEF_TOLERANCE, 0}, +{572, 3114686212u, 3476082461u, 1u, 0, FINITEF_TOLERANCE, 0}, +{573, 921940707u, 2967544056u, 1u, 0, FINITEF_TOLERANCE, 0}, +{574, 1091906532u, 3011904455u, 1u, 0, FINITEF_TOLERANCE, 0}, +{575, 3393557778u, 3383396815u, 1u, 0, FINITEF_TOLERANCE, 0}, +{576, 1276853215u, 873199561u, 1u, 0, FINITEF_TOLERANCE, 0}, +{577, 3462778440u, 3349284325u, 1u, 0, FINITEF_TOLERANCE, 0}, +{578, 833132358u, 3470358002u, 1u, 0, FINITEF_TOLERANCE, 0}, +{579, 3360170117u, 3048354042u, 1u, 0, FINITEF_TOLERANCE, 0}, +{580, 3224245428u, 3271307999u, 1u, 0, FINITEF_TOLERANCE, 0}, +{581, 1120124467u, 1135619937u, 1u, 0, FINITEF_TOLERANCE, 0}, +{582, 1064364381u, 3180675544u, 1u, 0, FINITEF_TOLERANCE, 0}, +{583, 1268744779u, 3328452652u, 1u, 0, FINITEF_TOLERANCE, 0}, +{584, 1165195428u, 3390323168u, 1u, 0, FINITEF_TOLERANCE, 0}, +{585, 3044092739u, 1106497311u, 1u, 0, FINITEF_TOLERANCE, 0}, +{586, 3149469534u, 1278465842u, 1u, 0, FINITEF_TOLERANCE, 0}, +{587, 3247790039u, 909788142u, 1u, 0, FINITEF_TOLERANCE, 0}, +{588, 3215244648u, 1083988595u, 1u, 0, FINITEF_TOLERANCE, 0}, +{589, 3095275931u, 989153382u, 1u, 0, FINITEF_TOLERANCE, 0}, +{590, 3059688264u, 1117455718u, 1u, 0, FINITEF_TOLERANCE, 0}, +{591, 2990022513u, 1061714285u, 1u, 0, FINITEF_TOLERANCE, 0}, +{592, 1212717473u, 837873779u, 1u, 0, FINITEF_TOLERANCE, 0}, +{593, 3275973009u, 3450721670u, 1u, 0, FINITEF_TOLERANCE, 0}, +{594, 3028857014u, 3188853813u, 1u, 0, FINITEF_TOLERANCE, 0}, +{595, 3391162308u, 1291220039u, 1u, 0, FINITEF_TOLERANCE, 0}, +{596, 1044867873u, 3369493273u, 1u, 0, FINITEF_TOLERANCE, 0}, +{597, 1089986803u, 3462160118u, 1u, 0, FINITEF_TOLERANCE, 0}, +{598, 1296314700u, 2957454177u, 1u, 0, FINITEF_TOLERANCE, 0}, +{599, 1251462432u, 3171021770u, 1u, 0, FINITEF_TOLERANCE, 0}, +{600, 3485236902u, 980772835u, 1u, 0, FINITEF_TOLERANCE, 0}, +{601, 3262169538u, 1268270462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{602, 3080852256u, 994641495u, 1u, 0, FINITEF_TOLERANCE, 0}, +{603, 1022211242u, 922124181u, 1u, 0, FINITEF_TOLERANCE, 0}, +{604, 884661176u, 2985540645u, 1u, 0, FINITEF_TOLERANCE, 0}, +{605, 3071422941u, 3271100396u, 1u, 0, FINITEF_TOLERANCE, 0}, +{606, 989762529u, 3362011135u, 1u, 0, FINITEF_TOLERANCE, 0}, +{607, 1295475718u, 3212305413u, 1u, 0, FINITEF_TOLERANCE, 0}, +{608, 1002632518u, 3330388441u, 1u, 0, FINITEF_TOLERANCE, 0}, +{609, 3404372005u, 3450484255u, 1u, 0, FINITEF_TOLERANCE, 0}, +{610, 3158912530u, 3105501826u, 1u, 0, FINITEF_TOLERANCE, 0}, +{611, 2987029985u, 1218447414u, 1u, 0, FINITEF_TOLERANCE, 0}, +{612, 1125800069u, 3256265749u, 1u, 0, FINITEF_TOLERANCE, 0}, +{613, 3138037576u, 3103365227u, 1u, 0, FINITEF_TOLERANCE, 0}, +{614, 3108384823u, 1300246663u, 1u, 0, FINITEF_TOLERANCE, 0}, +{615, 999985470u, 3409354318u, 1u, 0, FINITEF_TOLERANCE, 0}, +{616, 1189421739u, 1056599002u, 1u, 0, FINITEF_TOLERANCE, 0}, +{617, 3075182644u, 3144159778u, 1u, 0, FINITEF_TOLERANCE, 0}, +{618, 3028099649u, 3391513557u, 1u, 0, FINITEF_TOLERANCE, 0}, +{619, 837703706u, 3467473756u, 1u, 0, FINITEF_TOLERANCE, 0}, +{620, 3132541814u, 3444521949u, 1u, 0, FINITEF_TOLERANCE, 0}, +{621, 1164046161u, 3440635788u, 1u, 0, FINITEF_TOLERANCE, 0}, +{622, 1292596266u, 3116569667u, 1u, 0, FINITEF_TOLERANCE, 0}, +{623, 3469748379u, 3412765608u, 1u, 0, FINITEF_TOLERANCE, 0}, +{624, 2968771722u, 3117531540u, 1u, 0, FINITEF_TOLERANCE, 0}, +{625, 1314644642u, 3123051784u, 1u, 0, FINITEF_TOLERANCE, 0}, +{626, 3399813173u, 828743798u, 1u, 0, FINITEF_TOLERANCE, 0}, +{627, 948775569u, 3485444126u, 1u, 0, FINITEF_TOLERANCE, 0}, +{628, 1034611395u, 882288581u, 1u, 0, FINITEF_TOLERANCE, 0}, +{629, 3489122735u, 3372450889u, 1u, 0, FINITEF_TOLERANCE, 0}, +{630, 1181604787u, 3363067409u, 1u, 0, FINITEF_TOLERANCE, 0}, +{631, 3059042077u, 3204983963u, 1u, 0, FINITEF_TOLERANCE, 0}, +{632, 1043691622u, 3402603223u, 1u, 0, FINITEF_TOLERANCE, 0}, +{633, 1314588083u, 856187848u, 1u, 0, FINITEF_TOLERANCE, 0}, +{634, 3141533334u, 3010142974u, 1u, 0, FINITEF_TOLERANCE, 0}, +{635, 3013416703u, 3442525943u, 1u, 0, FINITEF_TOLERANCE, 0}, +{636, 861266716u, 822172554u, 1u, 0, FINITEF_TOLERANCE, 0}, +{637, 3157534378u, 3451674717u, 1u, 0, FINITEF_TOLERANCE, 0}, +{638, 2976169000u, 3033697153u, 1u, 0, FINITEF_TOLERANCE, 0}, +{639, 3400949680u, 3073750220u, 1u, 0, FINITEF_TOLERANCE, 0}, +{640, 3365581801u, 1175843167u, 1u, 0, FINITEF_TOLERANCE, 0}, +{641, 1110424755u, 3011308654u, 1u, 0, FINITEF_TOLERANCE, 0}, +{642, 3189917167u, 927278934u, 1u, 0, FINITEF_TOLERANCE, 0}, +{643, 969804941u, 3355439348u, 1u, 0, FINITEF_TOLERANCE, 0}, +{644, 1139120919u, 3270515074u, 1u, 0, FINITEF_TOLERANCE, 0}, +{645, 816789141u, 3325199970u, 1u, 0, FINITEF_TOLERANCE, 0}, +{646, 934308144u, 3118191228u, 1u, 0, FINITEF_TOLERANCE, 0}, +{647, 1220524226u, 1152648002u, 1u, 0, FINITEF_TOLERANCE, 0}, +{648, 3162548604u, 3461790298u, 1u, 0, FINITEF_TOLERANCE, 0}, +{649, 3382391700u, 3296962745u, 1u, 0, FINITEF_TOLERANCE, 0}, +{650, 1156767533u, 1088986462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{651, 3079222483u, 3312324949u, 1u, 0, FINITEF_TOLERANCE, 0}, +{652, 994934087u, 967678094u, 1u, 0, FINITEF_TOLERANCE, 0}, +{653, 840906467u, 3156591981u, 1u, 0, FINITEF_TOLERANCE, 0}, +{654, 3185240099u, 1123403720u, 1u, 0, FINITEF_TOLERANCE, 0}, +{655, 870026344u, 1093936408u, 1u, 0, FINITEF_TOLERANCE, 0}, +{656, 2996887005u, 3287317742u, 1u, 0, FINITEF_TOLERANCE, 0}, +{657, 3479873563u, 1246277393u, 1u, 0, FINITEF_TOLERANCE, 0}, +{658, 3424264117u, 3434026174u, 1u, 0, FINITEF_TOLERANCE, 0}, +{659, 3228365887u, 1216775310u, 1u, 0, FINITEF_TOLERANCE, 0}, +{660, 1035909900u, 1249532942u, 1u, 0, FINITEF_TOLERANCE, 0}, +{661, 2989750574u, 1274271338u, 1u, 0, FINITEF_TOLERANCE, 0}, +{662, 3024951184u, 1247632131u, 1u, 0, FINITEF_TOLERANCE, 0}, +{663, 1212129651u, 3017366784u, 1u, 0, FINITEF_TOLERANCE, 0}, +{664, 3125775254u, 955826310u, 1u, 0, FINITEF_TOLERANCE, 0}, +{665, 1037464105u, 3121544932u, 1u, 0, FINITEF_TOLERANCE, 0}, +{666, 1311706596u, 1254918706u, 1u, 0, FINITEF_TOLERANCE, 0}, +{667, 918212457u, 1017468331u, 1u, 0, FINITEF_TOLERANCE, 0}, +{668, 1337315179u, 3461361185u, 1u, 0, FINITEF_TOLERANCE, 0}, +{669, 1131358407u, 3325958870u, 1u, 0, FINITEF_TOLERANCE, 0}, +{670, 1156517523u, 3343716230u, 1u, 0, FINITEF_TOLERANCE, 0}, +{671, 3210802820u, 3207408574u, 1u, 0, FINITEF_TOLERANCE, 0}, +{672, 3337499209u, 1226297264u, 1u, 0, FINITEF_TOLERANCE, 0}, +{673, 3468429030u, 3253874001u, 1u, 0, FINITEF_TOLERANCE, 0}, +{674, 3253515800u, 1189005947u, 1u, 0, FINITEF_TOLERANCE, 0}, +{675, 3055299953u, 3047908678u, 1u, 0, FINITEF_TOLERANCE, 0}, +{676, 959956547u, 876324728u, 1u, 0, FINITEF_TOLERANCE, 0}, +{677, 3425290480u, 1139193797u, 1u, 0, FINITEF_TOLERANCE, 0}, +{678, 1039917375u, 1122740999u, 1u, 0, FINITEF_TOLERANCE, 0}, +{679, 3220979495u, 3429223871u, 1u, 0, FINITEF_TOLERANCE, 0}, +{680, 1311016004u, 3334899880u, 1u, 0, FINITEF_TOLERANCE, 0}, +{681, 2995451172u, 2974546424u, 1u, 0, FINITEF_TOLERANCE, 0}, +{682, 1128016396u, 1105151547u, 1u, 0, FINITEF_TOLERANCE, 0}, +{683, 3210335769u, 3100646155u, 1u, 0, FINITEF_TOLERANCE, 0}, +{684, 3022705759u, 3404762495u, 1u, 0, FINITEF_TOLERANCE, 0}, +{685, 1206054701u, 826010009u, 1u, 0, FINITEF_TOLERANCE, 0}, +{686, 3144504834u, 1162227076u, 1u, 0, FINITEF_TOLERANCE, 0}, +{687, 822524010u, 970745811u, 1u, 0, FINITEF_TOLERANCE, 0}, +{688, 3016981460u, 3313826904u, 1u, 0, FINITEF_TOLERANCE, 0}, +{689, 1213609983u, 919983950u, 1u, 0, FINITEF_TOLERANCE, 0}, +{690, 1246902946u, 3064047808u, 1u, 0, FINITEF_TOLERANCE, 0}, +{691, 995850843u, 1332031130u, 1u, 0, FINITEF_TOLERANCE, 0}, +{692, 3362082828u, 3374056268u, 1u, 0, FINITEF_TOLERANCE, 0}, +{693, 1029480631u, 3047777170u, 1u, 0, FINITEF_TOLERANCE, 0}, +{694, 3153568584u, 3106514232u, 1u, 0, FINITEF_TOLERANCE, 0}, +{695, 3384988527u, 3109485565u, 1u, 0, FINITEF_TOLERANCE, 0}, +{696, 1317696241u, 870681806u, 1u, 0, FINITEF_TOLERANCE, 0}, +{697, 3235395924u, 1132055244u, 1u, 0, FINITEF_TOLERANCE, 0}, +{698, 3341877624u, 2969495570u, 1u, 0, FINITEF_TOLERANCE, 0}, +{699, 1228636133u, 886552820u, 1u, 0, FINITEF_TOLERANCE, 0}, +{700, 3161654634u, 3335899347u, 1u, 0, FINITEF_TOLERANCE, 0}, +{701, 3162655243u, 3307203982u, 1u, 0, FINITEF_TOLERANCE, 0}, +{702, 1207246237u, 859223639u, 1u, 0, FINITEF_TOLERANCE, 0}, +{703, 1165476654u, 3350219111u, 1u, 0, FINITEF_TOLERANCE, 0}, +{704, 1215278023u, 3019755242u, 1u, 0, FINITEF_TOLERANCE, 0}, +{705, 1017239798u, 3438501281u, 1u, 0, FINITEF_TOLERANCE, 0}, +{706, 1149651309u, 970030475u, 1u, 0, FINITEF_TOLERANCE, 0}, +{707, 1111943722u, 3122211334u, 1u, 0, FINITEF_TOLERANCE, 0}, +{708, 856374764u, 1158358450u, 1u, 0, FINITEF_TOLERANCE, 0}, +{709, 1189849849u, 3382739134u, 1u, 0, FINITEF_TOLERANCE, 0}, +{710, 3204848496u, 3141519085u, 1u, 0, FINITEF_TOLERANCE, 0}, +{711, 1249758327u, 3104759211u, 1u, 0, FINITEF_TOLERANCE, 0}, +{712, 3092982276u, 3445282331u, 1u, 0, FINITEF_TOLERANCE, 0}, +{713, 1168098747u, 1316854744u, 1u, 0, FINITEF_TOLERANCE, 0}, +{714, 892549317u, 1179637545u, 1u, 0, FINITEF_TOLERANCE, 0}, +{715, 3301009024u, 3406174560u, 1u, 0, FINITEF_TOLERANCE, 0}, +{716, 3233089227u, 1212652543u, 1u, 0, FINITEF_TOLERANCE, 0}, +{717, 3218245284u, 1238873830u, 1u, 0, FINITEF_TOLERANCE, 0}, +{718, 3215981890u, 3240474694u, 1u, 0, FINITEF_TOLERANCE, 0}, +{719, 1266687209u, 3092038122u, 1u, 0, FINITEF_TOLERANCE, 0}, +{720, 825230580u, 3410090781u, 1u, 0, FINITEF_TOLERANCE, 0}, +{721, 3487959775u, 3331372071u, 1u, 0, FINITEF_TOLERANCE, 0}, +{722, 943645710u, 852875779u, 1u, 0, FINITEF_TOLERANCE, 0}, +{723, 3345065699u, 3282620725u, 1u, 0, FINITEF_TOLERANCE, 0}, +{724, 935847271u, 1067255804u, 1u, 0, FINITEF_TOLERANCE, 0}, +{725, 3410336089u, 1111437780u, 1u, 0, FINITEF_TOLERANCE, 0}, +{726, 3082940740u, 1336840432u, 1u, 0, FINITEF_TOLERANCE, 0}, +{727, 1141063391u, 1168908072u, 1u, 0, FINITEF_TOLERANCE, 0}, +{728, 3059263153u, 3067795684u, 1u, 0, FINITEF_TOLERANCE, 0}, +{729, 849450947u, 3289799763u, 1u, 0, FINITEF_TOLERANCE, 0}, +{730, 3353679791u, 897158391u, 1u, 0, FINITEF_TOLERANCE, 0}, +{731, 1001823878u, 1016826861u, 1u, 0, FINITEF_TOLERANCE, 0}, +{732, 1009130212u, 1004302940u, 1u, 0, FINITEF_TOLERANCE, 0}, +{733, 3367127535u, 943136342u, 1u, 0, FINITEF_TOLERANCE, 0}, +{734, 1032920919u, 3449126417u, 1u, 0, FINITEF_TOLERANCE, 0}, +{735, 3281952870u, 3147012185u, 1u, 0, FINITEF_TOLERANCE, 0}, +{736, 1237868497u, 3048281802u, 1u, 0, FINITEF_TOLERANCE, 0}, +{737, 1153753924u, 3322269242u, 1u, 0, FINITEF_TOLERANCE, 0}, +{738, 1120261759u, 892210998u, 1u, 0, FINITEF_TOLERANCE, 0}, +{739, 3226328360u, 3366432856u, 1u, 0, FINITEF_TOLERANCE, 0}, +{740, 3349595986u, 3251588707u, 1u, 0, FINITEF_TOLERANCE, 0}, +{741, 3166889490u, 3306023523u, 1u, 0, FINITEF_TOLERANCE, 0}, +{742, 1087750238u, 1099325523u, 1u, 0, FINITEF_TOLERANCE, 0}, +{743, 3121620061u, 3359488363u, 1u, 0, FINITEF_TOLERANCE, 0}, +{744, 1066116543u, 3072159933u, 1u, 0, FINITEF_TOLERANCE, 0}, +{745, 3210898034u, 2981803389u, 1u, 0, FINITEF_TOLERANCE, 0}, +{746, 3051923237u, 3364074347u, 1u, 0, FINITEF_TOLERANCE, 0}, +{747, 1030612298u, 3345396001u, 1u, 0, FINITEF_TOLERANCE, 0}, +{748, 3015019212u, 989161453u, 1u, 0, FINITEF_TOLERANCE, 0}, +{749, 1186234578u, 858134374u, 1u, 0, FINITEF_TOLERANCE, 0}, +{750, 1331680743u, 1009396165u, 1u, 0, FINITEF_TOLERANCE, 0}, +{751, 847857044u, 894661023u, 1u, 0, FINITEF_TOLERANCE, 0}, +{752, 3060774997u, 1326067357u, 1u, 0, FINITEF_TOLERANCE, 0}, +{753, 887589411u, 1292305693u, 1u, 0, FINITEF_TOLERANCE, 0}, +{754, 1045232522u, 3234993273u, 1u, 0, FINITEF_TOLERANCE, 0}, +{755, 3119858470u, 962515365u, 1u, 0, FINITEF_TOLERANCE, 0}, +{756, 3002873011u, 3188748064u, 1u, 0, FINITEF_TOLERANCE, 0}, +{757, 3349432725u, 928848003u, 1u, 0, FINITEF_TOLERANCE, 0}, +{758, 912423027u, 3184646319u, 1u, 0, FINITEF_TOLERANCE, 0}, +{759, 3228795133u, 3273940030u, 1u, 0, FINITEF_TOLERANCE, 0}, +{760, 3194674746u, 3112269709u, 1u, 0, FINITEF_TOLERANCE, 0}, +{761, 3296784303u, 3276182352u, 1u, 0, FINITEF_TOLERANCE, 0}, +{762, 965402291u, 3107104376u, 1u, 0, FINITEF_TOLERANCE, 0}, +{763, 3388153589u, 3426245389u, 1u, 0, FINITEF_TOLERANCE, 0}, +{764, 1133410485u, 3329658993u, 1u, 0, FINITEF_TOLERANCE, 0}, +{765, 3136790322u, 1088652637u, 1u, 0, FINITEF_TOLERANCE, 0}, +{766, 3369970587u, 959121458u, 1u, 0, FINITEF_TOLERANCE, 0}, +{767, 1270451568u, 928393353u, 1u, 0, FINITEF_TOLERANCE, 0}, +{768, 989498922u, 3088358419u, 1u, 0, FINITEF_TOLERANCE, 0}, +{769, 1280215674u, 3148135875u, 1u, 0, FINITEF_TOLERANCE, 0}, +{770, 1171873518u, 954709738u, 1u, 0, FINITEF_TOLERANCE, 0}, +{771, 3298258100u, 935525182u, 1u, 0, FINITEF_TOLERANCE, 0}, +{772, 3415208824u, 822843236u, 1u, 0, FINITEF_TOLERANCE, 0}, +{773, 1001897182u, 3191875320u, 1u, 0, FINITEF_TOLERANCE, 0}, +{774, 3152777939u, 3245830463u, 1u, 0, FINITEF_TOLERANCE, 0}, +{775, 985903305u, 3333087577u, 1u, 0, FINITEF_TOLERANCE, 0}, +{776, 3357328848u, 859306298u, 1u, 0, FINITEF_TOLERANCE, 0}, +{777, 2967395608u, 3077307650u, 1u, 0, FINITEF_TOLERANCE, 0}, +{778, 982612185u, 923582663u, 1u, 0, FINITEF_TOLERANCE, 0}, +{779, 3267868136u, 1208301947u, 1u, 0, FINITEF_TOLERANCE, 0}, +{780, 3319048157u, 1172271145u, 1u, 0, FINITEF_TOLERANCE, 0}, +{781, 1144755661u, 860947435u, 1u, 0, FINITEF_TOLERANCE, 0}, +{782, 840456845u, 1051585760u, 1u, 0, FINITEF_TOLERANCE, 0}, +{783, 898467286u, 839254959u, 1u, 0, FINITEF_TOLERANCE, 0}, +{784, 3301461672u, 1233693827u, 1u, 0, FINITEF_TOLERANCE, 0}, +{785, 3364525678u, 3089849671u, 1u, 0, FINITEF_TOLERANCE, 0}, +{786, 871130681u, 905123007u, 1u, 0, FINITEF_TOLERANCE, 0}, +{787, 931441127u, 1133424555u, 1u, 0, FINITEF_TOLERANCE, 0}, +{788, 3146660041u, 3143695961u, 1u, 0, FINITEF_TOLERANCE, 0}, +{789, 3467121799u, 3023584354u, 1u, 0, FINITEF_TOLERANCE, 0}, +{790, 1151257041u, 3084216427u, 1u, 0, FINITEF_TOLERANCE, 0}, +{791, 3097873255u, 3219266640u, 1u, 0, FINITEF_TOLERANCE, 0}, +{792, 3130670309u, 3192399254u, 1u, 0, FINITEF_TOLERANCE, 0}, +{793, 1017573824u, 3130901062u, 1u, 0, FINITEF_TOLERANCE, 0}, +{794, 1258369714u, 3462258576u, 1u, 0, FINITEF_TOLERANCE, 0}, +{795, 1216602683u, 3371396332u, 1u, 0, FINITEF_TOLERANCE, 0}, +{796, 2976429847u, 959973239u, 1u, 0, FINITEF_TOLERANCE, 0}, +{797, 3297265739u, 1214184410u, 1u, 0, FINITEF_TOLERANCE, 0}, +{798, 1071940738u, 3311731012u, 1u, 0, FINITEF_TOLERANCE, 0}, +{799, 922601356u, 3337171870u, 1u, 0, FINITEF_TOLERANCE, 0}, +{800, 3462285635u, 3444030332u, 1u, 0, FINITEF_TOLERANCE, 0}, +{801, 3357177805u, 1085464241u, 1u, 0, FINITEF_TOLERANCE, 0}, +{802, 3049120080u, 900832851u, 1u, 0, FINITEF_TOLERANCE, 0}, +{803, 1153863660u, 1011991342u, 1u, 0, FINITEF_TOLERANCE, 0}, +{804, 3034243695u, 917098003u, 1u, 0, FINITEF_TOLERANCE, 0}, +{805, 809294662u, 3266461458u, 1u, 0, FINITEF_TOLERANCE, 0}, +{806, 822231182u, 3393408718u, 1u, 0, FINITEF_TOLERANCE, 0}, +{807, 845772797u, 3341109215u, 1u, 0, FINITEF_TOLERANCE, 0}, +{808, 1249365132u, 3278686216u, 1u, 0, FINITEF_TOLERANCE, 0}, +{809, 3046215730u, 3211219980u, 1u, 0, FINITEF_TOLERANCE, 0}, +{810, 3047251716u, 1090787353u, 1u, 0, FINITEF_TOLERANCE, 0}, +{811, 2980866154u, 1147012796u, 1u, 0, FINITEF_TOLERANCE, 0}, +{812, 3131219358u, 3471261157u, 1u, 0, FINITEF_TOLERANCE, 0}, +{813, 3222096285u, 1198013705u, 1u, 0, FINITEF_TOLERANCE, 0}, +{814, 1297708818u, 3079166173u, 1u, 0, FINITEF_TOLERANCE, 0}, +{815, 3345532722u, 3383708463u, 1u, 0, FINITEF_TOLERANCE, 0}, +{816, 3418753236u, 3481843070u, 1u, 0, FINITEF_TOLERANCE, 0}, +{817, 1277417964u, 3487506626u, 1u, 0, FINITEF_TOLERANCE, 0}, +{818, 987577257u, 1152077087u, 1u, 0, FINITEF_TOLERANCE, 0}, +{819, 3161606610u, 3190282989u, 1u, 0, FINITEF_TOLERANCE, 0}, +{820, 849056171u, 910674398u, 1u, 0, FINITEF_TOLERANCE, 0}, +{821, 888030585u, 3062367380u, 1u, 0, FINITEF_TOLERANCE, 0}, +{822, 1043442869u, 3311393817u, 1u, 0, FINITEF_TOLERANCE, 0}, +{823, 851189486u, 3007588581u, 1u, 0, FINITEF_TOLERANCE, 0}, +{824, 3320923228u, 3464544249u, 1u, 0, FINITEF_TOLERANCE, 0}, +{825, 1337400405u, 3488844154u, 1u, 0, FINITEF_TOLERANCE, 0}, +{826, 2964339884u, 3186563447u, 1u, 0, FINITEF_TOLERANCE, 0}, +{827, 3400348640u, 3129868490u, 1u, 0, FINITEF_TOLERANCE, 0}, +{828, 1250249095u, 1069023744u, 1u, 0, FINITEF_TOLERANCE, 0}, +{829, 3284411233u, 1173613526u, 1u, 0, FINITEF_TOLERANCE, 0}, +{830, 3020883322u, 2953622587u, 1u, 0, FINITEF_TOLERANCE, 0}, +{831, 1215968622u, 3469884568u, 1u, 0, FINITEF_TOLERANCE, 0}, +{832, 3202319550u, 819117302u, 1u, 0, FINITEF_TOLERANCE, 0}, +{833, 3061638260u, 3116222327u, 1u, 0, FINITEF_TOLERANCE, 0}, +{834, 1025404104u, 1066370251u, 1u, 0, FINITEF_TOLERANCE, 0}, +{835, 3138086437u, 3195983510u, 1u, 0, FINITEF_TOLERANCE, 0}, +{836, 3091024506u, 3456196859u, 1u, 0, FINITEF_TOLERANCE, 0}, +{837, 3362748242u, 3369843597u, 1u, 0, FINITEF_TOLERANCE, 0}, +{838, 3099671635u, 3218383623u, 1u, 0, FINITEF_TOLERANCE, 0}, +{839, 3068014841u, 2978226656u, 1u, 0, FINITEF_TOLERANCE, 0}, +{840, 1252237719u, 1121169249u, 1u, 0, FINITEF_TOLERANCE, 0}, +{841, 3327895594u, 1224511805u, 1u, 0, FINITEF_TOLERANCE, 0}, +{842, 3082454432u, 889268276u, 1u, 0, FINITEF_TOLERANCE, 0}, +{843, 3396161504u, 1182798837u, 1u, 0, FINITEF_TOLERANCE, 0}, +{844, 1099710167u, 887180181u, 1u, 0, FINITEF_TOLERANCE, 0}, +{845, 1157186482u, 1288722647u, 1u, 0, FINITEF_TOLERANCE, 0}, +{846, 1282110851u, 3176633124u, 1u, 0, FINITEF_TOLERANCE, 0}, +{847, 3477008113u, 1331845018u, 1u, 0, FINITEF_TOLERANCE, 0}, +{848, 3292127294u, 3409957764u, 1u, 0, FINITEF_TOLERANCE, 0}, +{849, 1123357102u, 3281307320u, 1u, 0, FINITEF_TOLERANCE, 0}, +{850, 1106837025u, 3088080674u, 1u, 0, FINITEF_TOLERANCE, 0}, +{851, 1049949008u, 1130799489u, 1u, 0, FINITEF_TOLERANCE, 0}, +{852, 1253017688u, 942062372u, 1u, 0, FINITEF_TOLERANCE, 0}, +{853, 1108543194u, 3281299199u, 1u, 0, FINITEF_TOLERANCE, 0}, +{854, 3087985411u, 1238341456u, 1u, 0, FINITEF_TOLERANCE, 0}, +{855, 3002187365u, 1073809054u, 1u, 0, FINITEF_TOLERANCE, 0}, +{856, 3163283126u, 1328636961u, 1u, 0, FINITEF_TOLERANCE, 0}, +{857, 1160162706u, 1264067367u, 1u, 0, FINITEF_TOLERANCE, 0}, +{858, 3305715025u, 3017496063u, 1u, 0, FINITEF_TOLERANCE, 0}, +{859, 1266928623u, 811778614u, 1u, 0, FINITEF_TOLERANCE, 0}, +{860, 3025340297u, 1193925540u, 1u, 0, FINITEF_TOLERANCE, 0}, +{861, 3438080027u, 3107114149u, 1u, 0, FINITEF_TOLERANCE, 0}, +{862, 3344574751u, 3111270744u, 1u, 0, FINITEF_TOLERANCE, 0}, +{863, 1152416724u, 962669179u, 1u, 0, FINITEF_TOLERANCE, 0}, +{864, 1218239308u, 1126238113u, 1u, 0, FINITEF_TOLERANCE, 0}, +{865, 3263310567u, 1030748197u, 1u, 0, FINITEF_TOLERANCE, 0}, +{866, 835770216u, 865469272u, 1u, 0, FINITEF_TOLERANCE, 0}, +{867, 3041998669u, 1160635263u, 1u, 0, FINITEF_TOLERANCE, 0}, +{868, 1000313118u, 2980130729u, 1u, 0, FINITEF_TOLERANCE, 0}, +{869, 972485427u, 1124312043u, 1u, 0, FINITEF_TOLERANCE, 0}, +{870, 3290264612u, 1124703898u, 1u, 0, FINITEF_TOLERANCE, 0}, +{871, 869072657u, 3150369767u, 1u, 0, FINITEF_TOLERANCE, 0}, +{872, 3222106584u, 1183748648u, 1u, 0, FINITEF_TOLERANCE, 0}, +{873, 1278946388u, 825129857u, 1u, 0, FINITEF_TOLERANCE, 0}, +{874, 947914771u, 3181847068u, 1u, 0, FINITEF_TOLERANCE, 0}, +{875, 3167730654u, 3195765940u, 1u, 0, FINITEF_TOLERANCE, 0}, +{876, 1098530298u, 3255870890u, 1u, 0, FINITEF_TOLERANCE, 0}, +{877, 3232726036u, 871038882u, 1u, 0, FINITEF_TOLERANCE, 0}, +{878, 1297190916u, 811863044u, 1u, 0, FINITEF_TOLERANCE, 0}, +{879, 1277649137u, 961171401u, 1u, 0, FINITEF_TOLERANCE, 0}, +{880, 3203377685u, 1306427476u, 1u, 0, FINITEF_TOLERANCE, 0}, +{881, 3090306474u, 3124785016u, 1u, 0, FINITEF_TOLERANCE, 0}, +{882, 3244032016u, 3045313345u, 1u, 0, FINITEF_TOLERANCE, 0}, +{883, 3033122376u, 3049877065u, 1u, 0, FINITEF_TOLERANCE, 0}, +{884, 3019221802u, 3329183205u, 1u, 0, FINITEF_TOLERANCE, 0}, +{885, 1096155623u, 1256423752u, 1u, 0, FINITEF_TOLERANCE, 0}, +{886, 873151908u, 3246562559u, 1u, 0, FINITEF_TOLERANCE, 0}, +{887, 3238729605u, 1298769842u, 1u, 0, FINITEF_TOLERANCE, 0}, +{888, 3317196817u, 989537151u, 1u, 0, FINITEF_TOLERANCE, 0}, +{889, 3374748510u, 834161190u, 1u, 0, FINITEF_TOLERANCE, 0}, +{890, 3345634950u, 959901149u, 1u, 0, FINITEF_TOLERANCE, 0}, +{891, 3189860276u, 883598767u, 1u, 0, FINITEF_TOLERANCE, 0}, +{892, 887311687u, 1175312255u, 1u, 0, FINITEF_TOLERANCE, 0}, +{893, 3396917283u, 3066326686u, 1u, 0, FINITEF_TOLERANCE, 0}, +{894, 3317032737u, 3143803722u, 1u, 0, FINITEF_TOLERANCE, 0}, +{895, 1200051436u, 1163802508u, 1u, 0, FINITEF_TOLERANCE, 0}, +{896, 3105291012u, 1194385202u, 1u, 0, FINITEF_TOLERANCE, 0}, +{897, 1306520561u, 957302464u, 1u, 0, FINITEF_TOLERANCE, 0}, +{898, 1314936356u, 2985592532u, 1u, 0, FINITEF_TOLERANCE, 0}, +{899, 3475052219u, 1284049853u, 1u, 0, FINITEF_TOLERANCE, 0}, +{900, 3085636260u, 1107682820u, 1u, 0, FINITEF_TOLERANCE, 0}, +{901, 2995058661u, 822977912u, 1u, 0, FINITEF_TOLERANCE, 0}, +{902, 3393227708u, 3271879112u, 1u, 0, FINITEF_TOLERANCE, 0}, +{903, 2983919425u, 3341426744u, 1u, 0, FINITEF_TOLERANCE, 0}, +{904, 3182540197u, 852580839u, 1u, 0, FINITEF_TOLERANCE, 0}, +{905, 3349005404u, 3080993030u, 1u, 0, FINITEF_TOLERANCE, 0}, +{906, 3154720153u, 3443720494u, 1u, 0, FINITEF_TOLERANCE, 0}, +{907, 1262863321u, 1219003129u, 1u, 0, FINITEF_TOLERANCE, 0}, +{908, 882902102u, 1224362550u, 1u, 0, FINITEF_TOLERANCE, 0}, +{909, 2995633678u, 828113666u, 1u, 0, FINITEF_TOLERANCE, 0}, +{910, 1053387478u, 3184880021u, 1u, 0, FINITEF_TOLERANCE, 0}, +{911, 3387653691u, 3347783852u, 1u, 0, FINITEF_TOLERANCE, 0}, +{912, 3136364836u, 1018492227u, 1u, 0, FINITEF_TOLERANCE, 0}, +{913, 808412264u, 941158192u, 1u, 0, FINITEF_TOLERANCE, 0}, +{914, 1338680611u, 1166078045u, 1u, 0, FINITEF_TOLERANCE, 0}, +{915, 1112891928u, 3074730425u, 1u, 0, FINITEF_TOLERANCE, 0}, +{916, 893449284u, 1052877339u, 1u, 0, FINITEF_TOLERANCE, 0}, +{917, 892311459u, 1097338393u, 1u, 0, FINITEF_TOLERANCE, 0}, +{918, 3105373037u, 3246705916u, 1u, 0, FINITEF_TOLERANCE, 0}, +{919, 1190105283u, 3033907262u, 1u, 0, FINITEF_TOLERANCE, 0}, +{920, 1011225926u, 1180485180u, 1u, 0, FINITEF_TOLERANCE, 0}, +{921, 1043025031u, 987068973u, 1u, 0, FINITEF_TOLERANCE, 0}, +{922, 3410531037u, 2953541915u, 1u, 0, FINITEF_TOLERANCE, 0}, +{923, 3125834184u, 896953754u, 1u, 0, FINITEF_TOLERANCE, 0}, +{924, 902318189u, 849277289u, 1u, 0, FINITEF_TOLERANCE, 0}, +{925, 835377647u, 3441354730u, 1u, 0, FINITEF_TOLERANCE, 0}, +{926, 2976308307u, 1286944060u, 1u, 0, FINITEF_TOLERANCE, 0}, +{927, 3213624815u, 2987148017u, 1u, 0, FINITEF_TOLERANCE, 0}, +{928, 1120888322u, 1086209113u, 1u, 0, FINITEF_TOLERANCE, 0}, +{929, 1315217243u, 3396371713u, 1u, 0, FINITEF_TOLERANCE, 0}, +{930, 3137758475u, 1039403054u, 1u, 0, FINITEF_TOLERANCE, 0}, +{931, 1040617590u, 1034835971u, 1u, 0, FINITEF_TOLERANCE, 0}, +{932, 955384253u, 3344785562u, 1u, 0, FINITEF_TOLERANCE, 0}, +{933, 853063496u, 3317415965u, 1u, 0, FINITEF_TOLERANCE, 0}, +{934, 823111402u, 877253523u, 1u, 0, FINITEF_TOLERANCE, 0}, +{935, 3061417900u, 1172208065u, 1u, 0, FINITEF_TOLERANCE, 0}, +{936, 904255535u, 1019967545u, 1u, 0, FINITEF_TOLERANCE, 0}, +{937, 1022984119u, 3113891410u, 1u, 0, FINITEF_TOLERANCE, 0}, +{938, 997362368u, 3112875428u, 1u, 0, FINITEF_TOLERANCE, 0}, +{939, 900933520u, 1100589187u, 1u, 0, FINITEF_TOLERANCE, 0}, +{940, 1168623062u, 1143306482u, 1u, 0, FINITEF_TOLERANCE, 0}, +{941, 878737490u, 3269908326u, 1u, 0, FINITEF_TOLERANCE, 0}, +{942, 1039827284u, 1072928888u, 1u, 0, FINITEF_TOLERANCE, 0}, +{943, 1021564080u, 1064468397u, 1u, 0, FINITEF_TOLERANCE, 0}, +{944, 3458669745u, 3033299853u, 1u, 0, FINITEF_TOLERANCE, 0}, +{945, 3327516316u, 3405380971u, 1u, 0, FINITEF_TOLERANCE, 0}, +{946, 1040711112u, 3229444200u, 1u, 0, FINITEF_TOLERANCE, 0}, +{947, 1134528351u, 3365952513u, 1u, 0, FINITEF_TOLERANCE, 0}, +{948, 3039884464u, 1170612785u, 1u, 0, FINITEF_TOLERANCE, 0}, +{949, 3414352838u, 3350285760u, 1u, 0, FINITEF_TOLERANCE, 0}, +{950, 1133689539u, 1067460093u, 1u, 0, FINITEF_TOLERANCE, 0}, +{951, 3455688478u, 3333091960u, 1u, 0, FINITEF_TOLERANCE, 0}, +{952, 1137634874u, 1137038869u, 1u, 0, FINITEF_TOLERANCE, 0}, +{953, 3415502662u, 955510692u, 1u, 0, FINITEF_TOLERANCE, 0}, +{954, 954999730u, 969618597u, 1u, 0, FINITEF_TOLERANCE, 0}, +{955, 1066157309u, 3241712664u, 1u, 0, FINITEF_TOLERANCE, 0}, +{956, 3436353675u, 1174967495u, 1u, 0, FINITEF_TOLERANCE, 0}, +{957, 940437609u, 860372396u, 1u, 0, FINITEF_TOLERANCE, 0}, +{958, 3108347547u, 3434003435u, 1u, 0, FINITEF_TOLERANCE, 0}, +{959, 3064200154u, 3158080507u, 1u, 0, FINITEF_TOLERANCE, 0}, +{960, 1023889593u, 2979304683u, 1u, 0, FINITEF_TOLERANCE, 0}, +{961, 3272661536u, 3461799138u, 1u, 0, FINITEF_TOLERANCE, 0}, +{962, 1170245333u, 1233406410u, 1u, 0, FINITEF_TOLERANCE, 0}, +{963, 1219052056u, 3369557946u, 1u, 0, FINITEF_TOLERANCE, 0}, +{964, 3318983619u, 3259663338u, 1u, 0, FINITEF_TOLERANCE, 0}, +{965, 3372118621u, 837597103u, 1u, 0, FINITEF_TOLERANCE, 0}, +{966, 3146190320u, 889646054u, 1u, 0, FINITEF_TOLERANCE, 0}, +{967, 1299683827u, 966031619u, 1u, 0, FINITEF_TOLERANCE, 0}, +{968, 3190796331u, 1320011850u, 1u, 0, FINITEF_TOLERANCE, 0}, +{969, 2965838479u, 805822032u, 1u, 0, FINITEF_TOLERANCE, 0}, +{970, 3086068902u, 3484245751u, 1u, 0, FINITEF_TOLERANCE, 0}, +{971, 3064155399u, 3176569312u, 1u, 0, FINITEF_TOLERANCE, 0}, +{972, 836858201u, 3132995403u, 1u, 0, FINITEF_TOLERANCE, 0}, +{973, 3040314717u, 1071290674u, 1u, 0, FINITEF_TOLERANCE, 0}, +{974, 3257224022u, 3361778245u, 1u, 0, FINITEF_TOLERANCE, 0}, +{975, 1229268598u, 1066965677u, 1u, 0, FINITEF_TOLERANCE, 0}, +{976, 3184078812u, 871003709u, 1u, 0, FINITEF_TOLERANCE, 0}, +{977, 871255076u, 3446104825u, 1u, 0, FINITEF_TOLERANCE, 0}, +{978, 1086717248u, 3423795374u, 1u, 0, FINITEF_TOLERANCE, 0}, +{979, 3434884607u, 3029593823u, 1u, 0, FINITEF_TOLERANCE, 0}, +{980, 3464955606u, 1017987696u, 1u, 0, FINITEF_TOLERANCE, 0}, +{981, 1025278524u, 3121856207u, 1u, 0, FINITEF_TOLERANCE, 0}, +{982, 1242829722u, 3233935671u, 1u, 0, FINITEF_TOLERANCE, 0}, +{983, 3075149137u, 1117325737u, 1u, 0, FINITEF_TOLERANCE, 0}, +{984, 1200927971u, 1317167489u, 1u, 0, FINITEF_TOLERANCE, 0}, +{985, 3326858092u, 3452602832u, 1u, 0, FINITEF_TOLERANCE, 0}, +{986, 2995203347u, 1021818696u, 1u, 0, FINITEF_TOLERANCE, 0}, +{987, 1246019790u, 850632217u, 1u, 0, FINITEF_TOLERANCE, 0}, +{988, 3184801644u, 1137974313u, 1u, 0, FINITEF_TOLERANCE, 0}, +{989, 1136052740u, 3244616020u, 1u, 0, FINITEF_TOLERANCE, 0}, +{990, 1069009211u, 3002507482u, 1u, 0, FINITEF_TOLERANCE, 0}, +{991, 1015670780u, 1101217251u, 1u, 0, FINITEF_TOLERANCE, 0}, +{992, 1012543234u, 1116520440u, 1u, 0, FINITEF_TOLERANCE, 0}, +{993, 3316611992u, 3394732912u, 1u, 0, FINITEF_TOLERANCE, 0}, +{994, 3012101436u, 3307846870u, 1u, 0, FINITEF_TOLERANCE, 0}, +{995, 1087942795u, 3316660295u, 1u, 0, FINITEF_TOLERANCE, 0}, +{996, 3426365713u, 3069778532u, 1u, 0, FINITEF_TOLERANCE, 0}, +{997, 3066654389u, 3443934204u, 1u, 0, FINITEF_TOLERANCE, 0}, +{998, 3295326432u, 1313396175u, 1u, 0, FINITEF_TOLERANCE, 0}, +{999, 3318835308u, 3277583511u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1000, 3283555717u, 891875120u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1001, 3381255420u, 3015406047u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1002, 3040485181u, 3375450886u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1003, 3388772093u, 1032597076u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1004, 954670189u, 1144923689u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1005, 1319200415u, 3387555900u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1006, 1279324488u, 3228401212u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1007, 3217795424u, 865577227u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1008, 3455131757u, 1260217257u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1009, 2982636375u, 3162157233u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1010, 1246947517u, 1087951909u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1011, 3396723577u, 869285240u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1012, 3433761025u, 3060143904u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1013, 3201187455u, 900233172u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1014, 1173247961u, 1191127979u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1015, 3037297123u, 3346394818u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1016, 3248534678u, 1323683800u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1017, 3083019343u, 3033309444u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1018, 3042018375u, 3203882372u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1019, 1082862511u, 3032804719u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1020, 3157626955u, 3483653298u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1021, 1341821683u, 3003675365u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1022, 881101379u, 1190838126u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1023, 1079061705u, 2960507663u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1024, 3182695954u, 3256861672u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1025, 1105291533u, 3482971524u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1026, 1016023520u, 3227712090u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1027, 3370691006u, 1295870514u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1028, 1156767169u, 1049756240u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1029, 3077020499u, 894671462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1030, 1104284039u, 3040211914u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1031, 3335212901u, 3486414589u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1032, 1093697541u, 3193708441u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1033, 3266691185u, 1160074593u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1034, 3179003144u, 1108615803u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1035, 1094115255u, 3008610212u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1036, 2994604730u, 973792195u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1037, 3424086808u, 3260140004u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1038, 2957266025u, 917932067u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1039, 3353608773u, 1134068114u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1040, 2985838945u, 3118475644u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1041, 973664327u, 1319516167u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1042, 882878091u, 3136970767u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1043, 1098662266u, 833740182u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1044, 927582555u, 947955456u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1045, 3111440310u, 3067634077u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1046, 3476083859u, 966439623u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1047, 3038754840u, 932009686u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1048, 979878744u, 1232482646u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1049, 3464546616u, 3205527253u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1050, 1002542205u, 3152136093u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1051, 3443552129u, 3165561391u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1052, 1287620154u, 3119707283u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1053, 820906845u, 1196920413u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1054, 860108361u, 921064349u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1055, 946058434u, 1249928879u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1056, 3073260205u, 3093124531u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1057, 1245702957u, 894348966u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1058, 989655126u, 1308376568u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1059, 1002715618u, 1191006977u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1060, 3087802274u, 897541752u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1061, 1000863905u, 1196831314u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1062, 3415763001u, 3032518431u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1063, 2979924820u, 1100234812u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1064, 3283471961u, 1260093226u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1065, 3311210827u, 1192192264u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1066, 3026311911u, 2968974374u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1067, 1198307901u, 1116328249u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1068, 1288901567u, 1296370667u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1069, 922255363u, 958305289u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1070, 1113104661u, 944376032u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1071, 1136714348u, 828849087u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1072, 3002059872u, 1136817970u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1073, 948856035u, 1015466475u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1074, 1062512367u, 3229559531u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1075, 3486907092u, 823220784u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1076, 3015049792u, 3078555978u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1077, 1162027071u, 3308983387u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1078, 1034561811u, 1054043114u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1079, 853827378u, 898656161u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1080, 3271615417u, 3209997200u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1081, 1042014529u, 1146708584u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1082, 1177157787u, 3090208179u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1083, 3196144817u, 1056118717u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1084, 3432084552u, 2997091781u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1085, 1309658335u, 1010219988u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1086, 3004373345u, 873739132u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1087, 2997667929u, 1038223245u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1088, 1226494979u, 2991604792u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1089, 3100289712u, 3456334210u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1090, 3375507013u, 1306310823u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1091, 3460699001u, 3096700943u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1092, 3079231719u, 1044386263u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1093, 3093951884u, 1014115231u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1094, 3468023178u, 1209565017u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1095, 3008182310u, 1258900986u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1096, 1204196034u, 3298625731u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1097, 3459877411u, 2960476959u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1098, 909696559u, 1163075690u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1099, 1161439847u, 943449277u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1100, 908663107u, 939489763u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1101, 1055319316u, 3261813492u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1102, 1084378658u, 1009650785u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1103, 3053887750u, 3341786453u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1104, 3022828828u, 881335251u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1105, 2995476576u, 3194911588u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1106, 1226473697u, 821025132u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1107, 1123114742u, 1229815537u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1108, 1258114435u, 1291336083u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1109, 2983818103u, 3015402015u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1110, 3468040845u, 3066966245u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1111, 1178825761u, 1113195286u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1112, 3059266302u, 878503862u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1113, 3223384012u, 1130486973u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1114, 1019964626u, 1235133609u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1115, 3445262427u, 3465211174u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1116, 1125653081u, 1207799746u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1117, 3337652712u, 3025581813u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1118, 1184753508u, 3147374485u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1119, 996404791u, 3353251979u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1120, 1188439315u, 1113484271u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1121, 906557513u, 3006513432u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1122, 916831283u, 999465787u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1123, 996786317u, 3179221951u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1124, 3461635065u, 1004690387u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1125, 1188167943u, 1200744896u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1126, 3036502395u, 1172597364u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1127, 891257783u, 1267560050u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1128, 3290079438u, 846519377u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1129, 3350690327u, 2967953392u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1130, 1102061604u, 3424449935u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1131, 1282351521u, 3039376424u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1132, 3458861065u, 3392466405u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1133, 3095256878u, 1023623326u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1134, 3163373610u, 843150426u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1135, 3228793330u, 855146890u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1136, 3422194733u, 893873945u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1137, 3083885296u, 974543672u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1138, 1261940623u, 3402349985u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1139, 825039660u, 3426717554u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1140, 3400603081u, 3234396843u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1141, 1219411812u, 2961857939u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1142, 3094833770u, 805351108u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1143, 3139250800u, 3079109479u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1144, 886201503u, 3272760705u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1145, 3297366026u, 1089966380u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1146, 1218488455u, 3309646450u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1147, 3040358923u, 3093401553u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1148, 862346861u, 3411853707u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1149, 1283938137u, 1196383822u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1150, 3182551696u, 3029982441u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1151, 1317098613u, 949986176u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1152, 3116209179u, 3303588342u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1153, 3431703657u, 3014443710u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1154, 3239728775u, 927815421u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1155, 3207141672u, 933456504u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1156, 3154378805u, 905462392u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1157, 3069658155u, 1041452042u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1158, 3313160088u, 2964063309u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1159, 3207056527u, 3384206601u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1160, 1284174954u, 3436881197u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1161, 3156081645u, 3308839704u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1162, 1063693032u, 976661408u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1163, 3036026175u, 1251203998u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1164, 1102631663u, 3396951425u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1165, 968803479u, 992989712u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1166, 3273080388u, 3109405906u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1167, 1172529774u, 3294550127u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1168, 1306695905u, 1292690378u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1169, 1003649752u, 1218792138u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1170, 1078478376u, 1326246424u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1171, 3158855023u, 3151283866u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1172, 1165177679u, 3276237026u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1173, 870472127u, 3332532333u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1174, 3403009513u, 3381966453u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1175, 816825508u, 3032174124u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1176, 952348506u, 3377573987u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1177, 839544701u, 3419900937u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1178, 2967454456u, 3313359047u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1179, 1222777442u, 1125769920u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1180, 1325324763u, 978336043u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1181, 3363524213u, 3202991311u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1182, 1158950321u, 1073578913u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1183, 903129873u, 3416864271u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1184, 2997685349u, 1123653663u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1185, 3078339944u, 988173985u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1186, 1208345407u, 1254181270u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1187, 3003262042u, 1327277116u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1188, 1258634105u, 1247426200u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1189, 1248478509u, 1287895126u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1190, 1153863988u, 3430539165u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1191, 1235620969u, 866627358u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1192, 1097120930u, 3221726305u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1193, 3469778622u, 1200179013u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1194, 1147712200u, 931865525u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1195, 812694172u, 1136276190u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1196, 862266739u, 3139447362u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1197, 1124721745u, 3058969650u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1198, 3261744304u, 1043806501u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1199, 832324055u, 2954061156u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1200, 805759679u, 903848557u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1201, 2983396015u, 872299138u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1202, 1064922416u, 1320485628u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1203, 868114980u, 3213276361u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1204, 3303160152u, 3075455322u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1205, 1315090496u, 3269683237u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1206, 850876090u, 3365795667u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1207, 3230403187u, 1322841992u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1208, 1335399673u, 974138676u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1209, 1072458508u, 3372833993u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1210, 3303015249u, 3015039539u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1211, 3252139741u, 1059615003u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1212, 3468519966u, 3113982619u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1213, 1006231203u, 897530770u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1214, 951554138u, 1001144381u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1215, 942046828u, 986341002u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1216, 2968517146u, 951832467u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1217, 3319723279u, 3414482416u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1218, 3255104167u, 928827688u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1219, 1155477903u, 3104812800u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1220, 3273889176u, 980486479u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1221, 3237813668u, 3441016803u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1222, 1228207362u, 2985476579u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1223, 975349337u, 1311932596u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1224, 2982583196u, 3132904446u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1225, 1290175785u, 3008182462u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1226, 981908840u, 3314038398u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1227, 941187647u, 1107765599u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1228, 1214223128u, 3225536822u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1229, 3422922584u, 1086391131u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1230, 1315857601u, 3487600045u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1231, 3453226030u, 3233768835u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1232, 1078359574u, 3199175230u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1233, 1029557624u, 3302959071u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1234, 1207675424u, 3042692550u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1235, 1028355074u, 3442294040u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1236, 3119299090u, 1187096397u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1237, 1248421894u, 3367769132u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1238, 3353251994u, 1095517730u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1239, 876926659u, 3288089977u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1240, 1076752219u, 876236939u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1241, 3388531942u, 2988520062u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1242, 1273395082u, 3031189261u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1243, 3385588183u, 3258252464u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1244, 862047095u, 829323655u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1245, 3192315328u, 3289489214u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1246, 3441804648u, 3274638356u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1247, 837368567u, 3228474927u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1248, 3392827417u, 1277961150u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1249, 1161241793u, 1328003707u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1250, 856495732u, 3123041418u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1251, 3034494183u, 3041579130u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1252, 1171318485u, 3374409104u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1253, 3047748143u, 831102792u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1254, 1001216371u, 3052357038u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1255, 2999541351u, 3085461799u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1256, 912515889u, 1074635609u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1257, 3391452505u, 897989232u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1258, 3249603369u, 3147662248u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1259, 1220264047u, 2960450369u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1260, 3169816394u, 988430929u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1261, 3098997418u, 3002162688u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1262, 3282212423u, 3174079140u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1263, 3352293320u, 3247843425u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1264, 3296358441u, 875645354u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1265, 1197828352u, 3245614728u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1266, 3340510371u, 914930263u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1267, 1127109339u, 3368125489u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1268, 816173492u, 1083268662u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1269, 909467381u, 1232375752u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1270, 1200599955u, 2981200675u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1271, 962230977u, 2988248037u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1272, 2996667337u, 1068572835u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1273, 3192887808u, 3191848339u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1274, 3237183876u, 3179379969u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1275, 939285924u, 3056079386u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1276, 944050180u, 3452557879u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1277, 3058135703u, 3090284601u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1278, 3480592662u, 3261728191u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1279, 3061939312u, 3274418540u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1280, 1003299981u, 853295521u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1281, 1155775526u, 1255814444u, 1u, 0, FINITEF_TOLERANCE, 0}, +{1282, 1234491880u, 3408568717u, 1u, 0, FINITEF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_FINITEF_H multiple inclusion protection + +// EOF finitef.h diff --git a/packages/language/c/libm/current/tests/vectors/floorf.c b/packages/language/c/libm/current/tests/vectors/floorf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/floorf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// floorf.c +// +// Test of floorf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/floorf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(floorf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &floorf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &floorf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("floorf() is stable"); + } // if + else + { + CYG_TEST_FAIL("floorf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library floorf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "floorf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF floorf.c diff --git a/packages/language/c/libm/current/tests/vectors/floorf.h b/packages/language/c/libm/current/tests/vectors/floorf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/floorf.h @@ -0,0 +1,1235 @@ +#ifndef CYGONCE_LIBM_FLOORF_H +#define CYGONCE_LIBM_FLOORF_H +//=========================================================================== +// +// floorf.h +// +// Test vectors for testing of floorf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/floorf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define FLOORF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t floorf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{120, 646742016u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{121, 1008981770u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{122, 1017370378u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{123, 1022739087u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{124, 1025758986u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{125, 1028443341u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{126, 1031127695u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{127, 1032805417u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{128, 1034147594u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{129, 1035489772u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{130, 1036831949u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{131, 1038174126u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{132, 1039516303u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{133, 1040522936u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{134, 1041194025u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{135, 1041865114u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{136, 1042536202u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{137, 1043207291u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{138, 1043878380u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{139, 1044549468u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{140, 1045220557u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{141, 1045891645u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{142, 1046562734u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{143, 1047233823u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{144, 1047904911u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{145, 1048576000u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{146, 1048911544u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{147, 1049247089u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{148, 1049582633u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{149, 1049918177u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{150, 1050253722u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{151, 1050589266u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{152, 1050924810u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{153, 1051260355u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{154, 1051595899u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{155, 1051931443u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{156, 1052266988u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{157, 1052602532u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{158, 1052938076u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{159, 1053273620u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{160, 1053609165u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{161, 1053944709u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{162, 1054280253u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{163, 1054615798u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{164, 1054951342u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{165, 1055286886u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{166, 1055622431u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{167, 1055957975u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{168, 1056293519u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{169, 1056629064u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{170, 1056964608u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{171, 1057132380u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{172, 1057300152u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{173, 1057467924u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{174, 1057635697u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{175, 1057803469u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{176, 1057971241u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{177, 1058139013u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{178, 1058306785u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{179, 1058474557u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{180, 1058642330u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{181, 1058810102u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{182, 1058977874u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{183, 1059145646u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{184, 1059313418u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{185, 1059481190u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{186, 1059648963u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{187, 1059816735u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{188, 1059984507u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{189, 1060152279u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{190, 1060320051u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{191, 1060487823u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{192, 1060655596u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{193, 1060823368u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{194, 1060991140u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{195, 1061158912u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{196, 1061326684u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{197, 1061494456u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{198, 1061662228u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{199, 1061830001u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{200, 1061997773u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{201, 1062165545u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{202, 1062333317u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{203, 1062501089u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{204, 1062668861u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{205, 1062836634u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{206, 1063004406u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{207, 1063172178u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{208, 1063339950u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{209, 1063507722u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{210, 1063675494u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{211, 1063843267u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{212, 1064011039u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{213, 1064178811u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{214, 1064346583u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{215, 1064514355u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{216, 1064682127u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{217, 1064849900u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{218, 1065017672u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{219, 1065185444u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{220, 1065353216u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{221, 1065437102u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{222, 1065520988u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{223, 1065604874u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{224, 1065688760u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{225, 1065772646u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{226, 1065856532u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{227, 1065940419u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{228, 1066024305u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{229, 1066108191u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{230, 1066192077u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{231, 1066275963u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{232, 1066359849u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{233, 1066443735u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{234, 1066527621u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{235, 1066611507u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{236, 1066695393u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{237, 1066779279u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{238, 1066863165u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{239, 1066947052u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{240, 3234402267u, 0u, 3235905536u, 0, FLOORF_TOLERANCE, 0}, +{241, 3231108068u, 0u, 3231711232u, 0, FLOORF_TOLERANCE, 0}, +{242, 3226013659u, 0u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{243, 3217625051u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{244, 0u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{245, 1070141403u, 0u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{246, 1078530011u, 0u, 1077936128u, 0, FLOORF_TOLERANCE, 0}, +{247, 1083624420u, 0u, 1082130432u, 0, FLOORF_TOLERANCE, 0}, +{248, 3253731328u, 0u, 3253731328u, 0, FLOORF_TOLERANCE, 0}, +{249, 3252840038u, 0u, 3253207040u, 0, FLOORF_TOLERANCE, 0}, +{250, 3251948749u, 0u, 3252158464u, 0, FLOORF_TOLERANCE, 0}, +{251, 3251057459u, 0u, 3251109888u, 0, FLOORF_TOLERANCE, 0}, +{252, 3250166170u, 0u, 3250585600u, 0, FLOORF_TOLERANCE, 0}, +{253, 3249274880u, 0u, 3249537024u, 0, FLOORF_TOLERANCE, 0}, +{254, 3248383590u, 0u, 3248488448u, 0, FLOORF_TOLERANCE, 0}, +{255, 3247492301u, 0u, 3247964160u, 0, FLOORF_TOLERANCE, 0}, +{256, 3246601011u, 0u, 3246915584u, 0, FLOORF_TOLERANCE, 0}, +{257, 3245028147u, 0u, 3245342720u, 0, FLOORF_TOLERANCE, 0}, +{258, 3243245568u, 0u, 3243245568u, 0, FLOORF_TOLERANCE, 0}, +{259, 3241462989u, 0u, 3242196992u, 0, FLOORF_TOLERANCE, 0}, +{260, 3239680410u, 0u, 3240099840u, 0, FLOORF_TOLERANCE, 0}, +{261, 3237792973u, 0u, 3238002688u, 0, FLOORF_TOLERANCE, 0}, +{262, 3234227814u, 0u, 3235905536u, 0, FLOORF_TOLERANCE, 0}, +{263, 3230662656u, 0u, 3231711232u, 0, FLOORF_TOLERANCE, 0}, +{264, 3224580915u, 0u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{265, 3213675725u, 0u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{266, 1058642330u, 0u, 2147483648u, 0, FLOORF_TOLERANCE, 0}, +{267, 1075000115u, 0u, 1073741824u, 0, FLOORF_TOLERANCE, 0}, +{268, 1082130432u, 0u, 1082130432u, 0, FLOORF_TOLERANCE, 0}, +{269, 1085695590u, 0u, 1084227584u, 0, FLOORF_TOLERANCE, 0}, +{270, 1089260749u, 0u, 1088421888u, 0, FLOORF_TOLERANCE, 0}, +{271, 1091672474u, 0u, 1091567616u, 0, FLOORF_TOLERANCE, 0}, +{272, 1093455053u, 0u, 1092616192u, 0, FLOORF_TOLERANCE, 0}, +{273, 1095237632u, 0u, 1094713344u, 0, FLOORF_TOLERANCE, 0}, +{274, 1097020211u, 0u, 1096810496u, 0, FLOORF_TOLERANCE, 0}, +{275, 1098802790u, 0u, 1097859072u, 0, FLOORF_TOLERANCE, 0}, +{276, 1099746509u, 0u, 1099431936u, 0, FLOORF_TOLERANCE, 0}, +{277, 1100637798u, 0u, 1100480512u, 0, FLOORF_TOLERANCE, 0}, +{278, 1101529088u, 0u, 1101529088u, 0, FLOORF_TOLERANCE, 0}, +{279, 1102420378u, 0u, 1102053376u, 0, FLOORF_TOLERANCE, 0}, +{280, 1103311667u, 0u, 1103101952u, 0, FLOORF_TOLERANCE, 0}, +{281, 1104202957u, 0u, 1104150528u, 0, FLOORF_TOLERANCE, 0}, +{282, 1105094246u, 0u, 1104674816u, 0, FLOORF_TOLERANCE, 0}, +{283, 1105985536u, 0u, 1105723392u, 0, FLOORF_TOLERANCE, 0}, +{284, 1107800421u, 1203999711u, 1107558400u, 0, FLOORF_TOLERANCE, 0}, +{285, 3196650934u, 896005582u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{286, 3368700125u, 3308232444u, 3368700128u, 0, FLOORF_TOLERANCE, 0}, +{287, 1224242132u, 3061363425u, 1224242112u, 0, FLOORF_TOLERANCE, 0}, +{288, 3221027117u, 1284201705u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{289, 1198712763u, 919636942u, 1198712576u, 0, FLOORF_TOLERANCE, 0}, +{290, 3159309973u, 852521077u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{291, 954173073u, 850531830u, 0u, 0, FLOORF_TOLERANCE, 0}, +{292, 3090780435u, 1035260608u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{293, 966554515u, 3234538174u, 0u, 0, FLOORF_TOLERANCE, 0}, +{294, 1312607135u, 1194999402u, 1312607135u, 0, FLOORF_TOLERANCE, 0}, +{295, 1166191415u, 1018661564u, 1166190592u, 0, FLOORF_TOLERANCE, 0}, +{296, 3111900019u, 1130472166u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{297, 1234419246u, 2984575812u, 1234419240u, 0, FLOORF_TOLERANCE, 0}, +{298, 1302107128u, 3370647675u, 1302107128u, 0, FLOORF_TOLERANCE, 0}, +{299, 1052801068u, 3039122570u, 0u, 0, FLOORF_TOLERANCE, 0}, +{300, 1060849628u, 3081357692u, 0u, 0, FLOORF_TOLERANCE, 0}, +{301, 3484320003u, 3033957825u, 3484320003u, 0, FLOORF_TOLERANCE, 0}, +{302, 3181522772u, 3305392896u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{303, 882596369u, 1256676590u, 0u, 0, FLOORF_TOLERANCE, 0}, +{304, 1167223673u, 846102364u, 1167222784u, 0, FLOORF_TOLERANCE, 0}, +{305, 968192794u, 878547432u, 0u, 0, FLOORF_TOLERANCE, 0}, +{306, 3122346862u, 1111584337u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{307, 1052361612u, 1280025214u, 0u, 0, FLOORF_TOLERANCE, 0}, +{308, 906701409u, 2968301825u, 0u, 0, FLOORF_TOLERANCE, 0}, +{309, 3471653172u, 1154138102u, 3471653172u, 0, FLOORF_TOLERANCE, 0}, +{310, 3231467496u, 934336592u, 3231711232u, 0, FLOORF_TOLERANCE, 0}, +{311, 1341514497u, 3466051188u, 1341514497u, 0, FLOORF_TOLERANCE, 0}, +{312, 1272351391u, 3373485062u, 1272351390u, 0, FLOORF_TOLERANCE, 0}, +{313, 3319724992u, 3354615790u, 3319726080u, 0, FLOORF_TOLERANCE, 0}, +{314, 917622040u, 1334966485u, 0u, 0, FLOORF_TOLERANCE, 0}, +{315, 940236348u, 3304072663u, 0u, 0, FLOORF_TOLERANCE, 0}, +{316, 3251541546u, 3174764041u, 3251634176u, 0, FLOORF_TOLERANCE, 0}, +{317, 3099843889u, 3355962282u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{318, 3110358400u, 851145088u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{319, 3371863479u, 1014861921u, 3371863488u, 0, FLOORF_TOLERANCE, 0}, +{320, 3204069187u, 966573255u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{321, 1306460502u, 903489435u, 1306460502u, 0, FLOORF_TOLERANCE, 0}, +{322, 1197542187u, 3024598921u, 1197542144u, 0, FLOORF_TOLERANCE, 0}, +{323, 922888249u, 1139392309u, 0u, 0, FLOORF_TOLERANCE, 0}, +{324, 1184239996u, 3224098462u, 1184239616u, 0, FLOORF_TOLERANCE, 0}, +{325, 1252490238u, 1173619825u, 1252490236u, 0, FLOORF_TOLERANCE, 0}, +{326, 1001673627u, 3462631271u, 0u, 0, FLOORF_TOLERANCE, 0}, +{327, 976098044u, 1151967422u, 0u, 0, FLOORF_TOLERANCE, 0}, +{328, 941796645u, 886451963u, 0u, 0, FLOORF_TOLERANCE, 0}, +{329, 3287199470u, 854245542u, 3287220224u, 0, FLOORF_TOLERANCE, 0}, +{330, 893184329u, 1243067084u, 0u, 0, FLOORF_TOLERANCE, 0}, +{331, 1143233714u, 1007268238u, 1143226368u, 0, FLOORF_TOLERANCE, 0}, +{332, 1139941253u, 1147688821u, 1139933184u, 0, FLOORF_TOLERANCE, 0}, +{333, 3143717025u, 3234638157u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{334, 3048866608u, 3449209899u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{335, 3240298487u, 1020260821u, 3241148416u, 0, FLOORF_TOLERANCE, 0}, +{336, 1288902137u, 3123875978u, 1288902137u, 0, FLOORF_TOLERANCE, 0}, +{337, 1333134799u, 1338107877u, 1333134799u, 0, FLOORF_TOLERANCE, 0}, +{338, 1187847971u, 1317663644u, 1187847680u, 0, FLOORF_TOLERANCE, 0}, +{339, 1038851706u, 1327544110u, 0u, 0, FLOORF_TOLERANCE, 0}, +{340, 3329354473u, 3165437289u, 3329354752u, 0, FLOORF_TOLERANCE, 0}, +{341, 3077218579u, 1308397879u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{342, 1309289088u, 1019883016u, 1309289088u, 0, FLOORF_TOLERANCE, 0}, +{343, 3444653659u, 1279248024u, 3444653659u, 0, FLOORF_TOLERANCE, 0}, +{344, 3405585402u, 2962345057u, 3405585402u, 0, FLOORF_TOLERANCE, 0}, +{345, 3106647724u, 853848387u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{346, 1106778573u, 3304487767u, 1106771968u, 0, FLOORF_TOLERANCE, 0}, +{347, 1140567947u, 3069174149u, 1140555776u, 0, FLOORF_TOLERANCE, 0}, +{348, 1238569473u, 873035665u, 1238569472u, 0, FLOORF_TOLERANCE, 0}, +{349, 3154871957u, 1276671061u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{350, 1261071232u, 1182202773u, 1261071232u, 0, FLOORF_TOLERANCE, 0}, +{351, 1175011025u, 3029705783u, 1175010304u, 0, FLOORF_TOLERANCE, 0}, +{352, 1082692850u, 1211581107u, 1082130432u, 0, FLOORF_TOLERANCE, 0}, +{353, 974547519u, 3475164509u, 0u, 0, FLOORF_TOLERANCE, 0}, +{354, 3058097085u, 3104309359u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{355, 3107252546u, 1071134451u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{356, 3096032662u, 2976848821u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{357, 3197942144u, 3094120030u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{358, 3403348556u, 3184653669u, 3403348558u, 0, FLOORF_TOLERANCE, 0}, +{359, 3182301130u, 3460764044u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{360, 1136411063u, 1118097422u, 1136394240u, 0, FLOORF_TOLERANCE, 0}, +{361, 3239231622u, 3302723069u, 3240099840u, 0, FLOORF_TOLERANCE, 0}, +{362, 3340615780u, 870350055u, 3340615936u, 0, FLOORF_TOLERANCE, 0}, +{363, 998567360u, 2995278691u, 0u, 0, FLOORF_TOLERANCE, 0}, +{364, 3417964312u, 1321337529u, 3417964312u, 0, FLOORF_TOLERANCE, 0}, +{365, 3109481038u, 1143864063u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{366, 1148867223u, 1256486202u, 1148862464u, 0, FLOORF_TOLERANCE, 0}, +{367, 989687421u, 3372681320u, 0u, 0, FLOORF_TOLERANCE, 0}, +{368, 1152956913u, 3166480640u, 1152950272u, 0, FLOORF_TOLERANCE, 0}, +{369, 892922651u, 3373029087u, 0u, 0, FLOORF_TOLERANCE, 0}, +{370, 1109627625u, 1314158257u, 1109393408u, 0, FLOORF_TOLERANCE, 0}, +{371, 1307091856u, 1103202538u, 1307091856u, 0, FLOORF_TOLERANCE, 0}, +{372, 1077234132u, 3272167130u, 1073741824u, 0, FLOORF_TOLERANCE, 0}, +{373, 1142167709u, 1096445242u, 1142161408u, 0, FLOORF_TOLERANCE, 0}, +{374, 3426232834u, 1036705270u, 3426232834u, 0, FLOORF_TOLERANCE, 0}, +{375, 3368566779u, 967249167u, 3368566784u, 0, FLOORF_TOLERANCE, 0}, +{376, 3030724760u, 3349013503u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{377, 1138741813u, 3073453199u, 1138720768u, 0, FLOORF_TOLERANCE, 0}, +{378, 982950501u, 982549888u, 0u, 0, FLOORF_TOLERANCE, 0}, +{379, 1142981585u, 1015602236u, 1142980608u, 0, FLOORF_TOLERANCE, 0}, +{380, 3347165962u, 3135486696u, 3347166080u, 0, FLOORF_TOLERANCE, 0}, +{381, 1009535440u, 3381353228u, 0u, 0, FLOORF_TOLERANCE, 0}, +{382, 3103736980u, 3402950505u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{383, 3126820946u, 1077903063u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{384, 3473956030u, 976891930u, 3473956030u, 0, FLOORF_TOLERANCE, 0}, +{385, 3349098349u, 1055327704u, 3349098368u, 0, FLOORF_TOLERANCE, 0}, +{386, 3152729489u, 1060398533u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{387, 945568720u, 3313485084u, 0u, 0, FLOORF_TOLERANCE, 0}, +{388, 3345489836u, 1108392401u, 3345489920u, 0, FLOORF_TOLERANCE, 0}, +{389, 940893161u, 1137000140u, 0u, 0, FLOORF_TOLERANCE, 0}, +{390, 976791751u, 3230678102u, 0u, 0, FLOORF_TOLERANCE, 0}, +{391, 1004442355u, 3036510596u, 0u, 0, FLOORF_TOLERANCE, 0}, +{392, 1108485380u, 3173536878u, 1108344832u, 0, FLOORF_TOLERANCE, 0}, +{393, 1061834641u, 972388096u, 0u, 0, FLOORF_TOLERANCE, 0}, +{394, 3381268392u, 1146976802u, 3381268392u, 0, FLOORF_TOLERANCE, 0}, +{395, 1087189715u, 2952822478u, 1086324736u, 0, FLOORF_TOLERANCE, 0}, +{396, 3212952285u, 3329407365u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{397, 1000611335u, 857599439u, 0u, 0, FLOORF_TOLERANCE, 0}, +{398, 3466188568u, 1041678304u, 3466188568u, 0, FLOORF_TOLERANCE, 0}, +{399, 3072456205u, 3160254633u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{400, 3319315516u, 3422089012u, 3319316480u, 0, FLOORF_TOLERANCE, 0}, +{401, 935938416u, 1146676692u, 0u, 0, FLOORF_TOLERANCE, 0}, +{402, 3212614372u, 1152633030u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{403, 1315030230u, 3336225884u, 1315030230u, 0, FLOORF_TOLERANCE, 0}, +{404, 1134593658u, 3456812581u, 1134592000u, 0, FLOORF_TOLERANCE, 0}, +{405, 977281449u, 879922831u, 0u, 0, FLOORF_TOLERANCE, 0}, +{406, 1086198791u, 920125958u, 1084227584u, 0, FLOORF_TOLERANCE, 0}, +{407, 1255152035u, 851754050u, 1255152034u, 0, FLOORF_TOLERANCE, 0}, +{408, 1135271264u, 3284878412u, 1135247360u, 0, FLOORF_TOLERANCE, 0}, +{409, 1094190727u, 1056854532u, 1093664768u, 0, FLOORF_TOLERANCE, 0}, +{410, 1294665325u, 991185677u, 1294665325u, 0, FLOORF_TOLERANCE, 0}, +{411, 1036608591u, 805416536u, 0u, 0, FLOORF_TOLERANCE, 0}, +{412, 3229998064u, 825237063u, 3231711232u, 0, FLOORF_TOLERANCE, 0}, +{413, 3439134022u, 1043829691u, 3439134022u, 0, FLOORF_TOLERANCE, 0}, +{414, 3073083133u, 1317170485u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{415, 1325668223u, 970681762u, 1325668223u, 0, FLOORF_TOLERANCE, 0}, +{416, 1092037607u, 1027330835u, 1091567616u, 0, FLOORF_TOLERANCE, 0}, +{417, 3316278408u, 3455589207u, 3316279296u, 0, FLOORF_TOLERANCE, 0}, +{418, 3295436768u, 3129873731u, 3295444992u, 0, FLOORF_TOLERANCE, 0}, +{419, 1151984049u, 3074547120u, 1151983616u, 0, FLOORF_TOLERANCE, 0}, +{420, 1129287043u, 3076527544u, 1129250816u, 0, FLOORF_TOLERANCE, 0}, +{421, 1243664530u, 972879810u, 1243664528u, 0, FLOORF_TOLERANCE, 0}, +{422, 950829092u, 929114193u, 0u, 0, FLOORF_TOLERANCE, 0}, +{423, 1115471979u, 3047246262u, 1115422720u, 0, FLOORF_TOLERANCE, 0}, +{424, 3351092088u, 3024661404u, 3351092096u, 0, FLOORF_TOLERANCE, 0}, +{425, 3424479544u, 3312047722u, 3424479544u, 0, FLOORF_TOLERANCE, 0}, +{426, 3241193975u, 884465785u, 3242196992u, 0, FLOORF_TOLERANCE, 0}, +{427, 1030934236u, 1045139240u, 0u, 0, FLOORF_TOLERANCE, 0}, +{428, 3131791114u, 3408392958u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{429, 1025254314u, 3057812821u, 0u, 0, FLOORF_TOLERANCE, 0}, +{430, 1110545760u, 3240144177u, 1110441984u, 0, FLOORF_TOLERANCE, 0}, +{431, 3180213739u, 1108793820u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{432, 3361976590u, 3138179993u, 3361976640u, 0, FLOORF_TOLERANCE, 0}, +{433, 881280146u, 3421884736u, 0u, 0, FLOORF_TOLERANCE, 0}, +{434, 1304154705u, 2961937089u, 1304154705u, 0, FLOORF_TOLERANCE, 0}, +{435, 3264443610u, 3222916705u, 3264479232u, 0, FLOORF_TOLERANCE, 0}, +{436, 3374550627u, 3055856293u, 3374550640u, 0, FLOORF_TOLERANCE, 0}, +{437, 899599265u, 3240118211u, 0u, 0, FLOORF_TOLERANCE, 0}, +{438, 1268194719u, 1332489410u, 1268194719u, 0, FLOORF_TOLERANCE, 0}, +{439, 1133420220u, 1245770860u, 1133412352u, 0, FLOORF_TOLERANCE, 0}, +{440, 1161858787u, 815362075u, 1161854976u, 0, FLOORF_TOLERANCE, 0}, +{441, 3184462258u, 1263529646u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{442, 3295996963u, 3453334307u, 3296002048u, 0, FLOORF_TOLERANCE, 0}, +{443, 1270887389u, 1156123987u, 1270887389u, 0, FLOORF_TOLERANCE, 0}, +{444, 3325193181u, 993979179u, 3325193216u, 0, FLOORF_TOLERANCE, 0}, +{445, 925657343u, 1315159742u, 0u, 0, FLOORF_TOLERANCE, 0}, +{446, 3115275450u, 3008350271u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{447, 3116607482u, 3224327456u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{448, 3187892415u, 3118097315u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{449, 1189120494u, 978961471u, 1189120000u, 0, FLOORF_TOLERANCE, 0}, +{450, 889030794u, 3129523970u, 0u, 0, FLOORF_TOLERANCE, 0}, +{451, 1323529208u, 3100744786u, 1323529208u, 0, FLOORF_TOLERANCE, 0}, +{452, 3465768388u, 3190881451u, 3465768388u, 0, FLOORF_TOLERANCE, 0}, +{453, 3426099899u, 1118756120u, 3426099899u, 0, FLOORF_TOLERANCE, 0}, +{454, 3224857113u, 3398166843u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{455, 1065798296u, 816191940u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{456, 3328989444u, 850266225u, 3328990208u, 0, FLOORF_TOLERANCE, 0}, +{457, 3357819026u, 3148475462u, 3357819072u, 0, FLOORF_TOLERANCE, 0}, +{458, 1273397670u, 901308750u, 1273397670u, 0, FLOORF_TOLERANCE, 0}, +{459, 3424831780u, 1304806106u, 3424831780u, 0, FLOORF_TOLERANCE, 0}, +{460, 1257596246u, 3420832544u, 1257596246u, 0, FLOORF_TOLERANCE, 0}, +{461, 1051773536u, 896271348u, 0u, 0, FLOORF_TOLERANCE, 0}, +{462, 3294752507u, 3113225954u, 3294756864u, 0, FLOORF_TOLERANCE, 0}, +{463, 3424848725u, 2973850350u, 3424848725u, 0, FLOORF_TOLERANCE, 0}, +{464, 1090870906u, 3294742905u, 1090519040u, 0, FLOORF_TOLERANCE, 0}, +{465, 1227582289u, 1208979668u, 1227582288u, 0, FLOORF_TOLERANCE, 0}, +{466, 1272325814u, 3004311296u, 1272325814u, 0, FLOORF_TOLERANCE, 0}, +{467, 3359508271u, 859974315u, 3359508288u, 0, FLOORF_TOLERANCE, 0}, +{468, 1137854355u, 3335041917u, 1137836032u, 0, FLOORF_TOLERANCE, 0}, +{469, 3440773058u, 3204192793u, 3440773058u, 0, FLOORF_TOLERANCE, 0}, +{470, 3101598400u, 3057760708u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{471, 3451216836u, 3347783723u, 3451216836u, 0, FLOORF_TOLERANCE, 0}, +{472, 3437062994u, 3106834845u, 3437062994u, 0, FLOORF_TOLERANCE, 0}, +{473, 1131196082u, 1164573183u, 1131151360u, 0, FLOORF_TOLERANCE, 0}, +{474, 3177294154u, 1282436638u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{475, 3258097678u, 1305882290u, 3258187776u, 0, FLOORF_TOLERANCE, 0}, +{476, 3460915348u, 1219372260u, 3460915348u, 0, FLOORF_TOLERANCE, 0}, +{477, 3303035472u, 3153013020u, 3303038976u, 0, FLOORF_TOLERANCE, 0}, +{478, 1053698677u, 3284313107u, 0u, 0, FLOORF_TOLERANCE, 0}, +{479, 3396166221u, 1201894512u, 3396166224u, 0, FLOORF_TOLERANCE, 0}, +{480, 3037541131u, 1085398440u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{481, 3458934263u, 1005577835u, 3458934263u, 0, FLOORF_TOLERANCE, 0}, +{482, 1065761827u, 3333928591u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{483, 3025843188u, 820250112u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{484, 926665223u, 3150815797u, 0u, 0, FLOORF_TOLERANCE, 0}, +{485, 1199816046u, 3143776186u, 1199815936u, 0, FLOORF_TOLERANCE, 0}, +{486, 3333779015u, 952421041u, 3333779456u, 0, FLOORF_TOLERANCE, 0}, +{487, 948398145u, 3238273189u, 0u, 0, FLOORF_TOLERANCE, 0}, +{488, 3054021468u, 1270257895u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{489, 1080781593u, 1213908300u, 1077936128u, 0, FLOORF_TOLERANCE, 0}, +{490, 3164749613u, 3010837763u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{491, 3235326590u, 1271705594u, 3235905536u, 0, FLOORF_TOLERANCE, 0}, +{492, 3118883815u, 1051802647u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{493, 965378004u, 1292594138u, 0u, 0, FLOORF_TOLERANCE, 0}, +{494, 3226990408u, 1110755136u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{495, 3117098218u, 1122474770u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{496, 1283624229u, 906796922u, 1283624229u, 0, FLOORF_TOLERANCE, 0}, +{497, 970649315u, 1078286437u, 0u, 0, FLOORF_TOLERANCE, 0}, +{498, 959776291u, 3280345347u, 0u, 0, FLOORF_TOLERANCE, 0}, +{499, 3341117305u, 3294559023u, 3341117440u, 0, FLOORF_TOLERANCE, 0}, +{500, 1270734970u, 3355874874u, 1270734970u, 0, FLOORF_TOLERANCE, 0}, +{501, 3454816067u, 868771977u, 3454816067u, 0, FLOORF_TOLERANCE, 0}, +{502, 917206623u, 1172710814u, 0u, 0, FLOORF_TOLERANCE, 0}, +{503, 1106502045u, 1290849316u, 1106247680u, 0, FLOORF_TOLERANCE, 0}, +{504, 1157598381u, 3309023746u, 1157595136u, 0, FLOORF_TOLERANCE, 0}, +{505, 3335234513u, 1002337336u, 3335234560u, 0, FLOORF_TOLERANCE, 0}, +{506, 1279489061u, 1006049444u, 1279489060u, 0, FLOORF_TOLERANCE, 0}, +{507, 3157416480u, 1309984610u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{508, 3143920719u, 3131608518u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{509, 1233171235u, 826460580u, 1233171232u, 0, FLOORF_TOLERANCE, 0}, +{510, 1148920078u, 1007674793u, 1148911616u, 0, FLOORF_TOLERANCE, 0}, +{511, 3064988156u, 3230867340u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{512, 3083619260u, 1159415661u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{513, 1109198803u, 1221754614u, 1109131264u, 0, FLOORF_TOLERANCE, 0}, +{514, 3219949483u, 1056167693u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{515, 3361149474u, 3387342069u, 3361149504u, 0, FLOORF_TOLERANCE, 0}, +{516, 1207502108u, 3388073586u, 1207502080u, 0, FLOORF_TOLERANCE, 0}, +{517, 1000014431u, 831213088u, 0u, 0, FLOORF_TOLERANCE, 0}, +{518, 3161756316u, 3143659754u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{519, 3160728744u, 3382954009u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{520, 1234530539u, 1079988872u, 1234530536u, 0, FLOORF_TOLERANCE, 0}, +{521, 1017843965u, 1193076204u, 0u, 0, FLOORF_TOLERANCE, 0}, +{522, 951862956u, 1173464654u, 0u, 0, FLOORF_TOLERANCE, 0}, +{523, 3306328852u, 1118701064u, 3306332160u, 0, FLOORF_TOLERANCE, 0}, +{524, 1291910469u, 1211303367u, 1291910469u, 0, FLOORF_TOLERANCE, 0}, +{525, 3027442905u, 1173894400u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{526, 1131927531u, 3182962700u, 1131872256u, 0, FLOORF_TOLERANCE, 0}, +{527, 3449879391u, 991614550u, 3449879391u, 0, FLOORF_TOLERANCE, 0}, +{528, 970094304u, 3344590506u, 0u, 0, FLOORF_TOLERANCE, 0}, +{529, 1125551064u, 3331248076u, 1125515264u, 0, FLOORF_TOLERANCE, 0}, +{530, 3427296372u, 3455289118u, 3427296372u, 0, FLOORF_TOLERANCE, 0}, +{531, 1198917460u, 1327195159u, 1198917376u, 0, FLOORF_TOLERANCE, 0}, +{532, 3201603336u, 820047343u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{533, 3114686212u, 3476082461u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{534, 921940707u, 2967544056u, 0u, 0, FLOORF_TOLERANCE, 0}, +{535, 1091906532u, 3011904455u, 1091567616u, 0, FLOORF_TOLERANCE, 0}, +{536, 3393557778u, 3383396815u, 3393557780u, 0, FLOORF_TOLERANCE, 0}, +{537, 1276853215u, 873199561u, 1276853215u, 0, FLOORF_TOLERANCE, 0}, +{538, 3462778440u, 3349284325u, 3462778440u, 0, FLOORF_TOLERANCE, 0}, +{539, 3360170117u, 3048354042u, 3360170176u, 0, FLOORF_TOLERANCE, 0}, +{540, 3224245428u, 3271307999u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{541, 1120124467u, 1135619937u, 1120010240u, 0, FLOORF_TOLERANCE, 0}, +{542, 1064364381u, 3180675544u, 0u, 0, FLOORF_TOLERANCE, 0}, +{543, 1268744779u, 3328452652u, 1268744778u, 0, FLOORF_TOLERANCE, 0}, +{544, 1165195428u, 3390323168u, 1165193216u, 0, FLOORF_TOLERANCE, 0}, +{545, 3044092739u, 1106497311u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{546, 3149469534u, 1278465842u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{547, 3247790039u, 909788142u, 3247964160u, 0, FLOORF_TOLERANCE, 0}, +{548, 3215244648u, 1083988595u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{549, 3095275931u, 989153382u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{550, 3059688264u, 1117455718u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{551, 1212717473u, 837873779u, 1212717440u, 0, FLOORF_TOLERANCE, 0}, +{552, 3275973009u, 3450721670u, 3276013568u, 0, FLOORF_TOLERANCE, 0}, +{553, 3028857014u, 3188853813u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{554, 3391162308u, 1291220039u, 3391162308u, 0, FLOORF_TOLERANCE, 0}, +{555, 1044867873u, 3369493273u, 0u, 0, FLOORF_TOLERANCE, 0}, +{556, 1089986803u, 3462160118u, 1088421888u, 0, FLOORF_TOLERANCE, 0}, +{557, 1296314700u, 2957454177u, 1296314700u, 0, FLOORF_TOLERANCE, 0}, +{558, 1251462432u, 3171021770u, 1251462432u, 0, FLOORF_TOLERANCE, 0}, +{559, 3485236902u, 980772835u, 3485236902u, 0, FLOORF_TOLERANCE, 0}, +{560, 3262169538u, 1268270462u, 3262382080u, 0, FLOORF_TOLERANCE, 0}, +{561, 3080852256u, 994641495u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{562, 1022211242u, 922124181u, 0u, 0, FLOORF_TOLERANCE, 0}, +{563, 884661176u, 2985540645u, 0u, 0, FLOORF_TOLERANCE, 0}, +{564, 3071422941u, 3271100396u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{565, 989762529u, 3362011135u, 0u, 0, FLOORF_TOLERANCE, 0}, +{566, 1295475718u, 3212305413u, 1295475718u, 0, FLOORF_TOLERANCE, 0}, +{567, 1002632518u, 3330388441u, 0u, 0, FLOORF_TOLERANCE, 0}, +{568, 3404372005u, 3450484255u, 3404372006u, 0, FLOORF_TOLERANCE, 0}, +{569, 3158912530u, 3105501826u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{570, 1125800069u, 3256265749u, 1125777408u, 0, FLOORF_TOLERANCE, 0}, +{571, 3138037576u, 3103365227u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{572, 3108384823u, 1300246663u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{573, 999985470u, 3409354318u, 0u, 0, FLOORF_TOLERANCE, 0}, +{574, 1189421739u, 1056599002u, 1189421568u, 0, FLOORF_TOLERANCE, 0}, +{575, 3075182644u, 3144159778u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{576, 3028099649u, 3391513557u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{577, 3132541814u, 3444521949u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{578, 1164046161u, 3440635788u, 1164042240u, 0, FLOORF_TOLERANCE, 0}, +{579, 1292596266u, 3116569667u, 1292596266u, 0, FLOORF_TOLERANCE, 0}, +{580, 3469748379u, 3412765608u, 3469748379u, 0, FLOORF_TOLERANCE, 0}, +{581, 1314644642u, 3123051784u, 1314644642u, 0, FLOORF_TOLERANCE, 0}, +{582, 3399813173u, 828743798u, 3399813174u, 0, FLOORF_TOLERANCE, 0}, +{583, 948775569u, 3485444126u, 0u, 0, FLOORF_TOLERANCE, 0}, +{584, 1034611395u, 882288581u, 0u, 0, FLOORF_TOLERANCE, 0}, +{585, 3489122735u, 3372450889u, 3489122735u, 0, FLOORF_TOLERANCE, 0}, +{586, 1181604787u, 3363067409u, 1181603840u, 0, FLOORF_TOLERANCE, 0}, +{587, 3059042077u, 3204983963u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{588, 1043691622u, 3402603223u, 0u, 0, FLOORF_TOLERANCE, 0}, +{589, 1314588083u, 856187848u, 1314588083u, 0, FLOORF_TOLERANCE, 0}, +{590, 3141533334u, 3010142974u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{591, 3157534378u, 3451674717u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{592, 3400949680u, 3073750220u, 3400949680u, 0, FLOORF_TOLERANCE, 0}, +{593, 3365581801u, 1175843167u, 3365581824u, 0, FLOORF_TOLERANCE, 0}, +{594, 1110424755u, 3011308654u, 1110179840u, 0, FLOORF_TOLERANCE, 0}, +{595, 3189917167u, 927278934u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{596, 969804941u, 3355439348u, 0u, 0, FLOORF_TOLERANCE, 0}, +{597, 1139120919u, 3270515074u, 1139113984u, 0, FLOORF_TOLERANCE, 0}, +{598, 934308144u, 3118191228u, 0u, 0, FLOORF_TOLERANCE, 0}, +{599, 1220524226u, 1152648002u, 1220524224u, 0, FLOORF_TOLERANCE, 0}, +{600, 3162548604u, 3461790298u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{601, 3382391700u, 3296962745u, 3382391704u, 0, FLOORF_TOLERANCE, 0}, +{602, 1156767533u, 1088986462u, 1156759552u, 0, FLOORF_TOLERANCE, 0}, +{603, 3079222483u, 3312324949u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{604, 994934087u, 967678094u, 0u, 0, FLOORF_TOLERANCE, 0}, +{605, 3185240099u, 1123403720u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{606, 3479873563u, 1246277393u, 3479873563u, 0, FLOORF_TOLERANCE, 0}, +{607, 3424264117u, 3434026174u, 3424264117u, 0, FLOORF_TOLERANCE, 0}, +{608, 3228365887u, 1216775310u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{609, 1035909900u, 1249532942u, 0u, 0, FLOORF_TOLERANCE, 0}, +{610, 3024951184u, 1247632131u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{611, 1212129651u, 3017366784u, 1212129600u, 0, FLOORF_TOLERANCE, 0}, +{612, 3125775254u, 955826310u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{613, 1037464105u, 3121544932u, 0u, 0, FLOORF_TOLERANCE, 0}, +{614, 1311706596u, 1254918706u, 1311706596u, 0, FLOORF_TOLERANCE, 0}, +{615, 918212457u, 1017468331u, 0u, 0, FLOORF_TOLERANCE, 0}, +{616, 1337315179u, 3461361185u, 1337315179u, 0, FLOORF_TOLERANCE, 0}, +{617, 1131358407u, 3325958870u, 1131347968u, 0, FLOORF_TOLERANCE, 0}, +{618, 1156517523u, 3343716230u, 1156513792u, 0, FLOORF_TOLERANCE, 0}, +{619, 3210802820u, 3207408574u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{620, 3337499209u, 1226297264u, 3337499648u, 0, FLOORF_TOLERANCE, 0}, +{621, 3468429030u, 3253874001u, 3468429030u, 0, FLOORF_TOLERANCE, 0}, +{622, 3253515800u, 1189005947u, 3253731328u, 0, FLOORF_TOLERANCE, 0}, +{623, 3055299953u, 3047908678u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{624, 959956547u, 876324728u, 0u, 0, FLOORF_TOLERANCE, 0}, +{625, 3425290480u, 1139193797u, 3425290480u, 0, FLOORF_TOLERANCE, 0}, +{626, 1039917375u, 1122740999u, 0u, 0, FLOORF_TOLERANCE, 0}, +{627, 3220979495u, 3429223871u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{628, 1311016004u, 3334899880u, 1311016004u, 0, FLOORF_TOLERANCE, 0}, +{629, 1128016396u, 1105151547u, 1128005632u, 0, FLOORF_TOLERANCE, 0}, +{630, 3210335769u, 3100646155u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{631, 3022705759u, 3404762495u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{632, 1206054701u, 826010009u, 1206054656u, 0, FLOORF_TOLERANCE, 0}, +{633, 3144504834u, 1162227076u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{634, 1213609983u, 919983950u, 1213609920u, 0, FLOORF_TOLERANCE, 0}, +{635, 1246902946u, 3064047808u, 1246902944u, 0, FLOORF_TOLERANCE, 0}, +{636, 995850843u, 1332031130u, 0u, 0, FLOORF_TOLERANCE, 0}, +{637, 3362082828u, 3374056268u, 3362082880u, 0, FLOORF_TOLERANCE, 0}, +{638, 1029480631u, 3047777170u, 0u, 0, FLOORF_TOLERANCE, 0}, +{639, 3153568584u, 3106514232u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{640, 3384988527u, 3109485565u, 3384988528u, 0, FLOORF_TOLERANCE, 0}, +{641, 1317696241u, 870681806u, 1317696241u, 0, FLOORF_TOLERANCE, 0}, +{642, 3235395924u, 1132055244u, 3235905536u, 0, FLOORF_TOLERANCE, 0}, +{643, 3341877624u, 2969495570u, 3341877760u, 0, FLOORF_TOLERANCE, 0}, +{644, 1228636133u, 886552820u, 1228636128u, 0, FLOORF_TOLERANCE, 0}, +{645, 3161654634u, 3335899347u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{646, 3162655243u, 3307203982u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{647, 1207246237u, 859223639u, 1207246208u, 0, FLOORF_TOLERANCE, 0}, +{648, 1165476654u, 3350219111u, 1165475840u, 0, FLOORF_TOLERANCE, 0}, +{649, 1215278023u, 3019755242u, 1215278016u, 0, FLOORF_TOLERANCE, 0}, +{650, 1017239798u, 3438501281u, 0u, 0, FLOORF_TOLERANCE, 0}, +{651, 1149651309u, 970030475u, 1149648896u, 0, FLOORF_TOLERANCE, 0}, +{652, 1111943722u, 3122211334u, 1111752704u, 0, FLOORF_TOLERANCE, 0}, +{653, 1189849849u, 3382739134u, 1189849600u, 0, FLOORF_TOLERANCE, 0}, +{654, 3204848496u, 3141519085u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{655, 1249758327u, 3104759211u, 1249758324u, 0, FLOORF_TOLERANCE, 0}, +{656, 3092982276u, 3445282331u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{657, 1168098747u, 1316854744u, 1168097280u, 0, FLOORF_TOLERANCE, 0}, +{658, 892549317u, 1179637545u, 0u, 0, FLOORF_TOLERANCE, 0}, +{659, 3301009024u, 3406174560u, 3301015552u, 0, FLOORF_TOLERANCE, 0}, +{660, 3233089227u, 1212652543u, 3233808384u, 0, FLOORF_TOLERANCE, 0}, +{661, 3218245284u, 1238873830u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{662, 3215981890u, 3240474694u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{663, 1266687209u, 3092038122u, 1266687209u, 0, FLOORF_TOLERANCE, 0}, +{664, 3487959775u, 3331372071u, 3487959775u, 0, FLOORF_TOLERANCE, 0}, +{665, 943645710u, 852875779u, 0u, 0, FLOORF_TOLERANCE, 0}, +{666, 3345065699u, 3282620725u, 3345065728u, 0, FLOORF_TOLERANCE, 0}, +{667, 935847271u, 1067255804u, 0u, 0, FLOORF_TOLERANCE, 0}, +{668, 3410336089u, 1111437780u, 3410336089u, 0, FLOORF_TOLERANCE, 0}, +{669, 3082940740u, 1336840432u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{670, 1141063391u, 1168908072u, 1141047296u, 0, FLOORF_TOLERANCE, 0}, +{671, 3059263153u, 3067795684u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{672, 3353679791u, 897158391u, 3353679872u, 0, FLOORF_TOLERANCE, 0}, +{673, 1001823878u, 1016826861u, 0u, 0, FLOORF_TOLERANCE, 0}, +{674, 1009130212u, 1004302940u, 0u, 0, FLOORF_TOLERANCE, 0}, +{675, 3367127535u, 943136342u, 3367127552u, 0, FLOORF_TOLERANCE, 0}, +{676, 1032920919u, 3449126417u, 0u, 0, FLOORF_TOLERANCE, 0}, +{677, 3281952870u, 3147012185u, 3281977344u, 0, FLOORF_TOLERANCE, 0}, +{678, 1237868497u, 3048281802u, 1237868496u, 0, FLOORF_TOLERANCE, 0}, +{679, 1153753924u, 3322269242u, 1153753088u, 0, FLOORF_TOLERANCE, 0}, +{680, 1120261759u, 892210998u, 1120141312u, 0, FLOORF_TOLERANCE, 0}, +{681, 3226328360u, 3366432856u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{682, 3349595986u, 3251588707u, 3349596032u, 0, FLOORF_TOLERANCE, 0}, +{683, 3166889490u, 3306023523u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{684, 1087750238u, 1099325523u, 1086324736u, 0, FLOORF_TOLERANCE, 0}, +{685, 3121620061u, 3359488363u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{686, 1066116543u, 3072159933u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{687, 3210898034u, 2981803389u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{688, 3051923237u, 3364074347u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{689, 1030612298u, 3345396001u, 0u, 0, FLOORF_TOLERANCE, 0}, +{690, 1186234578u, 858134374u, 1186234368u, 0, FLOORF_TOLERANCE, 0}, +{691, 1331680743u, 1009396165u, 1331680743u, 0, FLOORF_TOLERANCE, 0}, +{692, 3060774997u, 1326067357u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{693, 887589411u, 1292305693u, 0u, 0, FLOORF_TOLERANCE, 0}, +{694, 1045232522u, 3234993273u, 0u, 0, FLOORF_TOLERANCE, 0}, +{695, 3119858470u, 962515365u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{696, 3349432725u, 928848003u, 3349432832u, 0, FLOORF_TOLERANCE, 0}, +{697, 912423027u, 3184646319u, 0u, 0, FLOORF_TOLERANCE, 0}, +{698, 3228795133u, 3273940030u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{699, 3194674746u, 3112269709u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{700, 3296784303u, 3276182352u, 3296788480u, 0, FLOORF_TOLERANCE, 0}, +{701, 965402291u, 3107104376u, 0u, 0, FLOORF_TOLERANCE, 0}, +{702, 3388153589u, 3426245389u, 3388153592u, 0, FLOORF_TOLERANCE, 0}, +{703, 1133410485u, 3329658993u, 1133379584u, 0, FLOORF_TOLERANCE, 0}, +{704, 3136790322u, 1088652637u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{705, 3369970587u, 959121458u, 3369970592u, 0, FLOORF_TOLERANCE, 0}, +{706, 1270451568u, 928393353u, 1270451568u, 0, FLOORF_TOLERANCE, 0}, +{707, 989498922u, 3088358419u, 0u, 0, FLOORF_TOLERANCE, 0}, +{708, 1280215674u, 3148135875u, 1280215674u, 0, FLOORF_TOLERANCE, 0}, +{709, 1171873518u, 954709738u, 1171871744u, 0, FLOORF_TOLERANCE, 0}, +{710, 3298258100u, 935525182u, 3298263040u, 0, FLOORF_TOLERANCE, 0}, +{711, 3415208824u, 822843236u, 3415208824u, 0, FLOORF_TOLERANCE, 0}, +{712, 1001897182u, 3191875320u, 0u, 0, FLOORF_TOLERANCE, 0}, +{713, 3152777939u, 3245830463u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{714, 985903305u, 3333087577u, 0u, 0, FLOORF_TOLERANCE, 0}, +{715, 3357328848u, 859306298u, 3357328896u, 0, FLOORF_TOLERANCE, 0}, +{716, 982612185u, 923582663u, 0u, 0, FLOORF_TOLERANCE, 0}, +{717, 3267868136u, 1208301947u, 3267887104u, 0, FLOORF_TOLERANCE, 0}, +{718, 3319048157u, 1172271145u, 3319048192u, 0, FLOORF_TOLERANCE, 0}, +{719, 1144755661u, 860947435u, 1144750080u, 0, FLOORF_TOLERANCE, 0}, +{720, 898467286u, 839254959u, 0u, 0, FLOORF_TOLERANCE, 0}, +{721, 3301461672u, 1233693827u, 3301466112u, 0, FLOORF_TOLERANCE, 0}, +{722, 3364525678u, 3089849671u, 3364525696u, 0, FLOORF_TOLERANCE, 0}, +{723, 931441127u, 1133424555u, 0u, 0, FLOORF_TOLERANCE, 0}, +{724, 3146660041u, 3143695961u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{725, 3467121799u, 3023584354u, 3467121799u, 0, FLOORF_TOLERANCE, 0}, +{726, 1151257041u, 3084216427u, 1151254528u, 0, FLOORF_TOLERANCE, 0}, +{727, 3097873255u, 3219266640u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{728, 3130670309u, 3192399254u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{729, 1017573824u, 3130901062u, 0u, 0, FLOORF_TOLERANCE, 0}, +{730, 1258369714u, 3462258576u, 1258369713u, 0, FLOORF_TOLERANCE, 0}, +{731, 1216602683u, 3371396332u, 1216602656u, 0, FLOORF_TOLERANCE, 0}, +{732, 3297265739u, 1214184410u, 3297271808u, 0, FLOORF_TOLERANCE, 0}, +{733, 1071940738u, 3311731012u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{734, 922601356u, 3337171870u, 0u, 0, FLOORF_TOLERANCE, 0}, +{735, 3462285635u, 3444030332u, 3462285635u, 0, FLOORF_TOLERANCE, 0}, +{736, 3357177805u, 1085464241u, 3357177856u, 0, FLOORF_TOLERANCE, 0}, +{737, 3049120080u, 900832851u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{738, 1153863660u, 1011991342u, 1153859584u, 0, FLOORF_TOLERANCE, 0}, +{739, 3034243695u, 917098003u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{740, 1249365132u, 3278686216u, 1249365128u, 0, FLOORF_TOLERANCE, 0}, +{741, 3046215730u, 3211219980u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{742, 3047251716u, 1090787353u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{743, 3131219358u, 3471261157u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{744, 3222096285u, 1198013705u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{745, 1297708818u, 3079166173u, 1297708818u, 0, FLOORF_TOLERANCE, 0}, +{746, 3345532722u, 3383708463u, 3345532928u, 0, FLOORF_TOLERANCE, 0}, +{747, 3418753236u, 3481843070u, 3418753236u, 0, FLOORF_TOLERANCE, 0}, +{748, 1277417964u, 3487506626u, 1277417964u, 0, FLOORF_TOLERANCE, 0}, +{749, 987577257u, 1152077087u, 0u, 0, FLOORF_TOLERANCE, 0}, +{750, 3161606610u, 3190282989u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{751, 888030585u, 3062367380u, 0u, 0, FLOORF_TOLERANCE, 0}, +{752, 1043442869u, 3311393817u, 0u, 0, FLOORF_TOLERANCE, 0}, +{753, 3320923228u, 3464544249u, 3320924160u, 0, FLOORF_TOLERANCE, 0}, +{754, 1337400405u, 3488844154u, 1337400405u, 0, FLOORF_TOLERANCE, 0}, +{755, 3400348640u, 3129868490u, 3400348642u, 0, FLOORF_TOLERANCE, 0}, +{756, 1250249095u, 1069023744u, 1250249094u, 0, FLOORF_TOLERANCE, 0}, +{757, 3284411233u, 1173613526u, 3284434944u, 0, FLOORF_TOLERANCE, 0}, +{758, 3020883322u, 2953622587u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{759, 1215968622u, 3469884568u, 1215968576u, 0, FLOORF_TOLERANCE, 0}, +{760, 3202319550u, 819117302u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{761, 3061638260u, 3116222327u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{762, 1025404104u, 1066370251u, 0u, 0, FLOORF_TOLERANCE, 0}, +{763, 3138086437u, 3195983510u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{764, 3091024506u, 3456196859u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{765, 3362748242u, 3369843597u, 3362748288u, 0, FLOORF_TOLERANCE, 0}, +{766, 3099671635u, 3218383623u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{767, 3068014841u, 2978226656u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{768, 1252237719u, 1121169249u, 1252237718u, 0, FLOORF_TOLERANCE, 0}, +{769, 3327895594u, 1224511805u, 3327896576u, 0, FLOORF_TOLERANCE, 0}, +{770, 3082454432u, 889268276u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{771, 3396161504u, 1182798837u, 3396161504u, 0, FLOORF_TOLERANCE, 0}, +{772, 1099710167u, 887180181u, 1099431936u, 0, FLOORF_TOLERANCE, 0}, +{773, 1157186482u, 1288722647u, 1157185536u, 0, FLOORF_TOLERANCE, 0}, +{774, 1282110851u, 3176633124u, 1282110851u, 0, FLOORF_TOLERANCE, 0}, +{775, 3477008113u, 1331845018u, 3477008113u, 0, FLOORF_TOLERANCE, 0}, +{776, 3292127294u, 3409957764u, 3292135424u, 0, FLOORF_TOLERANCE, 0}, +{777, 1123357102u, 3281307320u, 1123287040u, 0, FLOORF_TOLERANCE, 0}, +{778, 1106837025u, 3088080674u, 1106771968u, 0, FLOORF_TOLERANCE, 0}, +{779, 1049949008u, 1130799489u, 0u, 0, FLOORF_TOLERANCE, 0}, +{780, 1253017688u, 942062372u, 1253017688u, 0, FLOORF_TOLERANCE, 0}, +{781, 1108543194u, 3281299199u, 1108344832u, 0, FLOORF_TOLERANCE, 0}, +{782, 3087985411u, 1238341456u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{783, 3163283126u, 1328636961u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{784, 1160162706u, 1264067367u, 1160159232u, 0, FLOORF_TOLERANCE, 0}, +{785, 3305715025u, 3017496063u, 3305717760u, 0, FLOORF_TOLERANCE, 0}, +{786, 1266928623u, 811778614u, 1266928623u, 0, FLOORF_TOLERANCE, 0}, +{787, 3025340297u, 1193925540u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{788, 3438080027u, 3107114149u, 3438080027u, 0, FLOORF_TOLERANCE, 0}, +{789, 3344574751u, 3111270744u, 3344574976u, 0, FLOORF_TOLERANCE, 0}, +{790, 1152416724u, 962669179u, 1152409600u, 0, FLOORF_TOLERANCE, 0}, +{791, 1218239308u, 1126238113u, 1218239296u, 0, FLOORF_TOLERANCE, 0}, +{792, 3263310567u, 1030748197u, 3263430656u, 0, FLOORF_TOLERANCE, 0}, +{793, 3041998669u, 1160635263u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{794, 1000313118u, 2980130729u, 0u, 0, FLOORF_TOLERANCE, 0}, +{795, 972485427u, 1124312043u, 0u, 0, FLOORF_TOLERANCE, 0}, +{796, 3290264612u, 1124703898u, 3290267648u, 0, FLOORF_TOLERANCE, 0}, +{797, 3222106584u, 1183748648u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{798, 1278946388u, 825129857u, 1278946388u, 0, FLOORF_TOLERANCE, 0}, +{799, 947914771u, 3181847068u, 0u, 0, FLOORF_TOLERANCE, 0}, +{800, 3167730654u, 3195765940u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{801, 1098530298u, 3255870890u, 1097859072u, 0, FLOORF_TOLERANCE, 0}, +{802, 3232726036u, 871038882u, 3233808384u, 0, FLOORF_TOLERANCE, 0}, +{803, 1297190916u, 811863044u, 1297190916u, 0, FLOORF_TOLERANCE, 0}, +{804, 1277649137u, 961171401u, 1277649137u, 0, FLOORF_TOLERANCE, 0}, +{805, 3203377685u, 1306427476u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{806, 3090306474u, 3124785016u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{807, 3244032016u, 3045313345u, 3244294144u, 0, FLOORF_TOLERANCE, 0}, +{808, 3033122376u, 3049877065u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{809, 1096155623u, 1256423752u, 1095761920u, 0, FLOORF_TOLERANCE, 0}, +{810, 873151908u, 3246562559u, 0u, 0, FLOORF_TOLERANCE, 0}, +{811, 3238729605u, 1298769842u, 3239051264u, 0, FLOORF_TOLERANCE, 0}, +{812, 3317196817u, 989537151u, 3317198848u, 0, FLOORF_TOLERANCE, 0}, +{813, 3374748510u, 834161190u, 3374748512u, 0, FLOORF_TOLERANCE, 0}, +{814, 3345634950u, 959901149u, 3345635072u, 0, FLOORF_TOLERANCE, 0}, +{815, 3189860276u, 883598767u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{816, 887311687u, 1175312255u, 0u, 0, FLOORF_TOLERANCE, 0}, +{817, 3396917283u, 3066326686u, 3396917284u, 0, FLOORF_TOLERANCE, 0}, +{818, 3317032737u, 3143803722u, 3317032960u, 0, FLOORF_TOLERANCE, 0}, +{819, 1200051436u, 1163802508u, 1200051328u, 0, FLOORF_TOLERANCE, 0}, +{820, 3105291012u, 1194385202u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{821, 1306520561u, 957302464u, 1306520561u, 0, FLOORF_TOLERANCE, 0}, +{822, 1314936356u, 2985592532u, 1314936356u, 0, FLOORF_TOLERANCE, 0}, +{823, 3475052219u, 1284049853u, 3475052219u, 0, FLOORF_TOLERANCE, 0}, +{824, 3085636260u, 1107682820u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{825, 3393227708u, 3271879112u, 3393227712u, 0, FLOORF_TOLERANCE, 0}, +{826, 3182540197u, 852580839u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{827, 3349005404u, 3080993030u, 3349005440u, 0, FLOORF_TOLERANCE, 0}, +{828, 3154720153u, 3443720494u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{829, 1262863321u, 1219003129u, 1262863321u, 0, FLOORF_TOLERANCE, 0}, +{830, 882902102u, 1224362550u, 0u, 0, FLOORF_TOLERANCE, 0}, +{831, 1053387478u, 3184880021u, 0u, 0, FLOORF_TOLERANCE, 0}, +{832, 3387653691u, 3347783852u, 3387653696u, 0, FLOORF_TOLERANCE, 0}, +{833, 3136364836u, 1018492227u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{834, 1338680611u, 1166078045u, 1338680611u, 0, FLOORF_TOLERANCE, 0}, +{835, 1112891928u, 3074730425u, 1112801280u, 0, FLOORF_TOLERANCE, 0}, +{836, 893449284u, 1052877339u, 0u, 0, FLOORF_TOLERANCE, 0}, +{837, 892311459u, 1097338393u, 0u, 0, FLOORF_TOLERANCE, 0}, +{838, 3105373037u, 3246705916u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{839, 1190105283u, 3033907262u, 1190105088u, 0, FLOORF_TOLERANCE, 0}, +{840, 1011225926u, 1180485180u, 0u, 0, FLOORF_TOLERANCE, 0}, +{841, 1043025031u, 987068973u, 0u, 0, FLOORF_TOLERANCE, 0}, +{842, 3410531037u, 2953541915u, 3410531038u, 0, FLOORF_TOLERANCE, 0}, +{843, 3125834184u, 896953754u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{844, 902318189u, 849277289u, 0u, 0, FLOORF_TOLERANCE, 0}, +{845, 3213624815u, 2987148017u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{846, 1120888322u, 1086209113u, 1120796672u, 0, FLOORF_TOLERANCE, 0}, +{847, 1315217243u, 3396371713u, 1315217243u, 0, FLOORF_TOLERANCE, 0}, +{848, 3137758475u, 1039403054u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{849, 1040617590u, 1034835971u, 0u, 0, FLOORF_TOLERANCE, 0}, +{850, 955384253u, 3344785562u, 0u, 0, FLOORF_TOLERANCE, 0}, +{851, 3061417900u, 1172208065u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{852, 904255535u, 1019967545u, 0u, 0, FLOORF_TOLERANCE, 0}, +{853, 1022984119u, 3113891410u, 0u, 0, FLOORF_TOLERANCE, 0}, +{854, 997362368u, 3112875428u, 0u, 0, FLOORF_TOLERANCE, 0}, +{855, 900933520u, 1100589187u, 0u, 0, FLOORF_TOLERANCE, 0}, +{856, 1168623062u, 1143306482u, 1168621568u, 0, FLOORF_TOLERANCE, 0}, +{857, 878737490u, 3269908326u, 0u, 0, FLOORF_TOLERANCE, 0}, +{858, 1039827284u, 1072928888u, 0u, 0, FLOORF_TOLERANCE, 0}, +{859, 1021564080u, 1064468397u, 0u, 0, FLOORF_TOLERANCE, 0}, +{860, 3458669745u, 3033299853u, 3458669745u, 0, FLOORF_TOLERANCE, 0}, +{861, 3327516316u, 3405380971u, 3327516672u, 0, FLOORF_TOLERANCE, 0}, +{862, 1040711112u, 3229444200u, 0u, 0, FLOORF_TOLERANCE, 0}, +{863, 1134528351u, 3365952513u, 1134526464u, 0, FLOORF_TOLERANCE, 0}, +{864, 3039884464u, 1170612785u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{865, 3414352838u, 3350285760u, 3414352838u, 0, FLOORF_TOLERANCE, 0}, +{866, 1133689539u, 1067460093u, 1133674496u, 0, FLOORF_TOLERANCE, 0}, +{867, 3455688478u, 3333091960u, 3455688478u, 0, FLOORF_TOLERANCE, 0}, +{868, 1137634874u, 1137038869u, 1137606656u, 0, FLOORF_TOLERANCE, 0}, +{869, 3415502662u, 955510692u, 3415502662u, 0, FLOORF_TOLERANCE, 0}, +{870, 954999730u, 969618597u, 0u, 0, FLOORF_TOLERANCE, 0}, +{871, 1066157309u, 3241712664u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{872, 3436353675u, 1174967495u, 3436353675u, 0, FLOORF_TOLERANCE, 0}, +{873, 940437609u, 860372396u, 0u, 0, FLOORF_TOLERANCE, 0}, +{874, 3108347547u, 3434003435u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{875, 3064200154u, 3158080507u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{876, 1023889593u, 2979304683u, 0u, 0, FLOORF_TOLERANCE, 0}, +{877, 3272661536u, 3461799138u, 3272671232u, 0, FLOORF_TOLERANCE, 0}, +{878, 1170245333u, 1233406410u, 1170243584u, 0, FLOORF_TOLERANCE, 0}, +{879, 1219052056u, 3369557946u, 1219052032u, 0, FLOORF_TOLERANCE, 0}, +{880, 3318983619u, 3259663338u, 3318984704u, 0, FLOORF_TOLERANCE, 0}, +{881, 3372118621u, 837597103u, 3372118624u, 0, FLOORF_TOLERANCE, 0}, +{882, 3146190320u, 889646054u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{883, 1299683827u, 966031619u, 1299683827u, 0, FLOORF_TOLERANCE, 0}, +{884, 3190796331u, 1320011850u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{885, 3086068902u, 3484245751u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{886, 3064155399u, 3176569312u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{887, 3040314717u, 1071290674u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{888, 3257224022u, 3361778245u, 3257401344u, 0, FLOORF_TOLERANCE, 0}, +{889, 1229268598u, 1066965677u, 1229268592u, 0, FLOORF_TOLERANCE, 0}, +{890, 3184078812u, 871003709u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{891, 1086717248u, 3423795374u, 1086324736u, 0, FLOORF_TOLERANCE, 0}, +{892, 3434884607u, 3029593823u, 3434884607u, 0, FLOORF_TOLERANCE, 0}, +{893, 3464955606u, 1017987696u, 3464955606u, 0, FLOORF_TOLERANCE, 0}, +{894, 1025278524u, 3121856207u, 0u, 0, FLOORF_TOLERANCE, 0}, +{895, 1242829722u, 3233935671u, 1242829720u, 0, FLOORF_TOLERANCE, 0}, +{896, 3075149137u, 1117325737u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{897, 1200927971u, 1317167489u, 1200927872u, 0, FLOORF_TOLERANCE, 0}, +{898, 3326858092u, 3452602832u, 3326858240u, 0, FLOORF_TOLERANCE, 0}, +{899, 1246019790u, 850632217u, 1246019788u, 0, FLOORF_TOLERANCE, 0}, +{900, 3184801644u, 1137974313u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{901, 1136052740u, 3244616020u, 1136033792u, 0, FLOORF_TOLERANCE, 0}, +{902, 1069009211u, 3002507482u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{903, 1015670780u, 1101217251u, 0u, 0, FLOORF_TOLERANCE, 0}, +{904, 1012543234u, 1116520440u, 0u, 0, FLOORF_TOLERANCE, 0}, +{905, 3316611992u, 3394732912u, 3316613120u, 0, FLOORF_TOLERANCE, 0}, +{906, 1087942795u, 3316660295u, 1086324736u, 0, FLOORF_TOLERANCE, 0}, +{907, 3426365713u, 3069778532u, 3426365713u, 0, FLOORF_TOLERANCE, 0}, +{908, 3066654389u, 3443934204u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{909, 3295326432u, 1313396175u, 3295330304u, 0, FLOORF_TOLERANCE, 0}, +{910, 3318835308u, 3277583511u, 3318837248u, 0, FLOORF_TOLERANCE, 0}, +{911, 3283555717u, 891875120u, 3283582976u, 0, FLOORF_TOLERANCE, 0}, +{912, 3381255420u, 3015406047u, 3381255424u, 0, FLOORF_TOLERANCE, 0}, +{913, 3040485181u, 3375450886u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{914, 3388772093u, 1032597076u, 3388772096u, 0, FLOORF_TOLERANCE, 0}, +{915, 954670189u, 1144923689u, 0u, 0, FLOORF_TOLERANCE, 0}, +{916, 1319200415u, 3387555900u, 1319200415u, 0, FLOORF_TOLERANCE, 0}, +{917, 1279324488u, 3228401212u, 1279324488u, 0, FLOORF_TOLERANCE, 0}, +{918, 3217795424u, 865577227u, 3221225472u, 0, FLOORF_TOLERANCE, 0}, +{919, 3455131757u, 1260217257u, 3455131757u, 0, FLOORF_TOLERANCE, 0}, +{920, 1246947517u, 1087951909u, 1246947516u, 0, FLOORF_TOLERANCE, 0}, +{921, 3396723577u, 869285240u, 3396723580u, 0, FLOORF_TOLERANCE, 0}, +{922, 3433761025u, 3060143904u, 3433761025u, 0, FLOORF_TOLERANCE, 0}, +{923, 3201187455u, 900233172u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{924, 1173247961u, 1191127979u, 1173245952u, 0, FLOORF_TOLERANCE, 0}, +{925, 3037297123u, 3346394818u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{926, 3248534678u, 1323683800u, 3249012736u, 0, FLOORF_TOLERANCE, 0}, +{927, 3083019343u, 3033309444u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{928, 3042018375u, 3203882372u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{929, 1082862511u, 3032804719u, 1082130432u, 0, FLOORF_TOLERANCE, 0}, +{930, 3157626955u, 3483653298u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{931, 1341821683u, 3003675365u, 1341821683u, 0, FLOORF_TOLERANCE, 0}, +{932, 881101379u, 1190838126u, 0u, 0, FLOORF_TOLERANCE, 0}, +{933, 1079061705u, 2960507663u, 1077936128u, 0, FLOORF_TOLERANCE, 0}, +{934, 3182695954u, 3256861672u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{935, 1105291533u, 3482971524u, 1105199104u, 0, FLOORF_TOLERANCE, 0}, +{936, 1016023520u, 3227712090u, 0u, 0, FLOORF_TOLERANCE, 0}, +{937, 3370691006u, 1295870514u, 3370691008u, 0, FLOORF_TOLERANCE, 0}, +{938, 1156767169u, 1049756240u, 1156759552u, 0, FLOORF_TOLERANCE, 0}, +{939, 3077020499u, 894671462u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{940, 1104284039u, 3040211914u, 1104150528u, 0, FLOORF_TOLERANCE, 0}, +{941, 3335212901u, 3486414589u, 3335213056u, 0, FLOORF_TOLERANCE, 0}, +{942, 1093697541u, 3193708441u, 1093664768u, 0, FLOORF_TOLERANCE, 0}, +{943, 3266691185u, 1160074593u, 3266707456u, 0, FLOORF_TOLERANCE, 0}, +{944, 3179003144u, 1108615803u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{945, 1094115255u, 3008610212u, 1093664768u, 0, FLOORF_TOLERANCE, 0}, +{946, 3424086808u, 3260140004u, 3424086808u, 0, FLOORF_TOLERANCE, 0}, +{947, 3353608773u, 1134068114u, 3353608832u, 0, FLOORF_TOLERANCE, 0}, +{948, 973664327u, 1319516167u, 0u, 0, FLOORF_TOLERANCE, 0}, +{949, 882878091u, 3136970767u, 0u, 0, FLOORF_TOLERANCE, 0}, +{950, 1098662266u, 833740182u, 1097859072u, 0, FLOORF_TOLERANCE, 0}, +{951, 927582555u, 947955456u, 0u, 0, FLOORF_TOLERANCE, 0}, +{952, 3111440310u, 3067634077u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{953, 3476083859u, 966439623u, 3476083859u, 0, FLOORF_TOLERANCE, 0}, +{954, 3038754840u, 932009686u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{955, 979878744u, 1232482646u, 0u, 0, FLOORF_TOLERANCE, 0}, +{956, 3464546616u, 3205527253u, 3464546616u, 0, FLOORF_TOLERANCE, 0}, +{957, 1002542205u, 3152136093u, 0u, 0, FLOORF_TOLERANCE, 0}, +{958, 3443552129u, 3165561391u, 3443552129u, 0, FLOORF_TOLERANCE, 0}, +{959, 1287620154u, 3119707283u, 1287620154u, 0, FLOORF_TOLERANCE, 0}, +{960, 946058434u, 1249928879u, 0u, 0, FLOORF_TOLERANCE, 0}, +{961, 3073260205u, 3093124531u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{962, 1245702957u, 894348966u, 1245702956u, 0, FLOORF_TOLERANCE, 0}, +{963, 989655126u, 1308376568u, 0u, 0, FLOORF_TOLERANCE, 0}, +{964, 1002715618u, 1191006977u, 0u, 0, FLOORF_TOLERANCE, 0}, +{965, 3087802274u, 897541752u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{966, 1000863905u, 1196831314u, 0u, 0, FLOORF_TOLERANCE, 0}, +{967, 3415763001u, 3032518431u, 3415763002u, 0, FLOORF_TOLERANCE, 0}, +{968, 3283471961u, 1260093226u, 3283484672u, 0, FLOORF_TOLERANCE, 0}, +{969, 3311210827u, 1192192264u, 3311214592u, 0, FLOORF_TOLERANCE, 0}, +{970, 3026311911u, 2968974374u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{971, 1198307901u, 1116328249u, 1198307840u, 0, FLOORF_TOLERANCE, 0}, +{972, 1288901567u, 1296370667u, 1288901567u, 0, FLOORF_TOLERANCE, 0}, +{973, 922255363u, 958305289u, 0u, 0, FLOORF_TOLERANCE, 0}, +{974, 1113104661u, 944376032u, 1113063424u, 0, FLOORF_TOLERANCE, 0}, +{975, 1136714348u, 828849087u, 1136689152u, 0, FLOORF_TOLERANCE, 0}, +{976, 948856035u, 1015466475u, 0u, 0, FLOORF_TOLERANCE, 0}, +{977, 1062512367u, 3229559531u, 0u, 0, FLOORF_TOLERANCE, 0}, +{978, 3486907092u, 823220784u, 3486907092u, 0, FLOORF_TOLERANCE, 0}, +{979, 1162027071u, 3308983387u, 1162027008u, 0, FLOORF_TOLERANCE, 0}, +{980, 1034561811u, 1054043114u, 0u, 0, FLOORF_TOLERANCE, 0}, +{981, 3271615417u, 3209997200u, 3271622656u, 0, FLOORF_TOLERANCE, 0}, +{982, 1042014529u, 1146708584u, 0u, 0, FLOORF_TOLERANCE, 0}, +{983, 1177157787u, 3090208179u, 1177157632u, 0, FLOORF_TOLERANCE, 0}, +{984, 3196144817u, 1056118717u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{985, 3432084552u, 2997091781u, 3432084552u, 0, FLOORF_TOLERANCE, 0}, +{986, 1309658335u, 1010219988u, 1309658335u, 0, FLOORF_TOLERANCE, 0}, +{987, 1226494979u, 2991604792u, 1226494976u, 0, FLOORF_TOLERANCE, 0}, +{988, 3100289712u, 3456334210u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{989, 3375507013u, 1306310823u, 3375507024u, 0, FLOORF_TOLERANCE, 0}, +{990, 3460699001u, 3096700943u, 3460699001u, 0, FLOORF_TOLERANCE, 0}, +{991, 3079231719u, 1044386263u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{992, 3093951884u, 1014115231u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{993, 3468023178u, 1209565017u, 3468023178u, 0, FLOORF_TOLERANCE, 0}, +{994, 1204196034u, 3298625731u, 1204195968u, 0, FLOORF_TOLERANCE, 0}, +{995, 3459877411u, 2960476959u, 3459877411u, 0, FLOORF_TOLERANCE, 0}, +{996, 909696559u, 1163075690u, 0u, 0, FLOORF_TOLERANCE, 0}, +{997, 1161439847u, 943449277u, 1161437184u, 0, FLOORF_TOLERANCE, 0}, +{998, 908663107u, 939489763u, 0u, 0, FLOORF_TOLERANCE, 0}, +{999, 1055319316u, 3261813492u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1000, 1084378658u, 1009650785u, 1084227584u, 0, FLOORF_TOLERANCE, 0}, +{1001, 3053887750u, 3341786453u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1002, 3022828828u, 881335251u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1003, 1226473697u, 821025132u, 1226473696u, 0, FLOORF_TOLERANCE, 0}, +{1004, 1123114742u, 1229815537u, 1123024896u, 0, FLOORF_TOLERANCE, 0}, +{1005, 1258114435u, 1291336083u, 1258114434u, 0, FLOORF_TOLERANCE, 0}, +{1006, 3468040845u, 3066966245u, 3468040845u, 0, FLOORF_TOLERANCE, 0}, +{1007, 1178825761u, 1113195286u, 1178825728u, 0, FLOORF_TOLERANCE, 0}, +{1008, 3059266302u, 878503862u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1009, 3223384012u, 1130486973u, 3225419776u, 0, FLOORF_TOLERANCE, 0}, +{1010, 1019964626u, 1235133609u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1011, 3445262427u, 3465211174u, 3445262427u, 0, FLOORF_TOLERANCE, 0}, +{1012, 1125653081u, 1207799746u, 1125646336u, 0, FLOORF_TOLERANCE, 0}, +{1013, 3337652712u, 3025581813u, 3337652736u, 0, FLOORF_TOLERANCE, 0}, +{1014, 1184753508u, 3147374485u, 1184753152u, 0, FLOORF_TOLERANCE, 0}, +{1015, 996404791u, 3353251979u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1016, 1188439315u, 1113484271u, 1188439040u, 0, FLOORF_TOLERANCE, 0}, +{1017, 906557513u, 3006513432u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1018, 916831283u, 999465787u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1019, 996786317u, 3179221951u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1020, 3461635065u, 1004690387u, 3461635065u, 0, FLOORF_TOLERANCE, 0}, +{1021, 1188167943u, 1200744896u, 1188167680u, 0, FLOORF_TOLERANCE, 0}, +{1022, 3036502395u, 1172597364u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1023, 891257783u, 1267560050u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1024, 3290079438u, 846519377u, 3290087424u, 0, FLOORF_TOLERANCE, 0}, +{1025, 3350690327u, 2967953392u, 3350690432u, 0, FLOORF_TOLERANCE, 0}, +{1026, 1102061604u, 3424449935u, 1102053376u, 0, FLOORF_TOLERANCE, 0}, +{1027, 1282351521u, 3039376424u, 1282351521u, 0, FLOORF_TOLERANCE, 0}, +{1028, 3458861065u, 3392466405u, 3458861065u, 0, FLOORF_TOLERANCE, 0}, +{1029, 3095256878u, 1023623326u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1030, 3163373610u, 843150426u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1031, 3228793330u, 855146890u, 3229614080u, 0, FLOORF_TOLERANCE, 0}, +{1032, 3422194733u, 893873945u, 3422194733u, 0, FLOORF_TOLERANCE, 0}, +{1033, 3083885296u, 974543672u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1034, 1261940623u, 3402349985u, 1261940622u, 0, FLOORF_TOLERANCE, 0}, +{1035, 3400603081u, 3234396843u, 3400603082u, 0, FLOORF_TOLERANCE, 0}, +{1036, 1219411812u, 2961857939u, 1219411808u, 0, FLOORF_TOLERANCE, 0}, +{1037, 3094833770u, 805351108u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1038, 3139250800u, 3079109479u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1039, 886201503u, 3272760705u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1040, 3297366026u, 1089966380u, 3297370112u, 0, FLOORF_TOLERANCE, 0}, +{1041, 1218488455u, 3309646450u, 1218488448u, 0, FLOORF_TOLERANCE, 0}, +{1042, 3040358923u, 3093401553u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1043, 1283938137u, 1196383822u, 1283938137u, 0, FLOORF_TOLERANCE, 0}, +{1044, 3182551696u, 3029982441u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1045, 1317098613u, 949986176u, 1317098613u, 0, FLOORF_TOLERANCE, 0}, +{1046, 3116209179u, 3303588342u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1047, 3431703657u, 3014443710u, 3431703657u, 0, FLOORF_TOLERANCE, 0}, +{1048, 3239728775u, 927815421u, 3240099840u, 0, FLOORF_TOLERANCE, 0}, +{1049, 3207141672u, 933456504u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1050, 3154378805u, 905462392u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1051, 3069658155u, 1041452042u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1052, 3313160088u, 2964063309u, 3313160192u, 0, FLOORF_TOLERANCE, 0}, +{1053, 3207056527u, 3384206601u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1054, 1284174954u, 3436881197u, 1284174954u, 0, FLOORF_TOLERANCE, 0}, +{1055, 3156081645u, 3308839704u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1056, 1063693032u, 976661408u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1057, 3036026175u, 1251203998u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1058, 1102631663u, 3396951425u, 1102577664u, 0, FLOORF_TOLERANCE, 0}, +{1059, 968803479u, 992989712u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1060, 3273080388u, 3109405906u, 3273129984u, 0, FLOORF_TOLERANCE, 0}, +{1061, 1172529774u, 3294550127u, 1172529152u, 0, FLOORF_TOLERANCE, 0}, +{1062, 1306695905u, 1292690378u, 1306695905u, 0, FLOORF_TOLERANCE, 0}, +{1063, 1003649752u, 1218792138u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1064, 1078478376u, 1326246424u, 1077936128u, 0, FLOORF_TOLERANCE, 0}, +{1065, 3158855023u, 3151283866u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1066, 1165177679u, 3276237026u, 1165176832u, 0, FLOORF_TOLERANCE, 0}, +{1067, 3403009513u, 3381966453u, 3403009514u, 0, FLOORF_TOLERANCE, 0}, +{1068, 952348506u, 3377573987u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1069, 1222777442u, 1125769920u, 1222777440u, 0, FLOORF_TOLERANCE, 0}, +{1070, 1325324763u, 978336043u, 1325324763u, 0, FLOORF_TOLERANCE, 0}, +{1071, 3363524213u, 3202991311u, 3363524224u, 0, FLOORF_TOLERANCE, 0}, +{1072, 1158950321u, 1073578913u, 1158946816u, 0, FLOORF_TOLERANCE, 0}, +{1073, 903129873u, 3416864271u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1074, 3078339944u, 988173985u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1075, 1208345407u, 1254181270u, 1208345344u, 0, FLOORF_TOLERANCE, 0}, +{1076, 1258634105u, 1247426200u, 1258634104u, 0, FLOORF_TOLERANCE, 0}, +{1077, 1248478509u, 1287895126u, 1248478508u, 0, FLOORF_TOLERANCE, 0}, +{1078, 1153863988u, 3430539165u, 1153859584u, 0, FLOORF_TOLERANCE, 0}, +{1079, 1235620969u, 866627358u, 1235620968u, 0, FLOORF_TOLERANCE, 0}, +{1080, 1097120930u, 3221726305u, 1096810496u, 0, FLOORF_TOLERANCE, 0}, +{1081, 3469778622u, 1200179013u, 3469778622u, 0, FLOORF_TOLERANCE, 0}, +{1082, 1147712200u, 931865525u, 1147699200u, 0, FLOORF_TOLERANCE, 0}, +{1083, 1124721745u, 3058969650u, 1124663296u, 0, FLOORF_TOLERANCE, 0}, +{1084, 3261744304u, 1043806501u, 3261857792u, 0, FLOORF_TOLERANCE, 0}, +{1085, 1064922416u, 1320485628u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1086, 3303160152u, 3075455322u, 3303161856u, 0, FLOORF_TOLERANCE, 0}, +{1087, 1315090496u, 3269683237u, 1315090496u, 0, FLOORF_TOLERANCE, 0}, +{1088, 3230403187u, 1322841992u, 3231711232u, 0, FLOORF_TOLERANCE, 0}, +{1089, 1335399673u, 974138676u, 1335399673u, 0, FLOORF_TOLERANCE, 0}, +{1090, 1072458508u, 3372833993u, 1065353216u, 0, FLOORF_TOLERANCE, 0}, +{1091, 3303015249u, 3015039539u, 3303022592u, 0, FLOORF_TOLERANCE, 0}, +{1092, 3252139741u, 1059615003u, 3252158464u, 0, FLOORF_TOLERANCE, 0}, +{1093, 3468519966u, 3113982619u, 3468519966u, 0, FLOORF_TOLERANCE, 0}, +{1094, 1006231203u, 897530770u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1095, 951554138u, 1001144381u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1096, 942046828u, 986341002u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1097, 3319723279u, 3414482416u, 3319724032u, 0, FLOORF_TOLERANCE, 0}, +{1098, 3255104167u, 928827688u, 3255304192u, 0, FLOORF_TOLERANCE, 0}, +{1099, 1155477903u, 3104812800u, 1155473408u, 0, FLOORF_TOLERANCE, 0}, +{1100, 3273889176u, 980486479u, 3273916416u, 0, FLOORF_TOLERANCE, 0}, +{1101, 3237813668u, 3441016803u, 3238002688u, 0, FLOORF_TOLERANCE, 0}, +{1102, 1228207362u, 2985476579u, 1228207360u, 0, FLOORF_TOLERANCE, 0}, +{1103, 975349337u, 1311932596u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1104, 1290175785u, 3008182462u, 1290175785u, 0, FLOORF_TOLERANCE, 0}, +{1105, 981908840u, 3314038398u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1106, 941187647u, 1107765599u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1107, 1214223128u, 3225536822u, 1214223104u, 0, FLOORF_TOLERANCE, 0}, +{1108, 3422922584u, 1086391131u, 3422922584u, 0, FLOORF_TOLERANCE, 0}, +{1109, 1315857601u, 3487600045u, 1315857601u, 0, FLOORF_TOLERANCE, 0}, +{1110, 3453226030u, 3233768835u, 3453226030u, 0, FLOORF_TOLERANCE, 0}, +{1111, 1078359574u, 3199175230u, 1077936128u, 0, FLOORF_TOLERANCE, 0}, +{1112, 1029557624u, 3302959071u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1113, 1207675424u, 3042692550u, 1207675392u, 0, FLOORF_TOLERANCE, 0}, +{1114, 1028355074u, 3442294040u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1115, 3119299090u, 1187096397u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1116, 1248421894u, 3367769132u, 1248421892u, 0, FLOORF_TOLERANCE, 0}, +{1117, 3353251994u, 1095517730u, 3353252096u, 0, FLOORF_TOLERANCE, 0}, +{1118, 876926659u, 3288089977u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1119, 1076752219u, 876236939u, 1073741824u, 0, FLOORF_TOLERANCE, 0}, +{1120, 3388531942u, 2988520062u, 3388531944u, 0, FLOORF_TOLERANCE, 0}, +{1121, 1273395082u, 3031189261u, 1273395082u, 0, FLOORF_TOLERANCE, 0}, +{1122, 3385588183u, 3258252464u, 3385588184u, 0, FLOORF_TOLERANCE, 0}, +{1123, 3192315328u, 3289489214u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1124, 3441804648u, 3274638356u, 3441804648u, 0, FLOORF_TOLERANCE, 0}, +{1125, 3392827417u, 1277961150u, 3392827420u, 0, FLOORF_TOLERANCE, 0}, +{1126, 1161241793u, 1328003707u, 1161240576u, 0, FLOORF_TOLERANCE, 0}, +{1127, 3034494183u, 3041579130u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1128, 1171318485u, 3374409104u, 1171316736u, 0, FLOORF_TOLERANCE, 0}, +{1129, 3047748143u, 831102792u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1130, 1001216371u, 3052357038u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1131, 912515889u, 1074635609u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1132, 3391452505u, 897989232u, 3391452508u, 0, FLOORF_TOLERANCE, 0}, +{1133, 3249603369u, 3147662248u, 3250061312u, 0, FLOORF_TOLERANCE, 0}, +{1134, 1220264047u, 2960450369u, 1220264032u, 0, FLOORF_TOLERANCE, 0}, +{1135, 3169816394u, 988430929u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1136, 3098997418u, 3002162688u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1137, 3282212423u, 3174079140u, 3282239488u, 0, FLOORF_TOLERANCE, 0}, +{1138, 3352293320u, 3247843425u, 3352293376u, 0, FLOORF_TOLERANCE, 0}, +{1139, 3296358441u, 875645354u, 3296362496u, 0, FLOORF_TOLERANCE, 0}, +{1140, 1197828352u, 3245614728u, 1197828096u, 0, FLOORF_TOLERANCE, 0}, +{1141, 3340510371u, 914930263u, 3340510464u, 0, FLOORF_TOLERANCE, 0}, +{1142, 1127109339u, 3368125489u, 1127088128u, 0, FLOORF_TOLERANCE, 0}, +{1143, 909467381u, 1232375752u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1144, 1200599955u, 2981200675u, 1200599936u, 0, FLOORF_TOLERANCE, 0}, +{1145, 962230977u, 2988248037u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1146, 3192887808u, 3191848339u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1147, 3237183876u, 3179379969u, 3238002688u, 0, FLOORF_TOLERANCE, 0}, +{1148, 939285924u, 3056079386u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1149, 944050180u, 3452557879u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1150, 3058135703u, 3090284601u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1151, 3480592662u, 3261728191u, 3480592662u, 0, FLOORF_TOLERANCE, 0}, +{1152, 3061939312u, 3274418540u, 3212836864u, 0, FLOORF_TOLERANCE, 0}, +{1153, 1003299981u, 853295521u, 0u, 0, FLOORF_TOLERANCE, 0}, +{1154, 1155775526u, 1255814444u, 1155768320u, 0, FLOORF_TOLERANCE, 0}, +{1155, 1234491880u, 3408568717u, 1234491880u, 0, FLOORF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_FLOORF_H multiple inclusion protection + +// EOF floorf.h diff --git a/packages/language/c/libm/current/tests/vectors/fmodf.c b/packages/language/c/libm/current/tests/vectors/fmodf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/fmodf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// fmod.c +// +// Test of fmod() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/fmodf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(fmodf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &fmodf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &fmodf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("fmodf() is stable"); + } // if + else + { + CYG_TEST_FAIL("fmodf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library fmodf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "fmod() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF fmod.c diff --git a/packages/language/c/libm/current/tests/vectors/fmodf.h b/packages/language/c/libm/current/tests/vectors/fmodf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/fmodf.h @@ -0,0 +1,629 @@ +#ifndef CYGONCE_LIBM_FMOD_H +#define CYGONCE_LIBM_FMOD_H +//=========================================================================== +// +// fmod.h +// +// Test vectors for testing of fmod() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/fmod.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define FMOD_TOLERANCE 2.0E-04 + +static const Cyg_libm_test_float_vec_t fmodf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1077097267u, 3214514586u, 0, FMOD_TOLERANCE, 0}, +{1, 3214430700u, 1077139210u, 3214430700u, 0, FMOD_TOLERANCE, 0}, +{2, 3214346813u, 1077181153u, 3214346813u, 0, FMOD_TOLERANCE, 0}, +{3, 3214262927u, 1077223096u, 3214262927u, 0, FMOD_TOLERANCE, 0}, +{4, 3214179041u, 1077265039u, 3214179041u, 0, FMOD_TOLERANCE, 0}, +{5, 3214095155u, 1077306982u, 3214095155u, 0, FMOD_TOLERANCE, 0}, +{6, 3214011269u, 1077348925u, 3214011269u, 0, FMOD_TOLERANCE, 0}, +{7, 3213927383u, 1077390868u, 3213927383u, 0, FMOD_TOLERANCE, 0}, +{8, 3213843497u, 1077432812u, 3213843497u, 0, FMOD_TOLERANCE, 0}, +{9, 3213759611u, 1077474755u, 3213759611u, 0, FMOD_TOLERANCE, 0}, +{10, 3213675725u, 1077516698u, 3213675725u, 0, FMOD_TOLERANCE, 0}, +{11, 3213591839u, 1077558641u, 3213591839u, 0, FMOD_TOLERANCE, 0}, +{12, 3213507953u, 1077600584u, 3213507953u, 0, FMOD_TOLERANCE, 0}, +{13, 3213424067u, 1077642527u, 3213424067u, 0, FMOD_TOLERANCE, 0}, +{14, 3213340180u, 1077684470u, 3213340180u, 0, FMOD_TOLERANCE, 0}, +{15, 3213256294u, 1077726413u, 3213256294u, 0, FMOD_TOLERANCE, 0}, +{16, 3213172408u, 1077768356u, 3213172408u, 0, FMOD_TOLERANCE, 0}, +{17, 3213088522u, 1077810299u, 3213088522u, 0, FMOD_TOLERANCE, 0}, +{18, 3213004636u, 1077852242u, 3213004636u, 0, FMOD_TOLERANCE, 0}, +{19, 3212920750u, 1077894185u, 3212920750u, 0, FMOD_TOLERANCE, 0}, +{20, 3212836864u, 1077936128u, 3212836864u, 0, FMOD_TOLERANCE, 0}, +{21, 3212669092u, 1077978071u, 3212669092u, 0, FMOD_TOLERANCE, 0}, +{22, 3212501320u, 1078020014u, 3212501320u, 0, FMOD_TOLERANCE, 0}, +{23, 3212333548u, 1078061957u, 3212333548u, 0, FMOD_TOLERANCE, 0}, +{24, 3212165775u, 1078103900u, 3212165775u, 0, FMOD_TOLERANCE, 0}, +{25, 3211998003u, 1078145843u, 3211998003u, 0, FMOD_TOLERANCE, 0}, +{26, 3211830231u, 1078187786u, 3211830231u, 0, FMOD_TOLERANCE, 0}, +{27, 3211662459u, 1078229729u, 3211662459u, 0, FMOD_TOLERANCE, 0}, +{28, 3211494687u, 1078271672u, 3211494687u, 0, FMOD_TOLERANCE, 0}, +{29, 3211326915u, 1078313615u, 3211326915u, 0, FMOD_TOLERANCE, 0}, +{30, 3211159142u, 1078355558u, 3211159142u, 0, FMOD_TOLERANCE, 0}, +{31, 3210991370u, 1078397501u, 3210991370u, 0, FMOD_TOLERANCE, 0}, +{32, 3210823598u, 1078439444u, 3210823598u, 0, FMOD_TOLERANCE, 0}, +{33, 3210655826u, 1078481388u, 3210655826u, 0, FMOD_TOLERANCE, 0}, +{34, 3210488054u, 1078523331u, 3210488054u, 0, FMOD_TOLERANCE, 0}, +{35, 3210320282u, 1078565274u, 3210320282u, 0, FMOD_TOLERANCE, 0}, +{36, 3210152509u, 1078607217u, 3210152509u, 0, FMOD_TOLERANCE, 0}, +{37, 3209984737u, 1078649160u, 3209984737u, 0, FMOD_TOLERANCE, 0}, +{38, 3209816965u, 1078691103u, 3209816965u, 0, FMOD_TOLERANCE, 0}, +{39, 3209649193u, 1078733046u, 3209649193u, 0, FMOD_TOLERANCE, 0}, +{40, 3209481421u, 1078774989u, 3209481421u, 0, FMOD_TOLERANCE, 0}, +{41, 3209313649u, 1078816932u, 3209313649u, 0, FMOD_TOLERANCE, 0}, +{42, 3209145876u, 1078858875u, 3209145876u, 0, FMOD_TOLERANCE, 0}, +{43, 3208978104u, 1078900818u, 3208978104u, 0, FMOD_TOLERANCE, 0}, +{44, 3208810332u, 1078942761u, 3208810332u, 0, FMOD_TOLERANCE, 0}, +{45, 3208642560u, 1078984704u, 3208642560u, 0, FMOD_TOLERANCE, 0}, +{46, 3208474788u, 1079026647u, 3208474788u, 0, FMOD_TOLERANCE, 0}, +{47, 3208307016u, 1079068590u, 3208307016u, 0, FMOD_TOLERANCE, 0}, +{48, 3208139244u, 1079110533u, 3208139244u, 0, FMOD_TOLERANCE, 0}, +{49, 3207971471u, 1079152476u, 3207971471u, 0, FMOD_TOLERANCE, 0}, +{50, 3207803699u, 1079194419u, 3207803699u, 0, FMOD_TOLERANCE, 0}, +{51, 3207635927u, 1079236362u, 3207635927u, 0, FMOD_TOLERANCE, 0}, +{52, 3207468155u, 1079278305u, 3207468155u, 0, FMOD_TOLERANCE, 0}, +{53, 3207300383u, 1079320248u, 3207300383u, 0, FMOD_TOLERANCE, 0}, +{54, 3207132611u, 1079362191u, 3207132611u, 0, FMOD_TOLERANCE, 0}, +{55, 3206964838u, 1079404134u, 3206964838u, 0, FMOD_TOLERANCE, 0}, +{56, 3206797066u, 1079446077u, 3206797066u, 0, FMOD_TOLERANCE, 0}, +{57, 3206629294u, 1079488020u, 3206629294u, 0, FMOD_TOLERANCE, 0}, +{58, 3206461522u, 1079529964u, 3206461522u, 0, FMOD_TOLERANCE, 0}, +{59, 3206293750u, 1079571907u, 3206293750u, 0, FMOD_TOLERANCE, 0}, +{60, 3206125978u, 1079613850u, 3206125978u, 0, FMOD_TOLERANCE, 0}, +{61, 3205958205u, 1079655793u, 3205958205u, 0, FMOD_TOLERANCE, 0}, +{62, 3205790433u, 1079697736u, 3205790433u, 0, FMOD_TOLERANCE, 0}, +{63, 3205622661u, 1079739679u, 3205622661u, 0, FMOD_TOLERANCE, 0}, +{64, 3205454889u, 1079781622u, 3205454889u, 0, FMOD_TOLERANCE, 0}, +{65, 3205287117u, 1079823565u, 3205287117u, 0, FMOD_TOLERANCE, 0}, +{66, 3205119345u, 1079865508u, 3205119345u, 0, FMOD_TOLERANCE, 0}, +{67, 3204951572u, 1079907451u, 3204951572u, 0, FMOD_TOLERANCE, 0}, +{68, 3204783800u, 1079949394u, 3204783800u, 0, FMOD_TOLERANCE, 0}, +{69, 3204616028u, 1079991337u, 3204616028u, 0, FMOD_TOLERANCE, 0}, +{70, 3204448256u, 1080033280u, 3204448256u, 0, FMOD_TOLERANCE, 0}, +{71, 3204112712u, 1080075223u, 3204112712u, 0, FMOD_TOLERANCE, 0}, +{72, 3203777167u, 1080117166u, 3203777167u, 0, FMOD_TOLERANCE, 0}, +{73, 3203441623u, 1080159109u, 3203441623u, 0, FMOD_TOLERANCE, 0}, +{74, 3203106079u, 1080201052u, 3203106079u, 0, FMOD_TOLERANCE, 0}, +{75, 3202770534u, 1080242995u, 3202770534u, 0, FMOD_TOLERANCE, 0}, +{76, 3202434990u, 1080284938u, 3202434990u, 0, FMOD_TOLERANCE, 0}, +{77, 3202099446u, 1080326881u, 3202099446u, 0, FMOD_TOLERANCE, 0}, +{78, 3201763901u, 1080368824u, 3201763901u, 0, FMOD_TOLERANCE, 0}, +{79, 3201428357u, 1080410767u, 3201428357u, 0, FMOD_TOLERANCE, 0}, +{80, 3201092813u, 1080452710u, 3201092813u, 0, FMOD_TOLERANCE, 0}, +{81, 3200757268u, 1080494653u, 3200757268u, 0, FMOD_TOLERANCE, 0}, +{82, 3200421724u, 1080536596u, 3200421724u, 0, FMOD_TOLERANCE, 0}, +{83, 3200086180u, 1080578540u, 3200086180u, 0, FMOD_TOLERANCE, 0}, +{84, 3199750636u, 1080620483u, 3199750636u, 0, FMOD_TOLERANCE, 0}, +{85, 3199415091u, 1080662426u, 3199415091u, 0, FMOD_TOLERANCE, 0}, +{86, 3199079547u, 1080704369u, 3199079547u, 0, FMOD_TOLERANCE, 0}, +{87, 3198744003u, 1080746312u, 3198744003u, 0, FMOD_TOLERANCE, 0}, +{88, 3198408458u, 1080788255u, 3198408458u, 0, FMOD_TOLERANCE, 0}, +{89, 3198072914u, 1080830198u, 3198072914u, 0, FMOD_TOLERANCE, 0}, +{90, 3197737370u, 1080872141u, 3197737370u, 0, FMOD_TOLERANCE, 0}, +{91, 3197401825u, 1080914084u, 3197401825u, 0, FMOD_TOLERANCE, 0}, +{92, 3197066281u, 1080956027u, 3197066281u, 0, FMOD_TOLERANCE, 0}, +{93, 3196730737u, 1080997970u, 3196730737u, 0, FMOD_TOLERANCE, 0}, +{94, 3196395192u, 1081039913u, 3196395192u, 0, FMOD_TOLERANCE, 0}, +{95, 3196059648u, 1081081856u, 3196059648u, 0, FMOD_TOLERANCE, 0}, +{96, 3195388559u, 1081123799u, 3195388559u, 0, FMOD_TOLERANCE, 0}, +{97, 3194717471u, 1081165742u, 3194717471u, 0, FMOD_TOLERANCE, 0}, +{98, 3194046382u, 1081207685u, 3194046382u, 0, FMOD_TOLERANCE, 0}, +{99, 3193375293u, 1081249628u, 3193375293u, 0, FMOD_TOLERANCE, 0}, +{100, 3192704205u, 1081291571u, 3192704205u, 0, FMOD_TOLERANCE, 0}, +{101, 3192033116u, 1081333514u, 3192033116u, 0, FMOD_TOLERANCE, 0}, +{102, 3191362028u, 1081375457u, 3191362028u, 0, FMOD_TOLERANCE, 0}, +{103, 3190690939u, 1081417400u, 3190690939u, 0, FMOD_TOLERANCE, 0}, +{104, 3190019850u, 1081459343u, 3190019850u, 0, FMOD_TOLERANCE, 0}, +{105, 3189348762u, 1081501286u, 3189348762u, 0, FMOD_TOLERANCE, 0}, +{106, 3188677673u, 1081543229u, 3188677673u, 0, FMOD_TOLERANCE, 0}, +{107, 3188006584u, 1081585172u, 3188006584u, 0, FMOD_TOLERANCE, 0}, +{108, 3186999951u, 1081627116u, 3186999951u, 0, FMOD_TOLERANCE, 0}, +{109, 3185657774u, 1081669059u, 3185657774u, 0, FMOD_TOLERANCE, 0}, +{110, 3184315597u, 1081711002u, 3184315597u, 0, FMOD_TOLERANCE, 0}, +{111, 3182973420u, 1081752945u, 3182973420u, 0, FMOD_TOLERANCE, 0}, +{112, 3181631242u, 1081794888u, 3181631242u, 0, FMOD_TOLERANCE, 0}, +{113, 3180289065u, 1081836831u, 3180289065u, 0, FMOD_TOLERANCE, 0}, +{114, 3178611343u, 1081878774u, 3178611343u, 0, FMOD_TOLERANCE, 0}, +{115, 3175926989u, 1081920717u, 3175926989u, 0, FMOD_TOLERANCE, 0}, +{116, 3173242634u, 1081962660u, 3173242634u, 0, FMOD_TOLERANCE, 0}, +{117, 3170222735u, 1082004603u, 3170222735u, 0, FMOD_TOLERANCE, 0}, +{118, 3164854026u, 1082046546u, 3164854026u, 0, FMOD_TOLERANCE, 0}, +{119, 3156465418u, 1082088489u, 3156465418u, 0, FMOD_TOLERANCE, 0}, +{120, 1008981770u, 1082151404u, 1008981770u, 0, FMOD_TOLERANCE, 0}, +{121, 1017370378u, 1082172375u, 1017370378u, 0, FMOD_TOLERANCE, 0}, +{122, 1022739087u, 1082193347u, 1022739087u, 0, FMOD_TOLERANCE, 0}, +{123, 1025758986u, 1082214318u, 1025758986u, 0, FMOD_TOLERANCE, 0}, +{124, 1028443341u, 1082235290u, 1028443341u, 0, FMOD_TOLERANCE, 0}, +{125, 1031127695u, 1082256261u, 1031127695u, 0, FMOD_TOLERANCE, 0}, +{126, 1032805417u, 1082277233u, 1032805417u, 0, FMOD_TOLERANCE, 0}, +{127, 1034147594u, 1082298204u, 1034147594u, 0, FMOD_TOLERANCE, 0}, +{128, 1035489772u, 1082319176u, 1035489772u, 0, FMOD_TOLERANCE, 0}, +{129, 1036831949u, 1082340147u, 1036831949u, 0, FMOD_TOLERANCE, 0}, +{130, 1038174126u, 1082361119u, 1038174126u, 0, FMOD_TOLERANCE, 0}, +{131, 1039516303u, 1082382090u, 1039516303u, 0, FMOD_TOLERANCE, 0}, +{132, 1040522936u, 1082403062u, 1040522936u, 0, FMOD_TOLERANCE, 0}, +{133, 1041194025u, 1082424033u, 1041194025u, 0, FMOD_TOLERANCE, 0}, +{134, 1041865114u, 1082445005u, 1041865114u, 0, FMOD_TOLERANCE, 0}, +{135, 1042536202u, 1082465976u, 1042536202u, 0, FMOD_TOLERANCE, 0}, +{136, 1043207291u, 1082486948u, 1043207291u, 0, FMOD_TOLERANCE, 0}, +{137, 1043878380u, 1082507919u, 1043878380u, 0, FMOD_TOLERANCE, 0}, +{138, 1044549468u, 1082528891u, 1044549468u, 0, FMOD_TOLERANCE, 0}, +{139, 1045220557u, 1082549862u, 1045220557u, 0, FMOD_TOLERANCE, 0}, +{140, 1045891645u, 1082570834u, 1045891645u, 0, FMOD_TOLERANCE, 0}, +{141, 1046562734u, 1082591805u, 1046562734u, 0, FMOD_TOLERANCE, 0}, +{142, 1047233823u, 1082612777u, 1047233823u, 0, FMOD_TOLERANCE, 0}, +{143, 1047904911u, 1082633748u, 1047904911u, 0, FMOD_TOLERANCE, 0}, +{144, 1048576000u, 1082654720u, 1048576000u, 0, FMOD_TOLERANCE, 0}, +{145, 1048911544u, 1082675692u, 1048911544u, 0, FMOD_TOLERANCE, 0}, +{146, 1049247089u, 1082696663u, 1049247089u, 0, FMOD_TOLERANCE, 0}, +{147, 1049582633u, 1082717635u, 1049582633u, 0, FMOD_TOLERANCE, 0}, +{148, 1049918177u, 1082738606u, 1049918177u, 0, FMOD_TOLERANCE, 0}, +{149, 1050253722u, 1082759578u, 1050253722u, 0, FMOD_TOLERANCE, 0}, +{150, 1050589266u, 1082780549u, 1050589266u, 0, FMOD_TOLERANCE, 0}, +{151, 1050924810u, 1082801521u, 1050924810u, 0, FMOD_TOLERANCE, 0}, +{152, 1051260355u, 1082822492u, 1051260355u, 0, FMOD_TOLERANCE, 0}, +{153, 1051595899u, 1082843464u, 1051595899u, 0, FMOD_TOLERANCE, 0}, +{154, 1051931443u, 1082864435u, 1051931443u, 0, FMOD_TOLERANCE, 0}, +{155, 1052266988u, 1082885407u, 1052266988u, 0, FMOD_TOLERANCE, 0}, +{156, 1052602532u, 1082906378u, 1052602532u, 0, FMOD_TOLERANCE, 0}, +{157, 1052938076u, 1082927350u, 1052938076u, 0, FMOD_TOLERANCE, 0}, +{158, 1053273620u, 1082948321u, 1053273620u, 0, FMOD_TOLERANCE, 0}, +{159, 1053609165u, 1082969293u, 1053609165u, 0, FMOD_TOLERANCE, 0}, +{160, 1053944709u, 1082990264u, 1053944709u, 0, FMOD_TOLERANCE, 0}, +{161, 1054280253u, 1083011236u, 1054280253u, 0, FMOD_TOLERANCE, 0}, +{162, 1054615798u, 1083032207u, 1054615798u, 0, FMOD_TOLERANCE, 0}, +{163, 1054951342u, 1083053179u, 1054951342u, 0, FMOD_TOLERANCE, 0}, +{164, 1055286886u, 1083074150u, 1055286886u, 0, FMOD_TOLERANCE, 0}, +{165, 1055622431u, 1083095122u, 1055622431u, 0, FMOD_TOLERANCE, 0}, +{166, 1055957975u, 1083116093u, 1055957975u, 0, FMOD_TOLERANCE, 0}, +{167, 1056293519u, 1083137065u, 1056293519u, 0, FMOD_TOLERANCE, 0}, +{168, 1056629064u, 1083158036u, 1056629064u, 0, FMOD_TOLERANCE, 0}, +{169, 1056964608u, 1083179008u, 1056964608u, 0, FMOD_TOLERANCE, 0}, +{170, 1057132380u, 1083199980u, 1057132380u, 0, FMOD_TOLERANCE, 0}, +{171, 1057300152u, 1083220951u, 1057300152u, 0, FMOD_TOLERANCE, 0}, +{172, 1057467924u, 1083241923u, 1057467924u, 0, FMOD_TOLERANCE, 0}, +{173, 1057635697u, 1083262894u, 1057635697u, 0, FMOD_TOLERANCE, 0}, +{174, 1057803469u, 1083283866u, 1057803469u, 0, FMOD_TOLERANCE, 0}, +{175, 1057971241u, 1083304837u, 1057971241u, 0, FMOD_TOLERANCE, 0}, +{176, 1058139013u, 1083325809u, 1058139013u, 0, FMOD_TOLERANCE, 0}, +{177, 1058306785u, 1083346780u, 1058306785u, 0, FMOD_TOLERANCE, 0}, +{178, 1058474557u, 1083367752u, 1058474557u, 0, FMOD_TOLERANCE, 0}, +{179, 1058642330u, 1083388723u, 1058642330u, 0, FMOD_TOLERANCE, 0}, +{180, 1058810102u, 1083409695u, 1058810102u, 0, FMOD_TOLERANCE, 0}, +{181, 1058977874u, 1083430666u, 1058977874u, 0, FMOD_TOLERANCE, 0}, +{182, 1059145646u, 1083451638u, 1059145646u, 0, FMOD_TOLERANCE, 0}, +{183, 1059313418u, 1083472609u, 1059313418u, 0, FMOD_TOLERANCE, 0}, +{184, 1059481190u, 1083493581u, 1059481190u, 0, FMOD_TOLERANCE, 0}, +{185, 1059648963u, 1083514552u, 1059648963u, 0, FMOD_TOLERANCE, 0}, +{186, 1059816735u, 1083535524u, 1059816735u, 0, FMOD_TOLERANCE, 0}, +{187, 1059984507u, 1083556495u, 1059984507u, 0, FMOD_TOLERANCE, 0}, +{188, 1060152279u, 1083577467u, 1060152279u, 0, FMOD_TOLERANCE, 0}, +{189, 1060320051u, 1083598438u, 1060320051u, 0, FMOD_TOLERANCE, 0}, +{190, 1060487823u, 1083619410u, 1060487823u, 0, FMOD_TOLERANCE, 0}, +{191, 1060655596u, 1083640381u, 1060655596u, 0, FMOD_TOLERANCE, 0}, +{192, 1060823368u, 1083661353u, 1060823368u, 0, FMOD_TOLERANCE, 0}, +{193, 1060991140u, 1083682324u, 1060991140u, 0, FMOD_TOLERANCE, 0}, +{194, 1061158912u, 1083703296u, 1061158912u, 0, FMOD_TOLERANCE, 0}, +{195, 1061326684u, 1083724268u, 1061326684u, 0, FMOD_TOLERANCE, 0}, +{196, 1061494456u, 1083745239u, 1061494456u, 0, FMOD_TOLERANCE, 0}, +{197, 1061662228u, 1083766211u, 1061662228u, 0, FMOD_TOLERANCE, 0}, +{198, 1061830001u, 1083787182u, 1061830001u, 0, FMOD_TOLERANCE, 0}, +{199, 1061997773u, 1083808154u, 1061997773u, 0, FMOD_TOLERANCE, 0}, +{200, 1062165545u, 1083829125u, 1062165545u, 0, FMOD_TOLERANCE, 0}, +{201, 1062333317u, 1083850097u, 1062333317u, 0, FMOD_TOLERANCE, 0}, +{202, 1062501089u, 1083871068u, 1062501089u, 0, FMOD_TOLERANCE, 0}, +{203, 1062668861u, 1083892040u, 1062668861u, 0, FMOD_TOLERANCE, 0}, +{204, 1062836634u, 1083913011u, 1062836634u, 0, FMOD_TOLERANCE, 0}, +{205, 1063004406u, 1083933983u, 1063004406u, 0, FMOD_TOLERANCE, 0}, +{206, 1063172178u, 1083954954u, 1063172178u, 0, FMOD_TOLERANCE, 0}, +{207, 1063339950u, 1083975926u, 1063339950u, 0, FMOD_TOLERANCE, 0}, +{208, 1063507722u, 1083996897u, 1063507722u, 0, FMOD_TOLERANCE, 0}, +{209, 1063675494u, 1084017869u, 1063675494u, 0, FMOD_TOLERANCE, 0}, +{210, 1063843267u, 1084038840u, 1063843267u, 0, FMOD_TOLERANCE, 0}, +{211, 1064011039u, 1084059812u, 1064011039u, 0, FMOD_TOLERANCE, 0}, +{212, 1064178811u, 1084080783u, 1064178811u, 0, FMOD_TOLERANCE, 0}, +{213, 1064346583u, 1084101755u, 1064346583u, 0, FMOD_TOLERANCE, 0}, +{214, 1064514355u, 1084122726u, 1064514355u, 0, FMOD_TOLERANCE, 0}, +{215, 1064682127u, 1084143698u, 1064682127u, 0, FMOD_TOLERANCE, 0}, +{216, 1064849900u, 1084164669u, 1064849900u, 0, FMOD_TOLERANCE, 0}, +{217, 1065017672u, 1084185641u, 1065017672u, 0, FMOD_TOLERANCE, 0}, +{218, 1065185444u, 1084206612u, 1065185444u, 0, FMOD_TOLERANCE, 0}, +{219, 1065353216u, 1084227584u, 1065353216u, 0, FMOD_TOLERANCE, 0}, +{220, 1065437102u, 1084248556u, 1065437102u, 0, FMOD_TOLERANCE, 0}, +{221, 1065520988u, 1084269527u, 1065520988u, 0, FMOD_TOLERANCE, 0}, +{222, 1065604874u, 1084290499u, 1065604874u, 0, FMOD_TOLERANCE, 0}, +{223, 1065688760u, 1084311470u, 1065688760u, 0, FMOD_TOLERANCE, 0}, +{224, 1065772646u, 1084332442u, 1065772646u, 0, FMOD_TOLERANCE, 0}, +{225, 1065856532u, 1084353413u, 1065856532u, 0, FMOD_TOLERANCE, 0}, +{226, 1065940419u, 1084374385u, 1065940419u, 0, FMOD_TOLERANCE, 0}, +{227, 1066024305u, 1084395356u, 1066024305u, 0, FMOD_TOLERANCE, 0}, +{228, 1066108191u, 1084416328u, 1066108191u, 0, FMOD_TOLERANCE, 0}, +{229, 1066192077u, 1084437299u, 1066192077u, 0, FMOD_TOLERANCE, 0}, +{230, 1066275963u, 1084458271u, 1066275963u, 0, FMOD_TOLERANCE, 0}, +{231, 1066359849u, 1084479242u, 1066359849u, 0, FMOD_TOLERANCE, 0}, +{232, 1066443735u, 1084500214u, 1066443735u, 0, FMOD_TOLERANCE, 0}, +{233, 1066527621u, 1084521185u, 1066527621u, 0, FMOD_TOLERANCE, 0}, +{234, 1066611507u, 1084542157u, 1066611507u, 0, FMOD_TOLERANCE, 0}, +{235, 1066695393u, 1084563128u, 1066695393u, 0, FMOD_TOLERANCE, 0}, +{236, 1066779279u, 1084584100u, 1066779279u, 0, FMOD_TOLERANCE, 0}, +{237, 1066863165u, 1084605071u, 1066863165u, 0, FMOD_TOLERANCE, 0}, +{238, 1066947052u, 1084626043u, 1066947052u, 0, FMOD_TOLERANCE, 0}, +{239, 3234402267u, 3222413237u, 3218849944u, 0, FMOD_TOLERANCE, 0}, +{240, 3231108068u, 3208011552u, 3202369728u, 0, FMOD_TOLERANCE, 0}, +{241, 3226013659u, 1062977685u, 3205561773u, 0, FMOD_TOLERANCE, 0}, +{242, 3217625051u, 1075542035u, 3217625051u, 0, FMOD_TOLERANCE, 0}, +{243, 1070141403u, 1085424631u, 1070141403u, 0, FMOD_TOLERANCE, 0}, +{244, 1078530011u, 1088718829u, 1078530011u, 0, FMOD_TOLERANCE, 0}, +{245, 1083624420u, 1091266034u, 1083624420u, 0, FMOD_TOLERANCE, 0}, +{246, 3253731328u, 3251634176u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{247, 3252840038u, 3250742886u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{248, 3251948749u, 3249851597u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{249, 3251057459u, 3248960307u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{250, 3250166170u, 3248069018u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{251, 3249274880u, 3247177728u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{252, 3248383590u, 3246181581u, 3229614076u, 0, FMOD_TOLERANCE, 0}, +{253, 3247492301u, 3244399002u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{254, 3246601011u, 3242616422u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{255, 3245028147u, 3240833843u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{256, 3243245568u, 3239051264u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{257, 3241462989u, 3236534682u, 3229614080u, 0, FMOD_TOLERANCE, 0}, +{258, 3239680410u, 3232969523u, 3229614081u, 0, FMOD_TOLERANCE, 0}, +{259, 3237792973u, 3229194650u, 3184315584u, 0, FMOD_TOLERANCE, 0}, +{260, 3234227814u, 3222064333u, 3219547748u, 0, FMOD_TOLERANCE, 0}, +{261, 3224580915u, 1067030938u, 3201092808u, 0, FMOD_TOLERANCE, 0}, +{262, 3213675725u, 1077516698u, 3213675725u, 0, FMOD_TOLERANCE, 0}, +{263, 1058642330u, 1083388723u, 1058642330u, 0, FMOD_TOLERANCE, 0}, +{264, 1075000115u, 1086953882u, 1075000115u, 0, FMOD_TOLERANCE, 0}, +{265, 1082130432u, 1090519040u, 1082130432u, 0, FMOD_TOLERANCE, 0}, +{266, 1085695590u, 1092301619u, 1085695590u, 0, FMOD_TOLERANCE, 0}, +{267, 1089260749u, 1094084198u, 1089260749u, 0, FMOD_TOLERANCE, 0}, +{268, 1091672474u, 1095866778u, 1091672474u, 0, FMOD_TOLERANCE, 0}, +{269, 1093455053u, 1097649357u, 1093455053u, 0, FMOD_TOLERANCE, 0}, +{270, 1095237632u, 1099169792u, 1095237632u, 0, FMOD_TOLERANCE, 0}, +{271, 1097020211u, 1100061082u, 1097020211u, 0, FMOD_TOLERANCE, 0}, +{272, 1098802790u, 1100952371u, 1098802790u, 0, FMOD_TOLERANCE, 0}, +{273, 1099746509u, 1101843661u, 1099746509u, 0, FMOD_TOLERANCE, 0}, +{274, 1100637798u, 1102734950u, 1100637798u, 0, FMOD_TOLERANCE, 0}, +{275, 1101529088u, 1103626240u, 1101529088u, 0, FMOD_TOLERANCE, 0}, +{276, 1102420378u, 1104517530u, 1102420378u, 0, FMOD_TOLERANCE, 0}, +{277, 1103311667u, 1105408819u, 1103311667u, 0, FMOD_TOLERANCE, 0}, +{278, 1104202957u, 1106300109u, 1104202957u, 0, FMOD_TOLERANCE, 0}, +{279, 1105094246u, 1107191398u, 1105094246u, 0, FMOD_TOLERANCE, 0}, +{280, 1105985536u, 1107689472u, 1105985536u, 0, FMOD_TOLERANCE, 0}, +{281, 1107800421u, 1203999711u, 1107800421u, 0, FMOD_TOLERANCE, 0}, +{282, 3221027117u, 1284201705u, 3221027117u, 0, FMOD_TOLERANCE, 0}, +{283, 966554515u, 3234538174u, 966554515u, 0, FMOD_TOLERANCE, 0}, +{284, 3111900019u, 1130472166u, 3111900019u, 0, FMOD_TOLERANCE, 0}, +{285, 3181522772u, 3305392896u, 3181522772u, 0, FMOD_TOLERANCE, 0}, +{286, 3122346862u, 1111584337u, 3122346862u, 0, FMOD_TOLERANCE, 0}, +{287, 1052361612u, 1280025214u, 1052361612u, 0, FMOD_TOLERANCE, 0}, +{288, 3319724992u, 3354615790u, 3319724992u, 0, FMOD_TOLERANCE, 0}, +{289, 1001673627u, 3462631271u, 1001673627u, 0, FMOD_TOLERANCE, 0}, +{290, 976098044u, 1151967422u, 976098044u, 0, FMOD_TOLERANCE, 0}, +{291, 1139941253u, 1147688821u, 1139941253u, 0, FMOD_TOLERANCE, 0}, +{292, 3143717025u, 3234638157u, 3143717025u, 0, FMOD_TOLERANCE, 0}, +{293, 1333134799u, 1338107877u, 1333134799u, 0, FMOD_TOLERANCE, 0}, +{294, 1187847971u, 1317663644u, 1187847971u, 0, FMOD_TOLERANCE, 0}, +{295, 1038851706u, 1327544110u, 1038851706u, 0, FMOD_TOLERANCE, 0}, +{296, 1106778573u, 3304487767u, 1106778573u, 0, FMOD_TOLERANCE, 0}, +{297, 3154871957u, 1276671061u, 3154871957u, 0, FMOD_TOLERANCE, 0}, +{298, 1082692850u, 1211581107u, 1082692850u, 0, FMOD_TOLERANCE, 0}, +{299, 974547519u, 3475164509u, 974547519u, 0, FMOD_TOLERANCE, 0}, +{300, 3182301130u, 3460764044u, 3182301130u, 0, FMOD_TOLERANCE, 0}, +{301, 3239231622u, 3302723069u, 3239231622u, 0, FMOD_TOLERANCE, 0}, +{302, 3417964312u, 1321337529u, 3417964312u, 0, FMOD_TOLERANCE, 0}, +{303, 3109481038u, 1143864063u, 3109481038u, 0, FMOD_TOLERANCE, 0}, +{304, 1148867223u, 1256486202u, 1148867223u, 0, FMOD_TOLERANCE, 0}, +{305, 989687421u, 3372681320u, 989687421u, 0, FMOD_TOLERANCE, 0}, +{306, 1109627625u, 1314158257u, 1109627625u, 0, FMOD_TOLERANCE, 0}, +{307, 1077234132u, 3272167130u, 1077234132u, 0, FMOD_TOLERANCE, 0}, +{308, 1009535440u, 3381353228u, 1009535440u, 0, FMOD_TOLERANCE, 0}, +{309, 3126820946u, 1077903063u, 3126820946u, 0, FMOD_TOLERANCE, 0}, +{310, 3152729489u, 1060398533u, 3152729489u, 0, FMOD_TOLERANCE, 0}, +{311, 976791751u, 3230678102u, 976791751u, 0, FMOD_TOLERANCE, 0}, +{312, 3212952285u, 3329407365u, 3212952285u, 0, FMOD_TOLERANCE, 0}, +{313, 3319315516u, 3422089012u, 3319315516u, 0, FMOD_TOLERANCE, 0}, +{314, 3212614372u, 1152633030u, 3212614372u, 0, FMOD_TOLERANCE, 0}, +{315, 1134593658u, 3456812581u, 1134593658u, 0, FMOD_TOLERANCE, 0}, +{316, 1135271264u, 3284878412u, 1135271264u, 0, FMOD_TOLERANCE, 0}, +{317, 3316278408u, 3455589207u, 3316278408u, 0, FMOD_TOLERANCE, 0}, +{318, 1030934236u, 1045139240u, 1030934236u, 0, FMOD_TOLERANCE, 0}, +{319, 3131791114u, 3408392958u, 3131791114u, 0, FMOD_TOLERANCE, 0}, +{320, 3180213739u, 1108793820u, 3180213739u, 0, FMOD_TOLERANCE, 0}, +{321, 1268194719u, 1332489410u, 1268194719u, 0, FMOD_TOLERANCE, 0}, +{322, 1133420220u, 1245770860u, 1133420220u, 0, FMOD_TOLERANCE, 0}, +{323, 3184462258u, 1263529646u, 3184462258u, 0, FMOD_TOLERANCE, 0}, +{324, 3295996963u, 3453334307u, 3295996963u, 0, FMOD_TOLERANCE, 0}, +{325, 3116607482u, 3224327456u, 3116607482u, 0, FMOD_TOLERANCE, 0}, +{326, 3224857113u, 3398166843u, 3224857113u, 0, FMOD_TOLERANCE, 0}, +{327, 3424831780u, 1304806106u, 3424831780u, 0, FMOD_TOLERANCE, 0}, +{328, 1257596246u, 3420832544u, 1257596246u, 0, FMOD_TOLERANCE, 0}, +{329, 1090870906u, 3294742905u, 1090870906u, 0, FMOD_TOLERANCE, 0}, +{330, 1137854355u, 3335041917u, 1137854355u, 0, FMOD_TOLERANCE, 0}, +{331, 1131196082u, 1164573183u, 1131196082u, 0, FMOD_TOLERANCE, 0}, +{332, 3177294154u, 1282436638u, 3177294154u, 0, FMOD_TOLERANCE, 0}, +{333, 3258097678u, 1305882290u, 3258097678u, 0, FMOD_TOLERANCE, 0}, +{334, 1053698677u, 3284313107u, 1053698677u, 0, FMOD_TOLERANCE, 0}, +{335, 1065761827u, 3333928591u, 1065761827u, 0, FMOD_TOLERANCE, 0}, +{336, 1080781593u, 1213908300u, 1080781593u, 0, FMOD_TOLERANCE, 0}, +{337, 3235326590u, 1271705594u, 3235326590u, 0, FMOD_TOLERANCE, 0}, +{338, 3118883815u, 1051802647u, 3118883815u, 0, FMOD_TOLERANCE, 0}, +{339, 965378004u, 1292594138u, 965378004u, 0, FMOD_TOLERANCE, 0}, +{340, 3226990408u, 1110755136u, 3226990408u, 0, FMOD_TOLERANCE, 0}, +{341, 3117098218u, 1122474770u, 3117098218u, 0, FMOD_TOLERANCE, 0}, +{342, 970649315u, 1078286437u, 970649315u, 0, FMOD_TOLERANCE, 0}, +{343, 1106502045u, 1290849316u, 1106502045u, 0, FMOD_TOLERANCE, 0}, +{344, 1157598381u, 3309023746u, 1157598381u, 0, FMOD_TOLERANCE, 0}, +{345, 3157416480u, 1309984610u, 3157416480u, 0, FMOD_TOLERANCE, 0}, +{346, 1109198803u, 1221754614u, 1109198803u, 0, FMOD_TOLERANCE, 0}, +{347, 3361149474u, 3387342069u, 3361149474u, 0, FMOD_TOLERANCE, 0}, +{348, 1207502108u, 3388073586u, 1207502108u, 0, FMOD_TOLERANCE, 0}, +{349, 3160728744u, 3382954009u, 3160728744u, 0, FMOD_TOLERANCE, 0}, +{350, 1017843965u, 1193076204u, 1017843965u, 0, FMOD_TOLERANCE, 0}, +{351, 970094304u, 3344590506u, 970094304u, 0, FMOD_TOLERANCE, 0}, +{352, 1125551064u, 3331248076u, 1125551064u, 0, FMOD_TOLERANCE, 0}, +{353, 3427296372u, 3455289118u, 3427296372u, 0, FMOD_TOLERANCE, 0}, +{354, 1198917460u, 1327195159u, 1198917460u, 0, FMOD_TOLERANCE, 0}, +{355, 3114686212u, 3476082461u, 3114686212u, 0, FMOD_TOLERANCE, 0}, +{356, 3224245428u, 3271307999u, 3224245428u, 0, FMOD_TOLERANCE, 0}, +{357, 1120124467u, 1135619937u, 1120124467u, 0, FMOD_TOLERANCE, 0}, +{358, 1165195428u, 3390323168u, 1165195428u, 0, FMOD_TOLERANCE, 0}, +{359, 3149469534u, 1278465842u, 3149469534u, 0, FMOD_TOLERANCE, 0}, +{360, 3215244648u, 1083988595u, 3215244648u, 0, FMOD_TOLERANCE, 0}, +{361, 3275973009u, 3450721670u, 3275973009u, 0, FMOD_TOLERANCE, 0}, +{362, 3391162308u, 1291220039u, 3391162308u, 0, FMOD_TOLERANCE, 0}, +{363, 1044867873u, 3369493273u, 1044867873u, 0, FMOD_TOLERANCE, 0}, +{364, 1089986803u, 3462160118u, 1089986803u, 0, FMOD_TOLERANCE, 0}, +{365, 3262169538u, 1268270462u, 3262169538u, 0, FMOD_TOLERANCE, 0}, +{366, 989762529u, 3362011135u, 989762529u, 0, FMOD_TOLERANCE, 0}, +{367, 1002632518u, 3330388441u, 1002632518u, 0, FMOD_TOLERANCE, 0}, +{368, 3404372005u, 3450484255u, 3404372005u, 0, FMOD_TOLERANCE, 0}, +{369, 999985470u, 3409354318u, 999985470u, 0, FMOD_TOLERANCE, 0}, +{370, 3132541814u, 3444521949u, 3132541814u, 0, FMOD_TOLERANCE, 0}, +{371, 1164046161u, 3440635788u, 1164046161u, 0, FMOD_TOLERANCE, 0}, +{372, 1181604787u, 3363067409u, 1181604787u, 0, FMOD_TOLERANCE, 0}, +{373, 1043691622u, 3402603223u, 1043691622u, 0, FMOD_TOLERANCE, 0}, +{374, 3157534378u, 3451674717u, 3157534378u, 0, FMOD_TOLERANCE, 0}, +{375, 969804941u, 3355439348u, 969804941u, 0, FMOD_TOLERANCE, 0}, +{376, 3162548604u, 3461790298u, 3162548604u, 0, FMOD_TOLERANCE, 0}, +{377, 3185240099u, 1123403720u, 3185240099u, 0, FMOD_TOLERANCE, 0}, +{378, 3424264117u, 3434026174u, 3424264117u, 0, FMOD_TOLERANCE, 0}, +{379, 3228365887u, 1216775310u, 3228365887u, 0, FMOD_TOLERANCE, 0}, +{380, 1035909900u, 1249532942u, 1035909900u, 0, FMOD_TOLERANCE, 0}, +{381, 1131358407u, 3325958870u, 1131358407u, 0, FMOD_TOLERANCE, 0}, +{382, 1156517523u, 3343716230u, 1156517523u, 0, FMOD_TOLERANCE, 0}, +{383, 3337499209u, 1226297264u, 3337499209u, 0, FMOD_TOLERANCE, 0}, +{384, 3253515800u, 1189005947u, 3253515800u, 0, FMOD_TOLERANCE, 0}, +{385, 1039917375u, 1122740999u, 1039917375u, 0, FMOD_TOLERANCE, 0}, +{386, 3220979495u, 3429223871u, 3220979495u, 0, FMOD_TOLERANCE, 0}, +{387, 1128016396u, 1105151547u, 1101376254u, 0, FMOD_TOLERANCE, 0}, +{388, 3144504834u, 1162227076u, 3144504834u, 0, FMOD_TOLERANCE, 0}, +{389, 995850843u, 1332031130u, 995850843u, 0, FMOD_TOLERANCE, 0}, +{390, 3362082828u, 3374056268u, 3362082828u, 0, FMOD_TOLERANCE, 0}, +{391, 3235395924u, 1132055244u, 3235395924u, 0, FMOD_TOLERANCE, 0}, +{392, 3161654634u, 3335899347u, 3161654634u, 0, FMOD_TOLERANCE, 0}, +{393, 3162655243u, 3307203982u, 3162655243u, 0, FMOD_TOLERANCE, 0}, +{394, 1165476654u, 3350219111u, 1165476654u, 0, FMOD_TOLERANCE, 0}, +{395, 1017239798u, 3438501281u, 1017239798u, 0, FMOD_TOLERANCE, 0}, +{396, 1189849849u, 3382739134u, 1189849849u, 0, FMOD_TOLERANCE, 0}, +{397, 1168098747u, 1316854744u, 1168098747u, 0, FMOD_TOLERANCE, 0}, +{398, 3301009024u, 3406174560u, 3301009024u, 0, FMOD_TOLERANCE, 0}, +{399, 3233089227u, 1212652543u, 3233089227u, 0, FMOD_TOLERANCE, 0}, +{400, 3218245284u, 1238873830u, 3218245284u, 0, FMOD_TOLERANCE, 0}, +{401, 3215981890u, 3240474694u, 3215981890u, 0, FMOD_TOLERANCE, 0}, +{402, 1141063391u, 1168908072u, 1141063391u, 0, FMOD_TOLERANCE, 0}, +{403, 1001823878u, 1016826861u, 1001823878u, 0, FMOD_TOLERANCE, 0}, +{404, 1009130212u, 1004302940u, 996116184u, 0, FMOD_TOLERANCE, 0}, +{405, 1032920919u, 3449126417u, 1032920919u, 0, FMOD_TOLERANCE, 0}, +{406, 1153753924u, 3322269242u, 1153753924u, 0, FMOD_TOLERANCE, 0}, +{407, 3226328360u, 3366432856u, 3226328360u, 0, FMOD_TOLERANCE, 0}, +{408, 3166889490u, 3306023523u, 3166889490u, 0, FMOD_TOLERANCE, 0}, +{409, 1087750238u, 1099325523u, 1087750238u, 0, FMOD_TOLERANCE, 0}, +{410, 3121620061u, 3359488363u, 3121620061u, 0, FMOD_TOLERANCE, 0}, +{411, 1030612298u, 3345396001u, 1030612298u, 0, FMOD_TOLERANCE, 0}, +{412, 1045232522u, 3234993273u, 1045232522u, 0, FMOD_TOLERANCE, 0}, +{413, 3228795133u, 3273940030u, 3228795133u, 0, FMOD_TOLERANCE, 0}, +{414, 3388153589u, 3426245389u, 3388153589u, 0, FMOD_TOLERANCE, 0}, +{415, 1133410485u, 3329658993u, 1133410485u, 0, FMOD_TOLERANCE, 0}, +{416, 3136790322u, 1088652637u, 3136790322u, 0, FMOD_TOLERANCE, 0}, +{417, 1001897182u, 3191875320u, 1001897182u, 0, FMOD_TOLERANCE, 0}, +{418, 3152777939u, 3245830463u, 3152777939u, 0, FMOD_TOLERANCE, 0}, +{419, 985903305u, 3333087577u, 985903305u, 0, FMOD_TOLERANCE, 0}, +{420, 3267868136u, 1208301947u, 3267868136u, 0, FMOD_TOLERANCE, 0}, +{421, 3319048157u, 1172271145u, 3319048157u, 0, FMOD_TOLERANCE, 0}, +{422, 3301461672u, 1233693827u, 3301461672u, 0, FMOD_TOLERANCE, 0}, +{423, 3130670309u, 3192399254u, 3130670309u, 0, FMOD_TOLERANCE, 0}, +{424, 1258369714u, 3462258576u, 1258369714u, 0, FMOD_TOLERANCE, 0}, +{425, 1216602683u, 3371396332u, 1216602683u, 0, FMOD_TOLERANCE, 0}, +{426, 3297265739u, 1214184410u, 3297265739u, 0, FMOD_TOLERANCE, 0}, +{427, 1071940738u, 3311731012u, 1071940738u, 0, FMOD_TOLERANCE, 0}, +{428, 3131219358u, 3471261157u, 3131219358u, 0, FMOD_TOLERANCE, 0}, +{429, 3222096285u, 1198013705u, 3222096285u, 0, FMOD_TOLERANCE, 0}, +{430, 3345532722u, 3383708463u, 3345532722u, 0, FMOD_TOLERANCE, 0}, +{431, 3418753236u, 3481843070u, 3418753236u, 0, FMOD_TOLERANCE, 0}, +{432, 1277417964u, 3487506626u, 1277417964u, 0, FMOD_TOLERANCE, 0}, +{433, 987577257u, 1152077087u, 987577257u, 0, FMOD_TOLERANCE, 0}, +{434, 3161606610u, 3190282989u, 3161606610u, 0, FMOD_TOLERANCE, 0}, +{435, 1043442869u, 3311393817u, 1043442869u, 0, FMOD_TOLERANCE, 0}, +{436, 3320923228u, 3464544249u, 3320923228u, 0, FMOD_TOLERANCE, 0}, +{437, 1337400405u, 3488844154u, 1337400405u, 0, FMOD_TOLERANCE, 0}, +{438, 3284411233u, 1173613526u, 3284411233u, 0, FMOD_TOLERANCE, 0}, +{439, 1215968622u, 3469884568u, 1215968622u, 0, FMOD_TOLERANCE, 0}, +{440, 1025404104u, 1066370251u, 1025404104u, 0, FMOD_TOLERANCE, 0}, +{441, 3138086437u, 3195983510u, 3138086437u, 0, FMOD_TOLERANCE, 0}, +{442, 3362748242u, 3369843597u, 3362748242u, 0, FMOD_TOLERANCE, 0}, +{443, 3327895594u, 1224511805u, 3327895594u, 0, FMOD_TOLERANCE, 0}, +{444, 1157186482u, 1288722647u, 1157186482u, 0, FMOD_TOLERANCE, 0}, +{445, 3477008113u, 1331845018u, 3477008113u, 0, FMOD_TOLERANCE, 0}, +{446, 3292127294u, 3409957764u, 3292127294u, 0, FMOD_TOLERANCE, 0}, +{447, 1123357102u, 3281307320u, 1123357102u, 0, FMOD_TOLERANCE, 0}, +{448, 1049949008u, 1130799489u, 1049949008u, 0, FMOD_TOLERANCE, 0}, +{449, 1108543194u, 3281299199u, 1108543194u, 0, FMOD_TOLERANCE, 0}, +{450, 3163283126u, 1328636961u, 3163283126u, 0, FMOD_TOLERANCE, 0}, +{451, 1160162706u, 1264067367u, 1160162706u, 0, FMOD_TOLERANCE, 0}, +{452, 972485427u, 1124312043u, 972485427u, 0, FMOD_TOLERANCE, 0}, +{453, 3222106584u, 1183748648u, 3222106584u, 0, FMOD_TOLERANCE, 0}, +{454, 3167730654u, 3195765940u, 3167730654u, 0, FMOD_TOLERANCE, 0}, +{455, 1098530298u, 3255870890u, 1098530298u, 0, FMOD_TOLERANCE, 0}, +{456, 3203377685u, 1306427476u, 3203377685u, 0, FMOD_TOLERANCE, 0}, +{457, 1096155623u, 1256423752u, 1096155623u, 0, FMOD_TOLERANCE, 0}, +{458, 3238729605u, 1298769842u, 3238729605u, 0, FMOD_TOLERANCE, 0}, +{459, 3154720153u, 3443720494u, 3154720153u, 0, FMOD_TOLERANCE, 0}, +{460, 3136364836u, 1018492227u, 3136364836u, 0, FMOD_TOLERANCE, 0}, +{461, 1011225926u, 1180485180u, 1011225926u, 0, FMOD_TOLERANCE, 0}, +{462, 3137758475u, 1039403054u, 3137758475u, 0, FMOD_TOLERANCE, 0}, +{463, 1040617590u, 1034835971u, 1027445202u, 0, FMOD_TOLERANCE, 0}, +{464, 1039827284u, 1072928888u, 1039827284u, 0, FMOD_TOLERANCE, 0}, +{465, 1021564080u, 1064468397u, 1021564080u, 0, FMOD_TOLERANCE, 0}, +{466, 3327516316u, 3405380971u, 3327516316u, 0, FMOD_TOLERANCE, 0}, +{467, 1040711112u, 3229444200u, 1040711112u, 0, FMOD_TOLERANCE, 0}, +{468, 1134528351u, 3365952513u, 1134528351u, 0, FMOD_TOLERANCE, 0}, +{469, 1066157309u, 3241712664u, 1066157309u, 0, FMOD_TOLERANCE, 0}, +{470, 3272661536u, 3461799138u, 3272661536u, 0, FMOD_TOLERANCE, 0}, +{471, 1170245333u, 1233406410u, 1170245333u, 0, FMOD_TOLERANCE, 0}, +{472, 1219052056u, 3369557946u, 1219052056u, 0, FMOD_TOLERANCE, 0}, +{473, 3190796331u, 1320011850u, 3190796331u, 0, FMOD_TOLERANCE, 0}, +{474, 3257224022u, 3361778245u, 3257224022u, 0, FMOD_TOLERANCE, 0}, +{475, 1086717248u, 3423795374u, 1086717248u, 0, FMOD_TOLERANCE, 0}, +{476, 1200927971u, 1317167489u, 1200927971u, 0, FMOD_TOLERANCE, 0}, +{477, 3326858092u, 3452602832u, 3326858092u, 0, FMOD_TOLERANCE, 0}, +{478, 3184801644u, 1137974313u, 3184801644u, 0, FMOD_TOLERANCE, 0}, +{479, 1015670780u, 1101217251u, 1015670780u, 0, FMOD_TOLERANCE, 0}, +{480, 1012543234u, 1116520440u, 1012543234u, 0, FMOD_TOLERANCE, 0}, +{481, 3316611992u, 3394732912u, 3316611992u, 0, FMOD_TOLERANCE, 0}, +{482, 1087942795u, 3316660295u, 1087942795u, 0, FMOD_TOLERANCE, 0}, +{483, 3295326432u, 1313396175u, 3295326432u, 0, FMOD_TOLERANCE, 0}, +{484, 1173247961u, 1191127979u, 1173247961u, 0, FMOD_TOLERANCE, 0}, +{485, 3248534678u, 1323683800u, 3248534678u, 0, FMOD_TOLERANCE, 0}, +{486, 3157626955u, 3483653298u, 3157626955u, 0, FMOD_TOLERANCE, 0}, +{487, 3182695954u, 3256861672u, 3182695954u, 0, FMOD_TOLERANCE, 0}, +{488, 1105291533u, 3482971524u, 1105291533u, 0, FMOD_TOLERANCE, 0}, +{489, 1016023520u, 3227712090u, 1016023520u, 0, FMOD_TOLERANCE, 0}, +{490, 3370691006u, 1295870514u, 3370691006u, 0, FMOD_TOLERANCE, 0}, +{491, 3335212901u, 3486414589u, 3335212901u, 0, FMOD_TOLERANCE, 0}, +{492, 3266691185u, 1160074593u, 3266691185u, 0, FMOD_TOLERANCE, 0}, +{493, 3179003144u, 1108615803u, 3179003144u, 0, FMOD_TOLERANCE, 0}, +{494, 973664327u, 1319516167u, 973664327u, 0, FMOD_TOLERANCE, 0}, +{495, 979878744u, 1232482646u, 979878744u, 0, FMOD_TOLERANCE, 0}, +{496, 1002542205u, 3152136093u, 1002542205u, 0, FMOD_TOLERANCE, 0}, +{497, 989655126u, 1308376568u, 989655126u, 0, FMOD_TOLERANCE, 0}, +{498, 1002715618u, 1191006977u, 1002715618u, 0, FMOD_TOLERANCE, 0}, +{499, 1000863905u, 1196831314u, 1000863905u, 0, FMOD_TOLERANCE, 0}, +{500, 3283471961u, 1260093226u, 3283471961u, 0, FMOD_TOLERANCE, 0}, +{501, 3311210827u, 1192192264u, 3311210827u, 0, FMOD_TOLERANCE, 0}, +{502, 1288901567u, 1296370667u, 1288901567u, 0, FMOD_TOLERANCE, 0}, +{503, 1062512367u, 3229559531u, 1062512367u, 0, FMOD_TOLERANCE, 0}, +{504, 1034561811u, 1054043114u, 1034561811u, 0, FMOD_TOLERANCE, 0}, +{505, 1042014529u, 1146708584u, 1042014529u, 0, FMOD_TOLERANCE, 0}, +{506, 3196144817u, 1056118717u, 3196144817u, 0, FMOD_TOLERANCE, 0}, +{507, 3375507013u, 1306310823u, 3375507013u, 0, FMOD_TOLERANCE, 0}, +{508, 1055319316u, 3261813492u, 1055319316u, 0, FMOD_TOLERANCE, 0}, +{509, 1123114742u, 1229815537u, 1123114742u, 0, FMOD_TOLERANCE, 0}, +{510, 1258114435u, 1291336083u, 1258114435u, 0, FMOD_TOLERANCE, 0}, +{511, 3223384012u, 1130486973u, 3223384012u, 0, FMOD_TOLERANCE, 0}, +{512, 1019964626u, 1235133609u, 1019964626u, 0, FMOD_TOLERANCE, 0}, +{513, 3445262427u, 3465211174u, 3445262427u, 0, FMOD_TOLERANCE, 0}, +{514, 1125653081u, 1207799746u, 1125653081u, 0, FMOD_TOLERANCE, 0}, +{515, 996404791u, 3353251979u, 996404791u, 0, FMOD_TOLERANCE, 0}, +{516, 996786317u, 3179221951u, 996786317u, 0, FMOD_TOLERANCE, 0}, +{517, 1188167943u, 1200744896u, 1188167943u, 0, FMOD_TOLERANCE, 0}, +{518, 1102061604u, 3424449935u, 1102061604u, 0, FMOD_TOLERANCE, 0}, +{519, 3116209179u, 3303588342u, 3116209179u, 0, FMOD_TOLERANCE, 0}, +{520, 3207056527u, 3384206601u, 3207056527u, 0, FMOD_TOLERANCE, 0}, +{521, 1284174954u, 3436881197u, 1284174954u, 0, FMOD_TOLERANCE, 0}, +{522, 3156081645u, 3308839704u, 3156081645u, 0, FMOD_TOLERANCE, 0}, +{523, 1102631663u, 3396951425u, 1102631663u, 0, FMOD_TOLERANCE, 0}, +{524, 968803479u, 992989712u, 968803479u, 0, FMOD_TOLERANCE, 0}, +{525, 1003649752u, 1218792138u, 1003649752u, 0, FMOD_TOLERANCE, 0}, +{526, 1078478376u, 1326246424u, 1078478376u, 0, FMOD_TOLERANCE, 0}, +{527, 3158855023u, 3151283866u, 3149648964u, 0, FMOD_TOLERANCE, 0}, +{528, 1165177679u, 3276237026u, 1120720980u, 0, FMOD_TOLERANCE, 0}, +{529, 1208345407u, 1254181270u, 1208345407u, 0, FMOD_TOLERANCE, 0}, +{530, 1248478509u, 1287895126u, 1248478509u, 0, FMOD_TOLERANCE, 0}, +{531, 1153863988u, 3430539165u, 1153863988u, 0, FMOD_TOLERANCE, 0}, +{532, 1064922416u, 1320485628u, 1064922416u, 0, FMOD_TOLERANCE, 0}, +{533, 3230403187u, 1322841992u, 3230403187u, 0, FMOD_TOLERANCE, 0}, +{534, 1072458508u, 3372833993u, 1072458508u, 0, FMOD_TOLERANCE, 0}, +{535, 3319723279u, 3414482416u, 3319723279u, 0, FMOD_TOLERANCE, 0}, +{536, 3237813668u, 3441016803u, 3237813668u, 0, FMOD_TOLERANCE, 0}, +{537, 975349337u, 1311932596u, 975349337u, 0, FMOD_TOLERANCE, 0}, +{538, 981908840u, 3314038398u, 981908840u, 0, FMOD_TOLERANCE, 0}, +{539, 1315857601u, 3487600045u, 1315857601u, 0, FMOD_TOLERANCE, 0}, +{540, 1029557624u, 3302959071u, 1029557624u, 0, FMOD_TOLERANCE, 0}, +{541, 1028355074u, 3442294040u, 1028355074u, 0, FMOD_TOLERANCE, 0}, +{542, 3119299090u, 1187096397u, 3119299090u, 0, FMOD_TOLERANCE, 0}, +{543, 3192315328u, 3289489214u, 3192315328u, 0, FMOD_TOLERANCE, 0}, +{544, 3392827417u, 1277961150u, 3392827417u, 0, FMOD_TOLERANCE, 0}, +{545, 1161241793u, 1328003707u, 1161241793u, 0, FMOD_TOLERANCE, 0}, +{546, 1171318485u, 3374409104u, 1171318485u, 0, FMOD_TOLERANCE, 0}, +{547, 1127109339u, 3368125489u, 1127109339u, 0, FMOD_TOLERANCE, 0}, +{548, 1155775526u, 1255814444u, 1155775526u, 0, FMOD_TOLERANCE, 0}, +{549, 1234491880u, 3408568717u, 1234491880u, 0, FMOD_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_FMOD_H multiple inclusion protection + +// EOF fmod.h diff --git a/packages/language/c/libm/current/tests/vectors/frexpf.c b/packages/language/c/libm/current/tests/vectors/frexpf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/frexpf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// frexpf.c +// +// Test of frexpf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/frexpf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(frexpf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &frexpf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_INT_P, CYG_LIBM_TEST_VEC_FLOAT, + &frexpf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("frexpf() is stable"); + } // if + else + { + CYG_TEST_FAIL("frexpf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library frexpf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "frexpf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF frexpf.c diff --git a/packages/language/c/libm/current/tests/vectors/frexpf.h b/packages/language/c/libm/current/tests/vectors/frexpf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/frexpf.h @@ -0,0 +1,528 @@ +#ifndef CYGONCE_LIBM_FREXPF_H +#define CYGONCE_LIBM_FREXPF_H +//=========================================================================== +// +// frexpf.h +// +// Test vectors for testing of frexpf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: ilijak +// Date: 2013-06-26 +// Purpose: +// Description: +// Usage: #include "vectors/frexpf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define FREXPF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t frexpf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START +{0, 3519987949u, 37u, 3209609453u, 0, FREXPF_TOLERANCE, 0 }, // -1.1100E+11=F( -0.8076, +37) +{1, 3518632969u, 37u, 3208254473u, 0, FREXPF_TOLERANCE, 0 }, // -9.9900E+10=F( -0.7269, +37) +{2, 3517277989u, 37u, 3206899493u, 0, FREXPF_TOLERANCE, 0 }, // -8.8800E+10=F( -0.6461, +37) +{3, 3515923009u, 37u, 3205544513u, 0, FREXPF_TOLERANCE, 0 }, // -7.7700E+10=F( -0.5653, +37) +{4, 3514309305u, 36u, 3212319417u, 0, FREXPF_TOLERANCE, 0 }, // -6.6600E+10=F( -0.9692, +36) +{5, 3511599344u, 36u, 3209609456u, 0, FREXPF_TOLERANCE, 0 }, // -5.5500E+10=F( -0.8076, +36) +{6, 3508889383u, 36u, 3206899495u, 0, FREXPF_TOLERANCE, 0 }, // -4.4400E+10=F( -0.6461, +36) +{7, 3505920700u, 35u, 3212319420u, 0, FREXPF_TOLERANCE, 0 }, // -3.3300E+10=F( -0.9692, +35) +{8, 3500500778u, 35u, 3206899498u, 0, FREXPF_TOLERANCE, 0 }, // -2.2200E+10=F( -0.6461, +35) +{9, 3492112176u, 34u, 3206899504u, 0, FREXPF_TOLERANCE, 0 }, // -1.1100E+10=F( -0.6461, +34) +{10, 3326345216u, 14u, 3208904704u, 0, FREXPF_TOLERANCE, 0 }, // -1.2544E+04=F( -0.7656, +14) +{11, 3297435648u, 11u, 3205160960u, 0, FREXPF_TOLERANCE, 0 }, // -1.1110E+03=F( -0.5425, +11) +{12, 3296329728u, 10u, 3212443648u, 0, FREXPF_TOLERANCE, 0 }, // -1.0000E+03=F( -0.9766, +10) +{13, 3294511104u, 10u, 3210625024u, 0, FREXPF_TOLERANCE, 0 }, // -8.8900E+02=F( -0.8682, +10) +{14, 3292692480u, 10u, 3208806400u, 0, FREXPF_TOLERANCE, 0 }, // -7.7800E+02=F( -0.7598, +10) +{15, 3290873856u, 10u, 3206987776u, 0, FREXPF_TOLERANCE, 0 }, // -6.6700E+02=F( -0.6514, +10) +{16, 3289055232u, 10u, 3205169152u, 0, FREXPF_TOLERANCE, 0 }, // -5.5600E+02=F( -0.543, +10) +{17, 3286138880u, 9u, 3210641408u, 0, FREXPF_TOLERANCE, 0 }, // -4.4500E+02=F( -0.8691, +9) +{18, 3282501632u, 9u, 3207004160u, 0, FREXPF_TOLERANCE, 0 }, // -3.3400E+02=F( -0.6523, +9) +{19, 3277783040u, 8u, 3210674176u, 0, FREXPF_TOLERANCE, 0 }, // -2.2300E+02=F( -0.8711, +8) +{20, 3269459968u, 7u, 3210739712u, 0, FREXPF_TOLERANCE, 0 }, // -1.1200E+02=F( -0.875, +7) +{21, 3269328896u, 7u, 3210608640u, 0, FREXPF_TOLERANCE, 0 }, // -1.1100E+02=F( -0.8672, +7) +{22, 3269184717u, 7u, 3210464461u, 0, FREXPF_TOLERANCE, 0 }, // -1.0990E+02=F( -0.8586, +7) +{23, 3269040538u, 7u, 3210320282u, 0, FREXPF_TOLERANCE, 0 }, // -1.0880E+02=F( -0.85, +7) +{24, 3268896359u, 7u, 3210176103u, 0, FREXPF_TOLERANCE, 0 }, // -1.0770E+02=F( -0.8414, +7) +{25, 3268752180u, 7u, 3210031924u, 0, FREXPF_TOLERANCE, 0 }, // -1.0660E+02=F( -0.8328, +7) +{26, 3268608001u, 7u, 3209887745u, 0, FREXPF_TOLERANCE, 0 }, // -1.0550E+02=F( -0.8242, +7) +{27, 3268463822u, 7u, 3209743566u, 0, FREXPF_TOLERANCE, 0 }, // -1.0440E+02=F( -0.8156, +7) +{28, 3268319643u, 7u, 3209599387u, 0, FREXPF_TOLERANCE, 0 }, // -1.0330E+02=F( -0.807, +7) +{29, 3268175464u, 7u, 3209455208u, 0, FREXPF_TOLERANCE, 0 }, // -1.0220E+02=F( -0.7984, +7) +{30, 3268031285u, 7u, 3209311029u, 0, FREXPF_TOLERANCE, 0 }, // -1.0110E+02=F( -0.7898, +7) +{31, 3267887106u, 7u, 3209166850u, 0, FREXPF_TOLERANCE, 0 }, // -1.0000E+02=F( -0.7813, +7) +{32, 3267742927u, 7u, 3209022671u, 0, FREXPF_TOLERANCE, 0 }, // -9.8900E+01=F( -0.7727, +7) +{33, 3267598748u, 7u, 3208878492u, 0, FREXPF_TOLERANCE, 0 }, // -9.7800E+01=F( -0.7641, +7) +{34, 3267454569u, 7u, 3208734313u, 0, FREXPF_TOLERANCE, 0 }, // -9.6700E+01=F( -0.7555, +7) +{35, 3267310390u, 7u, 3208590134u, 0, FREXPF_TOLERANCE, 0 }, // -9.5600E+01=F( -0.7469, +7) +{36, 3267166211u, 7u, 3208445955u, 0, FREXPF_TOLERANCE, 0 }, // -9.4500E+01=F( -0.7383, +7) +{37, 3267022032u, 7u, 3208301776u, 0, FREXPF_TOLERANCE, 0 }, // -9.3400E+01=F( -0.7297, +7) +{38, 3266877853u, 7u, 3208157597u, 0, FREXPF_TOLERANCE, 0 }, // -9.2300E+01=F( -0.7211, +7) +{39, 3266733674u, 7u, 3208013418u, 0, FREXPF_TOLERANCE, 0 }, // -9.1200E+01=F( -0.7125, +7) +{40, 3266589495u, 7u, 3207869239u, 0, FREXPF_TOLERANCE, 0 }, // -9.0100E+01=F( -0.7039, +7) +{41, 3266445316u, 7u, 3207725060u, 0, FREXPF_TOLERANCE, 0 }, // -8.9000E+01=F( -0.6953, +7) +{42, 3266301137u, 7u, 3207580881u, 0, FREXPF_TOLERANCE, 0 }, // -8.7900E+01=F( -0.6867, +7) +{43, 3266156958u, 7u, 3207436702u, 0, FREXPF_TOLERANCE, 0 }, // -8.6800E+01=F( -0.6781, +7) +{44, 3266012779u, 7u, 3207292523u, 0, FREXPF_TOLERANCE, 0 }, // -8.5700E+01=F( -0.6695, +7) +{45, 3265868600u, 7u, 3207148344u, 0, FREXPF_TOLERANCE, 0 }, // -8.4600E+01=F( -0.6609, +7) +{46, 3265724421u, 7u, 3207004165u, 0, FREXPF_TOLERANCE, 0 }, // -8.3500E+01=F( -0.6523, +7) +{47, 3265580242u, 7u, 3206859986u, 0, FREXPF_TOLERANCE, 0 }, // -8.2400E+01=F( -0.6438, +7) +{48, 3265436063u, 7u, 3206715807u, 0, FREXPF_TOLERANCE, 0 }, // -8.1300E+01=F( -0.6352, +7) +{49, 3265291884u, 7u, 3206571628u, 0, FREXPF_TOLERANCE, 0 }, // -8.0200E+01=F( -0.6266, +7) +{50, 3265147705u, 7u, 3206427449u, 0, FREXPF_TOLERANCE, 0 }, // -7.9100E+01=F( -0.618, +7) +{51, 3265003526u, 7u, 3206283270u, 0, FREXPF_TOLERANCE, 0 }, // -7.8000E+01=F( -0.6094, +7) +{52, 3264859347u, 7u, 3206139091u, 0, FREXPF_TOLERANCE, 0 }, // -7.6900E+01=F( -0.6008, +7) +{53, 3264715168u, 7u, 3205994912u, 0, FREXPF_TOLERANCE, 0 }, // -7.5800E+01=F( -0.5922, +7) +{54, 3264570989u, 7u, 3205850733u, 0, FREXPF_TOLERANCE, 0 }, // -7.4700E+01=F( -0.5836, +7) +{55, 3264426810u, 7u, 3205706554u, 0, FREXPF_TOLERANCE, 0 }, // -7.3600E+01=F( -0.575, +7) +{56, 3264282631u, 7u, 3205562375u, 0, FREXPF_TOLERANCE, 0 }, // -7.2500E+01=F( -0.5664, +7) +{57, 3264138452u, 7u, 3205418196u, 0, FREXPF_TOLERANCE, 0 }, // -7.1400E+01=F( -0.5578, +7) +{58, 3263994273u, 7u, 3205274017u, 0, FREXPF_TOLERANCE, 0 }, // -7.0300E+01=F( -0.5492, +7) +{59, 3263850094u, 7u, 3205129838u, 0, FREXPF_TOLERANCE, 0 }, // -6.9200E+01=F( -0.5406, +7) +{60, 3263705915u, 7u, 3204985659u, 0, FREXPF_TOLERANCE, 0 }, // -6.8100E+01=F( -0.532, +7) +{61, 3263561736u, 7u, 3204841480u, 0, FREXPF_TOLERANCE, 0 }, // -6.7000E+01=F( -0.5234, +7) +{62, 3263417557u, 7u, 3204697301u, 0, FREXPF_TOLERANCE, 0 }, // -6.5900E+01=F( -0.5148, +7) +{63, 3263273378u, 7u, 3204553122u, 0, FREXPF_TOLERANCE, 0 }, // -6.4800E+01=F( -0.5063, +7) +{64, 3263089886u, 6u, 3212758238u, 0, FREXPF_TOLERANCE, 0 }, // -6.3700E+01=F( -0.9953, +6) +{65, 3262801528u, 6u, 3212469880u, 0, FREXPF_TOLERANCE, 0 }, // -6.2600E+01=F( -0.9781, +6) +{66, 3262513170u, 6u, 3212181522u, 0, FREXPF_TOLERANCE, 0 }, // -6.1500E+01=F( -0.9609, +6) +{67, 3262224812u, 6u, 3211893164u, 0, FREXPF_TOLERANCE, 0 }, // -6.0400E+01=F( -0.9438, +6) +{68, 3261936454u, 6u, 3211604806u, 0, FREXPF_TOLERANCE, 0 }, // -5.9300E+01=F( -0.9266, +6) +{69, 3261648096u, 6u, 3211316448u, 0, FREXPF_TOLERANCE, 0 }, // -5.8200E+01=F( -0.9094, +6) +{70, 3261359738u, 6u, 3211028090u, 0, FREXPF_TOLERANCE, 0 }, // -5.7100E+01=F( -0.8922, +6) +{71, 3261071380u, 6u, 3210739732u, 0, FREXPF_TOLERANCE, 0 }, // -5.6000E+01=F( -0.875, +6) +{72, 3260783022u, 6u, 3210451374u, 0, FREXPF_TOLERANCE, 0 }, // -5.4900E+01=F( -0.8578, +6) +{73, 3260494664u, 6u, 3210163016u, 0, FREXPF_TOLERANCE, 0 }, // -5.3800E+01=F( -0.8406, +6) +{74, 3260206306u, 6u, 3209874658u, 0, FREXPF_TOLERANCE, 0 }, // -5.2700E+01=F( -0.8234, +6) +{75, 3259917948u, 6u, 3209586300u, 0, FREXPF_TOLERANCE, 0 }, // -5.1600E+01=F( -0.8063, +6) +{76, 3259629590u, 6u, 3209297942u, 0, FREXPF_TOLERANCE, 0 }, // -5.0500E+01=F( -0.7891, +6) +{77, 3259341232u, 6u, 3209009584u, 0, FREXPF_TOLERANCE, 0 }, // -4.9400E+01=F( -0.7719, +6) +{78, 3259052874u, 6u, 3208721226u, 0, FREXPF_TOLERANCE, 0 }, // -4.8300E+01=F( -0.7547, +6) +{79, 3258764516u, 6u, 3208432868u, 0, FREXPF_TOLERANCE, 0 }, // -4.7200E+01=F( -0.7375, +6) +{80, 3258476158u, 6u, 3208144510u, 0, FREXPF_TOLERANCE, 0 }, // -4.6100E+01=F( -0.7203, +6) +{81, 3258187800u, 6u, 3207856152u, 0, FREXPF_TOLERANCE, 0 }, // -4.5000E+01=F( -0.7031, +6) +{82, 3257899442u, 6u, 3207567794u, 0, FREXPF_TOLERANCE, 0 }, // -4.3900E+01=F( -0.6859, +6) +{83, 3257611084u, 6u, 3207279436u, 0, FREXPF_TOLERANCE, 0 }, // -4.2800E+01=F( -0.6688, +6) +{84, 3257322726u, 6u, 3206991078u, 0, FREXPF_TOLERANCE, 0 }, // -4.1700E+01=F( -0.6516, +6) +{85, 3257034368u, 6u, 3206702720u, 0, FREXPF_TOLERANCE, 0 }, // -4.0600E+01=F( -0.6344, +6) +{86, 3256746010u, 6u, 3206414362u, 0, FREXPF_TOLERANCE, 0 }, // -3.9500E+01=F( -0.6172, +6) +{87, 3256457652u, 6u, 3206126004u, 0, FREXPF_TOLERANCE, 0 }, // -3.8400E+01=F( -0.6, +6) +{88, 3256169294u, 6u, 3205837646u, 0, FREXPF_TOLERANCE, 0 }, // -3.7300E+01=F( -0.5828, +6) +{89, 3255880936u, 6u, 3205549288u, 0, FREXPF_TOLERANCE, 0 }, // -3.6200E+01=F( -0.5656, +6) +{90, 3255592578u, 6u, 3205260930u, 0, FREXPF_TOLERANCE, 0 }, // -3.5100E+01=F( -0.5484, +6) +{91, 3255304220u, 6u, 3204972572u, 0, FREXPF_TOLERANCE, 0 }, // -3.4000E+01=F( -0.5313, +6) +{92, 3255015862u, 6u, 3204684214u, 0, FREXPF_TOLERANCE, 0 }, // -3.2900E+01=F( -0.5141, +6) +{93, 3254675103u, 5u, 3212732063u, 0, FREXPF_TOLERANCE, 0 }, // -3.1800E+01=F( -0.9938, +5) +{94, 3254098386u, 5u, 3212155346u, 0, FREXPF_TOLERANCE, 0 }, // -3.0700E+01=F( -0.9594, +5) +{95, 3253521669u, 5u, 3211578629u, 0, FREXPF_TOLERANCE, 0 }, // -2.9600E+01=F( -0.925, +5) +{96, 3252944952u, 5u, 3211001912u, 0, FREXPF_TOLERANCE, 0 }, // -2.8500E+01=F( -0.8906, +5) +{97, 3252368235u, 5u, 3210425195u, 0, FREXPF_TOLERANCE, 0 }, // -2.7400E+01=F( -0.8563, +5) +{98, 3251791518u, 5u, 3209848478u, 0, FREXPF_TOLERANCE, 0 }, // -2.6300E+01=F( -0.8219, +5) +{99, 3251214801u, 5u, 3209271761u, 0, FREXPF_TOLERANCE, 0 }, // -2.5200E+01=F( -0.7875, +5) +{100, 3250638084u, 5u, 3208695044u, 0, FREXPF_TOLERANCE, 0 }, // -2.4100E+01=F( -0.7531, +5) +{101, 3250061367u, 5u, 3208118327u, 0, FREXPF_TOLERANCE, 0 }, // -2.3000E+01=F( -0.7188, +5) +{102, 3249484650u, 5u, 3207541610u, 0, FREXPF_TOLERANCE, 0 }, // -2.1900E+01=F( -0.6844, +5) +{103, 3248907933u, 5u, 3206964893u, 0, FREXPF_TOLERANCE, 0 }, // -2.0800E+01=F( -0.65, +5) +{104, 3248331216u, 5u, 3206388176u, 0, FREXPF_TOLERANCE, 0 }, // -1.9700E+01=F( -0.6156, +5) +{105, 3247754499u, 5u, 3205811459u, 0, FREXPF_TOLERANCE, 0 }, // -1.8600E+01=F( -0.5813, +5) +{106, 3247177782u, 5u, 3205234742u, 0, FREXPF_TOLERANCE, 0 }, // -1.7500E+01=F( -0.5469, +5) +{107, 3246601065u, 5u, 3204658025u, 0, FREXPF_TOLERANCE, 0 }, // -1.6400E+01=F( -0.5125, +5) +{108, 3245657400u, 4u, 3212102968u, 0, FREXPF_TOLERANCE, 0 }, // -1.5300E+01=F( -0.9563, +4) +{109, 3244503966u, 4u, 3210949534u, 0, FREXPF_TOLERANCE, 0 }, // -1.4200E+01=F( -0.8875, +4) +{110, 3243350532u, 4u, 3209796100u, 0, FREXPF_TOLERANCE, 0 }, // -1.3100E+01=F( -0.8188, +4) +{111, 3242197098u, 4u, 3208642666u, 0, FREXPF_TOLERANCE, 0 }, // -1.2000E+01=F( -0.75, +4) +{112, 3241043664u, 4u, 3207489232u, 0, FREXPF_TOLERANCE, 0 }, // -1.0900E+01=F( -0.6813, +4) +{113, 3239890230u, 4u, 3206335798u, 0, FREXPF_TOLERANCE, 0 }, // -9.8001E+00=F( -0.6125, +4) +{114, 3238736796u, 4u, 3205182364u, 0, FREXPF_TOLERANCE, 0 }, // -8.7001E+00=F( -0.5438, +4) +{115, 3237164037u, 3u, 3211998213u, 0, FREXPF_TOLERANCE, 0 }, // -7.6001E+00=F( -0.95, +3) +{116, 3234857170u, 3u, 3209691346u, 0, FREXPF_TOLERANCE, 0 }, // -6.5001E+00=F( -0.8125, +3) +{117, 3232550303u, 3u, 3207384479u, 0, FREXPF_TOLERANCE, 0 }, // -5.4001E+00=F( -0.675, +3) +{118, 3230243436u, 3u, 3205077612u, 0, FREXPF_TOLERANCE, 0 }, // -4.3001E+00=F( -0.5375, +3) +{119, 3226259058u, 2u, 3209481842u, 0, FREXPF_TOLERANCE, 0 }, // -3.2001E+00=F( -0.8, +2) +{120, 3221645324u, 2u, 3204868108u, 0, FREXPF_TOLERANCE, 0 }, // -2.1001E+00=F( -0.525, +2) +{121, 3213675725u, 1u, 3205287117u, 0, FREXPF_TOLERANCE, 0 }, // -1.1000E+00=F( -0.55, +1) +{122, 3213583450u, 1u, 3205194842u, 0, FREXPF_TOLERANCE, 0 }, // -1.0890E+00=F( -0.5445, +1) +{123, 3213491175u, 1u, 3205102567u, 0, FREXPF_TOLERANCE, 0 }, // -1.0780E+00=F( -0.539, +1) +{124, 3213398900u, 1u, 3205010292u, 0, FREXPF_TOLERANCE, 0 }, // -1.0670E+00=F( -0.5335, +1) +{125, 3213306625u, 1u, 3204918017u, 0, FREXPF_TOLERANCE, 0 }, // -1.0560E+00=F( -0.528, +1) +{126, 3213214350u, 1u, 3204825742u, 0, FREXPF_TOLERANCE, 0 }, // -1.0450E+00=F( -0.5225, +1) +{127, 3213122075u, 1u, 3204733467u, 0, FREXPF_TOLERANCE, 0 }, // -1.0340E+00=F( -0.517, +1) +{128, 3213029800u, 1u, 3204641192u, 0, FREXPF_TOLERANCE, 0 }, // -1.0230E+00=F( -0.5115, +1) +{129, 3212937525u, 1u, 3204548917u, 0, FREXPF_TOLERANCE, 0 }, // -1.0120E+00=F( -0.506, +1) +{130, 3212845250u, 1u, 3204456642u, 0, FREXPF_TOLERANCE, 0 }, // -1.0010E+00=F( -0.5005, +1) +{131, 3212669087u, 0u, 3212669087u, 0, FREXPF_TOLERANCE, 0 }, // -9.9000E-01=F( -0.99, +0) +{132, 3212484538u, 0u, 3212484538u, 0, FREXPF_TOLERANCE, 0 }, // -9.7900E-01=F( -0.979, +0) +{133, 3212299989u, 0u, 3212299989u, 0, FREXPF_TOLERANCE, 0 }, // -9.6800E-01=F( -0.968, +0) +{134, 3212115440u, 0u, 3212115440u, 0, FREXPF_TOLERANCE, 0 }, // -9.5700E-01=F( -0.957, +0) +{135, 3211930891u, 0u, 3211930891u, 0, FREXPF_TOLERANCE, 0 }, // -9.4600E-01=F( -0.946, +0) +{136, 3211746342u, 0u, 3211746342u, 0, FREXPF_TOLERANCE, 0 }, // -9.3500E-01=F( -0.935, +0) +{137, 3211561793u, 0u, 3211561793u, 0, FREXPF_TOLERANCE, 0 }, // -9.2400E-01=F( -0.924, +0) +{138, 3211377244u, 0u, 3211377244u, 0, FREXPF_TOLERANCE, 0 }, // -9.1300E-01=F( -0.913, +0) +{139, 3211192695u, 0u, 3211192695u, 0, FREXPF_TOLERANCE, 0 }, // -9.0200E-01=F( -0.902, +0) +{140, 3211008146u, 0u, 3211008146u, 0, FREXPF_TOLERANCE, 0 }, // -8.9100E-01=F( -0.891, +0) +{141, 3210823597u, 0u, 3210823597u, 0, FREXPF_TOLERANCE, 0 }, // -8.8000E-01=F( -0.88, +0) +{142, 3210639048u, 0u, 3210639048u, 0, FREXPF_TOLERANCE, 0 }, // -8.6900E-01=F( -0.869, +0) +{143, 3210454499u, 0u, 3210454499u, 0, FREXPF_TOLERANCE, 0 }, // -8.5800E-01=F( -0.858, +0) +{144, 3210269950u, 0u, 3210269950u, 0, FREXPF_TOLERANCE, 0 }, // -8.4700E-01=F( -0.847, +0) +{145, 3210085401u, 0u, 3210085401u, 0, FREXPF_TOLERANCE, 0 }, // -8.3600E-01=F( -0.836, +0) +{146, 3209900852u, 0u, 3209900852u, 0, FREXPF_TOLERANCE, 0 }, // -8.2500E-01=F( -0.825, +0) +{147, 3209716303u, 0u, 3209716303u, 0, FREXPF_TOLERANCE, 0 }, // -8.1400E-01=F( -0.814, +0) +{148, 3209531754u, 0u, 3209531754u, 0, FREXPF_TOLERANCE, 0 }, // -8.0300E-01=F( -0.803, +0) +{149, 3209347205u, 0u, 3209347205u, 0, FREXPF_TOLERANCE, 0 }, // -7.9200E-01=F( -0.792, +0) +{150, 3209162656u, 0u, 3209162656u, 0, FREXPF_TOLERANCE, 0 }, // -7.8100E-01=F( -0.781, +0) +{151, 3208978107u, 0u, 3208978107u, 0, FREXPF_TOLERANCE, 0 }, // -7.7000E-01=F( -0.77, +0) +{152, 3208793558u, 0u, 3208793558u, 0, FREXPF_TOLERANCE, 0 }, // -7.5900E-01=F( -0.759, +0) +{153, 3208609009u, 0u, 3208609009u, 0, FREXPF_TOLERANCE, 0 }, // -7.4800E-01=F( -0.748, +0) +{154, 3208424460u, 0u, 3208424460u, 0, FREXPF_TOLERANCE, 0 }, // -7.3700E-01=F( -0.737, +0) +{155, 3208239911u, 0u, 3208239911u, 0, FREXPF_TOLERANCE, 0 }, // -7.2600E-01=F( -0.726, +0) +{156, 3208055362u, 0u, 3208055362u, 0, FREXPF_TOLERANCE, 0 }, // -7.1500E-01=F( -0.715, +0) +{157, 3207870813u, 0u, 3207870813u, 0, FREXPF_TOLERANCE, 0 }, // -7.0400E-01=F( -0.704, +0) +{158, 3207686264u, 0u, 3207686264u, 0, FREXPF_TOLERANCE, 0 }, // -6.9300E-01=F( -0.693, +0) +{159, 3207501715u, 0u, 3207501715u, 0, FREXPF_TOLERANCE, 0 }, // -6.8200E-01=F( -0.682, +0) +{160, 3207317166u, 0u, 3207317166u, 0, FREXPF_TOLERANCE, 0 }, // -6.7100E-01=F( -0.671, +0) +{161, 3207132617u, 0u, 3207132617u, 0, FREXPF_TOLERANCE, 0 }, // -6.6000E-01=F( -0.66, +0) +{162, 3206948068u, 0u, 3206948068u, 0, FREXPF_TOLERANCE, 0 }, // -6.4900E-01=F( -0.649, +0) +{163, 3206763519u, 0u, 3206763519u, 0, FREXPF_TOLERANCE, 0 }, // -6.3800E-01=F( -0.638, +0) +{164, 3206578970u, 0u, 3206578970u, 0, FREXPF_TOLERANCE, 0 }, // -6.2700E-01=F( -0.627, +0) +{165, 3206394421u, 0u, 3206394421u, 0, FREXPF_TOLERANCE, 0 }, // -6.1600E-01=F( -0.616, +0) +{166, 3206209872u, 0u, 3206209872u, 0, FREXPF_TOLERANCE, 0 }, // -6.0500E-01=F( -0.605, +0) +{167, 3206025323u, 0u, 3206025323u, 0, FREXPF_TOLERANCE, 0 }, // -5.9400E-01=F( -0.594, +0) +{168, 3205840774u, 0u, 3205840774u, 0, FREXPF_TOLERANCE, 0 }, // -5.8300E-01=F( -0.583, +0) +{169, 3205656225u, 0u, 3205656225u, 0, FREXPF_TOLERANCE, 0 }, // -5.7200E-01=F( -0.572, +0) +{170, 3205471676u, 0u, 3205471676u, 0, FREXPF_TOLERANCE, 0 }, // -5.6100E-01=F( -0.561, +0) +{171, 3205287127u, 0u, 3205287127u, 0, FREXPF_TOLERANCE, 0 }, // -5.5000E-01=F( -0.55, +0) +{172, 3205102578u, 0u, 3205102578u, 0, FREXPF_TOLERANCE, 0 }, // -5.3900E-01=F( -0.539, +0) +{173, 3204918029u, 0u, 3204918029u, 0, FREXPF_TOLERANCE, 0 }, // -5.2800E-01=F( -0.528, +0) +{174, 3204733480u, 0u, 3204733480u, 0, FREXPF_TOLERANCE, 0 }, // -5.1700E-01=F( -0.517, +0) +{175, 3204548931u, 0u, 3204548931u, 0, FREXPF_TOLERANCE, 0 }, // -5.0600E-01=F( -0.506, +0) +{176, 3204280507u, 4294967295u, 3212669115u, 0, FREXPF_TOLERANCE, 0 }, // -4.9500E-01=F( -0.99, -1) +{177, 3203911408u, 4294967295u, 3212300016u, 0, FREXPF_TOLERANCE, 0 }, // -4.8400E-01=F( -0.968, -1) +{178, 3203542309u, 4294967295u, 3211930917u, 0, FREXPF_TOLERANCE, 0 }, // -4.7300E-01=F( -0.946, -1) +{179, 3203173210u, 4294967295u, 3211561818u, 0, FREXPF_TOLERANCE, 0 }, // -4.6200E-01=F( -0.924, -1) +{180, 3202804111u, 4294967295u, 3211192719u, 0, FREXPF_TOLERANCE, 0 }, // -4.5100E-01=F( -0.902, -1) +{181, 3202435012u, 4294967295u, 3210823620u, 0, FREXPF_TOLERANCE, 0 }, // -4.4000E-01=F( -0.88, -1) +{182, 3202065913u, 4294967295u, 3210454521u, 0, FREXPF_TOLERANCE, 0 }, // -4.2900E-01=F( -0.858, -1) +{183, 3201696814u, 4294967295u, 3210085422u, 0, FREXPF_TOLERANCE, 0 }, // -4.1800E-01=F( -0.836, -1) +{184, 3201327715u, 4294967295u, 3209716323u, 0, FREXPF_TOLERANCE, 0 }, // -4.0700E-01=F( -0.814, -1) +{185, 3200958616u, 4294967295u, 3209347224u, 0, FREXPF_TOLERANCE, 0 }, // -3.9600E-01=F( -0.792, -1) +{186, 3200589517u, 4294967295u, 3208978125u, 0, FREXPF_TOLERANCE, 0 }, // -3.8500E-01=F( -0.77, -1) +{187, 3200220418u, 4294967295u, 3208609026u, 0, FREXPF_TOLERANCE, 0 }, // -3.7400E-01=F( -0.748, -1) +{188, 3199851319u, 4294967295u, 3208239927u, 0, FREXPF_TOLERANCE, 0 }, // -3.6300E-01=F( -0.726, -1) +{189, 3199482220u, 4294967295u, 3207870828u, 0, FREXPF_TOLERANCE, 0 }, // -3.5200E-01=F( -0.704, -1) +{190, 3199113121u, 4294967295u, 3207501729u, 0, FREXPF_TOLERANCE, 0 }, // -3.4100E-01=F( -0.682, -1) +{191, 3198744022u, 4294967295u, 3207132630u, 0, FREXPF_TOLERANCE, 0 }, // -3.3000E-01=F( -0.66, -1) +{192, 3198374923u, 4294967295u, 3206763531u, 0, FREXPF_TOLERANCE, 0 }, // -3.1900E-01=F( -0.638, -1) +{193, 3198005824u, 4294967295u, 3206394432u, 0, FREXPF_TOLERANCE, 0 }, // -3.0800E-01=F( -0.616, -1) +{194, 3197636725u, 4294967295u, 3206025333u, 0, FREXPF_TOLERANCE, 0 }, // -2.9700E-01=F( -0.594, -1) +{195, 3197267626u, 4294967295u, 3205656234u, 0, FREXPF_TOLERANCE, 0 }, // -2.8600E-01=F( -0.572, -1) +{196, 3196898527u, 4294967295u, 3205287135u, 0, FREXPF_TOLERANCE, 0 }, // -2.7500E-01=F( -0.55, -1) +{197, 3196529428u, 4294967295u, 3204918036u, 0, FREXPF_TOLERANCE, 0 }, // -2.6400E-01=F( -0.528, -1) +{198, 3196160329u, 4294967295u, 3204548937u, 0, FREXPF_TOLERANCE, 0 }, // -2.5300E-01=F( -0.506, -1) +{199, 3195522812u, 4294967294u, 3212300028u, 0, FREXPF_TOLERANCE, 0 }, // -2.4200E-01=F( -0.968, -2) +{200, 3194784614u, 4294967294u, 3211561830u, 0, FREXPF_TOLERANCE, 0 }, // -2.3100E-01=F( -0.924, -2) +{201, 3194046416u, 4294967294u, 3210823632u, 0, FREXPF_TOLERANCE, 0 }, // -2.2000E-01=F( -0.88, -2) +{202, 3193308218u, 4294967294u, 3210085434u, 0, FREXPF_TOLERANCE, 0 }, // -2.0900E-01=F( -0.836, -2) +{203, 3192570020u, 4294967294u, 3209347236u, 0, FREXPF_TOLERANCE, 0 }, // -1.9800E-01=F( -0.792, -2) +{204, 3191831822u, 4294967294u, 3208609038u, 0, FREXPF_TOLERANCE, 0 }, // -1.8700E-01=F( -0.748, -2) +{205, 3191093624u, 4294967294u, 3207870840u, 0, FREXPF_TOLERANCE, 0 }, // -1.7600E-01=F( -0.704, -2) +{206, 3190355426u, 4294967294u, 3207132642u, 0, FREXPF_TOLERANCE, 0 }, // -1.6500E-01=F( -0.66, -2) +{207, 3189617228u, 4294967294u, 3206394444u, 0, FREXPF_TOLERANCE, 0 }, // -1.5400E-01=F( -0.616, -2) +{208, 3188879030u, 4294967294u, 3205656246u, 0, FREXPF_TOLERANCE, 0 }, // -1.4300E-01=F( -0.572, -2) +{209, 3188140832u, 4294967294u, 3204918048u, 0, FREXPF_TOLERANCE, 0 }, // -1.3200E-01=F( -0.528, -2) +{210, 3187134229u, 4294967293u, 3212300053u, 0, FREXPF_TOLERANCE, 0 }, // -1.2100E-01=F( -0.968, -3) +{211, 3185657834u, 4294967293u, 3210823658u, 0, FREXPF_TOLERANCE, 0 }, // -1.1000E-01=F( -0.88, -3) +{212, 3184181439u, 4294967293u, 3209347263u, 0, FREXPF_TOLERANCE, 0 }, // -9.9000E-02=F( -0.792, -3) +{213, 3182705044u, 4294967293u, 3207870868u, 0, FREXPF_TOLERANCE, 0 }, // -8.8000E-02=F( -0.704, -3) +{214, 3181228649u, 4294967293u, 3206394473u, 0, FREXPF_TOLERANCE, 0 }, // -7.7000E-02=F( -0.616, -3) +{215, 3179752254u, 4294967293u, 3204918078u, 0, FREXPF_TOLERANCE, 0 }, // -6.6000E-02=F( -0.528, -3) +{216, 3177269286u, 4294967292u, 3210823718u, 0, FREXPF_TOLERANCE, 0 }, // -5.5000E-02=F( -0.88, -4) +{217, 3174316496u, 4294967292u, 3207870928u, 0, FREXPF_TOLERANCE, 0 }, // -4.4000E-02=F( -0.704, -4) +{218, 3171363706u, 4294967292u, 3204918138u, 0, FREXPF_TOLERANCE, 0 }, // -3.3000E-02=F( -0.528, -4) +{219, 3165928008u, 4294967291u, 3207871048u, 0, FREXPF_TOLERANCE, 0 }, // -2.2000E-02=F( -0.704, -5) +{220, 3157539640u, 4294967290u, 3207871288u, 0, FREXPF_TOLERANCE, 0 }, // -1.1000E-02=F( -0.704, -6) +{221, 3035625423u, 4294967275u, 3211786191u, 0, FREXPF_TOLERANCE, 0 }, // -4.4698E-07=F( -0.9374, -21) +{222, 1010055032u, 4294967290u, 1060386680u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E-02=F( +0.704, -6) +{223, 1018443880u, 4294967291u, 1060386920u, 0, FREXPF_TOLERANCE, 0 }, // +2.2000E-02=F( +0.704, -5) +{224, 1023879818u, 4294967292u, 1057434250u, 0, FREXPF_TOLERANCE, 0 }, // +3.3000E-02=F( +0.528, -4) +{225, 1026832608u, 4294967292u, 1060387040u, 0, FREXPF_TOLERANCE, 0 }, // +4.4000E-02=F( +0.704, -4) +{226, 1029785398u, 4294967292u, 1063339830u, 0, FREXPF_TOLERANCE, 0 }, // +5.5000E-02=F( +0.88, -4) +{227, 1032268486u, 4294967293u, 1057434310u, 0, FREXPF_TOLERANCE, 0 }, // +6.6000E-02=F( +0.528, -3) +{228, 1033744881u, 4294967293u, 1058910705u, 0, FREXPF_TOLERANCE, 0 }, // +7.7000E-02=F( +0.616, -3) +{229, 1035221276u, 4294967293u, 1060387100u, 0, FREXPF_TOLERANCE, 0 }, // +8.8000E-02=F( +0.704, -3) +{230, 1036697671u, 4294967293u, 1061863495u, 0, FREXPF_TOLERANCE, 0 }, // +9.9000E-02=F( +0.792, -3) +{231, 1038174066u, 4294967293u, 1063339890u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E-01=F( +0.88, -3) +{232, 1039650461u, 4294967293u, 1064816285u, 0, FREXPF_TOLERANCE, 0 }, // +1.2100E-01=F( +0.968, -3) +{233, 1040657124u, 4294967294u, 1057434340u, 0, FREXPF_TOLERANCE, 0 }, // +1.3200E-01=F( +0.528, -2) +{234, 1041395322u, 4294967294u, 1058172538u, 0, FREXPF_TOLERANCE, 0 }, // +1.4300E-01=F( +0.572, -2) +{235, 1042133520u, 4294967294u, 1058910736u, 0, FREXPF_TOLERANCE, 0 }, // +1.5400E-01=F( +0.616, -2) +{236, 1042871718u, 4294967294u, 1059648934u, 0, FREXPF_TOLERANCE, 0 }, // +1.6500E-01=F( +0.66, -2) +{237, 1043609916u, 4294967294u, 1060387132u, 0, FREXPF_TOLERANCE, 0 }, // +1.7600E-01=F( +0.704, -2) +{238, 1044348114u, 4294967294u, 1061125330u, 0, FREXPF_TOLERANCE, 0 }, // +1.8700E-01=F( +0.748, -2) +{239, 1045086312u, 4294967294u, 1061863528u, 0, FREXPF_TOLERANCE, 0 }, // +1.9800E-01=F( +0.792, -2) +{240, 1045824510u, 4294967294u, 1062601726u, 0, FREXPF_TOLERANCE, 0 }, // +2.0900E-01=F( +0.836, -2) +{241, 1046562708u, 4294967294u, 1063339924u, 0, FREXPF_TOLERANCE, 0 }, // +2.2000E-01=F( +0.88, -2) +{242, 1047300906u, 4294967294u, 1064078122u, 0, FREXPF_TOLERANCE, 0 }, // +2.3100E-01=F( +0.924, -2) +{243, 1048039104u, 4294967294u, 1064816320u, 0, FREXPF_TOLERANCE, 0 }, // +2.4200E-01=F( +0.968, -2) +{244, 1048676651u, 4294967295u, 1057065259u, 0, FREXPF_TOLERANCE, 0 }, // +2.5300E-01=F( +0.506, -1) +{245, 1049045750u, 4294967295u, 1057434358u, 0, FREXPF_TOLERANCE, 0 }, // +2.6400E-01=F( +0.528, -1) +{246, 1049414849u, 4294967295u, 1057803457u, 0, FREXPF_TOLERANCE, 0 }, // +2.7500E-01=F( +0.55, -1) +{247, 1049783948u, 4294967295u, 1058172556u, 0, FREXPF_TOLERANCE, 0 }, // +2.8600E-01=F( +0.572, -1) +{248, 1050153047u, 4294967295u, 1058541655u, 0, FREXPF_TOLERANCE, 0 }, // +2.9700E-01=F( +0.594, -1) +{249, 1050522146u, 4294967295u, 1058910754u, 0, FREXPF_TOLERANCE, 0 }, // +3.0800E-01=F( +0.616, -1) +{250, 1050891245u, 4294967295u, 1059279853u, 0, FREXPF_TOLERANCE, 0 }, // +3.1900E-01=F( +0.638, -1) +{251, 1051260344u, 4294967295u, 1059648952u, 0, FREXPF_TOLERANCE, 0 }, // +3.3000E-01=F( +0.66, -1) +{252, 1051629443u, 4294967295u, 1060018051u, 0, FREXPF_TOLERANCE, 0 }, // +3.4100E-01=F( +0.682, -1) +{253, 1051998542u, 4294967295u, 1060387150u, 0, FREXPF_TOLERANCE, 0 }, // +3.5200E-01=F( +0.704, -1) +{254, 1052367641u, 4294967295u, 1060756249u, 0, FREXPF_TOLERANCE, 0 }, // +3.6300E-01=F( +0.726, -1) +{255, 1052736740u, 4294967295u, 1061125348u, 0, FREXPF_TOLERANCE, 0 }, // +3.7400E-01=F( +0.748, -1) +{256, 1053105839u, 4294967295u, 1061494447u, 0, FREXPF_TOLERANCE, 0 }, // +3.8500E-01=F( +0.77, -1) +{257, 1053474938u, 4294967295u, 1061863546u, 0, FREXPF_TOLERANCE, 0 }, // +3.9600E-01=F( +0.792, -1) +{258, 1053844037u, 4294967295u, 1062232645u, 0, FREXPF_TOLERANCE, 0 }, // +4.0700E-01=F( +0.814, -1) +{259, 1054213136u, 4294967295u, 1062601744u, 0, FREXPF_TOLERANCE, 0 }, // +4.1800E-01=F( +0.836, -1) +{260, 1054582235u, 4294967295u, 1062970843u, 0, FREXPF_TOLERANCE, 0 }, // +4.2900E-01=F( +0.858, -1) +{261, 1054951334u, 4294967295u, 1063339942u, 0, FREXPF_TOLERANCE, 0 }, // +4.4000E-01=F( +0.88, -1) +{262, 1055320433u, 4294967295u, 1063709041u, 0, FREXPF_TOLERANCE, 0 }, // +4.5100E-01=F( +0.902, -1) +{263, 1055689532u, 4294967295u, 1064078140u, 0, FREXPF_TOLERANCE, 0 }, // +4.6200E-01=F( +0.924, -1) +{264, 1056058631u, 4294967295u, 1064447239u, 0, FREXPF_TOLERANCE, 0 }, // +4.7300E-01=F( +0.946, -1) +{265, 1056427730u, 4294967295u, 1064816338u, 0, FREXPF_TOLERANCE, 0 }, // +4.8400E-01=F( +0.968, -1) +{266, 1056796829u, 4294967295u, 1065185437u, 0, FREXPF_TOLERANCE, 0 }, // +4.9500E-01=F( +0.99, -1) +{267, 1057065268u, 0u, 1057065268u, 0, FREXPF_TOLERANCE, 0 }, // +5.0600E-01=F( +0.506, +0) +{268, 1057249817u, 0u, 1057249817u, 0, FREXPF_TOLERANCE, 0 }, // +5.1700E-01=F( +0.517, +0) +{269, 1057434366u, 0u, 1057434366u, 0, FREXPF_TOLERANCE, 0 }, // +5.2800E-01=F( +0.528, +0) +{270, 1057618915u, 0u, 1057618915u, 0, FREXPF_TOLERANCE, 0 }, // +5.3900E-01=F( +0.539, +0) +{271, 1057803464u, 0u, 1057803464u, 0, FREXPF_TOLERANCE, 0 }, // +5.5000E-01=F( +0.55, +0) +{272, 1057988013u, 0u, 1057988013u, 0, FREXPF_TOLERANCE, 0 }, // +5.6100E-01=F( +0.561, +0) +{273, 1058172562u, 0u, 1058172562u, 0, FREXPF_TOLERANCE, 0 }, // +5.7200E-01=F( +0.572, +0) +{274, 1058357111u, 0u, 1058357111u, 0, FREXPF_TOLERANCE, 0 }, // +5.8300E-01=F( +0.583, +0) +{275, 1058541660u, 0u, 1058541660u, 0, FREXPF_TOLERANCE, 0 }, // +5.9400E-01=F( +0.594, +0) +{276, 1058726209u, 0u, 1058726209u, 0, FREXPF_TOLERANCE, 0 }, // +6.0500E-01=F( +0.605, +0) +{277, 1058910758u, 0u, 1058910758u, 0, FREXPF_TOLERANCE, 0 }, // +6.1600E-01=F( +0.616, +0) +{278, 1059095307u, 0u, 1059095307u, 0, FREXPF_TOLERANCE, 0 }, // +6.2700E-01=F( +0.627, +0) +{279, 1059279856u, 0u, 1059279856u, 0, FREXPF_TOLERANCE, 0 }, // +6.3800E-01=F( +0.638, +0) +{280, 1059464405u, 0u, 1059464405u, 0, FREXPF_TOLERANCE, 0 }, // +6.4900E-01=F( +0.649, +0) +{281, 1059648954u, 0u, 1059648954u, 0, FREXPF_TOLERANCE, 0 }, // +6.6000E-01=F( +0.66, +0) +{282, 1059833503u, 0u, 1059833503u, 0, FREXPF_TOLERANCE, 0 }, // +6.7100E-01=F( +0.671, +0) +{283, 1060018052u, 0u, 1060018052u, 0, FREXPF_TOLERANCE, 0 }, // +6.8200E-01=F( +0.682, +0) +{284, 1060202601u, 0u, 1060202601u, 0, FREXPF_TOLERANCE, 0 }, // +6.9300E-01=F( +0.693, +0) +{285, 1060387150u, 0u, 1060387150u, 0, FREXPF_TOLERANCE, 0 }, // +7.0400E-01=F( +0.704, +0) +{286, 1060571699u, 0u, 1060571699u, 0, FREXPF_TOLERANCE, 0 }, // +7.1500E-01=F( +0.715, +0) +{287, 1060756248u, 0u, 1060756248u, 0, FREXPF_TOLERANCE, 0 }, // +7.2600E-01=F( +0.726, +0) +{288, 1060940797u, 0u, 1060940797u, 0, FREXPF_TOLERANCE, 0 }, // +7.3700E-01=F( +0.737, +0) +{289, 1061125346u, 0u, 1061125346u, 0, FREXPF_TOLERANCE, 0 }, // +7.4800E-01=F( +0.748, +0) +{290, 1061309895u, 0u, 1061309895u, 0, FREXPF_TOLERANCE, 0 }, // +7.5900E-01=F( +0.759, +0) +{291, 1061494444u, 0u, 1061494444u, 0, FREXPF_TOLERANCE, 0 }, // +7.7000E-01=F( +0.77, +0) +{292, 1061678993u, 0u, 1061678993u, 0, FREXPF_TOLERANCE, 0 }, // +7.8100E-01=F( +0.781, +0) +{293, 1061863542u, 0u, 1061863542u, 0, FREXPF_TOLERANCE, 0 }, // +7.9200E-01=F( +0.792, +0) +{294, 1062048091u, 0u, 1062048091u, 0, FREXPF_TOLERANCE, 0 }, // +8.0300E-01=F( +0.803, +0) +{295, 1062232640u, 0u, 1062232640u, 0, FREXPF_TOLERANCE, 0 }, // +8.1400E-01=F( +0.814, +0) +{296, 1062417189u, 0u, 1062417189u, 0, FREXPF_TOLERANCE, 0 }, // +8.2500E-01=F( +0.825, +0) +{297, 1062601738u, 0u, 1062601738u, 0, FREXPF_TOLERANCE, 0 }, // +8.3600E-01=F( +0.836, +0) +{298, 1062786287u, 0u, 1062786287u, 0, FREXPF_TOLERANCE, 0 }, // +8.4700E-01=F( +0.847, +0) +{299, 1062970836u, 0u, 1062970836u, 0, FREXPF_TOLERANCE, 0 }, // +8.5800E-01=F( +0.858, +0) +{300, 1063155385u, 0u, 1063155385u, 0, FREXPF_TOLERANCE, 0 }, // +8.6900E-01=F( +0.869, +0) +{301, 1063339934u, 0u, 1063339934u, 0, FREXPF_TOLERANCE, 0 }, // +8.8000E-01=F( +0.88, +0) +{302, 1063524483u, 0u, 1063524483u, 0, FREXPF_TOLERANCE, 0 }, // +8.9100E-01=F( +0.891, +0) +{303, 1063709032u, 0u, 1063709032u, 0, FREXPF_TOLERANCE, 0 }, // +9.0200E-01=F( +0.902, +0) +{304, 1063893581u, 0u, 1063893581u, 0, FREXPF_TOLERANCE, 0 }, // +9.1300E-01=F( +0.913, +0) +{305, 1064078130u, 0u, 1064078130u, 0, FREXPF_TOLERANCE, 0 }, // +9.2400E-01=F( +0.924, +0) +{306, 1064262679u, 0u, 1064262679u, 0, FREXPF_TOLERANCE, 0 }, // +9.3500E-01=F( +0.935, +0) +{307, 1064447228u, 0u, 1064447228u, 0, FREXPF_TOLERANCE, 0 }, // +9.4600E-01=F( +0.946, +0) +{308, 1064631777u, 0u, 1064631777u, 0, FREXPF_TOLERANCE, 0 }, // +9.5700E-01=F( +0.957, +0) +{309, 1064816326u, 0u, 1064816326u, 0, FREXPF_TOLERANCE, 0 }, // +9.6800E-01=F( +0.968, +0) +{310, 1065000875u, 0u, 1065000875u, 0, FREXPF_TOLERANCE, 0 }, // +9.7900E-01=F( +0.979, +0) +{311, 1065185424u, 0u, 1065185424u, 0, FREXPF_TOLERANCE, 0 }, // +9.9000E-01=F( +0.99, +0) +{312, 1065361595u, 1u, 1056972987u, 0, FREXPF_TOLERANCE, 0 }, // +1.0010E+00=F( +0.5005, +1) +{313, 1065453870u, 1u, 1057065262u, 0, FREXPF_TOLERANCE, 0 }, // +1.0120E+00=F( +0.506, +1) +{314, 1065546145u, 1u, 1057157537u, 0, FREXPF_TOLERANCE, 0 }, // +1.0230E+00=F( +0.5115, +1) +{315, 1065638420u, 1u, 1057249812u, 0, FREXPF_TOLERANCE, 0 }, // +1.0340E+00=F( +0.517, +1) +{316, 1065730695u, 1u, 1057342087u, 0, FREXPF_TOLERANCE, 0 }, // +1.0450E+00=F( +0.5225, +1) +{317, 1065822970u, 1u, 1057434362u, 0, FREXPF_TOLERANCE, 0 }, // +1.0560E+00=F( +0.528, +1) +{318, 1065915245u, 1u, 1057526637u, 0, FREXPF_TOLERANCE, 0 }, // +1.0670E+00=F( +0.5335, +1) +{319, 1066007520u, 1u, 1057618912u, 0, FREXPF_TOLERANCE, 0 }, // +1.0780E+00=F( +0.539, +1) +{320, 1066099795u, 1u, 1057711187u, 0, FREXPF_TOLERANCE, 0 }, // +1.0890E+00=F( +0.5445, +1) +{321, 1066192070u, 1u, 1057803462u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E+00=F( +0.55, +1) +{322, 3213675725u, 1u, 3205287117u, 0, FREXPF_TOLERANCE, 0 }, // -1.1000E+00=F( -0.55, +1) +{323, 2999766221u, 4294967271u, 3209481421u, 0, FREXPF_TOLERANCE, 0 }, // -2.3842E-08=F( -0.8, -25) +{324, 1066192077u, 1u, 1057803469u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E+00=F( +0.55, +1) +{325, 1074580685u, 2u, 1057803469u, 0, FREXPF_TOLERANCE, 0 }, // +2.2000E+00=F( +0.55, +2) +{326, 1079194419u, 2u, 1062417203u, 0, FREXPF_TOLERANCE, 0 }, // +3.3000E+00=F( +0.825, +2) +{327, 1082969293u, 3u, 1057803469u, 0, FREXPF_TOLERANCE, 0 }, // +4.4000E+00=F( +0.55, +3) +{328, 1085276160u, 3u, 1060110336u, 0, FREXPF_TOLERANCE, 0 }, // +5.5000E+00=F( +0.6875, +3) +{329, 1087583027u, 3u, 1062417203u, 0, FREXPF_TOLERANCE, 0 }, // +6.6000E+00=F( +0.825, +3) +{330, 1089889894u, 3u, 1064724070u, 0, FREXPF_TOLERANCE, 0 }, // +7.7000E+00=F( +0.9625, +3) +{331, 1091357901u, 4u, 1057803469u, 0, FREXPF_TOLERANCE, 0 }, // +8.8000E+00=F( +0.55, +4) +{332, 1092511335u, 4u, 1058956903u, 0, FREXPF_TOLERANCE, 0 }, // +9.9000E+00=F( +0.6188, +4) +{333, 1093664769u, 4u, 1060110337u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E+01=F( +0.6875, +4) +{334, 1094818203u, 4u, 1061263771u, 0, FREXPF_TOLERANCE, 0 }, // +1.2100E+01=F( +0.7563, +4) +{335, 1095971637u, 4u, 1062417205u, 0, FREXPF_TOLERANCE, 0 }, // +1.3200E+01=F( +0.825, +4) +{336, 1097125071u, 4u, 1063570639u, 0, FREXPF_TOLERANCE, 0 }, // +1.4300E+01=F( +0.8938, +4) +{337, 1098278505u, 4u, 1064724073u, 0, FREXPF_TOLERANCE, 0 }, // +1.5400E+01=F( +0.9625, +4) +{338, 1099169793u, 5u, 1057226753u, 0, FREXPF_TOLERANCE, 0 }, // +1.6500E+01=F( +0.5156, +5) +{339, 1099746510u, 5u, 1057803470u, 0, FREXPF_TOLERANCE, 0 }, // +1.7600E+01=F( +0.55, +5) +{340, 1100323227u, 5u, 1058380187u, 0, FREXPF_TOLERANCE, 0 }, // +1.8700E+01=F( +0.5844, +5) +{341, 1100899944u, 5u, 1058956904u, 0, FREXPF_TOLERANCE, 0 }, // +1.9800E+01=F( +0.6188, +5) +{342, 1101476661u, 5u, 1059533621u, 0, FREXPF_TOLERANCE, 0 }, // +2.0900E+01=F( +0.6531, +5) +{343, 1102053378u, 5u, 1060110338u, 0, FREXPF_TOLERANCE, 0 }, // +2.2000E+01=F( +0.6875, +5) +{344, 1102630095u, 5u, 1060687055u, 0, FREXPF_TOLERANCE, 0 }, // +2.3100E+01=F( +0.7219, +5) +{345, 1103206812u, 5u, 1061263772u, 0, FREXPF_TOLERANCE, 0 }, // +2.4200E+01=F( +0.7563, +5) +{346, 1103783529u, 5u, 1061840489u, 0, FREXPF_TOLERANCE, 0 }, // +2.5300E+01=F( +0.7906, +5) +{347, 1104360246u, 5u, 1062417206u, 0, FREXPF_TOLERANCE, 0 }, // +2.6400E+01=F( +0.825, +5) +{348, 1104936963u, 5u, 1062993923u, 0, FREXPF_TOLERANCE, 0 }, // +2.7500E+01=F( +0.8594, +5) +{349, 1105513680u, 5u, 1063570640u, 0, FREXPF_TOLERANCE, 0 }, // +2.8600E+01=F( +0.8938, +5) +{350, 1106090397u, 5u, 1064147357u, 0, FREXPF_TOLERANCE, 0 }, // +2.9700E+01=F( +0.9281, +5) +{351, 1106667114u, 5u, 1064724074u, 0, FREXPF_TOLERANCE, 0 }, // +3.0800E+01=F( +0.9625, +5) +{352, 1107243831u, 5u, 1065300791u, 0, FREXPF_TOLERANCE, 0 }, // +3.1900E+01=F( +0.9969, +5) +{353, 1107558402u, 6u, 1057226754u, 0, FREXPF_TOLERANCE, 0 }, // +3.3000E+01=F( +0.5156, +6) +{354, 1107846760u, 6u, 1057515112u, 0, FREXPF_TOLERANCE, 0 }, // +3.4100E+01=F( +0.5328, +6) +{355, 1108135118u, 6u, 1057803470u, 0, FREXPF_TOLERANCE, 0 }, // +3.5200E+01=F( +0.55, +6) +{356, 1108423476u, 6u, 1058091828u, 0, FREXPF_TOLERANCE, 0 }, // +3.6300E+01=F( +0.5672, +6) +{357, 1108711834u, 6u, 1058380186u, 0, FREXPF_TOLERANCE, 0 }, // +3.7400E+01=F( +0.5844, +6) +{358, 1109000192u, 6u, 1058668544u, 0, FREXPF_TOLERANCE, 0 }, // +3.8500E+01=F( +0.6016, +6) +{359, 1109288550u, 6u, 1058956902u, 0, FREXPF_TOLERANCE, 0 }, // +3.9600E+01=F( +0.6187, +6) +{360, 1109576908u, 6u, 1059245260u, 0, FREXPF_TOLERANCE, 0 }, // +4.0700E+01=F( +0.6359, +6) +{361, 1109865266u, 6u, 1059533618u, 0, FREXPF_TOLERANCE, 0 }, // +4.1800E+01=F( +0.6531, +6) +{362, 1110153624u, 6u, 1059821976u, 0, FREXPF_TOLERANCE, 0 }, // +4.2900E+01=F( +0.6703, +6) +{363, 1110441982u, 6u, 1060110334u, 0, FREXPF_TOLERANCE, 0 }, // +4.4000E+01=F( +0.6875, +6) +{364, 1110730340u, 6u, 1060398692u, 0, FREXPF_TOLERANCE, 0 }, // +4.5100E+01=F( +0.7047, +6) +{365, 1111018698u, 6u, 1060687050u, 0, FREXPF_TOLERANCE, 0 }, // +4.6200E+01=F( +0.7219, +6) +{366, 1111307056u, 6u, 1060975408u, 0, FREXPF_TOLERANCE, 0 }, // +4.7300E+01=F( +0.7391, +6) +{367, 1111595414u, 6u, 1061263766u, 0, FREXPF_TOLERANCE, 0 }, // +4.8400E+01=F( +0.7562, +6) +{368, 1111883772u, 6u, 1061552124u, 0, FREXPF_TOLERANCE, 0 }, // +4.9500E+01=F( +0.7734, +6) +{369, 1112172130u, 6u, 1061840482u, 0, FREXPF_TOLERANCE, 0 }, // +5.0600E+01=F( +0.7906, +6) +{370, 1112460488u, 6u, 1062128840u, 0, FREXPF_TOLERANCE, 0 }, // +5.1700E+01=F( +0.8078, +6) +{371, 1112748846u, 6u, 1062417198u, 0, FREXPF_TOLERANCE, 0 }, // +5.2800E+01=F( +0.825, +6) +{372, 1113037204u, 6u, 1062705556u, 0, FREXPF_TOLERANCE, 0 }, // +5.3900E+01=F( +0.8422, +6) +{373, 1113325562u, 6u, 1062993914u, 0, FREXPF_TOLERANCE, 0 }, // +5.5000E+01=F( +0.8594, +6) +{374, 1113613920u, 6u, 1063282272u, 0, FREXPF_TOLERANCE, 0 }, // +5.6100E+01=F( +0.8766, +6) +{375, 1113902278u, 6u, 1063570630u, 0, FREXPF_TOLERANCE, 0 }, // +5.7200E+01=F( +0.8937, +6) +{376, 1114190636u, 6u, 1063858988u, 0, FREXPF_TOLERANCE, 0 }, // +5.8300E+01=F( +0.9109, +6) +{377, 1114478994u, 6u, 1064147346u, 0, FREXPF_TOLERANCE, 0 }, // +5.9400E+01=F( +0.9281, +6) +{378, 1114767352u, 6u, 1064435704u, 0, FREXPF_TOLERANCE, 0 }, // +6.0500E+01=F( +0.9453, +6) +{379, 1115055710u, 6u, 1064724062u, 0, FREXPF_TOLERANCE, 0 }, // +6.1600E+01=F( +0.9625, +6) +{380, 1115344068u, 6u, 1065012420u, 0, FREXPF_TOLERANCE, 0 }, // +6.2700E+01=F( +0.9797, +6) +{381, 1115632426u, 6u, 1065300778u, 0, FREXPF_TOLERANCE, 0 }, // +6.3800E+01=F( +0.9969, +6) +{382, 1115802824u, 7u, 1057082568u, 0, FREXPF_TOLERANCE, 0 }, // +6.4900E+01=F( +0.507, +7) +{383, 1115947003u, 7u, 1057226747u, 0, FREXPF_TOLERANCE, 0 }, // +6.6000E+01=F( +0.5156, +7) +{384, 1116091182u, 7u, 1057370926u, 0, FREXPF_TOLERANCE, 0 }, // +6.7100E+01=F( +0.5242, +7) +{385, 1116235361u, 7u, 1057515105u, 0, FREXPF_TOLERANCE, 0 }, // +6.8200E+01=F( +0.5328, +7) +{386, 1116379540u, 7u, 1057659284u, 0, FREXPF_TOLERANCE, 0 }, // +6.9300E+01=F( +0.5414, +7) +{387, 1116523719u, 7u, 1057803463u, 0, FREXPF_TOLERANCE, 0 }, // +7.0400E+01=F( +0.55, +7) +{388, 1116667898u, 7u, 1057947642u, 0, FREXPF_TOLERANCE, 0 }, // +7.1500E+01=F( +0.5586, +7) +{389, 1116812077u, 7u, 1058091821u, 0, FREXPF_TOLERANCE, 0 }, // +7.2600E+01=F( +0.5672, +7) +{390, 1116956256u, 7u, 1058236000u, 0, FREXPF_TOLERANCE, 0 }, // +7.3700E+01=F( +0.5758, +7) +{391, 1117100435u, 7u, 1058380179u, 0, FREXPF_TOLERANCE, 0 }, // +7.4800E+01=F( +0.5844, +7) +{392, 1117244614u, 7u, 1058524358u, 0, FREXPF_TOLERANCE, 0 }, // +7.5900E+01=F( +0.593, +7) +{393, 1117388793u, 7u, 1058668537u, 0, FREXPF_TOLERANCE, 0 }, // +7.7000E+01=F( +0.6016, +7) +{394, 1117532972u, 7u, 1058812716u, 0, FREXPF_TOLERANCE, 0 }, // +7.8100E+01=F( +0.6102, +7) +{395, 1117677151u, 7u, 1058956895u, 0, FREXPF_TOLERANCE, 0 }, // +7.9200E+01=F( +0.6187, +7) +{396, 1117821330u, 7u, 1059101074u, 0, FREXPF_TOLERANCE, 0 }, // +8.0300E+01=F( +0.6273, +7) +{397, 1117965509u, 7u, 1059245253u, 0, FREXPF_TOLERANCE, 0 }, // +8.1400E+01=F( +0.6359, +7) +{398, 1118109688u, 7u, 1059389432u, 0, FREXPF_TOLERANCE, 0 }, // +8.2500E+01=F( +0.6445, +7) +{399, 1118253867u, 7u, 1059533611u, 0, FREXPF_TOLERANCE, 0 }, // +8.3600E+01=F( +0.6531, +7) +{400, 1118398046u, 7u, 1059677790u, 0, FREXPF_TOLERANCE, 0 }, // +8.4700E+01=F( +0.6617, +7) +{401, 1118542225u, 7u, 1059821969u, 0, FREXPF_TOLERANCE, 0 }, // +8.5800E+01=F( +0.6703, +7) +{402, 1118686404u, 7u, 1059966148u, 0, FREXPF_TOLERANCE, 0 }, // +8.6900E+01=F( +0.6789, +7) +{403, 1118830583u, 7u, 1060110327u, 0, FREXPF_TOLERANCE, 0 }, // +8.8000E+01=F( +0.6875, +7) +{404, 1118974762u, 7u, 1060254506u, 0, FREXPF_TOLERANCE, 0 }, // +8.9100E+01=F( +0.6961, +7) +{405, 1119118941u, 7u, 1060398685u, 0, FREXPF_TOLERANCE, 0 }, // +9.0200E+01=F( +0.7047, +7) +{406, 1119263120u, 7u, 1060542864u, 0, FREXPF_TOLERANCE, 0 }, // +9.1300E+01=F( +0.7133, +7) +{407, 1119407299u, 7u, 1060687043u, 0, FREXPF_TOLERANCE, 0 }, // +9.2400E+01=F( +0.7219, +7) +{408, 1119551478u, 7u, 1060831222u, 0, FREXPF_TOLERANCE, 0 }, // +9.3500E+01=F( +0.7305, +7) +{409, 1119695657u, 7u, 1060975401u, 0, FREXPF_TOLERANCE, 0 }, // +9.4600E+01=F( +0.7391, +7) +{410, 1119839836u, 7u, 1061119580u, 0, FREXPF_TOLERANCE, 0 }, // +9.5700E+01=F( +0.7477, +7) +{411, 1119984015u, 7u, 1061263759u, 0, FREXPF_TOLERANCE, 0 }, // +9.6800E+01=F( +0.7562, +7) +{412, 1120128194u, 7u, 1061407938u, 0, FREXPF_TOLERANCE, 0 }, // +9.7900E+01=F( +0.7648, +7) +{413, 1120272373u, 7u, 1061552117u, 0, FREXPF_TOLERANCE, 0 }, // +9.9000E+01=F( +0.7734, +7) +{414, 1120416552u, 7u, 1061696296u, 0, FREXPF_TOLERANCE, 0 }, // +1.0010E+02=F( +0.782, +7) +{415, 1120560731u, 7u, 1061840475u, 0, FREXPF_TOLERANCE, 0 }, // +1.0120E+02=F( +0.7906, +7) +{416, 1120704910u, 7u, 1061984654u, 0, FREXPF_TOLERANCE, 0 }, // +1.0230E+02=F( +0.7992, +7) +{417, 1120849089u, 7u, 1062128833u, 0, FREXPF_TOLERANCE, 0 }, // +1.0340E+02=F( +0.8078, +7) +{418, 1120993268u, 7u, 1062273012u, 0, FREXPF_TOLERANCE, 0 }, // +1.0450E+02=F( +0.8164, +7) +{419, 1121137447u, 7u, 1062417191u, 0, FREXPF_TOLERANCE, 0 }, // +1.0560E+02=F( +0.825, +7) +{420, 1121281626u, 7u, 1062561370u, 0, FREXPF_TOLERANCE, 0 }, // +1.0670E+02=F( +0.8336, +7) +{421, 1121425805u, 7u, 1062705549u, 0, FREXPF_TOLERANCE, 0 }, // +1.0780E+02=F( +0.8422, +7) +{422, 1121569984u, 7u, 1062849728u, 0, FREXPF_TOLERANCE, 0 }, // +1.0890E+02=F( +0.8508, +7) +{423, 1121714163u, 7u, 1062993907u, 0, FREXPF_TOLERANCE, 0 }, // +1.1000E+02=F( +0.8594, +7) +{424, 1121845248u, 7u, 1063124992u, 0, FREXPF_TOLERANCE, 0 }, // +1.1100E+02=F( +0.8672, +7) +{425, 1130233856u, 8u, 1063124992u, 0, FREXPF_TOLERANCE, 0 }, // +2.2200E+02=F( +0.8672, +8) +{426, 1134985216u, 9u, 1059487744u, 0, FREXPF_TOLERANCE, 0 }, // +3.3300E+02=F( +0.6504, +9) +{427, 1138622464u, 9u, 1063124992u, 0, FREXPF_TOLERANCE, 0 }, // +4.4400E+02=F( +0.8672, +9) +{428, 1141555200u, 10u, 1057669120u, 0, FREXPF_TOLERANCE, 0 }, // +5.5500E+02=F( +0.542, +10) +{429, 1143373824u, 10u, 1059487744u, 0, FREXPF_TOLERANCE, 0 }, // +6.6600E+02=F( +0.6504, +10) +{430, 1145192448u, 10u, 1061306368u, 0, FREXPF_TOLERANCE, 0 }, // +7.7700E+02=F( +0.7588, +10) +{431, 1147011072u, 10u, 1063124992u, 0, FREXPF_TOLERANCE, 0 }, // +8.8800E+02=F( +0.8672, +10) +{432, 1148829696u, 10u, 1064943616u, 0, FREXPF_TOLERANCE, 0 }, // +9.9900E+02=F( +0.9756, +10) +{433, 1149943808u, 11u, 1057669120u, 0, FREXPF_TOLERANCE, 0 }, // +1.1100E+03=F( +0.542, +11) +{434, 1149952000u, 11u, 1057677312u, 0, FREXPF_TOLERANCE, 0 }, // +1.1110E+03=F( +0.5425, +11) +{435, 1344628517u, 34u, 1059415845u, 0, FREXPF_TOLERANCE, 0 }, // +1.1100E+10=F( +0.6461, +34) +{436, 1353017124u, 35u, 1059415844u, 0, FREXPF_TOLERANCE, 0 }, // +2.2200E+10=F( +0.6461, +35) +{437, 1358437046u, 35u, 1064835766u, 0, FREXPF_TOLERANCE, 0 }, // +3.3300E+10=F( +0.9692, +35) +{438, 1361405732u, 36u, 1059415844u, 0, FREXPF_TOLERANCE, 0 }, // +4.4400E+10=F( +0.6461, +36) +{439, 1364115693u, 36u, 1062125805u, 0, FREXPF_TOLERANCE, 0 }, // +5.5500E+10=F( +0.8076, +36) +{440, 1366825654u, 36u, 1064835766u, 0, FREXPF_TOLERANCE, 0 }, // +6.6600E+10=F( +0.9692, +36) +{441, 1368439359u, 37u, 1058060863u, 0, FREXPF_TOLERANCE, 0 }, // +7.7700E+10=F( +0.5653, +37) +{442, 1369794339u, 37u, 1059415843u, 0, FREXPF_TOLERANCE, 0 }, // +8.8800E+10=F( +0.6461, +37) +{443, 1371149319u, 37u, 1060770823u, 0, FREXPF_TOLERANCE, 0 }, // +9.9900E+10=F( +0.7269, +37) +{444, 1372504299u, 37u, 1062125803u, 0, FREXPF_TOLERANCE, 0 }, // +1.1100E+11=F( +0.8076, +37) +{445, 0u, 0u, 0u, 0, FREXPF_TOLERANCE, 0 }, // +0.0000E+00=F( +0, +0) +{446, 8388608u, 4294967171u, 1056964608u, 0, FREXPF_TOLERANCE, 0 }, // +1.1755E-38=F( +0.5, -125) +{447, 2139095039u, 128u, 1065353215u, 0, FREXPF_TOLERANCE, 0 }, // +3.4028E+38=F( +1, +128) +{448, 2143289344u, 0u, 2143289344u, 0, FREXPF_TOLERANCE, 0 }, // +NAN =F( +nan, +0) +{449, 2139095040u, 0u, 2139095040u, 0, FREXPF_TOLERANCE, 0 }, // +INF =F( +inf, +0) + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_FREXPF_H multiple inclusion protection + +// EOF frexpf.h diff --git a/packages/language/c/libm/current/tests/vectors/gammaf.c b/packages/language/c/libm/current/tests/vectors/gammaf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/gammaf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// gammaf.c +// +// Test of gammaf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/gammaf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(gammaf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &gammaf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &gammaf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("gammaf() is stable"); + } // if + else + { + CYG_TEST_FAIL("gammaf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library gammaf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "gammaf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF gammaf.c diff --git a/packages/language/c/libm/current/tests/vectors/gammaf.h b/packages/language/c/libm/current/tests/vectors/gammaf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/gammaf.h @@ -0,0 +1,363 @@ +#ifndef CYGONCE_LIBM_GAMMA_H +#define CYGONCE_LIBM_GAMMA_H +//=========================================================================== +// +// gammaf.h +// +// Test vectors for testing of gammaf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/gammaf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define GAMMA_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t gammaf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 2147508200u, 3182352542u, 0, GAMMA_TOLERANCE, 0}, +{1, 3214430700u, 2147508200u, 3181956062u, 0, GAMMA_TOLERANCE, 0}, +{2, 3214346813u, 2147508200u, 3181542364u, 0, GAMMA_TOLERANCE, 0}, +{3, 3214262927u, 2147508200u, 3181111256u, 0, GAMMA_TOLERANCE, 0}, +{4, 3214179041u, 2147508200u, 3180662520u, 0, GAMMA_TOLERANCE, 0}, +{5, 3214095155u, 2147508200u, 3180195945u, 0, GAMMA_TOLERANCE, 0}, +{6, 3214011269u, 2147508200u, 3179711309u, 0, GAMMA_TOLERANCE, 0}, +{7, 3213927383u, 2147508200u, 3179134344u, 0, GAMMA_TOLERANCE, 0}, +{8, 3213843497u, 2147508200u, 3178091474u, 0, GAMMA_TOLERANCE, 0}, +{9, 3213759611u, 2147508200u, 3177011103u, 0, GAMMA_TOLERANCE, 0}, +{10, 3213675725u, 2147508200u, 3175892750u, 0, GAMMA_TOLERANCE, 0}, +{11, 3213591839u, 2147508200u, 3174735922u, 0, GAMMA_TOLERANCE, 0}, +{12, 3213507953u, 2147508200u, 3173540112u, 0, GAMMA_TOLERANCE, 0}, +{13, 3213424067u, 2147508200u, 3172304802u, 0, GAMMA_TOLERANCE, 0}, +{14, 3213340180u, 2147508200u, 3171029445u, 0, GAMMA_TOLERANCE, 0}, +{15, 3213256294u, 2147508200u, 3168533229u, 0, GAMMA_TOLERANCE, 0}, +{16, 3213172408u, 2147508200u, 3165819122u, 0, GAMMA_TOLERANCE, 0}, +{17, 3213088522u, 2147508200u, 3163021599u, 0, GAMMA_TOLERANCE, 0}, +{18, 3213004636u, 2147508200u, 3157773750u, 0, GAMMA_TOLERANCE, 0}, +{19, 3212920750u, 2147508200u, 3149559224u, 0, GAMMA_TOLERANCE, 0}, +{20, 3212836864u, 2147508200u, 0u, 0, GAMMA_TOLERANCE, 0}, +{21, 3212669092u, 2147508200u, 1002428834u, 0, GAMMA_TOLERANCE, 0}, +{22, 3212501320u, 2147508200u, 1010996688u, 0, GAMMA_TOLERANCE, 0}, +{23, 3212333548u, 2147508200u, 1016332991u, 0, GAMMA_TOLERANCE, 0}, +{24, 3212165775u, 2147508200u, 1019749225u, 0, GAMMA_TOLERANCE, 0}, +{25, 3211998003u, 2147508200u, 1023259210u, 0, GAMMA_TOLERANCE, 0}, +{26, 3211830231u, 2147508200u, 1025137303u, 0, GAMMA_TOLERANCE, 0}, +{27, 3211662459u, 2147508200u, 1026988282u, 0, GAMMA_TOLERANCE, 0}, +{28, 3211494687u, 2147508200u, 1028888405u, 0, GAMMA_TOLERANCE, 0}, +{29, 3211326915u, 2147508200u, 1030838469u, 0, GAMMA_TOLERANCE, 0}, +{30, 3211159142u, 2147508200u, 1032319047u, 0, GAMMA_TOLERANCE, 0}, +{31, 3210991370u, 2147508200u, 1033345266u, 0, GAMMA_TOLERANCE, 0}, +{32, 3210823598u, 2147508200u, 1034397726u, 0, GAMMA_TOLERANCE, 0}, +{33, 3210655826u, 2147508200u, 1035476878u, 0, GAMMA_TOLERANCE, 0}, +{34, 3210488054u, 2147508200u, 1036583185u, 0, GAMMA_TOLERANCE, 0}, +{35, 3210320282u, 2147508200u, 1037717128u, 0, GAMMA_TOLERANCE, 0}, +{36, 3210152509u, 2147508200u, 1038879207u, 0, GAMMA_TOLERANCE, 0}, +{37, 3209984737u, 2147508200u, 1040069921u, 0, GAMMA_TOLERANCE, 0}, +{38, 3209816965u, 2147508200u, 1040738598u, 0, GAMMA_TOLERANCE, 0}, +{39, 3209649193u, 2147508200u, 1041363397u, 0, GAMMA_TOLERANCE, 0}, +{40, 3209481421u, 2147508200u, 1042003336u, 0, GAMMA_TOLERANCE, 0}, +{41, 3209313649u, 2147508200u, 1042658707u, 0, GAMMA_TOLERANCE, 0}, +{42, 3209145876u, 2147508200u, 1043329818u, 0, GAMMA_TOLERANCE, 0}, +{43, 3208978104u, 2147508200u, 1044016973u, 0, GAMMA_TOLERANCE, 0}, +{44, 3208810332u, 2147508200u, 1044720500u, 0, GAMMA_TOLERANCE, 0}, +{45, 3208642560u, 2147508200u, 1045440738u, 0, GAMMA_TOLERANCE, 0}, +{46, 3208474788u, 2147508200u, 1046178035u, 0, GAMMA_TOLERANCE, 0}, +{47, 3208307016u, 2147508200u, 1046932755u, 0, GAMMA_TOLERANCE, 0}, +{48, 3208139244u, 2147508200u, 1047705272u, 0, GAMMA_TOLERANCE, 0}, +{49, 3207971471u, 2147508200u, 1048495986u, 0, GAMMA_TOLERANCE, 0}, +{50, 3207803699u, 2147508200u, 1048940645u, 0, GAMMA_TOLERANCE, 0}, +{51, 3207635927u, 2147508200u, 1049354808u, 0, GAMMA_TOLERANCE, 0}, +{52, 3207468155u, 2147508200u, 1049778702u, 0, GAMMA_TOLERANCE, 0}, +{53, 3207300383u, 2147508200u, 1050212555u, 0, GAMMA_TOLERANCE, 0}, +{54, 3207132611u, 2147508200u, 1050656608u, 0, GAMMA_TOLERANCE, 0}, +{55, 3206964838u, 2147508200u, 1051111112u, 0, GAMMA_TOLERANCE, 0}, +{56, 3206797066u, 2147508200u, 1051576324u, 0, GAMMA_TOLERANCE, 0}, +{57, 3206629294u, 2147508200u, 1052052518u, 0, GAMMA_TOLERANCE, 0}, +{58, 3206461522u, 2147508200u, 1052539978u, 0, GAMMA_TOLERANCE, 0}, +{59, 3206293750u, 2147508200u, 1053039002u, 0, GAMMA_TOLERANCE, 0}, +{60, 3206125978u, 2147508200u, 1053549901u, 0, GAMMA_TOLERANCE, 0}, +{61, 3205958205u, 2147508200u, 1054073007u, 0, GAMMA_TOLERANCE, 0}, +{62, 3205790433u, 2147508200u, 1054608655u, 0, GAMMA_TOLERANCE, 0}, +{63, 3205622661u, 2147508200u, 1055157205u, 0, GAMMA_TOLERANCE, 0}, +{64, 3205454889u, 2147508200u, 1055719041u, 0, GAMMA_TOLERANCE, 0}, +{65, 3205287117u, 2147508200u, 1056294554u, 0, GAMMA_TOLERANCE, 0}, +{66, 3205119345u, 2147508200u, 1056884165u, 0, GAMMA_TOLERANCE, 0}, +{67, 3204951572u, 2147508200u, 1057226463u, 0, GAMMA_TOLERANCE, 0}, +{68, 3204783800u, 2147508200u, 1057536039u, 0, GAMMA_TOLERANCE, 0}, +{69, 3204616028u, 2147508200u, 1057853361u, 0, GAMMA_TOLERANCE, 0}, +{70, 3204448256u, 2147508200u, 1058178690u, 0, GAMMA_TOLERANCE, 0}, +{71, 3204112712u, 2147508200u, 1058512300u, 0, GAMMA_TOLERANCE, 0}, +{72, 3203777167u, 2147508200u, 1058854482u, 0, GAMMA_TOLERANCE, 0}, +{73, 3203441623u, 2147508200u, 1059205542u, 0, GAMMA_TOLERANCE, 0}, +{74, 3203106079u, 2147508200u, 1059565811u, 0, GAMMA_TOLERANCE, 0}, +{75, 3202770534u, 2147508200u, 1059935636u, 0, GAMMA_TOLERANCE, 0}, +{76, 3202434990u, 2147508200u, 1060315390u, 0, GAMMA_TOLERANCE, 0}, +{77, 3202099446u, 2147508200u, 1060705468u, 0, GAMMA_TOLERANCE, 0}, +{78, 3201763901u, 2147508200u, 1061106295u, 0, GAMMA_TOLERANCE, 0}, +{79, 3201428357u, 2147508200u, 1061518321u, 0, GAMMA_TOLERANCE, 0}, +{80, 3201092813u, 2147508200u, 1061942035u, 0, GAMMA_TOLERANCE, 0}, +{81, 3200757268u, 2147508200u, 1062377960u, 0, GAMMA_TOLERANCE, 0}, +{82, 3200421724u, 2147508200u, 1062826654u, 0, GAMMA_TOLERANCE, 0}, +{83, 3200086180u, 2147508200u, 1063288726u, 0, GAMMA_TOLERANCE, 0}, +{84, 3199750636u, 2147508200u, 1063764827u, 0, GAMMA_TOLERANCE, 0}, +{85, 3199415091u, 2147508200u, 1064255670u, 0, GAMMA_TOLERANCE, 0}, +{86, 3199079547u, 2147508200u, 1064762021u, 0, GAMMA_TOLERANCE, 0}, +{87, 3198744003u, 2147508200u, 1065284717u, 0, GAMMA_TOLERANCE, 0}, +{88, 3198408458u, 2147508200u, 1065588944u, 0, GAMMA_TOLERANCE, 0}, +{89, 3198072914u, 2147508200u, 1065868048u, 0, GAMMA_TOLERANCE, 0}, +{90, 3197737370u, 2147508200u, 1066156828u, 0, GAMMA_TOLERANCE, 0}, +{91, 3197401825u, 2147508200u, 1066455885u, 0, GAMMA_TOLERANCE, 0}, +{92, 3197066281u, 2147508200u, 1066765884u, 0, GAMMA_TOLERANCE, 0}, +{93, 3196730737u, 2147508200u, 1067087562u, 0, GAMMA_TOLERANCE, 0}, +{94, 3196395192u, 2147508200u, 1067421737u, 0, GAMMA_TOLERANCE, 0}, +{95, 3196059648u, 2147508200u, 1067769324u, 0, GAMMA_TOLERANCE, 0}, +{96, 3195388559u, 2147508200u, 1068131348u, 0, GAMMA_TOLERANCE, 0}, +{97, 3194717471u, 2147508200u, 1068508963u, 0, GAMMA_TOLERANCE, 0}, +{98, 3194046382u, 2147508200u, 1068903479u, 0, GAMMA_TOLERANCE, 0}, +{99, 3193375293u, 2147508200u, 1069316383u, 0, GAMMA_TOLERANCE, 0}, +{100, 3192704205u, 2147508200u, 1069749382u, 0, GAMMA_TOLERANCE, 0}, +{101, 3192033116u, 2147508200u, 1070204441u, 0, GAMMA_TOLERANCE, 0}, +{102, 3191362028u, 2147508200u, 1070683845u, 0, GAMMA_TOLERANCE, 0}, +{103, 3190690939u, 2147508200u, 1071190269u, 0, GAMMA_TOLERANCE, 0}, +{104, 3190019850u, 2147508200u, 1071726872u, 0, GAMMA_TOLERANCE, 0}, +{105, 3189348762u, 2147508200u, 1072297421u, 0, GAMMA_TOLERANCE, 0}, +{106, 3188677673u, 2147508200u, 1072906465u, 0, GAMMA_TOLERANCE, 0}, +{107, 3188006584u, 2147508200u, 1073559562u, 0, GAMMA_TOLERANCE, 0}, +{108, 3186999951u, 2147508200u, 1074002711u, 0, GAMMA_TOLERANCE, 0}, +{109, 3185657774u, 2147508200u, 1074384544u, 0, GAMMA_TOLERANCE, 0}, +{110, 3184315597u, 2147508200u, 1074801778u, 0, GAMMA_TOLERANCE, 0}, +{111, 3182973420u, 2147508200u, 1075261767u, 0, GAMMA_TOLERANCE, 0}, +{112, 3181631242u, 2147508200u, 1075774470u, 0, GAMMA_TOLERANCE, 0}, +{113, 3180289065u, 2147508200u, 1076353843u, 0, GAMMA_TOLERANCE, 0}, +{114, 3178611343u, 2147508200u, 1077020325u, 0, GAMMA_TOLERANCE, 0}, +{115, 3175926989u, 2147508200u, 1077805598u, 0, GAMMA_TOLERANCE, 0}, +{116, 3173242634u, 2147508200u, 1078762734u, 0, GAMMA_TOLERANCE, 0}, +{117, 3170222735u, 2147508200u, 1079991216u, 0, GAMMA_TOLERANCE, 0}, +{118, 3164854026u, 2147508200u, 1081714376u, 0, GAMMA_TOLERANCE, 0}, +{119, 3156465418u, 2147508200u, 1083387633u, 0, GAMMA_TOLERANCE, 0}, +{120, 646742016u, 2147508200u, 1107968441u, 0, GAMMA_TOLERANCE, 0}, +{121, 1008981770u, 2147508200u, 1083387633u, 0, GAMMA_TOLERANCE, 0}, +{122, 1017370378u, 2147508200u, 1081714376u, 0, GAMMA_TOLERANCE, 0}, +{123, 1022739087u, 2147508200u, 1079991216u, 0, GAMMA_TOLERANCE, 0}, +{124, 1025758986u, 2147508200u, 1078762734u, 0, GAMMA_TOLERANCE, 0}, +{125, 1028443341u, 2147508200u, 1077805598u, 0, GAMMA_TOLERANCE, 0}, +{126, 1031127695u, 2147508200u, 1077020325u, 0, GAMMA_TOLERANCE, 0}, +{127, 1032805417u, 2147508200u, 1076353843u, 0, GAMMA_TOLERANCE, 0}, +{128, 1034147594u, 2147508200u, 1075774470u, 0, GAMMA_TOLERANCE, 0}, +{129, 1035489772u, 2147508200u, 1075261767u, 0, GAMMA_TOLERANCE, 0}, +{130, 1036831949u, 2147508200u, 1074801778u, 0, GAMMA_TOLERANCE, 0}, +{131, 1038174126u, 2147508200u, 1074384544u, 0, GAMMA_TOLERANCE, 0}, +{132, 1039516303u, 2147508200u, 1074002711u, 0, GAMMA_TOLERANCE, 0}, +{133, 1040522936u, 2147508200u, 1073559562u, 0, GAMMA_TOLERANCE, 0}, +{134, 1041194025u, 2147508200u, 1072906465u, 0, GAMMA_TOLERANCE, 0}, +{135, 1041865114u, 2147508200u, 1072297421u, 0, GAMMA_TOLERANCE, 0}, +{136, 1042536202u, 2147508200u, 1071726872u, 0, GAMMA_TOLERANCE, 0}, +{137, 1043207291u, 2147508200u, 1071190269u, 0, GAMMA_TOLERANCE, 0}, +{138, 1043878380u, 2147508200u, 1070683845u, 0, GAMMA_TOLERANCE, 0}, +{139, 1044549468u, 2147508200u, 1070204441u, 0, GAMMA_TOLERANCE, 0}, +{140, 1045220557u, 2147508200u, 1069749382u, 0, GAMMA_TOLERANCE, 0}, +{141, 1045891645u, 2147508200u, 1069316383u, 0, GAMMA_TOLERANCE, 0}, +{142, 1046562734u, 2147508200u, 1068903479u, 0, GAMMA_TOLERANCE, 0}, +{143, 1047233823u, 2147508200u, 1068508963u, 0, GAMMA_TOLERANCE, 0}, +{144, 1047904911u, 2147508200u, 1068131348u, 0, GAMMA_TOLERANCE, 0}, +{145, 1048576000u, 2147508200u, 1067769324u, 0, GAMMA_TOLERANCE, 0}, +{146, 1048911544u, 2147508200u, 1067421737u, 0, GAMMA_TOLERANCE, 0}, +{147, 1049247089u, 2147508200u, 1067087562u, 0, GAMMA_TOLERANCE, 0}, +{148, 1049582633u, 2147508200u, 1066765884u, 0, GAMMA_TOLERANCE, 0}, +{149, 1049918177u, 2147508200u, 1066455885u, 0, GAMMA_TOLERANCE, 0}, +{150, 1050253722u, 2147508200u, 1066156828u, 0, GAMMA_TOLERANCE, 0}, +{151, 1050589266u, 2147508200u, 1065868048u, 0, GAMMA_TOLERANCE, 0}, +{152, 1050924810u, 2147508200u, 1065588944u, 0, GAMMA_TOLERANCE, 0}, +{153, 1051260355u, 2147508200u, 1065284717u, 0, GAMMA_TOLERANCE, 0}, +{154, 1051595899u, 2147508200u, 1064762021u, 0, GAMMA_TOLERANCE, 0}, +{155, 1051931443u, 2147508200u, 1064255670u, 0, GAMMA_TOLERANCE, 0}, +{156, 1052266988u, 2147508200u, 1063764827u, 0, GAMMA_TOLERANCE, 0}, +{157, 1052602532u, 2147508200u, 1063288726u, 0, GAMMA_TOLERANCE, 0}, +{158, 1052938076u, 2147508200u, 1062826654u, 0, GAMMA_TOLERANCE, 0}, +{159, 1053273620u, 2147508200u, 1062377960u, 0, GAMMA_TOLERANCE, 0}, +{160, 1053609165u, 2147508200u, 1061942035u, 0, GAMMA_TOLERANCE, 0}, +{161, 1053944709u, 2147508200u, 1061518321u, 0, GAMMA_TOLERANCE, 0}, +{162, 1054280253u, 2147508200u, 1061106295u, 0, GAMMA_TOLERANCE, 0}, +{163, 1054615798u, 2147508200u, 1060705468u, 0, GAMMA_TOLERANCE, 0}, +{164, 1054951342u, 2147508200u, 1060315390u, 0, GAMMA_TOLERANCE, 0}, +{165, 1055286886u, 2147508200u, 1059935636u, 0, GAMMA_TOLERANCE, 0}, +{166, 1055622431u, 2147508200u, 1059565811u, 0, GAMMA_TOLERANCE, 0}, +{167, 1055957975u, 2147508200u, 1059205542u, 0, GAMMA_TOLERANCE, 0}, +{168, 1056293519u, 2147508200u, 1058854482u, 0, GAMMA_TOLERANCE, 0}, +{169, 1056629064u, 2147508200u, 1058512300u, 0, GAMMA_TOLERANCE, 0}, +{170, 1056964608u, 2147508200u, 1058178690u, 0, GAMMA_TOLERANCE, 0}, +{171, 1057132380u, 2147508200u, 1057853361u, 0, GAMMA_TOLERANCE, 0}, +{172, 1057300152u, 2147508200u, 1057536039u, 0, GAMMA_TOLERANCE, 0}, +{173, 1057467924u, 2147508200u, 1057226463u, 0, GAMMA_TOLERANCE, 0}, +{174, 1057635697u, 2147508200u, 1056884165u, 0, GAMMA_TOLERANCE, 0}, +{175, 1057803469u, 2147508200u, 1056294554u, 0, GAMMA_TOLERANCE, 0}, +{176, 1057971241u, 2147508200u, 1055719041u, 0, GAMMA_TOLERANCE, 0}, +{177, 1058139013u, 2147508200u, 1055157205u, 0, GAMMA_TOLERANCE, 0}, +{178, 1058306785u, 2147508200u, 1054608655u, 0, GAMMA_TOLERANCE, 0}, +{179, 1058474557u, 2147508200u, 1054073007u, 0, GAMMA_TOLERANCE, 0}, +{180, 1058642330u, 2147508200u, 1053549901u, 0, GAMMA_TOLERANCE, 0}, +{181, 1058810102u, 2147508200u, 1053039002u, 0, GAMMA_TOLERANCE, 0}, +{182, 1058977874u, 2147508200u, 1052539978u, 0, GAMMA_TOLERANCE, 0}, +{183, 1059145646u, 2147508200u, 1052052518u, 0, GAMMA_TOLERANCE, 0}, +{184, 1059313418u, 2147508200u, 1051576324u, 0, GAMMA_TOLERANCE, 0}, +{185, 1059481190u, 2147508200u, 1051111112u, 0, GAMMA_TOLERANCE, 0}, +{186, 1059648963u, 2147508200u, 1050656608u, 0, GAMMA_TOLERANCE, 0}, +{187, 1059816735u, 2147508200u, 1050212555u, 0, GAMMA_TOLERANCE, 0}, +{188, 1059984507u, 2147508200u, 1049778702u, 0, GAMMA_TOLERANCE, 0}, +{189, 1060152279u, 2147508200u, 1049354808u, 0, GAMMA_TOLERANCE, 0}, +{190, 1060320051u, 2147508200u, 1048940645u, 0, GAMMA_TOLERANCE, 0}, +{191, 1060487823u, 2147508200u, 1048495986u, 0, GAMMA_TOLERANCE, 0}, +{192, 1060655596u, 2147508200u, 1047705272u, 0, GAMMA_TOLERANCE, 0}, +{193, 1060823368u, 2147508200u, 1046932755u, 0, GAMMA_TOLERANCE, 0}, +{194, 1060991140u, 2147508200u, 1046178035u, 0, GAMMA_TOLERANCE, 0}, +{195, 1061158912u, 2147508200u, 1045440738u, 0, GAMMA_TOLERANCE, 0}, +{196, 1061326684u, 2147508200u, 1044720500u, 0, GAMMA_TOLERANCE, 0}, +{197, 1061494456u, 2147508200u, 1044016973u, 0, GAMMA_TOLERANCE, 0}, +{198, 1061662228u, 2147508200u, 1043329818u, 0, GAMMA_TOLERANCE, 0}, +{199, 1061830001u, 2147508200u, 1042658707u, 0, GAMMA_TOLERANCE, 0}, +{200, 1061997773u, 2147508200u, 1042003336u, 0, GAMMA_TOLERANCE, 0}, +{201, 1062165545u, 2147508200u, 1041363397u, 0, GAMMA_TOLERANCE, 0}, +{202, 1062333317u, 2147508200u, 1040738598u, 0, GAMMA_TOLERANCE, 0}, +{203, 1062501089u, 2147508200u, 1040069921u, 0, GAMMA_TOLERANCE, 0}, +{204, 1062668861u, 2147508200u, 1038879207u, 0, GAMMA_TOLERANCE, 0}, +{205, 1062836634u, 2147508200u, 1037717128u, 0, GAMMA_TOLERANCE, 0}, +{206, 1063004406u, 2147508200u, 1036583185u, 0, GAMMA_TOLERANCE, 0}, +{207, 1063172178u, 2147508200u, 1035476878u, 0, GAMMA_TOLERANCE, 0}, +{208, 1063339950u, 2147508200u, 1034397726u, 0, GAMMA_TOLERANCE, 0}, +{209, 1063507722u, 2147508200u, 1033345266u, 0, GAMMA_TOLERANCE, 0}, +{210, 1063675494u, 2147508200u, 1032319047u, 0, GAMMA_TOLERANCE, 0}, +{211, 1063843267u, 2147508200u, 1030838469u, 0, GAMMA_TOLERANCE, 0}, +{212, 1064011039u, 2147508200u, 1028888405u, 0, GAMMA_TOLERANCE, 0}, +{213, 1064178811u, 2147508200u, 1026988282u, 0, GAMMA_TOLERANCE, 0}, +{214, 1064346583u, 2147508200u, 1025137303u, 0, GAMMA_TOLERANCE, 0}, +{215, 1064514355u, 2147508200u, 1023259210u, 0, GAMMA_TOLERANCE, 0}, +{216, 1064682127u, 2147508200u, 1019749225u, 0, GAMMA_TOLERANCE, 0}, +{217, 1064849900u, 2147508200u, 1016332991u, 0, GAMMA_TOLERANCE, 0}, +{218, 1065017672u, 2147508200u, 1010996688u, 0, GAMMA_TOLERANCE, 0}, +{219, 1065185444u, 2147508200u, 1002428834u, 0, GAMMA_TOLERANCE, 0}, +{220, 1065353216u, 2147508200u, 0u, 0, GAMMA_TOLERANCE, 0}, +{221, 1065437102u, 2147508200u, 3149559224u, 0, GAMMA_TOLERANCE, 0}, +{222, 1065520988u, 2147508200u, 3157773750u, 0, GAMMA_TOLERANCE, 0}, +{223, 1065604874u, 2147508200u, 3163021599u, 0, GAMMA_TOLERANCE, 0}, +{224, 1065688760u, 2147508200u, 3165819122u, 0, GAMMA_TOLERANCE, 0}, +{225, 1065772646u, 2147508200u, 3168533229u, 0, GAMMA_TOLERANCE, 0}, +{226, 1065856532u, 2147508200u, 3171029445u, 0, GAMMA_TOLERANCE, 0}, +{227, 1065940419u, 2147508200u, 3172304802u, 0, GAMMA_TOLERANCE, 0}, +{228, 1066024305u, 2147508200u, 3173540112u, 0, GAMMA_TOLERANCE, 0}, +{229, 1066108191u, 2147508200u, 3174735922u, 0, GAMMA_TOLERANCE, 0}, +{230, 1066192077u, 2147508200u, 3175892750u, 0, GAMMA_TOLERANCE, 0}, +{231, 1066275963u, 2147508200u, 3177011103u, 0, GAMMA_TOLERANCE, 0}, +{232, 1066359849u, 2147508200u, 3178091474u, 0, GAMMA_TOLERANCE, 0}, +{233, 1066443735u, 2147508200u, 3179134344u, 0, GAMMA_TOLERANCE, 0}, +{234, 1066527621u, 2147508200u, 3179711309u, 0, GAMMA_TOLERANCE, 0}, +{235, 1066611507u, 2147508200u, 3180195945u, 0, GAMMA_TOLERANCE, 0}, +{236, 1066695393u, 2147508200u, 3180662520u, 0, GAMMA_TOLERANCE, 0}, +{237, 1066779279u, 2147508200u, 3181111256u, 0, GAMMA_TOLERANCE, 0}, +{238, 1066863165u, 2147508200u, 3181542364u, 0, GAMMA_TOLERANCE, 0}, +{239, 1066947052u, 2147508200u, 3181956062u, 0, GAMMA_TOLERANCE, 0}, +{240, 3234402267u, 2147508200u, 1084810150u, 0, GAMMA_TOLERANCE, 0}, +{241, 3231108068u, 2147508200u, 1076905300u, 0, GAMMA_TOLERANCE, 0}, +{242, 3226013659u, 2147508200u, 1062462412u, 0, GAMMA_TOLERANCE, 0}, +{243, 3217625051u, 2147508200u, 3186450168u, 0, GAMMA_TOLERANCE, 0}, +{244, 0u, 2147508200u, 1115684864u, 0, GAMMA_TOLERANCE, 0}, +{245, 1070141403u, 2147508200u, 3186450168u, 0, GAMMA_TOLERANCE, 0}, +{246, 1078530011u, 2147508200u, 1062462412u, 0, GAMMA_TOLERANCE, 0}, +{247, 1083624420u, 2147508200u, 1076905300u, 0, GAMMA_TOLERANCE, 0}, +{248, 3253731328u, 2147508200u, 1116636059u, 0, GAMMA_TOLERANCE, 0}, +{249, 3252840038u, 2147508200u, 1115888477u, 0, GAMMA_TOLERANCE, 0}, +{250, 3251948749u, 2147508200u, 1114624191u, 0, GAMMA_TOLERANCE, 0}, +{251, 3251057459u, 2147508200u, 1113185337u, 0, GAMMA_TOLERANCE, 0}, +{252, 3250166170u, 2147508200u, 1111777553u, 0, GAMMA_TOLERANCE, 0}, +{253, 3249274880u, 2147508200u, 1110403168u, 0, GAMMA_TOLERANCE, 0}, +{254, 3248383590u, 2147508200u, 1109064891u, 0, GAMMA_TOLERANCE, 0}, +{255, 3247492301u, 2147508200u, 1107765911u, 0, GAMMA_TOLERANCE, 0}, +{256, 3246601011u, 2147508200u, 1105723807u, 0, GAMMA_TOLERANCE, 0}, +{257, 3245028147u, 2147508200u, 1103307493u, 0, GAMMA_TOLERANCE, 0}, +{258, 3243245568u, 2147508200u, 1100998096u, 0, GAMMA_TOLERANCE, 0}, +{259, 3241462989u, 2147508200u, 1098712804u, 0, GAMMA_TOLERANCE, 0}, +{260, 3239680410u, 2147508200u, 1094618617u, 0, GAMMA_TOLERANCE, 0}, +{261, 3237792973u, 2147508200u, 1090859057u, 0, GAMMA_TOLERANCE, 0}, +{262, 3234227814u, 2147508200u, 1084505034u, 0, GAMMA_TOLERANCE, 0}, +{263, 3230662656u, 2147508200u, 1075644933u, 0, GAMMA_TOLERANCE, 0}, +{264, 3224580915u, 2147508200u, 1057244834u, 0, GAMMA_TOLERANCE, 0}, +{265, 3213675725u, 2147508200u, 3175892750u, 0, GAMMA_TOLERANCE, 0}, +{266, 1058642330u, 2147508200u, 1053549901u, 0, GAMMA_TOLERANCE, 0}, +{267, 1075000115u, 2147508200u, 1042146261u, 0, GAMMA_TOLERANCE, 0}, +{268, 1082130432u, 2147508200u, 1071994976u, 0, GAMMA_TOLERANCE, 0}, +{269, 1085695590u, 2147508200u, 1082725955u, 0, GAMMA_TOLERANCE, 0}, +{270, 1089260749u, 2147508200u, 1089135769u, 0, GAMMA_TOLERANCE, 0}, +{271, 1091672474u, 2147508200u, 1093475241u, 0, GAMMA_TOLERANCE, 0}, +{272, 1093455053u, 2147508200u, 1097477367u, 0, GAMMA_TOLERANCE, 0}, +{273, 1095237632u, 2147508200u, 1100341234u, 0, GAMMA_TOLERANCE, 0}, +{274, 1097020211u, 2147508200u, 1102616576u, 0, GAMMA_TOLERANCE, 0}, +{275, 1098802790u, 2147508200u, 1105002754u, 0, GAMMA_TOLERANCE, 0}, +{276, 1099746509u, 2147508200u, 1107391872u, 0, GAMMA_TOLERANCE, 0}, +{277, 1100637798u, 2147508200u, 1108678601u, 0, GAMMA_TOLERANCE, 0}, +{278, 1101529088u, 2147508200u, 1110005676u, 0, GAMMA_TOLERANCE, 0}, +{279, 1102420378u, 2147508200u, 1111369741u, 0, GAMMA_TOLERANCE, 0}, +{280, 1103311667u, 2147508200u, 1112767959u, 0, GAMMA_TOLERANCE, 0}, +{281, 1104202957u, 2147508200u, 1114197898u, 0, GAMMA_TOLERANCE, 0}, +{282, 1105094246u, 2147508200u, 1115657449u, 0, GAMMA_TOLERANCE, 0}, +{283, 1105985536u, 2147508200u, 1116414815u, 0, GAMMA_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_GAMMA_H multiple inclusion protection + +// EOF gammaf.h diff --git a/packages/language/c/libm/current/tests/vectors/hypotf.c b/packages/language/c/libm/current/tests/vectors/hypotf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/hypotf.c @@ -0,0 +1,58 @@ +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/hypotf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(hypotf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &hypotf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &hypotf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("hypotf() is stable"); + } // if + else + { + CYG_TEST_FAIL("hypotf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library hypotf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "hypotf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF log10.c diff --git a/packages/language/c/libm/current/tests/vectors/hypotf.h b/packages/language/c/libm/current/tests/vectors/hypotf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/hypotf.h @@ -0,0 +1,310 @@ +#ifndef CYGONCE_LIBM_LOG10_H +#define CYGONCE_LIBM_LOG10_H +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define HYPOT_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t hypotf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1077097267u, 1078130363u, 0, HYPOT_TOLERANCE, 0}, +{1, 3214430700u, 1077139210u, 1078152510u, 0, HYPOT_TOLERANCE, 0}, +{2, 3214346813u, 1077181153u, 1078174894u, 0, HYPOT_TOLERANCE, 0}, +{3, 3214262927u, 1077223096u, 1078197514u, 0, HYPOT_TOLERANCE, 0}, +{4, 3214179041u, 1077265039u, 1078220367u, 0, HYPOT_TOLERANCE, 0}, +{5, 3214095155u, 1077306982u, 1078243452u, 0, HYPOT_TOLERANCE, 0}, +{6, 3214011269u, 1077348925u, 1078266769u, 0, HYPOT_TOLERANCE, 0}, +{7, 3213927383u, 1077390868u, 1078290314u, 0, HYPOT_TOLERANCE, 0}, +{8, 3213843497u, 1077432812u, 1078314091u, 0, HYPOT_TOLERANCE, 0}, +{9, 3213759611u, 1077474755u, 1078338093u, 0, HYPOT_TOLERANCE, 0}, +{10, 3213675725u, 1077516698u, 1078362322u, 0, HYPOT_TOLERANCE, 0}, +{11, 3213591839u, 1077558641u, 1078386776u, 0, HYPOT_TOLERANCE, 0}, +{12, 3213507953u, 1077600584u, 1078411453u, 0, HYPOT_TOLERANCE, 0}, +{13, 3213424067u, 1077642527u, 1078436352u, 0, HYPOT_TOLERANCE, 0}, +{14, 3213340180u, 1077684470u, 1078461474u, 0, HYPOT_TOLERANCE, 0}, +{15, 3213256294u, 1077726413u, 1078486814u, 0, HYPOT_TOLERANCE, 0}, +{16, 3213172408u, 1077768356u, 1078512373u, 0, HYPOT_TOLERANCE, 0}, +{17, 3213088522u, 1077810299u, 1078538149u, 0, HYPOT_TOLERANCE, 0}, +{18, 3213004636u, 1077852242u, 1078564142u, 0, HYPOT_TOLERANCE, 0}, +{19, 3212920750u, 1077894185u, 1078590350u, 0, HYPOT_TOLERANCE, 0}, +{20, 3212836864u, 1077936128u, 1078616770u, 0, HYPOT_TOLERANCE, 0}, +{21, 3212669092u, 1077978071u, 1078643403u, 0, HYPOT_TOLERANCE, 0}, +{22, 3212501320u, 1078020014u, 1078670247u, 0, HYPOT_TOLERANCE, 0}, +{23, 3212333548u, 1078061957u, 1078697300u, 0, HYPOT_TOLERANCE, 0}, +{24, 3212165775u, 1078103900u, 1078724562u, 0, HYPOT_TOLERANCE, 0}, +{25, 3211998003u, 1078145843u, 1078752032u, 0, HYPOT_TOLERANCE, 0}, +{26, 3211830231u, 1078187786u, 1078779706u, 0, HYPOT_TOLERANCE, 0}, +{27, 3211662459u, 1078229729u, 1078807586u, 0, HYPOT_TOLERANCE, 0}, +{28, 3211494687u, 1078271672u, 1078835668u, 0, HYPOT_TOLERANCE, 0}, +{29, 3211326915u, 1078313615u, 1078863953u, 0, HYPOT_TOLERANCE, 0}, +{30, 3211159142u, 1078355558u, 1078892439u, 0, HYPOT_TOLERANCE, 0}, +{31, 3210991370u, 1078397501u, 1078921124u, 0, HYPOT_TOLERANCE, 0}, +{32, 3210823598u, 1078439444u, 1078950007u, 0, HYPOT_TOLERANCE, 0}, +{33, 3210655826u, 1078481388u, 1078979089u, 0, HYPOT_TOLERANCE, 0}, +{34, 3210488054u, 1078523331u, 1079008365u, 0, HYPOT_TOLERANCE, 0}, +{35, 3210320282u, 1078565274u, 1079037837u, 0, HYPOT_TOLERANCE, 0}, +{36, 3210152509u, 1078607217u, 1079067501u, 0, HYPOT_TOLERANCE, 0}, +{37, 3209984737u, 1078649160u, 1079097355u, 0, HYPOT_TOLERANCE, 0}, +{38, 3209816965u, 1078691103u, 1079127402u, 0, HYPOT_TOLERANCE, 0}, +{39, 3209649193u, 1078733046u, 1079157638u, 0, HYPOT_TOLERANCE, 0}, +{40, 3209481421u, 1078774989u, 1079188063u, 0, HYPOT_TOLERANCE, 0}, +{41, 3209313649u, 1078816932u, 1079218675u, 0, HYPOT_TOLERANCE, 0}, +{42, 3209145876u, 1078858875u, 1079249471u, 0, HYPOT_TOLERANCE, 0}, +{43, 3208978104u, 1078900818u, 1079280453u, 0, HYPOT_TOLERANCE, 0}, +{44, 3208810332u, 1078942761u, 1079311617u, 0, HYPOT_TOLERANCE, 0}, +{45, 3208642560u, 1078984704u, 1079342964u, 0, HYPOT_TOLERANCE, 0}, +{46, 3208474788u, 1079026647u, 1079374492u, 0, HYPOT_TOLERANCE, 0}, +{47, 3208307016u, 1079068590u, 1079406200u, 0, HYPOT_TOLERANCE, 0}, +{48, 3208139244u, 1079110533u, 1079438085u, 0, HYPOT_TOLERANCE, 0}, +{49, 3207971471u, 1079152476u, 1079470149u, 0, HYPOT_TOLERANCE, 0}, +{50, 3207803699u, 1079194419u, 1079502388u, 0, HYPOT_TOLERANCE, 0}, +{51, 3207635927u, 1079236362u, 1079534802u, 0, HYPOT_TOLERANCE, 0}, +{52, 3207468155u, 1079278305u, 1079567389u, 0, HYPOT_TOLERANCE, 0}, +{53, 3207300383u, 1079320248u, 1079600149u, 0, HYPOT_TOLERANCE, 0}, +{54, 3207132611u, 1079362191u, 1079633082u, 0, HYPOT_TOLERANCE, 0}, +{55, 3206964838u, 1079404134u, 1079666183u, 0, HYPOT_TOLERANCE, 0}, +{56, 3206797066u, 1079446077u, 1079699453u, 0, HYPOT_TOLERANCE, 0}, +{57, 3206629294u, 1079488020u, 1079732889u, 0, HYPOT_TOLERANCE, 0}, +{58, 3206461522u, 1079529964u, 1079766495u, 0, HYPOT_TOLERANCE, 0}, +{59, 3206293750u, 1079571907u, 1079800266u, 0, HYPOT_TOLERANCE, 0}, +{60, 3206125978u, 1079613850u, 1079834199u, 0, HYPOT_TOLERANCE, 0}, +{61, 3205958205u, 1079655793u, 1079868296u, 0, HYPOT_TOLERANCE, 0}, +{62, 3205790433u, 1079697736u, 1079902555u, 0, HYPOT_TOLERANCE, 0}, +{63, 3205622661u, 1079739679u, 1079936974u, 0, HYPOT_TOLERANCE, 0}, +{64, 3205454889u, 1079781622u, 1079971555u, 0, HYPOT_TOLERANCE, 0}, +{65, 3205287117u, 1079823565u, 1080006293u, 0, HYPOT_TOLERANCE, 0}, +{66, 3205119345u, 1079865508u, 1080041188u, 0, HYPOT_TOLERANCE, 0}, +{67, 3204951572u, 1079907451u, 1080076239u, 0, HYPOT_TOLERANCE, 0}, +{68, 3204783800u, 1079949394u, 1080111445u, 0, HYPOT_TOLERANCE, 0}, +{69, 3204616028u, 1079991337u, 1080146806u, 0, HYPOT_TOLERANCE, 0}, +{70, 3204448256u, 1080033280u, 1080182320u, 0, HYPOT_TOLERANCE, 0}, +{71, 3204112712u, 1080075223u, 1080217985u, 0, HYPOT_TOLERANCE, 0}, +{72, 3203777167u, 1080117166u, 1080253802u, 0, HYPOT_TOLERANCE, 0}, +{73, 3203441623u, 1080159109u, 1080289768u, 0, HYPOT_TOLERANCE, 0}, +{74, 3203106079u, 1080201052u, 1080325883u, 0, HYPOT_TOLERANCE, 0}, +{75, 3202770534u, 1080242995u, 1080362144u, 0, HYPOT_TOLERANCE, 0}, +{76, 3202434990u, 1080284938u, 1080398554u, 0, HYPOT_TOLERANCE, 0}, +{77, 3202099446u, 1080326881u, 1080435107u, 0, HYPOT_TOLERANCE, 0}, +{78, 3201763901u, 1080368824u, 1080471806u, 0, HYPOT_TOLERANCE, 0}, +{79, 3201428357u, 1080410767u, 1080508647u, 0, HYPOT_TOLERANCE, 0}, +{80, 3201092813u, 1080452710u, 1080545631u, 0, HYPOT_TOLERANCE, 0}, +{81, 3200757268u, 1080494653u, 1080582755u, 0, HYPOT_TOLERANCE, 0}, +{82, 3200421724u, 1080536596u, 1080620021u, 0, HYPOT_TOLERANCE, 0}, +{83, 3200086180u, 1080578540u, 1080657427u, 0, HYPOT_TOLERANCE, 0}, +{84, 3199750636u, 1080620483u, 1080694970u, 0, HYPOT_TOLERANCE, 0}, +{85, 3199415091u, 1080662426u, 1080732648u, 0, HYPOT_TOLERANCE, 0}, +{86, 3199079547u, 1080704369u, 1080770465u, 0, HYPOT_TOLERANCE, 0}, +{87, 3198744003u, 1080746312u, 1080808416u, 0, HYPOT_TOLERANCE, 0}, +{88, 3198408458u, 1080788255u, 1080846500u, 0, HYPOT_TOLERANCE, 0}, +{89, 3198072914u, 1080830198u, 1080884718u, 0, HYPOT_TOLERANCE, 0}, +{90, 3197737370u, 1080872141u, 1080923070u, 0, HYPOT_TOLERANCE, 0}, +{91, 3197401825u, 1080914084u, 1080961550u, 0, HYPOT_TOLERANCE, 0}, +{92, 3197066281u, 1080956027u, 1081000163u, 0, HYPOT_TOLERANCE, 0}, +{93, 3196730737u, 1080997970u, 1081038903u, 0, HYPOT_TOLERANCE, 0}, +{94, 3196395192u, 1081039913u, 1081077773u, 0, HYPOT_TOLERANCE, 0}, +{95, 3196059648u, 1081081856u, 1081116770u, 0, HYPOT_TOLERANCE, 0}, +{96, 3195388559u, 1081123799u, 1081155892u, 0, HYPOT_TOLERANCE, 0}, +{97, 3194717471u, 1081165742u, 1081195142u, 0, HYPOT_TOLERANCE, 0}, +{98, 3194046382u, 1081207685u, 1081234514u, 0, HYPOT_TOLERANCE, 0}, +{99, 3193375293u, 1081249628u, 1081274011u, 0, HYPOT_TOLERANCE, 0}, +{100, 3192704205u, 1081291571u, 1081313630u, 0, HYPOT_TOLERANCE, 0}, +{101, 3192033116u, 1081333514u, 1081353374u, 0, HYPOT_TOLERANCE, 0}, +{102, 3191362028u, 1081375457u, 1081393235u, 0, HYPOT_TOLERANCE, 0}, +{103, 3190690939u, 1081417400u, 1081433216u, 0, HYPOT_TOLERANCE, 0}, +{104, 3190019850u, 1081459343u, 1081473319u, 0, HYPOT_TOLERANCE, 0}, +{105, 3189348762u, 1081501286u, 1081513539u, 0, HYPOT_TOLERANCE, 0}, +{106, 3188677673u, 1081543229u, 1081553875u, 0, HYPOT_TOLERANCE, 0}, +{107, 3188006584u, 1081585172u, 1081594328u, 0, HYPOT_TOLERANCE, 0}, +{108, 3186999951u, 1081627116u, 1081634897u, 0, HYPOT_TOLERANCE, 0}, +{109, 3185657774u, 1081669059u, 1081675581u, 0, HYPOT_TOLERANCE, 0}, +{110, 3184315597u, 1081711002u, 1081716378u, 0, HYPOT_TOLERANCE, 0}, +{111, 3182973420u, 1081752945u, 1081757289u, 0, HYPOT_TOLERANCE, 0}, +{112, 3181631242u, 1081794888u, 1081798312u, 0, HYPOT_TOLERANCE, 0}, +{113, 3180289065u, 1081836831u, 1081839444u, 0, HYPOT_TOLERANCE, 0}, +{114, 3178611343u, 1081878774u, 1081880689u, 0, HYPOT_TOLERANCE, 0}, +{115, 3175926989u, 1081920717u, 1081922044u, 0, HYPOT_TOLERANCE, 0}, +{116, 3173242634u, 1081962660u, 1081963507u, 0, HYPOT_TOLERANCE, 0}, +{117, 3170222735u, 1082004603u, 1082005077u, 0, HYPOT_TOLERANCE, 0}, +{118, 3164854026u, 1082046546u, 1082046757u, 0, HYPOT_TOLERANCE, 0}, +{119, 3156465418u, 1082088489u, 1082088541u, 0, HYPOT_TOLERANCE, 0}, +{120, 646742016u, 1082130432u, 1082130432u, 0, HYPOT_TOLERANCE, 0}, +{121, 1008981770u, 1082151404u, 1082151430u, 0, HYPOT_TOLERANCE, 0}, +{122, 1017370378u, 1082172375u, 1082172480u, 0, HYPOT_TOLERANCE, 0}, +{123, 1022739087u, 1082193347u, 1082193581u, 0, HYPOT_TOLERANCE, 0}, +{124, 1025758986u, 1082214318u, 1082214733u, 0, HYPOT_TOLERANCE, 0}, +{125, 1028443341u, 1082235290u, 1082235937u, 0, HYPOT_TOLERANCE, 0}, +{126, 1031127695u, 1082256261u, 1082257191u, 0, HYPOT_TOLERANCE, 0}, +{127, 1032805417u, 1082277233u, 1082278495u, 0, HYPOT_TOLERANCE, 0}, +{128, 1034147594u, 1082298204u, 1082299848u, 0, HYPOT_TOLERANCE, 0}, +{129, 1035489772u, 1082319176u, 1082321253u, 0, HYPOT_TOLERANCE, 0}, +{130, 1036831949u, 1082340147u, 1082342704u, 0, HYPOT_TOLERANCE, 0}, +{131, 1038174126u, 1082361119u, 1082364206u, 0, HYPOT_TOLERANCE, 0}, +{132, 1039516303u, 1082382090u, 1082385754u, 0, HYPOT_TOLERANCE, 0}, +{133, 1040522936u, 1082403062u, 1082407351u, 0, HYPOT_TOLERANCE, 0}, +{134, 1041194025u, 1082424033u, 1082428996u, 0, HYPOT_TOLERANCE, 0}, +{135, 1041865114u, 1082445005u, 1082450688u, 0, HYPOT_TOLERANCE, 0}, +{136, 1042536202u, 1082465976u, 1082472426u, 0, HYPOT_TOLERANCE, 0}, +{137, 1043207291u, 1082486948u, 1082494212u, 0, HYPOT_TOLERANCE, 0}, +{138, 1043878380u, 1082507919u, 1082516043u, 0, HYPOT_TOLERANCE, 0}, +{139, 1044549468u, 1082528891u, 1082537920u, 0, HYPOT_TOLERANCE, 0}, +{140, 1045220557u, 1082549862u, 1082559843u, 0, HYPOT_TOLERANCE, 0}, +{141, 1045891645u, 1082570834u, 1082581812u, 0, HYPOT_TOLERANCE, 0}, +{142, 1046562734u, 1082591805u, 1082603824u, 0, HYPOT_TOLERANCE, 0}, +{143, 1047233823u, 1082612777u, 1082625880u, 0, HYPOT_TOLERANCE, 0}, +{144, 1047904911u, 1082633748u, 1082647982u, 0, HYPOT_TOLERANCE, 0}, +{145, 1048576000u, 1082654720u, 1082670126u, 0, HYPOT_TOLERANCE, 0}, +{146, 1048911544u, 1082675692u, 1082692316u, 0, HYPOT_TOLERANCE, 0}, +{147, 1049247089u, 1082696663u, 1082714547u, 0, HYPOT_TOLERANCE, 0}, +{148, 1049582633u, 1082717635u, 1082736822u, 0, HYPOT_TOLERANCE, 0}, +{149, 1049918177u, 1082738606u, 1082759139u, 0, HYPOT_TOLERANCE, 0}, +{150, 1050253722u, 1082759578u, 1082781498u, 0, HYPOT_TOLERANCE, 0}, +{151, 1050589266u, 1082780549u, 1082803900u, 0, HYPOT_TOLERANCE, 0}, +{152, 1050924810u, 1082801521u, 1082826343u, 0, HYPOT_TOLERANCE, 0}, +{153, 1051260355u, 1082822492u, 1082848826u, 0, HYPOT_TOLERANCE, 0}, +{154, 1051595899u, 1082843464u, 1082871352u, 0, HYPOT_TOLERANCE, 0}, +{155, 1051931443u, 1082864435u, 1082893916u, 0, HYPOT_TOLERANCE, 0}, +{156, 1052266988u, 1082885407u, 1082916522u, 0, HYPOT_TOLERANCE, 0}, +{157, 1052602532u, 1082906378u, 1082939168u, 0, HYPOT_TOLERANCE, 0}, +{158, 1052938076u, 1082927350u, 1082961855u, 0, HYPOT_TOLERANCE, 0}, +{159, 1053273620u, 1082948321u, 1082984579u, 0, HYPOT_TOLERANCE, 0}, +{160, 1053609165u, 1082969293u, 1083007344u, 0, HYPOT_TOLERANCE, 0}, +{161, 1053944709u, 1082990264u, 1083030147u, 0, HYPOT_TOLERANCE, 0}, +{162, 1054280253u, 1083011236u, 1083052990u, 0, HYPOT_TOLERANCE, 0}, +{163, 1054615798u, 1083032207u, 1083075870u, 0, HYPOT_TOLERANCE, 0}, +{164, 1054951342u, 1083053179u, 1083098789u, 0, HYPOT_TOLERANCE, 0}, +{165, 1055286886u, 1083074150u, 1083121745u, 0, HYPOT_TOLERANCE, 0}, +{166, 1055622431u, 1083095122u, 1083144738u, 0, HYPOT_TOLERANCE, 0}, +{167, 1055957975u, 1083116093u, 1083167770u, 0, HYPOT_TOLERANCE, 0}, +{168, 1056293519u, 1083137065u, 1083190838u, 0, HYPOT_TOLERANCE, 0}, +{169, 1056629064u, 1083158036u, 1083213942u, 0, HYPOT_TOLERANCE, 0}, +{170, 1056964608u, 1083179008u, 1083237084u, 0, HYPOT_TOLERANCE, 0}, +{171, 1057132380u, 1083199980u, 1083260262u, 0, HYPOT_TOLERANCE, 0}, +{172, 1057300152u, 1083220951u, 1083283474u, 0, HYPOT_TOLERANCE, 0}, +{173, 1057467924u, 1083241923u, 1083306722u, 0, HYPOT_TOLERANCE, 0}, +{174, 1057635697u, 1083262894u, 1083330007u, 0, HYPOT_TOLERANCE, 0}, +{175, 1057803469u, 1083283866u, 1083353326u, 0, HYPOT_TOLERANCE, 0}, +{176, 1057971241u, 1083304837u, 1083376680u, 0, HYPOT_TOLERANCE, 0}, +{177, 1058139013u, 1083325809u, 1083400069u, 0, HYPOT_TOLERANCE, 0}, +{178, 1058306785u, 1083346780u, 1083423492u, 0, HYPOT_TOLERANCE, 0}, +{179, 1058474557u, 1083367752u, 1083446949u, 0, HYPOT_TOLERANCE, 0}, +{180, 1058642330u, 1083388723u, 1083470440u, 0, HYPOT_TOLERANCE, 0}, +{181, 1058810102u, 1083409695u, 1083493965u, 0, HYPOT_TOLERANCE, 0}, +{182, 1058977874u, 1083430666u, 1083517522u, 0, HYPOT_TOLERANCE, 0}, +{183, 1059145646u, 1083451638u, 1083541113u, 0, HYPOT_TOLERANCE, 0}, +{184, 1059313418u, 1083472609u, 1083564737u, 0, HYPOT_TOLERANCE, 0}, +{185, 1059481190u, 1083493581u, 1083588395u, 0, HYPOT_TOLERANCE, 0}, +{186, 1059648963u, 1083514552u, 1083612082u, 0, HYPOT_TOLERANCE, 0}, +{187, 1059816735u, 1083535524u, 1083635804u, 0, HYPOT_TOLERANCE, 0}, +{188, 1059984507u, 1083556495u, 1083659557u, 0, HYPOT_TOLERANCE, 0}, +{189, 1060152279u, 1083577467u, 1083683341u, 0, HYPOT_TOLERANCE, 0}, +{190, 1060320051u, 1083598438u, 1083707158u, 0, HYPOT_TOLERANCE, 0}, +{191, 1060487823u, 1083619410u, 1083731006u, 0, HYPOT_TOLERANCE, 0}, +{192, 1060655596u, 1083640381u, 1083754885u, 0, HYPOT_TOLERANCE, 0}, +{193, 1060823368u, 1083661353u, 1083778794u, 0, HYPOT_TOLERANCE, 0}, +{194, 1060991140u, 1083682324u, 1083802734u, 0, HYPOT_TOLERANCE, 0}, +{195, 1061158912u, 1083703296u, 1083826705u, 0, HYPOT_TOLERANCE, 0}, +{196, 1061326684u, 1083724268u, 1083850707u, 0, HYPOT_TOLERANCE, 0}, +{197, 1061494456u, 1083745239u, 1083874736u, 0, HYPOT_TOLERANCE, 0}, +{198, 1061662228u, 1083766211u, 1083898797u, 0, HYPOT_TOLERANCE, 0}, +{199, 1061830001u, 1083787182u, 1083922887u, 0, HYPOT_TOLERANCE, 0}, +{200, 1061997773u, 1083808154u, 1083947006u, 0, HYPOT_TOLERANCE, 0}, +{201, 1062165545u, 1083829125u, 1083971153u, 0, HYPOT_TOLERANCE, 0}, +{202, 1062333317u, 1083850097u, 1083995332u, 0, HYPOT_TOLERANCE, 0}, +{203, 1062501089u, 1083871068u, 1084019537u, 0, HYPOT_TOLERANCE, 0}, +{204, 1062668861u, 1083892040u, 1084043773u, 0, HYPOT_TOLERANCE, 0}, +{205, 1062836634u, 1083913011u, 1084068035u, 0, HYPOT_TOLERANCE, 0}, +{206, 1063004406u, 1083933983u, 1084092327u, 0, HYPOT_TOLERANCE, 0}, +{207, 1063172178u, 1083954954u, 1084116645u, 0, HYPOT_TOLERANCE, 0}, +{208, 1063339950u, 1083975926u, 1084140992u, 0, HYPOT_TOLERANCE, 0}, +{209, 1063507722u, 1083996897u, 1084165366u, 0, HYPOT_TOLERANCE, 0}, +{210, 1063675494u, 1084017869u, 1084189767u, 0, HYPOT_TOLERANCE, 0}, +{211, 1063843267u, 1084038840u, 1084214196u, 0, HYPOT_TOLERANCE, 0}, +{212, 1064011039u, 1084059812u, 1084238652u, 0, HYPOT_TOLERANCE, 0}, +{213, 1064178811u, 1084080783u, 1084263133u, 0, HYPOT_TOLERANCE, 0}, +{214, 1064346583u, 1084101755u, 1084287642u, 0, HYPOT_TOLERANCE, 0}, +{215, 1064514355u, 1084122726u, 1084312177u, 0, HYPOT_TOLERANCE, 0}, +{216, 1064682127u, 1084143698u, 1084336739u, 0, HYPOT_TOLERANCE, 0}, +{217, 1064849900u, 1084164669u, 1084361326u, 0, HYPOT_TOLERANCE, 0}, +{218, 1065017672u, 1084185641u, 1084385939u, 0, HYPOT_TOLERANCE, 0}, +{219, 1065185444u, 1084206612u, 1084410578u, 0, HYPOT_TOLERANCE, 0}, +{220, 1065353216u, 1084227584u, 1084435243u, 0, HYPOT_TOLERANCE, 0}, +{221, 1065437102u, 1084248556u, 1084459933u, 0, HYPOT_TOLERANCE, 0}, +{222, 1065520988u, 1084269527u, 1084484648u, 0, HYPOT_TOLERANCE, 0}, +{223, 1065604874u, 1084290499u, 1084509388u, 0, HYPOT_TOLERANCE, 0}, +{224, 1065688760u, 1084311470u, 1084534152u, 0, HYPOT_TOLERANCE, 0}, +{225, 1065772646u, 1084332442u, 1084558942u, 0, HYPOT_TOLERANCE, 0}, +{226, 1065856532u, 1084353413u, 1084583754u, 0, HYPOT_TOLERANCE, 0}, +{227, 1065940419u, 1084374385u, 1084608594u, 0, HYPOT_TOLERANCE, 0}, +{228, 1066024305u, 1084395356u, 1084633454u, 0, HYPOT_TOLERANCE, 0}, +{229, 1066108191u, 1084416328u, 1084658342u, 0, HYPOT_TOLERANCE, 0}, +{230, 1066192077u, 1084437299u, 1084683252u, 0, HYPOT_TOLERANCE, 0}, +{231, 1066275963u, 1084458271u, 1084708184u, 0, HYPOT_TOLERANCE, 0}, +{232, 1066359849u, 1084479242u, 1084733142u, 0, HYPOT_TOLERANCE, 0}, +{233, 1066443735u, 1084500214u, 1084758122u, 0, HYPOT_TOLERANCE, 0}, +{234, 1066527621u, 1084521185u, 1084783125u, 0, HYPOT_TOLERANCE, 0}, +{235, 1066611507u, 1084542157u, 1084808152u, 0, HYPOT_TOLERANCE, 0}, +{236, 1066695393u, 1084563128u, 1084833200u, 0, HYPOT_TOLERANCE, 0}, +{237, 1066779279u, 1084584100u, 1084858273u, 0, HYPOT_TOLERANCE, 0}, +{238, 1066863165u, 1084605071u, 1084883366u, 0, HYPOT_TOLERANCE, 0}, +{239, 1066947052u, 1084626043u, 1084908484u, 0, HYPOT_TOLERANCE, 0}, +{240, 3234402267u, 3222413237u, 1087761618u, 0, HYPOT_TOLERANCE, 0}, +{241, 3231108068u, 3208011552u, 1083736708u, 0, HYPOT_TOLERANCE, 0}, +{242, 3226013659u, 1062977685u, 1079013047u, 0, HYPOT_TOLERANCE, 0}, +{243, 3217625051u, 1075542035u, 1077486600u, 0, HYPOT_TOLERANCE, 0}, +{244, 0u, 1082130432u, 1082130432u, 0, HYPOT_TOLERANCE, 0}, +{245, 1070141403u, 1085424631u, 1085880181u, 0, HYPOT_TOLERANCE, 0}, +{246, 1078530011u, 1088718829u, 1090103903u, 0, HYPOT_TOLERANCE, 0}, +{247, 1083624420u, 1091266034u, 1092516752u, 0, HYPOT_TOLERANCE, 0}, +{248, 3253731328u, 3251634176u, 1109314468u, 0, HYPOT_TOLERANCE, 0}, +{249, 3252840038u, 3250742886u, 1108685935u, 0, HYPOT_TOLERANCE, 0}, +{250, 3251948749u, 3249851597u, 1108057637u, 0, HYPOT_TOLERANCE, 0}, +{251, 3251057459u, 3248960307u, 1107429626u, 0, HYPOT_TOLERANCE, 0}, +{252, 3250166170u, 3248069018u, 1106307685u, 0, HYPOT_TOLERANCE, 0}, +{253, 3249274880u, 3247177728u, 1105053264u, 0, HYPOT_TOLERANCE, 0}, +{254, 3248383590u, 3246181581u, 1103799991u, 0, HYPOT_TOLERANCE, 0}, +{255, 3247492301u, 3244399002u, 1102548223u, 0, HYPOT_TOLERANCE, 0}, +{256, 3246601011u, 3242616422u, 1101298483u, 0, HYPOT_TOLERANCE, 0}, +{257, 3245028147u, 3240833843u, 1100051571u, 0, HYPOT_TOLERANCE, 0}, +{258, 3243245568u, 3239051264u, 1098709875u, 0, HYPOT_TOLERANCE, 0}, +{259, 3241462989u, 3236534682u, 1096236800u, 0, HYPOT_TOLERANCE, 0}, +{260, 3239680410u, 3232969523u, 1093784259u, 0, HYPOT_TOLERANCE, 0}, +{261, 3237792973u, 3229194650u, 1091368619u, 0, HYPOT_TOLERANCE, 0}, +{262, 3234227814u, 3222064333u, 1087538470u, 0, HYPOT_TOLERANCE, 0}, +{263, 3230662656u, 3204448256u, 1083237084u, 0, HYPOT_TOLERANCE, 0}, +{264, 3224580915u, 1067030938u, 1078130363u, 0, HYPOT_TOLERANCE, 0}, +{265, 3213675725u, 1077516698u, 1078362322u, 0, HYPOT_TOLERANCE, 0}, +{266, 1058642330u, 1083388723u, 1083470440u, 0, HYPOT_TOLERANCE, 0}, +{267, 1075000115u, 1086953882u, 1087806820u, 0, HYPOT_TOLERANCE, 0}, +{268, 1082130432u, 1090519040u, 1091509181u, 0, HYPOT_TOLERANCE, 0}, +{269, 1085695590u, 1092301619u, 1093927727u, 0, HYPOT_TOLERANCE, 0}, +{270, 1089260749u, 1094084198u, 1096381811u, 0, HYPOT_TOLERANCE, 0}, +{271, 1091672474u, 1095866778u, 1098855795u, 0, HYPOT_TOLERANCE, 0}, +{272, 1093455053u, 1097649357u, 1100124820u, 0, HYPOT_TOLERANCE, 0}, +{273, 1095237632u, 1099169792u, 1101371928u, 0, HYPOT_TOLERANCE, 0}, +{274, 1097020211u, 1100061082u, 1102621806u, 0, HYPOT_TOLERANCE, 0}, +{275, 1098802790u, 1100952371u, 1103873675u, 0, HYPOT_TOLERANCE, 0}, +{276, 1099746509u, 1101843661u, 1105127024u, 0, HYPOT_TOLERANCE, 0}, +{277, 1100637798u, 1102734950u, 1106381502u, 0, HYPOT_TOLERANCE, 0}, +{278, 1101529088u, 1103626240u, 1107466559u, 0, HYPOT_TOLERANCE, 0}, +{279, 1102420378u, 1104517530u, 1108094589u, 0, HYPOT_TOLERANCE, 0}, +{280, 1103311667u, 1105408819u, 1108722902u, 0, HYPOT_TOLERANCE, 0}, +{281, 1104202957u, 1106300109u, 1109351447u, 0, HYPOT_TOLERANCE, 0}, +{282, 1105094246u, 1107191398u, 1109980183u, 0, HYPOT_TOLERANCE, 0}, +{283, 1105985536u, 1107689472u, 1110609082u, 0, HYPOT_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LOG10_H multiple inclusion protection + +// EOF log10.h diff --git a/packages/language/c/libm/current/tests/vectors/ilogbf.c b/packages/language/c/libm/current/tests/vectors/ilogbf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ilogbf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// ilogbf.c +// +// Test of ilogbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vetors/ilogbf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(ilogbf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &ilogbf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_INT, + &ilogbf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("ilogbf() is stable"); + } // if + else + { + CYG_TEST_FAIL("ilogbf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library ilogbf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "ilogbf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF ilogbf.c diff --git a/packages/language/c/libm/current/tests/vectors/ilogbf.h b/packages/language/c/libm/current/tests/vectors/ilogbf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ilogbf.h @@ -0,0 +1,1361 @@ +#ifndef CYGONCE_LIBM_ILOGBF_H +#define CYGONCE_LIBM_ILOGBF_H +//=========================================================================== +// +// ilogbf.h +// +// Test vectors for testing of ilogbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/ilogbf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ILOGBF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t ilogbf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START +/* +{0, 3214514586u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0},*/ +{21, 3212669092u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{243, 0u, 0u, 3472883712u, 0, ILOGBF_TOLERANCE, 0}, +{244, 1070141403u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{245, 1078530011u, 0u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{246, 1083624420u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{247, 3253731328u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{248, 3252840038u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{249, 3251948749u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{250, 3251057459u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{251, 3250166170u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{252, 3249274880u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{253, 3248383590u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{254, 3247492301u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{255, 3246601011u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{256, 3245028147u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{257, 3243245568u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{258, 3241462989u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{259, 3239680410u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{260, 3237792973u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{261, 3234227814u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{262, 3230662656u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{263, 3224580915u, 0u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{264, 3213675725u, 0u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{265, 1058642330u, 0u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{266, 1075000115u, 0u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{267, 1082130432u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{268, 1085695590u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{269, 1089260749u, 0u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{270, 1091672474u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{271, 1093455053u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{272, 1095237632u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{273, 1097020211u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{274, 1098802790u, 0u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{275, 1099746509u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{276, 1100637798u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{277, 1101529088u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{278, 1102420378u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{279, 1103311667u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{280, 1104202957u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{281, 1105094246u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{282, 1105985536u, 0u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{283, 1107800421u, 1203999711u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{284, 3196650934u, 896005582u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{285, 3368700125u, 3308232444u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{286, 1224242132u, 3061363425u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{287, 3221027117u, 1284201705u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{288, 1198712763u, 919636942u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{289, 867432512u, 3067736756u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{290, 3159309973u, 852521077u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{291, 954173073u, 850531830u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{292, 3090780435u, 1035260608u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{293, 966554515u, 3234538174u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{294, 1312607135u, 1194999402u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{295, 1166191415u, 1018661564u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{296, 3111900019u, 1130472166u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{297, 1234419246u, 2984575812u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{298, 1302107128u, 3370647675u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{299, 1052801068u, 3039122570u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{300, 1060849628u, 3081357692u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{301, 3010214568u, 3446630737u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{302, 3484320003u, 3033957825u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{303, 3181522772u, 3305392896u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{304, 882596369u, 1256676590u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{305, 1167223673u, 846102364u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{306, 968192794u, 878547432u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{307, 3122346862u, 1111584337u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{308, 1052361612u, 1280025214u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{309, 906701409u, 2968301825u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{310, 3471653172u, 1154138102u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{311, 843024648u, 3166833184u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{312, 3231467496u, 934336592u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{313, 1341514497u, 3466051188u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{314, 1272351391u, 3373485062u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{315, 3319724992u, 3354615790u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{316, 3013402113u, 3266377514u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{317, 917622040u, 1334966485u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{318, 940236348u, 3304072663u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{319, 2963234879u, 977028681u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{320, 3251541546u, 3174764041u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{321, 3099843889u, 3355962282u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{322, 3110358400u, 851145088u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{323, 3371863479u, 1014861921u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{324, 3204069187u, 966573255u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{325, 1306460502u, 903489435u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{326, 1197542187u, 3024598921u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{327, 922888249u, 1139392309u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{328, 1184239996u, 3224098462u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{329, 1252490238u, 1173619825u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{330, 1001673627u, 3462631271u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{331, 976098044u, 1151967422u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{332, 941796645u, 886451963u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{333, 3006797923u, 1103058486u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{334, 855756273u, 3217259624u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{335, 3287199470u, 854245542u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{336, 893184329u, 1243067084u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{337, 1143233714u, 1007268238u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{338, 1139941253u, 1147688821u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{339, 3143717025u, 3234638157u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{340, 3048866608u, 3449209899u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{341, 3240298487u, 1020260821u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{342, 1288902137u, 3123875978u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{343, 1333134799u, 1338107877u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{344, 1187847971u, 1317663644u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{345, 1038851706u, 1327544110u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{346, 3329354473u, 3165437289u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{347, 3077218579u, 1308397879u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{348, 1309289088u, 1019883016u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{349, 2991550291u, 1294782875u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{350, 3444653659u, 1279248024u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{351, 3405585402u, 2962345057u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{352, 3106647724u, 853848387u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{353, 1106778573u, 3304487767u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{354, 1140567947u, 3069174149u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{355, 1238569473u, 873035665u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{356, 840375965u, 3223983207u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{357, 3154871957u, 1276671061u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{358, 1261071232u, 1182202773u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{359, 1175011025u, 3029705783u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{360, 1082692850u, 1211581107u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{361, 974547519u, 3475164509u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{362, 3058097085u, 3104309359u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{363, 3107252546u, 1071134451u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{364, 3096032662u, 2976848821u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{365, 3197942144u, 3094120030u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{366, 3403348556u, 3184653669u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{367, 2998032500u, 3373011130u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{368, 3182301130u, 3460764044u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{369, 1136411063u, 1118097422u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{370, 3239231622u, 3302723069u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{371, 3340615780u, 870350055u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{372, 998567360u, 2995278691u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{373, 3417964312u, 1321337529u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{374, 3109481038u, 1143864063u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{375, 1148867223u, 1256486202u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{376, 2960983878u, 1314196594u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{377, 989687421u, 3372681320u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{378, 1152956913u, 3166480640u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{379, 892922651u, 3373029087u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{380, 1109627625u, 1314158257u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{381, 1307091856u, 1103202538u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{382, 1077234132u, 3272167130u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{383, 1142167709u, 1096445242u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{384, 3426232834u, 1036705270u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{385, 3000726366u, 3172023300u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{386, 3368566779u, 967249167u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{387, 3030724760u, 3349013503u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{388, 1138741813u, 3073453199u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{389, 982950501u, 982549888u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{390, 1142981585u, 1015602236u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{391, 3016453868u, 3365560001u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{392, 3347165962u, 3135486696u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{393, 1009535440u, 3381353228u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{394, 3103736980u, 3402950505u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{395, 3126820946u, 1077903063u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{396, 3473956030u, 976891930u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{397, 3349098349u, 1055327704u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{398, 3152729489u, 1060398533u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{399, 945568720u, 3313485084u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{400, 3345489836u, 1108392401u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{401, 940893161u, 1137000140u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{402, 976791751u, 3230678102u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{403, 3013749677u, 1324802687u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{404, 1004442355u, 3036510596u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{405, 1108485380u, 3173536878u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{406, 1061834641u, 972388096u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{407, 3381268392u, 1146976802u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{408, 1087189715u, 2952822478u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{409, 3212952285u, 3329407365u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{410, 1000611335u, 857599439u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{411, 847191250u, 1227905777u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{412, 3466188568u, 1041678304u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{413, 2968337765u, 3091399866u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{414, 3072456205u, 3160254633u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{415, 3319315516u, 3422089012u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{416, 935938416u, 1146676692u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{417, 3212614372u, 1152633030u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{418, 1315030230u, 3336225884u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{419, 822041816u, 898402905u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{420, 1134593658u, 3456812581u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{421, 977281449u, 879922831u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{422, 1086198791u, 920125958u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{423, 1255152035u, 851754050u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{424, 1135271264u, 3284878412u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{425, 1094190727u, 1056854532u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{426, 1294665325u, 991185677u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{427, 1036608591u, 805416536u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{428, 2960459834u, 1296239160u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{429, 3229998064u, 825237063u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{430, 3439134022u, 1043829691u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{431, 3073083133u, 1317170485u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{432, 1325668223u, 970681762u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{433, 1092037607u, 1027330835u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{434, 826457956u, 3343511749u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{435, 3316278408u, 3455589207u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{436, 3295436768u, 3129873731u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{437, 1151984049u, 3074547120u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{438, 1129287043u, 3076527544u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{439, 1243664530u, 972879810u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{440, 950829092u, 929114193u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{441, 1115471979u, 3047246262u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{442, 3351092088u, 3024661404u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{443, 3424479544u, 3312047722u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{444, 3241193975u, 884465785u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{445, 811700241u, 3478509398u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{446, 1030934236u, 1045139240u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{447, 3131791114u, 3408392958u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{448, 1025254314u, 3057812821u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{449, 1110545760u, 3240144177u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{450, 826998191u, 1091496527u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{451, 3180213739u, 1108793820u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{452, 3361976590u, 3138179993u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{453, 881280146u, 3421884736u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{454, 1304154705u, 2961937089u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{455, 3264443610u, 3222916705u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{456, 3374550627u, 3055856293u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{457, 2979664918u, 3365394784u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{458, 899599265u, 3240118211u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{459, 842476444u, 3452685905u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{460, 1268194719u, 1332489410u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{461, 1133420220u, 1245770860u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{462, 1161858787u, 815362075u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{463, 3184462258u, 1263529646u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{464, 3295996963u, 3453334307u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{465, 1270887389u, 1156123987u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{466, 3325193181u, 993979179u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{467, 925657343u, 1315159742u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{468, 3115275450u, 3008350271u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{469, 3116607482u, 3224327456u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{470, 3187892415u, 3118097315u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{471, 1189120494u, 978961471u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{472, 889030794u, 3129523970u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{473, 1323529208u, 3100744786u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{474, 2975945347u, 940445933u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{475, 3465768388u, 3190881451u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{476, 3426099899u, 1118756120u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{477, 3224857113u, 3398166843u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{478, 1065798296u, 816191940u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{479, 3328989444u, 850266225u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{480, 3357819026u, 3148475462u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{481, 1273397670u, 901308750u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{482, 3424831780u, 1304806106u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{483, 1257596246u, 3420832544u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{484, 1051773536u, 896271348u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{485, 3294752507u, 3113225954u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{486, 3424848725u, 2973850350u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{487, 1090870906u, 3294742905u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{488, 1227582289u, 1208979668u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{489, 2996780709u, 852318215u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{490, 1272325814u, 3004311296u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{491, 3359508271u, 859974315u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{492, 2992737514u, 2999023943u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{493, 1137854355u, 3335041917u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{494, 3440773058u, 3204192793u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{495, 3101598400u, 3057760708u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{496, 3451216836u, 3347783723u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{497, 3437062994u, 3106834845u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{498, 1131196082u, 1164573183u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{499, 3177294154u, 1282436638u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{500, 3258097678u, 1305882290u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{501, 3460915348u, 1219372260u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{502, 3009547195u, 1256074626u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{503, 3303035472u, 3153013020u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{504, 1053698677u, 3284313107u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{505, 3396166221u, 1201894512u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{506, 3037541131u, 1085398440u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{507, 3458934263u, 1005577835u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{508, 1065761827u, 3333928591u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{509, 3025843188u, 820250112u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{510, 3017430347u, 3009209071u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{511, 926665223u, 3150815797u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{512, 2970966181u, 3383521344u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{513, 1199816046u, 3143776186u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{514, 3333779015u, 952421041u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{515, 856234019u, 3091454180u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{516, 948398145u, 3238273189u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{517, 3054021468u, 1270257895u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{518, 1080781593u, 1213908300u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{519, 3164749613u, 3010837763u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{520, 2971341371u, 1014754300u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{521, 3235326590u, 1271705594u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{522, 3118883815u, 1051802647u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{523, 965378004u, 1292594138u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{524, 3226990408u, 1110755136u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{525, 2953069847u, 3293953199u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{526, 3117098218u, 1122474770u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{527, 1283624229u, 906796922u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{528, 860729004u, 1163935062u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{529, 970649315u, 1078286437u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{530, 959776291u, 3280345347u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{531, 3341117305u, 3294559023u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{532, 1270734970u, 3355874874u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{533, 3454816067u, 868771977u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{534, 917206623u, 1172710814u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{535, 1106502045u, 1290849316u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{536, 1157598381u, 3309023746u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{537, 835476614u, 1092590501u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{538, 3335234513u, 1002337336u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{539, 1279489061u, 1006049444u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{540, 807133892u, 1110992491u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{541, 3157416480u, 1309984610u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{542, 3143920719u, 3131608518u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{543, 2995340689u, 1165036009u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{544, 1233171235u, 826460580u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{545, 1148920078u, 1007674793u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{546, 3064988156u, 3230867340u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{547, 3083619260u, 1159415661u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{548, 1109198803u, 1221754614u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{549, 3219949483u, 1056167693u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{550, 3361149474u, 3387342069u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{551, 827931800u, 1118474231u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{552, 1207502108u, 3388073586u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{553, 1000014431u, 831213088u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{554, 3161756316u, 3143659754u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{555, 3160728744u, 3382954009u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{556, 1234530539u, 1079988872u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{557, 1017843965u, 1193076204u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{558, 2965746635u, 3248194237u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{559, 951862956u, 1173464654u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{560, 3306328852u, 1118701064u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{561, 1291910469u, 1211303367u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{562, 3027442905u, 1173894400u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{563, 809646928u, 3006525025u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{564, 1131927531u, 3182962700u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{565, 3449879391u, 991614550u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{566, 970094304u, 3344590506u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{567, 1125551064u, 3331248076u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{568, 3427296372u, 3455289118u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{569, 1198917460u, 1327195159u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{570, 3201603336u, 820047343u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{571, 3114686212u, 3476082461u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{572, 921940707u, 2967544056u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{573, 1091906532u, 3011904455u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{574, 3393557778u, 3383396815u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{575, 1276853215u, 873199561u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{576, 3462778440u, 3349284325u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{577, 833132358u, 3470358002u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{578, 3360170117u, 3048354042u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{579, 3224245428u, 3271307999u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{580, 1120124467u, 1135619937u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{581, 1064364381u, 3180675544u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{582, 1268744779u, 3328452652u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{583, 1165195428u, 3390323168u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{584, 3044092739u, 1106497311u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{585, 3149469534u, 1278465842u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{586, 3247790039u, 909788142u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{587, 3215244648u, 1083988595u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{588, 3095275931u, 989153382u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{589, 3059688264u, 1117455718u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{590, 2990022513u, 1061714285u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{591, 1212717473u, 837873779u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{592, 3275973009u, 3450721670u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{593, 3028857014u, 3188853813u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{594, 3391162308u, 1291220039u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{595, 1044867873u, 3369493273u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{596, 1089986803u, 3462160118u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{597, 1296314700u, 2957454177u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{598, 1251462432u, 3171021770u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{599, 3485236902u, 980772835u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{600, 3262169538u, 1268270462u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{601, 3080852256u, 994641495u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{602, 1022211242u, 922124181u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{603, 884661176u, 2985540645u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{604, 3071422941u, 3271100396u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{605, 989762529u, 3362011135u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{606, 1295475718u, 3212305413u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{607, 1002632518u, 3330388441u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{608, 3404372005u, 3450484255u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{609, 3158912530u, 3105501826u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{610, 2987029985u, 1218447414u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{611, 1125800069u, 3256265749u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{612, 3138037576u, 3103365227u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{613, 3108384823u, 1300246663u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{614, 999985470u, 3409354318u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{615, 1189421739u, 1056599002u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{616, 3075182644u, 3144159778u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{617, 3028099649u, 3391513557u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{618, 837703706u, 3467473756u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{619, 3132541814u, 3444521949u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{620, 1164046161u, 3440635788u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{621, 1292596266u, 3116569667u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{622, 3469748379u, 3412765608u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{623, 2968771722u, 3117531540u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{624, 1314644642u, 3123051784u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{625, 3399813173u, 828743798u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{626, 948775569u, 3485444126u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{627, 1034611395u, 882288581u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{628, 3489122735u, 3372450889u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{629, 1181604787u, 3363067409u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{630, 3059042077u, 3204983963u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{631, 1043691622u, 3402603223u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{632, 1314588083u, 856187848u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{633, 3141533334u, 3010142974u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{634, 3013416703u, 3442525943u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{635, 861266716u, 822172554u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{636, 3157534378u, 3451674717u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{637, 2976169000u, 3033697153u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{638, 3400949680u, 3073750220u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{639, 3365581801u, 1175843167u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{640, 1110424755u, 3011308654u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{641, 3189917167u, 927278934u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{642, 969804941u, 3355439348u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{643, 1139120919u, 3270515074u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{644, 816789141u, 3325199970u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{645, 934308144u, 3118191228u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{646, 1220524226u, 1152648002u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{647, 3162548604u, 3461790298u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{648, 3382391700u, 3296962745u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{649, 1156767533u, 1088986462u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{650, 3079222483u, 3312324949u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{651, 994934087u, 967678094u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{652, 840906467u, 3156591981u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{653, 3185240099u, 1123403720u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{654, 870026344u, 1093936408u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{655, 2996887005u, 3287317742u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{656, 3479873563u, 1246277393u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{657, 3424264117u, 3434026174u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{658, 3228365887u, 1216775310u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{659, 1035909900u, 1249532942u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{660, 2989750574u, 1274271338u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{661, 3024951184u, 1247632131u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{662, 1212129651u, 3017366784u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{663, 3125775254u, 955826310u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{664, 1037464105u, 3121544932u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{665, 1311706596u, 1254918706u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{666, 918212457u, 1017468331u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{667, 1337315179u, 3461361185u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{668, 1131358407u, 3325958870u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{669, 1156517523u, 3343716230u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{670, 3210802820u, 3207408574u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{671, 3337499209u, 1226297264u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{672, 3468429030u, 3253874001u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{673, 3253515800u, 1189005947u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{674, 3055299953u, 3047908678u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{675, 959956547u, 876324728u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{676, 3425290480u, 1139193797u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{677, 1039917375u, 1122740999u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{678, 3220979495u, 3429223871u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{679, 1311016004u, 3334899880u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{680, 2995451172u, 2974546424u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{681, 1128016396u, 1105151547u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{682, 3210335769u, 3100646155u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{683, 3022705759u, 3404762495u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{684, 1206054701u, 826010009u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{685, 3144504834u, 1162227076u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{686, 822524010u, 970745811u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{687, 3016981460u, 3313826904u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{688, 1213609983u, 919983950u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{689, 1246902946u, 3064047808u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{690, 995850843u, 1332031130u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{691, 3362082828u, 3374056268u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{692, 1029480631u, 3047777170u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{693, 3153568584u, 3106514232u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{694, 3384988527u, 3109485565u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{695, 1317696241u, 870681806u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{696, 3235395924u, 1132055244u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{697, 3341877624u, 2969495570u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{698, 1228636133u, 886552820u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{699, 3161654634u, 3335899347u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{700, 3162655243u, 3307203982u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{701, 1207246237u, 859223639u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{702, 1165476654u, 3350219111u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{703, 1215278023u, 3019755242u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{704, 1017239798u, 3438501281u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{705, 1149651309u, 970030475u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{706, 1111943722u, 3122211334u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{707, 856374764u, 1158358450u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{708, 1189849849u, 3382739134u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{709, 3204848496u, 3141519085u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{710, 1249758327u, 3104759211u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{711, 3092982276u, 3445282331u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{712, 1168098747u, 1316854744u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{713, 892549317u, 1179637545u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{714, 3301009024u, 3406174560u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{715, 3233089227u, 1212652543u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{716, 3218245284u, 1238873830u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{717, 3215981890u, 3240474694u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{718, 1266687209u, 3092038122u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{719, 825230580u, 3410090781u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{720, 3487959775u, 3331372071u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{721, 943645710u, 852875779u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{722, 3345065699u, 3282620725u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{723, 935847271u, 1067255804u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{724, 3410336089u, 1111437780u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{725, 3082940740u, 1336840432u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{726, 1141063391u, 1168908072u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{727, 3059263153u, 3067795684u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{728, 849450947u, 3289799763u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{729, 3353679791u, 897158391u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{730, 1001823878u, 1016826861u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{731, 1009130212u, 1004302940u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{732, 3367127535u, 943136342u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{733, 1032920919u, 3449126417u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{734, 3281952870u, 3147012185u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{735, 1237868497u, 3048281802u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{736, 1153753924u, 3322269242u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{737, 1120261759u, 892210998u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{738, 3226328360u, 3366432856u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{739, 3349595986u, 3251588707u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{740, 3166889490u, 3306023523u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{741, 1087750238u, 1099325523u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{742, 3121620061u, 3359488363u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{743, 1066116543u, 3072159933u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{744, 3210898034u, 2981803389u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{745, 3051923237u, 3364074347u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{746, 1030612298u, 3345396001u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{747, 3015019212u, 989161453u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{748, 1186234578u, 858134374u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{749, 1331680743u, 1009396165u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{750, 847857044u, 894661023u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{751, 3060774997u, 1326067357u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{752, 887589411u, 1292305693u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{753, 1045232522u, 3234993273u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{754, 3119858470u, 962515365u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{755, 3002873011u, 3188748064u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{756, 3349432725u, 928848003u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{757, 912423027u, 3184646319u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{758, 3228795133u, 3273940030u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{759, 3194674746u, 3112269709u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{760, 3296784303u, 3276182352u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{761, 965402291u, 3107104376u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{762, 3388153589u, 3426245389u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{763, 1133410485u, 3329658993u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{764, 3136790322u, 1088652637u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{765, 3369970587u, 959121458u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{766, 1270451568u, 928393353u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{767, 989498922u, 3088358419u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{768, 1280215674u, 3148135875u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{769, 1171873518u, 954709738u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{770, 3298258100u, 935525182u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{771, 3415208824u, 822843236u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{772, 1001897182u, 3191875320u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{773, 3152777939u, 3245830463u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{774, 985903305u, 3333087577u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{775, 3357328848u, 859306298u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{776, 2967395608u, 3077307650u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{777, 982612185u, 923582663u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{778, 3267868136u, 1208301947u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{779, 3319048157u, 1172271145u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{780, 1144755661u, 860947435u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{781, 840456845u, 1051585760u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{782, 898467286u, 839254959u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{783, 3301461672u, 1233693827u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{784, 3364525678u, 3089849671u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{785, 871130681u, 905123007u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{786, 931441127u, 1133424555u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{787, 3146660041u, 3143695961u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{788, 3467121799u, 3023584354u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{789, 1151257041u, 3084216427u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{790, 3097873255u, 3219266640u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{791, 3130670309u, 3192399254u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{792, 1017573824u, 3130901062u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{793, 1258369714u, 3462258576u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{794, 1216602683u, 3371396332u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{795, 2976429847u, 959973239u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{796, 3297265739u, 1214184410u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{797, 1071940738u, 3311731012u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{798, 922601356u, 3337171870u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{799, 3462285635u, 3444030332u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{800, 3357177805u, 1085464241u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{801, 3049120080u, 900832851u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{802, 1153863660u, 1011991342u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{803, 3034243695u, 917098003u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{804, 809294662u, 3266461458u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{805, 822231182u, 3393408718u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{806, 845772797u, 3341109215u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{807, 1249365132u, 3278686216u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{808, 3046215730u, 3211219980u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{809, 3047251716u, 1090787353u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{810, 2980866154u, 1147012796u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{811, 3131219358u, 3471261157u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{812, 3222096285u, 1198013705u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{813, 1297708818u, 3079166173u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{814, 3345532722u, 3383708463u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{815, 3418753236u, 3481843070u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{816, 1277417964u, 3487506626u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{817, 987577257u, 1152077087u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{818, 3161606610u, 3190282989u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{819, 849056171u, 910674398u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{820, 888030585u, 3062367380u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{821, 1043442869u, 3311393817u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{822, 851189486u, 3007588581u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{823, 3320923228u, 3464544249u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{824, 1337400405u, 3488844154u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{825, 2964339884u, 3186563447u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{826, 3400348640u, 3129868490u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{827, 1250249095u, 1069023744u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{828, 3284411233u, 1173613526u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{829, 3020883322u, 2953622587u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{830, 1215968622u, 3469884568u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{831, 3202319550u, 819117302u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{832, 3061638260u, 3116222327u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{833, 1025404104u, 1066370251u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{834, 3138086437u, 3195983510u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{835, 3091024506u, 3456196859u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{836, 3362748242u, 3369843597u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{837, 3099671635u, 3218383623u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{838, 3068014841u, 2978226656u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{839, 1252237719u, 1121169249u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{840, 3327895594u, 1224511805u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{841, 3082454432u, 889268276u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{842, 3396161504u, 1182798837u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{843, 1099710167u, 887180181u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{844, 1157186482u, 1288722647u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{845, 1282110851u, 3176633124u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{846, 3477008113u, 1331845018u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{847, 3292127294u, 3409957764u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{848, 1123357102u, 3281307320u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{849, 1106837025u, 3088080674u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{850, 1049949008u, 1130799489u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{851, 1253017688u, 942062372u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{852, 1108543194u, 3281299199u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{853, 3087985411u, 1238341456u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{854, 3002187365u, 1073809054u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{855, 3163283126u, 1328636961u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{856, 1160162706u, 1264067367u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{857, 3305715025u, 3017496063u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{858, 1266928623u, 811778614u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{859, 3025340297u, 1193925540u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{860, 3438080027u, 3107114149u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{861, 3344574751u, 3111270744u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{862, 1152416724u, 962669179u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{863, 1218239308u, 1126238113u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{864, 3263310567u, 1030748197u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{865, 835770216u, 865469272u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{866, 3041998669u, 1160635263u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{867, 1000313118u, 2980130729u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{868, 972485427u, 1124312043u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{869, 3290264612u, 1124703898u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{870, 869072657u, 3150369767u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{871, 3222106584u, 1183748648u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{872, 1278946388u, 825129857u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{873, 947914771u, 3181847068u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{874, 3167730654u, 3195765940u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{875, 1098530298u, 3255870890u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{876, 3232726036u, 871038882u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{877, 1297190916u, 811863044u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{878, 1277649137u, 961171401u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{879, 3203377685u, 1306427476u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{880, 3090306474u, 3124785016u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{881, 3244032016u, 3045313345u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{882, 3033122376u, 3049877065u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{883, 3019221802u, 3329183205u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{884, 1096155623u, 1256423752u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{885, 873151908u, 3246562559u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{886, 3238729605u, 1298769842u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{887, 3317196817u, 989537151u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{888, 3374748510u, 834161190u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{889, 3345634950u, 959901149u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{890, 3189860276u, 883598767u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{891, 887311687u, 1175312255u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{892, 3396917283u, 3066326686u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{893, 3317032737u, 3143803722u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{894, 1200051436u, 1163802508u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{895, 3105291012u, 1194385202u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{896, 1306520561u, 957302464u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{897, 1314936356u, 2985592532u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{898, 3475052219u, 1284049853u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{899, 3085636260u, 1107682820u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{900, 2995058661u, 822977912u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{901, 3393227708u, 3271879112u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{902, 2983919425u, 3341426744u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{903, 3182540197u, 852580839u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{904, 3349005404u, 3080993030u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{905, 3154720153u, 3443720494u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{906, 1262863321u, 1219003129u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{907, 882902102u, 1224362550u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{908, 2995633678u, 828113666u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{909, 1053387478u, 3184880021u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{910, 3387653691u, 3347783852u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{911, 3136364836u, 1018492227u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{912, 808412264u, 941158192u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{913, 1338680611u, 1166078045u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{914, 1112891928u, 3074730425u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{915, 893449284u, 1052877339u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{916, 892311459u, 1097338393u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{917, 3105373037u, 3246705916u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{918, 1190105283u, 3033907262u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{919, 1011225926u, 1180485180u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{920, 1043025031u, 987068973u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{921, 3410531037u, 2953541915u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{922, 3125834184u, 896953754u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{923, 902318189u, 849277289u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{924, 835377647u, 3441354730u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{925, 2976308307u, 1286944060u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{926, 3213624815u, 2987148017u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{927, 1120888322u, 1086209113u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{928, 1315217243u, 3396371713u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{929, 3137758475u, 1039403054u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{930, 1040617590u, 1034835971u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{931, 955384253u, 3344785562u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{932, 853063496u, 3317415965u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{933, 823111402u, 877253523u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{934, 3061417900u, 1172208065u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{935, 904255535u, 1019967545u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{936, 1022984119u, 3113891410u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{937, 997362368u, 3112875428u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{938, 900933520u, 1100589187u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{939, 1168623062u, 1143306482u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{940, 878737490u, 3269908326u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{941, 1039827284u, 1072928888u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{942, 1021564080u, 1064468397u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{943, 3458669745u, 3033299853u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{944, 3327516316u, 3405380971u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{945, 1040711112u, 3229444200u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{946, 1134528351u, 3365952513u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{947, 3039884464u, 1170612785u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{948, 3414352838u, 3350285760u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{949, 1133689539u, 1067460093u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{950, 3455688478u, 3333091960u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{951, 1137634874u, 1137038869u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{952, 3415502662u, 955510692u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{953, 954999730u, 969618597u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{954, 1066157309u, 3241712664u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{955, 3436353675u, 1174967495u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{956, 940437609u, 860372396u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{957, 3108347547u, 3434003435u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{958, 3064200154u, 3158080507u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{959, 1023889593u, 2979304683u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{960, 3272661536u, 3461799138u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{961, 1170245333u, 1233406410u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{962, 1219052056u, 3369557946u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{963, 3318983619u, 3259663338u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{964, 3372118621u, 837597103u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{965, 3146190320u, 889646054u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{966, 1299683827u, 966031619u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{967, 3190796331u, 1320011850u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{968, 2965838479u, 805822032u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{969, 3086068902u, 3484245751u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{970, 3064155399u, 3176569312u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{971, 836858201u, 3132995403u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{972, 3040314717u, 1071290674u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{973, 3257224022u, 3361778245u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{974, 1229268598u, 1066965677u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{975, 3184078812u, 871003709u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{976, 871255076u, 3446104825u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{977, 1086717248u, 3423795374u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{978, 3434884607u, 3029593823u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{979, 3464955606u, 1017987696u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{980, 1025278524u, 3121856207u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{981, 1242829722u, 3233935671u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{982, 3075149137u, 1117325737u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{983, 1200927971u, 1317167489u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{984, 3326858092u, 3452602832u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{985, 2995203347u, 1021818696u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{986, 1246019790u, 850632217u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{987, 3184801644u, 1137974313u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{988, 1136052740u, 3244616020u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{989, 1069009211u, 3002507482u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{990, 1015670780u, 1101217251u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{991, 1012543234u, 1116520440u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{992, 3316611992u, 3394732912u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{993, 3012101436u, 3307846870u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{994, 1087942795u, 3316660295u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{995, 3426365713u, 3069778532u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{996, 3066654389u, 3443934204u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{997, 3295326432u, 1313396175u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{998, 3318835308u, 3277583511u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{999, 3283555717u, 891875120u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{1000, 3381255420u, 3015406047u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{1001, 3040485181u, 3375450886u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1002, 3388772093u, 1032597076u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{1003, 954670189u, 1144923689u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1004, 1319200415u, 3387555900u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1005, 1279324488u, 3228401212u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{1006, 3217795424u, 865577227u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{1007, 3455131757u, 1260217257u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{1008, 2982636375u, 3162157233u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1009, 1246947517u, 1087951909u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1010, 3396723577u, 869285240u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1011, 3433761025u, 3060143904u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1012, 3201187455u, 900233172u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{1013, 1173247961u, 1191127979u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{1014, 3037297123u, 3346394818u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1015, 3248534678u, 1323683800u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1016, 3083019343u, 3033309444u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{1017, 3042018375u, 3203882372u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1018, 1082862511u, 3032804719u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{1019, 3157626955u, 3483653298u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{1020, 1341821683u, 3003675365u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{1021, 881101379u, 1190838126u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1022, 1079061705u, 2960507663u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1023, 3182695954u, 3256861672u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{1024, 1105291533u, 3482971524u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1025, 1016023520u, 3227712090u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{1026, 3370691006u, 1295870514u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{1027, 1156767169u, 1049756240u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1028, 3077020499u, 894671462u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{1029, 1104284039u, 3040211914u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1030, 3335212901u, 3486414589u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{1031, 1093697541u, 3193708441u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{1032, 3266691185u, 1160074593u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{1033, 3179003144u, 1108615803u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{1034, 1094115255u, 3008610212u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{1035, 2994604730u, 973792195u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{1036, 3424086808u, 3260140004u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{1037, 2957266025u, 917932067u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{1038, 3353608773u, 1134068114u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1039, 2985838945u, 3118475644u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1040, 973664327u, 1319516167u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{1041, 882878091u, 3136970767u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1042, 1098662266u, 833740182u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{1043, 927582555u, 947955456u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{1044, 3111440310u, 3067634077u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{1045, 3476083859u, 966439623u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{1046, 3038754840u, 932009686u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1047, 979878744u, 1232482646u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{1048, 3464546616u, 3205527253u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1049, 1002542205u, 3152136093u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1050, 3443552129u, 3165561391u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{1051, 1287620154u, 3119707283u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1052, 820906845u, 1196920413u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{1053, 860108361u, 921064349u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1054, 946058434u, 1249928879u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1055, 3073260205u, 3093124531u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{1056, 1245702957u, 894348966u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1057, 989655126u, 1308376568u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{1058, 1002715618u, 1191006977u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1059, 3087802274u, 897541752u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1060, 1000863905u, 1196831314u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1061, 3415763001u, 3032518431u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{1062, 2979924820u, 1100234812u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1063, 3283471961u, 1260093226u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{1064, 3311210827u, 1192192264u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1065, 3026311911u, 2968974374u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{1066, 1198307901u, 1116328249u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{1067, 1288901567u, 1296370667u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1068, 922255363u, 958305289u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{1069, 1113104661u, 944376032u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{1070, 1136714348u, 828849087u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{1071, 3002059872u, 1136817970u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1072, 948856035u, 1015466475u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1073, 1062512367u, 3229559531u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{1074, 3486907092u, 823220784u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{1075, 3015049792u, 3078555978u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{1076, 1162027071u, 3308983387u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1077, 1034561811u, 1054043114u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{1078, 853827378u, 898656161u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1079, 3271615417u, 3209997200u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1080, 1042014529u, 1146708584u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{1081, 1177157787u, 3090208179u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{1082, 3196144817u, 1056118717u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{1083, 3432084552u, 2997091781u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1084, 1309658335u, 1010219988u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1085, 3004373345u, 873739132u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1086, 2997667929u, 1038223245u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1087, 1226494979u, 2991604792u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{1088, 3100289712u, 3456334210u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1089, 3375507013u, 1306310823u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{1090, 3460699001u, 3096700943u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1091, 3079231719u, 1044386263u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{1092, 3093951884u, 1014115231u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1093, 3468023178u, 1209565017u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1094, 3008182310u, 1258900986u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1095, 1204196034u, 3298625731u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1096, 3459877411u, 2960476959u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1097, 909696559u, 1163075690u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1098, 1161439847u, 943449277u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1099, 908663107u, 939489763u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1100, 1055319316u, 3261813492u, 3221225472u, 0, ILOGBF_TOLERANCE, 0}, +{1101, 1084378658u, 1009650785u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{1102, 3053887750u, 3341786453u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1103, 3022828828u, 881335251u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{1104, 2995476576u, 3194911588u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1105, 1226473697u, 821025132u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{1106, 1123114742u, 1229815537u, 1086324736u, 0, ILOGBF_TOLERANCE, 0}, +{1107, 1258114435u, 1291336083u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{1108, 2983818103u, 3015402015u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1109, 3468040845u, 3066966245u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1110, 1178825761u, 1113195286u, 1095761920u, 0, ILOGBF_TOLERANCE, 0}, +{1111, 3059266302u, 878503862u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1112, 3223384012u, 1130486973u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1113, 1019964626u, 1235133609u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{1114, 3445262427u, 3465211174u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{1115, 1125653081u, 1207799746u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1116, 3337652712u, 3025581813u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{1117, 1184753508u, 3147374485u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{1118, 996404791u, 3353251979u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{1119, 1188439315u, 1113484271u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{1120, 906557513u, 3006513432u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1121, 916831283u, 999465787u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{1122, 996786317u, 3179221951u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{1123, 3461635065u, 1004690387u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1124, 1188167943u, 1200744896u, 1096810496u, 0, ILOGBF_TOLERANCE, 0}, +{1125, 3036502395u, 1172597364u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1126, 891257783u, 1267560050u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1127, 3290079438u, 846519377u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{1128, 3350690327u, 2967953392u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1129, 1102061604u, 3424449935u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1130, 1282351521u, 3039376424u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{1131, 3458861065u, 3392466405u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1132, 3095256878u, 1023623326u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1133, 3163373610u, 843150426u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{1134, 3228793330u, 855146890u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1135, 3422194733u, 893873945u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{1136, 3083885296u, 974543672u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{1137, 1261940623u, 3402349985u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{1138, 825039660u, 3426717554u, 3253207040u, 0, ILOGBF_TOLERANCE, 0}, +{1139, 3400603081u, 3234396843u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{1140, 1219411812u, 2961857939u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{1141, 3094833770u, 805351108u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1142, 3139250800u, 3079109479u, 3239051264u, 0, ILOGBF_TOLERANCE, 0}, +{1143, 886201503u, 3272760705u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1144, 3297366026u, 1089966380u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1145, 1218488455u, 3309646450u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{1146, 3040358923u, 3093401553u, 3249012736u, 0, ILOGBF_TOLERANCE, 0}, +{1147, 862346861u, 3411853707u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1148, 1283938137u, 1196383822u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1149, 3182551696u, 3029982441u, 3229614080u, 0, ILOGBF_TOLERANCE, 0}, +{1150, 1317098613u, 949986176u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1151, 3116209179u, 3303588342u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{1152, 3431703657u, 3014443710u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1153, 3239728775u, 927815421u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{1154, 3207141672u, 933456504u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{1155, 3154378805u, 905462392u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{1156, 3069658155u, 1041452042u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{1157, 3313160088u, 2964063309u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1158, 3207056527u, 3384206601u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{1159, 1284174954u, 3436881197u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1160, 3156081645u, 3308839704u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{1161, 1063693032u, 976661408u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{1162, 3036026175u, 1251203998u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1163, 1102631663u, 3396951425u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1164, 968803479u, 992989712u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{1165, 3273080388u, 3109405906u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1166, 1172529774u, 3294550127u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{1167, 1306695905u, 1292690378u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{1168, 1003649752u, 1218792138u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1169, 1078478376u, 1326246424u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1170, 3158855023u, 3151283866u, 3235905536u, 0, ILOGBF_TOLERANCE, 0}, +{1171, 1165177679u, 3276237026u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1172, 870472127u, 3332532333u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{1173, 3403009513u, 3381966453u, 1102053376u, 0, ILOGBF_TOLERANCE, 0}, +{1174, 816825508u, 3032174124u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{1175, 952348506u, 3377573987u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1176, 839544701u, 3419900937u, 3252158464u, 0, ILOGBF_TOLERANCE, 0}, +{1177, 2967454456u, 3313359047u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{1178, 1222777442u, 1125769920u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{1179, 1325324763u, 978336043u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1180, 3363524213u, 3202991311u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{1181, 1158950321u, 1073578913u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1182, 903129873u, 3416864271u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{1183, 2997685349u, 1123653663u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1184, 3078339944u, 988173985u, 3246915584u, 0, ILOGBF_TOLERANCE, 0}, +{1185, 1208345407u, 1254181270u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{1186, 3003262042u, 1327277116u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1187, 1258634105u, 1247426200u, 1102577664u, 0, ILOGBF_TOLERANCE, 0}, +{1188, 1248478509u, 1287895126u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1189, 1153863988u, 3430539165u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1190, 1235620969u, 866627358u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{1191, 1097120930u, 3221726305u, 1077936128u, 0, ILOGBF_TOLERANCE, 0}, +{1192, 3469778622u, 1200179013u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1193, 1147712200u, 931865525u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{1194, 812694172u, 1136276190u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{1195, 862266739u, 3139447362u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1196, 1124721745u, 3058969650u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1197, 3261744304u, 1043806501u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{1198, 832324055u, 2954061156u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1199, 805759679u, 903848557u, 3254255616u, 0, ILOGBF_TOLERANCE, 0}, +{1200, 2983396015u, 872299138u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1201, 1064922416u, 1320485628u, 3212836864u, 0, ILOGBF_TOLERANCE, 0}, +{1202, 868114980u, 3213276361u, 3250585600u, 0, ILOGBF_TOLERANCE, 0}, +{1203, 3303160152u, 3075455322u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1204, 1315090496u, 3269683237u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1205, 850876090u, 3365795667u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1206, 3230403187u, 1322841992u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{1207, 1335399673u, 974138676u, 1107296256u, 0, ILOGBF_TOLERANCE, 0}, +{1208, 1072458508u, 3372833993u, 0u, 0, ILOGBF_TOLERANCE, 0}, +{1209, 3303015249u, 3015039539u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1210, 3252139741u, 1059615003u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1211, 3468519966u, 3113982619u, 1106247680u, 0, ILOGBF_TOLERANCE, 0}, +{1212, 1006231203u, 897530770u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1213, 951554138u, 1001144381u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1214, 942046828u, 986341002u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1215, 2968517146u, 951832467u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{1216, 3319723279u, 3414482416u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{1217, 3255104167u, 928827688u, 1084227584u, 0, ILOGBF_TOLERANCE, 0}, +{1218, 1155477903u, 3104812800u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1219, 3273889176u, 980486479u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1220, 3237813668u, 3441016803u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{1221, 1228207362u, 2985476579u, 1100480512u, 0, ILOGBF_TOLERANCE, 0}, +{1222, 975349337u, 1311932596u, 3241148416u, 0, ILOGBF_TOLERANCE, 0}, +{1223, 2982583196u, 3132904446u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1224, 1290175785u, 3008182462u, 1104150528u, 0, ILOGBF_TOLERANCE, 0}, +{1225, 981908840u, 3314038398u, 3240099840u, 0, ILOGBF_TOLERANCE, 0}, +{1226, 941187647u, 1107765599u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1227, 1214223128u, 3225536822u, 1099431936u, 0, ILOGBF_TOLERANCE, 0}, +{1228, 3422922584u, 1086391131u, 1103626240u, 0, ILOGBF_TOLERANCE, 0}, +{1229, 1315857601u, 3487600045u, 1105723392u, 0, ILOGBF_TOLERANCE, 0}, +{1230, 3453226030u, 3233768835u, 1105199104u, 0, ILOGBF_TOLERANCE, 0}, +{1231, 1078359574u, 3199175230u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1232, 1029557624u, 3302959071u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{1233, 1207675424u, 3042692550u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1234, 1028355074u, 3442294040u, 3231711232u, 0, ILOGBF_TOLERANCE, 0}, +{1235, 3119299090u, 1187096397u, 3242196992u, 0, ILOGBF_TOLERANCE, 0}, +{1236, 1248421894u, 3367769132u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1237, 3353251994u, 1095517730u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1238, 876926659u, 3288089977u, 3250061312u, 0, ILOGBF_TOLERANCE, 0}, +{1239, 1076752219u, 876236939u, 1065353216u, 0, ILOGBF_TOLERANCE, 0}, +{1240, 3388531942u, 2988520062u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{1241, 1273395082u, 3031189261u, 1103101952u, 0, ILOGBF_TOLERANCE, 0}, +{1242, 3385588183u, 3258252464u, 1101004800u, 0, ILOGBF_TOLERANCE, 0}, +{1243, 862047095u, 829323655u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1244, 3192315328u, 3289489214u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{1245, 3441804648u, 3274638356u, 1104674816u, 0, ILOGBF_TOLERANCE, 0}, +{1246, 837368567u, 3228474927u, 3252682752u, 0, ILOGBF_TOLERANCE, 0}, +{1247, 3392827417u, 1277961150u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1248, 1161241793u, 1328003707u, 1093664768u, 0, ILOGBF_TOLERANCE, 0}, +{1249, 856495732u, 3123041418u, 3251109888u, 0, ILOGBF_TOLERANCE, 0}, +{1250, 3034494183u, 3041579130u, 3249537024u, 0, ILOGBF_TOLERANCE, 0}, +{1251, 1171318485u, 3374409104u, 1094713344u, 0, ILOGBF_TOLERANCE, 0}, +{1252, 3047748143u, 831102792u, 3248488448u, 0, ILOGBF_TOLERANCE, 0}, +{1253, 1001216371u, 3052357038u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1254, 2999541351u, 3085461799u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1255, 912515889u, 1074635609u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1256, 3391452505u, 897989232u, 1101529088u, 0, ILOGBF_TOLERANCE, 0}, +{1257, 3249603369u, 3147662248u, 1082130432u, 0, ILOGBF_TOLERANCE, 0}, +{1258, 1220264047u, 2960450369u, 1099956224u, 0, ILOGBF_TOLERANCE, 0}, +{1259, 3169816394u, 988430929u, 3233808384u, 0, ILOGBF_TOLERANCE, 0}, +{1260, 3098997418u, 3002162688u, 3244294144u, 0, ILOGBF_TOLERANCE, 0}, +{1261, 3282212423u, 3174079140u, 1090519040u, 0, ILOGBF_TOLERANCE, 0}, +{1262, 3352293320u, 3247843425u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1263, 3296358441u, 875645354u, 1091567616u, 0, ILOGBF_TOLERANCE, 0}, +{1264, 1197828352u, 3245614728u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{1265, 3340510371u, 914930263u, 1097859072u, 0, ILOGBF_TOLERANCE, 0}, +{1266, 1127109339u, 3368125489u, 1088421888u, 0, ILOGBF_TOLERANCE, 0}, +{1267, 816173492u, 1083268662u, 3253731328u, 0, ILOGBF_TOLERANCE, 0}, +{1268, 909467381u, 1232375752u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1269, 1200599955u, 2981200675u, 1098907648u, 0, ILOGBF_TOLERANCE, 0}, +{1270, 962230977u, 2988248037u, 3243245568u, 0, ILOGBF_TOLERANCE, 0}, +{1271, 2996667337u, 1068572835u, 3251634176u, 0, ILOGBF_TOLERANCE, 0}, +{1272, 3192887808u, 3191848339u, 3225419776u, 0, ILOGBF_TOLERANCE, 0}, +{1273, 3237183876u, 3179379969u, 1073741824u, 0, ILOGBF_TOLERANCE, 0}, +{1274, 939285924u, 3056079386u, 3246391296u, 0, ILOGBF_TOLERANCE, 0}, +{1275, 944050180u, 3452557879u, 3245342720u, 0, ILOGBF_TOLERANCE, 0}, +{1276, 3058135703u, 3090284601u, 3247964160u, 0, ILOGBF_TOLERANCE, 0}, +{1277, 3480592662u, 3261728191u, 1106771968u, 0, ILOGBF_TOLERANCE, 0}, +{1278, 3061939312u, 3274418540u, 3247439872u, 0, ILOGBF_TOLERANCE, 0}, +{1279, 1003299981u, 853295521u, 3238002688u, 0, ILOGBF_TOLERANCE, 0}, +{1280, 1155775526u, 1255814444u, 1092616192u, 0, ILOGBF_TOLERANCE, 0}, +{1281, 1234491880u, 3408568717u, 1101004800u, 0, ILOGBF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ILOGBF_H multiple inclusion protection + +// EOF ilogbf.h diff --git a/packages/language/c/libm/current/tests/vectors/isnanf.c b/packages/language/c/libm/current/tests/vectors/isnanf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/isnanf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// isnanf.c +// +// Test of isnanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/isnanf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(isnanf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &isnanf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_INT, + &isnanf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("isnanf() is stable"); + } // if + else + { + CYG_TEST_FAIL("isnanf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library isnanf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "isnanf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF isnanf.c diff --git a/packages/language/c/libm/current/tests/vectors/isnanf.h b/packages/language/c/libm/current/tests/vectors/isnanf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/isnanf.h @@ -0,0 +1,1401 @@ +#ifndef CYGONCE_LIBM_ISNANF_H +#define CYGONCE_LIBM_ISNANF_H +//=========================================================================== +// +// isnanf.h +// +// Test vectors for testing of isnanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/isnanf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define ISNANF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t isnanf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{243, 0u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{244, 1070141403u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{245, 1078530011u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{246, 1083624420u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{247, 3253731328u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{248, 3252840038u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{249, 3251948749u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{250, 3251057459u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{251, 3250166170u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{252, 3249274880u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{253, 3248383590u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{254, 3247492301u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{255, 3246601011u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{256, 3245028147u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{257, 3243245568u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{258, 3241462989u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{259, 3239680410u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{260, 3237792973u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{261, 3234227814u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{262, 3230662656u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{263, 3224580915u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{264, 3213675725u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{265, 1058642330u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{266, 1075000115u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{267, 1082130432u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{268, 1085695590u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{269, 1089260749u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{270, 1091672474u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{271, 1093455053u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{272, 1095237632u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{273, 1097020211u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{274, 1098802790u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{275, 1099746509u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{276, 1100637798u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{277, 1101529088u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{278, 1102420378u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{279, 1103311667u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{280, 1104202957u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{281, 1105094246u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{282, 1105985536u, 0u, 0u, 0, ISNANF_TOLERANCE, 0}, +{283, 1107800421u, 1203999711u, 0u, 0, ISNANF_TOLERANCE, 0}, +{284, 3196650934u, 896005582u, 0u, 0, ISNANF_TOLERANCE, 0}, +{285, 3368700125u, 3308232444u, 0u, 0, ISNANF_TOLERANCE, 0}, +{286, 1224242132u, 3061363425u, 0u, 0, ISNANF_TOLERANCE, 0}, +{287, 3221027117u, 1284201705u, 0u, 0, ISNANF_TOLERANCE, 0}, +{288, 1198712763u, 919636942u, 0u, 0, ISNANF_TOLERANCE, 0}, +{289, 867432512u, 3067736756u, 0u, 0, ISNANF_TOLERANCE, 0}, +{290, 3159309973u, 852521077u, 0u, 0, ISNANF_TOLERANCE, 0}, +{291, 954173073u, 850531830u, 0u, 0, ISNANF_TOLERANCE, 0}, +{292, 3090780435u, 1035260608u, 0u, 0, ISNANF_TOLERANCE, 0}, +{293, 966554515u, 3234538174u, 0u, 0, ISNANF_TOLERANCE, 0}, +{294, 1312607135u, 1194999402u, 0u, 0, ISNANF_TOLERANCE, 0}, +{295, 1166191415u, 1018661564u, 0u, 0, ISNANF_TOLERANCE, 0}, +{296, 3111900019u, 1130472166u, 0u, 0, ISNANF_TOLERANCE, 0}, +{297, 1234419246u, 2984575812u, 0u, 0, ISNANF_TOLERANCE, 0}, +{298, 1302107128u, 3370647675u, 0u, 0, ISNANF_TOLERANCE, 0}, +{299, 1052801068u, 3039122570u, 0u, 0, ISNANF_TOLERANCE, 0}, +{300, 1060849628u, 3081357692u, 0u, 0, ISNANF_TOLERANCE, 0}, +{301, 3010214568u, 3446630737u, 0u, 0, ISNANF_TOLERANCE, 0}, +{302, 3484320003u, 3033957825u, 0u, 0, ISNANF_TOLERANCE, 0}, +{303, 3181522772u, 3305392896u, 0u, 0, ISNANF_TOLERANCE, 0}, +{304, 882596369u, 1256676590u, 0u, 0, ISNANF_TOLERANCE, 0}, +{305, 1167223673u, 846102364u, 0u, 0, ISNANF_TOLERANCE, 0}, +{306, 968192794u, 878547432u, 0u, 0, ISNANF_TOLERANCE, 0}, +{307, 3122346862u, 1111584337u, 0u, 0, ISNANF_TOLERANCE, 0}, +{308, 1052361612u, 1280025214u, 0u, 0, ISNANF_TOLERANCE, 0}, +{309, 906701409u, 2968301825u, 0u, 0, ISNANF_TOLERANCE, 0}, +{310, 3471653172u, 1154138102u, 0u, 0, ISNANF_TOLERANCE, 0}, +{311, 843024648u, 3166833184u, 0u, 0, ISNANF_TOLERANCE, 0}, +{312, 3231467496u, 934336592u, 0u, 0, ISNANF_TOLERANCE, 0}, +{313, 1341514497u, 3466051188u, 0u, 0, ISNANF_TOLERANCE, 0}, +{314, 1272351391u, 3373485062u, 0u, 0, ISNANF_TOLERANCE, 0}, +{315, 3319724992u, 3354615790u, 0u, 0, ISNANF_TOLERANCE, 0}, +{316, 3013402113u, 3266377514u, 0u, 0, ISNANF_TOLERANCE, 0}, +{317, 917622040u, 1334966485u, 0u, 0, ISNANF_TOLERANCE, 0}, +{318, 940236348u, 3304072663u, 0u, 0, ISNANF_TOLERANCE, 0}, +{319, 2963234879u, 977028681u, 0u, 0, ISNANF_TOLERANCE, 0}, +{320, 3251541546u, 3174764041u, 0u, 0, ISNANF_TOLERANCE, 0}, +{321, 3099843889u, 3355962282u, 0u, 0, ISNANF_TOLERANCE, 0}, +{322, 3110358400u, 851145088u, 0u, 0, ISNANF_TOLERANCE, 0}, +{323, 3371863479u, 1014861921u, 0u, 0, ISNANF_TOLERANCE, 0}, +{324, 3204069187u, 966573255u, 0u, 0, ISNANF_TOLERANCE, 0}, +{325, 1306460502u, 903489435u, 0u, 0, ISNANF_TOLERANCE, 0}, +{326, 1197542187u, 3024598921u, 0u, 0, ISNANF_TOLERANCE, 0}, +{327, 922888249u, 1139392309u, 0u, 0, ISNANF_TOLERANCE, 0}, +{328, 1184239996u, 3224098462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{329, 1252490238u, 1173619825u, 0u, 0, ISNANF_TOLERANCE, 0}, +{330, 1001673627u, 3462631271u, 0u, 0, ISNANF_TOLERANCE, 0}, +{331, 976098044u, 1151967422u, 0u, 0, ISNANF_TOLERANCE, 0}, +{332, 941796645u, 886451963u, 0u, 0, ISNANF_TOLERANCE, 0}, +{333, 3006797923u, 1103058486u, 0u, 0, ISNANF_TOLERANCE, 0}, +{334, 855756273u, 3217259624u, 0u, 0, ISNANF_TOLERANCE, 0}, +{335, 3287199470u, 854245542u, 0u, 0, ISNANF_TOLERANCE, 0}, +{336, 893184329u, 1243067084u, 0u, 0, ISNANF_TOLERANCE, 0}, +{337, 1143233714u, 1007268238u, 0u, 0, ISNANF_TOLERANCE, 0}, +{338, 1139941253u, 1147688821u, 0u, 0, ISNANF_TOLERANCE, 0}, +{339, 3143717025u, 3234638157u, 0u, 0, ISNANF_TOLERANCE, 0}, +{340, 3048866608u, 3449209899u, 0u, 0, ISNANF_TOLERANCE, 0}, +{341, 3240298487u, 1020260821u, 0u, 0, ISNANF_TOLERANCE, 0}, +{342, 1288902137u, 3123875978u, 0u, 0, ISNANF_TOLERANCE, 0}, +{343, 1333134799u, 1338107877u, 0u, 0, ISNANF_TOLERANCE, 0}, +{344, 1187847971u, 1317663644u, 0u, 0, ISNANF_TOLERANCE, 0}, +{345, 1038851706u, 1327544110u, 0u, 0, ISNANF_TOLERANCE, 0}, +{346, 3329354473u, 3165437289u, 0u, 0, ISNANF_TOLERANCE, 0}, +{347, 3077218579u, 1308397879u, 0u, 0, ISNANF_TOLERANCE, 0}, +{348, 1309289088u, 1019883016u, 0u, 0, ISNANF_TOLERANCE, 0}, +{349, 2991550291u, 1294782875u, 0u, 0, ISNANF_TOLERANCE, 0}, +{350, 3444653659u, 1279248024u, 0u, 0, ISNANF_TOLERANCE, 0}, +{351, 3405585402u, 2962345057u, 0u, 0, ISNANF_TOLERANCE, 0}, +{352, 3106647724u, 853848387u, 0u, 0, ISNANF_TOLERANCE, 0}, +{353, 1106778573u, 3304487767u, 0u, 0, ISNANF_TOLERANCE, 0}, +{354, 1140567947u, 3069174149u, 0u, 0, ISNANF_TOLERANCE, 0}, +{355, 1238569473u, 873035665u, 0u, 0, ISNANF_TOLERANCE, 0}, +{356, 840375965u, 3223983207u, 0u, 0, ISNANF_TOLERANCE, 0}, +{357, 3154871957u, 1276671061u, 0u, 0, ISNANF_TOLERANCE, 0}, +{358, 1261071232u, 1182202773u, 0u, 0, ISNANF_TOLERANCE, 0}, +{359, 1175011025u, 3029705783u, 0u, 0, ISNANF_TOLERANCE, 0}, +{360, 1082692850u, 1211581107u, 0u, 0, ISNANF_TOLERANCE, 0}, +{361, 974547519u, 3475164509u, 0u, 0, ISNANF_TOLERANCE, 0}, +{362, 3058097085u, 3104309359u, 0u, 0, ISNANF_TOLERANCE, 0}, +{363, 3107252546u, 1071134451u, 0u, 0, ISNANF_TOLERANCE, 0}, +{364, 3096032662u, 2976848821u, 0u, 0, ISNANF_TOLERANCE, 0}, +{365, 3197942144u, 3094120030u, 0u, 0, ISNANF_TOLERANCE, 0}, +{366, 3403348556u, 3184653669u, 0u, 0, ISNANF_TOLERANCE, 0}, +{367, 2998032500u, 3373011130u, 0u, 0, ISNANF_TOLERANCE, 0}, +{368, 3182301130u, 3460764044u, 0u, 0, ISNANF_TOLERANCE, 0}, +{369, 1136411063u, 1118097422u, 0u, 0, ISNANF_TOLERANCE, 0}, +{370, 3239231622u, 3302723069u, 0u, 0, ISNANF_TOLERANCE, 0}, +{371, 3340615780u, 870350055u, 0u, 0, ISNANF_TOLERANCE, 0}, +{372, 998567360u, 2995278691u, 0u, 0, ISNANF_TOLERANCE, 0}, +{373, 3417964312u, 1321337529u, 0u, 0, ISNANF_TOLERANCE, 0}, +{374, 3109481038u, 1143864063u, 0u, 0, ISNANF_TOLERANCE, 0}, +{375, 1148867223u, 1256486202u, 0u, 0, ISNANF_TOLERANCE, 0}, +{376, 2960983878u, 1314196594u, 0u, 0, ISNANF_TOLERANCE, 0}, +{377, 989687421u, 3372681320u, 0u, 0, ISNANF_TOLERANCE, 0}, +{378, 1152956913u, 3166480640u, 0u, 0, ISNANF_TOLERANCE, 0}, +{379, 892922651u, 3373029087u, 0u, 0, ISNANF_TOLERANCE, 0}, +{380, 1109627625u, 1314158257u, 0u, 0, ISNANF_TOLERANCE, 0}, +{381, 1307091856u, 1103202538u, 0u, 0, ISNANF_TOLERANCE, 0}, +{382, 1077234132u, 3272167130u, 0u, 0, ISNANF_TOLERANCE, 0}, +{383, 1142167709u, 1096445242u, 0u, 0, ISNANF_TOLERANCE, 0}, +{384, 3426232834u, 1036705270u, 0u, 0, ISNANF_TOLERANCE, 0}, +{385, 3000726366u, 3172023300u, 0u, 0, ISNANF_TOLERANCE, 0}, +{386, 3368566779u, 967249167u, 0u, 0, ISNANF_TOLERANCE, 0}, +{387, 3030724760u, 3349013503u, 0u, 0, ISNANF_TOLERANCE, 0}, +{388, 1138741813u, 3073453199u, 0u, 0, ISNANF_TOLERANCE, 0}, +{389, 982950501u, 982549888u, 0u, 0, ISNANF_TOLERANCE, 0}, +{390, 1142981585u, 1015602236u, 0u, 0, ISNANF_TOLERANCE, 0}, +{391, 3016453868u, 3365560001u, 0u, 0, ISNANF_TOLERANCE, 0}, +{392, 3347165962u, 3135486696u, 0u, 0, ISNANF_TOLERANCE, 0}, +{393, 1009535440u, 3381353228u, 0u, 0, ISNANF_TOLERANCE, 0}, +{394, 3103736980u, 3402950505u, 0u, 0, ISNANF_TOLERANCE, 0}, +{395, 3126820946u, 1077903063u, 0u, 0, ISNANF_TOLERANCE, 0}, +{396, 3473956030u, 976891930u, 0u, 0, ISNANF_TOLERANCE, 0}, +{397, 3349098349u, 1055327704u, 0u, 0, ISNANF_TOLERANCE, 0}, +{398, 3152729489u, 1060398533u, 0u, 0, ISNANF_TOLERANCE, 0}, +{399, 945568720u, 3313485084u, 0u, 0, ISNANF_TOLERANCE, 0}, +{400, 3345489836u, 1108392401u, 0u, 0, ISNANF_TOLERANCE, 0}, +{401, 940893161u, 1137000140u, 0u, 0, ISNANF_TOLERANCE, 0}, +{402, 976791751u, 3230678102u, 0u, 0, ISNANF_TOLERANCE, 0}, +{403, 3013749677u, 1324802687u, 0u, 0, ISNANF_TOLERANCE, 0}, +{404, 1004442355u, 3036510596u, 0u, 0, ISNANF_TOLERANCE, 0}, +{405, 1108485380u, 3173536878u, 0u, 0, ISNANF_TOLERANCE, 0}, +{406, 1061834641u, 972388096u, 0u, 0, ISNANF_TOLERANCE, 0}, +{407, 3381268392u, 1146976802u, 0u, 0, ISNANF_TOLERANCE, 0}, +{408, 1087189715u, 2952822478u, 0u, 0, ISNANF_TOLERANCE, 0}, +{409, 3212952285u, 3329407365u, 0u, 0, ISNANF_TOLERANCE, 0}, +{410, 1000611335u, 857599439u, 0u, 0, ISNANF_TOLERANCE, 0}, +{411, 847191250u, 1227905777u, 0u, 0, ISNANF_TOLERANCE, 0}, +{412, 3466188568u, 1041678304u, 0u, 0, ISNANF_TOLERANCE, 0}, +{413, 2968337765u, 3091399866u, 0u, 0, ISNANF_TOLERANCE, 0}, +{414, 3072456205u, 3160254633u, 0u, 0, ISNANF_TOLERANCE, 0}, +{415, 3319315516u, 3422089012u, 0u, 0, ISNANF_TOLERANCE, 0}, +{416, 935938416u, 1146676692u, 0u, 0, ISNANF_TOLERANCE, 0}, +{417, 3212614372u, 1152633030u, 0u, 0, ISNANF_TOLERANCE, 0}, +{418, 1315030230u, 3336225884u, 0u, 0, ISNANF_TOLERANCE, 0}, +{419, 822041816u, 898402905u, 0u, 0, ISNANF_TOLERANCE, 0}, +{420, 1134593658u, 3456812581u, 0u, 0, ISNANF_TOLERANCE, 0}, +{421, 977281449u, 879922831u, 0u, 0, ISNANF_TOLERANCE, 0}, +{422, 1086198791u, 920125958u, 0u, 0, ISNANF_TOLERANCE, 0}, +{423, 1255152035u, 851754050u, 0u, 0, ISNANF_TOLERANCE, 0}, +{424, 1135271264u, 3284878412u, 0u, 0, ISNANF_TOLERANCE, 0}, +{425, 1094190727u, 1056854532u, 0u, 0, ISNANF_TOLERANCE, 0}, +{426, 1294665325u, 991185677u, 0u, 0, ISNANF_TOLERANCE, 0}, +{427, 1036608591u, 805416536u, 0u, 0, ISNANF_TOLERANCE, 0}, +{428, 2960459834u, 1296239160u, 0u, 0, ISNANF_TOLERANCE, 0}, +{429, 3229998064u, 825237063u, 0u, 0, ISNANF_TOLERANCE, 0}, +{430, 3439134022u, 1043829691u, 0u, 0, ISNANF_TOLERANCE, 0}, +{431, 3073083133u, 1317170485u, 0u, 0, ISNANF_TOLERANCE, 0}, +{432, 1325668223u, 970681762u, 0u, 0, ISNANF_TOLERANCE, 0}, +{433, 1092037607u, 1027330835u, 0u, 0, ISNANF_TOLERANCE, 0}, +{434, 826457956u, 3343511749u, 0u, 0, ISNANF_TOLERANCE, 0}, +{435, 3316278408u, 3455589207u, 0u, 0, ISNANF_TOLERANCE, 0}, +{436, 3295436768u, 3129873731u, 0u, 0, ISNANF_TOLERANCE, 0}, +{437, 1151984049u, 3074547120u, 0u, 0, ISNANF_TOLERANCE, 0}, +{438, 1129287043u, 3076527544u, 0u, 0, ISNANF_TOLERANCE, 0}, +{439, 1243664530u, 972879810u, 0u, 0, ISNANF_TOLERANCE, 0}, +{440, 950829092u, 929114193u, 0u, 0, ISNANF_TOLERANCE, 0}, +{441, 1115471979u, 3047246262u, 0u, 0, ISNANF_TOLERANCE, 0}, +{442, 3351092088u, 3024661404u, 0u, 0, ISNANF_TOLERANCE, 0}, +{443, 3424479544u, 3312047722u, 0u, 0, ISNANF_TOLERANCE, 0}, +{444, 3241193975u, 884465785u, 0u, 0, ISNANF_TOLERANCE, 0}, +{445, 811700241u, 3478509398u, 0u, 0, ISNANF_TOLERANCE, 0}, +{446, 1030934236u, 1045139240u, 0u, 0, ISNANF_TOLERANCE, 0}, +{447, 3131791114u, 3408392958u, 0u, 0, ISNANF_TOLERANCE, 0}, +{448, 1025254314u, 3057812821u, 0u, 0, ISNANF_TOLERANCE, 0}, +{449, 1110545760u, 3240144177u, 0u, 0, ISNANF_TOLERANCE, 0}, +{450, 826998191u, 1091496527u, 0u, 0, ISNANF_TOLERANCE, 0}, +{451, 3180213739u, 1108793820u, 0u, 0, ISNANF_TOLERANCE, 0}, +{452, 3361976590u, 3138179993u, 0u, 0, ISNANF_TOLERANCE, 0}, +{453, 881280146u, 3421884736u, 0u, 0, ISNANF_TOLERANCE, 0}, +{454, 1304154705u, 2961937089u, 0u, 0, ISNANF_TOLERANCE, 0}, +{455, 3264443610u, 3222916705u, 0u, 0, ISNANF_TOLERANCE, 0}, +{456, 3374550627u, 3055856293u, 0u, 0, ISNANF_TOLERANCE, 0}, +{457, 2979664918u, 3365394784u, 0u, 0, ISNANF_TOLERANCE, 0}, +{458, 899599265u, 3240118211u, 0u, 0, ISNANF_TOLERANCE, 0}, +{459, 842476444u, 3452685905u, 0u, 0, ISNANF_TOLERANCE, 0}, +{460, 1268194719u, 1332489410u, 0u, 0, ISNANF_TOLERANCE, 0}, +{461, 1133420220u, 1245770860u, 0u, 0, ISNANF_TOLERANCE, 0}, +{462, 1161858787u, 815362075u, 0u, 0, ISNANF_TOLERANCE, 0}, +{463, 3184462258u, 1263529646u, 0u, 0, ISNANF_TOLERANCE, 0}, +{464, 3295996963u, 3453334307u, 0u, 0, ISNANF_TOLERANCE, 0}, +{465, 1270887389u, 1156123987u, 0u, 0, ISNANF_TOLERANCE, 0}, +{466, 3325193181u, 993979179u, 0u, 0, ISNANF_TOLERANCE, 0}, +{467, 925657343u, 1315159742u, 0u, 0, ISNANF_TOLERANCE, 0}, +{468, 3115275450u, 3008350271u, 0u, 0, ISNANF_TOLERANCE, 0}, +{469, 3116607482u, 3224327456u, 0u, 0, ISNANF_TOLERANCE, 0}, +{470, 3187892415u, 3118097315u, 0u, 0, ISNANF_TOLERANCE, 0}, +{471, 1189120494u, 978961471u, 0u, 0, ISNANF_TOLERANCE, 0}, +{472, 889030794u, 3129523970u, 0u, 0, ISNANF_TOLERANCE, 0}, +{473, 1323529208u, 3100744786u, 0u, 0, ISNANF_TOLERANCE, 0}, +{474, 2975945347u, 940445933u, 0u, 0, ISNANF_TOLERANCE, 0}, +{475, 3465768388u, 3190881451u, 0u, 0, ISNANF_TOLERANCE, 0}, +{476, 3426099899u, 1118756120u, 0u, 0, ISNANF_TOLERANCE, 0}, +{477, 3224857113u, 3398166843u, 0u, 0, ISNANF_TOLERANCE, 0}, +{478, 1065798296u, 816191940u, 0u, 0, ISNANF_TOLERANCE, 0}, +{479, 3328989444u, 850266225u, 0u, 0, ISNANF_TOLERANCE, 0}, +{480, 3357819026u, 3148475462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{481, 1273397670u, 901308750u, 0u, 0, ISNANF_TOLERANCE, 0}, +{482, 3424831780u, 1304806106u, 0u, 0, ISNANF_TOLERANCE, 0}, +{483, 1257596246u, 3420832544u, 0u, 0, ISNANF_TOLERANCE, 0}, +{484, 1051773536u, 896271348u, 0u, 0, ISNANF_TOLERANCE, 0}, +{485, 3294752507u, 3113225954u, 0u, 0, ISNANF_TOLERANCE, 0}, +{486, 3424848725u, 2973850350u, 0u, 0, ISNANF_TOLERANCE, 0}, +{487, 1090870906u, 3294742905u, 0u, 0, ISNANF_TOLERANCE, 0}, +{488, 1227582289u, 1208979668u, 0u, 0, ISNANF_TOLERANCE, 0}, +{489, 2996780709u, 852318215u, 0u, 0, ISNANF_TOLERANCE, 0}, +{490, 1272325814u, 3004311296u, 0u, 0, ISNANF_TOLERANCE, 0}, +{491, 3359508271u, 859974315u, 0u, 0, ISNANF_TOLERANCE, 0}, +{492, 2992737514u, 2999023943u, 0u, 0, ISNANF_TOLERANCE, 0}, +{493, 1137854355u, 3335041917u, 0u, 0, ISNANF_TOLERANCE, 0}, +{494, 3440773058u, 3204192793u, 0u, 0, ISNANF_TOLERANCE, 0}, +{495, 3101598400u, 3057760708u, 0u, 0, ISNANF_TOLERANCE, 0}, +{496, 3451216836u, 3347783723u, 0u, 0, ISNANF_TOLERANCE, 0}, +{497, 3437062994u, 3106834845u, 0u, 0, ISNANF_TOLERANCE, 0}, +{498, 1131196082u, 1164573183u, 0u, 0, ISNANF_TOLERANCE, 0}, +{499, 3177294154u, 1282436638u, 0u, 0, ISNANF_TOLERANCE, 0}, +{500, 3258097678u, 1305882290u, 0u, 0, ISNANF_TOLERANCE, 0}, +{501, 3460915348u, 1219372260u, 0u, 0, ISNANF_TOLERANCE, 0}, +{502, 3009547195u, 1256074626u, 0u, 0, ISNANF_TOLERANCE, 0}, +{503, 3303035472u, 3153013020u, 0u, 0, ISNANF_TOLERANCE, 0}, +{504, 1053698677u, 3284313107u, 0u, 0, ISNANF_TOLERANCE, 0}, +{505, 3396166221u, 1201894512u, 0u, 0, ISNANF_TOLERANCE, 0}, +{506, 3037541131u, 1085398440u, 0u, 0, ISNANF_TOLERANCE, 0}, +{507, 3458934263u, 1005577835u, 0u, 0, ISNANF_TOLERANCE, 0}, +{508, 1065761827u, 3333928591u, 0u, 0, ISNANF_TOLERANCE, 0}, +{509, 3025843188u, 820250112u, 0u, 0, ISNANF_TOLERANCE, 0}, +{510, 3017430347u, 3009209071u, 0u, 0, ISNANF_TOLERANCE, 0}, +{511, 926665223u, 3150815797u, 0u, 0, ISNANF_TOLERANCE, 0}, +{512, 2970966181u, 3383521344u, 0u, 0, ISNANF_TOLERANCE, 0}, +{513, 1199816046u, 3143776186u, 0u, 0, ISNANF_TOLERANCE, 0}, +{514, 3333779015u, 952421041u, 0u, 0, ISNANF_TOLERANCE, 0}, +{515, 856234019u, 3091454180u, 0u, 0, ISNANF_TOLERANCE, 0}, +{516, 948398145u, 3238273189u, 0u, 0, ISNANF_TOLERANCE, 0}, +{517, 3054021468u, 1270257895u, 0u, 0, ISNANF_TOLERANCE, 0}, +{518, 1080781593u, 1213908300u, 0u, 0, ISNANF_TOLERANCE, 0}, +{519, 3164749613u, 3010837763u, 0u, 0, ISNANF_TOLERANCE, 0}, +{520, 2971341371u, 1014754300u, 0u, 0, ISNANF_TOLERANCE, 0}, +{521, 3235326590u, 1271705594u, 0u, 0, ISNANF_TOLERANCE, 0}, +{522, 3118883815u, 1051802647u, 0u, 0, ISNANF_TOLERANCE, 0}, +{523, 965378004u, 1292594138u, 0u, 0, ISNANF_TOLERANCE, 0}, +{524, 3226990408u, 1110755136u, 0u, 0, ISNANF_TOLERANCE, 0}, +{525, 2953069847u, 3293953199u, 0u, 0, ISNANF_TOLERANCE, 0}, +{526, 3117098218u, 1122474770u, 0u, 0, ISNANF_TOLERANCE, 0}, +{527, 1283624229u, 906796922u, 0u, 0, ISNANF_TOLERANCE, 0}, +{528, 860729004u, 1163935062u, 0u, 0, ISNANF_TOLERANCE, 0}, +{529, 970649315u, 1078286437u, 0u, 0, ISNANF_TOLERANCE, 0}, +{530, 959776291u, 3280345347u, 0u, 0, ISNANF_TOLERANCE, 0}, +{531, 3341117305u, 3294559023u, 0u, 0, ISNANF_TOLERANCE, 0}, +{532, 1270734970u, 3355874874u, 0u, 0, ISNANF_TOLERANCE, 0}, +{533, 3454816067u, 868771977u, 0u, 0, ISNANF_TOLERANCE, 0}, +{534, 917206623u, 1172710814u, 0u, 0, ISNANF_TOLERANCE, 0}, +{535, 1106502045u, 1290849316u, 0u, 0, ISNANF_TOLERANCE, 0}, +{536, 1157598381u, 3309023746u, 0u, 0, ISNANF_TOLERANCE, 0}, +{537, 835476614u, 1092590501u, 0u, 0, ISNANF_TOLERANCE, 0}, +{538, 3335234513u, 1002337336u, 0u, 0, ISNANF_TOLERANCE, 0}, +{539, 1279489061u, 1006049444u, 0u, 0, ISNANF_TOLERANCE, 0}, +{540, 807133892u, 1110992491u, 0u, 0, ISNANF_TOLERANCE, 0}, +{541, 3157416480u, 1309984610u, 0u, 0, ISNANF_TOLERANCE, 0}, +{542, 3143920719u, 3131608518u, 0u, 0, ISNANF_TOLERANCE, 0}, +{543, 2995340689u, 1165036009u, 0u, 0, ISNANF_TOLERANCE, 0}, +{544, 1233171235u, 826460580u, 0u, 0, ISNANF_TOLERANCE, 0}, +{545, 1148920078u, 1007674793u, 0u, 0, ISNANF_TOLERANCE, 0}, +{546, 3064988156u, 3230867340u, 0u, 0, ISNANF_TOLERANCE, 0}, +{547, 3083619260u, 1159415661u, 0u, 0, ISNANF_TOLERANCE, 0}, +{548, 1109198803u, 1221754614u, 0u, 0, ISNANF_TOLERANCE, 0}, +{549, 3219949483u, 1056167693u, 0u, 0, ISNANF_TOLERANCE, 0}, +{550, 3361149474u, 3387342069u, 0u, 0, ISNANF_TOLERANCE, 0}, +{551, 827931800u, 1118474231u, 0u, 0, ISNANF_TOLERANCE, 0}, +{552, 1207502108u, 3388073586u, 0u, 0, ISNANF_TOLERANCE, 0}, +{553, 1000014431u, 831213088u, 0u, 0, ISNANF_TOLERANCE, 0}, +{554, 3161756316u, 3143659754u, 0u, 0, ISNANF_TOLERANCE, 0}, +{555, 3160728744u, 3382954009u, 0u, 0, ISNANF_TOLERANCE, 0}, +{556, 1234530539u, 1079988872u, 0u, 0, ISNANF_TOLERANCE, 0}, +{557, 1017843965u, 1193076204u, 0u, 0, ISNANF_TOLERANCE, 0}, +{558, 2965746635u, 3248194237u, 0u, 0, ISNANF_TOLERANCE, 0}, +{559, 951862956u, 1173464654u, 0u, 0, ISNANF_TOLERANCE, 0}, +{560, 3306328852u, 1118701064u, 0u, 0, ISNANF_TOLERANCE, 0}, +{561, 1291910469u, 1211303367u, 0u, 0, ISNANF_TOLERANCE, 0}, +{562, 3027442905u, 1173894400u, 0u, 0, ISNANF_TOLERANCE, 0}, +{563, 809646928u, 3006525025u, 0u, 0, ISNANF_TOLERANCE, 0}, +{564, 1131927531u, 3182962700u, 0u, 0, ISNANF_TOLERANCE, 0}, +{565, 3449879391u, 991614550u, 0u, 0, ISNANF_TOLERANCE, 0}, +{566, 970094304u, 3344590506u, 0u, 0, ISNANF_TOLERANCE, 0}, +{567, 1125551064u, 3331248076u, 0u, 0, ISNANF_TOLERANCE, 0}, +{568, 3427296372u, 3455289118u, 0u, 0, ISNANF_TOLERANCE, 0}, +{569, 1198917460u, 1327195159u, 0u, 0, ISNANF_TOLERANCE, 0}, +{570, 3201603336u, 820047343u, 0u, 0, ISNANF_TOLERANCE, 0}, +{571, 3114686212u, 3476082461u, 0u, 0, ISNANF_TOLERANCE, 0}, +{572, 921940707u, 2967544056u, 0u, 0, ISNANF_TOLERANCE, 0}, +{573, 1091906532u, 3011904455u, 0u, 0, ISNANF_TOLERANCE, 0}, +{574, 3393557778u, 3383396815u, 0u, 0, ISNANF_TOLERANCE, 0}, +{575, 1276853215u, 873199561u, 0u, 0, ISNANF_TOLERANCE, 0}, +{576, 3462778440u, 3349284325u, 0u, 0, ISNANF_TOLERANCE, 0}, +{577, 833132358u, 3470358002u, 0u, 0, ISNANF_TOLERANCE, 0}, +{578, 3360170117u, 3048354042u, 0u, 0, ISNANF_TOLERANCE, 0}, +{579, 3224245428u, 3271307999u, 0u, 0, ISNANF_TOLERANCE, 0}, +{580, 1120124467u, 1135619937u, 0u, 0, ISNANF_TOLERANCE, 0}, +{581, 1064364381u, 3180675544u, 0u, 0, ISNANF_TOLERANCE, 0}, +{582, 1268744779u, 3328452652u, 0u, 0, ISNANF_TOLERANCE, 0}, +{583, 1165195428u, 3390323168u, 0u, 0, ISNANF_TOLERANCE, 0}, +{584, 3044092739u, 1106497311u, 0u, 0, ISNANF_TOLERANCE, 0}, +{585, 3149469534u, 1278465842u, 0u, 0, ISNANF_TOLERANCE, 0}, +{586, 3247790039u, 909788142u, 0u, 0, ISNANF_TOLERANCE, 0}, +{587, 3215244648u, 1083988595u, 0u, 0, ISNANF_TOLERANCE, 0}, +{588, 3095275931u, 989153382u, 0u, 0, ISNANF_TOLERANCE, 0}, +{589, 3059688264u, 1117455718u, 0u, 0, ISNANF_TOLERANCE, 0}, +{590, 2990022513u, 1061714285u, 0u, 0, ISNANF_TOLERANCE, 0}, +{591, 1212717473u, 837873779u, 0u, 0, ISNANF_TOLERANCE, 0}, +{592, 3275973009u, 3450721670u, 0u, 0, ISNANF_TOLERANCE, 0}, +{593, 3028857014u, 3188853813u, 0u, 0, ISNANF_TOLERANCE, 0}, +{594, 3391162308u, 1291220039u, 0u, 0, ISNANF_TOLERANCE, 0}, +{595, 1044867873u, 3369493273u, 0u, 0, ISNANF_TOLERANCE, 0}, +{596, 1089986803u, 3462160118u, 0u, 0, ISNANF_TOLERANCE, 0}, +{597, 1296314700u, 2957454177u, 0u, 0, ISNANF_TOLERANCE, 0}, +{598, 1251462432u, 3171021770u, 0u, 0, ISNANF_TOLERANCE, 0}, +{599, 3485236902u, 980772835u, 0u, 0, ISNANF_TOLERANCE, 0}, +{600, 3262169538u, 1268270462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{601, 3080852256u, 994641495u, 0u, 0, ISNANF_TOLERANCE, 0}, +{602, 1022211242u, 922124181u, 0u, 0, ISNANF_TOLERANCE, 0}, +{603, 884661176u, 2985540645u, 0u, 0, ISNANF_TOLERANCE, 0}, +{604, 3071422941u, 3271100396u, 0u, 0, ISNANF_TOLERANCE, 0}, +{605, 989762529u, 3362011135u, 0u, 0, ISNANF_TOLERANCE, 0}, +{606, 1295475718u, 3212305413u, 0u, 0, ISNANF_TOLERANCE, 0}, +{607, 1002632518u, 3330388441u, 0u, 0, ISNANF_TOLERANCE, 0}, +{608, 3404372005u, 3450484255u, 0u, 0, ISNANF_TOLERANCE, 0}, +{609, 3158912530u, 3105501826u, 0u, 0, ISNANF_TOLERANCE, 0}, +{610, 2987029985u, 1218447414u, 0u, 0, ISNANF_TOLERANCE, 0}, +{611, 1125800069u, 3256265749u, 0u, 0, ISNANF_TOLERANCE, 0}, +{612, 3138037576u, 3103365227u, 0u, 0, ISNANF_TOLERANCE, 0}, +{613, 3108384823u, 1300246663u, 0u, 0, ISNANF_TOLERANCE, 0}, +{614, 999985470u, 3409354318u, 0u, 0, ISNANF_TOLERANCE, 0}, +{615, 1189421739u, 1056599002u, 0u, 0, ISNANF_TOLERANCE, 0}, +{616, 3075182644u, 3144159778u, 0u, 0, ISNANF_TOLERANCE, 0}, +{617, 3028099649u, 3391513557u, 0u, 0, ISNANF_TOLERANCE, 0}, +{618, 837703706u, 3467473756u, 0u, 0, ISNANF_TOLERANCE, 0}, +{619, 3132541814u, 3444521949u, 0u, 0, ISNANF_TOLERANCE, 0}, +{620, 1164046161u, 3440635788u, 0u, 0, ISNANF_TOLERANCE, 0}, +{621, 1292596266u, 3116569667u, 0u, 0, ISNANF_TOLERANCE, 0}, +{622, 3469748379u, 3412765608u, 0u, 0, ISNANF_TOLERANCE, 0}, +{623, 2968771722u, 3117531540u, 0u, 0, ISNANF_TOLERANCE, 0}, +{624, 1314644642u, 3123051784u, 0u, 0, ISNANF_TOLERANCE, 0}, +{625, 3399813173u, 828743798u, 0u, 0, ISNANF_TOLERANCE, 0}, +{626, 948775569u, 3485444126u, 0u, 0, ISNANF_TOLERANCE, 0}, +{627, 1034611395u, 882288581u, 0u, 0, ISNANF_TOLERANCE, 0}, +{628, 3489122735u, 3372450889u, 0u, 0, ISNANF_TOLERANCE, 0}, +{629, 1181604787u, 3363067409u, 0u, 0, ISNANF_TOLERANCE, 0}, +{630, 3059042077u, 3204983963u, 0u, 0, ISNANF_TOLERANCE, 0}, +{631, 1043691622u, 3402603223u, 0u, 0, ISNANF_TOLERANCE, 0}, +{632, 1314588083u, 856187848u, 0u, 0, ISNANF_TOLERANCE, 0}, +{633, 3141533334u, 3010142974u, 0u, 0, ISNANF_TOLERANCE, 0}, +{634, 3013416703u, 3442525943u, 0u, 0, ISNANF_TOLERANCE, 0}, +{635, 861266716u, 822172554u, 0u, 0, ISNANF_TOLERANCE, 0}, +{636, 3157534378u, 3451674717u, 0u, 0, ISNANF_TOLERANCE, 0}, +{637, 2976169000u, 3033697153u, 0u, 0, ISNANF_TOLERANCE, 0}, +{638, 3400949680u, 3073750220u, 0u, 0, ISNANF_TOLERANCE, 0}, +{639, 3365581801u, 1175843167u, 0u, 0, ISNANF_TOLERANCE, 0}, +{640, 1110424755u, 3011308654u, 0u, 0, ISNANF_TOLERANCE, 0}, +{641, 3189917167u, 927278934u, 0u, 0, ISNANF_TOLERANCE, 0}, +{642, 969804941u, 3355439348u, 0u, 0, ISNANF_TOLERANCE, 0}, +{643, 1139120919u, 3270515074u, 0u, 0, ISNANF_TOLERANCE, 0}, +{644, 816789141u, 3325199970u, 0u, 0, ISNANF_TOLERANCE, 0}, +{645, 934308144u, 3118191228u, 0u, 0, ISNANF_TOLERANCE, 0}, +{646, 1220524226u, 1152648002u, 0u, 0, ISNANF_TOLERANCE, 0}, +{647, 3162548604u, 3461790298u, 0u, 0, ISNANF_TOLERANCE, 0}, +{648, 3382391700u, 3296962745u, 0u, 0, ISNANF_TOLERANCE, 0}, +{649, 1156767533u, 1088986462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{650, 3079222483u, 3312324949u, 0u, 0, ISNANF_TOLERANCE, 0}, +{651, 994934087u, 967678094u, 0u, 0, ISNANF_TOLERANCE, 0}, +{652, 840906467u, 3156591981u, 0u, 0, ISNANF_TOLERANCE, 0}, +{653, 3185240099u, 1123403720u, 0u, 0, ISNANF_TOLERANCE, 0}, +{654, 870026344u, 1093936408u, 0u, 0, ISNANF_TOLERANCE, 0}, +{655, 2996887005u, 3287317742u, 0u, 0, ISNANF_TOLERANCE, 0}, +{656, 3479873563u, 1246277393u, 0u, 0, ISNANF_TOLERANCE, 0}, +{657, 3424264117u, 3434026174u, 0u, 0, ISNANF_TOLERANCE, 0}, +{658, 3228365887u, 1216775310u, 0u, 0, ISNANF_TOLERANCE, 0}, +{659, 1035909900u, 1249532942u, 0u, 0, ISNANF_TOLERANCE, 0}, +{660, 2989750574u, 1274271338u, 0u, 0, ISNANF_TOLERANCE, 0}, +{661, 3024951184u, 1247632131u, 0u, 0, ISNANF_TOLERANCE, 0}, +{662, 1212129651u, 3017366784u, 0u, 0, ISNANF_TOLERANCE, 0}, +{663, 3125775254u, 955826310u, 0u, 0, ISNANF_TOLERANCE, 0}, +{664, 1037464105u, 3121544932u, 0u, 0, ISNANF_TOLERANCE, 0}, +{665, 1311706596u, 1254918706u, 0u, 0, ISNANF_TOLERANCE, 0}, +{666, 918212457u, 1017468331u, 0u, 0, ISNANF_TOLERANCE, 0}, +{667, 1337315179u, 3461361185u, 0u, 0, ISNANF_TOLERANCE, 0}, +{668, 1131358407u, 3325958870u, 0u, 0, ISNANF_TOLERANCE, 0}, +{669, 1156517523u, 3343716230u, 0u, 0, ISNANF_TOLERANCE, 0}, +{670, 3210802820u, 3207408574u, 0u, 0, ISNANF_TOLERANCE, 0}, +{671, 3337499209u, 1226297264u, 0u, 0, ISNANF_TOLERANCE, 0}, +{672, 3468429030u, 3253874001u, 0u, 0, ISNANF_TOLERANCE, 0}, +{673, 3253515800u, 1189005947u, 0u, 0, ISNANF_TOLERANCE, 0}, +{674, 3055299953u, 3047908678u, 0u, 0, ISNANF_TOLERANCE, 0}, +{675, 959956547u, 876324728u, 0u, 0, ISNANF_TOLERANCE, 0}, +{676, 3425290480u, 1139193797u, 0u, 0, ISNANF_TOLERANCE, 0}, +{677, 1039917375u, 1122740999u, 0u, 0, ISNANF_TOLERANCE, 0}, +{678, 3220979495u, 3429223871u, 0u, 0, ISNANF_TOLERANCE, 0}, +{679, 1311016004u, 3334899880u, 0u, 0, ISNANF_TOLERANCE, 0}, +{680, 2995451172u, 2974546424u, 0u, 0, ISNANF_TOLERANCE, 0}, +{681, 1128016396u, 1105151547u, 0u, 0, ISNANF_TOLERANCE, 0}, +{682, 3210335769u, 3100646155u, 0u, 0, ISNANF_TOLERANCE, 0}, +{683, 3022705759u, 3404762495u, 0u, 0, ISNANF_TOLERANCE, 0}, +{684, 1206054701u, 826010009u, 0u, 0, ISNANF_TOLERANCE, 0}, +{685, 3144504834u, 1162227076u, 0u, 0, ISNANF_TOLERANCE, 0}, +{686, 822524010u, 970745811u, 0u, 0, ISNANF_TOLERANCE, 0}, +{687, 3016981460u, 3313826904u, 0u, 0, ISNANF_TOLERANCE, 0}, +{688, 1213609983u, 919983950u, 0u, 0, ISNANF_TOLERANCE, 0}, +{689, 1246902946u, 3064047808u, 0u, 0, ISNANF_TOLERANCE, 0}, +{690, 995850843u, 1332031130u, 0u, 0, ISNANF_TOLERANCE, 0}, +{691, 3362082828u, 3374056268u, 0u, 0, ISNANF_TOLERANCE, 0}, +{692, 1029480631u, 3047777170u, 0u, 0, ISNANF_TOLERANCE, 0}, +{693, 3153568584u, 3106514232u, 0u, 0, ISNANF_TOLERANCE, 0}, +{694, 3384988527u, 3109485565u, 0u, 0, ISNANF_TOLERANCE, 0}, +{695, 1317696241u, 870681806u, 0u, 0, ISNANF_TOLERANCE, 0}, +{696, 3235395924u, 1132055244u, 0u, 0, ISNANF_TOLERANCE, 0}, +{697, 3341877624u, 2969495570u, 0u, 0, ISNANF_TOLERANCE, 0}, +{698, 1228636133u, 886552820u, 0u, 0, ISNANF_TOLERANCE, 0}, +{699, 3161654634u, 3335899347u, 0u, 0, ISNANF_TOLERANCE, 0}, +{700, 3162655243u, 3307203982u, 0u, 0, ISNANF_TOLERANCE, 0}, +{701, 1207246237u, 859223639u, 0u, 0, ISNANF_TOLERANCE, 0}, +{702, 1165476654u, 3350219111u, 0u, 0, ISNANF_TOLERANCE, 0}, +{703, 1215278023u, 3019755242u, 0u, 0, ISNANF_TOLERANCE, 0}, +{704, 1017239798u, 3438501281u, 0u, 0, ISNANF_TOLERANCE, 0}, +{705, 1149651309u, 970030475u, 0u, 0, ISNANF_TOLERANCE, 0}, +{706, 1111943722u, 3122211334u, 0u, 0, ISNANF_TOLERANCE, 0}, +{707, 856374764u, 1158358450u, 0u, 0, ISNANF_TOLERANCE, 0}, +{708, 1189849849u, 3382739134u, 0u, 0, ISNANF_TOLERANCE, 0}, +{709, 3204848496u, 3141519085u, 0u, 0, ISNANF_TOLERANCE, 0}, +{710, 1249758327u, 3104759211u, 0u, 0, ISNANF_TOLERANCE, 0}, +{711, 3092982276u, 3445282331u, 0u, 0, ISNANF_TOLERANCE, 0}, +{712, 1168098747u, 1316854744u, 0u, 0, ISNANF_TOLERANCE, 0}, +{713, 892549317u, 1179637545u, 0u, 0, ISNANF_TOLERANCE, 0}, +{714, 3301009024u, 3406174560u, 0u, 0, ISNANF_TOLERANCE, 0}, +{715, 3233089227u, 1212652543u, 0u, 0, ISNANF_TOLERANCE, 0}, +{716, 3218245284u, 1238873830u, 0u, 0, ISNANF_TOLERANCE, 0}, +{717, 3215981890u, 3240474694u, 0u, 0, ISNANF_TOLERANCE, 0}, +{718, 1266687209u, 3092038122u, 0u, 0, ISNANF_TOLERANCE, 0}, +{719, 825230580u, 3410090781u, 0u, 0, ISNANF_TOLERANCE, 0}, +{720, 3487959775u, 3331372071u, 0u, 0, ISNANF_TOLERANCE, 0}, +{721, 943645710u, 852875779u, 0u, 0, ISNANF_TOLERANCE, 0}, +{722, 3345065699u, 3282620725u, 0u, 0, ISNANF_TOLERANCE, 0}, +{723, 935847271u, 1067255804u, 0u, 0, ISNANF_TOLERANCE, 0}, +{724, 3410336089u, 1111437780u, 0u, 0, ISNANF_TOLERANCE, 0}, +{725, 3082940740u, 1336840432u, 0u, 0, ISNANF_TOLERANCE, 0}, +{726, 1141063391u, 1168908072u, 0u, 0, ISNANF_TOLERANCE, 0}, +{727, 3059263153u, 3067795684u, 0u, 0, ISNANF_TOLERANCE, 0}, +{728, 849450947u, 3289799763u, 0u, 0, ISNANF_TOLERANCE, 0}, +{729, 3353679791u, 897158391u, 0u, 0, ISNANF_TOLERANCE, 0}, +{730, 1001823878u, 1016826861u, 0u, 0, ISNANF_TOLERANCE, 0}, +{731, 1009130212u, 1004302940u, 0u, 0, ISNANF_TOLERANCE, 0}, +{732, 3367127535u, 943136342u, 0u, 0, ISNANF_TOLERANCE, 0}, +{733, 1032920919u, 3449126417u, 0u, 0, ISNANF_TOLERANCE, 0}, +{734, 3281952870u, 3147012185u, 0u, 0, ISNANF_TOLERANCE, 0}, +{735, 1237868497u, 3048281802u, 0u, 0, ISNANF_TOLERANCE, 0}, +{736, 1153753924u, 3322269242u, 0u, 0, ISNANF_TOLERANCE, 0}, +{737, 1120261759u, 892210998u, 0u, 0, ISNANF_TOLERANCE, 0}, +{738, 3226328360u, 3366432856u, 0u, 0, ISNANF_TOLERANCE, 0}, +{739, 3349595986u, 3251588707u, 0u, 0, ISNANF_TOLERANCE, 0}, +{740, 3166889490u, 3306023523u, 0u, 0, ISNANF_TOLERANCE, 0}, +{741, 1087750238u, 1099325523u, 0u, 0, ISNANF_TOLERANCE, 0}, +{742, 3121620061u, 3359488363u, 0u, 0, ISNANF_TOLERANCE, 0}, +{743, 1066116543u, 3072159933u, 0u, 0, ISNANF_TOLERANCE, 0}, +{744, 3210898034u, 2981803389u, 0u, 0, ISNANF_TOLERANCE, 0}, +{745, 3051923237u, 3364074347u, 0u, 0, ISNANF_TOLERANCE, 0}, +{746, 1030612298u, 3345396001u, 0u, 0, ISNANF_TOLERANCE, 0}, +{747, 3015019212u, 989161453u, 0u, 0, ISNANF_TOLERANCE, 0}, +{748, 1186234578u, 858134374u, 0u, 0, ISNANF_TOLERANCE, 0}, +{749, 1331680743u, 1009396165u, 0u, 0, ISNANF_TOLERANCE, 0}, +{750, 847857044u, 894661023u, 0u, 0, ISNANF_TOLERANCE, 0}, +{751, 3060774997u, 1326067357u, 0u, 0, ISNANF_TOLERANCE, 0}, +{752, 887589411u, 1292305693u, 0u, 0, ISNANF_TOLERANCE, 0}, +{753, 1045232522u, 3234993273u, 0u, 0, ISNANF_TOLERANCE, 0}, +{754, 3119858470u, 962515365u, 0u, 0, ISNANF_TOLERANCE, 0}, +{755, 3002873011u, 3188748064u, 0u, 0, ISNANF_TOLERANCE, 0}, +{756, 3349432725u, 928848003u, 0u, 0, ISNANF_TOLERANCE, 0}, +{757, 912423027u, 3184646319u, 0u, 0, ISNANF_TOLERANCE, 0}, +{758, 3228795133u, 3273940030u, 0u, 0, ISNANF_TOLERANCE, 0}, +{759, 3194674746u, 3112269709u, 0u, 0, ISNANF_TOLERANCE, 0}, +{760, 3296784303u, 3276182352u, 0u, 0, ISNANF_TOLERANCE, 0}, +{761, 965402291u, 3107104376u, 0u, 0, ISNANF_TOLERANCE, 0}, +{762, 3388153589u, 3426245389u, 0u, 0, ISNANF_TOLERANCE, 0}, +{763, 1133410485u, 3329658993u, 0u, 0, ISNANF_TOLERANCE, 0}, +{764, 3136790322u, 1088652637u, 0u, 0, ISNANF_TOLERANCE, 0}, +{765, 3369970587u, 959121458u, 0u, 0, ISNANF_TOLERANCE, 0}, +{766, 1270451568u, 928393353u, 0u, 0, ISNANF_TOLERANCE, 0}, +{767, 989498922u, 3088358419u, 0u, 0, ISNANF_TOLERANCE, 0}, +{768, 1280215674u, 3148135875u, 0u, 0, ISNANF_TOLERANCE, 0}, +{769, 1171873518u, 954709738u, 0u, 0, ISNANF_TOLERANCE, 0}, +{770, 3298258100u, 935525182u, 0u, 0, ISNANF_TOLERANCE, 0}, +{771, 3415208824u, 822843236u, 0u, 0, ISNANF_TOLERANCE, 0}, +{772, 1001897182u, 3191875320u, 0u, 0, ISNANF_TOLERANCE, 0}, +{773, 3152777939u, 3245830463u, 0u, 0, ISNANF_TOLERANCE, 0}, +{774, 985903305u, 3333087577u, 0u, 0, ISNANF_TOLERANCE, 0}, +{775, 3357328848u, 859306298u, 0u, 0, ISNANF_TOLERANCE, 0}, +{776, 2967395608u, 3077307650u, 0u, 0, ISNANF_TOLERANCE, 0}, +{777, 982612185u, 923582663u, 0u, 0, ISNANF_TOLERANCE, 0}, +{778, 3267868136u, 1208301947u, 0u, 0, ISNANF_TOLERANCE, 0}, +{779, 3319048157u, 1172271145u, 0u, 0, ISNANF_TOLERANCE, 0}, +{780, 1144755661u, 860947435u, 0u, 0, ISNANF_TOLERANCE, 0}, +{781, 840456845u, 1051585760u, 0u, 0, ISNANF_TOLERANCE, 0}, +{782, 898467286u, 839254959u, 0u, 0, ISNANF_TOLERANCE, 0}, +{783, 3301461672u, 1233693827u, 0u, 0, ISNANF_TOLERANCE, 0}, +{784, 3364525678u, 3089849671u, 0u, 0, ISNANF_TOLERANCE, 0}, +{785, 871130681u, 905123007u, 0u, 0, ISNANF_TOLERANCE, 0}, +{786, 931441127u, 1133424555u, 0u, 0, ISNANF_TOLERANCE, 0}, +{787, 3146660041u, 3143695961u, 0u, 0, ISNANF_TOLERANCE, 0}, +{788, 3467121799u, 3023584354u, 0u, 0, ISNANF_TOLERANCE, 0}, +{789, 1151257041u, 3084216427u, 0u, 0, ISNANF_TOLERANCE, 0}, +{790, 3097873255u, 3219266640u, 0u, 0, ISNANF_TOLERANCE, 0}, +{791, 3130670309u, 3192399254u, 0u, 0, ISNANF_TOLERANCE, 0}, +{792, 1017573824u, 3130901062u, 0u, 0, ISNANF_TOLERANCE, 0}, +{793, 1258369714u, 3462258576u, 0u, 0, ISNANF_TOLERANCE, 0}, +{794, 1216602683u, 3371396332u, 0u, 0, ISNANF_TOLERANCE, 0}, +{795, 2976429847u, 959973239u, 0u, 0, ISNANF_TOLERANCE, 0}, +{796, 3297265739u, 1214184410u, 0u, 0, ISNANF_TOLERANCE, 0}, +{797, 1071940738u, 3311731012u, 0u, 0, ISNANF_TOLERANCE, 0}, +{798, 922601356u, 3337171870u, 0u, 0, ISNANF_TOLERANCE, 0}, +{799, 3462285635u, 3444030332u, 0u, 0, ISNANF_TOLERANCE, 0}, +{800, 3357177805u, 1085464241u, 0u, 0, ISNANF_TOLERANCE, 0}, +{801, 3049120080u, 900832851u, 0u, 0, ISNANF_TOLERANCE, 0}, +{802, 1153863660u, 1011991342u, 0u, 0, ISNANF_TOLERANCE, 0}, +{803, 3034243695u, 917098003u, 0u, 0, ISNANF_TOLERANCE, 0}, +{804, 809294662u, 3266461458u, 0u, 0, ISNANF_TOLERANCE, 0}, +{805, 822231182u, 3393408718u, 0u, 0, ISNANF_TOLERANCE, 0}, +{806, 845772797u, 3341109215u, 0u, 0, ISNANF_TOLERANCE, 0}, +{807, 1249365132u, 3278686216u, 0u, 0, ISNANF_TOLERANCE, 0}, +{808, 3046215730u, 3211219980u, 0u, 0, ISNANF_TOLERANCE, 0}, +{809, 3047251716u, 1090787353u, 0u, 0, ISNANF_TOLERANCE, 0}, +{810, 2980866154u, 1147012796u, 0u, 0, ISNANF_TOLERANCE, 0}, +{811, 3131219358u, 3471261157u, 0u, 0, ISNANF_TOLERANCE, 0}, +{812, 3222096285u, 1198013705u, 0u, 0, ISNANF_TOLERANCE, 0}, +{813, 1297708818u, 3079166173u, 0u, 0, ISNANF_TOLERANCE, 0}, +{814, 3345532722u, 3383708463u, 0u, 0, ISNANF_TOLERANCE, 0}, +{815, 3418753236u, 3481843070u, 0u, 0, ISNANF_TOLERANCE, 0}, +{816, 1277417964u, 3487506626u, 0u, 0, ISNANF_TOLERANCE, 0}, +{817, 987577257u, 1152077087u, 0u, 0, ISNANF_TOLERANCE, 0}, +{818, 3161606610u, 3190282989u, 0u, 0, ISNANF_TOLERANCE, 0}, +{819, 849056171u, 910674398u, 0u, 0, ISNANF_TOLERANCE, 0}, +{820, 888030585u, 3062367380u, 0u, 0, ISNANF_TOLERANCE, 0}, +{821, 1043442869u, 3311393817u, 0u, 0, ISNANF_TOLERANCE, 0}, +{822, 851189486u, 3007588581u, 0u, 0, ISNANF_TOLERANCE, 0}, +{823, 3320923228u, 3464544249u, 0u, 0, ISNANF_TOLERANCE, 0}, +{824, 1337400405u, 3488844154u, 0u, 0, ISNANF_TOLERANCE, 0}, +{825, 2964339884u, 3186563447u, 0u, 0, ISNANF_TOLERANCE, 0}, +{826, 3400348640u, 3129868490u, 0u, 0, ISNANF_TOLERANCE, 0}, +{827, 1250249095u, 1069023744u, 0u, 0, ISNANF_TOLERANCE, 0}, +{828, 3284411233u, 1173613526u, 0u, 0, ISNANF_TOLERANCE, 0}, +{829, 3020883322u, 2953622587u, 0u, 0, ISNANF_TOLERANCE, 0}, +{830, 1215968622u, 3469884568u, 0u, 0, ISNANF_TOLERANCE, 0}, +{831, 3202319550u, 819117302u, 0u, 0, ISNANF_TOLERANCE, 0}, +{832, 3061638260u, 3116222327u, 0u, 0, ISNANF_TOLERANCE, 0}, +{833, 1025404104u, 1066370251u, 0u, 0, ISNANF_TOLERANCE, 0}, +{834, 3138086437u, 3195983510u, 0u, 0, ISNANF_TOLERANCE, 0}, +{835, 3091024506u, 3456196859u, 0u, 0, ISNANF_TOLERANCE, 0}, +{836, 3362748242u, 3369843597u, 0u, 0, ISNANF_TOLERANCE, 0}, +{837, 3099671635u, 3218383623u, 0u, 0, ISNANF_TOLERANCE, 0}, +{838, 3068014841u, 2978226656u, 0u, 0, ISNANF_TOLERANCE, 0}, +{839, 1252237719u, 1121169249u, 0u, 0, ISNANF_TOLERANCE, 0}, +{840, 3327895594u, 1224511805u, 0u, 0, ISNANF_TOLERANCE, 0}, +{841, 3082454432u, 889268276u, 0u, 0, ISNANF_TOLERANCE, 0}, +{842, 3396161504u, 1182798837u, 0u, 0, ISNANF_TOLERANCE, 0}, +{843, 1099710167u, 887180181u, 0u, 0, ISNANF_TOLERANCE, 0}, +{844, 1157186482u, 1288722647u, 0u, 0, ISNANF_TOLERANCE, 0}, +{845, 1282110851u, 3176633124u, 0u, 0, ISNANF_TOLERANCE, 0}, +{846, 3477008113u, 1331845018u, 0u, 0, ISNANF_TOLERANCE, 0}, +{847, 3292127294u, 3409957764u, 0u, 0, ISNANF_TOLERANCE, 0}, +{848, 1123357102u, 3281307320u, 0u, 0, ISNANF_TOLERANCE, 0}, +{849, 1106837025u, 3088080674u, 0u, 0, ISNANF_TOLERANCE, 0}, +{850, 1049949008u, 1130799489u, 0u, 0, ISNANF_TOLERANCE, 0}, +{851, 1253017688u, 942062372u, 0u, 0, ISNANF_TOLERANCE, 0}, +{852, 1108543194u, 3281299199u, 0u, 0, ISNANF_TOLERANCE, 0}, +{853, 3087985411u, 1238341456u, 0u, 0, ISNANF_TOLERANCE, 0}, +{854, 3002187365u, 1073809054u, 0u, 0, ISNANF_TOLERANCE, 0}, +{855, 3163283126u, 1328636961u, 0u, 0, ISNANF_TOLERANCE, 0}, +{856, 1160162706u, 1264067367u, 0u, 0, ISNANF_TOLERANCE, 0}, +{857, 3305715025u, 3017496063u, 0u, 0, ISNANF_TOLERANCE, 0}, +{858, 1266928623u, 811778614u, 0u, 0, ISNANF_TOLERANCE, 0}, +{859, 3025340297u, 1193925540u, 0u, 0, ISNANF_TOLERANCE, 0}, +{860, 3438080027u, 3107114149u, 0u, 0, ISNANF_TOLERANCE, 0}, +{861, 3344574751u, 3111270744u, 0u, 0, ISNANF_TOLERANCE, 0}, +{862, 1152416724u, 962669179u, 0u, 0, ISNANF_TOLERANCE, 0}, +{863, 1218239308u, 1126238113u, 0u, 0, ISNANF_TOLERANCE, 0}, +{864, 3263310567u, 1030748197u, 0u, 0, ISNANF_TOLERANCE, 0}, +{865, 835770216u, 865469272u, 0u, 0, ISNANF_TOLERANCE, 0}, +{866, 3041998669u, 1160635263u, 0u, 0, ISNANF_TOLERANCE, 0}, +{867, 1000313118u, 2980130729u, 0u, 0, ISNANF_TOLERANCE, 0}, +{868, 972485427u, 1124312043u, 0u, 0, ISNANF_TOLERANCE, 0}, +{869, 3290264612u, 1124703898u, 0u, 0, ISNANF_TOLERANCE, 0}, +{870, 869072657u, 3150369767u, 0u, 0, ISNANF_TOLERANCE, 0}, +{871, 3222106584u, 1183748648u, 0u, 0, ISNANF_TOLERANCE, 0}, +{872, 1278946388u, 825129857u, 0u, 0, ISNANF_TOLERANCE, 0}, +{873, 947914771u, 3181847068u, 0u, 0, ISNANF_TOLERANCE, 0}, +{874, 3167730654u, 3195765940u, 0u, 0, ISNANF_TOLERANCE, 0}, +{875, 1098530298u, 3255870890u, 0u, 0, ISNANF_TOLERANCE, 0}, +{876, 3232726036u, 871038882u, 0u, 0, ISNANF_TOLERANCE, 0}, +{877, 1297190916u, 811863044u, 0u, 0, ISNANF_TOLERANCE, 0}, +{878, 1277649137u, 961171401u, 0u, 0, ISNANF_TOLERANCE, 0}, +{879, 3203377685u, 1306427476u, 0u, 0, ISNANF_TOLERANCE, 0}, +{880, 3090306474u, 3124785016u, 0u, 0, ISNANF_TOLERANCE, 0}, +{881, 3244032016u, 3045313345u, 0u, 0, ISNANF_TOLERANCE, 0}, +{882, 3033122376u, 3049877065u, 0u, 0, ISNANF_TOLERANCE, 0}, +{883, 3019221802u, 3329183205u, 0u, 0, ISNANF_TOLERANCE, 0}, +{884, 1096155623u, 1256423752u, 0u, 0, ISNANF_TOLERANCE, 0}, +{885, 873151908u, 3246562559u, 0u, 0, ISNANF_TOLERANCE, 0}, +{886, 3238729605u, 1298769842u, 0u, 0, ISNANF_TOLERANCE, 0}, +{887, 3317196817u, 989537151u, 0u, 0, ISNANF_TOLERANCE, 0}, +{888, 3374748510u, 834161190u, 0u, 0, ISNANF_TOLERANCE, 0}, +{889, 3345634950u, 959901149u, 0u, 0, ISNANF_TOLERANCE, 0}, +{890, 3189860276u, 883598767u, 0u, 0, ISNANF_TOLERANCE, 0}, +{891, 887311687u, 1175312255u, 0u, 0, ISNANF_TOLERANCE, 0}, +{892, 3396917283u, 3066326686u, 0u, 0, ISNANF_TOLERANCE, 0}, +{893, 3317032737u, 3143803722u, 0u, 0, ISNANF_TOLERANCE, 0}, +{894, 1200051436u, 1163802508u, 0u, 0, ISNANF_TOLERANCE, 0}, +{895, 3105291012u, 1194385202u, 0u, 0, ISNANF_TOLERANCE, 0}, +{896, 1306520561u, 957302464u, 0u, 0, ISNANF_TOLERANCE, 0}, +{897, 1314936356u, 2985592532u, 0u, 0, ISNANF_TOLERANCE, 0}, +{898, 3475052219u, 1284049853u, 0u, 0, ISNANF_TOLERANCE, 0}, +{899, 3085636260u, 1107682820u, 0u, 0, ISNANF_TOLERANCE, 0}, +{900, 2995058661u, 822977912u, 0u, 0, ISNANF_TOLERANCE, 0}, +{901, 3393227708u, 3271879112u, 0u, 0, ISNANF_TOLERANCE, 0}, +{902, 2983919425u, 3341426744u, 0u, 0, ISNANF_TOLERANCE, 0}, +{903, 3182540197u, 852580839u, 0u, 0, ISNANF_TOLERANCE, 0}, +{904, 3349005404u, 3080993030u, 0u, 0, ISNANF_TOLERANCE, 0}, +{905, 3154720153u, 3443720494u, 0u, 0, ISNANF_TOLERANCE, 0}, +{906, 1262863321u, 1219003129u, 0u, 0, ISNANF_TOLERANCE, 0}, +{907, 882902102u, 1224362550u, 0u, 0, ISNANF_TOLERANCE, 0}, +{908, 2995633678u, 828113666u, 0u, 0, ISNANF_TOLERANCE, 0}, +{909, 1053387478u, 3184880021u, 0u, 0, ISNANF_TOLERANCE, 0}, +{910, 3387653691u, 3347783852u, 0u, 0, ISNANF_TOLERANCE, 0}, +{911, 3136364836u, 1018492227u, 0u, 0, ISNANF_TOLERANCE, 0}, +{912, 808412264u, 941158192u, 0u, 0, ISNANF_TOLERANCE, 0}, +{913, 1338680611u, 1166078045u, 0u, 0, ISNANF_TOLERANCE, 0}, +{914, 1112891928u, 3074730425u, 0u, 0, ISNANF_TOLERANCE, 0}, +{915, 893449284u, 1052877339u, 0u, 0, ISNANF_TOLERANCE, 0}, +{916, 892311459u, 1097338393u, 0u, 0, ISNANF_TOLERANCE, 0}, +{917, 3105373037u, 3246705916u, 0u, 0, ISNANF_TOLERANCE, 0}, +{918, 1190105283u, 3033907262u, 0u, 0, ISNANF_TOLERANCE, 0}, +{919, 1011225926u, 1180485180u, 0u, 0, ISNANF_TOLERANCE, 0}, +{920, 1043025031u, 987068973u, 0u, 0, ISNANF_TOLERANCE, 0}, +{921, 3410531037u, 2953541915u, 0u, 0, ISNANF_TOLERANCE, 0}, +{922, 3125834184u, 896953754u, 0u, 0, ISNANF_TOLERANCE, 0}, +{923, 902318189u, 849277289u, 0u, 0, ISNANF_TOLERANCE, 0}, +{924, 835377647u, 3441354730u, 0u, 0, ISNANF_TOLERANCE, 0}, +{925, 2976308307u, 1286944060u, 0u, 0, ISNANF_TOLERANCE, 0}, +{926, 3213624815u, 2987148017u, 0u, 0, ISNANF_TOLERANCE, 0}, +{927, 1120888322u, 1086209113u, 0u, 0, ISNANF_TOLERANCE, 0}, +{928, 1315217243u, 3396371713u, 0u, 0, ISNANF_TOLERANCE, 0}, +{929, 3137758475u, 1039403054u, 0u, 0, ISNANF_TOLERANCE, 0}, +{930, 1040617590u, 1034835971u, 0u, 0, ISNANF_TOLERANCE, 0}, +{931, 955384253u, 3344785562u, 0u, 0, ISNANF_TOLERANCE, 0}, +{932, 853063496u, 3317415965u, 0u, 0, ISNANF_TOLERANCE, 0}, +{933, 823111402u, 877253523u, 0u, 0, ISNANF_TOLERANCE, 0}, +{934, 3061417900u, 1172208065u, 0u, 0, ISNANF_TOLERANCE, 0}, +{935, 904255535u, 1019967545u, 0u, 0, ISNANF_TOLERANCE, 0}, +{936, 1022984119u, 3113891410u, 0u, 0, ISNANF_TOLERANCE, 0}, +{937, 997362368u, 3112875428u, 0u, 0, ISNANF_TOLERANCE, 0}, +{938, 900933520u, 1100589187u, 0u, 0, ISNANF_TOLERANCE, 0}, +{939, 1168623062u, 1143306482u, 0u, 0, ISNANF_TOLERANCE, 0}, +{940, 878737490u, 3269908326u, 0u, 0, ISNANF_TOLERANCE, 0}, +{941, 1039827284u, 1072928888u, 0u, 0, ISNANF_TOLERANCE, 0}, +{942, 1021564080u, 1064468397u, 0u, 0, ISNANF_TOLERANCE, 0}, +{943, 3458669745u, 3033299853u, 0u, 0, ISNANF_TOLERANCE, 0}, +{944, 3327516316u, 3405380971u, 0u, 0, ISNANF_TOLERANCE, 0}, +{945, 1040711112u, 3229444200u, 0u, 0, ISNANF_TOLERANCE, 0}, +{946, 1134528351u, 3365952513u, 0u, 0, ISNANF_TOLERANCE, 0}, +{947, 3039884464u, 1170612785u, 0u, 0, ISNANF_TOLERANCE, 0}, +{948, 3414352838u, 3350285760u, 0u, 0, ISNANF_TOLERANCE, 0}, +{949, 1133689539u, 1067460093u, 0u, 0, ISNANF_TOLERANCE, 0}, +{950, 3455688478u, 3333091960u, 0u, 0, ISNANF_TOLERANCE, 0}, +{951, 1137634874u, 1137038869u, 0u, 0, ISNANF_TOLERANCE, 0}, +{952, 3415502662u, 955510692u, 0u, 0, ISNANF_TOLERANCE, 0}, +{953, 954999730u, 969618597u, 0u, 0, ISNANF_TOLERANCE, 0}, +{954, 1066157309u, 3241712664u, 0u, 0, ISNANF_TOLERANCE, 0}, +{955, 3436353675u, 1174967495u, 0u, 0, ISNANF_TOLERANCE, 0}, +{956, 940437609u, 860372396u, 0u, 0, ISNANF_TOLERANCE, 0}, +{957, 3108347547u, 3434003435u, 0u, 0, ISNANF_TOLERANCE, 0}, +{958, 3064200154u, 3158080507u, 0u, 0, ISNANF_TOLERANCE, 0}, +{959, 1023889593u, 2979304683u, 0u, 0, ISNANF_TOLERANCE, 0}, +{960, 3272661536u, 3461799138u, 0u, 0, ISNANF_TOLERANCE, 0}, +{961, 1170245333u, 1233406410u, 0u, 0, ISNANF_TOLERANCE, 0}, +{962, 1219052056u, 3369557946u, 0u, 0, ISNANF_TOLERANCE, 0}, +{963, 3318983619u, 3259663338u, 0u, 0, ISNANF_TOLERANCE, 0}, +{964, 3372118621u, 837597103u, 0u, 0, ISNANF_TOLERANCE, 0}, +{965, 3146190320u, 889646054u, 0u, 0, ISNANF_TOLERANCE, 0}, +{966, 1299683827u, 966031619u, 0u, 0, ISNANF_TOLERANCE, 0}, +{967, 3190796331u, 1320011850u, 0u, 0, ISNANF_TOLERANCE, 0}, +{968, 2965838479u, 805822032u, 0u, 0, ISNANF_TOLERANCE, 0}, +{969, 3086068902u, 3484245751u, 0u, 0, ISNANF_TOLERANCE, 0}, +{970, 3064155399u, 3176569312u, 0u, 0, ISNANF_TOLERANCE, 0}, +{971, 836858201u, 3132995403u, 0u, 0, ISNANF_TOLERANCE, 0}, +{972, 3040314717u, 1071290674u, 0u, 0, ISNANF_TOLERANCE, 0}, +{973, 3257224022u, 3361778245u, 0u, 0, ISNANF_TOLERANCE, 0}, +{974, 1229268598u, 1066965677u, 0u, 0, ISNANF_TOLERANCE, 0}, +{975, 3184078812u, 871003709u, 0u, 0, ISNANF_TOLERANCE, 0}, +{976, 871255076u, 3446104825u, 0u, 0, ISNANF_TOLERANCE, 0}, +{977, 1086717248u, 3423795374u, 0u, 0, ISNANF_TOLERANCE, 0}, +{978, 3434884607u, 3029593823u, 0u, 0, ISNANF_TOLERANCE, 0}, +{979, 3464955606u, 1017987696u, 0u, 0, ISNANF_TOLERANCE, 0}, +{980, 1025278524u, 3121856207u, 0u, 0, ISNANF_TOLERANCE, 0}, +{981, 1242829722u, 3233935671u, 0u, 0, ISNANF_TOLERANCE, 0}, +{982, 3075149137u, 1117325737u, 0u, 0, ISNANF_TOLERANCE, 0}, +{983, 1200927971u, 1317167489u, 0u, 0, ISNANF_TOLERANCE, 0}, +{984, 3326858092u, 3452602832u, 0u, 0, ISNANF_TOLERANCE, 0}, +{985, 2995203347u, 1021818696u, 0u, 0, ISNANF_TOLERANCE, 0}, +{986, 1246019790u, 850632217u, 0u, 0, ISNANF_TOLERANCE, 0}, +{987, 3184801644u, 1137974313u, 0u, 0, ISNANF_TOLERANCE, 0}, +{988, 1136052740u, 3244616020u, 0u, 0, ISNANF_TOLERANCE, 0}, +{989, 1069009211u, 3002507482u, 0u, 0, ISNANF_TOLERANCE, 0}, +{990, 1015670780u, 1101217251u, 0u, 0, ISNANF_TOLERANCE, 0}, +{991, 1012543234u, 1116520440u, 0u, 0, ISNANF_TOLERANCE, 0}, +{992, 3316611992u, 3394732912u, 0u, 0, ISNANF_TOLERANCE, 0}, +{993, 3012101436u, 3307846870u, 0u, 0, ISNANF_TOLERANCE, 0}, +{994, 1087942795u, 3316660295u, 0u, 0, ISNANF_TOLERANCE, 0}, +{995, 3426365713u, 3069778532u, 0u, 0, ISNANF_TOLERANCE, 0}, +{996, 3066654389u, 3443934204u, 0u, 0, ISNANF_TOLERANCE, 0}, +{997, 3295326432u, 1313396175u, 0u, 0, ISNANF_TOLERANCE, 0}, +{998, 3318835308u, 3277583511u, 0u, 0, ISNANF_TOLERANCE, 0}, +{999, 3283555717u, 891875120u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1000, 3381255420u, 3015406047u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1001, 3040485181u, 3375450886u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1002, 3388772093u, 1032597076u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1003, 954670189u, 1144923689u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1004, 1319200415u, 3387555900u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1005, 1279324488u, 3228401212u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1006, 3217795424u, 865577227u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1007, 3455131757u, 1260217257u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1008, 2982636375u, 3162157233u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1009, 1246947517u, 1087951909u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1010, 3396723577u, 869285240u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1011, 3433761025u, 3060143904u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1012, 3201187455u, 900233172u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1013, 1173247961u, 1191127979u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1014, 3037297123u, 3346394818u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1015, 3248534678u, 1323683800u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1016, 3083019343u, 3033309444u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1017, 3042018375u, 3203882372u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1018, 1082862511u, 3032804719u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1019, 3157626955u, 3483653298u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1020, 1341821683u, 3003675365u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1021, 881101379u, 1190838126u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1022, 1079061705u, 2960507663u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1023, 3182695954u, 3256861672u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1024, 1105291533u, 3482971524u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1025, 1016023520u, 3227712090u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1026, 3370691006u, 1295870514u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1027, 1156767169u, 1049756240u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1028, 3077020499u, 894671462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1029, 1104284039u, 3040211914u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1030, 3335212901u, 3486414589u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1031, 1093697541u, 3193708441u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1032, 3266691185u, 1160074593u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1033, 3179003144u, 1108615803u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1034, 1094115255u, 3008610212u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1035, 2994604730u, 973792195u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1036, 3424086808u, 3260140004u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1037, 2957266025u, 917932067u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1038, 3353608773u, 1134068114u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1039, 2985838945u, 3118475644u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1040, 973664327u, 1319516167u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1041, 882878091u, 3136970767u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1042, 1098662266u, 833740182u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1043, 927582555u, 947955456u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1044, 3111440310u, 3067634077u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1045, 3476083859u, 966439623u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1046, 3038754840u, 932009686u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1047, 979878744u, 1232482646u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1048, 3464546616u, 3205527253u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1049, 1002542205u, 3152136093u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1050, 3443552129u, 3165561391u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1051, 1287620154u, 3119707283u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1052, 820906845u, 1196920413u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1053, 860108361u, 921064349u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1054, 946058434u, 1249928879u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1055, 3073260205u, 3093124531u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1056, 1245702957u, 894348966u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1057, 989655126u, 1308376568u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1058, 1002715618u, 1191006977u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1059, 3087802274u, 897541752u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1060, 1000863905u, 1196831314u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1061, 3415763001u, 3032518431u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1062, 2979924820u, 1100234812u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1063, 3283471961u, 1260093226u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1064, 3311210827u, 1192192264u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1065, 3026311911u, 2968974374u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1066, 1198307901u, 1116328249u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1067, 1288901567u, 1296370667u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1068, 922255363u, 958305289u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1069, 1113104661u, 944376032u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1070, 1136714348u, 828849087u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1071, 3002059872u, 1136817970u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1072, 948856035u, 1015466475u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1073, 1062512367u, 3229559531u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1074, 3486907092u, 823220784u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1075, 3015049792u, 3078555978u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1076, 1162027071u, 3308983387u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1077, 1034561811u, 1054043114u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1078, 853827378u, 898656161u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1079, 3271615417u, 3209997200u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1080, 1042014529u, 1146708584u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1081, 1177157787u, 3090208179u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1082, 3196144817u, 1056118717u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1083, 3432084552u, 2997091781u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1084, 1309658335u, 1010219988u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1085, 3004373345u, 873739132u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1086, 2997667929u, 1038223245u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1087, 1226494979u, 2991604792u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1088, 3100289712u, 3456334210u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1089, 3375507013u, 1306310823u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1090, 3460699001u, 3096700943u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1091, 3079231719u, 1044386263u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1092, 3093951884u, 1014115231u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1093, 3468023178u, 1209565017u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1094, 3008182310u, 1258900986u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1095, 1204196034u, 3298625731u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1096, 3459877411u, 2960476959u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1097, 909696559u, 1163075690u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1098, 1161439847u, 943449277u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1099, 908663107u, 939489763u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1100, 1055319316u, 3261813492u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1101, 1084378658u, 1009650785u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1102, 3053887750u, 3341786453u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1103, 3022828828u, 881335251u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1104, 2995476576u, 3194911588u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1105, 1226473697u, 821025132u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1106, 1123114742u, 1229815537u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1107, 1258114435u, 1291336083u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1108, 2983818103u, 3015402015u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1109, 3468040845u, 3066966245u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1110, 1178825761u, 1113195286u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1111, 3059266302u, 878503862u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1112, 3223384012u, 1130486973u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1113, 1019964626u, 1235133609u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1114, 3445262427u, 3465211174u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1115, 1125653081u, 1207799746u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1116, 3337652712u, 3025581813u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1117, 1184753508u, 3147374485u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1118, 996404791u, 3353251979u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1119, 1188439315u, 1113484271u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1120, 906557513u, 3006513432u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1121, 916831283u, 999465787u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1122, 996786317u, 3179221951u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1123, 3461635065u, 1004690387u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1124, 1188167943u, 1200744896u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1125, 3036502395u, 1172597364u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1126, 891257783u, 1267560050u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1127, 3290079438u, 846519377u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1128, 3350690327u, 2967953392u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1129, 1102061604u, 3424449935u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1130, 1282351521u, 3039376424u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1131, 3458861065u, 3392466405u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1132, 3095256878u, 1023623326u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1133, 3163373610u, 843150426u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1134, 3228793330u, 855146890u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1135, 3422194733u, 893873945u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1136, 3083885296u, 974543672u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1137, 1261940623u, 3402349985u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1138, 825039660u, 3426717554u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1139, 3400603081u, 3234396843u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1140, 1219411812u, 2961857939u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1141, 3094833770u, 805351108u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1142, 3139250800u, 3079109479u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1143, 886201503u, 3272760705u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1144, 3297366026u, 1089966380u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1145, 1218488455u, 3309646450u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1146, 3040358923u, 3093401553u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1147, 862346861u, 3411853707u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1148, 1283938137u, 1196383822u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1149, 3182551696u, 3029982441u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1150, 1317098613u, 949986176u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1151, 3116209179u, 3303588342u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1152, 3431703657u, 3014443710u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1153, 3239728775u, 927815421u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1154, 3207141672u, 933456504u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1155, 3154378805u, 905462392u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1156, 3069658155u, 1041452042u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1157, 3313160088u, 2964063309u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1158, 3207056527u, 3384206601u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1159, 1284174954u, 3436881197u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1160, 3156081645u, 3308839704u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1161, 1063693032u, 976661408u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1162, 3036026175u, 1251203998u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1163, 1102631663u, 3396951425u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1164, 968803479u, 992989712u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1165, 3273080388u, 3109405906u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1166, 1172529774u, 3294550127u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1167, 1306695905u, 1292690378u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1168, 1003649752u, 1218792138u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1169, 1078478376u, 1326246424u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1170, 3158855023u, 3151283866u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1171, 1165177679u, 3276237026u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1172, 870472127u, 3332532333u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1173, 3403009513u, 3381966453u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1174, 816825508u, 3032174124u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1175, 952348506u, 3377573987u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1176, 839544701u, 3419900937u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1177, 2967454456u, 3313359047u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1178, 1222777442u, 1125769920u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1179, 1325324763u, 978336043u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1180, 3363524213u, 3202991311u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1181, 1158950321u, 1073578913u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1182, 903129873u, 3416864271u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1183, 2997685349u, 1123653663u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1184, 3078339944u, 988173985u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1185, 1208345407u, 1254181270u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1186, 3003262042u, 1327277116u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1187, 1258634105u, 1247426200u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1188, 1248478509u, 1287895126u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1189, 1153863988u, 3430539165u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1190, 1235620969u, 866627358u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1191, 1097120930u, 3221726305u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1192, 3469778622u, 1200179013u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1193, 1147712200u, 931865525u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1194, 812694172u, 1136276190u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1195, 862266739u, 3139447362u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1196, 1124721745u, 3058969650u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1197, 3261744304u, 1043806501u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1198, 832324055u, 2954061156u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1199, 805759679u, 903848557u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1200, 2983396015u, 872299138u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1201, 1064922416u, 1320485628u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1202, 868114980u, 3213276361u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1203, 3303160152u, 3075455322u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1204, 1315090496u, 3269683237u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1205, 850876090u, 3365795667u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1206, 3230403187u, 1322841992u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1207, 1335399673u, 974138676u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1208, 1072458508u, 3372833993u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1209, 3303015249u, 3015039539u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1210, 3252139741u, 1059615003u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1211, 3468519966u, 3113982619u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1212, 1006231203u, 897530770u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1213, 951554138u, 1001144381u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1214, 942046828u, 986341002u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1215, 2968517146u, 951832467u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1216, 3319723279u, 3414482416u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1217, 3255104167u, 928827688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1218, 1155477903u, 3104812800u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1219, 3273889176u, 980486479u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1220, 3237813668u, 3441016803u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1221, 1228207362u, 2985476579u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1222, 975349337u, 1311932596u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1223, 2982583196u, 3132904446u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1224, 1290175785u, 3008182462u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1225, 981908840u, 3314038398u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1226, 941187647u, 1107765599u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1227, 1214223128u, 3225536822u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1228, 3422922584u, 1086391131u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1229, 1315857601u, 3487600045u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1230, 3453226030u, 3233768835u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1231, 1078359574u, 3199175230u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1232, 1029557624u, 3302959071u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1233, 1207675424u, 3042692550u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1234, 1028355074u, 3442294040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1235, 3119299090u, 1187096397u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1236, 1248421894u, 3367769132u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1237, 3353251994u, 1095517730u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1238, 876926659u, 3288089977u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1239, 1076752219u, 876236939u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1240, 3388531942u, 2988520062u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1241, 1273395082u, 3031189261u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1242, 3385588183u, 3258252464u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1243, 862047095u, 829323655u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1244, 3192315328u, 3289489214u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1245, 3441804648u, 3274638356u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1246, 837368567u, 3228474927u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1247, 3392827417u, 1277961150u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1248, 1161241793u, 1328003707u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1249, 856495732u, 3123041418u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1250, 3034494183u, 3041579130u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1251, 1171318485u, 3374409104u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1252, 3047748143u, 831102792u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1253, 1001216371u, 3052357038u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1254, 2999541351u, 3085461799u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1255, 912515889u, 1074635609u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1256, 3391452505u, 897989232u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1257, 3249603369u, 3147662248u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1258, 1220264047u, 2960450369u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1259, 3169816394u, 988430929u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1260, 3098997418u, 3002162688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1261, 3282212423u, 3174079140u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1262, 3352293320u, 3247843425u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1263, 3296358441u, 875645354u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1264, 1197828352u, 3245614728u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1265, 3340510371u, 914930263u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1266, 1127109339u, 3368125489u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1267, 816173492u, 1083268662u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1268, 909467381u, 1232375752u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1269, 1200599955u, 2981200675u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1270, 962230977u, 2988248037u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1271, 2996667337u, 1068572835u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1272, 3192887808u, 3191848339u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1273, 3237183876u, 3179379969u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1274, 939285924u, 3056079386u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1275, 944050180u, 3452557879u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1276, 3058135703u, 3090284601u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1277, 3480592662u, 3261728191u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1278, 3061939312u, 3274418540u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1279, 1003299981u, 853295521u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1280, 1155775526u, 1255814444u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1281, 1234491880u, 3408568717u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1282, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1283, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1284, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1285, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1286, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1287, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1288, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1289, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1290, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1291, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1292, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1293, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1294, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1295, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1296, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1297, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1298, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1299, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1300, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1301, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1302, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1303, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1304, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1305, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1306, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1307, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1308, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1309, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1310, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1311, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1312, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1313, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1314, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1315, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1316, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1317, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1318, 2143289344u, 2143289344u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1319, 4290772992u, 4290772992u, 1065353216u, 0, ISNANF_TOLERANCE, 0}, +{1320, 2139095040u, 2139095040u, 0u, 0, ISNANF_TOLERANCE, 0}, +{1321, 4286578688u, 4286578688u, 0u, 0, ISNANF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_ISNANF_H multiple inclusion protection + +// EOF isnanf.h diff --git a/packages/language/c/libm/current/tests/vectors/j0f.c b/packages/language/c/libm/current/tests/vectors/j0f.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/j0f.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// j0f.c +// +// Test of j0f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/j0f.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(j0f_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &j0f, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &j0f_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("j0f() is stable"); + } // if + else + { + CYG_TEST_FAIL("j0f() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library j0f() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "j0f() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF j0f.c diff --git a/packages/language/c/libm/current/tests/vectors/j0f.h b/packages/language/c/libm/current/tests/vectors/j0f.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/j0f.h @@ -0,0 +1,362 @@ +#ifndef CYGONCE_LIBM_J0_H +#define CYGONCE_LIBM_J0_H +//=========================================================================== +// +// j0f.h +// +// Test vectors for testing of j0f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/j0f.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define J0_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t j0f_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1059835739u, 1059835739u, 0, J0_TOLERANCE, 0}, +{1, 3214430700u, 1059919122u, 1059919122u, 0, J0_TOLERANCE, 0}, +{2, 3214346813u, 1060002071u, 1060002071u, 0, J0_TOLERANCE, 0}, +{3, 3214262927u, 1060084577u, 1060084577u, 0, J0_TOLERANCE, 0}, +{4, 3214179041u, 1060166635u, 1060166635u, 0, J0_TOLERANCE, 0}, +{5, 3214095155u, 1060248241u, 1060248241u, 0, J0_TOLERANCE, 0}, +{6, 3214011269u, 1060329386u, 1060329386u, 0, J0_TOLERANCE, 0}, +{7, 3213927383u, 1060410067u, 1060410067u, 0, J0_TOLERANCE, 0}, +{8, 3213843497u, 1060490274u, 1060490274u, 0, J0_TOLERANCE, 0}, +{9, 3213759611u, 1060570006u, 1060570006u, 0, J0_TOLERANCE, 0}, +{10, 3213675725u, 1060649254u, 1060649254u, 0, J0_TOLERANCE, 0}, +{11, 3213591839u, 1060728013u, 1060728013u, 0, J0_TOLERANCE, 0}, +{12, 3213507953u, 1060806276u, 1060806276u, 0, J0_TOLERANCE, 0}, +{13, 3213424067u, 1060884039u, 1060884039u, 0, J0_TOLERANCE, 0}, +{14, 3213340180u, 1060961298u, 1060961298u, 0, J0_TOLERANCE, 0}, +{15, 3213256294u, 1061038042u, 1061038042u, 0, J0_TOLERANCE, 0}, +{16, 3213172408u, 1061114269u, 1061114269u, 0, J0_TOLERANCE, 0}, +{17, 3213088522u, 1061189972u, 1061189972u, 0, J0_TOLERANCE, 0}, +{18, 3213004636u, 1061265147u, 1061265147u, 0, J0_TOLERANCE, 0}, +{19, 3212920750u, 1061339787u, 1061339787u, 0, J0_TOLERANCE, 0}, +{20, 3212836864u, 1061413887u, 1061413887u, 0, J0_TOLERANCE, 0}, +{21, 3212669092u, 1061487442u, 1061487442u, 0, J0_TOLERANCE, 0}, +{22, 3212501320u, 1061560445u, 1061560445u, 0, J0_TOLERANCE, 0}, +{23, 3212333548u, 1061632891u, 1061632891u, 0, J0_TOLERANCE, 0}, +{24, 3212165775u, 1061704777u, 1061704777u, 0, J0_TOLERANCE, 0}, +{25, 3211998003u, 1061776097u, 1061776097u, 0, J0_TOLERANCE, 0}, +{26, 3211830231u, 1061846843u, 1061846843u, 0, J0_TOLERANCE, 0}, +{27, 3211662459u, 1061917012u, 1061917012u, 0, J0_TOLERANCE, 0}, +{28, 3211494687u, 1061986598u, 1061986598u, 0, J0_TOLERANCE, 0}, +{29, 3211326915u, 1062055596u, 1062055596u, 0, J0_TOLERANCE, 0}, +{30, 3211159142u, 1062124001u, 1062124001u, 0, J0_TOLERANCE, 0}, +{31, 3210991370u, 1062191808u, 1062191808u, 0, J0_TOLERANCE, 0}, +{32, 3210823598u, 1062259012u, 1062259012u, 0, J0_TOLERANCE, 0}, +{33, 3210655826u, 1062325608u, 1062325608u, 0, J0_TOLERANCE, 0}, +{34, 3210488054u, 1062391591u, 1062391591u, 0, J0_TOLERANCE, 0}, +{35, 3210320282u, 1062456956u, 1062456956u, 0, J0_TOLERANCE, 0}, +{36, 3210152509u, 1062521700u, 1062521700u, 0, J0_TOLERANCE, 0}, +{37, 3209984737u, 1062585814u, 1062585814u, 0, J0_TOLERANCE, 0}, +{38, 3209816965u, 1062649297u, 1062649297u, 0, J0_TOLERANCE, 0}, +{39, 3209649193u, 1062712142u, 1062712142u, 0, J0_TOLERANCE, 0}, +{40, 3209481421u, 1062774345u, 1062774345u, 0, J0_TOLERANCE, 0}, +{41, 3209313649u, 1062835904u, 1062835904u, 0, J0_TOLERANCE, 0}, +{42, 3209145876u, 1062896811u, 1062896811u, 0, J0_TOLERANCE, 0}, +{43, 3208978104u, 1062957061u, 1062957061u, 0, J0_TOLERANCE, 0}, +{44, 3208810332u, 1063016653u, 1063016653u, 0, J0_TOLERANCE, 0}, +{45, 3208642560u, 1063075578u, 1063075578u, 0, J0_TOLERANCE, 0}, +{46, 3208474788u, 1063133838u, 1063133838u, 0, J0_TOLERANCE, 0}, +{47, 3208307016u, 1063191423u, 1063191423u, 0, J0_TOLERANCE, 0}, +{48, 3208139244u, 1063248330u, 1063248330u, 0, J0_TOLERANCE, 0}, +{49, 3207971471u, 1063304557u, 1063304557u, 0, J0_TOLERANCE, 0}, +{50, 3207803699u, 1063360098u, 1063360098u, 0, J0_TOLERANCE, 0}, +{51, 3207635927u, 1063414948u, 1063414948u, 0, J0_TOLERANCE, 0}, +{52, 3207468155u, 1063469104u, 1063469104u, 0, J0_TOLERANCE, 0}, +{53, 3207300383u, 1063522564u, 1063522564u, 0, J0_TOLERANCE, 0}, +{54, 3207132611u, 1063575320u, 1063575320u, 0, J0_TOLERANCE, 0}, +{55, 3206964838u, 1063627371u, 1063627371u, 0, J0_TOLERANCE, 0}, +{56, 3206797066u, 1063678713u, 1063678713u, 0, J0_TOLERANCE, 0}, +{57, 3206629294u, 1063729339u, 1063729339u, 0, J0_TOLERANCE, 0}, +{58, 3206461522u, 1063779249u, 1063779249u, 0, J0_TOLERANCE, 0}, +{59, 3206293750u, 1063828438u, 1063828438u, 0, J0_TOLERANCE, 0}, +{60, 3206125978u, 1063876903u, 1063876903u, 0, J0_TOLERANCE, 0}, +{61, 3205958205u, 1063924638u, 1063924638u, 0, J0_TOLERANCE, 0}, +{62, 3205790433u, 1063971642u, 1063971642u, 0, J0_TOLERANCE, 0}, +{63, 3205622661u, 1064017911u, 1064017911u, 0, J0_TOLERANCE, 0}, +{64, 3205454889u, 1064063439u, 1064063439u, 0, J0_TOLERANCE, 0}, +{65, 3205287117u, 1064108226u, 1064108226u, 0, J0_TOLERANCE, 0}, +{66, 3205119345u, 1064152266u, 1064152266u, 0, J0_TOLERANCE, 0}, +{67, 3204951572u, 1064195560u, 1064195560u, 0, J0_TOLERANCE, 0}, +{68, 3204783800u, 1064238100u, 1064238100u, 0, J0_TOLERANCE, 0}, +{69, 3204616028u, 1064279884u, 1064279884u, 0, J0_TOLERANCE, 0}, +{70, 3204448256u, 1064320911u, 1064320911u, 0, J0_TOLERANCE, 0}, +{71, 3204112712u, 1064361174u, 1064361174u, 0, J0_TOLERANCE, 0}, +{72, 3203777167u, 1064400675u, 1064400675u, 0, J0_TOLERANCE, 0}, +{73, 3203441623u, 1064439408u, 1064439408u, 0, J0_TOLERANCE, 0}, +{74, 3203106079u, 1064477370u, 1064477370u, 0, J0_TOLERANCE, 0}, +{75, 3202770534u, 1064514559u, 1064514559u, 0, J0_TOLERANCE, 0}, +{76, 3202434990u, 1064550972u, 1064550972u, 0, J0_TOLERANCE, 0}, +{77, 3202099446u, 1064586606u, 1064586606u, 0, J0_TOLERANCE, 0}, +{78, 3201763901u, 1064621459u, 1064621459u, 0, J0_TOLERANCE, 0}, +{79, 3201428357u, 1064655526u, 1064655526u, 0, J0_TOLERANCE, 0}, +{80, 3201092813u, 1064688809u, 1064688809u, 0, J0_TOLERANCE, 0}, +{81, 3200757268u, 1064721302u, 1064721302u, 0, J0_TOLERANCE, 0}, +{82, 3200421724u, 1064753003u, 1064753003u, 0, J0_TOLERANCE, 0}, +{83, 3200086180u, 1064783911u, 1064783911u, 0, J0_TOLERANCE, 0}, +{84, 3199750636u, 1064814022u, 1064814022u, 0, J0_TOLERANCE, 0}, +{85, 3199415091u, 1064843334u, 1064843334u, 0, J0_TOLERANCE, 0}, +{86, 3199079547u, 1064871847u, 1064871847u, 0, J0_TOLERANCE, 0}, +{87, 3198744003u, 1064899556u, 1064899556u, 0, J0_TOLERANCE, 0}, +{88, 3198408458u, 1064926461u, 1064926461u, 0, J0_TOLERANCE, 0}, +{89, 3198072914u, 1064952558u, 1064952558u, 0, J0_TOLERANCE, 0}, +{90, 3197737370u, 1064977846u, 1064977846u, 0, J0_TOLERANCE, 0}, +{91, 3197401825u, 1065002325u, 1065002325u, 0, J0_TOLERANCE, 0}, +{92, 3197066281u, 1065025991u, 1065025991u, 0, J0_TOLERANCE, 0}, +{93, 3196730737u, 1065048842u, 1065048842u, 0, J0_TOLERANCE, 0}, +{94, 3196395192u, 1065070877u, 1065070877u, 0, J0_TOLERANCE, 0}, +{95, 3196059648u, 1065092094u, 1065092094u, 0, J0_TOLERANCE, 0}, +{96, 3195388559u, 1065112493u, 1065112493u, 0, J0_TOLERANCE, 0}, +{97, 3194717471u, 1065132069u, 1065132069u, 0, J0_TOLERANCE, 0}, +{98, 3194046382u, 1065150825u, 1065150825u, 0, J0_TOLERANCE, 0}, +{99, 3193375293u, 1065168757u, 1065168757u, 0, J0_TOLERANCE, 0}, +{100, 3192704205u, 1065185863u, 1065185863u, 0, J0_TOLERANCE, 0}, +{101, 3192033116u, 1065202143u, 1065202143u, 0, J0_TOLERANCE, 0}, +{102, 3191362028u, 1065217596u, 1065217596u, 0, J0_TOLERANCE, 0}, +{103, 3190690939u, 1065232219u, 1065232219u, 0, J0_TOLERANCE, 0}, +{104, 3190019850u, 1065246014u, 1065246014u, 0, J0_TOLERANCE, 0}, +{105, 3189348762u, 1065258977u, 1065258977u, 0, J0_TOLERANCE, 0}, +{106, 3188677673u, 1065271109u, 1065271109u, 0, J0_TOLERANCE, 0}, +{107, 3188006584u, 1065282406u, 1065282406u, 0, J0_TOLERANCE, 0}, +{108, 3186999951u, 1065292873u, 1065292873u, 0, J0_TOLERANCE, 0}, +{109, 3185657774u, 1065302503u, 1065302503u, 0, J0_TOLERANCE, 0}, +{110, 3184315597u, 1065311299u, 1065311299u, 0, J0_TOLERANCE, 0}, +{111, 3182973420u, 1065319259u, 1065319259u, 0, J0_TOLERANCE, 0}, +{112, 3181631242u, 1065326383u, 1065326383u, 0, J0_TOLERANCE, 0}, +{113, 3180289065u, 1065332670u, 1065332670u, 0, J0_TOLERANCE, 0}, +{114, 3178611343u, 1065338120u, 1065338120u, 0, J0_TOLERANCE, 0}, +{115, 3175926989u, 1065342731u, 1065342731u, 0, J0_TOLERANCE, 0}, +{116, 3173242634u, 1065346505u, 1065346505u, 0, J0_TOLERANCE, 0}, +{117, 3170222735u, 1065349441u, 1065349441u, 0, J0_TOLERANCE, 0}, +{118, 3164854026u, 1065351539u, 1065351539u, 0, J0_TOLERANCE, 0}, +{119, 3156465418u, 1065352797u, 1065352797u, 0, J0_TOLERANCE, 0}, +{120, 1008981770u, 1065352797u, 1065352797u, 0, J0_TOLERANCE, 0}, +{121, 1017370378u, 1065351539u, 1065351539u, 0, J0_TOLERANCE, 0}, +{122, 1022739087u, 1065349441u, 1065349441u, 0, J0_TOLERANCE, 0}, +{123, 1025758986u, 1065346505u, 1065346505u, 0, J0_TOLERANCE, 0}, +{124, 1028443341u, 1065342731u, 1065342731u, 0, J0_TOLERANCE, 0}, +{125, 1031127695u, 1065338120u, 1065338120u, 0, J0_TOLERANCE, 0}, +{126, 1032805417u, 1065332670u, 1065332670u, 0, J0_TOLERANCE, 0}, +{127, 1034147594u, 1065326383u, 1065326383u, 0, J0_TOLERANCE, 0}, +{128, 1035489772u, 1065319259u, 1065319259u, 0, J0_TOLERANCE, 0}, +{129, 1036831949u, 1065311299u, 1065311299u, 0, J0_TOLERANCE, 0}, +{130, 1038174126u, 1065302503u, 1065302503u, 0, J0_TOLERANCE, 0}, +{131, 1039516303u, 1065292873u, 1065292873u, 0, J0_TOLERANCE, 0}, +{132, 1040522936u, 1065282406u, 1065282406u, 0, J0_TOLERANCE, 0}, +{133, 1041194025u, 1065271109u, 1065271109u, 0, J0_TOLERANCE, 0}, +{134, 1041865114u, 1065258977u, 1065258977u, 0, J0_TOLERANCE, 0}, +{135, 1042536202u, 1065246014u, 1065246014u, 0, J0_TOLERANCE, 0}, +{136, 1043207291u, 1065232219u, 1065232219u, 0, J0_TOLERANCE, 0}, +{137, 1043878380u, 1065217596u, 1065217596u, 0, J0_TOLERANCE, 0}, +{138, 1044549468u, 1065202143u, 1065202143u, 0, J0_TOLERANCE, 0}, +{139, 1045220557u, 1065185863u, 1065185863u, 0, J0_TOLERANCE, 0}, +{140, 1045891645u, 1065168757u, 1065168757u, 0, J0_TOLERANCE, 0}, +{141, 1046562734u, 1065150825u, 1065150825u, 0, J0_TOLERANCE, 0}, +{142, 1047233823u, 1065132069u, 1065132069u, 0, J0_TOLERANCE, 0}, +{143, 1047904911u, 1065112493u, 1065112493u, 0, J0_TOLERANCE, 0}, +{144, 1048576000u, 1065092094u, 1065092094u, 0, J0_TOLERANCE, 0}, +{145, 1048911544u, 1065070877u, 1065070877u, 0, J0_TOLERANCE, 0}, +{146, 1049247089u, 1065048842u, 1065048842u, 0, J0_TOLERANCE, 0}, +{147, 1049582633u, 1065025991u, 1065025991u, 0, J0_TOLERANCE, 0}, +{148, 1049918177u, 1065002325u, 1065002325u, 0, J0_TOLERANCE, 0}, +{149, 1050253722u, 1064977846u, 1064977846u, 0, J0_TOLERANCE, 0}, +{150, 1050589266u, 1064952558u, 1064952558u, 0, J0_TOLERANCE, 0}, +{151, 1050924810u, 1064926461u, 1064926461u, 0, J0_TOLERANCE, 0}, +{152, 1051260355u, 1064899556u, 1064899556u, 0, J0_TOLERANCE, 0}, +{153, 1051595899u, 1064871847u, 1064871847u, 0, J0_TOLERANCE, 0}, +{154, 1051931443u, 1064843334u, 1064843334u, 0, J0_TOLERANCE, 0}, +{155, 1052266988u, 1064814022u, 1064814022u, 0, J0_TOLERANCE, 0}, +{156, 1052602532u, 1064783911u, 1064783911u, 0, J0_TOLERANCE, 0}, +{157, 1052938076u, 1064753003u, 1064753003u, 0, J0_TOLERANCE, 0}, +{158, 1053273620u, 1064721302u, 1064721302u, 0, J0_TOLERANCE, 0}, +{159, 1053609165u, 1064688809u, 1064688809u, 0, J0_TOLERANCE, 0}, +{160, 1053944709u, 1064655526u, 1064655526u, 0, J0_TOLERANCE, 0}, +{161, 1054280253u, 1064621459u, 1064621459u, 0, J0_TOLERANCE, 0}, +{162, 1054615798u, 1064586606u, 1064586606u, 0, J0_TOLERANCE, 0}, +{163, 1054951342u, 1064550972u, 1064550972u, 0, J0_TOLERANCE, 0}, +{164, 1055286886u, 1064514559u, 1064514559u, 0, J0_TOLERANCE, 0}, +{165, 1055622431u, 1064477370u, 1064477370u, 0, J0_TOLERANCE, 0}, +{166, 1055957975u, 1064439408u, 1064439408u, 0, J0_TOLERANCE, 0}, +{167, 1056293519u, 1064400675u, 1064400675u, 0, J0_TOLERANCE, 0}, +{168, 1056629064u, 1064361174u, 1064361174u, 0, J0_TOLERANCE, 0}, +{169, 1056964608u, 1064320911u, 1064320911u, 0, J0_TOLERANCE, 0}, +{170, 1057132380u, 1064279884u, 1064279884u, 0, J0_TOLERANCE, 0}, +{171, 1057300152u, 1064238100u, 1064238100u, 0, J0_TOLERANCE, 0}, +{172, 1057467924u, 1064195560u, 1064195560u, 0, J0_TOLERANCE, 0}, +{173, 1057635697u, 1064152266u, 1064152266u, 0, J0_TOLERANCE, 0}, +{174, 1057803469u, 1064108226u, 1064108226u, 0, J0_TOLERANCE, 0}, +{175, 1057971241u, 1064063439u, 1064063439u, 0, J0_TOLERANCE, 0}, +{176, 1058139013u, 1064017911u, 1064017911u, 0, J0_TOLERANCE, 0}, +{177, 1058306785u, 1063971642u, 1063971642u, 0, J0_TOLERANCE, 0}, +{178, 1058474557u, 1063924638u, 1063924638u, 0, J0_TOLERANCE, 0}, +{179, 1058642330u, 1063876903u, 1063876903u, 0, J0_TOLERANCE, 0}, +{180, 1058810102u, 1063828438u, 1063828438u, 0, J0_TOLERANCE, 0}, +{181, 1058977874u, 1063779249u, 1063779249u, 0, J0_TOLERANCE, 0}, +{182, 1059145646u, 1063729339u, 1063729339u, 0, J0_TOLERANCE, 0}, +{183, 1059313418u, 1063678713u, 1063678713u, 0, J0_TOLERANCE, 0}, +{184, 1059481190u, 1063627371u, 1063627371u, 0, J0_TOLERANCE, 0}, +{185, 1059648963u, 1063575320u, 1063575320u, 0, J0_TOLERANCE, 0}, +{186, 1059816735u, 1063522564u, 1063522564u, 0, J0_TOLERANCE, 0}, +{187, 1059984507u, 1063469104u, 1063469104u, 0, J0_TOLERANCE, 0}, +{188, 1060152279u, 1063414948u, 1063414948u, 0, J0_TOLERANCE, 0}, +{189, 1060320051u, 1063360098u, 1063360098u, 0, J0_TOLERANCE, 0}, +{190, 1060487823u, 1063304557u, 1063304557u, 0, J0_TOLERANCE, 0}, +{191, 1060655596u, 1063248330u, 1063248330u, 0, J0_TOLERANCE, 0}, +{192, 1060823368u, 1063191423u, 1063191423u, 0, J0_TOLERANCE, 0}, +{193, 1060991140u, 1063133838u, 1063133838u, 0, J0_TOLERANCE, 0}, +{194, 1061158912u, 1063075578u, 1063075578u, 0, J0_TOLERANCE, 0}, +{195, 1061326684u, 1063016653u, 1063016653u, 0, J0_TOLERANCE, 0}, +{196, 1061494456u, 1062957061u, 1062957061u, 0, J0_TOLERANCE, 0}, +{197, 1061662228u, 1062896811u, 1062896811u, 0, J0_TOLERANCE, 0}, +{198, 1061830001u, 1062835904u, 1062835904u, 0, J0_TOLERANCE, 0}, +{199, 1061997773u, 1062774345u, 1062774345u, 0, J0_TOLERANCE, 0}, +{200, 1062165545u, 1062712142u, 1062712142u, 0, J0_TOLERANCE, 0}, +{201, 1062333317u, 1062649297u, 1062649297u, 0, J0_TOLERANCE, 0}, +{202, 1062501089u, 1062585814u, 1062585814u, 0, J0_TOLERANCE, 0}, +{203, 1062668861u, 1062521700u, 1062521700u, 0, J0_TOLERANCE, 0}, +{204, 1062836634u, 1062456956u, 1062456956u, 0, J0_TOLERANCE, 0}, +{205, 1063004406u, 1062391591u, 1062391591u, 0, J0_TOLERANCE, 0}, +{206, 1063172178u, 1062325608u, 1062325608u, 0, J0_TOLERANCE, 0}, +{207, 1063339950u, 1062259012u, 1062259012u, 0, J0_TOLERANCE, 0}, +{208, 1063507722u, 1062191808u, 1062191808u, 0, J0_TOLERANCE, 0}, +{209, 1063675494u, 1062124001u, 1062124001u, 0, J0_TOLERANCE, 0}, +{210, 1063843267u, 1062055596u, 1062055596u, 0, J0_TOLERANCE, 0}, +{211, 1064011039u, 1061986598u, 1061986598u, 0, J0_TOLERANCE, 0}, +{212, 1064178811u, 1061917012u, 1061917012u, 0, J0_TOLERANCE, 0}, +{213, 1064346583u, 1061846843u, 1061846843u, 0, J0_TOLERANCE, 0}, +{214, 1064514355u, 1061776097u, 1061776097u, 0, J0_TOLERANCE, 0}, +{215, 1064682127u, 1061704777u, 1061704777u, 0, J0_TOLERANCE, 0}, +{216, 1064849900u, 1061632891u, 1061632891u, 0, J0_TOLERANCE, 0}, +{217, 1065017672u, 1061560445u, 1061560445u, 0, J0_TOLERANCE, 0}, +{218, 1065185444u, 1061487442u, 1061487442u, 0, J0_TOLERANCE, 0}, +{219, 1065353216u, 1061413887u, 1061413887u, 0, J0_TOLERANCE, 0}, +{220, 1065437102u, 1061339787u, 1061339787u, 0, J0_TOLERANCE, 0}, +{221, 1065520988u, 1061265147u, 1061265147u, 0, J0_TOLERANCE, 0}, +{222, 1065604874u, 1061189972u, 1061189972u, 0, J0_TOLERANCE, 0}, +{223, 1065688760u, 1061114269u, 1061114269u, 0, J0_TOLERANCE, 0}, +{224, 1065772646u, 1061038042u, 1061038042u, 0, J0_TOLERANCE, 0}, +{225, 1065856532u, 1060961298u, 1060961298u, 0, J0_TOLERANCE, 0}, +{226, 1065940419u, 1060884039u, 1060884039u, 0, J0_TOLERANCE, 0}, +{227, 1066024305u, 1060806276u, 1060806276u, 0, J0_TOLERANCE, 0}, +{228, 1066108191u, 1060728013u, 1060728013u, 0, J0_TOLERANCE, 0}, +{229, 1066192077u, 1060649254u, 1060649254u, 0, J0_TOLERANCE, 0}, +{230, 1066275963u, 1060570006u, 1060570006u, 0, J0_TOLERANCE, 0}, +{231, 1066359849u, 1060490274u, 1060490274u, 0, J0_TOLERANCE, 0}, +{232, 1066443735u, 1060410067u, 1060410067u, 0, J0_TOLERANCE, 0}, +{233, 1066527621u, 1060329386u, 1060329386u, 0, J0_TOLERANCE, 0}, +{234, 1066611507u, 1060248241u, 1060248241u, 0, J0_TOLERANCE, 0}, +{235, 1066695393u, 1060166635u, 1060166635u, 0, J0_TOLERANCE, 0}, +{236, 1066779279u, 1060084577u, 1060084577u, 0, J0_TOLERANCE, 0}, +{237, 1066863165u, 1060002071u, 1060002071u, 0, J0_TOLERANCE, 0}, +{238, 1066947052u, 1059919122u, 1059919122u, 0, J0_TOLERANCE, 0}, +{239, 3234402267u, 1046581329u, 1046581329u, 0, J0_TOLERANCE, 0}, +{240, 3231108068u, 3196591726u, 3196591726u, 0, J0_TOLERANCE, 0}, +{241, 3226013659u, 3197879715u, 3197879715u, 0, J0_TOLERANCE, 0}, +{242, 3217625051u, 1056025123u, 1056025123u, 0, J0_TOLERANCE, 0}, +{243, 0u, 1065353216u, 1065353216u, 0, J0_TOLERANCE, 0}, +{244, 1070141403u, 1056025123u, 1056025123u, 0, J0_TOLERANCE, 0}, +{245, 1078530011u, 3197879715u, 3197879715u, 0, J0_TOLERANCE, 0}, +{246, 1083624420u, 3196591726u, 3196591726u, 0, J0_TOLERANCE, 0}, +{247, 3253731328u, 3182485944u, 3182485944u, 0, J0_TOLERANCE, 0}, +{248, 3252840038u, 3185426433u, 3185426433u, 0, J0_TOLERANCE, 0}, +{249, 3251948749u, 1039591153u, 1039591153u, 0, J0_TOLERANCE, 0}, +{250, 3251057459u, 1034583247u, 1034583247u, 0, J0_TOLERANCE, 0}, +{251, 3250166170u, 3189440518u, 3189440518u, 0, J0_TOLERANCE, 0}, +{252, 3249274880u, 3175642986u, 3175642986u, 0, J0_TOLERANCE, 0}, +{253, 3248383590u, 1043678978u, 1043678978u, 0, J0_TOLERANCE, 0}, +{254, 3247492301u, 1001510262u, 1001510262u, 0, J0_TOLERANCE, 0}, +{255, 3246601011u, 3192434080u, 3192434080u, 0, J0_TOLERANCE, 0}, +{256, 3245028147u, 1027810392u, 1027810392u, 0, J0_TOLERANCE, 0}, +{257, 3243245568u, 1045685354u, 1045685354u, 0, J0_TOLERANCE, 0}, +{258, 3241462989u, 3185935415u, 3185935415u, 0, J0_TOLERANCE, 0}, +{259, 3239680410u, 3193306751u, 3193306751u, 0, J0_TOLERANCE, 0}, +{260, 3237792973u, 1044842218u, 1044842218u, 0, J0_TOLERANCE, 0}, +{261, 3234227814u, 1045337775u, 1045337775u, 0, J0_TOLERANCE, 0}, +{262, 3230662656u, 3198426660u, 3198426660u, 0, J0_TOLERANCE, 0}, +{263, 3224580915u, 3191699990u, 3191699990u, 0, J0_TOLERANCE, 0}, +{264, 3213675725u, 1060649254u, 1060649254u, 0, J0_TOLERANCE, 0}, +{265, 1058642330u, 1063876903u, 1063876903u, 0, J0_TOLERANCE, 0}, +{266, 1075000115u, 1029930430u, 1029930430u, 0, J0_TOLERANCE, 0}, +{267, 1082130432u, 3200997175u, 3200997175u, 0, J0_TOLERANCE, 0}, +{268, 1085695590u, 1031106245u, 1031106245u, 0, J0_TOLERANCE, 0}, +{269, 1089260749u, 1049535541u, 1049535541u, 0, J0_TOLERANCE, 0}, +{270, 1091672474u, 3186226740u, 3186226740u, 0, J0_TOLERANCE, 0}, +{271, 1093455053u, 3192919090u, 3192919090u, 0, J0_TOLERANCE, 0}, +{272, 1095237632u, 1041655994u, 1041655994u, 0, J0_TOLERANCE, 0}, +{273, 1097020211u, 1041285935u, 1041285935u, 0, J0_TOLERANCE, 0}, +{274, 1098802790u, 3190353411u, 3190353411u, 0, J0_TOLERANCE, 0}, +{275, 1099746509u, 3182480552u, 3182480552u, 0, J0_TOLERANCE, 0}, +{276, 1100637798u, 1043281599u, 1043281599u, 0, J0_TOLERANCE, 0}, +{277, 1101529088u, 1024840698u, 1024840698u, 0, J0_TOLERANCE, 0}, +{278, 1102420378u, 3190481736u, 3190481736u, 0, J0_TOLERANCE, 0}, +{279, 1103311667u, 1006337519u, 1006337519u, 0, J0_TOLERANCE, 0}, +{280, 1104202957u, 1042114878u, 1042114878u, 0, J0_TOLERANCE, 0}, +{281, 1105094246u, 3174763439u, 3174763439u, 0, J0_TOLERANCE, 0}, +{282, 1105985536u, 3188217836u, 3188217836u, 0, J0_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_J0_H multiple inclusion protection + +// EOF j0f.h diff --git a/packages/language/c/libm/current/tests/vectors/j1f.c b/packages/language/c/libm/current/tests/vectors/j1f.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/j1f.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// j1f.c +// +// Test of j1f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/j1f.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(j1f_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &j1f, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &j1f_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("j1f() is stable"); + } // if + else + { + CYG_TEST_FAIL("j1f() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library j1f() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "j1f() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF j1f.c diff --git a/packages/language/c/libm/current/tests/vectors/j1f.h b/packages/language/c/libm/current/tests/vectors/j1f.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/j1f.h @@ -0,0 +1,362 @@ +#ifndef CYGONCE_LIBM_J1_H +#define CYGONCE_LIBM_J1_H +//=========================================================================== +// +// j1f.h +// +// Test vectors for testing of j1f() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/j1f.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define J1_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t j1f_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 3204390847u, 3204390847u, 0, J1_TOLERANCE, 0}, +{1, 3214430700u, 3204304372u, 3204304372u, 0, J1_TOLERANCE, 0}, +{2, 3214346813u, 3204216675u, 3204216675u, 0, J1_TOLERANCE, 0}, +{3, 3214262927u, 3204127764u, 3204127764u, 0, J1_TOLERANCE, 0}, +{4, 3214179041u, 3204037646u, 3204037646u, 0, J1_TOLERANCE, 0}, +{5, 3214095155u, 3203946324u, 3203946324u, 0, J1_TOLERANCE, 0}, +{6, 3214011269u, 3203853807u, 3203853807u, 0, J1_TOLERANCE, 0}, +{7, 3213927383u, 3203760099u, 3203760099u, 0, J1_TOLERANCE, 0}, +{8, 3213843497u, 3203665208u, 3203665208u, 0, J1_TOLERANCE, 0}, +{9, 3213759611u, 3203569140u, 3203569140u, 0, J1_TOLERANCE, 0}, +{10, 3213675725u, 3203471902u, 3203471902u, 0, J1_TOLERANCE, 0}, +{11, 3213591839u, 3203373501u, 3203373501u, 0, J1_TOLERANCE, 0}, +{12, 3213507953u, 3203273943u, 3203273943u, 0, J1_TOLERANCE, 0}, +{13, 3213424067u, 3203173236u, 3203173236u, 0, J1_TOLERANCE, 0}, +{14, 3213340180u, 3203071384u, 3203071384u, 0, J1_TOLERANCE, 0}, +{15, 3213256294u, 3202968397u, 3202968397u, 0, J1_TOLERANCE, 0}, +{16, 3213172408u, 3202864283u, 3202864283u, 0, J1_TOLERANCE, 0}, +{17, 3213088522u, 3202759048u, 3202759048u, 0, J1_TOLERANCE, 0}, +{18, 3213004636u, 3202652698u, 3202652698u, 0, J1_TOLERANCE, 0}, +{19, 3212920750u, 3202545242u, 3202545242u, 0, J1_TOLERANCE, 0}, +{20, 3212836864u, 3202436688u, 3202436688u, 0, J1_TOLERANCE, 0}, +{21, 3212669092u, 3202327042u, 3202327042u, 0, J1_TOLERANCE, 0}, +{22, 3212501320u, 3202216313u, 3202216313u, 0, J1_TOLERANCE, 0}, +{23, 3212333548u, 3202104510u, 3202104510u, 0, J1_TOLERANCE, 0}, +{24, 3212165775u, 3201991637u, 3201991637u, 0, J1_TOLERANCE, 0}, +{25, 3211998003u, 3201877707u, 3201877707u, 0, J1_TOLERANCE, 0}, +{26, 3211830231u, 3201762724u, 3201762724u, 0, J1_TOLERANCE, 0}, +{27, 3211662459u, 3201646699u, 3201646699u, 0, J1_TOLERANCE, 0}, +{28, 3211494687u, 3201529639u, 3201529639u, 0, J1_TOLERANCE, 0}, +{29, 3211326915u, 3201411552u, 3201411552u, 0, J1_TOLERANCE, 0}, +{30, 3211159142u, 3201292447u, 3201292447u, 0, J1_TOLERANCE, 0}, +{31, 3210991370u, 3201172332u, 3201172332u, 0, J1_TOLERANCE, 0}, +{32, 3210823598u, 3201051217u, 3201051217u, 0, J1_TOLERANCE, 0}, +{33, 3210655826u, 3200929110u, 3200929110u, 0, J1_TOLERANCE, 0}, +{34, 3210488054u, 3200806018u, 3200806018u, 0, J1_TOLERANCE, 0}, +{35, 3210320282u, 3200681954u, 3200681954u, 0, J1_TOLERANCE, 0}, +{36, 3210152509u, 3200556922u, 3200556922u, 0, J1_TOLERANCE, 0}, +{37, 3209984737u, 3200430935u, 3200430935u, 0, J1_TOLERANCE, 0}, +{38, 3209816965u, 3200304001u, 3200304001u, 0, J1_TOLERANCE, 0}, +{39, 3209649193u, 3200176127u, 3200176127u, 0, J1_TOLERANCE, 0}, +{40, 3209481421u, 3200047325u, 3200047325u, 0, J1_TOLERANCE, 0}, +{41, 3209313649u, 3199917604u, 3199917604u, 0, J1_TOLERANCE, 0}, +{42, 3209145876u, 3199786971u, 3199786971u, 0, J1_TOLERANCE, 0}, +{43, 3208978104u, 3199655439u, 3199655439u, 0, J1_TOLERANCE, 0}, +{44, 3208810332u, 3199523016u, 3199523016u, 0, J1_TOLERANCE, 0}, +{45, 3208642560u, 3199389711u, 3199389711u, 0, J1_TOLERANCE, 0}, +{46, 3208474788u, 3199255534u, 3199255534u, 0, J1_TOLERANCE, 0}, +{47, 3208307016u, 3199120495u, 3199120495u, 0, J1_TOLERANCE, 0}, +{48, 3208139244u, 3198984604u, 3198984604u, 0, J1_TOLERANCE, 0}, +{49, 3207971471u, 3198847871u, 3198847871u, 0, J1_TOLERANCE, 0}, +{50, 3207803699u, 3198710305u, 3198710305u, 0, J1_TOLERANCE, 0}, +{51, 3207635927u, 3198571918u, 3198571918u, 0, J1_TOLERANCE, 0}, +{52, 3207468155u, 3198432718u, 3198432718u, 0, J1_TOLERANCE, 0}, +{53, 3207300383u, 3198292717u, 3198292717u, 0, J1_TOLERANCE, 0}, +{54, 3207132611u, 3198151925u, 3198151925u, 0, J1_TOLERANCE, 0}, +{55, 3206964838u, 3198010350u, 3198010350u, 0, J1_TOLERANCE, 0}, +{56, 3206797066u, 3197868004u, 3197868004u, 0, J1_TOLERANCE, 0}, +{57, 3206629294u, 3197724900u, 3197724900u, 0, J1_TOLERANCE, 0}, +{58, 3206461522u, 3197581046u, 3197581046u, 0, J1_TOLERANCE, 0}, +{59, 3206293750u, 3197436451u, 3197436451u, 0, J1_TOLERANCE, 0}, +{60, 3206125978u, 3197291130u, 3197291130u, 0, J1_TOLERANCE, 0}, +{61, 3205958205u, 3197145088u, 3197145088u, 0, J1_TOLERANCE, 0}, +{62, 3205790433u, 3196998341u, 3196998341u, 0, J1_TOLERANCE, 0}, +{63, 3205622661u, 3196850897u, 3196850897u, 0, J1_TOLERANCE, 0}, +{64, 3205454889u, 3196702768u, 3196702768u, 0, J1_TOLERANCE, 0}, +{65, 3205287117u, 3196553966u, 3196553966u, 0, J1_TOLERANCE, 0}, +{66, 3205119345u, 3196404499u, 3196404499u, 0, J1_TOLERANCE, 0}, +{67, 3204951572u, 3196254379u, 3196254379u, 0, J1_TOLERANCE, 0}, +{68, 3204783800u, 3196103619u, 3196103619u, 0, J1_TOLERANCE, 0}, +{69, 3204616028u, 3195844811u, 3195844811u, 0, J1_TOLERANCE, 0}, +{70, 3204448256u, 3195540793u, 3195540793u, 0, J1_TOLERANCE, 0}, +{71, 3204112712u, 3195235560u, 3195235560u, 0, J1_TOLERANCE, 0}, +{72, 3203777167u, 3194929135u, 3194929135u, 0, J1_TOLERANCE, 0}, +{73, 3203441623u, 3194621539u, 3194621539u, 0, J1_TOLERANCE, 0}, +{74, 3203106079u, 3194312798u, 3194312798u, 0, J1_TOLERANCE, 0}, +{75, 3202770534u, 3194002931u, 3194002931u, 0, J1_TOLERANCE, 0}, +{76, 3202434990u, 3193691965u, 3193691965u, 0, J1_TOLERANCE, 0}, +{77, 3202099446u, 3193379921u, 3193379921u, 0, J1_TOLERANCE, 0}, +{78, 3201763901u, 3193066821u, 3193066821u, 0, J1_TOLERANCE, 0}, +{79, 3201428357u, 3192752691u, 3192752691u, 0, J1_TOLERANCE, 0}, +{80, 3201092813u, 3192437553u, 3192437553u, 0, J1_TOLERANCE, 0}, +{81, 3200757268u, 3192121430u, 3192121430u, 0, J1_TOLERANCE, 0}, +{82, 3200421724u, 3191804346u, 3191804346u, 0, J1_TOLERANCE, 0}, +{83, 3200086180u, 3191486326u, 3191486326u, 0, J1_TOLERANCE, 0}, +{84, 3199750636u, 3191167393u, 3191167393u, 0, J1_TOLERANCE, 0}, +{85, 3199415091u, 3190847568u, 3190847568u, 0, J1_TOLERANCE, 0}, +{86, 3199079547u, 3190526878u, 3190526878u, 0, J1_TOLERANCE, 0}, +{87, 3198744003u, 3190205347u, 3190205347u, 0, J1_TOLERANCE, 0}, +{88, 3198408458u, 3189882997u, 3189882997u, 0, J1_TOLERANCE, 0}, +{89, 3198072914u, 3189559853u, 3189559853u, 0, J1_TOLERANCE, 0}, +{90, 3197737370u, 3189235939u, 3189235939u, 0, J1_TOLERANCE, 0}, +{91, 3197401825u, 3188911280u, 3188911280u, 0, J1_TOLERANCE, 0}, +{92, 3197066281u, 3188585899u, 3188585899u, 0, J1_TOLERANCE, 0}, +{93, 3196730737u, 3188259823u, 3188259823u, 0, J1_TOLERANCE, 0}, +{94, 3196395192u, 3187933072u, 3187933072u, 0, J1_TOLERANCE, 0}, +{95, 3196059648u, 3187540310u, 3187540310u, 0, J1_TOLERANCE, 0}, +{96, 3195388559u, 3186884265u, 3186884265u, 0, J1_TOLERANCE, 0}, +{97, 3194717471u, 3186227024u, 3186227024u, 0, J1_TOLERANCE, 0}, +{98, 3194046382u, 3185568632u, 3185568632u, 0, J1_TOLERANCE, 0}, +{99, 3193375293u, 3184909141u, 3184909141u, 0, J1_TOLERANCE, 0}, +{100, 3192704205u, 3184248599u, 3184248599u, 0, J1_TOLERANCE, 0}, +{101, 3192033116u, 3183587058u, 3183587058u, 0, J1_TOLERANCE, 0}, +{102, 3191362028u, 3182924563u, 3182924563u, 0, J1_TOLERANCE, 0}, +{103, 3190690939u, 3182261167u, 3182261167u, 0, J1_TOLERANCE, 0}, +{104, 3190019850u, 3181596918u, 3181596918u, 0, J1_TOLERANCE, 0}, +{105, 3189348762u, 3180931869u, 3180931869u, 0, J1_TOLERANCE, 0}, +{106, 3188677673u, 3180266065u, 3180266065u, 0, J1_TOLERANCE, 0}, +{107, 3188006584u, 3179599559u, 3179599559u, 0, J1_TOLERANCE, 0}, +{108, 3186999951u, 3178582370u, 3178582370u, 0, J1_TOLERANCE, 0}, +{109, 3185657774u, 3177246847u, 3177246847u, 0, J1_TOLERANCE, 0}, +{110, 3184315597u, 3175910219u, 3175910219u, 0, J1_TOLERANCE, 0}, +{111, 3182973420u, 3174572585u, 3174572585u, 0, J1_TOLERANCE, 0}, +{112, 3181631242u, 3173234046u, 3173234046u, 0, J1_TOLERANCE, 0}, +{113, 3180289065u, 3171894704u, 3171894704u, 0, J1_TOLERANCE, 0}, +{114, 3178611343u, 3170215488u, 3170215488u, 0, J1_TOLERANCE, 0}, +{115, 3175926989u, 3167534188u, 3167534188u, 0, J1_TOLERANCE, 0}, +{116, 3173242634u, 3164851878u, 3164851878u, 0, J1_TOLERANCE, 0}, +{117, 3170222735u, 3161832315u, 3161832315u, 0, J1_TOLERANCE, 0}, +{118, 3164854026u, 3156464881u, 3156464881u, 0, J1_TOLERANCE, 0}, +{119, 3156465418u, 3148076676u, 3148076676u, 0, J1_TOLERANCE, 0}, +{120, 1008981770u, 1000593028u, 1000593028u, 0, J1_TOLERANCE, 0}, +{121, 1017370378u, 1008981233u, 1008981233u, 0, J1_TOLERANCE, 0}, +{122, 1022739087u, 1014348667u, 1014348667u, 0, J1_TOLERANCE, 0}, +{123, 1025758986u, 1017368230u, 1017368230u, 0, J1_TOLERANCE, 0}, +{124, 1028443341u, 1020050540u, 1020050540u, 0, J1_TOLERANCE, 0}, +{125, 1031127695u, 1022731840u, 1022731840u, 0, J1_TOLERANCE, 0}, +{126, 1032805417u, 1024411056u, 1024411056u, 0, J1_TOLERANCE, 0}, +{127, 1034147594u, 1025750398u, 1025750398u, 0, J1_TOLERANCE, 0}, +{128, 1035489772u, 1027088937u, 1027088937u, 0, J1_TOLERANCE, 0}, +{129, 1036831949u, 1028426571u, 1028426571u, 0, J1_TOLERANCE, 0}, +{130, 1038174126u, 1029763199u, 1029763199u, 0, J1_TOLERANCE, 0}, +{131, 1039516303u, 1031098722u, 1031098722u, 0, J1_TOLERANCE, 0}, +{132, 1040522936u, 1032115911u, 1032115911u, 0, J1_TOLERANCE, 0}, +{133, 1041194025u, 1032782417u, 1032782417u, 0, J1_TOLERANCE, 0}, +{134, 1041865114u, 1033448221u, 1033448221u, 0, J1_TOLERANCE, 0}, +{135, 1042536202u, 1034113270u, 1034113270u, 0, J1_TOLERANCE, 0}, +{136, 1043207291u, 1034777519u, 1034777519u, 0, J1_TOLERANCE, 0}, +{137, 1043878380u, 1035440915u, 1035440915u, 0, J1_TOLERANCE, 0}, +{138, 1044549468u, 1036103410u, 1036103410u, 0, J1_TOLERANCE, 0}, +{139, 1045220557u, 1036764951u, 1036764951u, 0, J1_TOLERANCE, 0}, +{140, 1045891645u, 1037425493u, 1037425493u, 0, J1_TOLERANCE, 0}, +{141, 1046562734u, 1038084984u, 1038084984u, 0, J1_TOLERANCE, 0}, +{142, 1047233823u, 1038743376u, 1038743376u, 0, J1_TOLERANCE, 0}, +{143, 1047904911u, 1039400617u, 1039400617u, 0, J1_TOLERANCE, 0}, +{144, 1048576000u, 1040056662u, 1040056662u, 0, J1_TOLERANCE, 0}, +{145, 1048911544u, 1040449424u, 1040449424u, 0, J1_TOLERANCE, 0}, +{146, 1049247089u, 1040776175u, 1040776175u, 0, J1_TOLERANCE, 0}, +{147, 1049582633u, 1041102251u, 1041102251u, 0, J1_TOLERANCE, 0}, +{148, 1049918177u, 1041427632u, 1041427632u, 0, J1_TOLERANCE, 0}, +{149, 1050253722u, 1041752291u, 1041752291u, 0, J1_TOLERANCE, 0}, +{150, 1050589266u, 1042076205u, 1042076205u, 0, J1_TOLERANCE, 0}, +{151, 1050924810u, 1042399349u, 1042399349u, 0, J1_TOLERANCE, 0}, +{152, 1051260355u, 1042721699u, 1042721699u, 0, J1_TOLERANCE, 0}, +{153, 1051595899u, 1043043230u, 1043043230u, 0, J1_TOLERANCE, 0}, +{154, 1051931443u, 1043363920u, 1043363920u, 0, J1_TOLERANCE, 0}, +{155, 1052266988u, 1043683745u, 1043683745u, 0, J1_TOLERANCE, 0}, +{156, 1052602532u, 1044002678u, 1044002678u, 0, J1_TOLERANCE, 0}, +{157, 1052938076u, 1044320698u, 1044320698u, 0, J1_TOLERANCE, 0}, +{158, 1053273620u, 1044637782u, 1044637782u, 0, J1_TOLERANCE, 0}, +{159, 1053609165u, 1044953905u, 1044953905u, 0, J1_TOLERANCE, 0}, +{160, 1053944709u, 1045269043u, 1045269043u, 0, J1_TOLERANCE, 0}, +{161, 1054280253u, 1045583173u, 1045583173u, 0, J1_TOLERANCE, 0}, +{162, 1054615798u, 1045896273u, 1045896273u, 0, J1_TOLERANCE, 0}, +{163, 1054951342u, 1046208317u, 1046208317u, 0, J1_TOLERANCE, 0}, +{164, 1055286886u, 1046519283u, 1046519283u, 0, J1_TOLERANCE, 0}, +{165, 1055622431u, 1046829150u, 1046829150u, 0, J1_TOLERANCE, 0}, +{166, 1055957975u, 1047137891u, 1047137891u, 0, J1_TOLERANCE, 0}, +{167, 1056293519u, 1047445487u, 1047445487u, 0, J1_TOLERANCE, 0}, +{168, 1056629064u, 1047751912u, 1047751912u, 0, J1_TOLERANCE, 0}, +{169, 1056964608u, 1048057145u, 1048057145u, 0, J1_TOLERANCE, 0}, +{170, 1057132380u, 1048361163u, 1048361163u, 0, J1_TOLERANCE, 0}, +{171, 1057300152u, 1048619971u, 1048619971u, 0, J1_TOLERANCE, 0}, +{172, 1057467924u, 1048770731u, 1048770731u, 0, J1_TOLERANCE, 0}, +{173, 1057635697u, 1048920851u, 1048920851u, 0, J1_TOLERANCE, 0}, +{174, 1057803469u, 1049070318u, 1049070318u, 0, J1_TOLERANCE, 0}, +{175, 1057971241u, 1049219120u, 1049219120u, 0, J1_TOLERANCE, 0}, +{176, 1058139013u, 1049367249u, 1049367249u, 0, J1_TOLERANCE, 0}, +{177, 1058306785u, 1049514693u, 1049514693u, 0, J1_TOLERANCE, 0}, +{178, 1058474557u, 1049661440u, 1049661440u, 0, J1_TOLERANCE, 0}, +{179, 1058642330u, 1049807482u, 1049807482u, 0, J1_TOLERANCE, 0}, +{180, 1058810102u, 1049952803u, 1049952803u, 0, J1_TOLERANCE, 0}, +{181, 1058977874u, 1050097398u, 1050097398u, 0, J1_TOLERANCE, 0}, +{182, 1059145646u, 1050241252u, 1050241252u, 0, J1_TOLERANCE, 0}, +{183, 1059313418u, 1050384356u, 1050384356u, 0, J1_TOLERANCE, 0}, +{184, 1059481190u, 1050526702u, 1050526702u, 0, J1_TOLERANCE, 0}, +{185, 1059648963u, 1050668277u, 1050668277u, 0, J1_TOLERANCE, 0}, +{186, 1059816735u, 1050809069u, 1050809069u, 0, J1_TOLERANCE, 0}, +{187, 1059984507u, 1050949070u, 1050949070u, 0, J1_TOLERANCE, 0}, +{188, 1060152279u, 1051088270u, 1051088270u, 0, J1_TOLERANCE, 0}, +{189, 1060320051u, 1051226657u, 1051226657u, 0, J1_TOLERANCE, 0}, +{190, 1060487823u, 1051364223u, 1051364223u, 0, J1_TOLERANCE, 0}, +{191, 1060655596u, 1051500956u, 1051500956u, 0, J1_TOLERANCE, 0}, +{192, 1060823368u, 1051636847u, 1051636847u, 0, J1_TOLERANCE, 0}, +{193, 1060991140u, 1051771886u, 1051771886u, 0, J1_TOLERANCE, 0}, +{194, 1061158912u, 1051906063u, 1051906063u, 0, J1_TOLERANCE, 0}, +{195, 1061326684u, 1052039368u, 1052039368u, 0, J1_TOLERANCE, 0}, +{196, 1061494456u, 1052171791u, 1052171791u, 0, J1_TOLERANCE, 0}, +{197, 1061662228u, 1052303323u, 1052303323u, 0, J1_TOLERANCE, 0}, +{198, 1061830001u, 1052433956u, 1052433956u, 0, J1_TOLERANCE, 0}, +{199, 1061997773u, 1052563677u, 1052563677u, 0, J1_TOLERANCE, 0}, +{200, 1062165545u, 1052692479u, 1052692479u, 0, J1_TOLERANCE, 0}, +{201, 1062333317u, 1052820353u, 1052820353u, 0, J1_TOLERANCE, 0}, +{202, 1062501089u, 1052947287u, 1052947287u, 0, J1_TOLERANCE, 0}, +{203, 1062668861u, 1053073274u, 1053073274u, 0, J1_TOLERANCE, 0}, +{204, 1062836634u, 1053198306u, 1053198306u, 0, J1_TOLERANCE, 0}, +{205, 1063004406u, 1053322370u, 1053322370u, 0, J1_TOLERANCE, 0}, +{206, 1063172178u, 1053445462u, 1053445462u, 0, J1_TOLERANCE, 0}, +{207, 1063339950u, 1053567569u, 1053567569u, 0, J1_TOLERANCE, 0}, +{208, 1063507722u, 1053688684u, 1053688684u, 0, J1_TOLERANCE, 0}, +{209, 1063675494u, 1053808799u, 1053808799u, 0, J1_TOLERANCE, 0}, +{210, 1063843267u, 1053927904u, 1053927904u, 0, J1_TOLERANCE, 0}, +{211, 1064011039u, 1054045991u, 1054045991u, 0, J1_TOLERANCE, 0}, +{212, 1064178811u, 1054163051u, 1054163051u, 0, J1_TOLERANCE, 0}, +{213, 1064346583u, 1054279076u, 1054279076u, 0, J1_TOLERANCE, 0}, +{214, 1064514355u, 1054394059u, 1054394059u, 0, J1_TOLERANCE, 0}, +{215, 1064682127u, 1054507989u, 1054507989u, 0, J1_TOLERANCE, 0}, +{216, 1064849900u, 1054620862u, 1054620862u, 0, J1_TOLERANCE, 0}, +{217, 1065017672u, 1054732665u, 1054732665u, 0, J1_TOLERANCE, 0}, +{218, 1065185444u, 1054843394u, 1054843394u, 0, J1_TOLERANCE, 0}, +{219, 1065353216u, 1054953040u, 1054953040u, 0, J1_TOLERANCE, 0}, +{220, 1065437102u, 1055061594u, 1055061594u, 0, J1_TOLERANCE, 0}, +{221, 1065520988u, 1055169050u, 1055169050u, 0, J1_TOLERANCE, 0}, +{222, 1065604874u, 1055275400u, 1055275400u, 0, J1_TOLERANCE, 0}, +{223, 1065688760u, 1055380635u, 1055380635u, 0, J1_TOLERANCE, 0}, +{224, 1065772646u, 1055484749u, 1055484749u, 0, J1_TOLERANCE, 0}, +{225, 1065856532u, 1055587736u, 1055587736u, 0, J1_TOLERANCE, 0}, +{226, 1065940419u, 1055689588u, 1055689588u, 0, J1_TOLERANCE, 0}, +{227, 1066024305u, 1055790295u, 1055790295u, 0, J1_TOLERANCE, 0}, +{228, 1066108191u, 1055889853u, 1055889853u, 0, J1_TOLERANCE, 0}, +{229, 1066192077u, 1055988254u, 1055988254u, 0, J1_TOLERANCE, 0}, +{230, 1066275963u, 1056085492u, 1056085492u, 0, J1_TOLERANCE, 0}, +{231, 1066359849u, 1056181560u, 1056181560u, 0, J1_TOLERANCE, 0}, +{232, 1066443735u, 1056276451u, 1056276451u, 0, J1_TOLERANCE, 0}, +{233, 1066527621u, 1056370159u, 1056370159u, 0, J1_TOLERANCE, 0}, +{234, 1066611507u, 1056462676u, 1056462676u, 0, J1_TOLERANCE, 0}, +{235, 1066695393u, 1056553998u, 1056553998u, 0, J1_TOLERANCE, 0}, +{236, 1066779279u, 1056644116u, 1056644116u, 0, J1_TOLERANCE, 0}, +{237, 1066863165u, 1056733027u, 1056733027u, 0, J1_TOLERANCE, 0}, +{238, 1066947052u, 1056820724u, 1056820724u, 0, J1_TOLERANCE, 0}, +{239, 3234402267u, 1046051504u, 1046051504u, 0, J1_TOLERANCE, 0}, +{240, 3231108068u, 1049638262u, 1049638262u, 0, J1_TOLERANCE, 0}, +{241, 3226013659u, 3197221145u, 3197221145u, 0, J1_TOLERANCE, 0}, +{242, 3217625051u, 3205569378u, 3205569378u, 0, J1_TOLERANCE, 0}, +{243, 0u, 0u, 0u, 0, J1_TOLERANCE, 0}, +{244, 1070141403u, 1058085730u, 1058085730u, 0, J1_TOLERANCE, 0}, +{245, 1078530011u, 1049737497u, 1049737497u, 0, J1_TOLERANCE, 0}, +{246, 1083624420u, 3197121910u, 3197121910u, 0, J1_TOLERANCE, 0}, +{247, 3253731328u, 1039348685u, 1039348685u, 0, J1_TOLERANCE, 0}, +{248, 3252840038u, 3184567008u, 3184567008u, 0, J1_TOLERANCE, 0}, +{249, 3251948749u, 3184209412u, 3184209412u, 0, J1_TOLERANCE, 0}, +{250, 3251057459u, 1040848794u, 1040848794u, 0, J1_TOLERANCE, 0}, +{251, 3250166170u, 1032875620u, 1032875620u, 0, J1_TOLERANCE, 0}, +{252, 3249274880u, 3190278356u, 3190278356u, 0, J1_TOLERANCE, 0}, +{253, 3248383590u, 3171314413u, 3171314413u, 0, J1_TOLERANCE, 0}, +{254, 3247492301u, 1044371641u, 1044371641u, 0, J1_TOLERANCE, 0}, +{255, 3246601011u, 3160647523u, 3160647523u, 0, J1_TOLERANCE, 0}, +{256, 3245028147u, 3192989500u, 3192989500u, 0, J1_TOLERANCE, 0}, +{257, 3243245568u, 1032848118u, 1032848118u, 0, J1_TOLERANCE, 0}, +{258, 3241462989u, 1046177193u, 1046177193u, 0, J1_TOLERANCE, 0}, +{259, 3239680410u, 3188645785u, 3188645785u, 0, J1_TOLERANCE, 0}, +{260, 3237792973u, 3193991324u, 3193991324u, 0, J1_TOLERANCE, 0}, +{261, 3234227814u, 1047429570u, 1047429570u, 0, J1_TOLERANCE, 0}, +{262, 3230662656u, 1047304985u, 1047304985u, 0, J1_TOLERANCE, 0}, +{263, 3224580915u, 3201418603u, 3201418603u, 0, J1_TOLERANCE, 0}, +{264, 3213675725u, 3203471902u, 3203471902u, 0, J1_TOLERANCE, 0}, +{265, 1058642330u, 1049807482u, 1049807482u, 0, J1_TOLERANCE, 0}, +{266, 1075000115u, 1057633557u, 1057633557u, 0, J1_TOLERANCE, 0}, +{267, 1082130432u, 3179757989u, 3179757989u, 0, J1_TOLERANCE, 0}, +{268, 1085695590u, 3198547630u, 3198547630u, 0, J1_TOLERANCE, 0}, +{269, 1089260749u, 1038123701u, 1038123701u, 0, J1_TOLERANCE, 0}, +{270, 1091672474u, 1047396948u, 1047396948u, 0, J1_TOLERANCE, 0}, +{271, 1093455053u, 3188823064u, 3188823064u, 0, J1_TOLERANCE, 0}, +{272, 1095237632u, 3190387868u, 3190387868u, 0, J1_TOLERANCE, 0}, +{273, 1097020211u, 1042711397u, 1042711397u, 0, J1_TOLERANCE, 0}, +{274, 1098802790u, 1037909458u, 1037909458u, 0, J1_TOLERANCE, 0}, +{275, 1099746509u, 3190821313u, 3190821313u, 0, J1_TOLERANCE, 0}, +{276, 1100637798u, 3177642610u, 3177642610u, 0, J1_TOLERANCE, 0}, +{277, 1101529088u, 1043282474u, 1043282474u, 0, J1_TOLERANCE, 0}, +{278, 1102420378u, 1009037734u, 1009037734u, 0, J1_TOLERANCE, 0}, +{279, 1103311667u, 3190100663u, 3190100663u, 0, J1_TOLERANCE, 0}, +{280, 1104202957u, 1022984661u, 1022984661u, 0, J1_TOLERANCE, 0}, +{281, 1105094246u, 1041426372u, 1041426372u, 0, J1_TOLERANCE, 0}, +{282, 1105985536u, 3179524627u, 3179524627u, 0, J1_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_J1_H multiple inclusion protection + +// EOF j1f.h diff --git a/packages/language/c/libm/current/tests/vectors/jnf.c b/packages/language/c/libm/current/tests/vectors/jnf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/jnf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// jnf.c +// +// Test of jnf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/jnf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(jnf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &jnf, CYG_LIBM_TEST_VEC_INT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &jnf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("jnf() is stable"); + } // if + else + { + CYG_TEST_FAIL("jnf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library jnf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "jnf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF jnf.c diff --git a/packages/language/c/libm/current/tests/vectors/jnf.h b/packages/language/c/libm/current/tests/vectors/jnf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/jnf.h @@ -0,0 +1,279 @@ +#ifndef CYGONCE_LIBM_JN_H +#define CYGONCE_LIBM_JN_H +//=========================================================================== +// +// jnf.h +// +// Test vectors for testing of jnf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/jnf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define JN_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t jnf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +/*{0, 0u, 0u, 1065353216u, 0, JN_TOLERANCE, 0}, +{1, 1065353216u, 0u, 0u, 0, JN_TOLERANCE, 0}, +{2, 1073741824u, 0u, 0u, 0, JN_TOLERANCE, 0}, +{3, 1077936128u, 0u, 0u, 0, JN_TOLERANCE, 0}, +{4, 1082130432u, 0u, 0u, 0, JN_TOLERANCE, 0}, +{5, 0u, 1028443341u, 1065342732u, 0, JN_TOLERANCE, 0}, +{6, 1065353216u, 1028443341u, 1020050539u, 0, JN_TOLERANCE, 0}, +{7, 1073741824u, 1028443341u, 967036493u, 0, JN_TOLERANCE, 0}, +{8, 1077936128u, 1028443341u, 909032513u, 0, JN_TOLERANCE, 0}, +{9, 1082130432u, 1028443341u, 848022252u, 0, JN_TOLERANCE, 0}, +{10, 0u, 1036831949u, 1065311299u, 0, JN_TOLERANCE, 0},*/ +{11, 1065353216u, 1036831949u, 1028426571u, 0, JN_TOLERANCE, 0}, +{12, 1073741824u, 1036831949u, 983807001u, 0, JN_TOLERANCE, 0}, +{13, 1077936128u, 1036831949u, 934192970u, 0, JN_TOLERANCE, 0}, +{14, 1082130432u, 1036831949u, 881573249u, 0, JN_TOLERANCE, 0}, +{15, 0u, 1041865114u, 1065258977u, 0, JN_TOLERANCE, 0}, +{16, 1065353216u, 1041865114u, 1033448221u, 0, JN_TOLERANCE, 0}, +{17, 1073741824u, 1041865114u, 993524098u, 0, JN_TOLERANCE, 0}, +{18, 1077936128u, 1041865114u, 949174191u, 0, JN_TOLERANCE, 0}, +{19, 1082130432u, 1041865114u, 900775820u, 0, JN_TOLERANCE, 0}, +{20, 0u, 1045220557u, 1065185863u, 0, JN_TOLERANCE, 0}, +{21, 1065353216u, 1045220557u, 1036764952u, 0, JN_TOLERANCE, 0}, +{22, 1073741824u, 1045220557u, 1000557416u, 0, JN_TOLERANCE, 0}, +{23, 1077936128u, 1045220557u, 959337346u, 0, JN_TOLERANCE, 0}, +{24, 1082130432u, 1045220557u, 915113951u, 0, JN_TOLERANCE, 0}, +{25, 0u, 1048576000u, 1065092094u, 0, JN_TOLERANCE, 0}, +{26, 1065353216u, 1048576000u, 1040056661u, 0, JN_TOLERANCE, 0}, +{27, 1073741824u, 1048576000u, 1006545749u, 0, JN_TOLERANCE, 0}, +{28, 1077936128u, 1048576000u, 967442500u, 0, JN_TOLERANCE, 0}, +{29, 1082130432u, 1048576000u, 925508176u, 0, JN_TOLERANCE, 0}, +{30, 0u, 1050253722u, 1064977847u, 0, JN_TOLERANCE, 0}, +{31, 1065353216u, 1050253722u, 1041752291u, 0, JN_TOLERANCE, 0}, +{32, 1073741824u, 1050253722u, 1010233605u, 0, JN_TOLERANCE, 0}, +{33, 1077936128u, 1050253722u, 974299360u, 0, JN_TOLERANCE, 0}, +{34, 1082130432u, 1050253722u, 934291206u, 0, JN_TOLERANCE, 0}, +{35, 0u, 1051931443u, 1064843334u, 0, JN_TOLERANCE, 0}, +{36, 1065353216u, 1051931443u, 1043363920u, 0, JN_TOLERANCE, 0}, +{37, 1073741824u, 1051931443u, 1014518823u, 0, JN_TOLERANCE, 0}, +{38, 1077936128u, 1051931443u, 979918350u, 0, JN_TOLERANCE, 0}, +{39, 1082130432u, 1051931443u, 941811754u, 0, JN_TOLERANCE, 0}, +{40, 0u, 1053609165u, 1064688808u, 0, JN_TOLERANCE, 0}, +{41, 1065353216u, 1053609165u, 1044953905u, 0, JN_TOLERANCE, 0}, +{42, 1073741824u, 1053609165u, 1017227927u, 0, JN_TOLERANCE, 0}, +{43, 1077936128u, 1053609165u, 984417699u, 0, JN_TOLERANCE, 0}, +{44, 1082130432u, 1053609165u, 948613636u, 0, JN_TOLERANCE, 0}, +{45, 0u, 1055286886u, 1064514559u, 0, JN_TOLERANCE, 0}, +{46, 1065353216u, 1055286886u, 1046519284u, 0, JN_TOLERANCE, 0}, +{47, 1073741824u, 1055286886u, 1019994628u, 0, JN_TOLERANCE, 0}, +{48, 1077936128u, 1055286886u, 989180633u, 0, JN_TOLERANCE, 0}, +{49, 1082130432u, 1055286886u, 954052828u, 0, JN_TOLERANCE, 0}, +{50, 0u, 1056964608u, 1064320911u, 0, JN_TOLERANCE, 0}, +{51, 1065353216u, 1056964608u, 1048057145u, 0, JN_TOLERANCE, 0}, +{52, 1073741824u, 1056964608u, 1023063370u, 0, JN_TOLERANCE, 0}, +{53, 1077936128u, 1056964608u, 992478272u, 0, JN_TOLERANCE, 0}, +{54, 1082130432u, 1056964608u, 958958431u, 0, JN_TOLERANCE, 0}, +{55, 0u, 1057803469u, 1064108226u, 0, JN_TOLERANCE, 0}, +{56, 1065353216u, 1057803469u, 1049070317u, 0, JN_TOLERANCE, 0}, +{57, 1073741824u, 1057803469u, 1024918320u, 0, JN_TOLERANCE, 0}, +{58, 1077936128u, 1057803469u, 996074782u, 0, JN_TOLERANCE, 0}, +{59, 1082130432u, 1057803469u, 964042258u, 0, JN_TOLERANCE, 0}, +{60, 0u, 1058642330u, 1063876903u, 0, JN_TOLERANCE, 0}, +{61, 1065353216u, 1058642330u, 1049807481u, 0, JN_TOLERANCE, 0}, +{62, 1073741824u, 1058642330u, 1026742828u, 0, JN_TOLERANCE, 0}, +{63, 1077936128u, 1058642330u, 999303935u, 0, JN_TOLERANCE, 0}, +{64, 1082130432u, 1058642330u, 967690547u, 0, JN_TOLERANCE, 0}, +{65, 0u, 1059481190u, 1063627371u, 0, JN_TOLERANCE, 0}, +{66, 1065353216u, 1059481190u, 1050526702u, 0, JN_TOLERANCE, 0}, +{67, 1073741824u, 1059481190u, 1028705720u, 0, JN_TOLERANCE, 0}, +{68, 1077936128u, 1059481190u, 1001821225u, 0, JN_TOLERANCE, 0}, +{69, 1082130432u, 1059481190u, 971939318u, 0, JN_TOLERANCE, 0}, +{70, 0u, 1060320051u, 1063360098u, 0, JN_TOLERANCE, 0}, +{71, 1065353216u, 1060320051u, 1051226657u, 0, JN_TOLERANCE, 0}, +{72, 1073741824u, 1060320051u, 1030802068u, 0, JN_TOLERANCE, 0}, +{73, 1077936128u, 1060320051u, 1004737064u, 0, JN_TOLERANCE, 0}, +{74, 1082130432u, 1060320051u, 975171307u, 0, JN_TOLERANCE, 0}, +{75, 0u, 1061158912u, 1063075579u, 0, JN_TOLERANCE, 0}, +{76, 1065353216u, 1061158912u, 1051906063u, 0, JN_TOLERANCE, 0}, +{77, 1073741824u, 1061158912u, 1032412696u, 0, JN_TOLERANCE, 0}, +{78, 1077936128u, 1061158912u, 1007354389u, 0, JN_TOLERANCE, 0}, +{79, 1082130432u, 1061158912u, 978452199u, 0, JN_TOLERANCE, 0}, +{80, 0u, 1061997773u, 1062774346u, 0, JN_TOLERANCE, 0}, +{81, 1065353216u, 1061997773u, 1052563677u, 0, JN_TOLERANCE, 0}, +{82, 1073741824u, 1061997773u, 1033586264u, 0, JN_TOLERANCE, 0}, +{83, 1077936128u, 1061997773u, 1009246734u, 0, JN_TOLERANCE, 0}, +{84, 1082130432u, 1061997773u, 981951802u, 0, JN_TOLERANCE, 0}, +{85, 0u, 1062836634u, 1062456957u, 0, JN_TOLERANCE, 0}, +{86, 1065353216u, 1062836634u, 1053198305u, 0, JN_TOLERANCE, 0}, +{87, 1073741824u, 1062836634u, 1034818178u, 0, JN_TOLERANCE, 0}, +{88, 1077936128u, 1062836634u, 1011372844u, 0, JN_TOLERANCE, 0}, +{89, 1082130432u, 1062836634u, 984340071u, 0, JN_TOLERANCE, 0}, +{90, 0u, 1063675494u, 1062124001u, 0, JN_TOLERANCE, 0}, +{91, 1065353216u, 1063675494u, 1053808798u, 0, JN_TOLERANCE, 0}, +{92, 1073741824u, 1063675494u, 1036105335u, 0, JN_TOLERANCE, 0}, +{93, 1077936128u, 1063675494u, 1013742772u, 0, JN_TOLERANCE, 0}, +{94, 1082130432u, 1063675494u, 987170764u, 0, JN_TOLERANCE, 0}, +{95, 0u, 1064514355u, 1061776097u, 0, JN_TOLERANCE, 0}, +{96, 1065353216u, 1064514355u, 1054394058u, 0, JN_TOLERANCE, 0}, +{97, 1073741824u, 1064514355u, 1037444489u, 0, JN_TOLERANCE, 0}, +{98, 1077936128u, 1064514355u, 1015693678u, 0, JN_TOLERANCE, 0}, +{99, 1082130432u, 1064514355u, 990173788u, 0, JN_TOLERANCE, 0}, +{100, 0u, 1065353216u, 1061413887u, 0, JN_TOLERANCE, 0}, +{101, 1065353216u, 1065353216u, 1054953039u, 0, JN_TOLERANCE, 0}, +{102, 1073741824u, 1065353216u, 1038832261u, 0, JN_TOLERANCE, 0}, +{103, 1077936128u, 1065353216u, 1017135956u, 0, JN_TOLERANCE, 0}, +{104, 1082130432u, 1065353216u, 992104219u, 0, JN_TOLERANCE, 0}, +{105, 0u, 1065772646u, 1061038041u, 0, JN_TOLERANCE, 0}, +{106, 1065353216u, 1065772646u, 1055484750u, 0, JN_TOLERANCE, 0}, +{107, 1073741824u, 1065772646u, 1040226267u, 0, JN_TOLERANCE, 0}, +{108, 1077936128u, 1065772646u, 1018712809u, 0, JN_TOLERANCE, 0}, +{109, 1082130432u, 1065772646u, 994329897u, 0, JN_TOLERANCE, 0}, +{110, 0u, 1066192077u, 1060649254u, 0, JN_TOLERANCE, 0}, +{111, 1065353216u, 1066192077u, 1055988254u, 0, JN_TOLERANCE, 0}, +{112, 1073741824u, 1066192077u, 1040963449u, 0, JN_TOLERANCE, 0}, +{113, 1077936128u, 1066192077u, 1020427605u, 0, JN_TOLERANCE, 0}, +{114, 1082130432u, 1066192077u, 996876707u, 0, JN_TOLERANCE, 0}, +{115, 0u, 1066611507u, 1060248241u, 0, JN_TOLERANCE, 0}, +{116, 1065353216u, 1066611507u, 1056462676u, 0, JN_TOLERANCE, 0}, +{117, 1073741824u, 1066611507u, 1041719505u, 0, JN_TOLERANCE, 0}, +{118, 1077936128u, 1066611507u, 1022283262u, 0, JN_TOLERANCE, 0}, +{119, 1082130432u, 1066611507u, 999007660u, 0, JN_TOLERANCE, 0}, +{120, 0u, 1067030938u, 1059835739u, 0, JN_TOLERANCE, 0}, +{121, 1065353216u, 1067030938u, 1056907198u, 0, JN_TOLERANCE, 0}, +{122, 1073741824u, 1067030938u, 1042492516u, 0, JN_TOLERANCE, 0}, +{123, 1077936128u, 1067030938u, 1023846206u, 0, JN_TOLERANCE, 0}, +{124, 1082130432u, 1067030938u, 1000641838u, 0, JN_TOLERANCE, 0}, +{125, 0u, 1067450368u, 1059412506u, 0, JN_TOLERANCE, 0}, +{126, 1065353216u, 1067450368u, 1057142837u, 0, JN_TOLERANCE, 0}, +{127, 1073741824u, 1067450368u, 1043280515u, 0, JN_TOLERANCE, 0}, +{128, 1077936128u, 1067450368u, 1024918343u, 0, JN_TOLERANCE, 0}, +{129, 1082130432u, 1067450368u, 1002476495u, 0, JN_TOLERANCE, 0}, +{130, 0u, 1067869798u, 1058979317u, 0, JN_TOLERANCE, 0}, +{131, 1065353216u, 1067869798u, 1057334097u, 0, JN_TOLERANCE, 0}, +{132, 1073741824u, 1067869798u, 1044081498u, 0, JN_TOLERANCE, 0}, +{133, 1077936128u, 1067869798u, 1026063882u, 0, JN_TOLERANCE, 0}, +{134, 1082130432u, 1067869798u, 1004525115u, 0, JN_TOLERANCE, 0}, +{135, 0u, 1068289229u, 1058536963u, 0, JN_TOLERANCE, 0}, +{136, 1065353216u, 1068289229u, 1057509369u, 0, JN_TOLERANCE, 0}, +{137, 1073741824u, 1068289229u, 1044893419u, 0, JN_TOLERANCE, 0}, +{138, 1077936128u, 1068289229u, 1027283330u, 0, JN_TOLERANCE, 0}, +{139, 1082130432u, 1068289229u, 1006717070u, 0, JN_TOLERANCE, 0}, +{140, 0u, 1068708659u, 1058086251u, 0, JN_TOLERANCE, 0}, +{141, 1065353216u, 1068708659u, 1057668374u, 0, JN_TOLERANCE, 0}, +{142, 1073741824u, 1068708659u, 1045714203u, 0, JN_TOLERANCE, 0}, +{143, 1077936128u, 1068708659u, 1028576945u, 0, JN_TOLERANCE, 0}, +{144, 1082130432u, 1068708659u, 1007975536u, 0, JN_TOLERANCE, 0}, +{145, 0u, 1069128090u, 1057628001u, 0, JN_TOLERANCE, 0}, +{146, 1065353216u, 1069128090u, 1057810862u, 0, JN_TOLERANCE, 0}, +{147, 1073741824u, 1069128090u, 1046541746u, 0, JN_TOLERANCE, 0}, +{148, 1077936128u, 1069128090u, 1029944734u, 0, JN_TOLERANCE, 0}, +{149, 1082130432u, 1069128090u, 1009361087u, 0, JN_TOLERANCE, 0}, +{150, 0u, 1069547520u, 1057163043u, 0, JN_TOLERANCE, 0}, +{151, 1065353216u, 1069547520u, 1057936621u, 0, JN_TOLERANCE, 0}, +{152, 1073741824u, 1069547520u, 1047373924u, 0, JN_TOLERANCE, 0}, +{153, 1077936128u, 1069547520u, 1031386454u, 0, JN_TOLERANCE, 0}, +{154, 1082130432u, 1069547520u, 1010880288u, 0, JN_TOLERANCE, 0}, +{155, 0u, 1069966950u, 1056419833u, 0, JN_TOLERANCE, 0}, +{156, 1065353216u, 1069966950u, 1058045471u, 0, JN_TOLERANCE, 0}, +{157, 1073741824u, 1069966950u, 1048208593u, 0, JN_TOLERANCE, 0}, +{158, 1077936128u, 1069966950u, 1032350194u, 0, JN_TOLERANCE, 0}, +{159, 1082130432u, 1069966950u, 1012539586u, 0, JN_TOLERANCE, 0}, +{160, 0u, 1070386381u, 1055468153u, 0, JN_TOLERANCE, 0}, +{161, 1065353216u, 1070386381u, 1058137267u, 0, JN_TOLERANCE, 0}, +{162, 1073741824u, 1070386381u, 1048809799u, 0, JN_TOLERANCE, 0}, +{163, 1077936128u, 1070386381u, 1033144108u, 0, JN_TOLERANCE, 0}, +{164, 1082130432u, 1070386381u, 1014345284u, 0, JN_TOLERANCE, 0}, +{165, 0u, 1070805811u, 1054508151u, 0, JN_TOLERANCE, 0}, +{166, 1065353216u, 1070805811u, 1058211899u, 0, JN_TOLERANCE, 0}, +{167, 1073741824u, 1070805811u, 1049226388u, 0, JN_TOLERANCE, 0}, +{168, 1077936128u, 1070805811u, 1033973855u, 0, JN_TOLERANCE, 0}, +{169, 1082130432u, 1070805811u, 1015662539u, 0, JN_TOLERANCE, 0}, +{170, 0u, 1071225242u, 1053541548u, 0, JN_TOLERANCE, 0}, +{171, 1065353216u, 1071225242u, 1058269292u, 0, JN_TOLERANCE, 0}, +{172, 1073741824u, 1071225242u, 1049640982u, 0, JN_TOLERANCE, 0}, +{173, 1077936128u, 1071225242u, 1034838806u, 0, JN_TOLERANCE, 0}, +{174, 1082130432u, 1071225242u, 1016720878u, 0, JN_TOLERANCE, 0}, +{175, 0u, 1071644672u, 1052570069u, 0, JN_TOLERANCE, 0}, +{176, 1065353216u, 1071644672u, 1058309406u, 0, JN_TOLERANCE, 0}, +{177, 1073741824u, 1071644672u, 1050052500u, 0, JN_TOLERANCE, 0}, +{178, 1077936128u, 1071644672u, 1035738201u, 0, JN_TOLERANCE, 0}, +{179, 1082130432u, 1071644672u, 1017861291u, 0, JN_TOLERANCE, 0}, +{180, 0u, 1072064102u, 1051595443u, 0, JN_TOLERANCE, 0}, +{181, 1065353216u, 1072064102u, 1058332236u, 0, JN_TOLERANCE, 0}, +{182, 1073741824u, 1072064102u, 1050459864u, 0, JN_TOLERANCE, 0}, +{183, 1077936128u, 1072064102u, 1036671158u, 0, JN_TOLERANCE, 0}, +{184, 1082130432u, 1072064102u, 1019086495u, 0, JN_TOLERANCE, 0}, +{185, 0u, 1072483533u, 1050619397u, 0, JN_TOLERANCE, 0}, +{186, 1065353216u, 1072483533u, 1058337811u, 0, JN_TOLERANCE, 0}, +{187, 1073741824u, 1072483533u, 1050862006u, 0, JN_TOLERANCE, 0}, +{188, 1077936128u, 1072483533u, 1037636670u, 0, JN_TOLERANCE, 0}, +{189, 1082130432u, 1072483533u, 1020399064u, 0, JN_TOLERANCE, 0}, +{190, 0u, 1072902963u, 1049643654u, 0, JN_TOLERANCE, 0}, +{191, 1065353216u, 1072902963u, 1058326198u, 0, JN_TOLERANCE, 0}, +{192, 1073741824u, 1072902963u, 1051257862u, 0, JN_TOLERANCE, 0}, +{193, 1077936128u, 1072902963u, 1038633608u, 0, JN_TOLERANCE, 0}, +{194, 1082130432u, 1072902963u, 1021801416u, 0, JN_TOLERANCE, 0}, +{195, 0u, 1073322394u, 1048669927u, 0, JN_TOLERANCE, 0}, +{196, 1065353216u, 1073322394u, 1058297495u, 0, JN_TOLERANCE, 0}, +{197, 1073741824u, 1073322394u, 1051646385u, 0, JN_TOLERANCE, 0}, +{198, 1077936128u, 1073322394u, 1039660722u, 0, JN_TOLERANCE, 0}, +{199, 1082130432u, 1073322394u, 1023295797u, 0, JN_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_JN_H multiple inclusion protection + +// EOF jnf.h diff --git a/packages/language/c/libm/current/tests/vectors/ldexpf.c b/packages/language/c/libm/current/tests/vectors/ldexpf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ldexpf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// ldexpf.c +// +// Test of ldexpf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/ldexpf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(ldexpf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &ldexpf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_INT, CYG_LIBM_TEST_VEC_FLOAT, + &ldexpf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("ldexpf() is stable"); + } // if + else + { + CYG_TEST_FAIL("ldexpf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library ldexpf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "ldexpf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF ldexpf.c diff --git a/packages/language/c/libm/current/tests/vectors/ldexpf.h b/packages/language/c/libm/current/tests/vectors/ldexpf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/ldexpf.h @@ -0,0 +1,887 @@ +#ifndef CYGONCE_LIBM_LDEXPF_H +#define CYGONCE_LIBM_LDEXPF_H +//=========================================================================== +// +// ldexpf.h +// +// Test vectors for testing of ldexpf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/ldexpf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define LDEXPF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t ldexpf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3196650934u, 0u, 3196650934u, 0, LDEXPF_TOLERANCE, 0}, +{1, 1224242132u, 0u, 1224242132u, 0, LDEXPF_TOLERANCE, 0}, +{2, 1198712763u, 0u, 1198712763u, 0, LDEXPF_TOLERANCE, 0}, +{3, 3159309973u, 0u, 3159309973u, 0, LDEXPF_TOLERANCE, 0}, +{4, 954173073u, 0u, 954173073u, 0, LDEXPF_TOLERANCE, 0}, +{5, 3090780435u, 0u, 3090780435u, 0, LDEXPF_TOLERANCE, 0}, +{6, 966554515u, 4294967290u, 916222867u, 0, LDEXPF_TOLERANCE, 0}, +{7, 1166191415u, 0u, 1166191415u, 0, LDEXPF_TOLERANCE, 0}, +{8, 1234419246u, 0u, 1234419246u, 0, LDEXPF_TOLERANCE, 0}, +{9, 1302107128u, 4294492157u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{10, 1052801068u, 0u, 1052801068u, 0, LDEXPF_TOLERANCE, 0}, +{11, 1060849628u, 0u, 1060849628u, 0, LDEXPF_TOLERANCE, 0}, +{12, 3484320003u, 0u, 3484320003u, 0, LDEXPF_TOLERANCE, 0}, +{13, 1167223673u, 0u, 1167223673u, 0, LDEXPF_TOLERANCE, 0}, +{14, 968192794u, 0u, 968192794u, 0, LDEXPF_TOLERANCE, 0}, +{15, 3122346862u, 48u, 3525000046u, 0, LDEXPF_TOLERANCE, 0}, +{16, 906701409u, 0u, 906701409u, 0, LDEXPF_TOLERANCE, 0}, +{17, 3231467496u, 0u, 3231467496u, 0, LDEXPF_TOLERANCE, 0}, +{18, 1341514497u, 3022046753u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{19, 1272351391u, 4294363968u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{20, 940236348u, 4294965375u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{21, 3251541546u, 0u, 3251541546u, 0, LDEXPF_TOLERANCE, 0}, +{22, 3110358400u, 0u, 3110358400u, 0, LDEXPF_TOLERANCE, 0}, +{23, 3371863479u, 0u, 3371863479u, 0, LDEXPF_TOLERANCE, 0}, +{24, 3204069187u, 0u, 3204069187u, 0, LDEXPF_TOLERANCE, 0}, +{25, 1306460502u, 0u, 1306460502u, 0, LDEXPF_TOLERANCE, 0}, +{26, 1197542187u, 0u, 1197542187u, 0, LDEXPF_TOLERANCE, 0}, +{27, 1184239996u, 4294967294u, 1167462780u, 0, LDEXPF_TOLERANCE, 0}, +{28, 1001673627u, 3340510812u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{29, 941796645u, 0u, 941796645u, 0, LDEXPF_TOLERANCE, 0}, +{30, 3287199470u, 0u, 3287199470u, 0, LDEXPF_TOLERANCE, 0}, +{31, 1143233714u, 0u, 1143233714u, 0, LDEXPF_TOLERANCE, 0}, +{32, 3143717025u, 4294967290u, 3093385377u, 0, LDEXPF_TOLERANCE, 0}, +{33, 3240298487u, 0u, 3240298487u, 0, LDEXPF_TOLERANCE, 0}, +{34, 1288902137u, 0u, 1288902137u, 0, LDEXPF_TOLERANCE, 0}, +{35, 1333134799u, 2211432996u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{36, 1038851706u, 2696359348u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{37, 3329354473u, 0u, 3329354473u, 0, LDEXPF_TOLERANCE, 0}, +{38, 1309289088u, 0u, 1309289088u, 0, LDEXPF_TOLERANCE, 0}, +{39, 3405585402u, 0u, 3405585402u, 0, LDEXPF_TOLERANCE, 0}, +{40, 3106647724u, 0u, 3106647724u, 0, LDEXPF_TOLERANCE, 0}, +{41, 1106778573u, 4294965325u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{42, 1140567947u, 0u, 1140567947u, 0, LDEXPF_TOLERANCE, 0}, +{43, 1238569473u, 0u, 1238569473u, 0, LDEXPF_TOLERANCE, 0}, +{44, 1175011025u, 0u, 1175011025u, 0, LDEXPF_TOLERANCE, 0}, +{45, 3058097085u, 0u, 3058097085u, 0, LDEXPF_TOLERANCE, 0}, +{46, 3107252546u, 1u, 3115641154u, 0, LDEXPF_TOLERANCE, 0}, +{47, 3096032662u, 0u, 3096032662u, 0, LDEXPF_TOLERANCE, 0}, +{48, 3197942144u, 0u, 3197942144u, 0, LDEXPF_TOLERANCE, 0}, +{49, 3403348556u, 0u, 3403348556u, 0, LDEXPF_TOLERANCE, 0}, +{50, 1136411063u, 82u, 1824276919u, 0, LDEXPF_TOLERANCE, 0}, +{51, 3340615780u, 0u, 3340615780u, 0, LDEXPF_TOLERANCE, 0}, +{52, 998567360u, 0u, 998567360u, 0, LDEXPF_TOLERANCE, 0}, +{53, 989687421u, 4294414202u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{54, 1152956913u, 0u, 1152956913u, 0, LDEXPF_TOLERANCE, 0}, +{55, 892922651u, 4294392467u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{56, 1307091856u, 24u, 1508418448u, 0, LDEXPF_TOLERANCE, 0}, +{57, 1142167709u, 13u, 1251219613u, 0, LDEXPF_TOLERANCE, 0}, +{58, 3426232834u, 0u, 3426232834u, 0, LDEXPF_TOLERANCE, 0}, +{59, 3368566779u, 0u, 3368566779u, 0, LDEXPF_TOLERANCE, 0}, +{60, 1138741813u, 0u, 1138741813u, 0, LDEXPF_TOLERANCE, 0}, +{61, 982950501u, 0u, 982950501u, 0, LDEXPF_TOLERANCE, 0}, +{62, 1142981585u, 0u, 1142981585u, 0, LDEXPF_TOLERANCE, 0}, +{63, 3347165962u, 0u, 3347165962u, 0, LDEXPF_TOLERANCE, 0}, +{64, 1009535440u, 4293825695u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{65, 3126820946u, 2u, 3143598162u, 0, LDEXPF_TOLERANCE, 0}, +{66, 3473956030u, 0u, 3473956030u, 0, LDEXPF_TOLERANCE, 0}, +{67, 3349098349u, 0u, 3349098349u, 0, LDEXPF_TOLERANCE, 0}, +{68, 3152729489u, 0u, 3152729489u, 0, LDEXPF_TOLERANCE, 0}, +{69, 945568720u, 4294963204u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{70, 3345489836u, 36u, 3647479724u, 0, LDEXPF_TOLERANCE, 0}, +{71, 976791751u, 4294967292u, 943237319u, 0, LDEXPF_TOLERANCE, 0}, +{72, 1004442355u, 0u, 1004442355u, 0, LDEXPF_TOLERANCE, 0}, +{73, 1108485380u, 0u, 1108485380u, 0, LDEXPF_TOLERANCE, 0}, +{74, 1061834641u, 0u, 1061834641u, 0, LDEXPF_TOLERANCE, 0}, +{75, 1087189715u, 0u, 1087189715u, 0, LDEXPF_TOLERANCE, 0}, +{76, 1000611335u, 0u, 1000611335u, 0, LDEXPF_TOLERANCE, 0}, +{77, 3466188568u, 0u, 3466188568u, 0, LDEXPF_TOLERANCE, 0}, +{78, 3072456205u, 0u, 3072456205u, 0, LDEXPF_TOLERANCE, 0}, +{79, 1315030230u, 4294939294u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{80, 1134593658u, 3712906973u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{81, 977281449u, 0u, 977281449u, 0, LDEXPF_TOLERANCE, 0}, +{82, 1086198791u, 0u, 1086198791u, 0, LDEXPF_TOLERANCE, 0}, +{83, 1255152035u, 0u, 1255152035u, 0, LDEXPF_TOLERANCE, 0}, +{84, 1135271264u, 4294966890u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{85, 1094190727u, 0u, 1094190727u, 0, LDEXPF_TOLERANCE, 0}, +{86, 1294665325u, 0u, 1294665325u, 0, LDEXPF_TOLERANCE, 0}, +{87, 1036608591u, 0u, 1036608591u, 0, LDEXPF_TOLERANCE, 0}, +{88, 3229998064u, 0u, 3229998064u, 0, LDEXPF_TOLERANCE, 0}, +{89, 3439134022u, 0u, 3439134022u, 0, LDEXPF_TOLERANCE, 0}, +{90, 1325668223u, 0u, 1325668223u, 0, LDEXPF_TOLERANCE, 0}, +{91, 1092037607u, 0u, 1092037607u, 0, LDEXPF_TOLERANCE, 0}, +{92, 3295436768u, 0u, 3295436768u, 0, LDEXPF_TOLERANCE, 0}, +{93, 1151984049u, 0u, 1151984049u, 0, LDEXPF_TOLERANCE, 0}, +{94, 1129287043u, 0u, 1129287043u, 0, LDEXPF_TOLERANCE, 0}, +{95, 1243664530u, 0u, 1243664530u, 0, LDEXPF_TOLERANCE, 0}, +{96, 950829092u, 0u, 950829092u, 0, LDEXPF_TOLERANCE, 0}, +{97, 1115471979u, 0u, 1115471979u, 0, LDEXPF_TOLERANCE, 0}, +{98, 3351092088u, 0u, 3351092088u, 0, LDEXPF_TOLERANCE, 0}, +{99, 3241193975u, 0u, 3241193975u, 0, LDEXPF_TOLERANCE, 0}, +{100, 1030934236u, 0u, 1030934236u, 0, LDEXPF_TOLERANCE, 0}, +{101, 1025254314u, 0u, 1025254314u, 0, LDEXPF_TOLERANCE, 0}, +{102, 1110545760u, 4294967286u, 1026659680u, 0, LDEXPF_TOLERANCE, 0}, +{103, 3180213739u, 37u, 3490592235u, 0, LDEXPF_TOLERANCE, 0}, +{104, 3361976590u, 0u, 3361976590u, 0, LDEXPF_TOLERANCE, 0}, +{105, 881280146u, 4262747521u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{106, 1304154705u, 0u, 1304154705u, 0, LDEXPF_TOLERANCE, 0}, +{107, 3264443610u, 4294967294u, 3247666394u, 0, LDEXPF_TOLERANCE, 0}, +{108, 3374550627u, 0u, 3374550627u, 0, LDEXPF_TOLERANCE, 0}, +{109, 1268194719u, 3962356276u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{110, 1161858787u, 0u, 1161858787u, 0, LDEXPF_TOLERANCE, 0}, +{111, 3325193181u, 0u, 3325193181u, 0, LDEXPF_TOLERANCE, 0}, +{112, 3115275450u, 0u, 3115275450u, 0, LDEXPF_TOLERANCE, 0}, +{113, 3116607482u, 4294967294u, 3099830266u, 0, LDEXPF_TOLERANCE, 0}, +{114, 3187892415u, 0u, 3187892415u, 0, LDEXPF_TOLERANCE, 0}, +{115, 1189120494u, 0u, 1189120494u, 0, LDEXPF_TOLERANCE, 0}, +{116, 889030794u, 0u, 889030794u, 0, LDEXPF_TOLERANCE, 0}, +{117, 1323529208u, 0u, 1323529208u, 0, LDEXPF_TOLERANCE, 0}, +{118, 3465768388u, 0u, 3465768388u, 0, LDEXPF_TOLERANCE, 0}, +{119, 3426099899u, 87u, 4155908795u, 0, LDEXPF_TOLERANCE, 0}, +{120, 1065798296u, 0u, 1065798296u, 0, LDEXPF_TOLERANCE, 0}, +{121, 3328989444u, 0u, 3328989444u, 0, LDEXPF_TOLERANCE, 0}, +{122, 3357819026u, 0u, 3357819026u, 0, LDEXPF_TOLERANCE, 0}, +{123, 1273397670u, 0u, 1273397670u, 0, LDEXPF_TOLERANCE, 0}, +{124, 1257596246u, 4264851904u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{125, 1051773536u, 0u, 1051773536u, 0, LDEXPF_TOLERANCE, 0}, +{126, 3294752507u, 0u, 3294752507u, 0, LDEXPF_TOLERANCE, 0}, +{127, 3424848725u, 0u, 3424848725u, 0, LDEXPF_TOLERANCE, 0}, +{128, 1090870906u, 4294966393u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{129, 1272325814u, 0u, 1272325814u, 0, LDEXPF_TOLERANCE, 0}, +{130, 3359508271u, 0u, 3359508271u, 0, LDEXPF_TOLERANCE, 0}, +{131, 1137854355u, 4294941607u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{132, 3440773058u, 0u, 3440773058u, 0, LDEXPF_TOLERANCE, 0}, +{133, 3101598400u, 0u, 3101598400u, 0, LDEXPF_TOLERANCE, 0}, +{134, 3437062994u, 0u, 3437062994u, 0, LDEXPF_TOLERANCE, 0}, +{135, 3303035472u, 0u, 3303035472u, 0, LDEXPF_TOLERANCE, 0}, +{136, 1053698677u, 4294966907u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{137, 3037541131u, 5u, 3079484171u, 0, LDEXPF_TOLERANCE, 0}, +{138, 3458934263u, 0u, 3458934263u, 0, LDEXPF_TOLERANCE, 0}, +{139, 1065761827u, 4294943781u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{140, 3025843188u, 0u, 3025843188u, 0, LDEXPF_TOLERANCE, 0}, +{141, 926665223u, 0u, 926665223u, 0, LDEXPF_TOLERANCE, 0}, +{142, 1199816046u, 0u, 1199816046u, 0, LDEXPF_TOLERANCE, 0}, +{143, 3333779015u, 0u, 3333779015u, 0, LDEXPF_TOLERANCE, 0}, +{144, 948398145u, 4294967288u, 881289281u, 0, LDEXPF_TOLERANCE, 0}, +{145, 3164749613u, 0u, 3164749613u, 0, LDEXPF_TOLERANCE, 0}, +{146, 3118883815u, 0u, 3118883815u, 0, LDEXPF_TOLERANCE, 0}, +{147, 3226990408u, 45u, 3604477768u, 0, LDEXPF_TOLERANCE, 0}, +{148, 3117098218u, 115u, 4081788138u, 0, LDEXPF_TOLERANCE, 0}, +{149, 1283624229u, 0u, 1283624229u, 0, LDEXPF_TOLERANCE, 0}, +{150, 970649315u, 3u, 995815139u, 0, LDEXPF_TOLERANCE, 0}, +{151, 959776291u, 4294967028u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{152, 1270734970u, 4294829480u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{153, 3454816067u, 0u, 3454816067u, 0, LDEXPF_TOLERANCE, 0}, +{154, 1157598381u, 4294964293u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{155, 3335234513u, 0u, 3335234513u, 0, LDEXPF_TOLERANCE, 0}, +{156, 1279489061u, 0u, 1279489061u, 0, LDEXPF_TOLERANCE, 0}, +{157, 3143920719u, 0u, 3143920719u, 0, LDEXPF_TOLERANCE, 0}, +{158, 1233171235u, 0u, 1233171235u, 0, LDEXPF_TOLERANCE, 0}, +{159, 1148920078u, 0u, 1148920078u, 0, LDEXPF_TOLERANCE, 0}, +{160, 3064988156u, 4294967292u, 3031433724u, 0, LDEXPF_TOLERANCE, 0}, +{161, 3219949483u, 0u, 3219949483u, 0, LDEXPF_TOLERANCE, 0}, +{162, 1207502108u, 4292985650u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{163, 1000014431u, 0u, 1000014431u, 0, LDEXPF_TOLERANCE, 0}, +{164, 3161756316u, 0u, 3161756316u, 0, LDEXPF_TOLERANCE, 0}, +{165, 1234530539u, 3u, 1259696363u, 0, LDEXPF_TOLERANCE, 0}, +{166, 3306328852u, 87u, 4036137748u, 0, LDEXPF_TOLERANCE, 0}, +{167, 1131927531u, 0u, 1131927531u, 0, LDEXPF_TOLERANCE, 0}, +{168, 3449879391u, 0u, 3449879391u, 0, LDEXPF_TOLERANCE, 0}, +{169, 970094304u, 4294911386u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{170, 1125551064u, 4294949017u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{171, 1198917460u, 2607028085u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{172, 3201603336u, 0u, 3201603336u, 0, LDEXPF_TOLERANCE, 0}, +{173, 921940707u, 0u, 921940707u, 0, LDEXPF_TOLERANCE, 0}, +{174, 1091906532u, 0u, 1091906532u, 0, LDEXPF_TOLERANCE, 0}, +{175, 1276853215u, 0u, 1276853215u, 0, LDEXPF_TOLERANCE, 0}, +{176, 3360170117u, 0u, 3360170117u, 0, LDEXPF_TOLERANCE, 0}, +{177, 1064364381u, 0u, 1064364381u, 0, LDEXPF_TOLERANCE, 0}, +{178, 1268744779u, 4294952694u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{179, 1165195428u, 4292538760u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{180, 3044092739u, 30u, 3295750979u, 0, LDEXPF_TOLERANCE, 0}, +{181, 3247790039u, 0u, 3247790039u, 0, LDEXPF_TOLERANCE, 0}, +{182, 3215244648u, 4u, 3248799080u, 0, LDEXPF_TOLERANCE, 0}, +{183, 3095275931u, 0u, 3095275931u, 0, LDEXPF_TOLERANCE, 0}, +{184, 3059688264u, 77u, 3705611080u, 0, LDEXPF_TOLERANCE, 0}, +{185, 1212717473u, 0u, 1212717473u, 0, LDEXPF_TOLERANCE, 0}, +{186, 3028857014u, 0u, 3028857014u, 0, LDEXPF_TOLERANCE, 0}, +{187, 1044867873u, 4294528232u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{188, 1089986803u, 3370664605u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{189, 1296314700u, 0u, 1296314700u, 0, LDEXPF_TOLERANCE, 0}, +{190, 1251462432u, 0u, 1251462432u, 0, LDEXPF_TOLERANCE, 0}, +{191, 3485236902u, 0u, 3485236902u, 0, LDEXPF_TOLERANCE, 0}, +{192, 3080852256u, 0u, 3080852256u, 0, LDEXPF_TOLERANCE, 0}, +{193, 1022211242u, 0u, 1022211242u, 0, LDEXPF_TOLERANCE, 0}, +{194, 884661176u, 0u, 884661176u, 0, LDEXPF_TOLERANCE, 0}, +{195, 989762529u, 4294733601u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{196, 1295475718u, 0u, 1295475718u, 0, LDEXPF_TOLERANCE, 0}, +{197, 1002632518u, 4294950696u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{198, 3158912530u, 0u, 3158912530u, 0, LDEXPF_TOLERANCE, 0}, +{199, 3138037576u, 0u, 3138037576u, 0, LDEXPF_TOLERANCE, 0}, +{200, 999985470u, 4282999218u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{201, 1189421739u, 0u, 1189421739u, 0, LDEXPF_TOLERANCE, 0}, +{202, 3075182644u, 0u, 3075182644u, 0, LDEXPF_TOLERANCE, 0}, +{203, 1164046161u, 4139845439u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{204, 1292596266u, 0u, 1292596266u, 0, LDEXPF_TOLERANCE, 0}, +{205, 1314644642u, 0u, 1314644642u, 0, LDEXPF_TOLERANCE, 0}, +{206, 3399813173u, 0u, 3399813173u, 0, LDEXPF_TOLERANCE, 0}, +{207, 948775569u, 2159002590u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{208, 1034611395u, 0u, 1034611395u, 0, LDEXPF_TOLERANCE, 0}, +{209, 1181604787u, 4294717096u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{210, 3059042077u, 0u, 3059042077u, 0, LDEXPF_TOLERANCE, 0}, +{211, 1043691622u, 4288164501u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{212, 1314588083u, 0u, 1314588083u, 0, LDEXPF_TOLERANCE, 0}, +{213, 3141533334u, 0u, 3141533334u, 0, LDEXPF_TOLERANCE, 0}, +{214, 3400949680u, 0u, 3400949680u, 0, LDEXPF_TOLERANCE, 0}, +{215, 1110424755u, 0u, 1110424755u, 0, LDEXPF_TOLERANCE, 0}, +{216, 3189917167u, 0u, 3189917167u, 0, LDEXPF_TOLERANCE, 0}, +{217, 969804941u, 4294836255u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{218, 934308144u, 0u, 934308144u, 0, LDEXPF_TOLERANCE, 0}, +{219, 1156767533u, 7u, 1215487789u, 0, LDEXPF_TOLERANCE, 0}, +{220, 994934087u, 0u, 994934087u, 0, LDEXPF_TOLERANCE, 0}, +{221, 3185240099u, 122u, 4208650275u, 0, LDEXPF_TOLERANCE, 0}, +{222, 1212129651u, 0u, 1212129651u, 0, LDEXPF_TOLERANCE, 0}, +{223, 3125775254u, 0u, 3125775254u, 0, LDEXPF_TOLERANCE, 0}, +{224, 1037464105u, 0u, 1037464105u, 0, LDEXPF_TOLERANCE, 0}, +{225, 918212457u, 0u, 918212457u, 0, LDEXPF_TOLERANCE, 0}, +{226, 1337315179u, 3421796258u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{227, 1131358407u, 4294955130u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{228, 1156517523u, 4294914801u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{229, 3210802820u, 0u, 3210802820u, 0, LDEXPF_TOLERANCE, 0}, +{230, 3468429030u, 4294967266u, 3216770790u, 0, LDEXPF_TOLERANCE, 0}, +{231, 3055299953u, 0u, 3055299953u, 0, LDEXPF_TOLERANCE, 0}, +{232, 959956547u, 0u, 959956547u, 0, LDEXPF_TOLERANCE, 0}, +{233, 1039917375u, 117u, 2021384511u, 0, LDEXPF_TOLERANCE, 0}, +{234, 1311016004u, 4294941884u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{235, 1128016396u, 27u, 1354508812u, 0, LDEXPF_TOLERANCE, 0}, +{236, 3210335769u, 0u, 3210335769u, 0, LDEXPF_TOLERANCE, 0}, +{237, 1206054701u, 0u, 1206054701u, 0, LDEXPF_TOLERANCE, 0}, +{238, 1213609983u, 0u, 1213609983u, 0, LDEXPF_TOLERANCE, 0}, +{239, 1246902946u, 0u, 1246902946u, 0, LDEXPF_TOLERANCE, 0}, +{240, 995850843u, 3845036501u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{241, 1029480631u, 0u, 1029480631u, 0, LDEXPF_TOLERANCE, 0}, +{242, 3153568584u, 0u, 3153568584u, 0, LDEXPF_TOLERANCE, 0}, +{243, 3384988527u, 0u, 3384988527u, 0, LDEXPF_TOLERANCE, 0}, +{244, 1317696241u, 0u, 1317696241u, 0, LDEXPF_TOLERANCE, 0}, +{245, 3341877624u, 0u, 3341877624u, 0, LDEXPF_TOLERANCE, 0}, +{246, 1228636133u, 0u, 1228636133u, 0, LDEXPF_TOLERANCE, 0}, +{247, 1207246237u, 0u, 1207246237u, 0, LDEXPF_TOLERANCE, 0}, +{248, 1165476654u, 4294877038u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{249, 1215278023u, 0u, 1215278023u, 0, LDEXPF_TOLERANCE, 0}, +{250, 1017239798u, 4167373558u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{251, 1149651309u, 0u, 1149651309u, 0, LDEXPF_TOLERANCE, 0}, +{252, 1111943722u, 0u, 1111943722u, 0, LDEXPF_TOLERANCE, 0}, +{253, 1189849849u, 4293652457u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{254, 3204848496u, 0u, 3204848496u, 0, LDEXPF_TOLERANCE, 0}, +{255, 1249758327u, 0u, 1249758327u, 0, LDEXPF_TOLERANCE, 0}, +{256, 3215981890u, 4294967286u, 3132095810u, 0, LDEXPF_TOLERANCE, 0}, +{257, 1266687209u, 0u, 1266687209u, 0, LDEXPF_TOLERANCE, 0}, +{258, 943645710u, 0u, 943645710u, 0, LDEXPF_TOLERANCE, 0}, +{259, 935847271u, 1u, 944235879u, 0, LDEXPF_TOLERANCE, 0}, +{260, 3410336089u, 47u, 3804600665u, 0, LDEXPF_TOLERANCE, 0}, +{261, 3059263153u, 0u, 3059263153u, 0, LDEXPF_TOLERANCE, 0}, +{262, 3353679791u, 0u, 3353679791u, 0, LDEXPF_TOLERANCE, 0}, +{263, 1001823878u, 0u, 1001823878u, 0, LDEXPF_TOLERANCE, 0}, +{264, 1009130212u, 0u, 1009130212u, 0, LDEXPF_TOLERANCE, 0}, +{265, 3367127535u, 0u, 3367127535u, 0, LDEXPF_TOLERANCE, 0}, +{266, 1032920919u, 3981458897u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{267, 3281952870u, 0u, 3281952870u, 0, LDEXPF_TOLERANCE, 0}, +{268, 1237868497u, 0u, 1237868497u, 0, LDEXPF_TOLERANCE, 0}, +{269, 1153753924u, 4294958733u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{270, 1120261759u, 0u, 1120261759u, 0, LDEXPF_TOLERANCE, 0}, +{271, 3349595986u, 4294967271u, 3139880786u, 0, LDEXPF_TOLERANCE, 0}, +{272, 1087750238u, 16u, 1221967966u, 0, LDEXPF_TOLERANCE, 0}, +{273, 1066116543u, 0u, 1066116543u, 0, LDEXPF_TOLERANCE, 0}, +{274, 3210898034u, 0u, 3210898034u, 0, LDEXPF_TOLERANCE, 0}, +{275, 1030612298u, 4294908239u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{276, 1186234578u, 0u, 1186234578u, 0, LDEXPF_TOLERANCE, 0}, +{277, 1331680743u, 0u, 1331680743u, 0, LDEXPF_TOLERANCE, 0}, +{278, 1045232522u, 4294967290u, 994900874u, 0, LDEXPF_TOLERANCE, 0}, +{279, 3119858470u, 0u, 3119858470u, 0, LDEXPF_TOLERANCE, 0}, +{280, 3349432725u, 0u, 3349432725u, 0, LDEXPF_TOLERANCE, 0}, +{281, 912423027u, 0u, 912423027u, 0, LDEXPF_TOLERANCE, 0}, +{282, 3194674746u, 0u, 3194674746u, 0, LDEXPF_TOLERANCE, 0}, +{283, 965402291u, 0u, 965402291u, 0, LDEXPF_TOLERANCE, 0}, +{284, 1133410485u, 4294951516u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{285, 3136790322u, 7u, 3195510578u, 0, LDEXPF_TOLERANCE, 0}, +{286, 3369970587u, 0u, 3369970587u, 0, LDEXPF_TOLERANCE, 0}, +{287, 1270451568u, 0u, 1270451568u, 0, LDEXPF_TOLERANCE, 0}, +{288, 989498922u, 0u, 989498922u, 0, LDEXPF_TOLERANCE, 0}, +{289, 1280215674u, 0u, 1280215674u, 0, LDEXPF_TOLERANCE, 0}, +{290, 1171873518u, 0u, 1171873518u, 0, LDEXPF_TOLERANCE, 0}, +{291, 3298258100u, 0u, 3298258100u, 0, LDEXPF_TOLERANCE, 0}, +{292, 3415208824u, 0u, 3415208824u, 0, LDEXPF_TOLERANCE, 0}, +{293, 1001897182u, 0u, 1001897182u, 0, LDEXPF_TOLERANCE, 0}, +{294, 3152777939u, 4294967281u, 3026948819u, 0, LDEXPF_TOLERANCE, 0}, +{295, 985903305u, 4294945424u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{296, 3357328848u, 0u, 3357328848u, 0, LDEXPF_TOLERANCE, 0}, +{297, 982612185u, 0u, 982612185u, 0, LDEXPF_TOLERANCE, 0}, +{298, 1144755661u, 0u, 1144755661u, 0, LDEXPF_TOLERANCE, 0}, +{299, 898467286u, 0u, 898467286u, 0, LDEXPF_TOLERANCE, 0}, +{300, 3364525678u, 0u, 3364525678u, 0, LDEXPF_TOLERANCE, 0}, +{301, 3146660041u, 0u, 3146660041u, 0, LDEXPF_TOLERANCE, 0}, +{302, 3467121799u, 0u, 3467121799u, 0, LDEXPF_TOLERANCE, 0}, +{303, 1151257041u, 0u, 1151257041u, 0, LDEXPF_TOLERANCE, 0}, +{304, 3097873255u, 4294967295u, 3089484647u, 0, LDEXPF_TOLERANCE, 0}, +{305, 3130670309u, 0u, 3130670309u, 0, LDEXPF_TOLERANCE, 0}, +{306, 1017573824u, 0u, 1017573824u, 0, LDEXPF_TOLERANCE, 0}, +{307, 1258369714u, 3364363284u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{308, 1216602683u, 4294468761u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{309, 1071940738u, 4294963632u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{310, 922601356u, 4294937447u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{311, 3357177805u, 5u, 3399120845u, 0, LDEXPF_TOLERANCE, 0}, +{312, 3049120080u, 0u, 3049120080u, 0, LDEXPF_TOLERANCE, 0}, +{313, 1153863660u, 0u, 1153863660u, 0, LDEXPF_TOLERANCE, 0}, +{314, 3034243695u, 0u, 3034243695u, 0, LDEXPF_TOLERANCE, 0}, +{315, 1249365132u, 4294967060u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{316, 3046215730u, 0u, 3046215730u, 0, LDEXPF_TOLERANCE, 0}, +{317, 3047251716u, 8u, 3114360580u, 0, LDEXPF_TOLERANCE, 0}, +{318, 1297708818u, 0u, 1297708818u, 0, LDEXPF_TOLERANCE, 0}, +{319, 3161606610u, 0u, 3161606610u, 0, LDEXPF_TOLERANCE, 0}, +{320, 888030585u, 0u, 888030585u, 0, LDEXPF_TOLERANCE, 0}, +{321, 1043442869u, 4294963715u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{322, 3400348640u, 0u, 3400348640u, 0, LDEXPF_TOLERANCE, 0}, +{323, 1250249095u, 1u, 1258637703u, 0, LDEXPF_TOLERANCE, 0}, +{324, 3020883322u, 0u, 3020883322u, 0, LDEXPF_TOLERANCE, 0}, +{325, 1215968622u, 2531374040u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{326, 3202319550u, 0u, 3202319550u, 0, LDEXPF_TOLERANCE, 0}, +{327, 3061638260u, 0u, 3061638260u, 0, LDEXPF_TOLERANCE, 0}, +{328, 1025404104u, 1u, 1033792712u, 0, LDEXPF_TOLERANCE, 0}, +{329, 3138086437u, 0u, 3138086437u, 0, LDEXPF_TOLERANCE, 0}, +{330, 3099671635u, 4294967295u, 3091283027u, 0, LDEXPF_TOLERANCE, 0}, +{331, 3068014841u, 0u, 3068014841u, 0, LDEXPF_TOLERANCE, 0}, +{332, 1252237719u, 105u, 2133041559u, 0, LDEXPF_TOLERANCE, 0}, +{333, 3082454432u, 0u, 3082454432u, 0, LDEXPF_TOLERANCE, 0}, +{334, 1099710167u, 0u, 1099710167u, 0, LDEXPF_TOLERANCE, 0}, +{335, 1282110851u, 0u, 1282110851u, 0, LDEXPF_TOLERANCE, 0}, +{336, 1123357102u, 4294966999u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{337, 1106837025u, 0u, 1106837025u, 0, LDEXPF_TOLERANCE, 0}, +{338, 1253017688u, 0u, 1253017688u, 0, LDEXPF_TOLERANCE, 0}, +{339, 1108543194u, 4294966999u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{340, 3305715025u, 0u, 3305715025u, 0, LDEXPF_TOLERANCE, 0}, +{341, 1266928623u, 0u, 1266928623u, 0, LDEXPF_TOLERANCE, 0}, +{342, 3438080027u, 0u, 3438080027u, 0, LDEXPF_TOLERANCE, 0}, +{343, 3344574751u, 0u, 3344574751u, 0, LDEXPF_TOLERANCE, 0}, +{344, 1152416724u, 0u, 1152416724u, 0, LDEXPF_TOLERANCE, 0}, +{345, 3263310567u, 0u, 3263310567u, 0, LDEXPF_TOLERANCE, 0}, +{346, 1000313118u, 0u, 1000313118u, 0, LDEXPF_TOLERANCE, 0}, +{347, 972485427u, 131u, 2071393075u, 0, LDEXPF_TOLERANCE, 0}, +{348, 1278946388u, 0u, 1278946388u, 0, LDEXPF_TOLERANCE, 0}, +{349, 947914771u, 0u, 947914771u, 0, LDEXPF_TOLERANCE, 0}, +{350, 3167730654u, 0u, 3167730654u, 0, LDEXPF_TOLERANCE, 0}, +{351, 3232726036u, 0u, 3232726036u, 0, LDEXPF_TOLERANCE, 0}, +{352, 1297190916u, 0u, 1297190916u, 0, LDEXPF_TOLERANCE, 0}, +{353, 1277649137u, 0u, 1277649137u, 0, LDEXPF_TOLERANCE, 0}, +{354, 3090306474u, 0u, 3090306474u, 0, LDEXPF_TOLERANCE, 0}, +{355, 3244032016u, 0u, 3244032016u, 0, LDEXPF_TOLERANCE, 0}, +{356, 3033122376u, 0u, 3033122376u, 0, LDEXPF_TOLERANCE, 0}, +{357, 3317196817u, 0u, 3317196817u, 0, LDEXPF_TOLERANCE, 0}, +{358, 3374748510u, 0u, 3374748510u, 0, LDEXPF_TOLERANCE, 0}, +{359, 3345634950u, 0u, 3345634950u, 0, LDEXPF_TOLERANCE, 0}, +{360, 3189860276u, 0u, 3189860276u, 0, LDEXPF_TOLERANCE, 0}, +{361, 3396917283u, 0u, 3396917283u, 0, LDEXPF_TOLERANCE, 0}, +{362, 3317032737u, 0u, 3317032737u, 0, LDEXPF_TOLERANCE, 0}, +{363, 1306520561u, 0u, 1306520561u, 0, LDEXPF_TOLERANCE, 0}, +{364, 1314936356u, 0u, 1314936356u, 0, LDEXPF_TOLERANCE, 0}, +{365, 3085636260u, 33u, 3362460324u, 0, LDEXPF_TOLERANCE, 0}, +{366, 3182540197u, 0u, 3182540197u, 0, LDEXPF_TOLERANCE, 0}, +{367, 3349005404u, 0u, 3349005404u, 0, LDEXPF_TOLERANCE, 0}, +{368, 1053387478u, 0u, 1053387478u, 0, LDEXPF_TOLERANCE, 0}, +{369, 3136364836u, 0u, 3136364836u, 0, LDEXPF_TOLERANCE, 0}, +{370, 1112891928u, 0u, 1112891928u, 0, LDEXPF_TOLERANCE, 0}, +{371, 893449284u, 0u, 893449284u, 0, LDEXPF_TOLERANCE, 0}, +{372, 892311459u, 14u, 1009751971u, 0, LDEXPF_TOLERANCE, 0}, +{373, 1190105283u, 0u, 1190105283u, 0, LDEXPF_TOLERANCE, 0}, +{374, 1043025031u, 0u, 1043025031u, 0, LDEXPF_TOLERANCE, 0}, +{375, 3410531037u, 0u, 3410531037u, 0, LDEXPF_TOLERANCE, 0}, +{376, 3125834184u, 0u, 3125834184u, 0, LDEXPF_TOLERANCE, 0}, +{377, 902318189u, 0u, 902318189u, 0, LDEXPF_TOLERANCE, 0}, +{378, 3213624815u, 0u, 3213624815u, 0, LDEXPF_TOLERANCE, 0}, +{379, 1120888322u, 5u, 1162831362u, 0, LDEXPF_TOLERANCE, 0}, +{380, 1315217243u, 4291026624u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{381, 3137758475u, 0u, 3137758475u, 0, LDEXPF_TOLERANCE, 0}, +{382, 1040617590u, 0u, 1040617590u, 0, LDEXPF_TOLERANCE, 0}, +{383, 955384253u, 4294910624u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{384, 904255535u, 0u, 904255535u, 0, LDEXPF_TOLERANCE, 0}, +{385, 1022984119u, 0u, 1022984119u, 0, LDEXPF_TOLERANCE, 0}, +{386, 997362368u, 0u, 997362368u, 0, LDEXPF_TOLERANCE, 0}, +{387, 900933520u, 19u, 1060317072u, 0, LDEXPF_TOLERANCE, 0}, +{388, 1039827284u, 1u, 1048215892u, 0, LDEXPF_TOLERANCE, 0}, +{389, 1021564080u, 0u, 1021564080u, 0, LDEXPF_TOLERANCE, 0}, +{390, 3458669745u, 0u, 3458669745u, 0, LDEXPF_TOLERANCE, 0}, +{391, 1040711112u, 4294967293u, 1015545288u, 0, LDEXPF_TOLERANCE, 0}, +{392, 1134528351u, 4294638880u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{393, 1133689539u, 1u, 1142078147u, 0, LDEXPF_TOLERANCE, 0}, +{394, 3415502662u, 0u, 3415502662u, 0, LDEXPF_TOLERANCE, 0}, +{395, 954999730u, 0u, 954999730u, 0, LDEXPF_TOLERANCE, 0}, +{396, 1066157309u, 4294967285u, 973882621u, 0, LDEXPF_TOLERANCE, 0}, +{397, 940437609u, 0u, 940437609u, 0, LDEXPF_TOLERANCE, 0}, +{398, 3064200154u, 0u, 3064200154u, 0, LDEXPF_TOLERANCE, 0}, +{399, 1023889593u, 0u, 1023889593u, 0, LDEXPF_TOLERANCE, 0}, +{400, 1219052056u, 4294526211u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{401, 3372118621u, 0u, 3372118621u, 0, LDEXPF_TOLERANCE, 0}, +{402, 3146190320u, 0u, 3146190320u, 0, LDEXPF_TOLERANCE, 0}, +{403, 1299683827u, 0u, 1299683827u, 0, LDEXPF_TOLERANCE, 0}, +{404, 3064155399u, 0u, 3064155399u, 0, LDEXPF_TOLERANCE, 0}, +{405, 3040314717u, 1u, 3048703325u, 0, LDEXPF_TOLERANCE, 0}, +{406, 1229268598u, 1u, 1237657206u, 0, LDEXPF_TOLERANCE, 0}, +{407, 3184078812u, 0u, 3184078812u, 0, LDEXPF_TOLERANCE, 0}, +{408, 1086717248u, 4256439624u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{409, 3434884607u, 0u, 3434884607u, 0, LDEXPF_TOLERANCE, 0}, +{410, 3464955606u, 0u, 3464955606u, 0, LDEXPF_TOLERANCE, 0}, +{411, 1025278524u, 0u, 1025278524u, 0, LDEXPF_TOLERANCE, 0}, +{412, 1242829722u, 4294967290u, 1192498074u, 0, LDEXPF_TOLERANCE, 0}, +{413, 3075149137u, 76u, 3712683345u, 0, LDEXPF_TOLERANCE, 0}, +{414, 1246019790u, 0u, 1246019790u, 0, LDEXPF_TOLERANCE, 0}, +{415, 1136052740u, 4294967282u, 1018612228u, 0, LDEXPF_TOLERANCE, 0}, +{416, 1069009211u, 0u, 1069009211u, 0, LDEXPF_TOLERANCE, 0}, +{417, 1015670780u, 20u, 1183442940u, 0, LDEXPF_TOLERANCE, 0}, +{418, 1012543234u, 70u, 1599745794u, 0, LDEXPF_TOLERANCE, 0}, +{419, 1087942795u, 4294961657u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{420, 3426365713u, 0u, 3426365713u, 0, LDEXPF_TOLERANCE, 0}, +{421, 3283555717u, 0u, 3283555717u, 0, LDEXPF_TOLERANCE, 0}, +{422, 3381255420u, 0u, 3381255420u, 0, LDEXPF_TOLERANCE, 0}, +{423, 3388772093u, 0u, 3388772093u, 0, LDEXPF_TOLERANCE, 0}, +{424, 1319200415u, 4293050361u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{425, 1279324488u, 4294967293u, 1254158664u, 0, LDEXPF_TOLERANCE, 0}, +{426, 3217795424u, 0u, 3217795424u, 0, LDEXPF_TOLERANCE, 0}, +{427, 1246947517u, 6u, 1297279165u, 0, LDEXPF_TOLERANCE, 0}, +{428, 3396723577u, 0u, 3396723577u, 0, LDEXPF_TOLERANCE, 0}, +{429, 3433761025u, 0u, 3433761025u, 0, LDEXPF_TOLERANCE, 0}, +{430, 3201187455u, 0u, 3201187455u, 0, LDEXPF_TOLERANCE, 0}, +{431, 3083019343u, 0u, 3083019343u, 0, LDEXPF_TOLERANCE, 0}, +{432, 3042018375u, 0u, 3042018375u, 0, LDEXPF_TOLERANCE, 0}, +{433, 1082862511u, 0u, 1082862511u, 0, LDEXPF_TOLERANCE, 0}, +{434, 1341821683u, 0u, 1341821683u, 0, LDEXPF_TOLERANCE, 0}, +{435, 1079061705u, 0u, 1079061705u, 0, LDEXPF_TOLERANCE, 0}, +{436, 1105291533u, 3424974780u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{437, 1016023520u, 4294967293u, 990857696u, 0, LDEXPF_TOLERANCE, 0}, +{438, 1156767169u, 0u, 1156767169u, 0, LDEXPF_TOLERANCE, 0}, +{439, 3077020499u, 0u, 3077020499u, 0, LDEXPF_TOLERANCE, 0}, +{440, 1104284039u, 0u, 1104284039u, 0, LDEXPF_TOLERANCE, 0}, +{441, 1093697541u, 0u, 1093697541u, 0, LDEXPF_TOLERANCE, 0}, +{442, 3179003144u, 37u, 3489381640u, 0, LDEXPF_TOLERANCE, 0}, +{443, 1094115255u, 0u, 1094115255u, 0, LDEXPF_TOLERANCE, 0}, +{444, 882878091u, 0u, 882878091u, 0, LDEXPF_TOLERANCE, 0}, +{445, 1098662266u, 0u, 1098662266u, 0, LDEXPF_TOLERANCE, 0}, +{446, 927582555u, 0u, 927582555u, 0, LDEXPF_TOLERANCE, 0}, +{447, 3111440310u, 0u, 3111440310u, 0, LDEXPF_TOLERANCE, 0}, +{448, 3476083859u, 0u, 3476083859u, 0, LDEXPF_TOLERANCE, 0}, +{449, 3038754840u, 0u, 3038754840u, 0, LDEXPF_TOLERANCE, 0}, +{450, 3464546616u, 0u, 3464546616u, 0, LDEXPF_TOLERANCE, 0}, +{451, 1002542205u, 0u, 1002542205u, 0, LDEXPF_TOLERANCE, 0}, +{452, 3443552129u, 0u, 3443552129u, 0, LDEXPF_TOLERANCE, 0}, +{453, 1287620154u, 0u, 1287620154u, 0, LDEXPF_TOLERANCE, 0}, +{454, 3073260205u, 0u, 3073260205u, 0, LDEXPF_TOLERANCE, 0}, +{455, 1245702957u, 0u, 1245702957u, 0, LDEXPF_TOLERANCE, 0}, +{456, 3087802274u, 0u, 3087802274u, 0, LDEXPF_TOLERANCE, 0}, +{457, 3415763001u, 0u, 3415763001u, 0, LDEXPF_TOLERANCE, 0}, +{458, 3026311911u, 0u, 3026311911u, 0, LDEXPF_TOLERANCE, 0}, +{459, 1198307901u, 68u, 1768733245u, 0, LDEXPF_TOLERANCE, 0}, +{460, 922255363u, 0u, 922255363u, 0, LDEXPF_TOLERANCE, 0}, +{461, 1113104661u, 0u, 1113104661u, 0, LDEXPF_TOLERANCE, 0}, +{462, 1136714348u, 0u, 1136714348u, 0, LDEXPF_TOLERANCE, 0}, +{463, 948856035u, 0u, 948856035u, 0, LDEXPF_TOLERANCE, 0}, +{464, 1062512367u, 4294967293u, 1037346543u, 0, LDEXPF_TOLERANCE, 0}, +{465, 3486907092u, 0u, 3486907092u, 0, LDEXPF_TOLERANCE, 0}, +{466, 1162027071u, 4294964303u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{467, 1034561811u, 0u, 1034561811u, 0, LDEXPF_TOLERANCE, 0}, +{468, 3271615417u, 0u, 3271615417u, 0, LDEXPF_TOLERANCE, 0}, +{469, 1177157787u, 0u, 1177157787u, 0, LDEXPF_TOLERANCE, 0}, +{470, 3196144817u, 0u, 3196144817u, 0, LDEXPF_TOLERANCE, 0}, +{471, 3432084552u, 0u, 3432084552u, 0, LDEXPF_TOLERANCE, 0}, +{472, 1309658335u, 0u, 1309658335u, 0, LDEXPF_TOLERANCE, 0}, +{473, 1226494979u, 0u, 1226494979u, 0, LDEXPF_TOLERANCE, 0}, +{474, 3460699001u, 0u, 3460699001u, 0, LDEXPF_TOLERANCE, 0}, +{475, 3079231719u, 0u, 3079231719u, 0, LDEXPF_TOLERANCE, 0}, +{476, 3093951884u, 0u, 3093951884u, 0, LDEXPF_TOLERANCE, 0}, +{477, 1204196034u, 4294966040u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{478, 3459877411u, 0u, 3459877411u, 0, LDEXPF_TOLERANCE, 0}, +{479, 1161439847u, 0u, 1161439847u, 0, LDEXPF_TOLERANCE, 0}, +{480, 908663107u, 0u, 908663107u, 0, LDEXPF_TOLERANCE, 0}, +{481, 1084378658u, 0u, 1084378658u, 0, LDEXPF_TOLERANCE, 0}, +{482, 3022828828u, 0u, 3022828828u, 0, LDEXPF_TOLERANCE, 0}, +{483, 1226473697u, 0u, 1226473697u, 0, LDEXPF_TOLERANCE, 0}, +{484, 3468040845u, 0u, 3468040845u, 0, LDEXPF_TOLERANCE, 0}, +{485, 1178825761u, 54u, 1631810593u, 0, LDEXPF_TOLERANCE, 0}, +{486, 3059266302u, 0u, 3059266302u, 0, LDEXPF_TOLERANCE, 0}, +{487, 3337652712u, 0u, 3337652712u, 0, LDEXPF_TOLERANCE, 0}, +{488, 1184753508u, 0u, 1184753508u, 0, LDEXPF_TOLERANCE, 0}, +{489, 996404791u, 4294853343u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{490, 1188439315u, 55u, 1649812755u, 0, LDEXPF_TOLERANCE, 0}, +{491, 906557513u, 0u, 906557513u, 0, LDEXPF_TOLERANCE, 0}, +{492, 916831283u, 0u, 916831283u, 0, LDEXPF_TOLERANCE, 0}, +{493, 996786317u, 0u, 996786317u, 0, LDEXPF_TOLERANCE, 0}, +{494, 3461635065u, 0u, 3461635065u, 0, LDEXPF_TOLERANCE, 0}, +{495, 3290079438u, 0u, 3290079438u, 0, LDEXPF_TOLERANCE, 0}, +{496, 3350690327u, 0u, 3350690327u, 0, LDEXPF_TOLERANCE, 0}, +{497, 1102061604u, 4253821380u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{498, 1282351521u, 0u, 1282351521u, 0, LDEXPF_TOLERANCE, 0}, +{499, 3095256878u, 0u, 3095256878u, 0, LDEXPF_TOLERANCE, 0}, +{500, 3163373610u, 0u, 3163373610u, 0, LDEXPF_TOLERANCE, 0}, +{501, 3228793330u, 0u, 3228793330u, 0, LDEXPF_TOLERANCE, 0}, +{502, 3422194733u, 0u, 3422194733u, 0, LDEXPF_TOLERANCE, 0}, +{503, 3083885296u, 0u, 3083885296u, 0, LDEXPF_TOLERANCE, 0}, +{504, 1261940623u, 4288291120u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{505, 3400603081u, 4294967290u, 3350271433u, 0, LDEXPF_TOLERANCE, 0}, +{506, 1219411812u, 0u, 1219411812u, 0, LDEXPF_TOLERANCE, 0}, +{507, 3094833770u, 0u, 3094833770u, 0, LDEXPF_TOLERANCE, 0}, +{508, 3139250800u, 0u, 3139250800u, 0, LDEXPF_TOLERANCE, 0}, +{509, 886201503u, 4294967150u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{510, 3297366026u, 7u, 3356086282u, 0, LDEXPF_TOLERANCE, 0}, +{511, 1218488455u, 4294964141u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{512, 3040358923u, 0u, 3040358923u, 0, LDEXPF_TOLERANCE, 0}, +{513, 3182551696u, 0u, 3182551696u, 0, LDEXPF_TOLERANCE, 0}, +{514, 1317098613u, 0u, 1317098613u, 0, LDEXPF_TOLERANCE, 0}, +{515, 3431703657u, 0u, 3431703657u, 0, LDEXPF_TOLERANCE, 0}, +{516, 3239728775u, 0u, 3239728775u, 0, LDEXPF_TOLERANCE, 0}, +{517, 3207141672u, 0u, 3207141672u, 0, LDEXPF_TOLERANCE, 0}, +{518, 3154378805u, 0u, 3154378805u, 0, LDEXPF_TOLERANCE, 0}, +{519, 3069658155u, 0u, 3069658155u, 0, LDEXPF_TOLERANCE, 0}, +{520, 3313160088u, 0u, 3313160088u, 0, LDEXPF_TOLERANCE, 0}, +{521, 1284174954u, 4180334231u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{522, 1063693032u, 0u, 1063693032u, 0, LDEXPF_TOLERANCE, 0}, +{523, 1102631663u, 4290881696u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{524, 968803479u, 0u, 968803479u, 0, LDEXPF_TOLERANCE, 0}, +{525, 3273080388u, 0u, 3273080388u, 0, LDEXPF_TOLERANCE, 0}, +{526, 1172529774u, 4294966405u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{527, 1078478376u, 2364151806u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{528, 3158855023u, 0u, 3158855023u, 0, LDEXPF_TOLERANCE, 0}, +{529, 1165177679u, 4294967097u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{530, 952348506u, 4294108410u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{531, 1325324763u, 0u, 1325324763u, 0, LDEXPF_TOLERANCE, 0}, +{532, 3363524213u, 0u, 3363524213u, 0, LDEXPF_TOLERANCE, 0}, +{533, 1158950321u, 1u, 1167338929u, 0, LDEXPF_TOLERANCE, 0}, +{534, 903129873u, 4272788451u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{535, 3078339944u, 0u, 3078339944u, 0, LDEXPF_TOLERANCE, 0}, +{536, 1153863988u, 4229464462u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{537, 1235620969u, 0u, 1235620969u, 0, LDEXPF_TOLERANCE, 0}, +{538, 1097120930u, 4294967294u, 1080343714u, 0, LDEXPF_TOLERANCE, 0}, +{539, 1147712200u, 0u, 1147712200u, 0, LDEXPF_TOLERANCE, 0}, +{540, 1124721745u, 0u, 1124721745u, 0, LDEXPF_TOLERANCE, 0}, +{541, 3261744304u, 0u, 3261744304u, 0, LDEXPF_TOLERANCE, 0}, +{542, 3303160152u, 0u, 3303160152u, 0, LDEXPF_TOLERANCE, 0}, +{543, 1335399673u, 0u, 1335399673u, 0, LDEXPF_TOLERANCE, 0}, +{544, 1072458508u, 4294404660u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{545, 3303015249u, 0u, 3303015249u, 0, LDEXPF_TOLERANCE, 0}, +{546, 3252139741u, 0u, 3252139741u, 0, LDEXPF_TOLERANCE, 0}, +{547, 3468519966u, 0u, 3468519966u, 0, LDEXPF_TOLERANCE, 0}, +{548, 1006231203u, 0u, 1006231203u, 0, LDEXPF_TOLERANCE, 0}, +{549, 951554138u, 0u, 951554138u, 0, LDEXPF_TOLERANCE, 0}, +{550, 942046828u, 0u, 942046828u, 0, LDEXPF_TOLERANCE, 0}, +{551, 3255104167u, 0u, 3255104167u, 0, LDEXPF_TOLERANCE, 0}, +{552, 1155477903u, 0u, 1155477903u, 0, LDEXPF_TOLERANCE, 0}, +{553, 3273889176u, 0u, 3273889176u, 0, LDEXPF_TOLERANCE, 0}, +{554, 1228207362u, 0u, 1228207362u, 0, LDEXPF_TOLERANCE, 0}, +{555, 1290175785u, 0u, 1290175785u, 0, LDEXPF_TOLERANCE, 0}, +{556, 981908840u, 4294962938u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{557, 941187647u, 33u, 1218011711u, 0, LDEXPF_TOLERANCE, 0}, +{558, 1214223128u, 4294967293u, 1189057304u, 0, LDEXPF_TOLERANCE, 0}, +{559, 3422922584u, 6u, 3473254232u, 0, LDEXPF_TOLERANCE, 0}, +{560, 3453226030u, 4294967291u, 3411282990u, 0, LDEXPF_TOLERANCE, 0}, +{561, 1078359574u, 0u, 1078359574u, 0, LDEXPF_TOLERANCE, 0}, +{562, 1029557624u, 4294965511u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{563, 1207675424u, 0u, 1207675424u, 0, LDEXPF_TOLERANCE, 0}, +{564, 1028355074u, 4113313406u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{565, 1248421894u, 4294582111u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{566, 3353251994u, 12u, 3453915290u, 0, LDEXPF_TOLERANCE, 0}, +{567, 876926659u, 4294966792u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{568, 1076752219u, 0u, 1076752219u, 0, LDEXPF_TOLERANCE, 0}, +{569, 3388531942u, 0u, 3388531942u, 0, LDEXPF_TOLERANCE, 0}, +{570, 1273395082u, 0u, 1273395082u, 0, LDEXPF_TOLERANCE, 0}, +{571, 1161241793u, 2814016219u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{572, 3034494183u, 0u, 3034494183u, 0, LDEXPF_TOLERANCE, 0}, +{573, 1171318485u, 4294306215u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{574, 3047748143u, 0u, 3047748143u, 0, LDEXPF_TOLERANCE, 0}, +{575, 1001216371u, 0u, 1001216371u, 0, LDEXPF_TOLERANCE, 0}, +{576, 912515889u, 2u, 929293105u, 0, LDEXPF_TOLERANCE, 0}, +{577, 3391452505u, 0u, 3391452505u, 0, LDEXPF_TOLERANCE, 0}, +{578, 3249603369u, 0u, 3249603369u, 0, LDEXPF_TOLERANCE, 0}, +{579, 1220264047u, 0u, 1220264047u, 0, LDEXPF_TOLERANCE, 0}, +{580, 3169816394u, 0u, 3169816394u, 0, LDEXPF_TOLERANCE, 0}, +{581, 3098997418u, 0u, 3098997418u, 0, LDEXPF_TOLERANCE, 0}, +{582, 3282212423u, 0u, 3282212423u, 0, LDEXPF_TOLERANCE, 0}, +{583, 3352293320u, 4294967278u, 3201298376u, 0, LDEXPF_TOLERANCE, 0}, +{584, 3296358441u, 0u, 3296358441u, 0, LDEXPF_TOLERANCE, 0}, +{585, 1197828352u, 4294967281u, 1071999232u, 0, LDEXPF_TOLERANCE, 0}, +{586, 3340510371u, 0u, 3340510371u, 0, LDEXPF_TOLERANCE, 0}, +{587, 1127109339u, 4294570975u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{588, 1200599955u, 0u, 1200599955u, 0, LDEXPF_TOLERANCE, 0}, +{589, 962230977u, 0u, 962230977u, 0, LDEXPF_TOLERANCE, 0}, +{590, 3192887808u, 0u, 3192887808u, 0, LDEXPF_TOLERANCE, 0}, +{591, 3237183876u, 0u, 3237183876u, 0, LDEXPF_TOLERANCE, 0}, +{592, 939285924u, 0u, 939285924u, 0, LDEXPF_TOLERANCE, 0}, +{593, 944050180u, 3871652138u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{594, 3058135703u, 0u, 3058135703u, 0, LDEXPF_TOLERANCE, 0}, +{595, 1003299981u, 0u, 1003299981u, 0, LDEXPF_TOLERANCE, 0}, +{596, 1234491880u, 4283784819u, 0u, 0, LDEXPF_TOLERANCE, 0}, +{597, 1107800421u, 0u, 1107800421u, 0, LDEXPF_TOLERANCE, 0}, +{598, 3169600404u, 0u, 3169600404u, 0, LDEXPF_TOLERANCE, 0}, +{599, 1059745845u, 0u, 1059745845u, 0, LDEXPF_TOLERANCE, 0}, +{600, 3336642868u, 0u, 3336642868u, 0, LDEXPF_TOLERANCE, 0}, +{601, 1143165709u, 0u, 1143165709u, 0, LDEXPF_TOLERANCE, 0}, +{602, 3094884021u, 0u, 3094884021u, 0, LDEXPF_TOLERANCE, 0}, +{603, 875429471u, 0u, 875429471u, 0, LDEXPF_TOLERANCE, 0}, +{604, 1191396289u, 0u, 1191396289u, 0, LDEXPF_TOLERANCE, 0}, +{605, 1228663872u, 0u, 1228663872u, 0, LDEXPF_TOLERANCE, 0}, +{606, 1070971843u, 0u, 1070971843u, 0, LDEXPF_TOLERANCE, 0}, +{607, 3364208877u, 0u, 3364208877u, 0, LDEXPF_TOLERANCE, 0}, +{608, 3181522772u, 0u, 3181522772u, 0, LDEXPF_TOLERANCE, 0}, +{609, 1243001035u, 0u, 1243001035u, 0, LDEXPF_TOLERANCE, 0}, +{610, 1341514497u, 0u, 1341514497u, 0, LDEXPF_TOLERANCE, 0}, +{611, 880168139u, 0u, 880168139u, 0, LDEXPF_TOLERANCE, 0}, +{612, 3304288294u, 0u, 3304288294u, 0, LDEXPF_TOLERANCE, 0}, +{613, 1026899743u, 0u, 1026899743u, 0, LDEXPF_TOLERANCE, 0}, +{614, 999981605u, 0u, 999981605u, 0, LDEXPF_TOLERANCE, 0}, +{615, 997294135u, 0u, 997294135u, 0, LDEXPF_TOLERANCE, 0}, +{616, 1021132553u, 0u, 1021132553u, 0, LDEXPF_TOLERANCE, 0}, +{617, 3209276375u, 0u, 3209276375u, 0, LDEXPF_TOLERANCE, 0}, +{618, 1202227751u, 0u, 1202227751u, 0, LDEXPF_TOLERANCE, 0}, +{619, 1009711807u, 0u, 1009711807u, 0, LDEXPF_TOLERANCE, 0}, +{620, 1220134117u, 0u, 1220134117u, 0, LDEXPF_TOLERANCE, 0}, +{621, 3479973529u, 0u, 3479973529u, 0, LDEXPF_TOLERANCE, 0}, +{622, 1064880944u, 0u, 1064880944u, 0, LDEXPF_TOLERANCE, 0}, +{623, 3155671716u, 0u, 3155671716u, 0, LDEXPF_TOLERANCE, 0}, +{624, 998312904u, 0u, 998312904u, 0, LDEXPF_TOLERANCE, 0}, +{625, 1001472780u, 0u, 1001472780u, 0, LDEXPF_TOLERANCE, 0}, +{626, 1107406396u, 0u, 1107406396u, 0, LDEXPF_TOLERANCE, 0}, +{627, 1261071232u, 0u, 1261071232u, 0, LDEXPF_TOLERANCE, 0}, +{628, 3143571932u, 0u, 3143571932u, 0, LDEXPF_TOLERANCE, 0}, +{629, 1118055178u, 0u, 1118055178u, 0, LDEXPF_TOLERANCE, 0}, +{630, 3182301130u, 0u, 3182301130u, 0, LDEXPF_TOLERANCE, 0}, +{631, 3368273682u, 0u, 3368273682u, 0, LDEXPF_TOLERANCE, 0}, +{632, 3428016856u, 0u, 3428016856u, 0, LDEXPF_TOLERANCE, 0}, +{633, 3417964312u, 0u, 3417964312u, 0, LDEXPF_TOLERANCE, 0}, +{634, 3033865687u, 0u, 3033865687u, 0, LDEXPF_TOLERANCE, 0}, +{635, 3254565724u, 0u, 3254565724u, 0, LDEXPF_TOLERANCE, 0}, +{636, 1152956913u, 0u, 1152956913u, 0, LDEXPF_TOLERANCE, 0}, +{637, 960907115u, 0u, 960907115u, 0, LDEXPF_TOLERANCE, 0}, +{638, 3193128520u, 0u, 3193128520u, 0, LDEXPF_TOLERANCE, 0}, +{639, 1342075843u, 0u, 1342075843u, 0, LDEXPF_TOLERANCE, 0}, +{640, 1285620759u, 0u, 1285620759u, 0, LDEXPF_TOLERANCE, 0}, +{641, 3194665484u, 0u, 3194665484u, 0, LDEXPF_TOLERANCE, 0}, +{642, 3367275355u, 0u, 3367275355u, 0, LDEXPF_TOLERANCE, 0}, +{643, 874952611u, 0u, 874952611u, 0, LDEXPF_TOLERANCE, 0}, +{644, 3267754884u, 0u, 3267754884u, 0, LDEXPF_TOLERANCE, 0}, +{645, 3152729489u, 0u, 3152729489u, 0, LDEXPF_TOLERANCE, 0}, +{646, 889017820u, 0u, 889017820u, 0, LDEXPF_TOLERANCE, 0}, +{647, 3299847679u, 0u, 3299847679u, 0, LDEXPF_TOLERANCE, 0}, +{648, 1247838175u, 0u, 1247838175u, 0, LDEXPF_TOLERANCE, 0}, +{649, 3320990807u, 0u, 3320990807u, 0, LDEXPF_TOLERANCE, 0}, +{650, 3050540527u, 0u, 3050540527u, 0, LDEXPF_TOLERANCE, 0}, +{651, 1201844223u, 0u, 1201844223u, 0, LDEXPF_TOLERANCE, 0}, +{652, 918937712u, 0u, 918937712u, 0, LDEXPF_TOLERANCE, 0}, +{653, 3123925950u, 0u, 3123925950u, 0, LDEXPF_TOLERANCE, 0}, +{654, 3196511197u, 0u, 3196511197u, 0, LDEXPF_TOLERANCE, 0}, +{655, 973211154u, 0u, 973211154u, 0, LDEXPF_TOLERANCE, 0}, +{656, 1255152035u, 0u, 1255152035u, 0, LDEXPF_TOLERANCE, 0}, +{657, 3232461888u, 0u, 3232461888u, 0, LDEXPF_TOLERANCE, 0}, +{658, 1229904697u, 0u, 1229904697u, 0, LDEXPF_TOLERANCE, 0}, +{659, 3190708309u, 0u, 3190708309u, 0, LDEXPF_TOLERANCE, 0}, +{660, 1062714323u, 0u, 1062714323u, 0, LDEXPF_TOLERANCE, 0}, +{661, 1266014197u, 0u, 1266014197u, 0, LDEXPF_TOLERANCE, 0}, +{662, 3358918989u, 0u, 3358918989u, 0, LDEXPF_TOLERANCE, 0}, +{663, 1197322308u, 0u, 1197322308u, 0, LDEXPF_TOLERANCE, 0}, +{664, 896467500u, 0u, 896467500u, 0, LDEXPF_TOLERANCE, 0}, +{665, 3375078440u, 0u, 3375078440u, 0, LDEXPF_TOLERANCE, 0}, +{666, 3424479544u, 0u, 3424479544u, 0, LDEXPF_TOLERANCE, 0}, +{667, 3187924230u, 0u, 3187924230u, 0, LDEXPF_TOLERANCE, 0}, +{668, 1025254314u, 0u, 1025254314u, 0, LDEXPF_TOLERANCE, 0}, +{669, 899599265u, 0u, 899599265u, 0, LDEXPF_TOLERANCE, 0}, +{670, 1298319097u, 0u, 1298319097u, 0, LDEXPF_TOLERANCE, 0}, +{671, 3211795254u, 0u, 3211795254u, 0, LDEXPF_TOLERANCE, 0}, +{672, 3346354159u, 0u, 3346354159u, 0, LDEXPF_TOLERANCE, 0}, +{673, 1200574709u, 0u, 1200574709u, 0, LDEXPF_TOLERANCE, 0}, +{674, 1271583043u, 0u, 1271583043u, 0, LDEXPF_TOLERANCE, 0}, +{675, 3082939266u, 0u, 3082939266u, 0, LDEXPF_TOLERANCE, 0}, +{676, 1310205466u, 0u, 1310205466u, 0, LDEXPF_TOLERANCE, 0}, +{677, 3363424163u, 0u, 3363424163u, 0, LDEXPF_TOLERANCE, 0}, +{678, 3480831693u, 0u, 3480831693u, 0, LDEXPF_TOLERANCE, 0}, +{679, 3076016307u, 0u, 3076016307u, 0, LDEXPF_TOLERANCE, 0}, +{680, 3203273256u, 0u, 3203273256u, 0, LDEXPF_TOLERANCE, 0}, +{681, 1015309679u, 0u, 1015309679u, 0, LDEXPF_TOLERANCE, 0}, +{682, 1131196082u, 0u, 1131196082u, 0, LDEXPF_TOLERANCE, 0}, +{683, 1045325026u, 0u, 1045325026u, 0, LDEXPF_TOLERANCE, 0}, +{684, 1065479977u, 0u, 1065479977u, 0, LDEXPF_TOLERANCE, 0}, +{685, 1189296917u, 0u, 1189296917u, 0, LDEXPF_TOLERANCE, 0}, +{686, 3189815506u, 0u, 3189815506u, 0, LDEXPF_TOLERANCE, 0}, +{687, 1080781593u, 0u, 1080781593u, 0, LDEXPF_TOLERANCE, 0}, +{688, 1311096557u, 0u, 1311096557u, 0, LDEXPF_TOLERANCE, 0}, +{689, 3038739020u, 0u, 3038739020u, 0, LDEXPF_TOLERANCE, 0}, +{690, 3214499901u, 0u, 3214499901u, 0, LDEXPF_TOLERANCE, 0}, +{691, 3138742876u, 0u, 3138742876u, 0, LDEXPF_TOLERANCE, 0}, +{692, 1321846889u, 0u, 1321846889u, 0, LDEXPF_TOLERANCE, 0}, +{693, 3271921642u, 0u, 3271921642u, 0, LDEXPF_TOLERANCE, 0}, +{694, 3085495739u, 0u, 3085495739u, 0, LDEXPF_TOLERANCE, 0}, +{695, 1109198803u, 0u, 1109198803u, 0, LDEXPF_TOLERANCE, 0}, +{696, 1112304750u, 0u, 1112304750u, 0, LDEXPF_TOLERANCE, 0}, +{697, 948750709u, 0u, 948750709u, 0, LDEXPF_TOLERANCE, 0}, +{698, 1114296298u, 0u, 1114296298u, 0, LDEXPF_TOLERANCE, 0}, +{699, 3020991237u, 0u, 3020991237u, 0, LDEXPF_TOLERANCE, 0}, +{700, 922534144u, 0u, 922534144u, 0, LDEXPF_TOLERANCE, 0}, +{701, 3310166637u, 0u, 3310166637u, 0, LDEXPF_TOLERANCE, 0}, +{702, 3155722650u, 0u, 3155722650u, 0, LDEXPF_TOLERANCE, 0}, +{703, 3427296372u, 0u, 3427296372u, 0, LDEXPF_TOLERANCE, 0}, +{704, 1151399844u, 0u, 1151399844u, 0, LDEXPF_TOLERANCE, 0}, +{705, 1120299263u, 0u, 1120299263u, 0, LDEXPF_TOLERANCE, 0}, +{706, 3040459077u, 0u, 3040459077u, 0, LDEXPF_TOLERANCE, 0}, +{707, 1103929401u, 0u, 1103929401u, 0, LDEXPF_TOLERANCE, 0}, +{708, 1152548998u, 0u, 1152548998u, 0, LDEXPF_TOLERANCE, 0}, +{709, 916942572u, 0u, 916942572u, 0, LDEXPF_TOLERANCE, 0}, +{710, 3173458455u, 0u, 3173458455u, 0, LDEXPF_TOLERANCE, 0}, +{711, 3238936406u, 0u, 3238936406u, 0, LDEXPF_TOLERANCE, 0}, +{712, 3408617686u, 0u, 3408617686u, 0, LDEXPF_TOLERANCE, 0}, +{713, 1021296799u, 0u, 1021296799u, 0, LDEXPF_TOLERANCE, 0}, +{714, 969339922u, 0u, 969339922u, 0, LDEXPF_TOLERANCE, 0}, +{715, 1314176876u, 0u, 1314176876u, 0, LDEXPF_TOLERANCE, 0}, +{716, 1337612088u, 0u, 1337612088u, 0, LDEXPF_TOLERANCE, 0}, +{717, 3332259981u, 0u, 3332259981u, 0, LDEXPF_TOLERANCE, 0}, +{718, 3108384823u, 0u, 3108384823u, 0, LDEXPF_TOLERANCE, 0}, +{719, 3220961947u, 0u, 3220961947u, 0, LDEXPF_TOLERANCE, 0}, +{720, 3064419690u, 0u, 3064419690u, 0, LDEXPF_TOLERANCE, 0}, +{721, 940691906u, 0u, 940691906u, 0, LDEXPF_TOLERANCE, 0}, +{722, 1231810213u, 0u, 1231810213u, 0, LDEXPF_TOLERANCE, 0}, +{723, 1287877759u, 0u, 1287877759u, 0, LDEXPF_TOLERANCE, 0}, +{724, 3489122735u, 0u, 3489122735u, 0, LDEXPF_TOLERANCE, 0}, +{725, 1093869145u, 0u, 1093869145u, 0, LDEXPF_TOLERANCE, 0}, +{726, 3076769896u, 0u, 3076769896u, 0, LDEXPF_TOLERANCE, 0}, +{727, 1103636269u, 0u, 1103636269u, 0, LDEXPF_TOLERANCE, 0}, +{728, 1175158938u, 0u, 1175158938u, 0, LDEXPF_TOLERANCE, 0}, +{729, 3300166369u, 0u, 3300166369u, 0, LDEXPF_TOLERANCE, 0}, +{730, 1139120919u, 0u, 1139120919u, 0, LDEXPF_TOLERANCE, 0}, +{731, 3164744879u, 0u, 3164744879u, 0, LDEXPF_TOLERANCE, 0}, +{732, 1079206005u, 0u, 1079206005u, 0, LDEXPF_TOLERANCE, 0}, +{733, 3274158582u, 0u, 3274158582u, 0, LDEXPF_TOLERANCE, 0}, +{734, 1175743586u, 0u, 1175743586u, 0, LDEXPF_TOLERANCE, 0}, +{735, 3260712581u, 0u, 3260712581u, 0, LDEXPF_TOLERANCE, 0}, +{736, 3260874736u, 0u, 3260874736u, 0, LDEXPF_TOLERANCE, 0}, +{737, 1021540545u, 0u, 1021540545u, 0, LDEXPF_TOLERANCE, 0}, +{738, 938613078u, 0u, 938613078u, 0, LDEXPF_TOLERANCE, 0}, +{739, 915371924u, 0u, 915371924u, 0, LDEXPF_TOLERANCE, 0}, +{740, 3370829512u, 0u, 3370829512u, 0, LDEXPF_TOLERANCE, 0}, +{741, 3042270922u, 0u, 3042270922u, 0, LDEXPF_TOLERANCE, 0}, +{742, 935259591u, 0u, 935259591u, 0, LDEXPF_TOLERANCE, 0}, +{743, 3022705759u, 0u, 3022705759u, 0, LDEXPF_TOLERANCE, 0}, +{744, 1077763691u, 0u, 1077763691u, 0, LDEXPF_TOLERANCE, 0}, +{745, 3479409116u, 0u, 3479409116u, 0, LDEXPF_TOLERANCE, 0}, +{746, 3153568584u, 0u, 3153568584u, 0, LDEXPF_TOLERANCE, 0}, +{747, 1023846821u, 0u, 1023846821u, 0, LDEXPF_TOLERANCE, 0}, +{748, 930761742u, 0u, 930761742u, 0, LDEXPF_TOLERANCE, 0}, +{749, 3041242545u, 0u, 3041242545u, 0, LDEXPF_TOLERANCE, 0}, +{750, 1088950833u, 0u, 1088950833u, 0, LDEXPF_TOLERANCE, 0}, +{751, 3404968330u, 0u, 3404968330u, 0, LDEXPF_TOLERANCE, 0}, +{752, 3081647766u, 0u, 3081647766u, 0, LDEXPF_TOLERANCE, 0}, +{753, 1215278023u, 0u, 1215278023u, 0, LDEXPF_TOLERANCE, 0}, +{754, 1094198050u, 0u, 1094198050u, 0, LDEXPF_TOLERANCE, 0}, +{755, 884566767u, 0u, 884566767u, 0, LDEXPF_TOLERANCE, 0}, +{756, 1248601708u, 0u, 1248601708u, 0, LDEXPF_TOLERANCE, 0}, +{757, 3392876913u, 0u, 3392876913u, 0, LDEXPF_TOLERANCE, 0}, +{758, 892549317u, 0u, 892549317u, 0, LDEXPF_TOLERANCE, 0}, +{759, 3093450711u, 0u, 3093450711u, 0, LDEXPF_TOLERANCE, 0}, +{760, 3469899047u, 0u, 3469899047u, 0, LDEXPF_TOLERANCE, 0}, +{761, 996220168u, 0u, 996220168u, 0, LDEXPF_TOLERANCE, 0}, +{762, 3114161777u, 0u, 3114161777u, 0, LDEXPF_TOLERANCE, 0}, +{763, 1253240637u, 0u, 1253240637u, 0, LDEXPF_TOLERANCE, 0}, +{764, 3343677583u, 0u, 3343677583u, 0, LDEXPF_TOLERANCE, 0}, +{765, 3179241204u, 0u, 3179241204u, 0, LDEXPF_TOLERANCE, 0}, +{766, 3155113426u, 0u, 3155113426u, 0, LDEXPF_TOLERANCE, 0}, +{767, 1031613223u, 0u, 1031613223u, 0, LDEXPF_TOLERANCE, 0}, +{768, 1034712760u, 0u, 1034712760u, 0, LDEXPF_TOLERANCE, 0}, +{769, 1066116543u, 0u, 1066116543u, 0, LDEXPF_TOLERANCE, 0}, +{770, 1186234578u, 0u, 1186234578u, 0, LDEXPF_TOLERANCE, 0}, +{771, 1036186976u, 0u, 1036186976u, 0, LDEXPF_TOLERANCE, 0}, +{772, 3097296874u, 0u, 3097296874u, 0, LDEXPF_TOLERANCE, 0}, +{773, 1045232522u, 0u, 1045232522u, 0, LDEXPF_TOLERANCE, 0}, +{774, 1039321021u, 0u, 1039321021u, 0, LDEXPF_TOLERANCE, 0}, +{775, 3173254520u, 0u, 3173254520u, 0, LDEXPF_TOLERANCE, 0}, +{776, 932998692u, 0u, 932998692u, 0, LDEXPF_TOLERANCE, 0}, +{777, 1171238338u, 0u, 1171238338u, 0, LDEXPF_TOLERANCE, 0}, +{778, 1202333162u, 0u, 1202333162u, 0, LDEXPF_TOLERANCE, 0}, +{779, 1280215674u, 0u, 1280215674u, 0, LDEXPF_TOLERANCE, 0}, +{780, 3211934425u, 0u, 3211934425u, 0, LDEXPF_TOLERANCE, 0}, +{781, 3194999530u, 0u, 3194999530u, 0, LDEXPF_TOLERANCE, 0}, +{782, 3299927364u, 0u, 3299927364u, 0, LDEXPF_TOLERANCE, 0}, +{783, 3250437226u, 0u, 3250437226u, 0, LDEXPF_TOLERANCE, 0}, +{784, 3071118853u, 0u, 3071118853u, 0, LDEXPF_TOLERANCE, 0}, +{785, 3267868136u, 0u, 3267868136u, 0, LDEXPF_TOLERANCE, 0}, +{786, 3123250489u, 0u, 3123250489u, 0, LDEXPF_TOLERANCE, 0}, +{787, 3122362353u, 0u, 3122362353u, 0, LDEXPF_TOLERANCE, 0}, +{788, 3327511577u, 0u, 3327511577u, 0, LDEXPF_TOLERANCE, 0}, +{789, 3020140395u, 0u, 3020140395u, 0, LDEXPF_TOLERANCE, 0}, +{790, 1267995571u, 0u, 1267995571u, 0, LDEXPF_TOLERANCE, 0}, +{791, 3446392517u, 0u, 3446392517u, 0, LDEXPF_TOLERANCE, 0}, +{792, 3034243695u, 0u, 3034243695u, 0, LDEXPF_TOLERANCE, 0}, +{793, 3482416423u, 0u, 3482416423u, 0, LDEXPF_TOLERANCE, 0}, +{794, 3310269251u, 0u, 3310269251u, 0, LDEXPF_TOLERANCE, 0}, +{795, 1058296319u, 0u, 1058296319u, 0, LDEXPF_TOLERANCE, 0}, +{796, 3432295752u, 0u, 3432295752u, 0, LDEXPF_TOLERANCE, 0}, +{797, 1087881449u, 0u, 1087881449u, 0, LDEXPF_TOLERANCE, 0}, +{798, 3374929424u, 0u, 3374929424u, 0, LDEXPF_TOLERANCE, 0}, +{799, 1191811948u, 0u, 1191811948u, 0, LDEXPF_TOLERANCE, 0}, +{800, 3268693154u, 0u, 3268693154u, 0, LDEXPF_TOLERANCE, 0}, +{801, 3366511856u, 0u, 3366511856u, 0, LDEXPF_TOLERANCE, 0}, +{802, 3234857152u, 0u, 3234857152u, 0, LDEXPF_TOLERANCE, 0}, +{803, 3394693181u, 0u, 3394693181u, 0, LDEXPF_TOLERANCE, 0}, +{804, 3322380283u, 0u, 3322380283u, 0, LDEXPF_TOLERANCE, 0}, +{805, 3176526828u, 0u, 3176526828u, 0, LDEXPF_TOLERANCE, 0}, +{806, 962436491u, 0u, 962436491u, 0, LDEXPF_TOLERANCE, 0}, +{807, 1016021534u, 0u, 1016021534u, 0, LDEXPF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LDEXPF_H multiple inclusion protection + +// EOF ldexpf.h diff --git a/packages/language/c/libm/current/tests/vectors/log10f.c b/packages/language/c/libm/current/tests/vectors/log10f.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/log10f.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// log10.c +// +// Test of log10() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/log10f.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(log10f_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &log10f, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &log10f_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("log10f() is stable"); + } // if + else + { + CYG_TEST_FAIL("log10f() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library log10f() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "log10() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF log10.c diff --git a/packages/language/c/libm/current/tests/vectors/log10f.h b/packages/language/c/libm/current/tests/vectors/log10f.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/log10f.h @@ -0,0 +1,875 @@ +#ifndef CYGONCE_LIBM_LOG10_H +#define CYGONCE_LIBM_LOG10_H +//=========================================================================== +// +// log10.h +// +// Test vectors for testing of log10() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/log10.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define LOG10_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t log10f_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{20, 3212836864u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{21, 3212669092u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{22, 3212501320u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{23, 3212333548u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{24, 3212165775u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{25, 3211998003u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{26, 3211830231u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{27, 3211662459u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{28, 3211494687u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{29, 3211326915u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{30, 3211159142u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{31, 3210991370u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{32, 3210823598u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{33, 3210655826u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{34, 3210488054u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{35, 3210320282u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{36, 3210152509u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{37, 3209984737u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{38, 3209816965u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{39, 3209649193u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{40, 3209481421u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{41, 3209313649u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{42, 3209145876u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{43, 3208978104u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{44, 3208810332u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{45, 3208642560u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{46, 3208474788u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{47, 3208307016u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{48, 3208139244u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{49, 3207971471u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{50, 3207803699u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{51, 3207635927u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{52, 3207468155u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{53, 3207300383u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{54, 3207132611u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{55, 3206964838u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{56, 3206797066u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{57, 3206629294u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{58, 3206461522u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{59, 3206293750u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{60, 3206125978u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{61, 3205958205u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{62, 3205790433u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{63, 3205622661u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{64, 3205454889u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{65, 3205287117u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{66, 3205119345u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{67, 3204951572u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{68, 3204783800u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{69, 3204616028u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{70, 3204448256u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{71, 3204112712u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{72, 3203777167u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{73, 3203441623u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{74, 3203106079u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{75, 3202770534u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{76, 3202434990u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{77, 3202099446u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{78, 3201763901u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{79, 3201428357u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{80, 3201092813u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{81, 3200757268u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{82, 3200421724u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{83, 3200086180u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{84, 3199750636u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{85, 3199415091u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{86, 3199079547u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{87, 3198744003u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{88, 3198408458u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{89, 3198072914u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{90, 3197737370u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{91, 3197401825u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{92, 3197066281u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{93, 3196730737u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{94, 3196395192u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{95, 3196059648u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{96, 3195388559u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{97, 3194717471u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{98, 3194046382u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{99, 3193375293u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{100, 3192704205u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{101, 3192033116u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{102, 3191362028u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{103, 3190690939u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{104, 3190019850u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{105, 3189348762u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{106, 3188677673u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{107, 3188006584u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{108, 3186999951u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{109, 3185657774u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{110, 3184315597u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{111, 3182973420u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{112, 3181631242u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{113, 3180289065u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{114, 3178611343u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{115, 3175926989u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{116, 3173242634u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{117, 3170222735u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{118, 3164854026u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{119, 3156465418u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{120, 646742016u, 3245354289u, 3245354289u, 0, LOG10_TOLERANCE, 0}, +{121, 1008981770u, 3221225472u, 3221225472u, 0, LOG10_TOLERANCE, 0}, +{122, 1017370378u, 3218700250u, 3218700250u, 0, LOG10_TOLERANCE, 0}, +{123, 1022739087u, 3217223089u, 3217223089u, 0, LOG10_TOLERANCE, 0}, +{124, 1025758986u, 3216175027u, 3216175027u, 0, LOG10_TOLERANCE, 0}, +{125, 1028443341u, 3215362087u, 3215362087u, 0, LOG10_TOLERANCE, 0}, +{126, 1031127695u, 3214697866u, 3214697866u, 0, LOG10_TOLERANCE, 0}, +{127, 1032805417u, 3214136276u, 3214136276u, 0, LOG10_TOLERANCE, 0}, +{128, 1034147594u, 3213649804u, 3213649804u, 0, LOG10_TOLERANCE, 0}, +{129, 1035489772u, 3213220706u, 3213220706u, 0, LOG10_TOLERANCE, 0}, +{130, 1036831949u, 3212836864u, 3212836864u, 0, LOG10_TOLERANCE, 0}, +{131, 1038174126u, 3212142410u, 3212142410u, 0, LOG10_TOLERANCE, 0}, +{132, 1039516303u, 3211508423u, 3211508423u, 0, LOG10_TOLERANCE, 0}, +{133, 1040522936u, 3210925212u, 3210925212u, 0, LOG10_TOLERANCE, 0}, +{134, 1041194025u, 3210385242u, 3210385242u, 0, LOG10_TOLERANCE, 0}, +{135, 1041865114u, 3209882543u, 3209882543u, 0, LOG10_TOLERANCE, 0}, +{136, 1042536202u, 3209412299u, 3209412299u, 0, LOG10_TOLERANCE, 0}, +{137, 1043207291u, 3208970573u, 3208970573u, 0, LOG10_TOLERANCE, 0}, +{138, 1043878380u, 3208554102u, 3208554102u, 0, LOG10_TOLERANCE, 0}, +{139, 1044549468u, 3208160155u, 3208160155u, 0, LOG10_TOLERANCE, 0}, +{140, 1045220557u, 3207786419u, 3207786419u, 0, LOG10_TOLERANCE, 0}, +{141, 1045891645u, 3207430922u, 3207430922u, 0, LOG10_TOLERANCE, 0}, +{142, 1046562734u, 3207091965u, 3207091965u, 0, LOG10_TOLERANCE, 0}, +{143, 1047233823u, 3206768078u, 3206768078u, 0, LOG10_TOLERANCE, 0}, +{144, 1047904911u, 3206457978u, 3206457978u, 0, LOG10_TOLERANCE, 0}, +{145, 1048576000u, 3206160539u, 3206160539u, 0, LOG10_TOLERANCE, 0}, +{146, 1048911544u, 3205874767u, 3205874767u, 0, LOG10_TOLERANCE, 0}, +{147, 1049247089u, 3205599781u, 3205599781u, 0, LOG10_TOLERANCE, 0}, +{148, 1049582633u, 3205334797u, 3205334797u, 0, LOG10_TOLERANCE, 0}, +{149, 1049918177u, 3205079113u, 3205079113u, 0, LOG10_TOLERANCE, 0}, +{150, 1050253722u, 3204832097u, 3204832097u, 0, LOG10_TOLERANCE, 0}, +{151, 1050589266u, 3204593183u, 3204593183u, 0, LOG10_TOLERANCE, 0}, +{152, 1050924810u, 3204275452u, 3204275452u, 0, LOG10_TOLERANCE, 0}, +{153, 1051260355u, 3203827031u, 3203827031u, 0, LOG10_TOLERANCE, 0}, +{154, 1051595899u, 3203391999u, 3203391999u, 0, LOG10_TOLERANCE, 0}, +{155, 1051931443u, 3202969578u, 3202969578u, 0, LOG10_TOLERANCE, 0}, +{156, 1052266988u, 3202559057u, 3202559057u, 0, LOG10_TOLERANCE, 0}, +{157, 1052602532u, 3202159786u, 3202159786u, 0, LOG10_TOLERANCE, 0}, +{158, 1052938076u, 3201771163u, 3201771163u, 0, LOG10_TOLERANCE, 0}, +{159, 1053273620u, 3201392635u, 3201392635u, 0, LOG10_TOLERANCE, 0}, +{160, 1053609165u, 3201023691u, 3201023691u, 0, LOG10_TOLERANCE, 0}, +{161, 1053944709u, 3200663858u, 3200663858u, 0, LOG10_TOLERANCE, 0}, +{162, 1054280253u, 3200312697u, 3200312697u, 0, LOG10_TOLERANCE, 0}, +{163, 1054615798u, 3199969798u, 3199969798u, 0, LOG10_TOLERANCE, 0}, +{164, 1054951342u, 3199634783u, 3199634783u, 0, LOG10_TOLERANCE, 0}, +{165, 1055286886u, 3199307297u, 3199307297u, 0, LOG10_TOLERANCE, 0}, +{166, 1055622431u, 3198987009u, 3198987009u, 0, LOG10_TOLERANCE, 0}, +{167, 1055957975u, 3198673610u, 3198673610u, 0, LOG10_TOLERANCE, 0}, +{168, 1056293519u, 3198366810u, 3198366810u, 0, LOG10_TOLERANCE, 0}, +{169, 1056629064u, 3198066334u, 3198066334u, 0, LOG10_TOLERANCE, 0}, +{170, 1056964608u, 3197771931u, 3197771931u, 0, LOG10_TOLERANCE, 0}, +{171, 1057132380u, 3197483357u, 3197483357u, 0, LOG10_TOLERANCE, 0}, +{172, 1057300152u, 3197200387u, 3197200387u, 0, LOG10_TOLERANCE, 0}, +{173, 1057467924u, 3196922807u, 3196922807u, 0, LOG10_TOLERANCE, 0}, +{174, 1057635697u, 3196650415u, 3196650415u, 0, LOG10_TOLERANCE, 0}, +{175, 1057803469u, 3196383022u, 3196383022u, 0, LOG10_TOLERANCE, 0}, +{176, 1057971241u, 3196120448u, 3196120448u, 0, LOG10_TOLERANCE, 0}, +{177, 1058139013u, 3195665393u, 3195665393u, 0, LOG10_TOLERANCE, 0}, +{178, 1058306785u, 3195158511u, 3195158511u, 0, LOG10_TOLERANCE, 0}, +{179, 1058474557u, 3194660294u, 3194660294u, 0, LOG10_TOLERANCE, 0}, +{180, 1058642330u, 3194170449u, 3194170449u, 0, LOG10_TOLERANCE, 0}, +{181, 1058810102u, 3193688703u, 3193688703u, 0, LOG10_TOLERANCE, 0}, +{182, 1058977874u, 3193214790u, 3193214790u, 0, LOG10_TOLERANCE, 0}, +{183, 1059145646u, 3192748460u, 3192748460u, 0, LOG10_TOLERANCE, 0}, +{184, 1059313418u, 3192289475u, 3192289475u, 0, LOG10_TOLERANCE, 0}, +{185, 1059481190u, 3191837605u, 3191837605u, 0, LOG10_TOLERANCE, 0}, +{186, 1059648963u, 3191392633u, 3191392633u, 0, LOG10_TOLERANCE, 0}, +{187, 1059816735u, 3190954354u, 3190954354u, 0, LOG10_TOLERANCE, 0}, +{188, 1059984507u, 3190522569u, 3190522569u, 0, LOG10_TOLERANCE, 0}, +{189, 1060152279u, 3190097087u, 3190097087u, 0, LOG10_TOLERANCE, 0}, +{190, 1060320051u, 3189677727u, 3189677727u, 0, LOG10_TOLERANCE, 0}, +{191, 1060487823u, 3189264315u, 3189264315u, 0, LOG10_TOLERANCE, 0}, +{192, 1060655596u, 3188856685u, 3188856685u, 0, LOG10_TOLERANCE, 0}, +{193, 1060823368u, 3188454679u, 3188454679u, 0, LOG10_TOLERANCE, 0}, +{194, 1060991140u, 3188058142u, 3188058142u, 0, LOG10_TOLERANCE, 0}, +{195, 1061158912u, 3187662818u, 3187662818u, 0, LOG10_TOLERANCE, 0}, +{196, 1061326684u, 3186890754u, 3186890754u, 0, LOG10_TOLERANCE, 0}, +{197, 1061494456u, 3186128782u, 3186128782u, 0, LOG10_TOLERANCE, 0}, +{198, 1061662228u, 3185376643u, 3185376643u, 0, LOG10_TOLERANCE, 0}, +{199, 1061830001u, 3184634082u, 3184634082u, 0, LOG10_TOLERANCE, 0}, +{200, 1061997773u, 3183900865u, 3183900865u, 0, LOG10_TOLERANCE, 0}, +{201, 1062165545u, 3183176757u, 3183176757u, 0, LOG10_TOLERANCE, 0}, +{202, 1062333317u, 3182461534u, 3182461534u, 0, LOG10_TOLERANCE, 0}, +{203, 1062501089u, 3181754980u, 3181754980u, 0, LOG10_TOLERANCE, 0}, +{204, 1062668861u, 3181056888u, 3181056888u, 0, LOG10_TOLERANCE, 0}, +{205, 1062836634u, 3180367054u, 3180367054u, 0, LOG10_TOLERANCE, 0}, +{206, 1063004406u, 3179685292u, 3179685292u, 0, LOG10_TOLERANCE, 0}, +{207, 1063172178u, 3178740393u, 3178740393u, 0, LOG10_TOLERANCE, 0}, +{208, 1063339950u, 3177408035u, 3177408035u, 0, LOG10_TOLERANCE, 0}, +{209, 1063507722u, 3176090734u, 3176090734u, 0, LOG10_TOLERANCE, 0}, +{210, 1063675494u, 3174788151u, 3174788151u, 0, LOG10_TOLERANCE, 0}, +{211, 1063843267u, 3173499955u, 3173499955u, 0, LOG10_TOLERANCE, 0}, +{212, 1064011039u, 3172225844u, 3172225844u, 0, LOG10_TOLERANCE, 0}, +{213, 1064178811u, 3170965510u, 3170965510u, 0, LOG10_TOLERANCE, 0}, +{214, 1064346583u, 3168543482u, 3168543482u, 0, LOG10_TOLERANCE, 0}, +{215, 1064514355u, 3166076159u, 3166076159u, 0, LOG10_TOLERANCE, 0}, +{216, 1064682127u, 3163634672u, 3163634672u, 0, LOG10_TOLERANCE, 0}, +{217, 1064849900u, 3159931729u, 3159931729u, 0, LOG10_TOLERANCE, 0}, +{218, 1065017672u, 3155148921u, 3155148921u, 0, LOG10_TOLERANCE, 0}, +{219, 1065185444u, 3146712732u, 3146712732u, 0, LOG10_TOLERANCE, 0}, +{220, 1065353216u, 0u, 0u, 0, LOG10_TOLERANCE, 0}, +{221, 1065437102u, 999135815u, 999135815u, 0, LOG10_TOLERANCE, 0}, +{222, 1065520988u, 1007478707u, 1007478707u, 0, LOG10_TOLERANCE, 0}, +{223, 1065604874u, 1012028204u, 1012028204u, 0, LOG10_TOLERANCE, 0}, +{224, 1065688760u, 1015777656u, 1015777656u, 0, LOG10_TOLERANCE, 0}, +{225, 1065772646u, 1018008867u, 1018008867u, 0, LOG10_TOLERANCE, 0}, +{226, 1065856532u, 1020218930u, 1020218930u, 0, LOG10_TOLERANCE, 0}, +{227, 1065940419u, 1022408268u, 1022408268u, 0, LOG10_TOLERANCE, 0}, +{228, 1066024305u, 1023993694u, 1023993694u, 0, LOG10_TOLERANCE, 0}, +{229, 1066108191u, 1025068170u, 1025068170u, 0, LOG10_TOLERANCE, 0}, +{230, 1066192077u, 1026132835u, 1026132835u, 0, LOG10_TOLERANCE, 0}, +{231, 1066275963u, 1027187863u, 1027187863u, 0, LOG10_TOLERANCE, 0}, +{232, 1066359849u, 1028233432u, 1028233432u, 0, LOG10_TOLERANCE, 0}, +{233, 1066443735u, 1029269702u, 1029269702u, 0, LOG10_TOLERANCE, 0}, +{234, 1066527621u, 1030296848u, 1030296848u, 0, LOG10_TOLERANCE, 0}, +{235, 1066611507u, 1031315018u, 1031315018u, 0, LOG10_TOLERANCE, 0}, +{236, 1066695393u, 1032061580u, 1032061580u, 0, LOG10_TOLERANCE, 0}, +{237, 1066779279u, 1032561925u, 1032561925u, 0, LOG10_TOLERANCE, 0}, +{238, 1066863165u, 1033058013u, 1033058013u, 0, LOG10_TOLERANCE, 0}, +{239, 1066947052u, 1033549920u, 1033549920u, 0, LOG10_TOLERANCE, 0}, +{240, 3234402267u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{241, 3231108068u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{242, 3226013659u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{243, 3217625051u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{244, 0u, 1115684864u, 4286578688u, EDOM, LOG10_TOLERANCE, 0}, +{245, 1070141403u, 1044960167u, 1044960167u, 0, LOG10_TOLERANCE, 0}, +{246, 1078530011u, 1056868974u, 1056868974u, 0, LOG10_TOLERANCE, 0}, +{247, 1083624420u, 1059871112u, 1059871112u, 0, LOG10_TOLERANCE, 0}, +{248, 3253731328u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{249, 3252840038u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{250, 3251948749u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{251, 3251057459u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{252, 3250166170u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{253, 3249274880u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{254, 3248383590u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{255, 3247492301u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{256, 3246601011u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{257, 3245028147u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{258, 3243245568u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{259, 3241462989u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{260, 3239680410u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{261, 3237792973u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{262, 3234227814u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{263, 3230662656u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{264, 3224580915u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{265, 3213675725u, 1115684864u, 2143289344u, EDOM, LOG10_TOLERANCE, 0}, +{266, 1058642330u, 3194170449u, 3194170449u, 0, LOG10_TOLERANCE, 0}, +{267, 1075000115u, 1052324964u, 1052324964u, 0, LOG10_TOLERANCE, 0}, +{268, 1082130432u, 1058676891u, 1058676891u, 0, LOG10_TOLERANCE, 0}, +{269, 1085695590u, 1061257475u, 1061257475u, 0, LOG10_TOLERANCE, 0}, +{270, 1089260749u, 1063159288u, 1063159288u, 0, LOG10_TOLERANCE, 0}, +{271, 1091672474u, 1064666045u, 1064666045u, 0, LOG10_TOLERANCE, 0}, +{272, 1093455053u, 1065633595u, 1065633595u, 0, LOG10_TOLERANCE, 0}, +{273, 1095237632u, 1066166156u, 1066166156u, 0, LOG10_TOLERANCE, 0}, +{274, 1097020211u, 1066630703u, 1066630703u, 0, LOG10_TOLERANCE, 0}, +{275, 1098802790u, 1067042657u, 1067042657u, 0, LOG10_TOLERANCE, 0}, +{276, 1099746509u, 1067412726u, 1067412726u, 0, LOG10_TOLERANCE, 0}, +{277, 1100637798u, 1067748644u, 1067748644u, 0, LOG10_TOLERANCE, 0}, +{278, 1101529088u, 1068056187u, 1068056187u, 0, LOG10_TOLERANCE, 0}, +{279, 1102420378u, 1068339777u, 1068339777u, 0, LOG10_TOLERANCE, 0}, +{280, 1103311667u, 1068602877u, 1068602877u, 0, LOG10_TOLERANCE, 0}, +{281, 1104202957u, 1068848250u, 1068848250u, 0, LOG10_TOLERANCE, 0}, +{282, 1105094246u, 1069078134u, 1069078134u, 0, LOG10_TOLERANCE, 0}, +{283, 1105985536u, 1069294369u, 1069294369u, 0, LOG10_TOLERANCE, 0}, +{284, 1107800421u, 1069803350u, 1069803350u, 0, LOG10_TOLERANCE, 0}, +{285, 1221216477u, 1085522141u, 1085522141u, 0, LOG10_TOLERANCE, 0}, +{286, 1224242132u, 1085709375u, 1085709375u, 0, LOG10_TOLERANCE, 0}, +{287, 1073543469u, 1050114967u, 1050114967u, 0, LOG10_TOLERANCE, 0}, +{288, 1198712763u, 1083794893u, 1083794893u, 0, LOG10_TOLERANCE, 0}, +{289, 1312607135u, 1091461344u, 1091461344u, 0, LOG10_TOLERANCE, 0}, +{290, 1166191415u, 1080542141u, 1080542141u, 0, LOG10_TOLERANCE, 0}, +{291, 1234419246u, 1086498583u, 1086498583u, 0, LOG10_TOLERANCE, 0}, +{292, 1302107128u, 1091060483u, 1091060483u, 0, LOG10_TOLERANCE, 0}, +{293, 1336836355u, 1092372456u, 1092372456u, 0, LOG10_TOLERANCE, 0}, +{294, 1167223673u, 1080749457u, 1080749457u, 0, LOG10_TOLERANCE, 0}, +{295, 1324169524u, 1091880980u, 1091880980u, 0, LOG10_TOLERANCE, 0}, +{296, 1083983848u, 1060131406u, 1060131406u, 0, LOG10_TOLERANCE, 0}, +{297, 1341514497u, 1092528620u, 1092528620u, 0, LOG10_TOLERANCE, 0}, +{298, 1272351391u, 1089363554u, 1089363554u, 0, LOG10_TOLERANCE, 0}, +{299, 1172241344u, 1081515641u, 1081515641u, 0, LOG10_TOLERANCE, 0}, +{300, 1104057898u, 1068809424u, 1068809424u, 0, LOG10_TOLERANCE, 0}, +{301, 1224379831u, 1085717045u, 1085717045u, 0, LOG10_TOLERANCE, 0}, +{302, 1306460502u, 1091221528u, 1091221528u, 0, LOG10_TOLERANCE, 0}, +{303, 1197542187u, 1083725330u, 1083725330u, 0, LOG10_TOLERANCE, 0}, +{304, 1184239996u, 1082724972u, 1082724972u, 0, LOG10_TOLERANCE, 0}, +{305, 1252490238u, 1087875421u, 1087875421u, 0, LOG10_TOLERANCE, 0}, +{306, 1139715822u, 1076589136u, 1076589136u, 0, LOG10_TOLERANCE, 0}, +{307, 1143233714u, 1077172184u, 1077172184u, 0, LOG10_TOLERANCE, 0}, +{308, 1139941253u, 1076615200u, 1076615200u, 0, LOG10_TOLERANCE, 0}, +{309, 1092814839u, 1065421588u, 1065421588u, 0, LOG10_TOLERANCE, 0}, +{310, 1288902137u, 1090565208u, 1090565208u, 0, LOG10_TOLERANCE, 0}, +{311, 1333134799u, 1092213219u, 1092213219u, 0, LOG10_TOLERANCE, 0}, +{312, 1187847971u, 1083009603u, 1083009603u, 0, LOG10_TOLERANCE, 0}, +{313, 1181870825u, 1082528571u, 1082528571u, 0, LOG10_TOLERANCE, 0}, +{314, 1309289088u, 1091319168u, 1091319168u, 0, LOG10_TOLERANCE, 0}, +{315, 1297170011u, 1090876869u, 1090876869u, 0, LOG10_TOLERANCE, 0}, +{316, 1258101754u, 1088251511u, 1088251511u, 0, LOG10_TOLERANCE, 0}, +{317, 1106778573u, 1069476537u, 1069476537u, 0, LOG10_TOLERANCE, 0}, +{318, 1140567947u, 1076685758u, 1076685758u, 0, LOG10_TOLERANCE, 0}, +{319, 1238569473u, 1086823475u, 1086823475u, 0, LOG10_TOLERANCE, 0}, +{320, 1261071232u, 1088522552u, 1088522552u, 0, LOG10_TOLERANCE, 0}, +{321, 1175011025u, 1081894199u, 1081894199u, 0, LOG10_TOLERANCE, 0}, +{322, 1082692850u, 1059149722u, 1059149722u, 0, LOG10_TOLERANCE, 0}, +{323, 1255864908u, 1088119583u, 1088119583u, 0, LOG10_TOLERANCE, 0}, +{324, 1136411063u, 1076156822u, 1076156822u, 0, LOG10_TOLERANCE, 0}, +{325, 1091747974u, 1064723469u, 1064723469u, 0, LOG10_TOLERANCE, 0}, +{326, 1193132132u, 1083401754u, 1083401754u, 0, LOG10_TOLERANCE, 0}, +{327, 1270480664u, 1089233516u, 1089233516u, 0, LOG10_TOLERANCE, 0}, +{328, 1148867223u, 1077938477u, 1077938477u, 0, LOG10_TOLERANCE, 0}, +{329, 1152956913u, 1078647561u, 1078647561u, 0, LOG10_TOLERANCE, 0}, +{330, 1109627625u, 1070484141u, 1070484141u, 0, LOG10_TOLERANCE, 0}, +{331, 1307091856u, 1091240788u, 1091240788u, 0, LOG10_TOLERANCE, 0}, +{332, 1077234132u, 1055360371u, 1055360371u, 0, LOG10_TOLERANCE, 0}, +{333, 1142167709u, 1076982359u, 1076982359u, 0, LOG10_TOLERANCE, 0}, +{334, 1278749186u, 1089855805u, 1089855805u, 0, LOG10_TOLERANCE, 0}, +{335, 1221083131u, 1085512933u, 1085512933u, 0, LOG10_TOLERANCE, 0}, +{336, 1138741813u, 1076472027u, 1076472027u, 0, LOG10_TOLERANCE, 0}, +{337, 1142981585u, 1077129041u, 1077129041u, 0, LOG10_TOLERANCE, 0}, +{338, 1199682314u, 1083854727u, 1083854727u, 0, LOG10_TOLERANCE, 0}, +{339, 1326472382u, 1091970451u, 1091970451u, 0, LOG10_TOLERANCE, 0}, +{340, 1201614701u, 1084041300u, 1084041300u, 0, LOG10_TOLERANCE, 0}, +{341, 1198006188u, 1083753543u, 1083753543u, 0, LOG10_TOLERANCE, 0}, +{342, 1108485380u, 1070073676u, 1070073676u, 0, LOG10_TOLERANCE, 0}, +{343, 1233784744u, 1086436853u, 1086436853u, 0, LOG10_TOLERANCE, 0}, +{344, 1087189715u, 1062115621u, 1062115621u, 0, LOG10_TOLERANCE, 0}, +{345, 1065468637u, 1002600647u, 1002600647u, 0, LOG10_TOLERANCE, 0}, +{346, 1318704920u, 1091683756u, 1091683756u, 0, LOG10_TOLERANCE, 0}, +{347, 1171831868u, 1081463872u, 1081463872u, 0, LOG10_TOLERANCE, 0}, +{348, 1315030230u, 1091542790u, 1091542790u, 0, LOG10_TOLERANCE, 0}, +{349, 1134593658u, 1075866547u, 1075866547u, 0, LOG10_TOLERANCE, 0}, +{350, 1086198791u, 1061557914u, 1061557914u, 0, LOG10_TOLERANCE, 0}, +{351, 1255152035u, 1088073178u, 1088073178u, 0, LOG10_TOLERANCE, 0}, +{352, 1135271264u, 1075980250u, 1075980250u, 0, LOG10_TOLERANCE, 0}, +{353, 1094190727u, 1065862891u, 1065862891u, 0, LOG10_TOLERANCE, 0}, +{354, 1294665325u, 1090785022u, 1090785022u, 0, LOG10_TOLERANCE, 0}, +{355, 1082514416u, 1059003006u, 1059003006u, 0, LOG10_TOLERANCE, 0}, +{356, 1291650374u, 1090647727u, 1090647727u, 0, LOG10_TOLERANCE, 0}, +{357, 1325668223u, 1091929999u, 1091929999u, 0, LOG10_TOLERANCE, 0}, +{358, 1092037607u, 1064939656u, 1064939656u, 0, LOG10_TOLERANCE, 0}, +{359, 1168794760u, 1081025656u, 1081025656u, 0, LOG10_TOLERANCE, 0}, +{360, 1147953120u, 1077834041u, 1077834041u, 0, LOG10_TOLERANCE, 0}, +{361, 1151984049u, 1078494962u, 1078494962u, 0, LOG10_TOLERANCE, 0}, +{362, 1129287043u, 1075071958u, 1075071958u, 0, LOG10_TOLERANCE, 0}, +{363, 1243664530u, 1087207104u, 1087207104u, 0, LOG10_TOLERANCE, 0}, +{364, 1115471979u, 1072069421u, 1072069421u, 0, LOG10_TOLERANCE, 0}, +{365, 1203608440u, 1084200583u, 1084200583u, 0, LOG10_TOLERANCE, 0}, +{366, 1276995896u, 1089712842u, 1089712842u, 0, LOG10_TOLERANCE, 0}, +{367, 1093710327u, 1065714805u, 1065714805u, 0, LOG10_TOLERANCE, 0}, +{368, 1110545760u, 1070783519u, 1070783519u, 0, LOG10_TOLERANCE, 0}, +{369, 1214492942u, 1084998596u, 1084998596u, 0, LOG10_TOLERANCE, 0}, +{370, 1304154705u, 1091143336u, 1091143336u, 0, LOG10_TOLERANCE, 0}, +{371, 1116959962u, 1072631456u, 1072631456u, 0, LOG10_TOLERANCE, 0}, +{372, 1227066979u, 1085959888u, 1085959888u, 0, LOG10_TOLERANCE, 0}, +{373, 1268194719u, 1089044364u, 1089044364u, 0, LOG10_TOLERANCE, 0}, +{374, 1133420220u, 1075651116u, 1075651116u, 0, LOG10_TOLERANCE, 0}, +{375, 1161858787u, 1079985808u, 1079985808u, 0, LOG10_TOLERANCE, 0}, +{376, 1148513315u, 1077898751u, 1077898751u, 0, LOG10_TOLERANCE, 0}, +{377, 1270887389u, 1089263410u, 1089263410u, 0, LOG10_TOLERANCE, 0}, +{378, 1177709533u, 1082251284u, 1082251284u, 0, LOG10_TOLERANCE, 0}, +{379, 1189120494u, 1083091979u, 1083091979u, 0, LOG10_TOLERANCE, 0}, +{380, 1323529208u, 1091861827u, 1091861827u, 0, LOG10_TOLERANCE, 0}, +{381, 1318284740u, 1091664370u, 1091664370u, 0, LOG10_TOLERANCE, 0}, +{382, 1278616251u, 1089845718u, 1089845718u, 0, LOG10_TOLERANCE, 0}, +{383, 1077373465u, 1055530275u, 1055530275u, 0, LOG10_TOLERANCE, 0}, +{384, 1065798296u, 1018686876u, 1018686876u, 0, LOG10_TOLERANCE, 0}, +{385, 1181505796u, 1082507356u, 1082507356u, 0, LOG10_TOLERANCE, 0}, +{386, 1210335378u, 1084701144u, 1084701144u, 0, LOG10_TOLERANCE, 0}, +{387, 1273397670u, 1089428926u, 1089428926u, 0, LOG10_TOLERANCE, 0}, +{388, 1277348132u, 1089743421u, 1089743421u, 0, LOG10_TOLERANCE, 0}, +{389, 1257596246u, 1088223324u, 1088223324u, 0, LOG10_TOLERANCE, 0}, +{390, 1147268859u, 1077751749u, 1077751749u, 0, LOG10_TOLERANCE, 0}, +{391, 1277365077u, 1089744867u, 1089744867u, 0, LOG10_TOLERANCE, 0}, +{392, 1090870906u, 1064026726u, 1064026726u, 0, LOG10_TOLERANCE, 0}, +{393, 1227582289u, 1086002654u, 1086002654u, 0, LOG10_TOLERANCE, 0}, +{394, 1272325814u, 1089361895u, 1089361895u, 0, LOG10_TOLERANCE, 0}, +{395, 1212024623u, 1084833908u, 1084833908u, 0, LOG10_TOLERANCE, 0}, +{396, 1137854355u, 1076358345u, 1076358345u, 0, LOG10_TOLERANCE, 0}, +{397, 1293289410u, 1090725378u, 1090725378u, 0, LOG10_TOLERANCE, 0}, +{398, 1303733188u, 1091127468u, 1091127468u, 0, LOG10_TOLERANCE, 0}, +{399, 1289579346u, 1090586972u, 1090586972u, 0, LOG10_TOLERANCE, 0}, +{400, 1131196082u, 1075311190u, 1075311190u, 0, LOG10_TOLERANCE, 0}, +{401, 1110614030u, 1070804828u, 1070804828u, 0, LOG10_TOLERANCE, 0}, +{402, 1313431700u, 1091490724u, 1091490724u, 0, LOG10_TOLERANCE, 0}, +{403, 1155551824u, 1079001317u, 1079001317u, 0, LOG10_TOLERANCE, 0}, +{404, 1248682573u, 1087561786u, 1087561786u, 0, LOG10_TOLERANCE, 0}, +{405, 1311450615u, 1091416655u, 1091416655u, 0, LOG10_TOLERANCE, 0}, +{406, 1065761827u, 1017722309u, 1017722309u, 0, LOG10_TOLERANCE, 0}, +{407, 1199816046u, 1083868945u, 1083868945u, 0, LOG10_TOLERANCE, 0}, +{408, 1186295367u, 1082897824u, 1082897824u, 0, LOG10_TOLERANCE, 0}, +{409, 1080781593u, 1058066206u, 1058066206u, 0, LOG10_TOLERANCE, 0}, +{410, 1087842942u, 1062461221u, 1062461221u, 0, LOG10_TOLERANCE, 0}, +{411, 1079506760u, 1057437815u, 1057437815u, 0, LOG10_TOLERANCE, 0}, +{412, 1283624229u, 1090173747u, 1090173747u, 0, LOG10_TOLERANCE, 0}, +{413, 1193633657u, 1083444899u, 1083444899u, 0, LOG10_TOLERANCE, 0}, +{414, 1270734970u, 1089252322u, 1089252322u, 0, LOG10_TOLERANCE, 0}, +{415, 1307332419u, 1091247917u, 1091247917u, 0, LOG10_TOLERANCE, 0}, +{416, 1106502045u, 1069414045u, 1069414045u, 0, LOG10_TOLERANCE, 0}, +{417, 1157598381u, 1079238732u, 1079238732u, 0, LOG10_TOLERANCE, 0}, +{418, 1187750865u, 1083003000u, 1083003000u, 0, LOG10_TOLERANCE, 0}, +{419, 1279489061u, 1089909993u, 1089909993u, 0, LOG10_TOLERANCE, 0}, +{420, 1233171235u, 1086372903u, 1086372903u, 0, LOG10_TOLERANCE, 0}, +{421, 1148920078u, 1077944337u, 1077944337u, 0, LOG10_TOLERANCE, 0}, +{422, 1109198803u, 1070335413u, 1070335413u, 0, LOG10_TOLERANCE, 0}, +{423, 1072465835u, 1049135559u, 1049135559u, 0, LOG10_TOLERANCE, 0}, +{424, 1213665826u, 1084946659u, 1084946659u, 0, LOG10_TOLERANCE, 0}, +{425, 1207502108u, 1084448842u, 1084448842u, 0, LOG10_TOLERANCE, 0}, +{426, 1234530539u, 1086508992u, 1086508992u, 0, LOG10_TOLERANCE, 0}, +{427, 1158845204u, 1079488769u, 1079488769u, 0, LOG10_TOLERANCE, 0}, +{428, 1291910469u, 1090656565u, 1090656565u, 0, LOG10_TOLERANCE, 0}, +{429, 1131927531u, 1075395124u, 1075395124u, 0, LOG10_TOLERANCE, 0}, +{430, 1302395743u, 1091073115u, 1091073115u, 0, LOG10_TOLERANCE, 0}, +{431, 1125551064u, 1074487026u, 1074487026u, 0, LOG10_TOLERANCE, 0}, +{432, 1279812724u, 1089932721u, 1089932721u, 0, LOG10_TOLERANCE, 0}, +{433, 1198917460u, 1083806530u, 1083806530u, 0, LOG10_TOLERANCE, 0}, +{434, 1091906532u, 1064842614u, 1064842614u, 0, LOG10_TOLERANCE, 0}, +{435, 1246074130u, 1087394636u, 1087394636u, 0, LOG10_TOLERANCE, 0}, +{436, 1276853215u, 1089700158u, 1089700158u, 0, LOG10_TOLERANCE, 0}, +{437, 1315294792u, 1091550861u, 1091550861u, 0, LOG10_TOLERANCE, 0}, +{438, 1212686469u, 1084881069u, 1084881069u, 0, LOG10_TOLERANCE, 0}, +{439, 1076761780u, 1054769178u, 1054769178u, 0, LOG10_TOLERANCE, 0}, +{440, 1120124467u, 1073663442u, 1073663442u, 0, LOG10_TOLERANCE, 0}, +{441, 1268744779u, 1089093595u, 1089093595u, 0, LOG10_TOLERANCE, 0}, +{442, 1165195428u, 1080413148u, 1080413148u, 0, LOG10_TOLERANCE, 0}, +{443, 1100306391u, 1067627328u, 1067627328u, 0, LOG10_TOLERANCE, 0}, +{444, 1067761000u, 1038118927u, 1038118927u, 0, LOG10_TOLERANCE, 0}, +{445, 1212717473u, 1084883219u, 1084883219u, 0, LOG10_TOLERANCE, 0}, +{446, 1128489361u, 1074961874u, 1074961874u, 0, LOG10_TOLERANCE, 0}, +{447, 1243678660u, 1087208324u, 1087208324u, 0, LOG10_TOLERANCE, 0}, +{448, 1089986803u, 1063492442u, 1063492442u, 0, LOG10_TOLERANCE, 0}, +{449, 1296314700u, 1090847540u, 1090847540u, 0, LOG10_TOLERANCE, 0}, +{450, 1251462432u, 1087785875u, 1087785875u, 0, LOG10_TOLERANCE, 0}, +{451, 1337753254u, 1092407577u, 1092407577u, 0, LOG10_TOLERANCE, 0}, +{452, 1114685890u, 1071892293u, 1071892293u, 0, LOG10_TOLERANCE, 0}, +{453, 1295475718u, 1090816812u, 1090816812u, 0, LOG10_TOLERANCE, 0}, +{454, 1256888357u, 1088182325u, 1088182325u, 0, LOG10_TOLERANCE, 0}, +{455, 1125800069u, 1074532428u, 1074532428u, 0, LOG10_TOLERANCE, 0}, +{456, 1189421739u, 1083110436u, 1083110436u, 0, LOG10_TOLERANCE, 0}, +{457, 1164046161u, 1080276982u, 1080276982u, 0, LOG10_TOLERANCE, 0}, +{458, 1292596266u, 1090692087u, 1090692087u, 0, LOG10_TOLERANCE, 0}, +{459, 1322264731u, 1091821460u, 1091821460u, 0, LOG10_TOLERANCE, 0}, +{460, 1314644642u, 1091530765u, 1091530765u, 0, LOG10_TOLERANCE, 0}, +{461, 1252329525u, 1087861987u, 1087861987u, 0, LOG10_TOLERANCE, 0}, +{462, 1341639087u, 1092532128u, 1092532128u, 0, LOG10_TOLERANCE, 0}, +{463, 1181604787u, 1082513158u, 1082513158u, 0, LOG10_TOLERANCE, 0}, +{464, 1314588083u, 1091528974u, 1091528974u, 0, LOG10_TOLERANCE, 0}, +{465, 1253466032u, 1087952991u, 1087952991u, 0, LOG10_TOLERANCE, 0}, +{466, 1218098153u, 1085277897u, 1085277897u, 0, LOG10_TOLERANCE, 0}, +{467, 1110424755u, 1070745442u, 1070745442u, 0, LOG10_TOLERANCE, 0}, +{468, 1139120919u, 1076518507u, 1076518507u, 0, LOG10_TOLERANCE, 0}, +{469, 1220524226u, 1085473295u, 1085473295u, 0, LOG10_TOLERANCE, 0}, +{470, 1234908052u, 1086543439u, 1086543439u, 0, LOG10_TOLERANCE, 0}, +{471, 1156767533u, 1079146047u, 1079146047u, 0, LOG10_TOLERANCE, 0}, +{472, 1332389915u, 1092191679u, 1092191679u, 0, LOG10_TOLERANCE, 0}, +{473, 1276780469u, 1089693621u, 1089693621u, 0, LOG10_TOLERANCE, 0}, +{474, 1080882239u, 1058113583u, 1058113583u, 0, LOG10_TOLERANCE, 0}, +{475, 1212129651u, 1084841557u, 1084841557u, 0, LOG10_TOLERANCE, 0}, +{476, 1311706596u, 1091426931u, 1091426931u, 0, LOG10_TOLERANCE, 0}, +{477, 1337315179u, 1092391134u, 1092391134u, 0, LOG10_TOLERANCE, 0}, +{478, 1131358407u, 1075330153u, 1075330153u, 0, LOG10_TOLERANCE, 0}, +{479, 1156517523u, 1079117208u, 1079117208u, 0, LOG10_TOLERANCE, 0}, +{480, 1190015561u, 1083145758u, 1083145758u, 0, LOG10_TOLERANCE, 0}, +{481, 1320945382u, 1091775140u, 1091775140u, 0, LOG10_TOLERANCE, 0}, +{482, 1106032152u, 1069305333u, 1069305333u, 0, LOG10_TOLERANCE, 0}, +{483, 1277806832u, 1089781763u, 1089781763u, 0, LOG10_TOLERANCE, 0}, +{484, 1073495847u, 1050073048u, 1050073048u, 0, LOG10_TOLERANCE, 0}, +{485, 1311016004u, 1091398659u, 1091398659u, 0, LOG10_TOLERANCE, 0}, +{486, 1128016396u, 1074893316u, 1074893316u, 0, LOG10_TOLERANCE, 0}, +{487, 1206054701u, 1084364256u, 1084364256u, 0, LOG10_TOLERANCE, 0}, +{488, 1213609983u, 1084943043u, 1084943043u, 0, LOG10_TOLERANCE, 0}, +{489, 1246902946u, 1087451143u, 1087451143u, 0, LOG10_TOLERANCE, 0}, +{490, 1214599180u, 1085005057u, 1085005057u, 0, LOG10_TOLERANCE, 0}, +{491, 1237504879u, 1086750535u, 1086750535u, 0, LOG10_TOLERANCE, 0}, +{492, 1317696241u, 1091635752u, 1091635752u, 0, LOG10_TOLERANCE, 0}, +{493, 1087912276u, 1062496959u, 1062496959u, 0, LOG10_TOLERANCE, 0}, +{494, 1194393976u, 1083506640u, 1083506640u, 0, LOG10_TOLERANCE, 0}, +{495, 1228636133u, 1086084319u, 1086084319u, 0, LOG10_TOLERANCE, 0}, +{496, 1207246237u, 1084434449u, 1084434449u, 0, LOG10_TOLERANCE, 0}, +{497, 1165476654u, 1080444974u, 1080444974u, 0, LOG10_TOLERANCE, 0}, +{498, 1215278023u, 1085045296u, 1085045296u, 0, LOG10_TOLERANCE, 0}, +{499, 1149651309u, 1078066669u, 1078066669u, 0, LOG10_TOLERANCE, 0}, +{500, 1111943722u, 1071196778u, 1071196778u, 0, LOG10_TOLERANCE, 0}, +{501, 1189849849u, 1083136038u, 1083136038u, 0, LOG10_TOLERANCE, 0}, +{502, 1249758327u, 1087622683u, 1087622683u, 0, LOG10_TOLERANCE, 0}, +{503, 1168098747u, 1080908429u, 1080908429u, 0, LOG10_TOLERANCE, 0}, +{504, 1153525376u, 1078731147u, 1078731147u, 0, LOG10_TOLERANCE, 0}, +{505, 1085605579u, 1061202403u, 1061202403u, 0, LOG10_TOLERANCE, 0}, +{506, 1070761636u, 1046300717u, 1046300717u, 0, LOG10_TOLERANCE, 0}, +{507, 1068498242u, 1041078347u, 1041078347u, 0, LOG10_TOLERANCE, 0}, +{508, 1266687209u, 1088893963u, 1088893963u, 0, LOG10_TOLERANCE, 0}, +{509, 1340476127u, 1092498288u, 1092498288u, 0, LOG10_TOLERANCE, 0}, +{510, 1197582051u, 1083727789u, 1083727789u, 0, LOG10_TOLERANCE, 0}, +{511, 1262852441u, 1088657324u, 1088657324u, 0, LOG10_TOLERANCE, 0}, +{512, 1141063391u, 1076762330u, 1076762330u, 0, LOG10_TOLERANCE, 0}, +{513, 1206196143u, 1084372877u, 1084372877u, 0, LOG10_TOLERANCE, 0}, +{514, 1219643887u, 1085407136u, 1085407136u, 0, LOG10_TOLERANCE, 0}, +{515, 1134469222u, 1075844873u, 1075844873u, 0, LOG10_TOLERANCE, 0}, +{516, 1237868497u, 1086776110u, 1086776110u, 0, LOG10_TOLERANCE, 0}, +{517, 1153753924u, 1078763701u, 1078763701u, 0, LOG10_TOLERANCE, 0}, +{518, 1120261759u, 1073702225u, 1073702225u, 0, LOG10_TOLERANCE, 0}, +{519, 1078844712u, 1057088763u, 1057088763u, 0, LOG10_TOLERANCE, 0}, +{520, 1202112338u, 1084083741u, 1084083741u, 0, LOG10_TOLERANCE, 0}, +{521, 1087750238u, 1062413161u, 1062413161u, 0, LOG10_TOLERANCE, 0}, +{522, 1066116543u, 1025174611u, 1025174611u, 0, LOG10_TOLERANCE, 0}, +{523, 1186234578u, 1082893155u, 1082893155u, 0, LOG10_TOLERANCE, 0}, +{524, 1331680743u, 1092170179u, 1092170179u, 0, LOG10_TOLERANCE, 0}, +{525, 1201949077u, 1084070034u, 1084070034u, 0, LOG10_TOLERANCE, 0}, +{526, 1081311485u, 1058312253u, 1058312253u, 0, LOG10_TOLERANCE, 0}, +{527, 1149300655u, 1077992605u, 1077992605u, 0, LOG10_TOLERANCE, 0}, +{528, 1240669941u, 1086952230u, 1086952230u, 0, LOG10_TOLERANCE, 0}, +{529, 1133410485u, 1075649217u, 1075649217u, 0, LOG10_TOLERANCE, 0}, +{530, 1222486939u, 1085605492u, 1085605492u, 0, LOG10_TOLERANCE, 0}, +{531, 1270451568u, 1089231340u, 1089231340u, 0, LOG10_TOLERANCE, 0}, +{532, 1280215674u, 1089960246u, 1089960246u, 0, LOG10_TOLERANCE, 0}, +{533, 1171873518u, 1081469205u, 1081469205u, 0, LOG10_TOLERANCE, 0}, +{534, 1150774452u, 1078285457u, 1078285457u, 0, LOG10_TOLERANCE, 0}, +{535, 1267725176u, 1089000125u, 1089000125u, 0, LOG10_TOLERANCE, 0}, +{536, 1209845200u, 1084658696u, 1084658696u, 0, LOG10_TOLERANCE, 0}, +{537, 1120384488u, 1073736548u, 1073736548u, 0, LOG10_TOLERANCE, 0}, +{538, 1171564509u, 1081429258u, 1081429258u, 0, LOG10_TOLERANCE, 0}, +{539, 1144755661u, 1077412924u, 1077412924u, 0, LOG10_TOLERANCE, 0}, +{540, 1153978024u, 1078795066u, 1078795066u, 0, LOG10_TOLERANCE, 0}, +{541, 1217042030u, 1085177708u, 1085177708u, 0, LOG10_TOLERANCE, 0}, +{542, 1319638151u, 1091724070u, 1091724070u, 0, LOG10_TOLERANCE, 0}, +{543, 1151257041u, 1078371952u, 1078371952u, 0, LOG10_TOLERANCE, 0}, +{544, 1258369714u, 1088270339u, 1088270339u, 0, LOG10_TOLERANCE, 0}, +{545, 1216602683u, 1085132549u, 1085132549u, 0, LOG10_TOLERANCE, 0}, +{546, 1149782091u, 1078093539u, 1078093539u, 0, LOG10_TOLERANCE, 0}, +{547, 1071940738u, 1048633368u, 1048633368u, 0, LOG10_TOLERANCE, 0}, +{548, 1314801987u, 1091535710u, 1091535710u, 0, LOG10_TOLERANCE, 0}, +{549, 1209694157u, 1084645208u, 1084645208u, 0, LOG10_TOLERANCE, 0}, +{550, 1153863660u, 1078779127u, 1078779127u, 0, LOG10_TOLERANCE, 0}, +{551, 1249365132u, 1087600894u, 1087600894u, 0, LOG10_TOLERANCE, 0}, +{552, 1074612637u, 1051727564u, 1051727564u, 0, LOG10_TOLERANCE, 0}, +{553, 1297708818u, 1090894419u, 1090894419u, 0, LOG10_TOLERANCE, 0}, +{554, 1198049074u, 1083756107u, 1083756107u, 0, LOG10_TOLERANCE, 0}, +{555, 1271269588u, 1089290635u, 1089290635u, 0, LOG10_TOLERANCE, 0}, +{556, 1277417964u, 1089749364u, 1089749364u, 0, LOG10_TOLERANCE, 0}, +{557, 1173439580u, 1081659193u, 1081659193u, 0, LOG10_TOLERANCE, 0}, +{558, 1337400405u, 1092394380u, 1092394380u, 0, LOG10_TOLERANCE, 0}, +{559, 1252864992u, 1087905998u, 1087905998u, 0, LOG10_TOLERANCE, 0}, +{560, 1250249095u, 1087667413u, 1087667413u, 0, LOG10_TOLERANCE, 0}, +{561, 1136927585u, 1076231530u, 1076231530u, 0, LOG10_TOLERANCE, 0}, +{562, 1215968622u, 1085084485u, 1085084485u, 0, LOG10_TOLERANCE, 0}, +{563, 1215264594u, 1085044517u, 1085044517u, 0, LOG10_TOLERANCE, 0}, +{564, 1252237719u, 1087854223u, 1087854223u, 0, LOG10_TOLERANCE, 0}, +{565, 1180411946u, 1082440653u, 1082440653u, 0, LOG10_TOLERANCE, 0}, +{566, 1248677856u, 1087561510u, 1087561510u, 0, LOG10_TOLERANCE, 0}, +{567, 1099710167u, 1067398349u, 1067398349u, 0, LOG10_TOLERANCE, 0}, +{568, 1157186482u, 1079193372u, 1079193372u, 0, LOG10_TOLERANCE, 0}, +{569, 1282110851u, 1090079593u, 1090079593u, 0, LOG10_TOLERANCE, 0}, +{570, 1329524465u, 1092097778u, 1092097778u, 0, LOG10_TOLERANCE, 0}, +{571, 1144643646u, 1077396251u, 1077396251u, 0, LOG10_TOLERANCE, 0}, +{572, 1123357102u, 1074112007u, 1074112007u, 0, LOG10_TOLERANCE, 0}, +{573, 1106837025u, 1069489610u, 1069489610u, 0, LOG10_TOLERANCE, 0}, +{574, 1253017688u, 1087918168u, 1087918168u, 0, LOG10_TOLERANCE, 0}, +{575, 1108543194u, 1070095602u, 1070095602u, 0, LOG10_TOLERANCE, 0}, +{576, 1160162706u, 1079722894u, 1079722894u, 0, LOG10_TOLERANCE, 0}, +{577, 1158231377u, 1079368484u, 1079368484u, 0, LOG10_TOLERANCE, 0}, +{578, 1266928623u, 1088919782u, 1088919782u, 0, LOG10_TOLERANCE, 0}, +{579, 1290596379u, 1090617821u, 1090617821u, 0, LOG10_TOLERANCE, 0}, +{580, 1197091103u, 1083697039u, 1083697039u, 0, LOG10_TOLERANCE, 0}, +{581, 1152416724u, 1078564412u, 1078564412u, 0, LOG10_TOLERANCE, 0}, +{582, 1218239308u, 1085290489u, 1085290489u, 0, LOG10_TOLERANCE, 0}, +{583, 1115826919u, 1072177121u, 1072177121u, 0, LOG10_TOLERANCE, 0}, +{584, 1142780964u, 1077093965u, 1077093965u, 0, LOG10_TOLERANCE, 0}, +{585, 1074622936u, 1051743763u, 1051743763u, 0, LOG10_TOLERANCE, 0}, +{586, 1278946388u, 1089870566u, 1089870566u, 0, LOG10_TOLERANCE, 0}, +{587, 1098530298u, 1066982623u, 1066982623u, 0, LOG10_TOLERANCE, 0}, +{588, 1085242388u, 1060975860u, 1060975860u, 0, LOG10_TOLERANCE, 0}, +{589, 1297190916u, 1090877562u, 1090877562u, 0, LOG10_TOLERANCE, 0}, +{590, 1277649137u, 1089768763u, 1089768763u, 0, LOG10_TOLERANCE, 0}, +{591, 1096548368u, 1066513387u, 1066513387u, 0, LOG10_TOLERANCE, 0}, +{592, 1096155623u, 1066412772u, 1066412772u, 0, LOG10_TOLERANCE, 0}, +{593, 1091245957u, 1064332856u, 1064332856u, 0, LOG10_TOLERANCE, 0}, +{594, 1169713169u, 1081169627u, 1081169627u, 0, LOG10_TOLERANCE, 0}, +{595, 1227264862u, 1085976549u, 1085976549u, 0, LOG10_TOLERANCE, 0}, +{596, 1198151302u, 1083762190u, 1083762190u, 0, LOG10_TOLERANCE, 0}, +{597, 1249433635u, 1087604728u, 1087604728u, 0, LOG10_TOLERANCE, 0}, +{598, 1169549089u, 1081144726u, 1081144726u, 0, LOG10_TOLERANCE, 0}, +{599, 1200051436u, 1083893444u, 1083893444u, 0, LOG10_TOLERANCE, 0}, +{600, 1306520561u, 1091223396u, 1091223396u, 0, LOG10_TOLERANCE, 0}, +{601, 1314936356u, 1091539891u, 1091539891u, 0, LOG10_TOLERANCE, 0}, +{602, 1327568571u, 1092020376u, 1092020376u, 0, LOG10_TOLERANCE, 0}, +{603, 1245744060u, 1087371119u, 1087371119u, 0, LOG10_TOLERANCE, 0}, +{604, 1201521756u, 1084033149u, 1084033149u, 0, LOG10_TOLERANCE, 0}, +{605, 1262863321u, 1088658089u, 1088658089u, 0, LOG10_TOLERANCE, 0}, +{606, 1240170043u, 1086923196u, 1086923196u, 0, LOG10_TOLERANCE, 0}, +{607, 1338680611u, 1092440541u, 1092440541u, 0, LOG10_TOLERANCE, 0}, +{608, 1112891928u, 1071452574u, 1071452574u, 0, LOG10_TOLERANCE, 0}, +{609, 1190105283u, 1083150978u, 1083150978u, 0, LOG10_TOLERANCE, 0}, +{610, 1263047389u, 1088670933u, 1088670933u, 0, LOG10_TOLERANCE, 0}, +{611, 1066141167u, 1025487856u, 1025487856u, 0, LOG10_TOLERANCE, 0}, +{612, 1120888322u, 1073807991u, 1073807991u, 0, LOG10_TOLERANCE, 0}, +{613, 1315217243u, 1091548510u, 1091548510u, 0, LOG10_TOLERANCE, 0}, +{614, 1168623062u, 1080997431u, 1080997431u, 0, LOG10_TOLERANCE, 0}, +{615, 1311186097u, 1091405787u, 1091405787u, 0, LOG10_TOLERANCE, 0}, +{616, 1180032668u, 1082416335u, 1082416335u, 0, LOG10_TOLERANCE, 0}, +{617, 1134528351u, 1075855204u, 1075855204u, 0, LOG10_TOLERANCE, 0}, +{618, 1266869190u, 1088913493u, 1088913493u, 0, LOG10_TOLERANCE, 0}, +{619, 1133689539u, 1075702861u, 1075702861u, 0, LOG10_TOLERANCE, 0}, +{620, 1308204830u, 1091272874u, 1091272874u, 0, LOG10_TOLERANCE, 0}, +{621, 1137634874u, 1076329100u, 1076329100u, 0, LOG10_TOLERANCE, 0}, +{622, 1268019014u, 1089028060u, 1089028060u, 0, LOG10_TOLERANCE, 0}, +{623, 1066157309u, 1025692741u, 1025692741u, 0, LOG10_TOLERANCE, 0}, +{624, 1288870027u, 1090564150u, 1090564150u, 0, LOG10_TOLERANCE, 0}, +{625, 1125177888u, 1074416791u, 1074416791u, 0, LOG10_TOLERANCE, 0}, +{626, 1170245333u, 1081248122u, 1081248122u, 0, LOG10_TOLERANCE, 0}, +{627, 1219052056u, 1085359794u, 1085359794u, 0, LOG10_TOLERANCE, 0}, +{628, 1171499971u, 1081420803u, 1081420803u, 0, LOG10_TOLERANCE, 0}, +{629, 1224634973u, 1085731089u, 1085731089u, 0, LOG10_TOLERANCE, 0}, +{630, 1299683827u, 1090953521u, 1090953521u, 0, LOG10_TOLERANCE, 0}, +{631, 1109740374u, 1070522258u, 1070522258u, 0, LOG10_TOLERANCE, 0}, +{632, 1229268598u, 1086130031u, 1086130031u, 0, LOG10_TOLERANCE, 0}, +{633, 1086717248u, 1061855026u, 1061855026u, 0, LOG10_TOLERANCE, 0}, +{634, 1287400959u, 1090506756u, 1090506756u, 0, LOG10_TOLERANCE, 0}, +{635, 1317471958u, 1091624354u, 1091624354u, 0, LOG10_TOLERANCE, 0}, +{636, 1242829722u, 1087131943u, 1087131943u, 0, LOG10_TOLERANCE, 0}, +{637, 1200927971u, 1083979282u, 1083979282u, 0, LOG10_TOLERANCE, 0}, +{638, 1179374444u, 1082372526u, 1082372526u, 0, LOG10_TOLERANCE, 0}, +{639, 1246019790u, 1087390806u, 1087390806u, 0, LOG10_TOLERANCE, 0}, +{640, 1136052740u, 1076103135u, 1076103135u, 0, LOG10_TOLERANCE, 0}, +{641, 1069009211u, 1042341759u, 1042341759u, 0, LOG10_TOLERANCE, 0}, +{642, 1169128344u, 1081079274u, 1081079274u, 0, LOG10_TOLERANCE, 0}, +{643, 1087942795u, 1062512634u, 1062512634u, 0, LOG10_TOLERANCE, 0}, +{644, 1278882065u, 1089865777u, 1089865777u, 0, LOG10_TOLERANCE, 0}, +{645, 1147842784u, 1077821021u, 1077821021u, 0, LOG10_TOLERANCE, 0}, +{646, 1171351660u, 1081401223u, 1081401223u, 0, LOG10_TOLERANCE, 0}, +{647, 1136072069u, 1076106072u, 1076106072u, 0, LOG10_TOLERANCE, 0}, +{648, 1233771772u, 1086435546u, 1086435546u, 0, LOG10_TOLERANCE, 0}, +{649, 1241288445u, 1086986916u, 1086986916u, 0, LOG10_TOLERANCE, 0}, +{650, 1319200415u, 1091705604u, 1091705604u, 0, LOG10_TOLERANCE, 0}, +{651, 1279324488u, 1089898216u, 1089898216u, 0, LOG10_TOLERANCE, 0}, +{652, 1070311776u, 1045334590u, 1045334590u, 0, LOG10_TOLERANCE, 0}, +{653, 1307648109u, 1091257107u, 1091257107u, 0, LOG10_TOLERANCE, 0}, +{654, 1246947517u, 1087454084u, 1087454084u, 0, LOG10_TOLERANCE, 0}, +{655, 1249239929u, 1087593845u, 1087593845u, 0, LOG10_TOLERANCE, 0}, +{656, 1286277377u, 1090419751u, 1090419751u, 0, LOG10_TOLERANCE, 0}, +{657, 1173247961u, 1081636983u, 1081636983u, 0, LOG10_TOLERANCE, 0}, +{658, 1101051030u, 1067894465u, 1067894465u, 0, LOG10_TOLERANCE, 0}, +{659, 1082862511u, 1059286536u, 1059286536u, 0, LOG10_TOLERANCE, 0}, +{660, 1341821683u, 1092537219u, 1092537219u, 0, LOG10_TOLERANCE, 0}, +{661, 1079061705u, 1057205020u, 1057205020u, 0, LOG10_TOLERANCE, 0}, +{662, 1105291533u, 1069127115u, 1069127115u, 0, LOG10_TOLERANCE, 0}, +{663, 1223207358u, 1085649573u, 1085649573u, 0, LOG10_TOLERANCE, 0}, +{664, 1156767169u, 1079146005u, 1079146005u, 0, LOG10_TOLERANCE, 0}, +{665, 1104284039u, 1068869773u, 1068869773u, 0, LOG10_TOLERANCE, 0}, +{666, 1187729253u, 1083001524u, 1083001524u, 0, LOG10_TOLERANCE, 0}, +{667, 1093697541u, 1065710780u, 1065710780u, 0, LOG10_TOLERANCE, 0}, +{668, 1119207537u, 1073393265u, 1073393265u, 0, LOG10_TOLERANCE, 0}, +{669, 1094115255u, 1065840021u, 1065840021u, 0, LOG10_TOLERANCE, 0}, +{670, 1276603160u, 1089677491u, 1089677491u, 0, LOG10_TOLERANCE, 0}, +{671, 1206125125u, 1084368558u, 1084368558u, 0, LOG10_TOLERANCE, 0}, +{672, 1098662266u, 1067011821u, 1067011821u, 0, LOG10_TOLERANCE, 0}, +{673, 1328600211u, 1092062834u, 1092062834u, 0, LOG10_TOLERANCE, 0}, +{674, 1317062968u, 1091602805u, 1091602805u, 0, LOG10_TOLERANCE, 0}, +{675, 1296068481u, 1090838735u, 1090838735u, 0, LOG10_TOLERANCE, 0}, +{676, 1287620154u, 1090520921u, 1090520921u, 0, LOG10_TOLERANCE, 0}, +{677, 1245702957u, 1087368147u, 1087368147u, 0, LOG10_TOLERANCE, 0}, +{678, 1268279353u, 1089052114u, 1089052114u, 0, LOG10_TOLERANCE, 0}, +{679, 1135988313u, 1076093312u, 1076093312u, 0, LOG10_TOLERANCE, 0}, +{680, 1163727179u, 1080237312u, 1080237312u, 0, LOG10_TOLERANCE, 0}, +{681, 1198307901u, 1083771430u, 1083771430u, 0, LOG10_TOLERANCE, 0}, +{682, 1288901567u, 1090565189u, 1090565189u, 0, LOG10_TOLERANCE, 0}, +{683, 1113104661u, 1071507577u, 1071507577u, 0, LOG10_TOLERANCE, 0}, +{684, 1136714348u, 1076201059u, 1076201059u, 0, LOG10_TOLERANCE, 0}, +{685, 1339423444u, 1092465326u, 1092465326u, 0, LOG10_TOLERANCE, 0}, +{686, 1162027071u, 1080009939u, 1080009939u, 0, LOG10_TOLERANCE, 0}, +{687, 1124131769u, 1074204110u, 1074204110u, 0, LOG10_TOLERANCE, 0}, +{688, 1177157787u, 1082207261u, 1082207261u, 0, LOG10_TOLERANCE, 0}, +{689, 1284600904u, 1090272197u, 1090272197u, 0, LOG10_TOLERANCE, 0}, +{690, 1309658335u, 1091337369u, 1091337369u, 0, LOG10_TOLERANCE, 0}, +{691, 1226494979u, 1085909940u, 1085909940u, 0, LOG10_TOLERANCE, 0}, +{692, 1228023365u, 1086037729u, 1086037729u, 0, LOG10_TOLERANCE, 0}, +{693, 1313215353u, 1091483197u, 1091483197u, 0, LOG10_TOLERANCE, 0}, +{694, 1320539530u, 1091759888u, 1091759888u, 0, LOG10_TOLERANCE, 0}, +{695, 1204196034u, 1084242664u, 1084242664u, 0, LOG10_TOLERANCE, 0}, +{696, 1312393763u, 1091453422u, 1091453422u, 0, LOG10_TOLERANCE, 0}, +{697, 1161439847u, 1079924310u, 1079924310u, 0, LOG10_TOLERANCE, 0}, +{698, 1084378658u, 1060406999u, 1060406999u, 0, LOG10_TOLERANCE, 0}, +{699, 1226473697u, 1085908028u, 1085908028u, 0, LOG10_TOLERANCE, 0}, +{700, 1123114742u, 1074084310u, 1074084310u, 0, LOG10_TOLERANCE, 0}, +{701, 1258114435u, 1088252207u, 1088252207u, 0, LOG10_TOLERANCE, 0}, +{702, 1320557197u, 1091760563u, 1091760563u, 0, LOG10_TOLERANCE, 0}, +{703, 1178825761u, 1082334325u, 1082334325u, 0, LOG10_TOLERANCE, 0}, +{704, 1075900364u, 1053625108u, 1053625108u, 0, LOG10_TOLERANCE, 0}, +{705, 1297778779u, 1090896649u, 1090896649u, 0, LOG10_TOLERANCE, 0}, +{706, 1125653081u, 1074505764u, 1074505764u, 0, LOG10_TOLERANCE, 0}, +{707, 1190169064u, 1083154670u, 1083154670u, 0, LOG10_TOLERANCE, 0}, +{708, 1184753508u, 1082771327u, 1082771327u, 0, LOG10_TOLERANCE, 0}, +{709, 1188439315u, 1083048812u, 1083048812u, 0, LOG10_TOLERANCE, 0}, +{710, 1314151417u, 1091514905u, 1091514905u, 0, LOG10_TOLERANCE, 0}, +{711, 1188167943u, 1083031028u, 1083031028u, 0, LOG10_TOLERANCE, 0}, +{712, 1142595790u, 1077060980u, 1077060980u, 0, LOG10_TOLERANCE, 0}, +{713, 1203206679u, 1084170649u, 1084170649u, 0, LOG10_TOLERANCE, 0}, +{714, 1102061604u, 1068228263u, 1068228263u, 0, LOG10_TOLERANCE, 0}, +{715, 1282351521u, 1090093688u, 1090093688u, 0, LOG10_TOLERANCE, 0}, +{716, 1311377417u, 1091413674u, 1091413674u, 0, LOG10_TOLERANCE, 0}, +{717, 1081309682u, 1058311429u, 1058311429u, 0, LOG10_TOLERANCE, 0}, +{718, 1274711085u, 1089504858u, 1089504858u, 0, LOG10_TOLERANCE, 0}, +{719, 1261940623u, 1088590825u, 1088590825u, 0, LOG10_TOLERANCE, 0}, +{720, 1253119433u, 1087926188u, 1087926188u, 0, LOG10_TOLERANCE, 0}, +{721, 1219411812u, 1085388863u, 1085388863u, 0, LOG10_TOLERANCE, 0}, +{722, 1149882378u, 1078113879u, 1078113879u, 0, LOG10_TOLERANCE, 0}, +{723, 1218488455u, 1085312301u, 1085312301u, 0, LOG10_TOLERANCE, 0}, +{724, 1283938137u, 1090206564u, 1090206564u, 0, LOG10_TOLERANCE, 0}, +{725, 1317098613u, 1091604724u, 1091604724u, 0, LOG10_TOLERANCE, 0}, +{726, 1284220009u, 1090235058u, 1090235058u, 0, LOG10_TOLERANCE, 0}, +{727, 1092245127u, 1065090701u, 1065090701u, 0, LOG10_TOLERANCE, 0}, +{728, 1165676440u, 1080467250u, 1080467250u, 0, LOG10_TOLERANCE, 0}, +{729, 1284174954u, 1090230563u, 1090230563u, 0, LOG10_TOLERANCE, 0}, +{730, 1102631663u, 1068403887u, 1068403887u, 0, LOG10_TOLERANCE, 0}, +{731, 1125596740u, 1074495439u, 1074495439u, 0, LOG10_TOLERANCE, 0}, +{732, 1172529774u, 1081551244u, 1081551244u, 0, LOG10_TOLERANCE, 0}, +{733, 1306695905u, 1091228805u, 1091228805u, 0, LOG10_TOLERANCE, 0}, +{734, 1078478376u, 1056811758u, 1056811758u, 0, LOG10_TOLERANCE, 0}, +{735, 1165177679u, 1080411121u, 1080411121u, 0, LOG10_TOLERANCE, 0}, +{736, 1255525865u, 1088097808u, 1088097808u, 0, LOG10_TOLERANCE, 0}, +{737, 1222777442u, 1085623525u, 1085623525u, 0, LOG10_TOLERANCE, 0}, +{738, 1325324763u, 1091913621u, 1091913621u, 0, LOG10_TOLERANCE, 0}, +{739, 1216040565u, 1085088472u, 1085088472u, 0, LOG10_TOLERANCE, 0}, +{740, 1158950321u, 1079508594u, 1079508594u, 0, LOG10_TOLERANCE, 0}, +{741, 1208345407u, 1084514979u, 1084514979u, 0, LOG10_TOLERANCE, 0}, +{742, 1258634105u, 1088298344u, 1088298344u, 0, LOG10_TOLERANCE, 0}, +{743, 1248478509u, 1087549760u, 1087549760u, 0, LOG10_TOLERANCE, 0}, +{744, 1153863988u, 1078779173u, 1078779173u, 0, LOG10_TOLERANCE, 0}, +{745, 1235620969u, 1086605139u, 1086605139u, 0, LOG10_TOLERANCE, 0}, +{746, 1097120930u, 1066655263u, 1066655263u, 0, LOG10_TOLERANCE, 0}, +{747, 1322294974u, 1091822468u, 1091822468u, 0, LOG10_TOLERANCE, 0}, +{748, 1147712200u, 1077805489u, 1077805489u, 0, LOG10_TOLERANCE, 0}, +{749, 1124721745u, 1074327092u, 1074327092u, 0, LOG10_TOLERANCE, 0}, +{750, 1114260656u, 1071792761u, 1071792761u, 0, LOG10_TOLERANCE, 0}, +{751, 1155676504u, 1079016701u, 1079016701u, 0, LOG10_TOLERANCE, 0}, +{752, 1315090496u, 1091544641u, 1091544641u, 0, LOG10_TOLERANCE, 0}, +{753, 1082919539u, 1059331952u, 1059331952u, 0, LOG10_TOLERANCE, 0}, +{754, 1335399673u, 1092311322u, 1092311322u, 0, LOG10_TOLERANCE, 0}, +{755, 1072458508u, 1049128670u, 1049128670u, 0, LOG10_TOLERANCE, 0}, +{756, 1155531601u, 1078998810u, 1078998810u, 0, LOG10_TOLERANCE, 0}, +{757, 1104656093u, 1068966936u, 1068966936u, 0, LOG10_TOLERANCE, 0}, +{758, 1321036318u, 1091778488u, 1091778488u, 0, LOG10_TOLERANCE, 0}, +{759, 1172239631u, 1081515428u, 1081515428u, 0, LOG10_TOLERANCE, 0}, +{760, 1107620519u, 1069728893u, 1069728893u, 0, LOG10_TOLERANCE, 0}, +{761, 1155477903u, 1078992135u, 1078992135u, 0, LOG10_TOLERANCE, 0}, +{762, 1126405528u, 1074638322u, 1074638322u, 0, LOG10_TOLERANCE, 0}, +{763, 1090330020u, 1063644779u, 1063644779u, 0, LOG10_TOLERANCE, 0}, +{764, 1228207362u, 1086051971u, 1086051971u, 0, LOG10_TOLERANCE, 0}, +{765, 1290175785u, 1090605316u, 1090605316u, 0, LOG10_TOLERANCE, 0}, +{766, 1214223128u, 1084981977u, 1084981977u, 0, LOG10_TOLERANCE, 0}, +{767, 1275438936u, 1089563831u, 1089563831u, 0, LOG10_TOLERANCE, 0}, +{768, 1315857601u, 1091567568u, 1091567568u, 0, LOG10_TOLERANCE, 0}, +{769, 1305742382u, 1091198584u, 1091198584u, 0, LOG10_TOLERANCE, 0}, +{770, 1078359574u, 1056679255u, 1056679255u, 0, LOG10_TOLERANCE, 0}, +{771, 1207675424u, 1084458464u, 1084458464u, 0, LOG10_TOLERANCE, 0}, +{772, 1248421894u, 1087546395u, 1087546395u, 0, LOG10_TOLERANCE, 0}, +{773, 1205768346u, 1084346548u, 1084346548u, 0, LOG10_TOLERANCE, 0}, +{774, 1076752219u, 1054756961u, 1054756961u, 0, LOG10_TOLERANCE, 0}, +{775, 1241048294u, 1086973604u, 1086973604u, 0, LOG10_TOLERANCE, 0}, +{776, 1273395082u, 1089428770u, 1089428770u, 0, LOG10_TOLERANCE, 0}, +{777, 1238104535u, 1086792336u, 1086792336u, 0, LOG10_TOLERANCE, 0}, +{778, 1294321000u, 1090770812u, 1090770812u, 0, LOG10_TOLERANCE, 0}, +{779, 1245343769u, 1087341758u, 1087341758u, 0, LOG10_TOLERANCE, 0}, +{780, 1161241793u, 1079894497u, 1079894497u, 0, LOG10_TOLERANCE, 0}, +{781, 1171318485u, 1081396814u, 1081396814u, 0, LOG10_TOLERANCE, 0}, +{782, 1243968857u, 1087233031u, 1087233031u, 0, LOG10_TOLERANCE, 0}, +{783, 1102119721u, 1068246561u, 1068246561u, 0, LOG10_TOLERANCE, 0}, +{784, 1220264047u, 1085454237u, 1085454237u, 0, LOG10_TOLERANCE, 0}, +{785, 1134728775u, 1075889794u, 1075889794u, 0, LOG10_TOLERANCE, 0}, +{786, 1204809672u, 1084284629u, 1084284629u, 0, LOG10_TOLERANCE, 0}, +{787, 1148874793u, 1077939317u, 1077939317u, 0, LOG10_TOLERANCE, 0}, +{788, 1197828352u, 1083742833u, 1083742833u, 0, LOG10_TOLERANCE, 0}, +{789, 1193026723u, 1083392420u, 1083392420u, 0, LOG10_TOLERANCE, 0}, +{790, 1127109339u, 1074754146u, 1074754146u, 0, LOG10_TOLERANCE, 0}, +{791, 1200599955u, 1083948099u, 1083948099u, 0, LOG10_TOLERANCE, 0}, +{792, 1089700228u, 1063362759u, 1063362759u, 0, LOG10_TOLERANCE, 0}, +{793, 1333109014u, 1092212490u, 1092212490u, 0, LOG10_TOLERANCE, 0}, +{794, 1155775526u, 1079028827u, 1079028827u, 0, LOG10_TOLERANCE, 0}, +{795, 1234491880u, 1086505389u, 1086505389u, 0, LOG10_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LOG10_H multiple inclusion protection + +// EOF log10.h diff --git a/packages/language/c/libm/current/tests/vectors/log1pf.c b/packages/language/c/libm/current/tests/vectors/log1pf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/log1pf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// log1pf.c +// +// Test of log1pf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/log1pf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(log1pf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &log1pf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &log1pf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("log1pf() is stable"); + } // if + else + { + CYG_TEST_FAIL("log1pf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library log1pf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "log1pf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF log1pf.c diff --git a/packages/language/c/libm/current/tests/vectors/log1pf.h b/packages/language/c/libm/current/tests/vectors/log1pf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/log1pf.h @@ -0,0 +1,1360 @@ +#ifndef CYGONCE_LIBM_LOG1PFF_H +#define CYGONCE_LIBM_LOG1PFF_H +//=========================================================================== +// +// log1pf.h +// +// Test vectors for testing of log1pf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/log1pf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define LOG1PF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t log1pf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{20, 3212669092u, 0u, 3230883216u, 0, LOG1PF_TOLERANCE, 0}, +{21, 3212501320u, 0u, 3229245082u, 0, LOG1PF_TOLERANCE, 0}, +{22, 3212333548u, 0u, 3227544438u, 0, LOG1PF_TOLERANCE, 0}, +{23, 3212165775u, 0u, 3226337805u, 0, LOG1PF_TOLERANCE, 0}, +{24, 3211998003u, 0u, 3225401875u, 0, LOG1PF_TOLERANCE, 0}, +{25, 3211830231u, 0u, 3224637164u, 0, LOG1PF_TOLERANCE, 0}, +{26, 3211662459u, 0u, 3223990609u, 0, LOG1PF_TOLERANCE, 0}, +{27, 3211494687u, 0u, 3223430539u, 0, LOG1PF_TOLERANCE, 0}, +{28, 3211326915u, 0u, 3222936521u, 0, LOG1PF_TOLERANCE, 0}, +{29, 3211159142u, 0u, 3222494605u, 0, LOG1PF_TOLERANCE, 0}, +{30, 3210991370u, 0u, 3222094845u, 0, LOG1PF_TOLERANCE, 0}, +{31, 3210823598u, 0u, 3221729894u, 0, LOG1PF_TOLERANCE, 0}, +{32, 3210655826u, 0u, 3221394171u, 0, LOG1PF_TOLERANCE, 0}, +{33, 3210488054u, 0u, 3220941207u, 0, LOG1PF_TOLERANCE, 0}, +{34, 3210320282u, 0u, 3220362453u, 0, LOG1PF_TOLERANCE, 0}, +{35, 3210152509u, 0u, 3219821062u, 0, LOG1PF_TOLERANCE, 0}, +{36, 3209984737u, 0u, 3219312507u, 0, LOG1PF_TOLERANCE, 0}, +{37, 3209816965u, 0u, 3218833027u, 0, LOG1PF_TOLERANCE, 0}, +{38, 3209649193u, 0u, 3218379479u, 0, LOG1PF_TOLERANCE, 0}, +{39, 3209481421u, 0u, 3217949200u, 0, LOG1PF_TOLERANCE, 0}, +{40, 3209313649u, 0u, 3217539919u, 0, LOG1PF_TOLERANCE, 0}, +{41, 3209145876u, 0u, 3217149679u, 0, LOG1PF_TOLERANCE, 0}, +{42, 3208978104u, 0u, 3216776791u, 0, LOG1PF_TOLERANCE, 0}, +{43, 3208810332u, 0u, 3216419775u, 0, LOG1PF_TOLERANCE, 0}, +{44, 3208642560u, 0u, 3216077336u, 0, LOG1PF_TOLERANCE, 0}, +{45, 3208474788u, 0u, 3215748329u, 0, LOG1PF_TOLERANCE, 0}, +{46, 3208307016u, 0u, 3215431741u, 0, LOG1PF_TOLERANCE, 0}, +{47, 3208139244u, 0u, 3215126667u, 0, LOG1PF_TOLERANCE, 0}, +{48, 3207971471u, 0u, 3214832298u, 0, LOG1PF_TOLERANCE, 0}, +{49, 3207803699u, 0u, 3214547912u, 0, LOG1PF_TOLERANCE, 0}, +{50, 3207635927u, 0u, 3214272851u, 0, LOG1PF_TOLERANCE, 0}, +{51, 3207468155u, 0u, 3214006524u, 0, LOG1PF_TOLERANCE, 0}, +{52, 3207300383u, 0u, 3213748393u, 0, LOG1PF_TOLERANCE, 0}, +{53, 3207132611u, 0u, 3213497968u, 0, LOG1PF_TOLERANCE, 0}, +{54, 3206964838u, 0u, 3213254802u, 0, LOG1PF_TOLERANCE, 0}, +{55, 3206797066u, 0u, 3213018487u, 0, LOG1PF_TOLERANCE, 0}, +{56, 3206629294u, 0u, 3212740433u, 0, LOG1PF_TOLERANCE, 0}, +{57, 3206461522u, 0u, 3212293014u, 0, LOG1PF_TOLERANCE, 0}, +{58, 3206293750u, 0u, 3211857218u, 0, LOG1PF_TOLERANCE, 0}, +{59, 3206125978u, 0u, 3211432457u, 0, LOG1PF_TOLERANCE, 0}, +{60, 3205958205u, 0u, 3211018181u, 0, LOG1PF_TOLERANCE, 0}, +{61, 3205790433u, 0u, 3210613892u, 0, LOG1PF_TOLERANCE, 0}, +{62, 3205622661u, 0u, 3210219116u, 0, LOG1PF_TOLERANCE, 0}, +{63, 3205454889u, 0u, 3209833416u, 0, LOG1PF_TOLERANCE, 0}, +{64, 3205287117u, 0u, 3209456385u, 0, LOG1PF_TOLERANCE, 0}, +{65, 3205119345u, 0u, 3209087640u, 0, LOG1PF_TOLERANCE, 0}, +{66, 3204951572u, 0u, 3208726824u, 0, LOG1PF_TOLERANCE, 0}, +{67, 3204783800u, 0u, 3208373607u, 0, LOG1PF_TOLERANCE, 0}, +{68, 3204616028u, 0u, 3208027673u, 0, LOG1PF_TOLERANCE, 0}, +{69, 3204448256u, 0u, 3207688728u, 0, LOG1PF_TOLERANCE, 0}, +{70, 3204112712u, 0u, 3207356495u, 0, LOG1PF_TOLERANCE, 0}, +{71, 3203777167u, 0u, 3207030713u, 0, LOG1PF_TOLERANCE, 0}, +{72, 3203441623u, 0u, 3206711138u, 0, LOG1PF_TOLERANCE, 0}, +{73, 3203106079u, 0u, 3206397536u, 0, LOG1PF_TOLERANCE, 0}, +{74, 3202770534u, 0u, 3206089688u, 0, LOG1PF_TOLERANCE, 0}, +{75, 3202434990u, 0u, 3205787388u, 0, LOG1PF_TOLERANCE, 0}, +{76, 3202099446u, 0u, 3205490439u, 0, LOG1PF_TOLERANCE, 0}, +{77, 3201763901u, 0u, 3205198653u, 0, LOG1PF_TOLERANCE, 0}, +{78, 3201428357u, 0u, 3204911856u, 0, LOG1PF_TOLERANCE, 0}, +{79, 3201092813u, 0u, 3204629880u, 0, LOG1PF_TOLERANCE, 0}, +{80, 3200757268u, 0u, 3204256872u, 0, LOG1PF_TOLERANCE, 0}, +{81, 3200421724u, 0u, 3203711260u, 0, LOG1PF_TOLERANCE, 0}, +{82, 3200086180u, 0u, 3203174378u, 0, LOG1PF_TOLERANCE, 0}, +{83, 3199750636u, 0u, 3202645951u, 0, LOG1PF_TOLERANCE, 0}, +{84, 3199415091u, 0u, 3202125716u, 0, LOG1PF_TOLERANCE, 0}, +{85, 3199079547u, 0u, 3201613425u, 0, LOG1PF_TOLERANCE, 0}, +{86, 3198744003u, 0u, 3201108838u, 0, LOG1PF_TOLERANCE, 0}, +{87, 3198408458u, 0u, 3200611725u, 0, LOG1PF_TOLERANCE, 0}, +{88, 3198072914u, 0u, 3200121871u, 0, LOG1PF_TOLERANCE, 0}, +{89, 3197737370u, 0u, 3199639066u, 0, LOG1PF_TOLERANCE, 0}, +{90, 3197401825u, 0u, 3199163107u, 0, LOG1PF_TOLERANCE, 0}, +{91, 3197066281u, 0u, 3198693807u, 0, LOG1PF_TOLERANCE, 0}, +{92, 3196730737u, 0u, 3198230981u, 0, LOG1PF_TOLERANCE, 0}, +{93, 3196395192u, 0u, 3197774450u, 0, LOG1PF_TOLERANCE, 0}, +{94, 3196059648u, 0u, 3197324049u, 0, LOG1PF_TOLERANCE, 0}, +{95, 3195388559u, 0u, 3196879612u, 0, LOG1PF_TOLERANCE, 0}, +{96, 3194717471u, 0u, 3196440986u, 0, LOG1PF_TOLERANCE, 0}, +{97, 3194046382u, 0u, 3195956391u, 0, LOG1PF_TOLERANCE, 0}, +{98, 3193375293u, 0u, 3195101489u, 0, LOG1PF_TOLERANCE, 0}, +{99, 3192704205u, 0u, 3194257342u, 0, LOG1PF_TOLERANCE, 0}, +{100, 3192033116u, 0u, 3193423681u, 0, LOG1PF_TOLERANCE, 0}, +{101, 3191362028u, 0u, 3192600250u, 0, LOG1PF_TOLERANCE, 0}, +{102, 3190690939u, 0u, 3191786798u, 0, LOG1PF_TOLERANCE, 0}, +{103, 3190019850u, 0u, 3190983089u, 0, LOG1PF_TOLERANCE, 0}, +{104, 3189348762u, 0u, 3190188893u, 0, LOG1PF_TOLERANCE, 0}, +{105, 3188677673u, 0u, 3189403985u, 0, LOG1PF_TOLERANCE, 0}, +{106, 3188006584u, 0u, 3188628151u, 0, LOG1PF_TOLERANCE, 0}, +{107, 3186999951u, 0u, 3187861184u, 0, LOG1PF_TOLERANCE, 0}, +{108, 3185657774u, 0u, 3186534728u, 0, LOG1PF_TOLERANCE, 0}, +{109, 3184315597u, 0u, 3185035073u, 0, LOG1PF_TOLERANCE, 0}, +{110, 3182973420u, 0u, 3183551990u, 0, LOG1PF_TOLERANCE, 0}, +{111, 3181631242u, 0u, 3182085114u, 0, LOG1PF_TOLERANCE, 0}, +{112, 3180289065u, 0u, 3180634098u, 0, LOG1PF_TOLERANCE, 0}, +{113, 3178611343u, 0u, 3179114768u, 0, LOG1PF_TOLERANCE, 0}, +{114, 3175926989u, 0u, 3176274155u, 0, LOG1PF_TOLERANCE, 0}, +{115, 3173242634u, 0u, 3173463286u, 0, LOG1PF_TOLERANCE, 0}, +{116, 3170222735u, 0u, 3170469270u, 0, LOG1PF_TOLERANCE, 0}, +{117, 3164854026u, 0u, 3164962854u, 0, LOG1PF_TOLERANCE, 0}, +{118, 3156465418u, 0u, 3156519466u, 0, LOG1PF_TOLERANCE, 0}, +{119, 1008981770u, 0u, 1008928438u, 0, LOG1PF_TOLERANCE, 0}, +{120, 1017370378u, 0u, 1017264414u, 0, LOG1PF_TOLERANCE, 0}, +{121, 1022739087u, 0u, 1022502221u, 0, LOG1PF_TOLERANCE, 0}, +{122, 1025758986u, 0u, 1025549798u, 0, LOG1PF_TOLERANCE, 0}, +{123, 1028443341u, 0u, 1028118578u, 0, LOG1PF_TOLERANCE, 0}, +{124, 1031127695u, 0u, 1030663009u, 0, LOG1PF_TOLERANCE, 0}, +{125, 1032805417u, 0u, 1032491166u, 0, LOG1PF_TOLERANCE, 0}, +{126, 1034147594u, 0u, 1033739712u, 0, LOG1PF_TOLERANCE, 0}, +{127, 1035489772u, 0u, 1034976751u, 0, LOG1PF_TOLERANCE, 0}, +{128, 1036831949u, 0u, 1036202492u, 0, LOG1PF_TOLERANCE, 0}, +{129, 1038174126u, 0u, 1037417140u, 0, LOG1PF_TOLERANCE, 0}, +{130, 1039516303u, 0u, 1038620894u, 0, LOG1PF_TOLERANCE, 0}, +{131, 1040522936u, 0u, 1039813948u, 0, LOG1PF_TOLERANCE, 0}, +{132, 1041194025u, 0u, 1040591942u, 0, LOG1PF_TOLERANCE, 0}, +{133, 1041865114u, 0u, 1041178050u, 0, LOG1PF_TOLERANCE, 0}, +{134, 1042536202u, 0u, 1041759082u, 0, LOG1PF_TOLERANCE, 0}, +{135, 1043207291u, 0u, 1042335127u, 0, LOG1PF_TOLERANCE, 0}, +{136, 1043878380u, 0u, 1042906270u, 0, LOG1PF_TOLERANCE, 0}, +{137, 1044549468u, 0u, 1043472593u, 0, LOG1PF_TOLERANCE, 0}, +{138, 1045220557u, 0u, 1044034177u, 0, LOG1PF_TOLERANCE, 0}, +{139, 1045891645u, 0u, 1044591099u, 0, LOG1PF_TOLERANCE, 0}, +{140, 1046562734u, 0u, 1045143439u, 0, LOG1PF_TOLERANCE, 0}, +{141, 1047233823u, 0u, 1045691270u, 0, LOG1PF_TOLERANCE, 0}, +{142, 1047904911u, 0u, 1046234664u, 0, LOG1PF_TOLERANCE, 0}, +{143, 1048576000u, 0u, 1046773694u, 0, LOG1PF_TOLERANCE, 0}, +{144, 1048911544u, 0u, 1047308429u, 0, LOG1PF_TOLERANCE, 0}, +{145, 1049247089u, 0u, 1047838937u, 0, LOG1PF_TOLERANCE, 0}, +{146, 1049582633u, 0u, 1048365283u, 0, LOG1PF_TOLERANCE, 0}, +{147, 1049918177u, 0u, 1048731767u, 0, LOG1PF_TOLERANCE, 0}, +{148, 1050253722u, 0u, 1048990876u, 0, LOG1PF_TOLERANCE, 0}, +{149, 1050589266u, 0u, 1049247999u, 0, LOG1PF_TOLERANCE, 0}, +{150, 1050924810u, 0u, 1049503167u, 0, LOG1PF_TOLERANCE, 0}, +{151, 1051260355u, 0u, 1049756410u, 0, LOG1PF_TOLERANCE, 0}, +{152, 1051595899u, 0u, 1050007755u, 0, LOG1PF_TOLERANCE, 0}, +{153, 1051931443u, 0u, 1050257231u, 0, LOG1PF_TOLERANCE, 0}, +{154, 1052266988u, 0u, 1050504867u, 0, LOG1PF_TOLERANCE, 0}, +{155, 1052602532u, 0u, 1050750688u, 0, LOG1PF_TOLERANCE, 0}, +{156, 1052938076u, 0u, 1050994721u, 0, LOG1PF_TOLERANCE, 0}, +{157, 1053273620u, 0u, 1051236992u, 0, LOG1PF_TOLERANCE, 0}, +{158, 1053609165u, 0u, 1051477527u, 0, LOG1PF_TOLERANCE, 0}, +{159, 1053944709u, 0u, 1051716349u, 0, LOG1PF_TOLERANCE, 0}, +{160, 1054280253u, 0u, 1051953484u, 0, LOG1PF_TOLERANCE, 0}, +{161, 1054615798u, 0u, 1052188955u, 0, LOG1PF_TOLERANCE, 0}, +{162, 1054951342u, 0u, 1052422785u, 0, LOG1PF_TOLERANCE, 0}, +{163, 1055286886u, 0u, 1052654996u, 0, LOG1PF_TOLERANCE, 0}, +{164, 1055622431u, 0u, 1052885612u, 0, LOG1PF_TOLERANCE, 0}, +{165, 1055957975u, 0u, 1053114653u, 0, LOG1PF_TOLERANCE, 0}, +{166, 1056293519u, 0u, 1053342141u, 0, LOG1PF_TOLERANCE, 0}, +{167, 1056629064u, 0u, 1053568098u, 0, LOG1PF_TOLERANCE, 0}, +{168, 1056964608u, 0u, 1053792543u, 0, LOG1PF_TOLERANCE, 0}, +{169, 1057132380u, 0u, 1054015497u, 0, LOG1PF_TOLERANCE, 0}, +{170, 1057300152u, 0u, 1054236979u, 0, LOG1PF_TOLERANCE, 0}, +{171, 1057467924u, 0u, 1054457009u, 0, LOG1PF_TOLERANCE, 0}, +{172, 1057635697u, 0u, 1054675606u, 0, LOG1PF_TOLERANCE, 0}, +{173, 1057803469u, 0u, 1054892788u, 0, LOG1PF_TOLERANCE, 0}, +{174, 1057971241u, 0u, 1055108572u, 0, LOG1PF_TOLERANCE, 0}, +{175, 1058139013u, 0u, 1055322978u, 0, LOG1PF_TOLERANCE, 0}, +{176, 1058306785u, 0u, 1055536023u, 0, LOG1PF_TOLERANCE, 0}, +{177, 1058474557u, 0u, 1055747723u, 0, LOG1PF_TOLERANCE, 0}, +{178, 1058642330u, 0u, 1055958097u, 0, LOG1PF_TOLERANCE, 0}, +{179, 1058810102u, 0u, 1056167160u, 0, LOG1PF_TOLERANCE, 0}, +{180, 1058977874u, 0u, 1056374928u, 0, LOG1PF_TOLERANCE, 0}, +{181, 1059145646u, 0u, 1056581417u, 0, LOG1PF_TOLERANCE, 0}, +{182, 1059313418u, 0u, 1056786643u, 0, LOG1PF_TOLERANCE, 0}, +{183, 1059481190u, 0u, 1056977615u, 0, LOG1PF_TOLERANCE, 0}, +{184, 1059648963u, 0u, 1057078989u, 0, LOG1PF_TOLERANCE, 0}, +{185, 1059816735u, 0u, 1057179753u, 0, LOG1PF_TOLERANCE, 0}, +{186, 1059984507u, 0u, 1057279916u, 0, LOG1PF_TOLERANCE, 0}, +{187, 1060152279u, 0u, 1057379484u, 0, LOG1PF_TOLERANCE, 0}, +{188, 1060320051u, 0u, 1057478465u, 0, LOG1PF_TOLERANCE, 0}, +{189, 1060487823u, 0u, 1057576865u, 0, LOG1PF_TOLERANCE, 0}, +{190, 1060655596u, 0u, 1057674692u, 0, LOG1PF_TOLERANCE, 0}, +{191, 1060823368u, 0u, 1057771951u, 0, LOG1PF_TOLERANCE, 0}, +{192, 1060991140u, 0u, 1057868650u, 0, LOG1PF_TOLERANCE, 0}, +{193, 1061158912u, 0u, 1057964795u, 0, LOG1PF_TOLERANCE, 0}, +{194, 1061326684u, 0u, 1058060392u, 0, LOG1PF_TOLERANCE, 0}, +{195, 1061494456u, 0u, 1058155447u, 0, LOG1PF_TOLERANCE, 0}, +{196, 1061662228u, 0u, 1058249967u, 0, LOG1PF_TOLERANCE, 0}, +{197, 1061830001u, 0u, 1058343957u, 0, LOG1PF_TOLERANCE, 0}, +{198, 1061997773u, 0u, 1058437424u, 0, LOG1PF_TOLERANCE, 0}, +{199, 1062165545u, 0u, 1058530373u, 0, LOG1PF_TOLERANCE, 0}, +{200, 1062333317u, 0u, 1058622809u, 0, LOG1PF_TOLERANCE, 0}, +{201, 1062501089u, 0u, 1058714739u, 0, LOG1PF_TOLERANCE, 0}, +{202, 1062668861u, 0u, 1058806168u, 0, LOG1PF_TOLERANCE, 0}, +{203, 1062836634u, 0u, 1058897103u, 0, LOG1PF_TOLERANCE, 0}, +{204, 1063004406u, 0u, 1058987546u, 0, LOG1PF_TOLERANCE, 0}, +{205, 1063172178u, 0u, 1059077504u, 0, LOG1PF_TOLERANCE, 0}, +{206, 1063339950u, 0u, 1059166983u, 0, LOG1PF_TOLERANCE, 0}, +{207, 1063507722u, 0u, 1059255987u, 0, LOG1PF_TOLERANCE, 0}, +{208, 1063675494u, 0u, 1059344521u, 0, LOG1PF_TOLERANCE, 0}, +{209, 1063843267u, 0u, 1059432591u, 0, LOG1PF_TOLERANCE, 0}, +{210, 1064011039u, 0u, 1059520201u, 0, LOG1PF_TOLERANCE, 0}, +{211, 1064178811u, 0u, 1059607355u, 0, LOG1PF_TOLERANCE, 0}, +{212, 1064346583u, 0u, 1059694059u, 0, LOG1PF_TOLERANCE, 0}, +{213, 1064514355u, 0u, 1059780318u, 0, LOG1PF_TOLERANCE, 0}, +{214, 1064682127u, 0u, 1059866135u, 0, LOG1PF_TOLERANCE, 0}, +{215, 1064849900u, 0u, 1059951515u, 0, LOG1PF_TOLERANCE, 0}, +{216, 1065017672u, 0u, 1060036463u, 0, LOG1PF_TOLERANCE, 0}, +{217, 1065185444u, 0u, 1060120984u, 0, LOG1PF_TOLERANCE, 0}, +{218, 1065353216u, 0u, 1060205080u, 0, LOG1PF_TOLERANCE, 0}, +{219, 1065437102u, 0u, 1060288757u, 0, LOG1PF_TOLERANCE, 0}, +{220, 1065520988u, 0u, 1060372019u, 0, LOG1PF_TOLERANCE, 0}, +{221, 1065604874u, 0u, 1060454869u, 0, LOG1PF_TOLERANCE, 0}, +{222, 1065688760u, 0u, 1060537313u, 0, LOG1PF_TOLERANCE, 0}, +{223, 1065772646u, 0u, 1060619353u, 0, LOG1PF_TOLERANCE, 0}, +{224, 1065856532u, 0u, 1060700994u, 0, LOG1PF_TOLERANCE, 0}, +{225, 1065940419u, 0u, 1060782241u, 0, LOG1PF_TOLERANCE, 0}, +{226, 1066024305u, 0u, 1060863095u, 0, LOG1PF_TOLERANCE, 0}, +{227, 1066108191u, 0u, 1060943561u, 0, LOG1PF_TOLERANCE, 0}, +{228, 1066192077u, 0u, 1061023643u, 0, LOG1PF_TOLERANCE, 0}, +{229, 1066275963u, 0u, 1061103345u, 0, LOG1PF_TOLERANCE, 0}, +{230, 1066359849u, 0u, 1061182670u, 0, LOG1PF_TOLERANCE, 0}, +{231, 1066443735u, 0u, 1061261622u, 0, LOG1PF_TOLERANCE, 0}, +{232, 1066527621u, 0u, 1061340204u, 0, LOG1PF_TOLERANCE, 0}, +{233, 1066611507u, 0u, 1061418419u, 0, LOG1PF_TOLERANCE, 0}, +{234, 1066695393u, 0u, 1061496272u, 0, LOG1PF_TOLERANCE, 0}, +{235, 1066779279u, 0u, 1061573765u, 0, LOG1PF_TOLERANCE, 0}, +{236, 1066863165u, 0u, 1061650901u, 0, LOG1PF_TOLERANCE, 0}, +{237, 1066947052u, 0u, 1061727686u, 0, LOG1PF_TOLERANCE, 0}, +{238, 3234402267u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{239, 3231108068u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{240, 3226013659u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{241, 3217625051u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{242, 0u, 0u, 0u, 0, LOG1PF_TOLERANCE, 0}, +{243, 1070141403u, 0u, 1064417311u, 0, LOG1PF_TOLERANCE, 0}, +{244, 1078530011u, 0u, 1068885495u, 0, LOG1PF_TOLERANCE, 0}, +{245, 1083624420u, 0u, 1071582909u, 0, LOG1PF_TOLERANCE, 0}, +{246, 3253731328u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{247, 3252840038u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{248, 3251948749u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{249, 3251057459u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{250, 3250166170u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{251, 3249274880u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{252, 3248383590u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{253, 3247492301u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{254, 3246601011u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{255, 3245028147u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{256, 3243245568u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{257, 3241462989u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{258, 3239680410u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{259, 3237792973u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{260, 3234227814u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{261, 3230662656u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{262, 3224580915u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{263, 3213675725u, 0u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{264, 1058642330u, 0u, 1055958097u, 0, LOG1PF_TOLERANCE, 0}, +{265, 1075000115u, 0u, 1066979955u, 0, LOG1PF_TOLERANCE, 0}, +{266, 1082130432u, 0u, 1070465552u, 0, LOG1PF_TOLERANCE, 0}, +{267, 1085695590u, 0u, 1072920642u, 0, LOG1PF_TOLERANCE, 0}, +{268, 1089260749u, 0u, 1074279667u, 0, LOG1PF_TOLERANCE, 0}, +{269, 1091672474u, 0u, 1075052693u, 0, LOG1PF_TOLERANCE, 0}, +{270, 1093455053u, 0u, 1075705176u, 0, LOG1PF_TOLERANCE, 0}, +{271, 1095237632u, 0u, 1076269688u, 0, LOG1PF_TOLERANCE, 0}, +{272, 1097020211u, 0u, 1076767156u, 0, LOG1PF_TOLERANCE, 0}, +{273, 1098802790u, 0u, 1077211829u, 0, LOG1PF_TOLERANCE, 0}, +{274, 1099746509u, 0u, 1077613844u, 0, LOG1PF_TOLERANCE, 0}, +{275, 1100637798u, 0u, 1077980675u, 0, LOG1PF_TOLERANCE, 0}, +{276, 1101529088u, 0u, 1078317988u, 0, LOG1PF_TOLERANCE, 0}, +{277, 1102420378u, 0u, 1078630181u, 0, LOG1PF_TOLERANCE, 0}, +{278, 1103311667u, 0u, 1078920737u, 0, LOG1PF_TOLERANCE, 0}, +{279, 1104202957u, 0u, 1079192464u, 0, LOG1PF_TOLERANCE, 0}, +{280, 1105094246u, 0u, 1079447652u, 0, LOG1PF_TOLERANCE, 0}, +{281, 1105985536u, 0u, 1079688201u, 0, LOG1PF_TOLERANCE, 0}, +{282, 1107800421u, 1203999711u, 1080256217u, 0, LOG1PF_TOLERANCE, 0}, +{283, 3196650934u, 896005582u, 3198121839u, 0, LOG1PF_TOLERANCE, 0}, +{284, 3368700125u, 3308232444u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{285, 1224242132u, 3061363425u, 1095908587u, 0, LOG1PF_TOLERANCE, 0}, +{286, 3221027117u, 1284201705u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{287, 1198712763u, 919636942u, 1093704472u, 0, LOG1PF_TOLERANCE, 0}, +{288, 867432512u, 3067736756u, 867432512u, 0, LOG1PF_TOLERANCE, 0}, +{289, 3159309973u, 852521077u, 3159396605u, 0, LOG1PF_TOLERANCE, 0}, +{290, 954173073u, 850531830u, 954172292u, 0, LOG1PF_TOLERANCE, 0}, +{291, 3090780435u, 1035260608u, 3090780704u, 0, LOG1PF_TOLERANCE, 0}, +{292, 966554515u, 3234538174u, 966552985u, 0, LOG1PF_TOLERANCE, 0}, +{293, 1312607135u, 1194999402u, 1101261650u, 0, LOG1PF_TOLERANCE, 0}, +{294, 1166191415u, 1018661564u, 1090874131u, 0, LOG1PF_TOLERANCE, 0}, +{295, 3111900019u, 1130472166u, 3111902001u, 0, LOG1PF_TOLERANCE, 0}, +{296, 1234419246u, 2984575812u, 1096817194u, 0, LOG1PF_TOLERANCE, 0}, +{297, 1302107128u, 3370647675u, 1100800142u, 0, LOG1PF_TOLERANCE, 0}, +{298, 1052801068u, 3039122570u, 1050895292u, 0, LOG1PF_TOLERANCE, 0}, +{299, 1060849628u, 3081357692u, 1057787124u, 0, LOG1PF_TOLERANCE, 0}, +{300, 3010214568u, 3446630737u, 3010214568u, 0, LOG1PF_TOLERANCE, 0}, +{301, 3484320003u, 3033957825u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{302, 3181522772u, 3305392896u, 3181967263u, 0, LOG1PF_TOLERANCE, 0}, +{303, 882596369u, 1256676590u, 882596368u, 0, LOG1PF_TOLERANCE, 0}, +{304, 1167223673u, 846102364u, 1090993444u, 0, LOG1PF_TOLERANCE, 0}, +{305, 968192794u, 878547432u, 968190737u, 0, LOG1PF_TOLERANCE, 0}, +{306, 3122346862u, 1111584337u, 3122349875u, 0, LOG1PF_TOLERANCE, 0}, +{307, 1052361612u, 1280025214u, 1050574371u, 0, LOG1PF_TOLERANCE, 0}, +{308, 906701409u, 2968301825u, 906701400u, 0, LOG1PF_TOLERANCE, 0}, +{309, 3471653172u, 1154138102u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{310, 843024648u, 3166833184u, 843024648u, 0, LOG1PF_TOLERANCE, 0}, +{311, 3231467496u, 934336592u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{312, 1341514497u, 3466051188u, 1102490397u, 0, LOG1PF_TOLERANCE, 0}, +{313, 1272351391u, 3373485062u, 1099511631u, 0, LOG1PF_TOLERANCE, 0}, +{314, 3319724992u, 3354615790u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{315, 3013402113u, 3266377514u, 3013402113u, 0, LOG1PF_TOLERANCE, 0}, +{316, 917622040u, 1334966485u, 917622009u, 0, LOG1PF_TOLERANCE, 0}, +{317, 940236348u, 3304072663u, 940236197u, 0, LOG1PF_TOLERANCE, 0}, +{318, 2963234879u, 977028681u, 2963234879u, 0, LOG1PF_TOLERANCE, 0}, +{319, 3251541546u, 3174764041u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{320, 3099843889u, 3355962282u, 3099844488u, 0, LOG1PF_TOLERANCE, 0}, +{321, 3110358400u, 851145088u, 3110360029u, 0, LOG1PF_TOLERANCE, 0}, +{322, 3371863479u, 1014861921u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{323, 3204069187u, 966573255u, 3207313878u, 0, LOG1PF_TOLERANCE, 0}, +{324, 1306460502u, 903489435u, 1100985551u, 0, LOG1PF_TOLERANCE, 0}, +{325, 1197542187u, 3024598921u, 1093624386u, 0, LOG1PF_TOLERANCE, 0}, +{326, 922888249u, 1139392309u, 922888216u, 0, LOG1PF_TOLERANCE, 0}, +{327, 1184239996u, 3224098462u, 1092472718u, 0, LOG1PF_TOLERANCE, 0}, +{328, 1252490238u, 1173619825u, 1098402337u, 0, LOG1PF_TOLERANCE, 0}, +{329, 1001673627u, 3462631271u, 1001641228u, 0, LOG1PF_TOLERANCE, 0}, +{330, 976098044u, 1151967422u, 976094258u, 0, LOG1PF_TOLERANCE, 0}, +{331, 941796645u, 886451963u, 941796438u, 0, LOG1PF_TOLERANCE, 0}, +{332, 3006797923u, 1103058486u, 3006797923u, 0, LOG1PF_TOLERANCE, 0}, +{333, 855756273u, 3217259624u, 855756273u, 0, LOG1PF_TOLERANCE, 0}, +{334, 3287199470u, 854245542u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{335, 893184329u, 1243067084u, 893184325u, 0, LOG1PF_TOLERANCE, 0}, +{336, 1143233714u, 1007268238u, 1087352102u, 0, LOG1PF_TOLERANCE, 0}, +{337, 1139941253u, 1147688821u, 1086711989u, 0, LOG1PF_TOLERANCE, 0}, +{338, 3143717025u, 3234638157u, 3143742467u, 0, LOG1PF_TOLERANCE, 0}, +{339, 3048866608u, 3449209899u, 3048866616u, 0, LOG1PF_TOLERANCE, 0}, +{340, 3240298487u, 1020260821u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{341, 1288902137u, 3123875978u, 1100229934u, 0, LOG1PF_TOLERANCE, 0}, +{342, 1333134799u, 1338107877u, 1102127278u, 0, LOG1PF_TOLERANCE, 0}, +{343, 1187847971u, 1317663644u, 1092800397u, 0, LOG1PF_TOLERANCE, 0}, +{344, 1038851706u, 1327544110u, 1038026189u, 0, LOG1PF_TOLERANCE, 0}, +{345, 3329354473u, 3165437289u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{346, 3077218579u, 1308397879u, 3077218687u, 0, LOG1PF_TOLERANCE, 0}, +{347, 1309289088u, 1019883016u, 1101097963u, 0, LOG1PF_TOLERANCE, 0}, +{348, 2991550291u, 1294782875u, 2991550291u, 0, LOG1PF_TOLERANCE, 0}, +{349, 3444653659u, 1279248024u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{350, 3405585402u, 2962345057u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{351, 3106647724u, 853848387u, 3106648645u, 0, LOG1PF_TOLERANCE, 0}, +{352, 1106778573u, 3304487767u, 1079891217u, 0, LOG1PF_TOLERANCE, 0}, +{353, 1140567947u, 3069174149u, 1086793057u, 0, LOG1PF_TOLERANCE, 0}, +{354, 1238569473u, 873035665u, 1097191240u, 0, LOG1PF_TOLERANCE, 0}, +{355, 840375965u, 3223983207u, 840375965u, 0, LOG1PF_TOLERANCE, 0}, +{356, 3154871957u, 1276671061u, 3154911114u, 0, LOG1PF_TOLERANCE, 0}, +{357, 1261071232u, 1182202773u, 1099027511u, 0, LOG1PF_TOLERANCE, 0}, +{358, 1175011025u, 3029705783u, 1091652307u, 0, LOG1PF_TOLERANCE, 0}, +{359, 1082692850u, 1211581107u, 1070903835u, 0, LOG1PF_TOLERANCE, 0}, +{360, 974547519u, 3475164509u, 974544692u, 0, LOG1PF_TOLERANCE, 0}, +{361, 3058097085u, 3104309359u, 3058097104u, 0, LOG1PF_TOLERANCE, 0}, +{362, 3107252546u, 1071134451u, 3107253569u, 0, LOG1PF_TOLERANCE, 0}, +{363, 3096032662u, 2976848821u, 3096032958u, 0, LOG1PF_TOLERANCE, 0}, +{364, 3197942144u, 3094120030u, 3199932883u, 0, LOG1PF_TOLERANCE, 0}, +{365, 3403348556u, 3184653669u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{366, 2998032500u, 3373011130u, 2998032500u, 0, LOG1PF_TOLERANCE, 0}, +{367, 3182301130u, 3460764044u, 3182815235u, 0, LOG1PF_TOLERANCE, 0}, +{368, 1136411063u, 1118097422u, 1086185498u, 0, LOG1PF_TOLERANCE, 0}, +{369, 3239231622u, 3302723069u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{370, 3340615780u, 870350055u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{371, 998567360u, 2995278691u, 998549738u, 0, LOG1PF_TOLERANCE, 0}, +{372, 3417964312u, 1321337529u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{373, 3109481038u, 1143864063u, 3109482482u, 0, LOG1PF_TOLERANCE, 0}, +{374, 1148867223u, 1256486202u, 1088233235u, 0, LOG1PF_TOLERANCE, 0}, +{375, 2960983878u, 1314196594u, 2960983878u, 0, LOG1PF_TOLERANCE, 0}, +{376, 989687421u, 3372681320u, 989671385u, 0, LOG1PF_TOLERANCE, 0}, +{377, 1152956913u, 3166480640u, 1089048923u, 0, LOG1PF_TOLERANCE, 0}, +{378, 892922651u, 3373029087u, 892922647u, 0, LOG1PF_TOLERANCE, 0}, +{379, 1109627625u, 1314158257u, 1081019486u, 0, LOG1PF_TOLERANCE, 0}, +{380, 1307091856u, 1103202538u, 1101007725u, 0, LOG1PF_TOLERANCE, 0}, +{381, 1077234132u, 3272167130u, 1068235135u, 0, LOG1PF_TOLERANCE, 0}, +{382, 1142167709u, 1096445242u, 1087133907u, 0, LOG1PF_TOLERANCE, 0}, +{383, 3426232834u, 1036705270u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{384, 3000726366u, 3172023300u, 3000726366u, 0, LOG1PF_TOLERANCE, 0}, +{385, 3368566779u, 967249167u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{386, 3030724760u, 3349013503u, 3030724762u, 0, LOG1PF_TOLERANCE, 0}, +{387, 1138741813u, 3073453199u, 1086547508u, 0, LOG1PF_TOLERANCE, 0}, +{388, 982950501u, 982549888u, 982944833u, 0, LOG1PF_TOLERANCE, 0}, +{389, 1142981585u, 1015602236u, 1087302507u, 0, LOG1PF_TOLERANCE, 0}, +{390, 3016453868u, 3365560001u, 3016453869u, 0, LOG1PF_TOLERANCE, 0}, +{391, 3347165962u, 3135486696u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{392, 1009535440u, 3381353228u, 1009476486u, 0, LOG1PF_TOLERANCE, 0}, +{393, 3103736980u, 3402950505u, 3103737998u, 0, LOG1PF_TOLERANCE, 0}, +{394, 3126820946u, 1077903063u, 3126827194u, 0, LOG1PF_TOLERANCE, 0}, +{395, 3473956030u, 976891930u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{396, 3349098349u, 1055327704u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{397, 3152729489u, 1060398533u, 3152784901u, 0, LOG1PF_TOLERANCE, 0}, +{398, 945568720u, 3313485084u, 945568341u, 0, LOG1PF_TOLERANCE, 0}, +{399, 3345489836u, 1108392401u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{400, 940893161u, 1137000140u, 940892988u, 0, LOG1PF_TOLERANCE, 0}, +{401, 976791751u, 3230678102u, 976787491u, 0, LOG1PF_TOLERANCE, 0}, +{402, 3013749677u, 1324802687u, 3013749677u, 0, LOG1PF_TOLERANCE, 0}, +{403, 1004442355u, 3036510596u, 1004393039u, 0, LOG1PF_TOLERANCE, 0}, +{404, 1108485380u, 3173536878u, 1080558845u, 0, LOG1PF_TOLERANCE, 0}, +{405, 1061834641u, 972388096u, 1058346549u, 0, LOG1PF_TOLERANCE, 0}, +{406, 3381268392u, 1146976802u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{407, 1087189715u, 2952822478u, 1073755085u, 0, LOG1PF_TOLERANCE, 0}, +{408, 3212952285u, 3329407365u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{409, 1000611335u, 857599439u, 1000584490u, 0, LOG1PF_TOLERANCE, 0}, +{410, 847191250u, 1227905777u, 847191250u, 0, LOG1PF_TOLERANCE, 0}, +{411, 3466188568u, 1041678304u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{412, 2968337765u, 3091399866u, 2968337765u, 0, LOG1PF_TOLERANCE, 0}, +{413, 3072456205u, 3160254633u, 3072456256u, 0, LOG1PF_TOLERANCE, 0}, +{414, 3319315516u, 3422089012u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{415, 935938416u, 1146676692u, 935938258u, 0, LOG1PF_TOLERANCE, 0}, +{416, 3212614372u, 1152633030u, 3230291221u, 0, LOG1PF_TOLERANCE, 0}, +{417, 1315030230u, 3336225884u, 1101355418u, 0, LOG1PF_TOLERANCE, 0}, +{418, 822041816u, 898402905u, 822041816u, 0, LOG1PF_TOLERANCE, 0}, +{419, 1134593658u, 3456812581u, 1085852266u, 0, LOG1PF_TOLERANCE, 0}, +{420, 977281449u, 879922831u, 977276837u, 0, LOG1PF_TOLERANCE, 0}, +{421, 1086198791u, 920125958u, 1073215806u, 0, LOG1PF_TOLERANCE, 0}, +{422, 1255152035u, 851754050u, 1098630014u, 0, LOG1PF_TOLERANCE, 0}, +{423, 1135271264u, 3284878412u, 1085982778u, 0, LOG1PF_TOLERANCE, 0}, +{424, 1094190727u, 1056854532u, 1075947424u, 0, LOG1PF_TOLERANCE, 0}, +{425, 1294665325u, 991185677u, 1100483004u, 0, LOG1PF_TOLERANCE, 0}, +{426, 1036608591u, 805416536u, 1035999285u, 0, LOG1PF_TOLERANCE, 0}, +{427, 2960459834u, 1296239160u, 2960459834u, 0, LOG1PF_TOLERANCE, 0}, +{428, 3229998064u, 825237063u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{429, 3439134022u, 1043829691u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{430, 3073083133u, 1317170485u, 3073083190u, 0, LOG1PF_TOLERANCE, 0}, +{431, 1325668223u, 970681762u, 1101801209u, 0, LOG1PF_TOLERANCE, 0}, +{432, 1092037607u, 1027330835u, 1075194863u, 0, LOG1PF_TOLERANCE, 0}, +{433, 826457956u, 3343511749u, 826457956u, 0, LOG1PF_TOLERANCE, 0}, +{434, 3316278408u, 3455589207u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{435, 3295436768u, 3129873731u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{436, 1151984049u, 3074547120u, 1088873360u, 0, LOG1PF_TOLERANCE, 0}, +{437, 1129287043u, 3076527544u, 1084941019u, 0, LOG1PF_TOLERANCE, 0}, +{438, 1243664530u, 972879810u, 1097632909u, 0, LOG1PF_TOLERANCE, 0}, +{439, 950829092u, 929114193u, 950828627u, 0, LOG1PF_TOLERANCE, 0}, +{440, 1115471979u, 3047246262u, 1082469782u, 0, LOG1PF_TOLERANCE, 0}, +{441, 3351092088u, 3024661404u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{442, 3424479544u, 3312047722u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{443, 3241193975u, 884465785u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{444, 811700241u, 3478509398u, 811700241u, 0, LOG1PF_TOLERANCE, 0}, +{445, 1030934236u, 1045139240u, 1030480438u, 0, LOG1PF_TOLERANCE, 0}, +{446, 3131791114u, 3408392958u, 3131798460u, 0, LOG1PF_TOLERANCE, 0}, +{447, 1025254314u, 3057812821u, 1025064097u, 0, LOG1PF_TOLERANCE, 0}, +{448, 1110545760u, 3240144177u, 1081356252u, 0, LOG1PF_TOLERANCE, 0}, +{449, 826998191u, 1091496527u, 826998191u, 0, LOG1PF_TOLERANCE, 0}, +{450, 3180213739u, 1108793820u, 3180553126u, 0, LOG1PF_TOLERANCE, 0}, +{451, 3361976590u, 3138179993u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{452, 881280146u, 3421884736u, 881280145u, 0, LOG1PF_TOLERANCE, 0}, +{453, 1304154705u, 2961937089u, 1100895530u, 0, LOG1PF_TOLERANCE, 0}, +{454, 3264443610u, 3222916705u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{455, 3374550627u, 3055856293u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{456, 2979664918u, 3365394784u, 2979664918u, 0, LOG1PF_TOLERANCE, 0}, +{457, 899599265u, 3240118211u, 899599259u, 0, LOG1PF_TOLERANCE, 0}, +{458, 842476444u, 3452685905u, 842476444u, 0, LOG1PF_TOLERANCE, 0}, +{459, 1268194719u, 1332489410u, 1099327890u, 0, LOG1PF_TOLERANCE, 0}, +{460, 1133420220u, 1245770860u, 1085605058u, 0, LOG1PF_TOLERANCE, 0}, +{461, 1161858787u, 815362075u, 1090553970u, 0, LOG1PF_TOLERANCE, 0}, +{462, 3184462258u, 1263529646u, 3185198129u, 0, LOG1PF_TOLERANCE, 0}, +{463, 3295996963u, 3453334307u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{464, 1270887389u, 1156123987u, 1099453983u, 0, LOG1PF_TOLERANCE, 0}, +{465, 3325193181u, 993979179u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{466, 925657343u, 1315159742u, 925657285u, 0, LOG1PF_TOLERANCE, 0}, +{467, 3115275450u, 3008350271u, 3115277372u, 0, LOG1PF_TOLERANCE, 0}, +{468, 3116607482u, 3224327456u, 3116609875u, 0, LOG1PF_TOLERANCE, 0}, +{469, 3187892415u, 3118097315u, 3188497050u, 0, LOG1PF_TOLERANCE, 0}, +{470, 1189120494u, 978961471u, 1092895232u, 0, LOG1PF_TOLERANCE, 0}, +{471, 889030794u, 3129523970u, 889030790u, 0, LOG1PF_TOLERANCE, 0}, +{472, 1323529208u, 3100744786u, 1101722723u, 0, LOG1PF_TOLERANCE, 0}, +{473, 2975945347u, 940445933u, 2975945347u, 0, LOG1PF_TOLERANCE, 0}, +{474, 3465768388u, 3190881451u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{475, 3426099899u, 1118756120u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{476, 3224857113u, 3398166843u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{477, 1065798296u, 816191940u, 1060644359u, 0, LOG1PF_TOLERANCE, 0}, +{478, 3328989444u, 850266225u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{479, 3357819026u, 3148475462u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{480, 1273397670u, 901308750u, 1099549262u, 0, LOG1PF_TOLERANCE, 0}, +{481, 3424831780u, 1304806106u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{482, 1257596246u, 3420832544u, 1098802875u, 0, LOG1PF_TOLERANCE, 0}, +{483, 1051773536u, 896271348u, 1050140058u, 0, LOG1PF_TOLERANCE, 0}, +{484, 3294752507u, 3113225954u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{485, 3424848725u, 2973850350u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{486, 1090870906u, 3294742905u, 1074722584u, 0, LOG1PF_TOLERANCE, 0}, +{487, 1227582289u, 1208979668u, 1096246236u, 0, LOG1PF_TOLERANCE, 0}, +{488, 2996780709u, 852318215u, 2996780709u, 0, LOG1PF_TOLERANCE, 0}, +{489, 1272325814u, 3004311296u, 1099510676u, 0, LOG1PF_TOLERANCE, 0}, +{490, 3359508271u, 859974315u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{491, 2992737514u, 2999023943u, 2992737514u, 0, LOG1PF_TOLERANCE, 0}, +{492, 1137854355u, 3335041917u, 1086416927u, 0, LOG1PF_TOLERANCE, 0}, +{493, 3440773058u, 3204192793u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{494, 3101598400u, 3057760708u, 3101599175u, 0, LOG1PF_TOLERANCE, 0}, +{495, 3451216836u, 3347783723u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{496, 3437062994u, 3106834845u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{497, 1131196082u, 1164573183u, 1085215207u, 0, LOG1PF_TOLERANCE, 0}, +{498, 3177294154u, 1282436638u, 3177717148u, 0, LOG1PF_TOLERANCE, 0}, +{499, 3258097678u, 1305882290u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{500, 3460915348u, 1219372260u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{501, 3009547195u, 1256074626u, 3009547195u, 0, LOG1PF_TOLERANCE, 0}, +{502, 3303035472u, 3153013020u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{503, 1053698677u, 3284313107u, 1051541403u, 0, LOG1PF_TOLERANCE, 0}, +{504, 3396166221u, 1201894512u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{505, 3037541131u, 1085398440u, 3037541133u, 0, LOG1PF_TOLERANCE, 0}, +{506, 3458934263u, 1005577835u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{507, 1065761827u, 3333928591u, 1060608794u, 0, LOG1PF_TOLERANCE, 0}, +{508, 3025843188u, 820250112u, 3025843189u, 0, LOG1PF_TOLERANCE, 0}, +{509, 3017430347u, 3009209071u, 3017430348u, 0, LOG1PF_TOLERANCE, 0}, +{510, 926665223u, 3150815797u, 926665154u, 0, LOG1PF_TOLERANCE, 0}, +{511, 2970966181u, 3383521344u, 2970966181u, 0, LOG1PF_TOLERANCE, 0}, +{512, 1199816046u, 3143776186u, 1093789726u, 0, LOG1PF_TOLERANCE, 0}, +{513, 3333779015u, 952421041u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{514, 856234019u, 3091454180u, 856234019u, 0, LOG1PF_TOLERANCE, 0}, +{515, 948398145u, 3238273189u, 948397859u, 0, LOG1PF_TOLERANCE, 0}, +{516, 3054021468u, 1270257895u, 3054021477u, 0, LOG1PF_TOLERANCE, 0}, +{517, 1080781593u, 1213908300u, 1069907883u, 0, LOG1PF_TOLERANCE, 0}, +{518, 3164749613u, 3010837763u, 3164856320u, 0, LOG1PF_TOLERANCE, 0}, +{519, 2971341371u, 1014754300u, 2971341371u, 0, LOG1PF_TOLERANCE, 0}, +{520, 3235326590u, 1271705594u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{521, 3118883815u, 1051802647u, 3118887133u, 0, LOG1PF_TOLERANCE, 0}, +{522, 965378004u, 1292594138u, 965376805u, 0, LOG1PF_TOLERANCE, 0}, +{523, 3226990408u, 1110755136u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{524, 2953069847u, 3293953199u, 2953069847u, 0, LOG1PF_TOLERANCE, 0}, +{525, 3117098218u, 1122474770u, 3117100798u, 0, LOG1PF_TOLERANCE, 0}, +{526, 1283624229u, 906796922u, 1099978015u, 0, LOG1PF_TOLERANCE, 0}, +{527, 860729004u, 1163935062u, 860729004u, 0, LOG1PF_TOLERANCE, 0}, +{528, 970649315u, 1078286437u, 970646320u, 0, LOG1PF_TOLERANCE, 0}, +{529, 959776291u, 3280345347u, 959775267u, 0, LOG1PF_TOLERANCE, 0}, +{530, 3341117305u, 3294559023u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{531, 1270734970u, 3355874874u, 1099447601u, 0, LOG1PF_TOLERANCE, 0}, +{532, 3454816067u, 868771977u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{533, 917206623u, 1172710814u, 917206594u, 0, LOG1PF_TOLERANCE, 0}, +{534, 1106502045u, 1290849316u, 1079821536u, 0, LOG1PF_TOLERANCE, 0}, +{535, 1157598381u, 3309023746u, 1089729141u, 0, LOG1PF_TOLERANCE, 0}, +{536, 835476614u, 1092590501u, 835476614u, 0, LOG1PF_TOLERANCE, 0}, +{537, 3335234513u, 1002337336u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{538, 1279489061u, 1006049444u, 1099826186u, 0, LOG1PF_TOLERANCE, 0}, +{539, 807133892u, 1110992491u, 807133892u, 0, LOG1PF_TOLERANCE, 0}, +{540, 3157416480u, 1309984610u, 3157480564u, 0, LOG1PF_TOLERANCE, 0}, +{541, 3143920719u, 3131608518u, 3143946868u, 0, LOG1PF_TOLERANCE, 0}, +{542, 2995340689u, 1165036009u, 2995340689u, 0, LOG1PF_TOLERANCE, 0}, +{543, 1233171235u, 826460580u, 1096672500u, 0, LOG1PF_TOLERANCE, 0}, +{544, 1148920078u, 1007674793u, 1088239974u, 0, LOG1PF_TOLERANCE, 0}, +{545, 3064988156u, 3230867340u, 3064988186u, 0, LOG1PF_TOLERANCE, 0}, +{546, 3083619260u, 1159415661u, 3083619423u, 0, LOG1PF_TOLERANCE, 0}, +{547, 1109198803u, 1221754614u, 1080852427u, 0, LOG1PF_TOLERANCE, 0}, +{548, 3219949483u, 1056167693u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{549, 3361149474u, 3387342069u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{550, 827931800u, 1118474231u, 827931800u, 0, LOG1PF_TOLERANCE, 0}, +{551, 1207502108u, 3388073586u, 1094457350u, 0, LOG1PF_TOLERANCE, 0}, +{552, 1000014431u, 831213088u, 999990479u, 0, LOG1PF_TOLERANCE, 0}, +{553, 3161756316u, 3143659754u, 3161877152u, 0, LOG1PF_TOLERANCE, 0}, +{554, 3160728744u, 3382954009u, 3160834514u, 0, LOG1PF_TOLERANCE, 0}, +{555, 1234530539u, 1079988872u, 1096829178u, 0, LOG1PF_TOLERANCE, 0}, +{556, 1017843965u, 1193076204u, 1017728515u, 0, LOG1PF_TOLERANCE, 0}, +{557, 2965746635u, 3248194237u, 2965746635u, 0, LOG1PF_TOLERANCE, 0}, +{558, 951862956u, 1173464654u, 951862402u, 0, LOG1PF_TOLERANCE, 0}, +{559, 3306328852u, 1118701064u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{560, 1291910469u, 1211303367u, 1100335113u, 0, LOG1PF_TOLERANCE, 0}, +{561, 3027442905u, 1173894400u, 3027442907u, 0, LOG1PF_TOLERANCE, 0}, +{562, 809646928u, 3006525025u, 809646928u, 0, LOG1PF_TOLERANCE, 0}, +{563, 1131927531u, 3182962700u, 1085311442u, 0, LOG1PF_TOLERANCE, 0}, +{564, 3449879391u, 991614550u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{565, 970094304u, 3344590506u, 970091536u, 0, LOG1PF_TOLERANCE, 0}, +{566, 1125551064u, 3331248076u, 1084271396u, 0, LOG1PF_TOLERANCE, 0}, +{567, 3427296372u, 3455289118u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{568, 1198917460u, 1327195159u, 1093717869u, 0, LOG1PF_TOLERANCE, 0}, +{569, 3201603336u, 820047343u, 3205060803u, 0, LOG1PF_TOLERANCE, 0}, +{570, 3114686212u, 3476082461u, 3114687942u, 0, LOG1PF_TOLERANCE, 0}, +{571, 921940707u, 2967544056u, 921940649u, 0, LOG1PF_TOLERANCE, 0}, +{572, 1091906532u, 3011904455u, 1075144380u, 0, LOG1PF_TOLERANCE, 0}, +{573, 3393557778u, 3383396815u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{574, 1276853215u, 873199561u, 1099705395u, 0, LOG1PF_TOLERANCE, 0}, +{575, 3462778440u, 3349284325u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{576, 833132358u, 3470358002u, 833132358u, 0, LOG1PF_TOLERANCE, 0}, +{577, 3360170117u, 3048354042u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{578, 3224245428u, 3271307999u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{579, 1120124467u, 1135619937u, 1083375765u, 0, LOG1PF_TOLERANCE, 0}, +{580, 1064364381u, 3180675544u, 1059703231u, 0, LOG1PF_TOLERANCE, 0}, +{581, 1268744779u, 3328452652u, 1099356230u, 0, LOG1PF_TOLERANCE, 0}, +{582, 1165195428u, 3390323168u, 1090799895u, 0, LOG1PF_TOLERANCE, 0}, +{583, 3044092739u, 1106497311u, 3044092746u, 0, LOG1PF_TOLERANCE, 0}, +{584, 3149469534u, 1278465842u, 3149503922u, 0, LOG1PF_TOLERANCE, 0}, +{585, 3247790039u, 909788142u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{586, 3215244648u, 1083988595u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{587, 3095275931u, 989153382u, 3095276436u, 0, LOG1PF_TOLERANCE, 0}, +{588, 3059688264u, 1117455718u, 3059688288u, 0, LOG1PF_TOLERANCE, 0}, +{589, 2990022513u, 1061714285u, 2990022513u, 0, LOG1PF_TOLERANCE, 0}, +{590, 1212717473u, 837873779u, 1094957442u, 0, LOG1PF_TOLERANCE, 0}, +{591, 3275973009u, 3450721670u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{592, 3028857014u, 3188853813u, 3028857015u, 0, LOG1PF_TOLERANCE, 0}, +{593, 3391162308u, 1291220039u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{594, 1044867873u, 3369493273u, 1043739628u, 0, LOG1PF_TOLERANCE, 0}, +{595, 1089986803u, 3462160118u, 1074449069u, 0, LOG1PF_TOLERANCE, 0}, +{596, 1296314700u, 2957454177u, 1100554982u, 0, LOG1PF_TOLERANCE, 0}, +{597, 1251462432u, 3171021770u, 1098299243u, 0, LOG1PF_TOLERANCE, 0}, +{598, 3485236902u, 980772835u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{599, 3262169538u, 1268270462u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{600, 3080852256u, 994641495u, 3080852359u, 0, LOG1PF_TOLERANCE, 0}, +{601, 1022211242u, 922124181u, 1021989505u, 0, LOG1PF_TOLERANCE, 0}, +{602, 884661176u, 2985540645u, 884661174u, 0, LOG1PF_TOLERANCE, 0}, +{603, 3071422941u, 3271100396u, 3071422983u, 0, LOG1PF_TOLERANCE, 0}, +{604, 989762529u, 3362011135u, 989746348u, 0, LOG1PF_TOLERANCE, 0}, +{605, 1295475718u, 3212305413u, 1100519604u, 0, LOG1PF_TOLERANCE, 0}, +{606, 1002632518u, 3330388441u, 1002594659u, 0, LOG1PF_TOLERANCE, 0}, +{607, 3404372005u, 3450484255u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{608, 3158912530u, 3105501826u, 3158994146u, 0, LOG1PF_TOLERANCE, 0}, +{609, 2987029985u, 1218447414u, 2987029985u, 0, LOG1PF_TOLERANCE, 0}, +{610, 1125800069u, 3256265749u, 1084323326u, 0, LOG1PF_TOLERANCE, 0}, +{611, 3138037576u, 3103365227u, 3138047202u, 0, LOG1PF_TOLERANCE, 0}, +{612, 3108384823u, 1300246663u, 3108386051u, 0, LOG1PF_TOLERANCE, 0}, +{613, 999985470u, 3409354318u, 999961654u, 0, LOG1PF_TOLERANCE, 0}, +{614, 1189421739u, 1056599002u, 1092916481u, 0, LOG1PF_TOLERANCE, 0}, +{615, 3075182644u, 3144159778u, 3075182725u, 0, LOG1PF_TOLERANCE, 0}, +{616, 3028099649u, 3391513557u, 3028099651u, 0, LOG1PF_TOLERANCE, 0}, +{617, 837703706u, 3467473756u, 837703706u, 0, LOG1PF_TOLERANCE, 0}, +{618, 3132541814u, 3444521949u, 3132550175u, 0, LOG1PF_TOLERANCE, 0}, +{619, 1164046161u, 3440635788u, 1090721533u, 0, LOG1PF_TOLERANCE, 0}, +{620, 1292596266u, 3116569667u, 1100376009u, 0, LOG1PF_TOLERANCE, 0}, +{621, 3469748379u, 3412765608u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{622, 2968771722u, 3117531540u, 2968771722u, 0, LOG1PF_TOLERANCE, 0}, +{623, 1314644642u, 3123051784u, 1101341573u, 0, LOG1PF_TOLERANCE, 0}, +{624, 3399813173u, 828743798u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{625, 948775569u, 3485444126u, 948775258u, 0, LOG1PF_TOLERANCE, 0}, +{626, 1034611395u, 882288581u, 1034168472u, 0, LOG1PF_TOLERANCE, 0}, +{627, 3489122735u, 3372450889u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{628, 1181604787u, 3363067409u, 1092228873u, 0, LOG1PF_TOLERANCE, 0}, +{629, 3059042077u, 3204983963u, 3059042099u, 0, LOG1PF_TOLERANCE, 0}, +{630, 1043691622u, 3402603223u, 1042747814u, 0, LOG1PF_TOLERANCE, 0}, +{631, 1314588083u, 856187848u, 1101339511u, 0, LOG1PF_TOLERANCE, 0}, +{632, 3141533334u, 3010142974u, 3141551801u, 0, LOG1PF_TOLERANCE, 0}, +{633, 3013416703u, 3442525943u, 3013416703u, 0, LOG1PF_TOLERANCE, 0}, +{634, 861266716u, 822172554u, 861266716u, 0, LOG1PF_TOLERANCE, 0}, +{635, 3157534378u, 3451674717u, 3157599767u, 0, LOG1PF_TOLERANCE, 0}, +{636, 2976169000u, 3033697153u, 2976169000u, 0, LOG1PF_TOLERANCE, 0}, +{637, 3400949680u, 3073750220u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{638, 3365581801u, 1175843167u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{639, 1110424755u, 3011308654u, 1081313385u, 0, LOG1PF_TOLERANCE, 0}, +{640, 3189917167u, 927278934u, 3190860959u, 0, LOG1PF_TOLERANCE, 0}, +{641, 969804941u, 3355439348u, 969802288u, 0, LOG1PF_TOLERANCE, 0}, +{642, 1139120919u, 3270515074u, 1086600903u, 0, LOG1PF_TOLERANCE, 0}, +{643, 816789141u, 3325199970u, 816789141u, 0, LOG1PF_TOLERANCE, 0}, +{644, 934308144u, 3118191228u, 934308022u, 0, LOG1PF_TOLERANCE, 0}, +{645, 1220524226u, 1152648002u, 1095636790u, 0, LOG1PF_TOLERANCE, 0}, +{646, 3162548604u, 3461790298u, 3162615521u, 0, LOG1PF_TOLERANCE, 0}, +{647, 3382391700u, 3296962745u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{648, 1156767533u, 1088986462u, 1089622486u, 0, LOG1PF_TOLERANCE, 0}, +{649, 3079222483u, 3312324949u, 3079222557u, 0, LOG1PF_TOLERANCE, 0}, +{650, 994934087u, 967678094u, 994913018u, 0, LOG1PF_TOLERANCE, 0}, +{651, 840906467u, 3156591981u, 840906467u, 0, LOG1PF_TOLERANCE, 0}, +{652, 3185240099u, 1123403720u, 3186066249u, 0, LOG1PF_TOLERANCE, 0}, +{653, 870026344u, 1093936408u, 870026343u, 0, LOG1PF_TOLERANCE, 0}, +{654, 2996887005u, 3287317742u, 2996887005u, 0, LOG1PF_TOLERANCE, 0}, +{655, 3479873563u, 1246277393u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{656, 3424264117u, 3434026174u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{657, 3228365887u, 1216775310u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{658, 1035909900u, 1249532942u, 1035361637u, 0, LOG1PF_TOLERANCE, 0}, +{659, 2989750574u, 1274271338u, 2989750574u, 0, LOG1PF_TOLERANCE, 0}, +{660, 3024951184u, 1247632131u, 3024951185u, 0, LOG1PF_TOLERANCE, 0}, +{661, 1212129651u, 3017366784u, 1094909477u, 0, LOG1PF_TOLERANCE, 0}, +{662, 3125775254u, 955826310u, 3125780641u, 0, LOG1PF_TOLERANCE, 0}, +{663, 1037464105u, 3121544932u, 1036775952u, 0, LOG1PF_TOLERANCE, 0}, +{664, 1311706596u, 1254918706u, 1101222030u, 0, LOG1PF_TOLERANCE, 0}, +{665, 918212457u, 1017468331u, 918212423u, 0, LOG1PF_TOLERANCE, 0}, +{666, 1337315179u, 3461361185u, 1102332110u, 0, LOG1PF_TOLERANCE, 0}, +{667, 1131358407u, 3325958870u, 1085236948u, 0, LOG1PF_TOLERANCE, 0}, +{668, 1156517523u, 3343716230u, 1089589301u, 0, LOG1PF_TOLERANCE, 0}, +{669, 3210802820u, 3207408574u, 3221686828u, 0, LOG1PF_TOLERANCE, 0}, +{670, 3337499209u, 1226297264u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{671, 3468429030u, 3253874001u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{672, 3253515800u, 1189005947u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{673, 3055299953u, 3047908678u, 3055299965u, 0, LOG1PF_TOLERANCE, 0}, +{674, 959956547u, 876324728u, 959955492u, 0, LOG1PF_TOLERANCE, 0}, +{675, 3425290480u, 1139193797u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{676, 1039917375u, 1122740999u, 1038978517u, 0, LOG1PF_TOLERANCE, 0}, +{677, 3220979495u, 3429223871u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{678, 1311016004u, 3334899880u, 1101189480u, 0, LOG1PF_TOLERANCE, 0}, +{679, 2995451172u, 2974546424u, 2995451172u, 0, LOG1PF_TOLERANCE, 0}, +{680, 1128016396u, 1105151547u, 1084736386u, 0, LOG1PF_TOLERANCE, 0}, +{681, 3210335769u, 3100646155u, 3220414236u, 0, LOG1PF_TOLERANCE, 0}, +{682, 3022705759u, 3404762495u, 3022705760u, 0, LOG1PF_TOLERANCE, 0}, +{683, 1206054701u, 826010009u, 1094359967u, 0, LOG1PF_TOLERANCE, 0}, +{684, 3144504834u, 1162227076u, 3144533066u, 0, LOG1PF_TOLERANCE, 0}, +{685, 822524010u, 970745811u, 822524010u, 0, LOG1PF_TOLERANCE, 0}, +{686, 3016981460u, 3313826904u, 3016981461u, 0, LOG1PF_TOLERANCE, 0}, +{687, 1213609983u, 919983950u, 1095026317u, 0, LOG1PF_TOLERANCE, 0}, +{688, 1246902946u, 3064047808u, 1097913869u, 0, LOG1PF_TOLERANCE, 0}, +{689, 995850843u, 1332031130u, 995826811u, 0, LOG1PF_TOLERANCE, 0}, +{690, 3362082828u, 3374056268u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{691, 1029480631u, 3047777170u, 1029104660u, 0, LOG1PF_TOLERANCE, 0}, +{692, 3153568584u, 3106514232u, 3153630219u, 0, LOG1PF_TOLERANCE, 0}, +{693, 3384988527u, 3109485565u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{694, 1317696241u, 870681806u, 1101462444u, 0, LOG1PF_TOLERANCE, 0}, +{695, 3235395924u, 1132055244u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{696, 3341877624u, 2969495570u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{697, 1228636133u, 886552820u, 1096340256u, 0, LOG1PF_TOLERANCE, 0}, +{698, 3161654634u, 3335899347u, 3161773934u, 0, LOG1PF_TOLERANCE, 0}, +{699, 3162655243u, 3307203982u, 3162723873u, 0, LOG1PF_TOLERANCE, 0}, +{700, 1207246237u, 859223639u, 1094440780u, 0, LOG1PF_TOLERANCE, 0}, +{701, 1165476654u, 3350219111u, 1090818211u, 0, LOG1PF_TOLERANCE, 0}, +{702, 1215278023u, 3019755242u, 1095144039u, 0, LOG1PF_TOLERANCE, 0}, +{703, 1017239798u, 3438501281u, 1017136379u, 0, LOG1PF_TOLERANCE, 0}, +{704, 1149651309u, 970030475u, 1088380679u, 0, LOG1PF_TOLERANCE, 0}, +{705, 1111943722u, 3122211334u, 1081822114u, 0, LOG1PF_TOLERANCE, 0}, +{706, 856374764u, 1158358450u, 856374764u, 0, LOG1PF_TOLERANCE, 0}, +{707, 1189849849u, 3382739134u, 1092945955u, 0, LOG1PF_TOLERANCE, 0}, +{708, 3204848496u, 3141519085u, 3208508934u, 0, LOG1PF_TOLERANCE, 0}, +{709, 1249758327u, 3104759211u, 1098111362u, 0, LOG1PF_TOLERANCE, 0}, +{710, 3092982276u, 3445282331u, 3092982651u, 0, LOG1PF_TOLERANCE, 0}, +{711, 1168098747u, 1316854744u, 1091084937u, 0, LOG1PF_TOLERANCE, 0}, +{712, 892549317u, 1179637545u, 892549313u, 0, LOG1PF_TOLERANCE, 0}, +{713, 3301009024u, 3406174560u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{714, 3233089227u, 1212652543u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{715, 3218245284u, 1238873830u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{716, 3215981890u, 3240474694u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{717, 1266687209u, 3092038122u, 1099241312u, 0, LOG1PF_TOLERANCE, 0}, +{718, 825230580u, 3410090781u, 825230580u, 0, LOG1PF_TOLERANCE, 0}, +{719, 3487959775u, 3331372071u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{720, 943645710u, 852875779u, 943645425u, 0, LOG1PF_TOLERANCE, 0}, +{721, 3345065699u, 3282620725u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{722, 935847271u, 1067255804u, 935847115u, 0, LOG1PF_TOLERANCE, 0}, +{723, 3410336089u, 1111437780u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{724, 3082940740u, 1336840432u, 3082940887u, 0, LOG1PF_TOLERANCE, 0}, +{725, 1141063391u, 1168908072u, 1086881043u, 0, LOG1PF_TOLERANCE, 0}, +{726, 3059263153u, 3067795684u, 3059263176u, 0, LOG1PF_TOLERANCE, 0}, +{727, 849450947u, 3289799763u, 849450947u, 0, LOG1PF_TOLERANCE, 0}, +{728, 3353679791u, 897158391u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{729, 1001823878u, 1016826861u, 1001790652u, 0, LOG1PF_TOLERANCE, 0}, +{730, 1009130212u, 1004302940u, 1009075400u, 0, LOG1PF_TOLERANCE, 0}, +{731, 3367127535u, 943136342u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{732, 1032920919u, 3449126417u, 1032599069u, 0, LOG1PF_TOLERANCE, 0}, +{733, 3281952870u, 3147012185u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{734, 1237868497u, 3048281802u, 1097136709u, 0, LOG1PF_TOLERANCE, 0}, +{735, 1153753924u, 3322269242u, 1089182546u, 0, LOG1PF_TOLERANCE, 0}, +{736, 1120261759u, 892210998u, 1083397865u, 0, LOG1PF_TOLERANCE, 0}, +{737, 3226328360u, 3366432856u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{738, 3349595986u, 3251588707u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{739, 3166889490u, 3306023523u, 3167043886u, 0, LOG1PF_TOLERANCE, 0}, +{740, 1087750238u, 1099325523u, 1073903660u, 0, LOG1PF_TOLERANCE, 0}, +{741, 3121620061u, 3359488363u, 3121622659u, 0, LOG1PF_TOLERANCE, 0}, +{742, 1066116543u, 3072159933u, 1060951551u, 0, LOG1PF_TOLERANCE, 0}, +{743, 3210898034u, 2981803389u, 3221887908u, 0, LOG1PF_TOLERANCE, 0}, +{744, 3051923237u, 3364074347u, 3051923250u, 0, LOG1PF_TOLERANCE, 0}, +{745, 1030612298u, 3345396001u, 1030176344u, 0, LOG1PF_TOLERANCE, 0}, +{746, 3015019212u, 989161453u, 3015019213u, 0, LOG1PF_TOLERANCE, 0}, +{747, 1186234578u, 858134374u, 1092666337u, 0, LOG1PF_TOLERANCE, 0}, +{748, 1331680743u, 1009396165u, 1102077726u, 0, LOG1PF_TOLERANCE, 0}, +{749, 847857044u, 894661023u, 847857044u, 0, LOG1PF_TOLERANCE, 0}, +{750, 3060774997u, 1326067357u, 3060775025u, 0, LOG1PF_TOLERANCE, 0}, +{751, 887589411u, 1292305693u, 887589408u, 0, LOG1PF_TOLERANCE, 0}, +{752, 1045232522u, 3234993273u, 1044044147u, 0, LOG1PF_TOLERANCE, 0}, +{753, 3119858470u, 962515365u, 3119862231u, 0, LOG1PF_TOLERANCE, 0}, +{754, 3002873011u, 3188748064u, 3002873011u, 0, LOG1PF_TOLERANCE, 0}, +{755, 3349432725u, 928848003u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{756, 912423027u, 3184646319u, 912423002u, 0, LOG1PF_TOLERANCE, 0}, +{757, 3228795133u, 3273940030u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{758, 3194674746u, 3112269709u, 3196413254u, 0, LOG1PF_TOLERANCE, 0}, +{759, 3296784303u, 3276182352u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{760, 965402291u, 3107104376u, 965401086u, 0, LOG1PF_TOLERANCE, 0}, +{761, 3388153589u, 3426245389u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{762, 1133410485u, 3329658993u, 1085602881u, 0, LOG1PF_TOLERANCE, 0}, +{763, 3136790322u, 1088652637u, 3136805670u, 0, LOG1PF_TOLERANCE, 0}, +{764, 3369970587u, 959121458u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{765, 1270451568u, 928393353u, 1099435522u, 0, LOG1PF_TOLERANCE, 0}, +{766, 989498922u, 3088358419u, 989483247u, 0, LOG1PF_TOLERANCE, 0}, +{767, 1280215674u, 3148135875u, 1099855114u, 0, LOG1PF_TOLERANCE, 0}, +{768, 1171873518u, 954709738u, 1091407692u, 0, LOG1PF_TOLERANCE, 0}, +{769, 3298258100u, 935525182u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{770, 3415208824u, 822843236u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{771, 1001897182u, 3191875320u, 1001863548u, 0, LOG1PF_TOLERANCE, 0}, +{772, 3152777939u, 3245830463u, 3152833701u, 0, LOG1PF_TOLERANCE, 0}, +{773, 985903305u, 3333087577u, 985893741u, 0, LOG1PF_TOLERANCE, 0}, +{774, 3357328848u, 859306298u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{775, 2967395608u, 3077307650u, 2967395608u, 0, LOG1PF_TOLERANCE, 0}, +{776, 982612185u, 923582663u, 982606898u, 0, LOG1PF_TOLERANCE, 0}, +{777, 3267868136u, 1208301947u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{778, 3319048157u, 1172271145u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{779, 1144755661u, 860947435u, 1087628869u, 0, LOG1PF_TOLERANCE, 0}, +{780, 840456845u, 1051585760u, 840456845u, 0, LOG1PF_TOLERANCE, 0}, +{781, 898467286u, 839254959u, 898467281u, 0, LOG1PF_TOLERANCE, 0}, +{782, 3301461672u, 1233693827u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{783, 3364525678u, 3089849671u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{784, 871130681u, 905123007u, 871130680u, 0, LOG1PF_TOLERANCE, 0}, +{785, 931441127u, 1133424555u, 931441058u, 0, LOG1PF_TOLERANCE, 0}, +{786, 3146660041u, 3143695961u, 3146680327u, 0, LOG1PF_TOLERANCE, 0}, +{787, 3467121799u, 3023584354u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{788, 1151257041u, 3084216427u, 1088731848u, 0, LOG1PF_TOLERANCE, 0}, +{789, 3097873255u, 3219266640u, 3097873685u, 0, LOG1PF_TOLERANCE, 0}, +{790, 3130670309u, 3192399254u, 3130676261u, 0, LOG1PF_TOLERANCE, 0}, +{791, 1017573824u, 3130901062u, 1017463834u, 0, LOG1PF_TOLERANCE, 0}, +{792, 1258369714u, 3462258576u, 1098857003u, 0, LOG1PF_TOLERANCE, 0}, +{793, 1216602683u, 3371396332u, 1095244493u, 0, LOG1PF_TOLERANCE, 0}, +{794, 2976429847u, 959973239u, 2976429847u, 0, LOG1PF_TOLERANCE, 0}, +{795, 3297265739u, 1214184410u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{796, 1071940738u, 3311731012u, 1065557507u, 0, LOG1PF_TOLERANCE, 0}, +{797, 922601356u, 3337171870u, 922601293u, 0, LOG1PF_TOLERANCE, 0}, +{798, 3462285635u, 3444030332u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{799, 3357177805u, 1085464241u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{800, 3049120080u, 900832851u, 3049120089u, 0, LOG1PF_TOLERANCE, 0}, +{801, 1153863660u, 1011991342u, 1089200295u, 0, LOG1PF_TOLERANCE, 0}, +{802, 3034243695u, 917098003u, 3034243698u, 0, LOG1PF_TOLERANCE, 0}, +{803, 809294662u, 3266461458u, 809294662u, 0, LOG1PF_TOLERANCE, 0}, +{804, 822231182u, 3393408718u, 822231182u, 0, LOG1PF_TOLERANCE, 0}, +{805, 845772797u, 3341109215u, 845772797u, 0, LOG1PF_TOLERANCE, 0}, +{806, 1249365132u, 3278686216u, 1098086276u, 0, LOG1PF_TOLERANCE, 0}, +{807, 3046215730u, 3211219980u, 3046215735u, 0, LOG1PF_TOLERANCE, 0}, +{808, 3047251716u, 1090787353u, 3047251722u, 0, LOG1PF_TOLERANCE, 0}, +{809, 2980866154u, 1147012796u, 2980866154u, 0, LOG1PF_TOLERANCE, 0}, +{810, 3131219358u, 3471261157u, 3131225974u, 0, LOG1PF_TOLERANCE, 0}, +{811, 3222096285u, 1198013705u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{812, 1297708818u, 3079166173u, 1100608953u, 0, LOG1PF_TOLERANCE, 0}, +{813, 3345532722u, 3383708463u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{814, 3418753236u, 3481843070u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{815, 1277417964u, 3487506626u, 1099733721u, 0, LOG1PF_TOLERANCE, 0}, +{816, 987577257u, 1152077087u, 987565035u, 0, LOG1PF_TOLERANCE, 0}, +{817, 3161606610u, 3190282989u, 3161725188u, 0, LOG1PF_TOLERANCE, 0}, +{818, 849056171u, 910674398u, 849056171u, 0, LOG1PF_TOLERANCE, 0}, +{819, 888030585u, 3062367380u, 888030582u, 0, LOG1PF_TOLERANCE, 0}, +{820, 1043442869u, 3311393817u, 1042536175u, 0, LOG1PF_TOLERANCE, 0}, +{821, 851189486u, 3007588581u, 851189486u, 0, LOG1PF_TOLERANCE, 0}, +{822, 3320923228u, 3464544249u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{823, 1337400405u, 3488844154u, 1102335847u, 0, LOG1PF_TOLERANCE, 0}, +{824, 2964339884u, 3186563447u, 2964339884u, 0, LOG1PF_TOLERANCE, 0}, +{825, 3400348640u, 3129868490u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{826, 1250249095u, 1069023744u, 1098162859u, 0, LOG1PF_TOLERANCE, 0}, +{827, 3284411233u, 1173613526u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{828, 3020883322u, 2953622587u, 3020883323u, 0, LOG1PF_TOLERANCE, 0}, +{829, 1215968622u, 3469884568u, 1095189158u, 0, LOG1PF_TOLERANCE, 0}, +{830, 3202319550u, 819117302u, 3205684632u, 0, LOG1PF_TOLERANCE, 0}, +{831, 3061638260u, 3116222327u, 3061638291u, 0, LOG1PF_TOLERANCE, 0}, +{832, 1025404104u, 1066370251u, 1025208348u, 0, LOG1PF_TOLERANCE, 0}, +{833, 3138086437u, 3195983510u, 3138096167u, 0, LOG1PF_TOLERANCE, 0}, +{834, 3091024506u, 3456196859u, 3091024786u, 0, LOG1PF_TOLERANCE, 0}, +{835, 3362748242u, 3369843597u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{836, 3099671635u, 3218383623u, 3099672218u, 0, LOG1PF_TOLERANCE, 0}, +{837, 3068014841u, 2978226656u, 3068014889u, 0, LOG1PF_TOLERANCE, 0}, +{838, 1252237719u, 1121169249u, 1098377932u, 0, LOG1PF_TOLERANCE, 0}, +{839, 3327895594u, 1224511805u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{840, 3082454432u, 889268276u, 3082454568u, 0, LOG1PF_TOLERANCE, 0}, +{841, 3396161504u, 1182798837u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{842, 1099710167u, 887180181u, 1077598184u, 0, LOG1PF_TOLERANCE, 0}, +{843, 1157186482u, 1288722647u, 1089676944u, 0, LOG1PF_TOLERANCE, 0}, +{844, 1282110851u, 3176633124u, 1099923816u, 0, LOG1PF_TOLERANCE, 0}, +{845, 3477008113u, 1331845018u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{846, 3292127294u, 3409957764u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{847, 1123357102u, 3281307320u, 1083842800u, 0, LOG1PF_TOLERANCE, 0}, +{848, 1106837025u, 3088080674u, 1079905799u, 0, LOG1PF_TOLERANCE, 0}, +{849, 1049949008u, 1130799489u, 1048755658u, 0, LOG1PF_TOLERANCE, 0}, +{850, 1253017688u, 942062372u, 1098451552u, 0, LOG1PF_TOLERANCE, 0}, +{851, 1108543194u, 3281299199u, 1080583416u, 0, LOG1PF_TOLERANCE, 0}, +{852, 3087985411u, 1238341456u, 3087985571u, 0, LOG1PF_TOLERANCE, 0}, +{853, 3002187365u, 1073809054u, 3002187365u, 0, LOG1PF_TOLERANCE, 0}, +{854, 3163283126u, 1328636961u, 3163362283u, 0, LOG1PF_TOLERANCE, 0}, +{855, 1160162706u, 1264067367u, 1090286314u, 0, LOG1PF_TOLERANCE, 0}, +{856, 3305715025u, 3017496063u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{857, 1266928623u, 811778614u, 1099256175u, 0, LOG1PF_TOLERANCE, 0}, +{858, 3025340297u, 1193925540u, 3025340298u, 0, LOG1PF_TOLERANCE, 0}, +{859, 3438080027u, 3107114149u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{860, 3344574751u, 3111270744u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{861, 1152416724u, 962669179u, 1088953260u, 0, LOG1PF_TOLERANCE, 0}, +{862, 1218239308u, 1126238113u, 1095426328u, 0, LOG1PF_TOLERANCE, 0}, +{863, 3263310567u, 1030748197u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{864, 835770216u, 865469272u, 835770216u, 0, LOG1PF_TOLERANCE, 0}, +{865, 3041998669u, 1160635263u, 3041998674u, 0, LOG1PF_TOLERANCE, 0}, +{866, 1000313118u, 2980130729u, 1000287739u, 0, LOG1PF_TOLERANCE, 0}, +{867, 972485427u, 1124312043u, 972481617u, 0, LOG1PF_TOLERANCE, 0}, +{868, 3290264612u, 1124703898u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{869, 869072657u, 3150369767u, 869072656u, 0, LOG1PF_TOLERANCE, 0}, +{870, 3222106584u, 1183748648u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{871, 1278946388u, 825129857u, 1099803490u, 0, LOG1PF_TOLERANCE, 0}, +{872, 947914771u, 3181847068u, 947914515u, 0, LOG1PF_TOLERANCE, 0}, +{873, 3167730654u, 3195765940u, 3167906242u, 0, LOG1PF_TOLERANCE, 0}, +{874, 1098530298u, 3255870890u, 1077146833u, 0, LOG1PF_TOLERANCE, 0}, +{875, 3232726036u, 871038882u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{876, 1297190916u, 811863044u, 1100589546u, 0, LOG1PF_TOLERANCE, 0}, +{877, 1277649137u, 961171401u, 1099744888u, 0, LOG1PF_TOLERANCE, 0}, +{878, 3203377685u, 1306427476u, 3206650927u, 0, LOG1PF_TOLERANCE, 0}, +{879, 3090306474u, 3124785016u, 3090306722u, 0, LOG1PF_TOLERANCE, 0}, +{880, 3244032016u, 3045313345u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{881, 3033122376u, 3049877065u, 3033122378u, 0, LOG1PF_TOLERANCE, 0}, +{882, 3019221802u, 3329183205u, 3019221803u, 0, LOG1PF_TOLERANCE, 0}, +{883, 1096155623u, 1256423752u, 1076533229u, 0, LOG1PF_TOLERANCE, 0}, +{884, 873151908u, 3246562559u, 873151907u, 0, LOG1PF_TOLERANCE, 0}, +{885, 3238729605u, 1298769842u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{886, 3317196817u, 989537151u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{887, 3374748510u, 834161190u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{888, 3345634950u, 959901149u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{889, 3189860276u, 883598767u, 3190793389u, 0, LOG1PF_TOLERANCE, 0}, +{890, 887311687u, 1175312255u, 887311684u, 0, LOG1PF_TOLERANCE, 0}, +{891, 3396917283u, 3066326686u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{892, 3317032737u, 3143803722u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{893, 1200051436u, 1163802508u, 1093817931u, 0, LOG1PF_TOLERANCE, 0}, +{894, 3105291012u, 1194385202u, 3105291724u, 0, LOG1PF_TOLERANCE, 0}, +{895, 1306520561u, 957302464u, 1100987701u, 0, LOG1PF_TOLERANCE, 0}, +{896, 1314936356u, 2985592532u, 1101352081u, 0, LOG1PF_TOLERANCE, 0}, +{897, 3475052219u, 1284049853u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{898, 3085636260u, 1107682820u, 3085636476u, 0, LOG1PF_TOLERANCE, 0}, +{899, 2995058661u, 822977912u, 2995058661u, 0, LOG1PF_TOLERANCE, 0}, +{900, 3393227708u, 3271879112u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{901, 2983919425u, 3341426744u, 2983919425u, 0, LOG1PF_TOLERANCE, 0}, +{902, 3182540197u, 852580839u, 3183076763u, 0, LOG1PF_TOLERANCE, 0}, +{903, 3349005404u, 3080993030u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{904, 3154720153u, 3443720494u, 3154758017u, 0, LOG1PF_TOLERANCE, 0}, +{905, 1262863321u, 1219003129u, 1099105532u, 0, LOG1PF_TOLERANCE, 0}, +{906, 882902102u, 1224362550u, 882902100u, 0, LOG1PF_TOLERANCE, 0}, +{907, 2995633678u, 828113666u, 2995633678u, 0, LOG1PF_TOLERANCE, 0}, +{908, 1053387478u, 3184880021u, 1051318804u, 0, LOG1PF_TOLERANCE, 0}, +{909, 3387653691u, 3347783852u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{910, 3136364836u, 1018492227u, 3136379390u, 0, LOG1PF_TOLERANCE, 0}, +{911, 808412264u, 941158192u, 808412264u, 0, LOG1PF_TOLERANCE, 0}, +{912, 1338680611u, 1166078045u, 1102388991u, 0, LOG1PF_TOLERANCE, 0}, +{913, 1112891928u, 3074730425u, 1082111001u, 0, LOG1PF_TOLERANCE, 0}, +{914, 893449284u, 1052877339u, 893449279u, 0, LOG1PF_TOLERANCE, 0}, +{915, 892311459u, 1097338393u, 892311455u, 0, LOG1PF_TOLERANCE, 0}, +{916, 3105373037u, 3246705916u, 3105373761u, 0, LOG1PF_TOLERANCE, 0}, +{917, 1190105283u, 3033907262u, 1092963155u, 0, LOG1PF_TOLERANCE, 0}, +{918, 1011225926u, 1180485180u, 1011148079u, 0, LOG1PF_TOLERANCE, 0}, +{919, 1043025031u, 987068973u, 1042179168u, 0, LOG1PF_TOLERANCE, 0}, +{920, 3410531037u, 2953541915u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{921, 3125834184u, 896953754u, 3125839618u, 0, LOG1PF_TOLERANCE, 0}, +{922, 902318189u, 849277289u, 902318179u, 0, LOG1PF_TOLERANCE, 0}, +{923, 835377647u, 3441354730u, 835377647u, 0, LOG1PF_TOLERANCE, 0}, +{924, 2976308307u, 1286944060u, 2976308307u, 0, LOG1PF_TOLERANCE, 0}, +{925, 3213624815u, 2987148017u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{926, 1120888322u, 1086209113u, 1083495870u, 0, LOG1PF_TOLERANCE, 0}, +{927, 1315217243u, 3396371713u, 1101362003u, 0, LOG1PF_TOLERANCE, 0}, +{928, 3137758475u, 1039403054u, 3137767518u, 0, LOG1PF_TOLERANCE, 0}, +{929, 1040617590u, 1034835971u, 1039981373u, 0, LOG1PF_TOLERANCE, 0}, +{930, 955384253u, 3344785562u, 955383338u, 0, LOG1PF_TOLERANCE, 0}, +{931, 853063496u, 3317415965u, 853063496u, 0, LOG1PF_TOLERANCE, 0}, +{932, 823111402u, 877253523u, 823111402u, 0, LOG1PF_TOLERANCE, 0}, +{933, 3061417900u, 1172208065u, 3061417930u, 0, LOG1PF_TOLERANCE, 0}, +{934, 904255535u, 1019967545u, 904255522u, 0, LOG1PF_TOLERANCE, 0}, +{935, 1022984119u, 3113891410u, 1022740063u, 0, LOG1PF_TOLERANCE, 0}, +{936, 997362368u, 3112875428u, 997333027u, 0, LOG1PF_TOLERANCE, 0}, +{937, 900933520u, 1100589187u, 900933512u, 0, LOG1PF_TOLERANCE, 0}, +{938, 1168623062u, 1143306482u, 1091136161u, 0, LOG1PF_TOLERANCE, 0}, +{939, 878737490u, 3269908326u, 878737488u, 0, LOG1PF_TOLERANCE, 0}, +{940, 1039827284u, 1072928888u, 1038898269u, 0, LOG1PF_TOLERANCE, 0}, +{941, 1021564080u, 1064468397u, 1021360224u, 0, LOG1PF_TOLERANCE, 0}, +{942, 3458669745u, 3033299853u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{943, 3327516316u, 3405380971u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{944, 1040711112u, 3229444200u, 1040146591u, 0, LOG1PF_TOLERANCE, 0}, +{945, 1134528351u, 3365952513u, 1085839247u, 0, LOG1PF_TOLERANCE, 0}, +{946, 3039884464u, 1170612785u, 3039884468u, 0, LOG1PF_TOLERANCE, 0}, +{947, 3414352838u, 3350285760u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{948, 1133689539u, 1067460093u, 1085664427u, 0, LOG1PF_TOLERANCE, 0}, +{949, 3455688478u, 3333091960u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{950, 1137634874u, 1137038869u, 1086383339u, 0, LOG1PF_TOLERANCE, 0}, +{951, 3415502662u, 955510692u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{952, 954999730u, 969618597u, 954998859u, 0, LOG1PF_TOLERANCE, 0}, +{953, 1066157309u, 3241712664u, 1060990498u, 0, LOG1PF_TOLERANCE, 0}, +{954, 3436353675u, 1174967495u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{955, 940437609u, 860372396u, 940437452u, 0, LOG1PF_TOLERANCE, 0}, +{956, 3108347547u, 3434003435u, 3108348768u, 0, LOG1PF_TOLERANCE, 0}, +{957, 3064200154u, 3158080507u, 3064200180u, 0, LOG1PF_TOLERANCE, 0}, +{958, 1023889593u, 2979304683u, 1023746259u, 0, LOG1PF_TOLERANCE, 0}, +{959, 3272661536u, 3461799138u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{960, 1170245333u, 1233406410u, 1091280446u, 0, LOG1PF_TOLERANCE, 0}, +{961, 1219052056u, 3369557946u, 1095506117u, 0, LOG1PF_TOLERANCE, 0}, +{962, 3318983619u, 3259663338u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{963, 3372118621u, 837597103u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{964, 3146190320u, 889646054u, 3146208610u, 0, LOG1PF_TOLERANCE, 0}, +{965, 1299683827u, 966031619u, 1100676996u, 0, LOG1PF_TOLERANCE, 0}, +{966, 3190796331u, 1320011850u, 3191913897u, 0, LOG1PF_TOLERANCE, 0}, +{967, 2965838479u, 805822032u, 2965838479u, 0, LOG1PF_TOLERANCE, 0}, +{968, 3086068902u, 3484245751u, 3086069130u, 0, LOG1PF_TOLERANCE, 0}, +{969, 3064155399u, 3176569312u, 3064155425u, 0, LOG1PF_TOLERANCE, 0}, +{970, 836858201u, 3132995403u, 836858201u, 0, LOG1PF_TOLERANCE, 0}, +{971, 3040314717u, 1071290674u, 3040314721u, 0, LOG1PF_TOLERANCE, 0}, +{972, 3257224022u, 3361778245u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{973, 1229268598u, 1066965677u, 1096392883u, 0, LOG1PF_TOLERANCE, 0}, +{974, 3184078812u, 871003709u, 3184772236u, 0, LOG1PF_TOLERANCE, 0}, +{975, 871255076u, 3446104825u, 871255075u, 0, LOG1PF_TOLERANCE, 0}, +{976, 1086717248u, 3423795374u, 1073509432u, 0, LOG1PF_TOLERANCE, 0}, +{977, 3434884607u, 3029593823u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{978, 3464955606u, 1017987696u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{979, 1025278524u, 3121856207u, 1025087417u, 0, LOG1PF_TOLERANCE, 0}, +{980, 1242829722u, 3233935671u, 1097546377u, 0, LOG1PF_TOLERANCE, 0}, +{981, 3075149137u, 1117325737u, 3075149218u, 0, LOG1PF_TOLERANCE, 0}, +{982, 1200927971u, 1317167489u, 1093916754u, 0, LOG1PF_TOLERANCE, 0}, +{983, 3326858092u, 3452602832u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{984, 2995203347u, 1021818696u, 2995203347u, 0, LOG1PF_TOLERANCE, 0}, +{985, 1246019790u, 850632217u, 1097844403u, 0, LOG1PF_TOLERANCE, 0}, +{986, 3184801644u, 1137974313u, 3185576215u, 0, LOG1PF_TOLERANCE, 0}, +{987, 1136052740u, 3244616020u, 1086123854u, 0, LOG1PF_TOLERANCE, 0}, +{988, 1069009211u, 3002507482u, 1063512537u, 0, LOG1PF_TOLERANCE, 0}, +{989, 1015670780u, 1101217251u, 1015595551u, 0, LOG1PF_TOLERANCE, 0}, +{990, 1012543234u, 1116520440u, 1012448863u, 0, LOG1PF_TOLERANCE, 0}, +{991, 3316611992u, 3394732912u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{992, 3012101436u, 3307846870u, 3012101436u, 0, LOG1PF_TOLERANCE, 0}, +{993, 1087942795u, 3316660295u, 1073953509u, 0, LOG1PF_TOLERANCE, 0}, +{994, 3426365713u, 3069778532u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{995, 3066654389u, 3443934204u, 3066654429u, 0, LOG1PF_TOLERANCE, 0}, +{996, 3295326432u, 1313396175u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{997, 3318835308u, 3277583511u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{998, 3283555717u, 891875120u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{999, 3381255420u, 3015406047u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1000, 3040485181u, 3375450886u, 3040485185u, 0, LOG1PF_TOLERANCE, 0}, +{1001, 3388772093u, 1032597076u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1002, 954670189u, 1144923689u, 954669354u, 0, LOG1PF_TOLERANCE, 0}, +{1003, 1319200415u, 3387555900u, 1101542864u, 0, LOG1PF_TOLERANCE, 0}, +{1004, 1279324488u, 3228401212u, 1099819407u, 0, LOG1PF_TOLERANCE, 0}, +{1005, 3217795424u, 865577227u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1006, 3455131757u, 1260217257u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1007, 2982636375u, 3162157233u, 2982636375u, 0, LOG1PF_TOLERANCE, 0}, +{1008, 1246947517u, 1087951909u, 1097917256u, 0, LOG1PF_TOLERANCE, 0}, +{1009, 3396723577u, 869285240u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1010, 3433761025u, 3060143904u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1011, 3201187455u, 900233172u, 3204708934u, 0, LOG1PF_TOLERANCE, 0}, +{1012, 1173247961u, 1191127979u, 1091504259u, 0, LOG1PF_TOLERANCE, 0}, +{1013, 3037297123u, 3346394818u, 3037297125u, 0, LOG1PF_TOLERANCE, 0}, +{1014, 3248534678u, 1323683800u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1015, 3083019343u, 3033309444u, 3083019492u, 0, LOG1PF_TOLERANCE, 0}, +{1016, 3042018375u, 3203882372u, 3042018380u, 0, LOG1PF_TOLERANCE, 0}, +{1017, 1082862511u, 3032804719u, 1071031675u, 0, LOG1PF_TOLERANCE, 0}, +{1018, 3157626955u, 3483653298u, 3157693377u, 0, LOG1PF_TOLERANCE, 0}, +{1019, 1341821683u, 3003675365u, 1102500297u, 0, LOG1PF_TOLERANCE, 0}, +{1020, 881101379u, 1190838126u, 881101378u, 0, LOG1PF_TOLERANCE, 0}, +{1021, 1079061705u, 2960507663u, 1069138402u, 0, LOG1PF_TOLERANCE, 0}, +{1022, 3182695954u, 3256861672u, 3183247428u, 0, LOG1PF_TOLERANCE, 0}, +{1023, 1105291533u, 3482971524u, 1079502099u, 0, LOG1PF_TOLERANCE, 0}, +{1024, 1016023520u, 3227712090u, 1015942339u, 0, LOG1PF_TOLERANCE, 0}, +{1025, 3370691006u, 1295870514u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1026, 1156767169u, 1049756240u, 1089622438u, 0, LOG1PF_TOLERANCE, 0}, +{1027, 3077020499u, 894671462u, 3077020604u, 0, LOG1PF_TOLERANCE, 0}, +{1028, 1104284039u, 3040211914u, 1079216331u, 0, LOG1PF_TOLERANCE, 0}, +{1029, 3335212901u, 3486414589u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1030, 1093697541u, 3193708441u, 1075786580u, 0, LOG1PF_TOLERANCE, 0}, +{1031, 3266691185u, 1160074593u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1032, 3179003144u, 1108615803u, 3179407167u, 0, LOG1PF_TOLERANCE, 0}, +{1033, 1094115255u, 3008610212u, 1075923207u, 0, LOG1PF_TOLERANCE, 0}, +{1034, 2994604730u, 973792195u, 2994604730u, 0, LOG1PF_TOLERANCE, 0}, +{1035, 3424086808u, 3260140004u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1036, 2957266025u, 917932067u, 2957266025u, 0, LOG1PF_TOLERANCE, 0}, +{1037, 3353608773u, 1134068114u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1038, 2985838945u, 3118475644u, 2985838945u, 0, LOG1PF_TOLERANCE, 0}, +{1039, 973664327u, 1319516167u, 973661984u, 0, LOG1PF_TOLERANCE, 0}, +{1040, 882878091u, 3136970767u, 882878089u, 0, LOG1PF_TOLERANCE, 0}, +{1041, 1098662266u, 833740182u, 1077178436u, 0, LOG1PF_TOLERANCE, 0}, +{1042, 927582555u, 947955456u, 927582475u, 0, LOG1PF_TOLERANCE, 0}, +{1043, 3111440310u, 3067634077u, 3111442183u, 0, LOG1PF_TOLERANCE, 0}, +{1044, 3476083859u, 966439623u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1045, 3038754840u, 932009686u, 3038754843u, 0, LOG1PF_TOLERANCE, 0}, +{1046, 979878744u, 1232482646u, 979872034u, 0, LOG1PF_TOLERANCE, 0}, +{1047, 3464546616u, 3205527253u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1048, 1002542205u, 3152136093u, 1002504879u, 0, LOG1PF_TOLERANCE, 0}, +{1049, 3443552129u, 3165561391u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1050, 1287620154u, 3119707283u, 1100178947u, 0, LOG1PF_TOLERANCE, 0}, +{1051, 820906845u, 1196920413u, 820906845u, 0, LOG1PF_TOLERANCE, 0}, +{1052, 860108361u, 921064349u, 860108361u, 0, LOG1PF_TOLERANCE, 0}, +{1053, 946058434u, 1249928879u, 946058029u, 0, LOG1PF_TOLERANCE, 0}, +{1054, 3073260205u, 3093124531u, 3073260264u, 0, LOG1PF_TOLERANCE, 0}, +{1055, 1245702957u, 894348966u, 1097818316u, 0, LOG1PF_TOLERANCE, 0}, +{1056, 989655126u, 1308376568u, 989639152u, 0, LOG1PF_TOLERANCE, 0}, +{1057, 1002715618u, 1191006977u, 1002677266u, 0, LOG1PF_TOLERANCE, 0}, +{1058, 3087802274u, 897541752u, 3087802427u, 0, LOG1PF_TOLERANCE, 0}, +{1059, 1000863905u, 1196831314u, 1000835787u, 0, LOG1PF_TOLERANCE, 0}, +{1060, 3415763001u, 3032518431u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1061, 2979924820u, 1100234812u, 2979924820u, 0, LOG1PF_TOLERANCE, 0}, +{1062, 3283471961u, 1260093226u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1063, 3311210827u, 1192192264u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1064, 3026311911u, 2968974374u, 3026311913u, 0, LOG1PF_TOLERANCE, 0}, +{1065, 1198307901u, 1116328249u, 1093677460u, 0, LOG1PF_TOLERANCE, 0}, +{1066, 1288901567u, 1296370667u, 1100229913u, 0, LOG1PF_TOLERANCE, 0}, +{1067, 922255363u, 958305289u, 922255303u, 0, LOG1PF_TOLERANCE, 0}, +{1068, 1113104661u, 944376032u, 1082151800u, 0, LOG1PF_TOLERANCE, 0}, +{1069, 1136714348u, 828849087u, 1086236294u, 0, LOG1PF_TOLERANCE, 0}, +{1070, 3002059872u, 1136817970u, 3002059872u, 0, LOG1PF_TOLERANCE, 0}, +{1071, 948856035u, 1015466475u, 948855718u, 0, LOG1PF_TOLERANCE, 0}, +{1072, 1062512367u, 3229559531u, 1058720901u, 0, LOG1PF_TOLERANCE, 0}, +{1073, 3486907092u, 823220784u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1074, 3015049792u, 3078555978u, 3015049793u, 0, LOG1PF_TOLERANCE, 0}, +{1075, 1162027071u, 3308983387u, 1090567856u, 0, LOG1PF_TOLERANCE, 0}, +{1076, 1034561811u, 1054043114u, 1034122699u, 0, LOG1PF_TOLERANCE, 0}, +{1077, 853827378u, 898656161u, 853827378u, 0, LOG1PF_TOLERANCE, 0}, +{1078, 3271615417u, 3209997200u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1079, 1042014529u, 1146708584u, 1041307850u, 0, LOG1PF_TOLERANCE, 0}, +{1080, 1177157787u, 3090208179u, 1091876723u, 0, LOG1PF_TOLERANCE, 0}, +{1081, 3196144817u, 1056118717u, 3197437800u, 0, LOG1PF_TOLERANCE, 0}, +{1082, 3432084552u, 2997091781u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1083, 1309658335u, 1010219988u, 1101118918u, 0, LOG1PF_TOLERANCE, 0}, +{1084, 3004373345u, 873739132u, 3004373345u, 0, LOG1PF_TOLERANCE, 0}, +{1085, 2997667929u, 1038223245u, 2997667929u, 0, LOG1PF_TOLERANCE, 0}, +{1086, 1226494979u, 2991604792u, 1096139495u, 0, LOG1PF_TOLERANCE, 0}, +{1087, 3100289712u, 3456334210u, 3100290354u, 0, LOG1PF_TOLERANCE, 0}, +{1088, 3375507013u, 1306310823u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1089, 3460699001u, 3096700943u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1090, 3079231719u, 1044386263u, 3079231793u, 0, LOG1PF_TOLERANCE, 0}, +{1091, 3093951884u, 1014115231u, 3093952312u, 0, LOG1PF_TOLERANCE, 0}, +{1092, 3468023178u, 1209565017u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1093, 3008182310u, 1258900986u, 3008182310u, 0, LOG1PF_TOLERANCE, 0}, +{1094, 1204196034u, 3298625731u, 1094219981u, 0, LOG1PF_TOLERANCE, 0}, +{1095, 3459877411u, 2960476959u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1096, 909696559u, 1163075690u, 909696542u, 0, LOG1PF_TOLERANCE, 0}, +{1097, 1161439847u, 943449277u, 1090518120u, 0, LOG1PF_TOLERANCE, 0}, +{1098, 908663107u, 939489763u, 908663093u, 0, LOG1PF_TOLERANCE, 0}, +{1099, 1055319316u, 3261813492u, 1052677354u, 0, LOG1PF_TOLERANCE, 0}, +{1100, 1084378658u, 1009650785u, 1072095092u, 0, LOG1PF_TOLERANCE, 0}, +{1101, 3053887750u, 3341786453u, 3053887759u, 0, LOG1PF_TOLERANCE, 0}, +{1102, 3022828828u, 881335251u, 3022828829u, 0, LOG1PF_TOLERANCE, 0}, +{1103, 2995476576u, 3194911588u, 2995476576u, 0, LOG1PF_TOLERANCE, 0}, +{1104, 1226473697u, 821025132u, 1096137293u, 0, LOG1PF_TOLERANCE, 0}, +{1105, 1123114742u, 1229815537u, 1083811173u, 0, LOG1PF_TOLERANCE, 0}, +{1106, 1258114435u, 1291336083u, 1098836128u, 0, LOG1PF_TOLERANCE, 0}, +{1107, 2983818103u, 3015402015u, 2983818103u, 0, LOG1PF_TOLERANCE, 0}, +{1108, 3468040845u, 3066966245u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1109, 1178825761u, 1113195286u, 1092022998u, 0, LOG1PF_TOLERANCE, 0}, +{1110, 3059266302u, 878503862u, 3059266325u, 0, LOG1PF_TOLERANCE, 0}, +{1111, 3223384012u, 1130486973u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1112, 1019964626u, 1235133609u, 1019801789u, 0, LOG1PF_TOLERANCE, 0}, +{1113, 3445262427u, 3465211174u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1114, 1125653081u, 1207799746u, 1084292827u, 0, LOG1PF_TOLERANCE, 0}, +{1115, 3337652712u, 3025581813u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1116, 1184753508u, 3147374485u, 1092526084u, 0, LOG1PF_TOLERANCE, 0}, +{1117, 996404791u, 3353251979u, 996378875u, 0, LOG1PF_TOLERANCE, 0}, +{1118, 1188439315u, 1113484271u, 1092845536u, 0, LOG1PF_TOLERANCE, 0}, +{1119, 906557513u, 3006513432u, 906557504u, 0, LOG1PF_TOLERANCE, 0}, +{1120, 916831283u, 999465787u, 916831256u, 0, LOG1PF_TOLERANCE, 0}, +{1121, 996786317u, 3179221951u, 996759062u, 0, LOG1PF_TOLERANCE, 0}, +{1122, 3461635065u, 1004690387u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1123, 1188167943u, 1200744896u, 1092825062u, 0, LOG1PF_TOLERANCE, 0}, +{1124, 3036502395u, 1172597364u, 3036502399u, 0, LOG1PF_TOLERANCE, 0}, +{1125, 891257783u, 1267560050u, 891257780u, 0, LOG1PF_TOLERANCE, 0}, +{1126, 3290079438u, 846519377u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1127, 3350690327u, 2967953392u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1128, 1102061604u, 3424449935u, 1078507293u, 0, LOG1PF_TOLERANCE, 0}, +{1129, 1282351521u, 3039376424u, 1099931930u, 0, LOG1PF_TOLERANCE, 0}, +{1130, 3458861065u, 3392466405u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1131, 3095256878u, 1023623326u, 3095257382u, 0, LOG1PF_TOLERANCE, 0}, +{1132, 3163373610u, 843150426u, 3163454346u, 0, LOG1PF_TOLERANCE, 0}, +{1133, 3228793330u, 855146890u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1134, 3422194733u, 893873945u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1135, 3083885296u, 974543672u, 3083885466u, 0, LOG1PF_TOLERANCE, 0}, +{1136, 1261940623u, 3402349985u, 1099066812u, 0, LOG1PF_TOLERANCE, 0}, +{1137, 825039660u, 3426717554u, 825039660u, 0, LOG1PF_TOLERANCE, 0}, +{1138, 3400603081u, 3234396843u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1139, 1219411812u, 2961857939u, 1095539585u, 0, LOG1PF_TOLERANCE, 0}, +{1140, 3094833770u, 805351108u, 3094834248u, 0, LOG1PF_TOLERANCE, 0}, +{1141, 3139250800u, 3079109479u, 3139263170u, 0, LOG1PF_TOLERANCE, 0}, +{1142, 886201503u, 3272760705u, 886201500u, 0, LOG1PF_TOLERANCE, 0}, +{1143, 3297366026u, 1089966380u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1144, 1218488455u, 3309646450u, 1095451439u, 0, LOG1PF_TOLERANCE, 0}, +{1145, 3040358923u, 3093401553u, 3040358927u, 0, LOG1PF_TOLERANCE, 0}, +{1146, 862346861u, 3411853707u, 862346861u, 0, LOG1PF_TOLERANCE, 0}, +{1147, 1283938137u, 1196383822u, 1099996906u, 0, LOG1PF_TOLERANCE, 0}, +{1148, 3182551696u, 3029982441u, 3183089355u, 0, LOG1PF_TOLERANCE, 0}, +{1149, 1317098613u, 949986176u, 1101426722u, 0, LOG1PF_TOLERANCE, 0}, +{1150, 3116209179u, 3303588342u, 3116211426u, 0, LOG1PF_TOLERANCE, 0}, +{1151, 3431703657u, 3014443710u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1152, 3239728775u, 927815421u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1153, 3207141672u, 933456504u, 3213511304u, 0, LOG1PF_TOLERANCE, 0}, +{1154, 3154378805u, 905462392u, 3154413842u, 0, LOG1PF_TOLERANCE, 0}, +{1155, 3069658155u, 1041452042u, 3069658215u, 0, LOG1PF_TOLERANCE, 0}, +{1156, 3313160088u, 2964063309u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1157, 3207056527u, 3384206601u, 3213386819u, 0, LOG1PF_TOLERANCE, 0}, +{1158, 1284174954u, 3436881197u, 1100010721u, 0, LOG1PF_TOLERANCE, 0}, +{1159, 3156081645u, 3308839704u, 3156131886u, 0, LOG1PF_TOLERANCE, 0}, +{1160, 1063693032u, 976661408u, 1059353749u, 0, LOG1PF_TOLERANCE, 0}, +{1161, 3036026175u, 1251203998u, 3036026179u, 0, LOG1PF_TOLERANCE, 0}, +{1162, 1102631663u, 3396951425u, 1078700901u, 0, LOG1PF_TOLERANCE, 0}, +{1163, 968803479u, 992989712u, 968801205u, 0, LOG1PF_TOLERANCE, 0}, +{1164, 3273080388u, 3109405906u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1165, 1172529774u, 3294550127u, 1091454911u, 0, LOG1PF_TOLERANCE, 0}, +{1166, 1306695905u, 1292690378u, 1100993929u, 0, LOG1PF_TOLERANCE, 0}, +{1167, 1003649752u, 1218792138u, 1003605639u, 0, LOG1PF_TOLERANCE, 0}, +{1168, 1078478376u, 1326246424u, 1068860523u, 0, LOG1PF_TOLERANCE, 0}, +{1169, 3158855023u, 3151283866u, 3158935925u, 0, LOG1PF_TOLERANCE, 0}, +{1170, 1165177679u, 3276237026u, 1090798728u, 0, LOG1PF_TOLERANCE, 0}, +{1171, 870472127u, 3332532333u, 870472126u, 0, LOG1PF_TOLERANCE, 0}, +{1172, 3403009513u, 3381966453u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1173, 816825508u, 3032174124u, 816825508u, 0, LOG1PF_TOLERANCE, 0}, +{1174, 952348506u, 3377573987u, 952347908u, 0, LOG1PF_TOLERANCE, 0}, +{1175, 839544701u, 3419900937u, 839544701u, 0, LOG1PF_TOLERANCE, 0}, +{1176, 2967454456u, 3313359047u, 2967454456u, 0, LOG1PF_TOLERANCE, 0}, +{1177, 1222777442u, 1125769920u, 1095809748u, 0, LOG1PF_TOLERANCE, 0}, +{1178, 1325324763u, 978336043u, 1101782353u, 0, LOG1PF_TOLERANCE, 0}, +{1179, 3363524213u, 3202991311u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1180, 1158950321u, 1073578913u, 1090039690u, 0, LOG1PF_TOLERANCE, 0}, +{1181, 903129873u, 3416864271u, 903129862u, 0, LOG1PF_TOLERANCE, 0}, +{1182, 2997685349u, 1123653663u, 2997685349u, 0, LOG1PF_TOLERANCE, 0}, +{1183, 3078339944u, 988173985u, 3078340068u, 0, LOG1PF_TOLERANCE, 0}, +{1184, 1208345407u, 1254181270u, 1094533493u, 0, LOG1PF_TOLERANCE, 0}, +{1185, 3003262042u, 1327277116u, 3003262042u, 0, LOG1PF_TOLERANCE, 0}, +{1186, 1258634105u, 1247426200u, 1098889245u, 0, LOG1PF_TOLERANCE, 0}, +{1187, 1248478509u, 1287895126u, 1098027406u, 0, LOG1PF_TOLERANCE, 0}, +{1188, 1153863988u, 3430539165u, 1089200348u, 0, LOG1PF_TOLERANCE, 0}, +{1189, 1235620969u, 866627358u, 1096939871u, 0, LOG1PF_TOLERANCE, 0}, +{1190, 1097120930u, 3221726305u, 1076793578u, 0, LOG1PF_TOLERANCE, 0}, +{1191, 3469778622u, 1200179013u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1192, 1147712200u, 931865525u, 1088080285u, 0, LOG1PF_TOLERANCE, 0}, +{1193, 812694172u, 1136276190u, 812694172u, 0, LOG1PF_TOLERANCE, 0}, +{1194, 862266739u, 3139447362u, 862266739u, 0, LOG1PF_TOLERANCE, 0}, +{1195, 1124721745u, 3058969650u, 1084088534u, 0, LOG1PF_TOLERANCE, 0}, +{1196, 3261744304u, 1043806501u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1197, 832324055u, 2954061156u, 832324055u, 0, LOG1PF_TOLERANCE, 0}, +{1198, 805759679u, 903848557u, 805759679u, 0, LOG1PF_TOLERANCE, 0}, +{1199, 2983396015u, 872299138u, 2983396015u, 0, LOG1PF_TOLERANCE, 0}, +{1200, 1064922416u, 1320485628u, 1059988285u, 0, LOG1PF_TOLERANCE, 0}, +{1201, 868114980u, 3213276361u, 868114979u, 0, LOG1PF_TOLERANCE, 0}, +{1202, 3303160152u, 3075455322u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1203, 1315090496u, 3269683237u, 1101357549u, 0, LOG1PF_TOLERANCE, 0}, +{1204, 850876090u, 3365795667u, 850876090u, 0, LOG1PF_TOLERANCE, 0}, +{1205, 3230403187u, 1322841992u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1206, 1335399673u, 974138676u, 1102240222u, 0, LOG1PF_TOLERANCE, 0}, +{1207, 1072458508u, 3372833993u, 1065741371u, 0, LOG1PF_TOLERANCE, 0}, +{1208, 3303015249u, 3015039539u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1209, 3252139741u, 1059615003u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1210, 3468519966u, 3113982619u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1211, 1006231203u, 897530770u, 1006169084u, 0, LOG1PF_TOLERANCE, 0}, +{1212, 951554138u, 1001144381u, 951553612u, 0, LOG1PF_TOLERANCE, 0}, +{1213, 942046828u, 986341002u, 942046611u, 0, LOG1PF_TOLERANCE, 0}, +{1214, 2968517146u, 951832467u, 2968517146u, 0, LOG1PF_TOLERANCE, 0}, +{1215, 3319723279u, 3414482416u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1216, 3255104167u, 928827688u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1217, 1155477903u, 3104812800u, 1089445384u, 0, LOG1PF_TOLERANCE, 0}, +{1218, 3273889176u, 980486479u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1219, 3237813668u, 3441016803u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1220, 1228207362u, 2985476579u, 1096303014u, 0, LOG1PF_TOLERANCE, 0}, +{1221, 975349337u, 1311932596u, 975346031u, 0, LOG1PF_TOLERANCE, 0}, +{1222, 2982583196u, 3132904446u, 2982583196u, 0, LOG1PF_TOLERANCE, 0}, +{1223, 1290175785u, 3008182462u, 1100276110u, 0, LOG1PF_TOLERANCE, 0}, +{1224, 981908840u, 3314038398u, 981904304u, 0, LOG1PF_TOLERANCE, 0}, +{1225, 941187647u, 1107765599u, 941187463u, 0, LOG1PF_TOLERANCE, 0}, +{1226, 1214223128u, 3225536822u, 1095071140u, 0, LOG1PF_TOLERANCE, 0}, +{1227, 3422922584u, 1086391131u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1228, 1315857601u, 3487600045u, 1101383945u, 0, LOG1PF_TOLERANCE, 0}, +{1229, 3453226030u, 3233768835u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1230, 1078359574u, 3199175230u, 1068802783u, 0, LOG1PF_TOLERANCE, 0}, +{1231, 1029557624u, 3302959071u, 1029177708u, 0, LOG1PF_TOLERANCE, 0}, +{1232, 1207675424u, 3042692550u, 1094468428u, 0, LOG1PF_TOLERANCE, 0}, +{1233, 1028355074u, 3442294040u, 1028034501u, 0, LOG1PF_TOLERANCE, 0}, +{1234, 3119299090u, 1187096397u, 3119302594u, 0, LOG1PF_TOLERANCE, 0}, +{1235, 1248421894u, 3367769132u, 1098023532u, 0, LOG1PF_TOLERANCE, 0}, +{1236, 3353251994u, 1095517730u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1237, 876926659u, 3288089977u, 876926658u, 0, LOG1PF_TOLERANCE, 0}, +{1238, 1076752219u, 876236939u, 1067979810u, 0, LOG1PF_TOLERANCE, 0}, +{1239, 3388531942u, 2988520062u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1240, 1273395082u, 3031189261u, 1099549172u, 0, LOG1PF_TOLERANCE, 0}, +{1241, 3385588183u, 3258252464u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1242, 862047095u, 829323655u, 862047095u, 0, LOG1PF_TOLERANCE, 0}, +{1243, 3192315328u, 3289489214u, 3193772998u, 0, LOG1PF_TOLERANCE, 0}, +{1244, 3441804648u, 3274638356u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1245, 837368567u, 3228474927u, 837368567u, 0, LOG1PF_TOLERANCE, 0}, +{1246, 3392827417u, 1277961150u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1247, 1161241793u, 1328003707u, 1090483808u, 0, LOG1PF_TOLERANCE, 0}, +{1248, 856495732u, 3123041418u, 856495732u, 0, LOG1PF_TOLERANCE, 0}, +{1249, 3034494183u, 3041579130u, 3034494186u, 0, LOG1PF_TOLERANCE, 0}, +{1250, 1171318485u, 3374409104u, 1091366026u, 0, LOG1PF_TOLERANCE, 0}, +{1251, 3047748143u, 831102792u, 3047748150u, 0, LOG1PF_TOLERANCE, 0}, +{1252, 1001216371u, 3052357038u, 1001186427u, 0, LOG1PF_TOLERANCE, 0}, +{1253, 2999541351u, 3085461799u, 2999541351u, 0, LOG1PF_TOLERANCE, 0}, +{1254, 912515889u, 1074635609u, 912515864u, 0, LOG1PF_TOLERANCE, 0}, +{1255, 3391452505u, 897989232u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1256, 3249603369u, 3147662248u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1257, 1220264047u, 2960450369u, 1095614849u, 0, LOG1PF_TOLERANCE, 0}, +{1258, 3169816394u, 988430929u, 3170050525u, 0, LOG1PF_TOLERANCE, 0}, +{1259, 3098997418u, 3002162688u, 3098997941u, 0, LOG1PF_TOLERANCE, 0}, +{1260, 3282212423u, 3174079140u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1261, 3352293320u, 3247843425u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1262, 3296358441u, 875645354u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1263, 1197828352u, 3245614728u, 1093644537u, 0, LOG1PF_TOLERANCE, 0}, +{1264, 3340510371u, 914930263u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1265, 1127109339u, 3368125489u, 1084577040u, 0, LOG1PF_TOLERANCE, 0}, +{1266, 816173492u, 1083268662u, 816173492u, 0, LOG1PF_TOLERANCE, 0}, +{1267, 909467381u, 1232375752u, 909467365u, 0, LOG1PF_TOLERANCE, 0}, +{1268, 1200599955u, 2981200675u, 1093880855u, 0, LOG1PF_TOLERANCE, 0}, +{1269, 962230977u, 2988248037u, 962229486u, 0, LOG1PF_TOLERANCE, 0}, +{1270, 2996667337u, 1068572835u, 2996667337u, 0, LOG1PF_TOLERANCE, 0}, +{1271, 3192887808u, 3191848339u, 3194487240u, 0, LOG1PF_TOLERANCE, 0}, +{1272, 3237183876u, 3179379969u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1273, 939285924u, 3056079386u, 939285675u, 0, LOG1PF_TOLERANCE, 0}, +{1274, 944050180u, 3452557879u, 944049877u, 0, LOG1PF_TOLERANCE, 0}, +{1275, 3058135703u, 3090284601u, 3058135722u, 0, LOG1PF_TOLERANCE, 0}, +{1276, 3480592662u, 3261728191u, 2143289344u, 0, LOG1PF_TOLERANCE, 0}, +{1277, 3061939312u, 3274418540u, 3061939328u, 0, LOG1PF_TOLERANCE, 0}, +{1278, 1003299981u, 853295521u, 1003258072u, 0, LOG1PF_TOLERANCE, 0}, +{1279, 1155775526u, 1255814444u, 1089487603u, 0, LOG1PF_TOLERANCE, 0}, +{1280, 1234491880u, 3408568717u, 1096825031u, 0, LOG1PF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LOG1PFF_H multiple inclusion protection + +// EOF log1pf.h diff --git a/packages/language/c/libm/current/tests/vectors/logbf.c b/packages/language/c/libm/current/tests/vectors/logbf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/logbf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// logbf.c +// +// Test of logbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/logbf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(logbf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &logbf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &logbf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("logbf() is stable"); + } // if + else + { + CYG_TEST_FAIL("logbf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library logbf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "logbf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF logbf.c diff --git a/packages/language/c/libm/current/tests/vectors/logbf.h b/packages/language/c/libm/current/tests/vectors/logbf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/logbf.h @@ -0,0 +1,1360 @@ +#ifndef CYGONCE_LIBM_LOGBF_H +#define CYGONCE_LIBM_LOGBF_H +//=========================================================================== +// +// logbf.h +// +// Test vectors for testing of logbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/logbf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define LOGBF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t logbf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{243, 1070141403u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{244, 1078530011u, 0u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{245, 1083624420u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{246, 3253731328u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{247, 3252840038u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{248, 3251948749u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{249, 3251057459u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{250, 3250166170u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{251, 3249274880u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{252, 3248383590u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{253, 3247492301u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{254, 3246601011u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{255, 3245028147u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{256, 3243245568u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{257, 3241462989u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{258, 3239680410u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{259, 3237792973u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{260, 3234227814u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{261, 3230662656u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{262, 3224580915u, 0u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{263, 3213675725u, 0u, 0u, 0, LOGBF_TOLERANCE, 0}, +{264, 1058642330u, 0u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{265, 1075000115u, 0u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{266, 1082130432u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{267, 1085695590u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{268, 1089260749u, 0u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{269, 1091672474u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{270, 1093455053u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{271, 1095237632u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{272, 1097020211u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{273, 1098802790u, 0u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{274, 1099746509u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{275, 1100637798u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{276, 1101529088u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{277, 1102420378u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{278, 1103311667u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{279, 1104202957u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{280, 1105094246u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{281, 1105985536u, 0u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{282, 1107800421u, 1203999711u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{283, 3196650934u, 896005582u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{284, 3368700125u, 3308232444u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{285, 1224242132u, 3061363425u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{286, 3221027117u, 1284201705u, 0u, 0, LOGBF_TOLERANCE, 0}, +{287, 1198712763u, 919636942u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{288, 867432512u, 3067736756u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{289, 3159309973u, 852521077u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{290, 954173073u, 850531830u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{291, 3090780435u, 1035260608u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{292, 966554515u, 3234538174u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{293, 1312607135u, 1194999402u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{294, 1166191415u, 1018661564u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{295, 3111900019u, 1130472166u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{296, 1234419246u, 2984575812u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{297, 1302107128u, 3370647675u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{298, 1052801068u, 3039122570u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{299, 1060849628u, 3081357692u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{300, 3010214568u, 3446630737u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{301, 3484320003u, 3033957825u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{302, 3181522772u, 3305392896u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{303, 882596369u, 1256676590u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{304, 1167223673u, 846102364u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{305, 968192794u, 878547432u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{306, 3122346862u, 1111584337u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{307, 1052361612u, 1280025214u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{308, 906701409u, 2968301825u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{309, 3471653172u, 1154138102u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{310, 843024648u, 3166833184u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{311, 3231467496u, 934336592u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{312, 1341514497u, 3466051188u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{313, 1272351391u, 3373485062u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{314, 3319724992u, 3354615790u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{315, 3013402113u, 3266377514u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{316, 917622040u, 1334966485u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{317, 940236348u, 3304072663u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{318, 2963234879u, 977028681u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{319, 3251541546u, 3174764041u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{320, 3099843889u, 3355962282u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{321, 3110358400u, 851145088u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{322, 3371863479u, 1014861921u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{323, 3204069187u, 966573255u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{324, 1306460502u, 903489435u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{325, 1197542187u, 3024598921u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{326, 922888249u, 1139392309u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{327, 1184239996u, 3224098462u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{328, 1252490238u, 1173619825u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{329, 1001673627u, 3462631271u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{330, 976098044u, 1151967422u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{331, 941796645u, 886451963u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{332, 3006797923u, 1103058486u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{333, 855756273u, 3217259624u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{334, 3287199470u, 854245542u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{335, 893184329u, 1243067084u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{336, 1143233714u, 1007268238u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{337, 1139941253u, 1147688821u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{338, 3143717025u, 3234638157u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{339, 3048866608u, 3449209899u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{340, 3240298487u, 1020260821u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{341, 1288902137u, 3123875978u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{342, 1333134799u, 1338107877u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{343, 1187847971u, 1317663644u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{344, 1038851706u, 1327544110u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{345, 3329354473u, 3165437289u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{346, 3077218579u, 1308397879u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{347, 1309289088u, 1019883016u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{348, 2991550291u, 1294782875u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{349, 3444653659u, 1279248024u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{350, 3405585402u, 2962345057u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{351, 3106647724u, 853848387u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{352, 1106778573u, 3304487767u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{353, 1140567947u, 3069174149u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{354, 1238569473u, 873035665u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{355, 840375965u, 3223983207u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{356, 3154871957u, 1276671061u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{357, 1261071232u, 1182202773u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{358, 1175011025u, 3029705783u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{359, 1082692850u, 1211581107u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{360, 974547519u, 3475164509u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{361, 3058097085u, 3104309359u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{362, 3107252546u, 1071134451u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{363, 3096032662u, 2976848821u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{364, 3197942144u, 3094120030u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{365, 3403348556u, 3184653669u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{366, 2998032500u, 3373011130u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{367, 3182301130u, 3460764044u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{368, 1136411063u, 1118097422u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{369, 3239231622u, 3302723069u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{370, 3340615780u, 870350055u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{371, 998567360u, 2995278691u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{372, 3417964312u, 1321337529u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{373, 3109481038u, 1143864063u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{374, 1148867223u, 1256486202u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{375, 2960983878u, 1314196594u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{376, 989687421u, 3372681320u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{377, 1152956913u, 3166480640u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{378, 892922651u, 3373029087u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{379, 1109627625u, 1314158257u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{380, 1307091856u, 1103202538u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{381, 1077234132u, 3272167130u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{382, 1142167709u, 1096445242u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{383, 3426232834u, 1036705270u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{384, 3000726366u, 3172023300u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{385, 3368566779u, 967249167u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{386, 3030724760u, 3349013503u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{387, 1138741813u, 3073453199u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{388, 982950501u, 982549888u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{389, 1142981585u, 1015602236u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{390, 3016453868u, 3365560001u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{391, 3347165962u, 3135486696u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{392, 1009535440u, 3381353228u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{393, 3103736980u, 3402950505u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{394, 3126820946u, 1077903063u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{395, 3473956030u, 976891930u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{396, 3349098349u, 1055327704u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{397, 3152729489u, 1060398533u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{398, 945568720u, 3313485084u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{399, 3345489836u, 1108392401u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{400, 940893161u, 1137000140u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{401, 976791751u, 3230678102u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{402, 3013749677u, 1324802687u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{403, 1004442355u, 3036510596u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{404, 1108485380u, 3173536878u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{405, 1061834641u, 972388096u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{406, 3381268392u, 1146976802u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{407, 1087189715u, 2952822478u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{408, 3212952285u, 3329407365u, 0u, 0, LOGBF_TOLERANCE, 0}, +{409, 1000611335u, 857599439u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{410, 847191250u, 1227905777u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{411, 3466188568u, 1041678304u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{412, 2968337765u, 3091399866u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{413, 3072456205u, 3160254633u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{414, 3319315516u, 3422089012u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{415, 935938416u, 1146676692u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{416, 3212614372u, 1152633030u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{417, 1315030230u, 3336225884u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{418, 822041816u, 898402905u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{419, 1134593658u, 3456812581u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{420, 977281449u, 879922831u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{421, 1086198791u, 920125958u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{422, 1255152035u, 851754050u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{423, 1135271264u, 3284878412u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{424, 1094190727u, 1056854532u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{425, 1294665325u, 991185677u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{426, 1036608591u, 805416536u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{427, 2960459834u, 1296239160u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{428, 3229998064u, 825237063u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{429, 3439134022u, 1043829691u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{430, 3073083133u, 1317170485u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{431, 1325668223u, 970681762u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{432, 1092037607u, 1027330835u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{433, 826457956u, 3343511749u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{434, 3316278408u, 3455589207u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{435, 3295436768u, 3129873731u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{436, 1151984049u, 3074547120u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{437, 1129287043u, 3076527544u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{438, 1243664530u, 972879810u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{439, 950829092u, 929114193u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{440, 1115471979u, 3047246262u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{441, 3351092088u, 3024661404u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{442, 3424479544u, 3312047722u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{443, 3241193975u, 884465785u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{444, 811700241u, 3478509398u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{445, 1030934236u, 1045139240u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{446, 3131791114u, 3408392958u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{447, 1025254314u, 3057812821u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{448, 1110545760u, 3240144177u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{449, 826998191u, 1091496527u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{450, 3180213739u, 1108793820u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{451, 3361976590u, 3138179993u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{452, 881280146u, 3421884736u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{453, 1304154705u, 2961937089u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{454, 3264443610u, 3222916705u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{455, 3374550627u, 3055856293u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{456, 2979664918u, 3365394784u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{457, 899599265u, 3240118211u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{458, 842476444u, 3452685905u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{459, 1268194719u, 1332489410u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{460, 1133420220u, 1245770860u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{461, 1161858787u, 815362075u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{462, 3184462258u, 1263529646u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{463, 3295996963u, 3453334307u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{464, 1270887389u, 1156123987u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{465, 3325193181u, 993979179u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{466, 925657343u, 1315159742u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{467, 3115275450u, 3008350271u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{468, 3116607482u, 3224327456u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{469, 3187892415u, 3118097315u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{470, 1189120494u, 978961471u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{471, 889030794u, 3129523970u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{472, 1323529208u, 3100744786u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{473, 2975945347u, 940445933u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{474, 3465768388u, 3190881451u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{475, 3426099899u, 1118756120u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{476, 3224857113u, 3398166843u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{477, 1065798296u, 816191940u, 0u, 0, LOGBF_TOLERANCE, 0}, +{478, 3328989444u, 850266225u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{479, 3357819026u, 3148475462u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{480, 1273397670u, 901308750u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{481, 3424831780u, 1304806106u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{482, 1257596246u, 3420832544u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{483, 1051773536u, 896271348u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{484, 3294752507u, 3113225954u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{485, 3424848725u, 2973850350u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{486, 1090870906u, 3294742905u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{487, 1227582289u, 1208979668u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{488, 2996780709u, 852318215u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{489, 1272325814u, 3004311296u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{490, 3359508271u, 859974315u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{491, 2992737514u, 2999023943u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{492, 1137854355u, 3335041917u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{493, 3440773058u, 3204192793u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{494, 3101598400u, 3057760708u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{495, 3451216836u, 3347783723u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{496, 3437062994u, 3106834845u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{497, 1131196082u, 1164573183u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{498, 3177294154u, 1282436638u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{499, 3258097678u, 1305882290u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{500, 3460915348u, 1219372260u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{501, 3009547195u, 1256074626u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{502, 3303035472u, 3153013020u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{503, 1053698677u, 3284313107u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{504, 3396166221u, 1201894512u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{505, 3037541131u, 1085398440u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{506, 3458934263u, 1005577835u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{507, 1065761827u, 3333928591u, 0u, 0, LOGBF_TOLERANCE, 0}, +{508, 3025843188u, 820250112u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{509, 3017430347u, 3009209071u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{510, 926665223u, 3150815797u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{511, 2970966181u, 3383521344u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{512, 1199816046u, 3143776186u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{513, 3333779015u, 952421041u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{514, 856234019u, 3091454180u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{515, 948398145u, 3238273189u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{516, 3054021468u, 1270257895u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{517, 1080781593u, 1213908300u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{518, 3164749613u, 3010837763u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{519, 2971341371u, 1014754300u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{520, 3235326590u, 1271705594u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{521, 3118883815u, 1051802647u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{522, 965378004u, 1292594138u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{523, 3226990408u, 1110755136u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{524, 2953069847u, 3293953199u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{525, 3117098218u, 1122474770u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{526, 1283624229u, 906796922u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{527, 860729004u, 1163935062u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{528, 970649315u, 1078286437u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{529, 959776291u, 3280345347u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{530, 3341117305u, 3294559023u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{531, 1270734970u, 3355874874u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{532, 3454816067u, 868771977u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{533, 917206623u, 1172710814u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{534, 1106502045u, 1290849316u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{535, 1157598381u, 3309023746u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{536, 835476614u, 1092590501u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{537, 3335234513u, 1002337336u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{538, 1279489061u, 1006049444u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{539, 807133892u, 1110992491u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{540, 3157416480u, 1309984610u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{541, 3143920719u, 3131608518u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{542, 2995340689u, 1165036009u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{543, 1233171235u, 826460580u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{544, 1148920078u, 1007674793u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{545, 3064988156u, 3230867340u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{546, 3083619260u, 1159415661u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{547, 1109198803u, 1221754614u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{548, 3219949483u, 1056167693u, 0u, 0, LOGBF_TOLERANCE, 0}, +{549, 3361149474u, 3387342069u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{550, 827931800u, 1118474231u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{551, 1207502108u, 3388073586u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{552, 1000014431u, 831213088u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{553, 3161756316u, 3143659754u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{554, 3160728744u, 3382954009u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{555, 1234530539u, 1079988872u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{556, 1017843965u, 1193076204u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{557, 2965746635u, 3248194237u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{558, 951862956u, 1173464654u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{559, 3306328852u, 1118701064u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{560, 1291910469u, 1211303367u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{561, 3027442905u, 1173894400u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{562, 809646928u, 3006525025u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{563, 1131927531u, 3182962700u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{564, 3449879391u, 991614550u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{565, 970094304u, 3344590506u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{566, 1125551064u, 3331248076u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{567, 3427296372u, 3455289118u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{568, 1198917460u, 1327195159u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{569, 3201603336u, 820047343u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{570, 3114686212u, 3476082461u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{571, 921940707u, 2967544056u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{572, 1091906532u, 3011904455u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{573, 3393557778u, 3383396815u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{574, 1276853215u, 873199561u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{575, 3462778440u, 3349284325u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{576, 833132358u, 3470358002u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{577, 3360170117u, 3048354042u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{578, 3224245428u, 3271307999u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{579, 1120124467u, 1135619937u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{580, 1064364381u, 3180675544u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{581, 1268744779u, 3328452652u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{582, 1165195428u, 3390323168u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{583, 3044092739u, 1106497311u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{584, 3149469534u, 1278465842u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{585, 3247790039u, 909788142u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{586, 3215244648u, 1083988595u, 0u, 0, LOGBF_TOLERANCE, 0}, +{587, 3095275931u, 989153382u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{588, 3059688264u, 1117455718u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{589, 2990022513u, 1061714285u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{590, 1212717473u, 837873779u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{591, 3275973009u, 3450721670u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{592, 3028857014u, 3188853813u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{593, 3391162308u, 1291220039u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{594, 1044867873u, 3369493273u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{595, 1089986803u, 3462160118u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{596, 1296314700u, 2957454177u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{597, 1251462432u, 3171021770u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{598, 3485236902u, 980772835u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{599, 3262169538u, 1268270462u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{600, 3080852256u, 994641495u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{601, 1022211242u, 922124181u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{602, 884661176u, 2985540645u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{603, 3071422941u, 3271100396u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{604, 989762529u, 3362011135u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{605, 1295475718u, 3212305413u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{606, 1002632518u, 3330388441u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{607, 3404372005u, 3450484255u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{608, 3158912530u, 3105501826u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{609, 2987029985u, 1218447414u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{610, 1125800069u, 3256265749u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{611, 3138037576u, 3103365227u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{612, 3108384823u, 1300246663u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{613, 999985470u, 3409354318u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{614, 1189421739u, 1056599002u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{615, 3075182644u, 3144159778u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{616, 3028099649u, 3391513557u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{617, 837703706u, 3467473756u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{618, 3132541814u, 3444521949u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{619, 1164046161u, 3440635788u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{620, 1292596266u, 3116569667u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{621, 3469748379u, 3412765608u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{622, 2968771722u, 3117531540u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{623, 1314644642u, 3123051784u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{624, 3399813173u, 828743798u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{625, 948775569u, 3485444126u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{626, 1034611395u, 882288581u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{627, 3489122735u, 3372450889u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{628, 1181604787u, 3363067409u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{629, 3059042077u, 3204983963u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{630, 1043691622u, 3402603223u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{631, 1314588083u, 856187848u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{632, 3141533334u, 3010142974u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{633, 3013416703u, 3442525943u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{634, 861266716u, 822172554u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{635, 3157534378u, 3451674717u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{636, 2976169000u, 3033697153u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{637, 3400949680u, 3073750220u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{638, 3365581801u, 1175843167u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{639, 1110424755u, 3011308654u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{640, 3189917167u, 927278934u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{641, 969804941u, 3355439348u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{642, 1139120919u, 3270515074u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{643, 816789141u, 3325199970u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{644, 934308144u, 3118191228u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{645, 1220524226u, 1152648002u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{646, 3162548604u, 3461790298u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{647, 3382391700u, 3296962745u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{648, 1156767533u, 1088986462u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{649, 3079222483u, 3312324949u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{650, 994934087u, 967678094u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{651, 840906467u, 3156591981u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{652, 3185240099u, 1123403720u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{653, 870026344u, 1093936408u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{654, 2996887005u, 3287317742u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{655, 3479873563u, 1246277393u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{656, 3424264117u, 3434026174u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{657, 3228365887u, 1216775310u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{658, 1035909900u, 1249532942u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{659, 2989750574u, 1274271338u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{660, 3024951184u, 1247632131u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{661, 1212129651u, 3017366784u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{662, 3125775254u, 955826310u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{663, 1037464105u, 3121544932u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{664, 1311706596u, 1254918706u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{665, 918212457u, 1017468331u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{666, 1337315179u, 3461361185u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{667, 1131358407u, 3325958870u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{668, 1156517523u, 3343716230u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{669, 3210802820u, 3207408574u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{670, 3337499209u, 1226297264u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{671, 3468429030u, 3253874001u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{672, 3253515800u, 1189005947u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{673, 3055299953u, 3047908678u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{674, 959956547u, 876324728u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{675, 3425290480u, 1139193797u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{676, 1039917375u, 1122740999u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{677, 3220979495u, 3429223871u, 0u, 0, LOGBF_TOLERANCE, 0}, +{678, 1311016004u, 3334899880u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{679, 2995451172u, 2974546424u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{680, 1128016396u, 1105151547u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{681, 3210335769u, 3100646155u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{682, 3022705759u, 3404762495u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{683, 1206054701u, 826010009u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{684, 3144504834u, 1162227076u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{685, 822524010u, 970745811u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{686, 3016981460u, 3313826904u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{687, 1213609983u, 919983950u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{688, 1246902946u, 3064047808u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{689, 995850843u, 1332031130u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{690, 3362082828u, 3374056268u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{691, 1029480631u, 3047777170u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{692, 3153568584u, 3106514232u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{693, 3384988527u, 3109485565u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{694, 1317696241u, 870681806u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{695, 3235395924u, 1132055244u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{696, 3341877624u, 2969495570u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{697, 1228636133u, 886552820u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{698, 3161654634u, 3335899347u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{699, 3162655243u, 3307203982u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{700, 1207246237u, 859223639u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{701, 1165476654u, 3350219111u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{702, 1215278023u, 3019755242u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{703, 1017239798u, 3438501281u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{704, 1149651309u, 970030475u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{705, 1111943722u, 3122211334u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{706, 856374764u, 1158358450u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{707, 1189849849u, 3382739134u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{708, 3204848496u, 3141519085u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{709, 1249758327u, 3104759211u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{710, 3092982276u, 3445282331u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{711, 1168098747u, 1316854744u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{712, 892549317u, 1179637545u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{713, 3301009024u, 3406174560u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{714, 3233089227u, 1212652543u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{715, 3218245284u, 1238873830u, 0u, 0, LOGBF_TOLERANCE, 0}, +{716, 3215981890u, 3240474694u, 0u, 0, LOGBF_TOLERANCE, 0}, +{717, 1266687209u, 3092038122u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{718, 825230580u, 3410090781u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{719, 3487959775u, 3331372071u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{720, 943645710u, 852875779u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{721, 3345065699u, 3282620725u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{722, 935847271u, 1067255804u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{723, 3410336089u, 1111437780u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{724, 3082940740u, 1336840432u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{725, 1141063391u, 1168908072u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{726, 3059263153u, 3067795684u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{727, 849450947u, 3289799763u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{728, 3353679791u, 897158391u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{729, 1001823878u, 1016826861u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{730, 1009130212u, 1004302940u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{731, 3367127535u, 943136342u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{732, 1032920919u, 3449126417u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{733, 3281952870u, 3147012185u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{734, 1237868497u, 3048281802u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{735, 1153753924u, 3322269242u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{736, 1120261759u, 892210998u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{737, 3226328360u, 3366432856u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{738, 3349595986u, 3251588707u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{739, 3166889490u, 3306023523u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{740, 1087750238u, 1099325523u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{741, 3121620061u, 3359488363u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{742, 1066116543u, 3072159933u, 0u, 0, LOGBF_TOLERANCE, 0}, +{743, 3210898034u, 2981803389u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{744, 3051923237u, 3364074347u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{745, 1030612298u, 3345396001u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{746, 3015019212u, 989161453u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{747, 1186234578u, 858134374u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{748, 1331680743u, 1009396165u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{749, 847857044u, 894661023u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{750, 3060774997u, 1326067357u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{751, 887589411u, 1292305693u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{752, 1045232522u, 3234993273u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{753, 3119858470u, 962515365u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{754, 3002873011u, 3188748064u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{755, 3349432725u, 928848003u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{756, 912423027u, 3184646319u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{757, 3228795133u, 3273940030u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{758, 3194674746u, 3112269709u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{759, 3296784303u, 3276182352u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{760, 965402291u, 3107104376u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{761, 3388153589u, 3426245389u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{762, 1133410485u, 3329658993u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{763, 3136790322u, 1088652637u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{764, 3369970587u, 959121458u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{765, 1270451568u, 928393353u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{766, 989498922u, 3088358419u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{767, 1280215674u, 3148135875u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{768, 1171873518u, 954709738u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{769, 3298258100u, 935525182u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{770, 3415208824u, 822843236u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{771, 1001897182u, 3191875320u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{772, 3152777939u, 3245830463u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{773, 985903305u, 3333087577u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{774, 3357328848u, 859306298u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{775, 2967395608u, 3077307650u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{776, 982612185u, 923582663u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{777, 3267868136u, 1208301947u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{778, 3319048157u, 1172271145u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{779, 1144755661u, 860947435u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{780, 840456845u, 1051585760u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{781, 898467286u, 839254959u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{782, 3301461672u, 1233693827u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{783, 3364525678u, 3089849671u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{784, 871130681u, 905123007u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{785, 931441127u, 1133424555u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{786, 3146660041u, 3143695961u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{787, 3467121799u, 3023584354u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{788, 1151257041u, 3084216427u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{789, 3097873255u, 3219266640u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{790, 3130670309u, 3192399254u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{791, 1017573824u, 3130901062u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{792, 1258369714u, 3462258576u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{793, 1216602683u, 3371396332u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{794, 2976429847u, 959973239u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{795, 3297265739u, 1214184410u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{796, 1071940738u, 3311731012u, 0u, 0, LOGBF_TOLERANCE, 0}, +{797, 922601356u, 3337171870u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{798, 3462285635u, 3444030332u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{799, 3357177805u, 1085464241u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{800, 3049120080u, 900832851u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{801, 1153863660u, 1011991342u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{802, 3034243695u, 917098003u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{803, 809294662u, 3266461458u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{804, 822231182u, 3393408718u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{805, 845772797u, 3341109215u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{806, 1249365132u, 3278686216u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{807, 3046215730u, 3211219980u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{808, 3047251716u, 1090787353u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{809, 2980866154u, 1147012796u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{810, 3131219358u, 3471261157u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{811, 3222096285u, 1198013705u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{812, 1297708818u, 3079166173u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{813, 3345532722u, 3383708463u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{814, 3418753236u, 3481843070u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{815, 1277417964u, 3487506626u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{816, 987577257u, 1152077087u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{817, 3161606610u, 3190282989u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{818, 849056171u, 910674398u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{819, 888030585u, 3062367380u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{820, 1043442869u, 3311393817u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{821, 851189486u, 3007588581u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{822, 3320923228u, 3464544249u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{823, 1337400405u, 3488844154u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{824, 2964339884u, 3186563447u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{825, 3400348640u, 3129868490u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{826, 1250249095u, 1069023744u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{827, 3284411233u, 1173613526u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{828, 3020883322u, 2953622587u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{829, 1215968622u, 3469884568u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{830, 3202319550u, 819117302u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{831, 3061638260u, 3116222327u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{832, 1025404104u, 1066370251u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{833, 3138086437u, 3195983510u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{834, 3091024506u, 3456196859u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{835, 3362748242u, 3369843597u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{836, 3099671635u, 3218383623u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{837, 3068014841u, 2978226656u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{838, 1252237719u, 1121169249u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{839, 3327895594u, 1224511805u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{840, 3082454432u, 889268276u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{841, 3396161504u, 1182798837u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{842, 1099710167u, 887180181u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{843, 1157186482u, 1288722647u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{844, 1282110851u, 3176633124u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{845, 3477008113u, 1331845018u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{846, 3292127294u, 3409957764u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{847, 1123357102u, 3281307320u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{848, 1106837025u, 3088080674u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{849, 1049949008u, 1130799489u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{850, 1253017688u, 942062372u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{851, 1108543194u, 3281299199u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{852, 3087985411u, 1238341456u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{853, 3002187365u, 1073809054u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{854, 3163283126u, 1328636961u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{855, 1160162706u, 1264067367u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{856, 3305715025u, 3017496063u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{857, 1266928623u, 811778614u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{858, 3025340297u, 1193925540u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{859, 3438080027u, 3107114149u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{860, 3344574751u, 3111270744u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{861, 1152416724u, 962669179u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{862, 1218239308u, 1126238113u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{863, 3263310567u, 1030748197u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{864, 835770216u, 865469272u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{865, 3041998669u, 1160635263u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{866, 1000313118u, 2980130729u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{867, 972485427u, 1124312043u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{868, 3290264612u, 1124703898u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{869, 869072657u, 3150369767u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{870, 3222106584u, 1183748648u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{871, 1278946388u, 825129857u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{872, 947914771u, 3181847068u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{873, 3167730654u, 3195765940u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{874, 1098530298u, 3255870890u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{875, 3232726036u, 871038882u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{876, 1297190916u, 811863044u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{877, 1277649137u, 961171401u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{878, 3203377685u, 1306427476u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{879, 3090306474u, 3124785016u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{880, 3244032016u, 3045313345u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{881, 3033122376u, 3049877065u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{882, 3019221802u, 3329183205u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{883, 1096155623u, 1256423752u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{884, 873151908u, 3246562559u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{885, 3238729605u, 1298769842u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{886, 3317196817u, 989537151u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{887, 3374748510u, 834161190u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{888, 3345634950u, 959901149u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{889, 3189860276u, 883598767u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{890, 887311687u, 1175312255u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{891, 3396917283u, 3066326686u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{892, 3317032737u, 3143803722u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{893, 1200051436u, 1163802508u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{894, 3105291012u, 1194385202u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{895, 1306520561u, 957302464u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{896, 1314936356u, 2985592532u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{897, 3475052219u, 1284049853u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{898, 3085636260u, 1107682820u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{899, 2995058661u, 822977912u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{900, 3393227708u, 3271879112u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{901, 2983919425u, 3341426744u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{902, 3182540197u, 852580839u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{903, 3349005404u, 3080993030u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{904, 3154720153u, 3443720494u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{905, 1262863321u, 1219003129u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{906, 882902102u, 1224362550u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{907, 2995633678u, 828113666u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{908, 1053387478u, 3184880021u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{909, 3387653691u, 3347783852u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{910, 3136364836u, 1018492227u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{911, 808412264u, 941158192u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{912, 1338680611u, 1166078045u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{913, 1112891928u, 3074730425u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{914, 893449284u, 1052877339u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{915, 892311459u, 1097338393u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{916, 3105373037u, 3246705916u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{917, 1190105283u, 3033907262u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{918, 1011225926u, 1180485180u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{919, 1043025031u, 987068973u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{920, 3410531037u, 2953541915u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{921, 3125834184u, 896953754u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{922, 902318189u, 849277289u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{923, 835377647u, 3441354730u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{924, 2976308307u, 1286944060u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{925, 3213624815u, 2987148017u, 0u, 0, LOGBF_TOLERANCE, 0}, +{926, 1120888322u, 1086209113u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{927, 1315217243u, 3396371713u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{928, 3137758475u, 1039403054u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{929, 1040617590u, 1034835971u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{930, 955384253u, 3344785562u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{931, 853063496u, 3317415965u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{932, 823111402u, 877253523u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{933, 3061417900u, 1172208065u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{934, 904255535u, 1019967545u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{935, 1022984119u, 3113891410u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{936, 997362368u, 3112875428u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{937, 900933520u, 1100589187u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{938, 1168623062u, 1143306482u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{939, 878737490u, 3269908326u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{940, 1039827284u, 1072928888u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{941, 1021564080u, 1064468397u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{942, 3458669745u, 3033299853u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{943, 3327516316u, 3405380971u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{944, 1040711112u, 3229444200u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{945, 1134528351u, 3365952513u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{946, 3039884464u, 1170612785u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{947, 3414352838u, 3350285760u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{948, 1133689539u, 1067460093u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{949, 3455688478u, 3333091960u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{950, 1137634874u, 1137038869u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{951, 3415502662u, 955510692u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{952, 954999730u, 969618597u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{953, 1066157309u, 3241712664u, 0u, 0, LOGBF_TOLERANCE, 0}, +{954, 3436353675u, 1174967495u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{955, 940437609u, 860372396u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{956, 3108347547u, 3434003435u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{957, 3064200154u, 3158080507u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{958, 1023889593u, 2979304683u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{959, 3272661536u, 3461799138u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{960, 1170245333u, 1233406410u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{961, 1219052056u, 3369557946u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{962, 3318983619u, 3259663338u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{963, 3372118621u, 837597103u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{964, 3146190320u, 889646054u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{965, 1299683827u, 966031619u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{966, 3190796331u, 1320011850u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{967, 2965838479u, 805822032u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{968, 3086068902u, 3484245751u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{969, 3064155399u, 3176569312u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{970, 836858201u, 3132995403u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{971, 3040314717u, 1071290674u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{972, 3257224022u, 3361778245u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{973, 1229268598u, 1066965677u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{974, 3184078812u, 871003709u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{975, 871255076u, 3446104825u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{976, 1086717248u, 3423795374u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{977, 3434884607u, 3029593823u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{978, 3464955606u, 1017987696u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{979, 1025278524u, 3121856207u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{980, 1242829722u, 3233935671u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{981, 3075149137u, 1117325737u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{982, 1200927971u, 1317167489u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{983, 3326858092u, 3452602832u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{984, 2995203347u, 1021818696u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{985, 1246019790u, 850632217u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{986, 3184801644u, 1137974313u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{987, 1136052740u, 3244616020u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{988, 1069009211u, 3002507482u, 0u, 0, LOGBF_TOLERANCE, 0}, +{989, 1015670780u, 1101217251u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{990, 1012543234u, 1116520440u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{991, 3316611992u, 3394732912u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{992, 3012101436u, 3307846870u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{993, 1087942795u, 3316660295u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{994, 3426365713u, 3069778532u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{995, 3066654389u, 3443934204u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{996, 3295326432u, 1313396175u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{997, 3318835308u, 3277583511u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{998, 3283555717u, 891875120u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{999, 3381255420u, 3015406047u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{1000, 3040485181u, 3375450886u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1001, 3388772093u, 1032597076u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{1002, 954670189u, 1144923689u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1003, 1319200415u, 3387555900u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1004, 1279324488u, 3228401212u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{1005, 3217795424u, 865577227u, 0u, 0, LOGBF_TOLERANCE, 0}, +{1006, 3455131757u, 1260217257u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{1007, 2982636375u, 3162157233u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1008, 1246947517u, 1087951909u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1009, 3396723577u, 869285240u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1010, 3433761025u, 3060143904u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1011, 3201187455u, 900233172u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{1012, 1173247961u, 1191127979u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{1013, 3037297123u, 3346394818u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1014, 3248534678u, 1323683800u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1015, 3083019343u, 3033309444u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{1016, 3042018375u, 3203882372u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1017, 1082862511u, 3032804719u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{1018, 3157626955u, 3483653298u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{1019, 1341821683u, 3003675365u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{1020, 881101379u, 1190838126u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1021, 1079061705u, 2960507663u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1022, 3182695954u, 3256861672u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{1023, 1105291533u, 3482971524u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1024, 1016023520u, 3227712090u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{1025, 3370691006u, 1295870514u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{1026, 1156767169u, 1049756240u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1027, 3077020499u, 894671462u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{1028, 1104284039u, 3040211914u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1029, 3335212901u, 3486414589u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{1030, 1093697541u, 3193708441u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{1031, 3266691185u, 1160074593u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{1032, 3179003144u, 1108615803u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{1033, 1094115255u, 3008610212u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{1034, 2994604730u, 973792195u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{1035, 3424086808u, 3260140004u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{1036, 2957266025u, 917932067u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{1037, 3353608773u, 1134068114u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1038, 2985838945u, 3118475644u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1039, 973664327u, 1319516167u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{1040, 882878091u, 3136970767u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1041, 1098662266u, 833740182u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{1042, 927582555u, 947955456u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{1043, 3111440310u, 3067634077u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{1044, 3476083859u, 966439623u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{1045, 3038754840u, 932009686u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1046, 979878744u, 1232482646u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{1047, 3464546616u, 3205527253u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1048, 1002542205u, 3152136093u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1049, 3443552129u, 3165561391u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{1050, 1287620154u, 3119707283u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1051, 820906845u, 1196920413u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{1052, 860108361u, 921064349u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1053, 946058434u, 1249928879u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1054, 3073260205u, 3093124531u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{1055, 1245702957u, 894348966u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1056, 989655126u, 1308376568u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{1057, 1002715618u, 1191006977u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1058, 3087802274u, 897541752u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1059, 1000863905u, 1196831314u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1060, 3415763001u, 3032518431u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{1061, 2979924820u, 1100234812u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1062, 3283471961u, 1260093226u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{1063, 3311210827u, 1192192264u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1064, 3026311911u, 2968974374u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{1065, 1198307901u, 1116328249u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{1066, 1288901567u, 1296370667u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1067, 922255363u, 958305289u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{1068, 1113104661u, 944376032u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{1069, 1136714348u, 828849087u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{1070, 3002059872u, 1136817970u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1071, 948856035u, 1015466475u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1072, 1062512367u, 3229559531u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{1073, 3486907092u, 823220784u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{1074, 3015049792u, 3078555978u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{1075, 1162027071u, 3308983387u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1076, 1034561811u, 1054043114u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{1077, 853827378u, 898656161u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1078, 3271615417u, 3209997200u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1079, 1042014529u, 1146708584u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{1080, 1177157787u, 3090208179u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{1081, 3196144817u, 1056118717u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{1082, 3432084552u, 2997091781u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1083, 1309658335u, 1010219988u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1084, 3004373345u, 873739132u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1085, 2997667929u, 1038223245u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1086, 1226494979u, 2991604792u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{1087, 3100289712u, 3456334210u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1088, 3375507013u, 1306310823u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{1089, 3460699001u, 3096700943u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1090, 3079231719u, 1044386263u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{1091, 3093951884u, 1014115231u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1092, 3468023178u, 1209565017u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1093, 3008182310u, 1258900986u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1094, 1204196034u, 3298625731u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1095, 3459877411u, 2960476959u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1096, 909696559u, 1163075690u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1097, 1161439847u, 943449277u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1098, 908663107u, 939489763u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1099, 1055319316u, 3261813492u, 3221225472u, 0, LOGBF_TOLERANCE, 0}, +{1100, 1084378658u, 1009650785u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{1101, 3053887750u, 3341786453u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1102, 3022828828u, 881335251u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{1103, 2995476576u, 3194911588u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1104, 1226473697u, 821025132u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{1105, 1123114742u, 1229815537u, 1086324736u, 0, LOGBF_TOLERANCE, 0}, +{1106, 1258114435u, 1291336083u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{1107, 2983818103u, 3015402015u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1108, 3468040845u, 3066966245u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1109, 1178825761u, 1113195286u, 1095761920u, 0, LOGBF_TOLERANCE, 0}, +{1110, 3059266302u, 878503862u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1111, 3223384012u, 1130486973u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1112, 1019964626u, 1235133609u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{1113, 3445262427u, 3465211174u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{1114, 1125653081u, 1207799746u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1115, 3337652712u, 3025581813u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{1116, 1184753508u, 3147374485u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{1117, 996404791u, 3353251979u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{1118, 1188439315u, 1113484271u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{1119, 906557513u, 3006513432u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1120, 916831283u, 999465787u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{1121, 996786317u, 3179221951u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{1122, 3461635065u, 1004690387u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1123, 1188167943u, 1200744896u, 1096810496u, 0, LOGBF_TOLERANCE, 0}, +{1124, 3036502395u, 1172597364u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1125, 891257783u, 1267560050u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1126, 3290079438u, 846519377u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{1127, 3350690327u, 2967953392u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1128, 1102061604u, 3424449935u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1129, 1282351521u, 3039376424u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{1130, 3458861065u, 3392466405u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1131, 3095256878u, 1023623326u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1132, 3163373610u, 843150426u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{1133, 3228793330u, 855146890u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1134, 3422194733u, 893873945u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{1135, 3083885296u, 974543672u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{1136, 1261940623u, 3402349985u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{1137, 825039660u, 3426717554u, 3253207040u, 0, LOGBF_TOLERANCE, 0}, +{1138, 3400603081u, 3234396843u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{1139, 1219411812u, 2961857939u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{1140, 3094833770u, 805351108u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1141, 3139250800u, 3079109479u, 3239051264u, 0, LOGBF_TOLERANCE, 0}, +{1142, 886201503u, 3272760705u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1143, 3297366026u, 1089966380u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1144, 1218488455u, 3309646450u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{1145, 3040358923u, 3093401553u, 3249012736u, 0, LOGBF_TOLERANCE, 0}, +{1146, 862346861u, 3411853707u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1147, 1283938137u, 1196383822u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1148, 3182551696u, 3029982441u, 3229614080u, 0, LOGBF_TOLERANCE, 0}, +{1149, 1317098613u, 949986176u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1150, 3116209179u, 3303588342u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{1151, 3431703657u, 3014443710u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1152, 3239728775u, 927815421u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{1153, 3207141672u, 933456504u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{1154, 3154378805u, 905462392u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{1155, 3069658155u, 1041452042u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{1156, 3313160088u, 2964063309u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1157, 3207056527u, 3384206601u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{1158, 1284174954u, 3436881197u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1159, 3156081645u, 3308839704u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{1160, 1063693032u, 976661408u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{1161, 3036026175u, 1251203998u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1162, 1102631663u, 3396951425u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1163, 968803479u, 992989712u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{1164, 3273080388u, 3109405906u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1165, 1172529774u, 3294550127u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{1166, 1306695905u, 1292690378u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{1167, 1003649752u, 1218792138u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1168, 1078478376u, 1326246424u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1169, 3158855023u, 3151283866u, 3235905536u, 0, LOGBF_TOLERANCE, 0}, +{1170, 1165177679u, 3276237026u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1171, 870472127u, 3332532333u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{1172, 3403009513u, 3381966453u, 1102053376u, 0, LOGBF_TOLERANCE, 0}, +{1173, 816825508u, 3032174124u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{1174, 952348506u, 3377573987u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1175, 839544701u, 3419900937u, 3252158464u, 0, LOGBF_TOLERANCE, 0}, +{1176, 2967454456u, 3313359047u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{1177, 1222777442u, 1125769920u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{1178, 1325324763u, 978336043u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1179, 3363524213u, 3202991311u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{1180, 1158950321u, 1073578913u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1181, 903129873u, 3416864271u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{1182, 2997685349u, 1123653663u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1183, 3078339944u, 988173985u, 3246915584u, 0, LOGBF_TOLERANCE, 0}, +{1184, 1208345407u, 1254181270u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{1185, 3003262042u, 1327277116u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1186, 1258634105u, 1247426200u, 1102577664u, 0, LOGBF_TOLERANCE, 0}, +{1187, 1248478509u, 1287895126u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1188, 1153863988u, 3430539165u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1189, 1235620969u, 866627358u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{1190, 1097120930u, 3221726305u, 1077936128u, 0, LOGBF_TOLERANCE, 0}, +{1191, 3469778622u, 1200179013u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1192, 1147712200u, 931865525u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{1193, 812694172u, 1136276190u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{1194, 862266739u, 3139447362u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1195, 1124721745u, 3058969650u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1196, 3261744304u, 1043806501u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{1197, 832324055u, 2954061156u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1198, 805759679u, 903848557u, 3254255616u, 0, LOGBF_TOLERANCE, 0}, +{1199, 2983396015u, 872299138u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1200, 1064922416u, 1320485628u, 3212836864u, 0, LOGBF_TOLERANCE, 0}, +{1201, 868114980u, 3213276361u, 3250585600u, 0, LOGBF_TOLERANCE, 0}, +{1202, 3303160152u, 3075455322u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1203, 1315090496u, 3269683237u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1204, 850876090u, 3365795667u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1205, 3230403187u, 1322841992u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{1206, 1335399673u, 974138676u, 1107296256u, 0, LOGBF_TOLERANCE, 0}, +{1207, 1072458508u, 3372833993u, 0u, 0, LOGBF_TOLERANCE, 0}, +{1208, 3303015249u, 3015039539u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1209, 3252139741u, 1059615003u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1210, 3468519966u, 3113982619u, 1106247680u, 0, LOGBF_TOLERANCE, 0}, +{1211, 1006231203u, 897530770u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1212, 951554138u, 1001144381u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1213, 942046828u, 986341002u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1214, 2968517146u, 951832467u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{1215, 3319723279u, 3414482416u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{1216, 3255104167u, 928827688u, 1084227584u, 0, LOGBF_TOLERANCE, 0}, +{1217, 1155477903u, 3104812800u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1218, 3273889176u, 980486479u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1219, 3237813668u, 3441016803u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{1220, 1228207362u, 2985476579u, 1100480512u, 0, LOGBF_TOLERANCE, 0}, +{1221, 975349337u, 1311932596u, 3241148416u, 0, LOGBF_TOLERANCE, 0}, +{1222, 2982583196u, 3132904446u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1223, 1290175785u, 3008182462u, 1104150528u, 0, LOGBF_TOLERANCE, 0}, +{1224, 981908840u, 3314038398u, 3240099840u, 0, LOGBF_TOLERANCE, 0}, +{1225, 941187647u, 1107765599u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1226, 1214223128u, 3225536822u, 1099431936u, 0, LOGBF_TOLERANCE, 0}, +{1227, 3422922584u, 1086391131u, 1103626240u, 0, LOGBF_TOLERANCE, 0}, +{1228, 1315857601u, 3487600045u, 1105723392u, 0, LOGBF_TOLERANCE, 0}, +{1229, 3453226030u, 3233768835u, 1105199104u, 0, LOGBF_TOLERANCE, 0}, +{1230, 1078359574u, 3199175230u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1231, 1029557624u, 3302959071u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{1232, 1207675424u, 3042692550u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1233, 1028355074u, 3442294040u, 3231711232u, 0, LOGBF_TOLERANCE, 0}, +{1234, 3119299090u, 1187096397u, 3242196992u, 0, LOGBF_TOLERANCE, 0}, +{1235, 1248421894u, 3367769132u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1236, 3353251994u, 1095517730u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1237, 876926659u, 3288089977u, 3250061312u, 0, LOGBF_TOLERANCE, 0}, +{1238, 1076752219u, 876236939u, 1065353216u, 0, LOGBF_TOLERANCE, 0}, +{1239, 3388531942u, 2988520062u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{1240, 1273395082u, 3031189261u, 1103101952u, 0, LOGBF_TOLERANCE, 0}, +{1241, 3385588183u, 3258252464u, 1101004800u, 0, LOGBF_TOLERANCE, 0}, +{1242, 862047095u, 829323655u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1243, 3192315328u, 3289489214u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{1244, 3441804648u, 3274638356u, 1104674816u, 0, LOGBF_TOLERANCE, 0}, +{1245, 837368567u, 3228474927u, 3252682752u, 0, LOGBF_TOLERANCE, 0}, +{1246, 3392827417u, 1277961150u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1247, 1161241793u, 1328003707u, 1093664768u, 0, LOGBF_TOLERANCE, 0}, +{1248, 856495732u, 3123041418u, 3251109888u, 0, LOGBF_TOLERANCE, 0}, +{1249, 3034494183u, 3041579130u, 3249537024u, 0, LOGBF_TOLERANCE, 0}, +{1250, 1171318485u, 3374409104u, 1094713344u, 0, LOGBF_TOLERANCE, 0}, +{1251, 3047748143u, 831102792u, 3248488448u, 0, LOGBF_TOLERANCE, 0}, +{1252, 1001216371u, 3052357038u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1253, 2999541351u, 3085461799u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1254, 912515889u, 1074635609u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1255, 3391452505u, 897989232u, 1101529088u, 0, LOGBF_TOLERANCE, 0}, +{1256, 3249603369u, 3147662248u, 1082130432u, 0, LOGBF_TOLERANCE, 0}, +{1257, 1220264047u, 2960450369u, 1099956224u, 0, LOGBF_TOLERANCE, 0}, +{1258, 3169816394u, 988430929u, 3233808384u, 0, LOGBF_TOLERANCE, 0}, +{1259, 3098997418u, 3002162688u, 3244294144u, 0, LOGBF_TOLERANCE, 0}, +{1260, 3282212423u, 3174079140u, 1090519040u, 0, LOGBF_TOLERANCE, 0}, +{1261, 3352293320u, 3247843425u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1262, 3296358441u, 875645354u, 1091567616u, 0, LOGBF_TOLERANCE, 0}, +{1263, 1197828352u, 3245614728u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{1264, 3340510371u, 914930263u, 1097859072u, 0, LOGBF_TOLERANCE, 0}, +{1265, 1127109339u, 3368125489u, 1088421888u, 0, LOGBF_TOLERANCE, 0}, +{1266, 816173492u, 1083268662u, 3253731328u, 0, LOGBF_TOLERANCE, 0}, +{1267, 909467381u, 1232375752u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1268, 1200599955u, 2981200675u, 1098907648u, 0, LOGBF_TOLERANCE, 0}, +{1269, 962230977u, 2988248037u, 3243245568u, 0, LOGBF_TOLERANCE, 0}, +{1270, 2996667337u, 1068572835u, 3251634176u, 0, LOGBF_TOLERANCE, 0}, +{1271, 3192887808u, 3191848339u, 3225419776u, 0, LOGBF_TOLERANCE, 0}, +{1272, 3237183876u, 3179379969u, 1073741824u, 0, LOGBF_TOLERANCE, 0}, +{1273, 939285924u, 3056079386u, 3246391296u, 0, LOGBF_TOLERANCE, 0}, +{1274, 944050180u, 3452557879u, 3245342720u, 0, LOGBF_TOLERANCE, 0}, +{1275, 3058135703u, 3090284601u, 3247964160u, 0, LOGBF_TOLERANCE, 0}, +{1276, 3480592662u, 3261728191u, 1106771968u, 0, LOGBF_TOLERANCE, 0}, +{1277, 3061939312u, 3274418540u, 3247439872u, 0, LOGBF_TOLERANCE, 0}, +{1278, 1003299981u, 853295521u, 3238002688u, 0, LOGBF_TOLERANCE, 0}, +{1279, 1155775526u, 1255814444u, 1092616192u, 0, LOGBF_TOLERANCE, 0}, +{1280, 1234491880u, 3408568717u, 1101004800u, 0, LOGBF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LOGBF_H multiple inclusion protection + +// EOF logbf.h diff --git a/packages/language/c/libm/current/tests/vectors/logf.c b/packages/language/c/libm/current/tests/vectors/logf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/logf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// log.c +// +// Test of log() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/logf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(logf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &logf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &logf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("logf() is stable"); + } // if + else + { + CYG_TEST_FAIL("logf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library log() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "log() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF log.c diff --git a/packages/language/c/libm/current/tests/vectors/logf.h b/packages/language/c/libm/current/tests/vectors/logf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/logf.h @@ -0,0 +1,874 @@ +#ifndef CYGONCE_LIBM_LOG_H +#define CYGONCE_LIBM_LOG_H +//=========================================================================== +// +// log.h +// +// Test vectors for testing of log() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/log.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define LOG_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t logf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START +{0, 3214514586u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{1, 3214430700u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{2, 3214346813u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{3, 3214262927u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{4, 3214179041u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{5, 3214095155u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{6, 3214011269u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{7, 3213927383u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{8, 3213843497u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{9, 3213759611u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{10, 3213675725u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{11, 3213591839u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{12, 3213507953u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{13, 3213424067u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{14, 3213340180u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{15, 3213256294u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{16, 3213172408u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{17, 3213088522u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{18, 3213004636u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{19, 3212920750u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{20, 3212836864u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{21, 3212669092u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{22, 3212501320u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{23, 3212333548u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{24, 3212165775u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{25, 3211998003u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{26, 3211830231u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{27, 3211662459u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{28, 3211494687u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{29, 3211326915u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{30, 3211159142u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{31, 3210991370u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{32, 3210823598u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{33, 3210655826u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{34, 3210488054u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{35, 3210320282u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{36, 3210152509u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{37, 3209984737u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{38, 3209816965u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{39, 3209649193u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{40, 3209481421u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{41, 3209313649u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{42, 3209145876u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{43, 3208978104u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{44, 3208810332u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{45, 3208642560u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{46, 3208474788u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{47, 3208307016u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{48, 3208139244u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{49, 3207971471u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{50, 3207803699u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{51, 3207635927u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{52, 3207468155u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{53, 3207300383u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{54, 3207132611u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{55, 3206964838u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{56, 3206797066u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{57, 3206629294u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{58, 3206461522u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{59, 3206293750u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{60, 3206125978u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{61, 3205958205u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{62, 3205790433u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{63, 3205622661u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{64, 3205454889u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{65, 3205287117u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{66, 3205119345u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{67, 3204951572u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{68, 3204783800u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{69, 3204616028u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{70, 3204448256u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{71, 3204112712u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{72, 3203777167u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{73, 3203441623u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{74, 3203106079u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{75, 3202770534u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{76, 3202434990u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{77, 3202099446u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{78, 3201763901u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{79, 3201428357u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{80, 3201092813u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{81, 3200757268u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{82, 3200421724u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{83, 3200086180u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{84, 3199750636u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{85, 3199415091u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{86, 3199079547u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{87, 3198744003u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{88, 3198408458u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{89, 3198072914u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{90, 3197737370u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{91, 3197401825u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{92, 3197066281u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{93, 3196730737u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{94, 3196395192u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{95, 3196059648u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{96, 3195388559u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{97, 3194717471u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{98, 3194046382u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{99, 3193375293u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{100, 3192704205u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{101, 3192033116u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{102, 3191362028u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{103, 3190690939u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{104, 3190019850u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{105, 3189348762u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{106, 3188677673u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{107, 3188006584u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{108, 3186999951u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{109, 3185657774u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{110, 3184315597u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{111, 3182973420u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{112, 3181631242u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{113, 3180289065u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{114, 3178611343u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{115, 3175926989u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{116, 3173242634u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{117, 3170222735u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{118, 3164854026u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{119, 3156465418u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{120, 646742016u, 3255452089u, 3255452089u, 0, LOG_TOLERANCE, 0}, +{121, 1008981770u, 3230883214u, 3230883214u, 0, LOG_TOLERANCE, 0}, +{122, 1017370378u, 3229245078u, 3229245078u, 0, LOG_TOLERANCE, 0}, +{123, 1022739087u, 3227544434u, 3227544434u, 0, LOG_TOLERANCE, 0}, +{124, 1025758986u, 3226337808u, 3226337808u, 0, LOG_TOLERANCE, 0}, +{125, 1028443341u, 3225401876u, 3225401876u, 0, LOG_TOLERANCE, 0}, +{126, 1031127695u, 3224637164u, 3224637164u, 0, LOG_TOLERANCE, 0}, +{127, 1032805417u, 3223990609u, 3223990609u, 0, LOG_TOLERANCE, 0}, +{128, 1034147594u, 3223430538u, 3223430538u, 0, LOG_TOLERANCE, 0}, +{129, 1035489772u, 3222936520u, 3222936520u, 0, LOG_TOLERANCE, 0}, +{130, 1036831949u, 3222494606u, 3222494606u, 0, LOG_TOLERANCE, 0}, +{131, 1038174126u, 3222094846u, 3222094846u, 0, LOG_TOLERANCE, 0}, +{132, 1039516303u, 3221729894u, 3221729894u, 0, LOG_TOLERANCE, 0}, +{133, 1040522936u, 3221394171u, 3221394171u, 0, LOG_TOLERANCE, 0}, +{134, 1041194025u, 3220941206u, 3220941206u, 0, LOG_TOLERANCE, 0}, +{135, 1041865114u, 3220362452u, 3220362452u, 0, LOG_TOLERANCE, 0}, +{136, 1042536202u, 3219821064u, 3219821064u, 0, LOG_TOLERANCE, 0}, +{137, 1043207291u, 3219312507u, 3219312507u, 0, LOG_TOLERANCE, 0}, +{138, 1043878380u, 3218833027u, 3218833027u, 0, LOG_TOLERANCE, 0}, +{139, 1044549468u, 3218379479u, 3218379479u, 0, LOG_TOLERANCE, 0}, +{140, 1045220557u, 3217949200u, 3217949200u, 0, LOG_TOLERANCE, 0}, +{141, 1045891645u, 3217539918u, 3217539918u, 0, LOG_TOLERANCE, 0}, +{142, 1046562734u, 3217149680u, 3217149680u, 0, LOG_TOLERANCE, 0}, +{143, 1047233823u, 3216776791u, 3216776791u, 0, LOG_TOLERANCE, 0}, +{144, 1047904911u, 3216419776u, 3216419776u, 0, LOG_TOLERANCE, 0}, +{145, 1048576000u, 3216077336u, 3216077336u, 0, LOG_TOLERANCE, 0}, +{146, 1048911544u, 3215748329u, 3215748329u, 0, LOG_TOLERANCE, 0}, +{147, 1049247089u, 3215431740u, 3215431740u, 0, LOG_TOLERANCE, 0}, +{148, 1049582633u, 3215126666u, 3215126666u, 0, LOG_TOLERANCE, 0}, +{149, 1049918177u, 3214832299u, 3214832299u, 0, LOG_TOLERANCE, 0}, +{150, 1050253722u, 3214547912u, 3214547912u, 0, LOG_TOLERANCE, 0}, +{151, 1050589266u, 3214272851u, 3214272851u, 0, LOG_TOLERANCE, 0}, +{152, 1050924810u, 3214006524u, 3214006524u, 0, LOG_TOLERANCE, 0}, +{153, 1051260355u, 3213748392u, 3213748392u, 0, LOG_TOLERANCE, 0}, +{154, 1051595899u, 3213497967u, 3213497967u, 0, LOG_TOLERANCE, 0}, +{155, 1051931443u, 3213254802u, 3213254802u, 0, LOG_TOLERANCE, 0}, +{156, 1052266988u, 3213018487u, 3213018487u, 0, LOG_TOLERANCE, 0}, +{157, 1052602532u, 3212740433u, 3212740433u, 0, LOG_TOLERANCE, 0}, +{158, 1052938076u, 3212293014u, 3212293014u, 0, LOG_TOLERANCE, 0}, +{159, 1053273620u, 3211857218u, 3211857218u, 0, LOG_TOLERANCE, 0}, +{160, 1053609165u, 3211432455u, 3211432455u, 0, LOG_TOLERANCE, 0}, +{161, 1053944709u, 3211018182u, 3211018182u, 0, LOG_TOLERANCE, 0}, +{162, 1054280253u, 3210613893u, 3210613893u, 0, LOG_TOLERANCE, 0}, +{163, 1054615798u, 3210219116u, 3210219116u, 0, LOG_TOLERANCE, 0}, +{164, 1054951342u, 3209833416u, 3209833416u, 0, LOG_TOLERANCE, 0}, +{165, 1055286886u, 3209456384u, 3209456384u, 0, LOG_TOLERANCE, 0}, +{166, 1055622431u, 3209087639u, 3209087639u, 0, LOG_TOLERANCE, 0}, +{167, 1055957975u, 3208726825u, 3208726825u, 0, LOG_TOLERANCE, 0}, +{168, 1056293519u, 3208373608u, 3208373608u, 0, LOG_TOLERANCE, 0}, +{169, 1056629064u, 3208027673u, 3208027673u, 0, LOG_TOLERANCE, 0}, +{170, 1056964608u, 3207688728u, 3207688728u, 0, LOG_TOLERANCE, 0}, +{171, 1057132380u, 3207356495u, 3207356495u, 0, LOG_TOLERANCE, 0}, +{172, 1057300152u, 3207030714u, 3207030714u, 0, LOG_TOLERANCE, 0}, +{173, 1057467924u, 3206711139u, 3206711139u, 0, LOG_TOLERANCE, 0}, +{174, 1057635697u, 3206397535u, 3206397535u, 0, LOG_TOLERANCE, 0}, +{175, 1057803469u, 3206089688u, 3206089688u, 0, LOG_TOLERANCE, 0}, +{176, 1057971241u, 3205787388u, 3205787388u, 0, LOG_TOLERANCE, 0}, +{177, 1058139013u, 3205490438u, 3205490438u, 0, LOG_TOLERANCE, 0}, +{178, 1058306785u, 3205198654u, 3205198654u, 0, LOG_TOLERANCE, 0}, +{179, 1058474557u, 3204911857u, 3204911857u, 0, LOG_TOLERANCE, 0}, +{180, 1058642330u, 3204629879u, 3204629879u, 0, LOG_TOLERANCE, 0}, +{181, 1058810102u, 3204256872u, 3204256872u, 0, LOG_TOLERANCE, 0}, +{182, 1058977874u, 3203711260u, 3203711260u, 0, LOG_TOLERANCE, 0}, +{183, 1059145646u, 3203174378u, 3203174378u, 0, LOG_TOLERANCE, 0}, +{184, 1059313418u, 3202645951u, 3202645951u, 0, LOG_TOLERANCE, 0}, +{185, 1059481190u, 3202125717u, 3202125717u, 0, LOG_TOLERANCE, 0}, +{186, 1059648963u, 3201613424u, 3201613424u, 0, LOG_TOLERANCE, 0}, +{187, 1059816735u, 3201108837u, 3201108837u, 0, LOG_TOLERANCE, 0}, +{188, 1059984507u, 3200611726u, 3200611726u, 0, LOG_TOLERANCE, 0}, +{189, 1060152279u, 3200121872u, 3200121872u, 0, LOG_TOLERANCE, 0}, +{190, 1060320051u, 3199639066u, 3199639066u, 0, LOG_TOLERANCE, 0}, +{191, 1060487823u, 3199163108u, 3199163108u, 0, LOG_TOLERANCE, 0}, +{192, 1060655596u, 3198693806u, 3198693806u, 0, LOG_TOLERANCE, 0}, +{193, 1060823368u, 3198230980u, 3198230980u, 0, LOG_TOLERANCE, 0}, +{194, 1060991140u, 3197774450u, 3197774450u, 0, LOG_TOLERANCE, 0}, +{195, 1061158912u, 3197324049u, 3197324049u, 0, LOG_TOLERANCE, 0}, +{196, 1061326684u, 3196879613u, 3196879613u, 0, LOG_TOLERANCE, 0}, +{197, 1061494456u, 3196440987u, 3196440987u, 0, LOG_TOLERANCE, 0}, +{198, 1061662228u, 3195956394u, 3195956394u, 0, LOG_TOLERANCE, 0}, +{199, 1061830001u, 3195101489u, 3195101489u, 0, LOG_TOLERANCE, 0}, +{200, 1061997773u, 3194257341u, 3194257341u, 0, LOG_TOLERANCE, 0}, +{201, 1062165545u, 3193423681u, 3193423681u, 0, LOG_TOLERANCE, 0}, +{202, 1062333317u, 3192600250u, 3192600250u, 0, LOG_TOLERANCE, 0}, +{203, 1062501089u, 3191786800u, 3191786800u, 0, LOG_TOLERANCE, 0}, +{204, 1062668861u, 3190983092u, 3190983092u, 0, LOG_TOLERANCE, 0}, +{205, 1062836634u, 3190188891u, 3190188891u, 0, LOG_TOLERANCE, 0}, +{206, 1063004406u, 3189403984u, 3189403984u, 0, LOG_TOLERANCE, 0}, +{207, 1063172178u, 3188628151u, 3188628151u, 0, LOG_TOLERANCE, 0}, +{208, 1063339950u, 3187861184u, 3187861184u, 0, LOG_TOLERANCE, 0}, +{209, 1063507722u, 3186534730u, 3186534730u, 0, LOG_TOLERANCE, 0}, +{210, 1063675494u, 3185035076u, 3185035076u, 0, LOG_TOLERANCE, 0}, +{211, 1063843267u, 3183551985u, 3183551985u, 0, LOG_TOLERANCE, 0}, +{212, 1064011039u, 3182085111u, 3182085111u, 0, LOG_TOLERANCE, 0}, +{213, 1064178811u, 3180634097u, 3180634097u, 0, LOG_TOLERANCE, 0}, +{214, 1064346583u, 3179114768u, 3179114768u, 0, LOG_TOLERANCE, 0}, +{215, 1064514355u, 3176274158u, 3176274158u, 0, LOG_TOLERANCE, 0}, +{216, 1064682127u, 3173463292u, 3173463292u, 0, LOG_TOLERANCE, 0}, +{217, 1064849900u, 3170469255u, 3170469255u, 0, LOG_TOLERANCE, 0}, +{218, 1065017672u, 3164962844u, 3164962844u, 0, LOG_TOLERANCE, 0}, +{219, 1065185444u, 3156519456u, 3156519456u, 0, LOG_TOLERANCE, 0}, +{220, 1065353216u, 0u, 0u, 0, LOG_TOLERANCE, 0}, +{221, 1065437102u, 1008928428u, 1008928428u, 0, LOG_TOLERANCE, 0}, +{222, 1065520988u, 1017264404u, 1017264404u, 0, LOG_TOLERANCE, 0}, +{223, 1065604874u, 1022502206u, 1022502206u, 0, LOG_TOLERANCE, 0}, +{224, 1065688760u, 1025549788u, 1025549788u, 0, LOG_TOLERANCE, 0}, +{225, 1065772646u, 1028118565u, 1028118565u, 0, LOG_TOLERANCE, 0}, +{226, 1065856532u, 1030662994u, 1030662994u, 0, LOG_TOLERANCE, 0}, +{227, 1065940419u, 1032491173u, 1032491173u, 0, LOG_TOLERANCE, 0}, +{228, 1066024305u, 1033739718u, 1033739718u, 0, LOG_TOLERANCE, 0}, +{229, 1066108191u, 1034976754u, 1034976754u, 0, LOG_TOLERANCE, 0}, +{230, 1066192077u, 1036202495u, 1036202495u, 0, LOG_TOLERANCE, 0}, +{231, 1066275963u, 1037417141u, 1037417141u, 0, LOG_TOLERANCE, 0}, +{232, 1066359849u, 1038620896u, 1038620896u, 0, LOG_TOLERANCE, 0}, +{233, 1066443735u, 1039813947u, 1039813947u, 0, LOG_TOLERANCE, 0}, +{234, 1066527621u, 1040591942u, 1040591942u, 0, LOG_TOLERANCE, 0}, +{235, 1066611507u, 1041178048u, 1041178048u, 0, LOG_TOLERANCE, 0}, +{236, 1066695393u, 1041759081u, 1041759081u, 0, LOG_TOLERANCE, 0}, +{237, 1066779279u, 1042335124u, 1042335124u, 0, LOG_TOLERANCE, 0}, +{238, 1066863165u, 1042906267u, 1042906267u, 0, LOG_TOLERANCE, 0}, +{239, 1066947052u, 1043472596u, 1043472596u, 0, LOG_TOLERANCE, 0}, +{240, 3234402267u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{241, 3231108068u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{242, 3226013659u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{243, 3217625051u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{244, 0u, 1115684864u, 4286578688u, EDOM, LOG_TOLERANCE, 0}, +{245, 1070141403u, 1055339994u, 1055339994u, 0, LOG_TOLERANCE, 0}, +{246, 1078530011u, 1066567299u, 1066567299u, 0, LOG_TOLERANCE, 0}, +{247, 1083624420u, 1069968586u, 1069968586u, 0, LOG_TOLERANCE, 0}, +{248, 3253731328u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{249, 3252840038u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{250, 3251948749u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{251, 3251057459u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{252, 3250166170u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{253, 3249274880u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{254, 3248383590u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{255, 3247492301u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{256, 3246601011u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{257, 3245028147u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{258, 3243245568u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{259, 3241462989u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{260, 3239680410u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{261, 3237792973u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{262, 3234227814u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{263, 3230662656u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{264, 3224580915u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{265, 3213675725u, 1115684864u, 2143289344u, EDOM, LOG_TOLERANCE, 0}, +{266, 1058642330u, 3204629879u, 3204629879u, 0, LOG_TOLERANCE, 0}, +{267, 1075000115u, 1062549896u, 1062549896u, 0, LOG_TOLERANCE, 0}, +{268, 1082130432u, 1068593688u, 1068593688u, 0, LOG_TOLERANCE, 0}, +{269, 1085695590u, 1071564696u, 1071564696u, 0, LOG_TOLERANCE, 0}, +{270, 1089260749u, 1073748032u, 1073748032u, 0, LOG_TOLERANCE, 0}, +{271, 1091672474u, 1074615390u, 1074615390u, 0, LOG_TOLERANCE, 0}, +{272, 1093455053u, 1075333756u, 1075333756u, 0, LOG_TOLERANCE, 0}, +{273, 1095237632u, 1075946890u, 1075946890u, 0, LOG_TOLERANCE, 0}, +{274, 1097020211u, 1076481719u, 1076481719u, 0, LOG_TOLERANCE, 0}, +{275, 1098802790u, 1076955999u, 1076955999u, 0, LOG_TOLERANCE, 0}, +{276, 1099746509u, 1077382056u, 1077382056u, 0, LOG_TOLERANCE, 0}, +{277, 1100637798u, 1077768796u, 1077768796u, 0, LOG_TOLERANCE, 0}, +{278, 1101529088u, 1078122869u, 1078122869u, 0, LOG_TOLERANCE, 0}, +{279, 1102420378u, 1078449364u, 1078449364u, 0, LOG_TOLERANCE, 0}, +{280, 1103311667u, 1078752269u, 1078752269u, 0, LOG_TOLERANCE, 0}, +{281, 1104202957u, 1079034764u, 1079034764u, 0, LOG_TOLERANCE, 0}, +{282, 1105094246u, 1079299428u, 1079299428u, 0, LOG_TOLERANCE, 0}, +{283, 1105985536u, 1079548378u, 1079548378u, 0, LOG_TOLERANCE, 0}, +{284, 1107800421u, 1080134364u, 1080134364u, 0, LOG_TOLERANCE, 0}, +{285, 1221216477u, 1095693023u, 1095693023u, 0, LOG_TOLERANCE, 0}, +{286, 1224242132u, 1095908585u, 1095908585u, 0, LOG_TOLERANCE, 0}, +{287, 1073543469u, 1060005543u, 1060005543u, 0, LOG_TOLERANCE, 0}, +{288, 1198712763u, 1093704455u, 1093704455u, 0, LOG_TOLERANCE, 0}, +{289, 1312607135u, 1101261650u, 1101261650u, 0, LOG_TOLERANCE, 0}, +{290, 1166191415u, 1090873880u, 1090873880u, 0, LOG_TOLERANCE, 0}, +{291, 1234419246u, 1096817193u, 1096817193u, 0, LOG_TOLERANCE, 0}, +{292, 1302107128u, 1100800142u, 1100800142u, 0, LOG_TOLERANCE, 0}, +{293, 1336836355u, 1102310606u, 1102310606u, 0, LOG_TOLERANCE, 0}, +{294, 1167223673u, 1090993221u, 1090993221u, 0, LOG_TOLERANCE, 0}, +{295, 1324169524u, 1101744774u, 1101744774u, 0, LOG_TOLERANCE, 0}, +{296, 1083983848u, 1070268261u, 1070268261u, 0, LOG_TOLERANCE, 0}, +{297, 1341514497u, 1102490397u, 1102490397u, 0, LOG_TOLERANCE, 0}, +{298, 1272351391u, 1099511630u, 1099511630u, 0, LOG_TOLERANCE, 0}, +{299, 1172241344u, 1091434272u, 1091434272u, 0, LOG_TOLERANCE, 0}, +{300, 1104057898u, 1078990065u, 1078990065u, 0, LOG_TOLERANCE, 0}, +{301, 1224379831u, 1095917415u, 1095917415u, 0, LOG_TOLERANCE, 0}, +{302, 1306460502u, 1100985551u, 1100985551u, 0, LOG_TOLERANCE, 0}, +{303, 1197542187u, 1093624368u, 1093624368u, 0, LOG_TOLERANCE, 0}, +{304, 1184239996u, 1092472664u, 1092472664u, 0, LOG_TOLERANCE, 0}, +{305, 1252490238u, 1098402337u, 1098402337u, 0, LOG_TOLERANCE, 0}, +{306, 1139715822u, 1086677655u, 1086677655u, 0, LOG_TOLERANCE, 0}, +{307, 1143233714u, 1087348914u, 1087348914u, 0, LOG_TOLERANCE, 0}, +{308, 1139941253u, 1086707662u, 1086707662u, 0, LOG_TOLERANCE, 0}, +{309, 1092814839u, 1075089673u, 1075089673u, 0, LOG_TOLERANCE, 0}, +{310, 1288902137u, 1100229934u, 1100229934u, 0, LOG_TOLERANCE, 0}, +{311, 1333134799u, 1102127278u, 1102127278u, 0, LOG_TOLERANCE, 0}, +{312, 1187847971u, 1092800357u, 1092800357u, 0, LOG_TOLERANCE, 0}, +{313, 1181870825u, 1092246548u, 1092246548u, 0, LOG_TOLERANCE, 0}, +{314, 1309289088u, 1101097963u, 1101097963u, 0, LOG_TOLERANCE, 0}, +{315, 1297170011u, 1100588747u, 1100588747u, 0, LOG_TOLERANCE, 0}, +{316, 1258101754u, 1098835327u, 1098835327u, 0, LOG_TOLERANCE, 0}, +{317, 1106778573u, 1079758106u, 1079758106u, 0, LOG_TOLERANCE, 0}, +{318, 1140567947u, 1086788895u, 1086788895u, 0, LOG_TOLERANCE, 0}, +{319, 1238569473u, 1097191239u, 1097191239u, 0, LOG_TOLERANCE, 0}, +{320, 1261071232u, 1099027511u, 1099027511u, 0, LOG_TOLERANCE, 0}, +{321, 1175011025u, 1091652187u, 1091652187u, 0, LOG_TOLERANCE, 0}, +{322, 1082692850u, 1069138055u, 1069138055u, 0, LOG_TOLERANCE, 0}, +{323, 1255864908u, 1098683439u, 1098683439u, 0, LOG_TOLERANCE, 0}, +{324, 1136411063u, 1086179935u, 1086179935u, 0, LOG_TOLERANCE, 0}, +{325, 1091747974u, 1074648446u, 1074648446u, 0, LOG_TOLERANCE, 0}, +{326, 1193132132u, 1093251837u, 1093251837u, 0, LOG_TOLERANCE, 0}, +{327, 1270480664u, 1099436775u, 1099436775u, 0, LOG_TOLERANCE, 0}, +{328, 1148867223u, 1088231141u, 1088231141u, 0, LOG_TOLERANCE, 0}, +{329, 1152956913u, 1089047504u, 1089047504u, 0, LOG_TOLERANCE, 0}, +{330, 1109627625u, 1080918154u, 1080918154u, 0, LOG_TOLERANCE, 0}, +{331, 1307091856u, 1101007725u, 1101007725u, 0, LOG_TOLERANCE, 0}, +{332, 1077234132u, 1065698877u, 1065698877u, 0, LOG_TOLERANCE, 0}, +{333, 1142167709u, 1087130370u, 1087130370u, 0, LOG_TOLERANCE, 0}, +{334, 1278749186u, 1099794993u, 1099794993u, 0, LOG_TOLERANCE, 0}, +{335, 1221083131u, 1095682422u, 1095682422u, 0, LOG_TOLERANCE, 0}, +{336, 1138741813u, 1086542828u, 1086542828u, 0, LOG_TOLERANCE, 0}, +{337, 1142981585u, 1087299243u, 1087299243u, 0, LOG_TOLERANCE, 0}, +{338, 1199682314u, 1093773342u, 1093773342u, 0, LOG_TOLERANCE, 0}, +{339, 1326472382u, 1101847781u, 1101847781u, 0, LOG_TOLERANCE, 0}, +{340, 1201614701u, 1093988142u, 1093988142u, 0, LOG_TOLERANCE, 0}, +{341, 1198006188u, 1093656849u, 1093656849u, 0, LOG_TOLERANCE, 0}, +{342, 1108485380u, 1080445589u, 1080445589u, 0, LOG_TOLERANCE, 0}, +{343, 1233784744u, 1096746124u, 1096746124u, 0, LOG_TOLERANCE, 0}, +{344, 1087189715u, 1072552672u, 1072552672u, 0, LOG_TOLERANCE, 0}, +{345, 1065468637u, 1012917463u, 1012917463u, 0, LOG_TOLERANCE, 0}, +{346, 1318704920u, 1101517711u, 1101517711u, 0, LOG_TOLERANCE, 0}, +{347, 1171831868u, 1091404471u, 1091404471u, 0, LOG_TOLERANCE, 0}, +{348, 1315030230u, 1101355418u, 1101355418u, 0, LOG_TOLERANCE, 0}, +{349, 1134593658u, 1085845744u, 1085845744u, 0, LOG_TOLERANCE, 0}, +{350, 1086198791u, 1071910589u, 1071910589u, 0, LOG_TOLERANCE, 0}, +{351, 1255152035u, 1098630014u, 1098630014u, 0, LOG_TOLERANCE, 0}, +{352, 1135271264u, 1085976650u, 1085976650u, 0, LOG_TOLERANCE, 0}, +{353, 1094190727u, 1075597743u, 1075597743u, 0, LOG_TOLERANCE, 0}, +{354, 1294665325u, 1100483004u, 1100483004u, 0, LOG_TOLERANCE, 0}, +{355, 1082514416u, 1068969143u, 1068969143u, 0, LOG_TOLERANCE, 0}, +{356, 1291650374u, 1100324939u, 1100324939u, 0, LOG_TOLERANCE, 0}, +{357, 1325668223u, 1101801209u, 1101801209u, 0, LOG_TOLERANCE, 0}, +{358, 1092037607u, 1074772894u, 1074772894u, 0, LOG_TOLERANCE, 0}, +{359, 1168794760u, 1091152214u, 1091152214u, 0, LOG_TOLERANCE, 0}, +{360, 1147953120u, 1088110905u, 1088110905u, 0, LOG_TOLERANCE, 0}, +{361, 1151984049u, 1088871818u, 1088871818u, 0, LOG_TOLERANCE, 0}, +{362, 1129287043u, 1084930939u, 1084930939u, 0, LOG_TOLERANCE, 0}, +{363, 1243664530u, 1097632908u, 1097632908u, 0, LOG_TOLERANCE, 0}, +{364, 1115471979u, 1082436853u, 1082436853u, 0, LOG_TOLERANCE, 0}, +{365, 1203608440u, 1094171523u, 1094171523u, 0, LOG_TOLERANCE, 0}, +{366, 1276995896u, 1099712697u, 1099712697u, 0, LOG_TOLERANCE, 0}, +{367, 1093710327u, 1075427252u, 1075427252u, 0, LOG_TOLERANCE, 0}, +{368, 1110545760u, 1081262826u, 1081262826u, 0, LOG_TOLERANCE, 0}, +{369, 1214492942u, 1095090269u, 1095090269u, 0, LOG_TOLERANCE, 0}, +{370, 1304154705u, 1100895530u, 1100895530u, 0, LOG_TOLERANCE, 0}, +{371, 1116959962u, 1082760387u, 1082760387u, 0, LOG_TOLERANCE, 0}, +{372, 1227066979u, 1096196998u, 1096196998u, 0, LOG_TOLERANCE, 0}, +{373, 1268194719u, 1099327890u, 1099327890u, 0, LOG_TOLERANCE, 0}, +{374, 1133420220u, 1085597719u, 1085597719u, 0, LOG_TOLERANCE, 0}, +{375, 1161858787u, 1090553629u, 1090553629u, 0, LOG_TOLERANCE, 0}, +{376, 1148513315u, 1088185404u, 1088185404u, 0, LOG_TOLERANCE, 0}, +{377, 1270887389u, 1099453983u, 1099453983u, 0, LOG_TOLERANCE, 0}, +{378, 1177709533u, 1091927310u, 1091927310u, 0, LOG_TOLERANCE, 0}, +{379, 1189120494u, 1092895196u, 1092895196u, 0, LOG_TOLERANCE, 0}, +{380, 1323529208u, 1101722723u, 1101722723u, 0, LOG_TOLERANCE, 0}, +{381, 1318284740u, 1101495392u, 1101495392u, 0, LOG_TOLERANCE, 0}, +{382, 1278616251u, 1099789186u, 1099789186u, 0, LOG_TOLERANCE, 0}, +{383, 1077373465u, 1065796682u, 1065796682u, 0, LOG_TOLERANCE, 0}, +{384, 1065798296u, 1028899151u, 1028899151u, 0, LOG_TOLERANCE, 0}, +{385, 1181505796u, 1092222124u, 1092222124u, 0, LOG_TOLERANCE, 0}, +{386, 1210335378u, 1094747816u, 1094747816u, 0, LOG_TOLERANCE, 0}, +{387, 1273397670u, 1099549262u, 1099549262u, 0, LOG_TOLERANCE, 0}, +{388, 1277348132u, 1099730300u, 1099730300u, 0, LOG_TOLERANCE, 0}, +{389, 1257596246u, 1098802875u, 1098802875u, 0, LOG_TOLERANCE, 0}, +{390, 1147268859u, 1088016163u, 1088016163u, 0, LOG_TOLERANCE, 0}, +{391, 1277365077u, 1099731132u, 1099731132u, 0, LOG_TOLERANCE, 0}, +{392, 1090870906u, 1074247369u, 1074247369u, 0, LOG_TOLERANCE, 0}, +{393, 1227582289u, 1096246234u, 1096246234u, 0, LOG_TOLERANCE, 0}, +{394, 1272325814u, 1099510676u, 1099510676u, 0, LOG_TOLERANCE, 0}, +{395, 1212024623u, 1094900665u, 1094900665u, 0, LOG_TOLERANCE, 0}, +{396, 1137854355u, 1086411946u, 1086411946u, 0, LOG_TOLERANCE, 0}, +{397, 1293289410u, 1100414337u, 1100414337u, 0, LOG_TOLERANCE, 0}, +{398, 1303733188u, 1100877261u, 1100877261u, 0, LOG_TOLERANCE, 0}, +{399, 1289579346u, 1100254992u, 1100254992u, 0, LOG_TOLERANCE, 0}, +{400, 1131196082u, 1085206365u, 1085206365u, 0, LOG_TOLERANCE, 0}, +{401, 1110614030u, 1081287358u, 1081287358u, 0, LOG_TOLERANCE, 0}, +{402, 1313431700u, 1101295475u, 1101295475u, 0, LOG_TOLERANCE, 0}, +{403, 1155551824u, 1089454781u, 1089454781u, 0, LOG_TOLERANCE, 0}, +{404, 1248682573u, 1098041251u, 1098041251u, 0, LOG_TOLERANCE, 0}, +{405, 1311450615u, 1101210199u, 1101210199u, 0, LOG_TOLERANCE, 0}, +{406, 1065761827u, 1027788653u, 1027788653u, 0, LOG_TOLERANCE, 0}, +{407, 1199816046u, 1093789711u, 1093789711u, 0, LOG_TOLERANCE, 0}, +{408, 1186295367u, 1092671666u, 1092671666u, 0, LOG_TOLERANCE, 0}, +{409, 1080781593u, 1067890611u, 1067890611u, 0, LOG_TOLERANCE, 0}, +{410, 1087842942u, 1072950559u, 1072950559u, 0, LOG_TOLERANCE, 0}, +{411, 1079506760u, 1067167149u, 1067167149u, 0, LOG_TOLERANCE, 0}, +{412, 1283624229u, 1099978015u, 1099978015u, 0, LOG_TOLERANCE, 0}, +{413, 1193633657u, 1093301509u, 1093301509u, 0, LOG_TOLERANCE, 0}, +{414, 1270734970u, 1099447601u, 1099447601u, 0, LOG_TOLERANCE, 0}, +{415, 1307332419u, 1101015933u, 1101015933u, 0, LOG_TOLERANCE, 0}, +{416, 1106502045u, 1079686160u, 1079686160u, 0, LOG_TOLERANCE, 0}, +{417, 1157598381u, 1089728115u, 1089728115u, 0, LOG_TOLERANCE, 0}, +{418, 1187750865u, 1092792755u, 1092792755u, 0, LOG_TOLERANCE, 0}, +{419, 1279489061u, 1099826186u, 1099826186u, 0, LOG_TOLERANCE, 0}, +{420, 1233171235u, 1096672499u, 1096672499u, 0, LOG_TOLERANCE, 0}, +{421, 1148920078u, 1088237887u, 1088237887u, 0, LOG_TOLERANCE, 0}, +{422, 1109198803u, 1080746924u, 1080746924u, 0, LOG_TOLERANCE, 0}, +{423, 1072465835u, 1058877958u, 1058877958u, 0, LOG_TOLERANCE, 0}, +{424, 1213665826u, 1095030475u, 1095030475u, 0, LOG_TOLERANCE, 0}, +{425, 1207502108u, 1094457342u, 1094457342u, 0, LOG_TOLERANCE, 0}, +{426, 1234530539u, 1096829177u, 1096829177u, 0, LOG_TOLERANCE, 0}, +{427, 1158845204u, 1090015981u, 1090015981u, 0, LOG_TOLERANCE, 0}, +{428, 1291910469u, 1100335113u, 1100335113u, 0, LOG_TOLERANCE, 0}, +{429, 1131927531u, 1085302998u, 1085302998u, 0, LOG_TOLERANCE, 0}, +{430, 1302395743u, 1100814684u, 1100814684u, 0, LOG_TOLERANCE, 0}, +{431, 1125551064u, 1084257511u, 1084257511u, 0, LOG_TOLERANCE, 0}, +{432, 1279812724u, 1099839269u, 1099839269u, 0, LOG_TOLERANCE, 0}, +{433, 1198917460u, 1093717853u, 1093717853u, 0, LOG_TOLERANCE, 0}, +{434, 1091906532u, 1074717032u, 1074717032u, 0, LOG_TOLERANCE, 0}, +{435, 1246074130u, 1097848812u, 1097848812u, 0, LOG_TOLERANCE, 0}, +{436, 1276853215u, 1099705395u, 1099705395u, 0, LOG_TOLERANCE, 0}, +{437, 1315294792u, 1101364709u, 1101364709u, 0, LOG_TOLERANCE, 0}, +{438, 1212686469u, 1094954961u, 1094954961u, 0, LOG_TOLERANCE, 0}, +{439, 1076761780u, 1065358559u, 1065358559u, 0, LOG_TOLERANCE, 0}, +{440, 1120124467u, 1083354446u, 1083354446u, 0, LOG_TOLERANCE, 0}, +{441, 1268744779u, 1099356230u, 1099356230u, 0, LOG_TOLERANCE, 0}, +{442, 1165195428u, 1090799626u, 1090799626u, 0, LOG_TOLERANCE, 0}, +{443, 1100306391u, 1077629126u, 1077629126u, 0, LOG_TOLERANCE, 0}, +{444, 1067761000u, 1048654430u, 1048654430u, 0, LOG_TOLERANCE, 0}, +{445, 1212717473u, 1094957437u, 1094957437u, 0, LOG_TOLERANCE, 0}, +{446, 1128489361u, 1084804200u, 1084804200u, 0, LOG_TOLERANCE, 0}, +{447, 1243678660u, 1097634313u, 1097634313u, 0, LOG_TOLERANCE, 0}, +{448, 1089986803u, 1073939811u, 1073939811u, 0, LOG_TOLERANCE, 0}, +{449, 1296314700u, 1100554982u, 1100554982u, 0, LOG_TOLERANCE, 0}, +{450, 1251462432u, 1098299243u, 1098299243u, 0, LOG_TOLERANCE, 0}, +{451, 1337753254u, 1102351040u, 1102351040u, 0, LOG_TOLERANCE, 0}, +{452, 1114685890u, 1082334890u, 1082334890u, 0, LOG_TOLERANCE, 0}, +{453, 1295475718u, 1100519604u, 1100519604u, 0, LOG_TOLERANCE, 0}, +{454, 1256888357u, 1098755673u, 1098755673u, 0, LOG_TOLERANCE, 0}, +{455, 1125800069u, 1084309783u, 1084309783u, 0, LOG_TOLERANCE, 0}, +{456, 1189421739u, 1092916445u, 1092916445u, 0, LOG_TOLERANCE, 0}, +{457, 1164046161u, 1090721242u, 1090721242u, 0, LOG_TOLERANCE, 0}, +{458, 1292596266u, 1100376009u, 1100376009u, 0, LOG_TOLERANCE, 0}, +{459, 1322264731u, 1101676248u, 1101676248u, 0, LOG_TOLERANCE, 0}, +{460, 1314644642u, 1101341573u, 1101341573u, 0, LOG_TOLERANCE, 0}, +{461, 1252329525u, 1098386870u, 1098386870u, 0, LOG_TOLERANCE, 0}, +{462, 1341639087u, 1102494435u, 1102494435u, 0, LOG_TOLERANCE, 0}, +{463, 1181604787u, 1092228804u, 1092228804u, 0, LOG_TOLERANCE, 0}, +{464, 1314588083u, 1101339511u, 1101339511u, 0, LOG_TOLERANCE, 0}, +{465, 1253466032u, 1098491642u, 1098491642u, 0, LOG_TOLERANCE, 0}, +{466, 1218098153u, 1095411826u, 1095411826u, 0, LOG_TOLERANCE, 0}, +{467, 1110424755u, 1081218988u, 1081218988u, 0, LOG_TOLERANCE, 0}, +{468, 1139120919u, 1086596341u, 1086596341u, 0, LOG_TOLERANCE, 0}, +{469, 1220524226u, 1095636787u, 1095636787u, 0, LOG_TOLERANCE, 0}, +{470, 1234908052u, 1096868836u, 1096868836u, 0, LOG_TOLERANCE, 0}, +{471, 1156767533u, 1089621407u, 1089621407u, 0, LOG_TOLERANCE, 0}, +{472, 1332389915u, 1102102479u, 1102102479u, 0, LOG_TOLERANCE, 0}, +{473, 1276780469u, 1099701633u, 1099701633u, 0, LOG_TOLERANCE, 0}, +{474, 1080882239u, 1067945156u, 1067945156u, 0, LOG_TOLERANCE, 0}, +{475, 1212129651u, 1094909471u, 1094909471u, 0, LOG_TOLERANCE, 0}, +{476, 1311706596u, 1101222030u, 1101222030u, 0, LOG_TOLERANCE, 0}, +{477, 1337315179u, 1102332110u, 1102332110u, 0, LOG_TOLERANCE, 0}, +{478, 1131358407u, 1085228198u, 1085228198u, 0, LOG_TOLERANCE, 0}, +{479, 1156517523u, 1089588205u, 1089588205u, 0, LOG_TOLERANCE, 0}, +{480, 1190015561u, 1092957111u, 1092957111u, 0, LOG_TOLERANCE, 0}, +{481, 1320945382u, 1101622920u, 1101622920u, 0, LOG_TOLERANCE, 0}, +{482, 1106032152u, 1079561000u, 1079561000u, 0, LOG_TOLERANCE, 0}, +{483, 1277806832u, 1099752371u, 1099752371u, 0, LOG_TOLERANCE, 0}, +{484, 1073495847u, 1059957282u, 1059957282u, 0, LOG_TOLERANCE, 0}, +{485, 1311016004u, 1101189480u, 1101189480u, 0, LOG_TOLERANCE, 0}, +{486, 1128016396u, 1084725270u, 1084725270u, 0, LOG_TOLERANCE, 0}, +{487, 1206054701u, 1094359958u, 1094359958u, 0, LOG_TOLERANCE, 0}, +{488, 1213609983u, 1095026312u, 1095026312u, 0, LOG_TOLERANCE, 0}, +{489, 1246902946u, 1097913869u, 1097913869u, 0, LOG_TOLERANCE, 0}, +{490, 1214599180u, 1095097708u, 1095097708u, 0, LOG_TOLERANCE, 0}, +{491, 1237504879u, 1097107264u, 1097107264u, 0, LOG_TOLERANCE, 0}, +{492, 1317696241u, 1101462444u, 1101462444u, 0, LOG_TOLERANCE, 0}, +{493, 1087912276u, 1072991704u, 1072991704u, 0, LOG_TOLERANCE, 0}, +{494, 1194393976u, 1093372592u, 1093372592u, 0, LOG_TOLERANCE, 0}, +{495, 1228636133u, 1096340255u, 1096340255u, 0, LOG_TOLERANCE, 0}, +{496, 1207246237u, 1094440772u, 1094440772u, 0, LOG_TOLERANCE, 0}, +{497, 1165476654u, 1090817946u, 1090817946u, 0, LOG_TOLERANCE, 0}, +{498, 1215278023u, 1095144035u, 1095144035u, 0, LOG_TOLERANCE, 0}, +{499, 1149651309u, 1088378728u, 1088378728u, 0, LOG_TOLERANCE, 0}, +{500, 1111943722u, 1081738608u, 1081738608u, 0, LOG_TOLERANCE, 0}, +{501, 1189849849u, 1092945921u, 1092945921u, 0, LOG_TOLERANCE, 0}, +{502, 1249758327u, 1098111361u, 1098111361u, 0, LOG_TOLERANCE, 0}, +{503, 1168098747u, 1091084732u, 1091084732u, 0, LOG_TOLERANCE, 0}, +{504, 1153525376u, 1089143736u, 1089143736u, 0, LOG_TOLERANCE, 0}, +{505, 1085605579u, 1071501292u, 1071501292u, 0, LOG_TOLERANCE, 0}, +{506, 1070761636u, 1056883359u, 1056883359u, 0, LOG_TOLERANCE, 0}, +{507, 1068498242u, 1050870884u, 1050870884u, 0, LOG_TOLERANCE, 0}, +{508, 1266687209u, 1099241312u, 1099241312u, 0, LOG_TOLERANCE, 0}, +{509, 1340476127u, 1102455475u, 1102455475u, 0, LOG_TOLERANCE, 0}, +{510, 1197582051u, 1093627199u, 1093627199u, 0, LOG_TOLERANCE, 0}, +{511, 1262852441u, 1099105092u, 1099105092u, 0, LOG_TOLERANCE, 0}, +{512, 1141063391u, 1086877052u, 1086877052u, 0, LOG_TOLERANCE, 0}, +{513, 1206196143u, 1094369884u, 1094369884u, 0, LOG_TOLERANCE, 0}, +{514, 1219643887u, 1095560618u, 1095560618u, 0, LOG_TOLERANCE, 0}, +{515, 1134469222u, 1085820790u, 1085820790u, 0, LOG_TOLERANCE, 0}, +{516, 1237868497u, 1097136708u, 1097136708u, 0, LOG_TOLERANCE, 0}, +{517, 1153753924u, 1089181215u, 1089181215u, 0, LOG_TOLERANCE, 0}, +{518, 1120261759u, 1083376771u, 1083376771u, 0, LOG_TOLERANCE, 0}, +{519, 1078844712u, 1066765289u, 1066765289u, 0, LOG_TOLERANCE, 0}, +{520, 1202112338u, 1094037004u, 1094037004u, 0, LOG_TOLERANCE, 0}, +{521, 1087750238u, 1072895228u, 1072895228u, 0, LOG_TOLERANCE, 0}, +{522, 1066116543u, 1035099299u, 1035099299u, 0, LOG_TOLERANCE, 0}, +{523, 1186234578u, 1092666292u, 1092666292u, 0, LOG_TOLERANCE, 0}, +{524, 1331680743u, 1102077726u, 1102077726u, 0, LOG_TOLERANCE, 0}, +{525, 1201949077u, 1094021223u, 1094021223u, 0, LOG_TOLERANCE, 0}, +{526, 1081311485u, 1068173883u, 1068173883u, 0, LOG_TOLERANCE, 0}, +{527, 1149300655u, 1088293458u, 1088293458u, 0, LOG_TOLERANCE, 0}, +{528, 1240669941u, 1097339474u, 1097339474u, 0, LOG_TOLERANCE, 0}, +{529, 1133410485u, 1085595534u, 1085595534u, 0, LOG_TOLERANCE, 0}, +{530, 1222486939u, 1095788984u, 1095788984u, 0, LOG_TOLERANCE, 0}, +{531, 1270451568u, 1099435522u, 1099435522u, 0, LOG_TOLERANCE, 0}, +{532, 1280215674u, 1099855114u, 1099855114u, 0, LOG_TOLERANCE, 0}, +{533, 1171873518u, 1091407541u, 1091407541u, 0, LOG_TOLERANCE, 0}, +{534, 1150774452u, 1088630616u, 1088630616u, 0, LOG_TOLERANCE, 0}, +{535, 1267725176u, 1099302424u, 1099302424u, 0, LOG_TOLERANCE, 0}, +{536, 1209845200u, 1094698946u, 1094698946u, 0, LOG_TOLERANCE, 0}, +{537, 1120384488u, 1083396529u, 1083396529u, 0, LOG_TOLERANCE, 0}, +{538, 1171564509u, 1091384546u, 1091384546u, 0, LOG_TOLERANCE, 0}, +{539, 1144755661u, 1087626076u, 1087626076u, 0, LOG_TOLERANCE, 0}, +{540, 1153978024u, 1089217325u, 1089217325u, 0, LOG_TOLERANCE, 0}, +{541, 1217042030u, 1095296480u, 1095296480u, 0, LOG_TOLERANCE, 0}, +{542, 1319638151u, 1101564124u, 1101564124u, 0, LOG_TOLERANCE, 0}, +{543, 1151257041u, 1088730198u, 1088730198u, 0, LOG_TOLERANCE, 0}, +{544, 1258369714u, 1098857003u, 1098857003u, 0, LOG_TOLERANCE, 0}, +{545, 1216602683u, 1095244489u, 1095244489u, 0, LOG_TOLERANCE, 0}, +{546, 1149782091u, 1088409663u, 1088409663u, 0, LOG_TOLERANCE, 0}, +{547, 1071940738u, 1058299789u, 1058299789u, 0, LOG_TOLERANCE, 0}, +{548, 1314801987u, 1101347267u, 1101347267u, 0, LOG_TOLERANCE, 0}, +{549, 1209694157u, 1094683416u, 1094683416u, 0, LOG_TOLERANCE, 0}, +{550, 1153863660u, 1089198975u, 1089198975u, 0, LOG_TOLERANCE, 0}, +{551, 1249365132u, 1098086276u, 1098086276u, 0, LOG_TOLERANCE, 0}, +{552, 1074612637u, 1061862115u, 1061862115u, 0, LOG_TOLERANCE, 0}, +{553, 1297708818u, 1100608953u, 1100608953u, 0, LOG_TOLERANCE, 0}, +{554, 1198049074u, 1093659801u, 1093659801u, 0, LOG_TOLERANCE, 0}, +{555, 1271269588u, 1099469655u, 1099469655u, 0, LOG_TOLERANCE, 0}, +{556, 1277417964u, 1099733721u, 1099733721u, 0, LOG_TOLERANCE, 0}, +{557, 1173439580u, 1091516907u, 1091516907u, 0, LOG_TOLERANCE, 0}, +{558, 1337400405u, 1102335847u, 1102335847u, 0, LOG_TOLERANCE, 0}, +{559, 1252864992u, 1098437540u, 1098437540u, 0, LOG_TOLERANCE, 0}, +{560, 1250249095u, 1098162859u, 1098162859u, 0, LOG_TOLERANCE, 0}, +{561, 1136927585u, 1086265946u, 1086265946u, 0, LOG_TOLERANCE, 0}, +{562, 1215968622u, 1095189153u, 1095189153u, 0, LOG_TOLERANCE, 0}, +{563, 1215264594u, 1095143138u, 1095143138u, 0, LOG_TOLERANCE, 0}, +{564, 1252237719u, 1098377931u, 1098377931u, 0, LOG_TOLERANCE, 0}, +{565, 1180411946u, 1092145329u, 1092145329u, 0, LOG_TOLERANCE, 0}, +{566, 1248677856u, 1098040933u, 1098040933u, 0, LOG_TOLERANCE, 0}, +{567, 1099710167u, 1077365504u, 1077365504u, 0, LOG_TOLERANCE, 0}, +{568, 1157186482u, 1089675892u, 1089675892u, 0, LOG_TOLERANCE, 0}, +{569, 1282110851u, 1099923816u, 1099923816u, 0, LOG_TOLERANCE, 0}, +{570, 1329524465u, 1101994371u, 1101994371u, 0, LOG_TOLERANCE, 0}, +{571, 1144643646u, 1087606880u, 1087606880u, 0, LOG_TOLERANCE, 0}, +{572, 1123357102u, 1083825755u, 1083825755u, 0, LOG_TOLERANCE, 0}, +{573, 1106837025u, 1079773158u, 1079773158u, 0, LOG_TOLERANCE, 0}, +{574, 1253017688u, 1098451551u, 1098451551u, 0, LOG_TOLERANCE, 0}, +{575, 1108543194u, 1080470831u, 1080470831u, 0, LOG_TOLERANCE, 0}, +{576, 1160162706u, 1090285527u, 1090285527u, 0, LOG_TOLERANCE, 0}, +{577, 1158231377u, 1089877497u, 1089877497u, 0, LOG_TOLERANCE, 0}, +{578, 1266928623u, 1099256175u, 1099256175u, 0, LOG_TOLERANCE, 0}, +{579, 1290596379u, 1100290507u, 1100290507u, 0, LOG_TOLERANCE, 0}, +{580, 1197091103u, 1093591797u, 1093591797u, 0, LOG_TOLERANCE, 0}, +{581, 1152416724u, 1088951776u, 1088951776u, 0, LOG_TOLERANCE, 0}, +{582, 1218239308u, 1095426324u, 1095426324u, 0, LOG_TOLERANCE, 0}, +{583, 1115826919u, 1082498850u, 1082498850u, 0, LOG_TOLERANCE, 0}, +{584, 1142780964u, 1087258861u, 1087258861u, 0, LOG_TOLERANCE, 0}, +{585, 1074622936u, 1061880764u, 1061880764u, 0, LOG_TOLERANCE, 0}, +{586, 1278946388u, 1099803490u, 1099803490u, 0, LOG_TOLERANCE, 0}, +{587, 1098530298u, 1076886881u, 1076886881u, 0, LOG_TOLERANCE, 0}, +{588, 1085242388u, 1071240474u, 1071240474u, 0, LOG_TOLERANCE, 0}, +{589, 1297190916u, 1100589546u, 1100589546u, 0, LOG_TOLERANCE, 0}, +{590, 1277649137u, 1099744888u, 1099744888u, 0, LOG_TOLERANCE, 0}, +{591, 1096548368u, 1076346654u, 1076346654u, 0, LOG_TOLERANCE, 0}, +{592, 1096155623u, 1076230816u, 1076230816u, 0, LOG_TOLERANCE, 0}, +{593, 1091245957u, 1074423591u, 1074423591u, 0, LOG_TOLERANCE, 0}, +{594, 1169713169u, 1091235090u, 1091235090u, 0, LOG_TOLERANCE, 0}, +{595, 1227264862u, 1096216180u, 1096216180u, 0, LOG_TOLERANCE, 0}, +{596, 1198151302u, 1093666804u, 1093666804u, 0, LOG_TOLERANCE, 0}, +{597, 1249433635u, 1098090690u, 1098090690u, 0, LOG_TOLERANCE, 0}, +{598, 1169549089u, 1091220756u, 1091220756u, 0, LOG_TOLERANCE, 0}, +{599, 1200051436u, 1093817916u, 1093817916u, 0, LOG_TOLERANCE, 0}, +{600, 1306520561u, 1100987701u, 1100987701u, 0, LOG_TOLERANCE, 0}, +{601, 1314936356u, 1101352081u, 1101352081u, 0, LOG_TOLERANCE, 0}, +{602, 1327568571u, 1101905258u, 1101905258u, 0, LOG_TOLERANCE, 0}, +{603, 1245744060u, 1097821737u, 1097821737u, 0, LOG_TOLERANCE, 0}, +{604, 1201521756u, 1093978758u, 1093978758u, 0, LOG_TOLERANCE, 0}, +{605, 1262863321u, 1099105532u, 1099105532u, 0, LOG_TOLERANCE, 0}, +{606, 1240170043u, 1097306048u, 1097306048u, 0, LOG_TOLERANCE, 0}, +{607, 1338680611u, 1102388991u, 1102388991u, 0, LOG_TOLERANCE, 0}, +{608, 1112891928u, 1082033104u, 1082033104u, 0, LOG_TOLERANCE, 0}, +{609, 1190105283u, 1092963121u, 1092963121u, 0, LOG_TOLERANCE, 0}, +{610, 1263047389u, 1099112926u, 1099112926u, 0, LOG_TOLERANCE, 0}, +{611, 1066141167u, 1035459935u, 1035459935u, 0, LOG_TOLERANCE, 0}, +{612, 1120888322u, 1083475744u, 1083475744u, 0, LOG_TOLERANCE, 0}, +{613, 1315217243u, 1101362003u, 1101362003u, 0, LOG_TOLERANCE, 0}, +{614, 1168623062u, 1091135966u, 1091135966u, 0, LOG_TOLERANCE, 0}, +{615, 1311186097u, 1101197687u, 1101197687u, 0, LOG_TOLERANCE, 0}, +{616, 1180032668u, 1092117331u, 1092117331u, 0, LOG_TOLERANCE, 0}, +{617, 1134528351u, 1085832685u, 1085832685u, 0, LOG_TOLERANCE, 0}, +{618, 1266869190u, 1099252555u, 1099252555u, 0, LOG_TOLERANCE, 0}, +{619, 1133689539u, 1085657293u, 1085657293u, 0, LOG_TOLERANCE, 0}, +{620, 1308204830u, 1101044665u, 1101044665u, 0, LOG_TOLERANCE, 0}, +{621, 1137634874u, 1086378277u, 1086378277u, 0, LOG_TOLERANCE, 0}, +{622, 1268019014u, 1099318505u, 1099318505u, 0, LOG_TOLERANCE, 0}, +{623, 1066157309u, 1035695818u, 1035695818u, 0, LOG_TOLERANCE, 0}, +{624, 1288870027u, 1100228716u, 1100228716u, 0, LOG_TOLERANCE, 0}, +{625, 1125177888u, 1084176650u, 1084176650u, 0, LOG_TOLERANCE, 0}, +{626, 1170245333u, 1091280275u, 1091280275u, 0, LOG_TOLERANCE, 0}, +{627, 1219052056u, 1095506114u, 1095506114u, 0, LOG_TOLERANCE, 0}, +{628, 1171499971u, 1091379679u, 1091379679u, 0, LOG_TOLERANCE, 0}, +{629, 1224634973u, 1095933583u, 1095933583u, 0, LOG_TOLERANCE, 0}, +{630, 1299683827u, 1100676996u, 1100676996u, 0, LOG_TOLERANCE, 0}, +{631, 1109740374u, 1080962038u, 1080962038u, 0, LOG_TOLERANCE, 0}, +{632, 1229268598u, 1096392882u, 1096392882u, 0, LOG_TOLERANCE, 0}, +{633, 1086717248u, 1072252652u, 1072252652u, 0, LOG_TOLERANCE, 0}, +{634, 1287400959u, 1100169711u, 1100169711u, 0, LOG_TOLERANCE, 0}, +{635, 1317471958u, 1101449322u, 1101449322u, 0, LOG_TOLERANCE, 0}, +{636, 1242829722u, 1097546376u, 1097546376u, 0, LOG_TOLERANCE, 0}, +{637, 1200927971u, 1093916741u, 1093916741u, 0, LOG_TOLERANCE, 0}, +{638, 1179374444u, 1092066895u, 1092066895u, 0, LOG_TOLERANCE, 0}, +{639, 1246019790u, 1097844403u, 1097844403u, 0, LOG_TOLERANCE, 0}, +{640, 1136052740u, 1086118125u, 1086118125u, 0, LOG_TOLERANCE, 0}, +{641, 1069009211u, 1052325441u, 1052325441u, 0, LOG_TOLERANCE, 0}, +{642, 1169128344u, 1091183079u, 1091183079u, 0, LOG_TOLERANCE, 0}, +{643, 1087942795u, 1073009751u, 1073009751u, 0, LOG_TOLERANCE, 0}, +{644, 1278882065u, 1099800734u, 1099800734u, 0, LOG_TOLERANCE, 0}, +{645, 1147842784u, 1088095915u, 1088095915u, 0, LOG_TOLERANCE, 0}, +{646, 1171351660u, 1091368407u, 1091368407u, 0, LOG_TOLERANCE, 0}, +{647, 1136072069u, 1086121506u, 1086121506u, 0, LOG_TOLERANCE, 0}, +{648, 1233771772u, 1096744620u, 1096744620u, 0, LOG_TOLERANCE, 0}, +{649, 1241288445u, 1097379408u, 1097379408u, 0, LOG_TOLERANCE, 0}, +{650, 1319200415u, 1101542864u, 1101542864u, 0, LOG_TOLERANCE, 0}, +{651, 1279324488u, 1099819407u, 1099819407u, 0, LOG_TOLERANCE, 0}, +{652, 1070311776u, 1055771065u, 1055771065u, 0, LOG_TOLERANCE, 0}, +{653, 1307648109u, 1101026512u, 1101026512u, 0, LOG_TOLERANCE, 0}, +{654, 1246947517u, 1097917255u, 1097917255u, 0, LOG_TOLERANCE, 0}, +{655, 1249239929u, 1098078160u, 1098078160u, 0, LOG_TOLERANCE, 0}, +{656, 1286277377u, 1100119627u, 1100119627u, 0, LOG_TOLERANCE, 0}, +{657, 1173247961u, 1091504122u, 1091504122u, 0, LOG_TOLERANCE, 0}, +{658, 1101051030u, 1077936679u, 1077936679u, 0, LOG_TOLERANCE, 0}, +{659, 1082862511u, 1069295568u, 1069295568u, 0, LOG_TOLERANCE, 0}, +{660, 1341821683u, 1102500297u, 1102500297u, 0, LOG_TOLERANCE, 0}, +{661, 1079061705u, 1066899135u, 1066899135u, 0, LOG_TOLERANCE, 0}, +{662, 1105291533u, 1079355820u, 1079355820u, 0, LOG_TOLERANCE, 0}, +{663, 1223207358u, 1095839735u, 1095839735u, 0, LOG_TOLERANCE, 0}, +{664, 1156767169u, 1089621359u, 1089621359u, 0, LOG_TOLERANCE, 0}, +{665, 1104284039u, 1079059544u, 1079059544u, 0, LOG_TOLERANCE, 0}, +{666, 1187729253u, 1092791055u, 1092791055u, 0, LOG_TOLERANCE, 0}, +{667, 1093697541u, 1075422618u, 1075422618u, 0, LOG_TOLERANCE, 0}, +{668, 1119207537u, 1083198919u, 1083198919u, 0, LOG_TOLERANCE, 0}, +{669, 1094115255u, 1075571413u, 1075571413u, 0, LOG_TOLERANCE, 0}, +{670, 1276603160u, 1099692348u, 1099692348u, 0, LOG_TOLERANCE, 0}, +{671, 1206125125u, 1094364912u, 1094364912u, 0, LOG_TOLERANCE, 0}, +{672, 1098662266u, 1076920498u, 1076920498u, 0, LOG_TOLERANCE, 0}, +{673, 1328600211u, 1101954140u, 1101954140u, 0, LOG_TOLERANCE, 0}, +{674, 1317062968u, 1101424512u, 1101424512u, 0, LOG_TOLERANCE, 0}, +{675, 1296068481u, 1100544845u, 1100544845u, 0, LOG_TOLERANCE, 0}, +{676, 1287620154u, 1100178947u, 1100178947u, 0, LOG_TOLERANCE, 0}, +{677, 1245702957u, 1097818316u, 1097818316u, 0, LOG_TOLERANCE, 0}, +{678, 1268279353u, 1099332351u, 1099332351u, 0, LOG_TOLERANCE, 0}, +{679, 1135988313u, 1086106816u, 1086106816u, 0, LOG_TOLERANCE, 0}, +{680, 1163727179u, 1090698406u, 1090698406u, 0, LOG_TOLERANCE, 0}, +{681, 1198307901u, 1093677442u, 1093677442u, 0, LOG_TOLERANCE, 0}, +{682, 1288901567u, 1100229913u, 1100229913u, 0, LOG_TOLERANCE, 0}, +{683, 1113104661u, 1082096428u, 1082096428u, 0, LOG_TOLERANCE, 0}, +{684, 1136714348u, 1086230864u, 1086230864u, 0, LOG_TOLERANCE, 0}, +{685, 1339423444u, 1102417526u, 1102417526u, 0, LOG_TOLERANCE, 0}, +{686, 1162027071u, 1090567520u, 1090567520u, 0, LOG_TOLERANCE, 0}, +{687, 1124131769u, 1083931793u, 1083931793u, 0, LOG_TOLERANCE, 0}, +{688, 1177157787u, 1091876627u, 1091876627u, 0, LOG_TOLERANCE, 0}, +{689, 1284600904u, 1100034688u, 1100034688u, 0, LOG_TOLERANCE, 0}, +{690, 1309658335u, 1101118918u, 1101118918u, 0, LOG_TOLERANCE, 0}, +{691, 1226494979u, 1096139493u, 1096139493u, 0, LOG_TOLERANCE, 0}, +{692, 1228023365u, 1096286616u, 1096286616u, 0, LOG_TOLERANCE, 0}, +{693, 1313215353u, 1101286809u, 1101286809u, 0, LOG_TOLERANCE, 0}, +{694, 1320539530u, 1101605361u, 1101605361u, 0, LOG_TOLERANCE, 0}, +{695, 1204196034u, 1094219971u, 1094219971u, 0, LOG_TOLERANCE, 0}, +{696, 1312393763u, 1101252529u, 1101252529u, 0, LOG_TOLERANCE, 0}, +{697, 1161439847u, 1090517416u, 1090517416u, 0, LOG_TOLERANCE, 0}, +{698, 1084378658u, 1070585549u, 1070585549u, 0, LOG_TOLERANCE, 0}, +{699, 1226473697u, 1096137292u, 1096137292u, 0, LOG_TOLERANCE, 0}, +{700, 1123114742u, 1083793867u, 1083793867u, 0, LOG_TOLERANCE, 0}, +{701, 1258114435u, 1098836128u, 1098836128u, 0, LOG_TOLERANCE, 0}, +{702, 1320557197u, 1101606138u, 1101606138u, 0, LOG_TOLERANCE, 0}, +{703, 1178825761u, 1092022914u, 1092022914u, 0, LOG_TOLERANCE, 0}, +{704, 1075900364u, 1064046743u, 1064046743u, 0, LOG_TOLERANCE, 0}, +{705, 1297778779u, 1100611521u, 1100611521u, 0, LOG_TOLERANCE, 0}, +{706, 1125653081u, 1084279085u, 1084279085u, 0, LOG_TOLERANCE, 0}, +{707, 1190169064u, 1092967372u, 1092967372u, 0, LOG_TOLERANCE, 0}, +{708, 1184753508u, 1092526032u, 1092526032u, 0, LOG_TOLERANCE, 0}, +{709, 1188439315u, 1092845498u, 1092845498u, 0, LOG_TOLERANCE, 0}, +{710, 1314151417u, 1101323314u, 1101323314u, 0, LOG_TOLERANCE, 0}, +{711, 1188167943u, 1092825023u, 1092825023u, 0, LOG_TOLERANCE, 0}, +{712, 1142595790u, 1087220886u, 1087220886u, 0, LOG_TOLERANCE, 0}, +{713, 1203206679u, 1094137061u, 1094137061u, 0, LOG_TOLERANCE, 0}, +{714, 1102061604u, 1078320979u, 1078320979u, 0, LOG_TOLERANCE, 0}, +{715, 1282351521u, 1099931930u, 1099931930u, 0, LOG_TOLERANCE, 0}, +{716, 1311377417u, 1101206767u, 1101206767u, 0, LOG_TOLERANCE, 0}, +{717, 1081309682u, 1068172935u, 1068172935u, 0, LOG_TOLERANCE, 0}, +{718, 1274711085u, 1099592971u, 1099592971u, 0, LOG_TOLERANCE, 0}, +{719, 1261940623u, 1099066812u, 1099066812u, 0, LOG_TOLERANCE, 0}, +{720, 1253119433u, 1098460785u, 1098460785u, 0, LOG_TOLERANCE, 0}, +{721, 1219411812u, 1095539582u, 1095539582u, 0, LOG_TOLERANCE, 0}, +{722, 1149882378u, 1088433080u, 1088433080u, 0, LOG_TOLERANCE, 0}, +{723, 1218488455u, 1095451435u, 1095451435u, 0, LOG_TOLERANCE, 0}, +{724, 1283938137u, 1099996906u, 1099996906u, 0, LOG_TOLERANCE, 0}, +{725, 1317098613u, 1101426722u, 1101426722u, 0, LOG_TOLERANCE, 0}, +{726, 1284220009u, 1100013309u, 1100013309u, 0, LOG_TOLERANCE, 0}, +{727, 1092245127u, 1074859842u, 1074859842u, 0, LOG_TOLERANCE, 0}, +{728, 1165676440u, 1090830769u, 1090830769u, 0, LOG_TOLERANCE, 0}, +{729, 1284174954u, 1100010721u, 1100010721u, 0, LOG_TOLERANCE, 0}, +{730, 1102631663u, 1078523172u, 1078523172u, 0, LOG_TOLERANCE, 0}, +{731, 1125596740u, 1084267198u, 1084267198u, 0, LOG_TOLERANCE, 0}, +{732, 1172529774u, 1091454766u, 1091454766u, 0, LOG_TOLERANCE, 0}, +{733, 1306695905u, 1100993929u, 1100993929u, 0, LOG_TOLERANCE, 0}, +{734, 1078478376u, 1066534362u, 1066534362u, 0, LOG_TOLERANCE, 0}, +{735, 1165177679u, 1090798459u, 1090798459u, 0, LOG_TOLERANCE, 0}, +{736, 1255525865u, 1098658369u, 1098658369u, 0, LOG_TOLERANCE, 0}, +{737, 1222777442u, 1095809745u, 1095809745u, 0, LOG_TOLERANCE, 0}, +{738, 1325324763u, 1101782353u, 1101782353u, 0, LOG_TOLERANCE, 0}, +{739, 1216040565u, 1095193744u, 1095193744u, 0, LOG_TOLERANCE, 0}, +{740, 1158950321u, 1090038805u, 1090038805u, 0, LOG_TOLERANCE, 0}, +{741, 1208345407u, 1094533485u, 1094533485u, 0, LOG_TOLERANCE, 0}, +{742, 1258634105u, 1098889245u, 1098889245u, 0, LOG_TOLERANCE, 0}, +{743, 1248478509u, 1098027406u, 1098027406u, 0, LOG_TOLERANCE, 0}, +{744, 1153863988u, 1089199028u, 1089199028u, 0, LOG_TOLERANCE, 0}, +{745, 1235620969u, 1096939871u, 1096939871u, 0, LOG_TOLERANCE, 0}, +{746, 1097120930u, 1076509995u, 1076509995u, 0, LOG_TOLERANCE, 0}, +{747, 1322294974u, 1101677409u, 1101677409u, 0, LOG_TOLERANCE, 0}, +{748, 1147712200u, 1088078034u, 1088078034u, 0, LOG_TOLERANCE, 0}, +{749, 1124721745u, 1084073380u, 1084073380u, 0, LOG_TOLERANCE, 0}, +{750, 1114260656u, 1082277595u, 1082277595u, 0, LOG_TOLERANCE, 0}, +{751, 1155676504u, 1089472492u, 1089472492u, 0, LOG_TOLERANCE, 0}, +{752, 1315090496u, 1101357549u, 1101357549u, 0, LOG_TOLERANCE, 0}, +{753, 1082919539u, 1069347855u, 1069347855u, 0, LOG_TOLERANCE, 0}, +{754, 1335399673u, 1102240222u, 1102240222u, 0, LOG_TOLERANCE, 0}, +{755, 1072458508u, 1058870026u, 1058870026u, 0, LOG_TOLERANCE, 0}, +{756, 1155531601u, 1089451895u, 1089451895u, 0, LOG_TOLERANCE, 0}, +{757, 1104656093u, 1079171407u, 1079171407u, 0, LOG_TOLERANCE, 0}, +{758, 1321036318u, 1101626775u, 1101626775u, 0, LOG_TOLERANCE, 0}, +{759, 1172239631u, 1091434149u, 1091434149u, 0, LOG_TOLERANCE, 0}, +{760, 1107620519u, 1080048642u, 1080048642u, 0, LOG_TOLERANCE, 0}, +{761, 1155477903u, 1089444210u, 1089444210u, 0, LOG_TOLERANCE, 0}, +{762, 1126405528u, 1084431697u, 1084431697u, 0, LOG_TOLERANCE, 0}, +{763, 1090330020u, 1074027503u, 1074027503u, 0, LOG_TOLERANCE, 0}, +{764, 1228207362u, 1096303012u, 1096303012u, 0, LOG_TOLERANCE, 0}, +{765, 1290175785u, 1100276110u, 1100276110u, 0, LOG_TOLERANCE, 0}, +{766, 1214223128u, 1095071136u, 1095071136u, 0, LOG_TOLERANCE, 0}, +{767, 1275438936u, 1099626919u, 1099626919u, 0, LOG_TOLERANCE, 0}, +{768, 1315857601u, 1101383945u, 1101383945u, 0, LOG_TOLERANCE, 0}, +{769, 1305742382u, 1100959135u, 1100959135u, 0, LOG_TOLERANCE, 0}, +{770, 1078359574u, 1066458087u, 1066458087u, 0, LOG_TOLERANCE, 0}, +{771, 1207675424u, 1094468419u, 1094468419u, 0, LOG_TOLERANCE, 0}, +{772, 1248421894u, 1098023532u, 1098023532u, 0, LOG_TOLERANCE, 0}, +{773, 1205768346u, 1094339572u, 1094339572u, 0, LOG_TOLERANCE, 0}, +{774, 1076752219u, 1065349836u, 1065349836u, 0, LOG_TOLERANCE, 0}, +{775, 1241048294u, 1097364082u, 1097364082u, 0, LOG_TOLERANCE, 0}, +{776, 1273395082u, 1099549172u, 1099549172u, 0, LOG_TOLERANCE, 0}, +{777, 1238104535u, 1097155389u, 1097155389u, 0, LOG_TOLERANCE, 0}, +{778, 1294321000u, 1100466645u, 1100466645u, 0, LOG_TOLERANCE, 0}, +{779, 1245343769u, 1097787935u, 1097787935u, 0, LOG_TOLERANCE, 0}, +{780, 1161241793u, 1090483093u, 1090483093u, 0, LOG_TOLERANCE, 0}, +{781, 1171318485u, 1091365870u, 1091365870u, 0, LOG_TOLERANCE, 0}, +{782, 1243968857u, 1097662758u, 1097662758u, 0, LOG_TOLERANCE, 0}, +{783, 1102119721u, 1078342044u, 1078342044u, 0, LOG_TOLERANCE, 0}, +{784, 1220264047u, 1095614846u, 1095614846u, 0, LOG_TOLERANCE, 0}, +{785, 1134728775u, 1085872507u, 1085872507u, 0, LOG_TOLERANCE, 0}, +{786, 1204809672u, 1094268284u, 1094268284u, 0, LOG_TOLERANCE, 0}, +{787, 1148874793u, 1088232109u, 1088232109u, 0, LOG_TOLERANCE, 0}, +{788, 1197828352u, 1093644519u, 1093644519u, 0, LOG_TOLERANCE, 0}, +{789, 1193026723u, 1093241091u, 1093241091u, 0, LOG_TOLERANCE, 0}, +{790, 1127109339u, 1084565044u, 1084565044u, 0, LOG_TOLERANCE, 0}, +{791, 1200599955u, 1093880840u, 1093880840u, 0, LOG_TOLERANCE, 0}, +{792, 1089700228u, 1073865159u, 1073865159u, 0, LOG_TOLERANCE, 0}, +{793, 1333109014u, 1102126438u, 1102126438u, 0, LOG_TOLERANCE, 0}, +{794, 1155775526u, 1089486453u, 1089486453u, 0, LOG_TOLERANCE, 0}, +{795, 1234491880u, 1096825030u, 1096825030u, 0, LOG_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_LOG_H multiple inclusion protection + +// EOF log.h diff --git a/packages/language/c/libm/current/tests/vectors/modff.c b/packages/language/c/libm/current/tests/vectors/modff.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/modff.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// modff.c +// +// Test of modff() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/modff.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(modff_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &modff, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT_P, CYG_LIBM_TEST_VEC_FLOAT, + &modff_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("modff() is stable"); + } // if + else + { + CYG_TEST_FAIL("modff() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library modff() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "modff() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF modff.c diff --git a/packages/language/c/libm/current/tests/vectors/modff.h b/packages/language/c/libm/current/tests/vectors/modff.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/modff.h @@ -0,0 +1,777 @@ +#ifndef CYGONCE_LIBM_MODFF_H +#define CYGONCE_LIBM_MODFF_H +//=========================================================================== +// +// modff.h +// +// Test vectors for testing of modff() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/modff.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define MODFF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t modff_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 1107800421u, 1107558400u, 1064065344u, 0, MODFF_TOLERANCE, 0}, +{1, 1203999711u, 1203999616u, 1061027840u, 0, MODFF_TOLERANCE, 0}, +{2, 896005582u, 0u, 896005582u, 0, MODFF_TOLERANCE, 0}, +{3, 3368700125u, 3368700096u, 3211264000u, 0, MODFF_TOLERANCE, 0}, +{4, 3308232444u, 3308228608u, 3211771904u, 0, MODFF_TOLERANCE, 0}, +{5, 1224242132u, 1224242112u, 1059061760u, 0, MODFF_TOLERANCE, 0}, +{6, 3221027117u, 3212836864u, 3212440154u, 0, MODFF_TOLERANCE, 0}, +{7, 1284201705u, 1284201705u, 0u, 0, MODFF_TOLERANCE, 0}, +{8, 1198712763u, 1198712576u, 1060831232u, 0, MODFF_TOLERANCE, 0}, +{9, 919636942u, 0u, 919636942u, 0, MODFF_TOLERANCE, 0}, +{10, 954173073u, 0u, 954173073u, 0, MODFF_TOLERANCE, 0}, +{11, 1035260608u, 0u, 1035260608u, 0, MODFF_TOLERANCE, 0}, +{12, 966554515u, 0u, 966554515u, 0, MODFF_TOLERANCE, 0}, +{13, 3234538174u, 3233808384u, 3199347680u, 0, MODFF_TOLERANCE, 0}, +{14, 1312607135u, 1312607135u, 0u, 0, MODFF_TOLERANCE, 0}, +{15, 1194999402u, 1194999296u, 1054081024u, 0, MODFF_TOLERANCE, 0}, +{16, 1166191415u, 1166190592u, 1053671424u, 0, MODFF_TOLERANCE, 0}, +{17, 1018661564u, 0u, 1018661564u, 0, MODFF_TOLERANCE, 0}, +{18, 1130472166u, 1130430464u, 1059251712u, 0, MODFF_TOLERANCE, 0}, +{19, 1234419246u, 1234419240u, 1061158912u, 0, MODFF_TOLERANCE, 0}, +{20, 1302107128u, 1302107128u, 0u, 0, MODFF_TOLERANCE, 0}, +{21, 3370647675u, 3370647648u, 3210215424u, 0, MODFF_TOLERANCE, 0}, +{22, 1052801068u, 0u, 1052801068u, 0, MODFF_TOLERANCE, 0}, +{23, 1060849628u, 0u, 1060849628u, 0, MODFF_TOLERANCE, 0}, +{24, 3446630737u, 3446630737u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{25, 3484320003u, 3484320003u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{26, 3305392896u, 3305390080u, 3207593984u, 0, MODFF_TOLERANCE, 0}, +{27, 882596369u, 0u, 882596369u, 0, MODFF_TOLERANCE, 0}, +{28, 1256676590u, 1256676590u, 0u, 0, MODFF_TOLERANCE, 0}, +{29, 1167223673u, 1167222784u, 1054752768u, 0, MODFF_TOLERANCE, 0}, +{30, 968192794u, 0u, 968192794u, 0, MODFF_TOLERANCE, 0}, +{31, 878547432u, 0u, 878547432u, 0, MODFF_TOLERANCE, 0}, +{32, 1111584337u, 1111490560u, 1052190848u, 0, MODFF_TOLERANCE, 0}, +{33, 1052361612u, 0u, 1052361612u, 0, MODFF_TOLERANCE, 0}, +{34, 1280025214u, 1280025214u, 0u, 0, MODFF_TOLERANCE, 0}, +{35, 906701409u, 0u, 906701409u, 0, MODFF_TOLERANCE, 0}, +{36, 3471653172u, 3471653172u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{37, 1154138102u, 1154129920u, 1065332736u, 0, MODFF_TOLERANCE, 0}, +{38, 3231467496u, 3229614080u, 3210886976u, 0, MODFF_TOLERANCE, 0}, +{39, 934336592u, 0u, 934336592u, 0, MODFF_TOLERANCE, 0}, +{40, 1341514497u, 1341514497u, 0u, 0, MODFF_TOLERANCE, 0}, +{41, 3466051188u, 3466051188u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{42, 1272351391u, 1272351391u, 0u, 0, MODFF_TOLERANCE, 0}, +{43, 3373485062u, 3373485056u, 3200253952u, 0, MODFF_TOLERANCE, 0}, +{44, 3319724992u, 3319724032u, 3203399680u, 0, MODFF_TOLERANCE, 0}, +{45, 3354615790u, 3354615680u, 3210477568u, 0, MODFF_TOLERANCE, 0}, +{46, 3266377514u, 3266314240u, 3203869184u, 0, MODFF_TOLERANCE, 0}, +{47, 917622040u, 0u, 917622040u, 0, MODFF_TOLERANCE, 0}, +{48, 1334966485u, 1334966485u, 0u, 0, MODFF_TOLERANCE, 0}, +{49, 940236348u, 0u, 940236348u, 0, MODFF_TOLERANCE, 0}, +{50, 3304072663u, 3304071168u, 3191529472u, 0, MODFF_TOLERANCE, 0}, +{51, 977028681u, 0u, 977028681u, 0, MODFF_TOLERANCE, 0}, +{52, 3251541546u, 3251109888u, 3209872704u, 0, MODFF_TOLERANCE, 0}, +{53, 3355962282u, 3355962240u, 3207069696u, 0, MODFF_TOLERANCE, 0}, +{54, 3371863479u, 3371863456u, 3208118272u, 0, MODFF_TOLERANCE, 0}, +{55, 1014861921u, 0u, 1014861921u, 0, MODFF_TOLERANCE, 0}, +{56, 966573255u, 0u, 966573255u, 0, MODFF_TOLERANCE, 0}, +{57, 1306460502u, 1306460502u, 0u, 0, MODFF_TOLERANCE, 0}, +{58, 903489435u, 0u, 903489435u, 0, MODFF_TOLERANCE, 0}, +{59, 1197542187u, 1197542144u, 1043070976u, 0, MODFF_TOLERANCE, 0}, +{60, 922888249u, 0u, 922888249u, 0, MODFF_TOLERANCE, 0}, +{61, 1139392309u, 1139376128u, 1056756736u, 0, MODFF_TOLERANCE, 0}, +{62, 1184239996u, 1184239616u, 1061027840u, 0, MODFF_TOLERANCE, 0}, +{63, 3224098462u, 3221225472u, 3207551608u, 0, MODFF_TOLERANCE, 0}, +{64, 1252490238u, 1252490238u, 0u, 0, MODFF_TOLERANCE, 0}, +{65, 1173619825u, 1173618688u, 1057890304u, 0, MODFF_TOLERANCE, 0}, +{66, 1001673627u, 0u, 1001673627u, 0, MODFF_TOLERANCE, 0}, +{67, 3462631271u, 3462631271u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{68, 976098044u, 0u, 976098044u, 0, MODFF_TOLERANCE, 0}, +{69, 1151967422u, 1151967232u, 1019084800u, 0, MODFF_TOLERANCE, 0}, +{70, 941796645u, 0u, 941796645u, 0, MODFF_TOLERANCE, 0}, +{71, 886451963u, 0u, 886451963u, 0, MODFF_TOLERANCE, 0}, +{72, 1103058486u, 1102577664u, 1063962304u, 0, MODFF_TOLERANCE, 0}, +{73, 3217259624u, 3212836864u, 3204905168u, 0, MODFF_TOLERANCE, 0}, +{74, 3287199470u, 3287187456u, 3199973376u, 0, MODFF_TOLERANCE, 0}, +{75, 893184329u, 0u, 893184329u, 0, MODFF_TOLERANCE, 0}, +{76, 1243067084u, 1243067084u, 0u, 0, MODFF_TOLERANCE, 0}, +{77, 1143233714u, 1143226368u, 1055232000u, 0, MODFF_TOLERANCE, 0}, +{78, 1007268238u, 0u, 1007268238u, 0, MODFF_TOLERANCE, 0}, +{79, 1139941253u, 1139933184u, 1048324096u, 0, MODFF_TOLERANCE, 0}, +{80, 1147688821u, 1147682816u, 1052485632u, 0, MODFF_TOLERANCE, 0}, +{81, 3234638157u, 3233808384u, 3200947408u, 0, MODFF_TOLERANCE, 0}, +{82, 3449209899u, 3449209899u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{83, 3240298487u, 3240099840u, 3191995840u, 0, MODFF_TOLERANCE, 0}, +{84, 1020260821u, 0u, 1020260821u, 0, MODFF_TOLERANCE, 0}, +{85, 1288902137u, 1288902137u, 0u, 0, MODFF_TOLERANCE, 0}, +{86, 1333134799u, 1333134799u, 0u, 0, MODFF_TOLERANCE, 0}, +{87, 1338107877u, 1338107877u, 0u, 0, MODFF_TOLERANCE, 0}, +{88, 1187847971u, 1187847680u, 1058111488u, 0, MODFF_TOLERANCE, 0}, +{89, 1317663644u, 1317663644u, 0u, 0, MODFF_TOLERANCE, 0}, +{90, 1038851706u, 0u, 1038851706u, 0, MODFF_TOLERANCE, 0}, +{91, 1327544110u, 1327544110u, 0u, 0, MODFF_TOLERANCE, 0}, +{92, 3329354473u, 3329353728u, 3208265728u, 0, MODFF_TOLERANCE, 0}, +{93, 1308397879u, 1308397879u, 0u, 0, MODFF_TOLERANCE, 0}, +{94, 1309289088u, 1309289088u, 0u, 0, MODFF_TOLERANCE, 0}, +{95, 1019883016u, 0u, 1019883016u, 0, MODFF_TOLERANCE, 0}, +{96, 1294782875u, 1294782875u, 0u, 0, MODFF_TOLERANCE, 0}, +{97, 3444653659u, 3444653659u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{98, 1279248024u, 1279248024u, 0u, 0, MODFF_TOLERANCE, 0}, +{99, 3405585402u, 3405585402u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{100, 1106778573u, 1106771968u, 1011771392u, 0, MODFF_TOLERANCE, 0}, +{101, 3304487767u, 3304480768u, 3210393600u, 0, MODFF_TOLERANCE, 0}, +{102, 1140567947u, 1140555776u, 1052650496u, 0, MODFF_TOLERANCE, 0}, +{103, 1238569473u, 1238569472u, 1040187392u, 0, MODFF_TOLERANCE, 0}, +{104, 873035665u, 0u, 873035665u, 0, MODFF_TOLERANCE, 0}, +{105, 3223983207u, 3221225472u, 3207090588u, 0, MODFF_TOLERANCE, 0}, +{106, 1276671061u, 1276671061u, 0u, 0, MODFF_TOLERANCE, 0}, +{107, 1261071232u, 1261071232u, 0u, 0, MODFF_TOLERANCE, 0}, +{108, 1182202773u, 1182201856u, 1063600128u, 0, MODFF_TOLERANCE, 0}, +{109, 1175011025u, 1175010304u, 1060388864u, 0, MODFF_TOLERANCE, 0}, +{110, 1082692850u, 1082130432u, 1049186080u, 0, MODFF_TOLERANCE, 0}, +{111, 1211581107u, 1211581056u, 1061945344u, 0, MODFF_TOLERANCE, 0}, +{112, 974547519u, 0u, 974547519u, 0, MODFF_TOLERANCE, 0}, +{113, 3475164509u, 3475164509u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{114, 1071134451u, 1065353216u, 1060138470u, 0, MODFF_TOLERANCE, 0}, +{115, 3403348556u, 3403348556u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{116, 3373011130u, 3373011120u, 3206545408u, 0, MODFF_TOLERANCE, 0}, +{117, 3460764044u, 3460764044u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{118, 1136411063u, 1136394240u, 1057189376u, 0, MODFF_TOLERANCE, 0}, +{119, 1118097422u, 1118044160u, 1053822464u, 0, MODFF_TOLERANCE, 0}, +{120, 3239231622u, 3239051264u, 3190825344u, 0, MODFF_TOLERANCE, 0}, +{121, 3302723069u, 3302719488u, 3202338816u, 0, MODFF_TOLERANCE, 0}, +{122, 3340615780u, 3340615680u, 3200778240u, 0, MODFF_TOLERANCE, 0}, +{123, 998567360u, 0u, 998567360u, 0, MODFF_TOLERANCE, 0}, +{124, 3417964312u, 3417964312u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{125, 1321337529u, 1321337529u, 0u, 0, MODFF_TOLERANCE, 0}, +{126, 1143864063u, 1143848960u, 1064041472u, 0, MODFF_TOLERANCE, 0}, +{127, 1148867223u, 1148862464u, 1049933824u, 0, MODFF_TOLERANCE, 0}, +{128, 1256486202u, 1256486202u, 0u, 0, MODFF_TOLERANCE, 0}, +{129, 1314196594u, 1314196594u, 0u, 0, MODFF_TOLERANCE, 0}, +{130, 989687421u, 0u, 989687421u, 0, MODFF_TOLERANCE, 0}, +{131, 3372681320u, 3372681312u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{132, 1152956913u, 1152950272u, 1062176768u, 0, MODFF_TOLERANCE, 0}, +{133, 892922651u, 0u, 892922651u, 0, MODFF_TOLERANCE, 0}, +{134, 3373029087u, 3373029072u, 3211788288u, 0, MODFF_TOLERANCE, 0}, +{135, 1109627625u, 1109393408u, 1063565888u, 0, MODFF_TOLERANCE, 0}, +{136, 1314158257u, 1314158257u, 0u, 0, MODFF_TOLERANCE, 0}, +{137, 1307091856u, 1307091856u, 0u, 0, MODFF_TOLERANCE, 0}, +{138, 1103202538u, 1103101952u, 1044673792u, 0, MODFF_TOLERANCE, 0}, +{139, 1077234132u, 1073741824u, 1062545232u, 0, MODFF_TOLERANCE, 0}, +{140, 3272167130u, 3272146944u, 3198006272u, 0, MODFF_TOLERANCE, 0}, +{141, 1142167709u, 1142161408u, 1053091840u, 0, MODFF_TOLERANCE, 0}, +{142, 1096445242u, 1095761920u, 1059509152u, 0, MODFF_TOLERANCE, 0}, +{143, 3426232834u, 3426232834u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{144, 1036705270u, 0u, 1036705270u, 0, MODFF_TOLERANCE, 0}, +{145, 3368566779u, 3368566752u, 3210215424u, 0, MODFF_TOLERANCE, 0}, +{146, 967249167u, 0u, 967249167u, 0, MODFF_TOLERANCE, 0}, +{147, 3349013503u, 3349013376u, 3212705792u, 0, MODFF_TOLERANCE, 0}, +{148, 1138741813u, 1138720768u, 1059351040u, 0, MODFF_TOLERANCE, 0}, +{149, 982950501u, 0u, 982950501u, 0, MODFF_TOLERANCE, 0}, +{150, 982549888u, 0u, 982549888u, 0, MODFF_TOLERANCE, 0}, +{151, 1142981585u, 1142980608u, 1031028736u, 0, MODFF_TOLERANCE, 0}, +{152, 1015602236u, 0u, 1015602236u, 0, MODFF_TOLERANCE, 0}, +{153, 3365560001u, 3365560000u, 3170893824u, 0, MODFF_TOLERANCE, 0}, +{154, 3347165962u, 3347165952u, 3181379584u, 0, MODFF_TOLERANCE, 0}, +{155, 1009535440u, 0u, 1009535440u, 0, MODFF_TOLERANCE, 0}, +{156, 3381353228u, 3381353224u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{157, 3402950505u, 3402950504u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{158, 1077903063u, 1073741824u, 1065220956u, 0, MODFF_TOLERANCE, 0}, +{159, 3473956030u, 3473956030u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{160, 976891930u, 0u, 976891930u, 0, MODFF_TOLERANCE, 0}, +{161, 3349098349u, 3349098240u, 3210346496u, 0, MODFF_TOLERANCE, 0}, +{162, 1055327704u, 0u, 1055327704u, 0, MODFF_TOLERANCE, 0}, +{163, 1060398533u, 0u, 1060398533u, 0, MODFF_TOLERANCE, 0}, +{164, 945568720u, 0u, 945568720u, 0, MODFF_TOLERANCE, 0}, +{165, 3313485084u, 3313483776u, 3198386176u, 0, MODFF_TOLERANCE, 0}, +{166, 3345489836u, 3345489664u, 3207331840u, 0, MODFF_TOLERANCE, 0}, +{167, 1108392401u, 1108344832u, 1043976448u, 0, MODFF_TOLERANCE, 0}, +{168, 940893161u, 0u, 940893161u, 0, MODFF_TOLERANCE, 0}, +{169, 1137000140u, 1136984064u, 1056649216u, 0, MODFF_TOLERANCE, 0}, +{170, 976791751u, 0u, 976791751u, 0, MODFF_TOLERANCE, 0}, +{171, 3230678102u, 3229614080u, 3204571824u, 0, MODFF_TOLERANCE, 0}, +{172, 1324802687u, 1324802687u, 0u, 0, MODFF_TOLERANCE, 0}, +{173, 1004442355u, 0u, 1004442355u, 0, MODFF_TOLERANCE, 0}, +{174, 1108485380u, 1108344832u, 1057571072u, 0, MODFF_TOLERANCE, 0}, +{175, 1061834641u, 0u, 1061834641u, 0, MODFF_TOLERANCE, 0}, +{176, 972388096u, 0u, 972388096u, 0, MODFF_TOLERANCE, 0}, +{177, 3381268392u, 3381268392u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{178, 1146976802u, 1146961920u, 1063815168u, 0, MODFF_TOLERANCE, 0}, +{179, 1087189715u, 1086324736u, 1054027056u, 0, MODFF_TOLERANCE, 0}, +{180, 3212952285u, 3212836864u, 3160501888u, 0, MODFF_TOLERANCE, 0}, +{181, 3329407365u, 3329406976u, 3200417792u, 0, MODFF_TOLERANCE, 0}, +{182, 1000611335u, 0u, 1000611335u, 0, MODFF_TOLERANCE, 0}, +{183, 1227905777u, 1227905776u, 1031798784u, 0, MODFF_TOLERANCE, 0}, +{184, 3466188568u, 3466188568u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{185, 1041678304u, 0u, 1041678304u, 0, MODFF_TOLERANCE, 0}, +{186, 3319315516u, 3319314432u, 3204939776u, 0, MODFF_TOLERANCE, 0}, +{187, 3422089012u, 3422089012u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{188, 935938416u, 0u, 935938416u, 0, MODFF_TOLERANCE, 0}, +{189, 1146676692u, 1146667008u, 1058492416u, 0, MODFF_TOLERANCE, 0}, +{190, 1152633030u, 1152630784u, 1049387008u, 0, MODFF_TOLERANCE, 0}, +{191, 1315030230u, 1315030230u, 0u, 0, MODFF_TOLERANCE, 0}, +{192, 3336225884u, 3336225792u, 3191341056u, 0, MODFF_TOLERANCE, 0}, +{193, 898402905u, 0u, 898402905u, 0, MODFF_TOLERANCE, 0}, +{194, 1134593658u, 1134592000u, 1028603904u, 0, MODFF_TOLERANCE, 0}, +{195, 3456812581u, 3456812581u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{196, 977281449u, 0u, 977281449u, 0, MODFF_TOLERANCE, 0}, +{197, 879922831u, 0u, 879922831u, 0, MODFF_TOLERANCE, 0}, +{198, 1086198791u, 1084227584u, 1064345656u, 0, MODFF_TOLERANCE, 0}, +{199, 920125958u, 0u, 920125958u, 0, MODFF_TOLERANCE, 0}, +{200, 1255152035u, 1255152034u, 1056964608u, 0, MODFF_TOLERANCE, 0}, +{201, 1135271264u, 1135247360u, 1060814848u, 0, MODFF_TOLERANCE, 0}, +{202, 3284878412u, 3284860928u, 3205011456u, 0, MODFF_TOLERANCE, 0}, +{203, 1094190727u, 1093664768u, 1056991344u, 0, MODFF_TOLERANCE, 0}, +{204, 1056854532u, 0u, 1056854532u, 0, MODFF_TOLERANCE, 0}, +{205, 1294665325u, 1294665325u, 0u, 0, MODFF_TOLERANCE, 0}, +{206, 991185677u, 0u, 991185677u, 0, MODFF_TOLERANCE, 0}, +{207, 1036608591u, 0u, 1036608591u, 0, MODFF_TOLERANCE, 0}, +{208, 1296239160u, 1296239160u, 0u, 0, MODFF_TOLERANCE, 0}, +{209, 3229998064u, 3229614080u, 3191569920u, 0, MODFF_TOLERANCE, 0}, +{210, 3439134022u, 3439134022u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{211, 1043829691u, 0u, 1043829691u, 0, MODFF_TOLERANCE, 0}, +{212, 1317170485u, 1317170485u, 0u, 0, MODFF_TOLERANCE, 0}, +{213, 1325668223u, 1325668223u, 0u, 0, MODFF_TOLERANCE, 0}, +{214, 970681762u, 0u, 970681762u, 0, MODFF_TOLERANCE, 0}, +{215, 1092037607u, 1091567616u, 1055227104u, 0, MODFF_TOLERANCE, 0}, +{216, 1027330835u, 0u, 1027330835u, 0, MODFF_TOLERANCE, 0}, +{217, 3343511749u, 3343511552u, 3208970240u, 0, MODFF_TOLERANCE, 0}, +{218, 3316278408u, 3316277248u, 3205562368u, 0, MODFF_TOLERANCE, 0}, +{219, 3455589207u, 3455589207u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{220, 3295436768u, 3295428608u, 3204382720u, 0, MODFF_TOLERANCE, 0}, +{221, 1151984049u, 1151983616u, 1029210112u, 0, MODFF_TOLERANCE, 0}, +{222, 1129287043u, 1129250816u, 1057850112u, 0, MODFF_TOLERANCE, 0}, +{223, 1243664530u, 1243664528u, 1056964608u, 0, MODFF_TOLERANCE, 0}, +{224, 972879810u, 0u, 972879810u, 0, MODFF_TOLERANCE, 0}, +{225, 950829092u, 0u, 950829092u, 0, MODFF_TOLERANCE, 0}, +{226, 929114193u, 0u, 929114193u, 0, MODFF_TOLERANCE, 0}, +{227, 1115471979u, 1115422720u, 1044409088u, 0, MODFF_TOLERANCE, 0}, +{228, 3351092088u, 3351091968u, 3211788288u, 0, MODFF_TOLERANCE, 0}, +{229, 3424479544u, 3424479544u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{230, 3312047722u, 3312046080u, 3201122304u, 0, MODFF_TOLERANCE, 0}, +{231, 3241193975u, 3241148416u, 3174168320u, 0, MODFF_TOLERANCE, 0}, +{232, 884465785u, 0u, 884465785u, 0, MODFF_TOLERANCE, 0}, +{233, 3478509398u, 3478509398u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{234, 1030934236u, 0u, 1030934236u, 0, MODFF_TOLERANCE, 0}, +{235, 1045139240u, 0u, 1045139240u, 0, MODFF_TOLERANCE, 0}, +{236, 3408392958u, 3408392958u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{237, 1025254314u, 0u, 1025254314u, 0, MODFF_TOLERANCE, 0}, +{238, 1110545760u, 1110441984u, 1053470720u, 0, MODFF_TOLERANCE, 0}, +{239, 3240144177u, 3240099840u, 3173855488u, 0, MODFF_TOLERANCE, 0}, +{240, 1091496527u, 1090519040u, 1064215792u, 0, MODFF_TOLERANCE, 0}, +{241, 1108793820u, 1108606976u, 1060534016u, 0, MODFF_TOLERANCE, 0}, +{242, 3361976590u, 3361976576u, 3193962496u, 0, MODFF_TOLERANCE, 0}, +{243, 881280146u, 0u, 881280146u, 0, MODFF_TOLERANCE, 0}, +{244, 3421884736u, 3421884736u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{245, 1304154705u, 1304154705u, 0u, 0, MODFF_TOLERANCE, 0}, +{246, 3264443610u, 3264348160u, 3208277248u, 0, MODFF_TOLERANCE, 0}, +{247, 3222916705u, 3221225472u, 3201200904u, 0, MODFF_TOLERANCE, 0}, +{248, 3374550627u, 3374550624u, 3191865344u, 0, MODFF_TOLERANCE, 0}, +{249, 3365394784u, 3365394784u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{250, 899599265u, 0u, 899599265u, 0, MODFF_TOLERANCE, 0}, +{251, 3240118211u, 3240099840u, 3163522560u, 0, MODFF_TOLERANCE, 0}, +{252, 3452685905u, 3452685905u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{253, 1268194719u, 1268194719u, 0u, 0, MODFF_TOLERANCE, 0}, +{254, 1332489410u, 1332489410u, 0u, 0, MODFF_TOLERANCE, 0}, +{255, 1133420220u, 1133412352u, 1047912448u, 0, MODFF_TOLERANCE, 0}, +{256, 1245770860u, 1245770860u, 0u, 0, MODFF_TOLERANCE, 0}, +{257, 1161858787u, 1161854976u, 1064185856u, 0, MODFF_TOLERANCE, 0}, +{258, 1263529646u, 1263529646u, 0u, 0, MODFF_TOLERANCE, 0}, +{259, 3295996963u, 3295985664u, 3207629824u, 0, MODFF_TOLERANCE, 0}, +{260, 3453334307u, 3453334307u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{261, 1270887389u, 1270887389u, 0u, 0, MODFF_TOLERANCE, 0}, +{262, 1156123987u, 1156120576u, 1054158848u, 0, MODFF_TOLERANCE, 0}, +{263, 3325193181u, 3325192192u, 3212263424u, 0, MODFF_TOLERANCE, 0}, +{264, 993979179u, 0u, 993979179u, 0, MODFF_TOLERANCE, 0}, +{265, 925657343u, 0u, 925657343u, 0, MODFF_TOLERANCE, 0}, +{266, 1315159742u, 1315159742u, 0u, 0, MODFF_TOLERANCE, 0}, +{267, 3224327456u, 3221225472u, 3208467584u, 0, MODFF_TOLERANCE, 0}, +{268, 1189120494u, 1189120000u, 1064763392u, 0, MODFF_TOLERANCE, 0}, +{269, 978961471u, 0u, 978961471u, 0, MODFF_TOLERANCE, 0}, +{270, 889030794u, 0u, 889030794u, 0, MODFF_TOLERANCE, 0}, +{271, 1323529208u, 1323529208u, 0u, 0, MODFF_TOLERANCE, 0}, +{272, 940445933u, 0u, 940445933u, 0, MODFF_TOLERANCE, 0}, +{273, 3465768388u, 3465768388u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{274, 3426099899u, 3426099899u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{275, 1118756120u, 1118699520u, 1054676992u, 0, MODFF_TOLERANCE, 0}, +{276, 3224857113u, 3221225472u, 3210586212u, 0, MODFF_TOLERANCE, 0}, +{277, 3398166843u, 3398166842u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{278, 1065798296u, 1065353216u, 1029264128u, 0, MODFF_TOLERANCE, 0}, +{279, 3328989444u, 3328989184u, 3196190720u, 0, MODFF_TOLERANCE, 0}, +{280, 3357819026u, 3357819008u, 3197108224u, 0, MODFF_TOLERANCE, 0}, +{281, 1273397670u, 1273397670u, 0u, 0, MODFF_TOLERANCE, 0}, +{282, 901308750u, 0u, 901308750u, 0, MODFF_TOLERANCE, 0}, +{283, 3424831780u, 3424831780u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{284, 1304806106u, 1304806106u, 0u, 0, MODFF_TOLERANCE, 0}, +{285, 1257596246u, 1257596246u, 0u, 0, MODFF_TOLERANCE, 0}, +{286, 3420832544u, 3420832544u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{287, 1051773536u, 0u, 1051773536u, 0, MODFF_TOLERANCE, 0}, +{288, 896271348u, 0u, 896271348u, 0, MODFF_TOLERANCE, 0}, +{289, 3294752507u, 3294740480u, 3208375296u, 0, MODFF_TOLERANCE, 0}, +{290, 3424848725u, 3424848725u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{291, 1090870906u, 1090519040u, 1051447104u, 0, MODFF_TOLERANCE, 0}, +{292, 3294742905u, 3294740480u, 3189215232u, 0, MODFF_TOLERANCE, 0}, +{293, 1227582289u, 1227582288u, 1031798784u, 0, MODFF_TOLERANCE, 0}, +{294, 1208979668u, 1208979648u, 1050673152u, 0, MODFF_TOLERANCE, 0}, +{295, 1272325814u, 1272325814u, 0u, 0, MODFF_TOLERANCE, 0}, +{296, 3359508271u, 3359508224u, 3208380416u, 0, MODFF_TOLERANCE, 0}, +{297, 1137854355u, 1137836032u, 1057957376u, 0, MODFF_TOLERANCE, 0}, +{298, 3335041917u, 3335041536u, 3208544256u, 0, MODFF_TOLERANCE, 0}, +{299, 3440773058u, 3440773058u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{300, 3451216836u, 3451216836u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{301, 3347783723u, 3347783680u, 3198943232u, 0, MODFF_TOLERANCE, 0}, +{302, 3437062994u, 3437062994u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{303, 1131196082u, 1131151360u, 1060024832u, 0, MODFF_TOLERANCE, 0}, +{304, 1164573183u, 1164570624u, 1059057664u, 0, MODFF_TOLERANCE, 0}, +{305, 1282436638u, 1282436638u, 0u, 0, MODFF_TOLERANCE, 0}, +{306, 3258097678u, 3257925632u, 3207070592u, 0, MODFF_TOLERANCE, 0}, +{307, 1305882290u, 1305882290u, 0u, 0, MODFF_TOLERANCE, 0}, +{308, 3460915348u, 3460915348u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{309, 1219372260u, 1219372256u, 1040187392u, 0, MODFF_TOLERANCE, 0}, +{310, 1256074626u, 1256074626u, 0u, 0, MODFF_TOLERANCE, 0}, +{311, 3303035472u, 3303030784u, 3205660672u, 0, MODFF_TOLERANCE, 0}, +{312, 1053698677u, 0u, 1053698677u, 0, MODFF_TOLERANCE, 0}, +{313, 3284313107u, 3284303872u, 3197127680u, 0, MODFF_TOLERANCE, 0}, +{314, 3396166221u, 3396166220u, 3196059648u, 0, MODFF_TOLERANCE, 0}, +{315, 1201894512u, 1201894400u, 1063256064u, 0, MODFF_TOLERANCE, 0}, +{316, 1085398440u, 1084227584u, 1057942848u, 0, MODFF_TOLERANCE, 0}, +{317, 3458934263u, 3458934263u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{318, 1005577835u, 0u, 1005577835u, 0, MODFF_TOLERANCE, 0}, +{319, 1065761827u, 1065353216u, 1028097120u, 0, MODFF_TOLERANCE, 0}, +{320, 3333928591u, 3333928448u, 3197042688u, 0, MODFF_TOLERANCE, 0}, +{321, 926665223u, 0u, 926665223u, 0, MODFF_TOLERANCE, 0}, +{322, 3383521344u, 3383521344u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{323, 1199816046u, 1199815936u, 1062993920u, 0, MODFF_TOLERANCE, 0}, +{324, 3333779015u, 3333778944u, 3188588544u, 0, MODFF_TOLERANCE, 0}, +{325, 952421041u, 0u, 952421041u, 0, MODFF_TOLERANCE, 0}, +{326, 948398145u, 0u, 948398145u, 0, MODFF_TOLERANCE, 0}, +{327, 3238273189u, 3238002688u, 3196327072u, 0, MODFF_TOLERANCE, 0}, +{328, 1270257895u, 1270257895u, 0u, 0, MODFF_TOLERANCE, 0}, +{329, 1080781593u, 1077936128u, 1059957860u, 0, MODFF_TOLERANCE, 0}, +{330, 1213908300u, 1213908288u, 1044381696u, 0, MODFF_TOLERANCE, 0}, +{331, 1014754300u, 0u, 1014754300u, 0, MODFF_TOLERANCE, 0}, +{332, 3235326590u, 3233808384u, 3208205296u, 0, MODFF_TOLERANCE, 0}, +{333, 1271705594u, 1271705594u, 0u, 0, MODFF_TOLERANCE, 0}, +{334, 1051802647u, 0u, 1051802647u, 0, MODFF_TOLERANCE, 0}, +{335, 965378004u, 0u, 965378004u, 0, MODFF_TOLERANCE, 0}, +{336, 1292594138u, 1292594138u, 0u, 0, MODFF_TOLERANCE, 0}, +{337, 3226990408u, 3225419776u, 3200236096u, 0, MODFF_TOLERANCE, 0}, +{338, 1110755136u, 1110704128u, 1044856832u, 0, MODFF_TOLERANCE, 0}, +{339, 3293953199u, 3293937664u, 3211967488u, 0, MODFF_TOLERANCE, 0}, +{340, 1122474770u, 1122369536u, 1062045952u, 0, MODFF_TOLERANCE, 0}, +{341, 1283624229u, 1283624229u, 0u, 0, MODFF_TOLERANCE, 0}, +{342, 906796922u, 0u, 906796922u, 0, MODFF_TOLERANCE, 0}, +{343, 1163935062u, 1163931648u, 1062559744u, 0, MODFF_TOLERANCE, 0}, +{344, 970649315u, 0u, 970649315u, 0, MODFF_TOLERANCE, 0}, +{345, 1078286437u, 1077936128u, 1034620064u, 0, MODFF_TOLERANCE, 0}, +{346, 959776291u, 0u, 959776291u, 0, MODFF_TOLERANCE, 0}, +{347, 3280345347u, 3280338944u, 3192395776u, 0, MODFF_TOLERANCE, 0}, +{348, 3341117305u, 3341117184u, 3203530752u, 0, MODFF_TOLERANCE, 0}, +{349, 3294559023u, 3294543872u, 3211574272u, 0, MODFF_TOLERANCE, 0}, +{350, 1270734970u, 1270734970u, 0u, 0, MODFF_TOLERANCE, 0}, +{351, 3355874874u, 3355874816u, 3211264000u, 0, MODFF_TOLERANCE, 0}, +{352, 3454816067u, 3454816067u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{353, 917206623u, 0u, 917206623u, 0, MODFF_TOLERANCE, 0}, +{354, 1172710814u, 1172709376u, 1060356096u, 0, MODFF_TOLERANCE, 0}, +{355, 1106502045u, 1106247680u, 1056466752u, 0, MODFF_TOLERANCE, 0}, +{356, 1290849316u, 1290849316u, 0u, 0, MODFF_TOLERANCE, 0}, +{357, 1157598381u, 1157595136u, 1053478912u, 0, MODFF_TOLERANCE, 0}, +{358, 3309023746u, 3309023232u, 3187703808u, 0, MODFF_TOLERANCE, 0}, +{359, 1092590501u, 1091567616u, 1064942160u, 0, MODFF_TOLERANCE, 0}, +{360, 3335234513u, 3335234048u, 3211296768u, 0, MODFF_TOLERANCE, 0}, +{361, 1002337336u, 0u, 1002337336u, 0, MODFF_TOLERANCE, 0}, +{362, 1279489061u, 1279489061u, 0u, 0, MODFF_TOLERANCE, 0}, +{363, 1006049444u, 0u, 1006049444u, 0, MODFF_TOLERANCE, 0}, +{364, 1110992491u, 1110966272u, 1036834304u, 0, MODFF_TOLERANCE, 0}, +{365, 1309984610u, 1309984610u, 0u, 0, MODFF_TOLERANCE, 0}, +{366, 1165036009u, 1165033472u, 1058967552u, 0, MODFF_TOLERANCE, 0}, +{367, 1233171235u, 1233171232u, 1052770304u, 0, MODFF_TOLERANCE, 0}, +{368, 1148920078u, 1148911616u, 1057241088u, 0, MODFF_TOLERANCE, 0}, +{369, 1007674793u, 0u, 1007674793u, 0, MODFF_TOLERANCE, 0}, +{370, 3230867340u, 3229614080u, 3206085728u, 0, MODFF_TOLERANCE, 0}, +{371, 1159415661u, 1159413760u, 1055760384u, 0, MODFF_TOLERANCE, 0}, +{372, 1109198803u, 1109131264u, 1048832384u, 0, MODFF_TOLERANCE, 0}, +{373, 1221754614u, 1221754592u, 1060110336u, 0, MODFF_TOLERANCE, 0}, +{374, 3219949483u, 3212836864u, 3210284886u, 0, MODFF_TOLERANCE, 0}, +{375, 1056167693u, 0u, 1056167693u, 0, MODFF_TOLERANCE, 0}, +{376, 3361149474u, 3361149440u, 3204972544u, 0, MODFF_TOLERANCE, 0}, +{377, 3387342069u, 3387342064u, 3206545408u, 0, MODFF_TOLERANCE, 0}, +{378, 1118474231u, 1118437376u, 1049622272u, 0, MODFF_TOLERANCE, 0}, +{379, 1207502108u, 1207502080u, 1046478848u, 0, MODFF_TOLERANCE, 0}, +{380, 3388073586u, 3388073584u, 3196059648u, 0, MODFF_TOLERANCE, 0}, +{381, 1000014431u, 0u, 1000014431u, 0, MODFF_TOLERANCE, 0}, +{382, 3382954009u, 3382954008u, 3187671040u, 0, MODFF_TOLERANCE, 0}, +{383, 1234530539u, 1234530536u, 1052770304u, 0, MODFF_TOLERANCE, 0}, +{384, 1079988872u, 1077936128u, 1056609344u, 0, MODFF_TOLERANCE, 0}, +{385, 1017843965u, 0u, 1017843965u, 0, MODFF_TOLERANCE, 0}, +{386, 1193076204u, 1193075968u, 1064042496u, 0, MODFF_TOLERANCE, 0}, +{387, 3248194237u, 3247964160u, 3202395968u, 0, MODFF_TOLERANCE, 0}, +{388, 951862956u, 0u, 951862956u, 0, MODFF_TOLERANCE, 0}, +{389, 1173464654u, 1173463040u, 1061797888u, 0, MODFF_TOLERANCE, 0}, +{390, 3306328852u, 3306328064u, 3192193024u, 0, MODFF_TOLERANCE, 0}, +{391, 1118701064u, 1118699520u, 1010892800u, 0, MODFF_TOLERANCE, 0}, +{392, 1291910469u, 1291910469u, 0u, 0, MODFF_TOLERANCE, 0}, +{393, 1211303367u, 1211303360u, 1038090240u, 0, MODFF_TOLERANCE, 0}, +{394, 1173894400u, 1173893120u, 1059061760u, 0, MODFF_TOLERANCE, 0}, +{395, 1131927531u, 1131872256u, 1062726400u, 0, MODFF_TOLERANCE, 0}, +{396, 3449879391u, 3449879391u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{397, 991614550u, 0u, 991614550u, 0, MODFF_TOLERANCE, 0}, +{398, 970094304u, 0u, 970094304u, 0, MODFF_TOLERANCE, 0}, +{399, 3344590506u, 3344590336u, 3207200768u, 0, MODFF_TOLERANCE, 0}, +{400, 1125551064u, 1125515264u, 1057740800u, 0, MODFF_TOLERANCE, 0}, +{401, 3331248076u, 3331247616u, 3211132928u, 0, MODFF_TOLERANCE, 0}, +{402, 3427296372u, 3427296372u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{403, 3455289118u, 3455289118u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{404, 1198917460u, 1198917376u, 1051197440u, 0, MODFF_TOLERANCE, 0}, +{405, 1327195159u, 1327195159u, 0u, 0, MODFF_TOLERANCE, 0}, +{406, 3476082461u, 3476082461u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{407, 921940707u, 0u, 921940707u, 0, MODFF_TOLERANCE, 0}, +{408, 1091906532u, 1091567616u, 1051032704u, 0, MODFF_TOLERANCE, 0}, +{409, 3393557778u, 3393557776u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{410, 3383396815u, 3383396808u, 3210739712u, 0, MODFF_TOLERANCE, 0}, +{411, 1276853215u, 1276853215u, 0u, 0, MODFF_TOLERANCE, 0}, +{412, 873199561u, 0u, 873199561u, 0, MODFF_TOLERANCE, 0}, +{413, 3462778440u, 3462778440u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{414, 3349284325u, 3349284224u, 3209297920u, 0, MODFF_TOLERANCE, 0}, +{415, 3470358002u, 3470358002u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{416, 3360170117u, 3360170112u, 3181379584u, 0, MODFF_TOLERANCE, 0}, +{417, 3224245428u, 3221225472u, 3208139472u, 0, MODFF_TOLERANCE, 0}, +{418, 3271307999u, 3271294976u, 3184229376u, 0, MODFF_TOLERANCE, 0}, +{419, 1120124467u, 1120010240u, 1063197056u, 0, MODFF_TOLERANCE, 0}, +{420, 1135619937u, 1135607808u, 1052607488u, 0, MODFF_TOLERANCE, 0}, +{421, 1064364381u, 0u, 1064364381u, 0, MODFF_TOLERANCE, 0}, +{422, 1268744779u, 1268744779u, 0u, 0, MODFF_TOLERANCE, 0}, +{423, 3328452652u, 3328452608u, 3174039552u, 0, MODFF_TOLERANCE, 0}, +{424, 1165195428u, 1165193216u, 1057636352u, 0, MODFF_TOLERANCE, 0}, +{425, 3390323168u, 3390323168u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{426, 1106497311u, 1106247680u, 1056163776u, 0, MODFF_TOLERANCE, 0}, +{427, 1278465842u, 1278465842u, 0u, 0, MODFF_TOLERANCE, 0}, +{428, 3247790039u, 3247439872u, 3207264992u, 0, MODFF_TOLERANCE, 0}, +{429, 909788142u, 0u, 909788142u, 0, MODFF_TOLERANCE, 0}, +{430, 3215244648u, 3212836864u, 3197302176u, 0, MODFF_TOLERANCE, 0}, +{431, 1083988595u, 1082130432u, 1063441304u, 0, MODFF_TOLERANCE, 0}, +{432, 989153382u, 0u, 989153382u, 0, MODFF_TOLERANCE, 0}, +{433, 1117455718u, 1117388800u, 1057141504u, 0, MODFF_TOLERANCE, 0}, +{434, 1061714285u, 0u, 1061714285u, 0, MODFF_TOLERANCE, 0}, +{435, 1212717473u, 1212717440u, 1057226752u, 0, MODFF_TOLERANCE, 0}, +{436, 3275973009u, 3275948032u, 3200459264u, 0, MODFF_TOLERANCE, 0}, +{437, 3450721670u, 3450721670u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{438, 3391162308u, 3391162308u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{439, 1291220039u, 1291220039u, 0u, 0, MODFF_TOLERANCE, 0}, +{440, 1044867873u, 0u, 1044867873u, 0, MODFF_TOLERANCE, 0}, +{441, 3369493273u, 3369493248u, 3209166848u, 0, MODFF_TOLERANCE, 0}, +{442, 1089986803u, 1088421888u, 1061095320u, 0, MODFF_TOLERANCE, 0}, +{443, 3462160118u, 3462160118u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{444, 1296314700u, 1296314700u, 0u, 0, MODFF_TOLERANCE, 0}, +{445, 1251462432u, 1251462432u, 0u, 0, MODFF_TOLERANCE, 0}, +{446, 3485236902u, 3485236902u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{447, 980772835u, 0u, 980772835u, 0, MODFF_TOLERANCE, 0}, +{448, 3262169538u, 3262119936u, 3191980544u, 0, MODFF_TOLERANCE, 0}, +{449, 1268270462u, 1268270462u, 0u, 0, MODFF_TOLERANCE, 0}, +{450, 994641495u, 0u, 994641495u, 0, MODFF_TOLERANCE, 0}, +{451, 1022211242u, 0u, 1022211242u, 0, MODFF_TOLERANCE, 0}, +{452, 922124181u, 0u, 922124181u, 0, MODFF_TOLERANCE, 0}, +{453, 884661176u, 0u, 884661176u, 0, MODFF_TOLERANCE, 0}, +{454, 3271100396u, 3271032832u, 3204707840u, 0, MODFF_TOLERANCE, 0}, +{455, 989762529u, 0u, 989762529u, 0, MODFF_TOLERANCE, 0}, +{456, 3362011135u, 3362011072u, 3212574720u, 0, MODFF_TOLERANCE, 0}, +{457, 1295475718u, 1295475718u, 0u, 0, MODFF_TOLERANCE, 0}, +{458, 1002632518u, 0u, 1002632518u, 0, MODFF_TOLERANCE, 0}, +{459, 3330388441u, 3330387968u, 3211558912u, 0, MODFF_TOLERANCE, 0}, +{460, 3404372005u, 3404372004u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{461, 3450484255u, 3450484255u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{462, 1218447414u, 1218447392u, 1060110336u, 0, MODFF_TOLERANCE, 0}, +{463, 1125800069u, 1125777408u, 1051789824u, 0, MODFF_TOLERANCE, 0}, +{464, 3256265749u, 3256090624u, 3207267648u, 0, MODFF_TOLERANCE, 0}, +{465, 1300246663u, 1300246663u, 0u, 0, MODFF_TOLERANCE, 0}, +{466, 999985470u, 0u, 999985470u, 0, MODFF_TOLERANCE, 0}, +{467, 3409354318u, 3409354318u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{468, 1189421739u, 1189421568u, 1051394048u, 0, MODFF_TOLERANCE, 0}, +{469, 1056599002u, 0u, 1056599002u, 0, MODFF_TOLERANCE, 0}, +{470, 3391513557u, 3391513556u, 3196059648u, 0, MODFF_TOLERANCE, 0}, +{471, 3467473756u, 3467473756u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{472, 3444521949u, 3444521949u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{473, 1164046161u, 1164042240u, 1064636416u, 0, MODFF_TOLERANCE, 0}, +{474, 3440635788u, 3440635788u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{475, 1292596266u, 1292596266u, 0u, 0, MODFF_TOLERANCE, 0}, +{476, 3469748379u, 3469748379u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{477, 3412765608u, 3412765608u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{478, 1314644642u, 1314644642u, 0u, 0, MODFF_TOLERANCE, 0}, +{479, 3399813173u, 3399813172u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{480, 948775569u, 0u, 948775569u, 0, MODFF_TOLERANCE, 0}, +{481, 3485444126u, 3485444126u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{482, 1034611395u, 0u, 1034611395u, 0, MODFF_TOLERANCE, 0}, +{483, 882288581u, 0u, 882288581u, 0, MODFF_TOLERANCE, 0}, +{484, 3489122735u, 3489122735u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{485, 3372450889u, 3372450880u, 3205496832u, 0, MODFF_TOLERANCE, 0}, +{486, 1181604787u, 1181603840u, 1064091648u, 0, MODFF_TOLERANCE, 0}, +{487, 3363067409u, 3363067392u, 3196583936u, 0, MODFF_TOLERANCE, 0}, +{488, 1043691622u, 0u, 1043691622u, 0, MODFF_TOLERANCE, 0}, +{489, 3402603223u, 3402603222u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{490, 1314588083u, 1314588083u, 0u, 0, MODFF_TOLERANCE, 0}, +{491, 3442525943u, 3442525943u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{492, 3451674717u, 3451674717u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{493, 3400949680u, 3400949680u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{494, 3365581801u, 3365581792u, 3197108224u, 0, MODFF_TOLERANCE, 0}, +{495, 1175843167u, 1175842816u, 1051688960u, 0, MODFF_TOLERANCE, 0}, +{496, 1110424755u, 1110179840u, 1064250560u, 0, MODFF_TOLERANCE, 0}, +{497, 927278934u, 0u, 927278934u, 0, MODFF_TOLERANCE, 0}, +{498, 969804941u, 0u, 969804941u, 0, MODFF_TOLERANCE, 0}, +{499, 3355439348u, 3355439232u, 3211264000u, 0, MODFF_TOLERANCE, 0}, +{500, 1139120919u, 1139113984u, 1046001664u, 0, MODFF_TOLERANCE, 0}, +{501, 3270515074u, 3270508544u, 3175878656u, 0, MODFF_TOLERANCE, 0}, +{502, 3325199970u, 3325199360u, 3206053888u, 0, MODFF_TOLERANCE, 0}, +{503, 934308144u, 0u, 934308144u, 0, MODFF_TOLERANCE, 0}, +{504, 1220524226u, 1220524224u, 1031798784u, 0, MODFF_TOLERANCE, 0}, +{505, 1152648002u, 1152647168u, 1037074432u, 0, MODFF_TOLERANCE, 0}, +{506, 3461790298u, 3461790298u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{507, 3382391700u, 3382391696u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{508, 3296962745u, 3296960512u, 3196817408u, 0, MODFF_TOLERANCE, 0}, +{509, 1156767533u, 1156759552u, 1064921088u, 0, MODFF_TOLERANCE, 0}, +{510, 1088986462u, 1088421888u, 1049220576u, 0, MODFF_TOLERANCE, 0}, +{511, 3312324949u, 3312324608u, 3182067712u, 0, MODFF_TOLERANCE, 0}, +{512, 994934087u, 0u, 994934087u, 0, MODFF_TOLERANCE, 0}, +{513, 967678094u, 0u, 967678094u, 0, MODFF_TOLERANCE, 0}, +{514, 1123403720u, 1123287040u, 1063511040u, 0, MODFF_TOLERANCE, 0}, +{515, 1093936408u, 1093664768u, 1048879872u, 0, MODFF_TOLERANCE, 0}, +{516, 3287317742u, 3287285760u, 3212434432u, 0, MODFF_TOLERANCE, 0}, +{517, 3479873563u, 3479873563u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{518, 1246277393u, 1246277392u, 1048576000u, 0, MODFF_TOLERANCE, 0}, +{519, 3424264117u, 3424264117u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{520, 3434026174u, 3434026174u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{521, 3228365887u, 3225419776u, 3207844092u, 0, MODFF_TOLERANCE, 0}, +{522, 1216775310u, 1216775296u, 1054867456u, 0, MODFF_TOLERANCE, 0}, +{523, 1035909900u, 0u, 1035909900u, 0, MODFF_TOLERANCE, 0}, +{524, 1249532942u, 1249532940u, 1056964608u, 0, MODFF_TOLERANCE, 0}, +{525, 1274271338u, 1274271338u, 0u, 0, MODFF_TOLERANCE, 0}, +{526, 1247632131u, 1247632128u, 1061158912u, 0, MODFF_TOLERANCE, 0}, +{527, 1212129651u, 1212129600u, 1061945344u, 0, MODFF_TOLERANCE, 0}, +{528, 955826310u, 0u, 955826310u, 0, MODFF_TOLERANCE, 0}, +{529, 1037464105u, 0u, 1037464105u, 0, MODFF_TOLERANCE, 0}, +{530, 1311706596u, 1311706596u, 0u, 0, MODFF_TOLERANCE, 0}, +{531, 1254918706u, 1254918706u, 0u, 0, MODFF_TOLERANCE, 0}, +{532, 918212457u, 0u, 918212457u, 0, MODFF_TOLERANCE, 0}, +{533, 1017468331u, 0u, 1017468331u, 0, MODFF_TOLERANCE, 0}, +{534, 1337315179u, 1337315179u, 0u, 0, MODFF_TOLERANCE, 0}, +{535, 3461361185u, 3461361185u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{536, 1131358407u, 1131347968u, 1042488320u, 0, MODFF_TOLERANCE, 0}, +{537, 3325958870u, 3325958144u, 3207954432u, 0, MODFF_TOLERANCE, 0}, +{538, 1156517523u, 1156513792u, 1055469568u, 0, MODFF_TOLERANCE, 0}, +{539, 3343716230u, 3343716096u, 3204841472u, 0, MODFF_TOLERANCE, 0}, +{540, 3337499209u, 3337499136u, 3188850688u, 0, MODFF_TOLERANCE, 0}, +{541, 1226297264u, 1226297264u, 0u, 0, MODFF_TOLERANCE, 0}, +{542, 3468429030u, 3468429030u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{543, 3253874001u, 3253731328u, 3196802112u, 0, MODFF_TOLERANCE, 0}, +{544, 3253515800u, 3253207040u, 3205939968u, 0, MODFF_TOLERANCE, 0}, +{545, 1189005947u, 1189005824u, 1047920640u, 0, MODFF_TOLERANCE, 0}, +{546, 959956547u, 0u, 959956547u, 0, MODFF_TOLERANCE, 0}, +{547, 876324728u, 0u, 876324728u, 0, MODFF_TOLERANCE, 0}, +{548, 3425290480u, 3425290480u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{549, 1139193797u, 1139179520u, 1054807040u, 0, MODFF_TOLERANCE, 0}, +{550, 1039917375u, 0u, 1039917375u, 0, MODFF_TOLERANCE, 0}, +{551, 1122740999u, 1122631680u, 1062568832u, 0, MODFF_TOLERANCE, 0}, +{552, 3220979495u, 3212836864u, 3212344910u, 0, MODFF_TOLERANCE, 0}, +{553, 3429223871u, 3429223871u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{554, 1311016004u, 1311016004u, 0u, 0, MODFF_TOLERANCE, 0}, +{555, 3334899880u, 3334899712u, 3198681088u, 0, MODFF_TOLERANCE, 0}, +{556, 1128016396u, 1128005632u, 1042821120u, 0, MODFF_TOLERANCE, 0}, +{557, 1105151547u, 1104674816u, 1063831392u, 0, MODFF_TOLERANCE, 0}, +{558, 3404762495u, 3404762494u, 3204448256u, 0, MODFF_TOLERANCE, 0}, +{559, 1206054701u, 1206054656u, 1051983872u, 0, MODFF_TOLERANCE, 0}, +{560, 1162227076u, 1162223616u, 1062748160u, 0, MODFF_TOLERANCE, 0}, +{561, 970745811u, 0u, 970745811u, 0, MODFF_TOLERANCE, 0}, +{562, 3313826904u, 3313825792u, 3205169152u, 0, MODFF_TOLERANCE, 0}, +{563, 1213609983u, 1213609920u, 1065091072u, 0, MODFF_TOLERANCE, 0}, +{564, 919983950u, 0u, 919983950u, 0, MODFF_TOLERANCE, 0}, +{565, 1246902946u, 1246902944u, 1056964608u, 0, MODFF_TOLERANCE, 0}, +{566, 995850843u, 0u, 995850843u, 0, MODFF_TOLERANCE, 0}, +{567, 1332031130u, 1332031130u, 0u, 0, MODFF_TOLERANCE, 0}, +{568, 3362082828u, 3362082816u, 3191865344u, 0, MODFF_TOLERANCE, 0}, +{569, 3374056268u, 3374056256u, 3208642560u, 0, MODFF_TOLERANCE, 0}, +{570, 1029480631u, 0u, 1029480631u, 0, MODFF_TOLERANCE, 0}, +{571, 3384988527u, 3384988520u, 3210739712u, 0, MODFF_TOLERANCE, 0}, +{572, 1317696241u, 1317696241u, 0u, 0, MODFF_TOLERANCE, 0}, +{573, 3235395924u, 3233808384u, 3208759968u, 0, MODFF_TOLERANCE, 0}, +{574, 1132055244u, 1132003328u, 1061866496u, 0, MODFF_TOLERANCE, 0}, +{575, 3341877624u, 3341877504u, 3203399680u, 0, MODFF_TOLERANCE, 0}, +{576, 1228636133u, 1228636128u, 1050673152u, 0, MODFF_TOLERANCE, 0}, +{577, 886552820u, 0u, 886552820u, 0, MODFF_TOLERANCE, 0}, +{578, 3335899347u, 3335899136u, 3201499136u, 0, MODFF_TOLERANCE, 0}, +{579, 3307203982u, 3307200512u, 3210272768u, 0, MODFF_TOLERANCE, 0}, +{580, 1207246237u, 1207246208u, 1047003136u, 0, MODFF_TOLERANCE, 0}, +{581, 1165476654u, 1165475840u, 1045135360u, 0, MODFF_TOLERANCE, 0}, +{582, 3350219111u, 3350219008u, 3209560064u, 0, MODFF_TOLERANCE, 0}, +{583, 1215278023u, 1215278016u, 1038090240u, 0, MODFF_TOLERANCE, 0}, +{584, 1017239798u, 0u, 1017239798u, 0, MODFF_TOLERANCE, 0}, +{585, 3438501281u, 3438501281u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{586, 1149651309u, 1149648896u, 1050071040u, 0, MODFF_TOLERANCE, 0}, +{587, 970030475u, 0u, 970030475u, 0, MODFF_TOLERANCE, 0}, +{588, 1111943722u, 1111752704u, 1060801152u, 0, MODFF_TOLERANCE, 0}, +{589, 1158358450u, 1158356992u, 1052131328u, 0, MODFF_TOLERANCE, 0}, +{590, 1189849849u, 1189849600u, 1056505856u, 0, MODFF_TOLERANCE, 0}, +{591, 3382739134u, 3382739128u, 3208642560u, 0, MODFF_TOLERANCE, 0}, +{592, 1249758327u, 1249758324u, 1061158912u, 0, MODFF_TOLERANCE, 0}, +{593, 3445282331u, 3445282331u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{594, 1168098747u, 1168097280u, 1060593664u, 0, MODFF_TOLERANCE, 0}, +{595, 1316854744u, 1316854744u, 0u, 0, MODFF_TOLERANCE, 0}, +{596, 892549317u, 0u, 892549317u, 0, MODFF_TOLERANCE, 0}, +{597, 1179637545u, 1179636736u, 1061830656u, 0, MODFF_TOLERANCE, 0}, +{598, 3301009024u, 3301007360u, 3192913920u, 0, MODFF_TOLERANCE, 0}, +{599, 3406174560u, 3406174560u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{600, 3233089227u, 3231711232u, 3207083608u, 0, MODFF_TOLERANCE, 0}, +{601, 1212652543u, 1212652480u, 1065091072u, 0, MODFF_TOLERANCE, 0}, +{602, 3218245284u, 3212836864u, 3206876488u, 0, MODFF_TOLERANCE, 0}, +{603, 1238873830u, 1238873824u, 1061158912u, 0, MODFF_TOLERANCE, 0}, +{604, 3215981890u, 3212836864u, 3200251144u, 0, MODFF_TOLERANCE, 0}, +{605, 3240474694u, 3240099840u, 3199666368u, 0, MODFF_TOLERANCE, 0}, +{606, 1266687209u, 1266687209u, 0u, 0, MODFF_TOLERANCE, 0}, +{607, 3410090781u, 3410090781u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{608, 3487959775u, 3487959775u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{609, 3331372071u, 3331372032u, 3181117440u, 0, MODFF_TOLERANCE, 0}, +{610, 943645710u, 0u, 943645710u, 0, MODFF_TOLERANCE, 0}, +{611, 3345065699u, 3345065472u, 3210936320u, 0, MODFF_TOLERANCE, 0}, +{612, 3282620725u, 3282599936u, 3206703616u, 0, MODFF_TOLERANCE, 0}, +{613, 935847271u, 0u, 935847271u, 0, MODFF_TOLERANCE, 0}, +{614, 1067255804u, 1065353216u, 1047019488u, 0, MODFF_TOLERANCE, 0}, +{615, 3410336089u, 3410336089u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{616, 1111437780u, 1111228416u, 1061975296u, 0, MODFF_TOLERANCE, 0}, +{617, 1336840432u, 1336840432u, 0u, 0, MODFF_TOLERANCE, 0}, +{618, 1141063391u, 1141047296u, 1065057280u, 0, MODFF_TOLERANCE, 0}, +{619, 1168908072u, 1168906240u, 1063583744u, 0, MODFF_TOLERANCE, 0}, +{620, 3289799763u, 3289792512u, 3202521088u, 0, MODFF_TOLERANCE, 0}, +{621, 3353679791u, 3353679744u, 3199991808u, 0, MODFF_TOLERANCE, 0}, +{622, 897158391u, 0u, 897158391u, 0, MODFF_TOLERANCE, 0}, +{623, 1001823878u, 0u, 1001823878u, 0, MODFF_TOLERANCE, 0}, +{624, 1016826861u, 0u, 1016826861u, 0, MODFF_TOLERANCE, 0}, +{625, 1009130212u, 0u, 1009130212u, 0, MODFF_TOLERANCE, 0}, +{626, 1004302940u, 0u, 1004302940u, 0, MODFF_TOLERANCE, 0}, +{627, 3367127535u, 3367127520u, 3203399680u, 0, MODFF_TOLERANCE, 0}, +{628, 943136342u, 0u, 943136342u, 0, MODFF_TOLERANCE, 0}, +{629, 1032920919u, 0u, 1032920919u, 0, MODFF_TOLERANCE, 0}, +{630, 3449126417u, 3449126417u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{631, 3281952870u, 3281944576u, 3196164096u, 0, MODFF_TOLERANCE, 0}, +{632, 1237868497u, 1237868496u, 1040187392u, 0, MODFF_TOLERANCE, 0}, +{633, 1153753924u, 1153753088u, 1037107200u, 0, MODFF_TOLERANCE, 0}, +{634, 3322269242u, 3322268672u, 3205398528u, 0, MODFF_TOLERANCE, 0}, +{635, 1120261759u, 1120141312u, 1063993216u, 0, MODFF_TOLERANCE, 0}, +{636, 892210998u, 0u, 892210998u, 0, MODFF_TOLERANCE, 0}, +{637, 3226328360u, 3225419776u, 3193819776u, 0, MODFF_TOLERANCE, 0}, +{638, 3366432856u, 3366432832u, 3208642560u, 0, MODFF_TOLERANCE, 0}, +{639, 3349595986u, 3349595904u, 3206807552u, 0, MODFF_TOLERANCE, 0}, +{640, 3251588707u, 3251109888u, 3211381856u, 0, MODFF_TOLERANCE, 0}, +{641, 3306023523u, 3306020864u, 3206950912u, 0, MODFF_TOLERANCE, 0}, +{642, 1087750238u, 1086324736u, 1059980016u, 0, MODFF_TOLERANCE, 0}, +{643, 1099325523u, 1098907648u, 1061948000u, 0, MODFF_TOLERANCE, 0}, +{644, 3359488363u, 3359488320u, 3207331840u, 0, MODFF_TOLERANCE, 0}, +{645, 1066116543u, 1065353216u, 1035623408u, 0, MODFF_TOLERANCE, 0}, +{646, 3364074347u, 3364074336u, 3199205376u, 0, MODFF_TOLERANCE, 0}, +{647, 1030612298u, 0u, 1030612298u, 0, MODFF_TOLERANCE, 0}, +{648, 3345396001u, 3345395968u, 3187933184u, 0, MODFF_TOLERANCE, 0}, +{649, 989161453u, 0u, 989161453u, 0, MODFF_TOLERANCE, 0}, +{650, 1186234578u, 1186234368u, 1053949952u, 0, MODFF_TOLERANCE, 0}, +{651, 1331680743u, 1331680743u, 0u, 0, MODFF_TOLERANCE, 0}, +{652, 1009396165u, 0u, 1009396165u, 0, MODFF_TOLERANCE, 0}, +{653, 894661023u, 0u, 894661023u, 0, MODFF_TOLERANCE, 0}, +{654, 1326067357u, 1326067357u, 0u, 0, MODFF_TOLERANCE, 0}, +{655, 887589411u, 0u, 887589411u, 0, MODFF_TOLERANCE, 0}, +{656, 1292305693u, 1292305693u, 0u, 0, MODFF_TOLERANCE, 0}, +{657, 1045232522u, 0u, 1045232522u, 0, MODFF_TOLERANCE, 0}, +{658, 3234993273u, 3233808384u, 3205538760u, 0, MODFF_TOLERANCE, 0}, +{659, 962515365u, 0u, 962515365u, 0, MODFF_TOLERANCE, 0}, +{660, 3349432725u, 3349432704u, 3190292480u, 0, MODFF_TOLERANCE, 0}, +{661, 928848003u, 0u, 928848003u, 0, MODFF_TOLERANCE, 0}, +{662, 912423027u, 0u, 912423027u, 0, MODFF_TOLERANCE, 0}, +{663, 3228795133u, 3225419776u, 3209561076u, 0, MODFF_TOLERANCE, 0}, +{664, 3273940030u, 3273916416u, 3199761408u, 0, MODFF_TOLERANCE, 0}, +{665, 3296784303u, 3296780288u, 3204116480u, 0, MODFF_TOLERANCE, 0}, +{666, 3276182352u, 3276144640u, 3205713920u, 0, MODFF_TOLERANCE, 0}, +{667, 965402291u, 0u, 965402291u, 0, MODFF_TOLERANCE, 0}, +{668, 3388153589u, 3388153584u, 3206545408u, 0, MODFF_TOLERANCE, 0}, +{669, 3426245389u, 3426245389u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{670, 1133410485u, 1133379584u, 1064397312u, 0, MODFF_TOLERANCE, 0}, +{671, 3329658993u, 3329658880u, 3185704960u, 0, MODFF_TOLERANCE, 0}, +{672, 1088652637u, 1088421888u, 1038178112u, 0, MODFF_TOLERANCE, 0}, +{673, 3369970587u, 3369970560u, 3210215424u, 0, MODFF_TOLERANCE, 0}, +{674, 959121458u, 0u, 959121458u, 0, MODFF_TOLERANCE, 0}, +{675, 1270451568u, 1270451568u, 0u, 0, MODFF_TOLERANCE, 0}, +{676, 928393353u, 0u, 928393353u, 0, MODFF_TOLERANCE, 0}, +{677, 989498922u, 0u, 989498922u, 0, MODFF_TOLERANCE, 0}, +{678, 1280215674u, 1280215674u, 0u, 0, MODFF_TOLERANCE, 0}, +{679, 1171873518u, 1171871744u, 1063108608u, 0, MODFF_TOLERANCE, 0}, +{680, 954709738u, 0u, 954709738u, 0, MODFF_TOLERANCE, 0}, +{681, 3298258100u, 3298254848u, 3200991232u, 0, MODFF_TOLERANCE, 0}, +{682, 935525182u, 0u, 935525182u, 0, MODFF_TOLERANCE, 0}, +{683, 3415208824u, 3415208824u, 2147483648u, 0, MODFF_TOLERANCE, 0}, +{684, 1001897182u, 0u, 1001897182u, 0, MODFF_TOLERANCE, 0}, +{685, 3245830463u, 3245342720u, 3203278816u, 0, MODFF_TOLERANCE, 0}, +{686, 985903305u, 0u, 985903305u, 0, MODFF_TOLERANCE, 0}, +{687, 3333087577u, 3333087232u, 3207364608u, 0, MODFF_TOLERANCE, 0}, +{688, 3357328848u, 3357328832u, 3196059648u, 0, MODFF_TOLERANCE, 0}, +{689, 982612185u, 0u, 982612185u, 0, MODFF_TOLERANCE, 0}, +{690, 923582663u, 0u, 923582663u, 0, MODFF_TOLERANCE, 0}, +{691, 3267868136u, 3267756032u, 3210408960u, 0, MODFF_TOLERANCE, 0}, +{692, 1208301947u, 1208301888u, 1064042496u, 0, MODFF_TOLERANCE, 0}, +{693, 3319048157u, 3319046144u, 3212550144u, 0, MODFF_TOLERANCE, 0}, +{694, 1172271145u, 1172271104u, 1017380864u, 0, MODFF_TOLERANCE, 0}, +{695, 1144755661u, 1144750080u, 1051617280u, 0, MODFF_TOLERANCE, 0}, +{696, 1051585760u, 0u, 1051585760u, 0, MODFF_TOLERANCE, 0}, +{697, 898467286u, 0u, 898467286u, 0, MODFF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_MODFF_H multiple inclusion protection + +// EOF modff.h diff --git a/packages/language/c/libm/current/tests/vectors/nextafterf.c b/packages/language/c/libm/current/tests/vectors/nextafterf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/nextafterf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// nextafterf.c +// +// Test of nextafterf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/nextafterf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(nextafterf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &nextafterf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &nextafterf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("nextafterf() is stable"); + } // if + else + { + CYG_TEST_FAIL("nextafterf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library nextafterf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "nextafterf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF nextafterf.c diff --git a/packages/language/c/libm/current/tests/vectors/nextafterf.h b/packages/language/c/libm/current/tests/vectors/nextafterf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/nextafterf.h @@ -0,0 +1,1126 @@ +#ifndef CYGONCE_LIBM_NEXTAFTERF_H +#define CYGONCE_LIBM_NEXTAFTERF_H +//=========================================================================== +// +// nextafterf.h +// +// Test vectors for testing of nextafterf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/nextafterf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define NEXTAFTERF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t nextafterf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3214514585u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3214430699u, 0, NEXTAFTERF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3214346812u, 0, NEXTAFTERF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3214262926u, 0, NEXTAFTERF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3214179040u, 0, NEXTAFTERF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3214095154u, 0, NEXTAFTERF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3214011268u, 0, NEXTAFTERF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3213927382u, 0, NEXTAFTERF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3213843496u, 0, NEXTAFTERF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3213759610u, 0, NEXTAFTERF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3213675724u, 0, NEXTAFTERF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3213591838u, 0, NEXTAFTERF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3213507952u, 0, NEXTAFTERF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3213424066u, 0, NEXTAFTERF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3213340179u, 0, NEXTAFTERF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3213256293u, 0, NEXTAFTERF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3213172407u, 0, NEXTAFTERF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3213088521u, 0, NEXTAFTERF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3213004635u, 0, NEXTAFTERF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3212920749u, 0, NEXTAFTERF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3212836863u, 0, NEXTAFTERF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3212669091u, 0, NEXTAFTERF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3212501319u, 0, NEXTAFTERF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3212333547u, 0, NEXTAFTERF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3212165774u, 0, NEXTAFTERF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3211998002u, 0, NEXTAFTERF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3211830230u, 0, NEXTAFTERF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3211662458u, 0, NEXTAFTERF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3211494686u, 0, NEXTAFTERF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3211326914u, 0, NEXTAFTERF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3211159141u, 0, NEXTAFTERF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3210991369u, 0, NEXTAFTERF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3210823597u, 0, NEXTAFTERF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3210655825u, 0, NEXTAFTERF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3210488053u, 0, NEXTAFTERF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3210320281u, 0, NEXTAFTERF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3210152508u, 0, NEXTAFTERF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3209984736u, 0, NEXTAFTERF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3209816964u, 0, NEXTAFTERF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3209649192u, 0, NEXTAFTERF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3209481420u, 0, NEXTAFTERF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3209313648u, 0, NEXTAFTERF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3209145875u, 0, NEXTAFTERF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3208978103u, 0, NEXTAFTERF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3208810331u, 0, NEXTAFTERF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3208642559u, 0, NEXTAFTERF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3208474787u, 0, NEXTAFTERF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3208307015u, 0, NEXTAFTERF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3208139243u, 0, NEXTAFTERF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3207971470u, 0, NEXTAFTERF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3207803698u, 0, NEXTAFTERF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3207635926u, 0, NEXTAFTERF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3207468154u, 0, NEXTAFTERF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3207300382u, 0, NEXTAFTERF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3207132610u, 0, NEXTAFTERF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3206964837u, 0, NEXTAFTERF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3206797065u, 0, NEXTAFTERF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3206629293u, 0, NEXTAFTERF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3206461521u, 0, NEXTAFTERF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3206293749u, 0, NEXTAFTERF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3206125977u, 0, NEXTAFTERF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3205958204u, 0, NEXTAFTERF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3205790432u, 0, NEXTAFTERF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3205622660u, 0, NEXTAFTERF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3205454888u, 0, NEXTAFTERF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3205287116u, 0, NEXTAFTERF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3205119344u, 0, NEXTAFTERF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3204951571u, 0, NEXTAFTERF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3204783799u, 0, NEXTAFTERF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3204616027u, 0, NEXTAFTERF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3204448255u, 0, NEXTAFTERF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3204112711u, 0, NEXTAFTERF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3203777166u, 0, NEXTAFTERF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3203441622u, 0, NEXTAFTERF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3203106078u, 0, NEXTAFTERF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3202770533u, 0, NEXTAFTERF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3202434989u, 0, NEXTAFTERF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3202099445u, 0, NEXTAFTERF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3201763900u, 0, NEXTAFTERF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3201428356u, 0, NEXTAFTERF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3201092812u, 0, NEXTAFTERF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3200757267u, 0, NEXTAFTERF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3200421723u, 0, NEXTAFTERF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3200086179u, 0, NEXTAFTERF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3199750635u, 0, NEXTAFTERF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3199415090u, 0, NEXTAFTERF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3199079546u, 0, NEXTAFTERF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3198744002u, 0, NEXTAFTERF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3198408457u, 0, NEXTAFTERF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3198072913u, 0, NEXTAFTERF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3197737369u, 0, NEXTAFTERF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3197401824u, 0, NEXTAFTERF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3197066280u, 0, NEXTAFTERF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3196730736u, 0, NEXTAFTERF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3196395191u, 0, NEXTAFTERF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3196059647u, 0, NEXTAFTERF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3195388558u, 0, NEXTAFTERF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3194717470u, 0, NEXTAFTERF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3194046381u, 0, NEXTAFTERF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3193375292u, 0, NEXTAFTERF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3192704204u, 0, NEXTAFTERF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3192033115u, 0, NEXTAFTERF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3191362027u, 0, NEXTAFTERF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3190690938u, 0, NEXTAFTERF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3190019849u, 0, NEXTAFTERF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3189348761u, 0, NEXTAFTERF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3188677672u, 0, NEXTAFTERF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3188006583u, 0, NEXTAFTERF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3186999950u, 0, NEXTAFTERF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3185657773u, 0, NEXTAFTERF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3184315596u, 0, NEXTAFTERF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3182973419u, 0, NEXTAFTERF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3181631241u, 0, NEXTAFTERF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3180289064u, 0, NEXTAFTERF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3178611342u, 0, NEXTAFTERF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3175926988u, 0, NEXTAFTERF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3173242633u, 0, NEXTAFTERF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3170222734u, 0, NEXTAFTERF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3164854025u, 0, NEXTAFTERF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3156465417u, 0, NEXTAFTERF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 1008981769u, 0, NEXTAFTERF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 1017370377u, 0, NEXTAFTERF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 1022739086u, 0, NEXTAFTERF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 1025758985u, 0, NEXTAFTERF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 1028443340u, 0, NEXTAFTERF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 1031127694u, 0, NEXTAFTERF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 1032805416u, 0, NEXTAFTERF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 1034147593u, 0, NEXTAFTERF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 1035489771u, 0, NEXTAFTERF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 1036831948u, 0, NEXTAFTERF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 1038174125u, 0, NEXTAFTERF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 1039516302u, 0, NEXTAFTERF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 1040522935u, 0, NEXTAFTERF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 1041194024u, 0, NEXTAFTERF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 1041865113u, 0, NEXTAFTERF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 1042536201u, 0, NEXTAFTERF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 1043207290u, 0, NEXTAFTERF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 1043878379u, 0, NEXTAFTERF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 1044549467u, 0, NEXTAFTERF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 1045220556u, 0, NEXTAFTERF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 1045891644u, 0, NEXTAFTERF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 1046562733u, 0, NEXTAFTERF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 1047233822u, 0, NEXTAFTERF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 1047904910u, 0, NEXTAFTERF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 1048575999u, 0, NEXTAFTERF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 1048911543u, 0, NEXTAFTERF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 1049247088u, 0, NEXTAFTERF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 1049582632u, 0, NEXTAFTERF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 1049918176u, 0, NEXTAFTERF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 1050253721u, 0, NEXTAFTERF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 1050589265u, 0, NEXTAFTERF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 1050924809u, 0, NEXTAFTERF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 1051260354u, 0, NEXTAFTERF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 1051595898u, 0, NEXTAFTERF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 1051931442u, 0, NEXTAFTERF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 1052266987u, 0, NEXTAFTERF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 1052602531u, 0, NEXTAFTERF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 1052938075u, 0, NEXTAFTERF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 1053273619u, 0, NEXTAFTERF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 1053609164u, 0, NEXTAFTERF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 1053944708u, 0, NEXTAFTERF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 1054280252u, 0, NEXTAFTERF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 1054615797u, 0, NEXTAFTERF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 1054951341u, 0, NEXTAFTERF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 1055286885u, 0, NEXTAFTERF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 1055622430u, 0, NEXTAFTERF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 1055957974u, 0, NEXTAFTERF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 1056293518u, 0, NEXTAFTERF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 1056629063u, 0, NEXTAFTERF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 1056964607u, 0, NEXTAFTERF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 1057132379u, 0, NEXTAFTERF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 1057300151u, 0, NEXTAFTERF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 1057467923u, 0, NEXTAFTERF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 1057635696u, 0, NEXTAFTERF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 1057803468u, 0, NEXTAFTERF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 1057971240u, 0, NEXTAFTERF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 1058139012u, 0, NEXTAFTERF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 1058306784u, 0, NEXTAFTERF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 1058474556u, 0, NEXTAFTERF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 1058642329u, 0, NEXTAFTERF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 1058810101u, 0, NEXTAFTERF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 1058977873u, 0, NEXTAFTERF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 1059145645u, 0, NEXTAFTERF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 1059313417u, 0, NEXTAFTERF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 1059481189u, 0, NEXTAFTERF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 1059648962u, 0, NEXTAFTERF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 1059816734u, 0, NEXTAFTERF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 1059984506u, 0, NEXTAFTERF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 1060152278u, 0, NEXTAFTERF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 1060320050u, 0, NEXTAFTERF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 1060487822u, 0, NEXTAFTERF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 1060655595u, 0, NEXTAFTERF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 1060823367u, 0, NEXTAFTERF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 1060991139u, 0, NEXTAFTERF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 1061158911u, 0, NEXTAFTERF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 1061326683u, 0, NEXTAFTERF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 1061494455u, 0, NEXTAFTERF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 1061662227u, 0, NEXTAFTERF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 1061830000u, 0, NEXTAFTERF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 1061997772u, 0, NEXTAFTERF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 1062165544u, 0, NEXTAFTERF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 1062333316u, 0, NEXTAFTERF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 1062501088u, 0, NEXTAFTERF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 1062668860u, 0, NEXTAFTERF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 1062836633u, 0, NEXTAFTERF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 1063004405u, 0, NEXTAFTERF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 1063172177u, 0, NEXTAFTERF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 1063339949u, 0, NEXTAFTERF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 1063507721u, 0, NEXTAFTERF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 1063675493u, 0, NEXTAFTERF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 1063843266u, 0, NEXTAFTERF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 1064011038u, 0, NEXTAFTERF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 1064178810u, 0, NEXTAFTERF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 1064346582u, 0, NEXTAFTERF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 1064514354u, 0, NEXTAFTERF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 1064682126u, 0, NEXTAFTERF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 1064849899u, 0, NEXTAFTERF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 1065017671u, 0, NEXTAFTERF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 1065185443u, 0, NEXTAFTERF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 1065353215u, 0, NEXTAFTERF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 1065437101u, 0, NEXTAFTERF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 1065520987u, 0, NEXTAFTERF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 1065604873u, 0, NEXTAFTERF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 1065688759u, 0, NEXTAFTERF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 1065772645u, 0, NEXTAFTERF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 1065856531u, 0, NEXTAFTERF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 1065940418u, 0, NEXTAFTERF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 1066024304u, 0, NEXTAFTERF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 1066108190u, 0, NEXTAFTERF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 1066192076u, 0, NEXTAFTERF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 1066275962u, 0, NEXTAFTERF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 1066359848u, 0, NEXTAFTERF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 1066443734u, 0, NEXTAFTERF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 1066527620u, 0, NEXTAFTERF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 1066611506u, 0, NEXTAFTERF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 1066695392u, 0, NEXTAFTERF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 1066779278u, 0, NEXTAFTERF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 1066863164u, 0, NEXTAFTERF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 1066947051u, 0, NEXTAFTERF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 3234402266u, 0, NEXTAFTERF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 3231108067u, 0, NEXTAFTERF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 3226013658u, 0, NEXTAFTERF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 3217625050u, 0, NEXTAFTERF_TOLERANCE, 0}, +{243, 0u, 0u, 0u, 0, NEXTAFTERF_TOLERANCE, 0}, +{244, 1070141403u, 0u, 1070141402u, 0, NEXTAFTERF_TOLERANCE, 0}, +{245, 1078530011u, 0u, 1078530010u, 0, NEXTAFTERF_TOLERANCE, 0}, +{246, 1083624420u, 0u, 1083624419u, 0, NEXTAFTERF_TOLERANCE, 0}, +{247, 3253731328u, 0u, 3253731327u, 0, NEXTAFTERF_TOLERANCE, 0}, +{248, 3252840038u, 0u, 3252840037u, 0, NEXTAFTERF_TOLERANCE, 0}, +{249, 3251948749u, 0u, 3251948748u, 0, NEXTAFTERF_TOLERANCE, 0}, +{250, 3251057459u, 0u, 3251057458u, 0, NEXTAFTERF_TOLERANCE, 0}, +{251, 3250166170u, 0u, 3250166169u, 0, NEXTAFTERF_TOLERANCE, 0}, +{252, 3249274880u, 0u, 3249274879u, 0, NEXTAFTERF_TOLERANCE, 0}, +{253, 3248383590u, 0u, 3248383589u, 0, NEXTAFTERF_TOLERANCE, 0}, +{254, 3247492301u, 0u, 3247492300u, 0, NEXTAFTERF_TOLERANCE, 0}, +{255, 3246601011u, 0u, 3246601010u, 0, NEXTAFTERF_TOLERANCE, 0}, +{256, 3245028147u, 0u, 3245028146u, 0, NEXTAFTERF_TOLERANCE, 0}, +{257, 3243245568u, 0u, 3243245567u, 0, NEXTAFTERF_TOLERANCE, 0}, +{258, 3241462989u, 0u, 3241462988u, 0, NEXTAFTERF_TOLERANCE, 0}, +{259, 3239680410u, 0u, 3239680409u, 0, NEXTAFTERF_TOLERANCE, 0}, +{260, 3237792973u, 0u, 3237792972u, 0, NEXTAFTERF_TOLERANCE, 0}, +{261, 3234227814u, 0u, 3234227813u, 0, NEXTAFTERF_TOLERANCE, 0}, +{262, 3230662656u, 0u, 3230662655u, 0, NEXTAFTERF_TOLERANCE, 0}, +{263, 3224580915u, 0u, 3224580914u, 0, NEXTAFTERF_TOLERANCE, 0}, +{264, 3213675725u, 0u, 3213675724u, 0, NEXTAFTERF_TOLERANCE, 0}, +{265, 1058642330u, 0u, 1058642329u, 0, NEXTAFTERF_TOLERANCE, 0}, +{266, 1075000115u, 0u, 1075000114u, 0, NEXTAFTERF_TOLERANCE, 0}, +{267, 1082130432u, 0u, 1082130431u, 0, NEXTAFTERF_TOLERANCE, 0}, +{268, 1085695590u, 0u, 1085695589u, 0, NEXTAFTERF_TOLERANCE, 0}, +{269, 1089260749u, 0u, 1089260748u, 0, NEXTAFTERF_TOLERANCE, 0}, +{270, 1091672474u, 0u, 1091672473u, 0, NEXTAFTERF_TOLERANCE, 0}, +{271, 1093455053u, 0u, 1093455052u, 0, NEXTAFTERF_TOLERANCE, 0}, +{272, 1095237632u, 0u, 1095237631u, 0, NEXTAFTERF_TOLERANCE, 0}, +{273, 1097020211u, 0u, 1097020210u, 0, NEXTAFTERF_TOLERANCE, 0}, +{274, 1098802790u, 0u, 1098802789u, 0, NEXTAFTERF_TOLERANCE, 0}, +{275, 1099746509u, 0u, 1099746508u, 0, NEXTAFTERF_TOLERANCE, 0}, +{276, 1100637798u, 0u, 1100637797u, 0, NEXTAFTERF_TOLERANCE, 0}, +{277, 1101529088u, 0u, 1101529087u, 0, NEXTAFTERF_TOLERANCE, 0}, +{278, 1102420378u, 0u, 1102420377u, 0, NEXTAFTERF_TOLERANCE, 0}, +{279, 1103311667u, 0u, 1103311666u, 0, NEXTAFTERF_TOLERANCE, 0}, +{280, 1104202957u, 0u, 1104202956u, 0, NEXTAFTERF_TOLERANCE, 0}, +{281, 1105094246u, 0u, 1105094245u, 0, NEXTAFTERF_TOLERANCE, 0}, +{282, 1105985536u, 0u, 1105985535u, 0, NEXTAFTERF_TOLERANCE, 0}, +{283, 1107800421u, 1203999711u, 1107800422u, 0, NEXTAFTERF_TOLERANCE, 0}, +{284, 3196650934u, 896005582u, 3196650933u, 0, NEXTAFTERF_TOLERANCE, 0}, +{285, 3368700125u, 3308232444u, 3368700124u, 0, NEXTAFTERF_TOLERANCE, 0}, +{286, 1224242132u, 3061363425u, 1224242131u, 0, NEXTAFTERF_TOLERANCE, 0}, +{287, 3221027117u, 1284201705u, 3221027116u, 0, NEXTAFTERF_TOLERANCE, 0}, +{288, 1198712763u, 919636942u, 1198712762u, 0, NEXTAFTERF_TOLERANCE, 0}, +{289, 3090780435u, 1035260608u, 3090780434u, 0, NEXTAFTERF_TOLERANCE, 0}, +{290, 966554515u, 3234538174u, 966554514u, 0, NEXTAFTERF_TOLERANCE, 0}, +{291, 1312607135u, 1194999402u, 1312607134u, 0, NEXTAFTERF_TOLERANCE, 0}, +{292, 1166191415u, 1018661564u, 1166191414u, 0, NEXTAFTERF_TOLERANCE, 0}, +{293, 3111900019u, 1130472166u, 3111900018u, 0, NEXTAFTERF_TOLERANCE, 0}, +{294, 1302107128u, 3370647675u, 1302107127u, 0, NEXTAFTERF_TOLERANCE, 0}, +{295, 1052801068u, 3039122570u, 1052801067u, 0, NEXTAFTERF_TOLERANCE, 0}, +{296, 1060849628u, 3081357692u, 1060849627u, 0, NEXTAFTERF_TOLERANCE, 0}, +{297, 3484320003u, 3033957825u, 3484320002u, 0, NEXTAFTERF_TOLERANCE, 0}, +{298, 3181522772u, 3305392896u, 3181522773u, 0, NEXTAFTERF_TOLERANCE, 0}, +{299, 882596369u, 1256676590u, 882596370u, 0, NEXTAFTERF_TOLERANCE, 0}, +{300, 968192794u, 878547432u, 968192793u, 0, NEXTAFTERF_TOLERANCE, 0}, +{301, 3122346862u, 1111584337u, 3122346861u, 0, NEXTAFTERF_TOLERANCE, 0}, +{302, 1052361612u, 1280025214u, 1052361613u, 0, NEXTAFTERF_TOLERANCE, 0}, +{303, 3471653172u, 1154138102u, 3471653171u, 0, NEXTAFTERF_TOLERANCE, 0}, +{304, 3231467496u, 934336592u, 3231467495u, 0, NEXTAFTERF_TOLERANCE, 0}, +{305, 1341514497u, 3466051188u, 1341514496u, 0, NEXTAFTERF_TOLERANCE, 0}, +{306, 1272351391u, 3373485062u, 1272351390u, 0, NEXTAFTERF_TOLERANCE, 0}, +{307, 3319724992u, 3354615790u, 3319724993u, 0, NEXTAFTERF_TOLERANCE, 0}, +{308, 917622040u, 1334966485u, 917622041u, 0, NEXTAFTERF_TOLERANCE, 0}, +{309, 940236348u, 3304072663u, 940236347u, 0, NEXTAFTERF_TOLERANCE, 0}, +{310, 3251541546u, 3174764041u, 3251541545u, 0, NEXTAFTERF_TOLERANCE, 0}, +{311, 3099843889u, 3355962282u, 3099843890u, 0, NEXTAFTERF_TOLERANCE, 0}, +{312, 3371863479u, 1014861921u, 3371863478u, 0, NEXTAFTERF_TOLERANCE, 0}, +{313, 3204069187u, 966573255u, 3204069186u, 0, NEXTAFTERF_TOLERANCE, 0}, +{314, 1306460502u, 903489435u, 1306460501u, 0, NEXTAFTERF_TOLERANCE, 0}, +{315, 1197542187u, 3024598921u, 1197542186u, 0, NEXTAFTERF_TOLERANCE, 0}, +{316, 922888249u, 1139392309u, 922888250u, 0, NEXTAFTERF_TOLERANCE, 0}, +{317, 1184239996u, 3224098462u, 1184239995u, 0, NEXTAFTERF_TOLERANCE, 0}, +{318, 1252490238u, 1173619825u, 1252490237u, 0, NEXTAFTERF_TOLERANCE, 0}, +{319, 1001673627u, 3462631271u, 1001673626u, 0, NEXTAFTERF_TOLERANCE, 0}, +{320, 976098044u, 1151967422u, 976098045u, 0, NEXTAFTERF_TOLERANCE, 0}, +{321, 941796645u, 886451963u, 941796644u, 0, NEXTAFTERF_TOLERANCE, 0}, +{322, 893184329u, 1243067084u, 893184330u, 0, NEXTAFTERF_TOLERANCE, 0}, +{323, 1143233714u, 1007268238u, 1143233713u, 0, NEXTAFTERF_TOLERANCE, 0}, +{324, 1139941253u, 1147688821u, 1139941254u, 0, NEXTAFTERF_TOLERANCE, 0}, +{325, 3143717025u, 3234638157u, 3143717026u, 0, NEXTAFTERF_TOLERANCE, 0}, +{326, 3048866608u, 3449209899u, 3048866609u, 0, NEXTAFTERF_TOLERANCE, 0}, +{327, 3240298487u, 1020260821u, 3240298486u, 0, NEXTAFTERF_TOLERANCE, 0}, +{328, 1288902137u, 3123875978u, 1288902136u, 0, NEXTAFTERF_TOLERANCE, 0}, +{329, 1333134799u, 1338107877u, 1333134800u, 0, NEXTAFTERF_TOLERANCE, 0}, +{330, 1187847971u, 1317663644u, 1187847972u, 0, NEXTAFTERF_TOLERANCE, 0}, +{331, 1038851706u, 1327544110u, 1038851707u, 0, NEXTAFTERF_TOLERANCE, 0}, +{332, 3329354473u, 3165437289u, 3329354472u, 0, NEXTAFTERF_TOLERANCE, 0}, +{333, 3077218579u, 1308397879u, 3077218578u, 0, NEXTAFTERF_TOLERANCE, 0}, +{334, 1309289088u, 1019883016u, 1309289087u, 0, NEXTAFTERF_TOLERANCE, 0}, +{335, 3444653659u, 1279248024u, 3444653658u, 0, NEXTAFTERF_TOLERANCE, 0}, +{336, 1106778573u, 3304487767u, 1106778572u, 0, NEXTAFTERF_TOLERANCE, 0}, +{337, 1140567947u, 3069174149u, 1140567946u, 0, NEXTAFTERF_TOLERANCE, 0}, +{338, 1238569473u, 873035665u, 1238569472u, 0, NEXTAFTERF_TOLERANCE, 0}, +{339, 3154871957u, 1276671061u, 3154871956u, 0, NEXTAFTERF_TOLERANCE, 0}, +{340, 1261071232u, 1182202773u, 1261071231u, 0, NEXTAFTERF_TOLERANCE, 0}, +{341, 1175011025u, 3029705783u, 1175011024u, 0, NEXTAFTERF_TOLERANCE, 0}, +{342, 1082692850u, 1211581107u, 1082692851u, 0, NEXTAFTERF_TOLERANCE, 0}, +{343, 974547519u, 3475164509u, 974547518u, 0, NEXTAFTERF_TOLERANCE, 0}, +{344, 3058097085u, 3104309359u, 3058097086u, 0, NEXTAFTERF_TOLERANCE, 0}, +{345, 3107252546u, 1071134451u, 3107252545u, 0, NEXTAFTERF_TOLERANCE, 0}, +{346, 3197942144u, 3094120030u, 3197942143u, 0, NEXTAFTERF_TOLERANCE, 0}, +{347, 3403348556u, 3184653669u, 3403348555u, 0, NEXTAFTERF_TOLERANCE, 0}, +{348, 3182301130u, 3460764044u, 3182301131u, 0, NEXTAFTERF_TOLERANCE, 0}, +{349, 1136411063u, 1118097422u, 1136411062u, 0, NEXTAFTERF_TOLERANCE, 0}, +{350, 3239231622u, 3302723069u, 3239231623u, 0, NEXTAFTERF_TOLERANCE, 0}, +{351, 3417964312u, 1321337529u, 3417964311u, 0, NEXTAFTERF_TOLERANCE, 0}, +{352, 3109481038u, 1143864063u, 3109481037u, 0, NEXTAFTERF_TOLERANCE, 0}, +{353, 1148867223u, 1256486202u, 1148867224u, 0, NEXTAFTERF_TOLERANCE, 0}, +{354, 989687421u, 3372681320u, 989687420u, 0, NEXTAFTERF_TOLERANCE, 0}, +{355, 1152956913u, 3166480640u, 1152956912u, 0, NEXTAFTERF_TOLERANCE, 0}, +{356, 892922651u, 3373029087u, 892922650u, 0, NEXTAFTERF_TOLERANCE, 0}, +{357, 1109627625u, 1314158257u, 1109627626u, 0, NEXTAFTERF_TOLERANCE, 0}, +{358, 1307091856u, 1103202538u, 1307091855u, 0, NEXTAFTERF_TOLERANCE, 0}, +{359, 1077234132u, 3272167130u, 1077234131u, 0, NEXTAFTERF_TOLERANCE, 0}, +{360, 1142167709u, 1096445242u, 1142167708u, 0, NEXTAFTERF_TOLERANCE, 0}, +{361, 3426232834u, 1036705270u, 3426232833u, 0, NEXTAFTERF_TOLERANCE, 0}, +{362, 3368566779u, 967249167u, 3368566778u, 0, NEXTAFTERF_TOLERANCE, 0}, +{363, 3030724760u, 3349013503u, 3030724761u, 0, NEXTAFTERF_TOLERANCE, 0}, +{364, 1138741813u, 3073453199u, 1138741812u, 0, NEXTAFTERF_TOLERANCE, 0}, +{365, 982950501u, 982549888u, 982950500u, 0, NEXTAFTERF_TOLERANCE, 0}, +{366, 1142981585u, 1015602236u, 1142981584u, 0, NEXTAFTERF_TOLERANCE, 0}, +{367, 3347165962u, 3135486696u, 3347165961u, 0, NEXTAFTERF_TOLERANCE, 0}, +{368, 1009535440u, 3381353228u, 1009535439u, 0, NEXTAFTERF_TOLERANCE, 0}, +{369, 3103736980u, 3402950505u, 3103736981u, 0, NEXTAFTERF_TOLERANCE, 0}, +{370, 3126820946u, 1077903063u, 3126820945u, 0, NEXTAFTERF_TOLERANCE, 0}, +{371, 3473956030u, 976891930u, 3473956029u, 0, NEXTAFTERF_TOLERANCE, 0}, +{372, 3349098349u, 1055327704u, 3349098348u, 0, NEXTAFTERF_TOLERANCE, 0}, +{373, 3152729489u, 1060398533u, 3152729488u, 0, NEXTAFTERF_TOLERANCE, 0}, +{374, 945568720u, 3313485084u, 945568719u, 0, NEXTAFTERF_TOLERANCE, 0}, +{375, 3345489836u, 1108392401u, 3345489835u, 0, NEXTAFTERF_TOLERANCE, 0}, +{376, 940893161u, 1137000140u, 940893162u, 0, NEXTAFTERF_TOLERANCE, 0}, +{377, 976791751u, 3230678102u, 976791750u, 0, NEXTAFTERF_TOLERANCE, 0}, +{378, 1004442355u, 3036510596u, 1004442354u, 0, NEXTAFTERF_TOLERANCE, 0}, +{379, 1108485380u, 3173536878u, 1108485379u, 0, NEXTAFTERF_TOLERANCE, 0}, +{380, 1061834641u, 972388096u, 1061834640u, 0, NEXTAFTERF_TOLERANCE, 0}, +{381, 3381268392u, 1146976802u, 3381268391u, 0, NEXTAFTERF_TOLERANCE, 0}, +{382, 3212952285u, 3329407365u, 3212952286u, 0, NEXTAFTERF_TOLERANCE, 0}, +{383, 3466188568u, 1041678304u, 3466188567u, 0, NEXTAFTERF_TOLERANCE, 0}, +{384, 3072456205u, 3160254633u, 3072456206u, 0, NEXTAFTERF_TOLERANCE, 0}, +{385, 3319315516u, 3422089012u, 3319315517u, 0, NEXTAFTERF_TOLERANCE, 0}, +{386, 935938416u, 1146676692u, 935938417u, 0, NEXTAFTERF_TOLERANCE, 0}, +{387, 3212614372u, 1152633030u, 3212614371u, 0, NEXTAFTERF_TOLERANCE, 0}, +{388, 1315030230u, 3336225884u, 1315030229u, 0, NEXTAFTERF_TOLERANCE, 0}, +{389, 1134593658u, 3456812581u, 1134593657u, 0, NEXTAFTERF_TOLERANCE, 0}, +{390, 977281449u, 879922831u, 977281448u, 0, NEXTAFTERF_TOLERANCE, 0}, +{391, 1086198791u, 920125958u, 1086198790u, 0, NEXTAFTERF_TOLERANCE, 0}, +{392, 1135271264u, 3284878412u, 1135271263u, 0, NEXTAFTERF_TOLERANCE, 0}, +{393, 1094190727u, 1056854532u, 1094190726u, 0, NEXTAFTERF_TOLERANCE, 0}, +{394, 1294665325u, 991185677u, 1294665324u, 0, NEXTAFTERF_TOLERANCE, 0}, +{395, 3439134022u, 1043829691u, 3439134021u, 0, NEXTAFTERF_TOLERANCE, 0}, +{396, 3073083133u, 1317170485u, 3073083132u, 0, NEXTAFTERF_TOLERANCE, 0}, +{397, 1325668223u, 970681762u, 1325668222u, 0, NEXTAFTERF_TOLERANCE, 0}, +{398, 1092037607u, 1027330835u, 1092037606u, 0, NEXTAFTERF_TOLERANCE, 0}, +{399, 3316278408u, 3455589207u, 3316278409u, 0, NEXTAFTERF_TOLERANCE, 0}, +{400, 3295436768u, 3129873731u, 3295436767u, 0, NEXTAFTERF_TOLERANCE, 0}, +{401, 1151984049u, 3074547120u, 1151984048u, 0, NEXTAFTERF_TOLERANCE, 0}, +{402, 1129287043u, 3076527544u, 1129287042u, 0, NEXTAFTERF_TOLERANCE, 0}, +{403, 1243664530u, 972879810u, 1243664529u, 0, NEXTAFTERF_TOLERANCE, 0}, +{404, 950829092u, 929114193u, 950829091u, 0, NEXTAFTERF_TOLERANCE, 0}, +{405, 1115471979u, 3047246262u, 1115471978u, 0, NEXTAFTERF_TOLERANCE, 0}, +{406, 3351092088u, 3024661404u, 3351092087u, 0, NEXTAFTERF_TOLERANCE, 0}, +{407, 3424479544u, 3312047722u, 3424479543u, 0, NEXTAFTERF_TOLERANCE, 0}, +{408, 3241193975u, 884465785u, 3241193974u, 0, NEXTAFTERF_TOLERANCE, 0}, +{409, 1030934236u, 1045139240u, 1030934237u, 0, NEXTAFTERF_TOLERANCE, 0}, +{410, 3131791114u, 3408392958u, 3131791115u, 0, NEXTAFTERF_TOLERANCE, 0}, +{411, 1025254314u, 3057812821u, 1025254313u, 0, NEXTAFTERF_TOLERANCE, 0}, +{412, 1110545760u, 3240144177u, 1110545759u, 0, NEXTAFTERF_TOLERANCE, 0}, +{413, 3180213739u, 1108793820u, 3180213738u, 0, NEXTAFTERF_TOLERANCE, 0}, +{414, 3361976590u, 3138179993u, 3361976589u, 0, NEXTAFTERF_TOLERANCE, 0}, +{415, 881280146u, 3421884736u, 881280145u, 0, NEXTAFTERF_TOLERANCE, 0}, +{416, 3264443610u, 3222916705u, 3264443609u, 0, NEXTAFTERF_TOLERANCE, 0}, +{417, 3374550627u, 3055856293u, 3374550626u, 0, NEXTAFTERF_TOLERANCE, 0}, +{418, 899599265u, 3240118211u, 899599264u, 0, NEXTAFTERF_TOLERANCE, 0}, +{419, 1268194719u, 1332489410u, 1268194720u, 0, NEXTAFTERF_TOLERANCE, 0}, +{420, 1133420220u, 1245770860u, 1133420221u, 0, NEXTAFTERF_TOLERANCE, 0}, +{421, 3184462258u, 1263529646u, 3184462257u, 0, NEXTAFTERF_TOLERANCE, 0}, +{422, 3295996963u, 3453334307u, 3295996964u, 0, NEXTAFTERF_TOLERANCE, 0}, +{423, 1270887389u, 1156123987u, 1270887388u, 0, NEXTAFTERF_TOLERANCE, 0}, +{424, 3325193181u, 993979179u, 3325193180u, 0, NEXTAFTERF_TOLERANCE, 0}, +{425, 925657343u, 1315159742u, 925657344u, 0, NEXTAFTERF_TOLERANCE, 0}, +{426, 3116607482u, 3224327456u, 3116607483u, 0, NEXTAFTERF_TOLERANCE, 0}, +{427, 3187892415u, 3118097315u, 3187892414u, 0, NEXTAFTERF_TOLERANCE, 0}, +{428, 1189120494u, 978961471u, 1189120493u, 0, NEXTAFTERF_TOLERANCE, 0}, +{429, 889030794u, 3129523970u, 889030793u, 0, NEXTAFTERF_TOLERANCE, 0}, +{430, 1323529208u, 3100744786u, 1323529207u, 0, NEXTAFTERF_TOLERANCE, 0}, +{431, 3465768388u, 3190881451u, 3465768387u, 0, NEXTAFTERF_TOLERANCE, 0}, +{432, 3426099899u, 1118756120u, 3426099898u, 0, NEXTAFTERF_TOLERANCE, 0}, +{433, 3224857113u, 3398166843u, 3224857114u, 0, NEXTAFTERF_TOLERANCE, 0}, +{434, 3357819026u, 3148475462u, 3357819025u, 0, NEXTAFTERF_TOLERANCE, 0}, +{435, 1273397670u, 901308750u, 1273397669u, 0, NEXTAFTERF_TOLERANCE, 0}, +{436, 3424831780u, 1304806106u, 3424831779u, 0, NEXTAFTERF_TOLERANCE, 0}, +{437, 1257596246u, 3420832544u, 1257596245u, 0, NEXTAFTERF_TOLERANCE, 0}, +{438, 1051773536u, 896271348u, 1051773535u, 0, NEXTAFTERF_TOLERANCE, 0}, +{439, 3294752507u, 3113225954u, 3294752506u, 0, NEXTAFTERF_TOLERANCE, 0}, +{440, 1090870906u, 3294742905u, 1090870905u, 0, NEXTAFTERF_TOLERANCE, 0}, +{441, 1227582289u, 1208979668u, 1227582288u, 0, NEXTAFTERF_TOLERANCE, 0}, +{442, 1137854355u, 3335041917u, 1137854354u, 0, NEXTAFTERF_TOLERANCE, 0}, +{443, 3440773058u, 3204192793u, 3440773057u, 0, NEXTAFTERF_TOLERANCE, 0}, +{444, 3101598400u, 3057760708u, 3101598399u, 0, NEXTAFTERF_TOLERANCE, 0}, +{445, 3451216836u, 3347783723u, 3451216835u, 0, NEXTAFTERF_TOLERANCE, 0}, +{446, 3437062994u, 3106834845u, 3437062993u, 0, NEXTAFTERF_TOLERANCE, 0}, +{447, 1131196082u, 1164573183u, 1131196083u, 0, NEXTAFTERF_TOLERANCE, 0}, +{448, 3177294154u, 1282436638u, 3177294153u, 0, NEXTAFTERF_TOLERANCE, 0}, +{449, 3258097678u, 1305882290u, 3258097677u, 0, NEXTAFTERF_TOLERANCE, 0}, +{450, 3460915348u, 1219372260u, 3460915347u, 0, NEXTAFTERF_TOLERANCE, 0}, +{451, 3303035472u, 3153013020u, 3303035471u, 0, NEXTAFTERF_TOLERANCE, 0}, +{452, 1053698677u, 3284313107u, 1053698676u, 0, NEXTAFTERF_TOLERANCE, 0}, +{453, 3396166221u, 1201894512u, 3396166220u, 0, NEXTAFTERF_TOLERANCE, 0}, +{454, 3037541131u, 1085398440u, 3037541130u, 0, NEXTAFTERF_TOLERANCE, 0}, +{455, 3458934263u, 1005577835u, 3458934262u, 0, NEXTAFTERF_TOLERANCE, 0}, +{456, 1065761827u, 3333928591u, 1065761826u, 0, NEXTAFTERF_TOLERANCE, 0}, +{457, 926665223u, 3150815797u, 926665222u, 0, NEXTAFTERF_TOLERANCE, 0}, +{458, 1199816046u, 3143776186u, 1199816045u, 0, NEXTAFTERF_TOLERANCE, 0}, +{459, 3333779015u, 952421041u, 3333779014u, 0, NEXTAFTERF_TOLERANCE, 0}, +{460, 948398145u, 3238273189u, 948398144u, 0, NEXTAFTERF_TOLERANCE, 0}, +{461, 3054021468u, 1270257895u, 3054021467u, 0, NEXTAFTERF_TOLERANCE, 0}, +{462, 1080781593u, 1213908300u, 1080781594u, 0, NEXTAFTERF_TOLERANCE, 0}, +{463, 3235326590u, 1271705594u, 3235326589u, 0, NEXTAFTERF_TOLERANCE, 0}, +{464, 3118883815u, 1051802647u, 3118883814u, 0, NEXTAFTERF_TOLERANCE, 0}, +{465, 965378004u, 1292594138u, 965378005u, 0, NEXTAFTERF_TOLERANCE, 0}, +{466, 3226990408u, 1110755136u, 3226990407u, 0, NEXTAFTERF_TOLERANCE, 0}, +{467, 3117098218u, 1122474770u, 3117098217u, 0, NEXTAFTERF_TOLERANCE, 0}, +{468, 1283624229u, 906796922u, 1283624228u, 0, NEXTAFTERF_TOLERANCE, 0}, +{469, 970649315u, 1078286437u, 970649316u, 0, NEXTAFTERF_TOLERANCE, 0}, +{470, 959776291u, 3280345347u, 959776290u, 0, NEXTAFTERF_TOLERANCE, 0}, +{471, 3341117305u, 3294559023u, 3341117304u, 0, NEXTAFTERF_TOLERANCE, 0}, +{472, 1270734970u, 3355874874u, 1270734969u, 0, NEXTAFTERF_TOLERANCE, 0}, +{473, 917206623u, 1172710814u, 917206624u, 0, NEXTAFTERF_TOLERANCE, 0}, +{474, 1106502045u, 1290849316u, 1106502046u, 0, NEXTAFTERF_TOLERANCE, 0}, +{475, 1157598381u, 3309023746u, 1157598380u, 0, NEXTAFTERF_TOLERANCE, 0}, +{476, 3335234513u, 1002337336u, 3335234512u, 0, NEXTAFTERF_TOLERANCE, 0}, +{477, 1279489061u, 1006049444u, 1279489060u, 0, NEXTAFTERF_TOLERANCE, 0}, +{478, 3157416480u, 1309984610u, 3157416479u, 0, NEXTAFTERF_TOLERANCE, 0}, +{479, 3143920719u, 3131608518u, 3143920718u, 0, NEXTAFTERF_TOLERANCE, 0}, +{480, 1148920078u, 1007674793u, 1148920077u, 0, NEXTAFTERF_TOLERANCE, 0}, +{481, 3064988156u, 3230867340u, 3064988157u, 0, NEXTAFTERF_TOLERANCE, 0}, +{482, 3083619260u, 1159415661u, 3083619259u, 0, NEXTAFTERF_TOLERANCE, 0}, +{483, 1109198803u, 1221754614u, 1109198804u, 0, NEXTAFTERF_TOLERANCE, 0}, +{484, 3219949483u, 1056167693u, 3219949482u, 0, NEXTAFTERF_TOLERANCE, 0}, +{485, 3361149474u, 3387342069u, 3361149475u, 0, NEXTAFTERF_TOLERANCE, 0}, +{486, 1207502108u, 3388073586u, 1207502107u, 0, NEXTAFTERF_TOLERANCE, 0}, +{487, 3161756316u, 3143659754u, 3161756315u, 0, NEXTAFTERF_TOLERANCE, 0}, +{488, 3160728744u, 3382954009u, 3160728745u, 0, NEXTAFTERF_TOLERANCE, 0}, +{489, 1234530539u, 1079988872u, 1234530538u, 0, NEXTAFTERF_TOLERANCE, 0}, +{490, 1017843965u, 1193076204u, 1017843966u, 0, NEXTAFTERF_TOLERANCE, 0}, +{491, 951862956u, 1173464654u, 951862957u, 0, NEXTAFTERF_TOLERANCE, 0}, +{492, 3306328852u, 1118701064u, 3306328851u, 0, NEXTAFTERF_TOLERANCE, 0}, +{493, 1291910469u, 1211303367u, 1291910468u, 0, NEXTAFTERF_TOLERANCE, 0}, +{494, 3027442905u, 1173894400u, 3027442904u, 0, NEXTAFTERF_TOLERANCE, 0}, +{495, 1131927531u, 3182962700u, 1131927530u, 0, NEXTAFTERF_TOLERANCE, 0}, +{496, 3449879391u, 991614550u, 3449879390u, 0, NEXTAFTERF_TOLERANCE, 0}, +{497, 970094304u, 3344590506u, 970094303u, 0, NEXTAFTERF_TOLERANCE, 0}, +{498, 1125551064u, 3331248076u, 1125551063u, 0, NEXTAFTERF_TOLERANCE, 0}, +{499, 3427296372u, 3455289118u, 3427296373u, 0, NEXTAFTERF_TOLERANCE, 0}, +{500, 1198917460u, 1327195159u, 1198917461u, 0, NEXTAFTERF_TOLERANCE, 0}, +{501, 3114686212u, 3476082461u, 3114686213u, 0, NEXTAFTERF_TOLERANCE, 0}, +{502, 3393557778u, 3383396815u, 3393557777u, 0, NEXTAFTERF_TOLERANCE, 0}, +{503, 1276853215u, 873199561u, 1276853214u, 0, NEXTAFTERF_TOLERANCE, 0}, +{504, 3462778440u, 3349284325u, 3462778439u, 0, NEXTAFTERF_TOLERANCE, 0}, +{505, 3360170117u, 3048354042u, 3360170116u, 0, NEXTAFTERF_TOLERANCE, 0}, +{506, 3224245428u, 3271307999u, 3224245429u, 0, NEXTAFTERF_TOLERANCE, 0}, +{507, 1120124467u, 1135619937u, 1120124468u, 0, NEXTAFTERF_TOLERANCE, 0}, +{508, 1064364381u, 3180675544u, 1064364380u, 0, NEXTAFTERF_TOLERANCE, 0}, +{509, 1268744779u, 3328452652u, 1268744778u, 0, NEXTAFTERF_TOLERANCE, 0}, +{510, 1165195428u, 3390323168u, 1165195427u, 0, NEXTAFTERF_TOLERANCE, 0}, +{511, 3044092739u, 1106497311u, 3044092738u, 0, NEXTAFTERF_TOLERANCE, 0}, +{512, 3149469534u, 1278465842u, 3149469533u, 0, NEXTAFTERF_TOLERANCE, 0}, +{513, 3247790039u, 909788142u, 3247790038u, 0, NEXTAFTERF_TOLERANCE, 0}, +{514, 3215244648u, 1083988595u, 3215244647u, 0, NEXTAFTERF_TOLERANCE, 0}, +{515, 3095275931u, 989153382u, 3095275930u, 0, NEXTAFTERF_TOLERANCE, 0}, +{516, 3059688264u, 1117455718u, 3059688263u, 0, NEXTAFTERF_TOLERANCE, 0}, +{517, 3275973009u, 3450721670u, 3275973010u, 0, NEXTAFTERF_TOLERANCE, 0}, +{518, 3028857014u, 3188853813u, 3028857015u, 0, NEXTAFTERF_TOLERANCE, 0}, +{519, 3391162308u, 1291220039u, 3391162307u, 0, NEXTAFTERF_TOLERANCE, 0}, +{520, 1044867873u, 3369493273u, 1044867872u, 0, NEXTAFTERF_TOLERANCE, 0}, +{521, 1089986803u, 3462160118u, 1089986802u, 0, NEXTAFTERF_TOLERANCE, 0}, +{522, 1251462432u, 3171021770u, 1251462431u, 0, NEXTAFTERF_TOLERANCE, 0}, +{523, 3485236902u, 980772835u, 3485236901u, 0, NEXTAFTERF_TOLERANCE, 0}, +{524, 3262169538u, 1268270462u, 3262169537u, 0, NEXTAFTERF_TOLERANCE, 0}, +{525, 3080852256u, 994641495u, 3080852255u, 0, NEXTAFTERF_TOLERANCE, 0}, +{526, 1022211242u, 922124181u, 1022211241u, 0, NEXTAFTERF_TOLERANCE, 0}, +{527, 3071422941u, 3271100396u, 3071422942u, 0, NEXTAFTERF_TOLERANCE, 0}, +{528, 989762529u, 3362011135u, 989762528u, 0, NEXTAFTERF_TOLERANCE, 0}, +{529, 1295475718u, 3212305413u, 1295475717u, 0, NEXTAFTERF_TOLERANCE, 0}, +{530, 1002632518u, 3330388441u, 1002632517u, 0, NEXTAFTERF_TOLERANCE, 0}, +{531, 3404372005u, 3450484255u, 3404372006u, 0, NEXTAFTERF_TOLERANCE, 0}, +{532, 3158912530u, 3105501826u, 3158912529u, 0, NEXTAFTERF_TOLERANCE, 0}, +{533, 1125800069u, 3256265749u, 1125800068u, 0, NEXTAFTERF_TOLERANCE, 0}, +{534, 3138037576u, 3103365227u, 3138037575u, 0, NEXTAFTERF_TOLERANCE, 0}, +{535, 3108384823u, 1300246663u, 3108384822u, 0, NEXTAFTERF_TOLERANCE, 0}, +{536, 999985470u, 3409354318u, 999985469u, 0, NEXTAFTERF_TOLERANCE, 0}, +{537, 1189421739u, 1056599002u, 1189421738u, 0, NEXTAFTERF_TOLERANCE, 0}, +{538, 3075182644u, 3144159778u, 3075182645u, 0, NEXTAFTERF_TOLERANCE, 0}, +{539, 3028099649u, 3391513557u, 3028099650u, 0, NEXTAFTERF_TOLERANCE, 0}, +{540, 3132541814u, 3444521949u, 3132541815u, 0, NEXTAFTERF_TOLERANCE, 0}, +{541, 1164046161u, 3440635788u, 1164046160u, 0, NEXTAFTERF_TOLERANCE, 0}, +{542, 1292596266u, 3116569667u, 1292596265u, 0, NEXTAFTERF_TOLERANCE, 0}, +{543, 3469748379u, 3412765608u, 3469748378u, 0, NEXTAFTERF_TOLERANCE, 0}, +{544, 1314644642u, 3123051784u, 1314644641u, 0, NEXTAFTERF_TOLERANCE, 0}, +{545, 948775569u, 3485444126u, 948775568u, 0, NEXTAFTERF_TOLERANCE, 0}, +{546, 1034611395u, 882288581u, 1034611394u, 0, NEXTAFTERF_TOLERANCE, 0}, +{547, 3489122735u, 3372450889u, 3489122734u, 0, NEXTAFTERF_TOLERANCE, 0}, +{548, 1181604787u, 3363067409u, 1181604786u, 0, NEXTAFTERF_TOLERANCE, 0}, +{549, 3059042077u, 3204983963u, 3059042078u, 0, NEXTAFTERF_TOLERANCE, 0}, +{550, 1043691622u, 3402603223u, 1043691621u, 0, NEXTAFTERF_TOLERANCE, 0}, +{551, 3157534378u, 3451674717u, 3157534379u, 0, NEXTAFTERF_TOLERANCE, 0}, +{552, 3400949680u, 3073750220u, 3400949679u, 0, NEXTAFTERF_TOLERANCE, 0}, +{553, 3365581801u, 1175843167u, 3365581800u, 0, NEXTAFTERF_TOLERANCE, 0}, +{554, 3189917167u, 927278934u, 3189917166u, 0, NEXTAFTERF_TOLERANCE, 0}, +{555, 969804941u, 3355439348u, 969804940u, 0, NEXTAFTERF_TOLERANCE, 0}, +{556, 1139120919u, 3270515074u, 1139120918u, 0, NEXTAFTERF_TOLERANCE, 0}, +{557, 934308144u, 3118191228u, 934308143u, 0, NEXTAFTERF_TOLERANCE, 0}, +{558, 1220524226u, 1152648002u, 1220524225u, 0, NEXTAFTERF_TOLERANCE, 0}, +{559, 3162548604u, 3461790298u, 3162548605u, 0, NEXTAFTERF_TOLERANCE, 0}, +{560, 3382391700u, 3296962745u, 3382391699u, 0, NEXTAFTERF_TOLERANCE, 0}, +{561, 1156767533u, 1088986462u, 1156767532u, 0, NEXTAFTERF_TOLERANCE, 0}, +{562, 3079222483u, 3312324949u, 3079222484u, 0, NEXTAFTERF_TOLERANCE, 0}, +{563, 994934087u, 967678094u, 994934086u, 0, NEXTAFTERF_TOLERANCE, 0}, +{564, 3185240099u, 1123403720u, 3185240098u, 0, NEXTAFTERF_TOLERANCE, 0}, +{565, 3479873563u, 1246277393u, 3479873562u, 0, NEXTAFTERF_TOLERANCE, 0}, +{566, 3424264117u, 3434026174u, 3424264118u, 0, NEXTAFTERF_TOLERANCE, 0}, +{567, 3228365887u, 1216775310u, 3228365886u, 0, NEXTAFTERF_TOLERANCE, 0}, +{568, 1035909900u, 1249532942u, 1035909901u, 0, NEXTAFTERF_TOLERANCE, 0}, +{569, 3024951184u, 1247632131u, 3024951183u, 0, NEXTAFTERF_TOLERANCE, 0}, +{570, 3125775254u, 955826310u, 3125775253u, 0, NEXTAFTERF_TOLERANCE, 0}, +{571, 1037464105u, 3121544932u, 1037464104u, 0, NEXTAFTERF_TOLERANCE, 0}, +{572, 1311706596u, 1254918706u, 1311706595u, 0, NEXTAFTERF_TOLERANCE, 0}, +{573, 918212457u, 1017468331u, 918212458u, 0, NEXTAFTERF_TOLERANCE, 0}, +{574, 1337315179u, 3461361185u, 1337315178u, 0, NEXTAFTERF_TOLERANCE, 0}, +{575, 1131358407u, 3325958870u, 1131358406u, 0, NEXTAFTERF_TOLERANCE, 0}, +{576, 1156517523u, 3343716230u, 1156517522u, 0, NEXTAFTERF_TOLERANCE, 0}, +{577, 3210802820u, 3207408574u, 3210802819u, 0, NEXTAFTERF_TOLERANCE, 0}, +{578, 3337499209u, 1226297264u, 3337499208u, 0, NEXTAFTERF_TOLERANCE, 0}, +{579, 3468429030u, 3253874001u, 3468429029u, 0, NEXTAFTERF_TOLERANCE, 0}, +{580, 3253515800u, 1189005947u, 3253515799u, 0, NEXTAFTERF_TOLERANCE, 0}, +{581, 3055299953u, 3047908678u, 3055299952u, 0, NEXTAFTERF_TOLERANCE, 0}, +{582, 959956547u, 876324728u, 959956546u, 0, NEXTAFTERF_TOLERANCE, 0}, +{583, 3425290480u, 1139193797u, 3425290479u, 0, NEXTAFTERF_TOLERANCE, 0}, +{584, 1039917375u, 1122740999u, 1039917376u, 0, NEXTAFTERF_TOLERANCE, 0}, +{585, 3220979495u, 3429223871u, 3220979496u, 0, NEXTAFTERF_TOLERANCE, 0}, +{586, 1311016004u, 3334899880u, 1311016003u, 0, NEXTAFTERF_TOLERANCE, 0}, +{587, 1128016396u, 1105151547u, 1128016395u, 0, NEXTAFTERF_TOLERANCE, 0}, +{588, 3210335769u, 3100646155u, 3210335768u, 0, NEXTAFTERF_TOLERANCE, 0}, +{589, 3022705759u, 3404762495u, 3022705760u, 0, NEXTAFTERF_TOLERANCE, 0}, +{590, 3144504834u, 1162227076u, 3144504833u, 0, NEXTAFTERF_TOLERANCE, 0}, +{591, 1213609983u, 919983950u, 1213609982u, 0, NEXTAFTERF_TOLERANCE, 0}, +{592, 1246902946u, 3064047808u, 1246902945u, 0, NEXTAFTERF_TOLERANCE, 0}, +{593, 995850843u, 1332031130u, 995850844u, 0, NEXTAFTERF_TOLERANCE, 0}, +{594, 3362082828u, 3374056268u, 3362082829u, 0, NEXTAFTERF_TOLERANCE, 0}, +{595, 1029480631u, 3047777170u, 1029480630u, 0, NEXTAFTERF_TOLERANCE, 0}, +{596, 3153568584u, 3106514232u, 3153568583u, 0, NEXTAFTERF_TOLERANCE, 0}, +{597, 3384988527u, 3109485565u, 3384988526u, 0, NEXTAFTERF_TOLERANCE, 0}, +{598, 3235395924u, 1132055244u, 3235395923u, 0, NEXTAFTERF_TOLERANCE, 0}, +{599, 1228636133u, 886552820u, 1228636132u, 0, NEXTAFTERF_TOLERANCE, 0}, +{600, 3161654634u, 3335899347u, 3161654635u, 0, NEXTAFTERF_TOLERANCE, 0}, +{601, 3162655243u, 3307203982u, 3162655244u, 0, NEXTAFTERF_TOLERANCE, 0}, +{602, 1165476654u, 3350219111u, 1165476653u, 0, NEXTAFTERF_TOLERANCE, 0}, +{603, 1017239798u, 3438501281u, 1017239797u, 0, NEXTAFTERF_TOLERANCE, 0}, +{604, 1149651309u, 970030475u, 1149651308u, 0, NEXTAFTERF_TOLERANCE, 0}, +{605, 1111943722u, 3122211334u, 1111943721u, 0, NEXTAFTERF_TOLERANCE, 0}, +{606, 1189849849u, 3382739134u, 1189849848u, 0, NEXTAFTERF_TOLERANCE, 0}, +{607, 3204848496u, 3141519085u, 3204848495u, 0, NEXTAFTERF_TOLERANCE, 0}, +{608, 1249758327u, 3104759211u, 1249758326u, 0, NEXTAFTERF_TOLERANCE, 0}, +{609, 3092982276u, 3445282331u, 3092982277u, 0, NEXTAFTERF_TOLERANCE, 0}, +{610, 1168098747u, 1316854744u, 1168098748u, 0, NEXTAFTERF_TOLERANCE, 0}, +{611, 892549317u, 1179637545u, 892549318u, 0, NEXTAFTERF_TOLERANCE, 0}, +{612, 3301009024u, 3406174560u, 3301009025u, 0, NEXTAFTERF_TOLERANCE, 0}, +{613, 3233089227u, 1212652543u, 3233089226u, 0, NEXTAFTERF_TOLERANCE, 0}, +{614, 3218245284u, 1238873830u, 3218245283u, 0, NEXTAFTERF_TOLERANCE, 0}, +{615, 3215981890u, 3240474694u, 3215981891u, 0, NEXTAFTERF_TOLERANCE, 0}, +{616, 1266687209u, 3092038122u, 1266687208u, 0, NEXTAFTERF_TOLERANCE, 0}, +{617, 3487959775u, 3331372071u, 3487959774u, 0, NEXTAFTERF_TOLERANCE, 0}, +{618, 3345065699u, 3282620725u, 3345065698u, 0, NEXTAFTERF_TOLERANCE, 0}, +{619, 935847271u, 1067255804u, 935847272u, 0, NEXTAFTERF_TOLERANCE, 0}, +{620, 3410336089u, 1111437780u, 3410336088u, 0, NEXTAFTERF_TOLERANCE, 0}, +{621, 3082940740u, 1336840432u, 3082940739u, 0, NEXTAFTERF_TOLERANCE, 0}, +{622, 1141063391u, 1168908072u, 1141063392u, 0, NEXTAFTERF_TOLERANCE, 0}, +{623, 3059263153u, 3067795684u, 3059263154u, 0, NEXTAFTERF_TOLERANCE, 0}, +{624, 3353679791u, 897158391u, 3353679790u, 0, NEXTAFTERF_TOLERANCE, 0}, +{625, 1001823878u, 1016826861u, 1001823879u, 0, NEXTAFTERF_TOLERANCE, 0}, +{626, 1009130212u, 1004302940u, 1009130211u, 0, NEXTAFTERF_TOLERANCE, 0}, +{627, 3367127535u, 943136342u, 3367127534u, 0, NEXTAFTERF_TOLERANCE, 0}, +{628, 1032920919u, 3449126417u, 1032920918u, 0, NEXTAFTERF_TOLERANCE, 0}, +{629, 3281952870u, 3147012185u, 3281952869u, 0, NEXTAFTERF_TOLERANCE, 0}, +{630, 1237868497u, 3048281802u, 1237868496u, 0, NEXTAFTERF_TOLERANCE, 0}, +{631, 1153753924u, 3322269242u, 1153753923u, 0, NEXTAFTERF_TOLERANCE, 0}, +{632, 1120261759u, 892210998u, 1120261758u, 0, NEXTAFTERF_TOLERANCE, 0}, +{633, 3226328360u, 3366432856u, 3226328361u, 0, NEXTAFTERF_TOLERANCE, 0}, +{634, 3349595986u, 3251588707u, 3349595985u, 0, NEXTAFTERF_TOLERANCE, 0}, +{635, 3166889490u, 3306023523u, 3166889491u, 0, NEXTAFTERF_TOLERANCE, 0}, +{636, 1087750238u, 1099325523u, 1087750239u, 0, NEXTAFTERF_TOLERANCE, 0}, +{637, 3121620061u, 3359488363u, 3121620062u, 0, NEXTAFTERF_TOLERANCE, 0}, +{638, 1066116543u, 3072159933u, 1066116542u, 0, NEXTAFTERF_TOLERANCE, 0}, +{639, 3051923237u, 3364074347u, 3051923238u, 0, NEXTAFTERF_TOLERANCE, 0}, +{640, 1030612298u, 3345396001u, 1030612297u, 0, NEXTAFTERF_TOLERANCE, 0}, +{641, 1331680743u, 1009396165u, 1331680742u, 0, NEXTAFTERF_TOLERANCE, 0}, +{642, 3060774997u, 1326067357u, 3060774996u, 0, NEXTAFTERF_TOLERANCE, 0}, +{643, 887589411u, 1292305693u, 887589412u, 0, NEXTAFTERF_TOLERANCE, 0}, +{644, 1045232522u, 3234993273u, 1045232521u, 0, NEXTAFTERF_TOLERANCE, 0}, +{645, 3119858470u, 962515365u, 3119858469u, 0, NEXTAFTERF_TOLERANCE, 0}, +{646, 3349432725u, 928848003u, 3349432724u, 0, NEXTAFTERF_TOLERANCE, 0}, +{647, 912423027u, 3184646319u, 912423026u, 0, NEXTAFTERF_TOLERANCE, 0}, +{648, 3228795133u, 3273940030u, 3228795134u, 0, NEXTAFTERF_TOLERANCE, 0}, +{649, 3194674746u, 3112269709u, 3194674745u, 0, NEXTAFTERF_TOLERANCE, 0}, +{650, 3296784303u, 3276182352u, 3296784302u, 0, NEXTAFTERF_TOLERANCE, 0}, +{651, 965402291u, 3107104376u, 965402290u, 0, NEXTAFTERF_TOLERANCE, 0}, +{652, 3388153589u, 3426245389u, 3388153590u, 0, NEXTAFTERF_TOLERANCE, 0}, +{653, 1133410485u, 3329658993u, 1133410484u, 0, NEXTAFTERF_TOLERANCE, 0}, +{654, 3136790322u, 1088652637u, 3136790321u, 0, NEXTAFTERF_TOLERANCE, 0}, +{655, 3369970587u, 959121458u, 3369970586u, 0, NEXTAFTERF_TOLERANCE, 0}, +{656, 1270451568u, 928393353u, 1270451567u, 0, NEXTAFTERF_TOLERANCE, 0}, +{657, 989498922u, 3088358419u, 989498921u, 0, NEXTAFTERF_TOLERANCE, 0}, +{658, 1280215674u, 3148135875u, 1280215673u, 0, NEXTAFTERF_TOLERANCE, 0}, +{659, 1171873518u, 954709738u, 1171873517u, 0, NEXTAFTERF_TOLERANCE, 0}, +{660, 3298258100u, 935525182u, 3298258099u, 0, NEXTAFTERF_TOLERANCE, 0}, +{661, 1001897182u, 3191875320u, 1001897181u, 0, NEXTAFTERF_TOLERANCE, 0}, +{662, 3152777939u, 3245830463u, 3152777940u, 0, NEXTAFTERF_TOLERANCE, 0}, +{663, 985903305u, 3333087577u, 985903304u, 0, NEXTAFTERF_TOLERANCE, 0}, +{664, 982612185u, 923582663u, 982612184u, 0, NEXTAFTERF_TOLERANCE, 0}, +{665, 3267868136u, 1208301947u, 3267868135u, 0, NEXTAFTERF_TOLERANCE, 0}, +{666, 3319048157u, 1172271145u, 3319048156u, 0, NEXTAFTERF_TOLERANCE, 0}, +{667, 3301461672u, 1233693827u, 3301461671u, 0, NEXTAFTERF_TOLERANCE, 0}, +{668, 3364525678u, 3089849671u, 3364525677u, 0, NEXTAFTERF_TOLERANCE, 0}, +{669, 931441127u, 1133424555u, 931441128u, 0, NEXTAFTERF_TOLERANCE, 0}, +{670, 3146660041u, 3143695961u, 3146660040u, 0, NEXTAFTERF_TOLERANCE, 0}, +{671, 3467121799u, 3023584354u, 3467121798u, 0, NEXTAFTERF_TOLERANCE, 0}, +{672, 1151257041u, 3084216427u, 1151257040u, 0, NEXTAFTERF_TOLERANCE, 0}, +{673, 3097873255u, 3219266640u, 3097873256u, 0, NEXTAFTERF_TOLERANCE, 0}, +{674, 3130670309u, 3192399254u, 3130670310u, 0, NEXTAFTERF_TOLERANCE, 0}, +{675, 1017573824u, 3130901062u, 1017573823u, 0, NEXTAFTERF_TOLERANCE, 0}, +{676, 1258369714u, 3462258576u, 1258369713u, 0, NEXTAFTERF_TOLERANCE, 0}, +{677, 1216602683u, 3371396332u, 1216602682u, 0, NEXTAFTERF_TOLERANCE, 0}, +{678, 3297265739u, 1214184410u, 3297265738u, 0, NEXTAFTERF_TOLERANCE, 0}, +{679, 1071940738u, 3311731012u, 1071940737u, 0, NEXTAFTERF_TOLERANCE, 0}, +{680, 922601356u, 3337171870u, 922601355u, 0, NEXTAFTERF_TOLERANCE, 0}, +{681, 3462285635u, 3444030332u, 3462285634u, 0, NEXTAFTERF_TOLERANCE, 0}, +{682, 3357177805u, 1085464241u, 3357177804u, 0, NEXTAFTERF_TOLERANCE, 0}, +{683, 3049120080u, 900832851u, 3049120079u, 0, NEXTAFTERF_TOLERANCE, 0}, +{684, 1153863660u, 1011991342u, 1153863659u, 0, NEXTAFTERF_TOLERANCE, 0}, +{685, 3034243695u, 917098003u, 3034243694u, 0, NEXTAFTERF_TOLERANCE, 0}, +{686, 1249365132u, 3278686216u, 1249365131u, 0, NEXTAFTERF_TOLERANCE, 0}, +{687, 3046215730u, 3211219980u, 3046215731u, 0, NEXTAFTERF_TOLERANCE, 0}, +{688, 3047251716u, 1090787353u, 3047251715u, 0, NEXTAFTERF_TOLERANCE, 0}, +{689, 3131219358u, 3471261157u, 3131219359u, 0, NEXTAFTERF_TOLERANCE, 0}, +{690, 3222096285u, 1198013705u, 3222096284u, 0, NEXTAFTERF_TOLERANCE, 0}, +{691, 1297708818u, 3079166173u, 1297708817u, 0, NEXTAFTERF_TOLERANCE, 0}, +{692, 3345532722u, 3383708463u, 3345532723u, 0, NEXTAFTERF_TOLERANCE, 0}, +{693, 3418753236u, 3481843070u, 3418753237u, 0, NEXTAFTERF_TOLERANCE, 0}, +{694, 1277417964u, 3487506626u, 1277417963u, 0, NEXTAFTERF_TOLERANCE, 0}, +{695, 987577257u, 1152077087u, 987577258u, 0, NEXTAFTERF_TOLERANCE, 0}, +{696, 3161606610u, 3190282989u, 3161606611u, 0, NEXTAFTERF_TOLERANCE, 0}, +{697, 888030585u, 3062367380u, 888030584u, 0, NEXTAFTERF_TOLERANCE, 0}, +{698, 1043442869u, 3311393817u, 1043442868u, 0, NEXTAFTERF_TOLERANCE, 0}, +{699, 3320923228u, 3464544249u, 3320923229u, 0, NEXTAFTERF_TOLERANCE, 0}, +{700, 1337400405u, 3488844154u, 1337400404u, 0, NEXTAFTERF_TOLERANCE, 0}, +{701, 3400348640u, 3129868490u, 3400348639u, 0, NEXTAFTERF_TOLERANCE, 0}, +{702, 1250249095u, 1069023744u, 1250249094u, 0, NEXTAFTERF_TOLERANCE, 0}, +{703, 3284411233u, 1173613526u, 3284411232u, 0, NEXTAFTERF_TOLERANCE, 0}, +{704, 1215968622u, 3469884568u, 1215968621u, 0, NEXTAFTERF_TOLERANCE, 0}, +{705, 3061638260u, 3116222327u, 3061638261u, 0, NEXTAFTERF_TOLERANCE, 0}, +{706, 1025404104u, 1066370251u, 1025404105u, 0, NEXTAFTERF_TOLERANCE, 0}, +{707, 3138086437u, 3195983510u, 3138086438u, 0, NEXTAFTERF_TOLERANCE, 0}, +{708, 3091024506u, 3456196859u, 3091024507u, 0, NEXTAFTERF_TOLERANCE, 0}, +{709, 3362748242u, 3369843597u, 3362748243u, 0, NEXTAFTERF_TOLERANCE, 0}, +{710, 3099671635u, 3218383623u, 3099671636u, 0, NEXTAFTERF_TOLERANCE, 0}, +{711, 1252237719u, 1121169249u, 1252237718u, 0, NEXTAFTERF_TOLERANCE, 0}, +{712, 3327895594u, 1224511805u, 3327895593u, 0, NEXTAFTERF_TOLERANCE, 0}, +{713, 3082454432u, 889268276u, 3082454431u, 0, NEXTAFTERF_TOLERANCE, 0}, +{714, 3396161504u, 1182798837u, 3396161503u, 0, NEXTAFTERF_TOLERANCE, 0}, +{715, 1099710167u, 887180181u, 1099710166u, 0, NEXTAFTERF_TOLERANCE, 0}, +{716, 1157186482u, 1288722647u, 1157186483u, 0, NEXTAFTERF_TOLERANCE, 0}, +{717, 1282110851u, 3176633124u, 1282110850u, 0, NEXTAFTERF_TOLERANCE, 0}, +{718, 3477008113u, 1331845018u, 3477008112u, 0, NEXTAFTERF_TOLERANCE, 0}, +{719, 3292127294u, 3409957764u, 3292127295u, 0, NEXTAFTERF_TOLERANCE, 0}, +{720, 1123357102u, 3281307320u, 1123357101u, 0, NEXTAFTERF_TOLERANCE, 0}, +{721, 1106837025u, 3088080674u, 1106837024u, 0, NEXTAFTERF_TOLERANCE, 0}, +{722, 1049949008u, 1130799489u, 1049949009u, 0, NEXTAFTERF_TOLERANCE, 0}, +{723, 1253017688u, 942062372u, 1253017687u, 0, NEXTAFTERF_TOLERANCE, 0}, +{724, 1108543194u, 3281299199u, 1108543193u, 0, NEXTAFTERF_TOLERANCE, 0}, +{725, 3087985411u, 1238341456u, 3087985410u, 0, NEXTAFTERF_TOLERANCE, 0}, +{726, 3163283126u, 1328636961u, 3163283125u, 0, NEXTAFTERF_TOLERANCE, 0}, +{727, 1160162706u, 1264067367u, 1160162707u, 0, NEXTAFTERF_TOLERANCE, 0}, +{728, 3025340297u, 1193925540u, 3025340296u, 0, NEXTAFTERF_TOLERANCE, 0}, +{729, 3438080027u, 3107114149u, 3438080026u, 0, NEXTAFTERF_TOLERANCE, 0}, +{730, 3344574751u, 3111270744u, 3344574750u, 0, NEXTAFTERF_TOLERANCE, 0}, +{731, 1152416724u, 962669179u, 1152416723u, 0, NEXTAFTERF_TOLERANCE, 0}, +{732, 1218239308u, 1126238113u, 1218239307u, 0, NEXTAFTERF_TOLERANCE, 0}, +{733, 3263310567u, 1030748197u, 3263310566u, 0, NEXTAFTERF_TOLERANCE, 0}, +{734, 3041998669u, 1160635263u, 3041998668u, 0, NEXTAFTERF_TOLERANCE, 0}, +{735, 972485427u, 1124312043u, 972485428u, 0, NEXTAFTERF_TOLERANCE, 0}, +{736, 3290264612u, 1124703898u, 3290264611u, 0, NEXTAFTERF_TOLERANCE, 0}, +{737, 3222106584u, 1183748648u, 3222106583u, 0, NEXTAFTERF_TOLERANCE, 0}, +{738, 947914771u, 3181847068u, 947914770u, 0, NEXTAFTERF_TOLERANCE, 0}, +{739, 3167730654u, 3195765940u, 3167730655u, 0, NEXTAFTERF_TOLERANCE, 0}, +{740, 1098530298u, 3255870890u, 1098530297u, 0, NEXTAFTERF_TOLERANCE, 0}, +{741, 1277649137u, 961171401u, 1277649136u, 0, NEXTAFTERF_TOLERANCE, 0}, +{742, 3203377685u, 1306427476u, 3203377684u, 0, NEXTAFTERF_TOLERANCE, 0}, +{743, 3090306474u, 3124785016u, 3090306475u, 0, NEXTAFTERF_TOLERANCE, 0}, +{744, 3244032016u, 3045313345u, 3244032015u, 0, NEXTAFTERF_TOLERANCE, 0}, +{745, 3033122376u, 3049877065u, 3033122377u, 0, NEXTAFTERF_TOLERANCE, 0}, +{746, 1096155623u, 1256423752u, 1096155624u, 0, NEXTAFTERF_TOLERANCE, 0}, +{747, 873151908u, 3246562559u, 873151907u, 0, NEXTAFTERF_TOLERANCE, 0}, +{748, 3238729605u, 1298769842u, 3238729604u, 0, NEXTAFTERF_TOLERANCE, 0}, +{749, 3317196817u, 989537151u, 3317196816u, 0, NEXTAFTERF_TOLERANCE, 0}, +{750, 3345634950u, 959901149u, 3345634949u, 0, NEXTAFTERF_TOLERANCE, 0}, +{751, 3189860276u, 883598767u, 3189860275u, 0, NEXTAFTERF_TOLERANCE, 0}, +{752, 887311687u, 1175312255u, 887311688u, 0, NEXTAFTERF_TOLERANCE, 0}, +{753, 3396917283u, 3066326686u, 3396917282u, 0, NEXTAFTERF_TOLERANCE, 0}, +{754, 3317032737u, 3143803722u, 3317032736u, 0, NEXTAFTERF_TOLERANCE, 0}, +{755, 1200051436u, 1163802508u, 1200051435u, 0, NEXTAFTERF_TOLERANCE, 0}, +{756, 3105291012u, 1194385202u, 3105291011u, 0, NEXTAFTERF_TOLERANCE, 0}, +{757, 1306520561u, 957302464u, 1306520560u, 0, NEXTAFTERF_TOLERANCE, 0}, +{758, 3475052219u, 1284049853u, 3475052218u, 0, NEXTAFTERF_TOLERANCE, 0}, +{759, 3085636260u, 1107682820u, 3085636259u, 0, NEXTAFTERF_TOLERANCE, 0}, +{760, 3393227708u, 3271879112u, 3393227707u, 0, NEXTAFTERF_TOLERANCE, 0}, +{761, 3349005404u, 3080993030u, 3349005403u, 0, NEXTAFTERF_TOLERANCE, 0}, +{762, 3154720153u, 3443720494u, 3154720154u, 0, NEXTAFTERF_TOLERANCE, 0}, +{763, 1262863321u, 1219003129u, 1262863320u, 0, NEXTAFTERF_TOLERANCE, 0}, +{764, 882902102u, 1224362550u, 882902103u, 0, NEXTAFTERF_TOLERANCE, 0}, +{765, 1053387478u, 3184880021u, 1053387477u, 0, NEXTAFTERF_TOLERANCE, 0}, +{766, 3387653691u, 3347783852u, 3387653690u, 0, NEXTAFTERF_TOLERANCE, 0}, +{767, 3136364836u, 1018492227u, 3136364835u, 0, NEXTAFTERF_TOLERANCE, 0}, +{768, 1338680611u, 1166078045u, 1338680610u, 0, NEXTAFTERF_TOLERANCE, 0}, +{769, 1112891928u, 3074730425u, 1112891927u, 0, NEXTAFTERF_TOLERANCE, 0}, +{770, 893449284u, 1052877339u, 893449285u, 0, NEXTAFTERF_TOLERANCE, 0}, +{771, 892311459u, 1097338393u, 892311460u, 0, NEXTAFTERF_TOLERANCE, 0}, +{772, 3105373037u, 3246705916u, 3105373038u, 0, NEXTAFTERF_TOLERANCE, 0}, +{773, 1190105283u, 3033907262u, 1190105282u, 0, NEXTAFTERF_TOLERANCE, 0}, +{774, 1011225926u, 1180485180u, 1011225927u, 0, NEXTAFTERF_TOLERANCE, 0}, +{775, 1043025031u, 987068973u, 1043025030u, 0, NEXTAFTERF_TOLERANCE, 0}, +{776, 3125834184u, 896953754u, 3125834183u, 0, NEXTAFTERF_TOLERANCE, 0}, +{777, 1120888322u, 1086209113u, 1120888321u, 0, NEXTAFTERF_TOLERANCE, 0}, +{778, 1315217243u, 3396371713u, 1315217242u, 0, NEXTAFTERF_TOLERANCE, 0}, +{779, 3137758475u, 1039403054u, 3137758474u, 0, NEXTAFTERF_TOLERANCE, 0}, +{780, 1040617590u, 1034835971u, 1040617589u, 0, NEXTAFTERF_TOLERANCE, 0}, +{781, 955384253u, 3344785562u, 955384252u, 0, NEXTAFTERF_TOLERANCE, 0}, +{782, 3061417900u, 1172208065u, 3061417899u, 0, NEXTAFTERF_TOLERANCE, 0}, +{783, 904255535u, 1019967545u, 904255536u, 0, NEXTAFTERF_TOLERANCE, 0}, +{784, 1022984119u, 3113891410u, 1022984118u, 0, NEXTAFTERF_TOLERANCE, 0}, +{785, 997362368u, 3112875428u, 997362367u, 0, NEXTAFTERF_TOLERANCE, 0}, +{786, 900933520u, 1100589187u, 900933521u, 0, NEXTAFTERF_TOLERANCE, 0}, +{787, 1168623062u, 1143306482u, 1168623061u, 0, NEXTAFTERF_TOLERANCE, 0}, +{788, 878737490u, 3269908326u, 878737489u, 0, NEXTAFTERF_TOLERANCE, 0}, +{789, 1039827284u, 1072928888u, 1039827285u, 0, NEXTAFTERF_TOLERANCE, 0}, +{790, 1021564080u, 1064468397u, 1021564081u, 0, NEXTAFTERF_TOLERANCE, 0}, +{791, 3458669745u, 3033299853u, 3458669744u, 0, NEXTAFTERF_TOLERANCE, 0}, +{792, 3327516316u, 3405380971u, 3327516317u, 0, NEXTAFTERF_TOLERANCE, 0}, +{793, 1040711112u, 3229444200u, 1040711111u, 0, NEXTAFTERF_TOLERANCE, 0}, +{794, 1134528351u, 3365952513u, 1134528350u, 0, NEXTAFTERF_TOLERANCE, 0}, +{795, 3039884464u, 1170612785u, 3039884463u, 0, NEXTAFTERF_TOLERANCE, 0}, +{796, 3414352838u, 3350285760u, 3414352837u, 0, NEXTAFTERF_TOLERANCE, 0}, +{797, 1133689539u, 1067460093u, 1133689538u, 0, NEXTAFTERF_TOLERANCE, 0}, +{798, 3455688478u, 3333091960u, 3455688477u, 0, NEXTAFTERF_TOLERANCE, 0}, +{799, 1137634874u, 1137038869u, 1137634873u, 0, NEXTAFTERF_TOLERANCE, 0}, +{800, 3415502662u, 955510692u, 3415502661u, 0, NEXTAFTERF_TOLERANCE, 0}, +{801, 954999730u, 969618597u, 954999731u, 0, NEXTAFTERF_TOLERANCE, 0}, +{802, 1066157309u, 3241712664u, 1066157308u, 0, NEXTAFTERF_TOLERANCE, 0}, +{803, 3436353675u, 1174967495u, 3436353674u, 0, NEXTAFTERF_TOLERANCE, 0}, +{804, 3108347547u, 3434003435u, 3108347548u, 0, NEXTAFTERF_TOLERANCE, 0}, +{805, 3064200154u, 3158080507u, 3064200155u, 0, NEXTAFTERF_TOLERANCE, 0}, +{806, 3272661536u, 3461799138u, 3272661537u, 0, NEXTAFTERF_TOLERANCE, 0}, +{807, 1170245333u, 1233406410u, 1170245334u, 0, NEXTAFTERF_TOLERANCE, 0}, +{808, 1219052056u, 3369557946u, 1219052055u, 0, NEXTAFTERF_TOLERANCE, 0}, +{809, 3318983619u, 3259663338u, 3318983618u, 0, NEXTAFTERF_TOLERANCE, 0}, +{810, 3146190320u, 889646054u, 3146190319u, 0, NEXTAFTERF_TOLERANCE, 0}, +{811, 1299683827u, 966031619u, 1299683826u, 0, NEXTAFTERF_TOLERANCE, 0}, +{812, 3190796331u, 1320011850u, 3190796330u, 0, NEXTAFTERF_TOLERANCE, 0}, +{813, 3086068902u, 3484245751u, 3086068903u, 0, NEXTAFTERF_TOLERANCE, 0}, +{814, 3064155399u, 3176569312u, 3064155400u, 0, NEXTAFTERF_TOLERANCE, 0}, +{815, 3040314717u, 1071290674u, 3040314716u, 0, NEXTAFTERF_TOLERANCE, 0}, +{816, 3257224022u, 3361778245u, 3257224023u, 0, NEXTAFTERF_TOLERANCE, 0}, +{817, 1229268598u, 1066965677u, 1229268597u, 0, NEXTAFTERF_TOLERANCE, 0}, +{818, 1086717248u, 3423795374u, 1086717247u, 0, NEXTAFTERF_TOLERANCE, 0}, +{819, 3434884607u, 3029593823u, 3434884606u, 0, NEXTAFTERF_TOLERANCE, 0}, +{820, 3464955606u, 1017987696u, 3464955605u, 0, NEXTAFTERF_TOLERANCE, 0}, +{821, 1025278524u, 3121856207u, 1025278523u, 0, NEXTAFTERF_TOLERANCE, 0}, +{822, 1242829722u, 3233935671u, 1242829721u, 0, NEXTAFTERF_TOLERANCE, 0}, +{823, 3075149137u, 1117325737u, 3075149136u, 0, NEXTAFTERF_TOLERANCE, 0}, +{824, 1200927971u, 1317167489u, 1200927972u, 0, NEXTAFTERF_TOLERANCE, 0}, +{825, 3326858092u, 3452602832u, 3326858093u, 0, NEXTAFTERF_TOLERANCE, 0}, +{826, 3184801644u, 1137974313u, 3184801643u, 0, NEXTAFTERF_TOLERANCE, 0}, +{827, 1136052740u, 3244616020u, 1136052739u, 0, NEXTAFTERF_TOLERANCE, 0}, +{828, 1015670780u, 1101217251u, 1015670781u, 0, NEXTAFTERF_TOLERANCE, 0}, +{829, 1012543234u, 1116520440u, 1012543235u, 0, NEXTAFTERF_TOLERANCE, 0}, +{830, 3316611992u, 3394732912u, 3316611993u, 0, NEXTAFTERF_TOLERANCE, 0}, +{831, 1087942795u, 3316660295u, 1087942794u, 0, NEXTAFTERF_TOLERANCE, 0}, +{832, 3426365713u, 3069778532u, 3426365712u, 0, NEXTAFTERF_TOLERANCE, 0}, +{833, 3066654389u, 3443934204u, 3066654390u, 0, NEXTAFTERF_TOLERANCE, 0}, +{834, 3295326432u, 1313396175u, 3295326431u, 0, NEXTAFTERF_TOLERANCE, 0}, +{835, 3318835308u, 3277583511u, 3318835307u, 0, NEXTAFTERF_TOLERANCE, 0}, +{836, 3283555717u, 891875120u, 3283555716u, 0, NEXTAFTERF_TOLERANCE, 0}, +{837, 3040485181u, 3375450886u, 3040485182u, 0, NEXTAFTERF_TOLERANCE, 0}, +{838, 3388772093u, 1032597076u, 3388772092u, 0, NEXTAFTERF_TOLERANCE, 0}, +{839, 954670189u, 1144923689u, 954670190u, 0, NEXTAFTERF_TOLERANCE, 0}, +{840, 1319200415u, 3387555900u, 1319200414u, 0, NEXTAFTERF_TOLERANCE, 0}, +{841, 1279324488u, 3228401212u, 1279324487u, 0, NEXTAFTERF_TOLERANCE, 0}, +{842, 3455131757u, 1260217257u, 3455131756u, 0, NEXTAFTERF_TOLERANCE, 0}, +{843, 1246947517u, 1087951909u, 1246947516u, 0, NEXTAFTERF_TOLERANCE, 0}, +{844, 3433761025u, 3060143904u, 3433761024u, 0, NEXTAFTERF_TOLERANCE, 0}, +{845, 3201187455u, 900233172u, 3201187454u, 0, NEXTAFTERF_TOLERANCE, 0}, +{846, 1173247961u, 1191127979u, 1173247962u, 0, NEXTAFTERF_TOLERANCE, 0}, +{847, 3037297123u, 3346394818u, 3037297124u, 0, NEXTAFTERF_TOLERANCE, 0}, +{848, 3248534678u, 1323683800u, 3248534677u, 0, NEXTAFTERF_TOLERANCE, 0}, +{849, 3083019343u, 3033309444u, 3083019342u, 0, NEXTAFTERF_TOLERANCE, 0}, +{850, 3042018375u, 3203882372u, 3042018376u, 0, NEXTAFTERF_TOLERANCE, 0}, +{851, 1082862511u, 3032804719u, 1082862510u, 0, NEXTAFTERF_TOLERANCE, 0}, +{852, 3157626955u, 3483653298u, 3157626956u, 0, NEXTAFTERF_TOLERANCE, 0}, +{853, 881101379u, 1190838126u, 881101380u, 0, NEXTAFTERF_TOLERANCE, 0}, +{854, 3182695954u, 3256861672u, 3182695955u, 0, NEXTAFTERF_TOLERANCE, 0}, +{855, 1105291533u, 3482971524u, 1105291532u, 0, NEXTAFTERF_TOLERANCE, 0}, +{856, 1016023520u, 3227712090u, 1016023519u, 0, NEXTAFTERF_TOLERANCE, 0}, +{857, 3370691006u, 1295870514u, 3370691005u, 0, NEXTAFTERF_TOLERANCE, 0}, +{858, 1156767169u, 1049756240u, 1156767168u, 0, NEXTAFTERF_TOLERANCE, 0}, +{859, 3077020499u, 894671462u, 3077020498u, 0, NEXTAFTERF_TOLERANCE, 0}, +{860, 1104284039u, 3040211914u, 1104284038u, 0, NEXTAFTERF_TOLERANCE, 0}, +{861, 3335212901u, 3486414589u, 3335212902u, 0, NEXTAFTERF_TOLERANCE, 0}, +{862, 1093697541u, 3193708441u, 1093697540u, 0, NEXTAFTERF_TOLERANCE, 0}, +{863, 3266691185u, 1160074593u, 3266691184u, 0, NEXTAFTERF_TOLERANCE, 0}, +{864, 3179003144u, 1108615803u, 3179003143u, 0, NEXTAFTERF_TOLERANCE, 0}, +{865, 3424086808u, 3260140004u, 3424086807u, 0, NEXTAFTERF_TOLERANCE, 0}, +{866, 3353608773u, 1134068114u, 3353608772u, 0, NEXTAFTERF_TOLERANCE, 0}, +{867, 973664327u, 1319516167u, 973664328u, 0, NEXTAFTERF_TOLERANCE, 0}, +{868, 882878091u, 3136970767u, 882878090u, 0, NEXTAFTERF_TOLERANCE, 0}, +{869, 927582555u, 947955456u, 927582556u, 0, NEXTAFTERF_TOLERANCE, 0}, +{870, 3111440310u, 3067634077u, 3111440309u, 0, NEXTAFTERF_TOLERANCE, 0}, +{871, 3476083859u, 966439623u, 3476083858u, 0, NEXTAFTERF_TOLERANCE, 0}, +{872, 3038754840u, 932009686u, 3038754839u, 0, NEXTAFTERF_TOLERANCE, 0}, +{873, 979878744u, 1232482646u, 979878745u, 0, NEXTAFTERF_TOLERANCE, 0}, +{874, 3464546616u, 3205527253u, 3464546615u, 0, NEXTAFTERF_TOLERANCE, 0}, +{875, 1002542205u, 3152136093u, 1002542204u, 0, NEXTAFTERF_TOLERANCE, 0}, +{876, 3443552129u, 3165561391u, 3443552128u, 0, NEXTAFTERF_TOLERANCE, 0}, +{877, 1287620154u, 3119707283u, 1287620153u, 0, NEXTAFTERF_TOLERANCE, 0}, +{878, 946058434u, 1249928879u, 946058435u, 0, NEXTAFTERF_TOLERANCE, 0}, +{879, 3073260205u, 3093124531u, 3073260206u, 0, NEXTAFTERF_TOLERANCE, 0}, +{880, 1245702957u, 894348966u, 1245702956u, 0, NEXTAFTERF_TOLERANCE, 0}, +{881, 989655126u, 1308376568u, 989655127u, 0, NEXTAFTERF_TOLERANCE, 0}, +{882, 1002715618u, 1191006977u, 1002715619u, 0, NEXTAFTERF_TOLERANCE, 0}, +{883, 3087802274u, 897541752u, 3087802273u, 0, NEXTAFTERF_TOLERANCE, 0}, +{884, 1000863905u, 1196831314u, 1000863906u, 0, NEXTAFTERF_TOLERANCE, 0}, +{885, 3415763001u, 3032518431u, 3415763000u, 0, NEXTAFTERF_TOLERANCE, 0}, +{886, 3283471961u, 1260093226u, 3283471960u, 0, NEXTAFTERF_TOLERANCE, 0}, +{887, 3311210827u, 1192192264u, 3311210826u, 0, NEXTAFTERF_TOLERANCE, 0}, +{888, 1198307901u, 1116328249u, 1198307900u, 0, NEXTAFTERF_TOLERANCE, 0}, +{889, 1288901567u, 1296370667u, 1288901568u, 0, NEXTAFTERF_TOLERANCE, 0}, +{890, 922255363u, 958305289u, 922255364u, 0, NEXTAFTERF_TOLERANCE, 0}, +{891, 1113104661u, 944376032u, 1113104660u, 0, NEXTAFTERF_TOLERANCE, 0}, +{892, 948856035u, 1015466475u, 948856036u, 0, NEXTAFTERF_TOLERANCE, 0}, +{893, 1062512367u, 3229559531u, 1062512366u, 0, NEXTAFTERF_TOLERANCE, 0}, +{894, 1162027071u, 3308983387u, 1162027070u, 0, NEXTAFTERF_TOLERANCE, 0}, +{895, 1034561811u, 1054043114u, 1034561812u, 0, NEXTAFTERF_TOLERANCE, 0}, +{896, 3271615417u, 3209997200u, 3271615416u, 0, NEXTAFTERF_TOLERANCE, 0}, +{897, 1042014529u, 1146708584u, 1042014530u, 0, NEXTAFTERF_TOLERANCE, 0}, +{898, 1177157787u, 3090208179u, 1177157786u, 0, NEXTAFTERF_TOLERANCE, 0}, +{899, 3196144817u, 1056118717u, 3196144816u, 0, NEXTAFTERF_TOLERANCE, 0}, +{900, 1309658335u, 1010219988u, 1309658334u, 0, NEXTAFTERF_TOLERANCE, 0}, +{901, 3100289712u, 3456334210u, 3100289713u, 0, NEXTAFTERF_TOLERANCE, 0}, +{902, 3375507013u, 1306310823u, 3375507012u, 0, NEXTAFTERF_TOLERANCE, 0}, +{903, 3460699001u, 3096700943u, 3460699000u, 0, NEXTAFTERF_TOLERANCE, 0}, +{904, 3079231719u, 1044386263u, 3079231718u, 0, NEXTAFTERF_TOLERANCE, 0}, +{905, 3093951884u, 1014115231u, 3093951883u, 0, NEXTAFTERF_TOLERANCE, 0}, +{906, 3468023178u, 1209565017u, 3468023177u, 0, NEXTAFTERF_TOLERANCE, 0}, +{907, 1204196034u, 3298625731u, 1204196033u, 0, NEXTAFTERF_TOLERANCE, 0}, +{908, 909696559u, 1163075690u, 909696560u, 0, NEXTAFTERF_TOLERANCE, 0}, +{909, 1161439847u, 943449277u, 1161439846u, 0, NEXTAFTERF_TOLERANCE, 0}, +{910, 908663107u, 939489763u, 908663108u, 0, NEXTAFTERF_TOLERANCE, 0}, +{911, 1055319316u, 3261813492u, 1055319315u, 0, NEXTAFTERF_TOLERANCE, 0}, +{912, 1084378658u, 1009650785u, 1084378657u, 0, NEXTAFTERF_TOLERANCE, 0}, +{913, 3053887750u, 3341786453u, 3053887751u, 0, NEXTAFTERF_TOLERANCE, 0}, +{914, 3022828828u, 881335251u, 3022828827u, 0, NEXTAFTERF_TOLERANCE, 0}, +{915, 1123114742u, 1229815537u, 1123114743u, 0, NEXTAFTERF_TOLERANCE, 0}, +{916, 1258114435u, 1291336083u, 1258114436u, 0, NEXTAFTERF_TOLERANCE, 0}, +{917, 3468040845u, 3066966245u, 3468040844u, 0, NEXTAFTERF_TOLERANCE, 0}, +{918, 1178825761u, 1113195286u, 1178825760u, 0, NEXTAFTERF_TOLERANCE, 0}, +{919, 3059266302u, 878503862u, 3059266301u, 0, NEXTAFTERF_TOLERANCE, 0}, +{920, 3223384012u, 1130486973u, 3223384011u, 0, NEXTAFTERF_TOLERANCE, 0}, +{921, 1019964626u, 1235133609u, 1019964627u, 0, NEXTAFTERF_TOLERANCE, 0}, +{922, 3445262427u, 3465211174u, 3445262428u, 0, NEXTAFTERF_TOLERANCE, 0}, +{923, 1125653081u, 1207799746u, 1125653082u, 0, NEXTAFTERF_TOLERANCE, 0}, +{924, 3337652712u, 3025581813u, 3337652711u, 0, NEXTAFTERF_TOLERANCE, 0}, +{925, 1184753508u, 3147374485u, 1184753507u, 0, NEXTAFTERF_TOLERANCE, 0}, +{926, 996404791u, 3353251979u, 996404790u, 0, NEXTAFTERF_TOLERANCE, 0}, +{927, 1188439315u, 1113484271u, 1188439314u, 0, NEXTAFTERF_TOLERANCE, 0}, +{928, 916831283u, 999465787u, 916831284u, 0, NEXTAFTERF_TOLERANCE, 0}, +{929, 996786317u, 3179221951u, 996786316u, 0, NEXTAFTERF_TOLERANCE, 0}, +{930, 3461635065u, 1004690387u, 3461635064u, 0, NEXTAFTERF_TOLERANCE, 0}, +{931, 1188167943u, 1200744896u, 1188167944u, 0, NEXTAFTERF_TOLERANCE, 0}, +{932, 3036502395u, 1172597364u, 3036502394u, 0, NEXTAFTERF_TOLERANCE, 0}, +{933, 891257783u, 1267560050u, 891257784u, 0, NEXTAFTERF_TOLERANCE, 0}, +{934, 1102061604u, 3424449935u, 1102061603u, 0, NEXTAFTERF_TOLERANCE, 0}, +{935, 1282351521u, 3039376424u, 1282351520u, 0, NEXTAFTERF_TOLERANCE, 0}, +{936, 3458861065u, 3392466405u, 3458861064u, 0, NEXTAFTERF_TOLERANCE, 0}, +{937, 3095256878u, 1023623326u, 3095256877u, 0, NEXTAFTERF_TOLERANCE, 0}, +{938, 3422194733u, 893873945u, 3422194732u, 0, NEXTAFTERF_TOLERANCE, 0}, +{939, 3083885296u, 974543672u, 3083885295u, 0, NEXTAFTERF_TOLERANCE, 0}, +{940, 1261940623u, 3402349985u, 1261940622u, 0, NEXTAFTERF_TOLERANCE, 0}, +{941, 3400603081u, 3234396843u, 3400603080u, 0, NEXTAFTERF_TOLERANCE, 0}, +{942, 3139250800u, 3079109479u, 3139250799u, 0, NEXTAFTERF_TOLERANCE, 0}, +{943, 886201503u, 3272760705u, 886201502u, 0, NEXTAFTERF_TOLERANCE, 0}, +{944, 3297366026u, 1089966380u, 3297366025u, 0, NEXTAFTERF_TOLERANCE, 0}, +{945, 1218488455u, 3309646450u, 1218488454u, 0, NEXTAFTERF_TOLERANCE, 0}, +{946, 3040358923u, 3093401553u, 3040358924u, 0, NEXTAFTERF_TOLERANCE, 0}, +{947, 1283938137u, 1196383822u, 1283938136u, 0, NEXTAFTERF_TOLERANCE, 0}, +{948, 3182551696u, 3029982441u, 3182551695u, 0, NEXTAFTERF_TOLERANCE, 0}, +{949, 1317098613u, 949986176u, 1317098612u, 0, NEXTAFTERF_TOLERANCE, 0}, +{950, 3116209179u, 3303588342u, 3116209180u, 0, NEXTAFTERF_TOLERANCE, 0}, +{951, 3239728775u, 927815421u, 3239728774u, 0, NEXTAFTERF_TOLERANCE, 0}, +{952, 3207141672u, 933456504u, 3207141671u, 0, NEXTAFTERF_TOLERANCE, 0}, +{953, 3154378805u, 905462392u, 3154378804u, 0, NEXTAFTERF_TOLERANCE, 0}, +{954, 3069658155u, 1041452042u, 3069658154u, 0, NEXTAFTERF_TOLERANCE, 0}, +{955, 3207056527u, 3384206601u, 3207056528u, 0, NEXTAFTERF_TOLERANCE, 0}, +{956, 1284174954u, 3436881197u, 1284174953u, 0, NEXTAFTERF_TOLERANCE, 0}, +{957, 3156081645u, 3308839704u, 3156081646u, 0, NEXTAFTERF_TOLERANCE, 0}, +{958, 1063693032u, 976661408u, 1063693031u, 0, NEXTAFTERF_TOLERANCE, 0}, +{959, 3036026175u, 1251203998u, 3036026174u, 0, NEXTAFTERF_TOLERANCE, 0}, +{960, 1102631663u, 3396951425u, 1102631662u, 0, NEXTAFTERF_TOLERANCE, 0}, +{961, 968803479u, 992989712u, 968803480u, 0, NEXTAFTERF_TOLERANCE, 0}, +{962, 3273080388u, 3109405906u, 3273080387u, 0, NEXTAFTERF_TOLERANCE, 0}, +{963, 1172529774u, 3294550127u, 1172529773u, 0, NEXTAFTERF_TOLERANCE, 0}, +{964, 1306695905u, 1292690378u, 1306695904u, 0, NEXTAFTERF_TOLERANCE, 0}, +{965, 1003649752u, 1218792138u, 1003649753u, 0, NEXTAFTERF_TOLERANCE, 0}, +{966, 1078478376u, 1326246424u, 1078478377u, 0, NEXTAFTERF_TOLERANCE, 0}, +{967, 3158855023u, 3151283866u, 3158855022u, 0, NEXTAFTERF_TOLERANCE, 0}, +{968, 1165177679u, 3276237026u, 1165177678u, 0, NEXTAFTERF_TOLERANCE, 0}, +{969, 3403009513u, 3381966453u, 3403009512u, 0, NEXTAFTERF_TOLERANCE, 0}, +{970, 952348506u, 3377573987u, 952348505u, 0, NEXTAFTERF_TOLERANCE, 0}, +{971, 1222777442u, 1125769920u, 1222777441u, 0, NEXTAFTERF_TOLERANCE, 0}, +{972, 1325324763u, 978336043u, 1325324762u, 0, NEXTAFTERF_TOLERANCE, 0}, +{973, 3363524213u, 3202991311u, 3363524212u, 0, NEXTAFTERF_TOLERANCE, 0}, +{974, 1158950321u, 1073578913u, 1158950320u, 0, NEXTAFTERF_TOLERANCE, 0}, +{975, 903129873u, 3416864271u, 903129872u, 0, NEXTAFTERF_TOLERANCE, 0}, +{976, 3078339944u, 988173985u, 3078339943u, 0, NEXTAFTERF_TOLERANCE, 0}, +{977, 1208345407u, 1254181270u, 1208345408u, 0, NEXTAFTERF_TOLERANCE, 0}, +{978, 1258634105u, 1247426200u, 1258634104u, 0, NEXTAFTERF_TOLERANCE, 0}, +{979, 1248478509u, 1287895126u, 1248478510u, 0, NEXTAFTERF_TOLERANCE, 0}, +{980, 1153863988u, 3430539165u, 1153863987u, 0, NEXTAFTERF_TOLERANCE, 0}, +{981, 1097120930u, 3221726305u, 1097120929u, 0, NEXTAFTERF_TOLERANCE, 0}, +{982, 3469778622u, 1200179013u, 3469778621u, 0, NEXTAFTERF_TOLERANCE, 0}, +{983, 1147712200u, 931865525u, 1147712199u, 0, NEXTAFTERF_TOLERANCE, 0}, +{984, 1124721745u, 3058969650u, 1124721744u, 0, NEXTAFTERF_TOLERANCE, 0}, +{985, 3261744304u, 1043806501u, 3261744303u, 0, NEXTAFTERF_TOLERANCE, 0}, +{986, 1064922416u, 1320485628u, 1064922417u, 0, NEXTAFTERF_TOLERANCE, 0}, +{987, 3303160152u, 3075455322u, 3303160151u, 0, NEXTAFTERF_TOLERANCE, 0}, +{988, 1315090496u, 3269683237u, 1315090495u, 0, NEXTAFTERF_TOLERANCE, 0}, +{989, 3230403187u, 1322841992u, 3230403186u, 0, NEXTAFTERF_TOLERANCE, 0}, +{990, 1335399673u, 974138676u, 1335399672u, 0, NEXTAFTERF_TOLERANCE, 0}, +{991, 1072458508u, 3372833993u, 1072458507u, 0, NEXTAFTERF_TOLERANCE, 0}, +{992, 3252139741u, 1059615003u, 3252139740u, 0, NEXTAFTERF_TOLERANCE, 0}, +{993, 3468519966u, 3113982619u, 3468519965u, 0, NEXTAFTERF_TOLERANCE, 0}, +{994, 1006231203u, 897530770u, 1006231202u, 0, NEXTAFTERF_TOLERANCE, 0}, +{995, 951554138u, 1001144381u, 951554139u, 0, NEXTAFTERF_TOLERANCE, 0}, +{996, 942046828u, 986341002u, 942046829u, 0, NEXTAFTERF_TOLERANCE, 0}, +{997, 3319723279u, 3414482416u, 3319723280u, 0, NEXTAFTERF_TOLERANCE, 0}, +{998, 3255104167u, 928827688u, 3255104166u, 0, NEXTAFTERF_TOLERANCE, 0}, +{999, 1155477903u, 3104812800u, 1155477902u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1000, 3273889176u, 980486479u, 3273889175u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1001, 3237813668u, 3441016803u, 3237813669u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1002, 975349337u, 1311932596u, 975349338u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1003, 981908840u, 3314038398u, 981908839u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1004, 941187647u, 1107765599u, 941187648u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1005, 1214223128u, 3225536822u, 1214223127u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1006, 3422922584u, 1086391131u, 3422922583u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1007, 1315857601u, 3487600045u, 1315857600u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1008, 3453226030u, 3233768835u, 3453226029u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1009, 1078359574u, 3199175230u, 1078359573u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1010, 1029557624u, 3302959071u, 1029557623u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1011, 1207675424u, 3042692550u, 1207675423u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1012, 1028355074u, 3442294040u, 1028355073u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1013, 3119299090u, 1187096397u, 3119299089u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1014, 1248421894u, 3367769132u, 1248421893u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1015, 3353251994u, 1095517730u, 3353251993u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1016, 876926659u, 3288089977u, 876926658u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1017, 1076752219u, 876236939u, 1076752218u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1018, 1273395082u, 3031189261u, 1273395081u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1019, 3385588183u, 3258252464u, 3385588182u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1020, 3192315328u, 3289489214u, 3192315329u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1021, 3441804648u, 3274638356u, 3441804647u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1022, 3392827417u, 1277961150u, 3392827416u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1023, 1161241793u, 1328003707u, 1161241794u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1024, 3034494183u, 3041579130u, 3034494184u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1025, 1171318485u, 3374409104u, 1171318484u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1026, 1001216371u, 3052357038u, 1001216370u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1027, 912515889u, 1074635609u, 912515890u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1028, 3391452505u, 897989232u, 3391452504u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1029, 3249603369u, 3147662248u, 3249603368u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1030, 3169816394u, 988430929u, 3169816393u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1031, 3282212423u, 3174079140u, 3282212422u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1032, 3352293320u, 3247843425u, 3352293319u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1033, 3296358441u, 875645354u, 3296358440u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1034, 1197828352u, 3245614728u, 1197828351u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1035, 3340510371u, 914930263u, 3340510370u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1036, 1127109339u, 3368125489u, 1127109338u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1037, 909467381u, 1232375752u, 909467382u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1038, 3192887808u, 3191848339u, 3192887807u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1039, 3237183876u, 3179379969u, 3237183875u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1040, 939285924u, 3056079386u, 939285923u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1041, 944050180u, 3452557879u, 944050179u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1042, 3058135703u, 3090284601u, 3058135704u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1043, 3480592662u, 3261728191u, 3480592661u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1044, 3061939312u, 3274418540u, 3061939313u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1045, 1155775526u, 1255814444u, 1155775527u, 0, NEXTAFTERF_TOLERANCE, 0}, +{1046, 1234491880u, 3408568717u, 1234491879u, 0, NEXTAFTERF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_NEXTAFTERF_H multiple inclusion protection + +// EOF nextafterf.h diff --git a/packages/language/c/libm/current/tests/vectors/powf.c b/packages/language/c/libm/current/tests/vectors/powf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/powf.c @@ -0,0 +1,114 @@ +//=========================================================================== +// +// pow.c +// +// Test of pow() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/powf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(pow_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &powf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, + &pow_vec[0], vec_size ); + + if (ret==true) { + CYG_TEST_PASS("powf() is stable"); + } // if + else { + CYG_TEST_FAIL("powf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library powf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "pow() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF pow.c diff --git a/packages/language/c/libm/current/tests/vectors/powf.h b/packages/language/c/libm/current/tests/vectors/powf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/powf.h @@ -0,0 +1,215 @@ +#ifndef CYGONCE_LIBM_POW_H +#define CYGONCE_LIBM_POW_H +//=========================================================================== +// +// pow.h +// +// Test vectors for testing of pow() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/pow.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define POW_TOLERANCE 2.0E-04 + +static const Cyg_libm_test_float_vec_t pow_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 1198712763u, 919636942u, 1065353791u, 0, POW_TOLERANCE, 0}, +{1, 954173073u, 850531830u, 1065353213u, 0, POW_TOLERANCE, 0}, +{2, 1166191415u, 1018661564u, 1067076343u, 0, POW_TOLERANCE, 0}, +{3, 1167223673u, 846102364u, 1065353217u, 0, POW_TOLERANCE, 0}, +{4, 968192794u, 878547432u, 1065353188u, 0, POW_TOLERANCE, 0}, +{5, 1306460502u, 903489435u, 1065353488u, 0, POW_TOLERANCE, 0}, +{6, 941796645u, 886451963u, 1065353148u, 0, POW_TOLERANCE, 0}, +{7, 1143233714u, 1007268238u, 1065823341u, 0, POW_TOLERANCE, 0}, +{8, 1309289088u, 1019883016u, 1070767293u, 0, POW_TOLERANCE, 0}, +{9, 1238569473u, 873035665u, 1065353231u, 0, POW_TOLERANCE, 0}, +{10, 1142167709u, 1096445242u, 2119523639u, 0, POW_TOLERANCE, 0}, +{11, 982950501u, 982549888u, 1065228471u, 0, POW_TOLERANCE, 0}, +{12, 1142981585u, 1015602236u, 1066309943u, 0, POW_TOLERANCE, 0}, +{13, 1061834641u, 972388096u, 1065351367u, 0, POW_TOLERANCE, 0}, +{14, 1000611335u, 857599439u, 1065353213u, 0, POW_TOLERANCE, 0}, +{15, 822041816u, 898402905u, 1065352863u, 0, POW_TOLERANCE, 0}, +{16, 977281449u, 879922831u, 1065353189u, 0, POW_TOLERANCE, 0}, +{17, 1086198791u, 920125958u, 1065353312u, 0, POW_TOLERANCE, 0}, +{18, 1255152035u, 851754050u, 1065353219u, 0, POW_TOLERANCE, 0}, +{19, 1094190727u, 1056854532u, 1079464258u, 0, POW_TOLERANCE, 0}, +{20, 1294665325u, 991185677u, 1065721824u, 0, POW_TOLERANCE, 0}, +{21, 1036608591u, 805416536u, 1065353216u, 0, POW_TOLERANCE, 0}, +{22, 1325668223u, 970681762u, 1065429107u, 0, POW_TOLERANCE, 0}, +{23, 1092037607u, 1027330835u, 1066263156u, 0, POW_TOLERANCE, 0}, +{24, 1243664530u, 972879810u, 1065413269u, 0, POW_TOLERANCE, 0}, +{25, 950829092u, 929114193u, 1065351098u, 0, POW_TOLERANCE, 0}, +{26, 1030934236u, 1045139240u, 1058143257u, 0, POW_TOLERANCE, 0}, +{27, 1161858787u, 815362075u, 1065353216u, 0, POW_TOLERANCE, 0}, +{28, 1189120494u, 978961471u, 1065425061u, 0, POW_TOLERANCE, 0}, +{29, 1065798296u, 816191940u, 1065353216u, 0, POW_TOLERANCE, 0}, +{30, 1273397670u, 901308750u, 1065353415u, 0, POW_TOLERANCE, 0}, +{31, 1051773536u, 896271348u, 1065353200u, 0, POW_TOLERANCE, 0}, +{32, 1283624229u, 906796922u, 1065353533u, 0, POW_TOLERANCE, 0}, +{33, 970649315u, 1078286437u, 774321244u, 0, POW_TOLERANCE, 0}, +{34, 1279489061u, 1006049444u, 1066554775u, 0, POW_TOLERANCE, 0}, +{35, 1233171235u, 826460580u, 1065353216u, 0, POW_TOLERANCE, 0}, +{36, 1148920078u, 1007674793u, 1065878255u, 0, POW_TOLERANCE, 0}, +{37, 1000014431u, 831213088u, 1065353216u, 0, POW_TOLERANCE, 0}, +{38, 1234530539u, 1079988872u, 1656602122u, 0, POW_TOLERANCE, 0}, +{39, 1276853215u, 873199561u, 1065353235u, 0, POW_TOLERANCE, 0}, +{40, 1212717473u, 837873779u, 1065353217u, 0, POW_TOLERANCE, 0}, +{41, 1022211242u, 922124181u, 1065352780u, 0, POW_TOLERANCE, 0}, +{42, 1189421739u, 1056599002u, 1125718440u, 0, POW_TOLERANCE, 0}, +{43, 1034611395u, 882288581u, 1065353204u, 0, POW_TOLERANCE, 0}, +{44, 1314588083u, 856187848u, 1065353221u, 0, POW_TOLERANCE, 0}, +{45, 861266716u, 822172554u, 1065353215u, 0, POW_TOLERANCE, 0}, +{46, 1156767533u, 1088986462u, 1730804446u, 0, POW_TOLERANCE, 0}, +{47, 994934087u, 967678094u, 1065321222u, 0, POW_TOLERANCE, 0}, +{48, 918212457u, 1017468331u, 1061718387u, 0, POW_TOLERANCE, 0}, +{49, 959956547u, 876324728u, 1065353191u, 0, POW_TOLERANCE, 0}, +{50, 1206054701u, 826010009u, 1065353216u, 0, POW_TOLERANCE, 0}, +{51, 822524010u, 970745811u, 1065212397u, 0, POW_TOLERANCE, 0}, +{52, 1213609983u, 919983950u, 1065353874u, 0, POW_TOLERANCE, 0}, +{53, 1317696241u, 870681806u, 1065353235u, 0, POW_TOLERANCE, 0}, +{54, 1228636133u, 886552820u, 1065353262u, 0, POW_TOLERANCE, 0}, +{55, 1207246237u, 859223639u, 1065353220u, 0, POW_TOLERANCE, 0}, +{56, 1149651309u, 970030475u, 1065376643u, 0, POW_TOLERANCE, 0}, +{57, 943645710u, 852875779u, 1065353212u, 0, POW_TOLERANCE, 0}, +{58, 935847271u, 1067255804u, 906953987u, 0, POW_TOLERANCE, 0}, +{59, 1001823878u, 1016826861u, 1063778802u, 0, POW_TOLERANCE, 0}, +{60, 1009130212u, 1004302940u, 1064842908u, 0, POW_TOLERANCE, 0}, +{61, 1120261759u, 892210998u, 1065353241u, 0, POW_TOLERANCE, 0}, +{62, 1087750238u, 1099325523u, 1451348348u, 0, POW_TOLERANCE, 0}, +{63, 1186234578u, 858134374u, 1065353219u, 0, POW_TOLERANCE, 0}, +{64, 1331680743u, 1009396165u, 1067511672u, 0, POW_TOLERANCE, 0}, +{65, 847857044u, 894661023u, 1065352979u, 0, POW_TOLERANCE, 0}, +{66, 1270451568u, 928393353u, 1065355037u, 0, POW_TOLERANCE, 0}, +{67, 1171873518u, 954709738u, 1065361420u, 0, POW_TOLERANCE, 0}, +{68, 982612185u, 923582663u, 1065352258u, 0, POW_TOLERANCE, 0}, +{69, 1144755661u, 860947435u, 1065353219u, 0, POW_TOLERANCE, 0}, +{70, 840456845u, 1051585760u, 988879588u, 0, POW_TOLERANCE, 0}, +{71, 898467286u, 839254959u, 1065353214u, 0, POW_TOLERANCE, 0}, +{72, 871130681u, 905123007u, 1065352729u, 0, POW_TOLERANCE, 0}, +{73, 1153863660u, 1011991342u, 1066183352u, 0, POW_TOLERANCE, 0}, +{74, 849056171u, 910674398u, 1065352326u, 0, POW_TOLERANCE, 0}, +{75, 1250249095u, 1069023744u, 1330736323u, 0, POW_TOLERANCE, 0}, +{76, 1025404104u, 1066370251u, 1020631328u, 0, POW_TOLERANCE, 0}, +{77, 1099710167u, 887180181u, 1065353226u, 0, POW_TOLERANCE, 0}, +{78, 1253017688u, 942062372u, 1065358408u, 0, POW_TOLERANCE, 0}, +{79, 1266928623u, 811778614u, 1065353216u, 0, POW_TOLERANCE, 0}, +{80, 1152416724u, 962669179u, 1065366291u, 0, POW_TOLERANCE, 0}, +{81, 835770216u, 865469272u, 1065353194u, 0, POW_TOLERANCE, 0}, +{82, 1278946388u, 825129857u, 1065353216u, 0, POW_TOLERANCE, 0}, +{83, 1297190916u, 811863044u, 1065353216u, 0, POW_TOLERANCE, 0}, +{84, 1277649137u, 961171401u, 1065381745u, 0, POW_TOLERANCE, 0}, +{85, 1306520561u, 957302464u, 1065376134u, 0, POW_TOLERANCE, 0}, +{86, 808412264u, 941158192u, 1065340269u, 0, POW_TOLERANCE, 0}, +{87, 893449284u, 1052877339u, 1000054884u, 0, POW_TOLERANCE, 0}, +{88, 1043025031u, 987068973u, 1065304428u, 0, POW_TOLERANCE, 0}, +{89, 902318189u, 849277289u, 1065353212u, 0, POW_TOLERANCE, 0}, +{90, 1120888322u, 1086209113u, 1398810821u, 0, POW_TOLERANCE, 0}, +{91, 1040617590u, 1034835971u, 1062691293u, 0, POW_TOLERANCE, 0}, +{92, 823111402u, 877253523u, 1065353153u, 0, POW_TOLERANCE, 0}, +{93, 904255535u, 1019967545u, 1060640156u, 0, POW_TOLERANCE, 0}, +{94, 1039827284u, 1072928888u, 1016479294u, 0, POW_TOLERANCE, 0}, +{95, 1021564080u, 1064468397u, 1024039626u, 0, POW_TOLERANCE, 0}, +{96, 1133689539u, 1067460093u, 1150866472u, 0, POW_TOLERANCE, 0}, +{97, 954999730u, 969618597u, 1065294201u, 0, POW_TOLERANCE, 0}, +{98, 940437609u, 860372396u, 1065353208u, 0, POW_TOLERANCE, 0}, +{99, 1299683827u, 966031619u, 1065399368u, 0, POW_TOLERANCE, 0}, +{100, 1229268598u, 1066965677u, 1260934057u, 0, POW_TOLERANCE, 0}, +{101, 1246019790u, 850632217u, 1065353219u, 0, POW_TOLERANCE, 0}, +{102, 1015670780u, 1101217251u, 56180015u, 0, POW_TOLERANCE, 0}, +{103, 1156767169u, 1049756240u, 1091216627u, 0, POW_TOLERANCE, 0}, +{104, 1098662266u, 833740182u, 1065353216u, 0, POW_TOLERANCE, 0}, +{105, 927582555u, 947955456u, 1065341561u, 0, POW_TOLERANCE, 0}, +{106, 860108361u, 921064349u, 1065351270u, 0, POW_TOLERANCE, 0}, +{107, 1245702957u, 894348966u, 1065353313u, 0, POW_TOLERANCE, 0}, +{108, 922255363u, 958305289u, 1065323270u, 0, POW_TOLERANCE, 0}, +{109, 1113104661u, 944376032u, 1065354829u, 0, POW_TOLERANCE, 0}, +{110, 1136714348u, 828849087u, 1065353216u, 0, POW_TOLERANCE, 0}, +{111, 948856035u, 1015466475u, 1062902450u, 0, POW_TOLERANCE, 0}, +{112, 1034561811u, 1054043114u, 1052198635u, 0, POW_TOLERANCE, 0}, +{113, 853827378u, 898656161u, 1065352901u, 0, POW_TOLERANCE, 0}, +{114, 1309658335u, 1010219988u, 1067475014u, 0, POW_TOLERANCE, 0}, +{115, 1161439847u, 943449277u, 1065356223u, 0, POW_TOLERANCE, 0}, +{116, 908663107u, 939489763u, 1065346630u, 0, POW_TOLERANCE, 0}, +{117, 1084378658u, 1009650785u, 1065499167u, 0, POW_TOLERANCE, 0}, +{118, 1226473697u, 821025132u, 1065353216u, 0, POW_TOLERANCE, 0}, +{119, 916831283u, 999465787u, 1064460513u, 0, POW_TOLERANCE, 0}, +{120, 1317098613u, 949986176u, 1065366511u, 0, POW_TOLERANCE, 0}, +{121, 1063693032u, 976661408u, 1065351998u, 0, POW_TOLERANCE, 0}, +{122, 968803479u, 992989712u, 1065000552u, 0, POW_TOLERANCE, 0}, +{123, 1325324763u, 978336043u, 1065497589u, 0, POW_TOLERANCE, 0}, +{124, 1158950321u, 1073578913u, 1251181125u, 0, POW_TOLERANCE, 0}, +{125, 1235620969u, 866627358u, 1065353225u, 0, POW_TOLERANCE, 0}, +{126, 1147712200u, 931865525u, 1065354167u, 0, POW_TOLERANCE, 0}, +{127, 805759679u, 903848557u, 1065352617u, 0, POW_TOLERANCE, 0}, +{128, 1335399673u, 974138676u, 1065456997u, 0, POW_TOLERANCE, 0}, +{129, 1006231203u, 897530770u, 1065353138u, 0, POW_TOLERANCE, 0}, +{130, 951554138u, 1001144381u, 1064549096u, 0, POW_TOLERANCE, 0}, +{131, 942046828u, 986341002u, 1065092748u, 0, POW_TOLERANCE, 0}, +{132, 1076752219u, 876236939u, 1065353217u, 0, POW_TOLERANCE, 0}, +{133, 862047095u, 829323655u, 1065353215u, 0, POW_TOLERANCE, 0}, +{134, 912515889u, 1074635609u, 727565233u, 0, POW_TOLERANCE, 0}, +{135, 1003299981u, 853295521u, 1065353214u, 0, POW_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_POW_H multiple inclusion protection + +// EOF pow.h diff --git a/packages/language/c/libm/current/tests/vectors/remainderf.c b/packages/language/c/libm/current/tests/vectors/remainderf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/remainderf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// remainderf.c +// +// Test of remainderf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/remainderf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(remainderf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &remainderf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &remainderf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("remainderf() is stable"); + } // if + else + { + CYG_TEST_FAIL("remainderf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library remainderf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "remainderf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF remainderf.c diff --git a/packages/language/c/libm/current/tests/vectors/remainderf.h b/packages/language/c/libm/current/tests/vectors/remainderf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/remainderf.h @@ -0,0 +1,2441 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// remainderf.h +// +// Test vectors for testing of remainderf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/remainderf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define REMAINDERF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t remainderf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3212836864u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{1, 3212836864u, 3211998003u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{2, 3212836864u, 3211159142u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{3, 3212836864u, 3210320282u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{4, 3212836864u, 3209481421u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{5, 3212836864u, 3208642560u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{6, 3212836864u, 3207803699u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{7, 3212836864u, 3206964838u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{8, 3212836864u, 3206125978u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{9, 3212836864u, 3205287117u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{10, 3212836864u, 3204448256u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{11, 3212836864u, 3202770534u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{12, 3212836864u, 3201092813u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{13, 3212836864u, 3199415091u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{14, 3212836864u, 3197737370u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{15, 3212836864u, 3196059648u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{16, 3212836864u, 3192704205u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{17, 3212836864u, 3189348762u, 1028443352u, 0, REMAINDERF_TOLERANCE, 0}, +{18, 3212836864u, 3184315597u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{19, 3212836864u, 3175926989u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{20, 3212836864u, 632815616u, 2751463424u, 0, REMAINDERF_TOLERANCE, 0}, +{21, 3212836864u, 1028443341u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{22, 3212836864u, 1036831949u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{23, 3212836864u, 1041865114u, 1028443352u, 0, REMAINDERF_TOLERANCE, 0}, +{24, 3212836864u, 1045220557u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{25, 3212836864u, 1048576000u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{26, 3212836864u, 1050253722u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{27, 3212836864u, 1051931443u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{28, 3212836864u, 1053609165u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{29, 3212836864u, 1055286886u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{30, 3212836864u, 1056964608u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{31, 3212836864u, 1057803469u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{32, 3212836864u, 1058642330u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{33, 3212836864u, 1059481190u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{34, 3212836864u, 1060320051u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{35, 3212836864u, 1061158912u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{36, 3212836864u, 1061997773u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{37, 3212836864u, 1062836634u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{38, 3212836864u, 1063675494u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{39, 3212836864u, 1064514355u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{40, 3211998003u, 3212836864u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{41, 3211998003u, 3211998003u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{42, 3211998003u, 3211159142u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{43, 3211998003u, 3210320282u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{44, 3211998003u, 3209481421u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{45, 3211998003u, 3208642560u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{46, 3211998003u, 3207803699u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{47, 3211998003u, 3206964838u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{48, 3211998003u, 3206125978u, 1048576002u, 0, REMAINDERF_TOLERANCE, 0}, +{49, 3211998003u, 3205287117u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{50, 3211998003u, 3204448256u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{51, 3211998003u, 3202770534u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{52, 3211998003u, 3201092813u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{53, 3211998003u, 3199415091u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{54, 3211998003u, 3197737370u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{55, 3211998003u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{56, 3211998003u, 3192704205u, 1028443348u, 0, REMAINDERF_TOLERANCE, 0}, +{57, 3211998003u, 3189348762u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{58, 3211998003u, 3184315597u, 3175926982u, 0, REMAINDERF_TOLERANCE, 0}, +{59, 3211998003u, 3175926989u, 853540864u, 0, REMAINDERF_TOLERANCE, 0}, +{60, 3211998003u, 632815616u, 2771386368u, 0, REMAINDERF_TOLERANCE, 0}, +{61, 3211998003u, 1028443341u, 853540864u, 0, REMAINDERF_TOLERANCE, 0}, +{62, 3211998003u, 1036831949u, 3175926982u, 0, REMAINDERF_TOLERANCE, 0}, +{63, 3211998003u, 1041865114u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{64, 3211998003u, 1045220557u, 1028443348u, 0, REMAINDERF_TOLERANCE, 0}, +{65, 3211998003u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{66, 3211998003u, 1050253722u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{67, 3211998003u, 1051931443u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{68, 3211998003u, 1053609165u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{69, 3211998003u, 1055286886u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{70, 3211998003u, 1056964608u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{71, 3211998003u, 1057803469u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{72, 3211998003u, 1058642330u, 1048576002u, 0, REMAINDERF_TOLERANCE, 0}, +{73, 3211998003u, 1059481190u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{74, 3211998003u, 1060320051u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{75, 3211998003u, 1061158912u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{76, 3211998003u, 1061997773u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{77, 3211998003u, 1062836634u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{78, 3211998003u, 1063675494u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{79, 3211998003u, 1064514355u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{80, 3211159142u, 3212836864u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{81, 3211159142u, 3211998003u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{82, 3211159142u, 3211159142u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{83, 3211159142u, 3210320282u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{84, 3211159142u, 3209481421u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{85, 3211159142u, 3208642560u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{86, 3211159142u, 3207803699u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{87, 3211159142u, 3206964838u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{88, 3211159142u, 3206125978u, 3197737368u, 0, REMAINDERF_TOLERANCE, 0}, +{89, 3211159142u, 3205287117u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{90, 3211159142u, 3204448256u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{91, 3211159142u, 3202770534u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{92, 3211159142u, 3201092813u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{93, 3211159142u, 3199415091u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{94, 3211159142u, 3197737370u, 864026624u, 0, REMAINDERF_TOLERANCE, 0}, +{95, 3211159142u, 3196059648u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{96, 3211159142u, 3192704205u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{97, 3211159142u, 3189348762u, 864026624u, 0, REMAINDERF_TOLERANCE, 0}, +{98, 3211159142u, 3184315597u, 857735168u, 0, REMAINDERF_TOLERANCE, 0}, +{99, 3211159142u, 3175926989u, 857735168u, 0, REMAINDERF_TOLERANCE, 0}, +{100, 3211159142u, 632815616u, 608174080u, 0, REMAINDERF_TOLERANCE, 0}, +{101, 3211159142u, 1028443341u, 857735168u, 0, REMAINDERF_TOLERANCE, 0}, +{102, 3211159142u, 1036831949u, 857735168u, 0, REMAINDERF_TOLERANCE, 0}, +{103, 3211159142u, 1041865114u, 864026624u, 0, REMAINDERF_TOLERANCE, 0}, +{104, 3211159142u, 1045220557u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{105, 3211159142u, 1048576000u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{106, 3211159142u, 1050253722u, 864026624u, 0, REMAINDERF_TOLERANCE, 0}, +{107, 3211159142u, 1051931443u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{108, 3211159142u, 1053609165u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{109, 3211159142u, 1055286886u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{110, 3211159142u, 1056964608u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{111, 3211159142u, 1057803469u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{112, 3211159142u, 1058642330u, 3197737368u, 0, REMAINDERF_TOLERANCE, 0}, +{113, 3211159142u, 1059481190u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{114, 3211159142u, 1060320051u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{115, 3211159142u, 1061158912u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{116, 3211159142u, 1061997773u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{117, 3211159142u, 1062836634u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{118, 3211159142u, 1063675494u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{119, 3211159142u, 1064514355u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{120, 3210320282u, 3212836864u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{121, 3210320282u, 3211998003u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{122, 3210320282u, 3211159142u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{123, 3210320282u, 3210320282u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{124, 3210320282u, 3209481421u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{125, 3210320282u, 3208642560u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{126, 3210320282u, 3207803699u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{127, 3210320282u, 3206964838u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{128, 3210320282u, 3206125978u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{129, 3210320282u, 3205287117u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{130, 3210320282u, 3204448256u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{131, 3210320282u, 3202770534u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{132, 3210320282u, 3201092813u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{133, 3210320282u, 3199415091u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{134, 3210320282u, 3197737370u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{135, 3210320282u, 3196059648u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{136, 3210320282u, 3192704205u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{137, 3210320282u, 3189348762u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{138, 3210320282u, 3184315597u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{139, 3210320282u, 3175926989u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{140, 3210320282u, 632815616u, 614465536u, 0, REMAINDERF_TOLERANCE, 0}, +{141, 3210320282u, 1028443341u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{142, 3210320282u, 1036831949u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{143, 3210320282u, 1041865114u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{144, 3210320282u, 1045220557u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{145, 3210320282u, 1048576000u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{146, 3210320282u, 1050253722u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{147, 3210320282u, 1051931443u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{148, 3210320282u, 1053609165u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{149, 3210320282u, 1055286886u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{150, 3210320282u, 1056964608u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{151, 3210320282u, 1057803469u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{152, 3210320282u, 1058642330u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{153, 3210320282u, 1059481190u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{154, 3210320282u, 1060320051u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{155, 3210320282u, 1061158912u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{156, 3210320282u, 1061997773u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{157, 3210320282u, 1062836634u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{158, 3210320282u, 1063675494u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{159, 3210320282u, 1064514355u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{160, 3209481421u, 3212836864u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{161, 3209481421u, 3211998003u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{162, 3209481421u, 3211159142u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{163, 3209481421u, 3210320282u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{164, 3209481421u, 3209481421u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{165, 3209481421u, 3208642560u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{166, 3209481421u, 3207803699u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{167, 3209481421u, 3206964838u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{168, 3209481421u, 3206125978u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{169, 3209481421u, 3205287117u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{170, 3209481421u, 3204448256u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{171, 3209481421u, 3202770534u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{172, 3209481421u, 3201092813u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{173, 3209481421u, 3199415091u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{174, 3209481421u, 3197737370u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{175, 3209481421u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{176, 3209481421u, 3192704205u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{177, 3209481421u, 3189348762u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{178, 3209481421u, 3184315597u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{179, 3209481421u, 3175926989u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{180, 3209481421u, 632815616u, 2759852032u, 0, REMAINDERF_TOLERANCE, 0}, +{181, 3209481421u, 1028443341u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{182, 3209481421u, 1036831949u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{183, 3209481421u, 1041865114u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{184, 3209481421u, 1045220557u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{185, 3209481421u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{186, 3209481421u, 1050253722u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{187, 3209481421u, 1051931443u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{188, 3209481421u, 1053609165u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{189, 3209481421u, 1055286886u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{190, 3209481421u, 1056964608u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{191, 3209481421u, 1057803469u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{192, 3209481421u, 1058642330u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{193, 3209481421u, 1059481190u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{194, 3209481421u, 1060320051u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{195, 3209481421u, 1061158912u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{196, 3209481421u, 1061997773u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{197, 3209481421u, 1062836634u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{198, 3209481421u, 1063675494u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{199, 3209481421u, 1064514355u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{200, 3208642560u, 3212836864u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{201, 3208642560u, 3211998003u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{202, 3208642560u, 3211159142u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{203, 3208642560u, 3210320282u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{204, 3208642560u, 3209481421u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{205, 3208642560u, 3208642560u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{206, 3208642560u, 3207803699u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{207, 3208642560u, 3206964838u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{208, 3208642560u, 3206125978u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{209, 3208642560u, 3205287117u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{210, 3208642560u, 3204448256u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{211, 3208642560u, 3202770534u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{212, 3208642560u, 3201092813u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{213, 3208642560u, 3199415091u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{214, 3208642560u, 3197737370u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{215, 3208642560u, 3196059648u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{216, 3208642560u, 3192704205u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{217, 3208642560u, 3189348762u, 855638016u, 0, REMAINDERF_TOLERANCE, 0}, +{218, 3208642560u, 3184315597u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{219, 3208642560u, 3175926989u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{220, 3208642560u, 632815616u, 622854144u, 0, REMAINDERF_TOLERANCE, 0}, +{221, 3208642560u, 1028443341u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{222, 3208642560u, 1036831949u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{223, 3208642560u, 1041865114u, 855638016u, 0, REMAINDERF_TOLERANCE, 0}, +{224, 3208642560u, 1045220557u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{225, 3208642560u, 1048576000u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{226, 3208642560u, 1050253722u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{227, 3208642560u, 1051931443u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{228, 3208642560u, 1053609165u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{229, 3208642560u, 1055286886u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{230, 3208642560u, 1056964608u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{231, 3208642560u, 1057803469u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{232, 3208642560u, 1058642330u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{233, 3208642560u, 1059481190u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{234, 3208642560u, 1060320051u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{235, 3208642560u, 1061158912u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{236, 3208642560u, 1061997773u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{237, 3208642560u, 1062836634u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{238, 3208642560u, 1063675494u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{239, 3208642560u, 1064514355u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{240, 3207803699u, 3212836864u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{241, 3207803699u, 3211998003u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{242, 3207803699u, 3211159142u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{243, 3207803699u, 3210320282u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{244, 3207803699u, 3209481421u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{245, 3207803699u, 3208642560u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{246, 3207803699u, 3207803699u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{247, 3207803699u, 3206964838u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{248, 3207803699u, 3206125978u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{249, 3207803699u, 3205287117u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{250, 3207803699u, 3204448256u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{251, 3207803699u, 3202770534u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{252, 3207803699u, 3201092813u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{253, 3207803699u, 3199415091u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{254, 3207803699u, 3197737370u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{255, 3207803699u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{256, 3207803699u, 3192704205u, 3184315594u, 0, REMAINDERF_TOLERANCE, 0}, +{257, 3207803699u, 3189348762u, 1028443352u, 0, REMAINDERF_TOLERANCE, 0}, +{258, 3207803699u, 3184315597u, 851443712u, 0, REMAINDERF_TOLERANCE, 0}, +{259, 3207803699u, 3175926989u, 851443712u, 0, REMAINDERF_TOLERANCE, 0}, +{260, 3207803699u, 632815616u, 595591168u, 0, REMAINDERF_TOLERANCE, 0}, +{261, 3207803699u, 1028443341u, 851443712u, 0, REMAINDERF_TOLERANCE, 0}, +{262, 3207803699u, 1036831949u, 851443712u, 0, REMAINDERF_TOLERANCE, 0}, +{263, 3207803699u, 1041865114u, 1028443352u, 0, REMAINDERF_TOLERANCE, 0}, +{264, 3207803699u, 1045220557u, 3184315594u, 0, REMAINDERF_TOLERANCE, 0}, +{265, 3207803699u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{266, 3207803699u, 1050253722u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{267, 3207803699u, 1051931443u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{268, 3207803699u, 1053609165u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{269, 3207803699u, 1055286886u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{270, 3207803699u, 1056964608u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{271, 3207803699u, 1057803469u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{272, 3207803699u, 1058642330u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{273, 3207803699u, 1059481190u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{274, 3207803699u, 1060320051u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{275, 3207803699u, 1061158912u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{276, 3207803699u, 1061997773u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{277, 3207803699u, 1062836634u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{278, 3207803699u, 1063675494u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{279, 3207803699u, 1064514355u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{280, 3206964838u, 3212836864u, 1051931444u, 0, REMAINDERF_TOLERANCE, 0}, +{281, 3206964838u, 3211998003u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{282, 3206964838u, 3211159142u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{283, 3206964838u, 3210320282u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{284, 3206964838u, 3209481421u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{285, 3206964838u, 3208642560u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{286, 3206964838u, 3207803699u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{287, 3206964838u, 3206964838u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{288, 3206964838u, 3206125978u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{289, 3206964838u, 3205287117u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{290, 3206964838u, 3204448256u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{291, 3206964838u, 3202770534u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{292, 3206964838u, 3201092813u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{293, 3206964838u, 3199415091u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{294, 3206964838u, 3197737370u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{295, 3206964838u, 3196059648u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{296, 3206964838u, 3192704205u, 3175926980u, 0, REMAINDERF_TOLERANCE, 0}, +{297, 3206964838u, 3189348762u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{298, 3206964838u, 3184315597u, 3175926980u, 0, REMAINDERF_TOLERANCE, 0}, +{299, 3206964838u, 3175926989u, 856686592u, 0, REMAINDERF_TOLERANCE, 0}, +{300, 3206964838u, 632815616u, 2768240640u, 0, REMAINDERF_TOLERANCE, 0}, +{301, 3206964838u, 1028443341u, 856686592u, 0, REMAINDERF_TOLERANCE, 0}, +{302, 3206964838u, 1036831949u, 3175926980u, 0, REMAINDERF_TOLERANCE, 0}, +{303, 3206964838u, 1041865114u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{304, 3206964838u, 1045220557u, 3175926980u, 0, REMAINDERF_TOLERANCE, 0}, +{305, 3206964838u, 1048576000u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{306, 3206964838u, 1050253722u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{307, 3206964838u, 1051931443u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{308, 3206964838u, 1053609165u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{309, 3206964838u, 1055286886u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{310, 3206964838u, 1056964608u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{311, 3206964838u, 1057803469u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{312, 3206964838u, 1058642330u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{313, 3206964838u, 1059481190u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{314, 3206964838u, 1060320051u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{315, 3206964838u, 1061158912u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{316, 3206964838u, 1061997773u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{317, 3206964838u, 1062836634u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{318, 3206964838u, 1063675494u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{319, 3206964838u, 1064514355u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{320, 3206125978u, 3212836864u, 1053609164u, 0, REMAINDERF_TOLERANCE, 0}, +{321, 3206125978u, 3211998003u, 1051931442u, 0, REMAINDERF_TOLERANCE, 0}, +{322, 3206125978u, 3211159142u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{323, 3206125978u, 3210320282u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{324, 3206125978u, 3209481421u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{325, 3206125978u, 3208642560u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{326, 3206125978u, 3207803699u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{327, 3206125978u, 3206964838u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{328, 3206125978u, 3206125978u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{329, 3206125978u, 3205287117u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{330, 3206125978u, 3204448256u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{331, 3206125978u, 3202770534u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{332, 3206125978u, 3201092813u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{333, 3206125978u, 3199415091u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{334, 3206125978u, 3197737370u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{335, 3206125978u, 3196059648u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{336, 3206125978u, 3192704205u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{337, 3206125978u, 3189348762u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{338, 3206125978u, 3184315597u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{339, 3206125978u, 3175926989u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{340, 3206125978u, 632815616u, 2764046336u, 0, REMAINDERF_TOLERANCE, 0}, +{341, 3206125978u, 1028443341u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{342, 3206125978u, 1036831949u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{343, 3206125978u, 1041865114u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{344, 3206125978u, 1045220557u, 2994733056u, 0, REMAINDERF_TOLERANCE, 0}, +{345, 3206125978u, 1048576000u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{346, 3206125978u, 1050253722u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{347, 3206125978u, 1051931443u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{348, 3206125978u, 1053609165u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{349, 3206125978u, 1055286886u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{350, 3206125978u, 1056964608u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{351, 3206125978u, 1057803469u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{352, 3206125978u, 1058642330u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{353, 3206125978u, 1059481190u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{354, 3206125978u, 1060320051u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{355, 3206125978u, 1061158912u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{356, 3206125978u, 1061997773u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{357, 3206125978u, 1062836634u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{358, 3206125978u, 1063675494u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{359, 3206125978u, 1064514355u, 1051931442u, 0, REMAINDERF_TOLERANCE, 0}, +{360, 3205287117u, 3212836864u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{361, 3205287117u, 3211998003u, 1053609164u, 0, REMAINDERF_TOLERANCE, 0}, +{362, 3205287117u, 3211159142u, 1051931442u, 0, REMAINDERF_TOLERANCE, 0}, +{363, 3205287117u, 3210320282u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{364, 3205287117u, 3209481421u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{365, 3205287117u, 3208642560u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{366, 3205287117u, 3207803699u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{367, 3205287117u, 3206964838u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{368, 3205287117u, 3206125978u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{369, 3205287117u, 3205287117u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{370, 3205287117u, 3204448256u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{371, 3205287117u, 3202770534u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{372, 3205287117u, 3201092813u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{373, 3205287117u, 3199415091u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{374, 3205287117u, 3197737370u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{375, 3205287117u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{376, 3205287117u, 3192704205u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{377, 3205287117u, 3189348762u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{378, 3205287117u, 3184315597u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{379, 3205287117u, 3175926989u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{380, 3205287117u, 632815616u, 620756992u, 0, REMAINDERF_TOLERANCE, 0}, +{381, 3205287117u, 1028443341u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{382, 3205287117u, 1036831949u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{383, 3205287117u, 1041865114u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{384, 3205287117u, 1045220557u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{385, 3205287117u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{386, 3205287117u, 1050253722u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{387, 3205287117u, 1051931443u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{388, 3205287117u, 1053609165u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{389, 3205287117u, 1055286886u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{390, 3205287117u, 1056964608u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{391, 3205287117u, 1057803469u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{392, 3205287117u, 1058642330u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{393, 3205287117u, 1059481190u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{394, 3205287117u, 1060320051u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{395, 3205287117u, 1061158912u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{396, 3205287117u, 1061997773u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{397, 3205287117u, 1062836634u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{398, 3205287117u, 1063675494u, 1051931442u, 0, REMAINDERF_TOLERANCE, 0}, +{399, 3205287117u, 1064514355u, 1053609164u, 0, REMAINDERF_TOLERANCE, 0}, +{400, 3204448256u, 3212836864u, 3204448256u, 0, REMAINDERF_TOLERANCE, 0}, +{401, 3204448256u, 3211998003u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{402, 3204448256u, 3211159142u, 1053609164u, 0, REMAINDERF_TOLERANCE, 0}, +{403, 3204448256u, 3210320282u, 1051931444u, 0, REMAINDERF_TOLERANCE, 0}, +{404, 3204448256u, 3209481421u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{405, 3204448256u, 3208642560u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{406, 3204448256u, 3207803699u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{407, 3204448256u, 3206964838u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{408, 3204448256u, 3206125978u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{409, 3204448256u, 3205287117u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{410, 3204448256u, 3204448256u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{411, 3204448256u, 3202770534u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{412, 3204448256u, 3201092813u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{413, 3204448256u, 3199415091u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{414, 3204448256u, 3197737370u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{415, 3204448256u, 3196059648u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{416, 3204448256u, 3192704205u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{417, 3204448256u, 3189348762u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{418, 3204448256u, 3184315597u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{419, 3204448256u, 3175926989u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{420, 3204448256u, 632815616u, 2743074816u, 0, REMAINDERF_TOLERANCE, 0}, +{421, 3204448256u, 1028443341u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{422, 3204448256u, 1036831949u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{423, 3204448256u, 1041865114u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{424, 3204448256u, 1045220557u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{425, 3204448256u, 1048576000u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{426, 3204448256u, 1050253722u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{427, 3204448256u, 1051931443u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{428, 3204448256u, 1053609165u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{429, 3204448256u, 1055286886u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{430, 3204448256u, 1056964608u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{431, 3204448256u, 1057803469u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{432, 3204448256u, 1058642330u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{433, 3204448256u, 1059481190u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{434, 3204448256u, 1060320051u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{435, 3204448256u, 1061158912u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{436, 3204448256u, 1061997773u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{437, 3204448256u, 1062836634u, 1051931444u, 0, REMAINDERF_TOLERANCE, 0}, +{438, 3204448256u, 1063675494u, 1053609164u, 0, REMAINDERF_TOLERANCE, 0}, +{439, 3204448256u, 1064514355u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{440, 3202770534u, 3212836864u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{441, 3202770534u, 3211998003u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{442, 3202770534u, 3211159142u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{443, 3202770534u, 3210320282u, 1053609166u, 0, REMAINDERF_TOLERANCE, 0}, +{444, 3202770534u, 3209481421u, 1051931444u, 0, REMAINDERF_TOLERANCE, 0}, +{445, 3202770534u, 3208642560u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{446, 3202770534u, 3207803699u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{447, 3202770534u, 3206964838u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{448, 3202770534u, 3206125978u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{449, 3202770534u, 3205287117u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{450, 3202770534u, 3204448256u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{451, 3202770534u, 3202770534u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{452, 3202770534u, 3201092813u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{453, 3202770534u, 3199415091u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{454, 3202770534u, 3197737370u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{455, 3202770534u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{456, 3202770534u, 3192704205u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{457, 3202770534u, 3189348762u, 855638016u, 0, REMAINDERF_TOLERANCE, 0}, +{458, 3202770534u, 3184315597u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{459, 3202770534u, 3175926989u, 849346560u, 0, REMAINDERF_TOLERANCE, 0}, +{460, 3202770534u, 632815616u, 2770337792u, 0, REMAINDERF_TOLERANCE, 0}, +{461, 3202770534u, 1028443341u, 849346560u, 0, REMAINDERF_TOLERANCE, 0}, +{462, 3202770534u, 1036831949u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{463, 3202770534u, 1041865114u, 855638016u, 0, REMAINDERF_TOLERANCE, 0}, +{464, 3202770534u, 1045220557u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{465, 3202770534u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{466, 3202770534u, 1050253722u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{467, 3202770534u, 1051931443u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{468, 3202770534u, 1053609165u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{469, 3202770534u, 1055286886u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{470, 3202770534u, 1056964608u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{471, 3202770534u, 1057803469u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{472, 3202770534u, 1058642330u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{473, 3202770534u, 1059481190u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{474, 3202770534u, 1060320051u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{475, 3202770534u, 1061158912u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{476, 3202770534u, 1061997773u, 1051931444u, 0, REMAINDERF_TOLERANCE, 0}, +{477, 3202770534u, 1062836634u, 1053609166u, 0, REMAINDERF_TOLERANCE, 0}, +{478, 3202770534u, 1063675494u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{479, 3202770534u, 1064514355u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{480, 3201092813u, 3212836864u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{481, 3201092813u, 3211998003u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{482, 3201092813u, 3211159142u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{483, 3201092813u, 3210320282u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{484, 3201092813u, 3209481421u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{485, 3201092813u, 3208642560u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{486, 3201092813u, 3207803699u, 1050253721u, 0, REMAINDERF_TOLERANCE, 0}, +{487, 3201092813u, 3206964838u, 1048575998u, 0, REMAINDERF_TOLERANCE, 0}, +{488, 3201092813u, 3206125978u, 1045220558u, 0, REMAINDERF_TOLERANCE, 0}, +{489, 3201092813u, 3205287117u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{490, 3201092813u, 3204448256u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{491, 3201092813u, 3202770534u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{492, 3201092813u, 3201092813u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{493, 3201092813u, 3199415091u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{494, 3201092813u, 3197737370u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{495, 3201092813u, 3196059648u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{496, 3201092813u, 3192704205u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{497, 3201092813u, 3189348762u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{498, 3201092813u, 3184315597u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{499, 3201092813u, 3175926989u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{500, 3201092813u, 632815616u, 2751463424u, 0, REMAINDERF_TOLERANCE, 0}, +{501, 3201092813u, 1028443341u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{502, 3201092813u, 1036831949u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{503, 3201092813u, 1041865114u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{504, 3201092813u, 1045220557u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{505, 3201092813u, 1048576000u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{506, 3201092813u, 1050253722u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{507, 3201092813u, 1051931443u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{508, 3201092813u, 1053609165u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{509, 3201092813u, 1055286886u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{510, 3201092813u, 1056964608u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{511, 3201092813u, 1057803469u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{512, 3201092813u, 1058642330u, 1045220558u, 0, REMAINDERF_TOLERANCE, 0}, +{513, 3201092813u, 1059481190u, 1048575998u, 0, REMAINDERF_TOLERANCE, 0}, +{514, 3201092813u, 1060320051u, 1050253721u, 0, REMAINDERF_TOLERANCE, 0}, +{515, 3201092813u, 1061158912u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{516, 3201092813u, 1061997773u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{517, 3201092813u, 1062836634u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{518, 3201092813u, 1063675494u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{519, 3201092813u, 1064514355u, 3201092813u, 0, REMAINDERF_TOLERANCE, 0}, +{520, 3199415091u, 3212836864u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{521, 3199415091u, 3211998003u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{522, 3199415091u, 3211159142u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{523, 3199415091u, 3210320282u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{524, 3199415091u, 3209481421u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{525, 3199415091u, 3208642560u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{526, 3199415091u, 3207803699u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{527, 3199415091u, 3206964838u, 1050253721u, 0, REMAINDERF_TOLERANCE, 0}, +{528, 3199415091u, 3206125978u, 1048576001u, 0, REMAINDERF_TOLERANCE, 0}, +{529, 3199415091u, 3205287117u, 1045220558u, 0, REMAINDERF_TOLERANCE, 0}, +{530, 3199415091u, 3204448256u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{531, 3199415091u, 3202770534u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{532, 3199415091u, 3201092813u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{533, 3199415091u, 3199415091u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{534, 3199415091u, 3197737370u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{535, 3199415091u, 3196059648u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{536, 3199415091u, 3192704205u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{537, 3199415091u, 3189348762u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{538, 3199415091u, 3184315597u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{539, 3199415091u, 3175926989u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{540, 3199415091u, 632815616u, 2771386368u, 0, REMAINDERF_TOLERANCE, 0}, +{541, 3199415091u, 1028443341u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{542, 3199415091u, 1036831949u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{543, 3199415091u, 1041865114u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{544, 3199415091u, 1045220557u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{545, 3199415091u, 1048576000u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{546, 3199415091u, 1050253722u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{547, 3199415091u, 1051931443u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{548, 3199415091u, 1053609165u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{549, 3199415091u, 1055286886u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{550, 3199415091u, 1056964608u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{551, 3199415091u, 1057803469u, 1045220558u, 0, REMAINDERF_TOLERANCE, 0}, +{552, 3199415091u, 1058642330u, 1048576001u, 0, REMAINDERF_TOLERANCE, 0}, +{553, 3199415091u, 1059481190u, 1050253721u, 0, REMAINDERF_TOLERANCE, 0}, +{554, 3199415091u, 1060320051u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{555, 3199415091u, 1061158912u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{556, 3199415091u, 1061997773u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{557, 3199415091u, 1062836634u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{558, 3199415091u, 1063675494u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{559, 3199415091u, 1064514355u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{560, 3197737370u, 3212836864u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{561, 3197737370u, 3211998003u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{562, 3197737370u, 3211159142u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{563, 3197737370u, 3210320282u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{564, 3197737370u, 3209481421u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{565, 3197737370u, 3208642560u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{566, 3197737370u, 3207803699u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{567, 3197737370u, 3206964838u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{568, 3197737370u, 3206125978u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{569, 3197737370u, 3205287117u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{570, 3197737370u, 3204448256u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{571, 3197737370u, 3202770534u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{572, 3197737370u, 3201092813u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{573, 3197737370u, 3199415091u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{574, 3197737370u, 3197737370u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{575, 3197737370u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{576, 3197737370u, 3192704205u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{577, 3197737370u, 3189348762u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{578, 3197737370u, 3184315597u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{579, 3197737370u, 3175926989u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{580, 3197737370u, 632815616u, 2755657728u, 0, REMAINDERF_TOLERANCE, 0}, +{581, 3197737370u, 1028443341u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{582, 3197737370u, 1036831949u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{583, 3197737370u, 1041865114u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{584, 3197737370u, 1045220557u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{585, 3197737370u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{586, 3197737370u, 1050253722u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{587, 3197737370u, 1051931443u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{588, 3197737370u, 1053609165u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{589, 3197737370u, 1055286886u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{590, 3197737370u, 1056964608u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{591, 3197737370u, 1057803469u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{592, 3197737370u, 1058642330u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{593, 3197737370u, 1059481190u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{594, 3197737370u, 1060320051u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{595, 3197737370u, 1061158912u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{596, 3197737370u, 1061997773u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{597, 3197737370u, 1062836634u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{598, 3197737370u, 1063675494u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{599, 3197737370u, 1064514355u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{600, 3196059648u, 3212836864u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{601, 3196059648u, 3211998003u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{602, 3196059648u, 3211159142u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{603, 3196059648u, 3210320282u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{604, 3196059648u, 3209481421u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{605, 3196059648u, 3208642560u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{606, 3196059648u, 3207803699u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{607, 3196059648u, 3206964838u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{608, 3196059648u, 3206125978u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{609, 3196059648u, 3205287117u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{610, 3196059648u, 3204448256u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{611, 3196059648u, 3202770534u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{612, 3196059648u, 3201092813u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{613, 3196059648u, 3199415091u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{614, 3196059648u, 3197737370u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{615, 3196059648u, 3196059648u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{616, 3196059648u, 3192704205u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{617, 3196059648u, 3189348762u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{618, 3196059648u, 3184315597u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{619, 3196059648u, 3175926989u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{620, 3196059648u, 632815616u, 623902720u, 0, REMAINDERF_TOLERANCE, 0}, +{621, 3196059648u, 1028443341u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{622, 3196059648u, 1036831949u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{623, 3196059648u, 1041865114u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{624, 3196059648u, 1045220557u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{625, 3196059648u, 1048576000u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{626, 3196059648u, 1050253722u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{627, 3196059648u, 1051931443u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{628, 3196059648u, 1053609165u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{629, 3196059648u, 1055286886u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{630, 3196059648u, 1056964608u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{631, 3196059648u, 1057803469u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{632, 3196059648u, 1058642330u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{633, 3196059648u, 1059481190u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{634, 3196059648u, 1060320051u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{635, 3196059648u, 1061158912u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{636, 3196059648u, 1061997773u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{637, 3196059648u, 1062836634u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{638, 3196059648u, 1063675494u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{639, 3196059648u, 1064514355u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{640, 3192704205u, 3212836864u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{641, 3192704205u, 3211998003u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{642, 3192704205u, 3211159142u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{643, 3192704205u, 3210320282u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{644, 3192704205u, 3209481421u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{645, 3192704205u, 3208642560u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{646, 3192704205u, 3207803699u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{647, 3192704205u, 3206964838u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{648, 3192704205u, 3206125978u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{649, 3192704205u, 3205287117u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{650, 3192704205u, 3204448256u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{651, 3192704205u, 3202770534u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{652, 3192704205u, 3201092813u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{653, 3192704205u, 3199415091u, 1041865113u, 0, REMAINDERF_TOLERANCE, 0}, +{654, 3192704205u, 3197737370u, 1036831950u, 0, REMAINDERF_TOLERANCE, 0}, +{655, 3192704205u, 3196059648u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{656, 3192704205u, 3192704205u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{657, 3192704205u, 3189348762u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{658, 3192704205u, 3184315597u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{659, 3192704205u, 3175926989u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{660, 3192704205u, 632815616u, 2743074816u, 0, REMAINDERF_TOLERANCE, 0}, +{661, 3192704205u, 1028443341u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{662, 3192704205u, 1036831949u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{663, 3192704205u, 1041865114u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{664, 3192704205u, 1045220557u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{665, 3192704205u, 1048576000u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{666, 3192704205u, 1050253722u, 1036831950u, 0, REMAINDERF_TOLERANCE, 0}, +{667, 3192704205u, 1051931443u, 1041865113u, 0, REMAINDERF_TOLERANCE, 0}, +{668, 3192704205u, 1053609165u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{669, 3192704205u, 1055286886u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{670, 3192704205u, 1056964608u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{671, 3192704205u, 1057803469u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{672, 3192704205u, 1058642330u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{673, 3192704205u, 1059481190u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{674, 3192704205u, 1060320051u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{675, 3192704205u, 1061158912u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{676, 3192704205u, 1061997773u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{677, 3192704205u, 1062836634u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{678, 3192704205u, 1063675494u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{679, 3192704205u, 1064514355u, 3192704205u, 0, REMAINDERF_TOLERANCE, 0}, +{680, 3189348762u, 3212836864u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{681, 3189348762u, 3211998003u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{682, 3189348762u, 3211159142u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{683, 3189348762u, 3210320282u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{684, 3189348762u, 3209481421u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{685, 3189348762u, 3208642560u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{686, 3189348762u, 3207803699u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{687, 3189348762u, 3206964838u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{688, 3189348762u, 3206125978u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{689, 3189348762u, 3205287117u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{690, 3189348762u, 3204448256u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{691, 3189348762u, 3202770534u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{692, 3189348762u, 3201092813u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{693, 3189348762u, 3199415091u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{694, 3189348762u, 3197737370u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{695, 3189348762u, 3196059648u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{696, 3189348762u, 3192704205u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{697, 3189348762u, 3189348762u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{698, 3189348762u, 3184315597u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{699, 3189348762u, 3175926989u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{700, 3189348762u, 632815616u, 622854144u, 0, REMAINDERF_TOLERANCE, 0}, +{701, 3189348762u, 1028443341u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{702, 3189348762u, 1036831949u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{703, 3189348762u, 1041865114u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{704, 3189348762u, 1045220557u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{705, 3189348762u, 1048576000u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{706, 3189348762u, 1050253722u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{707, 3189348762u, 1051931443u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{708, 3189348762u, 1053609165u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{709, 3189348762u, 1055286886u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{710, 3189348762u, 1056964608u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{711, 3189348762u, 1057803469u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{712, 3189348762u, 1058642330u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{713, 3189348762u, 1059481190u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{714, 3189348762u, 1060320051u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{715, 3189348762u, 1061158912u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{716, 3189348762u, 1061997773u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{717, 3189348762u, 1062836634u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{718, 3189348762u, 1063675494u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{719, 3189348762u, 1064514355u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{720, 3184315597u, 3212836864u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{721, 3184315597u, 3211998003u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{722, 3184315597u, 3211159142u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{723, 3184315597u, 3210320282u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{724, 3184315597u, 3209481421u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{725, 3184315597u, 3208642560u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{726, 3184315597u, 3207803699u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{727, 3184315597u, 3206964838u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{728, 3184315597u, 3206125978u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{729, 3184315597u, 3205287117u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{730, 3184315597u, 3204448256u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{731, 3184315597u, 3202770534u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{732, 3184315597u, 3201092813u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{733, 3184315597u, 3199415091u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{734, 3184315597u, 3197737370u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{735, 3184315597u, 3196059648u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{736, 3184315597u, 3192704205u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{737, 3184315597u, 3189348762u, 1028443342u, 0, REMAINDERF_TOLERANCE, 0}, +{738, 3184315597u, 3184315597u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{739, 3184315597u, 3175926989u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{740, 3184315597u, 632815616u, 623902720u, 0, REMAINDERF_TOLERANCE, 0}, +{741, 3184315597u, 1028443341u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{742, 3184315597u, 1036831949u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{743, 3184315597u, 1041865114u, 1028443342u, 0, REMAINDERF_TOLERANCE, 0}, +{744, 3184315597u, 1045220557u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{745, 3184315597u, 1048576000u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{746, 3184315597u, 1050253722u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{747, 3184315597u, 1051931443u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{748, 3184315597u, 1053609165u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{749, 3184315597u, 1055286886u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{750, 3184315597u, 1056964608u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{751, 3184315597u, 1057803469u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{752, 3184315597u, 1058642330u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{753, 3184315597u, 1059481190u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{754, 3184315597u, 1060320051u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{755, 3184315597u, 1061158912u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{756, 3184315597u, 1061997773u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{757, 3184315597u, 1062836634u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{758, 3184315597u, 1063675494u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{759, 3184315597u, 1064514355u, 3184315597u, 0, REMAINDERF_TOLERANCE, 0}, +{760, 3175926989u, 3212836864u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{761, 3175926989u, 3211998003u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{762, 3175926989u, 3211159142u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{763, 3175926989u, 3210320282u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{764, 3175926989u, 3209481421u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{765, 3175926989u, 3208642560u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{766, 3175926989u, 3207803699u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{767, 3175926989u, 3206964838u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{768, 3175926989u, 3206125978u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{769, 3175926989u, 3205287117u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{770, 3175926989u, 3204448256u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{771, 3175926989u, 3202770534u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{772, 3175926989u, 3201092813u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{773, 3175926989u, 3199415091u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{774, 3175926989u, 3197737370u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{775, 3175926989u, 3196059648u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{776, 3175926989u, 3192704205u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{777, 3175926989u, 3189348762u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{778, 3175926989u, 3184315597u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{779, 3175926989u, 3175926989u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{780, 3175926989u, 632815616u, 2764046336u, 0, REMAINDERF_TOLERANCE, 0}, +{781, 3175926989u, 1028443341u, 2147483648u, 0, REMAINDERF_TOLERANCE, 0}, +{782, 3175926989u, 1036831949u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{783, 3175926989u, 1041865114u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{784, 3175926989u, 1045220557u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{785, 3175926989u, 1048576000u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{786, 3175926989u, 1050253722u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{787, 3175926989u, 1051931443u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{788, 3175926989u, 1053609165u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{789, 3175926989u, 1055286886u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{790, 3175926989u, 1056964608u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{791, 3175926989u, 1057803469u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{792, 3175926989u, 1058642330u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{793, 3175926989u, 1059481190u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{794, 3175926989u, 1060320051u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{795, 3175926989u, 1061158912u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{796, 3175926989u, 1061997773u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{797, 3175926989u, 1062836634u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{798, 3175926989u, 1063675494u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{799, 3175926989u, 1064514355u, 3175926989u, 0, REMAINDERF_TOLERANCE, 0}, +{800, 1028443341u, 3212836864u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{801, 1028443341u, 3211998003u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{802, 1028443341u, 3211159142u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{803, 1028443341u, 3210320282u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{804, 1028443341u, 3209481421u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{805, 1028443341u, 3208642560u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{806, 1028443341u, 3207803699u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{807, 1028443341u, 3206964838u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{808, 1028443341u, 3206125978u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{809, 1028443341u, 3205287117u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{810, 1028443341u, 3204448256u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{811, 1028443341u, 3202770534u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{812, 1028443341u, 3201092813u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{813, 1028443341u, 3199415091u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{814, 1028443341u, 3197737370u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{815, 1028443341u, 3196059648u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{816, 1028443341u, 3192704205u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{817, 1028443341u, 3189348762u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{818, 1028443341u, 3184315597u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{819, 1028443341u, 3175926989u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{820, 1028443341u, 632815616u, 616562688u, 0, REMAINDERF_TOLERANCE, 0}, +{821, 1028443341u, 1028443341u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{822, 1028443341u, 1036831949u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{823, 1028443341u, 1041865114u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{824, 1028443341u, 1045220557u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{825, 1028443341u, 1048576000u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{826, 1028443341u, 1050253722u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{827, 1028443341u, 1051931443u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{828, 1028443341u, 1053609165u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{829, 1028443341u, 1055286886u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{830, 1028443341u, 1056964608u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{831, 1028443341u, 1057803469u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{832, 1028443341u, 1058642330u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{833, 1028443341u, 1059481190u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{834, 1028443341u, 1060320051u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{835, 1028443341u, 1061158912u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{836, 1028443341u, 1061997773u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{837, 1028443341u, 1062836634u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{838, 1028443341u, 1063675494u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{839, 1028443341u, 1064514355u, 1028443341u, 0, REMAINDERF_TOLERANCE, 0}, +{840, 1036831949u, 3212836864u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{841, 1036831949u, 3211998003u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{842, 1036831949u, 3211159142u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{843, 1036831949u, 3210320282u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{844, 1036831949u, 3209481421u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{845, 1036831949u, 3208642560u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{846, 1036831949u, 3207803699u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{847, 1036831949u, 3206964838u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{848, 1036831949u, 3206125978u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{849, 1036831949u, 3205287117u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{850, 1036831949u, 3204448256u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{851, 1036831949u, 3202770534u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{852, 1036831949u, 3201092813u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{853, 1036831949u, 3199415091u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{854, 1036831949u, 3197737370u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{855, 1036831949u, 3196059648u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{856, 1036831949u, 3192704205u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{857, 1036831949u, 3189348762u, 3175926990u, 0, REMAINDERF_TOLERANCE, 0}, +{858, 1036831949u, 3184315597u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{859, 1036831949u, 3175926989u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{860, 1036831949u, 632815616u, 2771386368u, 0, REMAINDERF_TOLERANCE, 0}, +{861, 1036831949u, 1028443341u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{862, 1036831949u, 1036831949u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{863, 1036831949u, 1041865114u, 3175926990u, 0, REMAINDERF_TOLERANCE, 0}, +{864, 1036831949u, 1045220557u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{865, 1036831949u, 1048576000u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{866, 1036831949u, 1050253722u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{867, 1036831949u, 1051931443u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{868, 1036831949u, 1053609165u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{869, 1036831949u, 1055286886u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{870, 1036831949u, 1056964608u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{871, 1036831949u, 1057803469u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{872, 1036831949u, 1058642330u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{873, 1036831949u, 1059481190u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{874, 1036831949u, 1060320051u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{875, 1036831949u, 1061158912u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{876, 1036831949u, 1061997773u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{877, 1036831949u, 1062836634u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{878, 1036831949u, 1063675494u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{879, 1036831949u, 1064514355u, 1036831949u, 0, REMAINDERF_TOLERANCE, 0}, +{880, 1041865114u, 3212836864u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{881, 1041865114u, 3211998003u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{882, 1041865114u, 3211159142u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{883, 1041865114u, 3210320282u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{884, 1041865114u, 3209481421u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{885, 1041865114u, 3208642560u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{886, 1041865114u, 3207803699u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{887, 1041865114u, 3206964838u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{888, 1041865114u, 3206125978u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{889, 1041865114u, 3205287117u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{890, 1041865114u, 3204448256u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{891, 1041865114u, 3202770534u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{892, 1041865114u, 3201092813u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{893, 1041865114u, 3199415091u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{894, 1041865114u, 3197737370u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{895, 1041865114u, 3196059648u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{896, 1041865114u, 3192704205u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{897, 1041865114u, 3189348762u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{898, 1041865114u, 3184315597u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{899, 1041865114u, 3175926989u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{900, 1041865114u, 632815616u, 2770337792u, 0, REMAINDERF_TOLERANCE, 0}, +{901, 1041865114u, 1028443341u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{902, 1041865114u, 1036831949u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{903, 1041865114u, 1041865114u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{904, 1041865114u, 1045220557u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{905, 1041865114u, 1048576000u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{906, 1041865114u, 1050253722u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{907, 1041865114u, 1051931443u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{908, 1041865114u, 1053609165u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{909, 1041865114u, 1055286886u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{910, 1041865114u, 1056964608u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{911, 1041865114u, 1057803469u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{912, 1041865114u, 1058642330u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{913, 1041865114u, 1059481190u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{914, 1041865114u, 1060320051u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{915, 1041865114u, 1061158912u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{916, 1041865114u, 1061997773u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{917, 1041865114u, 1062836634u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{918, 1041865114u, 1063675494u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{919, 1041865114u, 1064514355u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{920, 1045220557u, 3212836864u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{921, 1045220557u, 3211998003u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{922, 1045220557u, 3211159142u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{923, 1045220557u, 3210320282u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{924, 1045220557u, 3209481421u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{925, 1045220557u, 3208642560u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{926, 1045220557u, 3207803699u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{927, 1045220557u, 3206964838u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{928, 1045220557u, 3206125978u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{929, 1045220557u, 3205287117u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{930, 1045220557u, 3204448256u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{931, 1045220557u, 3202770534u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{932, 1045220557u, 3201092813u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{933, 1045220557u, 3199415091u, 3189348761u, 0, REMAINDERF_TOLERANCE, 0}, +{934, 1045220557u, 3197737370u, 3184315598u, 0, REMAINDERF_TOLERANCE, 0}, +{935, 1045220557u, 3196059648u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{936, 1045220557u, 3192704205u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{937, 1045220557u, 3189348762u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{938, 1045220557u, 3184315597u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{939, 1045220557u, 3175926989u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{940, 1045220557u, 632815616u, 595591168u, 0, REMAINDERF_TOLERANCE, 0}, +{941, 1045220557u, 1028443341u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{942, 1045220557u, 1036831949u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{943, 1045220557u, 1041865114u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{944, 1045220557u, 1045220557u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{945, 1045220557u, 1048576000u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{946, 1045220557u, 1050253722u, 3184315598u, 0, REMAINDERF_TOLERANCE, 0}, +{947, 1045220557u, 1051931443u, 3189348761u, 0, REMAINDERF_TOLERANCE, 0}, +{948, 1045220557u, 1053609165u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{949, 1045220557u, 1055286886u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{950, 1045220557u, 1056964608u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{951, 1045220557u, 1057803469u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{952, 1045220557u, 1058642330u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{953, 1045220557u, 1059481190u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{954, 1045220557u, 1060320051u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{955, 1045220557u, 1061158912u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{956, 1045220557u, 1061997773u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{957, 1045220557u, 1062836634u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{958, 1045220557u, 1063675494u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{959, 1045220557u, 1064514355u, 1045220557u, 0, REMAINDERF_TOLERANCE, 0}, +{960, 1048576000u, 3212836864u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{961, 1048576000u, 3211998003u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{962, 1048576000u, 3211159142u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{963, 1048576000u, 3210320282u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{964, 1048576000u, 3209481421u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{965, 1048576000u, 3208642560u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{966, 1048576000u, 3207803699u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{967, 1048576000u, 3206964838u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{968, 1048576000u, 3206125978u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{969, 1048576000u, 3205287117u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{970, 1048576000u, 3204448256u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{971, 1048576000u, 3202770534u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{972, 1048576000u, 3201092813u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{973, 1048576000u, 3199415091u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{974, 1048576000u, 3197737370u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{975, 1048576000u, 3196059648u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{976, 1048576000u, 3192704205u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{977, 1048576000u, 3189348762u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{978, 1048576000u, 3184315597u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{979, 1048576000u, 3175926989u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{980, 1048576000u, 632815616u, 2771386368u, 0, REMAINDERF_TOLERANCE, 0}, +{981, 1048576000u, 1028443341u, 2977955840u, 0, REMAINDERF_TOLERANCE, 0}, +{982, 1048576000u, 1036831949u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{983, 1048576000u, 1041865114u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{984, 1048576000u, 1045220557u, 1028443340u, 0, REMAINDERF_TOLERANCE, 0}, +{985, 1048576000u, 1048576000u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{986, 1048576000u, 1050253722u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{987, 1048576000u, 1051931443u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{988, 1048576000u, 1053609165u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{989, 1048576000u, 1055286886u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{990, 1048576000u, 1056964608u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{991, 1048576000u, 1057803469u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{992, 1048576000u, 1058642330u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{993, 1048576000u, 1059481190u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{994, 1048576000u, 1060320051u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{995, 1048576000u, 1061158912u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{996, 1048576000u, 1061997773u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{997, 1048576000u, 1062836634u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{998, 1048576000u, 1063675494u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{999, 1048576000u, 1064514355u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1000, 1050253722u, 3212836864u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1001, 1050253722u, 3211998003u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1002, 1050253722u, 3211159142u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1003, 1050253722u, 3210320282u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1004, 1050253722u, 3209481421u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1005, 1050253722u, 3208642560u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1006, 1050253722u, 3207803699u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1007, 1050253722u, 3206964838u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1008, 1050253722u, 3206125978u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1009, 1050253722u, 3205287117u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1010, 1050253722u, 3204448256u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1011, 1050253722u, 3202770534u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1012, 1050253722u, 3201092813u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1013, 1050253722u, 3199415091u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{1014, 1050253722u, 3197737370u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1015, 1050253722u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1016, 1050253722u, 3192704205u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1017, 1050253722u, 3189348762u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1018, 1050253722u, 3184315597u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{1019, 1050253722u, 3175926989u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{1020, 1050253722u, 632815616u, 608174080u, 0, REMAINDERF_TOLERANCE, 0}, +{1021, 1050253722u, 1028443341u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{1022, 1050253722u, 1036831949u, 838860800u, 0, REMAINDERF_TOLERANCE, 0}, +{1023, 1050253722u, 1041865114u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1024, 1050253722u, 1045220557u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1025, 1050253722u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1026, 1050253722u, 1050253722u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1027, 1050253722u, 1051931443u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{1028, 1050253722u, 1053609165u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1029, 1050253722u, 1055286886u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1030, 1050253722u, 1056964608u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1031, 1050253722u, 1057803469u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1032, 1050253722u, 1058642330u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1033, 1050253722u, 1059481190u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1034, 1050253722u, 1060320051u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1035, 1050253722u, 1061158912u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1036, 1050253722u, 1061997773u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1037, 1050253722u, 1062836634u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1038, 1050253722u, 1063675494u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1039, 1050253722u, 1064514355u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1040, 1051931443u, 3212836864u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1041, 1051931443u, 3211998003u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1042, 1051931443u, 3211159142u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1043, 1051931443u, 3210320282u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1044, 1051931443u, 3209481421u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1045, 1051931443u, 3208642560u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1046, 1051931443u, 3207803699u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1047, 1051931443u, 3206964838u, 3197737369u, 0, REMAINDERF_TOLERANCE, 0}, +{1048, 1051931443u, 3206125978u, 3196059649u, 0, REMAINDERF_TOLERANCE, 0}, +{1049, 1051931443u, 3205287117u, 3192704206u, 0, REMAINDERF_TOLERANCE, 0}, +{1050, 1051931443u, 3204448256u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1051, 1051931443u, 3202770534u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1052, 1051931443u, 3201092813u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1053, 1051931443u, 3199415091u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1054, 1051931443u, 3197737370u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1055, 1051931443u, 3196059648u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1056, 1051931443u, 3192704205u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1057, 1051931443u, 3189348762u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1058, 1051931443u, 3184315597u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{1059, 1051931443u, 3175926989u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{1060, 1051931443u, 632815616u, 623902720u, 0, REMAINDERF_TOLERANCE, 0}, +{1061, 1051931443u, 1028443341u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{1062, 1051931443u, 1036831949u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{1063, 1051931443u, 1041865114u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1064, 1051931443u, 1045220557u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1065, 1051931443u, 1048576000u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1066, 1051931443u, 1050253722u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1067, 1051931443u, 1051931443u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1068, 1051931443u, 1053609165u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1069, 1051931443u, 1055286886u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1070, 1051931443u, 1056964608u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1071, 1051931443u, 1057803469u, 3192704206u, 0, REMAINDERF_TOLERANCE, 0}, +{1072, 1051931443u, 1058642330u, 3196059649u, 0, REMAINDERF_TOLERANCE, 0}, +{1073, 1051931443u, 1059481190u, 3197737369u, 0, REMAINDERF_TOLERANCE, 0}, +{1074, 1051931443u, 1060320051u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1075, 1051931443u, 1061158912u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1076, 1051931443u, 1061997773u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1077, 1051931443u, 1062836634u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1078, 1051931443u, 1063675494u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1079, 1051931443u, 1064514355u, 1051931443u, 0, REMAINDERF_TOLERANCE, 0}, +{1080, 1053609165u, 3212836864u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1081, 1053609165u, 3211998003u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1082, 1053609165u, 3211159142u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1083, 1053609165u, 3210320282u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1084, 1053609165u, 3209481421u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1085, 1053609165u, 3208642560u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{1086, 1053609165u, 3207803699u, 3197737369u, 0, REMAINDERF_TOLERANCE, 0}, +{1087, 1053609165u, 3206964838u, 3196059646u, 0, REMAINDERF_TOLERANCE, 0}, +{1088, 1053609165u, 3206125978u, 3192704206u, 0, REMAINDERF_TOLERANCE, 0}, +{1089, 1053609165u, 3205287117u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1090, 1053609165u, 3204448256u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1091, 1053609165u, 3202770534u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{1092, 1053609165u, 3201092813u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1093, 1053609165u, 3199415091u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1094, 1053609165u, 3197737370u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1095, 1053609165u, 3196059648u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1096, 1053609165u, 3192704205u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1097, 1053609165u, 3189348762u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1098, 1053609165u, 3184315597u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1099, 1053609165u, 3175926989u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1100, 1053609165u, 632815616u, 603979776u, 0, REMAINDERF_TOLERANCE, 0}, +{1101, 1053609165u, 1028443341u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1102, 1053609165u, 1036831949u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1103, 1053609165u, 1041865114u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1104, 1053609165u, 1045220557u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1105, 1053609165u, 1048576000u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1106, 1053609165u, 1050253722u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1107, 1053609165u, 1051931443u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1108, 1053609165u, 1053609165u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1109, 1053609165u, 1055286886u, 3175926984u, 0, REMAINDERF_TOLERANCE, 0}, +{1110, 1053609165u, 1056964608u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1111, 1053609165u, 1057803469u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1112, 1053609165u, 1058642330u, 3192704206u, 0, REMAINDERF_TOLERANCE, 0}, +{1113, 1053609165u, 1059481190u, 3196059646u, 0, REMAINDERF_TOLERANCE, 0}, +{1114, 1053609165u, 1060320051u, 3197737369u, 0, REMAINDERF_TOLERANCE, 0}, +{1115, 1053609165u, 1061158912u, 3199415091u, 0, REMAINDERF_TOLERANCE, 0}, +{1116, 1053609165u, 1061997773u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1117, 1053609165u, 1062836634u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1118, 1053609165u, 1063675494u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1119, 1053609165u, 1064514355u, 1053609165u, 0, REMAINDERF_TOLERANCE, 0}, +{1120, 1055286886u, 3212836864u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{1121, 1055286886u, 3211998003u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{1122, 1055286886u, 3211159142u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{1123, 1055286886u, 3210320282u, 3201092814u, 0, REMAINDERF_TOLERANCE, 0}, +{1124, 1055286886u, 3209481421u, 3199415092u, 0, REMAINDERF_TOLERANCE, 0}, +{1125, 1055286886u, 3208642560u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1126, 1055286886u, 3207803699u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1127, 1055286886u, 3206964838u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1128, 1055286886u, 3206125978u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1129, 1055286886u, 3205287117u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1130, 1055286886u, 3204448256u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1131, 1055286886u, 3202770534u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1132, 1055286886u, 3201092813u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1133, 1055286886u, 3199415091u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1134, 1055286886u, 3197737370u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1135, 1055286886u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1136, 1055286886u, 3192704205u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1137, 1055286886u, 3189348762u, 3003121664u, 0, REMAINDERF_TOLERANCE, 0}, +{1138, 1055286886u, 3184315597u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1139, 1055286886u, 3175926989u, 2996830208u, 0, REMAINDERF_TOLERANCE, 0}, +{1140, 1055286886u, 632815616u, 622854144u, 0, REMAINDERF_TOLERANCE, 0}, +{1141, 1055286886u, 1028443341u, 2996830208u, 0, REMAINDERF_TOLERANCE, 0}, +{1142, 1055286886u, 1036831949u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1143, 1055286886u, 1041865114u, 3003121664u, 0, REMAINDERF_TOLERANCE, 0}, +{1144, 1055286886u, 1045220557u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1145, 1055286886u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1146, 1055286886u, 1050253722u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1147, 1055286886u, 1051931443u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1148, 1055286886u, 1053609165u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1149, 1055286886u, 1055286886u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1150, 1055286886u, 1056964608u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1151, 1055286886u, 1057803469u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1152, 1055286886u, 1058642330u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1153, 1055286886u, 1059481190u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1154, 1055286886u, 1060320051u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1155, 1055286886u, 1061158912u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1156, 1055286886u, 1061997773u, 3199415092u, 0, REMAINDERF_TOLERANCE, 0}, +{1157, 1055286886u, 1062836634u, 3201092814u, 0, REMAINDERF_TOLERANCE, 0}, +{1158, 1055286886u, 1063675494u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{1159, 1055286886u, 1064514355u, 1055286886u, 0, REMAINDERF_TOLERANCE, 0}, +{1160, 1056964608u, 3212836864u, 1056964608u, 0, REMAINDERF_TOLERANCE, 0}, +{1161, 1056964608u, 3211998003u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{1162, 1056964608u, 3211159142u, 3201092812u, 0, REMAINDERF_TOLERANCE, 0}, +{1163, 1056964608u, 3210320282u, 3199415092u, 0, REMAINDERF_TOLERANCE, 0}, +{1164, 1056964608u, 3209481421u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1165, 1056964608u, 3208642560u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1166, 1056964608u, 3207803699u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1167, 1056964608u, 3206964838u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1168, 1056964608u, 3206125978u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1169, 1056964608u, 3205287117u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1170, 1056964608u, 3204448256u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1171, 1056964608u, 3202770534u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1172, 1056964608u, 3201092813u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1173, 1056964608u, 3199415091u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{1174, 1056964608u, 3197737370u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1175, 1056964608u, 3196059648u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1176, 1056964608u, 3192704205u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1177, 1056964608u, 3189348762u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1178, 1056964608u, 3184315597u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{1179, 1056964608u, 3175926989u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{1180, 1056964608u, 632815616u, 595591168u, 0, REMAINDERF_TOLERANCE, 0}, +{1181, 1056964608u, 1028443341u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{1182, 1056964608u, 1036831949u, 2986344448u, 0, REMAINDERF_TOLERANCE, 0}, +{1183, 1056964608u, 1041865114u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1184, 1056964608u, 1045220557u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1185, 1056964608u, 1048576000u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1186, 1056964608u, 1050253722u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1187, 1056964608u, 1051931443u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{1188, 1056964608u, 1053609165u, 1036831948u, 0, REMAINDERF_TOLERANCE, 0}, +{1189, 1056964608u, 1055286886u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1190, 1056964608u, 1056964608u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1191, 1056964608u, 1057803469u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1192, 1056964608u, 1058642330u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1193, 1056964608u, 1059481190u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1194, 1056964608u, 1060320051u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1195, 1056964608u, 1061158912u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1196, 1056964608u, 1061997773u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1197, 1056964608u, 1062836634u, 3199415092u, 0, REMAINDERF_TOLERANCE, 0}, +{1198, 1056964608u, 1063675494u, 3201092812u, 0, REMAINDERF_TOLERANCE, 0}, +{1199, 1056964608u, 1064514355u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{1200, 1057803469u, 3212836864u, 3202770534u, 0, REMAINDERF_TOLERANCE, 0}, +{1201, 1057803469u, 3211998003u, 3201092812u, 0, REMAINDERF_TOLERANCE, 0}, +{1202, 1057803469u, 3211159142u, 3199415090u, 0, REMAINDERF_TOLERANCE, 0}, +{1203, 1057803469u, 3210320282u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1204, 1057803469u, 3209481421u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1205, 1057803469u, 3208642560u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1206, 1057803469u, 3207803699u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1207, 1057803469u, 3206964838u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1208, 1057803469u, 3206125978u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1209, 1057803469u, 3205287117u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1210, 1057803469u, 3204448256u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1211, 1057803469u, 3202770534u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1212, 1057803469u, 3201092813u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{1213, 1057803469u, 3199415091u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1214, 1057803469u, 3197737370u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1215, 1057803469u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1216, 1057803469u, 3192704205u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{1217, 1057803469u, 3189348762u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1218, 1057803469u, 3184315597u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{1219, 1057803469u, 3175926989u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{1220, 1057803469u, 632815616u, 2768240640u, 0, REMAINDERF_TOLERANCE, 0}, +{1221, 1057803469u, 1028443341u, 830472192u, 0, REMAINDERF_TOLERANCE, 0}, +{1222, 1057803469u, 1036831949u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{1223, 1057803469u, 1041865114u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1224, 1057803469u, 1045220557u, 3175926988u, 0, REMAINDERF_TOLERANCE, 0}, +{1225, 1057803469u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1226, 1057803469u, 1050253722u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1227, 1057803469u, 1051931443u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1228, 1057803469u, 1053609165u, 1041865114u, 0, REMAINDERF_TOLERANCE, 0}, +{1229, 1057803469u, 1055286886u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1230, 1057803469u, 1056964608u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1231, 1057803469u, 1057803469u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1232, 1057803469u, 1058642330u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1233, 1057803469u, 1059481190u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1234, 1057803469u, 1060320051u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1235, 1057803469u, 1061158912u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1236, 1057803469u, 1061997773u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1237, 1057803469u, 1062836634u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1238, 1057803469u, 1063675494u, 3199415090u, 0, REMAINDERF_TOLERANCE, 0}, +{1239, 1057803469u, 1064514355u, 3201092812u, 0, REMAINDERF_TOLERANCE, 0}, +{1240, 1058642330u, 3212836864u, 3201092812u, 0, REMAINDERF_TOLERANCE, 0}, +{1241, 1058642330u, 3211998003u, 3199415090u, 0, REMAINDERF_TOLERANCE, 0}, +{1242, 1058642330u, 3211159142u, 3197737368u, 0, REMAINDERF_TOLERANCE, 0}, +{1243, 1058642330u, 3210320282u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1244, 1058642330u, 3209481421u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1245, 1058642330u, 3208642560u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1246, 1058642330u, 3207803699u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1247, 1058642330u, 3206964838u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1248, 1058642330u, 3206125978u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1249, 1058642330u, 3205287117u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1250, 1058642330u, 3204448256u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1251, 1058642330u, 3202770534u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1252, 1058642330u, 3201092813u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1253, 1058642330u, 3199415091u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1254, 1058642330u, 3197737370u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1255, 1058642330u, 3196059648u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1256, 1058642330u, 3192704205u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1257, 1058642330u, 3189348762u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1258, 1058642330u, 3184315597u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1259, 1058642330u, 3175926989u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1260, 1058642330u, 632815616u, 616562688u, 0, REMAINDERF_TOLERANCE, 0}, +{1261, 1058642330u, 1028443341u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1262, 1058642330u, 1036831949u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1263, 1058642330u, 1041865114u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1264, 1058642330u, 1045220557u, 847249408u, 0, REMAINDERF_TOLERANCE, 0}, +{1265, 1058642330u, 1048576000u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1266, 1058642330u, 1050253722u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1267, 1058642330u, 1051931443u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1268, 1058642330u, 1053609165u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1269, 1058642330u, 1055286886u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1270, 1058642330u, 1056964608u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1271, 1058642330u, 1057803469u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1272, 1058642330u, 1058642330u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1273, 1058642330u, 1059481190u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1274, 1058642330u, 1060320051u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1275, 1058642330u, 1061158912u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1276, 1058642330u, 1061997773u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1277, 1058642330u, 1062836634u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1278, 1058642330u, 1063675494u, 3197737368u, 0, REMAINDERF_TOLERANCE, 0}, +{1279, 1058642330u, 1064514355u, 3199415090u, 0, REMAINDERF_TOLERANCE, 0}, +{1280, 1059481190u, 3212836864u, 3199415092u, 0, REMAINDERF_TOLERANCE, 0}, +{1281, 1059481190u, 3211998003u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1282, 1059481190u, 3211159142u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1283, 1059481190u, 3210320282u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{1284, 1059481190u, 3209481421u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1285, 1059481190u, 3208642560u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1286, 1059481190u, 3207803699u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1287, 1059481190u, 3206964838u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1288, 1059481190u, 3206125978u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1289, 1059481190u, 3205287117u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1290, 1059481190u, 3204448256u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1291, 1059481190u, 3202770534u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1292, 1059481190u, 3201092813u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1293, 1059481190u, 3199415091u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1294, 1059481190u, 3197737370u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1295, 1059481190u, 3196059648u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1296, 1059481190u, 3192704205u, 1028443332u, 0, REMAINDERF_TOLERANCE, 0}, +{1297, 1059481190u, 3189348762u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1298, 1059481190u, 3184315597u, 1028443332u, 0, REMAINDERF_TOLERANCE, 0}, +{1299, 1059481190u, 3175926989u, 3004170240u, 0, REMAINDERF_TOLERANCE, 0}, +{1300, 1059481190u, 632815616u, 620756992u, 0, REMAINDERF_TOLERANCE, 0}, +{1301, 1059481190u, 1028443341u, 3004170240u, 0, REMAINDERF_TOLERANCE, 0}, +{1302, 1059481190u, 1036831949u, 1028443332u, 0, REMAINDERF_TOLERANCE, 0}, +{1303, 1059481190u, 1041865114u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1304, 1059481190u, 1045220557u, 1028443332u, 0, REMAINDERF_TOLERANCE, 0}, +{1305, 1059481190u, 1048576000u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1306, 1059481190u, 1050253722u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1307, 1059481190u, 1051931443u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1308, 1059481190u, 1053609165u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1309, 1059481190u, 1055286886u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1310, 1059481190u, 1056964608u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1311, 1059481190u, 1057803469u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1312, 1059481190u, 1058642330u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1313, 1059481190u, 1059481190u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1314, 1059481190u, 1060320051u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1315, 1059481190u, 1061158912u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1316, 1059481190u, 1061997773u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1317, 1059481190u, 1062836634u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{1318, 1059481190u, 1063675494u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1319, 1059481190u, 1064514355u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1320, 1060320051u, 3212836864u, 3197737370u, 0, REMAINDERF_TOLERANCE, 0}, +{1321, 1060320051u, 3211998003u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1322, 1060320051u, 3211159142u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1323, 1060320051u, 3210320282u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1324, 1060320051u, 3209481421u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1325, 1060320051u, 3208642560u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1326, 1060320051u, 3207803699u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1327, 1060320051u, 3206964838u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1328, 1060320051u, 3206125978u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1329, 1060320051u, 3205287117u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1330, 1060320051u, 3204448256u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1331, 1060320051u, 3202770534u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1332, 1060320051u, 3201092813u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1333, 1060320051u, 3199415091u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1334, 1060320051u, 3197737370u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1335, 1060320051u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1336, 1060320051u, 3192704205u, 1036831946u, 0, REMAINDERF_TOLERANCE, 0}, +{1337, 1060320051u, 3189348762u, 3175927000u, 0, REMAINDERF_TOLERANCE, 0}, +{1338, 1060320051u, 3184315597u, 2998927360u, 0, REMAINDERF_TOLERANCE, 0}, +{1339, 1060320051u, 3175926989u, 2998927360u, 0, REMAINDERF_TOLERANCE, 0}, +{1340, 1060320051u, 632815616u, 2743074816u, 0, REMAINDERF_TOLERANCE, 0}, +{1341, 1060320051u, 1028443341u, 2998927360u, 0, REMAINDERF_TOLERANCE, 0}, +{1342, 1060320051u, 1036831949u, 2998927360u, 0, REMAINDERF_TOLERANCE, 0}, +{1343, 1060320051u, 1041865114u, 3175927000u, 0, REMAINDERF_TOLERANCE, 0}, +{1344, 1060320051u, 1045220557u, 1036831946u, 0, REMAINDERF_TOLERANCE, 0}, +{1345, 1060320051u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1346, 1060320051u, 1050253722u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1347, 1060320051u, 1051931443u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1348, 1060320051u, 1053609165u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1349, 1060320051u, 1055286886u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1350, 1060320051u, 1056964608u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1351, 1060320051u, 1057803469u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1352, 1060320051u, 1058642330u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1353, 1060320051u, 1059481190u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1354, 1060320051u, 1060320051u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1355, 1060320051u, 1061158912u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1356, 1060320051u, 1061997773u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1357, 1060320051u, 1062836634u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1358, 1060320051u, 1063675494u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1359, 1060320051u, 1064514355u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1360, 1061158912u, 3212836864u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1361, 1061158912u, 3211998003u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1362, 1061158912u, 3211159142u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1363, 1061158912u, 3210320282u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1364, 1061158912u, 3209481421u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1365, 1061158912u, 3208642560u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1366, 1061158912u, 3207803699u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1367, 1061158912u, 3206964838u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1368, 1061158912u, 3206125978u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1369, 1061158912u, 3205287117u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1370, 1061158912u, 3204448256u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1371, 1061158912u, 3202770534u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1372, 1061158912u, 3201092813u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1373, 1061158912u, 3199415091u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1374, 1061158912u, 3197737370u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1375, 1061158912u, 3196059648u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1376, 1061158912u, 3192704205u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1377, 1061158912u, 3189348762u, 3003121664u, 0, REMAINDERF_TOLERANCE, 0}, +{1378, 1061158912u, 3184315597u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{1379, 1061158912u, 3175926989u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{1380, 1061158912u, 632815616u, 2770337792u, 0, REMAINDERF_TOLERANCE, 0}, +{1381, 1061158912u, 1028443341u, 2990538752u, 0, REMAINDERF_TOLERANCE, 0}, +{1382, 1061158912u, 1036831949u, 1028443338u, 0, REMAINDERF_TOLERANCE, 0}, +{1383, 1061158912u, 1041865114u, 3003121664u, 0, REMAINDERF_TOLERANCE, 0}, +{1384, 1061158912u, 1045220557u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1385, 1061158912u, 1048576000u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1386, 1061158912u, 1050253722u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1387, 1061158912u, 1051931443u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1388, 1061158912u, 1053609165u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1389, 1061158912u, 1055286886u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1390, 1061158912u, 1056964608u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1391, 1061158912u, 1057803469u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1392, 1061158912u, 1058642330u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1393, 1061158912u, 1059481190u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1394, 1061158912u, 1060320051u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1395, 1061158912u, 1061158912u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1396, 1061158912u, 1061997773u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1397, 1061158912u, 1062836634u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1398, 1061158912u, 1063675494u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1399, 1061158912u, 1064514355u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1400, 1061997773u, 3212836864u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1401, 1061997773u, 3211998003u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1402, 1061997773u, 3211159142u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1403, 1061997773u, 3210320282u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1404, 1061997773u, 3209481421u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1405, 1061997773u, 3208642560u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1406, 1061997773u, 3207803699u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1407, 1061997773u, 3206964838u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1408, 1061997773u, 3206125978u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1409, 1061997773u, 3205287117u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1410, 1061997773u, 3204448256u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1411, 1061997773u, 3202770534u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1412, 1061997773u, 3201092813u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1413, 1061997773u, 3199415091u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1414, 1061997773u, 3197737370u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1415, 1061997773u, 3196059648u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1416, 1061997773u, 3192704205u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1417, 1061997773u, 3189348762u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1418, 1061997773u, 3184315597u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1419, 1061997773u, 3175926989u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1420, 1061997773u, 632815616u, 612368384u, 0, REMAINDERF_TOLERANCE, 0}, +{1421, 1061997773u, 1028443341u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1422, 1061997773u, 1036831949u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1423, 1061997773u, 1041865114u, 1028443336u, 0, REMAINDERF_TOLERANCE, 0}, +{1424, 1061997773u, 1045220557u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1425, 1061997773u, 1048576000u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1426, 1061997773u, 1050253722u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1427, 1061997773u, 1051931443u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1428, 1061997773u, 1053609165u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1429, 1061997773u, 1055286886u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1430, 1061997773u, 1056964608u, 3192704204u, 0, REMAINDERF_TOLERANCE, 0}, +{1431, 1061997773u, 1057803469u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1432, 1061997773u, 1058642330u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1433, 1061997773u, 1059481190u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1434, 1061997773u, 1060320051u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1435, 1061997773u, 1061158912u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1436, 1061997773u, 1061997773u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1437, 1061997773u, 1062836634u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1438, 1061997773u, 1063675494u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1439, 1061997773u, 1064514355u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1440, 1062836634u, 3212836864u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1441, 1062836634u, 3211998003u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1442, 1062836634u, 3211159142u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1443, 1062836634u, 3210320282u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1444, 1062836634u, 3209481421u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1445, 1062836634u, 3208642560u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1446, 1062836634u, 3207803699u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1447, 1062836634u, 3206964838u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{1448, 1062836634u, 3206125978u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1449, 1062836634u, 3205287117u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1450, 1062836634u, 3204448256u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1451, 1062836634u, 3202770534u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1452, 1062836634u, 3201092813u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1453, 1062836634u, 3199415091u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1454, 1062836634u, 3197737370u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1455, 1062836634u, 3196059648u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1456, 1062836634u, 3192704205u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1457, 1062836634u, 3189348762u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1458, 1062836634u, 3184315597u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{1459, 1062836634u, 3175926989u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{1460, 1062836634u, 632815616u, 2761949184u, 0, REMAINDERF_TOLERANCE, 0}, +{1461, 1062836634u, 1028443341u, 843055104u, 0, REMAINDERF_TOLERANCE, 0}, +{1462, 1062836634u, 1036831949u, 3175926986u, 0, REMAINDERF_TOLERANCE, 0}, +{1463, 1062836634u, 1041865114u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1464, 1062836634u, 1045220557u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1465, 1062836634u, 1048576000u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1466, 1062836634u, 1050253722u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1467, 1062836634u, 1051931443u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1468, 1062836634u, 1053609165u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1469, 1062836634u, 1055286886u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1470, 1062836634u, 1056964608u, 3189348760u, 0, REMAINDERF_TOLERANCE, 0}, +{1471, 1062836634u, 1057803469u, 3196059648u, 0, REMAINDERF_TOLERANCE, 0}, +{1472, 1062836634u, 1058642330u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1473, 1062836634u, 1059481190u, 1045220560u, 0, REMAINDERF_TOLERANCE, 0}, +{1474, 1062836634u, 1060320051u, 1041865116u, 0, REMAINDERF_TOLERANCE, 0}, +{1475, 1062836634u, 1061158912u, 1036831952u, 0, REMAINDERF_TOLERANCE, 0}, +{1476, 1062836634u, 1061997773u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1477, 1062836634u, 1062836634u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1478, 1062836634u, 1063675494u, 3175926976u, 0, REMAINDERF_TOLERANCE, 0}, +{1479, 1062836634u, 1064514355u, 3184315592u, 0, REMAINDERF_TOLERANCE, 0}, +{1480, 1063675494u, 3212836864u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1481, 1063675494u, 3211998003u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1482, 1063675494u, 3211159142u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1483, 1063675494u, 3210320282u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1484, 1063675494u, 3209481421u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1485, 1063675494u, 3208642560u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1486, 1063675494u, 3207803699u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1487, 1063675494u, 3206964838u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1488, 1063675494u, 3206125978u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{1489, 1063675494u, 3205287117u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{1490, 1063675494u, 3204448256u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1491, 1063675494u, 3202770534u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1492, 1063675494u, 3201092813u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1493, 1063675494u, 3199415091u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1494, 1063675494u, 3197737370u, 3011510272u, 0, REMAINDERF_TOLERANCE, 0}, +{1495, 1063675494u, 3196059648u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1496, 1063675494u, 3192704205u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1497, 1063675494u, 3189348762u, 3011510272u, 0, REMAINDERF_TOLERANCE, 0}, +{1498, 1063675494u, 3184315597u, 3005218816u, 0, REMAINDERF_TOLERANCE, 0}, +{1499, 1063675494u, 3175926989u, 3005218816u, 0, REMAINDERF_TOLERANCE, 0}, +{1500, 1063675494u, 632815616u, 2755657728u, 0, REMAINDERF_TOLERANCE, 0}, +{1501, 1063675494u, 1028443341u, 3005218816u, 0, REMAINDERF_TOLERANCE, 0}, +{1502, 1063675494u, 1036831949u, 3005218816u, 0, REMAINDERF_TOLERANCE, 0}, +{1503, 1063675494u, 1041865114u, 3011510272u, 0, REMAINDERF_TOLERANCE, 0}, +{1504, 1063675494u, 1045220557u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1505, 1063675494u, 1048576000u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1506, 1063675494u, 1050253722u, 3011510272u, 0, REMAINDERF_TOLERANCE, 0}, +{1507, 1063675494u, 1051931443u, 3189348762u, 0, REMAINDERF_TOLERANCE, 0}, +{1508, 1063675494u, 1053609165u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1509, 1063675494u, 1055286886u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1510, 1063675494u, 1056964608u, 3184315600u, 0, REMAINDERF_TOLERANCE, 0}, +{1511, 1063675494u, 1057803469u, 3192704208u, 0, REMAINDERF_TOLERANCE, 0}, +{1512, 1063675494u, 1058642330u, 1050253720u, 0, REMAINDERF_TOLERANCE, 0}, +{1513, 1063675494u, 1059481190u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1514, 1063675494u, 1060320051u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1515, 1063675494u, 1061158912u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1516, 1063675494u, 1061997773u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1517, 1063675494u, 1062836634u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1518, 1063675494u, 1063675494u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1519, 1063675494u, 1064514355u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1520, 1064514355u, 3212836864u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1521, 1064514355u, 3211998003u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1522, 1064514355u, 3211159142u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1523, 1064514355u, 3210320282u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1524, 1064514355u, 3209481421u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1525, 1064514355u, 3208642560u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1526, 1064514355u, 3207803699u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1527, 1064514355u, 3206964838u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1528, 1064514355u, 3206125978u, 3196059650u, 0, REMAINDERF_TOLERANCE, 0}, +{1529, 1064514355u, 3205287117u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1530, 1064514355u, 3204448256u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1531, 1064514355u, 3202770534u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1532, 1064514355u, 3201092813u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1533, 1064514355u, 3199415091u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1534, 1064514355u, 3197737370u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1535, 1064514355u, 3196059648u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1536, 1064514355u, 3192704205u, 3175926996u, 0, REMAINDERF_TOLERANCE, 0}, +{1537, 1064514355u, 3189348762u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1538, 1064514355u, 3184315597u, 1028443334u, 0, REMAINDERF_TOLERANCE, 0}, +{1539, 1064514355u, 3175926989u, 3001024512u, 0, REMAINDERF_TOLERANCE, 0}, +{1540, 1064514355u, 632815616u, 623902720u, 0, REMAINDERF_TOLERANCE, 0}, +{1541, 1064514355u, 1028443341u, 3001024512u, 0, REMAINDERF_TOLERANCE, 0}, +{1542, 1064514355u, 1036831949u, 1028443334u, 0, REMAINDERF_TOLERANCE, 0}, +{1543, 1064514355u, 1041865114u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1544, 1064514355u, 1045220557u, 3175926996u, 0, REMAINDERF_TOLERANCE, 0}, +{1545, 1064514355u, 1048576000u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1546, 1064514355u, 1050253722u, 1028443328u, 0, REMAINDERF_TOLERANCE, 0}, +{1547, 1064514355u, 1051931443u, 3184315596u, 0, REMAINDERF_TOLERANCE, 0}, +{1548, 1064514355u, 1053609165u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1549, 1064514355u, 1055286886u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1550, 1064514355u, 1056964608u, 3175926992u, 0, REMAINDERF_TOLERANCE, 0}, +{1551, 1064514355u, 1057803469u, 3189348764u, 0, REMAINDERF_TOLERANCE, 0}, +{1552, 1064514355u, 1058642330u, 3196059650u, 0, REMAINDERF_TOLERANCE, 0}, +{1553, 1064514355u, 1059481190u, 1050253722u, 0, REMAINDERF_TOLERANCE, 0}, +{1554, 1064514355u, 1060320051u, 1048576000u, 0, REMAINDERF_TOLERANCE, 0}, +{1555, 1064514355u, 1061158912u, 1045220556u, 0, REMAINDERF_TOLERANCE, 0}, +{1556, 1064514355u, 1061997773u, 1041865112u, 0, REMAINDERF_TOLERANCE, 0}, +{1557, 1064514355u, 1062836634u, 1036831944u, 0, REMAINDERF_TOLERANCE, 0}, +{1558, 1064514355u, 1063675494u, 1028443344u, 0, REMAINDERF_TOLERANCE, 0}, +{1559, 1064514355u, 1064514355u, 0u, 0, REMAINDERF_TOLERANCE, 0}, +{1560, 1107800421u, 1203999711u, 1107800421u, 0, REMAINDERF_TOLERANCE, 0}, +{1561, 3196650934u, 896005582u, 882096508u, 0, REMAINDERF_TOLERANCE, 0}, +{1562, 3368700125u, 3308232444u, 3298314136u, 0, REMAINDERF_TOLERANCE, 0}, +{1563, 1224242132u, 3061363425u, 3044549332u, 0, REMAINDERF_TOLERANCE, 0}, +{1564, 1198712763u, 919636942u, 885884832u, 0, REMAINDERF_TOLERANCE, 0}, +{1565, 3159309973u, 852521077u, 839902526u, 0, REMAINDERF_TOLERANCE, 0}, +{1566, 954173073u, 850531830u, 825251472u, 0, REMAINDERF_TOLERANCE, 0}, +{1567, 3090780435u, 1035260608u, 3090780435u, 0, REMAINDERF_TOLERANCE, 0}, +{1568, 966554515u, 3234538174u, 966554515u, 0, REMAINDERF_TOLERANCE, 0}, +{1569, 1312607135u, 1194999402u, 1185760896u, 0, REMAINDERF_TOLERANCE, 0}, +{1570, 1166191415u, 1018661564u, 3139188608u, 0, REMAINDERF_TOLERANCE, 0}, +{1571, 3111900019u, 1130472166u, 3111900019u, 0, REMAINDERF_TOLERANCE, 0}, +{1572, 1234419246u, 2984575812u, 2976175128u, 0, REMAINDERF_TOLERANCE, 0}, +{1573, 1302107128u, 3370647675u, 1194631160u, 0, REMAINDERF_TOLERANCE, 0}, +{1574, 1052801068u, 3039122570u, 3028194648u, 0, REMAINDERF_TOLERANCE, 0}, +{1575, 1060849628u, 3081357692u, 913794560u, 0, REMAINDERF_TOLERANCE, 0}, +{1576, 3484320003u, 3033957825u, 3023031010u, 0, REMAINDERF_TOLERANCE, 0}, +{1577, 3181522772u, 3305392896u, 3181522772u, 0, REMAINDERF_TOLERANCE, 0}, +{1578, 1167223673u, 846102364u, 2976462032u, 0, REMAINDERF_TOLERANCE, 0}, +{1579, 968192794u, 878547432u, 856689888u, 0, REMAINDERF_TOLERANCE, 0}, +{1580, 3122346862u, 1111584337u, 3122346862u, 0, REMAINDERF_TOLERANCE, 0}, +{1581, 906701409u, 2968301825u, 797588784u, 0, REMAINDERF_TOLERANCE, 0}, +{1582, 3471653172u, 1154138102u, 1142724376u, 0, REMAINDERF_TOLERANCE, 0}, +{1583, 3231467496u, 934336592u, 3050561280u, 0, REMAINDERF_TOLERANCE, 0}, +{1584, 1341514497u, 3466051188u, 1309813400u, 0, REMAINDERF_TOLERANCE, 0}, +{1585, 1272351391u, 3373485062u, 3362161896u, 0, REMAINDERF_TOLERANCE, 0}, +{1586, 3319724992u, 3354615790u, 3319724992u, 0, REMAINDERF_TOLERANCE, 0}, +{1587, 940236348u, 3304072663u, 940236348u, 0, REMAINDERF_TOLERANCE, 0}, +{1588, 3251541546u, 3174764041u, 3165434950u, 0, REMAINDERF_TOLERANCE, 0}, +{1589, 3099843889u, 3355962282u, 3099843889u, 0, REMAINDERF_TOLERANCE, 0}, +{1590, 3110358400u, 851145088u, 836197376u, 0, REMAINDERF_TOLERANCE, 0}, +{1591, 3371863479u, 1014861921u, 3143714060u, 0, REMAINDERF_TOLERANCE, 0}, +{1592, 3204069187u, 966573255u, 951221204u, 0, REMAINDERF_TOLERANCE, 0}, +{1593, 1306460502u, 903489435u, 3040775560u, 0, REMAINDERF_TOLERANCE, 0}, +{1594, 1197542187u, 3024598921u, 3000922096u, 0, REMAINDERF_TOLERANCE, 0}, +{1595, 1184239996u, 3224098462u, 1054844192u, 0, REMAINDERF_TOLERANCE, 0}, +{1596, 1252490238u, 1173619825u, 3298879804u, 0, REMAINDERF_TOLERANCE, 0}, +{1597, 1001673627u, 3462631271u, 1001673627u, 0, REMAINDERF_TOLERANCE, 0}, +{1598, 976098044u, 1151967422u, 976098044u, 0, REMAINDERF_TOLERANCE, 0}, +{1599, 941796645u, 886451963u, 867898772u, 0, REMAINDERF_TOLERANCE, 0}, +{1600, 3287199470u, 854245542u, 841079712u, 0, REMAINDERF_TOLERANCE, 0}, +{1601, 1143233714u, 1007268238u, 962500224u, 0, REMAINDERF_TOLERANCE, 0}, +{1602, 1139941253u, 1147688821u, 3286142821u, 0, REMAINDERF_TOLERANCE, 0}, +{1603, 3143717025u, 3234638157u, 3143717025u, 0, REMAINDERF_TOLERANCE, 0}, +{1604, 3048866608u, 3449209899u, 3048866608u, 0, REMAINDERF_TOLERANCE, 0}, +{1605, 3240298487u, 1020260821u, 3157016246u, 0, REMAINDERF_TOLERANCE, 0}, +{1606, 1288902137u, 3123875978u, 3108655544u, 0, REMAINDERF_TOLERANCE, 0}, +{1607, 1333134799u, 1338107877u, 3473787387u, 0, REMAINDERF_TOLERANCE, 0}, +{1608, 1187847971u, 1317663644u, 1187847971u, 0, REMAINDERF_TOLERANCE, 0}, +{1609, 3329354473u, 3165437289u, 3155146426u, 0, REMAINDERF_TOLERANCE, 0}, +{1610, 1309289088u, 1019883016u, 984572800u, 0, REMAINDERF_TOLERANCE, 0}, +{1611, 3444653659u, 1279248024u, 3414933016u, 0, REMAINDERF_TOLERANCE, 0}, +{1612, 3405585402u, 2962345057u, 805631426u, 0, REMAINDERF_TOLERANCE, 0}, +{1613, 3106647724u, 853848387u, 831766088u, 0, REMAINDERF_TOLERANCE, 0}, +{1614, 1106778573u, 3304487767u, 1106778573u, 0, REMAINDERF_TOLERANCE, 0}, +{1615, 1140567947u, 3069174149u, 3046837080u, 0, REMAINDERF_TOLERANCE, 0}, +{1616, 1238569473u, 873035665u, 2979712896u, 0, REMAINDERF_TOLERANCE, 0}, +{1617, 1261071232u, 1182202773u, 3319109886u, 0, REMAINDERF_TOLERANCE, 0}, +{1618, 1175011025u, 3029705783u, 3017221104u, 0, REMAINDERF_TOLERANCE, 0}, +{1619, 1082692850u, 1211581107u, 1082692850u, 0, REMAINDERF_TOLERANCE, 0}, +{1620, 974547519u, 3475164509u, 974547519u, 0, REMAINDERF_TOLERANCE, 0}, +{1621, 3058097085u, 3104309359u, 3058097085u, 0, REMAINDERF_TOLERANCE, 0}, +{1622, 3107252546u, 1071134451u, 3107252546u, 0, REMAINDERF_TOLERANCE, 0}, +{1623, 3096032662u, 2976848821u, 2936508032u, 0, REMAINDERF_TOLERANCE, 0}, +{1624, 3197942144u, 3094120030u, 3069704000u, 0, REMAINDERF_TOLERANCE, 0}, +{1625, 3403348556u, 3184653669u, 3175976148u, 0, REMAINDERF_TOLERANCE, 0}, +{1626, 3182301130u, 3460764044u, 3182301130u, 0, REMAINDERF_TOLERANCE, 0}, +{1627, 1136411063u, 1118097422u, 3255702228u, 0, REMAINDERF_TOLERANCE, 0}, +{1628, 3239231622u, 3302723069u, 3239231622u, 0, REMAINDERF_TOLERANCE, 0}, +{1629, 3340615780u, 870350055u, 3007060526u, 0, REMAINDERF_TOLERANCE, 0}, +{1630, 998567360u, 2995278691u, 2976034720u, 0, REMAINDERF_TOLERANCE, 0}, +{1631, 3417964312u, 1321337529u, 3417964312u, 0, REMAINDERF_TOLERANCE, 0}, +{1632, 3109481038u, 1143864063u, 3109481038u, 0, REMAINDERF_TOLERANCE, 0}, +{1633, 1148867223u, 1256486202u, 1148867223u, 0, REMAINDERF_TOLERANCE, 0}, +{1634, 989687421u, 3372681320u, 989687421u, 0, REMAINDERF_TOLERANCE, 0}, +{1635, 1152956913u, 3166480640u, 1010228736u, 0, REMAINDERF_TOLERANCE, 0}, +{1636, 892922651u, 3373029087u, 892922651u, 0, REMAINDERF_TOLERANCE, 0}, +{1637, 1307091856u, 1103202538u, 3226552416u, 0, REMAINDERF_TOLERANCE, 0}, +{1638, 1077234132u, 3272167130u, 1077234132u, 0, REMAINDERF_TOLERANCE, 0}, +{1639, 1142167709u, 1096445242u, 1084988676u, 0, REMAINDERF_TOLERANCE, 0}, +{1640, 3426232834u, 1036705270u, 1027717904u, 0, REMAINDERF_TOLERANCE, 0}, +{1641, 3368566779u, 967249167u, 3090485704u, 0, REMAINDERF_TOLERANCE, 0}, +{1642, 3030724760u, 3349013503u, 3030724760u, 0, REMAINDERF_TOLERANCE, 0}, +{1643, 1138741813u, 3073453199u, 913937868u, 0, REMAINDERF_TOLERANCE, 0}, +{1644, 982950501u, 982549888u, 943955104u, 0, REMAINDERF_TOLERANCE, 0}, +{1645, 1142981585u, 1015602236u, 3153640960u, 0, REMAINDERF_TOLERANCE, 0}, +{1646, 3347165962u, 3135486696u, 967160064u, 0, REMAINDERF_TOLERANCE, 0}, +{1647, 1009535440u, 3381353228u, 1009535440u, 0, REMAINDERF_TOLERANCE, 0}, +{1648, 3103736980u, 3402950505u, 3103736980u, 0, REMAINDERF_TOLERANCE, 0}, +{1649, 3126820946u, 1077903063u, 3126820946u, 0, REMAINDERF_TOLERANCE, 0}, +{1650, 3473956030u, 976891930u, 3114088028u, 0, REMAINDERF_TOLERANCE, 0}, +{1651, 3349098349u, 1055327704u, 3180791072u, 0, REMAINDERF_TOLERANCE, 0}, +{1652, 3152729489u, 1060398533u, 3152729489u, 0, REMAINDERF_TOLERANCE, 0}, +{1653, 945568720u, 3313485084u, 945568720u, 0, REMAINDERF_TOLERANCE, 0}, +{1654, 3345489836u, 1108392401u, 3243992536u, 0, REMAINDERF_TOLERANCE, 0}, +{1655, 976791751u, 3230678102u, 976791751u, 0, REMAINDERF_TOLERANCE, 0}, +{1656, 1004442355u, 3036510596u, 3022957208u, 0, REMAINDERF_TOLERANCE, 0}, +{1657, 1108485380u, 3173536878u, 987480128u, 0, REMAINDERF_TOLERANCE, 0}, +{1658, 1061834641u, 972388096u, 3082944512u, 0, REMAINDERF_TOLERANCE, 0}, +{1659, 3381268392u, 1146976802u, 1134163764u, 0, REMAINDERF_TOLERANCE, 0}, +{1660, 1087189715u, 2952822478u, 789171392u, 0, REMAINDERF_TOLERANCE, 0}, +{1661, 3212952285u, 3329407365u, 3212952285u, 0, REMAINDERF_TOLERANCE, 0}, +{1662, 1000611335u, 857599439u, 2957130752u, 0, REMAINDERF_TOLERANCE, 0}, +{1663, 3466188568u, 1041678304u, 3175744512u, 0, REMAINDERF_TOLERANCE, 0}, +{1664, 3072456205u, 3160254633u, 3072456205u, 0, REMAINDERF_TOLERANCE, 0}, +{1665, 3319315516u, 3422089012u, 3319315516u, 0, REMAINDERF_TOLERANCE, 0}, +{1666, 3212614372u, 1152633030u, 3212614372u, 0, REMAINDERF_TOLERANCE, 0}, +{1667, 1315030230u, 3336225884u, 3318117360u, 0, REMAINDERF_TOLERANCE, 0}, +{1668, 1134593658u, 3456812581u, 1134593658u, 0, REMAINDERF_TOLERANCE, 0}, +{1669, 977281449u, 879922831u, 870852568u, 0, REMAINDERF_TOLERANCE, 0}, +{1670, 1086198791u, 920125958u, 3058317260u, 0, REMAINDERF_TOLERANCE, 0}, +{1671, 1255152035u, 851754050u, 2941965824u, 0, REMAINDERF_TOLERANCE, 0}, +{1672, 1135271264u, 3284878412u, 3263273904u, 0, REMAINDERF_TOLERANCE, 0}, +{1673, 1094190727u, 1056854532u, 1033751056u, 0, REMAINDERF_TOLERANCE, 0}, +{1674, 1294665325u, 991185677u, 3117296032u, 0, REMAINDERF_TOLERANCE, 0}, +{1675, 1036608591u, 805416536u, 2936971008u, 0, REMAINDERF_TOLERANCE, 0}, +{1676, 3229998064u, 825237063u, 815291510u, 0, REMAINDERF_TOLERANCE, 0}, +{1677, 3439134022u, 1043829691u, 3176027496u, 0, REMAINDERF_TOLERANCE, 0}, +{1678, 1325668223u, 970681762u, 927876224u, 0, REMAINDERF_TOLERANCE, 0}, +{1679, 1092037607u, 1027330835u, 989911904u, 0, REMAINDERF_TOLERANCE, 0}, +{1680, 3316278408u, 3455589207u, 3316278408u, 0, REMAINDERF_TOLERANCE, 0}, +{1681, 3295436768u, 3129873731u, 3121435968u, 0, REMAINDERF_TOLERANCE, 0}, +{1682, 1151984049u, 3074547120u, 916078880u, 0, REMAINDERF_TOLERANCE, 0}, +{1683, 1129287043u, 3076527544u, 3043337472u, 0, REMAINDERF_TOLERANCE, 0}, +{1684, 1243664530u, 972879810u, 961936076u, 0, REMAINDERF_TOLERANCE, 0}, +{1685, 950829092u, 929114193u, 904427984u, 0, REMAINDERF_TOLERANCE, 0}, +{1686, 1115471979u, 3047246262u, 882754776u, 0, REMAINDERF_TOLERANCE, 0}, +{1687, 3351092088u, 3024661404u, 857377760u, 0, REMAINDERF_TOLERANCE, 0}, +{1688, 3424479544u, 3312047722u, 3286030960u, 0, REMAINDERF_TOLERANCE, 0}, +{1689, 3241193975u, 884465785u, 865361832u, 0, REMAINDERF_TOLERANCE, 0}, +{1690, 1030934236u, 1045139240u, 1030934236u, 0, REMAINDERF_TOLERANCE, 0}, +{1691, 3131791114u, 3408392958u, 3131791114u, 0, REMAINDERF_TOLERANCE, 0}, +{1692, 1025254314u, 3057812821u, 892099028u, 0, REMAINDERF_TOLERANCE, 0}, +{1693, 1110545760u, 3240144177u, 1082605944u, 0, REMAINDERF_TOLERANCE, 0}, +{1694, 3180213739u, 1108793820u, 3180213739u, 0, REMAINDERF_TOLERANCE, 0}, +{1695, 3361976590u, 3138179993u, 3123449732u, 0, REMAINDERF_TOLERANCE, 0}, +{1696, 881280146u, 3421884736u, 881280146u, 0, REMAINDERF_TOLERANCE, 0}, +{1697, 1304154705u, 2961937089u, 806053242u, 0, REMAINDERF_TOLERANCE, 0}, +{1698, 3264443610u, 3222916705u, 1061521916u, 0, REMAINDERF_TOLERANCE, 0}, +{1699, 3374550627u, 3055856293u, 3046700470u, 0, REMAINDERF_TOLERANCE, 0}, +{1700, 899599265u, 3240118211u, 899599265u, 0, REMAINDERF_TOLERANCE, 0}, +{1701, 1268194719u, 1332489410u, 1268194719u, 0, REMAINDERF_TOLERANCE, 0}, +{1702, 1133420220u, 1245770860u, 1133420220u, 0, REMAINDERF_TOLERANCE, 0}, +{1703, 1161858787u, 815362075u, 2940727152u, 0, REMAINDERF_TOLERANCE, 0}, +{1704, 3295996963u, 3453334307u, 3295996963u, 0, REMAINDERF_TOLERANCE, 0}, +{1705, 1270887389u, 1156123987u, 1136651424u, 0, REMAINDERF_TOLERANCE, 0}, +{1706, 3325193181u, 993979179u, 3128968444u, 0, REMAINDERF_TOLERANCE, 0}, +{1707, 3115275450u, 3008350271u, 850287230u, 0, REMAINDERF_TOLERANCE, 0}, +{1708, 3116607482u, 3224327456u, 3116607482u, 0, REMAINDERF_TOLERANCE, 0}, +{1709, 3187892415u, 3118097315u, 3058627072u, 0, REMAINDERF_TOLERANCE, 0}, +{1710, 1189120494u, 978961471u, 3116486970u, 0, REMAINDERF_TOLERANCE, 0}, +{1711, 889030794u, 3129523970u, 889030794u, 0, REMAINDERF_TOLERANCE, 0}, +{1712, 1323529208u, 3100744786u, 933418032u, 0, REMAINDERF_TOLERANCE, 0}, +{1713, 3465768388u, 3190881451u, 3088019456u, 0, REMAINDERF_TOLERANCE, 0}, +{1714, 3426099899u, 1118756120u, 3256863216u, 0, REMAINDERF_TOLERANCE, 0}, +{1715, 3224857113u, 3398166843u, 3224857113u, 0, REMAINDERF_TOLERANCE, 0}, +{1716, 1065798296u, 816191940u, 802953808u, 0, REMAINDERF_TOLERANCE, 0}, +{1717, 3328989444u, 850266225u, 2989327724u, 0, REMAINDERF_TOLERANCE, 0}, +{1718, 3357819026u, 3148475462u, 3131211808u, 0, REMAINDERF_TOLERANCE, 0}, +{1719, 1273397670u, 901308750u, 3030947488u, 0, REMAINDERF_TOLERANCE, 0}, +{1720, 3424831780u, 1304806106u, 3424831780u, 0, REMAINDERF_TOLERANCE, 0}, +{1721, 1257596246u, 3420832544u, 1257596246u, 0, REMAINDERF_TOLERANCE, 0}, +{1722, 1051773536u, 896271348u, 3007754304u, 0, REMAINDERF_TOLERANCE, 0}, +{1723, 3294752507u, 3113225954u, 3104157972u, 0, REMAINDERF_TOLERANCE, 0}, +{1724, 3424848725u, 2973850350u, 816846232u, 0, REMAINDERF_TOLERANCE, 0}, +{1725, 1090870906u, 3294742905u, 1090870906u, 0, REMAINDERF_TOLERANCE, 0}, +{1726, 1227582289u, 1208979668u, 3338705792u, 0, REMAINDERF_TOLERANCE, 0}, +{1727, 1272325814u, 3004311296u, 2994725888u, 0, REMAINDERF_TOLERANCE, 0}, +{1728, 3359508271u, 859974315u, 848405304u, 0, REMAINDERF_TOLERANCE, 0}, +{1729, 1137854355u, 3335041917u, 1137854355u, 0, REMAINDERF_TOLERANCE, 0}, +{1730, 3440773058u, 3204192793u, 1030651208u, 0, REMAINDERF_TOLERANCE, 0}, +{1731, 3101598400u, 3057760708u, 892208464u, 0, REMAINDERF_TOLERANCE, 0}, +{1732, 3451216836u, 3347783723u, 3332701232u, 0, REMAINDERF_TOLERANCE, 0}, +{1733, 3437062994u, 3106834845u, 3071458160u, 0, REMAINDERF_TOLERANCE, 0}, +{1734, 1131196082u, 1164573183u, 1131196082u, 0, REMAINDERF_TOLERANCE, 0}, +{1735, 3460915348u, 1219372260u, 3351088128u, 0, REMAINDERF_TOLERANCE, 0}, +{1736, 3303035472u, 3153013020u, 975757344u, 0, REMAINDERF_TOLERANCE, 0}, +{1737, 1053698677u, 3284313107u, 1053698677u, 0, REMAINDERF_TOLERANCE, 0}, +{1738, 3396166221u, 1201894512u, 3340417792u, 0, REMAINDERF_TOLERANCE, 0}, +{1739, 3458934263u, 1005577835u, 995171350u, 0, REMAINDERF_TOLERANCE, 0}, +{1740, 1065761827u, 3333928591u, 1065761827u, 0, REMAINDERF_TOLERANCE, 0}, +{1741, 3025843188u, 820250112u, 802398208u, 0, REMAINDERF_TOLERANCE, 0}, +{1742, 926665223u, 3150815797u, 926665223u, 0, REMAINDERF_TOLERANCE, 0}, +{1743, 1199816046u, 3143776186u, 3118363744u, 0, REMAINDERF_TOLERANCE, 0}, +{1744, 3333779015u, 952421041u, 3088442550u, 0, REMAINDERF_TOLERANCE, 0}, +{1745, 948398145u, 3238273189u, 948398145u, 0, REMAINDERF_TOLERANCE, 0}, +{1746, 1080781593u, 1213908300u, 1080781593u, 0, REMAINDERF_TOLERANCE, 0}, +{1747, 3164749613u, 3010837763u, 805593536u, 0, REMAINDERF_TOLERANCE, 0}, +{1748, 3235326590u, 1271705594u, 3235326590u, 0, REMAINDERF_TOLERANCE, 0}, +{1749, 3118883815u, 1051802647u, 3118883815u, 0, REMAINDERF_TOLERANCE, 0}, +{1750, 3226990408u, 1110755136u, 3226990408u, 0, REMAINDERF_TOLERANCE, 0}, +{1751, 3117098218u, 1122474770u, 3117098218u, 0, REMAINDERF_TOLERANCE, 0}, +{1752, 1283624229u, 906796922u, 893859424u, 0, REMAINDERF_TOLERANCE, 0}, +{1753, 970649315u, 1078286437u, 970649315u, 0, REMAINDERF_TOLERANCE, 0}, +{1754, 959776291u, 3280345347u, 959776291u, 0, REMAINDERF_TOLERANCE, 0}, +{1755, 3341117305u, 3294559023u, 3285418302u, 0, REMAINDERF_TOLERANCE, 0}, +{1756, 1270734970u, 3355874874u, 3344951304u, 0, REMAINDERF_TOLERANCE, 0}, +{1757, 3454816067u, 868771977u, 843230680u, 0, REMAINDERF_TOLERANCE, 0}, +{1758, 1106502045u, 1290849316u, 1106502045u, 0, REMAINDERF_TOLERANCE, 0}, +{1759, 1157598381u, 3309023746u, 3295653550u, 0, REMAINDERF_TOLERANCE, 0}, +{1760, 3335234513u, 1002337336u, 3134023072u, 0, REMAINDERF_TOLERANCE, 0}, +{1761, 1279489061u, 1006049444u, 3142664432u, 0, REMAINDERF_TOLERANCE, 0}, +{1762, 3143920719u, 3131608518u, 969097936u, 0, REMAINDERF_TOLERANCE, 0}, +{1763, 1233171235u, 826460580u, 789268992u, 0, REMAINDERF_TOLERANCE, 0}, +{1764, 1148920078u, 1007674793u, 995580876u, 0, REMAINDERF_TOLERANCE, 0}, +{1765, 3064988156u, 3230867340u, 3064988156u, 0, REMAINDERF_TOLERANCE, 0}, +{1766, 1109198803u, 1221754614u, 1109198803u, 0, REMAINDERF_TOLERANCE, 0}, +{1767, 3219949483u, 1056167693u, 1030351936u, 0, REMAINDERF_TOLERANCE, 0}, +{1768, 3361149474u, 3387342069u, 3361149474u, 0, REMAINDERF_TOLERANCE, 0}, +{1769, 1207502108u, 3388073586u, 1207502108u, 0, REMAINDERF_TOLERANCE, 0}, +{1770, 1000014431u, 831213088u, 2968051712u, 0, REMAINDERF_TOLERANCE, 0}, +{1771, 3161756316u, 3143659754u, 3131116944u, 0, REMAINDERF_TOLERANCE, 0}, +{1772, 3160728744u, 3382954009u, 3160728744u, 0, REMAINDERF_TOLERANCE, 0}, +{1773, 1234530539u, 1079988872u, 3205280992u, 0, REMAINDERF_TOLERANCE, 0}, +{1774, 1017843965u, 1193076204u, 1017843965u, 0, REMAINDERF_TOLERANCE, 0}, +{1775, 3306328852u, 1118701064u, 1082393984u, 0, REMAINDERF_TOLERANCE, 0}, +{1776, 1291910469u, 1211303367u, 3339079352u, 0, REMAINDERF_TOLERANCE, 0}, +{1777, 1131927531u, 3182962700u, 1019272000u, 0, REMAINDERF_TOLERANCE, 0}, +{1778, 3449879391u, 991614550u, 3126666016u, 0, REMAINDERF_TOLERANCE, 0}, +{1779, 970094304u, 3344590506u, 970094304u, 0, REMAINDERF_TOLERANCE, 0}, +{1780, 1125551064u, 3331248076u, 1125551064u, 0, REMAINDERF_TOLERANCE, 0}, +{1781, 3427296372u, 3455289118u, 3427296372u, 0, REMAINDERF_TOLERANCE, 0}, +{1782, 1198917460u, 1327195159u, 1198917460u, 0, REMAINDERF_TOLERANCE, 0}, +{1783, 3201603336u, 820047343u, 2945749204u, 0, REMAINDERF_TOLERANCE, 0}, +{1784, 3114686212u, 3476082461u, 3114686212u, 0, REMAINDERF_TOLERANCE, 0}, +{1785, 921940707u, 2967544056u, 2943794048u, 0, REMAINDERF_TOLERANCE, 0}, +{1786, 1091906532u, 3011904455u, 841227264u, 0, REMAINDERF_TOLERANCE, 0}, +{1787, 3393557778u, 3383396815u, 3369622040u, 0, REMAINDERF_TOLERANCE, 0}, +{1788, 1276853215u, 873199561u, 863650072u, 0, REMAINDERF_TOLERANCE, 0}, +{1789, 3462778440u, 3349284325u, 3325803400u, 0, REMAINDERF_TOLERANCE, 0}, +{1790, 3360170117u, 3048354042u, 870847968u, 0, REMAINDERF_TOLERANCE, 0}, +{1791, 3224245428u, 3271307999u, 3224245428u, 0, REMAINDERF_TOLERANCE, 0}, +{1792, 1120124467u, 1135619937u, 1120124467u, 0, REMAINDERF_TOLERANCE, 0}, +{1793, 1064364381u, 3180675544u, 3151024384u, 0, REMAINDERF_TOLERANCE, 0}, +{1794, 1268744779u, 3328452652u, 3308877952u, 0, REMAINDERF_TOLERANCE, 0}, +{1795, 1165195428u, 3390323168u, 1165195428u, 0, REMAINDERF_TOLERANCE, 0}, +{1796, 3247790039u, 909788142u, 3039398736u, 0, REMAINDERF_TOLERANCE, 0}, +{1797, 3215244648u, 1083988595u, 3215244648u, 0, REMAINDERF_TOLERANCE, 0}, +{1798, 3095275931u, 989153382u, 3095275931u, 0, REMAINDERF_TOLERANCE, 0}, +{1799, 1212717473u, 837873779u, 826399162u, 0, REMAINDERF_TOLERANCE, 0}, +{1800, 3275973009u, 3450721670u, 3275973009u, 0, REMAINDERF_TOLERANCE, 0}, +{1801, 3028857014u, 3188853813u, 3028857014u, 0, REMAINDERF_TOLERANCE, 0}, +{1802, 3391162308u, 1291220039u, 3391162308u, 0, REMAINDERF_TOLERANCE, 0}, +{1803, 1044867873u, 3369493273u, 1044867873u, 0, REMAINDERF_TOLERANCE, 0}, +{1804, 1089986803u, 3462160118u, 1089986803u, 0, REMAINDERF_TOLERANCE, 0}, +{1805, 1296314700u, 2957454177u, 794053992u, 0, REMAINDERF_TOLERANCE, 0}, +{1806, 1251462432u, 3171021770u, 3158130160u, 0, REMAINDERF_TOLERANCE, 0}, +{1807, 3485236902u, 980772835u, 966641182u, 0, REMAINDERF_TOLERANCE, 0}, +{1808, 3262169538u, 1268270462u, 3262169538u, 0, REMAINDERF_TOLERANCE, 0}, +{1809, 3080852256u, 994641495u, 3080852256u, 0, REMAINDERF_TOLERANCE, 0}, +{1810, 1022211242u, 922124181u, 3041880112u, 0, REMAINDERF_TOLERANCE, 0}, +{1811, 884661176u, 2985540645u, 805220016u, 0, REMAINDERF_TOLERANCE, 0}, +{1812, 3071422941u, 3271100396u, 3071422941u, 0, REMAINDERF_TOLERANCE, 0}, +{1813, 989762529u, 3362011135u, 989762529u, 0, REMAINDERF_TOLERANCE, 0}, +{1814, 1295475718u, 3212305413u, 3203032832u, 0, REMAINDERF_TOLERANCE, 0}, +{1815, 1002632518u, 3330388441u, 1002632518u, 0, REMAINDERF_TOLERANCE, 0}, +{1816, 3404372005u, 3450484255u, 3404372005u, 0, REMAINDERF_TOLERANCE, 0}, +{1817, 3158912530u, 3105501826u, 949623888u, 0, REMAINDERF_TOLERANCE, 0}, +{1818, 1125800069u, 3256265749u, 1080761344u, 0, REMAINDERF_TOLERANCE, 0}, +{1819, 3138037576u, 3103365227u, 937376280u, 0, REMAINDERF_TOLERANCE, 0}, +{1820, 999985470u, 3409354318u, 999985470u, 0, REMAINDERF_TOLERANCE, 0}, +{1821, 1189421739u, 1056599002u, 1045697052u, 0, REMAINDERF_TOLERANCE, 0}, +{1822, 3075182644u, 3144159778u, 3075182644u, 0, REMAINDERF_TOLERANCE, 0}, +{1823, 3028099649u, 3391513557u, 3028099649u, 0, REMAINDERF_TOLERANCE, 0}, +{1824, 3132541814u, 3444521949u, 3132541814u, 0, REMAINDERF_TOLERANCE, 0}, +{1825, 1164046161u, 3440635788u, 1164046161u, 0, REMAINDERF_TOLERANCE, 0}, +{1826, 1292596266u, 3116569667u, 3096394216u, 0, REMAINDERF_TOLERANCE, 0}, +{1827, 3469748379u, 3412765608u, 1255687840u, 0, REMAINDERF_TOLERANCE, 0}, +{1828, 1314644642u, 3123051784u, 3111935360u, 0, REMAINDERF_TOLERANCE, 0}, +{1829, 3399813173u, 828743798u, 819389240u, 0, REMAINDERF_TOLERANCE, 0}, +{1830, 948775569u, 3485444126u, 948775569u, 0, REMAINDERF_TOLERANCE, 0}, +{1831, 1034611395u, 882288581u, 3007845568u, 0, REMAINDERF_TOLERANCE, 0}, +{1832, 3489122735u, 3372450889u, 3359775640u, 0, REMAINDERF_TOLERANCE, 0}, +{1833, 1181604787u, 3363067409u, 1181604787u, 0, REMAINDERF_TOLERANCE, 0}, +{1834, 3059042077u, 3204983963u, 3059042077u, 0, REMAINDERF_TOLERANCE, 0}, +{1835, 1043691622u, 3402603223u, 1043691622u, 0, REMAINDERF_TOLERANCE, 0}, +{1836, 1314588083u, 856187848u, 816680192u, 0, REMAINDERF_TOLERANCE, 0}, +{1837, 3141533334u, 3010142974u, 849931232u, 0, REMAINDERF_TOLERANCE, 0}, +{1838, 3157534378u, 3451674717u, 3157534378u, 0, REMAINDERF_TOLERANCE, 0}, +{1839, 3400949680u, 3073750220u, 3046724288u, 0, REMAINDERF_TOLERANCE, 0}, +{1840, 3365581801u, 1175843167u, 3273128000u, 0, REMAINDERF_TOLERANCE, 0}, +{1841, 1110424755u, 3011308654u, 2979891760u, 0, REMAINDERF_TOLERANCE, 0}, +{1842, 3189917167u, 927278934u, 3062195652u, 0, REMAINDERF_TOLERANCE, 0}, +{1843, 969804941u, 3355439348u, 969804941u, 0, REMAINDERF_TOLERANCE, 0}, +{1844, 1139120919u, 3270515074u, 3249006256u, 0, REMAINDERF_TOLERANCE, 0}, +{1845, 934308144u, 3118191228u, 934308144u, 0, REMAINDERF_TOLERANCE, 0}, +{1846, 1220524226u, 1152648002u, 3287997832u, 0, REMAINDERF_TOLERANCE, 0}, +{1847, 3162548604u, 3461790298u, 3162548604u, 0, REMAINDERF_TOLERANCE, 0}, +{1848, 3382391700u, 3296962745u, 3269262352u, 0, REMAINDERF_TOLERANCE, 0}, +{1849, 1156767533u, 1088986462u, 1074141164u, 0, REMAINDERF_TOLERANCE, 0}, +{1850, 3079222483u, 3312324949u, 3079222483u, 0, REMAINDERF_TOLERANCE, 0}, +{1851, 994934087u, 967678094u, 958601844u, 0, REMAINDERF_TOLERANCE, 0}, +{1852, 3185240099u, 1123403720u, 3185240099u, 0, REMAINDERF_TOLERANCE, 0}, +{1853, 3479873563u, 1246277393u, 3381375750u, 0, REMAINDERF_TOLERANCE, 0}, +{1854, 3424264117u, 3434026174u, 3424264117u, 0, REMAINDERF_TOLERANCE, 0}, +{1855, 3228365887u, 1216775310u, 3228365887u, 0, REMAINDERF_TOLERANCE, 0}, +{1856, 1212129651u, 3017366784u, 3007833088u, 0, REMAINDERF_TOLERANCE, 0}, +{1857, 3125775254u, 955826310u, 941739508u, 0, REMAINDERF_TOLERANCE, 0}, +{1858, 1037464105u, 3121544932u, 3082997760u, 0, REMAINDERF_TOLERANCE, 0}, +{1859, 1311706596u, 1254918706u, 3392724728u, 0, REMAINDERF_TOLERANCE, 0}, +{1860, 918212457u, 1017468331u, 918212457u, 0, REMAINDERF_TOLERANCE, 0}, +{1861, 1337315179u, 3461361185u, 3409044416u, 0, REMAINDERF_TOLERANCE, 0}, +{1862, 1131358407u, 3325958870u, 1131358407u, 0, REMAINDERF_TOLERANCE, 0}, +{1863, 1156517523u, 3343716230u, 1156517523u, 0, REMAINDERF_TOLERANCE, 0}, +{1864, 3210802820u, 3207408574u, 3192859416u, 0, REMAINDERF_TOLERANCE, 0}, +{1865, 3337499209u, 1226297264u, 3337499209u, 0, REMAINDERF_TOLERANCE, 0}, +{1866, 3468429030u, 3253874001u, 1045759872u, 0, REMAINDERF_TOLERANCE, 0}, +{1867, 3253515800u, 1189005947u, 3253515800u, 0, REMAINDERF_TOLERANCE, 0}, +{1868, 3055299953u, 3047908678u, 879983952u, 0, REMAINDERF_TOLERANCE, 0}, +{1869, 959956547u, 876324728u, 3003145376u, 0, REMAINDERF_TOLERANCE, 0}, +{1870, 3425290480u, 1139193797u, 1125241808u, 0, REMAINDERF_TOLERANCE, 0}, +{1871, 1039917375u, 1122740999u, 1039917375u, 0, REMAINDERF_TOLERANCE, 0}, +{1872, 3220979495u, 3429223871u, 3220979495u, 0, REMAINDERF_TOLERANCE, 0}, +{1873, 1311016004u, 3334899880u, 1178253744u, 0, REMAINDERF_TOLERANCE, 0}, +{1874, 1128016396u, 1105151547u, 3236326644u, 0, REMAINDERF_TOLERANCE, 0}, +{1875, 3210335769u, 3100646155u, 3063195824u, 0, REMAINDERF_TOLERANCE, 0}, +{1876, 3022705759u, 3404762495u, 3022705759u, 0, REMAINDERF_TOLERANCE, 0}, +{1877, 1206054701u, 826010009u, 805457284u, 0, REMAINDERF_TOLERANCE, 0}, +{1878, 3144504834u, 1162227076u, 3144504834u, 0, REMAINDERF_TOLERANCE, 0}, +{1879, 1213609983u, 919983950u, 908176668u, 0, REMAINDERF_TOLERANCE, 0}, +{1880, 1246902946u, 3064047808u, 895564800u, 0, REMAINDERF_TOLERANCE, 0}, +{1881, 3362082828u, 3374056268u, 3362082828u, 0, REMAINDERF_TOLERANCE, 0}, +{1882, 1029480631u, 3047777170u, 867447040u, 0, REMAINDERF_TOLERANCE, 0}, +{1883, 3153568584u, 3106514232u, 943960352u, 0, REMAINDERF_TOLERANCE, 0}, +{1884, 3384988527u, 3109485565u, 3095242288u, 0, REMAINDERF_TOLERANCE, 0}, +{1885, 1317696241u, 870681806u, 2971687040u, 0, REMAINDERF_TOLERANCE, 0}, +{1886, 3235395924u, 1132055244u, 3235395924u, 0, REMAINDERF_TOLERANCE, 0}, +{1887, 3341877624u, 2969495570u, 2960140912u, 0, REMAINDERF_TOLERANCE, 0}, +{1888, 1228636133u, 886552820u, 3003200064u, 0, REMAINDERF_TOLERANCE, 0}, +{1889, 3161654634u, 3335899347u, 3161654634u, 0, REMAINDERF_TOLERANCE, 0}, +{1890, 3162655243u, 3307203982u, 3162655243u, 0, REMAINDERF_TOLERANCE, 0}, +{1891, 1207246237u, 859223639u, 845699204u, 0, REMAINDERF_TOLERANCE, 0}, +{1892, 1165476654u, 3350219111u, 1165476654u, 0, REMAINDERF_TOLERANCE, 0}, +{1893, 1215278023u, 3019755242u, 855540272u, 0, REMAINDERF_TOLERANCE, 0}, +{1894, 1017239798u, 3438501281u, 1017239798u, 0, REMAINDERF_TOLERANCE, 0}, +{1895, 1149651309u, 970030475u, 958104804u, 0, REMAINDERF_TOLERANCE, 0}, +{1896, 1111943722u, 3122211334u, 3104172864u, 0, REMAINDERF_TOLERANCE, 0}, +{1897, 1189849849u, 3382739134u, 1189849849u, 0, REMAINDERF_TOLERANCE, 0}, +{1898, 3204848496u, 3141519085u, 3092648512u, 0, REMAINDERF_TOLERANCE, 0}, +{1899, 1249758327u, 3104759211u, 933001456u, 0, REMAINDERF_TOLERANCE, 0}, +{1900, 3092982276u, 3445282331u, 3092982276u, 0, REMAINDERF_TOLERANCE, 0}, +{1901, 1168098747u, 1316854744u, 1168098747u, 0, REMAINDERF_TOLERANCE, 0}, +{1902, 3301009024u, 3406174560u, 3301009024u, 0, REMAINDERF_TOLERANCE, 0}, +{1903, 3233089227u, 1212652543u, 3233089227u, 0, REMAINDERF_TOLERANCE, 0}, +{1904, 3218245284u, 1238873830u, 3218245284u, 0, REMAINDERF_TOLERANCE, 0}, +{1905, 3215981890u, 3240474694u, 3215981890u, 0, REMAINDERF_TOLERANCE, 0}, +{1906, 1266687209u, 3092038122u, 3059402624u, 0, REMAINDERF_TOLERANCE, 0}, +{1907, 3487959775u, 3331372071u, 1151779600u, 0, REMAINDERF_TOLERANCE, 0}, +{1908, 943645710u, 852875779u, 826119328u, 0, REMAINDERF_TOLERANCE, 0}, +{1909, 3345065699u, 3282620725u, 3254464912u, 0, REMAINDERF_TOLERANCE, 0}, +{1910, 935847271u, 1067255804u, 935847271u, 0, REMAINDERF_TOLERANCE, 0}, +{1911, 3410336089u, 1111437780u, 1078086720u, 0, REMAINDERF_TOLERANCE, 0}, +{1912, 1141063391u, 1168908072u, 1141063391u, 0, REMAINDERF_TOLERANCE, 0}, +{1913, 3059263153u, 3067795684u, 3059263153u, 0, REMAINDERF_TOLERANCE, 0}, +{1914, 3353679791u, 897158391u, 3031717612u, 0, REMAINDERF_TOLERANCE, 0}, +{1915, 1001823878u, 1016826861u, 1001823878u, 0, REMAINDERF_TOLERANCE, 0}, +{1916, 1009130212u, 1004302940u, 3143196128u, 0, REMAINDERF_TOLERANCE, 0}, +{1917, 3367127535u, 943136342u, 928140432u, 0, REMAINDERF_TOLERANCE, 0}, +{1918, 1032920919u, 3449126417u, 1032920919u, 0, REMAINDERF_TOLERANCE, 0}, +{1919, 3281952870u, 3147012185u, 3130041528u, 0, REMAINDERF_TOLERANCE, 0}, +{1920, 1237868497u, 3048281802u, 3023784992u, 0, REMAINDERF_TOLERANCE, 0}, +{1921, 1153753924u, 3322269242u, 1153753924u, 0, REMAINDERF_TOLERANCE, 0}, +{1922, 1120261759u, 892210998u, 883701944u, 0, REMAINDERF_TOLERANCE, 0}, +{1923, 3226328360u, 3366432856u, 3226328360u, 0, REMAINDERF_TOLERANCE, 0}, +{1924, 3349595986u, 3251588707u, 3234647820u, 0, REMAINDERF_TOLERANCE, 0}, +{1925, 3166889490u, 3306023523u, 3166889490u, 0, REMAINDERF_TOLERANCE, 0}, +{1926, 1087750238u, 1099325523u, 1087750238u, 0, REMAINDERF_TOLERANCE, 0}, +{1927, 3121620061u, 3359488363u, 3121620061u, 0, REMAINDERF_TOLERANCE, 0}, +{1928, 1066116543u, 3072159933u, 889619088u, 0, REMAINDERF_TOLERANCE, 0}, +{1929, 3210898034u, 2981803389u, 820754888u, 0, REMAINDERF_TOLERANCE, 0}, +{1930, 3051923237u, 3364074347u, 3051923237u, 0, REMAINDERF_TOLERANCE, 0}, +{1931, 1030612298u, 3345396001u, 1030612298u, 0, REMAINDERF_TOLERANCE, 0}, +{1932, 1186234578u, 858134374u, 824693856u, 0, REMAINDERF_TOLERANCE, 0}, +{1933, 1331680743u, 1009396165u, 975246528u, 0, REMAINDERF_TOLERANCE, 0}, +{1934, 1045232522u, 3234993273u, 1045232522u, 0, REMAINDERF_TOLERANCE, 0}, +{1935, 3119858470u, 962515365u, 3090385928u, 0, REMAINDERF_TOLERANCE, 0}, +{1936, 3349432725u, 928848003u, 3055503844u, 0, REMAINDERF_TOLERANCE, 0}, +{1937, 912423027u, 3184646319u, 912423027u, 0, REMAINDERF_TOLERANCE, 0}, +{1938, 3228795133u, 3273940030u, 3228795133u, 0, REMAINDERF_TOLERANCE, 0}, +{1939, 3194674746u, 3112269709u, 942871912u, 0, REMAINDERF_TOLERANCE, 0}, +{1940, 3296784303u, 3276182352u, 3256513440u, 0, REMAINDERF_TOLERANCE, 0}, +{1941, 965402291u, 3107104376u, 3097435924u, 0, REMAINDERF_TOLERANCE, 0}, +{1942, 3388153589u, 3426245389u, 3388153589u, 0, REMAINDERF_TOLERANCE, 0}, +{1943, 1133410485u, 3329658993u, 1133410485u, 0, REMAINDERF_TOLERANCE, 0}, +{1944, 3136790322u, 1088652637u, 3136790322u, 0, REMAINDERF_TOLERANCE, 0}, +{1945, 3369970587u, 959121458u, 3088503784u, 0, REMAINDERF_TOLERANCE, 0}, +{1946, 1270451568u, 928393353u, 3061279676u, 0, REMAINDERF_TOLERANCE, 0}, +{1947, 989498922u, 3088358419u, 3051673664u, 0, REMAINDERF_TOLERANCE, 0}, +{1948, 1280215674u, 3148135875u, 3139032254u, 0, REMAINDERF_TOLERANCE, 0}, +{1949, 1171873518u, 954709738u, 3078051120u, 0, REMAINDERF_TOLERANCE, 0}, +{1950, 3298258100u, 935525182u, 3037756096u, 0, REMAINDERF_TOLERANCE, 0}, +{1951, 3415208824u, 822843236u, 806916432u, 0, REMAINDERF_TOLERANCE, 0}, +{1952, 1001897182u, 3191875320u, 1001897182u, 0, REMAINDERF_TOLERANCE, 0}, +{1953, 3152777939u, 3245830463u, 3152777939u, 0, REMAINDERF_TOLERANCE, 0}, +{1954, 985903305u, 3333087577u, 985903305u, 0, REMAINDERF_TOLERANCE, 0}, +{1955, 3357328848u, 859306298u, 2991993656u, 0, REMAINDERF_TOLERANCE, 0}, +{1956, 982612185u, 923582663u, 908334992u, 0, REMAINDERF_TOLERANCE, 0}, +{1957, 3267868136u, 1208301947u, 3267868136u, 0, REMAINDERF_TOLERANCE, 0}, +{1958, 3319048157u, 1172271145u, 1135379648u, 0, REMAINDERF_TOLERANCE, 0}, +{1959, 1144755661u, 860947435u, 837949656u, 0, REMAINDERF_TOLERANCE, 0}, +{1960, 898467286u, 839254959u, 817352120u, 0, REMAINDERF_TOLERANCE, 0}, +{1961, 3301461672u, 1233693827u, 3301461672u, 0, REMAINDERF_TOLERANCE, 0}, +{1962, 3364525678u, 3089849671u, 3069169320u, 0, REMAINDERF_TOLERANCE, 0}, +{1963, 3146660041u, 3143695961u, 3127758052u, 0, REMAINDERF_TOLERANCE, 0}, +{1964, 3467121799u, 3023584354u, 865329844u, 0, REMAINDERF_TOLERANCE, 0}, +{1965, 1151257041u, 3084216427u, 922291812u, 0, REMAINDERF_TOLERANCE, 0}, +{1966, 3097873255u, 3219266640u, 3097873255u, 0, REMAINDERF_TOLERANCE, 0}, +{1967, 3130670309u, 3192399254u, 3130670309u, 0, REMAINDERF_TOLERANCE, 0}, +{1968, 1017573824u, 3130901062u, 3098323552u, 0, REMAINDERF_TOLERANCE, 0}, +{1969, 1258369714u, 3462258576u, 1258369714u, 0, REMAINDERF_TOLERANCE, 0}, +{1970, 1216602683u, 3371396332u, 3361674594u, 0, REMAINDERF_TOLERANCE, 0}, +{1971, 3297265739u, 1214184410u, 3297265739u, 0, REMAINDERF_TOLERANCE, 0}, +{1972, 1071940738u, 3311731012u, 1071940738u, 0, REMAINDERF_TOLERANCE, 0}, +{1973, 922601356u, 3337171870u, 922601356u, 0, REMAINDERF_TOLERANCE, 0}, +{1974, 3462285635u, 3444030332u, 3434376760u, 0, REMAINDERF_TOLERANCE, 0}, +{1975, 3357177805u, 1085464241u, 1071015336u, 0, REMAINDERF_TOLERANCE, 0}, +{1976, 3049120080u, 900832851u, 3015978960u, 0, REMAINDERF_TOLERANCE, 0}, +{1977, 1153863660u, 1011991342u, 1001807172u, 0, REMAINDERF_TOLERANCE, 0}, +{1978, 3034243695u, 917098003u, 3034243695u, 0, REMAINDERF_TOLERANCE, 0}, +{1979, 1249365132u, 3278686216u, 1118515296u, 0, REMAINDERF_TOLERANCE, 0}, +{1980, 3046215730u, 3211219980u, 3046215730u, 0, REMAINDERF_TOLERANCE, 0}, +{1981, 3047251716u, 1090787353u, 3047251716u, 0, REMAINDERF_TOLERANCE, 0}, +{1982, 3131219358u, 3471261157u, 3131219358u, 0, REMAINDERF_TOLERANCE, 0}, +{1983, 3222096285u, 1198013705u, 3222096285u, 0, REMAINDERF_TOLERANCE, 0}, +{1984, 1297708818u, 3079166173u, 906966632u, 0, REMAINDERF_TOLERANCE, 0}, +{1985, 3345532722u, 3383708463u, 3345532722u, 0, REMAINDERF_TOLERANCE, 0}, +{1986, 3418753236u, 3481843070u, 3418753236u, 0, REMAINDERF_TOLERANCE, 0}, +{1987, 1277417964u, 3487506626u, 1277417964u, 0, REMAINDERF_TOLERANCE, 0}, +{1988, 987577257u, 1152077087u, 987577257u, 0, REMAINDERF_TOLERANCE, 0}, +{1989, 3161606610u, 3190282989u, 3161606610u, 0, REMAINDERF_TOLERANCE, 0}, +{1990, 888030585u, 3062367380u, 888030585u, 0, REMAINDERF_TOLERANCE, 0}, +{1991, 1043442869u, 3311393817u, 1043442869u, 0, REMAINDERF_TOLERANCE, 0}, +{1992, 3320923228u, 3464544249u, 3320923228u, 0, REMAINDERF_TOLERANCE, 0}, +{1993, 1337400405u, 3488844154u, 3471946900u, 0, REMAINDERF_TOLERANCE, 0}, +{1994, 3400348640u, 3129868490u, 965234592u, 0, REMAINDERF_TOLERANCE, 0}, +{1995, 1250249095u, 1069023744u, 1060149248u, 0, REMAINDERF_TOLERANCE, 0}, +{1996, 3284411233u, 1173613526u, 3284411233u, 0, REMAINDERF_TOLERANCE, 0}, +{1997, 3020883322u, 2953622587u, 2935189664u, 0, REMAINDERF_TOLERANCE, 0}, +{1998, 1215968622u, 3469884568u, 1215968622u, 0, REMAINDERF_TOLERANCE, 0}, +{1999, 3202319550u, 819117302u, 806034448u, 0, REMAINDERF_TOLERANCE, 0}, +{2000, 3061638260u, 3116222327u, 3061638260u, 0, REMAINDERF_TOLERANCE, 0}, +{2001, 1025404104u, 1066370251u, 1025404104u, 0, REMAINDERF_TOLERANCE, 0}, +{2002, 3138086437u, 3195983510u, 3138086437u, 0, REMAINDERF_TOLERANCE, 0}, +{2003, 3091024506u, 3456196859u, 3091024506u, 0, REMAINDERF_TOLERANCE, 0}, +{2004, 3362748242u, 3369843597u, 1212678088u, 0, REMAINDERF_TOLERANCE, 0}, +{2005, 3099671635u, 3218383623u, 3099671635u, 0, REMAINDERF_TOLERANCE, 0}, +{2006, 3068014841u, 2978226656u, 796858368u, 0, REMAINDERF_TOLERANCE, 0}, +{2007, 1252237719u, 1121169249u, 3239657496u, 0, REMAINDERF_TOLERANCE, 0}, +{2008, 3327895594u, 1224511805u, 3327895594u, 0, REMAINDERF_TOLERANCE, 0}, +{2009, 3082454432u, 889268276u, 3017528640u, 0, REMAINDERF_TOLERANCE, 0}, +{2010, 3396161504u, 1182798837u, 3307975032u, 0, REMAINDERF_TOLERANCE, 0}, +{2011, 1099710167u, 887180181u, 3025478368u, 0, REMAINDERF_TOLERANCE, 0}, +{2012, 1157186482u, 1288722647u, 1157186482u, 0, REMAINDERF_TOLERANCE, 0}, +{2013, 1282110851u, 3176633124u, 988272128u, 0, REMAINDERF_TOLERANCE, 0}, +{2014, 3477008113u, 1331845018u, 1309516452u, 0, REMAINDERF_TOLERANCE, 0}, +{2015, 3292127294u, 3409957764u, 3292127294u, 0, REMAINDERF_TOLERANCE, 0}, +{2016, 1123357102u, 3281307320u, 1123357102u, 0, REMAINDERF_TOLERANCE, 0}, +{2017, 1106837025u, 3088080674u, 923829400u, 0, REMAINDERF_TOLERANCE, 0}, +{2018, 1049949008u, 1130799489u, 1049949008u, 0, REMAINDERF_TOLERANCE, 0}, +{2019, 1253017688u, 942062372u, 3078263968u, 0, REMAINDERF_TOLERANCE, 0}, +{2020, 1108543194u, 3281299199u, 1108543194u, 0, REMAINDERF_TOLERANCE, 0}, +{2021, 1160162706u, 1264067367u, 1160162706u, 0, REMAINDERF_TOLERANCE, 0}, +{2022, 3305715025u, 3017496063u, 859763526u, 0, REMAINDERF_TOLERANCE, 0}, +{2023, 1266928623u, 811778614u, 2944546360u, 0, REMAINDERF_TOLERANCE, 0}, +{2024, 3438080027u, 3107114149u, 932701080u, 0, REMAINDERF_TOLERANCE, 0}, +{2025, 3344574751u, 3111270744u, 3101782928u, 0, REMAINDERF_TOLERANCE, 0}, +{2026, 1152416724u, 962669179u, 948286872u, 0, REMAINDERF_TOLERANCE, 0}, +{2027, 1218239308u, 1126238113u, 3242277552u, 0, REMAINDERF_TOLERANCE, 0}, +{2028, 3263310567u, 1030748197u, 1001751704u, 0, REMAINDERF_TOLERANCE, 0}, +{2029, 1000313118u, 2980130729u, 2961403816u, 0, REMAINDERF_TOLERANCE, 0}, +{2030, 972485427u, 1124312043u, 972485427u, 0, REMAINDERF_TOLERANCE, 0}, +{2031, 3290264612u, 1124703898u, 1114186184u, 0, REMAINDERF_TOLERANCE, 0}, +{2032, 3222106584u, 1183748648u, 3222106584u, 0, REMAINDERF_TOLERANCE, 0}, +{2033, 1278946388u, 825129857u, 2955667752u, 0, REMAINDERF_TOLERANCE, 0}, +{2034, 947914771u, 3181847068u, 947914771u, 0, REMAINDERF_TOLERANCE, 0}, +{2035, 3167730654u, 3195765940u, 3167730654u, 0, REMAINDERF_TOLERANCE, 0}, +{2036, 1098530298u, 3255870890u, 1098530298u, 0, REMAINDERF_TOLERANCE, 0}, +{2037, 3232726036u, 871038882u, 853288144u, 0, REMAINDERF_TOLERANCE, 0}, +{2038, 1297190916u, 811863044u, 801786168u, 0, REMAINDERF_TOLERANCE, 0}, +{2039, 1277649137u, 961171401u, 923065584u, 0, REMAINDERF_TOLERANCE, 0}, +{2040, 3090306474u, 3124785016u, 3090306474u, 0, REMAINDERF_TOLERANCE, 0}, +{2041, 3244032016u, 3045313345u, 2997382784u, 0, REMAINDERF_TOLERANCE, 0}, +{2042, 3033122376u, 3049877065u, 3033122376u, 0, REMAINDERF_TOLERANCE, 0}, +{2043, 1096155623u, 1256423752u, 1096155623u, 0, REMAINDERF_TOLERANCE, 0}, +{2044, 873151908u, 3246562559u, 873151908u, 0, REMAINDERF_TOLERANCE, 0}, +{2045, 3317196817u, 989537151u, 3128603888u, 0, REMAINDERF_TOLERANCE, 0}, +{2046, 3374748510u, 834161190u, 2962771824u, 0, REMAINDERF_TOLERANCE, 0}, +{2047, 3345634950u, 959901149u, 3088828252u, 0, REMAINDERF_TOLERANCE, 0}, +{2048, 3189860276u, 883598767u, 817257216u, 0, REMAINDERF_TOLERANCE, 0}, +{2049, 3396917283u, 3066326686u, 893564336u, 0, REMAINDERF_TOLERANCE, 0}, +{2050, 3317032737u, 3143803722u, 974854600u, 0, REMAINDERF_TOLERANCE, 0}, +{2051, 1200051436u, 1163802508u, 1155071032u, 0, REMAINDERF_TOLERANCE, 0}, +{2052, 1306520561u, 957302464u, 944812800u, 0, REMAINDERF_TOLERANCE, 0}, +{2053, 1314936356u, 2985592532u, 810494176u, 0, REMAINDERF_TOLERANCE, 0}, +{2054, 3475052219u, 1284049853u, 1272158904u, 0, REMAINDERF_TOLERANCE, 0}, +{2055, 3085636260u, 1107682820u, 3085636260u, 0, REMAINDERF_TOLERANCE, 0}, +{2056, 3393227708u, 3271879112u, 1103097792u, 0, REMAINDERF_TOLERANCE, 0}, +{2057, 3182540197u, 852580839u, 794870400u, 0, REMAINDERF_TOLERANCE, 0}, +{2058, 3349005404u, 3080993030u, 924182316u, 0, REMAINDERF_TOLERANCE, 0}, +{2059, 3154720153u, 3443720494u, 3154720153u, 0, REMAINDERF_TOLERANCE, 0}, +{2060, 1262863321u, 1219003129u, 3356879788u, 0, REMAINDERF_TOLERANCE, 0}, +{2061, 1053387478u, 3184880021u, 3166694384u, 0, REMAINDERF_TOLERANCE, 0}, +{2062, 3387653691u, 3347783852u, 3317110976u, 0, REMAINDERF_TOLERANCE, 0}, +{2063, 3136364836u, 1018492227u, 3136364836u, 0, REMAINDERF_TOLERANCE, 0}, +{2064, 1338680611u, 1166078045u, 3279619968u, 0, REMAINDERF_TOLERANCE, 0}, +{2065, 1112891928u, 3074730425u, 3049799216u, 0, REMAINDERF_TOLERANCE, 0}, +{2066, 893449284u, 1052877339u, 893449284u, 0, REMAINDERF_TOLERANCE, 0}, +{2067, 3105373037u, 3246705916u, 3105373037u, 0, REMAINDERF_TOLERANCE, 0}, +{2068, 1190105283u, 3033907262u, 3005110384u, 0, REMAINDERF_TOLERANCE, 0}, +{2069, 1011225926u, 1180485180u, 1011225926u, 0, REMAINDERF_TOLERANCE, 0}, +{2070, 1043025031u, 987068973u, 3120009836u, 0, REMAINDERF_TOLERANCE, 0}, +{2071, 3410531037u, 2953541915u, 2915509408u, 0, REMAINDERF_TOLERANCE, 0}, +{2072, 3125834184u, 896953754u, 3022091312u, 0, REMAINDERF_TOLERANCE, 0}, +{2073, 902318189u, 849277289u, 2984319972u, 0, REMAINDERF_TOLERANCE, 0}, +{2074, 3213624815u, 2987148017u, 810618448u, 0, REMAINDERF_TOLERANCE, 0}, +{2075, 1120888322u, 1086209113u, 1076411502u, 0, REMAINDERF_TOLERANCE, 0}, +{2076, 1315217243u, 3396371713u, 1235367450u, 0, REMAINDERF_TOLERANCE, 0}, +{2077, 3137758475u, 1039403054u, 3137758475u, 0, REMAINDERF_TOLERANCE, 0}, +{2078, 1040617590u, 1034835971u, 3172933172u, 0, REMAINDERF_TOLERANCE, 0}, +{2079, 955384253u, 3344785562u, 955384253u, 0, REMAINDERF_TOLERANCE, 0}, +{2080, 904255535u, 1019967545u, 904255535u, 0, REMAINDERF_TOLERANCE, 0}, +{2081, 1022984119u, 3113891410u, 3104589600u, 0, REMAINDERF_TOLERANCE, 0}, +{2082, 997362368u, 3112875428u, 3058465792u, 0, REMAINDERF_TOLERANCE, 0}, +{2083, 1168623062u, 1143306482u, 1116944640u, 0, REMAINDERF_TOLERANCE, 0}, +{2084, 878737490u, 3269908326u, 878737490u, 0, REMAINDERF_TOLERANCE, 0}, +{2085, 1039827284u, 1072928888u, 1039827284u, 0, REMAINDERF_TOLERANCE, 0}, +{2086, 1021564080u, 1064468397u, 1021564080u, 0, REMAINDERF_TOLERANCE, 0}, +{2087, 3458669745u, 3033299853u, 874931060u, 0, REMAINDERF_TOLERANCE, 0}, +{2088, 3327516316u, 3405380971u, 3327516316u, 0, REMAINDERF_TOLERANCE, 0}, +{2089, 1040711112u, 3229444200u, 1040711112u, 0, REMAINDERF_TOLERANCE, 0}, +{2090, 1134528351u, 3365952513u, 1134528351u, 0, REMAINDERF_TOLERANCE, 0}, +{2091, 3414352838u, 3350285760u, 1151873024u, 0, REMAINDERF_TOLERANCE, 0}, +{2092, 1133689539u, 1067460093u, 3205511294u, 0, REMAINDERF_TOLERANCE, 0}, +{2093, 3455688478u, 3333091960u, 3320850048u, 0, REMAINDERF_TOLERANCE, 0}, +{2094, 1137634874u, 1137038869u, 1100055120u, 0, REMAINDERF_TOLERANCE, 0}, +{2095, 3415502662u, 955510692u, 3074734528u, 0, REMAINDERF_TOLERANCE, 0}, +{2096, 954999730u, 969618597u, 954999730u, 0, REMAINDERF_TOLERANCE, 0}, +{2097, 1066157309u, 3241712664u, 1066157309u, 0, REMAINDERF_TOLERANCE, 0}, +{2098, 3436353675u, 1174967495u, 3308447100u, 0, REMAINDERF_TOLERANCE, 0}, +{2099, 940437609u, 860372396u, 2984906304u, 0, REMAINDERF_TOLERANCE, 0}, +{2100, 3108347547u, 3434003435u, 3108347547u, 0, REMAINDERF_TOLERANCE, 0}, +{2101, 3064200154u, 3158080507u, 3064200154u, 0, REMAINDERF_TOLERANCE, 0}, +{2102, 1023889593u, 2979304683u, 2952006656u, 0, REMAINDERF_TOLERANCE, 0}, +{2103, 3272661536u, 3461799138u, 3272661536u, 0, REMAINDERF_TOLERANCE, 0}, +{2104, 1170245333u, 1233406410u, 1170245333u, 0, REMAINDERF_TOLERANCE, 0}, +{2105, 1219052056u, 3369557946u, 3350754952u, 0, REMAINDERF_TOLERANCE, 0}, +{2106, 3318983619u, 3259663338u, 1093446640u, 0, REMAINDERF_TOLERANCE, 0}, +{2107, 3372118621u, 837597103u, 2969878364u, 0, REMAINDERF_TOLERANCE, 0}, +{2108, 3146190320u, 889646054u, 3005091072u, 0, REMAINDERF_TOLERANCE, 0}, +{2109, 1299683827u, 966031619u, 951225020u, 0, REMAINDERF_TOLERANCE, 0}, +{2110, 3086068902u, 3484245751u, 3086068902u, 0, REMAINDERF_TOLERANCE, 0}, +{2111, 3064155399u, 3176569312u, 3064155399u, 0, REMAINDERF_TOLERANCE, 0}, +{2112, 3040314717u, 1071290674u, 3040314717u, 0, REMAINDERF_TOLERANCE, 0}, +{2113, 3257224022u, 3361778245u, 3257224022u, 0, REMAINDERF_TOLERANCE, 0}, +{2114, 1229268598u, 1066965677u, 3201545820u, 0, REMAINDERF_TOLERANCE, 0}, +{2115, 3184078812u, 871003709u, 856625364u, 0, REMAINDERF_TOLERANCE, 0}, +{2116, 1086717248u, 3423795374u, 1086717248u, 0, REMAINDERF_TOLERANCE, 0}, +{2117, 3434884607u, 3029593823u, 3012614440u, 0, REMAINDERF_TOLERANCE, 0}, +{2118, 3464955606u, 1017987696u, 1009465856u, 0, REMAINDERF_TOLERANCE, 0}, +{2119, 1025278524u, 3121856207u, 3102801888u, 0, REMAINDERF_TOLERANCE, 0}, +{2120, 1242829722u, 3233935671u, 1075185908u, 0, REMAINDERF_TOLERANCE, 0}, +{2121, 3075149137u, 1117325737u, 3075149137u, 0, REMAINDERF_TOLERANCE, 0}, +{2122, 1200927971u, 1317167489u, 1200927971u, 0, REMAINDERF_TOLERANCE, 0}, +{2123, 3326858092u, 3452602832u, 3326858092u, 0, REMAINDERF_TOLERANCE, 0}, +{2124, 1246019790u, 850632217u, 830042472u, 0, REMAINDERF_TOLERANCE, 0}, +{2125, 3184801644u, 1137974313u, 3184801644u, 0, REMAINDERF_TOLERANCE, 0}, +{2126, 1136052740u, 3244616020u, 3234653200u, 0, REMAINDERF_TOLERANCE, 0}, +{2127, 1069009211u, 3002507482u, 814487552u, 0, REMAINDERF_TOLERANCE, 0}, +{2128, 1015670780u, 1101217251u, 1015670780u, 0, REMAINDERF_TOLERANCE, 0}, +{2129, 1012543234u, 1116520440u, 1012543234u, 0, REMAINDERF_TOLERANCE, 0}, +{2130, 3316611992u, 3394732912u, 3316611992u, 0, REMAINDERF_TOLERANCE, 0}, +{2131, 1087942795u, 3316660295u, 1087942795u, 0, REMAINDERF_TOLERANCE, 0}, +{2132, 3426365713u, 3069778532u, 899297264u, 0, REMAINDERF_TOLERANCE, 0}, +{2133, 3066654389u, 3443934204u, 3066654389u, 0, REMAINDERF_TOLERANCE, 0}, +{2134, 3295326432u, 1313396175u, 3295326432u, 0, REMAINDERF_TOLERANCE, 0}, +{2135, 3318835308u, 3277583511u, 3268200348u, 0, REMAINDERF_TOLERANCE, 0}, +{2136, 3283555717u, 891875120u, 3018418816u, 0, REMAINDERF_TOLERANCE, 0}, +{2137, 3381255420u, 3015406047u, 3003470174u, 0, REMAINDERF_TOLERANCE, 0}, +{2138, 3040485181u, 3375450886u, 3040485181u, 0, REMAINDERF_TOLERANCE, 0}, +{2139, 3388772093u, 1032597076u, 3165073936u, 0, REMAINDERF_TOLERANCE, 0}, +{2140, 954670189u, 1144923689u, 954670189u, 0, REMAINDERF_TOLERANCE, 0}, +{2141, 1319200415u, 3387555900u, 1225501968u, 0, REMAINDERF_TOLERANCE, 0}, +{2142, 1279324488u, 3228401212u, 3206297888u, 0, REMAINDERF_TOLERANCE, 0}, +{2143, 3217795424u, 865577227u, 3001572528u, 0, REMAINDERF_TOLERANCE, 0}, +{2144, 3455131757u, 1260217257u, 3363738048u, 0, REMAINDERF_TOLERANCE, 0}, +{2145, 1246947517u, 1087951909u, 3223711398u, 0, REMAINDERF_TOLERANCE, 0}, +{2146, 3396723577u, 869285240u, 856565232u, 0, REMAINDERF_TOLERANCE, 0}, +{2147, 3433761025u, 3060143904u, 889916032u, 0, REMAINDERF_TOLERANCE, 0}, +{2148, 3201187455u, 900233172u, 3030875120u, 0, REMAINDERF_TOLERANCE, 0}, +{2149, 1173247961u, 1191127979u, 1173247961u, 0, REMAINDERF_TOLERANCE, 0}, +{2150, 3037297123u, 3346394818u, 3037297123u, 0, REMAINDERF_TOLERANCE, 0}, +{2151, 3083019343u, 3033309444u, 2992028032u, 0, REMAINDERF_TOLERANCE, 0}, +{2152, 3042018375u, 3203882372u, 3042018375u, 0, REMAINDERF_TOLERANCE, 0}, +{2153, 1082862511u, 3032804719u, 870904016u, 0, REMAINDERF_TOLERANCE, 0}, +{2154, 3157626955u, 3483653298u, 3157626955u, 0, REMAINDERF_TOLERANCE, 0}, +{2155, 1341821683u, 3003675365u, 2982557440u, 0, REMAINDERF_TOLERANCE, 0}, +{2156, 1079061705u, 2960507663u, 2951154782u, 0, REMAINDERF_TOLERANCE, 0}, +{2157, 3182695954u, 3256861672u, 3182695954u, 0, REMAINDERF_TOLERANCE, 0}, +{2158, 1105291533u, 3482971524u, 1105291533u, 0, REMAINDERF_TOLERANCE, 0}, +{2159, 1016023520u, 3227712090u, 1016023520u, 0, REMAINDERF_TOLERANCE, 0}, +{2160, 3370691006u, 1295870514u, 3370691006u, 0, REMAINDERF_TOLERANCE, 0}, +{2161, 1156767169u, 1049756240u, 1025779584u, 0, REMAINDERF_TOLERANCE, 0}, +{2162, 3077020499u, 894671462u, 885935096u, 0, REMAINDERF_TOLERANCE, 0}, +{2163, 1104284039u, 3040211914u, 862037856u, 0, REMAINDERF_TOLERANCE, 0}, +{2164, 3335212901u, 3486414589u, 3335212901u, 0, REMAINDERF_TOLERANCE, 0}, +{2165, 1093697541u, 3193708441u, 1032547210u, 0, REMAINDERF_TOLERANCE, 0}, +{2166, 3266691185u, 1160074593u, 3266691185u, 0, REMAINDERF_TOLERANCE, 0}, +{2167, 3179003144u, 1108615803u, 3179003144u, 0, REMAINDERF_TOLERANCE, 0}, +{2168, 1094115255u, 3008610212u, 2973244032u, 0, REMAINDERF_TOLERANCE, 0}, +{2169, 3424086808u, 3260140004u, 1099884568u, 0, REMAINDERF_TOLERANCE, 0}, +{2170, 3353608773u, 1134068114u, 1117671864u, 0, REMAINDERF_TOLERANCE, 0}, +{2171, 882878091u, 3136970767u, 882878091u, 0, REMAINDERF_TOLERANCE, 0}, +{2172, 1098662266u, 833740182u, 2965890624u, 0, REMAINDERF_TOLERANCE, 0}, +{2173, 927582555u, 947955456u, 927582555u, 0, REMAINDERF_TOLERANCE, 0}, +{2174, 3111440310u, 3067634077u, 3048272560u, 0, REMAINDERF_TOLERANCE, 0}, +{2175, 3476083859u, 966439623u, 950958600u, 0, REMAINDERF_TOLERANCE, 0}, +{2176, 3038754840u, 932009686u, 3038754840u, 0, REMAINDERF_TOLERANCE, 0}, +{2177, 3464546616u, 3205527253u, 3195154312u, 0, REMAINDERF_TOLERANCE, 0}, +{2178, 1002542205u, 3152136093u, 3129003136u, 0, REMAINDERF_TOLERANCE, 0}, +{2179, 3443552129u, 3165561391u, 3131907072u, 0, REMAINDERF_TOLERANCE, 0}, +{2180, 1287620154u, 3119707283u, 3093984640u, 0, REMAINDERF_TOLERANCE, 0}, +{2181, 3073260205u, 3093124531u, 3073260205u, 0, REMAINDERF_TOLERANCE, 0}, +{2182, 1245702957u, 894348966u, 815923200u, 0, REMAINDERF_TOLERANCE, 0}, +{2183, 1002715618u, 1191006977u, 1002715618u, 0, REMAINDERF_TOLERANCE, 0}, +{2184, 3087802274u, 897541752u, 3018272960u, 0, REMAINDERF_TOLERANCE, 0}, +{2185, 3415763001u, 3032518431u, 846106048u, 0, REMAINDERF_TOLERANCE, 0}, +{2186, 3283471961u, 1260093226u, 3283471961u, 0, REMAINDERF_TOLERANCE, 0}, +{2187, 3311210827u, 1192192264u, 3311210827u, 0, REMAINDERF_TOLERANCE, 0}, +{2188, 3026311911u, 2968974374u, 2935874080u, 0, REMAINDERF_TOLERANCE, 0}, +{2189, 1198307901u, 1116328249u, 1107057956u, 0, REMAINDERF_TOLERANCE, 0}, +{2190, 1288901567u, 1296370667u, 3434546199u, 0, REMAINDERF_TOLERANCE, 0}, +{2191, 922255363u, 958305289u, 922255363u, 0, REMAINDERF_TOLERANCE, 0}, +{2192, 1113104661u, 944376032u, 3061836288u, 0, REMAINDERF_TOLERANCE, 0}, +{2193, 1136714348u, 828849087u, 806528084u, 0, REMAINDERF_TOLERANCE, 0}, +{2194, 948856035u, 1015466475u, 948856035u, 0, REMAINDERF_TOLERANCE, 0}, +{2195, 1062512367u, 3229559531u, 1062512367u, 0, REMAINDERF_TOLERANCE, 0}, +{2196, 3486907092u, 823220784u, 2917834752u, 0, REMAINDERF_TOLERANCE, 0}, +{2197, 1162027071u, 3308983387u, 1124122176u, 0, REMAINDERF_TOLERANCE, 0}, +{2198, 1034561811u, 1054043114u, 1034561811u, 0, REMAINDERF_TOLERANCE, 0}, +{2199, 3271615417u, 3209997200u, 3187590784u, 0, REMAINDERF_TOLERANCE, 0}, +{2200, 1042014529u, 1146708584u, 1042014529u, 0, REMAINDERF_TOLERANCE, 0}, +{2201, 1177157787u, 3090208179u, 3079778204u, 0, REMAINDERF_TOLERANCE, 0}, +{2202, 3196144817u, 1056118717u, 1046713880u, 0, REMAINDERF_TOLERANCE, 0}, +{2203, 3432084552u, 2997091781u, 840592388u, 0, REMAINDERF_TOLERANCE, 0}, +{2204, 1309658335u, 1010219988u, 3143725360u, 0, REMAINDERF_TOLERANCE, 0}, +{2205, 1226494979u, 2991604792u, 824811424u, 0, REMAINDERF_TOLERANCE, 0}, +{2206, 3100289712u, 3456334210u, 3100289712u, 0, REMAINDERF_TOLERANCE, 0}, +{2207, 3375507013u, 1306310823u, 3375507013u, 0, REMAINDERF_TOLERANCE, 0}, +{2208, 3460699001u, 3096700943u, 929697272u, 0, REMAINDERF_TOLERANCE, 0}, +{2209, 3079231719u, 1044386263u, 3079231719u, 0, REMAINDERF_TOLERANCE, 0}, +{2210, 3093951884u, 1014115231u, 3093951884u, 0, REMAINDERF_TOLERANCE, 0}, +{2211, 3468023178u, 1209565017u, 1176354432u, 0, REMAINDERF_TOLERANCE, 0}, +{2212, 1204196034u, 3298625731u, 3266401072u, 0, REMAINDERF_TOLERANCE, 0}, +{2213, 3459877411u, 2960476959u, 802433148u, 0, REMAINDERF_TOLERANCE, 0}, +{2214, 1161439847u, 943449277u, 3075310388u, 0, REMAINDERF_TOLERANCE, 0}, +{2215, 908663107u, 939489763u, 908663107u, 0, REMAINDERF_TOLERANCE, 0}, +{2216, 1055319316u, 3261813492u, 1055319316u, 0, REMAINDERF_TOLERANCE, 0}, +{2217, 1084378658u, 1009650785u, 1000236678u, 0, REMAINDERF_TOLERANCE, 0}, +{2218, 3053887750u, 3341786453u, 3053887750u, 0, REMAINDERF_TOLERANCE, 0}, +{2219, 3022828828u, 881335251u, 868680980u, 0, REMAINDERF_TOLERANCE, 0}, +{2220, 1226473697u, 821025132u, 810787144u, 0, REMAINDERF_TOLERANCE, 0}, +{2221, 1123114742u, 1229815537u, 1123114742u, 0, REMAINDERF_TOLERANCE, 0}, +{2222, 1258114435u, 1291336083u, 1258114435u, 0, REMAINDERF_TOLERANCE, 0}, +{2223, 3468040845u, 3066966245u, 3058342472u, 0, REMAINDERF_TOLERANCE, 0}, +{2224, 1178825761u, 1113195286u, 3251980680u, 0, REMAINDERF_TOLERANCE, 0}, +{2225, 3059266302u, 878503862u, 864458496u, 0, REMAINDERF_TOLERANCE, 0}, +{2226, 3223384012u, 1130486973u, 3223384012u, 0, REMAINDERF_TOLERANCE, 0}, +{2227, 3445262427u, 3465211174u, 3445262427u, 0, REMAINDERF_TOLERANCE, 0}, +{2228, 1125653081u, 1207799746u, 1125653081u, 0, REMAINDERF_TOLERANCE, 0}, +{2229, 3337652712u, 3025581813u, 3012467368u, 0, REMAINDERF_TOLERANCE, 0}, +{2230, 1184753508u, 3147374485u, 3116845728u, 0, REMAINDERF_TOLERANCE, 0}, +{2231, 996404791u, 3353251979u, 996404791u, 0, REMAINDERF_TOLERANCE, 0}, +{2232, 1188439315u, 1113484271u, 3225113648u, 0, REMAINDERF_TOLERANCE, 0}, +{2233, 906557513u, 3006513432u, 2988936544u, 0, REMAINDERF_TOLERANCE, 0}, +{2234, 916831283u, 999465787u, 916831283u, 0, REMAINDERF_TOLERANCE, 0}, +{2235, 996786317u, 3179221951u, 996786317u, 0, REMAINDERF_TOLERANCE, 0}, +{2236, 3461635065u, 1004690387u, 984706768u, 0, REMAINDERF_TOLERANCE, 0}, +{2237, 1188167943u, 1200744896u, 1188167943u, 0, REMAINDERF_TOLERANCE, 0}, +{2238, 3290079438u, 846519377u, 821187528u, 0, REMAINDERF_TOLERANCE, 0}, +{2239, 3350690327u, 2967953392u, 2957315104u, 0, REMAINDERF_TOLERANCE, 0}, +{2240, 1102061604u, 3424449935u, 1102061604u, 0, REMAINDERF_TOLERANCE, 0}, +{2241, 1282351521u, 3039376424u, 867630848u, 0, REMAINDERF_TOLERANCE, 0}, +{2242, 3458861065u, 3392466405u, 1234687786u, 0, REMAINDERF_TOLERANCE, 0}, +{2243, 3095256878u, 1023623326u, 3095256878u, 0, REMAINDERF_TOLERANCE, 0}, +{2244, 3163373610u, 843150426u, 824504784u, 0, REMAINDERF_TOLERANCE, 0}, +{2245, 3228793330u, 855146890u, 2992187816u, 0, REMAINDERF_TOLERANCE, 0}, +{2246, 3422194733u, 893873945u, 881924592u, 0, REMAINDERF_TOLERANCE, 0}, +{2247, 3083885296u, 974543672u, 3083885296u, 0, REMAINDERF_TOLERANCE, 0}, +{2248, 1261940623u, 3402349985u, 3382734992u, 0, REMAINDERF_TOLERANCE, 0}, +{2249, 3400603081u, 3234396843u, 1076561414u, 0, REMAINDERF_TOLERANCE, 0}, +{2250, 1219411812u, 2961857939u, 800538620u, 0, REMAINDERF_TOLERANCE, 0}, +{2251, 3094833770u, 805351108u, 785839264u, 0, REMAINDERF_TOLERANCE, 0}, +{2252, 3139250800u, 3079109479u, 3070476520u, 0, REMAINDERF_TOLERANCE, 0}, +{2253, 886201503u, 3272760705u, 886201503u, 0, REMAINDERF_TOLERANCE, 0}, +{2254, 3297366026u, 1089966380u, 1081350952u, 0, REMAINDERF_TOLERANCE, 0}, +{2255, 1218488455u, 3309646450u, 1147081920u, 0, REMAINDERF_TOLERANCE, 0}, +{2256, 3040358923u, 3093401553u, 3040358923u, 0, REMAINDERF_TOLERANCE, 0}, +{2257, 1283938137u, 1196383822u, 3331422908u, 0, REMAINDERF_TOLERANCE, 0}, +{2258, 3182551696u, 3029982441u, 870845312u, 0, REMAINDERF_TOLERANCE, 0}, +{2259, 1317098613u, 949986176u, 3084154368u, 0, REMAINDERF_TOLERANCE, 0}, +{2260, 3116209179u, 3303588342u, 3116209179u, 0, REMAINDERF_TOLERANCE, 0}, +{2261, 3431703657u, 3014443710u, 842962944u, 0, REMAINDERF_TOLERANCE, 0}, +{2262, 3239728775u, 927815421u, 3057910716u, 0, REMAINDERF_TOLERANCE, 0}, +{2263, 3207141672u, 933456504u, 3070924848u, 0, REMAINDERF_TOLERANCE, 0}, +{2264, 3154378805u, 905462392u, 889766848u, 0, REMAINDERF_TOLERANCE, 0}, +{2265, 3069658155u, 1041452042u, 3069658155u, 0, REMAINDERF_TOLERANCE, 0}, +{2266, 3313160088u, 2964063309u, 803763456u, 0, REMAINDERF_TOLERANCE, 0}, +{2267, 3207056527u, 3384206601u, 3207056527u, 0, REMAINDERF_TOLERANCE, 0}, +{2268, 1284174954u, 3436881197u, 3424608646u, 0, REMAINDERF_TOLERANCE, 0}, +{2269, 3156081645u, 3308839704u, 3156081645u, 0, REMAINDERF_TOLERANCE, 0}, +{2270, 1063693032u, 976661408u, 942444032u, 0, REMAINDERF_TOLERANCE, 0}, +{2271, 1102631663u, 3396951425u, 1102631663u, 0, REMAINDERF_TOLERANCE, 0}, +{2272, 968803479u, 992989712u, 968803479u, 0, REMAINDERF_TOLERANCE, 0}, +{2273, 3273080388u, 3109405906u, 3092240224u, 0, REMAINDERF_TOLERANCE, 0}, +{2274, 1172529774u, 3294550127u, 1125203936u, 0, REMAINDERF_TOLERANCE, 0}, +{2275, 1306695905u, 1292690378u, 1274295072u, 0, REMAINDERF_TOLERANCE, 0}, +{2276, 3158855023u, 3151283866u, 977769136u, 0, REMAINDERF_TOLERANCE, 0}, +{2277, 1165177679u, 3276237026u, 3267492208u, 0, REMAINDERF_TOLERANCE, 0}, +{2278, 3403009513u, 3381966453u, 1217674344u, 0, REMAINDERF_TOLERANCE, 0}, +{2279, 952348506u, 3377573987u, 952348506u, 0, REMAINDERF_TOLERANCE, 0}, +{2280, 1222777442u, 1125769920u, 1099360768u, 0, REMAINDERF_TOLERANCE, 0}, +{2281, 1325324763u, 978336043u, 3113756462u, 0, REMAINDERF_TOLERANCE, 0}, +{2282, 3363524213u, 3202991311u, 1029473112u, 0, REMAINDERF_TOLERANCE, 0}, +{2283, 1158950321u, 1073578913u, 1037108016u, 0, REMAINDERF_TOLERANCE, 0}, +{2284, 903129873u, 3416864271u, 903129873u, 0, REMAINDERF_TOLERANCE, 0}, +{2285, 3078339944u, 988173985u, 3078339944u, 0, REMAINDERF_TOLERANCE, 0}, +{2286, 1208345407u, 1254181270u, 1208345407u, 0, REMAINDERF_TOLERANCE, 0}, +{2287, 1258634105u, 1247426200u, 1237385576u, 0, REMAINDERF_TOLERANCE, 0}, +{2288, 1248478509u, 1287895126u, 1248478509u, 0, REMAINDERF_TOLERANCE, 0}, +{2289, 1153863988u, 3430539165u, 1153863988u, 0, REMAINDERF_TOLERANCE, 0}, +{2290, 1235620969u, 866627358u, 3004237692u, 0, REMAINDERF_TOLERANCE, 0}, +{2291, 1097120930u, 3221726305u, 3205116028u, 0, REMAINDERF_TOLERANCE, 0}, +{2292, 3469778622u, 1200179013u, 1190998076u, 0, REMAINDERF_TOLERANCE, 0}, +{2293, 1147712200u, 931865525u, 899214128u, 0, REMAINDERF_TOLERANCE, 0}, +{2294, 1124721745u, 3058969650u, 3036165440u, 0, REMAINDERF_TOLERANCE, 0}, +{2295, 3261744304u, 1043806501u, 3177891572u, 0, REMAINDERF_TOLERANCE, 0}, +{2296, 3303160152u, 3075455322u, 3064687000u, 0, REMAINDERF_TOLERANCE, 0}, +{2297, 1315090496u, 3269683237u, 3245461936u, 0, REMAINDERF_TOLERANCE, 0}, +{2298, 1335399673u, 974138676u, 3108006224u, 0, REMAINDERF_TOLERANCE, 0}, +{2299, 1072458508u, 3372833993u, 1072458508u, 0, REMAINDERF_TOLERANCE, 0}, +{2300, 3303015249u, 3015039539u, 850147332u, 0, REMAINDERF_TOLERANCE, 0}, +{2301, 3252139741u, 1059615003u, 1011903680u, 0, REMAINDERF_TOLERANCE, 0}, +{2302, 3468519966u, 3113982619u, 3087617688u, 0, REMAINDERF_TOLERANCE, 0}, +{2303, 1006231203u, 897530770u, 3020384160u, 0, REMAINDERF_TOLERANCE, 0}, +{2304, 951554138u, 1001144381u, 951554138u, 0, REMAINDERF_TOLERANCE, 0}, +{2305, 942046828u, 986341002u, 942046828u, 0, REMAINDERF_TOLERANCE, 0}, +{2306, 3319723279u, 3414482416u, 3319723279u, 0, REMAINDERF_TOLERANCE, 0}, +{2307, 3255104167u, 928827688u, 915676752u, 0, REMAINDERF_TOLERANCE, 0}, +{2308, 1155477903u, 3104812800u, 3094453248u, 0, REMAINDERF_TOLERANCE, 0}, +{2309, 3273889176u, 980486479u, 3119241930u, 0, REMAINDERF_TOLERANCE, 0}, +{2310, 3237813668u, 3441016803u, 3237813668u, 0, REMAINDERF_TOLERANCE, 0}, +{2311, 1228207362u, 2985476579u, 2953847432u, 0, REMAINDERF_TOLERANCE, 0}, +{2312, 1290175785u, 3008182462u, 2998391348u, 0, REMAINDERF_TOLERANCE, 0}, +{2313, 981908840u, 3314038398u, 981908840u, 0, REMAINDERF_TOLERANCE, 0}, +{2314, 941187647u, 1107765599u, 941187647u, 0, REMAINDERF_TOLERANCE, 0}, +{2315, 1214223128u, 3225536822u, 1053837344u, 0, REMAINDERF_TOLERANCE, 0}, +{2316, 3422922584u, 1086391131u, 3207980032u, 0, REMAINDERF_TOLERANCE, 0}, +{2317, 1315857601u, 3487600045u, 1315857601u, 0, REMAINDERF_TOLERANCE, 0}, +{2318, 3453226030u, 3233768835u, 3223552828u, 0, REMAINDERF_TOLERANCE, 0}, +{2319, 1078359574u, 3199175230u, 1014665280u, 0, REMAINDERF_TOLERANCE, 0}, +{2320, 1029557624u, 3302959071u, 1029557624u, 0, REMAINDERF_TOLERANCE, 0}, +{2321, 1207675424u, 3042692550u, 876831328u, 0, REMAINDERF_TOLERANCE, 0}, +{2322, 1028355074u, 3442294040u, 1028355074u, 0, REMAINDERF_TOLERANCE, 0}, +{2323, 1248421894u, 3367769132u, 3336083584u, 0, REMAINDERF_TOLERANCE, 0}, +{2324, 3353251994u, 1095517730u, 1086597880u, 0, REMAINDERF_TOLERANCE, 0}, +{2325, 876926659u, 3288089977u, 876926659u, 0, REMAINDERF_TOLERANCE, 0}, +{2326, 1076752219u, 876236939u, 853834344u, 0, REMAINDERF_TOLERANCE, 0}, +{2327, 3388531942u, 2988520062u, 2965920304u, 0, REMAINDERF_TOLERANCE, 0}, +{2328, 1273395082u, 3031189261u, 872233456u, 0, REMAINDERF_TOLERANCE, 0}, +{2329, 3385588183u, 3258252464u, 3237664000u, 0, REMAINDERF_TOLERANCE, 0}, +{2330, 3192315328u, 3289489214u, 3192315328u, 0, REMAINDERF_TOLERANCE, 0}, +{2331, 3441804648u, 3274638356u, 3263870600u, 0, REMAINDERF_TOLERANCE, 0}, +{2332, 3392827417u, 1277961150u, 3392827417u, 0, REMAINDERF_TOLERANCE, 0}, +{2333, 1161241793u, 1328003707u, 1161241793u, 0, REMAINDERF_TOLERANCE, 0}, +{2334, 3034494183u, 3041579130u, 884403213u, 0, REMAINDERF_TOLERANCE, 0}, +{2335, 1171318485u, 3374409104u, 1171318485u, 0, REMAINDERF_TOLERANCE, 0}, +{2336, 3047748143u, 831102792u, 2962440896u, 0, REMAINDERF_TOLERANCE, 0}, +{2337, 1001216371u, 3052357038u, 896350396u, 0, REMAINDERF_TOLERANCE, 0}, +{2338, 912515889u, 1074635609u, 912515889u, 0, REMAINDERF_TOLERANCE, 0}, +{2339, 3391452505u, 897989232u, 888432512u, 0, REMAINDERF_TOLERANCE, 0}, +{2340, 3249603369u, 3147662248u, 3104459008u, 0, REMAINDERF_TOLERANCE, 0}, +{2341, 1220264047u, 2960450369u, 2948790886u, 0, REMAINDERF_TOLERANCE, 0}, +{2342, 3169816394u, 988430929u, 3123289888u, 0, REMAINDERF_TOLERANCE, 0}, +{2343, 3098997418u, 3002162688u, 842333184u, 0, REMAINDERF_TOLERANCE, 0}, +{2344, 3282212423u, 3174079140u, 1007414880u, 0, REMAINDERF_TOLERANCE, 0}, +{2345, 3352293320u, 3247843425u, 3218976128u, 0, REMAINDERF_TOLERANCE, 0}, +{2346, 3296358441u, 875645354u, 862714536u, 0, REMAINDERF_TOLERANCE, 0}, +{2347, 1197828352u, 3245614728u, 3230573968u, 0, REMAINDERF_TOLERANCE, 0}, +{2348, 3340510371u, 914930263u, 897884204u, 0, REMAINDERF_TOLERANCE, 0}, +{2349, 1127109339u, 3368125489u, 1127109339u, 0, REMAINDERF_TOLERANCE, 0}, +{2350, 1200599955u, 2981200675u, 817704344u, 0, REMAINDERF_TOLERANCE, 0}, +{2351, 962230977u, 2988248037u, 805535536u, 0, REMAINDERF_TOLERANCE, 0}, +{2352, 3192887808u, 3191848339u, 3162359504u, 0, REMAINDERF_TOLERANCE, 0}, +{2353, 3237183876u, 3179379969u, 3166118432u, 0, REMAINDERF_TOLERANCE, 0}, +{2354, 939285924u, 3056079386u, 855964160u, 0, REMAINDERF_TOLERANCE, 0}, +{2355, 944050180u, 3452557879u, 944050180u, 0, REMAINDERF_TOLERANCE, 0}, +{2356, 3058135703u, 3090284601u, 3058135703u, 0, REMAINDERF_TOLERANCE, 0}, +{2357, 3480592662u, 3261728191u, 3221094720u, 0, REMAINDERF_TOLERANCE, 0}, +{2358, 3061939312u, 3274418540u, 3061939312u, 0, REMAINDERF_TOLERANCE, 0}, +{2359, 1003299981u, 853295521u, 831378192u, 0, REMAINDERF_TOLERANCE, 0}, +{2360, 1155775526u, 1255814444u, 1155775526u, 0, REMAINDERF_TOLERANCE, 0}, +{2361, 1234491880u, 3408568717u, 1234491880u, 0, REMAINDERF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF remainderf.h diff --git a/packages/language/c/libm/current/tests/vectors/rintf.c b/packages/language/c/libm/current/tests/vectors/rintf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/rintf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// rintf.c +// +// Test of rintf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/rintf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(rintf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &rintf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &rintf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("rintf() is stable"); + } // if + else + { + CYG_TEST_FAIL("rintf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library rintf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "rintf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF rintf.c diff --git a/packages/language/c/libm/current/tests/vectors/rintf.h b/packages/language/c/libm/current/tests/vectors/rintf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/rintf.h @@ -0,0 +1,1004 @@ +#ifndef CYGONCE_LIBM_RINTF_H +#define CYGONCE_LIBM_RINTF_H +//=========================================================================== +// +// rintf.h +// +// Test vectors for testing of rintf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/rintf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define RINTF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t rintf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{70, 1008981770u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{71, 1017370378u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{72, 1022739087u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{73, 1025758986u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{74, 1028443341u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{75, 1031127695u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{76, 1032805417u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{77, 1034147594u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{78, 1035489772u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{79, 1036831949u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{80, 1038174126u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{81, 1039516303u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{82, 1040522936u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{83, 1041194025u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{84, 1041865114u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{85, 1042536202u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{86, 1043207291u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{87, 1043878380u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{88, 1044549468u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{89, 1045220557u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{90, 1045891645u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{91, 1046562734u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{92, 1047233823u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{93, 1047904911u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{94, 1048576000u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{95, 1048911544u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{96, 1049247089u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{97, 1049582633u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{98, 1049918177u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{99, 1050253722u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{100, 1050589266u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{101, 1050924810u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{102, 1051260355u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{103, 1051595899u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{104, 1051931443u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{105, 1052266988u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{106, 1052602532u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{107, 1052938076u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{108, 1053273620u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{109, 1053609165u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{110, 1053944709u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{111, 1054280253u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{112, 1054615798u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{113, 1054951342u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{114, 1055286886u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{115, 1055622431u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{116, 1055957975u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{117, 1056293519u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{118, 1056629064u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{119, 1056964608u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{120, 1057132380u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{121, 1057300152u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{122, 1057467924u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{123, 1057635697u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{124, 1057803469u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{125, 1057971241u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{126, 1058139013u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{127, 1058306785u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{128, 1058474557u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{129, 1058642330u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{130, 1058810102u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{131, 1058977874u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{132, 1059145646u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{133, 1059313418u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{134, 1059481190u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{135, 1059648963u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{136, 1059816735u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{137, 1059984507u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{138, 1060152279u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{139, 1060320051u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{140, 1060487823u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{141, 1060655596u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{142, 1060823368u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{143, 1060991140u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{144, 1061158912u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{145, 1061326684u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{146, 1061494456u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{147, 1061662228u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{148, 1061830001u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{149, 1061997773u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{150, 1062165545u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{151, 1062333317u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{152, 1062501089u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{153, 1062668861u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{154, 1062836634u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{155, 1063004406u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{156, 1063172178u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{157, 1063339950u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{158, 1063507722u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{159, 1063675494u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{160, 1063843267u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{161, 1064011039u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{162, 1064178811u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{163, 1064346583u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{164, 1064514355u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{165, 1064682127u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{166, 1064849900u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{167, 1065017672u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{168, 1065185444u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{169, 1065353216u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{170, 1065437102u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{171, 1065520988u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{172, 1065604874u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{173, 1065688760u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{174, 1065772646u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{175, 1065856532u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{176, 1065940419u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{177, 1066024305u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{178, 1066108191u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{179, 1066192077u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{180, 1066275963u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{181, 1066359849u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{182, 1066443735u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{183, 1066527621u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{184, 1066611507u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{185, 1066695393u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{186, 1066779279u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{187, 1066863165u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{188, 1066947052u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{189, 3234402267u, 0u, 3233808384u, 0, RINTF_TOLERANCE, 0}, +{190, 3231108068u, 0u, 3231711232u, 0, RINTF_TOLERANCE, 0}, +{191, 3226013659u, 0u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{192, 3217625051u, 0u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{193, 0u, 0u, 0u, 0, RINTF_TOLERANCE, 0}, +{194, 1070141403u, 0u, 1073741824u, 0, RINTF_TOLERANCE, 0}, +{195, 1078530011u, 0u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{196, 1083624420u, 0u, 1084227584u, 0, RINTF_TOLERANCE, 0}, +{197, 3253731328u, 0u, 3253731328u, 0, RINTF_TOLERANCE, 0}, +{198, 3252840038u, 0u, 3252682752u, 0, RINTF_TOLERANCE, 0}, +{199, 3251948749u, 0u, 3252158464u, 0, RINTF_TOLERANCE, 0}, +{200, 3251057459u, 0u, 3251109888u, 0, RINTF_TOLERANCE, 0}, +{201, 3250166170u, 0u, 3250061312u, 0, RINTF_TOLERANCE, 0}, +{202, 3249274880u, 0u, 3249537024u, 0, RINTF_TOLERANCE, 0}, +{203, 3248383590u, 0u, 3248488448u, 0, RINTF_TOLERANCE, 0}, +{204, 3247492301u, 0u, 3247439872u, 0, RINTF_TOLERANCE, 0}, +{205, 3246601011u, 0u, 3246391296u, 0, RINTF_TOLERANCE, 0}, +{206, 3245028147u, 0u, 3245342720u, 0, RINTF_TOLERANCE, 0}, +{207, 3243245568u, 0u, 3243245568u, 0, RINTF_TOLERANCE, 0}, +{208, 3241462989u, 0u, 3241148416u, 0, RINTF_TOLERANCE, 0}, +{209, 3239680410u, 0u, 3240099840u, 0, RINTF_TOLERANCE, 0}, +{210, 3237792973u, 0u, 3238002688u, 0, RINTF_TOLERANCE, 0}, +{211, 3234227814u, 0u, 3233808384u, 0, RINTF_TOLERANCE, 0}, +{212, 3230662656u, 0u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{213, 3224580915u, 0u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{214, 3213675725u, 0u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{215, 1058642330u, 0u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{216, 1075000115u, 0u, 1073741824u, 0, RINTF_TOLERANCE, 0}, +{217, 1082130432u, 0u, 1082130432u, 0, RINTF_TOLERANCE, 0}, +{218, 1085695590u, 0u, 1086324736u, 0, RINTF_TOLERANCE, 0}, +{219, 1089260749u, 0u, 1088421888u, 0, RINTF_TOLERANCE, 0}, +{220, 1091672474u, 0u, 1091567616u, 0, RINTF_TOLERANCE, 0}, +{221, 1093455053u, 0u, 1093664768u, 0, RINTF_TOLERANCE, 0}, +{222, 1095237632u, 0u, 1094713344u, 0, RINTF_TOLERANCE, 0}, +{223, 1097020211u, 0u, 1096810496u, 0, RINTF_TOLERANCE, 0}, +{224, 1098802790u, 0u, 1098907648u, 0, RINTF_TOLERANCE, 0}, +{225, 1099746509u, 0u, 1099956224u, 0, RINTF_TOLERANCE, 0}, +{226, 1100637798u, 0u, 1100480512u, 0, RINTF_TOLERANCE, 0}, +{227, 1101529088u, 0u, 1101529088u, 0, RINTF_TOLERANCE, 0}, +{228, 1102420378u, 0u, 1102577664u, 0, RINTF_TOLERANCE, 0}, +{229, 1103311667u, 0u, 1103101952u, 0, RINTF_TOLERANCE, 0}, +{230, 1104202957u, 0u, 1104150528u, 0, RINTF_TOLERANCE, 0}, +{231, 1105094246u, 0u, 1105199104u, 0, RINTF_TOLERANCE, 0}, +{232, 1105985536u, 0u, 1106247680u, 0, RINTF_TOLERANCE, 0}, +{233, 1107800421u, 1203999711u, 1107820544u, 0, RINTF_TOLERANCE, 0}, +{234, 3368700125u, 3308232444u, 3368700128u, 0, RINTF_TOLERANCE, 0}, +{235, 1224242132u, 3061363425u, 1224242144u, 0, RINTF_TOLERANCE, 0}, +{236, 3221027117u, 1284201705u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{237, 1198712763u, 919636942u, 1198712832u, 0, RINTF_TOLERANCE, 0}, +{238, 954173073u, 850531830u, 0u, 0, RINTF_TOLERANCE, 0}, +{239, 966554515u, 3234538174u, 0u, 0, RINTF_TOLERANCE, 0}, +{240, 1312607135u, 1194999402u, 1312607135u, 0, RINTF_TOLERANCE, 0}, +{241, 1166191415u, 1018661564u, 1166190592u, 0, RINTF_TOLERANCE, 0}, +{242, 1234419246u, 2984575812u, 1234419248u, 0, RINTF_TOLERANCE, 0}, +{243, 1302107128u, 3370647675u, 1302107128u, 0, RINTF_TOLERANCE, 0}, +{244, 1052801068u, 3039122570u, 0u, 0, RINTF_TOLERANCE, 0}, +{245, 1060849628u, 3081357692u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{246, 3484320003u, 3033957825u, 3484320003u, 0, RINTF_TOLERANCE, 0}, +{247, 882596369u, 1256676590u, 0u, 0, RINTF_TOLERANCE, 0}, +{248, 1167223673u, 846102364u, 1167222784u, 0, RINTF_TOLERANCE, 0}, +{249, 968192794u, 878547432u, 0u, 0, RINTF_TOLERANCE, 0}, +{250, 1052361612u, 1280025214u, 0u, 0, RINTF_TOLERANCE, 0}, +{251, 906701409u, 2968301825u, 0u, 0, RINTF_TOLERANCE, 0}, +{252, 3471653172u, 1154138102u, 3471653172u, 0, RINTF_TOLERANCE, 0}, +{253, 3231467496u, 934336592u, 3231711232u, 0, RINTF_TOLERANCE, 0}, +{254, 1341514497u, 3466051188u, 1341514497u, 0, RINTF_TOLERANCE, 0}, +{255, 1272351391u, 3373485062u, 1272351391u, 0, RINTF_TOLERANCE, 0}, +{256, 3319724992u, 3354615790u, 3319724032u, 0, RINTF_TOLERANCE, 0}, +{257, 917622040u, 1334966485u, 0u, 0, RINTF_TOLERANCE, 0}, +{258, 940236348u, 3304072663u, 0u, 0, RINTF_TOLERANCE, 0}, +{259, 3251541546u, 3174764041u, 3251634176u, 0, RINTF_TOLERANCE, 0}, +{260, 3371863479u, 1014861921u, 3371863488u, 0, RINTF_TOLERANCE, 0}, +{261, 1306460502u, 903489435u, 1306460502u, 0, RINTF_TOLERANCE, 0}, +{262, 1197542187u, 3024598921u, 1197542144u, 0, RINTF_TOLERANCE, 0}, +{263, 922888249u, 1139392309u, 0u, 0, RINTF_TOLERANCE, 0}, +{264, 1184239996u, 3224098462u, 1184240128u, 0, RINTF_TOLERANCE, 0}, +{265, 1252490238u, 1173619825u, 1252490238u, 0, RINTF_TOLERANCE, 0}, +{266, 1001673627u, 3462631271u, 0u, 0, RINTF_TOLERANCE, 0}, +{267, 976098044u, 1151967422u, 0u, 0, RINTF_TOLERANCE, 0}, +{268, 941796645u, 886451963u, 0u, 0, RINTF_TOLERANCE, 0}, +{269, 3287199470u, 854245542u, 3287187456u, 0, RINTF_TOLERANCE, 0}, +{270, 893184329u, 1243067084u, 0u, 0, RINTF_TOLERANCE, 0}, +{271, 1143233714u, 1007268238u, 1143226368u, 0, RINTF_TOLERANCE, 0}, +{272, 1139941253u, 1147688821u, 1139933184u, 0, RINTF_TOLERANCE, 0}, +{273, 3240298487u, 1020260821u, 3240099840u, 0, RINTF_TOLERANCE, 0}, +{274, 1288902137u, 3123875978u, 1288902137u, 0, RINTF_TOLERANCE, 0}, +{275, 1333134799u, 1338107877u, 1333134799u, 0, RINTF_TOLERANCE, 0}, +{276, 1187847971u, 1317663644u, 1187848192u, 0, RINTF_TOLERANCE, 0}, +{277, 1038851706u, 1327544110u, 0u, 0, RINTF_TOLERANCE, 0}, +{278, 3329354473u, 3165437289u, 3329354752u, 0, RINTF_TOLERANCE, 0}, +{279, 1309289088u, 1019883016u, 1309289088u, 0, RINTF_TOLERANCE, 0}, +{280, 3444653659u, 1279248024u, 3444653659u, 0, RINTF_TOLERANCE, 0}, +{281, 3405585402u, 2962345057u, 3405585402u, 0, RINTF_TOLERANCE, 0}, +{282, 1106778573u, 3304487767u, 1106771968u, 0, RINTF_TOLERANCE, 0}, +{283, 1140567947u, 3069174149u, 1140555776u, 0, RINTF_TOLERANCE, 0}, +{284, 1238569473u, 873035665u, 1238569472u, 0, RINTF_TOLERANCE, 0}, +{285, 1261071232u, 1182202773u, 1261071232u, 0, RINTF_TOLERANCE, 0}, +{286, 1175011025u, 3029705783u, 1175011328u, 0, RINTF_TOLERANCE, 0}, +{287, 1082692850u, 1211581107u, 1082130432u, 0, RINTF_TOLERANCE, 0}, +{288, 974547519u, 3475164509u, 0u, 0, RINTF_TOLERANCE, 0}, +{289, 3403348556u, 3184653669u, 3403348556u, 0, RINTF_TOLERANCE, 0}, +{290, 1136411063u, 1118097422u, 1136427008u, 0, RINTF_TOLERANCE, 0}, +{291, 3239231622u, 3302723069u, 3239051264u, 0, RINTF_TOLERANCE, 0}, +{292, 3340615780u, 870350055u, 3340615680u, 0, RINTF_TOLERANCE, 0}, +{293, 998567360u, 2995278691u, 0u, 0, RINTF_TOLERANCE, 0}, +{294, 3417964312u, 1321337529u, 3417964312u, 0, RINTF_TOLERANCE, 0}, +{295, 1148867223u, 1256486202u, 1148862464u, 0, RINTF_TOLERANCE, 0}, +{296, 989687421u, 3372681320u, 0u, 0, RINTF_TOLERANCE, 0}, +{297, 1152956913u, 3166480640u, 1152958464u, 0, RINTF_TOLERANCE, 0}, +{298, 892922651u, 3373029087u, 0u, 0, RINTF_TOLERANCE, 0}, +{299, 1109627625u, 1314158257u, 1109655552u, 0, RINTF_TOLERANCE, 0}, +{300, 1307091856u, 1103202538u, 1307091856u, 0, RINTF_TOLERANCE, 0}, +{301, 1077234132u, 3272167130u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{302, 1142167709u, 1096445242u, 1142161408u, 0, RINTF_TOLERANCE, 0}, +{303, 3426232834u, 1036705270u, 3426232834u, 0, RINTF_TOLERANCE, 0}, +{304, 3368566779u, 967249167u, 3368566784u, 0, RINTF_TOLERANCE, 0}, +{305, 1138741813u, 3073453199u, 1138753536u, 0, RINTF_TOLERANCE, 0}, +{306, 982950501u, 982549888u, 0u, 0, RINTF_TOLERANCE, 0}, +{307, 1142981585u, 1015602236u, 1142980608u, 0, RINTF_TOLERANCE, 0}, +{308, 3347165962u, 3135486696u, 3347165952u, 0, RINTF_TOLERANCE, 0}, +{309, 1009535440u, 3381353228u, 0u, 0, RINTF_TOLERANCE, 0}, +{310, 3473956030u, 976891930u, 3473956030u, 0, RINTF_TOLERANCE, 0}, +{311, 3349098349u, 1055327704u, 3349098368u, 0, RINTF_TOLERANCE, 0}, +{312, 945568720u, 3313485084u, 0u, 0, RINTF_TOLERANCE, 0}, +{313, 3345489836u, 1108392401u, 3345489920u, 0, RINTF_TOLERANCE, 0}, +{314, 940893161u, 1137000140u, 0u, 0, RINTF_TOLERANCE, 0}, +{315, 976791751u, 3230678102u, 0u, 0, RINTF_TOLERANCE, 0}, +{316, 1004442355u, 3036510596u, 0u, 0, RINTF_TOLERANCE, 0}, +{317, 1108485380u, 3173536878u, 1108606976u, 0, RINTF_TOLERANCE, 0}, +{318, 1061834641u, 972388096u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{319, 3381268392u, 1146976802u, 3381268392u, 0, RINTF_TOLERANCE, 0}, +{320, 1087189715u, 2952822478u, 1086324736u, 0, RINTF_TOLERANCE, 0}, +{321, 3212952285u, 3329407365u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{322, 1000611335u, 857599439u, 0u, 0, RINTF_TOLERANCE, 0}, +{323, 3466188568u, 1041678304u, 3466188568u, 0, RINTF_TOLERANCE, 0}, +{324, 3319315516u, 3422089012u, 3319316480u, 0, RINTF_TOLERANCE, 0}, +{325, 935938416u, 1146676692u, 0u, 0, RINTF_TOLERANCE, 0}, +{326, 3212614372u, 1152633030u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{327, 1315030230u, 3336225884u, 1315030230u, 0, RINTF_TOLERANCE, 0}, +{328, 1134593658u, 3456812581u, 1134592000u, 0, RINTF_TOLERANCE, 0}, +{329, 977281449u, 879922831u, 0u, 0, RINTF_TOLERANCE, 0}, +{330, 1086198791u, 920125958u, 1086324736u, 0, RINTF_TOLERANCE, 0}, +{331, 1255152035u, 851754050u, 1255152036u, 0, RINTF_TOLERANCE, 0}, +{332, 1135271264u, 3284878412u, 1135280128u, 0, RINTF_TOLERANCE, 0}, +{333, 1094190727u, 1056854532u, 1094713344u, 0, RINTF_TOLERANCE, 0}, +{334, 1294665325u, 991185677u, 1294665325u, 0, RINTF_TOLERANCE, 0}, +{335, 1036608591u, 805416536u, 0u, 0, RINTF_TOLERANCE, 0}, +{336, 3229998064u, 825237063u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{337, 3439134022u, 1043829691u, 3439134022u, 0, RINTF_TOLERANCE, 0}, +{338, 1325668223u, 970681762u, 1325668223u, 0, RINTF_TOLERANCE, 0}, +{339, 1092037607u, 1027330835u, 1091567616u, 0, RINTF_TOLERANCE, 0}, +{340, 3316278408u, 3455589207u, 3316279296u, 0, RINTF_TOLERANCE, 0}, +{341, 3295436768u, 3129873731u, 3295428608u, 0, RINTF_TOLERANCE, 0}, +{342, 1151984049u, 3074547120u, 1151983616u, 0, RINTF_TOLERANCE, 0}, +{343, 1129287043u, 3076527544u, 1129316352u, 0, RINTF_TOLERANCE, 0}, +{344, 1243664530u, 972879810u, 1243664528u, 0, RINTF_TOLERANCE, 0}, +{345, 950829092u, 929114193u, 0u, 0, RINTF_TOLERANCE, 0}, +{346, 1115471979u, 3047246262u, 1115422720u, 0, RINTF_TOLERANCE, 0}, +{347, 3351092088u, 3024661404u, 3351092096u, 0, RINTF_TOLERANCE, 0}, +{348, 3424479544u, 3312047722u, 3424479544u, 0, RINTF_TOLERANCE, 0}, +{349, 3241193975u, 884465785u, 3241148416u, 0, RINTF_TOLERANCE, 0}, +{350, 1030934236u, 1045139240u, 0u, 0, RINTF_TOLERANCE, 0}, +{351, 1025254314u, 3057812821u, 0u, 0, RINTF_TOLERANCE, 0}, +{352, 1110545760u, 3240144177u, 1110441984u, 0, RINTF_TOLERANCE, 0}, +{353, 3361976590u, 3138179993u, 3361976576u, 0, RINTF_TOLERANCE, 0}, +{354, 881280146u, 3421884736u, 0u, 0, RINTF_TOLERANCE, 0}, +{355, 1304154705u, 2961937089u, 1304154705u, 0, RINTF_TOLERANCE, 0}, +{356, 3264443610u, 3222916705u, 3264479232u, 0, RINTF_TOLERANCE, 0}, +{357, 3374550627u, 3055856293u, 3374550624u, 0, RINTF_TOLERANCE, 0}, +{358, 899599265u, 3240118211u, 0u, 0, RINTF_TOLERANCE, 0}, +{359, 1268194719u, 1332489410u, 1268194719u, 0, RINTF_TOLERANCE, 0}, +{360, 1133420220u, 1245770860u, 1133412352u, 0, RINTF_TOLERANCE, 0}, +{361, 1161858787u, 815362075u, 1161859072u, 0, RINTF_TOLERANCE, 0}, +{362, 3295996963u, 3453334307u, 3296002048u, 0, RINTF_TOLERANCE, 0}, +{363, 1270887389u, 1156123987u, 1270887389u, 0, RINTF_TOLERANCE, 0}, +{364, 3325193181u, 993979179u, 3325193216u, 0, RINTF_TOLERANCE, 0}, +{365, 925657343u, 1315159742u, 0u, 0, RINTF_TOLERANCE, 0}, +{366, 1189120494u, 978961471u, 1189120512u, 0, RINTF_TOLERANCE, 0}, +{367, 889030794u, 3129523970u, 0u, 0, RINTF_TOLERANCE, 0}, +{368, 1323529208u, 3100744786u, 1323529208u, 0, RINTF_TOLERANCE, 0}, +{369, 3465768388u, 3190881451u, 3465768388u, 0, RINTF_TOLERANCE, 0}, +{370, 3426099899u, 1118756120u, 3426099899u, 0, RINTF_TOLERANCE, 0}, +{371, 3224857113u, 3398166843u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{372, 1065798296u, 816191940u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{373, 3328989444u, 850266225u, 3328989184u, 0, RINTF_TOLERANCE, 0}, +{374, 3357819026u, 3148475462u, 3357819008u, 0, RINTF_TOLERANCE, 0}, +{375, 1273397670u, 901308750u, 1273397670u, 0, RINTF_TOLERANCE, 0}, +{376, 3424831780u, 1304806106u, 3424831780u, 0, RINTF_TOLERANCE, 0}, +{377, 1257596246u, 3420832544u, 1257596246u, 0, RINTF_TOLERANCE, 0}, +{378, 1051773536u, 896271348u, 0u, 0, RINTF_TOLERANCE, 0}, +{379, 3294752507u, 3113225954u, 3294756864u, 0, RINTF_TOLERANCE, 0}, +{380, 3424848725u, 2973850350u, 3424848725u, 0, RINTF_TOLERANCE, 0}, +{381, 1090870906u, 3294742905u, 1090519040u, 0, RINTF_TOLERANCE, 0}, +{382, 1227582289u, 1208979668u, 1227582288u, 0, RINTF_TOLERANCE, 0}, +{383, 1272325814u, 3004311296u, 1272325814u, 0, RINTF_TOLERANCE, 0}, +{384, 3359508271u, 859974315u, 3359508288u, 0, RINTF_TOLERANCE, 0}, +{385, 1137854355u, 3335041917u, 1137868800u, 0, RINTF_TOLERANCE, 0}, +{386, 3440773058u, 3204192793u, 3440773058u, 0, RINTF_TOLERANCE, 0}, +{387, 3451216836u, 3347783723u, 3451216836u, 0, RINTF_TOLERANCE, 0}, +{388, 3437062994u, 3106834845u, 3437062994u, 0, RINTF_TOLERANCE, 0}, +{389, 1131196082u, 1164573183u, 1131216896u, 0, RINTF_TOLERANCE, 0}, +{390, 3258097678u, 1305882290u, 3258187776u, 0, RINTF_TOLERANCE, 0}, +{391, 3460915348u, 1219372260u, 3460915348u, 0, RINTF_TOLERANCE, 0}, +{392, 3303035472u, 3153013020u, 3303038976u, 0, RINTF_TOLERANCE, 0}, +{393, 1053698677u, 3284313107u, 0u, 0, RINTF_TOLERANCE, 0}, +{394, 3396166221u, 1201894512u, 3396166220u, 0, RINTF_TOLERANCE, 0}, +{395, 3458934263u, 1005577835u, 3458934263u, 0, RINTF_TOLERANCE, 0}, +{396, 1065761827u, 3333928591u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{397, 926665223u, 3150815797u, 0u, 0, RINTF_TOLERANCE, 0}, +{398, 1199816046u, 3143776186u, 1199816064u, 0, RINTF_TOLERANCE, 0}, +{399, 3333779015u, 952421041u, 3333778944u, 0, RINTF_TOLERANCE, 0}, +{400, 948398145u, 3238273189u, 0u, 0, RINTF_TOLERANCE, 0}, +{401, 1080781593u, 1213908300u, 1082130432u, 0, RINTF_TOLERANCE, 0}, +{402, 3235326590u, 1271705594u, 3235905536u, 0, RINTF_TOLERANCE, 0}, +{403, 965378004u, 1292594138u, 0u, 0, RINTF_TOLERANCE, 0}, +{404, 3226990408u, 1110755136u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{405, 1283624229u, 906796922u, 1283624229u, 0, RINTF_TOLERANCE, 0}, +{406, 970649315u, 1078286437u, 0u, 0, RINTF_TOLERANCE, 0}, +{407, 959776291u, 3280345347u, 0u, 0, RINTF_TOLERANCE, 0}, +{408, 3341117305u, 3294559023u, 3341117184u, 0, RINTF_TOLERANCE, 0}, +{409, 1270734970u, 3355874874u, 1270734970u, 0, RINTF_TOLERANCE, 0}, +{410, 3454816067u, 868771977u, 3454816067u, 0, RINTF_TOLERANCE, 0}, +{411, 917206623u, 1172710814u, 0u, 0, RINTF_TOLERANCE, 0}, +{412, 1106502045u, 1290849316u, 1106247680u, 0, RINTF_TOLERANCE, 0}, +{413, 1157598381u, 3309023746u, 1157595136u, 0, RINTF_TOLERANCE, 0}, +{414, 3335234513u, 1002337336u, 3335234560u, 0, RINTF_TOLERANCE, 0}, +{415, 1279489061u, 1006049444u, 1279489061u, 0, RINTF_TOLERANCE, 0}, +{416, 1233171235u, 826460580u, 1233171232u, 0, RINTF_TOLERANCE, 0}, +{417, 1148920078u, 1007674793u, 1148928000u, 0, RINTF_TOLERANCE, 0}, +{418, 1109198803u, 1221754614u, 1109131264u, 0, RINTF_TOLERANCE, 0}, +{419, 3219949483u, 1056167693u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{420, 3361149474u, 3387342069u, 3361149504u, 0, RINTF_TOLERANCE, 0}, +{421, 1207502108u, 3388073586u, 1207502080u, 0, RINTF_TOLERANCE, 0}, +{422, 1000014431u, 831213088u, 0u, 0, RINTF_TOLERANCE, 0}, +{423, 1234530539u, 1079988872u, 1234530536u, 0, RINTF_TOLERANCE, 0}, +{424, 1017843965u, 1193076204u, 0u, 0, RINTF_TOLERANCE, 0}, +{425, 951862956u, 1173464654u, 0u, 0, RINTF_TOLERANCE, 0}, +{426, 3306328852u, 1118701064u, 3306328064u, 0, RINTF_TOLERANCE, 0}, +{427, 1291910469u, 1211303367u, 1291910469u, 0, RINTF_TOLERANCE, 0}, +{428, 1131927531u, 3182962700u, 1131937792u, 0, RINTF_TOLERANCE, 0}, +{429, 3449879391u, 991614550u, 3449879391u, 0, RINTF_TOLERANCE, 0}, +{430, 970094304u, 3344590506u, 0u, 0, RINTF_TOLERANCE, 0}, +{431, 1125551064u, 3331248076u, 1125580800u, 0, RINTF_TOLERANCE, 0}, +{432, 3427296372u, 3455289118u, 3427296372u, 0, RINTF_TOLERANCE, 0}, +{433, 1198917460u, 1327195159u, 1198917376u, 0, RINTF_TOLERANCE, 0}, +{434, 921940707u, 2967544056u, 0u, 0, RINTF_TOLERANCE, 0}, +{435, 1091906532u, 3011904455u, 1091567616u, 0, RINTF_TOLERANCE, 0}, +{436, 3393557778u, 3383396815u, 3393557776u, 0, RINTF_TOLERANCE, 0}, +{437, 1276853215u, 873199561u, 1276853215u, 0, RINTF_TOLERANCE, 0}, +{438, 3462778440u, 3349284325u, 3462778440u, 0, RINTF_TOLERANCE, 0}, +{439, 3360170117u, 3048354042u, 3360170112u, 0, RINTF_TOLERANCE, 0}, +{440, 3224245428u, 3271307999u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{441, 1120124467u, 1135619937u, 1120141312u, 0, RINTF_TOLERANCE, 0}, +{442, 1064364381u, 3180675544u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{443, 1268744779u, 3328452652u, 1268744779u, 0, RINTF_TOLERANCE, 0}, +{444, 1165195428u, 3390323168u, 1165197312u, 0, RINTF_TOLERANCE, 0}, +{445, 3247790039u, 909788142u, 3247964160u, 0, RINTF_TOLERANCE, 0}, +{446, 3215244648u, 1083988595u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{447, 1212717473u, 837873779u, 1212717504u, 0, RINTF_TOLERANCE, 0}, +{448, 3275973009u, 3450721670u, 3275948032u, 0, RINTF_TOLERANCE, 0}, +{449, 3391162308u, 1291220039u, 3391162308u, 0, RINTF_TOLERANCE, 0}, +{450, 1044867873u, 3369493273u, 0u, 0, RINTF_TOLERANCE, 0}, +{451, 1089986803u, 3462160118u, 1090519040u, 0, RINTF_TOLERANCE, 0}, +{452, 1296314700u, 2957454177u, 1296314700u, 0, RINTF_TOLERANCE, 0}, +{453, 1251462432u, 3171021770u, 1251462432u, 0, RINTF_TOLERANCE, 0}, +{454, 3485236902u, 980772835u, 3485236902u, 0, RINTF_TOLERANCE, 0}, +{455, 3262169538u, 1268270462u, 3262119936u, 0, RINTF_TOLERANCE, 0}, +{456, 1022211242u, 922124181u, 0u, 0, RINTF_TOLERANCE, 0}, +{457, 884661176u, 2985540645u, 0u, 0, RINTF_TOLERANCE, 0}, +{458, 989762529u, 3362011135u, 0u, 0, RINTF_TOLERANCE, 0}, +{459, 1295475718u, 3212305413u, 1295475718u, 0, RINTF_TOLERANCE, 0}, +{460, 1002632518u, 3330388441u, 0u, 0, RINTF_TOLERANCE, 0}, +{461, 3404372005u, 3450484255u, 3404372004u, 0, RINTF_TOLERANCE, 0}, +{462, 1125800069u, 3256265749u, 1125777408u, 0, RINTF_TOLERANCE, 0}, +{463, 999985470u, 3409354318u, 0u, 0, RINTF_TOLERANCE, 0}, +{464, 1189421739u, 1056599002u, 1189421568u, 0, RINTF_TOLERANCE, 0}, +{465, 1164046161u, 3440635788u, 1164046336u, 0, RINTF_TOLERANCE, 0}, +{466, 1292596266u, 3116569667u, 1292596266u, 0, RINTF_TOLERANCE, 0}, +{467, 3469748379u, 3412765608u, 3469748379u, 0, RINTF_TOLERANCE, 0}, +{468, 1314644642u, 3123051784u, 1314644642u, 0, RINTF_TOLERANCE, 0}, +{469, 3399813173u, 828743798u, 3399813172u, 0, RINTF_TOLERANCE, 0}, +{470, 948775569u, 3485444126u, 0u, 0, RINTF_TOLERANCE, 0}, +{471, 1034611395u, 882288581u, 0u, 0, RINTF_TOLERANCE, 0}, +{472, 3489122735u, 3372450889u, 3489122735u, 0, RINTF_TOLERANCE, 0}, +{473, 1181604787u, 3363067409u, 1181604864u, 0, RINTF_TOLERANCE, 0}, +{474, 1043691622u, 3402603223u, 0u, 0, RINTF_TOLERANCE, 0}, +{475, 1314588083u, 856187848u, 1314588083u, 0, RINTF_TOLERANCE, 0}, +{476, 3400949680u, 3073750220u, 3400949680u, 0, RINTF_TOLERANCE, 0}, +{477, 3365581801u, 1175843167u, 3365581792u, 0, RINTF_TOLERANCE, 0}, +{478, 1110424755u, 3011308654u, 1110441984u, 0, RINTF_TOLERANCE, 0}, +{479, 969804941u, 3355439348u, 0u, 0, RINTF_TOLERANCE, 0}, +{480, 1139120919u, 3270515074u, 1139113984u, 0, RINTF_TOLERANCE, 0}, +{481, 934308144u, 3118191228u, 0u, 0, RINTF_TOLERANCE, 0}, +{482, 1220524226u, 1152648002u, 1220524224u, 0, RINTF_TOLERANCE, 0}, +{483, 3382391700u, 3296962745u, 3382391696u, 0, RINTF_TOLERANCE, 0}, +{484, 1156767533u, 1088986462u, 1156767744u, 0, RINTF_TOLERANCE, 0}, +{485, 994934087u, 967678094u, 0u, 0, RINTF_TOLERANCE, 0}, +{486, 3479873563u, 1246277393u, 3479873563u, 0, RINTF_TOLERANCE, 0}, +{487, 3424264117u, 3434026174u, 3424264117u, 0, RINTF_TOLERANCE, 0}, +{488, 3228365887u, 1216775310u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{489, 1035909900u, 1249532942u, 0u, 0, RINTF_TOLERANCE, 0}, +{490, 1212129651u, 3017366784u, 1212129664u, 0, RINTF_TOLERANCE, 0}, +{491, 1037464105u, 3121544932u, 0u, 0, RINTF_TOLERANCE, 0}, +{492, 1311706596u, 1254918706u, 1311706596u, 0, RINTF_TOLERANCE, 0}, +{493, 918212457u, 1017468331u, 0u, 0, RINTF_TOLERANCE, 0}, +{494, 1337315179u, 3461361185u, 1337315179u, 0, RINTF_TOLERANCE, 0}, +{495, 1131358407u, 3325958870u, 1131347968u, 0, RINTF_TOLERANCE, 0}, +{496, 1156517523u, 3343716230u, 1156513792u, 0, RINTF_TOLERANCE, 0}, +{497, 3210802820u, 3207408574u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{498, 3337499209u, 1226297264u, 3337499136u, 0, RINTF_TOLERANCE, 0}, +{499, 3468429030u, 3253874001u, 3468429030u, 0, RINTF_TOLERANCE, 0}, +{500, 3253515800u, 1189005947u, 3253731328u, 0, RINTF_TOLERANCE, 0}, +{501, 959956547u, 876324728u, 0u, 0, RINTF_TOLERANCE, 0}, +{502, 3425290480u, 1139193797u, 3425290480u, 0, RINTF_TOLERANCE, 0}, +{503, 1039917375u, 1122740999u, 0u, 0, RINTF_TOLERANCE, 0}, +{504, 3220979495u, 3429223871u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{505, 1311016004u, 3334899880u, 1311016004u, 0, RINTF_TOLERANCE, 0}, +{506, 1128016396u, 1105151547u, 1128005632u, 0, RINTF_TOLERANCE, 0}, +{507, 3210335769u, 3100646155u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{508, 1206054701u, 826010009u, 1206054656u, 0, RINTF_TOLERANCE, 0}, +{509, 1213609983u, 919983950u, 1213609984u, 0, RINTF_TOLERANCE, 0}, +{510, 1246902946u, 3064047808u, 1246902944u, 0, RINTF_TOLERANCE, 0}, +{511, 995850843u, 1332031130u, 0u, 0, RINTF_TOLERANCE, 0}, +{512, 3362082828u, 3374056268u, 3362082816u, 0, RINTF_TOLERANCE, 0}, +{513, 1029480631u, 3047777170u, 0u, 0, RINTF_TOLERANCE, 0}, +{514, 3384988527u, 3109485565u, 3384988528u, 0, RINTF_TOLERANCE, 0}, +{515, 1317696241u, 870681806u, 1317696241u, 0, RINTF_TOLERANCE, 0}, +{516, 3235395924u, 1132055244u, 3235905536u, 0, RINTF_TOLERANCE, 0}, +{517, 3341877624u, 2969495570u, 3341877504u, 0, RINTF_TOLERANCE, 0}, +{518, 1228636133u, 886552820u, 1228636128u, 0, RINTF_TOLERANCE, 0}, +{519, 1207246237u, 859223639u, 1207246208u, 0, RINTF_TOLERANCE, 0}, +{520, 1165476654u, 3350219111u, 1165475840u, 0, RINTF_TOLERANCE, 0}, +{521, 1215278023u, 3019755242u, 1215278016u, 0, RINTF_TOLERANCE, 0}, +{522, 1017239798u, 3438501281u, 0u, 0, RINTF_TOLERANCE, 0}, +{523, 1149651309u, 970030475u, 1149648896u, 0, RINTF_TOLERANCE, 0}, +{524, 1111943722u, 3122211334u, 1112014848u, 0, RINTF_TOLERANCE, 0}, +{525, 1189849849u, 3382739134u, 1189849600u, 0, RINTF_TOLERANCE, 0}, +{526, 3204848496u, 3141519085u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{527, 1249758327u, 3104759211u, 1249758328u, 0, RINTF_TOLERANCE, 0}, +{528, 1168098747u, 1316854744u, 1168099328u, 0, RINTF_TOLERANCE, 0}, +{529, 892549317u, 1179637545u, 0u, 0, RINTF_TOLERANCE, 0}, +{530, 3301009024u, 3406174560u, 3301007360u, 0, RINTF_TOLERANCE, 0}, +{531, 3233089227u, 1212652543u, 3233808384u, 0, RINTF_TOLERANCE, 0}, +{532, 3218245284u, 1238873830u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{533, 3215981890u, 3240474694u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{534, 1266687209u, 3092038122u, 1266687209u, 0, RINTF_TOLERANCE, 0}, +{535, 3487959775u, 3331372071u, 3487959775u, 0, RINTF_TOLERANCE, 0}, +{536, 943645710u, 852875779u, 0u, 0, RINTF_TOLERANCE, 0}, +{537, 3345065699u, 3282620725u, 3345065728u, 0, RINTF_TOLERANCE, 0}, +{538, 935847271u, 1067255804u, 0u, 0, RINTF_TOLERANCE, 0}, +{539, 3410336089u, 1111437780u, 3410336089u, 0, RINTF_TOLERANCE, 0}, +{540, 1141063391u, 1168908072u, 1141063680u, 0, RINTF_TOLERANCE, 0}, +{541, 3353679791u, 897158391u, 3353679744u, 0, RINTF_TOLERANCE, 0}, +{542, 1001823878u, 1016826861u, 0u, 0, RINTF_TOLERANCE, 0}, +{543, 1009130212u, 1004302940u, 0u, 0, RINTF_TOLERANCE, 0}, +{544, 3367127535u, 943136342u, 3367127520u, 0, RINTF_TOLERANCE, 0}, +{545, 1032920919u, 3449126417u, 0u, 0, RINTF_TOLERANCE, 0}, +{546, 3281952870u, 3147012185u, 3281944576u, 0, RINTF_TOLERANCE, 0}, +{547, 1237868497u, 3048281802u, 1237868496u, 0, RINTF_TOLERANCE, 0}, +{548, 1153753924u, 3322269242u, 1153753088u, 0, RINTF_TOLERANCE, 0}, +{549, 1120261759u, 892210998u, 1120272384u, 0, RINTF_TOLERANCE, 0}, +{550, 3226328360u, 3366432856u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{551, 3349595986u, 3251588707u, 3349596032u, 0, RINTF_TOLERANCE, 0}, +{552, 1087750238u, 1099325523u, 1088421888u, 0, RINTF_TOLERANCE, 0}, +{553, 1066116543u, 3072159933u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{554, 3210898034u, 2981803389u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{555, 1030612298u, 3345396001u, 0u, 0, RINTF_TOLERANCE, 0}, +{556, 1186234578u, 858134374u, 1186234368u, 0, RINTF_TOLERANCE, 0}, +{557, 1331680743u, 1009396165u, 1331680743u, 0, RINTF_TOLERANCE, 0}, +{558, 887589411u, 1292305693u, 0u, 0, RINTF_TOLERANCE, 0}, +{559, 1045232522u, 3234993273u, 0u, 0, RINTF_TOLERANCE, 0}, +{560, 3349432725u, 928848003u, 3349432704u, 0, RINTF_TOLERANCE, 0}, +{561, 912423027u, 3184646319u, 0u, 0, RINTF_TOLERANCE, 0}, +{562, 3228795133u, 3273940030u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{563, 3296784303u, 3276182352u, 3296780288u, 0, RINTF_TOLERANCE, 0}, +{564, 965402291u, 3107104376u, 0u, 0, RINTF_TOLERANCE, 0}, +{565, 3388153589u, 3426245389u, 3388153592u, 0, RINTF_TOLERANCE, 0}, +{566, 1133410485u, 3329658993u, 1133412352u, 0, RINTF_TOLERANCE, 0}, +{567, 3369970587u, 959121458u, 3369970592u, 0, RINTF_TOLERANCE, 0}, +{568, 1270451568u, 928393353u, 1270451568u, 0, RINTF_TOLERANCE, 0}, +{569, 989498922u, 3088358419u, 0u, 0, RINTF_TOLERANCE, 0}, +{570, 1280215674u, 3148135875u, 1280215674u, 0, RINTF_TOLERANCE, 0}, +{571, 1171873518u, 954709738u, 1171873792u, 0, RINTF_TOLERANCE, 0}, +{572, 3298258100u, 935525182u, 3298254848u, 0, RINTF_TOLERANCE, 0}, +{573, 3415208824u, 822843236u, 3415208824u, 0, RINTF_TOLERANCE, 0}, +{574, 1001897182u, 3191875320u, 0u, 0, RINTF_TOLERANCE, 0}, +{575, 985903305u, 3333087577u, 0u, 0, RINTF_TOLERANCE, 0}, +{576, 3357328848u, 859306298u, 3357328832u, 0, RINTF_TOLERANCE, 0}, +{577, 982612185u, 923582663u, 0u, 0, RINTF_TOLERANCE, 0}, +{578, 3267868136u, 1208301947u, 3267887104u, 0, RINTF_TOLERANCE, 0}, +{579, 3319048157u, 1172271145u, 3319048192u, 0, RINTF_TOLERANCE, 0}, +{580, 1144755661u, 860947435u, 1144750080u, 0, RINTF_TOLERANCE, 0}, +{581, 898467286u, 839254959u, 0u, 0, RINTF_TOLERANCE, 0}, +{582, 3301461672u, 1233693827u, 3301457920u, 0, RINTF_TOLERANCE, 0}, +{583, 3364525678u, 3089849671u, 3364525664u, 0, RINTF_TOLERANCE, 0}, +{584, 931441127u, 1133424555u, 0u, 0, RINTF_TOLERANCE, 0}, +{585, 3467121799u, 3023584354u, 3467121799u, 0, RINTF_TOLERANCE, 0}, +{586, 1151257041u, 3084216427u, 1151254528u, 0, RINTF_TOLERANCE, 0}, +{587, 1017573824u, 3130901062u, 0u, 0, RINTF_TOLERANCE, 0}, +{588, 1258369714u, 3462258576u, 1258369714u, 0, RINTF_TOLERANCE, 0}, +{589, 1216602683u, 3371396332u, 1216602688u, 0, RINTF_TOLERANCE, 0}, +{590, 3297265739u, 1214184410u, 3297263616u, 0, RINTF_TOLERANCE, 0}, +{591, 1071940738u, 3311731012u, 1073741824u, 0, RINTF_TOLERANCE, 0}, +{592, 922601356u, 3337171870u, 0u, 0, RINTF_TOLERANCE, 0}, +{593, 3462285635u, 3444030332u, 3462285635u, 0, RINTF_TOLERANCE, 0}, +{594, 3357177805u, 1085464241u, 3357177792u, 0, RINTF_TOLERANCE, 0}, +{595, 1153863660u, 1011991342u, 1153859584u, 0, RINTF_TOLERANCE, 0}, +{596, 1249365132u, 3278686216u, 1249365132u, 0, RINTF_TOLERANCE, 0}, +{597, 3222096285u, 1198013705u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{598, 1297708818u, 3079166173u, 1297708818u, 0, RINTF_TOLERANCE, 0}, +{599, 3345532722u, 3383708463u, 3345532672u, 0, RINTF_TOLERANCE, 0}, +{600, 3418753236u, 3481843070u, 3418753236u, 0, RINTF_TOLERANCE, 0}, +{601, 1277417964u, 3487506626u, 1277417964u, 0, RINTF_TOLERANCE, 0}, +{602, 987577257u, 1152077087u, 0u, 0, RINTF_TOLERANCE, 0}, +{603, 888030585u, 3062367380u, 0u, 0, RINTF_TOLERANCE, 0}, +{604, 1043442869u, 3311393817u, 0u, 0, RINTF_TOLERANCE, 0}, +{605, 3320923228u, 3464544249u, 3320924160u, 0, RINTF_TOLERANCE, 0}, +{606, 1337400405u, 3488844154u, 1337400405u, 0, RINTF_TOLERANCE, 0}, +{607, 3400348640u, 3129868490u, 3400348640u, 0, RINTF_TOLERANCE, 0}, +{608, 1250249095u, 1069023744u, 1250249096u, 0, RINTF_TOLERANCE, 0}, +{609, 3284411233u, 1173613526u, 3284402176u, 0, RINTF_TOLERANCE, 0}, +{610, 1215968622u, 3469884568u, 1215968640u, 0, RINTF_TOLERANCE, 0}, +{611, 1025404104u, 1066370251u, 0u, 0, RINTF_TOLERANCE, 0}, +{612, 3362748242u, 3369843597u, 3362748224u, 0, RINTF_TOLERANCE, 0}, +{613, 1252237719u, 1121169249u, 1252237720u, 0, RINTF_TOLERANCE, 0}, +{614, 3327895594u, 1224511805u, 3327895552u, 0, RINTF_TOLERANCE, 0}, +{615, 3396161504u, 1182798837u, 3396161504u, 0, RINTF_TOLERANCE, 0}, +{616, 1099710167u, 887180181u, 1099956224u, 0, RINTF_TOLERANCE, 0}, +{617, 1157186482u, 1288722647u, 1157185536u, 0, RINTF_TOLERANCE, 0}, +{618, 1282110851u, 3176633124u, 1282110851u, 0, RINTF_TOLERANCE, 0}, +{619, 3477008113u, 1331845018u, 3477008113u, 0, RINTF_TOLERANCE, 0}, +{620, 3292127294u, 3409957764u, 3292135424u, 0, RINTF_TOLERANCE, 0}, +{621, 1123357102u, 3281307320u, 1123418112u, 0, RINTF_TOLERANCE, 0}, +{622, 1106837025u, 3088080674u, 1106771968u, 0, RINTF_TOLERANCE, 0}, +{623, 1049949008u, 1130799489u, 0u, 0, RINTF_TOLERANCE, 0}, +{624, 1253017688u, 942062372u, 1253017688u, 0, RINTF_TOLERANCE, 0}, +{625, 1108543194u, 3281299199u, 1108606976u, 0, RINTF_TOLERANCE, 0}, +{626, 1160162706u, 1264067367u, 1160163328u, 0, RINTF_TOLERANCE, 0}, +{627, 3305715025u, 3017496063u, 3305713664u, 0, RINTF_TOLERANCE, 0}, +{628, 1266928623u, 811778614u, 1266928623u, 0, RINTF_TOLERANCE, 0}, +{629, 3438080027u, 3107114149u, 3438080027u, 0, RINTF_TOLERANCE, 0}, +{630, 3344574751u, 3111270744u, 3344574720u, 0, RINTF_TOLERANCE, 0}, +{631, 1152416724u, 962669179u, 1152417792u, 0, RINTF_TOLERANCE, 0}, +{632, 1218239308u, 1126238113u, 1218239296u, 0, RINTF_TOLERANCE, 0}, +{633, 3263310567u, 1030748197u, 3263299584u, 0, RINTF_TOLERANCE, 0}, +{634, 1000313118u, 2980130729u, 0u, 0, RINTF_TOLERANCE, 0}, +{635, 972485427u, 1124312043u, 0u, 0, RINTF_TOLERANCE, 0}, +{636, 3290264612u, 1124703898u, 3290267648u, 0, RINTF_TOLERANCE, 0}, +{637, 3222106584u, 1183748648u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{638, 1278946388u, 825129857u, 1278946388u, 0, RINTF_TOLERANCE, 0}, +{639, 947914771u, 3181847068u, 0u, 0, RINTF_TOLERANCE, 0}, +{640, 1098530298u, 3255870890u, 1098907648u, 0, RINTF_TOLERANCE, 0}, +{641, 3232726036u, 871038882u, 3231711232u, 0, RINTF_TOLERANCE, 0}, +{642, 1297190916u, 811863044u, 1297190916u, 0, RINTF_TOLERANCE, 0}, +{643, 1277649137u, 961171401u, 1277649137u, 0, RINTF_TOLERANCE, 0}, +{644, 3244032016u, 3045313345u, 3244294144u, 0, RINTF_TOLERANCE, 0}, +{645, 1096155623u, 1256423752u, 1095761920u, 0, RINTF_TOLERANCE, 0}, +{646, 873151908u, 3246562559u, 0u, 0, RINTF_TOLERANCE, 0}, +{647, 3238729605u, 1298769842u, 3239051264u, 0, RINTF_TOLERANCE, 0}, +{648, 3317196817u, 989537151u, 3317196800u, 0, RINTF_TOLERANCE, 0}, +{649, 3374748510u, 834161190u, 3374748512u, 0, RINTF_TOLERANCE, 0}, +{650, 3345634950u, 959901149u, 3345635072u, 0, RINTF_TOLERANCE, 0}, +{651, 887311687u, 1175312255u, 0u, 0, RINTF_TOLERANCE, 0}, +{652, 3396917283u, 3066326686u, 3396917284u, 0, RINTF_TOLERANCE, 0}, +{653, 3317032737u, 3143803722u, 3317032960u, 0, RINTF_TOLERANCE, 0}, +{654, 1200051436u, 1163802508u, 1200051456u, 0, RINTF_TOLERANCE, 0}, +{655, 1306520561u, 957302464u, 1306520561u, 0, RINTF_TOLERANCE, 0}, +{656, 1314936356u, 2985592532u, 1314936356u, 0, RINTF_TOLERANCE, 0}, +{657, 3475052219u, 1284049853u, 3475052219u, 0, RINTF_TOLERANCE, 0}, +{658, 3393227708u, 3271879112u, 3393227708u, 0, RINTF_TOLERANCE, 0}, +{659, 3349005404u, 3080993030u, 3349005440u, 0, RINTF_TOLERANCE, 0}, +{660, 1262863321u, 1219003129u, 1262863321u, 0, RINTF_TOLERANCE, 0}, +{661, 882902102u, 1224362550u, 0u, 0, RINTF_TOLERANCE, 0}, +{662, 1053387478u, 3184880021u, 0u, 0, RINTF_TOLERANCE, 0}, +{663, 3387653691u, 3347783852u, 3387653688u, 0, RINTF_TOLERANCE, 0}, +{664, 1338680611u, 1166078045u, 1338680611u, 0, RINTF_TOLERANCE, 0}, +{665, 1112891928u, 3074730425u, 1112801280u, 0, RINTF_TOLERANCE, 0}, +{666, 893449284u, 1052877339u, 0u, 0, RINTF_TOLERANCE, 0}, +{667, 892311459u, 1097338393u, 0u, 0, RINTF_TOLERANCE, 0}, +{668, 1190105283u, 3033907262u, 1190105088u, 0, RINTF_TOLERANCE, 0}, +{669, 1011225926u, 1180485180u, 0u, 0, RINTF_TOLERANCE, 0}, +{670, 1043025031u, 987068973u, 0u, 0, RINTF_TOLERANCE, 0}, +{671, 3410531037u, 2953541915u, 3410531037u, 0, RINTF_TOLERANCE, 0}, +{672, 902318189u, 849277289u, 0u, 0, RINTF_TOLERANCE, 0}, +{673, 3213624815u, 2987148017u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{674, 1120888322u, 1086209113u, 1120927744u, 0, RINTF_TOLERANCE, 0}, +{675, 1315217243u, 3396371713u, 1315217243u, 0, RINTF_TOLERANCE, 0}, +{676, 1040617590u, 1034835971u, 0u, 0, RINTF_TOLERANCE, 0}, +{677, 955384253u, 3344785562u, 0u, 0, RINTF_TOLERANCE, 0}, +{678, 904255535u, 1019967545u, 0u, 0, RINTF_TOLERANCE, 0}, +{679, 1022984119u, 3113891410u, 0u, 0, RINTF_TOLERANCE, 0}, +{680, 997362368u, 3112875428u, 0u, 0, RINTF_TOLERANCE, 0}, +{681, 900933520u, 1100589187u, 0u, 0, RINTF_TOLERANCE, 0}, +{682, 1168623062u, 1143306482u, 1168623616u, 0, RINTF_TOLERANCE, 0}, +{683, 878737490u, 3269908326u, 0u, 0, RINTF_TOLERANCE, 0}, +{684, 1039827284u, 1072928888u, 0u, 0, RINTF_TOLERANCE, 0}, +{685, 1021564080u, 1064468397u, 0u, 0, RINTF_TOLERANCE, 0}, +{686, 3458669745u, 3033299853u, 3458669745u, 0, RINTF_TOLERANCE, 0}, +{687, 3327516316u, 3405380971u, 3327516672u, 0, RINTF_TOLERANCE, 0}, +{688, 1040711112u, 3229444200u, 0u, 0, RINTF_TOLERANCE, 0}, +{689, 1134528351u, 3365952513u, 1134526464u, 0, RINTF_TOLERANCE, 0}, +{690, 3414352838u, 3350285760u, 3414352838u, 0, RINTF_TOLERANCE, 0}, +{691, 1133689539u, 1067460093u, 1133674496u, 0, RINTF_TOLERANCE, 0}, +{692, 3455688478u, 3333091960u, 3455688478u, 0, RINTF_TOLERANCE, 0}, +{693, 1137634874u, 1137038869u, 1137639424u, 0, RINTF_TOLERANCE, 0}, +{694, 3415502662u, 955510692u, 3415502662u, 0, RINTF_TOLERANCE, 0}, +{695, 954999730u, 969618597u, 0u, 0, RINTF_TOLERANCE, 0}, +{696, 1066157309u, 3241712664u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{697, 3436353675u, 1174967495u, 3436353675u, 0, RINTF_TOLERANCE, 0}, +{698, 940437609u, 860372396u, 0u, 0, RINTF_TOLERANCE, 0}, +{699, 1023889593u, 2979304683u, 0u, 0, RINTF_TOLERANCE, 0}, +{700, 3272661536u, 3461799138u, 3272671232u, 0, RINTF_TOLERANCE, 0}, +{701, 1170245333u, 1233406410u, 1170245632u, 0, RINTF_TOLERANCE, 0}, +{702, 1219052056u, 3369557946u, 1219052064u, 0, RINTF_TOLERANCE, 0}, +{703, 3318983619u, 3259663338u, 3318982656u, 0, RINTF_TOLERANCE, 0}, +{704, 3372118621u, 837597103u, 3372118624u, 0, RINTF_TOLERANCE, 0}, +{705, 1299683827u, 966031619u, 1299683827u, 0, RINTF_TOLERANCE, 0}, +{706, 3257224022u, 3361778245u, 3257139200u, 0, RINTF_TOLERANCE, 0}, +{707, 1229268598u, 1066965677u, 1229268592u, 0, RINTF_TOLERANCE, 0}, +{708, 1086717248u, 3423795374u, 1086324736u, 0, RINTF_TOLERANCE, 0}, +{709, 3434884607u, 3029593823u, 3434884607u, 0, RINTF_TOLERANCE, 0}, +{710, 3464955606u, 1017987696u, 3464955606u, 0, RINTF_TOLERANCE, 0}, +{711, 1025278524u, 3121856207u, 0u, 0, RINTF_TOLERANCE, 0}, +{712, 1242829722u, 3233935671u, 1242829720u, 0, RINTF_TOLERANCE, 0}, +{713, 1200927971u, 1317167489u, 1200928000u, 0, RINTF_TOLERANCE, 0}, +{714, 3326858092u, 3452602832u, 3326858240u, 0, RINTF_TOLERANCE, 0}, +{715, 1246019790u, 850632217u, 1246019792u, 0, RINTF_TOLERANCE, 0}, +{716, 1136052740u, 3244616020u, 1136066560u, 0, RINTF_TOLERANCE, 0}, +{717, 1069009211u, 3002507482u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{718, 1015670780u, 1101217251u, 0u, 0, RINTF_TOLERANCE, 0}, +{719, 1012543234u, 1116520440u, 0u, 0, RINTF_TOLERANCE, 0}, +{720, 3316611992u, 3394732912u, 3316611072u, 0, RINTF_TOLERANCE, 0}, +{721, 1087942795u, 3316660295u, 1088421888u, 0, RINTF_TOLERANCE, 0}, +{722, 3426365713u, 3069778532u, 3426365713u, 0, RINTF_TOLERANCE, 0}, +{723, 3295326432u, 1313396175u, 3295330304u, 0, RINTF_TOLERANCE, 0}, +{724, 3318835308u, 3277583511u, 3318835200u, 0, RINTF_TOLERANCE, 0}, +{725, 3283555717u, 891875120u, 3283550208u, 0, RINTF_TOLERANCE, 0}, +{726, 3381255420u, 3015406047u, 3381255424u, 0, RINTF_TOLERANCE, 0}, +{727, 3388772093u, 1032597076u, 3388772096u, 0, RINTF_TOLERANCE, 0}, +{728, 954670189u, 1144923689u, 0u, 0, RINTF_TOLERANCE, 0}, +{729, 1319200415u, 3387555900u, 1319200415u, 0, RINTF_TOLERANCE, 0}, +{730, 1279324488u, 3228401212u, 1279324488u, 0, RINTF_TOLERANCE, 0}, +{731, 3217795424u, 865577227u, 3221225472u, 0, RINTF_TOLERANCE, 0}, +{732, 3455131757u, 1260217257u, 3455131757u, 0, RINTF_TOLERANCE, 0}, +{733, 1246947517u, 1087951909u, 1246947516u, 0, RINTF_TOLERANCE, 0}, +{734, 3396723577u, 869285240u, 3396723576u, 0, RINTF_TOLERANCE, 0}, +{735, 3433761025u, 3060143904u, 3433761025u, 0, RINTF_TOLERANCE, 0}, +{736, 1173247961u, 1191127979u, 1173248000u, 0, RINTF_TOLERANCE, 0}, +{737, 3248534678u, 1323683800u, 3248488448u, 0, RINTF_TOLERANCE, 0}, +{738, 1082862511u, 3032804719u, 1082130432u, 0, RINTF_TOLERANCE, 0}, +{739, 1341821683u, 3003675365u, 1341821683u, 0, RINTF_TOLERANCE, 0}, +{740, 881101379u, 1190838126u, 0u, 0, RINTF_TOLERANCE, 0}, +{741, 1079061705u, 2960507663u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{742, 1105291533u, 3482971524u, 1105199104u, 0, RINTF_TOLERANCE, 0}, +{743, 1016023520u, 3227712090u, 0u, 0, RINTF_TOLERANCE, 0}, +{744, 3370691006u, 1295870514u, 3370691008u, 0, RINTF_TOLERANCE, 0}, +{745, 1156767169u, 1049756240u, 1156767744u, 0, RINTF_TOLERANCE, 0}, +{746, 1104284039u, 3040211914u, 1104150528u, 0, RINTF_TOLERANCE, 0}, +{747, 3335212901u, 3486414589u, 3335213056u, 0, RINTF_TOLERANCE, 0}, +{748, 1093697541u, 3193708441u, 1093664768u, 0, RINTF_TOLERANCE, 0}, +{749, 3266691185u, 1160074593u, 3266707456u, 0, RINTF_TOLERANCE, 0}, +{750, 1094115255u, 3008610212u, 1093664768u, 0, RINTF_TOLERANCE, 0}, +{751, 3424086808u, 3260140004u, 3424086808u, 0, RINTF_TOLERANCE, 0}, +{752, 3353608773u, 1134068114u, 3353608832u, 0, RINTF_TOLERANCE, 0}, +{753, 973664327u, 1319516167u, 0u, 0, RINTF_TOLERANCE, 0}, +{754, 882878091u, 3136970767u, 0u, 0, RINTF_TOLERANCE, 0}, +{755, 1098662266u, 833740182u, 1098907648u, 0, RINTF_TOLERANCE, 0}, +{756, 927582555u, 947955456u, 0u, 0, RINTF_TOLERANCE, 0}, +{757, 3476083859u, 966439623u, 3476083859u, 0, RINTF_TOLERANCE, 0}, +{758, 979878744u, 1232482646u, 0u, 0, RINTF_TOLERANCE, 0}, +{759, 3464546616u, 3205527253u, 3464546616u, 0, RINTF_TOLERANCE, 0}, +{760, 1002542205u, 3152136093u, 0u, 0, RINTF_TOLERANCE, 0}, +{761, 3443552129u, 3165561391u, 3443552129u, 0, RINTF_TOLERANCE, 0}, +{762, 1287620154u, 3119707283u, 1287620154u, 0, RINTF_TOLERANCE, 0}, +{763, 946058434u, 1249928879u, 0u, 0, RINTF_TOLERANCE, 0}, +{764, 1245702957u, 894348966u, 1245702956u, 0, RINTF_TOLERANCE, 0}, +{765, 989655126u, 1308376568u, 0u, 0, RINTF_TOLERANCE, 0}, +{766, 1002715618u, 1191006977u, 0u, 0, RINTF_TOLERANCE, 0}, +{767, 1000863905u, 1196831314u, 0u, 0, RINTF_TOLERANCE, 0}, +{768, 3415763001u, 3032518431u, 3415763001u, 0, RINTF_TOLERANCE, 0}, +{769, 3283471961u, 1260093226u, 3283484672u, 0, RINTF_TOLERANCE, 0}, +{770, 3311210827u, 1192192264u, 3311210496u, 0, RINTF_TOLERANCE, 0}, +{771, 1198307901u, 1116328249u, 1198307840u, 0, RINTF_TOLERANCE, 0}, +{772, 1288901567u, 1296370667u, 1288901567u, 0, RINTF_TOLERANCE, 0}, +{773, 922255363u, 958305289u, 0u, 0, RINTF_TOLERANCE, 0}, +{774, 1113104661u, 944376032u, 1113063424u, 0, RINTF_TOLERANCE, 0}, +{775, 1136714348u, 828849087u, 1136721920u, 0, RINTF_TOLERANCE, 0}, +{776, 948856035u, 1015466475u, 0u, 0, RINTF_TOLERANCE, 0}, +{777, 1062512367u, 3229559531u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{778, 3486907092u, 823220784u, 3486907092u, 0, RINTF_TOLERANCE, 0}, +{779, 1162027071u, 3308983387u, 1162027008u, 0, RINTF_TOLERANCE, 0}, +{780, 1034561811u, 1054043114u, 0u, 0, RINTF_TOLERANCE, 0}, +{781, 3271615417u, 3209997200u, 3271622656u, 0, RINTF_TOLERANCE, 0}, +{782, 1042014529u, 1146708584u, 0u, 0, RINTF_TOLERANCE, 0}, +{783, 1177157787u, 3090208179u, 1177157632u, 0, RINTF_TOLERANCE, 0}, +{784, 3432084552u, 2997091781u, 3432084552u, 0, RINTF_TOLERANCE, 0}, +{785, 1309658335u, 1010219988u, 1309658335u, 0, RINTF_TOLERANCE, 0}, +{786, 1226494979u, 2991604792u, 1226494976u, 0, RINTF_TOLERANCE, 0}, +{787, 3375507013u, 1306310823u, 3375507008u, 0, RINTF_TOLERANCE, 0}, +{788, 3460699001u, 3096700943u, 3460699001u, 0, RINTF_TOLERANCE, 0}, +{789, 3468023178u, 1209565017u, 3468023178u, 0, RINTF_TOLERANCE, 0}, +{790, 1204196034u, 3298625731u, 1204196096u, 0, RINTF_TOLERANCE, 0}, +{791, 3459877411u, 2960476959u, 3459877411u, 0, RINTF_TOLERANCE, 0}, +{792, 909696559u, 1163075690u, 0u, 0, RINTF_TOLERANCE, 0}, +{793, 1161439847u, 943449277u, 1161441280u, 0, RINTF_TOLERANCE, 0}, +{794, 908663107u, 939489763u, 0u, 0, RINTF_TOLERANCE, 0}, +{795, 1055319316u, 3261813492u, 0u, 0, RINTF_TOLERANCE, 0}, +{796, 1084378658u, 1009650785u, 1084227584u, 0, RINTF_TOLERANCE, 0}, +{797, 1226473697u, 821025132u, 1226473696u, 0, RINTF_TOLERANCE, 0}, +{798, 1123114742u, 1229815537u, 1123155968u, 0, RINTF_TOLERANCE, 0}, +{799, 1258114435u, 1291336083u, 1258114436u, 0, RINTF_TOLERANCE, 0}, +{800, 3468040845u, 3066966245u, 3468040845u, 0, RINTF_TOLERANCE, 0}, +{801, 1178825761u, 1113195286u, 1178825728u, 0, RINTF_TOLERANCE, 0}, +{802, 3223384012u, 1130486973u, 3225419776u, 0, RINTF_TOLERANCE, 0}, +{803, 1019964626u, 1235133609u, 0u, 0, RINTF_TOLERANCE, 0}, +{804, 3445262427u, 3465211174u, 3445262427u, 0, RINTF_TOLERANCE, 0}, +{805, 1125653081u, 1207799746u, 1125646336u, 0, RINTF_TOLERANCE, 0}, +{806, 3337652712u, 3025581813u, 3337652736u, 0, RINTF_TOLERANCE, 0}, +{807, 1184753508u, 3147374485u, 1184753664u, 0, RINTF_TOLERANCE, 0}, +{808, 996404791u, 3353251979u, 0u, 0, RINTF_TOLERANCE, 0}, +{809, 1188439315u, 1113484271u, 1188439552u, 0, RINTF_TOLERANCE, 0}, +{810, 906557513u, 3006513432u, 0u, 0, RINTF_TOLERANCE, 0}, +{811, 916831283u, 999465787u, 0u, 0, RINTF_TOLERANCE, 0}, +{812, 996786317u, 3179221951u, 0u, 0, RINTF_TOLERANCE, 0}, +{813, 3461635065u, 1004690387u, 3461635065u, 0, RINTF_TOLERANCE, 0}, +{814, 1188167943u, 1200744896u, 1188168192u, 0, RINTF_TOLERANCE, 0}, +{815, 891257783u, 1267560050u, 0u, 0, RINTF_TOLERANCE, 0}, +{816, 3290079438u, 846519377u, 3290087424u, 0, RINTF_TOLERANCE, 0}, +{817, 3350690327u, 2967953392u, 3350690304u, 0, RINTF_TOLERANCE, 0}, +{818, 1102061604u, 3424449935u, 1102053376u, 0, RINTF_TOLERANCE, 0}, +{819, 1282351521u, 3039376424u, 1282351521u, 0, RINTF_TOLERANCE, 0}, +{820, 3458861065u, 3392466405u, 3458861065u, 0, RINTF_TOLERANCE, 0}, +{821, 3228793330u, 855146890u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{822, 3422194733u, 893873945u, 3422194733u, 0, RINTF_TOLERANCE, 0}, +{823, 1261940623u, 3402349985u, 1261940623u, 0, RINTF_TOLERANCE, 0}, +{824, 3400603081u, 3234396843u, 3400603080u, 0, RINTF_TOLERANCE, 0}, +{825, 1219411812u, 2961857939u, 1219411808u, 0, RINTF_TOLERANCE, 0}, +{826, 886201503u, 3272760705u, 0u, 0, RINTF_TOLERANCE, 0}, +{827, 3297366026u, 1089966380u, 3297370112u, 0, RINTF_TOLERANCE, 0}, +{828, 1218488455u, 3309646450u, 1218488448u, 0, RINTF_TOLERANCE, 0}, +{829, 1283938137u, 1196383822u, 1283938137u, 0, RINTF_TOLERANCE, 0}, +{830, 1317098613u, 949986176u, 1317098613u, 0, RINTF_TOLERANCE, 0}, +{831, 3431703657u, 3014443710u, 3431703657u, 0, RINTF_TOLERANCE, 0}, +{832, 3239728775u, 927815421u, 3240099840u, 0, RINTF_TOLERANCE, 0}, +{833, 3207141672u, 933456504u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{834, 3313160088u, 2964063309u, 3313160192u, 0, RINTF_TOLERANCE, 0}, +{835, 3207056527u, 3384206601u, 3212836864u, 0, RINTF_TOLERANCE, 0}, +{836, 1284174954u, 3436881197u, 1284174954u, 0, RINTF_TOLERANCE, 0}, +{837, 1063693032u, 976661408u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{838, 1102631663u, 3396951425u, 1102577664u, 0, RINTF_TOLERANCE, 0}, +{839, 968803479u, 992989712u, 0u, 0, RINTF_TOLERANCE, 0}, +{840, 3273080388u, 3109405906u, 3273064448u, 0, RINTF_TOLERANCE, 0}, +{841, 1172529774u, 3294550127u, 1172529152u, 0, RINTF_TOLERANCE, 0}, +{842, 1306695905u, 1292690378u, 1306695905u, 0, RINTF_TOLERANCE, 0}, +{843, 1003649752u, 1218792138u, 0u, 0, RINTF_TOLERANCE, 0}, +{844, 1078478376u, 1326246424u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{845, 1165177679u, 3276237026u, 1165176832u, 0, RINTF_TOLERANCE, 0}, +{846, 3403009513u, 3381966453u, 3403009512u, 0, RINTF_TOLERANCE, 0}, +{847, 952348506u, 3377573987u, 0u, 0, RINTF_TOLERANCE, 0}, +{848, 1222777442u, 1125769920u, 1222777440u, 0, RINTF_TOLERANCE, 0}, +{849, 1325324763u, 978336043u, 1325324763u, 0, RINTF_TOLERANCE, 0}, +{850, 3363524213u, 3202991311u, 3363524224u, 0, RINTF_TOLERANCE, 0}, +{851, 1158950321u, 1073578913u, 1158950912u, 0, RINTF_TOLERANCE, 0}, +{852, 903129873u, 3416864271u, 0u, 0, RINTF_TOLERANCE, 0}, +{853, 1208345407u, 1254181270u, 1208345408u, 0, RINTF_TOLERANCE, 0}, +{854, 1258634105u, 1247426200u, 1258634105u, 0, RINTF_TOLERANCE, 0}, +{855, 1248478509u, 1287895126u, 1248478508u, 0, RINTF_TOLERANCE, 0}, +{856, 1153863988u, 3430539165u, 1153867776u, 0, RINTF_TOLERANCE, 0}, +{857, 1235620969u, 866627358u, 1235620968u, 0, RINTF_TOLERANCE, 0}, +{858, 1097120930u, 3221726305u, 1096810496u, 0, RINTF_TOLERANCE, 0}, +{859, 3469778622u, 1200179013u, 3469778622u, 0, RINTF_TOLERANCE, 0}, +{860, 1147712200u, 931865525u, 1147715584u, 0, RINTF_TOLERANCE, 0}, +{861, 1124721745u, 3058969650u, 1124728832u, 0, RINTF_TOLERANCE, 0}, +{862, 3261744304u, 1043806501u, 3261857792u, 0, RINTF_TOLERANCE, 0}, +{863, 1064922416u, 1320485628u, 1065353216u, 0, RINTF_TOLERANCE, 0}, +{864, 3303160152u, 3075455322u, 3303161856u, 0, RINTF_TOLERANCE, 0}, +{865, 1315090496u, 3269683237u, 1315090496u, 0, RINTF_TOLERANCE, 0}, +{866, 3230403187u, 1322841992u, 3229614080u, 0, RINTF_TOLERANCE, 0}, +{867, 1335399673u, 974138676u, 1335399673u, 0, RINTF_TOLERANCE, 0}, +{868, 1072458508u, 3372833993u, 1073741824u, 0, RINTF_TOLERANCE, 0}, +{869, 3303015249u, 3015039539u, 3303014400u, 0, RINTF_TOLERANCE, 0}, +{870, 3252139741u, 1059615003u, 3252158464u, 0, RINTF_TOLERANCE, 0}, +{871, 3468519966u, 3113982619u, 3468519966u, 0, RINTF_TOLERANCE, 0}, +{872, 1006231203u, 897530770u, 0u, 0, RINTF_TOLERANCE, 0}, +{873, 951554138u, 1001144381u, 0u, 0, RINTF_TOLERANCE, 0}, +{874, 942046828u, 986341002u, 0u, 0, RINTF_TOLERANCE, 0}, +{875, 3319723279u, 3414482416u, 3319724032u, 0, RINTF_TOLERANCE, 0}, +{876, 3255104167u, 928827688u, 3255042048u, 0, RINTF_TOLERANCE, 0}, +{877, 1155477903u, 3104812800u, 1155481600u, 0, RINTF_TOLERANCE, 0}, +{878, 3273889176u, 980486479u, 3273916416u, 0, RINTF_TOLERANCE, 0}, +{879, 3237813668u, 3441016803u, 3238002688u, 0, RINTF_TOLERANCE, 0}, +{880, 1228207362u, 2985476579u, 1228207360u, 0, RINTF_TOLERANCE, 0}, +{881, 975349337u, 1311932596u, 0u, 0, RINTF_TOLERANCE, 0}, +{882, 1290175785u, 3008182462u, 1290175785u, 0, RINTF_TOLERANCE, 0}, +{883, 981908840u, 3314038398u, 0u, 0, RINTF_TOLERANCE, 0}, +{884, 941187647u, 1107765599u, 0u, 0, RINTF_TOLERANCE, 0}, +{885, 1214223128u, 3225536822u, 1214223104u, 0, RINTF_TOLERANCE, 0}, +{886, 3422922584u, 1086391131u, 3422922584u, 0, RINTF_TOLERANCE, 0}, +{887, 1315857601u, 3487600045u, 1315857601u, 0, RINTF_TOLERANCE, 0}, +{888, 3453226030u, 3233768835u, 3453226030u, 0, RINTF_TOLERANCE, 0}, +{889, 1078359574u, 3199175230u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{890, 1029557624u, 3302959071u, 0u, 0, RINTF_TOLERANCE, 0}, +{891, 1207675424u, 3042692550u, 1207675392u, 0, RINTF_TOLERANCE, 0}, +{892, 1028355074u, 3442294040u, 0u, 0, RINTF_TOLERANCE, 0}, +{893, 1248421894u, 3367769132u, 1248421896u, 0, RINTF_TOLERANCE, 0}, +{894, 3353251994u, 1095517730u, 3353251968u, 0, RINTF_TOLERANCE, 0}, +{895, 876926659u, 3288089977u, 0u, 0, RINTF_TOLERANCE, 0}, +{896, 1076752219u, 876236939u, 1077936128u, 0, RINTF_TOLERANCE, 0}, +{897, 3388531942u, 2988520062u, 3388531944u, 0, RINTF_TOLERANCE, 0}, +{898, 1273395082u, 3031189261u, 1273395082u, 0, RINTF_TOLERANCE, 0}, +{899, 3385588183u, 3258252464u, 3385588184u, 0, RINTF_TOLERANCE, 0}, +{900, 3441804648u, 3274638356u, 3441804648u, 0, RINTF_TOLERANCE, 0}, +{901, 3392827417u, 1277961150u, 3392827416u, 0, RINTF_TOLERANCE, 0}, +{902, 1161241793u, 1328003707u, 1161240576u, 0, RINTF_TOLERANCE, 0}, +{903, 1171318485u, 3374409104u, 1171318784u, 0, RINTF_TOLERANCE, 0}, +{904, 1001216371u, 3052357038u, 0u, 0, RINTF_TOLERANCE, 0}, +{905, 912515889u, 1074635609u, 0u, 0, RINTF_TOLERANCE, 0}, +{906, 3391452505u, 897989232u, 3391452504u, 0, RINTF_TOLERANCE, 0}, +{907, 3249603369u, 3147662248u, 3249537024u, 0, RINTF_TOLERANCE, 0}, +{908, 1220264047u, 2960450369u, 1220264032u, 0, RINTF_TOLERANCE, 0}, +{909, 3282212423u, 3174079140u, 3282206720u, 0, RINTF_TOLERANCE, 0}, +{910, 3352293320u, 3247843425u, 3352293376u, 0, RINTF_TOLERANCE, 0}, +{911, 3296358441u, 875645354u, 3296362496u, 0, RINTF_TOLERANCE, 0}, +{912, 1197828352u, 3245614728u, 1197828352u, 0, RINTF_TOLERANCE, 0}, +{913, 3340510371u, 914930263u, 3340510464u, 0, RINTF_TOLERANCE, 0}, +{914, 1127109339u, 3368125489u, 1127088128u, 0, RINTF_TOLERANCE, 0}, +{915, 909467381u, 1232375752u, 0u, 0, RINTF_TOLERANCE, 0}, +{916, 1200599955u, 2981200675u, 1200599936u, 0, RINTF_TOLERANCE, 0}, +{917, 962230977u, 2988248037u, 0u, 0, RINTF_TOLERANCE, 0}, +{918, 3237183876u, 3179379969u, 3238002688u, 0, RINTF_TOLERANCE, 0}, +{919, 939285924u, 3056079386u, 0u, 0, RINTF_TOLERANCE, 0}, +{920, 944050180u, 3452557879u, 0u, 0, RINTF_TOLERANCE, 0}, +{921, 3480592662u, 3261728191u, 3480592662u, 0, RINTF_TOLERANCE, 0}, +{922, 1003299981u, 853295521u, 0u, 0, RINTF_TOLERANCE, 0}, +{923, 1155775526u, 1255814444u, 1155776512u, 0, RINTF_TOLERANCE, 0}, +{924, 1234491880u, 3408568717u, 1234491880u, 0, RINTF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_RINTF_H multiple inclusion protection + +// EOF rintf.h diff --git a/packages/language/c/libm/current/tests/vectors/scalbf.c b/packages/language/c/libm/current/tests/vectors/scalbf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/scalbf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// scalbf.c +// +// Test of scalbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/scalbf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(scalbf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &scalbf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_FLOAT, CYG_LIBM_TEST_VEC_FLOAT, + &scalbf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("scalbf() is stable"); + } // if + else + { + CYG_TEST_FAIL("scalbf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library scalbf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "scalbf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF scalbf.c diff --git a/packages/language/c/libm/current/tests/vectors/scalbf.h b/packages/language/c/libm/current/tests/vectors/scalbf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/scalbf.h @@ -0,0 +1,221 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// scalbf.h +// +// Test vectors for testing of scalbf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/scalbf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SCALBF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t scalbf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3212836864u, 3204448256u, 0, SCALBF_TOLERANCE, 0}, +{1, 3211998003u, 3212836864u, 3203609395u, 0, SCALBF_TOLERANCE, 0}, +{2, 3211159142u, 3212836864u, 3202770534u, 0, SCALBF_TOLERANCE, 0}, +{3, 3210320282u, 3212836864u, 3201931674u, 0, SCALBF_TOLERANCE, 0}, +{4, 3209481421u, 3212836864u, 3201092813u, 0, SCALBF_TOLERANCE, 0}, +{5, 3208642560u, 3212836864u, 3200253952u, 0, SCALBF_TOLERANCE, 0}, +{6, 3207803699u, 3212836864u, 3199415091u, 0, SCALBF_TOLERANCE, 0}, +{7, 3206964838u, 3212836864u, 3198576230u, 0, SCALBF_TOLERANCE, 0}, +{8, 3206125978u, 3212836864u, 3197737370u, 0, SCALBF_TOLERANCE, 0}, +{9, 3205287117u, 3212836864u, 3196898509u, 0, SCALBF_TOLERANCE, 0}, +{10, 3204448256u, 3212836864u, 3196059648u, 0, SCALBF_TOLERANCE, 0}, +{11, 3202770534u, 3212836864u, 3194381926u, 0, SCALBF_TOLERANCE, 0}, +{12, 3201092813u, 3212836864u, 3192704205u, 0, SCALBF_TOLERANCE, 0}, +{13, 3199415091u, 3212836864u, 3191026483u, 0, SCALBF_TOLERANCE, 0}, +{14, 3197737370u, 3212836864u, 3189348762u, 0, SCALBF_TOLERANCE, 0}, +{15, 3196059648u, 3212836864u, 3187671040u, 0, SCALBF_TOLERANCE, 0}, +{16, 3192704205u, 3212836864u, 3184315597u, 0, SCALBF_TOLERANCE, 0}, +{17, 3189348762u, 3212836864u, 3180960154u, 0, SCALBF_TOLERANCE, 0}, +{18, 3184315597u, 3212836864u, 3175926989u, 0, SCALBF_TOLERANCE, 0}, +{19, 3175926989u, 3212836864u, 3167538381u, 0, SCALBF_TOLERANCE, 0}, +{20, 1028443341u, 3212836864u, 1020054733u, 0, SCALBF_TOLERANCE, 0}, +{21, 1036831949u, 3212836864u, 1028443341u, 0, SCALBF_TOLERANCE, 0}, +{22, 1041865114u, 3212836864u, 1033476506u, 0, SCALBF_TOLERANCE, 0}, +{23, 1045220557u, 3212836864u, 1036831949u, 0, SCALBF_TOLERANCE, 0}, +{24, 1048576000u, 3212836864u, 1040187392u, 0, SCALBF_TOLERANCE, 0}, +{25, 1050253722u, 3212836864u, 1041865114u, 0, SCALBF_TOLERANCE, 0}, +{26, 1051931443u, 3212836864u, 1043542835u, 0, SCALBF_TOLERANCE, 0}, +{27, 1053609165u, 3212836864u, 1045220557u, 0, SCALBF_TOLERANCE, 0}, +{28, 1055286886u, 3212836864u, 1046898278u, 0, SCALBF_TOLERANCE, 0}, +{29, 1056964608u, 3212836864u, 1048576000u, 0, SCALBF_TOLERANCE, 0}, +{30, 1057803469u, 3212836864u, 1049414861u, 0, SCALBF_TOLERANCE, 0}, +{31, 1058642330u, 3212836864u, 1050253722u, 0, SCALBF_TOLERANCE, 0}, +{32, 1059481190u, 3212836864u, 1051092582u, 0, SCALBF_TOLERANCE, 0}, +{33, 1060320051u, 3212836864u, 1051931443u, 0, SCALBF_TOLERANCE, 0}, +{34, 1061158912u, 3212836864u, 1052770304u, 0, SCALBF_TOLERANCE, 0}, +{35, 1061997773u, 3212836864u, 1053609165u, 0, SCALBF_TOLERANCE, 0}, +{36, 1062836634u, 3212836864u, 1054448026u, 0, SCALBF_TOLERANCE, 0}, +{37, 1063675494u, 3212836864u, 1055286886u, 0, SCALBF_TOLERANCE, 0}, +{38, 1064514355u, 3212836864u, 1056125747u, 0, SCALBF_TOLERANCE, 0}, +{39, 1341514497u, 3466051188u, 0u, 0, SCALBF_TOLERANCE, 0}, +{40, 1001673627u, 3462631271u, 0u, 0, SCALBF_TOLERANCE, 0}, +{41, 3048866608u, 3449209899u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{42, 1333134799u, 1338107877u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{43, 1187847971u, 1317663644u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{44, 3444653659u, 1279248024u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{45, 974547519u, 3475164509u, 0u, 0, SCALBF_TOLERANCE, 0}, +{46, 3182301130u, 3460764044u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{47, 3417964312u, 1321337529u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{48, 1148867223u, 1256486202u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{49, 3319315516u, 3422089012u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{50, 1134593658u, 3456812581u, 0u, 0, SCALBF_TOLERANCE, 0}, +{51, 3316278408u, 3455589207u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{52, 3131791114u, 3408392958u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{53, 881280146u, 3421884736u, 0u, 0, SCALBF_TOLERANCE, 0}, +{54, 1268194719u, 1332489410u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{55, 1133420220u, 1245770860u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{56, 3295996963u, 3453334307u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{57, 3424831780u, 1304806106u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{58, 1257596246u, 3420832544u, 0u, 0, SCALBF_TOLERANCE, 0}, +{59, 3235326590u, 1271705594u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{60, 1106502045u, 1290849316u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{61, 3427296372u, 3455289118u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{62, 1198917460u, 1327195159u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{63, 3114686212u, 3476082461u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{64, 1165195428u, 3390323168u, 0u, 0, SCALBF_TOLERANCE, 0}, +{65, 3275973009u, 3450721670u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{66, 3391162308u, 1291220039u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{67, 1089986803u, 3462160118u, 0u, 0, SCALBF_TOLERANCE, 0}, +{68, 3262169538u, 1268270462u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{69, 3404372005u, 3450484255u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{70, 999985470u, 3409354318u, 0u, 0, SCALBF_TOLERANCE, 0}, +{71, 3132541814u, 3444521949u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{72, 1164046161u, 3440635788u, 0u, 0, SCALBF_TOLERANCE, 0}, +{73, 3469748379u, 3412765608u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{74, 948775569u, 3485444126u, 0u, 0, SCALBF_TOLERANCE, 0}, +{75, 3157534378u, 3451674717u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{76, 3162548604u, 3461790298u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{77, 3424264117u, 3434026174u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{78, 1311706596u, 1254918706u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{79, 1337315179u, 3461361185u, 0u, 0, SCALBF_TOLERANCE, 0}, +{80, 3337499209u, 1226297264u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{81, 3220979495u, 3429223871u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{82, 1017239798u, 3438501281u, 0u, 0, SCALBF_TOLERANCE, 0}, +{83, 3092982276u, 3445282331u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{84, 1168098747u, 1316854744u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{85, 3301009024u, 3406174560u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{86, 1032920919u, 3449126417u, 0u, 0, SCALBF_TOLERANCE, 0}, +{87, 3388153589u, 3426245389u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{88, 1258369714u, 3462258576u, 0u, 0, SCALBF_TOLERANCE, 0}, +{89, 3462285635u, 3444030332u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{90, 3131219358u, 3471261157u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{91, 3418753236u, 3481843070u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{92, 1277417964u, 3487506626u, 0u, 0, SCALBF_TOLERANCE, 0}, +{93, 3320923228u, 3464544249u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{94, 1337400405u, 3488844154u, 0u, 0, SCALBF_TOLERANCE, 0}, +{95, 1215968622u, 3469884568u, 0u, 0, SCALBF_TOLERANCE, 0}, +{96, 3091024506u, 3456196859u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{97, 1157186482u, 1288722647u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{98, 3477008113u, 1331845018u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{99, 3292127294u, 3409957764u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{100, 1160162706u, 1264067367u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{101, 1096155623u, 1256423752u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{102, 3475052219u, 1284049853u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{103, 3154720153u, 3443720494u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{104, 3108347547u, 3434003435u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{105, 3272661536u, 3461799138u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{106, 3086068902u, 3484245751u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{107, 1086717248u, 3423795374u, 0u, 0, SCALBF_TOLERANCE, 0}, +{108, 1200927971u, 1317167489u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{109, 3326858092u, 3452602832u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{110, 3316611992u, 3394732912u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{111, 3066654389u, 3443934204u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{112, 3295326432u, 1313396175u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{113, 3455131757u, 1260217257u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{114, 3157626955u, 3483653298u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{115, 1105291533u, 3482971524u, 0u, 0, SCALBF_TOLERANCE, 0}, +{116, 3370691006u, 1295870514u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{117, 3335212901u, 3486414589u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{118, 3283471961u, 1260093226u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{119, 1288901567u, 1296370667u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{120, 3100289712u, 3456334210u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{121, 3375507013u, 1306310823u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{122, 1258114435u, 1291336083u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{123, 3445262427u, 3465211174u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{124, 1102061604u, 3424449935u, 0u, 0, SCALBF_TOLERANCE, 0}, +{125, 1284174954u, 3436881197u, 0u, 0, SCALBF_TOLERANCE, 0}, +{126, 1306695905u, 1292690378u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{127, 903129873u, 3416864271u, 0u, 0, SCALBF_TOLERANCE, 0}, +{128, 1208345407u, 1254181270u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{129, 1258634105u, 1247426200u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{130, 1248478509u, 1287895126u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{131, 1153863988u, 3430539165u, 0u, 0, SCALBF_TOLERANCE, 0}, +{132, 3319723279u, 3414482416u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{133, 3237813668u, 3441016803u, 2147483648u, 0, SCALBF_TOLERANCE, 0}, +{134, 1315857601u, 3487600045u, 0u, 0, SCALBF_TOLERANCE, 0}, +{135, 1028355074u, 3442294040u, 0u, 0, SCALBF_TOLERANCE, 0}, +{136, 3392827417u, 1277961150u, 4286578688u, 0, SCALBF_TOLERANCE, 0}, +{137, 1161241793u, 1328003707u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{138, 1171318485u, 3374409104u, 0u, 0, SCALBF_TOLERANCE, 0}, +{139, 944050180u, 3452557879u, 0u, 0, SCALBF_TOLERANCE, 0}, +{140, 1155775526u, 1255814444u, 2139095040u, 0, SCALBF_TOLERANCE, 0}, +{141, 1234491880u, 3408568717u, 0u, 0, SCALBF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF scalbf.h diff --git a/packages/language/c/libm/current/tests/vectors/scalbnf.c b/packages/language/c/libm/current/tests/vectors/scalbnf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/scalbnf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// scalbnf.c +// +// Test of scalbnf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/scalbnf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(scalbnf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &scalbnf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_INT, CYG_LIBM_TEST_VEC_FLOAT, + &scalbnf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("scalbnf() is stable"); + } // if + else + { + CYG_TEST_FAIL("scalbnf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library scalbnf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "scalbnf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF scalbnf.c diff --git a/packages/language/c/libm/current/tests/vectors/scalbnf.h b/packages/language/c/libm/current/tests/vectors/scalbnf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/scalbnf.h @@ -0,0 +1,667 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// scalbnf.h +// +// Test vectors for testing of scalbnf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/scalbnf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SCALBNF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t scalbnf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3196650934u, 0u, 3196650934u, 0, SCALBNF_TOLERANCE, 0}, +{1, 1224242132u, 0u, 1224242132u, 0, SCALBNF_TOLERANCE, 0}, +{2, 1198712763u, 0u, 1198712763u, 0, SCALBNF_TOLERANCE, 0}, +{3, 3159309973u, 0u, 3159309973u, 0, SCALBNF_TOLERANCE, 0}, +{4, 954173073u, 0u, 954173073u, 0, SCALBNF_TOLERANCE, 0}, +{5, 3090780435u, 0u, 3090780435u, 0, SCALBNF_TOLERANCE, 0}, +{6, 966554515u, 4294967290u, 916222867u, 0, SCALBNF_TOLERANCE, 0}, +{7, 1166191415u, 0u, 1166191415u, 0, SCALBNF_TOLERANCE, 0}, +{8, 1234419246u, 0u, 1234419246u, 0, SCALBNF_TOLERANCE, 0}, +{9, 1302107128u, 4294492157u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{10, 1052801068u, 0u, 1052801068u, 0, SCALBNF_TOLERANCE, 0}, +{11, 1060849628u, 0u, 1060849628u, 0, SCALBNF_TOLERANCE, 0}, +{12, 3484320003u, 0u, 3484320003u, 0, SCALBNF_TOLERANCE, 0}, +{13, 1167223673u, 0u, 1167223673u, 0, SCALBNF_TOLERANCE, 0}, +{14, 968192794u, 0u, 968192794u, 0, SCALBNF_TOLERANCE, 0}, +{15, 3122346862u, 48u, 3525000046u, 0, SCALBNF_TOLERANCE, 0}, +{16, 906701409u, 0u, 906701409u, 0, SCALBNF_TOLERANCE, 0}, +{17, 3231467496u, 0u, 3231467496u, 0, SCALBNF_TOLERANCE, 0}, +{18, 1341514497u, 3022046720u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{19, 1272351391u, 4294363968u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{20, 940236348u, 4294965375u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{21, 3251541546u, 0u, 3251541546u, 0, SCALBNF_TOLERANCE, 0}, +{22, 3110358400u, 0u, 3110358400u, 0, SCALBNF_TOLERANCE, 0}, +{23, 3371863479u, 0u, 3371863479u, 0, SCALBNF_TOLERANCE, 0}, +{24, 3204069187u, 0u, 3204069187u, 0, SCALBNF_TOLERANCE, 0}, +{25, 1306460502u, 0u, 1306460502u, 0, SCALBNF_TOLERANCE, 0}, +{26, 1197542187u, 0u, 1197542187u, 0, SCALBNF_TOLERANCE, 0}, +{27, 1184239996u, 4294967294u, 1167462780u, 0, SCALBNF_TOLERANCE, 0}, +{28, 1001673627u, 3340510784u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{29, 941796645u, 0u, 941796645u, 0, SCALBNF_TOLERANCE, 0}, +{30, 3287199470u, 0u, 3287199470u, 0, SCALBNF_TOLERANCE, 0}, +{31, 1143233714u, 0u, 1143233714u, 0, SCALBNF_TOLERANCE, 0}, +{32, 3143717025u, 4294967290u, 3093385377u, 0, SCALBNF_TOLERANCE, 0}, +{33, 3240298487u, 0u, 3240298487u, 0, SCALBNF_TOLERANCE, 0}, +{34, 1288902137u, 0u, 1288902137u, 0, SCALBNF_TOLERANCE, 0}, +{35, 3329354473u, 0u, 3329354473u, 0, SCALBNF_TOLERANCE, 0}, +{36, 1309289088u, 0u, 1309289088u, 0, SCALBNF_TOLERANCE, 0}, +{37, 3405585402u, 0u, 3405585402u, 0, SCALBNF_TOLERANCE, 0}, +{38, 3106647724u, 0u, 3106647724u, 0, SCALBNF_TOLERANCE, 0}, +{39, 1106778573u, 4294965325u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{40, 1140567947u, 0u, 1140567947u, 0, SCALBNF_TOLERANCE, 0}, +{41, 1238569473u, 0u, 1238569473u, 0, SCALBNF_TOLERANCE, 0}, +{42, 1175011025u, 0u, 1175011025u, 0, SCALBNF_TOLERANCE, 0}, +{43, 3058097085u, 0u, 3058097085u, 0, SCALBNF_TOLERANCE, 0}, +{44, 3107252546u, 1u, 3115641154u, 0, SCALBNF_TOLERANCE, 0}, +{45, 3096032662u, 0u, 3096032662u, 0, SCALBNF_TOLERANCE, 0}, +{46, 3197942144u, 0u, 3197942144u, 0, SCALBNF_TOLERANCE, 0}, +{47, 3403348556u, 0u, 3403348556u, 0, SCALBNF_TOLERANCE, 0}, +{48, 1136411063u, 82u, 1824276919u, 0, SCALBNF_TOLERANCE, 0}, +{49, 3340615780u, 0u, 3340615780u, 0, SCALBNF_TOLERANCE, 0}, +{50, 998567360u, 0u, 998567360u, 0, SCALBNF_TOLERANCE, 0}, +{51, 989687421u, 4294414202u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{52, 1152956913u, 0u, 1152956913u, 0, SCALBNF_TOLERANCE, 0}, +{53, 892922651u, 4294392467u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{54, 1307091856u, 24u, 1508418448u, 0, SCALBNF_TOLERANCE, 0}, +{55, 1142167709u, 13u, 1251219613u, 0, SCALBNF_TOLERANCE, 0}, +{56, 3426232834u, 0u, 3426232834u, 0, SCALBNF_TOLERANCE, 0}, +{57, 3368566779u, 0u, 3368566779u, 0, SCALBNF_TOLERANCE, 0}, +{58, 1138741813u, 0u, 1138741813u, 0, SCALBNF_TOLERANCE, 0}, +{59, 982950501u, 0u, 982950501u, 0, SCALBNF_TOLERANCE, 0}, +{60, 1142981585u, 0u, 1142981585u, 0, SCALBNF_TOLERANCE, 0}, +{61, 3347165962u, 0u, 3347165962u, 0, SCALBNF_TOLERANCE, 0}, +{62, 1009535440u, 4293825695u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{63, 3126820946u, 2u, 3143598162u, 0, SCALBNF_TOLERANCE, 0}, +{64, 3473956030u, 0u, 3473956030u, 0, SCALBNF_TOLERANCE, 0}, +{65, 3349098349u, 0u, 3349098349u, 0, SCALBNF_TOLERANCE, 0}, +{66, 3152729489u, 0u, 3152729489u, 0, SCALBNF_TOLERANCE, 0}, +{67, 945568720u, 4294963204u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{68, 3345489836u, 36u, 3647479724u, 0, SCALBNF_TOLERANCE, 0}, +{69, 976791751u, 4294967292u, 943237319u, 0, SCALBNF_TOLERANCE, 0}, +{70, 1004442355u, 0u, 1004442355u, 0, SCALBNF_TOLERANCE, 0}, +{71, 1108485380u, 0u, 1108485380u, 0, SCALBNF_TOLERANCE, 0}, +{72, 1061834641u, 0u, 1061834641u, 0, SCALBNF_TOLERANCE, 0}, +{73, 1087189715u, 0u, 1087189715u, 0, SCALBNF_TOLERANCE, 0}, +{74, 1000611335u, 0u, 1000611335u, 0, SCALBNF_TOLERANCE, 0}, +{75, 3466188568u, 0u, 3466188568u, 0, SCALBNF_TOLERANCE, 0}, +{76, 3072456205u, 0u, 3072456205u, 0, SCALBNF_TOLERANCE, 0}, +{77, 1315030230u, 4294939294u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{78, 1134593658u, 3712906944u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{79, 977281449u, 0u, 977281449u, 0, SCALBNF_TOLERANCE, 0}, +{80, 1086198791u, 0u, 1086198791u, 0, SCALBNF_TOLERANCE, 0}, +{81, 1255152035u, 0u, 1255152035u, 0, SCALBNF_TOLERANCE, 0}, +{82, 1135271264u, 4294966890u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{83, 1094190727u, 0u, 1094190727u, 0, SCALBNF_TOLERANCE, 0}, +{84, 1294665325u, 0u, 1294665325u, 0, SCALBNF_TOLERANCE, 0}, +{85, 1036608591u, 0u, 1036608591u, 0, SCALBNF_TOLERANCE, 0}, +{86, 3229998064u, 0u, 3229998064u, 0, SCALBNF_TOLERANCE, 0}, +{87, 3439134022u, 0u, 3439134022u, 0, SCALBNF_TOLERANCE, 0}, +{88, 1325668223u, 0u, 1325668223u, 0, SCALBNF_TOLERANCE, 0}, +{89, 1092037607u, 0u, 1092037607u, 0, SCALBNF_TOLERANCE, 0}, +{90, 3295436768u, 0u, 3295436768u, 0, SCALBNF_TOLERANCE, 0}, +{91, 1151984049u, 0u, 1151984049u, 0, SCALBNF_TOLERANCE, 0}, +{92, 1129287043u, 0u, 1129287043u, 0, SCALBNF_TOLERANCE, 0}, +{93, 1243664530u, 0u, 1243664530u, 0, SCALBNF_TOLERANCE, 0}, +{94, 950829092u, 0u, 950829092u, 0, SCALBNF_TOLERANCE, 0}, +{95, 1115471979u, 0u, 1115471979u, 0, SCALBNF_TOLERANCE, 0}, +{96, 3351092088u, 0u, 3351092088u, 0, SCALBNF_TOLERANCE, 0}, +{97, 3241193975u, 0u, 3241193975u, 0, SCALBNF_TOLERANCE, 0}, +{98, 1030934236u, 0u, 1030934236u, 0, SCALBNF_TOLERANCE, 0}, +{99, 1025254314u, 0u, 1025254314u, 0, SCALBNF_TOLERANCE, 0}, +{100, 1110545760u, 4294967286u, 1026659680u, 0, SCALBNF_TOLERANCE, 0}, +{101, 3180213739u, 37u, 3490592235u, 0, SCALBNF_TOLERANCE, 0}, +{102, 3361976590u, 0u, 3361976590u, 0, SCALBNF_TOLERANCE, 0}, +{103, 881280146u, 4262747520u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{104, 1304154705u, 0u, 1304154705u, 0, SCALBNF_TOLERANCE, 0}, +{105, 3264443610u, 4294967294u, 3247666394u, 0, SCALBNF_TOLERANCE, 0}, +{106, 3374550627u, 0u, 3374550627u, 0, SCALBNF_TOLERANCE, 0}, +{107, 1161858787u, 0u, 1161858787u, 0, SCALBNF_TOLERANCE, 0}, +{108, 3325193181u, 0u, 3325193181u, 0, SCALBNF_TOLERANCE, 0}, +{109, 3115275450u, 0u, 3115275450u, 0, SCALBNF_TOLERANCE, 0}, +{110, 3116607482u, 4294967294u, 3099830266u, 0, SCALBNF_TOLERANCE, 0}, +{111, 3187892415u, 0u, 3187892415u, 0, SCALBNF_TOLERANCE, 0}, +{112, 1189120494u, 0u, 1189120494u, 0, SCALBNF_TOLERANCE, 0}, +{113, 889030794u, 0u, 889030794u, 0, SCALBNF_TOLERANCE, 0}, +{114, 1323529208u, 0u, 1323529208u, 0, SCALBNF_TOLERANCE, 0}, +{115, 3465768388u, 0u, 3465768388u, 0, SCALBNF_TOLERANCE, 0}, +{116, 3426099899u, 87u, 4155908795u, 0, SCALBNF_TOLERANCE, 0}, +{117, 1065798296u, 0u, 1065798296u, 0, SCALBNF_TOLERANCE, 0}, +{118, 3328989444u, 0u, 3328989444u, 0, SCALBNF_TOLERANCE, 0}, +{119, 3357819026u, 0u, 3357819026u, 0, SCALBNF_TOLERANCE, 0}, +{120, 1273397670u, 0u, 1273397670u, 0, SCALBNF_TOLERANCE, 0}, +{121, 1257596246u, 4264851904u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{122, 1051773536u, 0u, 1051773536u, 0, SCALBNF_TOLERANCE, 0}, +{123, 3294752507u, 0u, 3294752507u, 0, SCALBNF_TOLERANCE, 0}, +{124, 3424848725u, 0u, 3424848725u, 0, SCALBNF_TOLERANCE, 0}, +{125, 1090870906u, 4294966393u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{126, 1272325814u, 0u, 1272325814u, 0, SCALBNF_TOLERANCE, 0}, +{127, 3359508271u, 0u, 3359508271u, 0, SCALBNF_TOLERANCE, 0}, +{128, 1137854355u, 4294941607u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{129, 3440773058u, 0u, 3440773058u, 0, SCALBNF_TOLERANCE, 0}, +{130, 3101598400u, 0u, 3101598400u, 0, SCALBNF_TOLERANCE, 0}, +{131, 3437062994u, 0u, 3437062994u, 0, SCALBNF_TOLERANCE, 0}, +{132, 3303035472u, 0u, 3303035472u, 0, SCALBNF_TOLERANCE, 0}, +{133, 1053698677u, 4294966907u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{134, 3037541131u, 5u, 3079484171u, 0, SCALBNF_TOLERANCE, 0}, +{135, 3458934263u, 0u, 3458934263u, 0, SCALBNF_TOLERANCE, 0}, +{136, 1065761827u, 4294943781u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{137, 3025843188u, 0u, 3025843188u, 0, SCALBNF_TOLERANCE, 0}, +{138, 926665223u, 0u, 926665223u, 0, SCALBNF_TOLERANCE, 0}, +{139, 1199816046u, 0u, 1199816046u, 0, SCALBNF_TOLERANCE, 0}, +{140, 3333779015u, 0u, 3333779015u, 0, SCALBNF_TOLERANCE, 0}, +{141, 948398145u, 4294967288u, 881289281u, 0, SCALBNF_TOLERANCE, 0}, +{142, 3164749613u, 0u, 3164749613u, 0, SCALBNF_TOLERANCE, 0}, +{143, 3118883815u, 0u, 3118883815u, 0, SCALBNF_TOLERANCE, 0}, +{144, 3226990408u, 45u, 3604477768u, 0, SCALBNF_TOLERANCE, 0}, +{145, 3117098218u, 115u, 4081788138u, 0, SCALBNF_TOLERANCE, 0}, +{146, 1283624229u, 0u, 1283624229u, 0, SCALBNF_TOLERANCE, 0}, +{147, 970649315u, 3u, 995815139u, 0, SCALBNF_TOLERANCE, 0}, +{148, 959776291u, 4294967028u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{149, 1270734970u, 4294829480u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{150, 3454816067u, 0u, 3454816067u, 0, SCALBNF_TOLERANCE, 0}, +{151, 1157598381u, 4294964293u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{152, 3335234513u, 0u, 3335234513u, 0, SCALBNF_TOLERANCE, 0}, +{153, 1279489061u, 0u, 1279489061u, 0, SCALBNF_TOLERANCE, 0}, +{154, 3143920719u, 0u, 3143920719u, 0, SCALBNF_TOLERANCE, 0}, +{155, 1233171235u, 0u, 1233171235u, 0, SCALBNF_TOLERANCE, 0}, +{156, 1148920078u, 0u, 1148920078u, 0, SCALBNF_TOLERANCE, 0}, +{157, 3064988156u, 4294967292u, 3031433724u, 0, SCALBNF_TOLERANCE, 0}, +{158, 3219949483u, 0u, 3219949483u, 0, SCALBNF_TOLERANCE, 0}, +{159, 1207502108u, 4292985650u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{160, 1000014431u, 0u, 1000014431u, 0, SCALBNF_TOLERANCE, 0}, +{161, 3161756316u, 0u, 3161756316u, 0, SCALBNF_TOLERANCE, 0}, +{162, 1234530539u, 3u, 1259696363u, 0, SCALBNF_TOLERANCE, 0}, +{163, 3306328852u, 87u, 4036137748u, 0, SCALBNF_TOLERANCE, 0}, +{164, 1131927531u, 0u, 1131927531u, 0, SCALBNF_TOLERANCE, 0}, +{165, 3449879391u, 0u, 3449879391u, 0, SCALBNF_TOLERANCE, 0}, +{166, 970094304u, 4294911386u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{167, 1125551064u, 4294949017u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{168, 3201603336u, 0u, 3201603336u, 0, SCALBNF_TOLERANCE, 0}, +{169, 921940707u, 0u, 921940707u, 0, SCALBNF_TOLERANCE, 0}, +{170, 1091906532u, 0u, 1091906532u, 0, SCALBNF_TOLERANCE, 0}, +{171, 1276853215u, 0u, 1276853215u, 0, SCALBNF_TOLERANCE, 0}, +{172, 3360170117u, 0u, 3360170117u, 0, SCALBNF_TOLERANCE, 0}, +{173, 1064364381u, 0u, 1064364381u, 0, SCALBNF_TOLERANCE, 0}, +{174, 1268744779u, 4294952694u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{175, 1165195428u, 4292538760u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{176, 3044092739u, 30u, 3295750979u, 0, SCALBNF_TOLERANCE, 0}, +{177, 3247790039u, 0u, 3247790039u, 0, SCALBNF_TOLERANCE, 0}, +{178, 3215244648u, 4u, 3248799080u, 0, SCALBNF_TOLERANCE, 0}, +{179, 3095275931u, 0u, 3095275931u, 0, SCALBNF_TOLERANCE, 0}, +{180, 3059688264u, 77u, 3705611080u, 0, SCALBNF_TOLERANCE, 0}, +{181, 1212717473u, 0u, 1212717473u, 0, SCALBNF_TOLERANCE, 0}, +{182, 3028857014u, 0u, 3028857014u, 0, SCALBNF_TOLERANCE, 0}, +{183, 1044867873u, 4294528232u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{184, 1089986803u, 3370664576u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{185, 1296314700u, 0u, 1296314700u, 0, SCALBNF_TOLERANCE, 0}, +{186, 1251462432u, 0u, 1251462432u, 0, SCALBNF_TOLERANCE, 0}, +{187, 3485236902u, 0u, 3485236902u, 0, SCALBNF_TOLERANCE, 0}, +{188, 3080852256u, 0u, 3080852256u, 0, SCALBNF_TOLERANCE, 0}, +{189, 1022211242u, 0u, 1022211242u, 0, SCALBNF_TOLERANCE, 0}, +{190, 884661176u, 0u, 884661176u, 0, SCALBNF_TOLERANCE, 0}, +{191, 989762529u, 4294733601u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{192, 1295475718u, 0u, 1295475718u, 0, SCALBNF_TOLERANCE, 0}, +{193, 1002632518u, 4294950696u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{194, 3158912530u, 0u, 3158912530u, 0, SCALBNF_TOLERANCE, 0}, +{195, 3138037576u, 0u, 3138037576u, 0, SCALBNF_TOLERANCE, 0}, +{196, 999985470u, 4282999218u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{197, 1189421739u, 0u, 1189421739u, 0, SCALBNF_TOLERANCE, 0}, +{198, 3075182644u, 0u, 3075182644u, 0, SCALBNF_TOLERANCE, 0}, +{199, 1164046161u, 4139845440u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{200, 1292596266u, 0u, 1292596266u, 0, SCALBNF_TOLERANCE, 0}, +{201, 1314644642u, 0u, 1314644642u, 0, SCALBNF_TOLERANCE, 0}, +{202, 3399813173u, 0u, 3399813173u, 0, SCALBNF_TOLERANCE, 0}, +{203, 1034611395u, 0u, 1034611395u, 0, SCALBNF_TOLERANCE, 0}, +{204, 1181604787u, 4294717096u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{205, 3059042077u, 0u, 3059042077u, 0, SCALBNF_TOLERANCE, 0}, +{206, 1043691622u, 4288164501u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{207, 1314588083u, 0u, 1314588083u, 0, SCALBNF_TOLERANCE, 0}, +{208, 3141533334u, 0u, 3141533334u, 0, SCALBNF_TOLERANCE, 0}, +{209, 3400949680u, 0u, 3400949680u, 0, SCALBNF_TOLERANCE, 0}, +{210, 1110424755u, 0u, 1110424755u, 0, SCALBNF_TOLERANCE, 0}, +{211, 3189917167u, 0u, 3189917167u, 0, SCALBNF_TOLERANCE, 0}, +{212, 969804941u, 4294836255u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{213, 934308144u, 0u, 934308144u, 0, SCALBNF_TOLERANCE, 0}, +{214, 1156767533u, 7u, 1215487789u, 0, SCALBNF_TOLERANCE, 0}, +{215, 994934087u, 0u, 994934087u, 0, SCALBNF_TOLERANCE, 0}, +{216, 3185240099u, 122u, 4208650275u, 0, SCALBNF_TOLERANCE, 0}, +{217, 1212129651u, 0u, 1212129651u, 0, SCALBNF_TOLERANCE, 0}, +{218, 3125775254u, 0u, 3125775254u, 0, SCALBNF_TOLERANCE, 0}, +{219, 1037464105u, 0u, 1037464105u, 0, SCALBNF_TOLERANCE, 0}, +{220, 918212457u, 0u, 918212457u, 0, SCALBNF_TOLERANCE, 0}, +{221, 1337315179u, 3421796288u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{222, 1131358407u, 4294955130u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{223, 1156517523u, 4294914801u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{224, 3210802820u, 0u, 3210802820u, 0, SCALBNF_TOLERANCE, 0}, +{225, 3468429030u, 4294967266u, 3216770790u, 0, SCALBNF_TOLERANCE, 0}, +{226, 3055299953u, 0u, 3055299953u, 0, SCALBNF_TOLERANCE, 0}, +{227, 959956547u, 0u, 959956547u, 0, SCALBNF_TOLERANCE, 0}, +{228, 1039917375u, 117u, 2021384511u, 0, SCALBNF_TOLERANCE, 0}, +{229, 1311016004u, 4294941884u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{230, 1128016396u, 27u, 1354508812u, 0, SCALBNF_TOLERANCE, 0}, +{231, 3210335769u, 0u, 3210335769u, 0, SCALBNF_TOLERANCE, 0}, +{232, 1206054701u, 0u, 1206054701u, 0, SCALBNF_TOLERANCE, 0}, +{233, 1213609983u, 0u, 1213609983u, 0, SCALBNF_TOLERANCE, 0}, +{234, 1246902946u, 0u, 1246902946u, 0, SCALBNF_TOLERANCE, 0}, +{235, 1029480631u, 0u, 1029480631u, 0, SCALBNF_TOLERANCE, 0}, +{236, 3153568584u, 0u, 3153568584u, 0, SCALBNF_TOLERANCE, 0}, +{237, 3384988527u, 0u, 3384988527u, 0, SCALBNF_TOLERANCE, 0}, +{238, 1317696241u, 0u, 1317696241u, 0, SCALBNF_TOLERANCE, 0}, +{239, 3341877624u, 0u, 3341877624u, 0, SCALBNF_TOLERANCE, 0}, +{240, 1228636133u, 0u, 1228636133u, 0, SCALBNF_TOLERANCE, 0}, +{241, 1207246237u, 0u, 1207246237u, 0, SCALBNF_TOLERANCE, 0}, +{242, 1165476654u, 4294877038u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{243, 1215278023u, 0u, 1215278023u, 0, SCALBNF_TOLERANCE, 0}, +{244, 1017239798u, 4167373560u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{245, 1149651309u, 0u, 1149651309u, 0, SCALBNF_TOLERANCE, 0}, +{246, 1111943722u, 0u, 1111943722u, 0, SCALBNF_TOLERANCE, 0}, +{247, 1189849849u, 4293652457u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{248, 3204848496u, 0u, 3204848496u, 0, SCALBNF_TOLERANCE, 0}, +{249, 1249758327u, 0u, 1249758327u, 0, SCALBNF_TOLERANCE, 0}, +{250, 3215981890u, 4294967286u, 3132095810u, 0, SCALBNF_TOLERANCE, 0}, +{251, 1266687209u, 0u, 1266687209u, 0, SCALBNF_TOLERANCE, 0}, +{252, 943645710u, 0u, 943645710u, 0, SCALBNF_TOLERANCE, 0}, +{253, 935847271u, 1u, 944235879u, 0, SCALBNF_TOLERANCE, 0}, +{254, 3410336089u, 47u, 3804600665u, 0, SCALBNF_TOLERANCE, 0}, +{255, 3059263153u, 0u, 3059263153u, 0, SCALBNF_TOLERANCE, 0}, +{256, 3353679791u, 0u, 3353679791u, 0, SCALBNF_TOLERANCE, 0}, +{257, 1001823878u, 0u, 1001823878u, 0, SCALBNF_TOLERANCE, 0}, +{258, 1009130212u, 0u, 1009130212u, 0, SCALBNF_TOLERANCE, 0}, +{259, 3367127535u, 0u, 3367127535u, 0, SCALBNF_TOLERANCE, 0}, +{260, 1032920919u, 3981458912u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{261, 3281952870u, 0u, 3281952870u, 0, SCALBNF_TOLERANCE, 0}, +{262, 1237868497u, 0u, 1237868497u, 0, SCALBNF_TOLERANCE, 0}, +{263, 1153753924u, 4294958733u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{264, 1120261759u, 0u, 1120261759u, 0, SCALBNF_TOLERANCE, 0}, +{265, 3349595986u, 4294967271u, 3139880786u, 0, SCALBNF_TOLERANCE, 0}, +{266, 1087750238u, 16u, 1221967966u, 0, SCALBNF_TOLERANCE, 0}, +{267, 1066116543u, 0u, 1066116543u, 0, SCALBNF_TOLERANCE, 0}, +{268, 3210898034u, 0u, 3210898034u, 0, SCALBNF_TOLERANCE, 0}, +{269, 1030612298u, 4294908239u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{270, 1186234578u, 0u, 1186234578u, 0, SCALBNF_TOLERANCE, 0}, +{271, 1331680743u, 0u, 1331680743u, 0, SCALBNF_TOLERANCE, 0}, +{272, 1045232522u, 4294967290u, 994900874u, 0, SCALBNF_TOLERANCE, 0}, +{273, 3119858470u, 0u, 3119858470u, 0, SCALBNF_TOLERANCE, 0}, +{274, 3349432725u, 0u, 3349432725u, 0, SCALBNF_TOLERANCE, 0}, +{275, 912423027u, 0u, 912423027u, 0, SCALBNF_TOLERANCE, 0}, +{276, 3194674746u, 0u, 3194674746u, 0, SCALBNF_TOLERANCE, 0}, +{277, 965402291u, 0u, 965402291u, 0, SCALBNF_TOLERANCE, 0}, +{278, 1133410485u, 4294951516u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{279, 3136790322u, 7u, 3195510578u, 0, SCALBNF_TOLERANCE, 0}, +{280, 3369970587u, 0u, 3369970587u, 0, SCALBNF_TOLERANCE, 0}, +{281, 1270451568u, 0u, 1270451568u, 0, SCALBNF_TOLERANCE, 0}, +{282, 989498922u, 0u, 989498922u, 0, SCALBNF_TOLERANCE, 0}, +{283, 1280215674u, 0u, 1280215674u, 0, SCALBNF_TOLERANCE, 0}, +{284, 1171873518u, 0u, 1171873518u, 0, SCALBNF_TOLERANCE, 0}, +{285, 3298258100u, 0u, 3298258100u, 0, SCALBNF_TOLERANCE, 0}, +{286, 3415208824u, 0u, 3415208824u, 0, SCALBNF_TOLERANCE, 0}, +{287, 1001897182u, 0u, 1001897182u, 0, SCALBNF_TOLERANCE, 0}, +{288, 3152777939u, 4294967281u, 3026948819u, 0, SCALBNF_TOLERANCE, 0}, +{289, 985903305u, 4294945424u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{290, 3357328848u, 0u, 3357328848u, 0, SCALBNF_TOLERANCE, 0}, +{291, 982612185u, 0u, 982612185u, 0, SCALBNF_TOLERANCE, 0}, +{292, 1144755661u, 0u, 1144755661u, 0, SCALBNF_TOLERANCE, 0}, +{293, 898467286u, 0u, 898467286u, 0, SCALBNF_TOLERANCE, 0}, +{294, 3364525678u, 0u, 3364525678u, 0, SCALBNF_TOLERANCE, 0}, +{295, 3146660041u, 0u, 3146660041u, 0, SCALBNF_TOLERANCE, 0}, +{296, 3467121799u, 0u, 3467121799u, 0, SCALBNF_TOLERANCE, 0}, +{297, 1151257041u, 0u, 1151257041u, 0, SCALBNF_TOLERANCE, 0}, +{298, 3097873255u, 4294967295u, 3089484647u, 0, SCALBNF_TOLERANCE, 0}, +{299, 3130670309u, 0u, 3130670309u, 0, SCALBNF_TOLERANCE, 0}, +{300, 1017573824u, 0u, 1017573824u, 0, SCALBNF_TOLERANCE, 0}, +{301, 1258369714u, 3364363264u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{302, 1216602683u, 4294468761u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{303, 1071940738u, 4294963632u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{304, 922601356u, 4294937447u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{305, 3357177805u, 5u, 3399120845u, 0, SCALBNF_TOLERANCE, 0}, +{306, 3049120080u, 0u, 3049120080u, 0, SCALBNF_TOLERANCE, 0}, +{307, 1153863660u, 0u, 1153863660u, 0, SCALBNF_TOLERANCE, 0}, +{308, 3034243695u, 0u, 3034243695u, 0, SCALBNF_TOLERANCE, 0}, +{309, 1249365132u, 4294967060u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{310, 3046215730u, 0u, 3046215730u, 0, SCALBNF_TOLERANCE, 0}, +{311, 3047251716u, 8u, 3114360580u, 0, SCALBNF_TOLERANCE, 0}, +{312, 1297708818u, 0u, 1297708818u, 0, SCALBNF_TOLERANCE, 0}, +{313, 3161606610u, 0u, 3161606610u, 0, SCALBNF_TOLERANCE, 0}, +{314, 888030585u, 0u, 888030585u, 0, SCALBNF_TOLERANCE, 0}, +{315, 1043442869u, 4294963715u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{316, 3400348640u, 0u, 3400348640u, 0, SCALBNF_TOLERANCE, 0}, +{317, 1250249095u, 1u, 1258637703u, 0, SCALBNF_TOLERANCE, 0}, +{318, 3020883322u, 0u, 3020883322u, 0, SCALBNF_TOLERANCE, 0}, +{319, 1215968622u, 2531374080u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{320, 3202319550u, 0u, 3202319550u, 0, SCALBNF_TOLERANCE, 0}, +{321, 3061638260u, 0u, 3061638260u, 0, SCALBNF_TOLERANCE, 0}, +{322, 1025404104u, 1u, 1033792712u, 0, SCALBNF_TOLERANCE, 0}, +{323, 3138086437u, 0u, 3138086437u, 0, SCALBNF_TOLERANCE, 0}, +{324, 3099671635u, 4294967295u, 3091283027u, 0, SCALBNF_TOLERANCE, 0}, +{325, 3068014841u, 0u, 3068014841u, 0, SCALBNF_TOLERANCE, 0}, +{326, 1252237719u, 105u, 2133041559u, 0, SCALBNF_TOLERANCE, 0}, +{327, 3082454432u, 0u, 3082454432u, 0, SCALBNF_TOLERANCE, 0}, +{328, 1099710167u, 0u, 1099710167u, 0, SCALBNF_TOLERANCE, 0}, +{329, 1282110851u, 0u, 1282110851u, 0, SCALBNF_TOLERANCE, 0}, +{330, 1123357102u, 4294966999u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{331, 1106837025u, 0u, 1106837025u, 0, SCALBNF_TOLERANCE, 0}, +{332, 1253017688u, 0u, 1253017688u, 0, SCALBNF_TOLERANCE, 0}, +{333, 1108543194u, 4294966999u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{334, 3305715025u, 0u, 3305715025u, 0, SCALBNF_TOLERANCE, 0}, +{335, 1266928623u, 0u, 1266928623u, 0, SCALBNF_TOLERANCE, 0}, +{336, 3438080027u, 0u, 3438080027u, 0, SCALBNF_TOLERANCE, 0}, +{337, 3344574751u, 0u, 3344574751u, 0, SCALBNF_TOLERANCE, 0}, +{338, 1152416724u, 0u, 1152416724u, 0, SCALBNF_TOLERANCE, 0}, +{339, 3263310567u, 0u, 3263310567u, 0, SCALBNF_TOLERANCE, 0}, +{340, 1000313118u, 0u, 1000313118u, 0, SCALBNF_TOLERANCE, 0}, +{341, 972485427u, 131u, 2071393075u, 0, SCALBNF_TOLERANCE, 0}, +{342, 1278946388u, 0u, 1278946388u, 0, SCALBNF_TOLERANCE, 0}, +{343, 947914771u, 0u, 947914771u, 0, SCALBNF_TOLERANCE, 0}, +{344, 3167730654u, 0u, 3167730654u, 0, SCALBNF_TOLERANCE, 0}, +{345, 3232726036u, 0u, 3232726036u, 0, SCALBNF_TOLERANCE, 0}, +{346, 1297190916u, 0u, 1297190916u, 0, SCALBNF_TOLERANCE, 0}, +{347, 1277649137u, 0u, 1277649137u, 0, SCALBNF_TOLERANCE, 0}, +{348, 3090306474u, 0u, 3090306474u, 0, SCALBNF_TOLERANCE, 0}, +{349, 3244032016u, 0u, 3244032016u, 0, SCALBNF_TOLERANCE, 0}, +{350, 3033122376u, 0u, 3033122376u, 0, SCALBNF_TOLERANCE, 0}, +{351, 3317196817u, 0u, 3317196817u, 0, SCALBNF_TOLERANCE, 0}, +{352, 3374748510u, 0u, 3374748510u, 0, SCALBNF_TOLERANCE, 0}, +{353, 3345634950u, 0u, 3345634950u, 0, SCALBNF_TOLERANCE, 0}, +{354, 3189860276u, 0u, 3189860276u, 0, SCALBNF_TOLERANCE, 0}, +{355, 3396917283u, 0u, 3396917283u, 0, SCALBNF_TOLERANCE, 0}, +{356, 3317032737u, 0u, 3317032737u, 0, SCALBNF_TOLERANCE, 0}, +{357, 1306520561u, 0u, 1306520561u, 0, SCALBNF_TOLERANCE, 0}, +{358, 1314936356u, 0u, 1314936356u, 0, SCALBNF_TOLERANCE, 0}, +{359, 3085636260u, 33u, 3362460324u, 0, SCALBNF_TOLERANCE, 0}, +{360, 3182540197u, 0u, 3182540197u, 0, SCALBNF_TOLERANCE, 0}, +{361, 3349005404u, 0u, 3349005404u, 0, SCALBNF_TOLERANCE, 0}, +{362, 1053387478u, 0u, 1053387478u, 0, SCALBNF_TOLERANCE, 0}, +{363, 3136364836u, 0u, 3136364836u, 0, SCALBNF_TOLERANCE, 0}, +{364, 1112891928u, 0u, 1112891928u, 0, SCALBNF_TOLERANCE, 0}, +{365, 893449284u, 0u, 893449284u, 0, SCALBNF_TOLERANCE, 0}, +{366, 892311459u, 14u, 1009751971u, 0, SCALBNF_TOLERANCE, 0}, +{367, 1190105283u, 0u, 1190105283u, 0, SCALBNF_TOLERANCE, 0}, +{368, 1043025031u, 0u, 1043025031u, 0, SCALBNF_TOLERANCE, 0}, +{369, 3410531037u, 0u, 3410531037u, 0, SCALBNF_TOLERANCE, 0}, +{370, 3125834184u, 0u, 3125834184u, 0, SCALBNF_TOLERANCE, 0}, +{371, 902318189u, 0u, 902318189u, 0, SCALBNF_TOLERANCE, 0}, +{372, 3213624815u, 0u, 3213624815u, 0, SCALBNF_TOLERANCE, 0}, +{373, 1120888322u, 5u, 1162831362u, 0, SCALBNF_TOLERANCE, 0}, +{374, 1315217243u, 4291026624u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{375, 3137758475u, 0u, 3137758475u, 0, SCALBNF_TOLERANCE, 0}, +{376, 1040617590u, 0u, 1040617590u, 0, SCALBNF_TOLERANCE, 0}, +{377, 955384253u, 4294910624u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{378, 904255535u, 0u, 904255535u, 0, SCALBNF_TOLERANCE, 0}, +{379, 1022984119u, 0u, 1022984119u, 0, SCALBNF_TOLERANCE, 0}, +{380, 997362368u, 0u, 997362368u, 0, SCALBNF_TOLERANCE, 0}, +{381, 900933520u, 19u, 1060317072u, 0, SCALBNF_TOLERANCE, 0}, +{382, 1039827284u, 1u, 1048215892u, 0, SCALBNF_TOLERANCE, 0}, +{383, 1021564080u, 0u, 1021564080u, 0, SCALBNF_TOLERANCE, 0}, +{384, 3458669745u, 0u, 3458669745u, 0, SCALBNF_TOLERANCE, 0}, +{385, 1040711112u, 4294967293u, 1015545288u, 0, SCALBNF_TOLERANCE, 0}, +{386, 1134528351u, 4294638880u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{387, 1133689539u, 1u, 1142078147u, 0, SCALBNF_TOLERANCE, 0}, +{388, 3415502662u, 0u, 3415502662u, 0, SCALBNF_TOLERANCE, 0}, +{389, 954999730u, 0u, 954999730u, 0, SCALBNF_TOLERANCE, 0}, +{390, 1066157309u, 4294967285u, 973882621u, 0, SCALBNF_TOLERANCE, 0}, +{391, 940437609u, 0u, 940437609u, 0, SCALBNF_TOLERANCE, 0}, +{392, 3064200154u, 0u, 3064200154u, 0, SCALBNF_TOLERANCE, 0}, +{393, 1023889593u, 0u, 1023889593u, 0, SCALBNF_TOLERANCE, 0}, +{394, 1219052056u, 4294526211u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{395, 3372118621u, 0u, 3372118621u, 0, SCALBNF_TOLERANCE, 0}, +{396, 3146190320u, 0u, 3146190320u, 0, SCALBNF_TOLERANCE, 0}, +{397, 1299683827u, 0u, 1299683827u, 0, SCALBNF_TOLERANCE, 0}, +{398, 3064155399u, 0u, 3064155399u, 0, SCALBNF_TOLERANCE, 0}, +{399, 3040314717u, 1u, 3048703325u, 0, SCALBNF_TOLERANCE, 0}, +{400, 1229268598u, 1u, 1237657206u, 0, SCALBNF_TOLERANCE, 0}, +{401, 3184078812u, 0u, 3184078812u, 0, SCALBNF_TOLERANCE, 0}, +{402, 1086717248u, 4256439624u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{403, 3434884607u, 0u, 3434884607u, 0, SCALBNF_TOLERANCE, 0}, +{404, 3464955606u, 0u, 3464955606u, 0, SCALBNF_TOLERANCE, 0}, +{405, 1025278524u, 0u, 1025278524u, 0, SCALBNF_TOLERANCE, 0}, +{406, 1242829722u, 4294967290u, 1192498074u, 0, SCALBNF_TOLERANCE, 0}, +{407, 3075149137u, 76u, 3712683345u, 0, SCALBNF_TOLERANCE, 0}, +{408, 1246019790u, 0u, 1246019790u, 0, SCALBNF_TOLERANCE, 0}, +{409, 1136052740u, 4294967282u, 1018612228u, 0, SCALBNF_TOLERANCE, 0}, +{410, 1069009211u, 0u, 1069009211u, 0, SCALBNF_TOLERANCE, 0}, +{411, 1015670780u, 20u, 1183442940u, 0, SCALBNF_TOLERANCE, 0}, +{412, 1012543234u, 70u, 1599745794u, 0, SCALBNF_TOLERANCE, 0}, +{413, 1087942795u, 4294961657u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{414, 3426365713u, 0u, 3426365713u, 0, SCALBNF_TOLERANCE, 0}, +{415, 3283555717u, 0u, 3283555717u, 0, SCALBNF_TOLERANCE, 0}, +{416, 3381255420u, 0u, 3381255420u, 0, SCALBNF_TOLERANCE, 0}, +{417, 3388772093u, 0u, 3388772093u, 0, SCALBNF_TOLERANCE, 0}, +{418, 1319200415u, 4293050361u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{419, 1279324488u, 4294967293u, 1254158664u, 0, SCALBNF_TOLERANCE, 0}, +{420, 3217795424u, 0u, 3217795424u, 0, SCALBNF_TOLERANCE, 0}, +{421, 1246947517u, 6u, 1297279165u, 0, SCALBNF_TOLERANCE, 0}, +{422, 3396723577u, 0u, 3396723577u, 0, SCALBNF_TOLERANCE, 0}, +{423, 3433761025u, 0u, 3433761025u, 0, SCALBNF_TOLERANCE, 0}, +{424, 3201187455u, 0u, 3201187455u, 0, SCALBNF_TOLERANCE, 0}, +{425, 3083019343u, 0u, 3083019343u, 0, SCALBNF_TOLERANCE, 0}, +{426, 3042018375u, 0u, 3042018375u, 0, SCALBNF_TOLERANCE, 0}, +{427, 1082862511u, 0u, 1082862511u, 0, SCALBNF_TOLERANCE, 0}, +{428, 1341821683u, 0u, 1341821683u, 0, SCALBNF_TOLERANCE, 0}, +{429, 1079061705u, 0u, 1079061705u, 0, SCALBNF_TOLERANCE, 0}, +{430, 1016023520u, 4294967293u, 990857696u, 0, SCALBNF_TOLERANCE, 0}, +{431, 1156767169u, 0u, 1156767169u, 0, SCALBNF_TOLERANCE, 0}, +{432, 3077020499u, 0u, 3077020499u, 0, SCALBNF_TOLERANCE, 0}, +{433, 1104284039u, 0u, 1104284039u, 0, SCALBNF_TOLERANCE, 0}, +{434, 1093697541u, 0u, 1093697541u, 0, SCALBNF_TOLERANCE, 0}, +{435, 3179003144u, 37u, 3489381640u, 0, SCALBNF_TOLERANCE, 0}, +{436, 1094115255u, 0u, 1094115255u, 0, SCALBNF_TOLERANCE, 0}, +{437, 882878091u, 0u, 882878091u, 0, SCALBNF_TOLERANCE, 0}, +{438, 1098662266u, 0u, 1098662266u, 0, SCALBNF_TOLERANCE, 0}, +{439, 927582555u, 0u, 927582555u, 0, SCALBNF_TOLERANCE, 0}, +{440, 3111440310u, 0u, 3111440310u, 0, SCALBNF_TOLERANCE, 0}, +{441, 3476083859u, 0u, 3476083859u, 0, SCALBNF_TOLERANCE, 0}, +{442, 3038754840u, 0u, 3038754840u, 0, SCALBNF_TOLERANCE, 0}, +{443, 3464546616u, 0u, 3464546616u, 0, SCALBNF_TOLERANCE, 0}, +{444, 1002542205u, 0u, 1002542205u, 0, SCALBNF_TOLERANCE, 0}, +{445, 3443552129u, 0u, 3443552129u, 0, SCALBNF_TOLERANCE, 0}, +{446, 1287620154u, 0u, 1287620154u, 0, SCALBNF_TOLERANCE, 0}, +{447, 3073260205u, 0u, 3073260205u, 0, SCALBNF_TOLERANCE, 0}, +{448, 1245702957u, 0u, 1245702957u, 0, SCALBNF_TOLERANCE, 0}, +{449, 3087802274u, 0u, 3087802274u, 0, SCALBNF_TOLERANCE, 0}, +{450, 3415763001u, 0u, 3415763001u, 0, SCALBNF_TOLERANCE, 0}, +{451, 3026311911u, 0u, 3026311911u, 0, SCALBNF_TOLERANCE, 0}, +{452, 1198307901u, 68u, 1768733245u, 0, SCALBNF_TOLERANCE, 0}, +{453, 922255363u, 0u, 922255363u, 0, SCALBNF_TOLERANCE, 0}, +{454, 1113104661u, 0u, 1113104661u, 0, SCALBNF_TOLERANCE, 0}, +{455, 1136714348u, 0u, 1136714348u, 0, SCALBNF_TOLERANCE, 0}, +{456, 948856035u, 0u, 948856035u, 0, SCALBNF_TOLERANCE, 0}, +{457, 1062512367u, 4294967293u, 1037346543u, 0, SCALBNF_TOLERANCE, 0}, +{458, 3486907092u, 0u, 3486907092u, 0, SCALBNF_TOLERANCE, 0}, +{459, 1162027071u, 4294964303u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{460, 1034561811u, 0u, 1034561811u, 0, SCALBNF_TOLERANCE, 0}, +{461, 3271615417u, 0u, 3271615417u, 0, SCALBNF_TOLERANCE, 0}, +{462, 1177157787u, 0u, 1177157787u, 0, SCALBNF_TOLERANCE, 0}, +{463, 3196144817u, 0u, 3196144817u, 0, SCALBNF_TOLERANCE, 0}, +{464, 3432084552u, 0u, 3432084552u, 0, SCALBNF_TOLERANCE, 0}, +{465, 1309658335u, 0u, 1309658335u, 0, SCALBNF_TOLERANCE, 0}, +{466, 1226494979u, 0u, 1226494979u, 0, SCALBNF_TOLERANCE, 0}, +{467, 3460699001u, 0u, 3460699001u, 0, SCALBNF_TOLERANCE, 0}, +{468, 3079231719u, 0u, 3079231719u, 0, SCALBNF_TOLERANCE, 0}, +{469, 3093951884u, 0u, 3093951884u, 0, SCALBNF_TOLERANCE, 0}, +{470, 1204196034u, 4294966040u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{471, 3459877411u, 0u, 3459877411u, 0, SCALBNF_TOLERANCE, 0}, +{472, 1161439847u, 0u, 1161439847u, 0, SCALBNF_TOLERANCE, 0}, +{473, 908663107u, 0u, 908663107u, 0, SCALBNF_TOLERANCE, 0}, +{474, 1084378658u, 0u, 1084378658u, 0, SCALBNF_TOLERANCE, 0}, +{475, 3022828828u, 0u, 3022828828u, 0, SCALBNF_TOLERANCE, 0}, +{476, 1226473697u, 0u, 1226473697u, 0, SCALBNF_TOLERANCE, 0}, +{477, 3468040845u, 0u, 3468040845u, 0, SCALBNF_TOLERANCE, 0}, +{478, 1178825761u, 54u, 1631810593u, 0, SCALBNF_TOLERANCE, 0}, +{479, 3059266302u, 0u, 3059266302u, 0, SCALBNF_TOLERANCE, 0}, +{480, 3337652712u, 0u, 3337652712u, 0, SCALBNF_TOLERANCE, 0}, +{481, 1184753508u, 0u, 1184753508u, 0, SCALBNF_TOLERANCE, 0}, +{482, 996404791u, 4294853343u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{483, 1188439315u, 55u, 1649812755u, 0, SCALBNF_TOLERANCE, 0}, +{484, 906557513u, 0u, 906557513u, 0, SCALBNF_TOLERANCE, 0}, +{485, 916831283u, 0u, 916831283u, 0, SCALBNF_TOLERANCE, 0}, +{486, 996786317u, 0u, 996786317u, 0, SCALBNF_TOLERANCE, 0}, +{487, 3461635065u, 0u, 3461635065u, 0, SCALBNF_TOLERANCE, 0}, +{488, 3290079438u, 0u, 3290079438u, 0, SCALBNF_TOLERANCE, 0}, +{489, 3350690327u, 0u, 3350690327u, 0, SCALBNF_TOLERANCE, 0}, +{490, 1102061604u, 4253821380u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{491, 1282351521u, 0u, 1282351521u, 0, SCALBNF_TOLERANCE, 0}, +{492, 3095256878u, 0u, 3095256878u, 0, SCALBNF_TOLERANCE, 0}, +{493, 3163373610u, 0u, 3163373610u, 0, SCALBNF_TOLERANCE, 0}, +{494, 3228793330u, 0u, 3228793330u, 0, SCALBNF_TOLERANCE, 0}, +{495, 3422194733u, 0u, 3422194733u, 0, SCALBNF_TOLERANCE, 0}, +{496, 3083885296u, 0u, 3083885296u, 0, SCALBNF_TOLERANCE, 0}, +{497, 1261940623u, 4288291120u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{498, 3400603081u, 4294967290u, 3350271433u, 0, SCALBNF_TOLERANCE, 0}, +{499, 1219411812u, 0u, 1219411812u, 0, SCALBNF_TOLERANCE, 0}, +{500, 3094833770u, 0u, 3094833770u, 0, SCALBNF_TOLERANCE, 0}, +{501, 3139250800u, 0u, 3139250800u, 0, SCALBNF_TOLERANCE, 0}, +{502, 886201503u, 4294967150u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{503, 3297366026u, 7u, 3356086282u, 0, SCALBNF_TOLERANCE, 0}, +{504, 1218488455u, 4294964141u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{505, 3040358923u, 0u, 3040358923u, 0, SCALBNF_TOLERANCE, 0}, +{506, 3182551696u, 0u, 3182551696u, 0, SCALBNF_TOLERANCE, 0}, +{507, 1317098613u, 0u, 1317098613u, 0, SCALBNF_TOLERANCE, 0}, +{508, 3431703657u, 0u, 3431703657u, 0, SCALBNF_TOLERANCE, 0}, +{509, 3239728775u, 0u, 3239728775u, 0, SCALBNF_TOLERANCE, 0}, +{510, 3207141672u, 0u, 3207141672u, 0, SCALBNF_TOLERANCE, 0}, +{511, 3154378805u, 0u, 3154378805u, 0, SCALBNF_TOLERANCE, 0}, +{512, 3069658155u, 0u, 3069658155u, 0, SCALBNF_TOLERANCE, 0}, +{513, 3313160088u, 0u, 3313160088u, 0, SCALBNF_TOLERANCE, 0}, +{514, 1284174954u, 4180334232u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{515, 1063693032u, 0u, 1063693032u, 0, SCALBNF_TOLERANCE, 0}, +{516, 1102631663u, 4290881696u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{517, 968803479u, 0u, 968803479u, 0, SCALBNF_TOLERANCE, 0}, +{518, 3273080388u, 0u, 3273080388u, 0, SCALBNF_TOLERANCE, 0}, +{519, 1172529774u, 4294966405u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{520, 3158855023u, 0u, 3158855023u, 0, SCALBNF_TOLERANCE, 0}, +{521, 1165177679u, 4294967097u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{522, 952348506u, 4294108410u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{523, 1325324763u, 0u, 1325324763u, 0, SCALBNF_TOLERANCE, 0}, +{524, 3363524213u, 0u, 3363524213u, 0, SCALBNF_TOLERANCE, 0}, +{525, 1158950321u, 1u, 1167338929u, 0, SCALBNF_TOLERANCE, 0}, +{526, 903129873u, 4272788450u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{527, 3078339944u, 0u, 3078339944u, 0, SCALBNF_TOLERANCE, 0}, +{528, 1153863988u, 4229464460u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{529, 1235620969u, 0u, 1235620969u, 0, SCALBNF_TOLERANCE, 0}, +{530, 1097120930u, 4294967294u, 1080343714u, 0, SCALBNF_TOLERANCE, 0}, +{531, 1147712200u, 0u, 1147712200u, 0, SCALBNF_TOLERANCE, 0}, +{532, 1124721745u, 0u, 1124721745u, 0, SCALBNF_TOLERANCE, 0}, +{533, 3261744304u, 0u, 3261744304u, 0, SCALBNF_TOLERANCE, 0}, +{534, 3303160152u, 0u, 3303160152u, 0, SCALBNF_TOLERANCE, 0}, +{535, 1335399673u, 0u, 1335399673u, 0, SCALBNF_TOLERANCE, 0}, +{536, 1072458508u, 4294404660u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{537, 3303015249u, 0u, 3303015249u, 0, SCALBNF_TOLERANCE, 0}, +{538, 3252139741u, 0u, 3252139741u, 0, SCALBNF_TOLERANCE, 0}, +{539, 3468519966u, 0u, 3468519966u, 0, SCALBNF_TOLERANCE, 0}, +{540, 1006231203u, 0u, 1006231203u, 0, SCALBNF_TOLERANCE, 0}, +{541, 951554138u, 0u, 951554138u, 0, SCALBNF_TOLERANCE, 0}, +{542, 942046828u, 0u, 942046828u, 0, SCALBNF_TOLERANCE, 0}, +{543, 3255104167u, 0u, 3255104167u, 0, SCALBNF_TOLERANCE, 0}, +{544, 1155477903u, 0u, 1155477903u, 0, SCALBNF_TOLERANCE, 0}, +{545, 3273889176u, 0u, 3273889176u, 0, SCALBNF_TOLERANCE, 0}, +{546, 1228207362u, 0u, 1228207362u, 0, SCALBNF_TOLERANCE, 0}, +{547, 1290175785u, 0u, 1290175785u, 0, SCALBNF_TOLERANCE, 0}, +{548, 981908840u, 4294962938u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{549, 941187647u, 33u, 1218011711u, 0, SCALBNF_TOLERANCE, 0}, +{550, 1214223128u, 4294967293u, 1189057304u, 0, SCALBNF_TOLERANCE, 0}, +{551, 3422922584u, 6u, 3473254232u, 0, SCALBNF_TOLERANCE, 0}, +{552, 3453226030u, 4294967291u, 3411282990u, 0, SCALBNF_TOLERANCE, 0}, +{553, 1078359574u, 0u, 1078359574u, 0, SCALBNF_TOLERANCE, 0}, +{554, 1029557624u, 4294965511u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{555, 1207675424u, 0u, 1207675424u, 0, SCALBNF_TOLERANCE, 0}, +{556, 1028355074u, 4113313408u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{557, 1248421894u, 4294582111u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{558, 3353251994u, 12u, 3453915290u, 0, SCALBNF_TOLERANCE, 0}, +{559, 876926659u, 4294966792u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{560, 1076752219u, 0u, 1076752219u, 0, SCALBNF_TOLERANCE, 0}, +{561, 3388531942u, 0u, 3388531942u, 0, SCALBNF_TOLERANCE, 0}, +{562, 1273395082u, 0u, 1273395082u, 0, SCALBNF_TOLERANCE, 0}, +{563, 3034494183u, 0u, 3034494183u, 0, SCALBNF_TOLERANCE, 0}, +{564, 1171318485u, 4294306215u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{565, 3047748143u, 0u, 3047748143u, 0, SCALBNF_TOLERANCE, 0}, +{566, 1001216371u, 0u, 1001216371u, 0, SCALBNF_TOLERANCE, 0}, +{567, 912515889u, 2u, 929293105u, 0, SCALBNF_TOLERANCE, 0}, +{568, 3391452505u, 0u, 3391452505u, 0, SCALBNF_TOLERANCE, 0}, +{569, 3249603369u, 0u, 3249603369u, 0, SCALBNF_TOLERANCE, 0}, +{570, 1220264047u, 0u, 1220264047u, 0, SCALBNF_TOLERANCE, 0}, +{571, 3169816394u, 0u, 3169816394u, 0, SCALBNF_TOLERANCE, 0}, +{572, 3098997418u, 0u, 3098997418u, 0, SCALBNF_TOLERANCE, 0}, +{573, 3282212423u, 0u, 3282212423u, 0, SCALBNF_TOLERANCE, 0}, +{574, 3352293320u, 4294967278u, 3201298376u, 0, SCALBNF_TOLERANCE, 0}, +{575, 3296358441u, 0u, 3296358441u, 0, SCALBNF_TOLERANCE, 0}, +{576, 1197828352u, 4294967281u, 1071999232u, 0, SCALBNF_TOLERANCE, 0}, +{577, 3340510371u, 0u, 3340510371u, 0, SCALBNF_TOLERANCE, 0}, +{578, 1127109339u, 4294570975u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{579, 1200599955u, 0u, 1200599955u, 0, SCALBNF_TOLERANCE, 0}, +{580, 962230977u, 0u, 962230977u, 0, SCALBNF_TOLERANCE, 0}, +{581, 3192887808u, 0u, 3192887808u, 0, SCALBNF_TOLERANCE, 0}, +{582, 3237183876u, 0u, 3237183876u, 0, SCALBNF_TOLERANCE, 0}, +{583, 939285924u, 0u, 939285924u, 0, SCALBNF_TOLERANCE, 0}, +{584, 944050180u, 3871652128u, 0u, 0, SCALBNF_TOLERANCE, 0}, +{585, 3058135703u, 0u, 3058135703u, 0, SCALBNF_TOLERANCE, 0}, +{586, 1003299981u, 0u, 1003299981u, 0, SCALBNF_TOLERANCE, 0}, +{587, 1234491880u, 4283784819u, 0u, 0, SCALBNF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF scalbnf.h diff --git a/packages/language/c/libm/current/tests/vectors/significandf.c b/packages/language/c/libm/current/tests/vectors/significandf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/significandf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// significandf.c +// +// Test of significandf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/significandf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(significandf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &significandf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &significandf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("significandf() is stable"); + } // if + else + { + CYG_TEST_FAIL("significandf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library significandf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "significandf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF significandf.c diff --git a/packages/language/c/libm/current/tests/vectors/significandf.h b/packages/language/c/libm/current/tests/vectors/significandf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/significandf.h @@ -0,0 +1,2441 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// significandf.h +// +// Test vectors for testing of significandf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/significandf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SIGNIFICANDF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t significandf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3212836864u, 3212836864u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1, 3212836864u, 3211998003u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2, 3212836864u, 3211159142u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{3, 3212836864u, 3210320282u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{4, 3212836864u, 3209481421u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{5, 3212836864u, 3208642560u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{6, 3212836864u, 3207803699u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{7, 3212836864u, 3206964838u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{8, 3212836864u, 3206125978u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{9, 3212836864u, 3205287117u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{10, 3212836864u, 3204448256u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{11, 3212836864u, 3202770534u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{12, 3212836864u, 3201092813u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{13, 3212836864u, 3199415091u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{14, 3212836864u, 3197737370u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{15, 3212836864u, 3196059648u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{16, 3212836864u, 3192704205u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{17, 3212836864u, 3189348762u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{18, 3212836864u, 3184315597u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{19, 3212836864u, 3175926989u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{20, 3212836864u, 632815616u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{21, 3212836864u, 1028443341u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{22, 3212836864u, 1036831949u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{23, 3212836864u, 1041865114u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{24, 3212836864u, 1045220557u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{25, 3212836864u, 1048576000u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{26, 3212836864u, 1050253722u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{27, 3212836864u, 1051931443u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{28, 3212836864u, 1053609165u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{29, 3212836864u, 1055286886u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{30, 3212836864u, 1056964608u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{31, 3212836864u, 1057803469u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{32, 3212836864u, 1058642330u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{33, 3212836864u, 1059481190u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{34, 3212836864u, 1060320051u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{35, 3212836864u, 1061158912u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{36, 3212836864u, 1061997773u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{37, 3212836864u, 1062836634u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{38, 3212836864u, 1063675494u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{39, 3212836864u, 1064514355u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{40, 3211998003u, 3212836864u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{41, 3211998003u, 3211998003u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{42, 3211998003u, 3211159142u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{43, 3211998003u, 3210320282u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{44, 3211998003u, 3209481421u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{45, 3211998003u, 3208642560u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{46, 3211998003u, 3207803699u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{47, 3211998003u, 3206964838u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{48, 3211998003u, 3206125978u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{49, 3211998003u, 3205287117u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{50, 3211998003u, 3204448256u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{51, 3211998003u, 3202770534u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{52, 3211998003u, 3201092813u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{53, 3211998003u, 3199415091u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{54, 3211998003u, 3197737370u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{55, 3211998003u, 3196059648u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{56, 3211998003u, 3192704205u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{57, 3211998003u, 3189348762u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{58, 3211998003u, 3184315597u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{59, 3211998003u, 3175926989u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{60, 3211998003u, 632815616u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{61, 3211998003u, 1028443341u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{62, 3211998003u, 1036831949u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{63, 3211998003u, 1041865114u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{64, 3211998003u, 1045220557u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{65, 3211998003u, 1048576000u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{66, 3211998003u, 1050253722u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{67, 3211998003u, 1051931443u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{68, 3211998003u, 1053609165u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{69, 3211998003u, 1055286886u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{70, 3211998003u, 1056964608u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{71, 3211998003u, 1057803469u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{72, 3211998003u, 1058642330u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{73, 3211998003u, 1059481190u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{74, 3211998003u, 1060320051u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{75, 3211998003u, 1061158912u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{76, 3211998003u, 1061997773u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{77, 3211998003u, 1062836634u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{78, 3211998003u, 1063675494u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{79, 3211998003u, 1064514355u, 3220386611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{80, 3211159142u, 3212836864u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{81, 3211159142u, 3211998003u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{82, 3211159142u, 3211159142u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{83, 3211159142u, 3210320282u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{84, 3211159142u, 3209481421u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{85, 3211159142u, 3208642560u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{86, 3211159142u, 3207803699u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{87, 3211159142u, 3206964838u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{88, 3211159142u, 3206125978u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{89, 3211159142u, 3205287117u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{90, 3211159142u, 3204448256u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{91, 3211159142u, 3202770534u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{92, 3211159142u, 3201092813u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{93, 3211159142u, 3199415091u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{94, 3211159142u, 3197737370u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{95, 3211159142u, 3196059648u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{96, 3211159142u, 3192704205u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{97, 3211159142u, 3189348762u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{98, 3211159142u, 3184315597u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{99, 3211159142u, 3175926989u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{100, 3211159142u, 632815616u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{101, 3211159142u, 1028443341u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{102, 3211159142u, 1036831949u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{103, 3211159142u, 1041865114u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{104, 3211159142u, 1045220557u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{105, 3211159142u, 1048576000u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{106, 3211159142u, 1050253722u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{107, 3211159142u, 1051931443u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{108, 3211159142u, 1053609165u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{109, 3211159142u, 1055286886u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{110, 3211159142u, 1056964608u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{111, 3211159142u, 1057803469u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{112, 3211159142u, 1058642330u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{113, 3211159142u, 1059481190u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{114, 3211159142u, 1060320051u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{115, 3211159142u, 1061158912u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{116, 3211159142u, 1061997773u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{117, 3211159142u, 1062836634u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{118, 3211159142u, 1063675494u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{119, 3211159142u, 1064514355u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{120, 3210320282u, 3212836864u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{121, 3210320282u, 3211998003u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{122, 3210320282u, 3211159142u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{123, 3210320282u, 3210320282u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{124, 3210320282u, 3209481421u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{125, 3210320282u, 3208642560u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{126, 3210320282u, 3207803699u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{127, 3210320282u, 3206964838u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{128, 3210320282u, 3206125978u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{129, 3210320282u, 3205287117u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{130, 3210320282u, 3204448256u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{131, 3210320282u, 3202770534u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{132, 3210320282u, 3201092813u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{133, 3210320282u, 3199415091u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{134, 3210320282u, 3197737370u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{135, 3210320282u, 3196059648u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{136, 3210320282u, 3192704205u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{137, 3210320282u, 3189348762u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{138, 3210320282u, 3184315597u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{139, 3210320282u, 3175926989u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{140, 3210320282u, 632815616u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{141, 3210320282u, 1028443341u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{142, 3210320282u, 1036831949u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{143, 3210320282u, 1041865114u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{144, 3210320282u, 1045220557u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{145, 3210320282u, 1048576000u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{146, 3210320282u, 1050253722u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{147, 3210320282u, 1051931443u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{148, 3210320282u, 1053609165u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{149, 3210320282u, 1055286886u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{150, 3210320282u, 1056964608u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{151, 3210320282u, 1057803469u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{152, 3210320282u, 1058642330u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{153, 3210320282u, 1059481190u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{154, 3210320282u, 1060320051u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{155, 3210320282u, 1061158912u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{156, 3210320282u, 1061997773u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{157, 3210320282u, 1062836634u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{158, 3210320282u, 1063675494u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{159, 3210320282u, 1064514355u, 3218708890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{160, 3209481421u, 3212836864u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{161, 3209481421u, 3211998003u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{162, 3209481421u, 3211159142u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{163, 3209481421u, 3210320282u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{164, 3209481421u, 3209481421u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{165, 3209481421u, 3208642560u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{166, 3209481421u, 3207803699u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{167, 3209481421u, 3206964838u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{168, 3209481421u, 3206125978u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{169, 3209481421u, 3205287117u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{170, 3209481421u, 3204448256u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{171, 3209481421u, 3202770534u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{172, 3209481421u, 3201092813u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{173, 3209481421u, 3199415091u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{174, 3209481421u, 3197737370u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{175, 3209481421u, 3196059648u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{176, 3209481421u, 3192704205u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{177, 3209481421u, 3189348762u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{178, 3209481421u, 3184315597u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{179, 3209481421u, 3175926989u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{180, 3209481421u, 632815616u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{181, 3209481421u, 1028443341u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{182, 3209481421u, 1036831949u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{183, 3209481421u, 1041865114u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{184, 3209481421u, 1045220557u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{185, 3209481421u, 1048576000u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{186, 3209481421u, 1050253722u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{187, 3209481421u, 1051931443u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{188, 3209481421u, 1053609165u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{189, 3209481421u, 1055286886u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{190, 3209481421u, 1056964608u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{191, 3209481421u, 1057803469u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{192, 3209481421u, 1058642330u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{193, 3209481421u, 1059481190u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{194, 3209481421u, 1060320051u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{195, 3209481421u, 1061158912u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{196, 3209481421u, 1061997773u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{197, 3209481421u, 1062836634u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{198, 3209481421u, 1063675494u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{199, 3209481421u, 1064514355u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{200, 3208642560u, 3212836864u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{201, 3208642560u, 3211998003u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{202, 3208642560u, 3211159142u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{203, 3208642560u, 3210320282u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{204, 3208642560u, 3209481421u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{205, 3208642560u, 3208642560u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{206, 3208642560u, 3207803699u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{207, 3208642560u, 3206964838u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{208, 3208642560u, 3206125978u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{209, 3208642560u, 3205287117u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{210, 3208642560u, 3204448256u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{211, 3208642560u, 3202770534u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{212, 3208642560u, 3201092813u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{213, 3208642560u, 3199415091u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{214, 3208642560u, 3197737370u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{215, 3208642560u, 3196059648u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{216, 3208642560u, 3192704205u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{217, 3208642560u, 3189348762u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{218, 3208642560u, 3184315597u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{219, 3208642560u, 3175926989u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{220, 3208642560u, 632815616u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{221, 3208642560u, 1028443341u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{222, 3208642560u, 1036831949u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{223, 3208642560u, 1041865114u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{224, 3208642560u, 1045220557u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{225, 3208642560u, 1048576000u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{226, 3208642560u, 1050253722u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{227, 3208642560u, 1051931443u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{228, 3208642560u, 1053609165u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{229, 3208642560u, 1055286886u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{230, 3208642560u, 1056964608u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{231, 3208642560u, 1057803469u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{232, 3208642560u, 1058642330u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{233, 3208642560u, 1059481190u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{234, 3208642560u, 1060320051u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{235, 3208642560u, 1061158912u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{236, 3208642560u, 1061997773u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{237, 3208642560u, 1062836634u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{238, 3208642560u, 1063675494u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{239, 3208642560u, 1064514355u, 3217031168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{240, 3207803699u, 3212836864u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{241, 3207803699u, 3211998003u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{242, 3207803699u, 3211159142u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{243, 3207803699u, 3210320282u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{244, 3207803699u, 3209481421u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{245, 3207803699u, 3208642560u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{246, 3207803699u, 3207803699u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{247, 3207803699u, 3206964838u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{248, 3207803699u, 3206125978u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{249, 3207803699u, 3205287117u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{250, 3207803699u, 3204448256u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{251, 3207803699u, 3202770534u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{252, 3207803699u, 3201092813u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{253, 3207803699u, 3199415091u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{254, 3207803699u, 3197737370u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{255, 3207803699u, 3196059648u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{256, 3207803699u, 3192704205u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{257, 3207803699u, 3189348762u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{258, 3207803699u, 3184315597u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{259, 3207803699u, 3175926989u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{260, 3207803699u, 632815616u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{261, 3207803699u, 1028443341u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{262, 3207803699u, 1036831949u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{263, 3207803699u, 1041865114u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{264, 3207803699u, 1045220557u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{265, 3207803699u, 1048576000u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{266, 3207803699u, 1050253722u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{267, 3207803699u, 1051931443u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{268, 3207803699u, 1053609165u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{269, 3207803699u, 1055286886u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{270, 3207803699u, 1056964608u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{271, 3207803699u, 1057803469u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{272, 3207803699u, 1058642330u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{273, 3207803699u, 1059481190u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{274, 3207803699u, 1060320051u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{275, 3207803699u, 1061158912u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{276, 3207803699u, 1061997773u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{277, 3207803699u, 1062836634u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{278, 3207803699u, 1063675494u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{279, 3207803699u, 1064514355u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{280, 3206964838u, 3212836864u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{281, 3206964838u, 3211998003u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{282, 3206964838u, 3211159142u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{283, 3206964838u, 3210320282u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{284, 3206964838u, 3209481421u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{285, 3206964838u, 3208642560u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{286, 3206964838u, 3207803699u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{287, 3206964838u, 3206964838u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{288, 3206964838u, 3206125978u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{289, 3206964838u, 3205287117u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{290, 3206964838u, 3204448256u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{291, 3206964838u, 3202770534u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{292, 3206964838u, 3201092813u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{293, 3206964838u, 3199415091u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{294, 3206964838u, 3197737370u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{295, 3206964838u, 3196059648u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{296, 3206964838u, 3192704205u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{297, 3206964838u, 3189348762u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{298, 3206964838u, 3184315597u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{299, 3206964838u, 3175926989u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{300, 3206964838u, 632815616u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{301, 3206964838u, 1028443341u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{302, 3206964838u, 1036831949u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{303, 3206964838u, 1041865114u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{304, 3206964838u, 1045220557u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{305, 3206964838u, 1048576000u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{306, 3206964838u, 1050253722u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{307, 3206964838u, 1051931443u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{308, 3206964838u, 1053609165u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{309, 3206964838u, 1055286886u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{310, 3206964838u, 1056964608u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{311, 3206964838u, 1057803469u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{312, 3206964838u, 1058642330u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{313, 3206964838u, 1059481190u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{314, 3206964838u, 1060320051u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{315, 3206964838u, 1061158912u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{316, 3206964838u, 1061997773u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{317, 3206964838u, 1062836634u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{318, 3206964838u, 1063675494u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{319, 3206964838u, 1064514355u, 3215353446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{320, 3206125978u, 3212836864u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{321, 3206125978u, 3211998003u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{322, 3206125978u, 3211159142u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{323, 3206125978u, 3210320282u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{324, 3206125978u, 3209481421u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{325, 3206125978u, 3208642560u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{326, 3206125978u, 3207803699u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{327, 3206125978u, 3206964838u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{328, 3206125978u, 3206125978u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{329, 3206125978u, 3205287117u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{330, 3206125978u, 3204448256u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{331, 3206125978u, 3202770534u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{332, 3206125978u, 3201092813u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{333, 3206125978u, 3199415091u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{334, 3206125978u, 3197737370u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{335, 3206125978u, 3196059648u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{336, 3206125978u, 3192704205u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{337, 3206125978u, 3189348762u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{338, 3206125978u, 3184315597u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{339, 3206125978u, 3175926989u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{340, 3206125978u, 632815616u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{341, 3206125978u, 1028443341u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{342, 3206125978u, 1036831949u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{343, 3206125978u, 1041865114u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{344, 3206125978u, 1045220557u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{345, 3206125978u, 1048576000u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{346, 3206125978u, 1050253722u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{347, 3206125978u, 1051931443u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{348, 3206125978u, 1053609165u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{349, 3206125978u, 1055286886u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{350, 3206125978u, 1056964608u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{351, 3206125978u, 1057803469u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{352, 3206125978u, 1058642330u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{353, 3206125978u, 1059481190u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{354, 3206125978u, 1060320051u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{355, 3206125978u, 1061158912u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{356, 3206125978u, 1061997773u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{357, 3206125978u, 1062836634u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{358, 3206125978u, 1063675494u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{359, 3206125978u, 1064514355u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{360, 3205287117u, 3212836864u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{361, 3205287117u, 3211998003u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{362, 3205287117u, 3211159142u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{363, 3205287117u, 3210320282u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{364, 3205287117u, 3209481421u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{365, 3205287117u, 3208642560u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{366, 3205287117u, 3207803699u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{367, 3205287117u, 3206964838u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{368, 3205287117u, 3206125978u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{369, 3205287117u, 3205287117u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{370, 3205287117u, 3204448256u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{371, 3205287117u, 3202770534u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{372, 3205287117u, 3201092813u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{373, 3205287117u, 3199415091u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{374, 3205287117u, 3197737370u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{375, 3205287117u, 3196059648u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{376, 3205287117u, 3192704205u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{377, 3205287117u, 3189348762u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{378, 3205287117u, 3184315597u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{379, 3205287117u, 3175926989u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{380, 3205287117u, 632815616u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{381, 3205287117u, 1028443341u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{382, 3205287117u, 1036831949u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{383, 3205287117u, 1041865114u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{384, 3205287117u, 1045220557u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{385, 3205287117u, 1048576000u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{386, 3205287117u, 1050253722u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{387, 3205287117u, 1051931443u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{388, 3205287117u, 1053609165u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{389, 3205287117u, 1055286886u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{390, 3205287117u, 1056964608u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{391, 3205287117u, 1057803469u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{392, 3205287117u, 1058642330u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{393, 3205287117u, 1059481190u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{394, 3205287117u, 1060320051u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{395, 3205287117u, 1061158912u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{396, 3205287117u, 1061997773u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{397, 3205287117u, 1062836634u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{398, 3205287117u, 1063675494u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{399, 3205287117u, 1064514355u, 3213675725u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{400, 3204448256u, 3212836864u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{401, 3204448256u, 3211998003u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{402, 3204448256u, 3211159142u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{403, 3204448256u, 3210320282u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{404, 3204448256u, 3209481421u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{405, 3204448256u, 3208642560u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{406, 3204448256u, 3207803699u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{407, 3204448256u, 3206964838u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{408, 3204448256u, 3206125978u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{409, 3204448256u, 3205287117u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{410, 3204448256u, 3204448256u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{411, 3204448256u, 3202770534u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{412, 3204448256u, 3201092813u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{413, 3204448256u, 3199415091u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{414, 3204448256u, 3197737370u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{415, 3204448256u, 3196059648u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{416, 3204448256u, 3192704205u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{417, 3204448256u, 3189348762u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{418, 3204448256u, 3184315597u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{419, 3204448256u, 3175926989u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{420, 3204448256u, 632815616u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{421, 3204448256u, 1028443341u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{422, 3204448256u, 1036831949u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{423, 3204448256u, 1041865114u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{424, 3204448256u, 1045220557u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{425, 3204448256u, 1048576000u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{426, 3204448256u, 1050253722u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{427, 3204448256u, 1051931443u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{428, 3204448256u, 1053609165u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{429, 3204448256u, 1055286886u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{430, 3204448256u, 1056964608u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{431, 3204448256u, 1057803469u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{432, 3204448256u, 1058642330u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{433, 3204448256u, 1059481190u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{434, 3204448256u, 1060320051u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{435, 3204448256u, 1061158912u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{436, 3204448256u, 1061997773u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{437, 3204448256u, 1062836634u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{438, 3204448256u, 1063675494u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{439, 3204448256u, 1064514355u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{440, 3202770534u, 3212836864u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{441, 3202770534u, 3211998003u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{442, 3202770534u, 3211159142u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{443, 3202770534u, 3210320282u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{444, 3202770534u, 3209481421u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{445, 3202770534u, 3208642560u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{446, 3202770534u, 3207803699u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{447, 3202770534u, 3206964838u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{448, 3202770534u, 3206125978u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{449, 3202770534u, 3205287117u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{450, 3202770534u, 3204448256u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{451, 3202770534u, 3202770534u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{452, 3202770534u, 3201092813u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{453, 3202770534u, 3199415091u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{454, 3202770534u, 3197737370u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{455, 3202770534u, 3196059648u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{456, 3202770534u, 3192704205u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{457, 3202770534u, 3189348762u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{458, 3202770534u, 3184315597u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{459, 3202770534u, 3175926989u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{460, 3202770534u, 632815616u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{461, 3202770534u, 1028443341u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{462, 3202770534u, 1036831949u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{463, 3202770534u, 1041865114u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{464, 3202770534u, 1045220557u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{465, 3202770534u, 1048576000u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{466, 3202770534u, 1050253722u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{467, 3202770534u, 1051931443u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{468, 3202770534u, 1053609165u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{469, 3202770534u, 1055286886u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{470, 3202770534u, 1056964608u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{471, 3202770534u, 1057803469u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{472, 3202770534u, 1058642330u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{473, 3202770534u, 1059481190u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{474, 3202770534u, 1060320051u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{475, 3202770534u, 1061158912u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{476, 3202770534u, 1061997773u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{477, 3202770534u, 1062836634u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{478, 3202770534u, 1063675494u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{479, 3202770534u, 1064514355u, 3219547750u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{480, 3201092813u, 3212836864u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{481, 3201092813u, 3211998003u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{482, 3201092813u, 3211159142u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{483, 3201092813u, 3210320282u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{484, 3201092813u, 3209481421u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{485, 3201092813u, 3208642560u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{486, 3201092813u, 3207803699u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{487, 3201092813u, 3206964838u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{488, 3201092813u, 3206125978u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{489, 3201092813u, 3205287117u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{490, 3201092813u, 3204448256u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{491, 3201092813u, 3202770534u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{492, 3201092813u, 3201092813u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{493, 3201092813u, 3199415091u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{494, 3201092813u, 3197737370u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{495, 3201092813u, 3196059648u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{496, 3201092813u, 3192704205u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{497, 3201092813u, 3189348762u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{498, 3201092813u, 3184315597u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{499, 3201092813u, 3175926989u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{500, 3201092813u, 632815616u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{501, 3201092813u, 1028443341u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{502, 3201092813u, 1036831949u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{503, 3201092813u, 1041865114u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{504, 3201092813u, 1045220557u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{505, 3201092813u, 1048576000u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{506, 3201092813u, 1050253722u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{507, 3201092813u, 1051931443u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{508, 3201092813u, 1053609165u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{509, 3201092813u, 1055286886u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{510, 3201092813u, 1056964608u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{511, 3201092813u, 1057803469u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{512, 3201092813u, 1058642330u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{513, 3201092813u, 1059481190u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{514, 3201092813u, 1060320051u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{515, 3201092813u, 1061158912u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{516, 3201092813u, 1061997773u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{517, 3201092813u, 1062836634u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{518, 3201092813u, 1063675494u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{519, 3201092813u, 1064514355u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{520, 3199415091u, 3212836864u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{521, 3199415091u, 3211998003u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{522, 3199415091u, 3211159142u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{523, 3199415091u, 3210320282u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{524, 3199415091u, 3209481421u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{525, 3199415091u, 3208642560u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{526, 3199415091u, 3207803699u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{527, 3199415091u, 3206964838u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{528, 3199415091u, 3206125978u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{529, 3199415091u, 3205287117u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{530, 3199415091u, 3204448256u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{531, 3199415091u, 3202770534u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{532, 3199415091u, 3201092813u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{533, 3199415091u, 3199415091u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{534, 3199415091u, 3197737370u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{535, 3199415091u, 3196059648u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{536, 3199415091u, 3192704205u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{537, 3199415091u, 3189348762u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{538, 3199415091u, 3184315597u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{539, 3199415091u, 3175926989u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{540, 3199415091u, 632815616u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{541, 3199415091u, 1028443341u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{542, 3199415091u, 1036831949u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{543, 3199415091u, 1041865114u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{544, 3199415091u, 1045220557u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{545, 3199415091u, 1048576000u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{546, 3199415091u, 1050253722u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{547, 3199415091u, 1051931443u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{548, 3199415091u, 1053609165u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{549, 3199415091u, 1055286886u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{550, 3199415091u, 1056964608u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{551, 3199415091u, 1057803469u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{552, 3199415091u, 1058642330u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{553, 3199415091u, 1059481190u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{554, 3199415091u, 1060320051u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{555, 3199415091u, 1061158912u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{556, 3199415091u, 1061997773u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{557, 3199415091u, 1062836634u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{558, 3199415091u, 1063675494u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{559, 3199415091u, 1064514355u, 3216192307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{560, 3197737370u, 3212836864u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{561, 3197737370u, 3211998003u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{562, 3197737370u, 3211159142u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{563, 3197737370u, 3210320282u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{564, 3197737370u, 3209481421u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{565, 3197737370u, 3208642560u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{566, 3197737370u, 3207803699u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{567, 3197737370u, 3206964838u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{568, 3197737370u, 3206125978u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{569, 3197737370u, 3205287117u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{570, 3197737370u, 3204448256u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{571, 3197737370u, 3202770534u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{572, 3197737370u, 3201092813u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{573, 3197737370u, 3199415091u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{574, 3197737370u, 3197737370u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{575, 3197737370u, 3196059648u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{576, 3197737370u, 3192704205u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{577, 3197737370u, 3189348762u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{578, 3197737370u, 3184315597u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{579, 3197737370u, 3175926989u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{580, 3197737370u, 632815616u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{581, 3197737370u, 1028443341u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{582, 3197737370u, 1036831949u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{583, 3197737370u, 1041865114u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{584, 3197737370u, 1045220557u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{585, 3197737370u, 1048576000u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{586, 3197737370u, 1050253722u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{587, 3197737370u, 1051931443u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{588, 3197737370u, 1053609165u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{589, 3197737370u, 1055286886u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{590, 3197737370u, 1056964608u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{591, 3197737370u, 1057803469u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{592, 3197737370u, 1058642330u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{593, 3197737370u, 1059481190u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{594, 3197737370u, 1060320051u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{595, 3197737370u, 1061158912u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{596, 3197737370u, 1061997773u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{597, 3197737370u, 1062836634u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{598, 3197737370u, 1063675494u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{599, 3197737370u, 1064514355u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{600, 3196059648u, 3212836864u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{601, 3196059648u, 3211998003u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{602, 3196059648u, 3211159142u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{603, 3196059648u, 3210320282u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{604, 3196059648u, 3209481421u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{605, 3196059648u, 3208642560u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{606, 3196059648u, 3207803699u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{607, 3196059648u, 3206964838u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{608, 3196059648u, 3206125978u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{609, 3196059648u, 3205287117u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{610, 3196059648u, 3204448256u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{611, 3196059648u, 3202770534u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{612, 3196059648u, 3201092813u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{613, 3196059648u, 3199415091u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{614, 3196059648u, 3197737370u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{615, 3196059648u, 3196059648u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{616, 3196059648u, 3192704205u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{617, 3196059648u, 3189348762u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{618, 3196059648u, 3184315597u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{619, 3196059648u, 3175926989u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{620, 3196059648u, 632815616u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{621, 3196059648u, 1028443341u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{622, 3196059648u, 1036831949u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{623, 3196059648u, 1041865114u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{624, 3196059648u, 1045220557u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{625, 3196059648u, 1048576000u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{626, 3196059648u, 1050253722u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{627, 3196059648u, 1051931443u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{628, 3196059648u, 1053609165u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{629, 3196059648u, 1055286886u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{630, 3196059648u, 1056964608u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{631, 3196059648u, 1057803469u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{632, 3196059648u, 1058642330u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{633, 3196059648u, 1059481190u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{634, 3196059648u, 1060320051u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{635, 3196059648u, 1061158912u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{636, 3196059648u, 1061997773u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{637, 3196059648u, 1062836634u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{638, 3196059648u, 1063675494u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{639, 3196059648u, 1064514355u, 3212836864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{640, 3192704205u, 3212836864u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{641, 3192704205u, 3211998003u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{642, 3192704205u, 3211159142u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{643, 3192704205u, 3210320282u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{644, 3192704205u, 3209481421u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{645, 3192704205u, 3208642560u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{646, 3192704205u, 3207803699u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{647, 3192704205u, 3206964838u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{648, 3192704205u, 3206125978u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{649, 3192704205u, 3205287117u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{650, 3192704205u, 3204448256u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{651, 3192704205u, 3202770534u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{652, 3192704205u, 3201092813u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{653, 3192704205u, 3199415091u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{654, 3192704205u, 3197737370u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{655, 3192704205u, 3196059648u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{656, 3192704205u, 3192704205u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{657, 3192704205u, 3189348762u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{658, 3192704205u, 3184315597u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{659, 3192704205u, 3175926989u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{660, 3192704205u, 632815616u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{661, 3192704205u, 1028443341u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{662, 3192704205u, 1036831949u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{663, 3192704205u, 1041865114u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{664, 3192704205u, 1045220557u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{665, 3192704205u, 1048576000u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{666, 3192704205u, 1050253722u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{667, 3192704205u, 1051931443u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{668, 3192704205u, 1053609165u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{669, 3192704205u, 1055286886u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{670, 3192704205u, 1056964608u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{671, 3192704205u, 1057803469u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{672, 3192704205u, 1058642330u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{673, 3192704205u, 1059481190u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{674, 3192704205u, 1060320051u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{675, 3192704205u, 1061158912u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{676, 3192704205u, 1061997773u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{677, 3192704205u, 1062836634u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{678, 3192704205u, 1063675494u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{679, 3192704205u, 1064514355u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{680, 3189348762u, 3212836864u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{681, 3189348762u, 3211998003u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{682, 3189348762u, 3211159142u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{683, 3189348762u, 3210320282u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{684, 3189348762u, 3209481421u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{685, 3189348762u, 3208642560u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{686, 3189348762u, 3207803699u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{687, 3189348762u, 3206964838u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{688, 3189348762u, 3206125978u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{689, 3189348762u, 3205287117u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{690, 3189348762u, 3204448256u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{691, 3189348762u, 3202770534u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{692, 3189348762u, 3201092813u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{693, 3189348762u, 3199415091u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{694, 3189348762u, 3197737370u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{695, 3189348762u, 3196059648u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{696, 3189348762u, 3192704205u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{697, 3189348762u, 3189348762u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{698, 3189348762u, 3184315597u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{699, 3189348762u, 3175926989u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{700, 3189348762u, 632815616u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{701, 3189348762u, 1028443341u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{702, 3189348762u, 1036831949u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{703, 3189348762u, 1041865114u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{704, 3189348762u, 1045220557u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{705, 3189348762u, 1048576000u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{706, 3189348762u, 1050253722u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{707, 3189348762u, 1051931443u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{708, 3189348762u, 1053609165u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{709, 3189348762u, 1055286886u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{710, 3189348762u, 1056964608u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{711, 3189348762u, 1057803469u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{712, 3189348762u, 1058642330u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{713, 3189348762u, 1059481190u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{714, 3189348762u, 1060320051u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{715, 3189348762u, 1061158912u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{716, 3189348762u, 1061997773u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{717, 3189348762u, 1062836634u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{718, 3189348762u, 1063675494u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{719, 3189348762u, 1064514355u, 3214514586u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{720, 3184315597u, 3212836864u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{721, 3184315597u, 3211998003u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{722, 3184315597u, 3211159142u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{723, 3184315597u, 3210320282u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{724, 3184315597u, 3209481421u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{725, 3184315597u, 3208642560u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{726, 3184315597u, 3207803699u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{727, 3184315597u, 3206964838u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{728, 3184315597u, 3206125978u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{729, 3184315597u, 3205287117u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{730, 3184315597u, 3204448256u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{731, 3184315597u, 3202770534u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{732, 3184315597u, 3201092813u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{733, 3184315597u, 3199415091u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{734, 3184315597u, 3197737370u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{735, 3184315597u, 3196059648u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{736, 3184315597u, 3192704205u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{737, 3184315597u, 3189348762u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{738, 3184315597u, 3184315597u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{739, 3184315597u, 3175926989u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{740, 3184315597u, 632815616u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{741, 3184315597u, 1028443341u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{742, 3184315597u, 1036831949u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{743, 3184315597u, 1041865114u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{744, 3184315597u, 1045220557u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{745, 3184315597u, 1048576000u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{746, 3184315597u, 1050253722u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{747, 3184315597u, 1051931443u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{748, 3184315597u, 1053609165u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{749, 3184315597u, 1055286886u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{750, 3184315597u, 1056964608u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{751, 3184315597u, 1057803469u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{752, 3184315597u, 1058642330u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{753, 3184315597u, 1059481190u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{754, 3184315597u, 1060320051u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{755, 3184315597u, 1061158912u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{756, 3184315597u, 1061997773u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{757, 3184315597u, 1062836634u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{758, 3184315597u, 1063675494u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{759, 3184315597u, 1064514355u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{760, 3175926989u, 3212836864u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{761, 3175926989u, 3211998003u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{762, 3175926989u, 3211159142u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{763, 3175926989u, 3210320282u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{764, 3175926989u, 3209481421u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{765, 3175926989u, 3208642560u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{766, 3175926989u, 3207803699u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{767, 3175926989u, 3206964838u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{768, 3175926989u, 3206125978u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{769, 3175926989u, 3205287117u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{770, 3175926989u, 3204448256u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{771, 3175926989u, 3202770534u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{772, 3175926989u, 3201092813u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{773, 3175926989u, 3199415091u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{774, 3175926989u, 3197737370u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{775, 3175926989u, 3196059648u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{776, 3175926989u, 3192704205u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{777, 3175926989u, 3189348762u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{778, 3175926989u, 3184315597u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{779, 3175926989u, 3175926989u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{780, 3175926989u, 632815616u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{781, 3175926989u, 1028443341u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{782, 3175926989u, 1036831949u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{783, 3175926989u, 1041865114u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{784, 3175926989u, 1045220557u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{785, 3175926989u, 1048576000u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{786, 3175926989u, 1050253722u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{787, 3175926989u, 1051931443u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{788, 3175926989u, 1053609165u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{789, 3175926989u, 1055286886u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{790, 3175926989u, 1056964608u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{791, 3175926989u, 1057803469u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{792, 3175926989u, 1058642330u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{793, 3175926989u, 1059481190u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{794, 3175926989u, 1060320051u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{795, 3175926989u, 1061158912u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{796, 3175926989u, 1061997773u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{797, 3175926989u, 1062836634u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{798, 3175926989u, 1063675494u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{799, 3175926989u, 1064514355u, 3217870029u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{800, 1028443341u, 3212836864u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{801, 1028443341u, 3211998003u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{802, 1028443341u, 3211159142u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{803, 1028443341u, 3210320282u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{804, 1028443341u, 3209481421u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{805, 1028443341u, 3208642560u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{806, 1028443341u, 3207803699u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{807, 1028443341u, 3206964838u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{808, 1028443341u, 3206125978u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{809, 1028443341u, 3205287117u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{810, 1028443341u, 3204448256u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{811, 1028443341u, 3202770534u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{812, 1028443341u, 3201092813u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{813, 1028443341u, 3199415091u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{814, 1028443341u, 3197737370u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{815, 1028443341u, 3196059648u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{816, 1028443341u, 3192704205u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{817, 1028443341u, 3189348762u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{818, 1028443341u, 3184315597u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{819, 1028443341u, 3175926989u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{820, 1028443341u, 632815616u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{821, 1028443341u, 1028443341u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{822, 1028443341u, 1036831949u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{823, 1028443341u, 1041865114u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{824, 1028443341u, 1045220557u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{825, 1028443341u, 1048576000u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{826, 1028443341u, 1050253722u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{827, 1028443341u, 1051931443u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{828, 1028443341u, 1053609165u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{829, 1028443341u, 1055286886u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{830, 1028443341u, 1056964608u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{831, 1028443341u, 1057803469u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{832, 1028443341u, 1058642330u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{833, 1028443341u, 1059481190u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{834, 1028443341u, 1060320051u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{835, 1028443341u, 1061158912u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{836, 1028443341u, 1061997773u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{837, 1028443341u, 1062836634u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{838, 1028443341u, 1063675494u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{839, 1028443341u, 1064514355u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{840, 1036831949u, 3212836864u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{841, 1036831949u, 3211998003u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{842, 1036831949u, 3211159142u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{843, 1036831949u, 3210320282u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{844, 1036831949u, 3209481421u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{845, 1036831949u, 3208642560u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{846, 1036831949u, 3207803699u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{847, 1036831949u, 3206964838u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{848, 1036831949u, 3206125978u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{849, 1036831949u, 3205287117u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{850, 1036831949u, 3204448256u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{851, 1036831949u, 3202770534u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{852, 1036831949u, 3201092813u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{853, 1036831949u, 3199415091u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{854, 1036831949u, 3197737370u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{855, 1036831949u, 3196059648u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{856, 1036831949u, 3192704205u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{857, 1036831949u, 3189348762u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{858, 1036831949u, 3184315597u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{859, 1036831949u, 3175926989u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{860, 1036831949u, 632815616u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{861, 1036831949u, 1028443341u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{862, 1036831949u, 1036831949u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{863, 1036831949u, 1041865114u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{864, 1036831949u, 1045220557u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{865, 1036831949u, 1048576000u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{866, 1036831949u, 1050253722u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{867, 1036831949u, 1051931443u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{868, 1036831949u, 1053609165u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{869, 1036831949u, 1055286886u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{870, 1036831949u, 1056964608u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{871, 1036831949u, 1057803469u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{872, 1036831949u, 1058642330u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{873, 1036831949u, 1059481190u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{874, 1036831949u, 1060320051u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{875, 1036831949u, 1061158912u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{876, 1036831949u, 1061997773u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{877, 1036831949u, 1062836634u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{878, 1036831949u, 1063675494u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{879, 1036831949u, 1064514355u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{880, 1041865114u, 3212836864u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{881, 1041865114u, 3211998003u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{882, 1041865114u, 3211159142u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{883, 1041865114u, 3210320282u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{884, 1041865114u, 3209481421u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{885, 1041865114u, 3208642560u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{886, 1041865114u, 3207803699u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{887, 1041865114u, 3206964838u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{888, 1041865114u, 3206125978u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{889, 1041865114u, 3205287117u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{890, 1041865114u, 3204448256u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{891, 1041865114u, 3202770534u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{892, 1041865114u, 3201092813u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{893, 1041865114u, 3199415091u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{894, 1041865114u, 3197737370u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{895, 1041865114u, 3196059648u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{896, 1041865114u, 3192704205u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{897, 1041865114u, 3189348762u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{898, 1041865114u, 3184315597u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{899, 1041865114u, 3175926989u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{900, 1041865114u, 632815616u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{901, 1041865114u, 1028443341u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{902, 1041865114u, 1036831949u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{903, 1041865114u, 1041865114u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{904, 1041865114u, 1045220557u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{905, 1041865114u, 1048576000u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{906, 1041865114u, 1050253722u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{907, 1041865114u, 1051931443u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{908, 1041865114u, 1053609165u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{909, 1041865114u, 1055286886u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{910, 1041865114u, 1056964608u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{911, 1041865114u, 1057803469u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{912, 1041865114u, 1058642330u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{913, 1041865114u, 1059481190u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{914, 1041865114u, 1060320051u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{915, 1041865114u, 1061158912u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{916, 1041865114u, 1061997773u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{917, 1041865114u, 1062836634u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{918, 1041865114u, 1063675494u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{919, 1041865114u, 1064514355u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{920, 1045220557u, 3212836864u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{921, 1045220557u, 3211998003u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{922, 1045220557u, 3211159142u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{923, 1045220557u, 3210320282u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{924, 1045220557u, 3209481421u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{925, 1045220557u, 3208642560u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{926, 1045220557u, 3207803699u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{927, 1045220557u, 3206964838u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{928, 1045220557u, 3206125978u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{929, 1045220557u, 3205287117u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{930, 1045220557u, 3204448256u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{931, 1045220557u, 3202770534u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{932, 1045220557u, 3201092813u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{933, 1045220557u, 3199415091u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{934, 1045220557u, 3197737370u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{935, 1045220557u, 3196059648u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{936, 1045220557u, 3192704205u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{937, 1045220557u, 3189348762u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{938, 1045220557u, 3184315597u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{939, 1045220557u, 3175926989u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{940, 1045220557u, 632815616u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{941, 1045220557u, 1028443341u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{942, 1045220557u, 1036831949u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{943, 1045220557u, 1041865114u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{944, 1045220557u, 1045220557u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{945, 1045220557u, 1048576000u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{946, 1045220557u, 1050253722u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{947, 1045220557u, 1051931443u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{948, 1045220557u, 1053609165u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{949, 1045220557u, 1055286886u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{950, 1045220557u, 1056964608u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{951, 1045220557u, 1057803469u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{952, 1045220557u, 1058642330u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{953, 1045220557u, 1059481190u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{954, 1045220557u, 1060320051u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{955, 1045220557u, 1061158912u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{956, 1045220557u, 1061997773u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{957, 1045220557u, 1062836634u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{958, 1045220557u, 1063675494u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{959, 1045220557u, 1064514355u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{960, 1048576000u, 3212836864u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{961, 1048576000u, 3211998003u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{962, 1048576000u, 3211159142u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{963, 1048576000u, 3210320282u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{964, 1048576000u, 3209481421u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{965, 1048576000u, 3208642560u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{966, 1048576000u, 3207803699u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{967, 1048576000u, 3206964838u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{968, 1048576000u, 3206125978u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{969, 1048576000u, 3205287117u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{970, 1048576000u, 3204448256u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{971, 1048576000u, 3202770534u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{972, 1048576000u, 3201092813u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{973, 1048576000u, 3199415091u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{974, 1048576000u, 3197737370u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{975, 1048576000u, 3196059648u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{976, 1048576000u, 3192704205u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{977, 1048576000u, 3189348762u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{978, 1048576000u, 3184315597u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{979, 1048576000u, 3175926989u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{980, 1048576000u, 632815616u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{981, 1048576000u, 1028443341u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{982, 1048576000u, 1036831949u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{983, 1048576000u, 1041865114u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{984, 1048576000u, 1045220557u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{985, 1048576000u, 1048576000u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{986, 1048576000u, 1050253722u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{987, 1048576000u, 1051931443u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{988, 1048576000u, 1053609165u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{989, 1048576000u, 1055286886u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{990, 1048576000u, 1056964608u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{991, 1048576000u, 1057803469u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{992, 1048576000u, 1058642330u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{993, 1048576000u, 1059481190u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{994, 1048576000u, 1060320051u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{995, 1048576000u, 1061158912u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{996, 1048576000u, 1061997773u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{997, 1048576000u, 1062836634u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{998, 1048576000u, 1063675494u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{999, 1048576000u, 1064514355u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1000, 1050253722u, 3212836864u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1001, 1050253722u, 3211998003u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1002, 1050253722u, 3211159142u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1003, 1050253722u, 3210320282u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1004, 1050253722u, 3209481421u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1005, 1050253722u, 3208642560u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1006, 1050253722u, 3207803699u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1007, 1050253722u, 3206964838u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1008, 1050253722u, 3206125978u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1009, 1050253722u, 3205287117u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1010, 1050253722u, 3204448256u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1011, 1050253722u, 3202770534u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1012, 1050253722u, 3201092813u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1013, 1050253722u, 3199415091u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1014, 1050253722u, 3197737370u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1015, 1050253722u, 3196059648u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1016, 1050253722u, 3192704205u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1017, 1050253722u, 3189348762u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1018, 1050253722u, 3184315597u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1019, 1050253722u, 3175926989u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1020, 1050253722u, 632815616u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1021, 1050253722u, 1028443341u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1022, 1050253722u, 1036831949u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1023, 1050253722u, 1041865114u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1024, 1050253722u, 1045220557u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1025, 1050253722u, 1048576000u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1026, 1050253722u, 1050253722u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1027, 1050253722u, 1051931443u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1028, 1050253722u, 1053609165u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1029, 1050253722u, 1055286886u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1030, 1050253722u, 1056964608u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1031, 1050253722u, 1057803469u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1032, 1050253722u, 1058642330u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1033, 1050253722u, 1059481190u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1034, 1050253722u, 1060320051u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1035, 1050253722u, 1061158912u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1036, 1050253722u, 1061997773u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1037, 1050253722u, 1062836634u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1038, 1050253722u, 1063675494u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1039, 1050253722u, 1064514355u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1040, 1051931443u, 3212836864u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1041, 1051931443u, 3211998003u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1042, 1051931443u, 3211159142u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1043, 1051931443u, 3210320282u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1044, 1051931443u, 3209481421u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1045, 1051931443u, 3208642560u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1046, 1051931443u, 3207803699u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1047, 1051931443u, 3206964838u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1048, 1051931443u, 3206125978u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1049, 1051931443u, 3205287117u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1050, 1051931443u, 3204448256u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1051, 1051931443u, 3202770534u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1052, 1051931443u, 3201092813u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1053, 1051931443u, 3199415091u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1054, 1051931443u, 3197737370u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1055, 1051931443u, 3196059648u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1056, 1051931443u, 3192704205u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1057, 1051931443u, 3189348762u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1058, 1051931443u, 3184315597u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1059, 1051931443u, 3175926989u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1060, 1051931443u, 632815616u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1061, 1051931443u, 1028443341u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1062, 1051931443u, 1036831949u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1063, 1051931443u, 1041865114u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1064, 1051931443u, 1045220557u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1065, 1051931443u, 1048576000u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1066, 1051931443u, 1050253722u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1067, 1051931443u, 1051931443u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1068, 1051931443u, 1053609165u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1069, 1051931443u, 1055286886u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1070, 1051931443u, 1056964608u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1071, 1051931443u, 1057803469u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1072, 1051931443u, 1058642330u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1073, 1051931443u, 1059481190u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1074, 1051931443u, 1060320051u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1075, 1051931443u, 1061158912u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1076, 1051931443u, 1061997773u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1077, 1051931443u, 1062836634u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1078, 1051931443u, 1063675494u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1079, 1051931443u, 1064514355u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1080, 1053609165u, 3212836864u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1081, 1053609165u, 3211998003u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1082, 1053609165u, 3211159142u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1083, 1053609165u, 3210320282u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1084, 1053609165u, 3209481421u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1085, 1053609165u, 3208642560u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1086, 1053609165u, 3207803699u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1087, 1053609165u, 3206964838u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1088, 1053609165u, 3206125978u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1089, 1053609165u, 3205287117u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1090, 1053609165u, 3204448256u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1091, 1053609165u, 3202770534u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1092, 1053609165u, 3201092813u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1093, 1053609165u, 3199415091u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1094, 1053609165u, 3197737370u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1095, 1053609165u, 3196059648u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1096, 1053609165u, 3192704205u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1097, 1053609165u, 3189348762u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1098, 1053609165u, 3184315597u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1099, 1053609165u, 3175926989u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1100, 1053609165u, 632815616u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1101, 1053609165u, 1028443341u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1102, 1053609165u, 1036831949u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1103, 1053609165u, 1041865114u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1104, 1053609165u, 1045220557u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1105, 1053609165u, 1048576000u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1106, 1053609165u, 1050253722u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1107, 1053609165u, 1051931443u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1108, 1053609165u, 1053609165u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1109, 1053609165u, 1055286886u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1110, 1053609165u, 1056964608u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1111, 1053609165u, 1057803469u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1112, 1053609165u, 1058642330u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1113, 1053609165u, 1059481190u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1114, 1053609165u, 1060320051u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1115, 1053609165u, 1061158912u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1116, 1053609165u, 1061997773u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1117, 1053609165u, 1062836634u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1118, 1053609165u, 1063675494u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1119, 1053609165u, 1064514355u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1120, 1055286886u, 3212836864u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1121, 1055286886u, 3211998003u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1122, 1055286886u, 3211159142u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1123, 1055286886u, 3210320282u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1124, 1055286886u, 3209481421u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1125, 1055286886u, 3208642560u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1126, 1055286886u, 3207803699u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1127, 1055286886u, 3206964838u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1128, 1055286886u, 3206125978u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1129, 1055286886u, 3205287117u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1130, 1055286886u, 3204448256u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1131, 1055286886u, 3202770534u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1132, 1055286886u, 3201092813u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1133, 1055286886u, 3199415091u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1134, 1055286886u, 3197737370u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1135, 1055286886u, 3196059648u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1136, 1055286886u, 3192704205u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1137, 1055286886u, 3189348762u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1138, 1055286886u, 3184315597u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1139, 1055286886u, 3175926989u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1140, 1055286886u, 632815616u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1141, 1055286886u, 1028443341u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1142, 1055286886u, 1036831949u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1143, 1055286886u, 1041865114u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1144, 1055286886u, 1045220557u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1145, 1055286886u, 1048576000u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1146, 1055286886u, 1050253722u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1147, 1055286886u, 1051931443u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1148, 1055286886u, 1053609165u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1149, 1055286886u, 1055286886u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1150, 1055286886u, 1056964608u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1151, 1055286886u, 1057803469u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1152, 1055286886u, 1058642330u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1153, 1055286886u, 1059481190u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1154, 1055286886u, 1060320051u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1155, 1055286886u, 1061158912u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1156, 1055286886u, 1061997773u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1157, 1055286886u, 1062836634u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1158, 1055286886u, 1063675494u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1159, 1055286886u, 1064514355u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1160, 1056964608u, 3212836864u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1161, 1056964608u, 3211998003u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1162, 1056964608u, 3211159142u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1163, 1056964608u, 3210320282u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1164, 1056964608u, 3209481421u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1165, 1056964608u, 3208642560u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1166, 1056964608u, 3207803699u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1167, 1056964608u, 3206964838u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1168, 1056964608u, 3206125978u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1169, 1056964608u, 3205287117u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1170, 1056964608u, 3204448256u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1171, 1056964608u, 3202770534u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1172, 1056964608u, 3201092813u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1173, 1056964608u, 3199415091u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1174, 1056964608u, 3197737370u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1175, 1056964608u, 3196059648u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1176, 1056964608u, 3192704205u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1177, 1056964608u, 3189348762u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1178, 1056964608u, 3184315597u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1179, 1056964608u, 3175926989u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1180, 1056964608u, 632815616u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1181, 1056964608u, 1028443341u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1182, 1056964608u, 1036831949u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1183, 1056964608u, 1041865114u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1184, 1056964608u, 1045220557u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1185, 1056964608u, 1048576000u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1186, 1056964608u, 1050253722u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1187, 1056964608u, 1051931443u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1188, 1056964608u, 1053609165u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1189, 1056964608u, 1055286886u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1190, 1056964608u, 1056964608u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1191, 1056964608u, 1057803469u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1192, 1056964608u, 1058642330u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1193, 1056964608u, 1059481190u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1194, 1056964608u, 1060320051u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1195, 1056964608u, 1061158912u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1196, 1056964608u, 1061997773u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1197, 1056964608u, 1062836634u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1198, 1056964608u, 1063675494u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1199, 1056964608u, 1064514355u, 1065353216u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1200, 1057803469u, 3212836864u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1201, 1057803469u, 3211998003u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1202, 1057803469u, 3211159142u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1203, 1057803469u, 3210320282u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1204, 1057803469u, 3209481421u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1205, 1057803469u, 3208642560u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1206, 1057803469u, 3207803699u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1207, 1057803469u, 3206964838u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1208, 1057803469u, 3206125978u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1209, 1057803469u, 3205287117u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1210, 1057803469u, 3204448256u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1211, 1057803469u, 3202770534u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1212, 1057803469u, 3201092813u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1213, 1057803469u, 3199415091u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1214, 1057803469u, 3197737370u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1215, 1057803469u, 3196059648u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1216, 1057803469u, 3192704205u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1217, 1057803469u, 3189348762u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1218, 1057803469u, 3184315597u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1219, 1057803469u, 3175926989u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1220, 1057803469u, 632815616u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1221, 1057803469u, 1028443341u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1222, 1057803469u, 1036831949u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1223, 1057803469u, 1041865114u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1224, 1057803469u, 1045220557u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1225, 1057803469u, 1048576000u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1226, 1057803469u, 1050253722u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1227, 1057803469u, 1051931443u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1228, 1057803469u, 1053609165u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1229, 1057803469u, 1055286886u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1230, 1057803469u, 1056964608u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1231, 1057803469u, 1057803469u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1232, 1057803469u, 1058642330u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1233, 1057803469u, 1059481190u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1234, 1057803469u, 1060320051u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1235, 1057803469u, 1061158912u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1236, 1057803469u, 1061997773u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1237, 1057803469u, 1062836634u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1238, 1057803469u, 1063675494u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1239, 1057803469u, 1064514355u, 1066192077u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1240, 1058642330u, 3212836864u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1241, 1058642330u, 3211998003u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1242, 1058642330u, 3211159142u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1243, 1058642330u, 3210320282u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1244, 1058642330u, 3209481421u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1245, 1058642330u, 3208642560u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1246, 1058642330u, 3207803699u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1247, 1058642330u, 3206964838u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1248, 1058642330u, 3206125978u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1249, 1058642330u, 3205287117u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1250, 1058642330u, 3204448256u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1251, 1058642330u, 3202770534u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1252, 1058642330u, 3201092813u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1253, 1058642330u, 3199415091u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1254, 1058642330u, 3197737370u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1255, 1058642330u, 3196059648u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1256, 1058642330u, 3192704205u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1257, 1058642330u, 3189348762u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1258, 1058642330u, 3184315597u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1259, 1058642330u, 3175926989u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1260, 1058642330u, 632815616u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1261, 1058642330u, 1028443341u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1262, 1058642330u, 1036831949u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1263, 1058642330u, 1041865114u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1264, 1058642330u, 1045220557u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1265, 1058642330u, 1048576000u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1266, 1058642330u, 1050253722u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1267, 1058642330u, 1051931443u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1268, 1058642330u, 1053609165u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1269, 1058642330u, 1055286886u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1270, 1058642330u, 1056964608u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1271, 1058642330u, 1057803469u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1272, 1058642330u, 1058642330u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1273, 1058642330u, 1059481190u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1274, 1058642330u, 1060320051u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1275, 1058642330u, 1061158912u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1276, 1058642330u, 1061997773u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1277, 1058642330u, 1062836634u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1278, 1058642330u, 1063675494u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1279, 1058642330u, 1064514355u, 1067030938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1280, 1059481190u, 3212836864u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1281, 1059481190u, 3211998003u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1282, 1059481190u, 3211159142u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1283, 1059481190u, 3210320282u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1284, 1059481190u, 3209481421u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1285, 1059481190u, 3208642560u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1286, 1059481190u, 3207803699u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1287, 1059481190u, 3206964838u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1288, 1059481190u, 3206125978u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1289, 1059481190u, 3205287117u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1290, 1059481190u, 3204448256u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1291, 1059481190u, 3202770534u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1292, 1059481190u, 3201092813u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1293, 1059481190u, 3199415091u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1294, 1059481190u, 3197737370u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1295, 1059481190u, 3196059648u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1296, 1059481190u, 3192704205u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1297, 1059481190u, 3189348762u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1298, 1059481190u, 3184315597u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1299, 1059481190u, 3175926989u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1300, 1059481190u, 632815616u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1301, 1059481190u, 1028443341u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1302, 1059481190u, 1036831949u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1303, 1059481190u, 1041865114u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1304, 1059481190u, 1045220557u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1305, 1059481190u, 1048576000u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1306, 1059481190u, 1050253722u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1307, 1059481190u, 1051931443u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1308, 1059481190u, 1053609165u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1309, 1059481190u, 1055286886u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1310, 1059481190u, 1056964608u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1311, 1059481190u, 1057803469u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1312, 1059481190u, 1058642330u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1313, 1059481190u, 1059481190u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1314, 1059481190u, 1060320051u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1315, 1059481190u, 1061158912u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1316, 1059481190u, 1061997773u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1317, 1059481190u, 1062836634u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1318, 1059481190u, 1063675494u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1319, 1059481190u, 1064514355u, 1067869798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1320, 1060320051u, 3212836864u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1321, 1060320051u, 3211998003u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1322, 1060320051u, 3211159142u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1323, 1060320051u, 3210320282u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1324, 1060320051u, 3209481421u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1325, 1060320051u, 3208642560u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1326, 1060320051u, 3207803699u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1327, 1060320051u, 3206964838u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1328, 1060320051u, 3206125978u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1329, 1060320051u, 3205287117u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1330, 1060320051u, 3204448256u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1331, 1060320051u, 3202770534u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1332, 1060320051u, 3201092813u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1333, 1060320051u, 3199415091u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1334, 1060320051u, 3197737370u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1335, 1060320051u, 3196059648u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1336, 1060320051u, 3192704205u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1337, 1060320051u, 3189348762u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1338, 1060320051u, 3184315597u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1339, 1060320051u, 3175926989u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1340, 1060320051u, 632815616u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1341, 1060320051u, 1028443341u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1342, 1060320051u, 1036831949u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1343, 1060320051u, 1041865114u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1344, 1060320051u, 1045220557u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1345, 1060320051u, 1048576000u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1346, 1060320051u, 1050253722u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1347, 1060320051u, 1051931443u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1348, 1060320051u, 1053609165u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1349, 1060320051u, 1055286886u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1350, 1060320051u, 1056964608u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1351, 1060320051u, 1057803469u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1352, 1060320051u, 1058642330u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1353, 1060320051u, 1059481190u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1354, 1060320051u, 1060320051u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1355, 1060320051u, 1061158912u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1356, 1060320051u, 1061997773u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1357, 1060320051u, 1062836634u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1358, 1060320051u, 1063675494u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1359, 1060320051u, 1064514355u, 1068708659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1360, 1061158912u, 3212836864u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1361, 1061158912u, 3211998003u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1362, 1061158912u, 3211159142u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1363, 1061158912u, 3210320282u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1364, 1061158912u, 3209481421u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1365, 1061158912u, 3208642560u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1366, 1061158912u, 3207803699u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1367, 1061158912u, 3206964838u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1368, 1061158912u, 3206125978u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1369, 1061158912u, 3205287117u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1370, 1061158912u, 3204448256u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1371, 1061158912u, 3202770534u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1372, 1061158912u, 3201092813u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1373, 1061158912u, 3199415091u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1374, 1061158912u, 3197737370u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1375, 1061158912u, 3196059648u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1376, 1061158912u, 3192704205u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1377, 1061158912u, 3189348762u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1378, 1061158912u, 3184315597u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1379, 1061158912u, 3175926989u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1380, 1061158912u, 632815616u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1381, 1061158912u, 1028443341u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1382, 1061158912u, 1036831949u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1383, 1061158912u, 1041865114u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1384, 1061158912u, 1045220557u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1385, 1061158912u, 1048576000u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1386, 1061158912u, 1050253722u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1387, 1061158912u, 1051931443u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1388, 1061158912u, 1053609165u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1389, 1061158912u, 1055286886u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1390, 1061158912u, 1056964608u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1391, 1061158912u, 1057803469u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1392, 1061158912u, 1058642330u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1393, 1061158912u, 1059481190u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1394, 1061158912u, 1060320051u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1395, 1061158912u, 1061158912u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1396, 1061158912u, 1061997773u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1397, 1061158912u, 1062836634u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1398, 1061158912u, 1063675494u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1399, 1061158912u, 1064514355u, 1069547520u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1400, 1061997773u, 3212836864u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1401, 1061997773u, 3211998003u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1402, 1061997773u, 3211159142u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1403, 1061997773u, 3210320282u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1404, 1061997773u, 3209481421u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1405, 1061997773u, 3208642560u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1406, 1061997773u, 3207803699u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1407, 1061997773u, 3206964838u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1408, 1061997773u, 3206125978u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1409, 1061997773u, 3205287117u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1410, 1061997773u, 3204448256u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1411, 1061997773u, 3202770534u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1412, 1061997773u, 3201092813u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1413, 1061997773u, 3199415091u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1414, 1061997773u, 3197737370u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1415, 1061997773u, 3196059648u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1416, 1061997773u, 3192704205u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1417, 1061997773u, 3189348762u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1418, 1061997773u, 3184315597u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1419, 1061997773u, 3175926989u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1420, 1061997773u, 632815616u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1421, 1061997773u, 1028443341u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1422, 1061997773u, 1036831949u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1423, 1061997773u, 1041865114u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1424, 1061997773u, 1045220557u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1425, 1061997773u, 1048576000u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1426, 1061997773u, 1050253722u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1427, 1061997773u, 1051931443u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1428, 1061997773u, 1053609165u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1429, 1061997773u, 1055286886u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1430, 1061997773u, 1056964608u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1431, 1061997773u, 1057803469u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1432, 1061997773u, 1058642330u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1433, 1061997773u, 1059481190u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1434, 1061997773u, 1060320051u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1435, 1061997773u, 1061158912u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1436, 1061997773u, 1061997773u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1437, 1061997773u, 1062836634u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1438, 1061997773u, 1063675494u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1439, 1061997773u, 1064514355u, 1070386381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1440, 1062836634u, 3212836864u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1441, 1062836634u, 3211998003u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1442, 1062836634u, 3211159142u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1443, 1062836634u, 3210320282u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1444, 1062836634u, 3209481421u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1445, 1062836634u, 3208642560u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1446, 1062836634u, 3207803699u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1447, 1062836634u, 3206964838u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1448, 1062836634u, 3206125978u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1449, 1062836634u, 3205287117u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1450, 1062836634u, 3204448256u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1451, 1062836634u, 3202770534u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1452, 1062836634u, 3201092813u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1453, 1062836634u, 3199415091u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1454, 1062836634u, 3197737370u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1455, 1062836634u, 3196059648u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1456, 1062836634u, 3192704205u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1457, 1062836634u, 3189348762u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1458, 1062836634u, 3184315597u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1459, 1062836634u, 3175926989u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1460, 1062836634u, 632815616u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1461, 1062836634u, 1028443341u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1462, 1062836634u, 1036831949u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1463, 1062836634u, 1041865114u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1464, 1062836634u, 1045220557u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1465, 1062836634u, 1048576000u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1466, 1062836634u, 1050253722u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1467, 1062836634u, 1051931443u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1468, 1062836634u, 1053609165u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1469, 1062836634u, 1055286886u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1470, 1062836634u, 1056964608u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1471, 1062836634u, 1057803469u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1472, 1062836634u, 1058642330u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1473, 1062836634u, 1059481190u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1474, 1062836634u, 1060320051u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1475, 1062836634u, 1061158912u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1476, 1062836634u, 1061997773u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1477, 1062836634u, 1062836634u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1478, 1062836634u, 1063675494u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1479, 1062836634u, 1064514355u, 1071225242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1480, 1063675494u, 3212836864u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1481, 1063675494u, 3211998003u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1482, 1063675494u, 3211159142u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1483, 1063675494u, 3210320282u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1484, 1063675494u, 3209481421u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1485, 1063675494u, 3208642560u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1486, 1063675494u, 3207803699u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1487, 1063675494u, 3206964838u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1488, 1063675494u, 3206125978u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1489, 1063675494u, 3205287117u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1490, 1063675494u, 3204448256u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1491, 1063675494u, 3202770534u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1492, 1063675494u, 3201092813u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1493, 1063675494u, 3199415091u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1494, 1063675494u, 3197737370u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1495, 1063675494u, 3196059648u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1496, 1063675494u, 3192704205u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1497, 1063675494u, 3189348762u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1498, 1063675494u, 3184315597u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1499, 1063675494u, 3175926989u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1500, 1063675494u, 632815616u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1501, 1063675494u, 1028443341u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1502, 1063675494u, 1036831949u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1503, 1063675494u, 1041865114u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1504, 1063675494u, 1045220557u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1505, 1063675494u, 1048576000u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1506, 1063675494u, 1050253722u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1507, 1063675494u, 1051931443u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1508, 1063675494u, 1053609165u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1509, 1063675494u, 1055286886u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1510, 1063675494u, 1056964608u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1511, 1063675494u, 1057803469u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1512, 1063675494u, 1058642330u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1513, 1063675494u, 1059481190u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1514, 1063675494u, 1060320051u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1515, 1063675494u, 1061158912u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1516, 1063675494u, 1061997773u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1517, 1063675494u, 1062836634u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1518, 1063675494u, 1063675494u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1519, 1063675494u, 1064514355u, 1072064102u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1520, 1064514355u, 3212836864u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1521, 1064514355u, 3211998003u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1522, 1064514355u, 3211159142u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1523, 1064514355u, 3210320282u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1524, 1064514355u, 3209481421u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1525, 1064514355u, 3208642560u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1526, 1064514355u, 3207803699u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1527, 1064514355u, 3206964838u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1528, 1064514355u, 3206125978u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1529, 1064514355u, 3205287117u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1530, 1064514355u, 3204448256u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1531, 1064514355u, 3202770534u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1532, 1064514355u, 3201092813u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1533, 1064514355u, 3199415091u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1534, 1064514355u, 3197737370u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1535, 1064514355u, 3196059648u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1536, 1064514355u, 3192704205u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1537, 1064514355u, 3189348762u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1538, 1064514355u, 3184315597u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1539, 1064514355u, 3175926989u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1540, 1064514355u, 632815616u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1541, 1064514355u, 1028443341u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1542, 1064514355u, 1036831949u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1543, 1064514355u, 1041865114u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1544, 1064514355u, 1045220557u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1545, 1064514355u, 1048576000u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1546, 1064514355u, 1050253722u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1547, 1064514355u, 1051931443u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1548, 1064514355u, 1053609165u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1549, 1064514355u, 1055286886u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1550, 1064514355u, 1056964608u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1551, 1064514355u, 1057803469u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1552, 1064514355u, 1058642330u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1553, 1064514355u, 1059481190u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1554, 1064514355u, 1060320051u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1555, 1064514355u, 1061158912u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1556, 1064514355u, 1061997773u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1557, 1064514355u, 1062836634u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1558, 1064514355u, 1063675494u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1559, 1064514355u, 1064514355u, 1072902963u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1560, 1107800421u, 1203999711u, 1065857381u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1561, 3196650934u, 896005582u, 3213428150u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1562, 3368700125u, 3308232444u, 3217705181u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1563, 1224242132u, 3061363425u, 1073247188u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1564, 1198712763u, 919636942u, 1072883643u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1565, 3159309973u, 852521077u, 3218030229u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1566, 954173073u, 850531830u, 1071613585u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1567, 3090780435u, 1035260608u, 3216609555u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1568, 966554515u, 3234538174u, 1067217811u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1569, 1312607135u, 1194999402u, 1069337503u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1570, 1166191415u, 1018661564u, 1065528119u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1571, 3111900019u, 1130472166u, 3220951923u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1572, 1234419246u, 2984575812u, 1066647086u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1573, 1302107128u, 3370647675u, 1067226104u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1574, 1052801068u, 3039122570u, 1069578284u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1575, 1060849628u, 3081357692u, 1069238236u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1576, 3484320003u, 3033957825u, 3215884547u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1577, 3181522772u, 3305392896u, 3215077204u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1578, 1167223673u, 846102364u, 1066560377u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1579, 968192794u, 878547432u, 1068856090u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1580, 3122346862u, 1111584337u, 3214621550u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1581, 906701409u, 2968301825u, 1066084961u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1582, 3471653172u, 1154138102u, 3219994932u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1583, 3231467496u, 934336592u, 3214690280u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1584, 1341514497u, 3466051188u, 1073079041u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1585, 1272351391u, 3373485062u, 1071024799u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1586, 3319724992u, 3354615790u, 3219061696u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1587, 940236348u, 3304072663u, 1066065468u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1588, 3251541546u, 3174764041u, 3217987114u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1589, 3099843889u, 3355962282u, 3217284401u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1590, 3110358400u, 851145088u, 3219410304u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1591, 3371863479u, 1014861921u, 3220868535u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1592, 3204069187u, 966573255u, 3220846403u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1593, 1306460502u, 903489435u, 1071579478u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1594, 1197542187u, 3024598921u, 1071713067u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1595, 1184239996u, 3224098462u, 1066799484u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1596, 1252490238u, 1173619825u, 1067940862u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1597, 1001673627u, 3462631271u, 1068782491u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1598, 976098044u, 1151967422u, 1068372732u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1599, 941796645u, 886451963u, 1067625765u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1600, 3287199470u, 854245542u, 3220090606u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1601, 1143233714u, 1007268238u, 1067736242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1602, 1139941253u, 1147688821u, 1072832389u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1603, 3143717025u, 3234638157u, 3219214497u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1604, 3048866608u, 3449209899u, 3216638768u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1605, 3240298487u, 1020260821u, 3215132663u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1606, 1288902137u, 3123875978u, 1070798329u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1607, 1333134799u, 1338107877u, 1073087951u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1608, 1187847971u, 1317663644u, 1070407459u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1609, 3329354473u, 3165437289u, 3220302569u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1610, 1309289088u, 1019883016u, 1066019456u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1611, 3444653659u, 1279248024u, 3218161243u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1612, 3405585402u, 2962345057u, 3221036026u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1613, 3106647724u, 853848387u, 3215699628u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1614, 1106778573u, 3304487767u, 1073224141u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1615, 1140567947u, 3069174149u, 1073459083u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1616, 1238569473u, 873035665u, 1070797313u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1617, 1261071232u, 1182202773u, 1068133248u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1618, 1175011025u, 3029705783u, 1065959121u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1619, 1082692850u, 1211581107u, 1065915634u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1620, 974547519u, 3475164509u, 1066822207u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1621, 3058097085u, 3104309359u, 3217480637u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1622, 3107252546u, 1071134451u, 3216304450u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1623, 3096032662u, 2976848821u, 3213473174u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1624, 3197942144u, 3094120030u, 3214719360u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1625, 3403348556u, 3184653669u, 3218799180u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1626, 3182301130u, 3460764044u, 3215855562u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1627, 1136411063u, 1118097422u, 1069302199u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1628, 3239231622u, 3302723069u, 3214065798u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1629, 3340615780u, 870350055u, 3214786660u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1630, 998567360u, 2995278691u, 1065676224u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1631, 3417964312u, 1321337529u, 3216637720u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1632, 3109481038u, 1143864063u, 3218532942u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1633, 1148867223u, 1256486202u, 1073369751u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1634, 989687421u, 3372681320u, 1073573501u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1635, 1152956913u, 3166480640u, 1069070833u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1636, 892922651u, 3373029087u, 1069083419u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1637, 1307091856u, 1103202538u, 1072210832u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1638, 1077234132u, 3272167130u, 1068845524u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1639, 1142167709u, 1096445242u, 1066670237u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1640, 3426232834u, 1036705270u, 3216517634u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1641, 3368566779u, 967249167u, 3217571835u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1642, 3030724760u, 3349013503u, 3215274136u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1643, 1138741813u, 3073453199u, 1071632949u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1644, 982950501u, 982549888u, 1066836581u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1645, 1142981585u, 1015602236u, 1067484113u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1646, 3347165962u, 3135486696u, 3212948234u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1647, 1009535440u, 3381353228u, 1068255696u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1648, 3103736980u, 3402950505u, 3221177492u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1649, 3126820946u, 1077903063u, 3219095634u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1650, 3473956030u, 976891930u, 3213909182u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1651, 3349098349u, 1055327704u, 3214880621u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1652, 3152729489u, 1060398533u, 3219838353u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1653, 945568720u, 3313485084u, 1071397840u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1654, 3345489836u, 1108392401u, 3219660716u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1655, 976791751u, 3230678102u, 1069066439u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1656, 1004442355u, 3036510596u, 1071551219u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1657, 1108485380u, 3173536878u, 1066542340u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1658, 1061834641u, 972388096u, 1070223249u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1659, 3381268392u, 1146976802u, 3213496232u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1660, 1087189715u, 2952822478u, 1070412499u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1661, 3212952285u, 3329407365u, 3212952285u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1662, 1000611335u, 857599439u, 1067720199u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1663, 3466188568u, 1041678304u, 3214530328u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1664, 3072456205u, 3160254633u, 3215062541u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1665, 3319315516u, 3422089012u, 3218652220u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1666, 3212614372u, 1152633030u, 3221002980u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1667, 1315030230u, 3336225884u, 1071760598u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1668, 1134593658u, 3456812581u, 1067484794u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1669, 977281449u, 879922831u, 1069556137u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1670, 1086198791u, 920125958u, 1069421575u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1671, 1255152035u, 851754050u, 1070602659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1672, 1135271264u, 3284878412u, 1068162400u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1673, 1094190727u, 1056854532u, 1069024903u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1674, 1294665325u, 991185677u, 1068172909u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1675, 1036608591u, 805416536u, 1070163023u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1676, 3229998064u, 825237063u, 3213220848u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1677, 3439134022u, 1043829691u, 3221030214u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1678, 1325668223u, 970681762u, 1065621375u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1679, 1092037607u, 1027330835u, 1066871783u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1680, 3316278408u, 3455589207u, 3215615112u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1681, 3295436768u, 3129873731u, 3219939296u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1682, 1151984049u, 3074547120u, 1068097969u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1683, 1129287043u, 3076527544u, 1070566787u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1684, 1243664530u, 972879810u, 1067503762u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1685, 950829092u, 929114193u, 1068269604u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1686, 1115471979u, 3047246262u, 1073528939u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1687, 3351092088u, 3024661404u, 3216874360u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1688, 3424479544u, 3312047722u, 3214764344u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1689, 3241193975u, 884465785u, 3216028151u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1690, 1030934236u, 1045139240u, 1072877276u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1691, 3131791114u, 3408392958u, 3215677194u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1692, 1025254314u, 3057812821u, 1067197354u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1693, 1110545760u, 3240144177u, 1068602720u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1694, 3180213739u, 1108793820u, 3213768171u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1695, 3361976590u, 3138179993u, 3219370254u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1696, 881280146u, 3421884736u, 1065829522u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1697, 1304154705u, 2961937089u, 1069273681u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1698, 3264443610u, 3222916705u, 3214111962u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1699, 3374550627u, 3055856293u, 3215167075u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1700, 899599265u, 3240118211u, 1067371425u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1701, 1268194719u, 1332489410u, 1066868127u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1702, 1133420220u, 1245770860u, 1066311356u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1703, 1161858787u, 815362075u, 1069584099u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1704, 3295996963u, 3453334307u, 3220499491u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1705, 1270887389u, 1156123987u, 1069560797u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1706, 3325193181u, 993979179u, 3216141277u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1707, 3115275450u, 3008350271u, 3215938746u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1708, 3116607482u, 3224327456u, 3217270778u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1709, 3187892415u, 3118097315u, 3213058239u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1710, 1189120494u, 978961471u, 1071679982u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1711, 889030794u, 3129523970u, 1073580170u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1712, 1323529208u, 3100744786u, 1071870968u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1713, 3465768388u, 3190881451u, 3214110148u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1714, 3426099899u, 1118756120u, 3216384699u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1715, 3224857113u, 3398166843u, 3216468505u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1716, 1065798296u, 816191940u, 1065798296u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1717, 3328989444u, 850266225u, 3219937540u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1718, 3357819026u, 3148475462u, 3215212690u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1719, 1273397670u, 901308750u, 1072071078u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1720, 3424831780u, 1304806106u, 3215116580u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1721, 1257596246u, 3420832544u, 1073046870u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1722, 1051773536u, 896271348u, 1068550752u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1723, 3294752507u, 3113225954u, 3219255035u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1724, 3424848725u, 2973850350u, 3215133525u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1725, 1090870906u, 3294742905u, 1065705082u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1726, 1227582289u, 1208979668u, 1068198737u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1727, 1272325814u, 3004311296u, 1070999222u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1728, 3359508271u, 859974315u, 3216901935u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1729, 1137854355u, 3335041917u, 1070745491u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1730, 3440773058u, 3204192793u, 3214280642u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1731, 3101598400u, 3057760708u, 3219038912u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1732, 3451216836u, 3347783723u, 3216335812u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1733, 3437062994u, 3106834845u, 3218959186u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1734, 1131196082u, 1164573183u, 1072475826u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1735, 3460915348u, 1219372260u, 3217645716u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1736, 3303035472u, 3153013020u, 3219149392u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1737, 1053698677u, 3284313107u, 1070475893u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1738, 3396166221u, 1201894512u, 3220005453u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1739, 3458934263u, 1005577835u, 3215664631u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1740, 1065761827u, 3333928591u, 1065761827u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1741, 3025843188u, 820250112u, 3218781172u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1742, 926665223u, 3150815797u, 1069271559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1743, 1199816046u, 3143776186u, 1065598318u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1744, 3333779015u, 952421041u, 3216338503u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1745, 948398145u, 3238273189u, 1065838657u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1746, 1080781593u, 1213908300u, 1072392985u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1747, 3164749613u, 3010837763u, 3215081261u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1748, 3235326590u, 1271705594u, 3218549374u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1749, 3118883815u, 1051802647u, 3219547111u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1750, 3226990408u, 1110755136u, 3218601800u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1751, 3117098218u, 1122474770u, 3217761514u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1752, 1283624229u, 906796922u, 1065520421u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1753, 970649315u, 1078286437u, 1071312611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1754, 959776291u, 3280345347u, 1068828195u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1755, 3341117305u, 3294559023u, 3215288185u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1756, 1270734970u, 3355874874u, 1069408378u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1757, 3454816067u, 868771977u, 3219935043u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1758, 1106502045u, 1290849316u, 1072947613u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1759, 1157598381u, 3309023746u, 1073712301u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1760, 3335234513u, 1002337336u, 3217794001u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1761, 1279489061u, 1006049444u, 1069773861u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1762, 3143920719u, 3131608518u, 3219418191u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1763, 1233171235u, 826460580u, 1065399075u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1764, 1148920078u, 1007674793u, 1073422606u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1765, 3064988156u, 3230867340u, 3215983100u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1766, 1109198803u, 1221754614u, 1067255763u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1767, 3219949483u, 1056167693u, 3219949483u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1768, 3361149474u, 3387342069u, 3218543138u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1769, 1207502108u, 3388073586u, 1073284380u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1770, 1000014431u, 831213088u, 1067123295u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1771, 3161756316u, 3143659754u, 3220476572u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1772, 3160728744u, 3382954009u, 3219449000u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1773, 1234530539u, 1079988872u, 1066758379u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1774, 1017843965u, 1193076204u, 1068175613u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1775, 3306328852u, 1118701064u, 3214054164u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1776, 1291910469u, 1211303367u, 1065418053u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1777, 1131927531u, 3182962700u, 1073207275u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1778, 3449879391u, 991614550u, 3214998367u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1779, 970094304u, 3344590506u, 1070757600u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1780, 1125551064u, 3331248076u, 1066830808u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1781, 3427296372u, 3455289118u, 3217581172u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1782, 1198917460u, 1327195159u, 1073088340u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1783, 3201603336u, 820047343u, 3218380552u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1784, 3114686212u, 3476082461u, 3215349508u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1785, 921940707u, 2967544056u, 1072935651u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1786, 1091906532u, 3011904455u, 1066740708u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1787, 3393557778u, 3383396815u, 3217397010u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1788, 1276853215u, 873199561u, 1067138015u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1789, 3462778440u, 3349284325u, 3219508808u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1790, 3360170117u, 3048354042u, 3217563781u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1791, 3224245428u, 3271307999u, 3215856820u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1792, 1120124467u, 1135619937u, 1069792819u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1793, 1064364381u, 3180675544u, 1072752989u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1794, 1268744779u, 3328452652u, 1067418187u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1795, 1165195428u, 3390323168u, 1072920740u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1796, 3247790039u, 909788142u, 3214235607u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1797, 3215244648u, 1083988595u, 3215244648u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1798, 3095275931u, 989153382u, 3221105051u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1799, 1212717473u, 837873779u, 1070111137u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1800, 3275973009u, 3450721670u, 3217252753u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1801, 3028857014u, 3188853813u, 3213406390u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1802, 3391162308u, 1291220039u, 3215001540u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1803, 1044867873u, 3369493273u, 1070033697u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1804, 1089986803u, 3462160118u, 1073209587u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1805, 1296314700u, 2957454177u, 1069822284u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1806, 1251462432u, 3171021770u, 1066913056u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1807, 3485236902u, 980772835u, 3216801446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1808, 3262169538u, 1268270462u, 3220226498u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1809, 3080852256u, 994641495u, 3215069984u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1810, 1022211242u, 922124181u, 1072542890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1811, 884661176u, 2985540645u, 1069210552u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1812, 3071422941u, 3271100396u, 3214029277u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1813, 989762529u, 3362011135u, 1073648609u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1814, 1295475718u, 3212305413u, 1068983302u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1815, 1002632518u, 3330388441u, 1069741382u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1816, 3404372005u, 3450484255u, 3219822629u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1817, 3158912530u, 3105501826u, 3217632786u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1818, 1125800069u, 3256265749u, 1067079813u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1819, 3138037576u, 3103365227u, 3213535048u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1820, 999985470u, 3409354318u, 1067094334u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1821, 1189421739u, 1056599002u, 1071981227u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1822, 3075182644u, 3144159778u, 3217788980u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1823, 3028099649u, 3391513557u, 3221037633u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1824, 3132541814u, 3444521949u, 3216427894u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1825, 1164046161u, 3440635788u, 1071771473u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1826, 1292596266u, 3116569667u, 1066103850u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1827, 3469748379u, 3412765608u, 3218090139u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1828, 1314644642u, 3123051784u, 1071375010u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1829, 3399813173u, 828743798u, 3215263797u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1830, 948775569u, 3485444126u, 1066216081u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1831, 1034611395u, 882288581u, 1068165827u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1832, 3489122735u, 3372450889u, 3220687279u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1833, 1181604787u, 3363067409u, 1072552883u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1834, 3059042077u, 3204983963u, 3218425629u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1835, 1043691622u, 3402603223u, 1068857446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1836, 1314588083u, 856187848u, 1071318451u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1837, 3141533334u, 3010142974u, 3217030806u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1838, 3157534378u, 3451674717u, 3216254634u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1839, 3400949680u, 3073750220u, 3216400304u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1840, 3365581801u, 1175843167u, 3214586857u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1841, 1110424755u, 3011308654u, 1068481715u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1842, 3189917167u, 927278934u, 3215082991u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1843, 969804941u, 3355439348u, 1070468237u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1844, 1139120919u, 3270515074u, 1072012055u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1845, 934308144u, 3118191228u, 1068525872u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1846, 1220524226u, 1152648002u, 1069529282u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1847, 3162548604u, 3461790298u, 3212880252u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1848, 3382391700u, 3296962745u, 3214619540u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1849, 1156767533u, 1088986462u, 1072881453u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1850, 3079222483u, 3312324949u, 3213440211u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1851, 994934087u, 967678094u, 1070431559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1852, 3185240099u, 1123403720u, 3218794531u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1853, 3479873563u, 1246277393u, 3219826715u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1854, 3424264117u, 3434026174u, 3214548917u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1855, 3228365887u, 1216775310u, 3219977279u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1856, 1212129651u, 3017366784u, 1069523315u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1857, 3125775254u, 955826310u, 3218049942u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1858, 1037464105u, 3121544932u, 1071018537u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1859, 1311706596u, 1254918706u, 1068436964u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1860, 918212457u, 1017468331u, 1069207401u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1861, 1337315179u, 3461361185u, 1068879723u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1862, 1131358407u, 3325958870u, 1072638151u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1863, 1156517523u, 3343716230u, 1072631443u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1864, 3210802820u, 3207408574u, 3219191428u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1865, 3337499209u, 1226297264u, 3220058697u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1866, 3468429030u, 3253874001u, 3216770790u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1867, 3253515800u, 1189005947u, 3219961368u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1868, 3055299953u, 3047908678u, 3214683505u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1869, 959956547u, 876324728u, 1069008451u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1870, 3425290480u, 1139193797u, 3215575280u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1871, 1039917375u, 1122740999u, 1073471807u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1872, 3220979495u, 3429223871u, 3220979495u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1873, 1311016004u, 3334899880u, 1067746372u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1874, 1128016396u, 1105151547u, 1069296140u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1875, 3210335769u, 3100646155u, 3218724377u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1876, 3022705759u, 3404762495u, 3215643743u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1877, 1206054701u, 826010009u, 1071836973u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1878, 3144504834u, 1162227076u, 3220002306u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1879, 1213609983u, 919983950u, 1071003647u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1880, 1246902946u, 3064047808u, 1070742178u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1881, 3362082828u, 3374056268u, 3219476492u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1882, 1029480631u, 3047777170u, 1071423671u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1883, 3153568584u, 3106514232u, 3220677448u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1884, 3384988527u, 3109485565u, 3217216367u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1885, 1317696241u, 870681806u, 1066038001u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1886, 3235395924u, 1132055244u, 3218618708u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1887, 3341877624u, 2969495570u, 3216048504u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1888, 1228636133u, 886552820u, 1069252581u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1889, 3161654634u, 3335899347u, 3220374890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1890, 3162655243u, 3307203982u, 3212986891u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1891, 1207246237u, 859223639u, 1073028509u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1892, 1165476654u, 3350219111u, 1073201966u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1893, 1215278023u, 3019755242u, 1072671687u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1894, 1017239798u, 3438501281u, 1067571446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1895, 1149651309u, 970030475u, 1065765229u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1896, 1111943722u, 3122211334u, 1070000682u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1897, 1189849849u, 3382739134u, 1072409337u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1898, 3204848496u, 3141519085u, 3213237104u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1899, 1249758327u, 3104759211u, 1073597559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1900, 3092982276u, 3445282331u, 3218811396u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1901, 1168098747u, 1316854744u, 1067435451u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1902, 3301009024u, 3406174560u, 3217122944u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1903, 3233089227u, 1212652543u, 3216312011u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1904, 3218245284u, 1238873830u, 3218245284u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1905, 3215981890u, 3240474694u, 3215981890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1906, 1266687209u, 3092038122u, 1065360617u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1907, 3487959775u, 3331372071u, 3219524319u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1908, 943645710u, 852875779u, 1069474830u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1909, 3345065699u, 3282620725u, 3219236579u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1910, 935847271u, 1067255804u, 1070064999u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1911, 3410336089u, 1111437780u, 3217398105u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1912, 1141063391u, 1168908072u, 1065565919u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1913, 3059263153u, 3067795684u, 3218646705u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1914, 3353679791u, 897158391u, 3219462063u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1915, 1001823878u, 1016826861u, 1068932742u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1916, 1009130212u, 1004302940u, 1067850468u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1917, 3367127535u, 943136342u, 3216132591u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1918, 1032920919u, 3449126417u, 1066475351u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1919, 3281952870u, 3147012185u, 3214844006u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1920, 1237868497u, 3048281802u, 1070096337u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1921, 1153753924u, 3322269242u, 1069867844u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1922, 1120261759u, 892210998u, 1069930111u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1923, 3226328360u, 3366432856u, 3217939752u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1924, 3349595986u, 3251588707u, 3215378258u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1925, 3166889490u, 3306023523u, 3217221138u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1926, 1087750238u, 1099325523u, 1070973022u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1927, 3121620061u, 3359488363u, 3213894749u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1928, 1066116543u, 3072159933u, 1066116543u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1929, 3210898034u, 2981803389u, 3219286642u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1930, 3051923237u, 3364074347u, 3219695397u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1931, 1030612298u, 3345396001u, 1072555338u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1932, 1186234578u, 858134374u, 1068794066u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1933, 1331680743u, 1009396165u, 1071633895u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1934, 1045232522u, 3234993273u, 1070398346u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1935, 3119858470u, 962515365u, 3220521766u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1936, 3349432725u, 928848003u, 3215214997u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1937, 912423027u, 3184646319u, 1071806579u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1938, 3228795133u, 3273940030u, 3220406525u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1939, 3194674746u, 3112269709u, 3219840570u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1940, 3296784303u, 3276182352u, 3212898223u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1941, 965402291u, 3107104376u, 1066065587u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1942, 3388153589u, 3426245389u, 3220381429u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1943, 1133410485u, 3329658993u, 1066301621u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1944, 3136790322u, 1088652637u, 3220676402u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1945, 3369970587u, 959121458u, 3218975643u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1946, 1270451568u, 928393353u, 1069124976u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1947, 989498922u, 3088358419u, 1073385002u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1948, 1280215674u, 3148135875u, 1070500474u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1949, 1171873518u, 954709738u, 1071210222u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1950, 3298258100u, 935525182u, 3214372020u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1951, 3415208824u, 822843236u, 3213882232u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1952, 1001897182u, 3191875320u, 1069006046u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1953, 3152777939u, 3245830463u, 3219886803u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1954, 985903305u, 3333087577u, 1069789385u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1955, 3357328848u, 859306298u, 3214722512u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1956, 982612185u, 923582663u, 1066498265u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1957, 3267868136u, 1208301947u, 3217536488u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1958, 3319048157u, 1172271145u, 3218384861u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1959, 1144755661u, 860947435u, 1069258189u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1960, 898467286u, 839254959u, 1066239446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1961, 3301461672u, 1233693827u, 3217575592u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1962, 3364525678u, 3089849671u, 3213530734u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1963, 3146660041u, 3143695961u, 3213768905u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1964, 3467121799u, 3023584354u, 3215463559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1965, 1151257041u, 3084216427u, 1067370961u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1966, 3097873255u, 3219266640u, 3215313767u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1967, 3130670309u, 3192399254u, 3214556389u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1968, 1017573824u, 3130901062u, 1067905472u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1969, 1258369714u, 3462258576u, 1065431730u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1970, 1216602683u, 3371396332u, 1065607739u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1971, 3297265739u, 1214184410u, 3213379659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1972, 1071940738u, 3311731012u, 1071940738u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1973, 922601356u, 3337171870u, 1073596300u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1974, 3462285635u, 3444030332u, 3219016003u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1975, 3357177805u, 1085464241u, 3214571469u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1976, 3049120080u, 900832851u, 3216892240u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1977, 1153863660u, 1011991342u, 1069977580u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1978, 3034243695u, 917098003u, 3218793071u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1979, 1249365132u, 3278686216u, 1073204364u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1980, 3046215730u, 3211219980u, 3213987890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1981, 3047251716u, 1090787353u, 3215023876u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1982, 3131219358u, 3471261157u, 3215105438u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1983, 3222096285u, 1198013705u, 3213707677u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1984, 1297708818u, 3079166173u, 1071216402u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1985, 3345532722u, 3383708463u, 3219703602u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1986, 3418753236u, 3481843070u, 3217426644u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1987, 1277417964u, 3487506626u, 1067702764u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1988, 987577257u, 1152077087u, 1071463337u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1989, 3161606610u, 3190282989u, 3220326866u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1990, 888030585u, 3062367380u, 1072579961u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1991, 1043442869u, 3311393817u, 1068608693u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1992, 3320923228u, 3464544249u, 3220259932u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1993, 1337400405u, 3488844154u, 1068964949u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1994, 3400348640u, 3129868490u, 3215799264u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1995, 1250249095u, 1069023744u, 1065699719u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1996, 3284411233u, 1173613526u, 3217302369u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1997, 3020883322u, 2953622587u, 3213821306u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1998, 1215968622u, 3469884568u, 1073362286u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{1999, 3202319550u, 819117302u, 3219096766u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2000, 3061638260u, 3116222327u, 3221021812u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2001, 1025404104u, 1066370251u, 1067347144u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2002, 3138086437u, 3195983510u, 3213583909u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2003, 3091024506u, 3456196859u, 3216853626u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2004, 3362748242u, 3369843597u, 3220141906u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2005, 3099671635u, 3218383623u, 3217112147u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2006, 3068014841u, 2978226656u, 3219009785u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2007, 1252237719u, 1121169249u, 1067688343u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2008, 3327895594u, 1224511805u, 3218843690u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2009, 3082454432u, 889268276u, 3216672160u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2010, 3396161504u, 1182798837u, 3220000736u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2011, 1099710167u, 887180181u, 1066155735u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2012, 1157186482u, 1288722647u, 1073300402u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2013, 1282110851u, 3176633124u, 1072395651u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2014, 3477008113u, 1331845018u, 3216961265u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2015, 3292127294u, 3409957764u, 3216629822u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2016, 1123357102u, 3281307320u, 1073025454u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2017, 1106837025u, 3088080674u, 1073282593u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2018, 1049949008u, 1130799489u, 1066726224u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2019, 1253017688u, 942062372u, 1068468312u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2020, 1108543194u, 3281299199u, 1066600154u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2021, 1160162706u, 1264067367u, 1067888018u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2022, 3305715025u, 3017496063u, 3213440337u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2023, 1266928623u, 811778614u, 1065602031u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2024, 3438080027u, 3107114149u, 3219976219u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2025, 3344574751u, 3111270744u, 3218745631u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2026, 1152416724u, 962669179u, 1068530644u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2027, 1218239308u, 1126238113u, 1067244364u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2028, 3263310567u, 1030748197u, 3212978919u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2029, 1000313118u, 2980130729u, 1067421982u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2030, 972485427u, 1124312043u, 1073148723u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2031, 3290264612u, 1124703898u, 3214767140u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2032, 3222106584u, 1183748648u, 3213717976u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2033, 1278946388u, 825129857u, 1069231188u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2034, 947914771u, 3181847068u, 1065355283u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2035, 3167730654u, 3195765940u, 3218062302u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2036, 1098530298u, 3255870890u, 1073364474u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2037, 3232726036u, 871038882u, 3215948820u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2038, 1297190916u, 811863044u, 1070698500u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2039, 1277649137u, 961171401u, 1067933937u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2040, 3090306474u, 3124785016u, 3216135594u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2041, 3244032016u, 3045313345u, 3218866192u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2042, 3033122376u, 3049877065u, 3217671752u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2043, 1096155623u, 1256423752u, 1070989799u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2044, 873151908u, 3246562559u, 1066089892u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2045, 3317196817u, 989537151u, 3216533521u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2046, 3374748510u, 834161190u, 3215364958u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2047, 3345634950u, 959901149u, 3219805830u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2048, 3189860276u, 883598767u, 3215026100u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2049, 3396917283u, 3066326686u, 3220756515u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2050, 3317032737u, 3143803722u, 3216369441u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2051, 1200051436u, 1163802508u, 1065833708u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2052, 1306520561u, 957302464u, 1071639537u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2053, 1314936356u, 2985592532u, 1071666724u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2054, 3475052219u, 1284049853u, 3215005371u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2055, 3085636260u, 1107682820u, 3219853988u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2056, 3393227708u, 3271879112u, 3217066940u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2057, 3182540197u, 852580839u, 3216094629u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2058, 3349005404u, 3080993030u, 3214787676u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2059, 3154720153u, 3443720494u, 3213440409u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2060, 1262863321u, 1219003129u, 1069925337u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2061, 1053387478u, 3184880021u, 1070164694u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2062, 3387653691u, 3347783852u, 3219881531u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2063, 3136364836u, 1018492227u, 3220250916u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2064, 1338680611u, 1166078045u, 1070245155u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2065, 1112891928u, 3074730425u, 1070948888u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2066, 893449284u, 1052877339u, 1069610052u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2067, 3105373037u, 3246705916u, 3214424941u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2068, 1190105283u, 3033907262u, 1072664771u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2069, 1011225926u, 1180485180u, 1069946182u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2070, 1043025031u, 987068973u, 1068190855u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2071, 3410531037u, 2953541915u, 3217593053u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2072, 3125834184u, 896953754u, 3218108872u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2073, 902318189u, 849277289u, 1070090349u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2074, 3213624815u, 2987148017u, 3213624815u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2075, 1120888322u, 1086209113u, 1070556674u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2076, 1315217243u, 3396371713u, 1071947611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2077, 3137758475u, 1039403054u, 3213255947u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2078, 1040617590u, 1034835971u, 1065783414u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2079, 955384253u, 3344785562u, 1072824765u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2080, 904255535u, 1019967545u, 1072027695u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2081, 1022984119u, 3113891410u, 1073315767u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2082, 997362368u, 3112875428u, 1072859840u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2083, 1168623062u, 1143306482u, 1067959766u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2084, 878737490u, 3269908326u, 1071675474u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2085, 1039827284u, 1072928888u, 1073381716u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2086, 1021564080u, 1064468397u, 1071895728u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2087, 3458669745u, 3033299853u, 3215400113u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2088, 3327516316u, 3405380971u, 3218464412u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2089, 1040711112u, 3229444200u, 1065876936u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2090, 1134528351u, 3365952513u, 1067419487u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2091, 3414352838u, 3350285760u, 3213026246u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2092, 1133689539u, 1067460093u, 1066580675u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2093, 3455688478u, 3333091960u, 3220807454u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2094, 1137634874u, 1137038869u, 1070526010u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2095, 3415502662u, 955510692u, 3214176070u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2096, 954999730u, 969618597u, 1072440242u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2097, 1066157309u, 3241712664u, 1066157309u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2098, 3436353675u, 1174967495u, 3218249867u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2099, 940437609u, 860372396u, 1066266729u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2100, 3108347547u, 3434003435u, 3217399451u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2101, 3064200154u, 3158080507u, 3215195098u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2102, 1023889593u, 2979304683u, 1065832633u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2103, 3272661536u, 3461799138u, 3213941280u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2104, 1170245333u, 1233406410u, 1069582037u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2105, 1219052056u, 3369557946u, 1068057112u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2106, 3318983619u, 3259663338u, 3218320323u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2107, 3372118621u, 837597103u, 3221123677u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2108, 3146190320u, 889646054u, 3213299184u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2109, 1299683827u, 966031619u, 1073191411u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2110, 3086068902u, 3484245751u, 3220286630u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2111, 3064155399u, 3176569312u, 3215150343u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2112, 3040314717u, 1071290674u, 3216475485u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2113, 3257224022u, 3361778245u, 3215280982u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2114, 1229268598u, 1066965677u, 1069885046u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2115, 3184078812u, 871003709u, 3217633244u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2116, 1086717248u, 3423795374u, 1069940032u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2117, 3434884607u, 3029593823u, 3216780799u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2118, 3464955606u, 1017987696u, 3213297366u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2119, 1025278524u, 3121856207u, 1067221564u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2120, 1242829722u, 3233935671u, 1066668954u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2121, 3075149137u, 1117325737u, 3217755473u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2122, 1200927971u, 1317167489u, 1066710243u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2123, 3326858092u, 3452602832u, 3217806188u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2124, 1246019790u, 850632217u, 1069859022u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2125, 3184801644u, 1137974313u, 3218356076u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2126, 1136052740u, 3244616020u, 1068943876u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2127, 1069009211u, 3002507482u, 1069009211u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2128, 1015670780u, 1101217251u, 1066002428u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2129, 1012543234u, 1116520440u, 1071263490u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2130, 3316611992u, 3394732912u, 3215948696u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2131, 1087942795u, 3316660295u, 1071165579u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2132, 3426365713u, 3069778532u, 3216650513u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2133, 3066654389u, 3443934204u, 3217649333u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2134, 3295326432u, 1313396175u, 3219828960u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2135, 3318835308u, 3277583511u, 3218172012u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2136, 3283555717u, 891875120u, 3216446853u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2137, 3381255420u, 3015406047u, 3213483260u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2138, 3040485181u, 3375450886u, 3216645949u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2139, 3388772093u, 1032597076u, 3220999933u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2140, 954670189u, 1144923689u, 1072110701u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2141, 1319200415u, 3387555900u, 1067542175u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2142, 1279324488u, 3228401212u, 1069609288u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2143, 3217795424u, 865577227u, 3217795424u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2144, 3455131757u, 1260217257u, 3220250733u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2145, 1246947517u, 1087951909u, 1070786749u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2146, 3396723577u, 869285240u, 3220562809u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2147, 3433761025u, 3060143904u, 3215657217u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2148, 3201187455u, 900233172u, 3217964671u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2149, 1173247961u, 1191127979u, 1072584665u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2150, 3037297123u, 3346394818u, 3213457891u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2151, 3083019343u, 3033309444u, 3217237071u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2152, 3042018375u, 3203882372u, 3218179143u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2153, 1082862511u, 3032804719u, 1066085295u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2154, 3157626955u, 3483653298u, 3216347211u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2155, 1341821683u, 3003675365u, 1073386227u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2156, 1079061705u, 2960507663u, 1070673097u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2157, 3182695954u, 3256861672u, 3216250386u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2158, 1105291533u, 3482971524u, 1071737101u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2159, 1016023520u, 3227712090u, 1066355168u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2160, 3370691006u, 1295870514u, 3219696062u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2161, 1156767169u, 1049756240u, 1072881089u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2162, 3077020499u, 894671462u, 3219626835u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2163, 1104284039u, 3040211914u, 1070729607u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2164, 3335212901u, 3486414589u, 3217772389u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2165, 1093697541u, 3193708441u, 1068531717u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2166, 3266691185u, 1160074593u, 3216359537u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2167, 3179003144u, 1108615803u, 3220946184u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2168, 1094115255u, 3008610212u, 1068949431u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2169, 3424086808u, 3260140004u, 3214371608u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2170, 3353608773u, 1134068114u, 3219391045u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2171, 882878091u, 3136970767u, 1067427467u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2172, 1098662266u, 833740182u, 1073496442u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2173, 927582555u, 947955456u, 1070188891u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2174, 3111440310u, 3067634077u, 3220492214u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2175, 3476083859u, 966439623u, 3216037011u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2176, 3038754840u, 932009686u, 3214915608u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2177, 3464546616u, 3205527253u, 3212888376u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2178, 1002542205u, 3152136093u, 1069651069u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2179, 3443552129u, 3165561391u, 3217059713u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2180, 1287620154u, 3119707283u, 1069516346u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2181, 3073260205u, 3093124531u, 3215866541u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2182, 1245702957u, 894348966u, 1069542189u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2183, 1002715618u, 1191006977u, 1069824482u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2184, 3087802274u, 897541752u, 3213631394u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2185, 3415763001u, 3032518431u, 3214436409u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2186, 3283471961u, 1260093226u, 3216363097u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2187, 3311210827u, 1192192264u, 3218936139u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2188, 3026311911u, 2968974374u, 3219249895u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2189, 1198307901u, 1116328249u, 1072478781u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2190, 1288901567u, 1296370667u, 1070797759u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2191, 922255363u, 958305289u, 1073250307u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2192, 1113104661u, 944376032u, 1071161621u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2193, 1136714348u, 828849087u, 1069605484u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2194, 948856035u, 1015466475u, 1066296547u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2195, 1062512367u, 3229559531u, 1070900975u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2196, 3486907092u, 823220784u, 3218471636u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2197, 1162027071u, 3308983387u, 1069752383u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2198, 1034561811u, 1054043114u, 1068116243u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2199, 3271615417u, 3209997200u, 3212895161u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2200, 1042014529u, 1146708584u, 1067180353u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2201, 1177157787u, 3090208179u, 1068105883u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2202, 3196144817u, 1056118717u, 3212922033u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2203, 3432084552u, 2997091781u, 3213980744u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2204, 1309658335u, 1010219988u, 1066388703u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2205, 1226494979u, 2991604792u, 1067111427u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2206, 3100289712u, 3456334210u, 3217730224u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2207, 3375507013u, 1306310823u, 3216123461u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2208, 3460699001u, 3096700943u, 3217429369u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2209, 3079231719u, 1044386263u, 3213449447u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2210, 3093951884u, 1014115231u, 3219781004u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2211, 3468023178u, 1209565017u, 3216364938u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2212, 1204196034u, 3298625731u, 1069978306u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2213, 3459877411u, 2960476959u, 3216607779u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2214, 1161439847u, 943449277u, 1069165159u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2215, 908663107u, 939489763u, 1068046659u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2216, 1055319316u, 3261813492u, 1072096532u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2217, 1084378658u, 1009650785u, 1067601442u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2218, 3053887750u, 3341786453u, 3213271302u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2219, 3022828828u, 881335251u, 3215766812u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2220, 1226473697u, 821025132u, 1067090145u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2221, 1123114742u, 1229815537u, 1072783094u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2222, 1258114435u, 1291336083u, 1073565059u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2223, 3468040845u, 3066966245u, 3216382605u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2224, 1178825761u, 1113195286u, 1069773857u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2225, 3059266302u, 878503862u, 3218649854u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2226, 3223384012u, 1130486973u, 3214995404u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2227, 3445262427u, 3465211174u, 3218770011u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2228, 1125653081u, 1207799746u, 1066932825u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2229, 3337652712u, 3025581813u, 3220212200u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2230, 1184753508u, 3147374485u, 1067312996u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2231, 996404791u, 3353251979u, 1071902263u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2232, 1188439315u, 1113484271u, 1070998803u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2233, 906557513u, 3006513432u, 1065941065u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2234, 916831283u, 999465787u, 1067826227u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2235, 996786317u, 3179221951u, 1072283789u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2236, 3461635065u, 1004690387u, 3218365433u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2237, 1188167943u, 1200744896u, 1070727431u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2238, 3290079438u, 846519377u, 3214581966u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2239, 3350690327u, 2967953392u, 3216472599u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2240, 1102061604u, 3424449935u, 1068507172u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2241, 1282351521u, 3039376424u, 1072636321u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2242, 3458861065u, 3392466405u, 3215591433u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2243, 3095256878u, 1023623326u, 3221085998u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2244, 3163373610u, 843150426u, 3213705258u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2245, 3228793330u, 855146890u, 3220404722u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2246, 3422194733u, 893873945u, 3220868141u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2247, 3083885296u, 974543672u, 3218103024u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2248, 1261940623u, 3402349985u, 1069002639u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2249, 3400603081u, 3234396843u, 3216053705u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2250, 1219411812u, 2961857939u, 1068416868u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2251, 3094833770u, 805351108u, 3220662890u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2252, 3139250800u, 3079109479u, 3214748272u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2253, 886201503u, 3272760705u, 1070750879u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2254, 3297366026u, 1089966380u, 3213479946u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2255, 1218488455u, 3309646450u, 1067493511u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2256, 3040358923u, 3093401553u, 3216519691u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2257, 1283938137u, 1196383822u, 1065834329u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2258, 3182551696u, 3029982441u, 3216106128u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2259, 1317098613u, 949986176u, 1065440373u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2260, 3116209179u, 3303588342u, 3216872475u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2261, 3431703657u, 3014443710u, 3213599849u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2262, 3239728775u, 927815421u, 3214562951u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2263, 3207141672u, 933456504u, 3215530280u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2264, 3154378805u, 905462392u, 3213099061u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2265, 3069658155u, 1041452042u, 3220653099u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2266, 3313160088u, 2964063309u, 3220885400u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2267, 3207056527u, 3384206601u, 3215445135u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2268, 1284174954u, 3436881197u, 1066071146u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2269, 3156081645u, 3308839704u, 3214801901u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2270, 1063693032u, 976661408u, 1072081640u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2271, 1102631663u, 3396951425u, 1069077231u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2272, 968803479u, 992989712u, 1069466775u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2273, 3273080388u, 3109405906u, 3214360132u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2274, 1172529774u, 3294550127u, 1071866478u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2275, 1306695905u, 1292690378u, 1071814881u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2276, 3158855023u, 3151283866u, 3217575279u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2277, 1165177679u, 3276237026u, 1072902991u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2278, 3403009513u, 3381966453u, 3218460137u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2279, 952348506u, 3377573987u, 1069789018u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2280, 1222777442u, 1125769920u, 1071782498u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2281, 1325324763u, 978336043u, 1073666523u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2282, 3363524213u, 3202991311u, 3220917877u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2283, 1158950321u, 1073578913u, 1066675633u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2284, 903129873u, 3416864271u, 1070902033u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2285, 3078339944u, 988173985u, 3220946280u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2286, 1208345407u, 1254181270u, 1065739071u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2287, 1258634105u, 1247426200u, 1065696121u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2288, 1248478509u, 1287895126u, 1072317741u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2289, 1153863988u, 3430539165u, 1069977908u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2290, 1235620969u, 866627358u, 1067848809u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2291, 1097120930u, 3221726305u, 1071955106u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2292, 3469778622u, 1200179013u, 3218120382u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2293, 1147712200u, 931865525u, 1072214728u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2294, 1124721745u, 3058969650u, 1066001489u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2295, 3261744304u, 1043806501u, 3219801264u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2296, 3303160152u, 3075455322u, 3219274072u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2297, 1315090496u, 3269683237u, 1071820864u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2298, 1335399673u, 974138676u, 1066964217u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2299, 1072458508u, 3372833993u, 1072458508u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2300, 3303015249u, 3015039539u, 3219129169u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2301, 3252139741u, 1059615003u, 3218585309u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2302, 3468519966u, 3113982619u, 3216861726u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2303, 1006231203u, 897530770u, 1073340067u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2304, 951554138u, 1001144381u, 1068994650u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2305, 942046828u, 986341002u, 1067875948u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2306, 3319723279u, 3414482416u, 3219059983u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2307, 3255104167u, 928827688u, 3213161127u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2308, 1155477903u, 3104812800u, 1071591823u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2309, 3273889176u, 980486479u, 3215168920u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2310, 3237813668u, 3441016803u, 3221036452u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2311, 1228207362u, 2985476579u, 1068823810u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2312, 1290175785u, 3008182462u, 1072071977u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2313, 981908840u, 3314038398u, 1065794920u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2314, 941187647u, 1107765599u, 1067016767u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2315, 1214223128u, 3225536822u, 1071616792u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2316, 3422922584u, 1086391131u, 3213207384u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2317, 1315857601u, 3487600045u, 1072587969u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2318, 3453226030u, 3233768835u, 3218345006u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2319, 1078359574u, 3199175230u, 1069970966u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2320, 1029557624u, 3302959071u, 1071500664u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2321, 1207675424u, 3042692550u, 1073457696u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2322, 1028355074u, 3442294040u, 1070298114u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2323, 1248421894u, 3367769132u, 1072261126u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2324, 3353251994u, 1095517730u, 3219034266u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2325, 876926659u, 3288089977u, 1069864643u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2326, 1076752219u, 876236939u, 1068363611u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2327, 3388531942u, 2988520062u, 3220759782u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2328, 1273395082u, 3031189261u, 1072068490u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2329, 3385588183u, 3258252464u, 3217816023u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2330, 3192315328u, 3289489214u, 3217481152u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2331, 3441804648u, 3274638356u, 3215312232u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2332, 3392827417u, 1277961150u, 3216666649u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2333, 1161241793u, 1328003707u, 1068967105u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2334, 3034494183u, 3041579130u, 3219043559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2335, 1171318485u, 3374409104u, 1070655189u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2336, 3047748143u, 831102792u, 3215520303u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2337, 1001216371u, 3052357038u, 1068325235u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2338, 912515889u, 1074635609u, 1071899441u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2339, 3391452505u, 897989232u, 3215291737u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2340, 3249603369u, 3147662248u, 3216048937u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2341, 1220264047u, 2960450369u, 1069269103u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2342, 3169816394u, 988430929u, 3220148042u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2343, 3098997418u, 3002162688u, 3216437930u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2344, 3282212423u, 3174079140u, 3215103559u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2345, 3352293320u, 3247843425u, 3218075592u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2346, 3296358441u, 875645354u, 3220860969u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2347, 1197828352u, 3245614728u, 1071999232u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2348, 3340510371u, 914930263u, 3214681251u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2349, 1127109339u, 3368125489u, 1068389083u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2350, 1200599955u, 2981200675u, 1066382227u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2351, 962230977u, 2988248037u, 1071282881u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2352, 3192887808u, 3191848339u, 3218053632u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2353, 3237183876u, 3179379969u, 3220406660u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2354, 939285924u, 3056079386u, 1073503652u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2355, 944050180u, 3452557879u, 1069879300u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2356, 3058135703u, 3090284601u, 3217519255u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2357, 3480592662u, 3261728191u, 3220545814u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2358, 3061939312u, 3274418540u, 3212934256u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2359, 1003299981u, 853295521u, 1070408845u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2360, 1155775526u, 1255814444u, 1071889446u, 0, SIGNIFICANDF_TOLERANCE, 0}, +{2361, 1234491880u, 3408568717u, 1066719720u, 0, SIGNIFICANDF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF significandf.h diff --git a/packages/language/c/libm/current/tests/vectors/sinf.c b/packages/language/c/libm/current/tests/vectors/sinf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sinf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// sinf.c +// +// Test of sinf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/sinf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(sinf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &sinf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &sinf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("sinf() is stable"); + } // if + else + { + CYG_TEST_FAIL("sinf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library sinf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "sinf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF sinf.c diff --git a/packages/language/c/libm/current/tests/vectors/sinf.h b/packages/language/c/libm/current/tests/vectors/sinf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sinf.h @@ -0,0 +1,1231 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// sinf.h +// +// Test vectors for testing of sinf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/sinf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SINF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t sinf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3211696670u, 0, SINF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3211635095u, 0, SINF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3211571962u, 0, SINF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3211507279u, 0, SINF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3211441052u, 0, SINF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3211373285u, 0, SINF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3211303988u, 0, SINF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3211233167u, 0, SINF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3211160828u, 0, SINF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3211086979u, 0, SINF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3211011627u, 0, SINF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3210934780u, 0, SINF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3210856445u, 0, SINF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3210776631u, 0, SINF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3210695344u, 0, SINF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3210612595u, 0, SINF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3210528390u, 0, SINF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3210442738u, 0, SINF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3210355648u, 0, SINF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3210267129u, 0, SINF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3210177188u, 0, SINF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3210085836u, 0, SINF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3209993082u, 0, SINF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3209898934u, 0, SINF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3209803402u, 0, SINF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3209706495u, 0, SINF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3209608225u, 0, SINF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3209508599u, 0, SINF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3209407628u, 0, SINF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3209305323u, 0, SINF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3209201692u, 0, SINF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3209096748u, 0, SINF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3208990501u, 0, SINF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3208882960u, 0, SINF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3208774137u, 0, SINF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3208664042u, 0, SINF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3208552686u, 0, SINF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3208440082u, 0, SINF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3208326239u, 0, SINF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3208211170u, 0, SINF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3208094886u, 0, SINF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3207977399u, 0, SINF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3207858718u, 0, SINF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3207738859u, 0, SINF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3207617832u, 0, SINF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3207495649u, 0, SINF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3207372322u, 0, SINF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3207247864u, 0, SINF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3207122288u, 0, SINF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3206995604u, 0, SINF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3206867827u, 0, SINF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3206738970u, 0, SINF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3206609044u, 0, SINF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3206478064u, 0, SINF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3206346042u, 0, SINF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3206212991u, 0, SINF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3206078925u, 0, SINF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3205943857u, 0, SINF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3205807800u, 0, SINF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3205670769u, 0, SINF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3205532777u, 0, SINF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3205393837u, 0, SINF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3205253964u, 0, SINF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3205113171u, 0, SINF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3204971474u, 0, SINF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3204828885u, 0, SINF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3204685419u, 0, SINF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3204541090u, 0, SINF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3204343570u, 0, SINF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3204051550u, 0, SINF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3203757892u, 0, SINF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3203462625u, 0, SINF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3203165778u, 0, SINF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3202867382u, 0, SINF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3202567467u, 0, SINF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3202266061u, 0, SINF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3201963197u, 0, SINF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3201658903u, 0, SINF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3201353210u, 0, SINF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3201046149u, 0, SINF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3200737751u, 0, SINF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3200428046u, 0, SINF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3200117066u, 0, SINF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3199804841u, 0, SINF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3199491402u, 0, SINF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3199176781u, 0, SINF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3198861010u, 0, SINF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3198544120u, 0, SINF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3198226142u, 0, SINF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3197907109u, 0, SINF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3197587053u, 0, SINF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3197266004u, 0, SINF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3196943997u, 0, SINF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3196621062u, 0, SINF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3196297232u, 0, SINF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3195885431u, 0, SINF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3195234385u, 0, SINF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3194581745u, 0, SINF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3193927574u, 0, SINF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3193271939u, 0, SINF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3192614905u, 0, SINF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3191956538u, 0, SINF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3191296904u, 0, SINF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3190636067u, 0, SINF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3189974096u, 0, SINF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3189311056u, 0, SINF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3188647012u, 0, SINF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3187982032u, 0, SINF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3186961324u, 0, SINF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3185628018u, 0, SINF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3184293239u, 0, SINF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3182957119u, 0, SINF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3181619792u, 0, SINF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3180281394u, 0, SINF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3178601681u, 0, SINF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3175921397u, 0, SINF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3173239771u, 0, SINF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3170220319u, 0, SINF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3164853310u, 0, SINF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3156465239u, 0, SINF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 1008981591u, 0, SINF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 1017369662u, 0, SINF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 1022736671u, 0, SINF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 1025756123u, 0, SINF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 1028437749u, 0, SINF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 1031118033u, 0, SINF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 1032797746u, 0, SINF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 1034136144u, 0, SINF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 1035473471u, 0, SINF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 1036809591u, 0, SINF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 1038144370u, 0, SINF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 1039477676u, 0, SINF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 1040498384u, 0, SINF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 1041163364u, 0, SINF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 1041827408u, 0, SINF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 1042490448u, 0, SINF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 1043152419u, 0, SINF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 1043813256u, 0, SINF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 1044472890u, 0, SINF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 1045131257u, 0, SINF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 1045788291u, 0, SINF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 1046443926u, 0, SINF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 1047098097u, 0, SINF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 1047750737u, 0, SINF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 1048401783u, 0, SINF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 1048813584u, 0, SINF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 1049137414u, 0, SINF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 1049460349u, 0, SINF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 1049782356u, 0, SINF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 1050103405u, 0, SINF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 1050423461u, 0, SINF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 1050742494u, 0, SINF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 1051060472u, 0, SINF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 1051377362u, 0, SINF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 1051693133u, 0, SINF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 1052007754u, 0, SINF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 1052321193u, 0, SINF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 1052633418u, 0, SINF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 1052944398u, 0, SINF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 1053254103u, 0, SINF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 1053562501u, 0, SINF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 1053869562u, 0, SINF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 1054175255u, 0, SINF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 1054479549u, 0, SINF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 1054782413u, 0, SINF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 1055083819u, 0, SINF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 1055383734u, 0, SINF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 1055682130u, 0, SINF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 1055978977u, 0, SINF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 1056274244u, 0, SINF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 1056567902u, 0, SINF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 1056859922u, 0, SINF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 1057057442u, 0, SINF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 1057201771u, 0, SINF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 1057345237u, 0, SINF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 1057487826u, 0, SINF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 1057629523u, 0, SINF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 1057770316u, 0, SINF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 1057910189u, 0, SINF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 1058049129u, 0, SINF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 1058187121u, 0, SINF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 1058324152u, 0, SINF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 1058460209u, 0, SINF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 1058595277u, 0, SINF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 1058729343u, 0, SINF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 1058862394u, 0, SINF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 1058994416u, 0, SINF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 1059125396u, 0, SINF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 1059255322u, 0, SINF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 1059384179u, 0, SINF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 1059511956u, 0, SINF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 1059638640u, 0, SINF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 1059764216u, 0, SINF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 1059888674u, 0, SINF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 1060012001u, 0, SINF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 1060134184u, 0, SINF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 1060255211u, 0, SINF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 1060375070u, 0, SINF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 1060493751u, 0, SINF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 1060611238u, 0, SINF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 1060727522u, 0, SINF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 1060842591u, 0, SINF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 1060956434u, 0, SINF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 1061069038u, 0, SINF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 1061180394u, 0, SINF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 1061290489u, 0, SINF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 1061399312u, 0, SINF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 1061506853u, 0, SINF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 1061613100u, 0, SINF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 1061718044u, 0, SINF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 1061821675u, 0, SINF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 1061923980u, 0, SINF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 1062024951u, 0, SINF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 1062124577u, 0, SINF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 1062222847u, 0, SINF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 1062319754u, 0, SINF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 1062415286u, 0, SINF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 1062509434u, 0, SINF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 1062602188u, 0, SINF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 1062693540u, 0, SINF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 1062783481u, 0, SINF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 1062872000u, 0, SINF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 1062959090u, 0, SINF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 1063044742u, 0, SINF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 1063128947u, 0, SINF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 1063211696u, 0, SINF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 1063292983u, 0, SINF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 1063372797u, 0, SINF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 1063451132u, 0, SINF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 1063527979u, 0, SINF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 1063603331u, 0, SINF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 1063677180u, 0, SINF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 1063749519u, 0, SINF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 1063820340u, 0, SINF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 1063889637u, 0, SINF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 1063957404u, 0, SINF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 1064023631u, 0, SINF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 1064088314u, 0, SINF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 1064151447u, 0, SINF_TOLERANCE, 0}, +{239, 3231108068u, 0u, 1065353216u, 0, SINF_TOLERANCE, 0}, +{240, 3217625051u, 0u, 3212836864u, 0, SINF_TOLERANCE, 0}, +{241, 0u, 0u, 0u, 0, SINF_TOLERANCE, 0}, +{242, 1070141403u, 0u, 1065353216u, 0, SINF_TOLERANCE, 0}, +{243, 1083624420u, 0u, 3212836864u, 0, SINF_TOLERANCE, 0}, +{244, 3253731328u, 0u, 1065152422u, 0, SINF_TOLERANCE, 0}, +{245, 3252840038u, 0u, 1020410054u, 0, SINF_TOLERANCE, 0}, +{246, 3251948749u, 0u, 3212747018u, 0, SINF_TOLERANCE, 0}, +{247, 3251057459u, 0u, 1047277214u, 0, SINF_TOLERANCE, 0}, +{248, 3250166170u, 0u, 1064266220u, 0, SINF_TOLERANCE, 0}, +{249, 3249274880u, 0u, 3203496634u, 0, SINF_TOLERANCE, 0}, +{250, 3248383590u, 0u, 3209710816u, 0, SINF_TOLERANCE, 0}, +{251, 3247492301u, 0u, 1060006548u, 0, SINF_TOLERANCE, 0}, +{252, 3246601011u, 0u, 1059281644u, 0, SINF_TOLERANCE, 0}, +{253, 3245028147u, 0u, 3210248930u, 0, SINF_TOLERANCE, 0}, +{254, 3243245568u, 0u, 3201769496u, 0, SINF_TOLERANCE, 0}, +{255, 3241462989u, 0u, 1064581787u, 0, SINF_TOLERANCE, 0}, +{256, 3239680410u, 0u, 1043497670u, 0, SINF_TOLERANCE, 0}, +{257, 3237792973u, 0u, 3212819103u, 0, SINF_TOLERANCE, 0}, +{258, 3234227814u, 0u, 1034562272u, 0, SINF_TOLERANCE, 0}, +{259, 3230662656u, 0u, 1064976234u, 0, SINF_TOLERANCE, 0}, +{260, 3224580915u, 0u, 3198911379u, 0, SINF_TOLERANCE, 0}, +{261, 3213675725u, 0u, 3211011627u, 0, SINF_TOLERANCE, 0}, +{262, 1058642330u, 0u, 1058049129u, 0, SINF_TOLERANCE, 0}, +{263, 1075000115u, 0u, 1061086858u, 0, SINF_TOLERANCE, 0}, +{264, 1082130432u, 0u, 3208756687u, 0, SINF_TOLERANCE, 0}, +{265, 1085695590u, 0u, 3205298621u, 0, SINF_TOLERANCE, 0}, +{266, 1089260749u, 0u, 1063653819u, 0, SINF_TOLERANCE, 0}, +{267, 1091672474u, 0u, 1050894550u, 0, SINF_TOLERANCE, 0}, +{268, 1093455053u, 0u, 3212517027u, 0, SINF_TOLERANCE, 0}, +{269, 1095237632u, 0u, 3179795422u, 0, SINF_TOLERANCE, 0}, +{270, 1097020211u, 0u, 1065320109u, 0, SINF_TOLERANCE, 0}, +{271, 1098802790u, 0u, 3192090686u, 0, SINF_TOLERANCE, 0}, +{272, 1099746509u, 0u, 3211978617u, 0, SINF_TOLERANCE, 0}, +{273, 1100637798u, 0u, 1054795790u, 0, SINF_TOLERANCE, 0}, +{274, 1101529088u, 0u, 1062612757u, 0, SINF_TOLERANCE, 0}, +{275, 1102420378u, 0u, 3206980986u, 0, SINF_TOLERANCE, 0}, +{276, 1103311667u, 0u, 3207282104u, 0, SINF_TOLERANCE, 0}, +{277, 1104202957u, 0u, 1062389233u, 0, SINF_TOLERANCE, 0}, +{278, 1105094246u, 0u, 1055513287u, 0, SINF_TOLERANCE, 0}, +{279, 1105985536u, 0u, 3211847531u, 0, SINF_TOLERANCE, 0}, +{280, 1107800421u, 100135u, 1058518171u, 0, SINF_TOLERANCE, 0}, +{281, 3196650934u, 0u, 3196544125u, 0, SINF_TOLERANCE, 0}, +{282, 3368700125u, 4294964487u, 1046745931u, 0, SINF_TOLERANCE, 0}, +{283, 1224242132u, 0u, 3205123499u, 0, SINF_TOLERANCE, 0}, +{284, 3221027117u, 73066312u, 3211475937u, 0, SINF_TOLERANCE, 0}, +{285, 1198712763u, 0u, 3209750432u, 0, SINF_TOLERANCE, 0}, +{286, 3159309973u, 0u, 3159309611u, 0, SINF_TOLERANCE, 0}, +{287, 954173073u, 0u, 954173073u, 0, SINF_TOLERANCE, 0}, +{288, 3090780435u, 0u, 3090780435u, 0, SINF_TOLERANCE, 0}, +{289, 966554515u, 4294967290u, 966554515u, 0, SINF_TOLERANCE, 0}, +{290, 1312607135u, 47678u, 3202875829u, 0, SINF_TOLERANCE, 0}, +{291, 1166191415u, 0u, 1030573108u, 0, SINF_TOLERANCE, 0}, +{292, 3111900019u, 225u, 3111900019u, 0, SINF_TOLERANCE, 0}, +{293, 1234419246u, 0u, 3212551722u, 0, SINF_TOLERANCE, 0}, +{294, 1302107128u, 4294492157u, 3186571629u, 0, SINF_TOLERANCE, 0}, +{295, 1052801068u, 0u, 1052506080u, 0, SINF_TOLERANCE, 0}, +{296, 1060849628u, 0u, 1059783771u, 0, SINF_TOLERANCE, 0}, +{297, 3484320003u, 0u, 1053149884u, 0, SINF_TOLERANCE, 0}, +{298, 3181522772u, 4294965180u, 3181511666u, 0, SINF_TOLERANCE, 0}, +{299, 882596369u, 7581303u, 882596369u, 0, SINF_TOLERANCE, 0}, +{300, 1167223673u, 0u, 3212309638u, 0, SINF_TOLERANCE, 0}, +{301, 968192794u, 0u, 968192794u, 0, SINF_TOLERANCE, 0}, +{302, 3122346862u, 48u, 3122346861u, 0, SINF_TOLERANCE, 0}, +{303, 1052361612u, 53381624u, 1052096265u, 0, SINF_TOLERANCE, 0}, +{304, 906701409u, 0u, 906701409u, 0, SINF_TOLERANCE, 0}, +{305, 3471653172u, 1621u, 1065331163u, 0, SINF_TOLERANCE, 0}, +{306, 3231467496u, 0u, 1065107411u, 0, SINF_TOLERANCE, 0}, +{307, 1341514497u, 3022046720u, 3196313073u, 0, SINF_TOLERANCE, 0}, +{308, 1272351391u, 4294363968u, 3212112687u, 0, SINF_TOLERANCE, 0}, +{309, 3319724992u, 4294842689u, 1061840534u, 0, SINF_TOLERANCE, 0}, +{310, 917622040u, 603040256u, 917622040u, 0, SINF_TOLERANCE, 0}, +{311, 940236348u, 4294965375u, 940236348u, 0, SINF_TOLERANCE, 0}, +{312, 3251541546u, 0u, 3206746487u, 0, SINF_TOLERANCE, 0}, +{313, 3099843889u, 4294828114u, 3099843889u, 0, SINF_TOLERANCE, 0}, +{314, 3110358400u, 0u, 3110358400u, 0, SINF_TOLERANCE, 0}, +{315, 3371863479u, 0u, 1065248325u, 0, SINF_TOLERANCE, 0}, +{316, 3204069187u, 0u, 3203424208u, 0, SINF_TOLERANCE, 0}, +{317, 1306460502u, 0u, 3212036909u, 0, SINF_TOLERANCE, 0}, +{318, 1197542187u, 0u, 1058620655u, 0, SINF_TOLERANCE, 0}, +{319, 922888249u, 467u, 922888249u, 0, SINF_TOLERANCE, 0}, +{320, 1184239996u, 4294967294u, 1063084528u, 0, SINF_TOLERANCE, 0}, +{321, 1252490238u, 7808u, 3196090424u, 0, SINF_TOLERANCE, 0}, +{322, 1001673627u, 3340510784u, 1001673567u, 0, SINF_TOLERANCE, 0}, +{323, 976098044u, 1357u, 976098043u, 0, SINF_TOLERANCE, 0}, +{324, 941796645u, 0u, 941796645u, 0, SINF_TOLERANCE, 0}, +{325, 3287199470u, 0u, 1042188572u, 0, SINF_TOLERANCE, 0}, +{326, 893184329u, 2485427u, 893184329u, 0, SINF_TOLERANCE, 0}, +{327, 1143233714u, 0u, 3208724747u, 0, SINF_TOLERANCE, 0}, +{328, 1139941253u, 929u, 1054509223u, 0, SINF_TOLERANCE, 0}, +{329, 3143717025u, 4294967290u, 3143716996u, 0, SINF_TOLERANCE, 0}, +{330, 3048866608u, 3978787488u, 3048866608u, 0, SINF_TOLERANCE, 0}, +{331, 3240298487u, 0u, 1060190807u, 0, SINF_TOLERANCE, 0}, +{332, 1288902137u, 0u, 3208146860u, 0, SINF_TOLERANCE, 0}, +{333, 1333134799u, 2211432960u, 3210775633u, 0, SINF_TOLERANCE, 0}, +{334, 1187847971u, 1157221888u, 3212125511u, 0, SINF_TOLERANCE, 0}, +{335, 1038851706u, 2696359424u, 1038817664u, 0, SINF_TOLERANCE, 0}, +{336, 3329354473u, 0u, 3209793216u, 0, SINF_TOLERANCE, 0}, +{337, 3077218579u, 529671904u, 3077218579u, 0, SINF_TOLERANCE, 0}, +{338, 1309289088u, 0u, 1061413332u, 0, SINF_TOLERANCE, 0}, +{339, 3444653659u, 50272864u, 1062129099u, 0, SINF_TOLERANCE, 0}, +{340, 3405585402u, 0u, 1064681582u, 0, SINF_TOLERANCE, 0}, +{341, 3106647724u, 0u, 3106647724u, 0, SINF_TOLERANCE, 0}, +{342, 1106778573u, 4294965325u, 3200840548u, 0, SINF_TOLERANCE, 0}, +{343, 1140567947u, 0u, 1059595752u, 0, SINF_TOLERANCE, 0}, +{344, 1238569473u, 0u, 3203440080u, 0, SINF_TOLERANCE, 0}, +{345, 3154871957u, 39965012u, 3154871846u, 0, SINF_TOLERANCE, 0}, +{346, 1261071232u, 15806u, 1065291875u, 0, SINF_TOLERANCE, 0}, +{347, 1175011025u, 0u, 3191887854u, 0, SINF_TOLERANCE, 0}, +{348, 1082692850u, 187658u, 3211208663u, 0, SINF_TOLERANCE, 0}, +{349, 974547519u, 1563599616u, 974547518u, 0, SINF_TOLERANCE, 0}, +{350, 3058097085u, 0u, 3058097085u, 0, SINF_TOLERANCE, 0}, +{351, 3107252546u, 1u, 3107252546u, 0, SINF_TOLERANCE, 0}, +{352, 3096032662u, 0u, 3096032662u, 0, SINF_TOLERANCE, 0}, +{353, 3197942144u, 0u, 3197782495u, 0, SINF_TOLERANCE, 0}, +{354, 3403348556u, 0u, 3212832252u, 0, SINF_TOLERANCE, 0}, +{355, 3182301130u, 3460013312u, 3182287402u, 0, SINF_TOLERANCE, 0}, +{356, 1136411063u, 82u, 3203097915u, 0, SINF_TOLERANCE, 0}, +{357, 3239231622u, 4294965540u, 3196062732u, 0, SINF_TOLERANCE, 0}, +{358, 3340615780u, 0u, 3207893697u, 0, SINF_TOLERANCE, 0}, +{359, 998567360u, 0u, 998567336u, 0, SINF_TOLERANCE, 0}, +{360, 3417964312u, 1627479168u, 1058566457u, 0, SINF_TOLERANCE, 0}, +{361, 3109481038u, 695u, 3109481038u, 0, SINF_TOLERANCE, 0}, +{362, 1148867223u, 7486109u, 1061481055u, 0, SINF_TOLERANCE, 0}, +{363, 989687421u, 4294414202u, 989687411u, 0, SINF_TOLERANCE, 0}, +{364, 1152956913u, 0u, 1064560276u, 0, SINF_TOLERANCE, 0}, +{365, 892922651u, 4294392467u, 892922651u, 0, SINF_TOLERANCE, 0}, +{366, 1109627625u, 891137088u, 3176661959u, 0, SINF_TOLERANCE, 0}, +{367, 1307091856u, 24u, 1065031078u, 0, SINF_TOLERANCE, 0}, +{368, 1077234132u, 4294967159u, 1050390272u, 0, SINF_TOLERANCE, 0}, +{369, 1142167709u, 13u, 1065037302u, 0, SINF_TOLERANCE, 0}, +{370, 3426232834u, 0u, 1063523570u, 0, SINF_TOLERANCE, 0}, +{371, 3368566779u, 0u, 3210903839u, 0, SINF_TOLERANCE, 0}, +{372, 3030724760u, 4294886457u, 3030724760u, 0, SINF_TOLERANCE, 0}, +{373, 1138741813u, 0u, 1065343110u, 0, SINF_TOLERANCE, 0}, +{374, 982950501u, 0u, 982950499u, 0, SINF_TOLERANCE, 0}, +{375, 1142981585u, 0u, 1064054420u, 0, SINF_TOLERANCE, 0}, +{376, 3347165962u, 0u, 1061794719u, 0, SINF_TOLERANCE, 0}, +{377, 1009535440u, 4293825695u, 1009535232u, 0, SINF_TOLERANCE, 0}, +{378, 3103736980u, 4287990860u, 3103736980u, 0, SINF_TOLERANCE, 0}, +{379, 3126820946u, 2u, 3126820944u, 0, SINF_TOLERANCE, 0}, +{380, 3473956030u, 0u, 1059782658u, 0, SINF_TOLERANCE, 0}, +{381, 3349098349u, 0u, 1056665925u, 0, SINF_TOLERANCE, 0}, +{382, 3152729489u, 0u, 3152729357u, 0, SINF_TOLERANCE, 0}, +{383, 945568720u, 4294963204u, 945568720u, 0, SINF_TOLERANCE, 0}, +{384, 3345489836u, 36u, 1054686633u, 0, SINF_TOLERANCE, 0}, +{385, 940893161u, 394u, 940893161u, 0, SINF_TOLERANCE, 0}, +{386, 976791751u, 4294967292u, 976791750u, 0, SINF_TOLERANCE, 0}, +{387, 1004442355u, 0u, 1004442243u, 0, SINF_TOLERANCE, 0}, +{388, 1108485380u, 0u, 3211460841u, 0, SINF_TOLERANCE, 0}, +{389, 1061834641u, 0u, 1060497016u, 0, SINF_TOLERANCE, 0}, +{390, 3381268392u, 885u, 1065295790u, 0, SINF_TOLERANCE, 0}, +{391, 1087189715u, 0u, 1040449727u, 0, SINF_TOLERANCE, 0}, +{392, 3212952285u, 4294951762u, 3210300573u, 0, SINF_TOLERANCE, 0}, +{393, 1000611335u, 0u, 1000611290u, 0, SINF_TOLERANCE, 0}, +{394, 3466188568u, 0u, 3212367733u, 0, SINF_TOLERANCE, 0}, +{395, 3072456205u, 0u, 3072456205u, 0, SINF_TOLERANCE, 0}, +{396, 3319315516u, 4262338968u, 1063583000u, 0, SINF_TOLERANCE, 0}, +{397, 935938416u, 867u, 935938416u, 0, SINF_TOLERANCE, 0}, +{398, 3212614372u, 1438u, 3210055738u, 0, SINF_TOLERANCE, 0}, +{399, 1315030230u, 4294939294u, 3202347342u, 0, SINF_TOLERANCE, 0}, +{400, 1134593658u, 3712906944u, 1058161630u, 0, SINF_TOLERANCE, 0}, +{401, 977281449u, 0u, 977281448u, 0, SINF_TOLERANCE, 0}, +{402, 1086198791u, 0u, 3198963462u, 0, SINF_TOLERANCE, 0}, +{403, 1255152035u, 0u, 3207185794u, 0, SINF_TOLERANCE, 0}, +{404, 1135271264u, 4294966890u, 1059436789u, 0, SINF_TOLERANCE, 0}, +{405, 1094190727u, 0u, 3210734358u, 0, SINF_TOLERANCE, 0}, +{406, 1294665325u, 0u, 1060438488u, 0, SINF_TOLERANCE, 0}, +{407, 1036608591u, 0u, 1036587330u, 0, SINF_TOLERANCE, 0}, +{408, 3229998064u, 0u, 1063057509u, 0, SINF_TOLERANCE, 0}, +{409, 3439134022u, 0u, 1062436542u, 0, SINF_TOLERANCE, 0}, +{410, 3073083133u, 1094097536u, 3073083133u, 0, SINF_TOLERANCE, 0}, +{411, 1325668223u, 0u, 1061043796u, 0, SINF_TOLERANCE, 0}, +{412, 1092037607u, 0u, 3166699916u, 0, SINF_TOLERANCE, 0}, +{413, 3316278408u, 3774649632u, 1064435105u, 0, SINF_TOLERANCE, 0}, +{414, 3295436768u, 0u, 3187140116u, 0, SINF_TOLERANCE, 0}, +{415, 1151984049u, 0u, 1064532731u, 0, SINF_TOLERANCE, 0}, +{416, 1129287043u, 0u, 1045634997u, 0, SINF_TOLERANCE, 0}, +{417, 1243664530u, 0u, 3207057562u, 0, SINF_TOLERANCE, 0}, +{418, 950829092u, 0u, 950829092u, 0, SINF_TOLERANCE, 0}, +{419, 1115471979u, 0u, 1051883779u, 0, SINF_TOLERANCE, 0}, +{420, 3351092088u, 0u, 1057811134u, 0, SINF_TOLERANCE, 0}, +{421, 3424479544u, 4294963555u, 1057943668u, 0, SINF_TOLERANCE, 0}, +{422, 3241193975u, 0u, 1065333994u, 0, SINF_TOLERANCE, 0}, +{423, 1030934236u, 0u, 1030924918u, 0, SINF_TOLERANCE, 0}, +{424, 3131791114u, 4283960578u, 3131791111u, 0, SINF_TOLERANCE, 0}, +{425, 1025254314u, 0u, 1025251836u, 0, SINF_TOLERANCE, 0}, +{426, 1110545760u, 4294967286u, 1053672489u, 0, SINF_TOLERANCE, 0}, +{427, 3180213739u, 37u, 3180206251u, 0, SINF_TOLERANCE, 0}, +{428, 3361976590u, 0u, 1046550580u, 0, SINF_TOLERANCE, 0}, +{429, 881280146u, 4262747520u, 881280146u, 0, SINF_TOLERANCE, 0}, +{430, 1304154705u, 0u, 1032281728u, 0, SINF_TOLERANCE, 0}, +{431, 3264443610u, 4294967294u, 1065270732u, 0, SINF_TOLERANCE, 0}, +{432, 3374550627u, 0u, 3200851331u, 0, SINF_TOLERANCE, 0}, +{433, 899599265u, 4294967286u, 899599265u, 0, SINF_TOLERANCE, 0}, +{434, 1268194719u, 3962356224u, 1024648486u, 0, SINF_TOLERANCE, 0}, +{435, 1133420220u, 3161371u, 1058660012u, 0, SINF_TOLERANCE, 0}, +{436, 1161858787u, 0u, 1062433973u, 0, SINF_TOLERANCE, 0}, +{437, 3184462258u, 13627054u, 3184439159u, 0, SINF_TOLERANCE, 0}, +{438, 3295996963u, 3846806432u, 1055898143u, 0, SINF_TOLERANCE, 0}, +{439, 1270887389u, 1864u, 1034411919u, 0, SINF_TOLERANCE, 0}, +{440, 3325193181u, 0u, 3207166057u, 0, SINF_TOLERANCE, 0}, +{441, 925657343u, 955232128u, 925657343u, 0, SINF_TOLERANCE, 0}, +{442, 3115275450u, 0u, 3115275450u, 0, SINF_TOLERANCE, 0}, +{443, 3116607482u, 4294967294u, 3116607482u, 0, SINF_TOLERANCE, 0}, +{444, 3187892415u, 0u, 3187868814u, 0, SINF_TOLERANCE, 0}, +{445, 1189120494u, 0u, 1065261777u, 0, SINF_TOLERANCE, 0}, +{446, 889030794u, 0u, 889030794u, 0, SINF_TOLERANCE, 0}, +{447, 1323529208u, 0u, 1063714250u, 0, SINF_TOLERANCE, 0}, +{448, 3465768388u, 0u, 1048891935u, 0, SINF_TOLERANCE, 0}, +{449, 3426099899u, 87u, 1060479363u, 0, SINF_TOLERANCE, 0}, +{450, 3224857113u, 4290382691u, 3196806602u, 0, SINF_TOLERANCE, 0}, +{451, 1065798296u, 0u, 1063154404u, 0, SINF_TOLERANCE, 0}, +{452, 3328989444u, 0u, 3204189613u, 0, SINF_TOLERANCE, 0}, +{453, 3357819026u, 0u, 1050303171u, 0, SINF_TOLERANCE, 0}, +{454, 1273397670u, 0u, 3212832425u, 0, SINF_TOLERANCE, 0}, +{455, 3424831780u, 414735168u, 1018696053u, 0, SINF_TOLERANCE, 0}, +{456, 1257596246u, 4264851904u, 3212833257u, 0, SINF_TOLERANCE, 0}, +{457, 1051773536u, 0u, 1051544673u, 0, SINF_TOLERANCE, 0}, +{458, 3294752507u, 0u, 1063083778u, 0, SINF_TOLERANCE, 0}, +{459, 3424848725u, 0u, 1038948225u, 0, SINF_TOLERANCE, 0}, +{460, 1090870906u, 4294966393u, 1063445015u, 0, SINF_TOLERANCE, 0}, +{461, 1227582289u, 147011u, 3198518934u, 0, SINF_TOLERANCE, 0}, +{462, 1272325814u, 0u, 1059673072u, 0, SINF_TOLERANCE, 0}, +{463, 3359508271u, 0u, 1065326721u, 0, SINF_TOLERANCE, 0}, +{464, 1137854355u, 4294941607u, 3201176570u, 0, SINF_TOLERANCE, 0}, +{465, 3440773058u, 0u, 3209718873u, 0, SINF_TOLERANCE, 0}, +{466, 3101598400u, 0u, 3101598400u, 0, SINF_TOLERANCE, 0}, +{467, 3451216836u, 4294896064u, 1052110141u, 0, SINF_TOLERANCE, 0}, +{468, 3437062994u, 0u, 1057841295u, 0, SINF_TOLERANCE, 0}, +{469, 1131196082u, 3743u, 3210719513u, 0, SINF_TOLERANCE, 0}, +{470, 3177294154u, 63027320u, 3177286674u, 0, SINF_TOLERANCE, 0}, +{471, 3258097678u, 449173056u, 3206530664u, 0, SINF_TOLERANCE, 0}, +{472, 3460915348u, 356647u, 1064413669u, 0, SINF_TOLERANCE, 0}, +{473, 3303035472u, 0u, 1059674673u, 0, SINF_TOLERANCE, 0}, +{474, 1053698677u, 4294966907u, 1053336503u, 0, SINF_TOLERANCE, 0}, +{475, 3396166221u, 83688u, 3212041622u, 0, SINF_TOLERANCE, 0}, +{476, 3037541131u, 5u, 3037541131u, 0, SINF_TOLERANCE, 0}, +{477, 3458934263u, 0u, 1057443493u, 0, SINF_TOLERANCE, 0}, +{478, 1065761827u, 4294943781u, 1063118168u, 0, SINF_TOLERANCE, 0}, +{479, 3025843188u, 0u, 3025843188u, 0, SINF_TOLERANCE, 0}, +{480, 926665223u, 0u, 926665223u, 0, SINF_TOLERANCE, 0}, +{481, 1199816046u, 0u, 1061346174u, 0, SINF_TOLERANCE, 0}, +{482, 3333779015u, 0u, 3203337443u, 0, SINF_TOLERANCE, 0}, +{483, 948398145u, 4294967288u, 948398145u, 0, SINF_TOLERANCE, 0}, +{484, 3054021468u, 23933390u, 3054021468u, 0, SINF_TOLERANCE, 0}, +{485, 1080781593u, 224021u, 3204639602u, 0, SINF_TOLERANCE, 0}, +{486, 3164749613u, 0u, 3164748918u, 0, SINF_TOLERANCE, 0}, +{487, 3235326590u, 26828788u, 3201986014u, 0, SINF_TOLERANCE, 0}, +{488, 3118883815u, 0u, 3118883815u, 0, SINF_TOLERANCE, 0}, +{489, 965378004u, 146193824u, 965378004u, 0, SINF_TOLERANCE, 0}, +{490, 3226990408u, 45u, 1047285903u, 0, SINF_TOLERANCE, 0}, +{491, 3117098218u, 115u, 3117098218u, 0, SINF_TOLERANCE, 0}, +{492, 1283624229u, 0u, 1050764752u, 0, SINF_TOLERANCE, 0}, +{493, 970649315u, 3u, 970649315u, 0, SINF_TOLERANCE, 0}, +{494, 959776291u, 4294967028u, 959776291u, 0, SINF_TOLERANCE, 0}, +{495, 3341117305u, 4294966405u, 3210910429u, 0, SINF_TOLERANCE, 0}, +{496, 1270734970u, 4294829480u, 1033854408u, 0, SINF_TOLERANCE, 0}, +{497, 3454816067u, 0u, 1037854899u, 0, SINF_TOLERANCE, 0}, +{498, 917206623u, 7364u, 917206623u, 0, SINF_TOLERANCE, 0}, +{499, 1106502045u, 126247200u, 3209516256u, 0, SINF_TOLERANCE, 0}, +{500, 1157598381u, 4294964293u, 1060383409u, 0, SINF_TOLERANCE, 0}, +{501, 3335234513u, 0u, 1038672048u, 0, SINF_TOLERANCE, 0}, +{502, 1279489061u, 0u, 3212691844u, 0, SINF_TOLERANCE, 0}, +{503, 3157416480u, 624023680u, 3157416249u, 0, SINF_TOLERANCE, 0}, +{504, 3143920719u, 0u, 3143920689u, 0, SINF_TOLERANCE, 0}, +{505, 1233171235u, 0u, 1059316879u, 0, SINF_TOLERANCE, 0}, +{506, 1148920078u, 0u, 3208014767u, 0, SINF_TOLERANCE, 0}, +{507, 3064988156u, 4294967292u, 3064988156u, 0, SINF_TOLERANCE, 0}, +{508, 3083619260u, 2484u, 3083619260u, 0, SINF_TOLERANCE, 0}, +{509, 1109198803u, 431095u, 1065351954u, 0, SINF_TOLERANCE, 0}, +{510, 3219949483u, 0u, 3212196888u, 0, SINF_TOLERANCE, 0}, +{511, 3361149474u, 4293077090u, 3205574938u, 0, SINF_TOLERANCE, 0}, +{512, 1207502108u, 4292985650u, 3191132022u, 0, SINF_TOLERANCE, 0}, +{513, 1000014431u, 0u, 1000014393u, 0, SINF_TOLERANCE, 0}, +{514, 3161756316u, 0u, 3161755721u, 0, SINF_TOLERANCE, 0}, +{515, 3160728744u, 4293625597u, 3160728256u, 0, SINF_TOLERANCE, 0}, +{516, 1234530539u, 3u, 3207290757u, 0, SINF_TOLERANCE, 0}, +{517, 1017843965u, 40165u, 1017843150u, 0, SINF_TOLERANCE, 0}, +{518, 951862956u, 7732u, 951862956u, 0, SINF_TOLERANCE, 0}, +{519, 3306328852u, 87u, 3212836506u, 0, SINF_TOLERANCE, 0}, +{520, 1291910469u, 183319u, 3202624350u, 0, SINF_TOLERANCE, 0}, +{521, 3027442905u, 7942u, 3027442905u, 0, SINF_TOLERANCE, 0}, +{522, 1131927531u, 0u, 1051452936u, 0, SINF_TOLERANCE, 0}, +{523, 3449879391u, 0u, 3206440668u, 0, SINF_TOLERANCE, 0}, +{524, 970094304u, 4294911386u, 970094304u, 0, SINF_TOLERANCE, 0}, +{525, 1125551064u, 4294949017u, 3195897312u, 0, SINF_TOLERANCE, 0}, +{526, 3427296372u, 3784252480u, 1024392995u, 0, SINF_TOLERANCE, 0}, +{527, 1198917460u, 2607027968u, 1059107199u, 0, SINF_TOLERANCE, 0}, +{528, 3201603336u, 0u, 3201206444u, 0, SINF_TOLERANCE, 0}, +{529, 3114686212u, 1328603904u, 3114686212u, 0, SINF_TOLERANCE, 0}, +{530, 921940707u, 0u, 921940707u, 0, SINF_TOLERANCE, 0}, +{531, 1091906532u, 0u, 1037018238u, 0, SINF_TOLERANCE, 0}, +{532, 3393557778u, 4293570247u, 1050855630u, 0, SINF_TOLERANCE, 0}, +{533, 1276853215u, 0u, 1050263660u, 0, SINF_TOLERANCE, 0}, +{534, 3462778440u, 4294884341u, 1042079492u, 0, SINF_TOLERANCE, 0}, +{535, 3360170117u, 0u, 1061155323u, 0, SINF_TOLERANCE, 0}, +{536, 3224245428u, 4294967170u, 3201401572u, 0, SINF_TOLERANCE, 0}, +{537, 1120124467u, 352u, 3203228560u, 0, SINF_TOLERANCE, 0}, +{538, 1064364381u, 0u, 1062135066u, 0, SINF_TOLERANCE, 0}, +{539, 1268744779u, 4294952694u, 3196363019u, 0, SINF_TOLERANCE, 0}, +{540, 1165195428u, 4292538760u, 3171858671u, 0, SINF_TOLERANCE, 0}, +{541, 3044092739u, 30u, 3044092739u, 0, SINF_TOLERANCE, 0}, +{542, 3149469534u, 47144136u, 3149469469u, 0, SINF_TOLERANCE, 0}, +{543, 3247790039u, 0u, 1043923194u, 0, SINF_TOLERANCE, 0}, +{544, 3215244648u, 4u, 3212165907u, 0, SINF_TOLERANCE, 0}, +{545, 3095275931u, 0u, 3095275931u, 0, SINF_TOLERANCE, 0}, +{546, 3059688264u, 77u, 3059688264u, 0, SINF_TOLERANCE, 0}, +{547, 1212717473u, 0u, 3212767710u, 0, SINF_TOLERANCE, 0}, +{548, 3275973009u, 3930410816u, 3205565626u, 0, SINF_TOLERANCE, 0}, +{549, 3028857014u, 0u, 3028857014u, 0, SINF_TOLERANCE, 0}, +{550, 3391162308u, 129212984u, 1063347857u, 0, SINF_TOLERANCE, 0}, +{551, 1044867873u, 4294528232u, 1044785421u, 0, SINF_TOLERANCE, 0}, +{552, 1089986803u, 3370664576u, 1065255878u, 0, SINF_TOLERANCE, 0}, +{553, 1296314700u, 0u, 1055078752u, 0, SINF_TOLERANCE, 0}, +{554, 1251462432u, 0u, 1062872862u, 0, SINF_TOLERANCE, 0}, +{555, 3485236902u, 0u, 1065341790u, 0, SINF_TOLERANCE, 0}, +{556, 3262169538u, 19958524u, 1056243498u, 0, SINF_TOLERANCE, 0}, +{557, 3080852256u, 0u, 3080852256u, 0, SINF_TOLERANCE, 0}, +{558, 1022211242u, 0u, 1022209056u, 0, SINF_TOLERANCE, 0}, +{559, 884661176u, 0u, 884661176u, 0, SINF_TOLERANCE, 0}, +{560, 3071422941u, 4294967172u, 3071422941u, 0, SINF_TOLERANCE, 0}, +{561, 989762529u, 4294733601u, 989762519u, 0, SINF_TOLERANCE, 0}, +{562, 1295475718u, 0u, 3197286731u, 0, SINF_TOLERANCE, 0}, +{563, 1002632518u, 4294950696u, 1002632443u, 0, SINF_TOLERANCE, 0}, +{564, 3404372005u, 3938008096u, 1065220186u, 0, SINF_TOLERANCE, 0}, +{565, 3158912530u, 0u, 3158912199u, 0, SINF_TOLERANCE, 0}, +{566, 1125800069u, 4294967259u, 3200976549u, 0, SINF_TOLERANCE, 0}, +{567, 3138037576u, 0u, 3138037569u, 0, SINF_TOLERANCE, 0}, +{568, 3108384823u, 268832992u, 3108384823u, 0, SINF_TOLERANCE, 0}, +{569, 999985470u, 4282999218u, 999985432u, 0, SINF_TOLERANCE, 0}, +{570, 1189421739u, 0u, 3205184098u, 0, SINF_TOLERANCE, 0}, +{571, 3075182644u, 0u, 3075182644u, 0, SINF_TOLERANCE, 0}, +{572, 3028099649u, 4292241163u, 3028099649u, 0, SINF_TOLERANCE, 0}, +{573, 3132541814u, 4077666864u, 3132541810u, 0, SINF_TOLERANCE, 0}, +{574, 1164046161u, 4139845440u, 1062835605u, 0, SINF_TOLERANCE, 0}, +{575, 1292596266u, 0u, 3209419523u, 0, SINF_TOLERANCE, 0}, +{576, 3469748379u, 4279587928u, 3205576348u, 0, SINF_TOLERANCE, 0}, +{577, 1314644642u, 0u, 1049458564u, 0, SINF_TOLERANCE, 0}, +{578, 3399813173u, 0u, 3205386570u, 0, SINF_TOLERANCE, 0}, +{579, 948775569u, 2159002624u, 948775569u, 0, SINF_TOLERANCE, 0}, +{580, 1034611395u, 0u, 1034598397u, 0, SINF_TOLERANCE, 0}, +{581, 3489122735u, 4294428604u, 3205374915u, 0, SINF_TOLERANCE, 0}, +{582, 1181604787u, 4294717096u, 3211889820u, 0, SINF_TOLERANCE, 0}, +{583, 3059042077u, 0u, 3059042077u, 0, SINF_TOLERANCE, 0}, +{584, 1043691622u, 4288164501u, 1043629469u, 0, SINF_TOLERANCE, 0}, +{585, 1314588083u, 0u, 1064881256u, 0, SINF_TOLERANCE, 0}, +{586, 3141533334u, 0u, 3141533316u, 0, SINF_TOLERANCE, 0}, +{587, 3157534378u, 3899913312u, 3157534140u, 0, SINF_TOLERANCE, 0}, +{588, 3400949680u, 0u, 1065322477u, 0, SINF_TOLERANCE, 0}, +{589, 3365581801u, 9596u, 3212766928u, 0, SINF_TOLERANCE, 0}, +{590, 1110424755u, 0u, 3175390686u, 0, SINF_TOLERANCE, 0}, +{591, 3189917167u, 0u, 3189872712u, 0, SINF_TOLERANCE, 0}, +{592, 969804941u, 4294836255u, 969804941u, 0, SINF_TOLERANCE, 0}, +{593, 1139120919u, 4294967176u, 1057188989u, 0, SINF_TOLERANCE, 0}, +{594, 934308144u, 0u, 934308144u, 0, SINF_TOLERANCE, 0}, +{595, 1220524226u, 1440u, 3200362112u, 0, SINF_TOLERANCE, 0}, +{596, 3162548604u, 3394333056u, 3162548257u, 0, SINF_TOLERANCE, 0}, +{597, 3382391700u, 4294966243u, 3212754531u, 0, SINF_TOLERANCE, 0}, +{598, 1156767533u, 7u, 1065268032u, 0, SINF_TOLERANCE, 0}, +{599, 3079222483u, 4294963487u, 3079222483u, 0, SINF_TOLERANCE, 0}, +{600, 994934087u, 0u, 994934065u, 0, SINF_TOLERANCE, 0}, +{601, 3185240099u, 122u, 3185212797u, 0, SINF_TOLERANCE, 0}, +{602, 3479873563u, 3288004u, 3209729459u, 0, SINF_TOLERANCE, 0}, +{603, 3424264117u, 4203174416u, 1026119980u, 0, SINF_TOLERANCE, 0}, +{604, 3228365887u, 275492u, 1057499407u, 0, SINF_TOLERANCE, 0}, +{605, 1035909900u, 4101891u, 1035891839u, 0, SINF_TOLERANCE, 0}, +{606, 3024951184u, 3626688u, 3024951184u, 0, SINF_TOLERANCE, 0}, +{607, 1212129651u, 0u, 3199599784u, 0, SINF_TOLERANCE, 0}, +{608, 3125775254u, 0u, 3125775253u, 0, SINF_TOLERANCE, 0}, +{609, 1037464105u, 0u, 1037438437u, 0, SINF_TOLERANCE, 0}, +{610, 1311706596u, 6702361u, 3209240801u, 0, SINF_TOLERANCE, 0}, +{611, 918212457u, 0u, 918212457u, 0, SINF_TOLERANCE, 0}, +{612, 1337315179u, 3421796288u, 1065124759u, 0, SINF_TOLERANCE, 0}, +{613, 1131358407u, 4294955130u, 1053199838u, 0, SINF_TOLERANCE, 0}, +{614, 1156517523u, 4294914801u, 1060309074u, 0, SINF_TOLERANCE, 0}, +{615, 3210802820u, 0u, 3208977252u, 0, SINF_TOLERANCE, 0}, +{616, 3337499209u, 621819u, 3160894060u, 0, SINF_TOLERANCE, 0}, +{617, 3468429030u, 4294967266u, 3212492606u, 0, SINF_TOLERANCE, 0}, +{618, 3253515800u, 28517u, 1064805533u, 0, SINF_TOLERANCE, 0}, +{619, 3055299953u, 0u, 3055299953u, 0, SINF_TOLERANCE, 0}, +{620, 959956547u, 0u, 959956547u, 0, SINF_TOLERANCE, 0}, +{621, 3425290480u, 461u, 3182677775u, 0, SINF_TOLERANCE, 0}, +{622, 1039917375u, 117u, 1039875792u, 0, SINF_TOLERANCE, 0}, +{623, 3220979495u, 4234725636u, 3211513265u, 0, SINF_TOLERANCE, 0}, +{624, 1311016004u, 4294941884u, 1064704129u, 0, SINF_TOLERANCE, 0}, +{625, 1128016396u, 27u, 3198585809u, 0, SINF_TOLERANCE, 0}, +{626, 3210335769u, 0u, 3208674258u, 0, SINF_TOLERANCE, 0}, +{627, 3022705759u, 4287084865u, 3022705759u, 0, SINF_TOLERANCE, 0}, +{628, 1206054701u, 0u, 1065236418u, 0, SINF_TOLERANCE, 0}, +{629, 3144504834u, 3170u, 3144504800u, 0, SINF_TOLERANCE, 0}, +{630, 1213609983u, 0u, 1065160120u, 0, SINF_TOLERANCE, 0}, +{631, 1246902946u, 0u, 1057771531u, 0, SINF_TOLERANCE, 0}, +{632, 995850843u, 3845036544u, 995850816u, 0, SINF_TOLERANCE, 0}, +{633, 3362082828u, 4294328268u, 3210050755u, 0, SINF_TOLERANCE, 0}, +{634, 1029480631u, 0u, 1029473640u, 0, SINF_TOLERANCE, 0}, +{635, 3153568584u, 0u, 3153568430u, 0, SINF_TOLERANCE, 0}, +{636, 3384988527u, 0u, 3162719737u, 0, SINF_TOLERANCE, 0}, +{637, 1317696241u, 0u, 1061478077u, 0, SINF_TOLERANCE, 0}, +{638, 3235395924u, 249u, 3202981334u, 0, SINF_TOLERANCE, 0}, +{639, 3341877624u, 0u, 1061330742u, 0, SINF_TOLERANCE, 0}, +{640, 1228636133u, 0u, 3212672750u, 0, SINF_TOLERANCE, 0}, +{641, 3161654634u, 4294939932u, 3161654050u, 0, SINF_TOLERANCE, 0}, +{642, 3162655243u, 4294964738u, 3162654883u, 0, SINF_TOLERANCE, 0}, +{643, 1207246237u, 0u, 3211137088u, 0, SINF_TOLERANCE, 0}, +{644, 1165476654u, 4294877038u, 3203498092u, 0, SINF_TOLERANCE, 0}, +{645, 1215278023u, 0u, 1064498991u, 0, SINF_TOLERANCE, 0}, +{646, 1017239798u, 4167373560u, 1017239108u, 0, SINF_TOLERANCE, 0}, +{647, 1149651309u, 0u, 3187990807u, 0, SINF_TOLERANCE, 0}, +{648, 1111943722u, 0u, 3204639422u, 0, SINF_TOLERANCE, 0}, +{649, 1189849849u, 4293652457u, 3182466673u, 0, SINF_TOLERANCE, 0}, +{650, 3204848496u, 0u, 3204451995u, 0, SINF_TOLERANCE, 0}, +{651, 1249758327u, 0u, 1057783887u, 0, SINF_TOLERANCE, 0}, +{652, 3092982276u, 4065500752u, 3092982276u, 0, SINF_TOLERANCE, 0}, +{653, 1168098747u, 1063712256u, 3212411223u, 0, SINF_TOLERANCE, 0}, +{654, 892549317u, 13301u, 892549317u, 0, SINF_TOLERANCE, 0}, +{655, 3301009024u, 4286178976u, 3212828669u, 0, SINF_TOLERANCE, 0}, +{656, 3233089227u, 204399u, 1058407346u, 0, SINF_TOLERANCE, 0}, +{657, 3218245284u, 1767132u, 3212791026u, 0, SINF_TOLERANCE, 0}, +{658, 3215981890u, 4294967286u, 3212516029u, 0, SINF_TOLERANCE, 0}, +{659, 1266687209u, 0u, 3210720211u, 0, SINF_TOLERANCE, 0}, +{660, 3487959775u, 4294948774u, 1064739176u, 0, SINF_TOLERANCE, 0}, +{661, 943645710u, 0u, 943645710u, 0, SINF_TOLERANCE, 0}, +{662, 3345065699u, 4294966959u, 1059625963u, 0, SINF_TOLERANCE, 0}, +{663, 935847271u, 1u, 935847271u, 0, SINF_TOLERANCE, 0}, +{664, 3410336089u, 47u, 3187177121u, 0, SINF_TOLERANCE, 0}, +{665, 3082940740u, 1562501120u, 3082940740u, 0, SINF_TOLERANCE, 0}, +{666, 1141063391u, 5507u, 3198746667u, 0, SINF_TOLERANCE, 0}, +{667, 3059263153u, 0u, 3059263153u, 0, SINF_TOLERANCE, 0}, +{668, 3353679791u, 0u, 3208816436u, 0, SINF_TOLERANCE, 0}, +{669, 1001823878u, 0u, 1001823816u, 0, SINF_TOLERANCE, 0}, +{670, 1009130212u, 0u, 1009130026u, 0, SINF_TOLERANCE, 0}, +{671, 3367127535u, 0u, 3207134818u, 0, SINF_TOLERANCE, 0}, +{672, 1032920919u, 3981458912u, 1032912962u, 0, SINF_TOLERANCE, 0}, +{673, 3281952870u, 0u, 3175316857u, 0, SINF_TOLERANCE, 0}, +{674, 1237868497u, 0u, 1051014031u, 0, SINF_TOLERANCE, 0}, +{675, 1153753924u, 4294958733u, 3211468600u, 0, SINF_TOLERANCE, 0}, +{676, 1120261759u, 0u, 3212822605u, 0, SINF_TOLERANCE, 0}, +{677, 3226328360u, 4294623870u, 1033471174u, 0, SINF_TOLERANCE, 0}, +{678, 3349595986u, 4294967271u, 3210079317u, 0, SINF_TOLERANCE, 0}, +{679, 3166889490u, 4294965026u, 3166888285u, 0, SINF_TOLERANCE, 0}, +{680, 1087750238u, 16u, 1053147309u, 0, SINF_TOLERANCE, 0}, +{681, 3121620061u, 4294773019u, 3121620061u, 0, SINF_TOLERANCE, 0}, +{682, 1066116543u, 0u, 1063458849u, 0, SINF_TOLERANCE, 0}, +{683, 3210898034u, 0u, 3209037800u, 0, SINF_TOLERANCE, 0}, +{684, 3051923237u, 4294697573u, 3051923237u, 0, SINF_TOLERANCE, 0}, +{685, 1030612298u, 4294908239u, 1030603534u, 0, SINF_TOLERANCE, 0}, +{686, 1186234578u, 0u, 1063804762u, 0, SINF_TOLERANCE, 0}, +{687, 1331680743u, 0u, 3209445822u, 0, SINF_TOLERANCE, 0}, +{688, 3060774997u, 2318310656u, 3060774997u, 0, SINF_TOLERANCE, 0}, +{689, 887589411u, 141578704u, 887589411u, 0, SINF_TOLERANCE, 0}, +{690, 1045232522u, 4294967290u, 1045142984u, 0, SINF_TOLERANCE, 0}, +{691, 3119858470u, 0u, 3119858469u, 0, SINF_TOLERANCE, 0}, +{692, 3349432725u, 0u, 3209985951u, 0, SINF_TOLERANCE, 0}, +{693, 912423027u, 0u, 912423027u, 0, SINF_TOLERANCE, 0}, +{694, 3228795133u, 4294967132u, 1058904161u, 0, SINF_TOLERANCE, 0}, +{695, 3194674746u, 0u, 3194540142u, 0, SINF_TOLERANCE, 0}, +{696, 3296784303u, 4294967098u, 3210593540u, 0, SINF_TOLERANCE, 0}, +{697, 965402291u, 0u, 965402291u, 0, SINF_TOLERANCE, 0}, +{698, 3388153589u, 4246639564u, 3205467070u, 0, SINF_TOLERANCE, 0}, +{699, 1133410485u, 4294951516u, 1062143430u, 0, SINF_TOLERANCE, 0}, +{700, 3136790322u, 7u, 3136790312u, 0, SINF_TOLERANCE, 0}, +{701, 3369970587u, 0u, 3212160316u, 0, SINF_TOLERANCE, 0}, +{702, 1270451568u, 0u, 1061894833u, 0, SINF_TOLERANCE, 0}, +{703, 989498922u, 0u, 989498912u, 0, SINF_TOLERANCE, 0}, +{704, 1280215674u, 0u, 3201629248u, 0, SINF_TOLERANCE, 0}, +{705, 1171873518u, 0u, 1052635782u, 0, SINF_TOLERANCE, 0}, +{706, 3298258100u, 0u, 1064538056u, 0, SINF_TOLERANCE, 0}, +{707, 3415208824u, 0u, 1063436503u, 0, SINF_TOLERANCE, 0}, +{708, 1001897182u, 0u, 1001897119u, 0, SINF_TOLERANCE, 0}, +{709, 3152777939u, 4294967281u, 3152777806u, 0, SINF_TOLERANCE, 0}, +{710, 985903305u, 4294945424u, 985903300u, 0, SINF_TOLERANCE, 0}, +{711, 3357328848u, 0u, 1040804283u, 0, SINF_TOLERANCE, 0}, +{712, 982612185u, 0u, 982612183u, 0, SINF_TOLERANCE, 0}, +{713, 3267868136u, 136421u, 1059068932u, 0, SINF_TOLERANCE, 0}, +{714, 3319048157u, 7150u, 3197369568u, 0, SINF_TOLERANCE, 0}, +{715, 1144755661u, 0u, 1056274450u, 0, SINF_TOLERANCE, 0}, +{716, 898467286u, 0u, 898467286u, 0, SINF_TOLERANCE, 0}, +{717, 3301461672u, 1119632u, 3195609227u, 0, SINF_TOLERANCE, 0}, +{718, 3364525678u, 0u, 1048350503u, 0, SINF_TOLERANCE, 0}, +{719, 931441127u, 285u, 931441127u, 0, SINF_TOLERANCE, 0}, +{720, 3146660041u, 0u, 3146660012u, 0, SINF_TOLERANCE, 0}, +{721, 3467121799u, 0u, 3191624506u, 0, SINF_TOLERANCE, 0}, +{722, 1151257041u, 0u, 1063553242u, 0, SINF_TOLERANCE, 0}, +{723, 3097873255u, 4294967295u, 3097873255u, 0, SINF_TOLERANCE, 0}, +{724, 3130670309u, 0u, 3130670307u, 0, SINF_TOLERANCE, 0}, +{725, 1017573824u, 0u, 1017573067u, 0, SINF_TOLERANCE, 0}, +{726, 1258369714u, 3364363264u, 1063753689u, 0, SINF_TOLERANCE, 0}, +{727, 1216602683u, 4294468761u, 1057835366u, 0, SINF_TOLERANCE, 0}, +{728, 3297265739u, 228335u, 1040265730u, 0, SINF_TOLERANCE, 0}, +{729, 1071940738u, 4294963632u, 1064968741u, 0, SINF_TOLERANCE, 0}, +{730, 922601356u, 4294937447u, 922601356u, 0, SINF_TOLERANCE, 0}, +{731, 3462285635u, 4085532736u, 3194013834u, 0, SINF_TOLERANCE, 0}, +{732, 3357177805u, 5u, 3208612869u, 0, SINF_TOLERANCE, 0}, +{733, 3049120080u, 0u, 3049120080u, 0, SINF_TOLERANCE, 0}, +{734, 1153863660u, 0u, 3211361779u, 0, SINF_TOLERANCE, 0}, +{735, 3034243695u, 0u, 3034243695u, 0, SINF_TOLERANCE, 0}, +{736, 1249365132u, 4294967060u, 1061469301u, 0, SINF_TOLERANCE, 0}, +{737, 3046215730u, 0u, 3046215730u, 0, SINF_TOLERANCE, 0}, +{738, 3047251716u, 8u, 3047251716u, 0, SINF_TOLERANCE, 0}, +{739, 3131219358u, 2355170688u, 3131219355u, 0, SINF_TOLERANCE, 0}, +{740, 3222096285u, 59453u, 3209548358u, 0, SINF_TOLERANCE, 0}, +{741, 1297708818u, 0u, 1057704214u, 0, SINF_TOLERANCE, 0}, +{742, 3345532722u, 4293531291u, 3212744575u, 0, SINF_TOLERANCE, 0}, +{743, 3418753236u, 4002743296u, 3212231875u, 0, SINF_TOLERANCE, 0}, +{744, 1277417964u, 1103002624u, 1054784824u, 0, SINF_TOLERANCE, 0}, +{745, 987577257u, 1370u, 987577250u, 0, SINF_TOLERANCE, 0}, +{746, 3161606610u, 0u, 3161606031u, 0, SINF_TOLERANCE, 0}, +{747, 888030585u, 0u, 888030585u, 0, SINF_TOLERANCE, 0}, +{748, 1043442869u, 4294963715u, 1043384531u, 0, SINF_TOLERANCE, 0}, +{749, 3320923228u, 3214934912u, 1065298241u, 0, SINF_TOLERANCE, 0}, +{750, 1337400405u, 418188288u, 3194509316u, 0, SINF_TOLERANCE, 0}, +{751, 3400348640u, 0u, 1036996135u, 0, SINF_TOLERANCE, 0}, +{752, 1250249095u, 1u, 1049963674u, 0, SINF_TOLERANCE, 0}, +{753, 3284411233u, 7805u, 3201435394u, 0, SINF_TOLERANCE, 0}, +{754, 3020883322u, 0u, 3020883322u, 0, SINF_TOLERANCE, 0}, +{755, 1215968622u, 2531374080u, 3211232354u, 0, SINF_TOLERANCE, 0}, +{756, 3202319550u, 0u, 3201858668u, 0, SINF_TOLERANCE, 0}, +{757, 3061638260u, 0u, 3061638260u, 0, SINF_TOLERANCE, 0}, +{758, 1025404104u, 1u, 1025401516u, 0, SINF_TOLERANCE, 0}, +{759, 3138086437u, 0u, 3138086430u, 0, SINF_TOLERANCE, 0}, +{760, 3091024506u, 3752313152u, 3091024506u, 0, SINF_TOLERANCE, 0}, +{761, 3362748242u, 4294517284u, 1057934339u, 0, SINF_TOLERANCE, 0}, +{762, 3099671635u, 4294967295u, 3099671635u, 0, SINF_TOLERANCE, 0}, +{763, 3068014841u, 0u, 3068014841u, 0, SINF_TOLERANCE, 0}, +{764, 1252237719u, 105u, 3212473786u, 0, SINF_TOLERANCE, 0}, +{765, 3327895594u, 517257u, 3205339525u, 0, SINF_TOLERANCE, 0}, +{766, 3082454432u, 0u, 3082454432u, 0, SINF_TOLERANCE, 0}, +{767, 3396161504u, 16393u, 1037999699u, 0, SINF_TOLERANCE, 0}, +{768, 1099710167u, 0u, 3212307285u, 0, SINF_TOLERANCE, 0}, +{769, 1157186482u, 109233848u, 1060562703u, 0, SINF_TOLERANCE, 0}, +{770, 1282110851u, 0u, 1056730550u, 0, SINF_TOLERANCE, 0}, +{771, 3477008113u, 3797391872u, 3212786491u, 0, SINF_TOLERANCE, 0}, +{772, 3292127294u, 4282395772u, 3210643173u, 0, SINF_TOLERANCE, 0}, +{773, 1123357102u, 4294966999u, 3159060470u, 0, SINF_TOLERANCE, 0}, +{774, 1106837025u, 0u, 3197325155u, 0, SINF_TOLERANCE, 0}, +{775, 1049949008u, 230u, 1049811896u, 0, SINF_TOLERANCE, 0}, +{776, 1253017688u, 0u, 3211136840u, 0, SINF_TOLERANCE, 0}, +{777, 1108543194u, 4294966999u, 3209632139u, 0, SINF_TOLERANCE, 0}, +{778, 3087985411u, 1700586u, 3087985411u, 0, SINF_TOLERANCE, 0}, +{779, 3163283126u, 2976129280u, 3163282681u, 0, SINF_TOLERANCE, 0}, +{780, 1160162706u, 14164775u, 1052133849u, 0, SINF_TOLERANCE, 0}, +{781, 3305715025u, 0u, 3206092235u, 0, SINF_TOLERANCE, 0}, +{782, 1266928623u, 0u, 1060953065u, 0, SINF_TOLERANCE, 0}, +{783, 3025340297u, 43483u, 3025340297u, 0, SINF_TOLERANCE, 0}, +{784, 3438080027u, 0u, 1048692127u, 0, SINF_TOLERANCE, 0}, +{785, 3344574751u, 0u, 1062946039u, 0, SINF_TOLERANCE, 0}, +{786, 1152416724u, 0u, 3212200670u, 0, SINF_TOLERANCE, 0}, +{787, 1218239308u, 161u, 1064099748u, 0, SINF_TOLERANCE, 0}, +{788, 3263310567u, 0u, 3209093074u, 0, SINF_TOLERANCE, 0}, +{789, 3041998669u, 2782u, 3041998669u, 0, SINF_TOLERANCE, 0}, +{790, 1000313118u, 0u, 1000313077u, 0, SINF_TOLERANCE, 0}, +{791, 972485427u, 131u, 972485426u, 0, SINF_TOLERANCE, 0}, +{792, 3290264612u, 137u, 3212790164u, 0, SINF_TOLERANCE, 0}, +{793, 3222106584u, 18249u, 3209523821u, 0, SINF_TOLERANCE, 0}, +{794, 1278946388u, 0u, 1060997095u, 0, SINF_TOLERANCE, 0}, +{795, 947914771u, 0u, 947914771u, 0, SINF_TOLERANCE, 0}, +{796, 3167730654u, 0u, 3167729195u, 0, SINF_TOLERANCE, 0}, +{797, 1098530298u, 4294967260u, 1032507489u, 0, SINF_TOLERANCE, 0}, +{798, 3232726036u, 0u, 1060602925u, 0, SINF_TOLERANCE, 0}, +{799, 1297190916u, 0u, 3212169414u, 0, SINF_TOLERANCE, 0}, +{800, 1277649137u, 0u, 3212717518u, 0, SINF_TOLERANCE, 0}, +{801, 3203377685u, 466619008u, 3202810349u, 0, SINF_TOLERANCE, 0}, +{802, 3090306474u, 0u, 3090306474u, 0, SINF_TOLERANCE, 0}, +{803, 3244032016u, 0u, 3211595152u, 0, SINF_TOLERANCE, 0}, +{804, 3033122376u, 0u, 3033122376u, 0, SINF_TOLERANCE, 0}, +{805, 1096155623u, 7454884u, 1060717035u, 0, SINF_TOLERANCE, 0}, +{806, 873151908u, 4294967280u, 873151908u, 0, SINF_TOLERANCE, 0}, +{807, 3238729605u, 245005088u, 3207267052u, 0, SINF_TOLERANCE, 0}, +{808, 3317196817u, 0u, 3210991004u, 0, SINF_TOLERANCE, 0}, +{809, 3374748510u, 0u, 3199463111u, 0, SINF_TOLERANCE, 0}, +{810, 3345634950u, 0u, 1064868668u, 0, SINF_TOLERANCE, 0}, +{811, 3189860276u, 0u, 3189816530u, 0, SINF_TOLERANCE, 0}, +{812, 887311687u, 9077u, 887311687u, 0, SINF_TOLERANCE, 0}, +{813, 3396917283u, 0u, 3176444374u, 0, SINF_TOLERANCE, 0}, +{814, 3317032737u, 0u, 3203167975u, 0, SINF_TOLERANCE, 0}, +{815, 1200051436u, 3555u, 3211188622u, 0, SINF_TOLERANCE, 0}, +{816, 3105291012u, 45279u, 3105291012u, 0, SINF_TOLERANCE, 0}, +{817, 1306520561u, 0u, 3211052194u, 0, SINF_TOLERANCE, 0}, +{818, 1314936356u, 0u, 3208995553u, 0, SINF_TOLERANCE, 0}, +{819, 3475052219u, 71851496u, 3185927000u, 0, SINF_TOLERANCE, 0}, +{820, 3085636260u, 33u, 3085636260u, 0, SINF_TOLERANCE, 0}, +{821, 3393227708u, 4294967164u, 3184801513u, 0, SINF_TOLERANCE, 0}, +{822, 3182540197u, 0u, 3182525587u, 0, SINF_TOLERANCE, 0}, +{823, 3349005404u, 0u, 3182748692u, 0, SINF_TOLERANCE, 0}, +{824, 3154720153u, 4090490144u, 3154720048u, 0, SINF_TOLERANCE, 0}, +{825, 1262863321u, 345111u, 1057245203u, 0, SINF_TOLERANCE, 0}, +{826, 882902102u, 512593u, 882902102u, 0, SINF_TOLERANCE, 0}, +{827, 1053387478u, 0u, 1053049633u, 0, SINF_TOLERANCE, 0}, +{828, 3387653691u, 4294896063u, 3212836766u, 0, SINF_TOLERANCE, 0}, +{829, 3136364836u, 0u, 3136364827u, 0, SINF_TOLERANCE, 0}, +{830, 1338680611u, 4126u, 1054227324u, 0, SINF_TOLERANCE, 0}, +{831, 1112891928u, 0u, 1031461115u, 0, SINF_TOLERANCE, 0}, +{832, 893449284u, 0u, 893449284u, 0, SINF_TOLERANCE, 0}, +{833, 892311459u, 14u, 892311459u, 0, SINF_TOLERANCE, 0}, +{834, 3105373037u, 4294967280u, 3105373037u, 0, SINF_TOLERANCE, 0}, +{835, 1190105283u, 0u, 1059448616u, 0, SINF_TOLERANCE, 0}, +{836, 1011225926u, 14129u, 1011225610u, 0, SINF_TOLERANCE, 0}, +{837, 1043025031u, 0u, 1042972745u, 0, SINF_TOLERANCE, 0}, +{838, 3410531037u, 0u, 3204114341u, 0, SINF_TOLERANCE, 0}, +{839, 3125834184u, 0u, 3125834183u, 0, SINF_TOLERANCE, 0}, +{840, 902318189u, 0u, 902318189u, 0, SINF_TOLERANCE, 0}, +{841, 3213624815u, 0u, 3210965166u, 0, SINF_TOLERANCE, 0}, +{842, 1120888322u, 5u, 3168436714u, 0, SINF_TOLERANCE, 0}, +{843, 1315217243u, 4291026624u, 1062278922u, 0, SINF_TOLERANCE, 0}, +{844, 3137758475u, 0u, 3137758469u, 0, SINF_TOLERANCE, 0}, +{845, 1040617590u, 0u, 1040592230u, 0, SINF_TOLERANCE, 0}, +{846, 955384253u, 4294910624u, 955384253u, 0, SINF_TOLERANCE, 0}, +{847, 3061417900u, 7119u, 3061417900u, 0, SINF_TOLERANCE, 0}, +{848, 904255535u, 0u, 904255535u, 0, SINF_TOLERANCE, 0}, +{849, 1022984119u, 0u, 1022981591u, 0, SINF_TOLERANCE, 0}, +{850, 997362368u, 0u, 997362332u, 0, SINF_TOLERANCE, 0}, +{851, 900933520u, 19u, 900933520u, 0, SINF_TOLERANCE, 0}, +{852, 1168623062u, 661u, 1048554722u, 0, SINF_TOLERANCE, 0}, +{853, 878737490u, 4294967181u, 878737490u, 0, SINF_TOLERANCE, 0}, +{854, 1039827284u, 1u, 1039786377u, 0, SINF_TOLERANCE, 0}, +{855, 1021564080u, 0u, 1021562155u, 0, SINF_TOLERANCE, 0}, +{856, 3458669745u, 0u, 3208611126u, 0, SINF_TOLERANCE, 0}, +{857, 3327516316u, 4286775627u, 3196519084u, 0, SINF_TOLERANCE, 0}, +{858, 1040711112u, 4294967293u, 1040684937u, 0, SINF_TOLERANCE, 0}, +{859, 1134528351u, 4294638880u, 3212547697u, 0, SINF_TOLERANCE, 0}, +{860, 3039884464u, 6340u, 3039884464u, 0, SINF_TOLERANCE, 0}, +{861, 3414352838u, 4294876517u, 3187938361u, 0, SINF_TOLERANCE, 0}, +{862, 1133689539u, 1u, 3212184237u, 0, SINF_TOLERANCE, 0}, +{863, 3455688478u, 4294945415u, 3212828554u, 0, SINF_TOLERANCE, 0}, +{864, 1137634874u, 395u, 3208429720u, 0, SINF_TOLERANCE, 0}, +{865, 3415502662u, 0u, 3208492898u, 0, SINF_TOLERANCE, 0}, +{866, 954999730u, 0u, 954999730u, 0, SINF_TOLERANCE, 0}, +{867, 1066157309u, 4294967285u, 1063496309u, 0, SINF_TOLERANCE, 0}, +{868, 3436353675u, 8741u, 1057896763u, 0, SINF_TOLERANCE, 0}, +{869, 940437609u, 0u, 940437609u, 0, SINF_TOLERANCE, 0}, +{870, 3108347547u, 4203356328u, 3108347547u, 0, SINF_TOLERANCE, 0}, +{871, 3064200154u, 0u, 3064200154u, 0, SINF_TOLERANCE, 0}, +{872, 1023889593u, 0u, 1023887980u, 0, SINF_TOLERANCE, 0}, +{873, 3272661536u, 3393767296u, 3198822684u, 0, SINF_TOLERANCE, 0}, +{874, 1170245333u, 1083705u, 3192009928u, 0, SINF_TOLERANCE, 0}, +{875, 1219052056u, 4294526211u, 3204945810u, 0, SINF_TOLERANCE, 0}, +{876, 3318983619u, 4294967246u, 3192381578u, 0, SINF_TOLERANCE, 0}, +{877, 3372118621u, 0u, 1065320170u, 0, SINF_TOLERANCE, 0}, +{878, 3146190320u, 0u, 3146190295u, 0, SINF_TOLERANCE, 0}, +{879, 1299683827u, 0u, 3191216603u, 0, SINF_TOLERANCE, 0}, +{880, 3190796331u, 1457792256u, 3190739926u, 0, SINF_TOLERANCE, 0}, +{881, 3086068902u, 2772570624u, 3086068902u, 0, SINF_TOLERANCE, 0}, +{882, 3064155399u, 0u, 3064155399u, 0, SINF_TOLERANCE, 0}, +{883, 3040314717u, 1u, 3040314717u, 0, SINF_TOLERANCE, 0}, +{884, 3257224022u, 4294737239u, 1055767359u, 0, SINF_TOLERANCE, 0}, +{885, 1229268598u, 1u, 3190440857u, 0, SINF_TOLERANCE, 0}, +{886, 3184078812u, 0u, 3184057616u, 0, SINF_TOLERANCE, 0}, +{887, 1086717248u, 4256439624u, 3183761749u, 0, SINF_TOLERANCE, 0}, +{888, 3434884607u, 0u, 3201046083u, 0, SINF_TOLERANCE, 0}, +{889, 3464955606u, 0u, 1058723576u, 0, SINF_TOLERANCE, 0}, +{890, 1025278524u, 0u, 1025276028u, 0, SINF_TOLERANCE, 0}, +{891, 1242829722u, 4294967290u, 3210159424u, 0, SINF_TOLERANCE, 0}, +{892, 3075149137u, 76u, 3075149137u, 0, SINF_TOLERANCE, 0}, +{893, 1200927971u, 1093714048u, 3212110569u, 0, SINF_TOLERANCE, 0}, +{894, 3326858092u, 3870213632u, 3209830012u, 0, SINF_TOLERANCE, 0}, +{895, 1246019790u, 0u, 1054169513u, 0, SINF_TOLERANCE, 0}, +{896, 3184801644u, 424u, 3184776768u, 0, SINF_TOLERANCE, 0}, +{897, 1136052740u, 4294967282u, 1063913525u, 0, SINF_TOLERANCE, 0}, +{898, 1069009211u, 0u, 1065200638u, 0, SINF_TOLERANCE, 0}, +{899, 1015670780u, 20u, 1015670353u, 0, SINF_TOLERANCE, 0}, +{900, 1012543234u, 70u, 1012542811u, 0, SINF_TOLERANCE, 0}, +{901, 3316611992u, 4291436324u, 1065170673u, 0, SINF_TOLERANCE, 0}, +{902, 1087942795u, 4294961657u, 1055930559u, 0, SINF_TOLERANCE, 0}, +{903, 3426365713u, 0u, 3202661746u, 0, SINF_TOLERANCE, 0}, +{904, 3066654389u, 4087070784u, 3066654389u, 0, SINF_TOLERANCE, 0}, +{905, 3295326432u, 842363840u, 3205148900u, 0, SINF_TOLERANCE, 0}, +{906, 3318835308u, 4294967077u, 1024576997u, 0, SINF_TOLERANCE, 0}, +{907, 3283555717u, 0u, 3212587646u, 0, SINF_TOLERANCE, 0}, +{908, 3381255420u, 0u, 1064304600u, 0, SINF_TOLERANCE, 0}, +{909, 3040485181u, 4294241104u, 3040485181u, 0, SINF_TOLERANCE, 0}, +{910, 3388772093u, 0u, 3209717469u, 0, SINF_TOLERANCE, 0}, +{911, 954670189u, 760u, 954670189u, 0, SINF_TOLERANCE, 0}, +{912, 1319200415u, 4293050361u, 1046943470u, 0, SINF_TOLERANCE, 0}, +{913, 1279324488u, 4294967293u, 1064422515u, 0, SINF_TOLERANCE, 0}, +{914, 3217795424u, 0u, 3212833404u, 0, SINF_TOLERANCE, 0}, +{915, 3455131757u, 10314665u, 3183800585u, 0, SINF_TOLERANCE, 0}, +{916, 1246947517u, 6u, 3184419344u, 0, SINF_TOLERANCE, 0}, +{917, 3396723577u, 0u, 1064229414u, 0, SINF_TOLERANCE, 0}, +{918, 3433761025u, 0u, 3205870305u, 0, SINF_TOLERANCE, 0}, +{919, 3201187455u, 0u, 3200824870u, 0, SINF_TOLERANCE, 0}, +{920, 1173247961u, 32661u, 3208164870u, 0, SINF_TOLERANCE, 0}, +{921, 3037297123u, 4294904338u, 3037297123u, 0, SINF_TOLERANCE, 0}, +{922, 3248534678u, 1927801856u, 3211919740u, 0, SINF_TOLERANCE, 0}, +{923, 3083019343u, 0u, 3083019343u, 0, SINF_TOLERANCE, 0}, +{924, 3042018375u, 0u, 3042018375u, 0, SINF_TOLERANCE, 0}, +{925, 1082862511u, 0u, 3211741763u, 0, SINF_TOLERANCE, 0}, +{926, 3157626955u, 3075906560u, 3157626711u, 0, SINF_TOLERANCE, 0}, +{927, 1341821683u, 0u, 3212804055u, 0, SINF_TOLERANCE, 0}, +{928, 881101379u, 32095u, 881101379u, 0, SINF_TOLERANCE, 0}, +{929, 1079061705u, 0u, 3187766776u, 0, SINF_TOLERANCE, 0}, +{930, 3182695954u, 4294967257u, 3182680751u, 0, SINF_TOLERANCE, 0}, +{931, 1105291533u, 3424974848u, 1036547753u, 0, SINF_TOLERANCE, 0}, +{932, 1016023520u, 4294967293u, 1016023041u, 0, SINF_TOLERANCE, 0}, +{933, 3370691006u, 198615840u, 3208609055u, 0, SINF_TOLERANCE, 0}, +{934, 1156767169u, 0u, 1065176556u, 0, SINF_TOLERANCE, 0}, +{935, 3077020499u, 0u, 3077020499u, 0, SINF_TOLERANCE, 0}, +{936, 1104284039u, 0u, 1063691119u, 0, SINF_TOLERANCE, 0}, +{937, 3335212901u, 1662125568u, 1064530211u, 0, SINF_TOLERANCE, 0}, +{938, 1093697541u, 0u, 3212826186u, 0, SINF_TOLERANCE, 0}, +{939, 3266691185u, 2645u, 3194602969u, 0, SINF_TOLERANCE, 0}, +{940, 3179003144u, 37u, 3178992760u, 0, SINF_TOLERANCE, 0}, +{941, 1094115255u, 0u, 3211281158u, 0, SINF_TOLERANCE, 0}, +{942, 3424086808u, 4294967244u, 3205170345u, 0, SINF_TOLERANCE, 0}, +{943, 3353608773u, 305u, 1063078133u, 0, SINF_TOLERANCE, 0}, +{944, 973664327u, 1394344832u, 973664327u, 0, SINF_TOLERANCE, 0}, +{945, 882878091u, 0u, 882878091u, 0, SINF_TOLERANCE, 0}, +{946, 1098662266u, 0u, 3178071700u, 0, SINF_TOLERANCE, 0}, +{947, 927582555u, 0u, 927582555u, 0, SINF_TOLERANCE, 0}, +{948, 3111440310u, 0u, 3111440310u, 0, SINF_TOLERANCE, 0}, +{949, 3476083859u, 0u, 3181075587u, 0, SINF_TOLERANCE, 0}, +{950, 3038754840u, 0u, 3038754840u, 0, SINF_TOLERANCE, 0}, +{951, 979878744u, 1008405u, 979878742u, 0, SINF_TOLERANCE, 0}, +{952, 3464546616u, 0u, 1065326173u, 0, SINF_TOLERANCE, 0}, +{953, 1002542205u, 0u, 1002542131u, 0, SINF_TOLERANCE, 0}, +{954, 3443552129u, 0u, 1047774072u, 0, SINF_TOLERANCE, 0}, +{955, 1287620154u, 0u, 1063607690u, 0, SINF_TOLERANCE, 0}, +{956, 946058434u, 4207447u, 946058434u, 0, SINF_TOLERANCE, 0}, +{957, 3073260205u, 0u, 3073260205u, 0, SINF_TOLERANCE, 0}, +{958, 1245702957u, 0u, 1049967502u, 0, SINF_TOLERANCE, 0}, +{959, 989655126u, 528989952u, 989655116u, 0, SINF_TOLERANCE, 0}, +{960, 1002715618u, 32425u, 1002715541u, 0, SINF_TOLERANCE, 0}, +{961, 3087802274u, 0u, 3087802274u, 0, SINF_TOLERANCE, 0}, +{962, 1000863905u, 54834u, 1000863857u, 0, SINF_TOLERANCE, 0}, +{963, 3415763001u, 0u, 1062474805u, 0, SINF_TOLERANCE, 0}, +{964, 3283471961u, 10190634u, 1060758212u, 0, SINF_TOLERANCE, 0}, +{965, 3311210827u, 36713u, 1051772445u, 0, SINF_TOLERANCE, 0}, +{966, 3026311911u, 0u, 3026311911u, 0, SINF_TOLERANCE, 0}, +{967, 1198307901u, 68u, 1061883151u, 0, SINF_TOLERANCE, 0}, +{968, 1288901567u, 206618288u, 3207429230u, 0, SINF_TOLERANCE, 0}, +{969, 922255363u, 0u, 922255363u, 0, SINF_TOLERANCE, 0}, +{970, 1113104661u, 0u, 3207498491u, 0, SINF_TOLERANCE, 0}, +{971, 1136714348u, 0u, 1058688901u, 0, SINF_TOLERANCE, 0}, +{972, 948856035u, 0u, 948856035u, 0, SINF_TOLERANCE, 0}, +{973, 1062512367u, 4294967293u, 1060964042u, 0, SINF_TOLERANCE, 0}, +{974, 3486907092u, 0u, 1060191997u, 0, SINF_TOLERANCE, 0}, +{975, 1162027071u, 4294964303u, 3207219290u, 0, SINF_TOLERANCE, 0}, +{976, 1034561811u, 0u, 1034548985u, 0, SINF_TOLERANCE, 0}, +{977, 3271615417u, 0u, 1034703688u, 0, SINF_TOLERANCE, 0}, +{978, 1042014529u, 869u, 1041975120u, 0, SINF_TOLERANCE, 0}, +{979, 1177157787u, 0u, 3208280448u, 0, SINF_TOLERANCE, 0}, +{980, 3196144817u, 0u, 3196050420u, 0, SINF_TOLERANCE, 0}, +{981, 3432084552u, 0u, 1063814911u, 0, SINF_TOLERANCE, 0}, +{982, 1309658335u, 0u, 1056586960u, 0, SINF_TOLERANCE, 0}, +{983, 1226494979u, 0u, 1065146136u, 0, SINF_TOLERANCE, 0}, +{984, 3100289712u, 3743522688u, 3100289712u, 0, SINF_TOLERANCE, 0}, +{985, 3375507013u, 462886112u, 3204896610u, 0, SINF_TOLERANCE, 0}, +{986, 3460699001u, 0u, 3212836850u, 0, SINF_TOLERANCE, 0}, +{987, 3079231719u, 0u, 3079231719u, 0, SINF_TOLERANCE, 0}, +{988, 3093951884u, 0u, 3093951884u, 0, SINF_TOLERANCE, 0}, +{989, 3468023178u, 156157u, 3212716691u, 0, SINF_TOLERANCE, 0}, +{990, 1204196034u, 4294966040u, 1064715383u, 0, SINF_TOLERANCE, 0}, +{991, 3459877411u, 0u, 3212701032u, 0, SINF_TOLERANCE, 0}, +{992, 909696559u, 3378u, 909696559u, 0, SINF_TOLERANCE, 0}, +{993, 1161439847u, 0u, 1053879087u, 0, SINF_TOLERANCE, 0}, +{994, 908663107u, 0u, 908663107u, 0, SINF_TOLERANCE, 0}, +{995, 1055319316u, 4294967238u, 1054811608u, 0, SINF_TOLERANCE, 0}, +{996, 1084378658u, 0u, 3211763466u, 0, SINF_TOLERANCE, 0}, +{997, 3053887750u, 4294922339u, 3053887750u, 0, SINF_TOLERANCE, 0}, +{998, 3022828828u, 0u, 3022828828u, 0, SINF_TOLERANCE, 0}, +{999, 1226473697u, 0u, 3203662642u, 0, SINF_TOLERANCE, 0}, +{1000, 1123114742u, 841711u, 1064763840u, 0, SINF_TOLERANCE, 0}, +{1001, 1258114435u, 130141336u, 3204368636u, 0, SINF_TOLERANCE, 0}, +{1002, 3468040845u, 0u, 3205961198u, 0, SINF_TOLERANCE, 0}, +{1003, 1178825761u, 54u, 3207974092u, 0, SINF_TOLERANCE, 0}, +{1004, 3059266302u, 0u, 3059266302u, 0, SINF_TOLERANCE, 0}, +{1005, 3223384012u, 225u, 3205902554u, 0, SINF_TOLERANCE, 0}, +{1006, 1019964626u, 1299605u, 1019963256u, 0, SINF_TOLERANCE, 0}, +{1007, 3445262427u, 3129568512u, 1060950633u, 0, SINF_TOLERANCE, 0}, +{1008, 1125653081u, 129823u, 1064770536u, 0, SINF_TOLERANCE, 0}, +{1009, 3337652712u, 0u, 3212411443u, 0, SINF_TOLERANCE, 0}, +{1010, 1184753508u, 0u, 3212277391u, 0, SINF_TOLERANCE, 0}, +{1011, 996404791u, 4294853343u, 996404761u, 0, SINF_TOLERANCE, 0}, +{1012, 1188439315u, 55u, 3188727200u, 0, SINF_TOLERANCE, 0}, +{1013, 906557513u, 0u, 906557513u, 0, SINF_TOLERANCE, 0}, +{1014, 916831283u, 0u, 916831283u, 0, SINF_TOLERANCE, 0}, +{1015, 996786317u, 0u, 996786285u, 0, SINF_TOLERANCE, 0}, +{1016, 3461635065u, 0u, 1061514522u, 0, SINF_TOLERANCE, 0}, +{1017, 1188167943u, 74707u, 1063103232u, 0, SINF_TOLERANCE, 0}, +{1018, 3036502395u, 7309u, 3036502395u, 0, SINF_TOLERANCE, 0}, +{1019, 891257783u, 18537700u, 891257783u, 0, SINF_TOLERANCE, 0}, +{1020, 3290079438u, 0u, 3200153812u, 0, SINF_TOLERANCE, 0}, +{1021, 3350690327u, 0u, 3196820093u, 0, SINF_TOLERANCE, 0}, +{1022, 1102061604u, 4253821380u, 3167292829u, 0, SINF_TOLERANCE, 0}, +{1023, 1282351521u, 0u, 1061321845u, 0, SINF_TOLERANCE, 0}, +{1024, 3458861065u, 4292002951u, 1059823021u, 0, SINF_TOLERANCE, 0}, +{1025, 3095256878u, 0u, 3095256878u, 0, SINF_TOLERANCE, 0}, +{1026, 3163373610u, 0u, 3163373151u, 0, SINF_TOLERANCE, 0}, +{1027, 3228793330u, 0u, 1058898476u, 0, SINF_TOLERANCE, 0}, +{1028, 3422194733u, 0u, 1065154839u, 0, SINF_TOLERANCE, 0}, +{1029, 3083885296u, 0u, 3083885296u, 0, SINF_TOLERANCE, 0}, +{1030, 1261940623u, 4288291120u, 1061418234u, 0, SINF_TOLERANCE, 0}, +{1031, 3400603081u, 4294967290u, 3212371450u, 0, SINF_TOLERANCE, 0}, +{1032, 1219411812u, 0u, 3208405055u, 0, SINF_TOLERANCE, 0}, +{1033, 3094833770u, 0u, 3094833770u, 0, SINF_TOLERANCE, 0}, +{1034, 3139250800u, 0u, 3139250790u, 0, SINF_TOLERANCE, 0}, +{1035, 886201503u, 4294967150u, 886201503u, 0, SINF_TOLERANCE, 0}, +{1036, 3297366026u, 7u, 3192470223u, 0, SINF_TOLERANCE, 0}, +{1037, 1218488455u, 4294964141u, 1045436187u, 0, SINF_TOLERANCE, 0}, +{1038, 3040358923u, 0u, 3040358923u, 0, SINF_TOLERANCE, 0}, +{1039, 1283938137u, 53086u, 3191014709u, 0, SINF_TOLERANCE, 0}, +{1040, 3182551696u, 0u, 3182537043u, 0, SINF_TOLERANCE, 0}, +{1041, 1317098613u, 0u, 3212501318u, 0, SINF_TOLERANCE, 0}, +{1042, 3116209179u, 4294965434u, 3116209179u, 0, SINF_TOLERANCE, 0}, +{1043, 3431703657u, 0u, 3206335982u, 0, SINF_TOLERANCE, 0}, +{1044, 3239728775u, 0u, 1046532122u, 0, SINF_TOLERANCE, 0}, +{1045, 3207141672u, 0u, 3206353199u, 0, SINF_TOLERANCE, 0}, +{1046, 3154378805u, 0u, 3154378711u, 0, SINF_TOLERANCE, 0}, +{1047, 3069658155u, 0u, 3069658155u, 0, SINF_TOLERANCE, 0}, +{1048, 3313160088u, 0u, 1063962697u, 0, SINF_TOLERANCE, 0}, +{1049, 3207056527u, 4293469023u, 3206285831u, 0, SINF_TOLERANCE, 0}, +{1050, 1284174954u, 4180334232u, 1064619785u, 0, SINF_TOLERANCE, 0}, +{1051, 3156081645u, 4294964338u, 3156081485u, 0, SINF_TOLERANCE, 0}, +{1052, 1063693032u, 0u, 1061728939u, 0, SINF_TOLERANCE, 0}, +{1053, 3036026175u, 4845007u, 3036026175u, 0, SINF_TOLERANCE, 0}, +{1054, 1102631663u, 4290881696u, 3211100727u, 0, SINF_TOLERANCE, 0}, +{1055, 968803479u, 0u, 968803479u, 0, SINF_TOLERANCE, 0}, +{1056, 3273080388u, 0u, 3202168628u, 0, SINF_TOLERANCE, 0}, +{1057, 1172529774u, 4294966405u, 1052481368u, 0, SINF_TOLERANCE, 0}, +{1058, 1306695905u, 147733664u, 1063024816u, 0, SINF_TOLERANCE, 0}, +{1059, 1003649752u, 338518u, 1003649657u, 0, SINF_TOLERANCE, 0}, +{1060, 1078478376u, 2364151808u, 1011462484u, 0, SINF_TOLERANCE, 0}, +{1061, 3158855023u, 0u, 3158854696u, 0, SINF_TOLERANCE, 0}, +{1062, 1165177679u, 4294967097u, 1064368675u, 0, SINF_TOLERANCE, 0}, +{1063, 3403009513u, 4293749042u, 3200332882u, 0, SINF_TOLERANCE, 0}, +{1064, 952348506u, 4294108410u, 952348506u, 0, SINF_TOLERANCE, 0}, +{1065, 1222777442u, 153u, 1061418024u, 0, SINF_TOLERANCE, 0}, +{1066, 1325324763u, 0u, 1057307338u, 0, SINF_TOLERANCE, 0}, +{1067, 3363524213u, 0u, 1057332239u, 0, SINF_TOLERANCE, 0}, +{1068, 1158950321u, 1u, 1063101660u, 0, SINF_TOLERANCE, 0}, +{1069, 903129873u, 4272788450u, 903129873u, 0, SINF_TOLERANCE, 0}, +{1070, 3078339944u, 0u, 3078339944u, 0, SINF_TOLERANCE, 0}, +{1071, 1208345407u, 6333643u, 1064552605u, 0, SINF_TOLERANCE, 0}, +{1072, 1258634105u, 3575206u, 1049625456u, 0, SINF_TOLERANCE, 0}, +{1073, 1248478509u, 102613680u, 3212835226u, 0, SINF_TOLERANCE, 0}, +{1074, 1153863988u, 4229464460u, 3211074162u, 0, SINF_TOLERANCE, 0}, +{1075, 1235620969u, 0u, 1064569301u, 0, SINF_TOLERANCE, 0}, +{1076, 1097120930u, 4294967294u, 1065141893u, 0, SINF_TOLERANCE, 0}, +{1077, 3469778622u, 70286u, 1065325367u, 0, SINF_TOLERANCE, 0}, +{1078, 1147712200u, 0u, 1061528543u, 0, SINF_TOLERANCE, 0}, +{1079, 1124721745u, 0u, 3198804551u, 0, SINF_TOLERANCE, 0}, +{1080, 3261744304u, 0u, 3211184016u, 0, SINF_TOLERANCE, 0}, +{1081, 1064922416u, 1518435840u, 1062456150u, 0, SINF_TOLERANCE, 0}, +{1082, 3303160152u, 0u, 3194883701u, 0, SINF_TOLERANCE, 0}, +{1083, 1315090496u, 4294967183u, 1027282864u, 0, SINF_TOLERANCE, 0}, +{1084, 3230403187u, 1820050432u, 1064414424u, 0, SINF_TOLERANCE, 0}, +{1085, 1335399673u, 0u, 1057037838u, 0, SINF_TOLERANCE, 0}, +{1086, 1072458508u, 4294404660u, 1064717243u, 0, SINF_TOLERANCE, 0}, +{1087, 3303015249u, 0u, 3212580702u, 0, SINF_TOLERANCE, 0}, +{1088, 3252139741u, 0u, 3212269737u, 0, SINF_TOLERANCE, 0}, +{1089, 3468519966u, 0u, 3212788099u, 0, SINF_TOLERANCE, 0}, +{1090, 1006231203u, 0u, 1006231044u, 0, SINF_TOLERANCE, 0}, +{1091, 951554138u, 0u, 951554138u, 0, SINF_TOLERANCE, 0}, +{1092, 942046828u, 0u, 942046828u, 0, SINF_TOLERANCE, 0}, +{1093, 3319723279u, 4277552160u, 1033521666u, 0, SINF_TOLERANCE, 0}, +{1094, 3255104167u, 0u, 3212314295u, 0, SINF_TOLERANCE, 0}, +{1095, 1155477903u, 0u, 1063706868u, 0, SINF_TOLERANCE, 0}, +{1096, 3273889176u, 0u, 3194027929u, 0, SINF_TOLERANCE, 0}, +{1097, 3237813668u, 4133749200u, 3212810671u, 0, SINF_TOLERANCE, 0}, +{1098, 1228207362u, 0u, 3210431030u, 0, SINF_TOLERANCE, 0}, +{1099, 975349337u, 748694784u, 975349336u, 0, SINF_TOLERANCE, 0}, +{1100, 1290175785u, 0u, 3208122918u, 0, SINF_TOLERANCE, 0}, +{1101, 981908840u, 4294962938u, 981908838u, 0, SINF_TOLERANCE, 0}, +{1102, 941187647u, 33u, 941187647u, 0, SINF_TOLERANCE, 0}, +{1103, 1214223128u, 4294967293u, 3175395280u, 0, SINF_TOLERANCE, 0}, +{1104, 3422922584u, 6u, 3202621705u, 0, SINF_TOLERANCE, 0}, +{1105, 1315857601u, 1055172096u, 1060440419u, 0, SINF_TOLERANCE, 0}, +{1106, 3453226030u, 4294967291u, 1055080459u, 0, SINF_TOLERANCE, 0}, +{1107, 1078359574u, 0u, 1025926511u, 0, SINF_TOLERANCE, 0}, +{1108, 1029557624u, 4294965511u, 1029550521u, 0, SINF_TOLERANCE, 0}, +{1109, 1207675424u, 0u, 1043330099u, 0, SINF_TOLERANCE, 0}, +{1110, 1028355074u, 4113313408u, 1028349592u, 0, SINF_TOLERANCE, 0}, +{1111, 3119299090u, 24787u, 3119299089u, 0, SINF_TOLERANCE, 0}, +{1112, 1248421894u, 4294582111u, 1059507841u, 0, SINF_TOLERANCE, 0}, +{1113, 3353251994u, 12u, 3212445556u, 0, SINF_TOLERANCE, 0}, +{1114, 876926659u, 4294966792u, 876926659u, 0, SINF_TOLERANCE, 0}, +{1115, 1076752219u, 0u, 1053987679u, 0, SINF_TOLERANCE, 0}, +{1116, 3388531942u, 0u, 3150373635u, 0, SINF_TOLERANCE, 0}, +{1117, 1273395082u, 0u, 3195827353u, 0, SINF_TOLERANCE, 0}, +{1118, 3385588183u, 4294967251u, 3212638167u, 0, SINF_TOLERANCE, 0}, +{1119, 3192315328u, 4294966714u, 3192233558u, 0, SINF_TOLERANCE, 0}, +{1120, 3441804648u, 4294967121u, 1064889844u, 0, SINF_TOLERANCE, 0}, +{1121, 3392827417u, 45125368u, 3204991638u, 0, SINF_TOLERANCE, 0}, +{1122, 1161241793u, 2814016256u, 1060713941u, 0, SINF_TOLERANCE, 0}, +{1123, 3034494183u, 0u, 3034494183u, 0, SINF_TOLERANCE, 0}, +{1124, 1171318485u, 4294306215u, 3202421859u, 0, SINF_TOLERANCE, 0}, +{1125, 3047748143u, 0u, 3047748143u, 0, SINF_TOLERANCE, 0}, +{1126, 1001216371u, 0u, 1001216318u, 0, SINF_TOLERANCE, 0}, +{1127, 912515889u, 2u, 912515889u, 0, SINF_TOLERANCE, 0}, +{1128, 3391452505u, 0u, 3205889616u, 0, SINF_TOLERANCE, 0}, +{1129, 3249603369u, 0u, 1040857218u, 0, SINF_TOLERANCE, 0}, +{1130, 1220264047u, 0u, 3194967897u, 0, SINF_TOLERANCE, 0}, +{1131, 3169816394u, 0u, 3169814156u, 0, SINF_TOLERANCE, 0}, +{1132, 3098997418u, 0u, 3098997418u, 0, SINF_TOLERANCE, 0}, +{1133, 3282212423u, 0u, 1065350123u, 0, SINF_TOLERANCE, 0}, +{1134, 3352293320u, 4294967278u, 3212086835u, 0, SINF_TOLERANCE, 0}, +{1135, 3296358441u, 0u, 3201216860u, 0, SINF_TOLERANCE, 0}, +{1136, 1197828352u, 4294967281u, 1032387171u, 0, SINF_TOLERANCE, 0}, +{1137, 3340510371u, 0u, 1062585647u, 0, SINF_TOLERANCE, 0}, +{1138, 1127109339u, 4294570975u, 3212826742u, 0, SINF_TOLERANCE, 0}, +{1139, 909467381u, 1001724u, 909467381u, 0, SINF_TOLERANCE, 0}, +{1140, 1200599955u, 0u, 3209721212u, 0, SINF_TOLERANCE, 0}, +{1141, 962230977u, 0u, 962230977u, 0, SINF_TOLERANCE, 0}, +{1142, 3192887808u, 0u, 3192794798u, 0, SINF_TOLERANCE, 0}, +{1143, 3237183876u, 0u, 3212338202u, 0, SINF_TOLERANCE, 0}, +{1144, 939285924u, 0u, 939285924u, 0, SINF_TOLERANCE, 0}, +{1145, 944050180u, 3871652128u, 944050180u, 0, SINF_TOLERANCE, 0}, +{1146, 3058135703u, 0u, 3058135703u, 0, SINF_TOLERANCE, 0}, +{1147, 3480592662u, 4294967238u, 3204456894u, 0, SINF_TOLERANCE, 0}, +{1148, 3061939312u, 4294967125u, 3061939312u, 0, SINF_TOLERANCE, 0}, +{1149, 1003299981u, 0u, 1003299893u, 0, SINF_TOLERANCE, 0}, +{1150, 1155775526u, 7150230u, 3195501537u, 0, SINF_TOLERANCE, 0}, +{1151, 1234491880u, 4283784819u, 3212387912u, 0, SINF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF sinf.h diff --git a/packages/language/c/libm/current/tests/vectors/sinhf.c b/packages/language/c/libm/current/tests/vectors/sinhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sinhf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// sinhf.c +// +// Test of sinhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/sinhf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(sinhf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &sinhf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &sinhf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("sinhf() is stable"); + } // if + else + { + CYG_TEST_FAIL("sinhf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library sinhf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "sinhf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF sinhf.c diff --git a/packages/language/c/libm/current/tests/vectors/sinhf.h b/packages/language/c/libm/current/tests/vectors/sinhf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sinhf.h @@ -0,0 +1,363 @@ +#ifndef CYGONCE_LIBM_SINHF_H +#define CYGONCE_LIBM_SINHF_H +//=========================================================================== +// +// sinhf.h +// +// Test vectors for testing of sinhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/sinhf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SINH_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t sinhf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 3217110536u, 3217110536u, 0, SINH_TOLERANCE, 0}, +{1, 3214430700u, 3216959278u, 3216959278u, 0, SINH_TOLERANCE, 0}, +{2, 3214346813u, 3216809269u, 3216809269u, 0, SINH_TOLERANCE, 0}, +{3, 3214262927u, 3216660499u, 3216660499u, 0, SINH_TOLERANCE, 0}, +{4, 3214179041u, 3216512949u, 3216512949u, 0, SINH_TOLERANCE, 0}, +{5, 3214095155u, 3216366607u, 3216366607u, 0, SINH_TOLERANCE, 0}, +{6, 3214011269u, 3216221454u, 3216221454u, 0, SINH_TOLERANCE, 0}, +{7, 3213927383u, 3216077481u, 3216077481u, 0, SINH_TOLERANCE, 0}, +{8, 3213843497u, 3215934670u, 3215934670u, 0, SINH_TOLERANCE, 0}, +{9, 3213759611u, 3215793008u, 3215793008u, 0, SINH_TOLERANCE, 0}, +{10, 3213675725u, 3215652480u, 3215652480u, 0, SINH_TOLERANCE, 0}, +{11, 3213591839u, 3215513072u, 3215513072u, 0, SINH_TOLERANCE, 0}, +{12, 3213507953u, 3215374771u, 3215374771u, 0, SINH_TOLERANCE, 0}, +{13, 3213424067u, 3215237562u, 3215237562u, 0, SINH_TOLERANCE, 0}, +{14, 3213340180u, 3215101431u, 3215101431u, 0, SINH_TOLERANCE, 0}, +{15, 3213256294u, 3214966367u, 3214966367u, 0, SINH_TOLERANCE, 0}, +{16, 3213172408u, 3214832356u, 3214832356u, 0, SINH_TOLERANCE, 0}, +{17, 3213088522u, 3214699382u, 3214699382u, 0, SINH_TOLERANCE, 0}, +{18, 3213004636u, 3214567433u, 3214567433u, 0, SINH_TOLERANCE, 0}, +{19, 3212920750u, 3214436496u, 3214436496u, 0, SINH_TOLERANCE, 0}, +{20, 3212836864u, 3214306558u, 3214306558u, 0, SINH_TOLERANCE, 0}, +{21, 3212669092u, 3214177606u, 3214177606u, 0, SINH_TOLERANCE, 0}, +{22, 3212501320u, 3214049627u, 3214049627u, 0, SINH_TOLERANCE, 0}, +{23, 3212333548u, 3213922608u, 3213922608u, 0, SINH_TOLERANCE, 0}, +{24, 3212165775u, 3213796536u, 3213796536u, 0, SINH_TOLERANCE, 0}, +{25, 3211998003u, 3213671399u, 3213671399u, 0, SINH_TOLERANCE, 0}, +{26, 3211830231u, 3213547184u, 3213547184u, 0, SINH_TOLERANCE, 0}, +{27, 3211662459u, 3213423880u, 3213423880u, 0, SINH_TOLERANCE, 0}, +{28, 3211494687u, 3213301473u, 3213301473u, 0, SINH_TOLERANCE, 0}, +{29, 3211326915u, 3213179951u, 3213179951u, 0, SINH_TOLERANCE, 0}, +{30, 3211159142u, 3213059302u, 3213059302u, 0, SINH_TOLERANCE, 0}, +{31, 3210991370u, 3212939515u, 3212939515u, 0, SINH_TOLERANCE, 0}, +{32, 3210823598u, 3212804289u, 3212804289u, 0, SINH_TOLERANCE, 0}, +{33, 3210655826u, 3212568087u, 3212568087u, 0, SINH_TOLERANCE, 0}, +{34, 3210488054u, 3212333536u, 3212333536u, 0, SINH_TOLERANCE, 0}, +{35, 3210320282u, 3212100612u, 3212100612u, 0, SINH_TOLERANCE, 0}, +{36, 3210152509u, 3211869292u, 3211869292u, 0, SINH_TOLERANCE, 0}, +{37, 3209984737u, 3211639553u, 3211639553u, 0, SINH_TOLERANCE, 0}, +{38, 3209816965u, 3211411372u, 3211411372u, 0, SINH_TOLERANCE, 0}, +{39, 3209649193u, 3211184727u, 3211184727u, 0, SINH_TOLERANCE, 0}, +{40, 3209481421u, 3210959594u, 3210959594u, 0, SINH_TOLERANCE, 0}, +{41, 3209313649u, 3210735951u, 3210735951u, 0, SINH_TOLERANCE, 0}, +{42, 3209145876u, 3210513775u, 3210513775u, 0, SINH_TOLERANCE, 0}, +{43, 3208978104u, 3210293045u, 3210293045u, 0, SINH_TOLERANCE, 0}, +{44, 3208810332u, 3210073739u, 3210073739u, 0, SINH_TOLERANCE, 0}, +{45, 3208642560u, 3209855833u, 3209855833u, 0, SINH_TOLERANCE, 0}, +{46, 3208474788u, 3209639308u, 3209639308u, 0, SINH_TOLERANCE, 0}, +{47, 3208307016u, 3209424141u, 3209424141u, 0, SINH_TOLERANCE, 0}, +{48, 3208139244u, 3209210310u, 3209210310u, 0, SINH_TOLERANCE, 0}, +{49, 3207971471u, 3208997792u, 3208997792u, 0, SINH_TOLERANCE, 0}, +{50, 3207803699u, 3208786570u, 3208786570u, 0, SINH_TOLERANCE, 0}, +{51, 3207635927u, 3208576621u, 3208576621u, 0, SINH_TOLERANCE, 0}, +{52, 3207468155u, 3208367923u, 3208367923u, 0, SINH_TOLERANCE, 0}, +{53, 3207300383u, 3208160456u, 3208160456u, 0, SINH_TOLERANCE, 0}, +{54, 3207132611u, 3207954200u, 3207954200u, 0, SINH_TOLERANCE, 0}, +{55, 3206964838u, 3207749131u, 3207749131u, 0, SINH_TOLERANCE, 0}, +{56, 3206797066u, 3207545233u, 3207545233u, 0, SINH_TOLERANCE, 0}, +{57, 3206629294u, 3207342483u, 3207342483u, 0, SINH_TOLERANCE, 0}, +{58, 3206461522u, 3207140862u, 3207140862u, 0, SINH_TOLERANCE, 0}, +{59, 3206293750u, 3206940348u, 3206940348u, 0, SINH_TOLERANCE, 0}, +{60, 3206125978u, 3206740923u, 3206740923u, 0, SINH_TOLERANCE, 0}, +{61, 3205958205u, 3206542565u, 3206542565u, 0, SINH_TOLERANCE, 0}, +{62, 3205790433u, 3206345256u, 3206345256u, 0, SINH_TOLERANCE, 0}, +{63, 3205622661u, 3206148976u, 3206148976u, 0, SINH_TOLERANCE, 0}, +{64, 3205454889u, 3205953704u, 3205953704u, 0, SINH_TOLERANCE, 0}, +{65, 3205287117u, 3205759423u, 3205759423u, 0, SINH_TOLERANCE, 0}, +{66, 3205119345u, 3205566111u, 3205566111u, 0, SINH_TOLERANCE, 0}, +{67, 3204951572u, 3205373748u, 3205373748u, 0, SINH_TOLERANCE, 0}, +{68, 3204783800u, 3205182318u, 3205182318u, 0, SINH_TOLERANCE, 0}, +{69, 3204616028u, 3204991801u, 3204991801u, 0, SINH_TOLERANCE, 0}, +{70, 3204448256u, 3204802176u, 3204802176u, 0, SINH_TOLERANCE, 0}, +{71, 3204112712u, 3204613426u, 3204613426u, 0, SINH_TOLERANCE, 0}, +{72, 3203777167u, 3204402806u, 3204402806u, 0, SINH_TOLERANCE, 0}, +{73, 3203441623u, 3204028690u, 3204028690u, 0, SINH_TOLERANCE, 0}, +{74, 3203106079u, 3203656210u, 3203656210u, 0, SINH_TOLERANCE, 0}, +{75, 3202770534u, 3203285327u, 3203285327u, 0, SINH_TOLERANCE, 0}, +{76, 3202434990u, 3202916006u, 3202916006u, 0, SINH_TOLERANCE, 0}, +{77, 3202099446u, 3202548210u, 3202548210u, 0, SINH_TOLERANCE, 0}, +{78, 3201763901u, 3202181901u, 3202181901u, 0, SINH_TOLERANCE, 0}, +{79, 3201428357u, 3201817044u, 3201817044u, 0, SINH_TOLERANCE, 0}, +{80, 3201092813u, 3201453601u, 3201453601u, 0, SINH_TOLERANCE, 0}, +{81, 3200757268u, 3201091536u, 3201091536u, 0, SINH_TOLERANCE, 0}, +{82, 3200421724u, 3200730814u, 3200730814u, 0, SINH_TOLERANCE, 0}, +{83, 3200086180u, 3200371397u, 3200371397u, 0, SINH_TOLERANCE, 0}, +{84, 3199750636u, 3200013251u, 3200013251u, 0, SINH_TOLERANCE, 0}, +{85, 3199415091u, 3199656338u, 3199656338u, 0, SINH_TOLERANCE, 0}, +{86, 3199079547u, 3199300625u, 3199300625u, 0, SINH_TOLERANCE, 0}, +{87, 3198744003u, 3198946074u, 3198946074u, 0, SINH_TOLERANCE, 0}, +{88, 3198408458u, 3198592650u, 3198592650u, 0, SINH_TOLERANCE, 0}, +{89, 3198072914u, 3198240320u, 3198240320u, 0, SINH_TOLERANCE, 0}, +{90, 3197737370u, 3197889046u, 3197889046u, 0, SINH_TOLERANCE, 0}, +{91, 3197401825u, 3197538793u, 3197538793u, 0, SINH_TOLERANCE, 0}, +{92, 3197066281u, 3197189528u, 3197189528u, 0, SINH_TOLERANCE, 0}, +{93, 3196730737u, 3196841214u, 3196841214u, 0, SINH_TOLERANCE, 0}, +{94, 3196395192u, 3196493817u, 3196493817u, 0, SINH_TOLERANCE, 0}, +{95, 3196059648u, 3196147303u, 3196147303u, 0, SINH_TOLERANCE, 0}, +{96, 3195388559u, 3195543624u, 3195543624u, 0, SINH_TOLERANCE, 0}, +{97, 3194717471u, 3194853917u, 3194853917u, 0, SINH_TOLERANCE, 0}, +{98, 3194046382u, 3194165766u, 3194165766u, 0, SINH_TOLERANCE, 0}, +{99, 3193375293u, 3193479104u, 3193479104u, 0, SINH_TOLERANCE, 0}, +{100, 3192704205u, 3192793863u, 3192793863u, 0, SINH_TOLERANCE, 0}, +{101, 3192033116u, 3192109971u, 3192109971u, 0, SINH_TOLERANCE, 0}, +{102, 3191362028u, 3191427364u, 3191427364u, 0, SINH_TOLERANCE, 0}, +{103, 3190690939u, 3190745969u, 3190745969u, 0, SINH_TOLERANCE, 0}, +{104, 3190019850u, 3190065722u, 3190065722u, 0, SINH_TOLERANCE, 0}, +{105, 3189348762u, 3189386553u, 3189386553u, 0, SINH_TOLERANCE, 0}, +{106, 3188677673u, 3188708394u, 3188708394u, 0, SINH_TOLERANCE, 0}, +{107, 3188006584u, 3188031178u, 3188031178u, 0, SINH_TOLERANCE, 0}, +{108, 3186999951u, 3187038634u, 3187038634u, 0, SINH_TOLERANCE, 0}, +{109, 3185657774u, 3185687566u, 3185687566u, 0, SINH_TOLERANCE, 0}, +{110, 3184315597u, 3184337978u, 3184337978u, 0, SINH_TOLERANCE, 0}, +{111, 3182973420u, 3182989734u, 3182989734u, 0, SINH_TOLERANCE, 0}, +{112, 3181631242u, 3181642699u, 3181642699u, 0, SINH_TOLERANCE, 0}, +{113, 3180289065u, 3180296740u, 3180296740u, 0, SINH_TOLERANCE, 0}, +{114, 3178611343u, 3178621008u, 3178621008u, 0, SINH_TOLERANCE, 0}, +{115, 3175926989u, 3175932582u, 3175932582u, 0, SINH_TOLERANCE, 0}, +{116, 3173242634u, 3173245498u, 3173245498u, 0, SINH_TOLERANCE, 0}, +{117, 3170222735u, 3170225151u, 3170225151u, 0, SINH_TOLERANCE, 0}, +{118, 3164854026u, 3164854742u, 3164854742u, 0, SINH_TOLERANCE, 0}, +{119, 3156465418u, 3156465597u, 3156465597u, 0, SINH_TOLERANCE, 0}, +{120, 646742016u, 646742016u, 646742016u, 0, SINH_TOLERANCE, 0}, +{121, 1008981770u, 1008981949u, 1008981949u, 0, SINH_TOLERANCE, 0}, +{122, 1017370378u, 1017371094u, 1017371094u, 0, SINH_TOLERANCE, 0}, +{123, 1022739087u, 1022741503u, 1022741503u, 0, SINH_TOLERANCE, 0}, +{124, 1025758986u, 1025761850u, 1025761850u, 0, SINH_TOLERANCE, 0}, +{125, 1028443341u, 1028448934u, 1028448934u, 0, SINH_TOLERANCE, 0}, +{126, 1031127695u, 1031137360u, 1031137360u, 0, SINH_TOLERANCE, 0}, +{127, 1032805417u, 1032813092u, 1032813092u, 0, SINH_TOLERANCE, 0}, +{128, 1034147594u, 1034159051u, 1034159051u, 0, SINH_TOLERANCE, 0}, +{129, 1035489772u, 1035506086u, 1035506086u, 0, SINH_TOLERANCE, 0}, +{130, 1036831949u, 1036854330u, 1036854330u, 0, SINH_TOLERANCE, 0}, +{131, 1038174126u, 1038203918u, 1038203918u, 0, SINH_TOLERANCE, 0}, +{132, 1039516303u, 1039554986u, 1039554986u, 0, SINH_TOLERANCE, 0}, +{133, 1040522936u, 1040547530u, 1040547530u, 0, SINH_TOLERANCE, 0}, +{134, 1041194025u, 1041224746u, 1041224746u, 0, SINH_TOLERANCE, 0}, +{135, 1041865114u, 1041902905u, 1041902905u, 0, SINH_TOLERANCE, 0}, +{136, 1042536202u, 1042582074u, 1042582074u, 0, SINH_TOLERANCE, 0}, +{137, 1043207291u, 1043262321u, 1043262321u, 0, SINH_TOLERANCE, 0}, +{138, 1043878380u, 1043943716u, 1043943716u, 0, SINH_TOLERANCE, 0}, +{139, 1044549468u, 1044626323u, 1044626323u, 0, SINH_TOLERANCE, 0}, +{140, 1045220557u, 1045310215u, 1045310215u, 0, SINH_TOLERANCE, 0}, +{141, 1045891645u, 1045995456u, 1045995456u, 0, SINH_TOLERANCE, 0}, +{142, 1046562734u, 1046682118u, 1046682118u, 0, SINH_TOLERANCE, 0}, +{143, 1047233823u, 1047370269u, 1047370269u, 0, SINH_TOLERANCE, 0}, +{144, 1047904911u, 1048059976u, 1048059976u, 0, SINH_TOLERANCE, 0}, +{145, 1048576000u, 1048663655u, 1048663655u, 0, SINH_TOLERANCE, 0}, +{146, 1048911544u, 1049010169u, 1049010169u, 0, SINH_TOLERANCE, 0}, +{147, 1049247089u, 1049357566u, 1049357566u, 0, SINH_TOLERANCE, 0}, +{148, 1049582633u, 1049705880u, 1049705880u, 0, SINH_TOLERANCE, 0}, +{149, 1049918177u, 1050055145u, 1050055145u, 0, SINH_TOLERANCE, 0}, +{150, 1050253722u, 1050405398u, 1050405398u, 0, SINH_TOLERANCE, 0}, +{151, 1050589266u, 1050756672u, 1050756672u, 0, SINH_TOLERANCE, 0}, +{152, 1050924810u, 1051109002u, 1051109002u, 0, SINH_TOLERANCE, 0}, +{153, 1051260355u, 1051462426u, 1051462426u, 0, SINH_TOLERANCE, 0}, +{154, 1051595899u, 1051816977u, 1051816977u, 0, SINH_TOLERANCE, 0}, +{155, 1051931443u, 1052172690u, 1052172690u, 0, SINH_TOLERANCE, 0}, +{156, 1052266988u, 1052529603u, 1052529603u, 0, SINH_TOLERANCE, 0}, +{157, 1052602532u, 1052887749u, 1052887749u, 0, SINH_TOLERANCE, 0}, +{158, 1052938076u, 1053247166u, 1053247166u, 0, SINH_TOLERANCE, 0}, +{159, 1053273620u, 1053607888u, 1053607888u, 0, SINH_TOLERANCE, 0}, +{160, 1053609165u, 1053969953u, 1053969953u, 0, SINH_TOLERANCE, 0}, +{161, 1053944709u, 1054333396u, 1054333396u, 0, SINH_TOLERANCE, 0}, +{162, 1054280253u, 1054698253u, 1054698253u, 0, SINH_TOLERANCE, 0}, +{163, 1054615798u, 1055064562u, 1055064562u, 0, SINH_TOLERANCE, 0}, +{164, 1054951342u, 1055432358u, 1055432358u, 0, SINH_TOLERANCE, 0}, +{165, 1055286886u, 1055801679u, 1055801679u, 0, SINH_TOLERANCE, 0}, +{166, 1055622431u, 1056172562u, 1056172562u, 0, SINH_TOLERANCE, 0}, +{167, 1055957975u, 1056545042u, 1056545042u, 0, SINH_TOLERANCE, 0}, +{168, 1056293519u, 1056919158u, 1056919158u, 0, SINH_TOLERANCE, 0}, +{169, 1056629064u, 1057129778u, 1057129778u, 0, SINH_TOLERANCE, 0}, +{170, 1056964608u, 1057318528u, 1057318528u, 0, SINH_TOLERANCE, 0}, +{171, 1057132380u, 1057508153u, 1057508153u, 0, SINH_TOLERANCE, 0}, +{172, 1057300152u, 1057698670u, 1057698670u, 0, SINH_TOLERANCE, 0}, +{173, 1057467924u, 1057890100u, 1057890100u, 0, SINH_TOLERANCE, 0}, +{174, 1057635697u, 1058082463u, 1058082463u, 0, SINH_TOLERANCE, 0}, +{175, 1057803469u, 1058275775u, 1058275775u, 0, SINH_TOLERANCE, 0}, +{176, 1057971241u, 1058470056u, 1058470056u, 0, SINH_TOLERANCE, 0}, +{177, 1058139013u, 1058665328u, 1058665328u, 0, SINH_TOLERANCE, 0}, +{178, 1058306785u, 1058861608u, 1058861608u, 0, SINH_TOLERANCE, 0}, +{179, 1058474557u, 1059058917u, 1059058917u, 0, SINH_TOLERANCE, 0}, +{180, 1058642330u, 1059257275u, 1059257275u, 0, SINH_TOLERANCE, 0}, +{181, 1058810102u, 1059456700u, 1059456700u, 0, SINH_TOLERANCE, 0}, +{182, 1058977874u, 1059657214u, 1059657214u, 0, SINH_TOLERANCE, 0}, +{183, 1059145646u, 1059858835u, 1059858835u, 0, SINH_TOLERANCE, 0}, +{184, 1059313418u, 1060061585u, 1060061585u, 0, SINH_TOLERANCE, 0}, +{185, 1059481190u, 1060265483u, 1060265483u, 0, SINH_TOLERANCE, 0}, +{186, 1059648963u, 1060470552u, 1060470552u, 0, SINH_TOLERANCE, 0}, +{187, 1059816735u, 1060676808u, 1060676808u, 0, SINH_TOLERANCE, 0}, +{188, 1059984507u, 1060884275u, 1060884275u, 0, SINH_TOLERANCE, 0}, +{189, 1060152279u, 1061092973u, 1061092973u, 0, SINH_TOLERANCE, 0}, +{190, 1060320051u, 1061302922u, 1061302922u, 0, SINH_TOLERANCE, 0}, +{191, 1060487823u, 1061514144u, 1061514144u, 0, SINH_TOLERANCE, 0}, +{192, 1060655596u, 1061726662u, 1061726662u, 0, SINH_TOLERANCE, 0}, +{193, 1060823368u, 1061940493u, 1061940493u, 0, SINH_TOLERANCE, 0}, +{194, 1060991140u, 1062155660u, 1062155660u, 0, SINH_TOLERANCE, 0}, +{195, 1061158912u, 1062372185u, 1062372185u, 0, SINH_TOLERANCE, 0}, +{196, 1061326684u, 1062590091u, 1062590091u, 0, SINH_TOLERANCE, 0}, +{197, 1061494456u, 1062809397u, 1062809397u, 0, SINH_TOLERANCE, 0}, +{198, 1061662228u, 1063030127u, 1063030127u, 0, SINH_TOLERANCE, 0}, +{199, 1061830001u, 1063252303u, 1063252303u, 0, SINH_TOLERANCE, 0}, +{200, 1061997773u, 1063475946u, 1063475946u, 0, SINH_TOLERANCE, 0}, +{201, 1062165545u, 1063701079u, 1063701079u, 0, SINH_TOLERANCE, 0}, +{202, 1062333317u, 1063927724u, 1063927724u, 0, SINH_TOLERANCE, 0}, +{203, 1062501089u, 1064155905u, 1064155905u, 0, SINH_TOLERANCE, 0}, +{204, 1062668861u, 1064385644u, 1064385644u, 0, SINH_TOLERANCE, 0}, +{205, 1062836634u, 1064616964u, 1064616964u, 0, SINH_TOLERANCE, 0}, +{206, 1063004406u, 1064849888u, 1064849888u, 0, SINH_TOLERANCE, 0}, +{207, 1063172178u, 1065084439u, 1065084439u, 0, SINH_TOLERANCE, 0}, +{208, 1063339950u, 1065320641u, 1065320641u, 0, SINH_TOLERANCE, 0}, +{209, 1063507722u, 1065455867u, 1065455867u, 0, SINH_TOLERANCE, 0}, +{210, 1063675494u, 1065575654u, 1065575654u, 0, SINH_TOLERANCE, 0}, +{211, 1063843267u, 1065696303u, 1065696303u, 0, SINH_TOLERANCE, 0}, +{212, 1064011039u, 1065817825u, 1065817825u, 0, SINH_TOLERANCE, 0}, +{213, 1064178811u, 1065940232u, 1065940232u, 0, SINH_TOLERANCE, 0}, +{214, 1064346583u, 1066063536u, 1066063536u, 0, SINH_TOLERANCE, 0}, +{215, 1064514355u, 1066187751u, 1066187751u, 0, SINH_TOLERANCE, 0}, +{216, 1064682127u, 1066312888u, 1066312888u, 0, SINH_TOLERANCE, 0}, +{217, 1064849900u, 1066438960u, 1066438960u, 0, SINH_TOLERANCE, 0}, +{218, 1065017672u, 1066565979u, 1066565979u, 0, SINH_TOLERANCE, 0}, +{219, 1065185444u, 1066693958u, 1066693958u, 0, SINH_TOLERANCE, 0}, +{220, 1065353216u, 1066822910u, 1066822910u, 0, SINH_TOLERANCE, 0}, +{221, 1065437102u, 1066952848u, 1066952848u, 0, SINH_TOLERANCE, 0}, +{222, 1065520988u, 1067083785u, 1067083785u, 0, SINH_TOLERANCE, 0}, +{223, 1065604874u, 1067215734u, 1067215734u, 0, SINH_TOLERANCE, 0}, +{224, 1065688760u, 1067348708u, 1067348708u, 0, SINH_TOLERANCE, 0}, +{225, 1065772646u, 1067482719u, 1067482719u, 0, SINH_TOLERANCE, 0}, +{226, 1065856532u, 1067617783u, 1067617783u, 0, SINH_TOLERANCE, 0}, +{227, 1065940419u, 1067753914u, 1067753914u, 0, SINH_TOLERANCE, 0}, +{228, 1066024305u, 1067891123u, 1067891123u, 0, SINH_TOLERANCE, 0}, +{229, 1066108191u, 1068029424u, 1068029424u, 0, SINH_TOLERANCE, 0}, +{230, 1066192077u, 1068168832u, 1068168832u, 0, SINH_TOLERANCE, 0}, +{231, 1066275963u, 1068309360u, 1068309360u, 0, SINH_TOLERANCE, 0}, +{232, 1066359849u, 1068451022u, 1068451022u, 0, SINH_TOLERANCE, 0}, +{233, 1066443735u, 1068593833u, 1068593833u, 0, SINH_TOLERANCE, 0}, +{234, 1066527621u, 1068737806u, 1068737806u, 0, SINH_TOLERANCE, 0}, +{235, 1066611507u, 1068882959u, 1068882959u, 0, SINH_TOLERANCE, 0}, +{236, 1066695393u, 1069029301u, 1069029301u, 0, SINH_TOLERANCE, 0}, +{237, 1066779279u, 1069176851u, 1069176851u, 0, SINH_TOLERANCE, 0}, +{238, 1066863165u, 1069325621u, 1069325621u, 0, SINH_TOLERANCE, 0}, +{239, 1066947052u, 1069475630u, 1069475630u, 0, SINH_TOLERANCE, 0}, +{240, 3234402267u, 3280330582u, 3280330582u, 0, SINH_TOLERANCE, 0}, +{241, 3231108068u, 3260980762u, 3260980762u, 0, SINH_TOLERANCE, 0}, +{242, 3226013659u, 3241723811u, 3241723811u, 0, SINH_TOLERANCE, 0}, +{243, 3217625051u, 3222489211u, 3222489211u, 0, SINH_TOLERANCE, 0}, +{244, 0u, 0u, 0u, 0, SINH_TOLERANCE, 0}, +{245, 1070141403u, 1075005563u, 1075005563u, 0, SINH_TOLERANCE, 0}, +{246, 1078530011u, 1094240163u, 1094240163u, 0, SINH_TOLERANCE, 0}, +{247, 1083624420u, 1113497114u, 1113497114u, 0, SINH_TOLERANCE, 0}, +{248, 3253731328u, 3566961202u, 3566961202u, 0, SINH_TOLERANCE, 0}, +{249, 3252840038u, 3546498372u, 3546498372u, 0, SINH_TOLERANCE, 0}, +{250, 3251948749u, 3525710617u, 3525710617u, 0, SINH_TOLERANCE, 0}, +{251, 3251057459u, 3505567330u, 3505567330u, 0, SINH_TOLERANCE, 0}, +{252, 3250166170u, 3484507079u, 3484507079u, 0, SINH_TOLERANCE, 0}, +{253, 3249274880u, 3464600087u, 3464600087u, 0, SINH_TOLERANCE, 0}, +{254, 3248383590u, 3443353772u, 3443353772u, 0, SINH_TOLERANCE, 0}, +{255, 3247492301u, 3423234143u, 3423234143u, 0, SINH_TOLERANCE, 0}, +{256, 3246601011u, 3402254137u, 3402254137u, 0, SINH_TOLERANCE, 0}, +{257, 3245028147u, 3381907410u, 3381907410u, 0, SINH_TOLERANCE, 0}, +{258, 3243245568u, 3361211828u, 3361211828u, 0, SINH_TOLERANCE, 0}, +{259, 3241462989u, 3340622545u, 3340622545u, 0, SINH_TOLERANCE, 0}, +{260, 3239680410u, 3320230690u, 3320230690u, 0, SINH_TOLERANCE, 0}, +{261, 3237792973u, 3299382405u, 3299382405u, 0, SINH_TOLERANCE, 0}, +{262, 3234227814u, 3279314841u, 3279314841u, 0, SINH_TOLERANCE, 0}, +{263, 3230662656u, 3258188566u, 3258188566u, 0, SINH_TOLERANCE, 0}, +{264, 3224580915u, 3238203928u, 3238203928u, 0, SINH_TOLERANCE, 0}, +{265, 3213675725u, 3215652480u, 3215652480u, 0, SINH_TOLERANCE, 0}, +{266, 1058642330u, 1059257275u, 1059257275u, 0, SINH_TOLERANCE, 0}, +{267, 1075000115u, 1084095382u, 1084095382u, 0, SINH_TOLERANCE, 0}, +{268, 1082130432u, 1104826815u, 1104826815u, 0, SINH_TOLERANCE, 0}, +{269, 1085695590u, 1125478038u, 1125478038u, 0, SINH_TOLERANCE, 0}, +{270, 1089260749u, 1145864059u, 1145864059u, 0, SINH_TOLERANCE, 0}, +{271, 1091672474u, 1166798129u, 1166798129u, 0, SINH_TOLERANCE, 0}, +{272, 1093455053u, 1186954451u, 1186954451u, 0, SINH_TOLERANCE, 0}, +{273, 1095237632u, 1208157740u, 1208157740u, 0, SINH_TOLERANCE, 0}, +{274, 1097020211u, 1228099076u, 1228099076u, 0, SINH_TOLERANCE, 0}, +{275, 1098802790u, 1249206348u, 1249206348u, 0, SINH_TOLERANCE, 0}, +{276, 1099746509u, 1269294498u, 1269294498u, 0, SINH_TOLERANCE, 0}, +{277, 1100637798u, 1290126283u, 1290126283u, 0, SINH_TOLERANCE, 0}, +{278, 1101529088u, 1310537485u, 1310537485u, 0, SINH_TOLERANCE, 0}, +{279, 1102420378u, 1331111329u, 1331111329u, 0, SINH_TOLERANCE, 0}, +{280, 1103311667u, 1351825023u, 1351825023u, 0, SINH_TOLERANCE, 0}, +{281, 1104202957u, 1372157288u, 1372157288u, 0, SINH_TOLERANCE, 0}, +{282, 1105094246u, 1393154230u, 1393154230u, 0, SINH_TOLERANCE, 0}, +{283, 1105985536u, 1413260339u, 1413260339u, 0, SINH_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SINHF_H multiple inclusion protection + +// EOF sinhf.h diff --git a/packages/language/c/libm/current/tests/vectors/sqrtf.c b/packages/language/c/libm/current/tests/vectors/sqrtf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sqrtf.c @@ -0,0 +1,127 @@ +//=========================================================================== +// +// sqrtf.c +// +// Test of sqrtf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/sqrtf.h" + +// FUNCTIONS + +#ifdef CYGSEM_LIBM_IEEE_API_INLINE +float Sqrtf(float x) +{ + return sqrtf(x); +} +#endif + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(sqrtf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( +#ifndef CYGSEM_LIBM_IEEE_API_INLINE + (CYG_ADDRWORD) &sqrtf, +#else + (CYG_ADDRWORD) &Sqrtf, +#endif + CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &sqrtf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("sqrtf() is stable"); + } // if + else + { + CYG_TEST_FAIL("sqrtf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library sqrtf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "sqrtf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + +// EOF sqrtf.c diff --git a/packages/language/c/libm/current/tests/vectors/sqrtf.h b/packages/language/c/libm/current/tests/vectors/sqrtf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/sqrtf.h @@ -0,0 +1,362 @@ +#ifndef CYGONCE_LIBM_SQRT_H +#define CYGONCE_LIBM_SQRT_H +//=========================================================================== +// +// sqrtf.h +// +// Test vectors for testing of sqrtf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/sqrtf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define SQRT_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t sqrtf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 1090024059u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{1, 3214430700u, 1051524793u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{2, 3214346813u, 3232101343u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{3, 3214262927u, 3201242716u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{4, 3214179041u, 1100049309u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{5, 3214095155u, 1054478713u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{6, 3214011269u, 3202039382u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{7, 3213927383u, 1046089230u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{8, 3213843497u, 1045840574u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{9, 3213759611u, 1068931671u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{10, 3213675725u, 3222889559u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{11, 3213591839u, 1088899021u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{12, 3213507953u, 1066856791u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{13, 3213424067u, 1080833116u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{14, 3213340180u, 3191644264u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{15, 3213256294u, 3239903247u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{16, 3213172408u, 3198462609u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{17, 3213088522u, 3203741999u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{18, 3213004636u, 3249401130u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{19, 3212920750u, 3197817016u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{20, 3212836864u, 3231746400u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{21, 3212669092u, 1096608669u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{22, 3212501320u, 1045286891u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{23, 3212333548u, 1049342524u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{24, 3212165775u, 1078472138u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{25, 3211998003u, 1099527247u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{26, 3211830231u, 3189610016u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{27, 3211662459u, 1083791358u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{28, 3211494687u, 3214426435u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{29, 3211326915u, 1056316170u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{30, 3211159142u, 3251828686u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{31, 3210991370u, 3240257920u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{32, 3210823598u, 3237899261u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{33, 3210655826u, 3226869477u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{34, 3210488054u, 1106394906u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{35, 3210320282u, 3231581370u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{36, 3210152509u, 1061652681u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{37, 3209984737u, 3215417793u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{38, 3209816965u, 3238067573u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{39, 3209649193u, 1045917232u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{40, 3209481421u, 1066381836u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{41, 3209313649u, 1060345752u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{42, 3209145876u, 1052460275u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{43, 3208978104u, 3196647153u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{44, 3208810332u, 1081948134u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{45, 3208642560u, 3221584595u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{46, 3208474788u, 1086226574u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{47, 3208307016u, 3251401196u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{48, 3208139244u, 1083520023u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{49, 3207971471u, 1050330591u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{50, 3207803699u, 1077406406u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{51, 3207635927u, 3220729740u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{52, 3207468155u, 1046304788u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{53, 3207300383u, 1094907481u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{54, 3207132611u, 1065432625u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{55, 3206964838u, 1082985198u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{56, 3206797066u, 3222902057u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{57, 3206629294u, 3249723525u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{58, 3206461522u, 1067056698u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{59, 3206293750u, 3209056785u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{60, 3206125978u, 1106787580u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{61, 3205958205u, 1104232051u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{62, 3205790433u, 1105467109u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{63, 3205622661u, 3214251949u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{64, 3205454889u, 1103073830u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{65, 3205287117u, 1067009473u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{66, 3205119345u, 1101371955u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{67, 3204951572u, 1099430098u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{68, 3204783800u, 3188865420u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{69, 3204616028u, 1046255144u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{70, 3204448256u, 3231633258u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{71, 3204112712u, 3202219056u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{72, 3203777167u, 1048653554u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{73, 3203441623u, 3221570188u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{74, 3203106079u, 1099107978u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{75, 3202770534u, 1087299442u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{76, 3202434990u, 3197285510u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{77, 3202099446u, 1090971734u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{78, 3201763901u, 3252967851u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{79, 3201428357u, 3206610957u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{80, 3201092813u, 1073415902u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{81, 3200757268u, 3190678390u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{82, 3200421724u, 3205337291u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{83, 3200086180u, 3216653996u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{84, 3199750636u, 3240198679u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{85, 3199415091u, 3251167793u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{86, 3199079547u, 1079286273u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{87, 3198744003u, 3231412671u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{88, 3198408458u, 1048317852u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{89, 3198072914u, 3192982124u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{90, 3197737370u, 1104691287u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{91, 3197401825u, 1082507103u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{92, 3197066281u, 1096584871u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{93, 3196730737u, 1103798670u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{94, 3196395192u, 3240157452u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{95, 3196059648u, 3214382367u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{96, 3195388559u, 3240200923u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{97, 3194717471u, 1103793878u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{98, 3194046382u, 1077424413u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{99, 3193375293u, 3227593179u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{100, 3192704205u, 1076579751u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{101, 3192033116u, 1069112254u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{102, 3191362028u, 3215075200u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{103, 3190690939u, 1060430241u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{104, 3190019850u, 3237198975u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{105, 3189348762u, 3202753937u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{106, 3188677673u, 1062342831u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{107, 3188006584u, 1066474375u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{108, 3186999951u, 3239267288u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{109, 3185657774u, 3210508124u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{110, 3184315597u, 3241241441u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{111, 3182973420u, 3243941101u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{112, 3181631242u, 1074261978u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{113, 3180289065u, 1061635587u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{114, 3178611343u, 1071440059u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{115, 3175926989u, 1072073912u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{116, 3173242634u, 3232757923u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{117, 3170222735u, 1078073146u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{118, 3164854026u, 1081649113u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{119, 3156465418u, 3222407050u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{120, 646742016u, 1105124431u, 856038076u, 0, SQRT_TOLERANCE, 0}, +{121, 1008981770u, 3198136112u, 1036831949u, 0, SQRT_TOLERANCE, 0}, +{122, 1017370378u, 3215264397u, 1041289411u, 0, SQRT_TOLERANCE, 0}, +{123, 1022739087u, 1061072607u, 1043422380u, 0, SQRT_TOLERANCE, 0}, +{124, 1025758986u, 1082896196u, 1045220557u, 0, SQRT_TOLERANCE, 0}, +{125, 1028443341u, 3187675097u, 1046804782u, 0, SQRT_TOLERANCE, 0}, +{126, 1031127695u, 3234748208u, 1048237031u, 0, SQRT_TOLERANCE, 0}, +{127, 1032805417u, 1046724025u, 1049065060u, 0, SQRT_TOLERANCE, 0}, +{128, 1034147594u, 1093012318u, 1049678019u, 0, SQRT_TOLERANCE, 0}, +{129, 1035489772u, 1069733884u, 1050253722u, 0, SQRT_TOLERANCE, 0}, +{130, 1036831949u, 3204997271u, 1050798235u, 0, SQRT_TOLERANCE, 0}, +{131, 1038174126u, 3213604117u, 1051316138u, 0, SQRT_TOLERANCE, 0}, +{132, 1039516303u, 3246333414u, 1051810988u, 0, SQRT_TOLERANCE, 0}, +{133, 1040522936u, 1082858682u, 1052285615u, 0, SQRT_TOLERANCE, 0}, +{134, 1041194025u, 1083603224u, 1052742311u, 0, SQRT_TOLERANCE, 0}, +{135, 1041865114u, 3235600523u, 1053182968u, 0, SQRT_TOLERANCE, 0}, +{136, 1042536202u, 1051824459u, 1053609165u, 0, SQRT_TOLERANCE, 0}, +{137, 1043207291u, 3250673860u, 1054022239u, 0, SQRT_TOLERANCE, 0}, +{138, 1043878380u, 1049514449u, 1054423332u, 0, SQRT_TOLERANCE, 0}, +{139, 1044549468u, 1054539840u, 1054813430u, 0, SQRT_TOLERANCE, 0}, +{140, 1045220557u, 1045993352u, 1055193390u, 0, SQRT_TOLERANCE, 0}, +{141, 1045891645u, 3229182089u, 1055563964u, 0, SQRT_TOLERANCE, 0}, +{142, 1046562734u, 1071630912u, 1055925816u, 0, SQRT_TOLERANCE, 0}, +{143, 1047233823u, 1063422305u, 1056279532u, 0, SQRT_TOLERANCE, 0}, +{144, 1047904911u, 1040201163u, 1056625639u, 0, SQRT_TOLERANCE, 0}, +{145, 1048576000u, 1101553990u, 1056964608u, 0, SQRT_TOLERANCE, 0}, +{146, 1048911544u, 1042678728u, 1057130735u, 0, SQRT_TOLERANCE, 0}, +{147, 1049247089u, 1070002807u, 1057293697u, 0, SQRT_TOLERANCE, 0}, +{148, 1049582633u, 1104170406u, 1057453668u, 0, SQRT_TOLERANCE, 0}, +{149, 1049918177u, 1060859316u, 1057610807u, 0, SQRT_TOLERANCE, 0}, +{150, 1050253722u, 1067940450u, 1057765260u, 0, SQRT_TOLERANCE, 0}, +{151, 1050589266u, 3236511256u, 1057917159u, 0, SQRT_TOLERANCE, 0}, +{152, 1050924810u, 3250520938u, 1058066627u, 0, SQRT_TOLERANCE, 0}, +{153, 1051260355u, 3209806504u, 1058213777u, 0, SQRT_TOLERANCE, 0}, +{154, 1051595899u, 3202890678u, 1058358714u, 0, SQRT_TOLERANCE, 0}, +{155, 1051931443u, 3203138231u, 1058501535u, 0, SQRT_TOLERANCE, 0}, +{156, 1052266988u, 1061134072u, 1058642330u, 0, SQRT_TOLERANCE, 0}, +{157, 1052602532u, 1055663370u, 1058781182u, 0, SQRT_TOLERANCE, 0}, +{158, 1052938076u, 3199478070u, 1058918171u, 0, SQRT_TOLERANCE, 0}, +{159, 1053273620u, 3196654963u, 1059053368u, 0, SQRT_TOLERANCE, 0}, +{160, 1053609165u, 3232578253u, 1059186843u, 0, SQRT_TOLERANCE, 0}, +{161, 1053944709u, 1050082319u, 1059318660u, 0, SQRT_TOLERANCE, 0}, +{162, 1054280253u, 3253385962u, 1059448879u, 0, SQRT_TOLERANCE, 0}, +{163, 1054615798u, 1070166500u, 1059577556u, 0, SQRT_TOLERANCE, 0}, +{164, 1054951342u, 3244621407u, 1059704746u, 0, SQRT_TOLERANCE, 0}, +{165, 1055286886u, 3200798890u, 1059830499u, 0, SQRT_TOLERANCE, 0}, +{166, 1055622431u, 3223590310u, 1059954862u, 0, SQRT_TOLERANCE, 0}, +{167, 1055957975u, 1075961161u, 1060077880u, 0, SQRT_TOLERANCE, 0}, +{168, 1056293519u, 1078123323u, 1060199596u, 0, SQRT_TOLERANCE, 0}, +{169, 1056629064u, 3210844787u, 1060320051u, 0, SQRT_TOLERANCE, 0}, +{170, 1056964608u, 3246307879u, 1060439283u, 0, SQRT_TOLERANCE, 0}, +{171, 1057132380u, 3188814424u, 1060557329u, 0, SQRT_TOLERANCE, 0}, +{172, 1057300152u, 3221436876u, 1060674223u, 0, SQRT_TOLERANCE, 0}, +{173, 1057467924u, 3200554324u, 1060789998u, 0, SQRT_TOLERANCE, 0}, +{174, 1057635697u, 3239246636u, 1060904686u, 0, SQRT_TOLERANCE, 0}, +{175, 1057803469u, 3223587064u, 1061018316u, 0, SQRT_TOLERANCE, 0}, +{176, 1057971241u, 3250158026u, 1061130919u, 0, SQRT_TOLERANCE, 0}, +{177, 1058139013u, 1106085272u, 1061242520u, 0, SQRT_TOLERANCE, 0}, +{178, 1058306785u, 1095245453u, 1061353147u, 0, SQRT_TOLERANCE, 0}, +{179, 1058474557u, 1041444355u, 1061462824u, 0, SQRT_TOLERANCE, 0}, +{180, 1058642330u, 1097465301u, 1061571576u, 0, SQRT_TOLERANCE, 0}, +{181, 1058810102u, 3250239076u, 1061679425u, 0, SQRT_TOLERANCE, 0}, +{182, 1058977874u, 1084039594u, 1061786393u, 0, SQRT_TOLERANCE, 0}, +{183, 1059145646u, 1063771493u, 1061892502u, 0, SQRT_TOLERANCE, 0}, +{184, 1059313418u, 1103919063u, 1061997773u, 0, SQRT_TOLERANCE, 0}, +{185, 1059481190u, 3194616071u, 1062102224u, 0, SQRT_TOLERANCE, 0}, +{186, 1059648963u, 3221613219u, 1062205875u, 0, SQRT_TOLERANCE, 0}, +{187, 1059816735u, 3208334452u, 1062308743u, 0, SQRT_TOLERANCE, 0}, +{188, 1059984507u, 1061894279u, 1062410847u, 0, SQRT_TOLERANCE, 0}, +{189, 1060152279u, 3209762784u, 1062512202u, 0, SQRT_TOLERANCE, 0}, +{190, 1060320051u, 3206165386u, 1062612826u, 0, SQRT_TOLERANCE, 0}, +{191, 1060487823u, 1057079837u, 1062712733u, 0, SQRT_TOLERANCE, 0}, +{192, 1060655596u, 3217432469u, 1062811940u, 0, SQRT_TOLERANCE, 0}, +{193, 1060823368u, 1079368611u, 1062910460u, 0, SQRT_TOLERANCE, 0}, +{194, 1060991140u, 3243343143u, 1063008307u, 0, SQRT_TOLERANCE, 0}, +{195, 1061158912u, 1041548088u, 1063105495u, 0, SQRT_TOLERANCE, 0}, +{196, 1061326684u, 1045807374u, 1063202038u, 0, SQRT_TOLERANCE, 0}, +{197, 1061494456u, 3212131720u, 1063297947u, 0, SQRT_TOLERANCE, 0}, +{198, 1061662228u, 1052187689u, 1063393236u, 0, SQRT_TOLERANCE, 0}, +{199, 1061830001u, 1102624859u, 1063487916u, 0, SQRT_TOLERANCE, 0}, +{200, 1061997773u, 3246176356u, 1063581998u, 0, SQRT_TOLERANCE, 0}, +{201, 1062165545u, 1051558014u, 1063675494u, 0, SQRT_TOLERANCE, 0}, +{202, 1062333317u, 3207725532u, 1063768415u, 0, SQRT_TOLERANCE, 0}, +{203, 1062501089u, 3190303581u, 1063860771u, 0, SQRT_TOLERANCE, 0}, +{204, 1062668861u, 3230415151u, 1063952572u, 0, SQRT_TOLERANCE, 0}, +{205, 1062836634u, 1090646554u, 1064043829u, 0, SQRT_TOLERANCE, 0}, +{206, 1063004406u, 1046063872u, 1064134550u, 0, SQRT_TOLERANCE, 0}, +{207, 1063172178u, 3194111199u, 1064224745u, 0, SQRT_TOLERANCE, 0}, +{208, 1063339950u, 1047020885u, 1064314424u, 0, SQRT_TOLERANCE, 0}, +{209, 1063507722u, 3193450280u, 1064403594u, 0, SQRT_TOLERANCE, 0}, +{210, 1063675494u, 3235452527u, 1064492265u, 0, SQRT_TOLERANCE, 0}, +{211, 1063843267u, 3219096387u, 1064580444u, 0, SQRT_TOLERANCE, 0}, +{212, 1064011039u, 3200792376u, 1064668140u, 0, SQRT_TOLERANCE, 0}, +{213, 1064178811u, 3237045253u, 1064755361u, 0, SQRT_TOLERANCE, 0}, +{214, 1064346583u, 3206926643u, 1064842114u, 0, SQRT_TOLERANCE, 0}, +{215, 1064514355u, 1085095743u, 1064928407u, 0, SQRT_TOLERANCE, 0}, +{216, 1064682127u, 1099828675u, 1065014247u, 0, SQRT_TOLERANCE, 0}, +{217, 1064849900u, 1102759382u, 1065099641u, 0, SQRT_TOLERANCE, 0}, +{218, 1065017672u, 1091945628u, 1065184596u, 0, SQRT_TOLERANCE, 0}, +{219, 1065185444u, 1096533424u, 1065269119u, 0, SQRT_TOLERANCE, 0}, +{220, 1065353216u, 3212698915u, 1065353216u, 0, SQRT_TOLERANCE, 0}, +{221, 1065437102u, 3229111426u, 1065395055u, 0, SQRT_TOLERANCE, 0}, +{222, 1065520988u, 1089760910u, 1065436687u, 0, SQRT_TOLERANCE, 0}, +{223, 1065604874u, 1075198900u, 1065478115u, 0, SQRT_TOLERANCE, 0}, +{224, 1065688760u, 1065221325u, 1065519343u, 0, SQRT_TOLERANCE, 0}, +{225, 1065772646u, 3235313361u, 1065560373u, 0, SQRT_TOLERANCE, 0}, +{226, 1065856532u, 1042055360u, 1065601209u, 0, SQRT_TOLERANCE, 0}, +{227, 1065940419u, 3194723421u, 1065641852u, 0, SQRT_TOLERANCE, 0}, +{228, 1066024305u, 3212424262u, 1065682305u, 0, SQRT_TOLERANCE, 0}, +{229, 1066108191u, 3241512456u, 1065722572u, 0, SQRT_TOLERANCE, 0}, +{230, 1066192077u, 3211544311u, 1065762654u, 0, SQRT_TOLERANCE, 0}, +{231, 1066275963u, 1058576726u, 1065802555u, 0, SQRT_TOLERANCE, 0}, +{232, 1066359849u, 3205004060u, 1065842276u, 0, SQRT_TOLERANCE, 0}, +{233, 1066443735u, 3223356436u, 1065881821u, 0, SQRT_TOLERANCE, 0}, +{234, 1066527621u, 1098306332u, 1065921190u, 0, SQRT_TOLERANCE, 0}, +{235, 1066611507u, 1091262633u, 1065960388u, 0, SQRT_TOLERANCE, 0}, +{236, 1066695393u, 3194927008u, 1065999415u, 0, SQRT_TOLERANCE, 0}, +{237, 1066779279u, 1066368383u, 1066038275u, 0, SQRT_TOLERANCE, 0}, +{238, 1066863165u, 1098487295u, 1066076969u, 0, SQRT_TOLERANCE, 0}, +{239, 1066947052u, 1070999426u, 1066115499u, 0, SQRT_TOLERANCE, 0}, +{240, 3234402267u, 1101098363u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{241, 3231108068u, 1078368488u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{242, 3226013659u, 3230316437u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{243, 3217625051u, 1079833442u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{244, 0u, 1052873711u, 0u, 0, SQRT_TOLERANCE, 0}, +{245, 1070141403u, 1085015978u, 1067478169u, 0, SQRT_TOLERANCE, 0}, +{246, 1078530011u, 1074309900u, 1071833029u, 0, SQRT_TOLERANCE, 0}, +{247, 1083624420u, 3228615456u, 1074458227u, 0, SQRT_TOLERANCE, 0}, +{248, 3253731328u, 3230392165u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{249, 3252840038u, 3238056647u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{250, 3251948749u, 1048120593u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{251, 3251057459u, 1086112947u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{252, 3250166170u, 1100880260u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{253, 3249274880u, 3232200256u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{254, 3248383590u, 1076097908u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{255, 3247492301u, 1064816262u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{256, 3246601011u, 1065280276u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{257, 3245028147u, 1078398157u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{258, 3243245568u, 1103272172u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{259, 3241462989u, 3210023352u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{260, 3239680410u, 1085153597u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{261, 3237792973u, 1042831668u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{262, 3234227814u, 1065483445u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{263, 3230662656u, 3222430705u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{264, 3224580915u, 1084451053u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{265, 3213675725u, 1092243422u, 2143289344u, EDOM, SQRT_TOLERANCE, 0}, +{266, 1058642330u, 1071545057u, 1061571576u, 0, SQRT_TOLERANCE, 0}, +{267, 1075000115u, 3241990046u, 1069686562u, 0, SQRT_TOLERANCE, 0}, +{268, 1082130432u, 1079333374u, 1073741824u, 0, SQRT_TOLERANCE, 0}, +{269, 1085695590u, 3242081486u, 1075366980u, 0, SQRT_TOLERANCE, 0}, +{270, 1089260749u, 1043425732u, 1076762956u, 0, SQRT_TOLERANCE, 0}, +{271, 1091672474u, 3211529757u, 1078005840u, 0, SQRT_TOLERANCE, 0}, +{272, 1093455053u, 3241441539u, 1079137105u, 0, SQRT_TOLERANCE, 0}, +{273, 1095237632u, 1074522705u, 1080182320u, 0, SQRT_TOLERANCE, 0}, +{274, 1097020211u, 1088658621u, 1081158565u, 0, SQRT_TOLERANCE, 0}, +{275, 1098802790u, 3224596567u, 1082077921u, 0, SQRT_TOLERANCE, 0}, +{276, 1099746509u, 1086207177u, 1082539870u, 0, SQRT_TOLERANCE, 0}, +{277, 1100637798u, 1079361728u, 1082954983u, 0, SQRT_TOLERANCE, 0}, +{278, 1101529088u, 1090937016u, 1083352182u, 0, SQRT_TOLERANCE, 0}, +{279, 1102420378u, 1086260896u, 1083733603u, 0, SQRT_TOLERANCE, 0}, +{280, 1103311667u, 3194387916u, 1084100991u, 0, SQRT_TOLERANCE, 0}, +{281, 1104202957u, 3216442625u, 1084455788u, 0, SQRT_TOLERANCE, 0}, +{282, 1105094246u, 1063475914u, 1084799206u, 0, SQRT_TOLERANCE, 0}, +{283, 1105985536u, 3236646101u, 1085132275u, 0, SQRT_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SQRT_H multiple inclusion protection + +// EOF sqrtf.h diff --git a/packages/language/c/libm/current/tests/vectors/tanf.c b/packages/language/c/libm/current/tests/vectors/tanf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/tanf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// tanf.c +// +// Test of tanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/tanf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(tanf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &tanf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &tanf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("tanf() is stable"); + } // if + else + { + CYG_TEST_FAIL("tanf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library tanf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "tanf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF tanf.c diff --git a/packages/language/c/libm/current/tests/vectors/tanf.h b/packages/language/c/libm/current/tests/vectors/tanf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/tanf.h @@ -0,0 +1,1232 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// tanf.h +// +// Test vectors for testing of tanf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/tanf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define TANF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t tanf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3223625251u, 0, TANF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3223313815u, 0, TANF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3223017555u, 0, TANF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3222735341u, 0, TANF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3222466140u, 0, TANF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3222209023u, 0, TANF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3221963145u, 0, TANF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3221727740u, 0, TANF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3221502108u, 0, TANF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3221285611u, 0, TANF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3220929855u, 0, TANF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3220529989u, 0, TANF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3220145165u, 0, TANF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3219774482u, 0, TANF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3219417095u, 0, TANF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3219072244u, 0, TANF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3218739210u, 0, TANF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3218417335u, 0, TANF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3218106004u, 0, TANF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3217804648u, 0, TANF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3217512739u, 0, TANF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3217229784u, 0, TANF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3216955321u, 0, TANF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3216688923u, 0, TANF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3216430186u, 0, TANF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3216178740u, 0, TANF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3215934228u, 0, TANF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3215696321u, 0, TANF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3215464711u, 0, TANF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3215239105u, 0, TANF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3215019230u, 0, TANF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3214804827u, 0, TANF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3214595654u, 0, TANF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3214391483u, 0, TANF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3214192094u, 0, TANF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3213997284u, 0, TANF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3213806858u, 0, TANF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3213620637u, 0, TANF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3213438442u, 0, TANF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3213260113u, 0, TANF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3213085491u, 0, TANF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3212914427u, 0, TANF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3212656702u, 0, TANF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3212327983u, 0, TANF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3212005577u, 0, TANF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3211689243u, 0, TANF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3211378749u, 0, TANF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3211073873u, 0, TANF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3210774407u, 0, TANF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3210480145u, 0, TANF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3210190902u, 0, TANF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3209906490u, 0, TANF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3209626734u, 0, TANF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3209351468u, 0, TANF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3209080528u, 0, TANF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3208813761u, 0, TANF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3208551021u, 0, TANF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3208292164u, 0, TANF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3208037053u, 0, TANF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3207785562u, 0, TANF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3207537560u, 0, TANF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3207292928u, 0, TANF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3207051550u, 0, TANF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3206813316u, 0, TANF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3206578116u, 0, TANF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3206345847u, 0, TANF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3206116409u, 0, TANF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3205889704u, 0, TANF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3205665640u, 0, TANF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3205444129u, 0, TANF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3205225083u, 0, TANF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3205008416u, 0, TANF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3204794048u, 0, TANF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3204581902u, 0, TANF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3204295542u, 0, TANF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3203879679u, 0, TANF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3203467813u, 0, TANF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3203059808u, 0, TANF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3202655528u, 0, TANF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3202254843u, 0, TANF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3201857626u, 0, TANF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3201463754u, 0, TANF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3201073106u, 0, TANF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3200685568u, 0, TANF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3200301024u, 0, TANF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3199919364u, 0, TANF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3199540480u, 0, TANF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3199164268u, 0, TANF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3198790623u, 0, TANF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3198419447u, 0, TANF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3198050643u, 0, TANF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3197684111u, 0, TANF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3197319762u, 0, TANF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3196957502u, 0, TANF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3196597241u, 0, TANF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3196238893u, 0, TANF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3195705092u, 0, TANF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3194995527u, 0, TANF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3194289277u, 0, TANF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3193586179u, 0, TANF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3192886073u, 0, TANF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3192188798u, 0, TANF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3191494201u, 0, TANF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3190802126u, 0, TANF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3190112424u, 0, TANF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3189424945u, 0, TANF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3188739540u, 0, TANF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3188056065u, 0, TANF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3187077709u, 0, TANF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3185717611u, 0, TANF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3184360516u, 0, TANF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3183006141u, 0, TANF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3181654207u, 0, TANF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3180304441u, 0, TANF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3178630698u, 0, TANF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3175938185u, 0, TANF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3173248365u, 0, TANF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3170227569u, 0, TANF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3164855458u, 0, TANF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3156465776u, 0, TANF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 1008982128u, 0, TANF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 1017371810u, 0, TANF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 1022743921u, 0, TANF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 1025764717u, 0, TANF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 1028454537u, 0, TANF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 1031147050u, 0, TANF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 1032820793u, 0, TANF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 1034170559u, 0, TANF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 1035522493u, 0, TANF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 1036876868u, 0, TANF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 1038233963u, 0, TANF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 1039594061u, 0, TANF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 1040572417u, 0, TANF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 1041255892u, 0, TANF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 1041941297u, 0, TANF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 1042628776u, 0, TANF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 1043318478u, 0, TANF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 1044010553u, 0, TANF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 1044705150u, 0, TANF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 1045402425u, 0, TANF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 1046102531u, 0, TANF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 1046805629u, 0, TANF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 1047511879u, 0, TANF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 1048221444u, 0, TANF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 1048755245u, 0, TANF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 1049113593u, 0, TANF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 1049473854u, 0, TANF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 1049836114u, 0, TANF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 1050200463u, 0, TANF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 1050566995u, 0, TANF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 1050935799u, 0, TANF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 1051306975u, 0, TANF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 1051680620u, 0, TANF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 1052056832u, 0, TANF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 1052435716u, 0, TANF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 1052817376u, 0, TANF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 1053201920u, 0, TANF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 1053589458u, 0, TANF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 1053980106u, 0, TANF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 1054373978u, 0, TANF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 1054771195u, 0, TANF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 1055171880u, 0, TANF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 1055576160u, 0, TANF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 1055984165u, 0, TANF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 1056396031u, 0, TANF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 1056811894u, 0, TANF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 1057098254u, 0, TANF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 1057310400u, 0, TANF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 1057524768u, 0, TANF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 1057741435u, 0, TANF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 1057960481u, 0, TANF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 1058181992u, 0, TANF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 1058406056u, 0, TANF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 1058632761u, 0, TANF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 1058862199u, 0, TANF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 1059094468u, 0, TANF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 1059329668u, 0, TANF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 1059567902u, 0, TANF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 1059809280u, 0, TANF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 1060053912u, 0, TANF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 1060301914u, 0, TANF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 1060553405u, 0, TANF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 1060808516u, 0, TANF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 1061067373u, 0, TANF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 1061330113u, 0, TANF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 1061596880u, 0, TANF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 1061867820u, 0, TANF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 1062143086u, 0, TANF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 1062422842u, 0, TANF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 1062707254u, 0, TANF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 1062996497u, 0, TANF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 1063290759u, 0, TANF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 1063590225u, 0, TANF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 1063895101u, 0, TANF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 1064205595u, 0, TANF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 1064521929u, 0, TANF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 1064844335u, 0, TANF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 1065173054u, 0, TANF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 1065430779u, 0, TANF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 1065601843u, 0, TANF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 1065776465u, 0, TANF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 1065954794u, 0, TANF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 1066136989u, 0, TANF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 1066323210u, 0, TANF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 1066513636u, 0, TANF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 1066708446u, 0, TANF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 1066907835u, 0, TANF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 1067112006u, 0, TANF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 1067321179u, 0, TANF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 1067535582u, 0, TANF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 1067755457u, 0, TANF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 1067981063u, 0, TANF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 1068212673u, 0, TANF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 1068450580u, 0, TANF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 1068695092u, 0, TANF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 1068946538u, 0, TANF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 1069205275u, 0, TANF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 1069471673u, 0, TANF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 1069746136u, 0, TANF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 1070029091u, 0, TANF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 1070321000u, 0, TANF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 1070622356u, 0, TANF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 1070933687u, 0, TANF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 1071255562u, 0, TANF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 1071588596u, 0, TANF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 1071933447u, 0, TANF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 1072290834u, 0, TANF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 1072661517u, 0, TANF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 1073046341u, 0, TANF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 1073446207u, 0, TANF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 1073801963u, 0, TANF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 1074018460u, 0, TANF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 1074244092u, 0, TANF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 1074479497u, 0, TANF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 1074725375u, 0, TANF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 1074982492u, 0, TANF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 1075251693u, 0, TANF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 1075533907u, 0, TANF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 1075830167u, 0, TANF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 3023813934u, 0, TANF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 1285550701u, 0, TANF_TOLERANCE, 0}, +{241, 3217625051u, 0u, 1269729867u, 0, TANF_TOLERANCE, 0}, +{242, 0u, 0u, 0u, 0, TANF_TOLERANCE, 0}, +{243, 1070141403u, 0u, 3417213515u, 0, TANF_TOLERANCE, 0}, +{244, 1083624420u, 0u, 3433034349u, 0, TANF_TOLERANCE, 0}, +{245, 3253731328u, 0u, 1087174777u, 0, TANF_TOLERANCE, 0}, +{246, 3252840038u, 0u, 3167898616u, 0, TANF_TOLERANCE, 0}, +{247, 3251948749u, 0u, 3239705397u, 0, TANF_TOLERANCE, 0}, +{248, 3251057459u, 0u, 1047706077u, 0, TANF_TOLERANCE, 0}, +{249, 3250166170u, 0u, 3223914617u, 0, TANF_TOLERANCE, 0}, +{250, 3249274880u, 0u, 1057549535u, 0, TANF_TOLERANCE, 0}, +{251, 3248383590u, 0u, 3216189737u, 0, TANF_TOLERANCE, 0}, +{252, 3247492301u, 0u, 1064191672u, 0, TANF_TOLERANCE, 0}, +{253, 3246601011u, 0u, 3209964023u, 0, TANF_TOLERANCE, 0}, +{254, 3245028147u, 0u, 1070260802u, 0, TANF_TOLERANCE, 0}, +{255, 3243245568u, 0u, 3203207451u, 0, TANF_TOLERANCE, 0}, +{256, 3241462989u, 0u, 1078702695u, 0, TANF_TOLERANCE, 0}, +{257, 3239680410u, 0u, 3191163251u, 0, TANF_TOLERANCE, 0}, +{258, 3237792973u, 0u, 1101903989u, 0, TANF_TOLERANCE, 0}, +{259, 3234227814u, 0u, 1034600970u, 0, TANF_TOLERANCE, 0}, +{260, 3230662656u, 0u, 3230950662u, 0, TANF_TOLERANCE, 0}, +{261, 3224580915u, 0u, 1052116995u, 0, TANF_TOLERANCE, 0}, +{262, 3213675725u, 0u, 3220929855u, 0, TANF_TOLERANCE, 0}, +{263, 1058642330u, 0u, 1060053912u, 0, TANF_TOLERANCE, 0}, +{264, 1075000115u, 0u, 3213836902u, 0, TANF_TOLERANCE, 0}, +{265, 1082130432u, 0u, 1066677117u, 0, TANF_TOLERANCE, 0}, +{266, 1085695590u, 0u, 3207128095u, 0, TANF_TOLERANCE, 0}, +{267, 1089260749u, 0u, 1073948539u, 0, TANF_TOLERANCE, 0}, +{268, 1091672474u, 0u, 3198968821u, 0, TANF_TOLERANCE, 0}, +{269, 1093455053u, 0u, 1084327814u, 0, TANF_TOLERANCE, 0}, +{270, 1095237632u, 0u, 3179815041u, 0, TANF_TOLERANCE, 0}, +{271, 1097020211u, 0u, 3246280447u, 0, TANF_TOLERANCE, 0}, +{272, 1098802790u, 0u, 1044846917u, 0, TANF_TOLERANCE, 0}, +{273, 1099746509u, 0u, 3225441190u, 0, TANF_TOLERANCE, 0}, +{274, 1100637798u, 0u, 1056414381u, 0, TANF_TOLERANCE, 0}, +{275, 1101529088u, 0u, 3217261841u, 0, TANF_TOLERANCE, 0}, +{276, 1102420378u, 0u, 1062963047u, 0, TANF_TOLERANCE, 0}, +{277, 1103311667u, 0u, 3211156910u, 0, TANF_TOLERANCE, 0}, +{278, 1104202957u, 0u, 1069133612u, 0, TANF_TOLERANCE, 0}, +{279, 1105094246u, 0u, 3204673592u, 0, TANF_TOLERANCE, 0}, +{280, 1105985536u, 0u, 1077019629u, 0, TANF_TOLERANCE, 0}, +{281, 1107800421u, 100135u, 3208402548u, 0, TANF_TOLERANCE, 0}, +{282, 3196650934u, 0u, 3196871643u, 0, TANF_TOLERANCE, 0}, +{283, 3368700125u, 4294964487u, 3194614723u, 0, TANF_TOLERANCE, 0}, +{284, 1224242132u, 0u, 3206830634u, 0, TANF_TOLERANCE, 0}, +{285, 3221027117u, 73066312u, 1075121948u, 0, TANF_TOLERANCE, 0}, +{286, 1198712763u, 0u, 3216291424u, 0, TANF_TOLERANCE, 0}, +{287, 3159309973u, 0u, 3159310697u, 0, TANF_TOLERANCE, 0}, +{288, 954173073u, 0u, 954173073u, 0, TANF_TOLERANCE, 0}, +{289, 3090780435u, 0u, 3090780435u, 0, TANF_TOLERANCE, 0}, +{290, 966554515u, 4294967290u, 966554515u, 0, TANF_TOLERANCE, 0}, +{291, 1312607135u, 47678u, 1057104214u, 0, TANF_TOLERANCE, 0}, +{292, 1166191415u, 0u, 3178082920u, 0, TANF_TOLERANCE, 0}, +{293, 3111900019u, 225u, 3111900019u, 0, TANF_TOLERANCE, 0}, +{294, 1234419246u, 0u, 3232454771u, 0, TANF_TOLERANCE, 0}, +{295, 1302107128u, 4294492157u, 3186679693u, 0, TANF_TOLERANCE, 0}, +{296, 1052801068u, 0u, 1053430852u, 0, TANF_TOLERANCE, 0}, +{297, 1060849628u, 0u, 1063637583u, 0, TANF_TOLERANCE, 0}, +{298, 3484320003u, 0u, 3201724532u, 0, TANF_TOLERANCE, 0}, +{299, 3181522772u, 4294965180u, 3181545047u, 0, TANF_TOLERANCE, 0}, +{300, 882596369u, 7581303u, 882596369u, 0, TANF_TOLERANCE, 0}, +{301, 1167223673u, 0u, 1081686688u, 0, TANF_TOLERANCE, 0}, +{302, 968192794u, 0u, 968192794u, 0, TANF_TOLERANCE, 0}, +{303, 3122346862u, 48u, 3122346863u, 0, TANF_TOLERANCE, 0}, +{304, 1052361612u, 53381624u, 1052925522u, 0, TANF_TOLERANCE, 0}, +{305, 906701409u, 0u, 906701409u, 0, TANF_TOLERANCE, 0}, +{306, 3471653172u, 1621u, 1100734332u, 0, TANF_TOLERANCE, 0}, +{307, 3231467496u, 0u, 1085858016u, 0, TANF_TOLERANCE, 0}, +{308, 1341514497u, 3022046720u, 1049131149u, 0, TANF_TOLERANCE, 0}, +{309, 1272351391u, 4294363968u, 3226645714u, 0, TANF_TOLERANCE, 0}, +{310, 3319724992u, 4294842689u, 3215280037u, 0, TANF_TOLERANCE, 0}, +{311, 917622040u, 603040256u, 917622040u, 0, TANF_TOLERANCE, 0}, +{312, 940236348u, 4294965375u, 940236348u, 0, TANF_TOLERANCE, 0}, +{313, 3251541546u, 0u, 3209922887u, 0, TANF_TOLERANCE, 0}, +{314, 3099843889u, 4294828114u, 3099843889u, 0, TANF_TOLERANCE, 0}, +{315, 3110358400u, 0u, 3110358400u, 0, TANF_TOLERANCE, 0}, +{316, 3371863479u, 0u, 1091463657u, 0, TANF_TOLERANCE, 0}, +{317, 3204069187u, 0u, 3204980482u, 0, TANF_TOLERANCE, 0}, +{318, 1306460502u, 0u, 1078444858u, 0, TANF_TOLERANCE, 0}, +{319, 1197542187u, 0u, 1061116656u, 0, TANF_TOLERANCE, 0}, +{320, 922888249u, 467u, 922888249u, 0, TANF_TOLERANCE, 0}, +{321, 1184239996u, 4294967294u, 1071410775u, 0, TANF_TOLERANCE, 0}, +{322, 1252490238u, 7808u, 1048885026u, 0, TANF_TOLERANCE, 0}, +{323, 1001673627u, 3340510784u, 1001673746u, 0, TANF_TOLERANCE, 0}, +{324, 976098044u, 1357u, 976098046u, 0, TANF_TOLERANCE, 0}, +{325, 941796645u, 0u, 941796645u, 0, TANF_TOLERANCE, 0}, +{326, 3287199470u, 0u, 1042315374u, 0, TANF_TOLERANCE, 0}, +{327, 893184329u, 2485427u, 893184329u, 0, TANF_TOLERANCE, 0}, +{328, 1143233714u, 0u, 1066620219u, 0, TANF_TOLERANCE, 0}, +{329, 1139941253u, 929u, 1056024260u, 0, TANF_TOLERANCE, 0}, +{330, 3143717025u, 4294967290u, 3143717083u, 0, TANF_TOLERANCE, 0}, +{331, 3048866608u, 3978787488u, 3048866608u, 0, TANF_TOLERANCE, 0}, +{332, 3240298487u, 0u, 3212155261u, 0, TANF_TOLERANCE, 0}, +{333, 1288902137u, 0u, 1065679218u, 0, TANF_TOLERANCE, 0}, +{334, 1333134799u, 2211432960u, 3219769977u, 0, TANF_TOLERANCE, 0}, +{335, 1187847971u, 1157221888u, 1079294396u, 0, TANF_TOLERANCE, 0}, +{336, 1038851706u, 2696359424u, 1038920197u, 0, TANF_TOLERANCE, 0}, +{337, 3329354473u, 0u, 3216403250u, 0, TANF_TOLERANCE, 0}, +{338, 3077218579u, 529671904u, 3077218579u, 0, TANF_TOLERANCE, 0}, +{339, 1309289088u, 0u, 3214417687u, 0, TANF_TOLERANCE, 0}, +{340, 3444653659u, 50272864u, 3215945259u, 0, TANF_TOLERANCE, 0}, +{341, 3405585402u, 0u, 1079727474u, 0, TANF_TOLERANCE, 0}, +{342, 3106647724u, 0u, 3106647724u, 0, TANF_TOLERANCE, 0}, +{343, 1106778573u, 4294965325u, 3201989462u, 0, TANF_TOLERANCE, 0}, +{344, 1140567947u, 0u, 1063190279u, 0, TANF_TOLERANCE, 0}, +{345, 1238569473u, 0u, 3204992016u, 0, TANF_TOLERANCE, 0}, +{346, 3154871957u, 39965012u, 3154872178u, 0, TANF_TOLERANCE, 0}, +{347, 1261071232u, 15806u, 3241842703u, 0, TANF_TOLERANCE, 0}, +{348, 1175011025u, 0u, 3192116290u, 0, TANF_TOLERANCE, 0}, +{349, 1082692850u, 187658u, 1074166068u, 0, TANF_TOLERANCE, 0}, +{350, 974547519u, 1563599616u, 974547520u, 0, TANF_TOLERANCE, 0}, +{351, 3058097085u, 0u, 3058097085u, 0, TANF_TOLERANCE, 0}, +{352, 3107252546u, 1u, 3107252546u, 0, TANF_TOLERANCE, 0}, +{353, 3096032662u, 0u, 3096032662u, 0, TANF_TOLERANCE, 0}, +{354, 3197942144u, 0u, 3198275438u, 0, TANF_TOLERANCE, 0}, +{355, 3403348556u, 0u, 3257568817u, 0, TANF_TOLERANCE, 0}, +{356, 3182301130u, 3460013312u, 3182328676u, 0, TANF_TOLERANCE, 0}, +{357, 1136411063u, 82u, 3204745512u, 0, TANF_TOLERANCE, 0}, +{358, 3239231622u, 4294965540u, 1048854506u, 0, TANF_TOLERANCE, 0}, +{359, 3340615780u, 0u, 1065270832u, 0, TANF_TOLERANCE, 0}, +{360, 998567360u, 0u, 998567408u, 0, TANF_TOLERANCE, 0}, +{361, 3417964312u, 1627479168u, 1061011657u, 0, TANF_TOLERANCE, 0}, +{362, 3109481038u, 695u, 3109481038u, 0, TANF_TOLERANCE, 0}, +{363, 1148867223u, 7486109u, 3214546003u, 0, TANF_TOLERANCE, 0}, +{364, 989687421u, 4294414202u, 989687442u, 0, TANF_TOLERANCE, 0}, +{365, 1152956913u, 0u, 1078507001u, 0, TANF_TOLERANCE, 0}, +{366, 892922651u, 4294392467u, 892922651u, 0, TANF_TOLERANCE, 0}, +{367, 1109627625u, 891137088u, 1029198039u, 0, TANF_TOLERANCE, 0}, +{368, 1307091856u, 24u, 1084288813u, 0, TANF_TOLERANCE, 0}, +{369, 1077234132u, 4294967159u, 3198381040u, 0, TANF_TOLERANCE, 0}, +{370, 1142167709u, 13u, 3231878889u, 0, TANF_TOLERANCE, 0}, +{371, 3426232834u, 0u, 3220906277u, 0, TANF_TOLERANCE, 0}, +{372, 3368566779u, 0u, 1072891723u, 0, TANF_TOLERANCE, 0}, +{373, 3030724760u, 4294886457u, 3030724760u, 0, TANF_TOLERANCE, 0}, +{374, 1138741813u, 0u, 1105617478u, 0, TANF_TOLERANCE, 0}, +{375, 982950501u, 0u, 982950505u, 0, TANF_TOLERANCE, 0}, +{376, 1142981585u, 0u, 1075383500u, 0, TANF_TOLERANCE, 0}, +{377, 3347165962u, 0u, 1067697451u, 0, TANF_TOLERANCE, 0}, +{378, 1009535440u, 4293825695u, 1009535856u, 0, TANF_TOLERANCE, 0}, +{379, 3103736980u, 4287990860u, 3103736980u, 0, TANF_TOLERANCE, 0}, +{380, 3126820946u, 2u, 3126820950u, 0, TANF_TOLERANCE, 0}, +{381, 3473956030u, 0u, 3211118531u, 0, TANF_TOLERANCE, 0}, +{382, 3349098349u, 0u, 3205518067u, 0, TANF_TOLERANCE, 0}, +{383, 3152729489u, 0u, 3152729752u, 0, TANF_TOLERANCE, 0}, +{384, 945568720u, 4294963204u, 945568720u, 0, TANF_TOLERANCE, 0}, +{385, 3345489836u, 36u, 3203748788u, 0, TANF_TOLERANCE, 0}, +{386, 940893161u, 394u, 940893161u, 0, TANF_TOLERANCE, 0}, +{387, 976791751u, 4294967292u, 976791753u, 0, TANF_TOLERANCE, 0}, +{388, 1004442355u, 0u, 1004442579u, 0, TANF_TOLERANCE, 0}, +{389, 1108485380u, 0u, 3222544626u, 0, TANF_TOLERANCE, 0}, +{390, 1061834641u, 0u, 1065435464u, 0, TANF_TOLERANCE, 0}, +{391, 3381268392u, 885u, 1094771149u, 0, TANF_TOLERANCE, 0}, +{392, 1087189715u, 0u, 1040522514u, 0, TANF_TOLERANCE, 0}, +{393, 3212952285u, 4294951762u, 3217916800u, 0, TANF_TOLERANCE, 0}, +{394, 1000611335u, 0u, 1000611425u, 0, TANF_TOLERANCE, 0}, +{395, 3466188568u, 0u, 3229906439u, 0, TANF_TOLERANCE, 0}, +{396, 3072456205u, 0u, 3072456205u, 0, TANF_TOLERANCE, 0}, +{397, 3319315516u, 4262338968u, 1073744625u, 0, TANF_TOLERANCE, 0}, +{398, 935938416u, 867u, 935938416u, 0, TANF_TOLERANCE, 0}, +{399, 3212614372u, 1438u, 3217139354u, 0, TANF_TOLERANCE, 0}, +{400, 1315030230u, 4294939294u, 1056507579u, 0, TANF_TOLERANCE, 0}, +{401, 1134593658u, 3712906944u, 1060255710u, 0, TANF_TOLERANCE, 0}, +{402, 977281449u, 0u, 977281451u, 0, TANF_TOLERANCE, 0}, +{403, 1086198791u, 0u, 3199662962u, 0, TANF_TOLERANCE, 0}, +{404, 1255152035u, 0u, 1063441211u, 0, TANF_TOLERANCE, 0}, +{405, 1135271264u, 4294966890u, 3210309101u, 0, TANF_TOLERANCE, 0}, +{406, 1094190727u, 0u, 3219586210u, 0, TANF_TOLERANCE, 0}, +{407, 1294665325u, 0u, 1065350968u, 0, TANF_TOLERANCE, 0}, +{408, 1036608591u, 0u, 1036651299u, 0, TANF_TOLERANCE, 0}, +{409, 3229998064u, 0u, 3218788610u, 0, TANF_TOLERANCE, 0}, +{410, 3439134022u, 0u, 3216748046u, 0, TANF_TOLERANCE, 0}, +{411, 3073083133u, 1094097536u, 3073083133u, 0, TANF_TOLERANCE, 0}, +{412, 1325668223u, 0u, 3213764573u, 0, TANF_TOLERANCE, 0}, +{413, 1092037607u, 0u, 1019219726u, 0, TANF_TOLERANCE, 0}, +{414, 3316278408u, 3774649632u, 1077505006u, 0, TANF_TOLERANCE, 0}, +{415, 3295436768u, 0u, 1039776810u, 0, TANF_TOLERANCE, 0}, +{416, 1151984049u, 0u, 3225751119u, 0, TANF_TOLERANCE, 0}, +{417, 1129287043u, 0u, 1045938796u, 0, TANF_TOLERANCE, 0}, +{418, 1243664530u, 0u, 1063139457u, 0, TANF_TOLERANCE, 0}, +{419, 950829092u, 0u, 950829092u, 0, TANF_TOLERANCE, 0}, +{420, 1115471979u, 0u, 1052666476u, 0, TANF_TOLERANCE, 0}, +{421, 3351092088u, 0u, 3207121496u, 0, TANF_TOLERANCE, 0}, +{422, 3424479544u, 4294963555u, 3207351422u, 0, TANF_TOLERANCE, 0}, +{423, 3241193975u, 0u, 1101462049u, 0, TANF_TOLERANCE, 0}, +{424, 1030934236u, 0u, 1030952901u, 0, TANF_TOLERANCE, 0}, +{425, 3131791114u, 4283960578u, 3131791120u, 0, TANF_TOLERANCE, 0}, +{426, 1025254314u, 0u, 1025259273u, 0, TANF_TOLERANCE, 0}, +{427, 1110545760u, 4294967286u, 1054914110u, 0, TANF_TOLERANCE, 0}, +{428, 3180213739u, 37u, 3180228747u, 0, TANF_TOLERANCE, 0}, +{429, 3361976590u, 0u, 1046920446u, 0, TANF_TOLERANCE, 0}, +{430, 881280146u, 4262747520u, 881280146u, 0, TANF_TOLERANCE, 0}, +{431, 1304154705u, 0u, 1032301172u, 0, TANF_TOLERANCE, 0}, +{432, 3264443610u, 4294967294u, 3240149530u, 0, TANF_TOLERANCE, 0}, +{433, 3374550627u, 0u, 3202003323u, 0, TANF_TOLERANCE, 0}, +{434, 899599265u, 4294967286u, 899599265u, 0, TANF_TOLERANCE, 0}, +{435, 1268194719u, 3962356224u, 1024654683u, 0, TANF_TOLERANCE, 0}, +{436, 1133420220u, 3161371u, 3208677146u, 0, TANF_TOLERANCE, 0}, +{437, 1161858787u, 0u, 3216740870u, 0, TANF_TOLERANCE, 0}, +{438, 3184462258u, 13627054u, 3184508670u, 0, TANF_TOLERANCE, 0}, +{439, 3295996963u, 3846806432u, 1057466057u, 0, TANF_TOLERANCE, 0}, +{440, 1270887389u, 1864u, 3181932714u, 0, TANF_TOLERANCE, 0}, +{441, 3325193181u, 0u, 1063394237u, 0, TANF_TOLERANCE, 0}, +{442, 925657343u, 955232128u, 925657343u, 0, TANF_TOLERANCE, 0}, +{443, 3115275450u, 0u, 3115275450u, 0, TANF_TOLERANCE, 0}, +{444, 3116607482u, 4294967294u, 3116607483u, 0, TANF_TOLERANCE, 0}, +{445, 3187892415u, 0u, 3187939970u, 0, TANF_TOLERANCE, 0}, +{446, 1189120494u, 0u, 3239616339u, 0, TANF_TOLERANCE, 0}, +{447, 889030794u, 0u, 889030794u, 0, TANF_TOLERANCE, 0}, +{448, 1323529208u, 0u, 3221615964u, 0, TANF_TOLERANCE, 0}, +{449, 3465768388u, 0u, 3196684139u, 0, TANF_TOLERANCE, 0}, +{450, 3426099899u, 87u, 3212893834u, 0, TANF_TOLERANCE, 0}, +{451, 3224857113u, 4290382691u, 1049681612u, 0, TANF_TOLERANCE, 0}, +{452, 1065798296u, 0u, 1071692755u, 0, TANF_TOLERANCE, 0}, +{453, 3328989444u, 0u, 1058064740u, 0, TANF_TOLERANCE, 0}, +{454, 3357819026u, 0u, 1050796778u, 0, TANF_TOLERANCE, 0}, +{455, 1273397670u, 0u, 1110301372u, 0, TANF_TOLERANCE, 0}, +{456, 3424831780u, 414735168u, 1018699100u, 0, TANF_TOLERANCE, 0}, +{457, 1257596246u, 4264851904u, 1111546709u, 0, TANF_TOLERANCE, 0}, +{458, 1051773536u, 0u, 1052257074u, 0, TANF_TOLERANCE, 0}, +{459, 3294752507u, 0u, 1071407813u, 0, TANF_TOLERANCE, 0}, +{460, 3424848725u, 0u, 3186537053u, 0, TANF_TOLERANCE, 0}, +{461, 1090870906u, 4294966393u, 3220499145u, 0, TANF_TOLERANCE, 0}, +{462, 1227582289u, 147011u, 3199134534u, 0, TANF_TOLERANCE, 0}, +{463, 1272325814u, 0u, 3210855731u, 0, TANF_TOLERANCE, 0}, +{464, 3359508271u, 0u, 1099836859u, 0, TANF_TOLERANCE, 0}, +{465, 1137854355u, 4294941607u, 3202424383u, 0, TANF_TOLERANCE, 0}, +{466, 3440773058u, 0u, 1068726618u, 0, TANF_TOLERANCE, 0}, +{467, 3101598400u, 0u, 3101598400u, 0, TANF_TOLERANCE, 0}, +{468, 3451216836u, 4294896064u, 3200426155u, 0, TANF_TOLERANCE, 0}, +{469, 3437062994u, 0u, 1059689791u, 0, TANF_TOLERANCE, 0}, +{470, 1131196082u, 3743u, 1072037701u, 0, TANF_TOLERANCE, 0}, +{471, 3177294154u, 63027320u, 3177309135u, 0, TANF_TOLERANCE, 0}, +{472, 3258097678u, 449173056u, 3209461218u, 0, TANF_TOLERANCE, 0}, +{473, 3460915348u, 356647u, 3224836939u, 0, TANF_TOLERANCE, 0}, +{474, 3303035472u, 0u, 3210859526u, 0, TANF_TOLERANCE, 0}, +{475, 1053698677u, 4294966907u, 1054479611u, 0, TANF_TOLERANCE, 0}, +{476, 3396166221u, 83688u, 3225970172u, 0, TANF_TOLERANCE, 0}, +{477, 3037541131u, 5u, 3037541131u, 0, TANF_TOLERANCE, 0}, +{478, 3458934263u, 0u, 3206505437u, 0, TANF_TOLERANCE, 0}, +{479, 1065761827u, 4294943781u, 1071544994u, 0, TANF_TOLERANCE, 0}, +{480, 3025843188u, 0u, 3025843188u, 0, TANF_TOLERANCE, 0}, +{481, 926665223u, 0u, 926665223u, 0, TANF_TOLERANCE, 0}, +{482, 1199816046u, 0u, 1066809597u, 0, TANF_TOLERANCE, 0}, +{483, 3333779015u, 0u, 3204917603u, 0, TANF_TOLERANCE, 0}, +{484, 948398145u, 4294967288u, 948398145u, 0, TANF_TOLERANCE, 0}, +{485, 3054021468u, 23933390u, 3054021468u, 0, TANF_TOLERANCE, 0}, +{486, 1080781593u, 224021u, 1058560355u, 0, TANF_TOLERANCE, 0}, +{487, 3164749613u, 0u, 3164751004u, 0, TANF_TOLERANCE, 0}, +{488, 3235326590u, 26828788u, 3203498638u, 0, TANF_TOLERANCE, 0}, +{489, 3118883815u, 0u, 3118883816u, 0, TANF_TOLERANCE, 0}, +{490, 965378004u, 146193824u, 965378004u, 0, TANF_TOLERANCE, 0}, +{491, 3226990408u, 45u, 3195199194u, 0, TANF_TOLERANCE, 0}, +{492, 3117098218u, 115u, 3117098219u, 0, TANF_TOLERANCE, 0}, +{493, 1283624229u, 0u, 3198816655u, 0, TANF_TOLERANCE, 0}, +{494, 970649315u, 3u, 970649316u, 0, TANF_TOLERANCE, 0}, +{495, 959776291u, 4294967028u, 959776291u, 0, TANF_TOLERANCE, 0}, +{496, 3341117305u, 4294966405u, 3220408010u, 0, TANF_TOLERANCE, 0}, +{497, 1270734970u, 4294829480u, 1033886173u, 0, TANF_TOLERANCE, 0}, +{498, 3454816067u, 0u, 3185422933u, 0, TANF_TOLERANCE, 0}, +{499, 917206623u, 7364u, 917206623u, 0, TANF_TOLERANCE, 0}, +{500, 1106502045u, 126247200u, 3215714266u, 0, TANF_TOLERANCE, 0}, +{501, 1157598381u, 4294964293u, 3212679933u, 0, TANF_TOLERANCE, 0}, +{502, 3335234513u, 0u, 3186255331u, 0, TANF_TOLERANCE, 0}, +{503, 1279489061u, 0u, 1089588244u, 0, TANF_TOLERANCE, 0}, +{504, 3157416480u, 624023680u, 3157416942u, 0, TANF_TOLERANCE, 0}, +{505, 3143920719u, 0u, 3143920780u, 0, TANF_TOLERANCE, 0}, +{506, 1233171235u, 0u, 3210041471u, 0, TANF_TOLERANCE, 0}, +{507, 1148920078u, 0u, 3212968272u, 0, TANF_TOLERANCE, 0}, +{508, 3064988156u, 4294967292u, 3064988156u, 0, TANF_TOLERANCE, 0}, +{509, 3083619260u, 2484u, 3083619260u, 0, TANF_TOLERANCE, 0}, +{510, 1109198803u, 431095u, 1117980359u, 0, TANF_TOLERANCE, 0}, +{511, 3219949483u, 0u, 1080100572u, 0, TANF_TOLERANCE, 0}, +{512, 3361149474u, 4293077090u, 3207612789u, 0, TANF_TOLERANCE, 0}, +{513, 1207502108u, 4292985650u, 3191321179u, 0, TANF_TOLERANCE, 0}, +{514, 1000014431u, 0u, 1000014507u, 0, TANF_TOLERANCE, 0}, +{515, 3161756316u, 0u, 3161757507u, 0, TANF_TOLERANCE, 0}, +{516, 3160728744u, 4293625597u, 3160729720u, 0, TANF_TOLERANCE, 0}, +{517, 1234530539u, 3u, 3211178013u, 0, TANF_TOLERANCE, 0}, +{518, 1017843965u, 40165u, 1017845595u, 0, TANF_TOLERANCE, 0}, +{519, 951862956u, 7732u, 951862956u, 0, TANF_TOLERANCE, 0}, +{520, 3306328852u, 87u, 3273199760u, 0, TANF_TOLERANCE, 0}, +{521, 1291910469u, 183319u, 3204374719u, 0, TANF_TOLERANCE, 0}, +{522, 3027442905u, 7942u, 3027442905u, 0, TANF_TOLERANCE, 0}, +{523, 1131927531u, 0u, 3199630789u, 0, TANF_TOLERANCE, 0}, +{524, 3449879391u, 0u, 3209274073u, 0, TANF_TOLERANCE, 0}, +{525, 970094304u, 4294911386u, 970094305u, 0, TANF_TOLERANCE, 0}, +{526, 1125551064u, 4294949017u, 3196245424u, 0, TANF_TOLERANCE, 0}, +{527, 3427296372u, 3784252480u, 1024398711u, 0, TANF_TOLERANCE, 0}, +{528, 1198917460u, 2607027968u, 1062104444u, 0, TANF_TOLERANCE, 0}, +{529, 3201603336u, 0u, 3202463351u, 0, TANF_TOLERANCE, 0}, +{530, 3114686212u, 1328603904u, 3114686212u, 0, TANF_TOLERANCE, 0}, +{531, 921940707u, 0u, 921940707u, 0, TANF_TOLERANCE, 0}, +{532, 1091906532u, 0u, 3184572372u, 0, TANF_TOLERANCE, 0}, +{533, 3393557778u, 4293570247u, 3198923133u, 0, TANF_TOLERANCE, 0}, +{534, 1276853215u, 0u, 1050751223u, 0, TANF_TOLERANCE, 0}, +{535, 3462778440u, 4294884341u, 1042202295u, 0, TANF_TOLERANCE, 0}, +{536, 3360170117u, 0u, 3213953845u, 0, TANF_TOLERANCE, 0}, +{537, 3224245428u, 4294967170u, 1055235475u, 0, TANF_TOLERANCE, 0}, +{538, 1120124467u, 352u, 1057355457u, 0, TANF_TOLERANCE, 0}, +{539, 1064364381u, 0u, 1068476199u, 0, TANF_TOLERANCE, 0}, +{540, 1268744779u, 4294952694u, 1049186545u, 0, TANF_TOLERANCE, 0}, +{541, 1165195428u, 4292538760u, 3171864354u, 0, TANF_TOLERANCE, 0}, +{542, 3044092739u, 30u, 3044092739u, 0, TANF_TOLERANCE, 0}, +{543, 3149469534u, 47144136u, 3149469663u, 0, TANF_TOLERANCE, 0}, +{544, 3247790039u, 0u, 1044126050u, 0, TANF_TOLERANCE, 0}, +{545, 3215244648u, 4u, 3227218833u, 0, TANF_TOLERANCE, 0}, +{546, 3095275931u, 0u, 3095275931u, 0, TANF_TOLERANCE, 0}, +{547, 3059688264u, 77u, 3059688264u, 0, TANF_TOLERANCE, 0}, +{548, 1212717473u, 0u, 1093643519u, 0, TANF_TOLERANCE, 0}, +{549, 3275973009u, 3930410816u, 3207596131u, 0, TANF_TOLERANCE, 0}, +{550, 3028857014u, 0u, 3028857014u, 0, TANF_TOLERANCE, 0}, +{551, 3391162308u, 129212984u, 1072543465u, 0, TANF_TOLERANCE, 0}, +{552, 1044867873u, 4294528232u, 1045035636u, 0, TANF_TOLERANCE, 0}, +{553, 1089986803u, 3370664576u, 1091822310u, 0, TANF_TOLERANCE, 0}, +{554, 1296314700u, 0u, 1056804853u, 0, TANF_TOLERANCE, 0}, +{555, 1251462432u, 0u, 3218109010u, 0, TANF_TOLERANCE, 0}, +{556, 3485236902u, 0u, 3252201041u, 0, TANF_TOLERANCE, 0}, +{557, 3262169538u, 19958524u, 3205202357u, 0, TANF_TOLERANCE, 0}, +{558, 3080852256u, 0u, 3080852256u, 0, TANF_TOLERANCE, 0}, +{559, 1022211242u, 0u, 1022215616u, 0, TANF_TOLERANCE, 0}, +{560, 884661176u, 0u, 884661176u, 0, TANF_TOLERANCE, 0}, +{561, 3071422941u, 4294967172u, 3071422941u, 0, TANF_TOLERANCE, 0}, +{562, 989762529u, 4294733601u, 989762550u, 0, TANF_TOLERANCE, 0}, +{563, 1295475718u, 0u, 3197707674u, 0, TANF_TOLERANCE, 0}, +{564, 1002632518u, 4294950696u, 1002632669u, 0, TANF_TOLERANCE, 0}, +{565, 3404372005u, 3938008096u, 3237779534u, 0, TANF_TOLERANCE, 0}, +{566, 3158912530u, 0u, 3158913193u, 0, TANF_TOLERANCE, 0}, +{567, 1125800069u, 4294967259u, 1054681101u, 0, TANF_TOLERANCE, 0}, +{568, 3138037576u, 0u, 3138037590u, 0, TANF_TOLERANCE, 0}, +{569, 3108384823u, 268832992u, 3108384823u, 0, TANF_TOLERANCE, 0}, +{570, 999985470u, 4282999218u, 999985545u, 0, TANF_TOLERANCE, 0}, +{571, 1189421739u, 0u, 3206932751u, 0, TANF_TOLERANCE, 0}, +{572, 3075182644u, 0u, 3075182644u, 0, TANF_TOLERANCE, 0}, +{573, 3028099649u, 4292241163u, 3028099649u, 0, TANF_TOLERANCE, 0}, +{574, 3132541814u, 4077666864u, 3132541822u, 0, TANF_TOLERANCE, 0}, +{575, 1164046161u, 4139845440u, 3217980332u, 0, TANF_TOLERANCE, 0}, +{576, 1292596266u, 0u, 1068007873u, 0, TANF_TOLERANCE, 0}, +{577, 3469748379u, 4279587928u, 1060131664u, 0, TANF_TOLERANCE, 0}, +{578, 1314644642u, 0u, 3197317752u, 0, TANF_TOLERANCE, 0}, +{579, 3399813173u, 0u, 1059796620u, 0, TANF_TOLERANCE, 0}, +{580, 948775569u, 2159002624u, 948775569u, 0, TANF_TOLERANCE, 0}, +{581, 1034611395u, 0u, 1034637473u, 0, TANF_TOLERANCE, 0}, +{582, 3489122735u, 4294428604u, 3207259992u, 0, TANF_TOLERANCE, 0}, +{583, 1181604787u, 4294717096u, 3224785060u, 0, TANF_TOLERANCE, 0}, +{584, 3059042077u, 0u, 3059042077u, 0, TANF_TOLERANCE, 0}, +{585, 1043691622u, 4288164501u, 1043817708u, 0, TANF_TOLERANCE, 0}, +{586, 1314588083u, 0u, 1082395610u, 0, TANF_TOLERANCE, 0}, +{587, 3141533334u, 0u, 3141533370u, 0, TANF_TOLERANCE, 0}, +{588, 3157534378u, 3899913312u, 3157534854u, 0, TANF_TOLERANCE, 0}, +{589, 3400949680u, 0u, 1099168145u, 0, TANF_TOLERANCE, 0}, +{590, 3365581801u, 9596u, 1093578518u, 0, TANF_TOLERANCE, 0}, +{591, 1110424755u, 0u, 3175405557u, 0, TANF_TOLERANCE, 0}, +{592, 3189917167u, 0u, 3190007093u, 0, TANF_TOLERANCE, 0}, +{593, 969804941u, 4294836255u, 969804942u, 0, TANF_TOLERANCE, 0}, +{594, 1139120919u, 4294967176u, 1058612519u, 0, TANF_TOLERANCE, 0}, +{595, 934308144u, 0u, 934308144u, 0, TANF_TOLERANCE, 0}, +{596, 1220524226u, 1440u, 1053896882u, 0, TANF_TOLERANCE, 0}, +{597, 3162548604u, 3394333056u, 3162549297u, 0, TANF_TOLERANCE, 0}, +{598, 3382391700u, 4294966243u, 1092675627u, 0, TANF_TOLERANCE, 0}, +{599, 1156767533u, 7u, 1092496361u, 0, TANF_TOLERANCE, 0}, +{600, 3079222483u, 4294963487u, 3079222483u, 0, TANF_TOLERANCE, 0}, +{601, 994934087u, 0u, 994934131u, 0, TANF_TOLERANCE, 0}, +{602, 3185240099u, 122u, 3185294986u, 0, TANF_TOLERANCE, 0}, +{603, 3479873563u, 3288004u, 1068753718u, 0, TANF_TOLERANCE, 0}, +{604, 3424264117u, 4203174416u, 3173613126u, 0, TANF_TOLERANCE, 0}, +{605, 3228365887u, 275492u, 3206597172u, 0, TANF_TOLERANCE, 0}, +{606, 1035909900u, 4101891u, 1035946163u, 0, TANF_TOLERANCE, 0}, +{607, 3024951184u, 3626688u, 3024951184u, 0, TANF_TOLERANCE, 0}, +{608, 1212129651u, 0u, 3200433496u, 0, TANF_TOLERANCE, 0}, +{609, 3125775254u, 0u, 3125775257u, 0, TANF_TOLERANCE, 0}, +{610, 1037464105u, 0u, 1037515694u, 0, TANF_TOLERANCE, 0}, +{611, 1311706596u, 6702361u, 1067617575u, 0, TANF_TOLERANCE, 0}, +{612, 918212457u, 0u, 918212457u, 0, TANF_TOLERANCE, 0}, +{613, 1337315179u, 3421796288u, 3233803179u, 0, TANF_TOLERANCE, 0}, +{614, 1131358407u, 4294955130u, 1054304608u, 0, TANF_TOLERANCE, 0}, +{615, 1156517523u, 4294914801u, 3212474510u, 0, TANF_TOLERANCE, 0}, +{616, 3210802820u, 0u, 3214570101u, 0, TANF_TOLERANCE, 0}, +{617, 3337499209u, 621819u, 1013411925u, 0, TANF_TOLERANCE, 0}, +{618, 3468429030u, 4294967266u, 1083934034u, 0, TANF_TOLERANCE, 0}, +{619, 3253515800u, 28517u, 3228847177u, 0, TANF_TOLERANCE, 0}, +{620, 3055299953u, 0u, 3055299953u, 0, TANF_TOLERANCE, 0}, +{621, 959956547u, 0u, 959956547u, 0, TANF_TOLERANCE, 0}, +{622, 3425290480u, 461u, 1035239809u, 0, TANF_TOLERANCE, 0}, +{623, 1039917375u, 117u, 1040001112u, 0, TANF_TOLERANCE, 0}, +{624, 3220979495u, 4234725636u, 1075276972u, 0, TANF_TOLERANCE, 0}, +{625, 1311016004u, 4294941884u, 3227474106u, 0, TANF_TOLERANCE, 0}, +{626, 1128016396u, 27u, 3199213538u, 0, TANF_TOLERANCE, 0}, +{627, 3210335769u, 0u, 3214015080u, 0, TANF_TOLERANCE, 0}, +{628, 3022705759u, 4287084865u, 3022705759u, 0, TANF_TOLERANCE, 0}, +{629, 1206054701u, 0u, 3238454059u, 0, TANF_TOLERANCE, 0}, +{630, 3144504834u, 3170u, 3144504902u, 0, TANF_TOLERANCE, 0}, +{631, 1213609983u, 0u, 1087444763u, 0, TANF_TOLERANCE, 0}, +{632, 1246902946u, 0u, 1059569979u, 0, TANF_TOLERANCE, 0}, +{633, 995850843u, 3845036544u, 995850897u, 0, TANF_TOLERANCE, 0}, +{634, 3362082828u, 4294328268u, 3217124513u, 0, TANF_TOLERANCE, 0}, +{635, 1029480631u, 0u, 1029494631u, 0, TANF_TOLERANCE, 0}, +{636, 3153568584u, 0u, 3153568893u, 0, TANF_TOLERANCE, 0}, +{637, 3384988527u, 0u, 1015237194u, 0, TANF_TOLERANCE, 0}, +{638, 1317696241u, 0u, 3214540299u, 0, TANF_TOLERANCE, 0}, +{639, 3235395924u, 249u, 3204662531u, 0, TANF_TOLERANCE, 0}, +{640, 3341877624u, 0u, 1066781384u, 0, TANF_TOLERANCE, 0}, +{641, 1228636133u, 0u, 1088625043u, 0, TANF_TOLERANCE, 0}, +{642, 3161654634u, 4294939932u, 3161655802u, 0, TANF_TOLERANCE, 0}, +{643, 3162655243u, 4294964738u, 3162655963u, 0, TANF_TOLERANCE, 0}, +{644, 1207246237u, 0u, 3221431060u, 0, TANF_TOLERANCE, 0}, +{645, 1165476654u, 4294877038u, 3205034258u, 0, TANF_TOLERANCE, 0}, +{646, 1215278023u, 0u, 3225473261u, 0, TANF_TOLERANCE, 0}, +{647, 1017239798u, 4167373560u, 1017241178u, 0, TANF_TOLERANCE, 0}, +{648, 1149651309u, 0u, 3188065066u, 0, TANF_TOLERANCE, 0}, +{649, 1111943722u, 0u, 3206043720u, 0, TANF_TOLERANCE, 0}, +{650, 1189849849u, 4293652457u, 3182509934u, 0, TANF_TOLERANCE, 0}, +{651, 3204848496u, 0u, 3205751737u, 0, TANF_TOLERANCE, 0}, +{652, 1249758327u, 0u, 1059591112u, 0, TANF_TOLERANCE, 0}, +{653, 3092982276u, 4065500752u, 3092982276u, 0, TANF_TOLERANCE, 0}, +{654, 1168098747u, 1063712256u, 1082873807u, 0, TANF_TOLERANCE, 0}, +{655, 892549317u, 13301u, 892549317u, 0, TANF_TOLERANCE, 0}, +{656, 3301009024u, 4286178976u, 3254770741u, 0, TANF_TOLERANCE, 0}, +{657, 3233089227u, 204399u, 1060708740u, 0, TANF_TOLERANCE, 0}, +{658, 3218245284u, 1767132u, 1096286488u, 0, TANF_TOLERANCE, 0}, +{659, 3215981890u, 4294967286u, 3231794500u, 0, TANF_TOLERANCE, 0}, +{660, 1266687209u, 0u, 1072040735u, 0, TANF_TOLERANCE, 0}, +{661, 3487959775u, 4294948774u, 1080427053u, 0, TANF_TOLERANCE, 0}, +{662, 943645710u, 0u, 943645710u, 0, TANF_TOLERANCE, 0}, +{663, 3345065699u, 4294966959u, 1063260966u, 0, TANF_TOLERANCE, 0}, +{664, 935847271u, 1u, 935847271u, 0, TANF_TOLERANCE, 0}, +{665, 3410336089u, 47u, 1039814645u, 0, TANF_TOLERANCE, 0}, +{666, 3082940740u, 1562501120u, 3082940740u, 0, TANF_TOLERANCE, 0}, +{667, 1141063391u, 5507u, 1051920630u, 0, TANF_TOLERANCE, 0}, +{668, 3059263153u, 0u, 3059263153u, 0, TANF_TOLERANCE, 0}, +{669, 3353679791u, 0u, 3214268763u, 0, TANF_TOLERANCE, 0}, +{670, 1001823878u, 0u, 1001824002u, 0, TANF_TOLERANCE, 0}, +{671, 1009130212u, 0u, 1009130585u, 0, TANF_TOLERANCE, 0}, +{672, 3367127535u, 0u, 3210803933u, 0, TANF_TOLERANCE, 0}, +{673, 1032920919u, 3981458912u, 1032936870u, 0, TANF_TOLERANCE, 0}, +{674, 3281952870u, 0u, 1027847826u, 0, TANF_TOLERANCE, 0}, +{675, 1237868497u, 0u, 3199109460u, 0, TANF_TOLERANCE, 0}, +{676, 1153753924u, 4294958733u, 1075092193u, 0, TANF_TOLERANCE, 0}, +{677, 1120261759u, 0u, 1103227732u, 0, TANF_TOLERANCE, 0}, +{678, 3226328360u, 4294623870u, 3180983208u, 0, TANF_TOLERANCE, 0}, +{679, 3349595986u, 4294967271u, 1069726435u, 0, TANF_TOLERANCE, 0}, +{680, 3166889490u, 4294965026u, 3166891900u, 0, TANF_TOLERANCE, 0}, +{681, 1087750238u, 16u, 1054237603u, 0, TANF_TOLERANCE, 0}, +{682, 3121620061u, 4294773019u, 3121620062u, 0, TANF_TOLERANCE, 0}, +{683, 1066116543u, 0u, 1073085463u, 0, TANF_TOLERANCE, 0}, +{684, 3210898034u, 0u, 3214687828u, 0, TANF_TOLERANCE, 0}, +{685, 3051923237u, 4294697573u, 3051923237u, 0, TANF_TOLERANCE, 0}, +{686, 1030612298u, 4294908239u, 1030629852u, 0, TANF_TOLERANCE, 0}, +{687, 1186234578u, 0u, 1074426401u, 0, TANF_TOLERANCE, 0}, +{688, 1331680743u, 0u, 1068067591u, 0, TANF_TOLERANCE, 0}, +{689, 3060774997u, 2318310656u, 3060774997u, 0, TANF_TOLERANCE, 0}, +{690, 887589411u, 141578704u, 887589411u, 0, TANF_TOLERANCE, 0}, +{691, 1045232522u, 4294967290u, 1045414882u, 0, TANF_TOLERANCE, 0}, +{692, 3119858470u, 0u, 3119858471u, 0, TANF_TOLERANCE, 0}, +{693, 3349432725u, 0u, 1069451077u, 0, TANF_TOLERANCE, 0}, +{694, 912423027u, 0u, 912423027u, 0, TANF_TOLERANCE, 0}, +{695, 3228795133u, 4294967132u, 3209165556u, 0, TANF_TOLERANCE, 0}, +{696, 3194674746u, 0u, 3194950467u, 0, TANF_TOLERANCE, 0}, +{697, 3296784303u, 4294967098u, 3218995362u, 0, TANF_TOLERANCE, 0}, +{698, 965402291u, 0u, 965402291u, 0, TANF_TOLERANCE, 0}, +{699, 3388153589u, 4246639564u, 1059937603u, 0, TANF_TOLERANCE, 0}, +{700, 1133410485u, 4294951516u, 3215980355u, 0, TANF_TOLERANCE, 0}, +{701, 3136790322u, 7u, 3136790341u, 0, TANF_TOLERANCE, 0}, +{702, 3369970587u, 0u, 1079671878u, 0, TANF_TOLERANCE, 0}, +{703, 1270451568u, 0u, 3215399533u, 0, TANF_TOLERANCE, 0}, +{704, 989498922u, 0u, 989498942u, 0, TANF_TOLERANCE, 0}, +{705, 1280215674u, 0u, 3203020348u, 0, TANF_TOLERANCE, 0}, +{706, 1171873518u, 0u, 1053592412u, 0, TANF_TOLERANCE, 0}, +{707, 3298258100u, 0u, 1078312850u, 0, TANF_TOLERANCE, 0}, +{708, 3415208824u, 0u, 1072972802u, 0, TANF_TOLERANCE, 0}, +{709, 1001897182u, 0u, 1001897308u, 0, TANF_TOLERANCE, 0}, +{710, 3152777939u, 4294967281u, 3152778205u, 0, TANF_TOLERANCE, 0}, +{711, 985903305u, 4294945424u, 985903315u, 0, TANF_TOLERANCE, 0}, +{712, 3357328848u, 0u, 1040886478u, 0, TANF_TOLERANCE, 0}, +{713, 982612185u, 0u, 982612189u, 0, TANF_TOLERANCE, 0}, +{714, 3267868136u, 136421u, 1062023610u, 0, TANF_TOLERANCE, 0}, +{715, 3319048157u, 7150u, 3197801983u, 0, TANF_TOLERANCE, 0}, +{716, 1144755661u, 0u, 3205225235u, 0, TANF_TOLERANCE, 0}, +{717, 898467286u, 0u, 898467286u, 0, TANF_TOLERANCE, 0}, +{718, 3301461672u, 1119632u, 3196087313u, 0, TANF_TOLERANCE, 0}, +{719, 3364525678u, 0u, 3196210714u, 0, TANF_TOLERANCE, 0}, +{720, 931441127u, 285u, 931441127u, 0, TANF_TOLERANCE, 0}, +{721, 3146660041u, 0u, 3146660100u, 0, TANF_TOLERANCE, 0}, +{722, 3467121799u, 0u, 3191838679u, 0, TANF_TOLERANCE, 0}, +{723, 1151257041u, 0u, 1073582895u, 0, TANF_TOLERANCE, 0}, +{724, 3097873255u, 4294967295u, 3097873255u, 0, TANF_TOLERANCE, 0}, +{725, 3130670309u, 0u, 3130670314u, 0, TANF_TOLERANCE, 0}, +{726, 1017573824u, 0u, 1017575339u, 0, TANF_TOLERANCE, 0}, +{727, 1258369714u, 3364363264u, 3221741189u, 0, TANF_TOLERANCE, 0}, +{728, 1216602683u, 4294468761u, 3207163210u, 0, TANF_TOLERANCE, 0}, +{729, 3297265739u, 228335u, 3187817583u, 0, TANF_TOLERANCE, 0}, +{730, 1071940738u, 4294963632u, 3230852112u, 0, TANF_TOLERANCE, 0}, +{731, 922601356u, 4294937447u, 922601356u, 0, TANF_TOLERANCE, 0}, +{732, 3462285635u, 4085532736u, 1046898481u, 0, TANF_TOLERANCE, 0}, +{733, 3357177805u, 5u, 1066425327u, 0, TANF_TOLERANCE, 0}, +{734, 3049120080u, 0u, 3049120080u, 0, TANF_TOLERANCE, 0}, +{735, 1153863660u, 0u, 3222167055u, 0, TANF_TOLERANCE, 0}, +{736, 3034243695u, 0u, 3034243695u, 0, TANF_TOLERANCE, 0}, +{737, 1249365132u, 4294967060u, 3214523524u, 0, TANF_TOLERANCE, 0}, +{738, 3046215730u, 0u, 3046215730u, 0, TANF_TOLERANCE, 0}, +{739, 3047251716u, 8u, 3047251716u, 0, TANF_TOLERANCE, 0}, +{740, 3131219358u, 2355170688u, 3131219363u, 0, TANF_TOLERANCE, 0}, +{741, 3222096285u, 59453u, 1068306462u, 0, TANF_TOLERANCE, 0}, +{742, 1297708818u, 0u, 3206939123u, 0, TANF_TOLERANCE, 0}, +{743, 3345532722u, 4293531291u, 3239569797u, 0, TANF_TOLERANCE, 0}, +{744, 3418753236u, 4002743296u, 3228029453u, 0, TANF_TOLERANCE, 0}, +{745, 1277417964u, 1103002624u, 3203882980u, 0, TANF_TOLERANCE, 0}, +{746, 987577257u, 1370u, 987577271u, 0, TANF_TOLERANCE, 0}, +{747, 3161606610u, 0u, 3161607768u, 0, TANF_TOLERANCE, 0}, +{748, 888030585u, 0u, 888030585u, 0, TANF_TOLERANCE, 0}, +{749, 1043442869u, 4294963715u, 1043561145u, 0, TANF_TOLERANCE, 0}, +{750, 3320923228u, 3214934912u, 1095051388u, 0, TANF_TOLERANCE, 0}, +{751, 1337400405u, 418188288u, 1047433444u, 0, TANF_TOLERANCE, 0}, +{752, 3400348640u, 0u, 3184549924u, 0, TANF_TOLERANCE, 0}, +{753, 1250249095u, 1u, 1050407057u, 0, TANF_TOLERANCE, 0}, +{754, 3284411233u, 7805u, 1055280030u, 0, TANF_TOLERANCE, 0}, +{755, 3020883322u, 0u, 3020883322u, 0, TANF_TOLERANCE, 0}, +{756, 1215968622u, 2531374080u, 1074241478u, 0, TANF_TOLERANCE, 0}, +{757, 3202319550u, 0u, 3203327015u, 0, TANF_TOLERANCE, 0}, +{758, 3061638260u, 0u, 3061638260u, 0, TANF_TOLERANCE, 0}, +{759, 1025404104u, 1u, 1025409284u, 0, TANF_TOLERANCE, 0}, +{760, 3138086437u, 0u, 3138086451u, 0, TANF_TOLERANCE, 0}, +{761, 3091024506u, 3752313152u, 3091024506u, 0, TANF_TOLERANCE, 0}, +{762, 3362748242u, 4294517284u, 1059851445u, 0, TANF_TOLERANCE, 0}, +{763, 3099671635u, 4294967295u, 3099671635u, 0, TANF_TOLERANCE, 0}, +{764, 3068014841u, 0u, 3068014841u, 0, TANF_TOLERANCE, 0}, +{765, 1252237719u, 105u, 1083657804u, 0, TANF_TOLERANCE, 0}, +{766, 3327895594u, 517257u, 1059714984u, 0, TANF_TOLERANCE, 0}, +{767, 3082454432u, 0u, 3082454432u, 0, TANF_TOLERANCE, 0}, +{768, 3396161504u, 16393u, 3185570312u, 0, TANF_TOLERANCE, 0}, +{769, 1099710167u, 0u, 3229132239u, 0, TANF_TOLERANCE, 0}, +{770, 1157186482u, 109233848u, 3213014187u, 0, TANF_TOLERANCE, 0}, +{771, 1282110851u, 0u, 1058083394u, 0, TANF_TOLERANCE, 0}, +{772, 3477008113u, 3797391872u, 3243115119u, 0, TANF_TOLERANCE, 0}, +{773, 3292127294u, 4282395772u, 1071713910u, 0, TANF_TOLERANCE, 0}, +{774, 1123357102u, 4294966999u, 1011577850u, 0, TANF_TOLERANCE, 0}, +{775, 1106837025u, 0u, 3197751392u, 0, TANF_TOLERANCE, 0}, +{776, 1049949008u, 230u, 1050234049u, 0, TANF_TOLERANCE, 0}, +{777, 1253017688u, 0u, 1073946677u, 0, TANF_TOLERANCE, 0}, +{778, 1108543194u, 4294966999u, 3215992802u, 0, TANF_TOLERANCE, 0}, +{779, 3087985411u, 1700586u, 3087985411u, 0, TANF_TOLERANCE, 0}, +{780, 3163283126u, 2976129280u, 3163284017u, 0, TANF_TOLERANCE, 0}, +{781, 1160162706u, 14164775u, 3200455195u, 0, TANF_TOLERANCE, 0}, +{782, 3305715025u, 0u, 1061093195u, 0, TANF_TOLERANCE, 0}, +{783, 1266928623u, 0u, 1066131511u, 0, TANF_TOLERANCE, 0}, +{784, 3025340297u, 43483u, 3025340297u, 0, TANF_TOLERANCE, 0}, +{785, 3438080027u, 0u, 3196462866u, 0, TANF_TOLERANCE, 0}, +{786, 3344574751u, 0u, 3218369690u, 0, TANF_TOLERANCE, 0}, +{787, 1152416724u, 0u, 1080146948u, 0, TANF_TOLERANCE, 0}, +{788, 1218239308u, 161u, 3223069606u, 0, TANF_TOLERANCE, 0}, +{789, 3263310567u, 0u, 1067313815u, 0, TANF_TOLERANCE, 0}, +{790, 3041998669u, 2782u, 3041998669u, 0, TANF_TOLERANCE, 0}, +{791, 1000313118u, 0u, 1000313201u, 0, TANF_TOLERANCE, 0}, +{792, 972485427u, 131u, 972485428u, 0, TANF_TOLERANCE, 0}, +{793, 3290264612u, 137u, 3243638355u, 0, TANF_TOLERANCE, 0}, +{794, 3222106584u, 18249u, 1068248402u, 0, TANF_TOLERANCE, 0}, +{795, 1278946388u, 0u, 3213687170u, 0, TANF_TOLERANCE, 0}, +{796, 947914771u, 0u, 947914771u, 0, TANF_TOLERANCE, 0}, +{797, 3167730654u, 0u, 3167733573u, 0, TANF_TOLERANCE, 0}, +{798, 1098530298u, 4294967260u, 3180012107u, 0, TANF_TOLERANCE, 0}, +{799, 3232726036u, 0u, 1065589565u, 0, TANF_TOLERANCE, 0}, +{800, 1297190916u, 0u, 3227258942u, 0, TANF_TOLERANCE, 0}, +{801, 1277649137u, 0u, 1090874516u, 0, TANF_TOLERANCE, 0}, +{802, 3203377685u, 466619008u, 3204541722u, 0, TANF_TOLERANCE, 0}, +{803, 3090306474u, 0u, 3090306474u, 0, TANF_TOLERANCE, 0}, +{804, 3244032016u, 0u, 3223123848u, 0, TANF_TOLERANCE, 0}, +{805, 3033122376u, 0u, 3033122376u, 0, TANF_TOLERANCE, 0}, +{806, 1096155623u, 7454884u, 1065760490u, 0, TANF_TOLERANCE, 0}, +{807, 873151908u, 4294967280u, 873151908u, 0, TANF_TOLERANCE, 0}, +{808, 3238729605u, 245005088u, 1063636693u, 0, TANF_TOLERANCE, 0}, +{809, 3317196817u, 0u, 3220820246u, 0, TANF_TOLERANCE, 0}, +{810, 3374748510u, 0u, 1052782883u, 0, TANF_TOLERANCE, 0}, +{811, 3345634950u, 0u, 1082277486u, 0, TANF_TOLERANCE, 0}, +{812, 3189860276u, 0u, 3189948757u, 0, TANF_TOLERANCE, 0}, +{813, 887311687u, 9077u, 887311687u, 0, TANF_TOLERANCE, 0}, +{814, 3396917283u, 0u, 3176463205u, 0, TANF_TOLERANCE, 0}, +{815, 3317032737u, 0u, 1057311975u, 0, TANF_TOLERANCE, 0}, +{816, 1200051436u, 3555u, 3221587134u, 0, TANF_TOLERANCE, 0}, +{817, 3105291012u, 45279u, 3105291012u, 0, TANF_TOLERANCE, 0}, +{818, 1306520561u, 0u, 1073667024u, 0, TANF_TOLERANCE, 0}, +{819, 1314936356u, 0u, 3214605429u, 0, TANF_TOLERANCE, 0}, +{820, 3475052219u, 71851496u, 1038538546u, 0, TANF_TOLERANCE, 0}, +{821, 3085636260u, 33u, 3085636260u, 0, TANF_TOLERANCE, 0}, +{822, 3393227708u, 4294967164u, 1037393136u, 0, TANF_TOLERANCE, 0}, +{823, 3182540197u, 0u, 3182569515u, 0, TANF_TOLERANCE, 0}, +{824, 3349005404u, 0u, 3182795207u, 0, TANF_TOLERANCE, 0}, +{825, 3154720153u, 4090490144u, 3154720363u, 0, TANF_TOLERANCE, 0}, +{826, 1262863321u, 345111u, 1058701781u, 0, TANF_TOLERANCE, 0}, +{827, 882902102u, 512593u, 882902102u, 0, TANF_TOLERANCE, 0}, +{828, 1053387478u, 0u, 1054113388u, 0, TANF_TOLERANCE, 0}, +{829, 3387653691u, 4294896063u, 1133672154u, 0, TANF_TOLERANCE, 0}, +{830, 3136364836u, 0u, 3136364854u, 0, TANF_TOLERANCE, 0}, +{831, 1338680611u, 4126u, 3203129222u, 0, TANF_TOLERANCE, 0}, +{832, 1112891928u, 0u, 3178975679u, 0, TANF_TOLERANCE, 0}, +{833, 893449284u, 0u, 893449284u, 0, TANF_TOLERANCE, 0}, +{834, 892311459u, 14u, 892311459u, 0, TANF_TOLERANCE, 0}, +{835, 3105373037u, 4294967280u, 3105373037u, 0, TANF_TOLERANCE, 0}, +{836, 1190105283u, 0u, 3210335843u, 0, TANF_TOLERANCE, 0}, +{837, 1011225926u, 14129u, 1011226559u, 0, TANF_TOLERANCE, 0}, +{838, 1043025031u, 0u, 1043130935u, 0, TANF_TOLERANCE, 0}, +{839, 3410531037u, 0u, 1058007796u, 0, TANF_TOLERANCE, 0}, +{840, 3125834184u, 0u, 3125834187u, 0, TANF_TOLERANCE, 0}, +{841, 902318189u, 0u, 902318189u, 0, TANF_TOLERANCE, 0}, +{842, 3213624815u, 0u, 3220685331u, 0, TANF_TOLERANCE, 0}, +{843, 1120888322u, 5u, 1020958163u, 0, TANF_TOLERANCE, 0}, +{844, 1315217243u, 4291026624u, 3216322935u, 0, TANF_TOLERANCE, 0}, +{845, 3137758475u, 0u, 3137758487u, 0, TANF_TOLERANCE, 0}, +{846, 1040617590u, 0u, 1040668706u, 0, TANF_TOLERANCE, 0}, +{847, 955384253u, 4294910624u, 955384253u, 0, TANF_TOLERANCE, 0}, +{848, 3061417900u, 7119u, 3061417900u, 0, TANF_TOLERANCE, 0}, +{849, 904255535u, 0u, 904255535u, 0, TANF_TOLERANCE, 0}, +{850, 1022984119u, 0u, 1022989177u, 0, TANF_TOLERANCE, 0}, +{851, 997362368u, 0u, 997362441u, 0, TANF_TOLERANCE, 0}, +{852, 900933520u, 19u, 900933520u, 0, TANF_TOLERANCE, 0}, +{853, 1168623062u, 661u, 3196323038u, 0, TANF_TOLERANCE, 0}, +{854, 878737490u, 4294967181u, 878737490u, 0, TANF_TOLERANCE, 0}, +{855, 1039827284u, 1u, 1039909652u, 0, TANF_TOLERANCE, 0}, +{856, 1021564080u, 0u, 1021567931u, 0, TANF_TOLERANCE, 0}, +{857, 3458669745u, 0u, 1066422342u, 0, TANF_TOLERANCE, 0}, +{858, 3327516316u, 4286775627u, 1049360086u, 0, TANF_TOLERANCE, 0}, +{859, 1040711112u, 4294967293u, 1040763880u, 0, TANF_TOLERANCE, 0}, +{860, 1134528351u, 4294638880u, 3232374310u, 0, TANF_TOLERANCE, 0}, +{861, 3039884464u, 6340u, 3039884464u, 0, TANF_TOLERANCE, 0}, +{862, 3414352838u, 4294876517u, 3188011275u, 0, TANF_TOLERANCE, 0}, +{863, 1133689539u, 1u, 1079948290u, 0, TANF_TOLERANCE, 0}, +{864, 3455688478u, 4294945415u, 1107170377u, 0, TANF_TOLERANCE, 0}, +{865, 1137634874u, 395u, 3213603805u, 0, TANF_TOLERANCE, 0}, +{866, 3415502662u, 0u, 1066223566u, 0, TANF_TOLERANCE, 0}, +{867, 954999730u, 0u, 954999730u, 0, TANF_TOLERANCE, 0}, +{868, 1066157309u, 4294967285u, 1073278589u, 0, TANF_TOLERANCE, 0}, +{869, 3436353675u, 8741u, 1059785901u, 0, TANF_TOLERANCE, 0}, +{870, 940437609u, 0u, 940437609u, 0, TANF_TOLERANCE, 0}, +{871, 3108347547u, 4203356328u, 3108347547u, 0, TANF_TOLERANCE, 0}, +{872, 3064200154u, 0u, 3064200154u, 0, TANF_TOLERANCE, 0}, +{873, 1023889593u, 0u, 1023892821u, 0, TANF_TOLERANCE, 0}, +{874, 3272661536u, 3393767296u, 3199494770u, 0, TANF_TOLERANCE, 0}, +{875, 1170245333u, 1083705u, 1044761542u, 0, TANF_TOLERANCE, 0}, +{876, 1219052056u, 4294526211u, 1059052342u, 0, TANF_TOLERANCE, 0}, +{877, 3318983619u, 4294967246u, 3192638482u, 0, TANF_TOLERANCE, 0}, +{878, 3372118621u, 0u, 3246295792u, 0, TANF_TOLERANCE, 0}, +{879, 3146190320u, 0u, 3146190370u, 0, TANF_TOLERANCE, 0}, +{880, 1299683827u, 0u, 1043926259u, 0, TANF_TOLERANCE, 0}, +{881, 3190796331u, 1457792256u, 3190910653u, 0, TANF_TOLERANCE, 0}, +{882, 3086068902u, 2772570624u, 3086068902u, 0, TANF_TOLERANCE, 0}, +{883, 3064155399u, 0u, 3064155399u, 0, TANF_TOLERANCE, 0}, +{884, 3040314717u, 1u, 3040314717u, 0, TANF_TOLERANCE, 0}, +{885, 3257224022u, 4294737239u, 3204855251u, 0, TANF_TOLERANCE, 0}, +{886, 1229268598u, 1u, 3190598378u, 0, TANF_TOLERANCE, 0}, +{887, 3184078812u, 0u, 3184121389u, 0, TANF_TOLERANCE, 0}, +{888, 1086717248u, 4256439624u, 3183821300u, 0, TANF_TOLERANCE, 0}, +{889, 3434884607u, 0u, 1054771109u, 0, TANF_TOLERANCE, 0}, +{890, 3464955606u, 0u, 3208802337u, 0, TANF_TOLERANCE, 0}, +{891, 1025278524u, 0u, 1025283519u, 0, TANF_TOLERANCE, 0}, +{892, 1242829722u, 4294967290u, 1069973034u, 0, TANF_TOLERANCE, 0}, +{893, 3075149137u, 76u, 3075149137u, 0, TANF_TOLERANCE, 0}, +{894, 1200927971u, 1093714048u, 1079140552u, 0, TANF_TOLERANCE, 0}, +{895, 3326858092u, 3870213632u, 3216501138u, 0, TANF_TOLERANCE, 0}, +{896, 1246019790u, 0u, 3203052164u, 0, TANF_TOLERANCE, 0}, +{897, 3184801644u, 424u, 3184851637u, 0, TANF_TOLERANCE, 0}, +{898, 1136052740u, 4294967282u, 1074814028u, 0, TANF_TOLERANCE, 0}, +{899, 1069009211u, 0u, 1089185530u, 0, TANF_TOLERANCE, 0}, +{900, 1015670780u, 20u, 1015671634u, 0, TANF_TOLERANCE, 0}, +{901, 1012543234u, 70u, 1012544079u, 0, TANF_TOLERANCE, 0}, +{902, 3316611992u, 4291436324u, 3235325687u, 0, TANF_TOLERANCE, 0}, +{903, 1087942795u, 4294961657u, 1057489571u, 0, TANF_TOLERANCE, 0}, +{904, 3426365713u, 0u, 3204426893u, 0, TANF_TOLERANCE, 0}, +{905, 3066654389u, 4087070784u, 3066654389u, 0, TANF_TOLERANCE, 0}, +{906, 3295326432u, 842363840u, 1059389687u, 0, TANF_TOLERANCE, 0}, +{907, 3318835308u, 4294967077u, 3172066705u, 0, TANF_TOLERANCE, 0}, +{908, 3283555717u, 0u, 1085772908u, 0, TANF_TOLERANCE, 0}, +{909, 3381255420u, 0u, 3224136418u, 0, TANF_TOLERANCE, 0}, +{910, 3040485181u, 4294241104u, 3040485181u, 0, TANF_TOLERANCE, 0}, +{911, 3388772093u, 0u, 3216206684u, 0, TANF_TOLERANCE, 0}, +{912, 954670189u, 760u, 954670189u, 0, TANF_TOLERANCE, 0}, +{913, 1319200415u, 4293050361u, 3194828150u, 0, TANF_TOLERANCE, 0}, +{914, 1279324488u, 4294967293u, 3224898935u, 0, TANF_TOLERANCE, 0}, +{915, 3217795424u, 0u, 1111812957u, 0, TANF_TOLERANCE, 0}, +{916, 3455131757u, 10314665u, 1036377031u, 0, TANF_TOLERANCE, 0}, +{917, 1246947517u, 6u, 1037004901u, 0, TANF_TOLERANCE, 0}, +{918, 3396723577u, 0u, 3223712291u, 0, TANF_TOLERANCE, 0}, +{919, 3433761025u, 0u, 1060669919u, 0, TANF_TOLERANCE, 0}, +{920, 3201187455u, 0u, 3201969320u, 0, TANF_TOLERANCE, 0}, +{921, 1173247961u, 32661u, 3213189930u, 0, TANF_TOLERANCE, 0}, +{922, 3037297123u, 4294904338u, 3037297123u, 0, TANF_TOLERANCE, 0}, +{923, 3248534678u, 1927801856u, 3224995767u, 0, TANF_TOLERANCE, 0}, +{924, 3083019343u, 0u, 3083019343u, 0, TANF_TOLERANCE, 0}, +{925, 3042018375u, 0u, 3042018375u, 0, TANF_TOLERANCE, 0}, +{926, 1082862511u, 0u, 1076385558u, 0, TANF_TOLERANCE, 0}, +{927, 3157626955u, 3075906560u, 3157627442u, 0, TANF_TOLERANCE, 0}, +{928, 1341821683u, 0u, 3246356184u, 0, TANF_TOLERANCE, 0}, +{929, 881101379u, 32095u, 881101379u, 0, TANF_TOLERANCE, 0}, +{930, 1079061705u, 0u, 1040351757u, 0, TANF_TOLERANCE, 0}, +{931, 3182695954u, 4294967257u, 3182726467u, 0, TANF_TOLERANCE, 0}, +{932, 1105291533u, 3424974848u, 3184094792u, 0, TANF_TOLERANCE, 0}, +{933, 1016023520u, 4294967293u, 1016024478u, 0, TANF_TOLERANCE, 0}, +{934, 3370691006u, 198615840u, 1066418799u, 0, TANF_TOLERANCE, 0}, +{935, 1156767169u, 0u, 1088078700u, 0, TANF_TOLERANCE, 0}, +{936, 3077020499u, 0u, 3077020499u, 0, TANF_TOLERANCE, 0}, +{937, 1104284039u, 0u, 1074060849u, 0, TANF_TOLERANCE, 0}, +{938, 3335212901u, 1662125568u, 1078246146u, 0, TANF_TOLERANCE, 0}, +{939, 1093697541u, 0u, 3252690424u, 0, TANF_TOLERANCE, 0}, +{940, 3266691185u, 2645u, 1047534875u, 0, TANF_TOLERANCE, 0}, +{941, 3179003144u, 37u, 3179023948u, 0, TANF_TOLERANCE, 0}, +{942, 1094115255u, 0u, 3221885590u, 0, TANF_TOLERANCE, 0}, +{943, 3424086808u, 4294967244u, 3206909502u, 0, TANF_TOLERANCE, 0}, +{944, 3353608773u, 305u, 1071385573u, 0, TANF_TOLERANCE, 0}, +{945, 973664327u, 1394344832u, 973664328u, 0, TANF_TOLERANCE, 0}, +{946, 882878091u, 0u, 882878091u, 0, TANF_TOLERANCE, 0}, +{947, 1098662266u, 0u, 1030614291u, 0, TANF_TOLERANCE, 0}, +{948, 927582555u, 0u, 927582555u, 0, TANF_TOLERANCE, 0}, +{949, 3111440310u, 0u, 3111440310u, 0, TANF_TOLERANCE, 0}, +{950, 3476083859u, 0u, 1033621363u, 0, TANF_TOLERANCE, 0}, +{951, 3038754840u, 0u, 3038754840u, 0, TANF_TOLERANCE, 0}, +{952, 979878744u, 1008405u, 979878748u, 0, TANF_TOLERANCE, 0}, +{953, 3464546616u, 0u, 3247225494u, 0, TANF_TOLERANCE, 0}, +{954, 1002542205u, 0u, 1002542353u, 0, TANF_TOLERANCE, 0}, +{955, 3443552129u, 0u, 3195730557u, 0, TANF_TOLERANCE, 0}, +{956, 1287620154u, 0u, 1073814380u, 0, TANF_TOLERANCE, 0}, +{957, 946058434u, 4207447u, 946058434u, 0, TANF_TOLERANCE, 0}, +{958, 3073260205u, 0u, 3073260205u, 0, TANF_TOLERANCE, 0}, +{959, 1245702957u, 0u, 1050411430u, 0, TANF_TOLERANCE, 0}, +{960, 989655126u, 528989952u, 989655147u, 0, TANF_TOLERANCE, 0}, +{961, 1002715618u, 32425u, 1002715772u, 0, TANF_TOLERANCE, 0}, +{962, 3087802274u, 0u, 3087802274u, 0, TANF_TOLERANCE, 0}, +{963, 1000863905u, 54834u, 1000864001u, 0, TANF_TOLERANCE, 0}, +{964, 3415763001u, 0u, 1069372312u, 0, TANF_TOLERANCE, 0}, +{965, 3283471961u, 10190634u, 1065823474u, 0, TANF_TOLERANCE, 0}, +{966, 3311210827u, 36713u, 1052531529u, 0, TANF_TOLERANCE, 0}, +{967, 3026311911u, 0u, 3026311911u, 0, TANF_TOLERANCE, 0}, +{968, 1198307901u, 68u, 1067889968u, 0, TANF_TOLERANCE, 0}, +{969, 1288901567u, 206618288u, 3211520956u, 0, TANF_TOLERANCE, 0}, +{970, 922255363u, 0u, 922255363u, 0, TANF_TOLERANCE, 0}, +{971, 1113104661u, 0u, 1064212853u, 0, TANF_TOLERANCE, 0}, +{972, 1136714348u, 0u, 3208733877u, 0, TANF_TOLERANCE, 0}, +{973, 948856035u, 0u, 948856035u, 0, TANF_TOLERANCE, 0}, +{974, 1062512367u, 4294967293u, 1066149378u, 0, TANF_TOLERANCE, 0}, +{975, 3486907092u, 0u, 1064674781u, 0, TANF_TOLERANCE, 0}, +{976, 1162027071u, 4294964303u, 3211005030u, 0, TANF_TOLERANCE, 0}, +{977, 1034561811u, 0u, 1034587543u, 0, TANF_TOLERANCE, 0}, +{978, 3271615417u, 0u, 3182227529u, 0, TANF_TOLERANCE, 0}, +{979, 1042014529u, 869u, 1042094177u, 0, TANF_TOLERANCE, 0}, +{980, 1177157787u, 0u, 1065883147u, 0, TANF_TOLERANCE, 0}, +{981, 3196144817u, 0u, 3196329674u, 0, TANF_TOLERANCE, 0}, +{982, 3432084552u, 0u, 3221944554u, 0, TANF_TOLERANCE, 0}, +{983, 1309658335u, 0u, 3205458472u, 0, TANF_TOLERANCE, 0}, +{984, 1226494979u, 0u, 3234449269u, 0, TANF_TOLERANCE, 0}, +{985, 3100289712u, 3743522688u, 3100289712u, 0, TANF_TOLERANCE, 0}, +{986, 3375507013u, 462886112u, 1058971981u, 0, TANF_TOLERANCE, 0}, +{987, 3460699001u, 0u, 1145143987u, 0, TANF_TOLERANCE, 0}, +{988, 3079231719u, 0u, 3079231719u, 0, TANF_TOLERANCE, 0}, +{989, 3093951884u, 0u, 3093951884u, 0, TANF_TOLERANCE, 0}, +{990, 3468023178u, 156157u, 3238327698u, 0, TANF_TOLERANCE, 0}, +{991, 1204196034u, 4294966040u, 1080126796u, 0, TANF_TOLERANCE, 0}, +{992, 3459877411u, 0u, 3237605854u, 0, TANF_TOLERANCE, 0}, +{993, 909696559u, 3378u, 909696559u, 0, TANF_TOLERANCE, 0}, +{994, 1161439847u, 0u, 1055184394u, 0, TANF_TOLERANCE, 0}, +{995, 908663107u, 0u, 908663107u, 0, TANF_TOLERANCE, 0}, +{996, 1055319316u, 4294967238u, 1056436046u, 0, TANF_TOLERANCE, 0}, +{997, 1084378658u, 0u, 3223991873u, 0, TANF_TOLERANCE, 0}, +{998, 3053887750u, 4294922339u, 3053887750u, 0, TANF_TOLERANCE, 0}, +{999, 3022828828u, 0u, 3022828828u, 0, TANF_TOLERANCE, 0}, +{1000, 1226473697u, 0u, 1057671157u, 0, TANF_TOLERANCE, 0}, +{1001, 1123114742u, 841711u, 1080756932u, 0, TANF_TOLERANCE, 0}, +{1002, 1258114435u, 130141336u, 3205684831u, 0, TANF_TOLERANCE, 0}, +{1003, 3468040845u, 0u, 1060841431u, 0, TANF_TOLERANCE, 0}, +{1004, 1178825761u, 54u, 3212909688u, 0, TANF_TOLERANCE, 0}, +{1005, 3059266302u, 0u, 3059266302u, 0, TANF_TOLERANCE, 0}, +{1006, 3223384012u, 225u, 1060730485u, 0, TANF_TOLERANCE, 0}, +{1007, 1019964626u, 1299605u, 1019967367u, 0, TANF_TOLERANCE, 0}, +{1008, 3445262427u, 3129568512u, 3213611207u, 0, TANF_TOLERANCE, 0}, +{1009, 1125653081u, 129823u, 1080850023u, 0, TANF_TOLERANCE, 0}, +{1010, 3337652712u, 0u, 3230359910u, 0, TANF_TOLERANCE, 0}, +{1011, 1184753508u, 0u, 3228668908u, 0, TANF_TOLERANCE, 0}, +{1012, 996404791u, 4294853343u, 996404851u, 0, TANF_TOLERANCE, 0}, +{1013, 1188439315u, 55u, 1041338502u, 0, TANF_TOLERANCE, 0}, +{1014, 906557513u, 0u, 906557513u, 0, TANF_TOLERANCE, 0}, +{1015, 916831283u, 0u, 916831283u, 0, TANF_TOLERANCE, 0}, +{1016, 996786317u, 0u, 996786382u, 0, TANF_TOLERANCE, 0}, +{1017, 3461635065u, 0u, 1067126850u, 0, TANF_TOLERANCE, 0}, +{1018, 1188167943u, 74707u, 1071485055u, 0, TANF_TOLERANCE, 0}, +{1019, 3036502395u, 7309u, 3036502395u, 0, TANF_TOLERANCE, 0}, +{1020, 891257783u, 18537700u, 891257783u, 0, TANF_TOLERANCE, 0}, +{1021, 3290079438u, 0u, 1053635373u, 0, TANF_TOLERANCE, 0}, +{1022, 3350690327u, 0u, 3197180407u, 0, TANF_TOLERANCE, 0}, +{1023, 1102061604u, 4253821380u, 1019813152u, 0, TANF_TOLERANCE, 0}, +{1024, 1282351521u, 0u, 3214248829u, 0, TANF_TOLERANCE, 0}, +{1025, 3458861065u, 4292002951u, 1063733247u, 0, TANF_TOLERANCE, 0}, +{1026, 3095256878u, 0u, 3095256878u, 0, TANF_TOLERANCE, 0}, +{1027, 3163373610u, 0u, 3163374527u, 0, TANF_TOLERANCE, 0}, +{1028, 3228793330u, 0u, 3209153947u, 0, TANF_TOLERANCE, 0}, +{1029, 3422194733u, 0u, 3234741565u, 0, TANF_TOLERANCE, 0}, +{1030, 3083885296u, 0u, 3083885296u, 0, TANF_TOLERANCE, 0}, +{1031, 1261940623u, 4288291120u, 1066943232u, 0, TANF_TOLERANCE, 0}, +{1032, 3400603081u, 4294967290u, 1082458884u, 0, TANF_TOLERANCE, 0}, +{1033, 1219411812u, 0u, 3213563946u, 0, TANF_TOLERANCE, 0}, +{1034, 3094833770u, 0u, 3094833770u, 0, TANF_TOLERANCE, 0}, +{1035, 3139250800u, 0u, 3139250820u, 0, TANF_TOLERANCE, 0}, +{1036, 886201503u, 4294967150u, 886201503u, 0, TANF_TOLERANCE, 0}, +{1037, 3297366026u, 7u, 1045248836u, 0, TANF_TOLERANCE, 0}, +{1038, 1218488455u, 4294964141u, 3193210449u, 0, TANF_TOLERANCE, 0}, +{1039, 3040358923u, 0u, 3040358923u, 0, TANF_TOLERANCE, 0}, +{1040, 1283938137u, 53086u, 1043714569u, 0, TANF_TOLERANCE, 0}, +{1041, 3182551696u, 0u, 3182581102u, 0, TANF_TOLERANCE, 0}, +{1042, 1317098613u, 0u, 1084069604u, 0, TANF_TOLERANCE, 0}, +{1043, 3116209179u, 4294965434u, 3116209180u, 0, TANF_TOLERANCE, 0}, +{1044, 3431703657u, 0u, 3209060142u, 0, TANF_TOLERANCE, 0}, +{1045, 3239728775u, 0u, 3194384213u, 0, TANF_TOLERANCE, 0}, +{1046, 3207141672u, 0u, 3209095053u, 0, TANF_TOLERANCE, 0}, +{1047, 3154378805u, 0u, 3154378992u, 0, TANF_TOLERANCE, 0}, +{1048, 3069658155u, 0u, 3069658155u, 0, TANF_TOLERANCE, 0}, +{1049, 3313160088u, 0u, 3222486976u, 0, TANF_TOLERANCE, 0}, +{1050, 3207056527u, 4293469023u, 3208959043u, 0, TANF_TOLERANCE, 0}, +{1051, 1284174954u, 4180334232u, 3226552351u, 0, TANF_TOLERANCE, 0}, +{1052, 3156081645u, 4294964338u, 3156081966u, 0, TANF_TOLERANCE, 0}, +{1053, 1063693032u, 0u, 1067558305u, 0, TANF_TOLERANCE, 0}, +{1054, 3036026175u, 4845007u, 3036026175u, 0, TANF_TOLERANCE, 0}, +{1055, 1102631663u, 4290881696u, 1073841275u, 0, TANF_TOLERANCE, 0}, +{1056, 968803479u, 0u, 968803480u, 0, TANF_TOLERANCE, 0}, +{1057, 3273080388u, 0u, 3203746534u, 0, TANF_TOLERANCE, 0}, +{1058, 1172529774u, 4294966405u, 1053400161u, 0, TANF_TOLERANCE, 0}, +{1059, 1306695905u, 147733664u, 3218662868u, 0, TANF_TOLERANCE, 0}, +{1060, 1003649752u, 338518u, 1003649942u, 0, TANF_TOLERANCE, 0}, +{1061, 1078478376u, 2364151808u, 3158947134u, 0, TANF_TOLERANCE, 0}, +{1062, 3158855023u, 0u, 3158855677u, 0, TANF_TOLERANCE, 0}, +{1063, 1165177679u, 4294967097u, 3224534299u, 0, TANF_TOLERANCE, 0}, +{1064, 3403009513u, 4293749042u, 3201343705u, 0, TANF_TOLERANCE, 0}, +{1065, 952348506u, 4294108410u, 952348506u, 0, TANF_TOLERANCE, 0}, +{1066, 1222777442u, 153u, 1066942837u, 0, TANF_TOLERANCE, 0}, +{1067, 1325324763u, 0u, 3206284830u, 0, TANF_TOLERANCE, 0}, +{1068, 3363524213u, 0u, 3206324887u, 0, TANF_TOLERANCE, 0}, +{1069, 1158950321u, 1u, 3218962430u, 0, TANF_TOLERANCE, 0}, +{1070, 903129873u, 4272788450u, 903129873u, 0, TANF_TOLERANCE, 0}, +{1071, 3078339944u, 0u, 3078339944u, 0, TANF_TOLERANCE, 0}, +{1072, 1208345407u, 6333643u, 3225922734u, 0, TANF_TOLERANCE, 0}, +{1073, 1258634105u, 3575206u, 3197506179u, 0, TANF_TOLERANCE, 0}, +{1074, 1248478509u, 102613680u, 3264157759u, 0, TANF_TOLERANCE, 0}, +{1075, 1153863988u, 4229464460u, 3221249357u, 0, TANF_TOLERANCE, 0}, +{1076, 1235620969u, 0u, 3226071801u, 0, TANF_TOLERANCE, 0}, +{1077, 1097120930u, 4294967294u, 3234313315u, 0, TANF_TOLERANCE, 0}, +{1078, 3469778622u, 70286u, 3247090687u, 0, TANF_TOLERANCE, 0}, +{1079, 1147712200u, 0u, 1067154089u, 0, TANF_TOLERANCE, 0}, +{1080, 1124721745u, 0u, 3199473163u, 0, TANF_TOLERANCE, 0}, +{1081, 3261744304u, 0u, 1074089254u, 0, TANF_TOLERANCE, 0}, +{1082, 1064922416u, 1518435840u, 1069319457u, 0, TANF_TOLERANCE, 0}, +{1083, 3303160152u, 0u, 3195323188u, 0, TANF_TOLERANCE, 0}, +{1084, 1315090496u, 4294967183u, 1027295675u, 0, TANF_TOLERANCE, 0}, +{1085, 3230403187u, 1820050432u, 3224842200u, 0, TANF_TOLERANCE, 0}, +{1086, 1335399673u, 0u, 1058375572u, 0, TANF_TOLERANCE, 0}, +{1087, 1072458508u, 4294404660u, 3227633324u, 0, TANF_TOLERANCE, 0}, +{1088, 3303015249u, 0u, 3233088608u, 0, TANF_TOLERANCE, 0}, +{1089, 3252139741u, 0u, 1081072463u, 0, TANF_TOLERANCE, 0}, +{1090, 3468519966u, 0u, 1095853277u, 0, TANF_TOLERANCE, 0}, +{1091, 1006231203u, 0u, 1006231520u, 0, TANF_TOLERANCE, 0}, +{1092, 951554138u, 0u, 951554138u, 0, TANF_TOLERANCE, 0}, +{1093, 942046828u, 0u, 942046828u, 0, TANF_TOLERANCE, 0}, +{1094, 3319723279u, 4277552160u, 3181034131u, 0, TANF_TOLERANCE, 0}, +{1095, 3255104167u, 0u, 1081762853u, 0, TANF_TOLERANCE, 0}, +{1096, 1155477903u, 0u, 1074109354u, 0, TANF_TOLERANCE, 0}, +{1097, 3273889176u, 0u, 3194397309u, 0, TANF_TOLERANCE, 0}, +{1098, 3237813668u, 4133749200u, 1099890553u, 0, TANF_TOLERANCE, 0}, +{1099, 1228207362u, 0u, 1070890926u, 0, TANF_TOLERANCE, 0}, +{1100, 975349337u, 748694784u, 975349338u, 0, TANF_TOLERANCE, 0}, +{1101, 1290175785u, 0u, 1065643442u, 0, TANF_TOLERANCE, 0}, +{1102, 981908840u, 4294962938u, 981908843u, 0, TANF_TOLERANCE, 0}, +{1103, 941187647u, 33u, 941187647u, 0, TANF_TOLERANCE, 0}, +{1104, 1214223128u, 4294967293u, 3175410167u, 0, TANF_TOLERANCE, 0}, +{1105, 3422922584u, 6u, 3204371032u, 0, TANF_TOLERANCE, 0}, +{1106, 1315857601u, 1055172096u, 3212838470u, 0, TANF_TOLERANCE, 0}, +{1107, 3453226030u, 4294967291u, 3204290872u, 0, TANF_TOLERANCE, 0}, +{1108, 1078359574u, 0u, 3173419168u, 0, TANF_TOLERANCE, 0}, +{1109, 1029557624u, 4294965511u, 1029571849u, 0, TANF_TOLERANCE, 0}, +{1110, 1207675424u, 0u, 3190987846u, 0, TANF_TOLERANCE, 0}, +{1111, 1028355074u, 4113313408u, 1028366050u, 0, TANF_TOLERANCE, 0}, +{1112, 3119299090u, 24787u, 3119299091u, 0, TANF_TOLERANCE, 0}, +{1113, 1248421894u, 4294582111u, 1062987066u, 0, TANF_TOLERANCE, 0}, +{1114, 3353251994u, 12u, 3230764707u, 0, TANF_TOLERANCE, 0}, +{1115, 876926659u, 4294966792u, 876926659u, 0, TANF_TOLERANCE, 0}, +{1116, 1076752219u, 0u, 3202811089u, 0, TANF_TOLERANCE, 0}, +{1117, 3388531942u, 0u, 1002890227u, 0, TANF_TOLERANCE, 0}, +{1118, 1273395082u, 0u, 3196206979u, 0, TANF_TOLERANCE, 0}, +{1119, 3385588183u, 4294967251u, 1087246844u, 0, TANF_TOLERANCE, 0}, +{1120, 3192315328u, 4294966714u, 3192481686u, 0, TANF_TOLERANCE, 0}, +{1121, 3441804648u, 4294967121u, 3229962545u, 0, TANF_TOLERANCE, 0}, +{1122, 3392827417u, 45125368u, 1059127667u, 0, TANF_TOLERANCE, 0}, +{1123, 1161241793u, 2814016256u, 3213239434u, 0, TANF_TOLERANCE, 0}, +{1124, 3034494183u, 0u, 3034494183u, 0, TANF_TOLERANCE, 0}, +{1125, 1171318485u, 4294306215u, 3204093878u, 0, TANF_TOLERANCE, 0}, +{1126, 3047748143u, 0u, 3047748143u, 0, TANF_TOLERANCE, 0}, +{1127, 1001216371u, 0u, 1001216477u, 0, TANF_TOLERANCE, 0}, +{1128, 912515889u, 2u, 912515889u, 0, TANF_TOLERANCE, 0}, +{1129, 3391452505u, 0u, 1060706149u, 0, TANF_TOLERANCE, 0}, +{1130, 3249603369u, 0u, 3188424533u, 0, TANF_TOLERANCE, 0}, +{1131, 1220264047u, 0u, 1047931096u, 0, TANF_TOLERANCE, 0}, +{1132, 3169816394u, 0u, 3169820871u, 0, TANF_TOLERANCE, 0}, +{1133, 3098997418u, 0u, 3098997418u, 0, TANF_TOLERANCE, 0}, +{1134, 3282212423u, 0u, 1112557809u, 0, TANF_TOLERANCE, 0}, +{1135, 3352293320u, 4294967278u, 3226389131u, 0, TANF_TOLERANCE, 0}, +{1136, 3296358441u, 0u, 1054993302u, 0, TANF_TOLERANCE, 0}, +{1137, 1197828352u, 4294967281u, 1032407318u, 0, TANF_TOLERANCE, 0}, +{1138, 3340510371u, 0u, 1069696271u, 0, TANF_TOLERANCE, 0}, +{1139, 1127109339u, 4294570975u, 1105605562u, 0, TANF_TOLERANCE, 0}, +{1140, 909467381u, 1001724u, 909467381u, 0, TANF_TOLERANCE, 0}, +{1141, 1200599955u, 0u, 3216216244u, 0, TANF_TOLERANCE, 0}, +{1142, 962230977u, 0u, 962230977u, 0, TANF_TOLERANCE, 0}, +{1143, 3192887808u, 0u, 3193077326u, 0, TANF_TOLERANCE, 0}, +{1144, 3237183876u, 0u, 3229633984u, 0, TANF_TOLERANCE, 0}, +{1145, 939285924u, 0u, 939285924u, 0, TANF_TOLERANCE, 0}, +{1146, 944050180u, 3871652128u, 944050180u, 0, TANF_TOLERANCE, 0}, +{1147, 3058135703u, 0u, 3058135703u, 0, TANF_TOLERANCE, 0}, +{1148, 3480592662u, 4294967238u, 1058275636u, 0, TANF_TOLERANCE, 0}, +{1149, 3061939312u, 4294967125u, 3061939312u, 0, TANF_TOLERANCE, 0}, +{1150, 1003299981u, 0u, 1003300157u, 0, TANF_TOLERANCE, 0}, +{1151, 1155775526u, 7150230u, 3195997040u, 0, TANF_TOLERANCE, 0}, +{1152, 1234491880u, 4283784819u, 3230107658u, 0, TANF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF tanf.h diff --git a/packages/language/c/libm/current/tests/vectors/tanhf.c b/packages/language/c/libm/current/tests/vectors/tanhf.c new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/tanhf.c @@ -0,0 +1,115 @@ +//=========================================================================== +// +// tanhf.c +// +// Test of tanhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// Declarations for test system: +// +// TESTCASE_TYPE=CYG_TEST_MODULE + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_float_shape_type +#include "vectors/vector_support_float.h"// extra support for math tests + +#include "vectors/tanhf.h" + +// FUNCTIONS + +static void +test( CYG_ADDRWORD data ) +{ + cyg_ucount32 vec_size; + cyg_bool ret; + + vec_size = sizeof(tanhf_vec) / sizeof(Cyg_libm_test_float_vec_t); + ret = doTestVecFloat( (CYG_ADDRWORD) &tanhf, CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_NONE, CYG_LIBM_TEST_VEC_FLOAT, + &tanhf_vec[0], vec_size ); + + if (ret==true) + { + CYG_TEST_PASS("tanhf() is stable"); + } // if + else + { + CYG_TEST_FAIL("tanhf() failed tests"); + } // else + + CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for Math " + "library tanhf() function"); +} // test() + + +int +main(int argc, char *argv[]) +{ + CYG_TEST_INIT(); + + CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for Math library " + "tanhf() function"); + + START_TEST( test ); + + CYG_TEST_PASS_FINISH("Testing is not applicable to this configuration"); + +} // main() + + +// EOF tanhf.c diff --git a/packages/language/c/libm/current/tests/vectors/tanhf.h b/packages/language/c/libm/current/tests/vectors/tanhf.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/tanhf.h @@ -0,0 +1,1234 @@ +#ifndef CYGONCE_LIBM_SCABNF_H +#define CYGONCE_LIBM_SCABNF_H +//=========================================================================== +// +// tanhf.h +// +// Test vectors for testing of tanhf() math library function +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 1998-02-13 +// Purpose: +// Description: +// Usage: #include "vectors/tanhf.h" +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + + +// CONFIGURATION + +#include // Configuration header + + +// INCLUDES + +#include // Common type definitions and support +#include "vectors/vector_support_float.h"// extra support for math tests + +#define TANHF_TOLERANCE 1.0E-04 + +static const Cyg_libm_test_float_vec_t tanhf_vec[] = { + +// AUTOMATICALLY GENERATED VECTORS START + +{0, 3214514586u, 0u, 3210046052u, 0, TANHF_TOLERANCE, 0}, +{1, 3214430700u, 0u, 3209994449u, 0, TANHF_TOLERANCE, 0}, +{2, 3214346813u, 0u, 3209941982u, 0, TANHF_TOLERANCE, 0}, +{3, 3214262927u, 0u, 3209888640u, 0, TANHF_TOLERANCE, 0}, +{4, 3214179041u, 0u, 3209834411u, 0, TANHF_TOLERANCE, 0}, +{5, 3214095155u, 0u, 3209779285u, 0, TANHF_TOLERANCE, 0}, +{6, 3214011269u, 0u, 3209723249u, 0, TANHF_TOLERANCE, 0}, +{7, 3213927383u, 0u, 3209666293u, 0, TANHF_TOLERANCE, 0}, +{8, 3213843497u, 0u, 3209608406u, 0, TANHF_TOLERANCE, 0}, +{9, 3213759611u, 0u, 3209549577u, 0, TANHF_TOLERANCE, 0}, +{10, 3213675725u, 0u, 3209489793u, 0, TANHF_TOLERANCE, 0}, +{11, 3213591839u, 0u, 3209429045u, 0, TANHF_TOLERANCE, 0}, +{12, 3213507953u, 0u, 3209367321u, 0, TANHF_TOLERANCE, 0}, +{13, 3213424067u, 0u, 3209304610u, 0, TANHF_TOLERANCE, 0}, +{14, 3213340180u, 0u, 3209240900u, 0, TANHF_TOLERANCE, 0}, +{15, 3213256294u, 0u, 3209176182u, 0, TANHF_TOLERANCE, 0}, +{16, 3213172408u, 0u, 3209110444u, 0, TANHF_TOLERANCE, 0}, +{17, 3213088522u, 0u, 3209043675u, 0, TANHF_TOLERANCE, 0}, +{18, 3213004636u, 0u, 3208975865u, 0, TANHF_TOLERANCE, 0}, +{19, 3212920750u, 0u, 3208907003u, 0, TANHF_TOLERANCE, 0}, +{20, 3212836864u, 0u, 3208837078u, 0, TANHF_TOLERANCE, 0}, +{21, 3212669092u, 0u, 3208766079u, 0, TANHF_TOLERANCE, 0}, +{22, 3212501320u, 0u, 3208693997u, 0, TANHF_TOLERANCE, 0}, +{23, 3212333548u, 0u, 3208620822u, 0, TANHF_TOLERANCE, 0}, +{24, 3212165775u, 0u, 3208546542u, 0, TANHF_TOLERANCE, 0}, +{25, 3211998003u, 0u, 3208471148u, 0, TANHF_TOLERANCE, 0}, +{26, 3211830231u, 0u, 3208394631u, 0, TANHF_TOLERANCE, 0}, +{27, 3211662459u, 0u, 3208316980u, 0, TANHF_TOLERANCE, 0}, +{28, 3211494687u, 0u, 3208238186u, 0, TANHF_TOLERANCE, 0}, +{29, 3211326915u, 0u, 3208158240u, 0, TANHF_TOLERANCE, 0}, +{30, 3211159142u, 0u, 3208077132u, 0, TANHF_TOLERANCE, 0}, +{31, 3210991370u, 0u, 3207994854u, 0, TANHF_TOLERANCE, 0}, +{32, 3210823598u, 0u, 3207911397u, 0, TANHF_TOLERANCE, 0}, +{33, 3210655826u, 0u, 3207826753u, 0, TANHF_TOLERANCE, 0}, +{34, 3210488054u, 0u, 3207740913u, 0, TANHF_TOLERANCE, 0}, +{35, 3210320282u, 0u, 3207653870u, 0, TANHF_TOLERANCE, 0}, +{36, 3210152509u, 0u, 3207565615u, 0, TANHF_TOLERANCE, 0}, +{37, 3209984737u, 0u, 3207476141u, 0, TANHF_TOLERANCE, 0}, +{38, 3209816965u, 0u, 3207385441u, 0, TANHF_TOLERANCE, 0}, +{39, 3209649193u, 0u, 3207293508u, 0, TANHF_TOLERANCE, 0}, +{40, 3209481421u, 0u, 3207200336u, 0, TANHF_TOLERANCE, 0}, +{41, 3209313649u, 0u, 3207105919u, 0, TANHF_TOLERANCE, 0}, +{42, 3209145876u, 0u, 3207010249u, 0, TANHF_TOLERANCE, 0}, +{43, 3208978104u, 0u, 3206913323u, 0, TANHF_TOLERANCE, 0}, +{44, 3208810332u, 0u, 3206815135u, 0, TANHF_TOLERANCE, 0}, +{45, 3208642560u, 0u, 3206715679u, 0, TANHF_TOLERANCE, 0}, +{46, 3208474788u, 0u, 3206614952u, 0, TANHF_TOLERANCE, 0}, +{47, 3208307016u, 0u, 3206512950u, 0, TANHF_TOLERANCE, 0}, +{48, 3208139244u, 0u, 3206409669u, 0, TANHF_TOLERANCE, 0}, +{49, 3207971471u, 0u, 3206305105u, 0, TANHF_TOLERANCE, 0}, +{50, 3207803699u, 0u, 3206199257u, 0, TANHF_TOLERANCE, 0}, +{51, 3207635927u, 0u, 3206092121u, 0, TANHF_TOLERANCE, 0}, +{52, 3207468155u, 0u, 3205983697u, 0, TANHF_TOLERANCE, 0}, +{53, 3207300383u, 0u, 3205873982u, 0, TANHF_TOLERANCE, 0}, +{54, 3207132611u, 0u, 3205762976u, 0, TANHF_TOLERANCE, 0}, +{55, 3206964838u, 0u, 3205650678u, 0, TANHF_TOLERANCE, 0}, +{56, 3206797066u, 0u, 3205537090u, 0, TANHF_TOLERANCE, 0}, +{57, 3206629294u, 0u, 3205422211u, 0, TANHF_TOLERANCE, 0}, +{58, 3206461522u, 0u, 3205306042u, 0, TANHF_TOLERANCE, 0}, +{59, 3206293750u, 0u, 3205188586u, 0, TANHF_TOLERANCE, 0}, +{60, 3206125978u, 0u, 3205069845u, 0, TANHF_TOLERANCE, 0}, +{61, 3205958205u, 0u, 3204949821u, 0, TANHF_TOLERANCE, 0}, +{62, 3205790433u, 0u, 3204828519u, 0, TANHF_TOLERANCE, 0}, +{63, 3205622661u, 0u, 3204705942u, 0, TANHF_TOLERANCE, 0}, +{64, 3205454889u, 0u, 3204582095u, 0, TANHF_TOLERANCE, 0}, +{65, 3205287117u, 0u, 3204456984u, 0, TANHF_TOLERANCE, 0}, +{66, 3205119345u, 0u, 3204212972u, 0, TANHF_TOLERANCE, 0}, +{67, 3204951572u, 0u, 3203957726u, 0, TANHF_TOLERANCE, 0}, +{68, 3204783800u, 0u, 3203699992u, 0, TANHF_TOLERANCE, 0}, +{69, 3204616028u, 0u, 3203439784u, 0, TANHF_TOLERANCE, 0}, +{70, 3204448256u, 0u, 3203177119u, 0, TANHF_TOLERANCE, 0}, +{71, 3204112712u, 0u, 3202912015u, 0, TANHF_TOLERANCE, 0}, +{72, 3203777167u, 0u, 3202644491u, 0, TANHF_TOLERANCE, 0}, +{73, 3203441623u, 0u, 3202374569u, 0, TANHF_TOLERANCE, 0}, +{74, 3203106079u, 0u, 3202102272u, 0, TANHF_TOLERANCE, 0}, +{75, 3202770534u, 0u, 3201827621u, 0, TANHF_TOLERANCE, 0}, +{76, 3202434990u, 0u, 3201550644u, 0, TANHF_TOLERANCE, 0}, +{77, 3202099446u, 0u, 3201271366u, 0, TANHF_TOLERANCE, 0}, +{78, 3201763901u, 0u, 3200989815u, 0, TANHF_TOLERANCE, 0}, +{79, 3201428357u, 0u, 3200706020u, 0, TANHF_TOLERANCE, 0}, +{80, 3201092813u, 0u, 3200420012u, 0, TANHF_TOLERANCE, 0}, +{81, 3200757268u, 0u, 3200131821u, 0, TANHF_TOLERANCE, 0}, +{82, 3200421724u, 0u, 3199841483u, 0, TANHF_TOLERANCE, 0}, +{83, 3200086180u, 0u, 3199549031u, 0, TANHF_TOLERANCE, 0}, +{84, 3199750636u, 0u, 3199254501u, 0, TANHF_TOLERANCE, 0}, +{85, 3199415091u, 0u, 3198957930u, 0, TANHF_TOLERANCE, 0}, +{86, 3199079547u, 0u, 3198659358u, 0, TANHF_TOLERANCE, 0}, +{87, 3198744003u, 0u, 3198358824u, 0, TANHF_TOLERANCE, 0}, +{88, 3198408458u, 0u, 3198056369u, 0, TANHF_TOLERANCE, 0}, +{89, 3198072914u, 0u, 3197752036u, 0, TANHF_TOLERANCE, 0}, +{90, 3197737370u, 0u, 3197445870u, 0, TANHF_TOLERANCE, 0}, +{91, 3197401825u, 0u, 3197137913u, 0, TANHF_TOLERANCE, 0}, +{92, 3197066281u, 0u, 3196828215u, 0, TANHF_TOLERANCE, 0}, +{93, 3196730737u, 0u, 3196516822u, 0, TANHF_TOLERANCE, 0}, +{94, 3196395192u, 0u, 3196203782u, 0, TANHF_TOLERANCE, 0}, +{95, 3196059648u, 0u, 3195718645u, 0, TANHF_TOLERANCE, 0}, +{96, 3195388559u, 0u, 3195086284u, 0, TANHF_TOLERANCE, 0}, +{97, 3194717471u, 0u, 3194450938u, 0, TANHF_TOLERANCE, 0}, +{98, 3194046382u, 0u, 3193812713u, 0, TANHF_TOLERANCE, 0}, +{99, 3193375293u, 0u, 3193171718u, 0, TANHF_TOLERANCE, 0}, +{100, 3192704205u, 0u, 3192528066u, 0, TANHF_TOLERANCE, 0}, +{101, 3192033116u, 0u, 3191881866u, 0, TANHF_TOLERANCE, 0}, +{102, 3191362028u, 0u, 3191233237u, 0, TANHF_TOLERANCE, 0}, +{103, 3190690939u, 0u, 3190582293u, 0, TANHF_TOLERANCE, 0}, +{104, 3190019850u, 0u, 3189929153u, 0, TANHF_TOLERANCE, 0}, +{105, 3189348762u, 0u, 3189273938u, 0, TANHF_TOLERANCE, 0}, +{106, 3188677673u, 0u, 3188616768u, 0, TANHF_TOLERANCE, 0}, +{107, 3188006584u, 0u, 3187957768u, 0, TANHF_TOLERANCE, 0}, +{108, 3186999951u, 0u, 3186923084u, 0, TANHF_TOLERANCE, 0}, +{109, 3185657774u, 0u, 3185598513u, 0, TANHF_TOLERANCE, 0}, +{110, 3184315597u, 0u, 3184271036u, 0, TANHF_TOLERANCE, 0}, +{111, 3182973420u, 0u, 3182940910u, 0, TANHF_TOLERANCE, 0}, +{112, 3181631242u, 0u, 3181608394u, 0, TANHF_TOLERANCE, 0}, +{113, 3180289065u, 0u, 3180273749u, 0, TANHF_TOLERANCE, 0}, +{114, 3178611343u, 0u, 3178592043u, 0, TANHF_TOLERANCE, 0}, +{115, 3175926989u, 0u, 3175915815u, 0, TANHF_TOLERANCE, 0}, +{116, 3173242634u, 0u, 3173236911u, 0, TANHF_TOLERANCE, 0}, +{117, 3170222735u, 0u, 3170217905u, 0, TANHF_TOLERANCE, 0}, +{118, 3164854026u, 0u, 3164852595u, 0, TANHF_TOLERANCE, 0}, +{119, 3156465418u, 0u, 3156465060u, 0, TANHF_TOLERANCE, 0}, +{120, 1008981770u, 0u, 1008981412u, 0, TANHF_TOLERANCE, 0}, +{121, 1017370378u, 0u, 1017368947u, 0, TANHF_TOLERANCE, 0}, +{122, 1022739087u, 0u, 1022734257u, 0, TANHF_TOLERANCE, 0}, +{123, 1025758986u, 0u, 1025753263u, 0, TANHF_TOLERANCE, 0}, +{124, 1028443341u, 0u, 1028432167u, 0, TANHF_TOLERANCE, 0}, +{125, 1031127695u, 0u, 1031108395u, 0, TANHF_TOLERANCE, 0}, +{126, 1032805417u, 0u, 1032790101u, 0, TANHF_TOLERANCE, 0}, +{127, 1034147594u, 0u, 1034124746u, 0, TANHF_TOLERANCE, 0}, +{128, 1035489772u, 0u, 1035457262u, 0, TANHF_TOLERANCE, 0}, +{129, 1036831949u, 0u, 1036787388u, 0, TANHF_TOLERANCE, 0}, +{130, 1038174126u, 0u, 1038114865u, 0, TANHF_TOLERANCE, 0}, +{131, 1039516303u, 0u, 1039439436u, 0, TANHF_TOLERANCE, 0}, +{132, 1040522936u, 0u, 1040474120u, 0, TANHF_TOLERANCE, 0}, +{133, 1041194025u, 0u, 1041133120u, 0, TANHF_TOLERANCE, 0}, +{134, 1041865114u, 0u, 1041790290u, 0, TANHF_TOLERANCE, 0}, +{135, 1042536202u, 0u, 1042445505u, 0, TANHF_TOLERANCE, 0}, +{136, 1043207291u, 0u, 1043098645u, 0, TANHF_TOLERANCE, 0}, +{137, 1043878380u, 0u, 1043749589u, 0, TANHF_TOLERANCE, 0}, +{138, 1044549468u, 0u, 1044398218u, 0, TANHF_TOLERANCE, 0}, +{139, 1045220557u, 0u, 1045044418u, 0, TANHF_TOLERANCE, 0}, +{140, 1045891645u, 0u, 1045688070u, 0, TANHF_TOLERANCE, 0}, +{141, 1046562734u, 0u, 1046329065u, 0, TANHF_TOLERANCE, 0}, +{142, 1047233823u, 0u, 1046967290u, 0, TANHF_TOLERANCE, 0}, +{143, 1047904911u, 0u, 1047602636u, 0, TANHF_TOLERANCE, 0}, +{144, 1048576000u, 0u, 1048234997u, 0, TANHF_TOLERANCE, 0}, +{145, 1048911544u, 0u, 1048720134u, 0, TANHF_TOLERANCE, 0}, +{146, 1049247089u, 0u, 1049033174u, 0, TANHF_TOLERANCE, 0}, +{147, 1049582633u, 0u, 1049344567u, 0, TANHF_TOLERANCE, 0}, +{148, 1049918177u, 0u, 1049654265u, 0, TANHF_TOLERANCE, 0}, +{149, 1050253722u, 0u, 1049962222u, 0, TANHF_TOLERANCE, 0}, +{150, 1050589266u, 0u, 1050268388u, 0, TANHF_TOLERANCE, 0}, +{151, 1050924810u, 0u, 1050572721u, 0, TANHF_TOLERANCE, 0}, +{152, 1051260355u, 0u, 1050875176u, 0, TANHF_TOLERANCE, 0}, +{153, 1051595899u, 0u, 1051175710u, 0, TANHF_TOLERANCE, 0}, +{154, 1051931443u, 0u, 1051474282u, 0, TANHF_TOLERANCE, 0}, +{155, 1052266988u, 0u, 1051770853u, 0, TANHF_TOLERANCE, 0}, +{156, 1052602532u, 0u, 1052065383u, 0, TANHF_TOLERANCE, 0}, +{157, 1052938076u, 0u, 1052357835u, 0, TANHF_TOLERANCE, 0}, +{158, 1053273620u, 0u, 1052648173u, 0, TANHF_TOLERANCE, 0}, +{159, 1053609165u, 0u, 1052936364u, 0, TANHF_TOLERANCE, 0}, +{160, 1053944709u, 0u, 1053222372u, 0, TANHF_TOLERANCE, 0}, +{161, 1054280253u, 0u, 1053506167u, 0, TANHF_TOLERANCE, 0}, +{162, 1054615798u, 0u, 1053787718u, 0, TANHF_TOLERANCE, 0}, +{163, 1054951342u, 0u, 1054066996u, 0, TANHF_TOLERANCE, 0}, +{164, 1055286886u, 0u, 1054343973u, 0, TANHF_TOLERANCE, 0}, +{165, 1055622431u, 0u, 1054618624u, 0, TANHF_TOLERANCE, 0}, +{166, 1055957975u, 0u, 1054890921u, 0, TANHF_TOLERANCE, 0}, +{167, 1056293519u, 0u, 1055160843u, 0, TANHF_TOLERANCE, 0}, +{168, 1056629064u, 0u, 1055428367u, 0, TANHF_TOLERANCE, 0}, +{169, 1056964608u, 0u, 1055693471u, 0, TANHF_TOLERANCE, 0}, +{170, 1057132380u, 0u, 1055956136u, 0, TANHF_TOLERANCE, 0}, +{171, 1057300152u, 0u, 1056216344u, 0, TANHF_TOLERANCE, 0}, +{172, 1057467924u, 0u, 1056474078u, 0, TANHF_TOLERANCE, 0}, +{173, 1057635697u, 0u, 1056729324u, 0, TANHF_TOLERANCE, 0}, +{174, 1057803469u, 0u, 1056973336u, 0, TANHF_TOLERANCE, 0}, +{175, 1057971241u, 0u, 1057098447u, 0, TANHF_TOLERANCE, 0}, +{176, 1058139013u, 0u, 1057222294u, 0, TANHF_TOLERANCE, 0}, +{177, 1058306785u, 0u, 1057344871u, 0, TANHF_TOLERANCE, 0}, +{178, 1058474557u, 0u, 1057466173u, 0, TANHF_TOLERANCE, 0}, +{179, 1058642330u, 0u, 1057586197u, 0, TANHF_TOLERANCE, 0}, +{180, 1058810102u, 0u, 1057704938u, 0, TANHF_TOLERANCE, 0}, +{181, 1058977874u, 0u, 1057822394u, 0, TANHF_TOLERANCE, 0}, +{182, 1059145646u, 0u, 1057938563u, 0, TANHF_TOLERANCE, 0}, +{183, 1059313418u, 0u, 1058053442u, 0, TANHF_TOLERANCE, 0}, +{184, 1059481190u, 0u, 1058167030u, 0, TANHF_TOLERANCE, 0}, +{185, 1059648963u, 0u, 1058279328u, 0, TANHF_TOLERANCE, 0}, +{186, 1059816735u, 0u, 1058390334u, 0, TANHF_TOLERANCE, 0}, +{187, 1059984507u, 0u, 1058500049u, 0, TANHF_TOLERANCE, 0}, +{188, 1060152279u, 0u, 1058608473u, 0, TANHF_TOLERANCE, 0}, +{189, 1060320051u, 0u, 1058715609u, 0, TANHF_TOLERANCE, 0}, +{190, 1060487823u, 0u, 1058821457u, 0, TANHF_TOLERANCE, 0}, +{191, 1060655596u, 0u, 1058926021u, 0, TANHF_TOLERANCE, 0}, +{192, 1060823368u, 0u, 1059029302u, 0, TANHF_TOLERANCE, 0}, +{193, 1060991140u, 0u, 1059131304u, 0, TANHF_TOLERANCE, 0}, +{194, 1061158912u, 0u, 1059232031u, 0, TANHF_TOLERANCE, 0}, +{195, 1061326684u, 0u, 1059331487u, 0, TANHF_TOLERANCE, 0}, +{196, 1061494456u, 0u, 1059429675u, 0, TANHF_TOLERANCE, 0}, +{197, 1061662228u, 0u, 1059526601u, 0, TANHF_TOLERANCE, 0}, +{198, 1061830001u, 0u, 1059622271u, 0, TANHF_TOLERANCE, 0}, +{199, 1061997773u, 0u, 1059716688u, 0, TANHF_TOLERANCE, 0}, +{200, 1062165545u, 0u, 1059809860u, 0, TANHF_TOLERANCE, 0}, +{201, 1062333317u, 0u, 1059901793u, 0, TANHF_TOLERANCE, 0}, +{202, 1062501089u, 0u, 1059992493u, 0, TANHF_TOLERANCE, 0}, +{203, 1062668861u, 0u, 1060081967u, 0, TANHF_TOLERANCE, 0}, +{204, 1062836634u, 0u, 1060170222u, 0, TANHF_TOLERANCE, 0}, +{205, 1063004406u, 0u, 1060257265u, 0, TANHF_TOLERANCE, 0}, +{206, 1063172178u, 0u, 1060343105u, 0, TANHF_TOLERANCE, 0}, +{207, 1063339950u, 0u, 1060427749u, 0, TANHF_TOLERANCE, 0}, +{208, 1063507722u, 0u, 1060511206u, 0, TANHF_TOLERANCE, 0}, +{209, 1063675494u, 0u, 1060593484u, 0, TANHF_TOLERANCE, 0}, +{210, 1063843267u, 0u, 1060674592u, 0, TANHF_TOLERANCE, 0}, +{211, 1064011039u, 0u, 1060754538u, 0, TANHF_TOLERANCE, 0}, +{212, 1064178811u, 0u, 1060833332u, 0, TANHF_TOLERANCE, 0}, +{213, 1064346583u, 0u, 1060910983u, 0, TANHF_TOLERANCE, 0}, +{214, 1064514355u, 0u, 1060987500u, 0, TANHF_TOLERANCE, 0}, +{215, 1064682127u, 0u, 1061062894u, 0, TANHF_TOLERANCE, 0}, +{216, 1064849900u, 0u, 1061137174u, 0, TANHF_TOLERANCE, 0}, +{217, 1065017672u, 0u, 1061210349u, 0, TANHF_TOLERANCE, 0}, +{218, 1065185444u, 0u, 1061282431u, 0, TANHF_TOLERANCE, 0}, +{219, 1065353216u, 0u, 1061353430u, 0, TANHF_TOLERANCE, 0}, +{220, 1065437102u, 0u, 1061423355u, 0, TANHF_TOLERANCE, 0}, +{221, 1065520988u, 0u, 1061492217u, 0, TANHF_TOLERANCE, 0}, +{222, 1065604874u, 0u, 1061560027u, 0, TANHF_TOLERANCE, 0}, +{223, 1065688760u, 0u, 1061626796u, 0, TANHF_TOLERANCE, 0}, +{224, 1065772646u, 0u, 1061692534u, 0, TANHF_TOLERANCE, 0}, +{225, 1065856532u, 0u, 1061757252u, 0, TANHF_TOLERANCE, 0}, +{226, 1065940419u, 0u, 1061820962u, 0, TANHF_TOLERANCE, 0}, +{227, 1066024305u, 0u, 1061883673u, 0, TANHF_TOLERANCE, 0}, +{228, 1066108191u, 0u, 1061945397u, 0, TANHF_TOLERANCE, 0}, +{229, 1066192077u, 0u, 1062006145u, 0, TANHF_TOLERANCE, 0}, +{230, 1066275963u, 0u, 1062065929u, 0, TANHF_TOLERANCE, 0}, +{231, 1066359849u, 0u, 1062124758u, 0, TANHF_TOLERANCE, 0}, +{232, 1066443735u, 0u, 1062182645u, 0, TANHF_TOLERANCE, 0}, +{233, 1066527621u, 0u, 1062239601u, 0, TANHF_TOLERANCE, 0}, +{234, 1066611507u, 0u, 1062295637u, 0, TANHF_TOLERANCE, 0}, +{235, 1066695393u, 0u, 1062350763u, 0, TANHF_TOLERANCE, 0}, +{236, 1066779279u, 0u, 1062404992u, 0, TANHF_TOLERANCE, 0}, +{237, 1066863165u, 0u, 1062458334u, 0, TANHF_TOLERANCE, 0}, +{238, 1066947052u, 0u, 1062510801u, 0, TANHF_TOLERANCE, 0}, +{239, 3234402267u, 0u, 3212836747u, 0, TANHF_TOLERANCE, 0}, +{240, 3231108068u, 0u, 3212834156u, 0, TANHF_TOLERANCE, 0}, +{241, 3226013659u, 0u, 3212774320u, 0, TANHF_TOLERANCE, 0}, +{242, 3217625051u, 0u, 3211446911u, 0, TANHF_TOLERANCE, 0}, +{243, 0u, 0u, 0u, 0, TANHF_TOLERANCE, 0}, +{244, 1070141403u, 0u, 1063963263u, 0, TANHF_TOLERANCE, 0}, +{245, 1078530011u, 0u, 1065290672u, 0, TANHF_TOLERANCE, 0}, +{246, 1083624420u, 0u, 1065350508u, 0, TANHF_TOLERANCE, 0}, +{247, 3253731328u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{248, 3252840038u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{249, 3251948749u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{250, 3251057459u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{251, 3250166170u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{252, 3249274880u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{253, 3248383590u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{254, 3247492301u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{255, 3246601011u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{256, 3245028147u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{257, 3243245568u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{258, 3241462989u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{259, 3239680410u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{260, 3237792973u, 0u, 3212836859u, 0, TANHF_TOLERANCE, 0}, +{261, 3234227814u, 0u, 3212836726u, 0, TANHF_TOLERANCE, 0}, +{262, 3230662656u, 0u, 3212832724u, 0, TANHF_TOLERANCE, 0}, +{263, 3224580915u, 0u, 3212713241u, 0, TANHF_TOLERANCE, 0}, +{264, 3213675725u, 0u, 3209489793u, 0, TANHF_TOLERANCE, 0}, +{265, 1058642330u, 0u, 1057586197u, 0, TANHF_TOLERANCE, 0}, +{266, 1075000115u, 0u, 1065019289u, 0, TANHF_TOLERANCE, 0}, +{267, 1082130432u, 0u, 1065341964u, 0, TANHF_TOLERANCE, 0}, +{268, 1085695590u, 0u, 1065352840u, 0, TANHF_TOLERANCE, 0}, +{269, 1089260749u, 0u, 1065353203u, 0, TANHF_TOLERANCE, 0}, +{270, 1091672474u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{271, 1093455053u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{272, 1095237632u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{273, 1097020211u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{274, 1098802790u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{275, 1099746509u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{276, 1100637798u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{277, 1101529088u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{278, 1102420378u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{279, 1103311667u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{280, 1104202957u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{281, 1105094246u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{282, 1105985536u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{283, 1107800421u, 100135u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{284, 3196650934u, 0u, 3196442519u, 0, TANHF_TOLERANCE, 0}, +{285, 3368700125u, 4294964487u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{286, 1224242132u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{287, 3221027117u, 73066312u, 3212204671u, 0, TANHF_TOLERANCE, 0}, +{288, 1198712763u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{289, 3159309973u, 0u, 3159309249u, 0, TANHF_TOLERANCE, 0}, +{290, 954173073u, 0u, 954173073u, 0, TANHF_TOLERANCE, 0}, +{291, 3090780435u, 0u, 3090780435u, 0, TANHF_TOLERANCE, 0}, +{292, 966554515u, 4294967290u, 966554515u, 0, TANHF_TOLERANCE, 0}, +{293, 1312607135u, 47678u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{294, 1166191415u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{295, 3111900019u, 225u, 3111900019u, 0, TANHF_TOLERANCE, 0}, +{296, 1234419246u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{297, 1302107128u, 4294492157u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{298, 1052801068u, 0u, 1052238675u, 0, TANHF_TOLERANCE, 0}, +{299, 1060849628u, 0u, 1059045352u, 0, TANHF_TOLERANCE, 0}, +{300, 3484320003u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{301, 3181522772u, 4294965180u, 3181500608u, 0, TANHF_TOLERANCE, 0}, +{302, 882596369u, 7581303u, 882596369u, 0, TANHF_TOLERANCE, 0}, +{303, 1167223673u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{304, 968192794u, 0u, 968192794u, 0, TANHF_TOLERANCE, 0}, +{305, 3122346862u, 48u, 3122346861u, 0, TANHF_TOLERANCE, 0}, +{306, 1052361612u, 53381624u, 1051854119u, 0, TANHF_TOLERANCE, 0}, +{307, 906701409u, 0u, 906701409u, 0, TANHF_TOLERANCE, 0}, +{308, 3471653172u, 1621u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{309, 3231467496u, 0u, 3212834942u, 0, TANHF_TOLERANCE, 0}, +{310, 1341514497u, 3022046720u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{311, 1272351391u, 4294363968u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{312, 3319724992u, 4294842689u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{313, 917622040u, 603040256u, 917622040u, 0, TANHF_TOLERANCE, 0}, +{314, 940236348u, 4294965375u, 940236348u, 0, TANHF_TOLERANCE, 0}, +{315, 3251541546u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{316, 3099843889u, 4294828114u, 3099843889u, 0, TANHF_TOLERANCE, 0}, +{317, 3110358400u, 0u, 3110358400u, 0, TANHF_TOLERANCE, 0}, +{318, 3371863479u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{319, 3204069187u, 0u, 3202877449u, 0, TANHF_TOLERANCE, 0}, +{320, 1306460502u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{321, 1197542187u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{322, 922888249u, 467u, 922888249u, 0, TANHF_TOLERANCE, 0}, +{323, 1184239996u, 4294967294u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{324, 1252490238u, 7808u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{325, 1001673627u, 3340510784u, 1001673508u, 0, TANHF_TOLERANCE, 0}, +{326, 976098044u, 1357u, 976098042u, 0, TANHF_TOLERANCE, 0}, +{327, 941796645u, 0u, 941796645u, 0, TANHF_TOLERANCE, 0}, +{328, 3287199470u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{329, 893184329u, 2485427u, 893184329u, 0, TANHF_TOLERANCE, 0}, +{330, 1143233714u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{331, 1139941253u, 929u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{332, 3143717025u, 4294967290u, 3143716967u, 0, TANHF_TOLERANCE, 0}, +{333, 3048866608u, 3978787488u, 3048866608u, 0, TANHF_TOLERANCE, 0}, +{334, 3240298487u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{335, 1288902137u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{336, 1333134799u, 2211432960u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{337, 1187847971u, 1157221888u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{338, 1038851706u, 2696359424u, 1038783936u, 0, TANHF_TOLERANCE, 0}, +{339, 3329354473u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{340, 3077218579u, 529671904u, 3077218579u, 0, TANHF_TOLERANCE, 0}, +{341, 1309289088u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{342, 3444653659u, 50272864u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{343, 3405585402u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{344, 3106647724u, 0u, 3106647724u, 0, TANHF_TOLERANCE, 0}, +{345, 1106778573u, 4294965325u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{346, 1140567947u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{347, 1238569473u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{348, 3154871957u, 39965012u, 3154871736u, 0, TANHF_TOLERANCE, 0}, +{349, 1261071232u, 15806u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{350, 1175011025u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{351, 1082692850u, 187658u, 1065346634u, 0, TANHF_TOLERANCE, 0}, +{352, 974547519u, 1563599616u, 974547518u, 0, TANHF_TOLERANCE, 0}, +{353, 3058097085u, 0u, 3058097085u, 0, TANHF_TOLERANCE, 0}, +{354, 3107252546u, 1u, 3107252546u, 0, TANHF_TOLERANCE, 0}, +{355, 3096032662u, 0u, 3096032662u, 0, TANHF_TOLERANCE, 0}, +{356, 3197942144u, 0u, 3197632931u, 0, TANHF_TOLERANCE, 0}, +{357, 3403348556u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{358, 3182301130u, 3460013312u, 3182273742u, 0, TANHF_TOLERANCE, 0}, +{359, 1136411063u, 82u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{360, 3239231622u, 4294965540u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{361, 3340615780u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{362, 998567360u, 0u, 998567312u, 0, TANHF_TOLERANCE, 0}, +{363, 3417964312u, 1627479168u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{364, 3109481038u, 695u, 3109481038u, 0, TANHF_TOLERANCE, 0}, +{365, 1148867223u, 7486109u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{366, 989687421u, 4294414202u, 989687400u, 0, TANHF_TOLERANCE, 0}, +{367, 1152956913u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{368, 892922651u, 4294392467u, 892922651u, 0, TANHF_TOLERANCE, 0}, +{369, 1109627625u, 891137088u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{370, 1307091856u, 24u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{371, 1077234132u, 4294967159u, 1065237377u, 0, TANHF_TOLERANCE, 0}, +{372, 1142167709u, 13u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{373, 3426232834u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{374, 3368566779u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{375, 3030724760u, 4294886457u, 3030724760u, 0, TANHF_TOLERANCE, 0}, +{376, 1138741813u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{377, 982950501u, 0u, 982950497u, 0, TANHF_TOLERANCE, 0}, +{378, 1142981585u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{379, 3347165962u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{380, 1009535440u, 4293825695u, 1009535024u, 0, TANHF_TOLERANCE, 0}, +{381, 3103736980u, 4287990860u, 3103736980u, 0, TANHF_TOLERANCE, 0}, +{382, 3126820946u, 2u, 3126820942u, 0, TANHF_TOLERANCE, 0}, +{383, 3473956030u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{384, 3349098349u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{385, 3152729489u, 0u, 3152729226u, 0, TANHF_TOLERANCE, 0}, +{386, 945568720u, 4294963204u, 945568720u, 0, TANHF_TOLERANCE, 0}, +{387, 3345489836u, 36u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{388, 940893161u, 394u, 940893161u, 0, TANHF_TOLERANCE, 0}, +{389, 976791751u, 4294967292u, 976791749u, 0, TANHF_TOLERANCE, 0}, +{390, 1004442355u, 0u, 1004442131u, 0, TANHF_TOLERANCE, 0}, +{391, 1108485380u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{392, 1061834641u, 0u, 1059624899u, 0, TANHF_TOLERANCE, 0}, +{393, 3381268392u, 885u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{394, 1087189715u, 0u, 1065353126u, 0, TANHF_TOLERANCE, 0}, +{395, 3212952285u, 4294951762u, 3208933014u, 0, TANHF_TOLERANCE, 0}, +{396, 1000611335u, 0u, 1000611245u, 0, TANHF_TOLERANCE, 0}, +{397, 3466188568u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{398, 3072456205u, 0u, 3072456205u, 0, TANHF_TOLERANCE, 0}, +{399, 3319315516u, 4262338968u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{400, 935938416u, 867u, 935938416u, 0, TANHF_TOLERANCE, 0}, +{401, 3212614372u, 1438u, 3208742689u, 0, TANHF_TOLERANCE, 0}, +{402, 1315030230u, 4294939294u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{403, 1134593658u, 3712906944u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{404, 977281449u, 0u, 977281447u, 0, TANHF_TOLERANCE, 0}, +{405, 1086198791u, 0u, 1065352984u, 0, TANHF_TOLERANCE, 0}, +{406, 1255152035u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{407, 1135271264u, 4294966890u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{408, 1094190727u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{409, 1294665325u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{410, 1036608591u, 0u, 1036566212u, 0, TANHF_TOLERANCE, 0}, +{411, 3229998064u, 0u, 3212829061u, 0, TANHF_TOLERANCE, 0}, +{412, 3439134022u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{413, 3073083133u, 1094097536u, 3073083133u, 0, TANHF_TOLERANCE, 0}, +{414, 1325668223u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{415, 1092037607u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{416, 3316278408u, 3774649632u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{417, 3295436768u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{418, 1151984049u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{419, 1129287043u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{420, 1243664530u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{421, 950829092u, 0u, 950829092u, 0, TANHF_TOLERANCE, 0}, +{422, 1115471979u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{423, 3351092088u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{424, 3424479544u, 4294963555u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{425, 3241193975u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{426, 1030934236u, 0u, 1030915623u, 0, TANHF_TOLERANCE, 0}, +{427, 3131791114u, 4283960578u, 3131791108u, 0, TANHF_TOLERANCE, 0}, +{428, 1025254314u, 0u, 1025249360u, 0, TANHF_TOLERANCE, 0}, +{429, 1110545760u, 4294967286u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{430, 3180213739u, 37u, 3180198788u, 0, TANHF_TOLERANCE, 0}, +{431, 3361976590u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{432, 881280146u, 4262747520u, 881280146u, 0, TANHF_TOLERANCE, 0}, +{433, 1304154705u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{434, 3264443610u, 4294967294u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{435, 3374550627u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{436, 899599265u, 4294967286u, 899599265u, 0, TANHF_TOLERANCE, 0}, +{437, 1268194719u, 3962356224u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{438, 1133420220u, 3161371u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{439, 1161858787u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{440, 3184462258u, 13627054u, 3184416224u, 0, TANHF_TOLERANCE, 0}, +{441, 3295996963u, 3846806432u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{442, 1270887389u, 1864u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{443, 3325193181u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{444, 925657343u, 955232128u, 925657343u, 0, TANHF_TOLERANCE, 0}, +{445, 3115275450u, 0u, 3115275450u, 0, TANHF_TOLERANCE, 0}, +{446, 3116607482u, 4294967294u, 3116607481u, 0, TANHF_TOLERANCE, 0}, +{447, 3187892415u, 0u, 3187845482u, 0, TANHF_TOLERANCE, 0}, +{448, 1189120494u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{449, 889030794u, 0u, 889030794u, 0, TANHF_TOLERANCE, 0}, +{450, 1323529208u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{451, 3465768388u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{452, 3426099899u, 87u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{453, 3224857113u, 4290382691u, 3212728447u, 0, TANHF_TOLERANCE, 0}, +{454, 1065798296u, 0u, 1061712431u, 0, TANHF_TOLERANCE, 0}, +{455, 3328989444u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{456, 3357819026u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{457, 1273397670u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{458, 3424831780u, 414735168u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{459, 1257596246u, 4264851904u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{460, 1051773536u, 0u, 1051334021u, 0, TANHF_TOLERANCE, 0}, +{461, 3294752507u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{462, 3424848725u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{463, 1090870906u, 4294966393u, 1065353214u, 0, TANHF_TOLERANCE, 0}, +{464, 1227582289u, 147011u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{465, 1272325814u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{466, 3359508271u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{467, 1137854355u, 4294941607u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{468, 3440773058u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{469, 3101598400u, 0u, 3101598400u, 0, TANHF_TOLERANCE, 0}, +{470, 3451216836u, 4294896064u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{471, 3437062994u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{472, 1131196082u, 3743u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{473, 3177294154u, 63027320u, 3177279209u, 0, TANHF_TOLERANCE, 0}, +{474, 3258097678u, 449173056u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{475, 3460915348u, 356647u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{476, 3303035472u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{477, 1053698677u, 4294966907u, 1053012876u, 0, TANHF_TOLERANCE, 0}, +{478, 3396166221u, 83688u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{479, 3037541131u, 5u, 3037541131u, 0, TANHF_TOLERANCE, 0}, +{480, 3458934263u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{481, 1065761827u, 4294943781u, 1061684113u, 0, TANHF_TOLERANCE, 0}, +{482, 3025843188u, 0u, 3025843188u, 0, TANHF_TOLERANCE, 0}, +{483, 926665223u, 0u, 926665223u, 0, TANHF_TOLERANCE, 0}, +{484, 1199816046u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{485, 3333779015u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{486, 948398145u, 4294967288u, 948398145u, 0, TANHF_TOLERANCE, 0}, +{487, 3054021468u, 23933390u, 3054021468u, 0, TANHF_TOLERANCE, 0}, +{488, 1080781593u, 224021u, 1065331814u, 0, TANHF_TOLERANCE, 0}, +{489, 3164749613u, 0u, 3164748223u, 0, TANHF_TOLERANCE, 0}, +{490, 3235326590u, 26828788u, 3212836816u, 0, TANHF_TOLERANCE, 0}, +{491, 3118883815u, 0u, 3118883814u, 0, TANHF_TOLERANCE, 0}, +{492, 965378004u, 146193824u, 965378004u, 0, TANHF_TOLERANCE, 0}, +{493, 3226990408u, 45u, 3212797580u, 0, TANHF_TOLERANCE, 0}, +{494, 3117098218u, 115u, 3117098217u, 0, TANHF_TOLERANCE, 0}, +{495, 1283624229u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{496, 970649315u, 3u, 970649314u, 0, TANHF_TOLERANCE, 0}, +{497, 959776291u, 4294967028u, 959776291u, 0, TANHF_TOLERANCE, 0}, +{498, 3341117305u, 4294966405u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{499, 1270734970u, 4294829480u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{500, 3454816067u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{501, 917206623u, 7364u, 917206623u, 0, TANHF_TOLERANCE, 0}, +{502, 1106502045u, 126247200u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{503, 1157598381u, 4294964293u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{504, 3335234513u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{505, 1279489061u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{506, 3157416480u, 624023680u, 3157416018u, 0, TANHF_TOLERANCE, 0}, +{507, 3143920719u, 0u, 3143920658u, 0, TANHF_TOLERANCE, 0}, +{508, 1233171235u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{509, 1148920078u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{510, 3064988156u, 4294967292u, 3064988156u, 0, TANHF_TOLERANCE, 0}, +{511, 3083619260u, 2484u, 3083619260u, 0, TANHF_TOLERANCE, 0}, +{512, 1109198803u, 431095u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{513, 3219949483u, 0u, 3212023955u, 0, TANHF_TOLERANCE, 0}, +{514, 3361149474u, 4293077090u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{515, 1207502108u, 4292985650u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{516, 1000014431u, 0u, 1000014355u, 0, TANHF_TOLERANCE, 0}, +{517, 3161756316u, 0u, 3161755126u, 0, TANHF_TOLERANCE, 0}, +{518, 3160728744u, 4293625597u, 3160727768u, 0, TANHF_TOLERANCE, 0}, +{519, 1234530539u, 3u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{520, 1017843965u, 40165u, 1017842336u, 0, TANHF_TOLERANCE, 0}, +{521, 951862956u, 7732u, 951862956u, 0, TANHF_TOLERANCE, 0}, +{522, 3306328852u, 87u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{523, 1291910469u, 183319u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{524, 3027442905u, 7942u, 3027442905u, 0, TANHF_TOLERANCE, 0}, +{525, 1131927531u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{526, 3449879391u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{527, 970094304u, 4294911386u, 970094303u, 0, TANHF_TOLERANCE, 0}, +{528, 1125551064u, 4294949017u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{529, 3427296372u, 3784252480u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{530, 1198917460u, 2607027968u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{531, 3201603336u, 0u, 3200854291u, 0, TANHF_TOLERANCE, 0}, +{532, 3114686212u, 1328603904u, 3114686212u, 0, TANHF_TOLERANCE, 0}, +{533, 921940707u, 0u, 921940707u, 0, TANHF_TOLERANCE, 0}, +{534, 1091906532u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{535, 3393557778u, 4293570247u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{536, 1276853215u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{537, 3462778440u, 4294884341u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{538, 3360170117u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{539, 3224245428u, 4294967170u, 3212691888u, 0, TANHF_TOLERANCE, 0}, +{540, 1120124467u, 352u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{541, 1064364381u, 0u, 1060919153u, 0, TANHF_TOLERANCE, 0}, +{542, 1268744779u, 4294952694u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{543, 1165195428u, 4292538760u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{544, 3044092739u, 30u, 3044092739u, 0, TANHF_TOLERANCE, 0}, +{545, 3149469534u, 47144136u, 3149469405u, 0, TANHF_TOLERANCE, 0}, +{546, 3247790039u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{547, 3215244648u, 4u, 3210460317u, 0, TANHF_TOLERANCE, 0}, +{548, 3095275931u, 0u, 3095275931u, 0, TANHF_TOLERANCE, 0}, +{549, 3059688264u, 77u, 3059688264u, 0, TANHF_TOLERANCE, 0}, +{550, 1212717473u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{551, 3275973009u, 3930410816u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{552, 3028857014u, 0u, 3028857014u, 0, TANHF_TOLERANCE, 0}, +{553, 3391162308u, 129212984u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{554, 1044867873u, 4294528232u, 1044705124u, 0, TANHF_TOLERANCE, 0}, +{555, 1089986803u, 3370664576u, 1065353210u, 0, TANHF_TOLERANCE, 0}, +{556, 1296314700u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{557, 1251462432u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{558, 3485236902u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{559, 3262169538u, 19958524u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{560, 3080852256u, 0u, 3080852256u, 0, TANHF_TOLERANCE, 0}, +{561, 1022211242u, 0u, 1022206871u, 0, TANHF_TOLERANCE, 0}, +{562, 884661176u, 0u, 884661176u, 0, TANHF_TOLERANCE, 0}, +{563, 3071422941u, 4294967172u, 3071422941u, 0, TANHF_TOLERANCE, 0}, +{564, 989762529u, 4294733601u, 989762508u, 0, TANHF_TOLERANCE, 0}, +{565, 1295475718u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{566, 1002632518u, 4294950696u, 1002632367u, 0, TANHF_TOLERANCE, 0}, +{567, 3404372005u, 3938008096u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{568, 3158912530u, 0u, 3158911867u, 0, TANHF_TOLERANCE, 0}, +{569, 1125800069u, 4294967259u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{570, 3138037576u, 0u, 3138037562u, 0, TANHF_TOLERANCE, 0}, +{571, 3108384823u, 268832992u, 3108384823u, 0, TANHF_TOLERANCE, 0}, +{572, 999985470u, 4282999218u, 999985395u, 0, TANHF_TOLERANCE, 0}, +{573, 1189421739u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{574, 3075182644u, 0u, 3075182644u, 0, TANHF_TOLERANCE, 0}, +{575, 3028099649u, 4292241163u, 3028099649u, 0, TANHF_TOLERANCE, 0}, +{576, 3132541814u, 4077666864u, 3132541806u, 0, TANHF_TOLERANCE, 0}, +{577, 1164046161u, 4139845440u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{578, 1292596266u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{579, 3469748379u, 4279587928u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{580, 1314644642u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{581, 3399813173u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{582, 948775569u, 2159002624u, 948775569u, 0, TANHF_TOLERANCE, 0}, +{583, 1034611395u, 0u, 1034585462u, 0, TANHF_TOLERANCE, 0}, +{584, 3489122735u, 4294428604u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{585, 1181604787u, 4294717096u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{586, 3059042077u, 0u, 3059042077u, 0, TANHF_TOLERANCE, 0}, +{587, 1043691622u, 4288164501u, 1043568665u, 0, TANHF_TOLERANCE, 0}, +{588, 1314588083u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{589, 3141533334u, 0u, 3141533298u, 0, TANHF_TOLERANCE, 0}, +{590, 3157534378u, 3899913312u, 3157533902u, 0, TANHF_TOLERANCE, 0}, +{591, 3400949680u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{592, 3365581801u, 9596u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{593, 1110424755u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{594, 3189917167u, 0u, 3189829030u, 0, TANHF_TOLERANCE, 0}, +{595, 969804941u, 4294836255u, 969804940u, 0, TANHF_TOLERANCE, 0}, +{596, 1139120919u, 4294967176u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{597, 934308144u, 0u, 934308144u, 0, TANHF_TOLERANCE, 0}, +{598, 1220524226u, 1440u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{599, 3162548604u, 3394333056u, 3162547911u, 0, TANHF_TOLERANCE, 0}, +{600, 3382391700u, 4294966243u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{601, 1156767533u, 7u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{602, 3079222483u, 4294963487u, 3079222483u, 0, TANHF_TOLERANCE, 0}, +{603, 994934087u, 0u, 994934043u, 0, TANHF_TOLERANCE, 0}, +{604, 3185240099u, 122u, 3185185712u, 0, TANHF_TOLERANCE, 0}, +{605, 3479873563u, 3288004u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{606, 3424264117u, 4203174416u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{607, 3228365887u, 275492u, 3212816465u, 0, TANHF_TOLERANCE, 0}, +{608, 1035909900u, 4101891u, 1035873887u, 0, TANHF_TOLERANCE, 0}, +{609, 3024951184u, 3626688u, 3024951184u, 0, TANHF_TOLERANCE, 0}, +{610, 1212129651u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{611, 3125775254u, 0u, 3125775251u, 0, TANHF_TOLERANCE, 0}, +{612, 1037464105u, 0u, 1037412966u, 0, TANHF_TOLERANCE, 0}, +{613, 1311706596u, 6702361u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{614, 918212457u, 0u, 918212457u, 0, TANHF_TOLERANCE, 0}, +{615, 1337315179u, 3421796288u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{616, 1131358407u, 4294955130u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{617, 1156517523u, 4294914801u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{618, 3210802820u, 0u, 3207900979u, 0, TANHF_TOLERANCE, 0}, +{619, 3337499209u, 621819u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{620, 3468429030u, 4294967266u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{621, 3253515800u, 28517u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{622, 3055299953u, 0u, 3055299953u, 0, TANHF_TOLERANCE, 0}, +{623, 959956547u, 0u, 959956547u, 0, TANHF_TOLERANCE, 0}, +{624, 3425290480u, 461u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{625, 1039917375u, 117u, 1039834646u, 0, TANHF_TOLERANCE, 0}, +{626, 3220979495u, 4234725636u, 3212197589u, 0, TANHF_TOLERANCE, 0}, +{627, 1311016004u, 4294941884u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{628, 1128016396u, 27u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{629, 3210335769u, 0u, 3207661956u, 0, TANHF_TOLERANCE, 0}, +{630, 3022705759u, 4287084865u, 3022705759u, 0, TANHF_TOLERANCE, 0}, +{631, 1206054701u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{632, 3144504834u, 3170u, 3144504766u, 0, TANHF_TOLERANCE, 0}, +{633, 1213609983u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{634, 1246902946u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{635, 995850843u, 3845036544u, 995850789u, 0, TANHF_TOLERANCE, 0}, +{636, 3362082828u, 4294328268u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{637, 1029480631u, 0u, 1029466664u, 0, TANHF_TOLERANCE, 0}, +{638, 3153568584u, 0u, 3153568275u, 0, TANHF_TOLERANCE, 0}, +{639, 3384988527u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{640, 1317696241u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{641, 3235395924u, 249u, 3212836819u, 0, TANHF_TOLERANCE, 0}, +{642, 3341877624u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{643, 1228636133u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{644, 3161654634u, 4294939932u, 3161653466u, 0, TANHF_TOLERANCE, 0}, +{645, 3162655243u, 4294964738u, 3162654523u, 0, TANHF_TOLERANCE, 0}, +{646, 1207246237u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{647, 1165476654u, 4294877038u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{648, 1215278023u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{649, 1017239798u, 4167373560u, 1017238418u, 0, TANHF_TOLERANCE, 0}, +{650, 1149651309u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{651, 1111943722u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{652, 1189849849u, 4293652457u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{653, 3204848496u, 0u, 3203799673u, 0, TANHF_TOLERANCE, 0}, +{654, 1249758327u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{655, 3092982276u, 4065500752u, 3092982276u, 0, TANHF_TOLERANCE, 0}, +{656, 1168098747u, 1063712256u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{657, 892549317u, 13301u, 892549317u, 0, TANHF_TOLERANCE, 0}, +{658, 3301009024u, 4286178976u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{659, 3233089227u, 204399u, 3212836455u, 0, TANHF_TOLERANCE, 0}, +{660, 3218245284u, 1767132u, 3211631110u, 0, TANHF_TOLERANCE, 0}, +{661, 3215981890u, 4294967286u, 3210820373u, 0, TANHF_TOLERANCE, 0}, +{662, 1266687209u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{663, 3487959775u, 4294948774u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{664, 943645710u, 0u, 943645710u, 0, TANHF_TOLERANCE, 0}, +{665, 3345065699u, 4294966959u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{666, 935847271u, 1u, 935847271u, 0, TANHF_TOLERANCE, 0}, +{667, 3410336089u, 47u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{668, 3082940740u, 1562501120u, 3082940740u, 0, TANHF_TOLERANCE, 0}, +{669, 1141063391u, 5507u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{670, 3059263153u, 0u, 3059263153u, 0, TANHF_TOLERANCE, 0}, +{671, 3353679791u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{672, 1001823878u, 0u, 1001823754u, 0, TANHF_TOLERANCE, 0}, +{673, 1009130212u, 0u, 1009129839u, 0, TANHF_TOLERANCE, 0}, +{674, 3367127535u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{675, 1032920919u, 3981458912u, 1032905032u, 0, TANHF_TOLERANCE, 0}, +{676, 3281952870u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{677, 1237868497u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{678, 1153753924u, 4294958733u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{679, 1120261759u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{680, 3226328360u, 4294623870u, 3212783021u, 0, TANHF_TOLERANCE, 0}, +{681, 3349595986u, 4294967271u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{682, 3166889490u, 4294965026u, 3166887081u, 0, TANHF_TOLERANCE, 0}, +{683, 1087750238u, 16u, 1065353163u, 0, TANHF_TOLERANCE, 0}, +{684, 3121620061u, 4294773019u, 3121620060u, 0, TANHF_TOLERANCE, 0}, +{685, 1066116543u, 0u, 1061951489u, 0, TANHF_TOLERANCE, 0}, +{686, 3210898034u, 0u, 3207948571u, 0, TANHF_TOLERANCE, 0}, +{687, 3051923237u, 4294697573u, 3051923237u, 0, TANHF_TOLERANCE, 0}, +{688, 1030612298u, 4294908239u, 1030594791u, 0, TANHF_TOLERANCE, 0}, +{689, 1186234578u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{690, 1331680743u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{691, 3060774997u, 2318310656u, 3060774997u, 0, TANHF_TOLERANCE, 0}, +{692, 887589411u, 141578704u, 887589411u, 0, TANHF_TOLERANCE, 0}, +{693, 1045232522u, 4294967290u, 1045055916u, 0, TANHF_TOLERANCE, 0}, +{694, 3119858470u, 0u, 3119858469u, 0, TANHF_TOLERANCE, 0}, +{695, 3349432725u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{696, 912423027u, 0u, 912423027u, 0, TANHF_TOLERANCE, 0}, +{697, 3228795133u, 4294967132u, 3212820239u, 0, TANHF_TOLERANCE, 0}, +{698, 3194674746u, 0u, 3194410390u, 0, TANHF_TOLERANCE, 0}, +{699, 3296784303u, 4294967098u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{700, 965402291u, 0u, 965402291u, 0, TANHF_TOLERANCE, 0}, +{701, 3388153589u, 4246639564u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{702, 1133410485u, 4294951516u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{703, 3136790322u, 7u, 3136790303u, 0, TANHF_TOLERANCE, 0}, +{704, 3369970587u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{705, 1270451568u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{706, 989498922u, 0u, 989498902u, 0, TANHF_TOLERANCE, 0}, +{707, 1280215674u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{708, 1171873518u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{709, 3298258100u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{710, 3415208824u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{711, 1001897182u, 0u, 1001897056u, 0, TANHF_TOLERANCE, 0}, +{712, 3152777939u, 4294967281u, 3152777673u, 0, TANHF_TOLERANCE, 0}, +{713, 985903305u, 4294945424u, 985903295u, 0, TANHF_TOLERANCE, 0}, +{714, 3357328848u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{715, 982612185u, 0u, 982612181u, 0, TANHF_TOLERANCE, 0}, +{716, 3267868136u, 136421u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{717, 3319048157u, 7150u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{718, 1144755661u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{719, 898467286u, 0u, 898467286u, 0, TANHF_TOLERANCE, 0}, +{720, 3301461672u, 1119632u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{721, 3364525678u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{722, 931441127u, 285u, 931441127u, 0, TANHF_TOLERANCE, 0}, +{723, 3146660041u, 0u, 3146659982u, 0, TANHF_TOLERANCE, 0}, +{724, 3467121799u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{725, 1151257041u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{726, 3097873255u, 4294967295u, 3097873255u, 0, TANHF_TOLERANCE, 0}, +{727, 3130670309u, 0u, 3130670304u, 0, TANHF_TOLERANCE, 0}, +{728, 1017573824u, 0u, 1017572310u, 0, TANHF_TOLERANCE, 0}, +{729, 1258369714u, 3364363264u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{730, 1216602683u, 4294468761u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{731, 3297265739u, 228335u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{732, 1071940738u, 4294963632u, 1064434859u, 0, TANHF_TOLERANCE, 0}, +{733, 922601356u, 4294937447u, 922601356u, 0, TANHF_TOLERANCE, 0}, +{734, 3462285635u, 4085532736u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{735, 3357177805u, 5u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{736, 3049120080u, 0u, 3049120080u, 0, TANHF_TOLERANCE, 0}, +{737, 1153863660u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{738, 3034243695u, 0u, 3034243695u, 0, TANHF_TOLERANCE, 0}, +{739, 1249365132u, 4294967060u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{740, 3046215730u, 0u, 3046215730u, 0, TANHF_TOLERANCE, 0}, +{741, 3047251716u, 8u, 3047251716u, 0, TANHF_TOLERANCE, 0}, +{742, 3131219358u, 2355170688u, 3131219353u, 0, TANHF_TOLERANCE, 0}, +{743, 3222096285u, 59453u, 3212435981u, 0, TANHF_TOLERANCE, 0}, +{744, 1297708818u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{745, 3345532722u, 4293531291u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{746, 3418753236u, 4002743296u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{747, 1277417964u, 1103002624u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{748, 987577257u, 1370u, 987577243u, 0, TANHF_TOLERANCE, 0}, +{749, 3161606610u, 0u, 3161605453u, 0, TANHF_TOLERANCE, 0}, +{750, 888030585u, 0u, 888030585u, 0, TANHF_TOLERANCE, 0}, +{751, 1043442869u, 4294963715u, 1043327408u, 0, TANHF_TOLERANCE, 0}, +{752, 3320923228u, 3214934912u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{753, 1337400405u, 418188288u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{754, 3400348640u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{755, 1250249095u, 1u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{756, 3284411233u, 7805u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{757, 3020883322u, 0u, 3020883322u, 0, TANHF_TOLERANCE, 0}, +{758, 1215968622u, 2531374080u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{759, 3202319550u, 0u, 3201454820u, 0, TANHF_TOLERANCE, 0}, +{760, 3061638260u, 0u, 3061638260u, 0, TANHF_TOLERANCE, 0}, +{761, 1025404104u, 1u, 1025398930u, 0, TANHF_TOLERANCE, 0}, +{762, 3138086437u, 0u, 3138086423u, 0, TANHF_TOLERANCE, 0}, +{763, 3091024506u, 3752313152u, 3091024506u, 0, TANHF_TOLERANCE, 0}, +{764, 3362748242u, 4294517284u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{765, 3099671635u, 4294967295u, 3099671635u, 0, TANHF_TOLERANCE, 0}, +{766, 3068014841u, 0u, 3068014841u, 0, TANHF_TOLERANCE, 0}, +{767, 1252237719u, 105u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{768, 3327895594u, 517257u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{769, 3082454432u, 0u, 3082454432u, 0, TANHF_TOLERANCE, 0}, +{770, 3396161504u, 16393u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{771, 1099710167u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{772, 1157186482u, 109233848u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{773, 1282110851u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{774, 3477008113u, 3797391872u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{775, 3292127294u, 4282395772u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{776, 1123357102u, 4294966999u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{777, 1106837025u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{778, 1049949008u, 230u, 1049682635u, 0, TANHF_TOLERANCE, 0}, +{779, 1253017688u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{780, 1108543194u, 4294966999u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{781, 3087985411u, 1700586u, 3087985411u, 0, TANHF_TOLERANCE, 0}, +{782, 3163283126u, 2976129280u, 3163282235u, 0, TANHF_TOLERANCE, 0}, +{783, 1160162706u, 14164775u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{784, 3305715025u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{785, 1266928623u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{786, 3025340297u, 43483u, 3025340297u, 0, TANHF_TOLERANCE, 0}, +{787, 3438080027u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{788, 3344574751u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{789, 1152416724u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{790, 1218239308u, 161u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{791, 3263310567u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{792, 3041998669u, 2782u, 3041998669u, 0, TANHF_TOLERANCE, 0}, +{793, 1000313118u, 0u, 1000313035u, 0, TANHF_TOLERANCE, 0}, +{794, 972485427u, 131u, 972485426u, 0, TANHF_TOLERANCE, 0}, +{795, 3290264612u, 137u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{796, 3222106584u, 18249u, 3212437922u, 0, TANHF_TOLERANCE, 0}, +{797, 1278946388u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{798, 947914771u, 0u, 947914771u, 0, TANHF_TOLERANCE, 0}, +{799, 3167730654u, 0u, 3167727737u, 0, TANHF_TOLERANCE, 0}, +{800, 1098530298u, 4294967260u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{801, 3232726036u, 0u, 3212836285u, 0, TANHF_TOLERANCE, 0}, +{802, 1297190916u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{803, 1277649137u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{804, 3203377685u, 466619008u, 3202322865u, 0, TANHF_TOLERANCE, 0}, +{805, 3090306474u, 0u, 3090306474u, 0, TANHF_TOLERANCE, 0}, +{806, 3244032016u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{807, 3033122376u, 0u, 3033122376u, 0, TANHF_TOLERANCE, 0}, +{808, 1096155623u, 7454884u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{809, 873151908u, 4294967280u, 873151908u, 0, TANHF_TOLERANCE, 0}, +{810, 3238729605u, 245005088u, 3212836863u, 0, TANHF_TOLERANCE, 0}, +{811, 3317196817u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{812, 3374748510u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{813, 3345634950u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{814, 3189860276u, 0u, 3189773537u, 0, TANHF_TOLERANCE, 0}, +{815, 887311687u, 9077u, 887311687u, 0, TANHF_TOLERANCE, 0}, +{816, 3396917283u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{817, 3317032737u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{818, 1200051436u, 3555u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{819, 3105291012u, 45279u, 3105291012u, 0, TANHF_TOLERANCE, 0}, +{820, 1306520561u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{821, 1314936356u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{822, 3475052219u, 71851496u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{823, 3085636260u, 33u, 3085636260u, 0, TANHF_TOLERANCE, 0}, +{824, 3393227708u, 4294967164u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{825, 3182540197u, 0u, 3182511055u, 0, TANHF_TOLERANCE, 0}, +{826, 3349005404u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{827, 3154720153u, 4090490144u, 3154719943u, 0, TANHF_TOLERANCE, 0}, +{828, 1262863321u, 345111u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{829, 882902102u, 512593u, 882902102u, 0, TANHF_TOLERANCE, 0}, +{830, 1053387478u, 0u, 1052746205u, 0, TANHF_TOLERANCE, 0}, +{831, 3387653691u, 4294896063u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{832, 3136364836u, 0u, 3136364818u, 0, TANHF_TOLERANCE, 0}, +{833, 1338680611u, 4126u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{834, 1112891928u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{835, 893449284u, 0u, 893449284u, 0, TANHF_TOLERANCE, 0}, +{836, 892311459u, 14u, 892311459u, 0, TANHF_TOLERANCE, 0}, +{837, 3105373037u, 4294967280u, 3105373037u, 0, TANHF_TOLERANCE, 0}, +{838, 1190105283u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{839, 1011225926u, 14129u, 1011225294u, 0, TANHF_TOLERANCE, 0}, +{840, 1043025031u, 0u, 1042921472u, 0, TANHF_TOLERANCE, 0}, +{841, 3410531037u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{842, 3125834184u, 0u, 3125834181u, 0, TANHF_TOLERANCE, 0}, +{843, 902318189u, 0u, 902318189u, 0, TANHF_TOLERANCE, 0}, +{844, 3213624815u, 0u, 3209453041u, 0, TANHF_TOLERANCE, 0}, +{845, 1120888322u, 5u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{846, 1315217243u, 4291026624u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{847, 3137758475u, 0u, 3137758463u, 0, TANHF_TOLERANCE, 0}, +{848, 1040617590u, 0u, 1040567175u, 0, TANHF_TOLERANCE, 0}, +{849, 955384253u, 4294910624u, 955384253u, 0, TANHF_TOLERANCE, 0}, +{850, 3061417900u, 7119u, 3061417900u, 0, TANHF_TOLERANCE, 0}, +{851, 904255535u, 0u, 904255535u, 0, TANHF_TOLERANCE, 0}, +{852, 1022984119u, 0u, 1022979065u, 0, TANHF_TOLERANCE, 0}, +{853, 997362368u, 0u, 997362295u, 0, TANHF_TOLERANCE, 0}, +{854, 900933520u, 19u, 900933520u, 0, TANHF_TOLERANCE, 0}, +{855, 1168623062u, 661u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{856, 878737490u, 4294967181u, 878737490u, 0, TANHF_TOLERANCE, 0}, +{857, 1039827284u, 1u, 1039745896u, 0, TANHF_TOLERANCE, 0}, +{858, 1021564080u, 0u, 1021560232u, 0, TANHF_TOLERANCE, 0}, +{859, 3458669745u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{860, 3327516316u, 4286775627u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{861, 1040711112u, 4294967293u, 1040659084u, 0, TANHF_TOLERANCE, 0}, +{862, 1134528351u, 4294638880u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{863, 3039884464u, 6340u, 3039884464u, 0, TANHF_TOLERANCE, 0}, +{864, 3414352838u, 4294876517u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{865, 1133689539u, 1u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{866, 3455688478u, 4294945415u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{867, 1137634874u, 395u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{868, 3415502662u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{869, 954999730u, 0u, 954999730u, 0, TANHF_TOLERANCE, 0}, +{870, 1066157309u, 4294967285u, 1061981085u, 0, TANHF_TOLERANCE, 0}, +{871, 3436353675u, 8741u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{872, 940437609u, 0u, 940437609u, 0, TANHF_TOLERANCE, 0}, +{873, 3108347547u, 4203356328u, 3108347547u, 0, TANHF_TOLERANCE, 0}, +{874, 3064200154u, 0u, 3064200154u, 0, TANHF_TOLERANCE, 0}, +{875, 1023889593u, 0u, 1023886368u, 0, TANHF_TOLERANCE, 0}, +{876, 3272661536u, 3393767296u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{877, 1170245333u, 1083705u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{878, 1219052056u, 4294526211u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{879, 3318983619u, 4294967246u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{880, 3372118621u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{881, 3146190320u, 0u, 3146190270u, 0, TANHF_TOLERANCE, 0}, +{882, 1299683827u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{883, 3190796331u, 1457792256u, 3190684670u, 0, TANHF_TOLERANCE, 0}, +{884, 3086068902u, 2772570624u, 3086068902u, 0, TANHF_TOLERANCE, 0}, +{885, 3064155399u, 0u, 3064155399u, 0, TANHF_TOLERANCE, 0}, +{886, 3040314717u, 1u, 3040314717u, 0, TANHF_TOLERANCE, 0}, +{887, 3257224022u, 4294737239u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{888, 1229268598u, 1u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{889, 3184078812u, 0u, 3184036562u, 0, TANHF_TOLERANCE, 0}, +{890, 1086717248u, 4256439624u, 1065353074u, 0, TANHF_TOLERANCE, 0}, +{891, 3434884607u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{892, 3464955606u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{893, 1025278524u, 0u, 1025273535u, 0, TANHF_TOLERANCE, 0}, +{894, 1242829722u, 4294967290u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{895, 3075149137u, 76u, 3075149137u, 0, TANHF_TOLERANCE, 0}, +{896, 1200927971u, 1093714048u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{897, 3326858092u, 3870213632u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{898, 1246019790u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{899, 3184801644u, 424u, 3184752079u, 0, TANHF_TOLERANCE, 0}, +{900, 1136052740u, 4294967282u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{901, 1069009211u, 0u, 1063555619u, 0, TANHF_TOLERANCE, 0}, +{902, 1015670780u, 20u, 1015669926u, 0, TANHF_TOLERANCE, 0}, +{903, 1012543234u, 70u, 1012542389u, 0, TANHF_TOLERANCE, 0}, +{904, 3316611992u, 4291436324u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{905, 1087942795u, 4294961657u, 1065353172u, 0, TANHF_TOLERANCE, 0}, +{906, 3426365713u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{907, 3066654389u, 4087070784u, 3066654389u, 0, TANHF_TOLERANCE, 0}, +{908, 3295326432u, 842363840u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{909, 3318835308u, 4294967077u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{910, 3283555717u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{911, 3381255420u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{912, 3040485181u, 4294241104u, 3040485181u, 0, TANHF_TOLERANCE, 0}, +{913, 3388772093u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{914, 954670189u, 760u, 954670189u, 0, TANHF_TOLERANCE, 0}, +{915, 1319200415u, 4293050361u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{916, 1279324488u, 4294967293u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{917, 3217795424u, 0u, 3211500035u, 0, TANHF_TOLERANCE, 0}, +{918, 3455131757u, 10314665u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{919, 1246947517u, 6u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{920, 3396723577u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{921, 3433761025u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{922, 3201187455u, 0u, 3200500904u, 0, TANHF_TOLERANCE, 0}, +{923, 1173247961u, 32661u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{924, 3037297123u, 4294904338u, 3037297123u, 0, TANHF_TOLERANCE, 0}, +{925, 3248534678u, 1927801856u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{926, 3083019343u, 0u, 3083019343u, 0, TANHF_TOLERANCE, 0}, +{927, 3042018375u, 0u, 3042018375u, 0, TANHF_TOLERANCE, 0}, +{928, 1082862511u, 0u, 1065347617u, 0, TANHF_TOLERANCE, 0}, +{929, 3157626955u, 3075906560u, 3157626468u, 0, TANHF_TOLERANCE, 0}, +{930, 1341821683u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{931, 881101379u, 32095u, 881101379u, 0, TANHF_TOLERANCE, 0}, +{932, 1079061705u, 0u, 1065304658u, 0, TANHF_TOLERANCE, 0}, +{933, 3182695954u, 4294967257u, 3182665629u, 0, TANHF_TOLERANCE, 0}, +{934, 1105291533u, 3424974848u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{935, 1016023520u, 4294967293u, 1016022562u, 0, TANHF_TOLERANCE, 0}, +{936, 3370691006u, 198615840u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{937, 1156767169u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{938, 3077020499u, 0u, 3077020499u, 0, TANHF_TOLERANCE, 0}, +{939, 1104284039u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{940, 3335212901u, 1662125568u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{941, 1093697541u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{942, 3266691185u, 2645u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{943, 3179003144u, 37u, 3178982403u, 0, TANHF_TOLERANCE, 0}, +{944, 1094115255u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{945, 3424086808u, 4294967244u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{946, 3353608773u, 305u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{947, 973664327u, 1394344832u, 973664326u, 0, TANHF_TOLERANCE, 0}, +{948, 882878091u, 0u, 882878091u, 0, TANHF_TOLERANCE, 0}, +{949, 1098662266u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{950, 927582555u, 0u, 927582555u, 0, TANHF_TOLERANCE, 0}, +{951, 3111440310u, 0u, 3111440310u, 0, TANHF_TOLERANCE, 0}, +{952, 3476083859u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{953, 3038754840u, 0u, 3038754840u, 0, TANHF_TOLERANCE, 0}, +{954, 979878744u, 1008405u, 979878740u, 0, TANHF_TOLERANCE, 0}, +{955, 3464546616u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{956, 1002542205u, 0u, 1002542057u, 0, TANHF_TOLERANCE, 0}, +{957, 3443552129u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{958, 1287620154u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{959, 946058434u, 4207447u, 946058434u, 0, TANHF_TOLERANCE, 0}, +{960, 3073260205u, 0u, 3073260205u, 0, TANHF_TOLERANCE, 0}, +{961, 1245702957u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{962, 989655126u, 528989952u, 989655105u, 0, TANHF_TOLERANCE, 0}, +{963, 1002715618u, 32425u, 1002715464u, 0, TANHF_TOLERANCE, 0}, +{964, 3087802274u, 0u, 3087802274u, 0, TANHF_TOLERANCE, 0}, +{965, 1000863905u, 54834u, 1000863809u, 0, TANHF_TOLERANCE, 0}, +{966, 3415763001u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{967, 3283471961u, 10190634u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{968, 3311210827u, 36713u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{969, 3026311911u, 0u, 3026311911u, 0, TANHF_TOLERANCE, 0}, +{970, 1198307901u, 68u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{971, 1288901567u, 206618288u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{972, 922255363u, 0u, 922255363u, 0, TANHF_TOLERANCE, 0}, +{973, 1113104661u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{974, 1136714348u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{975, 948856035u, 0u, 948856035u, 0, TANHF_TOLERANCE, 0}, +{976, 1062512367u, 4294967293u, 1059998546u, 0, TANHF_TOLERANCE, 0}, +{977, 3486907092u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{978, 1162027071u, 4294964303u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{979, 1034561811u, 0u, 1034536221u, 0, TANHF_TOLERANCE, 0}, +{980, 3271615417u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{981, 1042014529u, 869u, 1041936344u, 0, TANHF_TOLERANCE, 0}, +{982, 1177157787u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{983, 3196144817u, 0u, 3195878666u, 0, TANHF_TOLERANCE, 0}, +{984, 3432084552u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{985, 1309658335u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{986, 1226494979u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{987, 3100289712u, 3743522688u, 3100289712u, 0, TANHF_TOLERANCE, 0}, +{988, 3375507013u, 462886112u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{989, 3460699001u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{990, 3079231719u, 0u, 3079231719u, 0, TANHF_TOLERANCE, 0}, +{991, 3093951884u, 0u, 3093951884u, 0, TANHF_TOLERANCE, 0}, +{992, 3468023178u, 156157u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{993, 1204196034u, 4294966040u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{994, 3459877411u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{995, 909696559u, 3378u, 909696559u, 0, TANHF_TOLERANCE, 0}, +{996, 1161439847u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{997, 908663107u, 0u, 908663107u, 0, TANHF_TOLERANCE, 0}, +{998, 1055319316u, 4294967238u, 1054370620u, 0, TANHF_TOLERANCE, 0}, +{999, 1084378658u, 0u, 1065351897u, 0, TANHF_TOLERANCE, 0}, +{1000, 3053887750u, 4294922339u, 3053887750u, 0, TANHF_TOLERANCE, 0}, +{1001, 3022828828u, 0u, 3022828828u, 0, TANHF_TOLERANCE, 0}, +{1002, 1226473697u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1003, 1123114742u, 841711u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1004, 1258114435u, 130141336u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1005, 3468040845u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1006, 1178825761u, 54u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1007, 3059266302u, 0u, 3059266302u, 0, TANHF_TOLERANCE, 0}, +{1008, 3223384012u, 225u, 3212618726u, 0, TANHF_TOLERANCE, 0}, +{1009, 1019964626u, 1299605u, 1019961886u, 0, TANHF_TOLERANCE, 0}, +{1010, 3445262427u, 3129568512u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1011, 1125653081u, 129823u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1012, 3337652712u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1013, 1184753508u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1014, 996404791u, 4294853343u, 996404731u, 0, TANHF_TOLERANCE, 0}, +{1015, 1188439315u, 55u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1016, 906557513u, 0u, 906557513u, 0, TANHF_TOLERANCE, 0}, +{1017, 916831283u, 0u, 916831283u, 0, TANHF_TOLERANCE, 0}, +{1018, 996786317u, 0u, 996786252u, 0, TANHF_TOLERANCE, 0}, +{1019, 3461635065u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1020, 1188167943u, 74707u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1021, 3036502395u, 7309u, 3036502395u, 0, TANHF_TOLERANCE, 0}, +{1022, 891257783u, 18537700u, 891257783u, 0, TANHF_TOLERANCE, 0}, +{1023, 3290079438u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1024, 3350690327u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1025, 1102061604u, 4253821380u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1026, 1282351521u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1027, 3458861065u, 4292002951u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1028, 3095256878u, 0u, 3095256878u, 0, TANHF_TOLERANCE, 0}, +{1029, 3163373610u, 0u, 3163372693u, 0, TANHF_TOLERANCE, 0}, +{1030, 3228793330u, 0u, 3212820224u, 0, TANHF_TOLERANCE, 0}, +{1031, 3422194733u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1032, 3083885296u, 0u, 3083885296u, 0, TANHF_TOLERANCE, 0}, +{1033, 1261940623u, 4288291120u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1034, 3400603081u, 4294967290u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1035, 1219411812u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1036, 3094833770u, 0u, 3094833770u, 0, TANHF_TOLERANCE, 0}, +{1037, 3139250800u, 0u, 3139250780u, 0, TANHF_TOLERANCE, 0}, +{1038, 886201503u, 4294967150u, 886201503u, 0, TANHF_TOLERANCE, 0}, +{1039, 3297366026u, 7u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1040, 1218488455u, 4294964141u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1041, 3040358923u, 0u, 3040358923u, 0, TANHF_TOLERANCE, 0}, +{1042, 1283938137u, 53086u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1043, 3182551696u, 0u, 3182522467u, 0, TANHF_TOLERANCE, 0}, +{1044, 1317098613u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1045, 3116209179u, 4294965434u, 3116209178u, 0, TANHF_TOLERANCE, 0}, +{1046, 3431703657u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1047, 3239728775u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1048, 3207141672u, 0u, 3205769004u, 0, TANHF_TOLERANCE, 0}, +{1049, 3154378805u, 0u, 3154378618u, 0, TANHF_TOLERANCE, 0}, +{1050, 3069658155u, 0u, 3069658155u, 0, TANHF_TOLERANCE, 0}, +{1051, 3313160088u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1052, 3207056527u, 4293469023u, 3205712210u, 0, TANHF_TOLERANCE, 0}, +{1053, 1284174954u, 4180334232u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1054, 3156081645u, 4294964338u, 3156081324u, 0, TANHF_TOLERANCE, 0}, +{1055, 1063693032u, 0u, 1060602017u, 0, TANHF_TOLERANCE, 0}, +{1056, 3036026175u, 4845007u, 3036026175u, 0, TANHF_TOLERANCE, 0}, +{1057, 1102631663u, 4290881696u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1058, 968803479u, 0u, 968803478u, 0, TANHF_TOLERANCE, 0}, +{1059, 3273080388u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1060, 1172529774u, 4294966405u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1061, 1306695905u, 147733664u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1062, 1003649752u, 338518u, 1003649562u, 0, TANHF_TOLERANCE, 0}, +{1063, 1078478376u, 2364151808u, 1065289116u, 0, TANHF_TOLERANCE, 0}, +{1064, 3158855023u, 0u, 3158854369u, 0, TANHF_TOLERANCE, 0}, +{1065, 1165177679u, 4294967097u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1066, 3403009513u, 4293749042u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1067, 952348506u, 4294108410u, 952348506u, 0, TANHF_TOLERANCE, 0}, +{1068, 1222777442u, 153u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1069, 1325324763u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1070, 3363524213u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1071, 1158950321u, 1u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1072, 903129873u, 4272788450u, 903129873u, 0, TANHF_TOLERANCE, 0}, +{1073, 3078339944u, 0u, 3078339944u, 0, TANHF_TOLERANCE, 0}, +{1074, 1208345407u, 6333643u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1075, 1258634105u, 3575206u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1076, 1248478509u, 102613680u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1077, 1153863988u, 4229464460u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1078, 1235620969u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1079, 1097120930u, 4294967294u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1080, 3469778622u, 70286u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1081, 1147712200u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1082, 1124721745u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1083, 3261744304u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1084, 1064922416u, 1518435840u, 1061168937u, 0, TANHF_TOLERANCE, 0}, +{1085, 3303160152u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1086, 1315090496u, 4294967183u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1087, 3230403187u, 1820050432u, 3212831561u, 0, TANHF_TOLERANCE, 0}, +{1088, 1335399673u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1089, 1072458508u, 4294404660u, 1064538920u, 0, TANHF_TOLERANCE, 0}, +{1090, 3303015249u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1091, 3252139741u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1092, 3468519966u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1093, 1006231203u, 0u, 1006230886u, 0, TANHF_TOLERANCE, 0}, +{1094, 951554138u, 0u, 951554138u, 0, TANHF_TOLERANCE, 0}, +{1095, 942046828u, 0u, 942046828u, 0, TANHF_TOLERANCE, 0}, +{1096, 3319723279u, 4277552160u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1097, 3255104167u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1098, 1155477903u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1099, 3273889176u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1100, 3237813668u, 4133749200u, 3212836859u, 0, TANHF_TOLERANCE, 0}, +{1101, 1228207362u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1102, 975349337u, 748694784u, 975349336u, 0, TANHF_TOLERANCE, 0}, +{1103, 1290175785u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1104, 981908840u, 4294962938u, 981908837u, 0, TANHF_TOLERANCE, 0}, +{1105, 941187647u, 33u, 941187647u, 0, TANHF_TOLERANCE, 0}, +{1106, 1214223128u, 4294967293u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1107, 3422922584u, 6u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1108, 1315857601u, 1055172096u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1109, 3453226030u, 4294967291u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1110, 1078359574u, 0u, 1065285387u, 0, TANHF_TOLERANCE, 0}, +{1111, 1029557624u, 4294965511u, 1029543432u, 0, TANHF_TOLERANCE, 0}, +{1112, 1207675424u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1113, 1028355074u, 4113313408u, 1028344119u, 0, TANHF_TOLERANCE, 0}, +{1114, 3119299090u, 24787u, 3119299089u, 0, TANHF_TOLERANCE, 0}, +{1115, 1248421894u, 4294582111u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1116, 3353251994u, 12u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1117, 876926659u, 4294966792u, 876926659u, 0, TANHF_TOLERANCE, 0}, +{1118, 1076752219u, 0u, 1065207581u, 0, TANHF_TOLERANCE, 0}, +{1119, 3388531942u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1120, 1273395082u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1121, 3385588183u, 4294967251u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1122, 3192315328u, 4294966714u, 3192153914u, 0, TANHF_TOLERANCE, 0}, +{1123, 3441804648u, 4294967121u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1124, 3392827417u, 45125368u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1125, 1161241793u, 2814016256u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1126, 3034494183u, 0u, 3034494183u, 0, TANHF_TOLERANCE, 0}, +{1127, 1171318485u, 4294306215u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1128, 3047748143u, 0u, 3047748143u, 0, TANHF_TOLERANCE, 0}, +{1129, 1001216371u, 0u, 1001216265u, 0, TANHF_TOLERANCE, 0}, +{1130, 912515889u, 2u, 912515889u, 0, TANHF_TOLERANCE, 0}, +{1131, 3391452505u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1132, 3249603369u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1133, 1220264047u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1134, 3169816394u, 0u, 3169811920u, 0, TANHF_TOLERANCE, 0}, +{1135, 3098997418u, 0u, 3098997418u, 0, TANHF_TOLERANCE, 0}, +{1136, 3282212423u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1137, 3352293320u, 4294967278u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1138, 3296358441u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1139, 1197828352u, 4294967281u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1140, 3340510371u, 0u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1141, 1127109339u, 4294570975u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1142, 909467381u, 1001724u, 909467381u, 0, TANHF_TOLERANCE, 0}, +{1143, 1200599955u, 0u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1144, 962230977u, 0u, 962230977u, 0, TANHF_TOLERANCE, 0}, +{1145, 3192887808u, 0u, 3192704420u, 0, TANHF_TOLERANCE, 0}, +{1146, 3237183876u, 0u, 3212836856u, 0, TANHF_TOLERANCE, 0}, +{1147, 939285924u, 0u, 939285924u, 0, TANHF_TOLERANCE, 0}, +{1148, 944050180u, 3871652128u, 944050180u, 0, TANHF_TOLERANCE, 0}, +{1149, 3058135703u, 0u, 3058135703u, 0, TANHF_TOLERANCE, 0}, +{1150, 3480592662u, 4294967238u, 3212836864u, 0, TANHF_TOLERANCE, 0}, +{1151, 3061939312u, 4294967125u, 3061939312u, 0, TANHF_TOLERANCE, 0}, +{1152, 1003299981u, 0u, 1003299805u, 0, TANHF_TOLERANCE, 0}, +{1153, 1155775526u, 7150230u, 1065353216u, 0, TANHF_TOLERANCE, 0}, +{1154, 1234491880u, 4283784819u, 1065353216u, 0, TANHF_TOLERANCE, 0} + +// AUTOMATICALLY GENERATED VECTORS STOP + +}; + +#endif // CYGONCE_LIBM_SCABNF_H multiple inclusion protection + +// EOF tanhf.h diff --git a/packages/language/c/libm/current/tests/vectors/vector_support_float.h b/packages/language/c/libm/current/tests/vectors/vector_support_float.h new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/tests/vectors/vector_support_float.h @@ -0,0 +1,550 @@ +#ifndef CYGONCE_LIBM_VECTOR_SUPPORT_H +#define CYGONCE_LIBM_VECTOR_SUPPORT_H + +//======================================================================== +// +// vector_support_float.h +// +// Support for testing of the math library using test vectors +// +//======================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 2012, 2013 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos 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 General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//======================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: jlarmour, visar, ilijak +// Date: 1999-01-21 +// Purpose: +// Description: +// Usage: #include "vectors/vector_support_float.h" +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +// CONFIGURATION + +#include // Configuration header +#include // CYGINT_ISO_MAIN_STARTUP + +// INCLUDES + +#include // Common type definitions and support +#include // Test infrastructure +#include // Header for this package +#include // Cyg_libm_ieee_double_shape_type +#include + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY +# include // For Cyg_ErrNo +#else +# ifndef EDOM +# define EDOM 33 +# endif +#endif + +// CONSTANTS + +#define PROBLEM_THRESHOLD 10 // Number of test vectors allowed to fail + // before we give up completely + +// HOW TO START TESTS + +#if CYGINT_ISO_MAIN_STARTUP + +# define START_TEST( test ) test(0) + +#elif defined(CYGFUN_KERNEL_API_C) + +# include +# include + +# define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL + +static cyg_uint8 stack[STACKSIZE]; +static cyg_handle_t thr_handle; +static cyg_thread thr; + +# define START_TEST( test ) CYG_MACRO_START \ + cyg_thread_create( 4, &test, (cyg_addrword_t)0, "test", \ + &stack[0], STACKSIZE, &thr_handle, &thr ); \ + cyg_thread_resume( thr_handle ); \ + cyg_scheduler_start(); \ + CYG_MACRO_END + +externC int main( int, char ** ); + +externC void +cyg_user_start( void ) +{ + (void) main(0, NULL); +} // cyg_user_start() + +#else // !defined(CYGFUN_KERNEL_API_C) + +externC int main( int, char ** ); + +externC void +cyg_user_start( void ) +{ + (void) main(0, NULL); +} // cyg_user_start() + +# define START_TEST( test ) test(0) + +#endif + +// TYPE DEFINITIONS + + +typedef enum { + CYG_LIBM_TEST_VEC_NONE, // this indicates whether the "double" + CYG_LIBM_TEST_VEC_INT, // is being used to store a double, an + CYG_LIBM_TEST_VEC_FLOAT, + CYG_LIBM_TEST_VEC_INT_P, // int pointer + CYG_LIBM_TEST_VEC_FLOAT_P +} Cyg_libm_test_arg_type; + + +// Define a type for a test vector record +// Define a floattype for a test vector record + +typedef struct { + cyg_ucount32 vector_num; // id number of this test vector record + + // if any of the following arguments are ints rather than doubles, then + // use the lsw part to store it + + cyg_uint32 arg1; // first argument + cyg_uint32 arg2; // second argument + cyg_uint32 result; // expected return value + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY + Cyg_ErrNo errno_val; // expected value of errno. 0==unchanged +#else + cyg_uint32 errno_val; +#endif + + float tolerance; // relative amount that it is allowed + // to vary. i.e. the value should be + // plus or minus result*tolerance + + int matherr_type; // if testing the matherr() function, + // what type should the exception be +} Cyg_libm_test_float_vec_t; + +// types to cope with the different forms of function to be called by the +// test vector + +typedef float (*fffn) ( float, float ); +typedef float (*fifn) ( float, int ); +typedef float (*ffn) ( float ); +typedef float (*ffpfn) ( float, float *); +typedef float (*fipfn) ( float, int *); +typedef float (*iffn) ( int, float ); +typedef int (*i_ffn) (float); + +// STATIC FUNCTIONS + +// equivalent of abs() for doubles. We want to be independent of fabs() + +static float +my_abs_f( float x ) +{ + Cyg_libm_ieee_float_shape_type t; + + t.value = x; + + t.number.sign = 0; + + return t.value; +} // my_abs_f() + + +static cyg_bool +checkErrorAcceptableFloat( Cyg_libm_ieee_float_shape_type is, + Cyg_libm_ieee_float_shape_type shouldbe, + float tolerance) // _relative_ amount it can vary +{ + Cyg_libm_ieee_float_shape_type temp_flt; + + // first do a short-circuit check if its identical + if ( (is.asi32 == shouldbe.asi32) ) + return false; + + // now check special cases + + // +0 == -0 + if ( ((is.asi32 & 0x7fffffff) == 0) && + ((shouldbe.asi32 & 0x7fffffff) == 0) ) + return false; + + // +-infinity == +-infinity + if ((is.number.fraction0 == 0) && (shouldbe.number.fraction0 == 0) && + (is.number.exponent == 255) && (shouldbe.number.exponent == 255)) + { + return (is.number.sign != shouldbe.number.sign); + } // if + + // both NaN. Assumes isnan works, but its pretty safe + if ( isnanf(is.value) && isnanf(shouldbe.value) ) + return false; + else if (isnanf(is.value) || isnanf(shouldbe.value) ) + return true; + + // check same sign. Even around small values close to 0 we would want + // it to be on the right _side_ of 0 + if ( is.number.sign != shouldbe.number.sign ) + return true; + + // okay, now work out what tolerance means for us + + // find out what the difference is in the first place + temp_flt.value = my_abs_f( shouldbe.value - is.value ); + + // Check "both ways round" to deal with both under and overflow cases + if ( ((temp_flt.value / tolerance) < my_abs_f(shouldbe.value)) || + (temp_flt.value < (my_abs_f(shouldbe.value) * tolerance)) ) + return false; + else + return true; // so its not close enough + +} // checkErrorAcceptableFloat() + + +static cyg_bool +doTestVecFloat( CYG_ADDRESS func_ptr, + Cyg_libm_test_arg_type arg1_type, + Cyg_libm_test_arg_type arg2_type, + Cyg_libm_test_arg_type result_type, + const Cyg_libm_test_float_vec_t *vectors, + cyg_ucount32 num_vectors ) +{ + cyg_ucount32 problems=0; + cyg_ucount32 i; + Cyg_libm_ieee_float_shape_type arg1, arg2, result_wanted, ret; + cyg_ucount32 alive_count = num_vectors / 10; + + if (arg1_type == CYG_LIBM_TEST_VEC_INT) { + iffn fn = (iffn) func_ptr; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + arg2.asi32 = vectors[i].arg2; + + result_wanted.asi32 = vectors[i].result; + + ret.value = (*fn)( (int)arg1.value, arg2.value ); + + if ((vectors[i].errno_val) != 0) { + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY + // In IEEE-mode we can't check the answer if this + // is an error case + + if ((cyg_libm_get_compat_mode() != + CYGNUM_LIBM_COMPAT_IEEE) && + (errno != vectors[i].errno_val)) { + + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "error not set correctly"); + + } // if +#endif + + continue; // no point checking value in an error case + } // if + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + } // for + if (problems != 0) + return false; + else + return true; + } + if ((arg1_type != CYG_LIBM_TEST_VEC_FLOAT) || + (result_type != CYG_LIBM_TEST_VEC_FLOAT && + result_type != CYG_LIBM_TEST_VEC_INT)) { + CYG_TEST_FAIL("Test vector arguments are not correct type!"); + return false; + } // if + + switch (arg2_type) { + case CYG_LIBM_TEST_VEC_FLOAT: + + { + fffn fn = (fffn) func_ptr; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + arg2.asi32 = vectors[i].arg2; + + result_wanted.asi32 = vectors[i].result; + + ret.value = (*fn)( arg1.value, arg2.value ); + + if ((vectors[i].errno_val) != 0) { + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY + // In IEEE-mode we can't check the answer if this + // is an error case + + if ((cyg_libm_get_compat_mode() != + CYGNUM_LIBM_COMPAT_IEEE) && + (errno != vectors[i].errno_val)) { + + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "error not set correctly"); + + } // if +#endif + + continue; // no point checking value in an error case + } // if + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + } // for + + } // compound + + break; + + case CYG_LIBM_TEST_VEC_INT: + + { + fifn fn = (fifn) func_ptr; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + + result_wanted.asi32 = vectors[i].result; + + ret.value = (*fn)( arg1.value, vectors[i].arg2 ); + + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + } // for + + } // compound + + break; + + case CYG_LIBM_TEST_VEC_INT_P: + + { + fipfn fn = (fipfn) func_ptr; + int my_int; + Cyg_libm_ieee_float_shape_type my_flt1, my_flt2; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + + result_wanted.asi32 = vectors[i].result; + + ret.value = (*fn)( arg1.value, &my_int ); + + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + + my_flt1.value = (float) my_int; + my_flt2.value = (float) (signed)vectors[i].arg2; + + if (checkErrorAcceptableFloat( my_flt1, my_flt2, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Integer result out of tolerance"); + } // if + + + } // for + + } // compound + + break; + + case CYG_LIBM_TEST_VEC_FLOAT_P: + + { + ffpfn fn = (ffpfn) func_ptr; + Cyg_libm_ieee_float_shape_type my_flt1; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + arg2.asi32 = vectors[i].arg2; + + result_wanted.asi32 = vectors[i].result; + + ret.value = (*fn)( arg1.value, &my_flt1.value ); + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + + if (checkErrorAcceptableFloat( my_flt1, arg2, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Returned float result out of " + "tolerance"); + } // if + + + } // for + + } // compound + + break; + + case CYG_LIBM_TEST_VEC_NONE: + + { + if (result_type == CYG_LIBM_TEST_VEC_INT) { + i_ffn fn = (i_ffn) func_ptr; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + + result_wanted.asi32 = vectors[i].result; + ret.value = (*fn)( arg1.value ); + /* Get a 32 bit int from a float. */ + + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + } // for + } + else + { + ffn fn = (ffn) func_ptr; + + for (i=0; + (i < num_vectors) && (problems < PROBLEM_THRESHOLD); + i++) { + + if (0 == i % alive_count) + CYG_TEST_STILL_ALIVE(i, "Still crunching, please wait..."); + + arg1.asi32 = vectors[i].arg1; + + result_wanted.asi32 = vectors[i].result; + ret.value = (*fn)( arg1.value ); + /* Get a 32 bit int from a float. */ + + if (checkErrorAcceptableFloat( ret, result_wanted, + vectors[i].tolerance) ) { + ++problems; + diag_printf("Vector #%d\n", i+1); + CYG_TEST_FAIL( "Result out of tolerance"); + } // if + } // for + } + } // compound + + break; + + default: + CYG_TEST_FAIL("Second argument of unknown type!"); + return false; + } // switch + + if (problems != 0) + return false; + else + return true; + +} // doTestVecFloat() + +#endif // CYGONCE_LIBM_VECTOR_SUPPORT_H multiple inclusion protection + +// EOF vector_support_float.h diff --git a/packages/language/cxx/ustl/current/ChangeLog b/packages/language/cxx/ustl/current/ChangeLog --- a/packages/language/cxx/ustl/current/ChangeLog +++ b/packages/language/cxx/ustl/current/ChangeLog @@ -1,3 +1,35 @@ +2013-02-18 John Dallaway + + * src/fstream.cpp: Fix processing of fstream openmode. Patch + from uSTL HEAD. + * cdl/ustl.cdl: Build interactive tests under control of a CDL + option. Build ROM filesystem for bvt25 test under control of a + CDL option. + * tests/bvt25.cpp: Use ROM filesystem if available. + * tests/bvt05.cpp, tests/bvt16.cpp: Reduce data structure sizes + for embedded use. + +2012-03-24 Sergei Gavrikov + + * include/*: + * src/*: + * tests/*: + * HISTORY: + * LICENSE: Updated to uSTL 1.6 sources. + +2011-11-21 John Dallaway + + * include/ustl/ustring.h: Fix incorrect behaviour of iat when passed + offset+npos. Reported by Frank Pagliughi. Patch from uSTL HEAD. + [ Bugzilla 1001390 ] + +2010-06-25 Simon Kallweit + + * include/*: + * tests/*: + * HISTORY: + * LICENSE: Updated to uSTL 1.4 sources. + 2009-10-06 Uwe Kindler * doc/ustl.sgml: Removed cout.flush() from example and from note. @@ -35,7 +67,7 @@ 2009-08-20 Uwe Kindler +Copyright (c) 2005 by Mike Sharov Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/language/cxx/ustl/current/cdl/ustl.cdl b/packages/language/cxx/ustl/current/cdl/ustl.cdl --- a/packages/language/cxx/ustl/current/cdl/ustl.cdl +++ b/packages/language/cxx/ustl/current/cdl/ustl.cdl @@ -8,7 +8,7 @@ ## ####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 2009 Free Software Foundation, Inc. +## Copyright (C) 2009, 2013 Free Software Foundation, Inc. ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -40,7 +40,7 @@ ######DESCRIPTIONBEGIN#### # # Author(s): Uwe Kindler -# Contributors: +# Contributors: jld # Date: 2009-07-28 # #####DESCRIPTIONEND#### @@ -183,11 +183,62 @@ cdl_package CYGPKG_USTL { the set of global flags if present." } + cdl_option CYGIMP_USTL_TESTS_BVT25_ROMFS { + display "Build ROM filesystem for bvt25 test" + flavor bool + active_if CYGVAR_USTL_CIN_COUT_CERR + requires CYGPKG_FS_ROM + requires CYGBLD_FS_ROMFS_MK_ROMFS + default_value CYGBLD_FS_ROMFS_MK_ROMFS + description " + Enable this option to build a ROM filesystem for use + by the bvt25 test. If you disable this option, you will + need to provide an alternative filesystem containing + the file \"bvt25.std\"." + make { + /include/cyg/ustl/bvt25fs_be.h : /tests/bvt25.std + @mkdir -p bvt25_be + @cp $< bvt25_be/$(/include/cyg/ustl/bvt25fs_le.h : /tests/bvt25.std + @mkdir -p bvt25_le + @cp $< bvt25_le/$( +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USTL_H_6A5A10410D2CD7FC2D78FE470F045EB7 #define USTL_H_6A5A10410D2CD7FC2D78FE470F045EB7 +#include + #include "ustl/uspecial.h" #include "ustl/umap.h" #include "ustl/umultimap.h" diff --git a/packages/language/cxx/ustl/current/include/ustl/bktrace.h b/packages/language/cxx/ustl/current/include/ustl/bktrace.h --- a/packages/language/cxx/ustl/current/include/ustl/bktrace.h +++ b/packages/language/cxx/ustl/current/include/ustl/bktrace.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2006-2009 by Mike Sharov +// Copyright (c) 2006 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef BKTRACE_H_63ABB1E4388CEDD975DBE58B57DE474F @@ -47,6 +47,4 @@ private: } // namespace ustl -ALIGNOF(ustl::CBacktrace, sizeof(void*)) - #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/cmemlink.h b/packages/language/cxx/ustl/current/include/ustl/cmemlink.h --- a/packages/language/cxx/ustl/current/include/ustl/cmemlink.h +++ b/packages/language/cxx/ustl/current/include/ustl/cmemlink.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef CMEMLINK_H_7CFAB32C5C6732ED29B34EF00EA40A12 diff --git a/packages/language/cxx/ustl/current/include/ustl/fstream.h b/packages/language/cxx/ustl/current/include/ustl/fstream.h --- a/packages/language/cxx/ustl/current/include/ustl/fstream.h +++ b/packages/language/cxx/ustl/current/include/ustl/fstream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef FSTREAM_H_056E10F70EAD416443E3B36A2D6B5FA3 diff --git a/packages/language/cxx/ustl/current/include/ustl/memblock.h b/packages/language/cxx/ustl/current/include/ustl/memblock.h --- a/packages/language/cxx/ustl/current/include/ustl/memblock.h +++ b/packages/language/cxx/ustl/current/include/ustl/memblock.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 Mike Sharov // This file is free software, distributed under the MIT License. #ifndef MEMBLOCK_H_7ED63A891164CC43578E63664D52A196 diff --git a/packages/language/cxx/ustl/current/include/ustl/memlink.h b/packages/language/cxx/ustl/current/include/ustl/memlink.h --- a/packages/language/cxx/ustl/current/include/ustl/memlink.h +++ b/packages/language/cxx/ustl/current/include/ustl/memlink.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef MEMLINK_H_798D25827C8E322D2D7E734B169FF5FC @@ -64,9 +64,6 @@ public: inline void link (void* first, void* last) { link (first, distance (first, last)); } inline void relink (const void* p, size_type n) { cmemlink::relink (p, n); } inline void relink (void* p, size_type n) { cmemlink::relink (p, n); } - inline void copy (const cmemlink& l) { copy (begin(), l.cdata(), l.size()); } - inline void copy (const void* p, size_type n) { copy (begin(), p, n); } - void copy (iterator offset, const void* p, size_type n); inline void swap (memlink& l) { cmemlink::swap (l); } void fill (iterator start, const void* p, size_type elsize, size_type elCount = 1); inline void insert (iterator start, size_type size); diff --git a/packages/language/cxx/ustl/current/include/ustl/metamac.h b/packages/language/cxx/ustl/current/include/ustl/metamac.h --- a/packages/language/cxx/ustl/current/include/ustl/metamac.h +++ b/packages/language/cxx/ustl/current/include/ustl/metamac.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file metamac.h diff --git a/packages/language/cxx/ustl/current/include/ustl/mistream.h b/packages/language/cxx/ustl/current/include/ustl/mistream.h --- a/packages/language/cxx/ustl/current/include/ustl/mistream.h +++ b/packages/language/cxx/ustl/current/include/ustl/mistream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef MISTREAM_H_103AEF1F266C04AA1A817D38705983DA @@ -13,7 +13,7 @@ #include "uios.h" #include "config.h" #if WANT_STREAM_BOUNDS_CHECKING - #include + #include "typeinfo.h" #endif namespace ustl { @@ -257,7 +257,7 @@ inline void istream::align (streamsize g template inline void istream::iread (T& v) { - assert (aligned (alignof (v))); + assert (aligned (stream_align_of (v))); #if WANT_STREAM_BOUNDS_CHECKING if (!verify_remaining ("read", USTL_TYPENAME(v), sizeof(T))) return; diff --git a/packages/language/cxx/ustl/current/include/ustl/mostream.h b/packages/language/cxx/ustl/current/include/ustl/mostream.h --- a/packages/language/cxx/ustl/current/include/ustl/mostream.h +++ b/packages/language/cxx/ustl/current/include/ustl/mostream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef MOSTREAM_H_24A8C5397E0848216573E5670930FC9A @@ -12,7 +12,7 @@ #include "uios.h" #include "config.h" #if WANT_STREAM_BOUNDS_CHECKING - #include + #include "typeinfo.h" #endif namespace ustl { @@ -28,7 +28,7 @@ class string; /// This class contains a set of functions to write integral types into an /// unstructured memory block. Packing binary file data can be done this /// way, for instance. aligning the data is your responsibility, and can -/// be accomplished by proper ordering of writes and by calling \ref ostream::align. +/// be accomplished by proper ordering of writes and by calling align. /// Unaligned access is usually slower by orders of magnitude and, /// on some architectures, such as PowerPC, can cause your program to crash. /// Therefore, all write functions have asserts to check alignment. @@ -253,7 +253,7 @@ inline void ostream::write (const cmemli template inline void ostream::iwrite (const T& v) { - assert (aligned (alignof (v))); + assert (aligned (stream_align_of (v))); #if WANT_STREAM_BOUNDS_CHECKING if (!verify_remaining ("write", USTL_TYPENAME(v), sizeof(T))) return; diff --git a/packages/language/cxx/ustl/current/include/ustl/ofstream.h b/packages/language/cxx/ustl/current/include/ustl/ofstream.h --- a/packages/language/cxx/ustl/current/include/ustl/ofstream.h +++ b/packages/language/cxx/ustl/current/include/ustl/ofstream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef FDOSTREAM_H_5E27FC3D530BF3CA04D6C73F5700EECC diff --git a/packages/language/cxx/ustl/current/include/ustl/simd.h b/packages/language/cxx/ustl/current/include/ustl/simd.h --- a/packages/language/cxx/ustl/current/include/ustl/simd.h +++ b/packages/language/cxx/ustl/current/include/ustl/simd.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file simd.h @@ -54,7 +54,7 @@ inline void packop (const Ctr& op1, cons { assert (op1.size() <= op2.size() && op1.size() <= result.size()); passign (op1, result); - packop (op2, result); + op (op2, result); } /// Copies \p op1 into \p result. diff --git a/packages/language/cxx/ustl/current/include/ustl/sistream.h b/packages/language/cxx/ustl/current/include/ustl/sistream.h --- a/packages/language/cxx/ustl/current/include/ustl/sistream.h +++ b/packages/language/cxx/ustl/current/include/ustl/sistream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef SISTREAM_H_0CCA102229A49F5D65EE852E62B27CE2 @@ -8,6 +8,9 @@ #include "mistream.h" #include "ustring.h" +#ifndef EOF +#define EOF (-1) +#endif namespace ustl { @@ -38,7 +41,7 @@ public: inline string str (void) const { string s; s.link (*this); return (s); } inline istringstream& str (const string& s) { link (s); return (*this); } inline istringstream& get (char& c) { return (read (&c, sizeof(c))); } - inline int get (void) { char c; get(c); return (c); } + inline int get (void) { char c = EOF; get(c); return (c); } istringstream& get (char* p, size_type n, char delim = '\n'); istringstream& get (string& s, char delim = '\n'); istringstream& getline (char* p, size_type n, char delim = '\n'); @@ -137,9 +140,6 @@ ISTRSTREAM_CAST_OPERATOR (char, int8_t) ISTRSTREAM_CAST_OPERATOR (uint64_t, int64_t) #endif #if SIZE_OF_LONG == SIZE_OF_INT -// This works only properly if stdint.h typedefs int to int32_t. If stdint.h -// typedefs long to int32_t then this causes compiler errors. So make shure -// that your stdint.h file typedefs int to int32_t. ISTRSTREAM_CAST_OPERATOR (long, int) ISTRSTREAM_CAST_OPERATOR (unsigned long,int) #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/sostream.h b/packages/language/cxx/ustl/current/include/ustl/sostream.h --- a/packages/language/cxx/ustl/current/include/ustl/sostream.h +++ b/packages/language/cxx/ustl/current/include/ustl/sostream.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef SOSTREAM_H_5323DC8C26E181D43278F2F53FDCF19F diff --git a/packages/language/cxx/ustl/current/include/ustl/strmsize.h b/packages/language/cxx/ustl/current/include/ustl/strmsize.h --- a/packages/language/cxx/ustl/current/include/ustl/strmsize.h +++ b/packages/language/cxx/ustl/current/include/ustl/strmsize.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file strmsize.h @@ -28,6 +28,20 @@ inline streamsize stream_size_of (const return (stream_sizer_t()(v)); } +/// \brief Returns the recommended stream alignment for type \p T. Override with ALIGNOF. +/// Because this is occasionally called with a null value, do not access the argument! +template +inline size_t stream_align_of (const T&) +{ + if (numeric_limits::is_integral) + return (__alignof__(T)); + return (4); +} + +#define ALIGNOF(type,grain) \ +namespace ustl { \ + template <> inline size_t stream_align_of (const type&) { return (grain); } } + } // namespace ustl // diff --git a/packages/language/cxx/ustl/current/include/ustl/traits.h b/packages/language/cxx/ustl/current/include/ustl/traits.h --- a/packages/language/cxx/ustl/current/include/ustl/traits.h +++ b/packages/language/cxx/ustl/current/include/ustl/traits.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2007-2009 by Mike Sharov +// Copyright (c) 2007 by Mike Sharov // // This implementation is adapted from the Loki library, distributed under // the MIT license with Copyright (c) 2001 by Andrei Alexandrescu. diff --git a/packages/language/cxx/ustl/current/include/ustl/typeinfo.h b/packages/language/cxx/ustl/current/include/ustl/typeinfo.h new file mode 100644 --- /dev/null +++ b/packages/language/cxx/ustl/current/include/ustl/typeinfo.h @@ -0,0 +1,40 @@ +// This file is part of the uSTL library, an STL implementation. +// +// Copyright (c) 2005 by Mike Sharov +// This file is free software, distributed under the MIT License. +// +#ifndef TYPEINFO_H_E67A267F0BBB5005 +#define TYPEINFO_H_E67A267F0BBB5005 + +#ifndef WITHOUT_LIBSTDCPP + #include +#else + +#include "uexception.h" + +namespace __cxxabiv1 { class __class_type_info; } + +namespace std { +class type_info { +public: + inline virtual ~type_info (void) { } + inline const char* name (void) const { return (__name[0] == '*' ? __name + 1 : __name); } + inline bool before (const type_info& v) const { return (__name < v.__name); } + inline bool operator==(const type_info& v) const { return (__name == v.__name); } + inline bool operator!=(const type_info& v) const { return (!operator==(v)); } + virtual bool __is_pointer_p (void) const; + virtual bool __is_function_p (void) const; + virtual bool __do_catch (const type_info* __thr_type, void** __thr_obj, unsigned __outer) const; + virtual bool __do_upcast (const __cxxabiv1::__class_type_info* __target, void** __obj_ptr) const; + explicit inline type_info (const char* newname) : __name(newname) { } +private: + inline void operator= (const type_info&) { } + inline type_info (const type_info&) { } +protected: + const char* __name; +}; + +} // namespace std + +#endif +#endif diff --git a/packages/language/cxx/ustl/current/include/ustl/typelist.h b/packages/language/cxx/ustl/current/include/ustl/typelist.h --- a/packages/language/cxx/ustl/current/include/ustl/typelist.h +++ b/packages/language/cxx/ustl/current/include/ustl/typelist.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2007-2009 by Mike Sharov +// Copyright (c) 2007 by Mike Sharov // // This implementation is adapted from the Loki library, distributed under // the MIT license with Copyright (c) 2001 by Andrei Alexandrescu. diff --git a/packages/language/cxx/ustl/current/include/ustl/typet.h b/packages/language/cxx/ustl/current/include/ustl/typet.h --- a/packages/language/cxx/ustl/current/include/ustl/typet.h +++ b/packages/language/cxx/ustl/current/include/ustl/typet.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2007-2009 by Mike Sharov +// Copyright (c) 2007 by Mike Sharov // // This implementation is adapted from the Loki library, distributed under // the MIT license with Copyright (c) 2001 by Andrei Alexandrescu. @@ -38,7 +38,8 @@ struct IsSameType { enum { value = /// Conversion::exists2Way is true if U is also convertible to T /// Conversion::sameType is true if U is T template -class Conversion { +struct Conversion { +private: typedef char UT; typedef short TT; static UT Test (U); diff --git a/packages/language/cxx/ustl/current/include/ustl/ualgo.h b/packages/language/cxx/ustl/current/include/ustl/ualgo.h --- a/packages/language/cxx/ustl/current/include/ustl/ualgo.h +++ b/packages/language/cxx/ustl/current/include/ustl/ualgo.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UALGO_H_711AB4214D417A51166694D47A662D6E @@ -9,7 +9,6 @@ #include "upair.h" #include "ualgobase.h" #include "ufunction.h" -#include "upredalgo.h" #include "umemory.h" #include // for rand() diff --git a/packages/language/cxx/ustl/current/include/ustl/ualgobase.h b/packages/language/cxx/ustl/current/include/ustl/ualgobase.h --- a/packages/language/cxx/ustl/current/include/ustl/ualgobase.h +++ b/packages/language/cxx/ustl/current/include/ustl/ualgobase.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UALGOBASE_H_683A0BE77546133C4CE0E3622CFAA2EB @@ -258,7 +258,7 @@ COPY_BACKWARD_ALIAS_FUNC(const void, voi #undef COPY_BACKWARD_ALIAS_FUNC #define FILL_ALIAS_FUNC(type, alias_type, v_type) \ template <> inline void fill (type* first, type* last, const v_type& value) \ -{ fill ((alias_type*) first, (alias_type*) last, (const alias_type&) value); } +{ fill ((alias_type*) first, (alias_type*) last, (const alias_type) value); } FILL_ALIAS_FUNC(void, uint8_t, char) FILL_ALIAS_FUNC(void, uint8_t, uint8_t) #if WANT_UNROLLED_COPY @@ -298,7 +298,7 @@ COPY_N_ALIAS_FUNC(const int32_t, int32_t #undef COPY_N_ALIAS_FUNC #define FILL_N_ALIAS_FUNC(type, alias_type, v_type) \ template <> inline type* fill_n (type* first, size_t n, const v_type& value) \ -{ return ((type*) fill_n ((alias_type*) first, n, (const alias_type&) value)); } +{ return ((type*) fill_n ((alias_type*) first, n, (const alias_type) value)); } FILL_N_ALIAS_FUNC(void, uint8_t, char) FILL_N_ALIAS_FUNC(void, uint8_t, uint8_t) #if WANT_UNROLLED_COPY diff --git a/packages/language/cxx/ustl/current/include/ustl/ubitset.h b/packages/language/cxx/ustl/current/include/ustl/ubitset.h --- a/packages/language/cxx/ustl/current/include/ustl/ubitset.h +++ b/packages/language/cxx/ustl/current/include/ustl/ubitset.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UBITSET_H_7B6450EC1400CBA45DCE0127739F82EE @@ -38,6 +38,7 @@ public: typedef const_pointer const_iterator; typedef size_t difference_type; typedef size_t size_type; + typedef const bitset& rcself_t; private: static const size_t s_WordBits = BitsInType (value_type); static const size_t s_nWords = Size / s_WordBits + ((Size % s_WordBits) != 0); @@ -102,19 +103,19 @@ public: inline bool any (void) const { value_type sum = 0; foreach (const_iterator, i, *this) sum |= *i; return (sum); } inline bool none (void) const { return (!any()); } inline size_t count (void) const { size_t sum = 0; foreach (const_iterator, i, *this) sum += popcount(*i); return (sum); } - inline bool operator== (const bitset& v) const + inline bool operator== (rcself_t v) const { return (s_nWords == 1 ? (m_Bits[0] == v.m_Bits[0]) : equal (begin(), end(), v.begin())); } - inline const bitset operator& (const bitset& v) + inline bitset operator& (rcself_t v) const { bitset result; transform (begin(), end(), v.begin(), result.begin(), bitwise_and()); return (result); } - inline const bitset operator| (const bitset& v) + inline bitset operator| (rcself_t v) const { bitset result; transform (begin(), end(), v.begin(), result.begin(), bitwise_or()); return (result); } - inline const bitset operator^ (const bitset& v) + inline bitset operator^ (rcself_t v) const { bitset result; transform (begin(), end(), v.begin(), result.begin(), bitwise_xor()); return (result); } - inline const bitset& operator&= (const bitset& v) + inline rcself_t operator&= (rcself_t v) { transform (begin(), end(), v.begin(), begin(), bitwise_and()); return (*this); } - inline const bitset& operator|= (const bitset& v) + inline rcself_t operator|= (rcself_t v) { transform (begin(), end(), v.begin(), begin(), bitwise_or()); return (*this); } - inline const bitset& operator^= (const bitset& v) + inline rcself_t operator^= (rcself_t v) { transform (begin(), end(), v.begin(), begin(), bitwise_xor()); return (*this); } inline void read (istream& is) { nr_container_read (is, *this); } inline void write (ostream& os) const { nr_container_write (os, *this); } diff --git a/packages/language/cxx/ustl/current/include/ustl/uctralgo.h b/packages/language/cxx/ustl/current/include/ustl/uctralgo.h --- a/packages/language/cxx/ustl/current/include/ustl/uctralgo.h +++ b/packages/language/cxx/ustl/current/include/ustl/uctralgo.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UCTRALGO_H_0D1AEDFA74B09791489FE25B1EC644B0 diff --git a/packages/language/cxx/ustl/current/include/ustl/uctrstrm.h b/packages/language/cxx/ustl/current/include/ustl/uctrstrm.h --- a/packages/language/cxx/ustl/current/include/ustl/uctrstrm.h +++ b/packages/language/cxx/ustl/current/include/ustl/uctrstrm.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file uctrstrm.h @@ -16,7 +16,7 @@ #include "mistream.h" #include "sostream.h" #include "uiosfunc.h" -#include +#include "typeinfo.h" namespace ustl { @@ -119,7 +119,7 @@ istream& container_read (istream& is, Co const size_t expectedSize = n * stream_size_of(value_type()); if (!is.verify_remaining ("read", USTL_TYPENAME(v), expectedSize)) return (is); - if (alignof(NullValue()) > alignof(n)) + if (stream_align_of(NullValue()) > stream_align_of(n)) is >> ios::talign(); v.resize (n); nr_container_read (is, v); @@ -135,7 +135,7 @@ ostream& container_write (ostream& os, c typedef typename Container::written_size_type written_size_type; const written_size_type sz (v.size()); os << sz; - if (alignof(NullValue()) > alignof(sz)) + if (stream_align_of(NullValue()) > stream_align_of(sz)) os << ios::talign(); nr_container_write (os, v); os << ios::talign(); @@ -150,9 +150,9 @@ size_t container_stream_size (const Cont typedef typename Container::written_size_type written_size_type; const written_size_type sz (v.size()); size_t sizeSize = stream_size_of (sz); - if (alignof(NullValue()) > alignof(sz)) - sizeSize = Align (sizeSize, alignof(NullValue())); - return (Align (sizeSize + nr_container_stream_size (v), alignof(sz))); + if (stream_align_of(NullValue()) > stream_align_of(sz)) + sizeSize = Align (sizeSize, stream_align_of(NullValue())); + return (Align (sizeSize + nr_container_stream_size (v), stream_align_of(sz))); } /// \brief Writes element \p v into stream \p os as text. diff --git a/packages/language/cxx/ustl/current/include/ustl/uexception.h b/packages/language/cxx/ustl/current/include/ustl/uexception.h --- a/packages/language/cxx/ustl/current/include/ustl/uexception.h +++ b/packages/language/cxx/ustl/current/include/ustl/uexception.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UEXCEPTION_H_18DE3EF55C4F00673268F0D66546AF5D @@ -23,7 +23,7 @@ typedef void (*unexpected_handler) (void terminate_handler set_terminate (terminate_handler pHandler) throw(); /// The runtime will call this function if exception handling must be /// abandoned for any reason. It can also be called by the user. -void terminate (void) __attribute__ ((__noreturn__)); +void terminate (void) throw() __attribute__ ((__noreturn__)); /// Takes a new handler function as an argument, returns the old function. unexpected_handler set_unexpected (unexpected_handler pHandler) throw(); /// The runtime will call this function if an exception is thrown which @@ -88,8 +88,14 @@ private: /// class bad_cast : public exception { public: - inline explicit bad_cast (void) throw() : exception() {} - inline virtual const char* what (void) const throw() { return ("bad cast"); } + inline bad_cast (void) throw() : exception() {} + inline virtual const char* what (void) const throw() { return ("bad cast"); } +}; + +class bad_typeid : public exception { +public: + inline bad_typeid (void) throw() { } + inline virtual const char* what (void) const throw() { return ("bad typeid"); } }; //---------------------------------------------------------------------- diff --git a/packages/language/cxx/ustl/current/include/ustl/ufunction.h b/packages/language/cxx/ustl/current/include/ustl/ufunction.h --- a/packages/language/cxx/ustl/current/include/ustl/ufunction.h +++ b/packages/language/cxx/ustl/current/include/ustl/ufunction.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UFUNCTION_H_221ABA8551801799263C927234C085F3 diff --git a/packages/language/cxx/ustl/current/include/ustl/uheap.h b/packages/language/cxx/ustl/current/include/ustl/uheap.h --- a/packages/language/cxx/ustl/current/include/ustl/uheap.h +++ b/packages/language/cxx/ustl/current/include/ustl/uheap.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UHEAP_H_574B9EAF271A1C107190B4D575A356C5 diff --git a/packages/language/cxx/ustl/current/include/ustl/uios.h b/packages/language/cxx/ustl/current/include/ustl/uios.h --- a/packages/language/cxx/ustl/current/include/ustl/uios.h +++ b/packages/language/cxx/ustl/current/include/ustl/uios.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UIOS_H_630C16E316F7650E3A02E1C6611B789A @@ -85,7 +85,7 @@ public: inline bool fail (void) const { return (rdstate() & (badbit | failbit)); } inline bool eof (void) const { return (rdstate() & eofbit); } inline bool operator! (void) const { return (fail()); } - inline operator void* (void) const { return (reinterpret_cast(!fail())); } + inline operator void* (void) const { return ((void*)(!fail())); } inline void clear (iostate v = goodbit) { m_State = v; } inline void setstate (iostate v) { m_State |= v; } inline iostate exceptions (void) const { return (m_Exceptions); } diff --git a/packages/language/cxx/ustl/current/include/ustl/uiosfunc.h b/packages/language/cxx/ustl/current/include/ustl/uiosfunc.h --- a/packages/language/cxx/ustl/current/include/ustl/uiosfunc.h +++ b/packages/language/cxx/ustl/current/include/ustl/uiosfunc.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UIOSFUNC_H_730C16E316F7650E3A02E1C6611B789A @@ -36,7 +36,7 @@ public: template class talign : public align { public: - inline explicit talign (void) : align (alignof (NullValue())) {} + inline explicit talign (void) : align (stream_align_of (NullValue())) {} }; /// \class skip uiosfunc.h ustl.h diff --git a/packages/language/cxx/ustl/current/include/ustl/uiterator.h b/packages/language/cxx/ustl/current/include/ustl/uiterator.h --- a/packages/language/cxx/ustl/current/include/ustl/uiterator.h +++ b/packages/language/cxx/ustl/current/include/ustl/uiterator.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file uiterator.h @@ -125,7 +125,7 @@ public: { m_ip = m_rCtr.insert (m_ip, v); return (*this); } inline insert_iterator& operator* (void) { return (*this); } inline insert_iterator& operator++ (void) { ++ m_ip; return (*this); } - inline insert_iterator operator++ (int) { insert_iterator prev (*this); ++ m_ip; return (*this); } + inline insert_iterator operator++ (int) { insert_iterator prev (*this); ++m_ip; return (prev); } protected: Container& m_rCtr; iterator m_ip; diff --git a/packages/language/cxx/ustl/current/include/ustl/ulaalgo.h b/packages/language/cxx/ustl/current/include/ustl/ulaalgo.h --- a/packages/language/cxx/ustl/current/include/ustl/ulaalgo.h +++ b/packages/language/cxx/ustl/current/include/ustl/ulaalgo.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef ULAALGO_H_2E403D182E83FB596AFB800E68B255A1 @@ -204,8 +204,7 @@ static tuple<4,float> operator* (const t #else // If no processor extensions, just unroll the multiplication /// Specialization for 4-component vector transform, the slow part of 3D graphics. -template <> -static tuple<4,float> operator* (const tuple<4,float>& t, const matrix<4,4,float>& m) +template <> inline tuple<4,float> operator* (const tuple<4,float>& t, const matrix<4,4,float>& m) { tuple<4,float> tr; for (uoff_t i = 0; i < 4; ++ i) diff --git a/packages/language/cxx/ustl/current/include/ustl/ulimits.h b/packages/language/cxx/ustl/current/include/ustl/ulimits.h --- a/packages/language/cxx/ustl/current/include/ustl/ulimits.h +++ b/packages/language/cxx/ustl/current/include/ustl/ulimits.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef ULIMITS_H_1C2192EA3821E0811BBAF86B0F048364 @@ -85,20 +85,6 @@ struct numeric_limits { \ #define NUMERIC_LIMITS(type, minVal, maxVal, bSigned, bInteger, bIntegral) \ namespace ustl { _NUMERIC_LIMITS (type, minVal, maxVal, bSigned, bInteger, bIntegral); } -/// \brief Returns the recommended stream alignment for type \p T. Override with ALIGNOF. -/// Because this is occasionally called with a null value, do not access the argument! -template -inline size_t alignof (const T&) -{ - if (numeric_limits::is_integral) - return (__alignof__(T)); - return (4); -} - -#define ALIGNOF(type,grain) \ -namespace ustl { \ - template <> inline size_t alignof (const type&) { return (grain); } } - } // namespace ustl #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/ulist.h b/packages/language/cxx/ustl/current/include/ustl/ulist.h --- a/packages/language/cxx/ustl/current/include/ustl/ulist.h +++ b/packages/language/cxx/ustl/current/include/ustl/ulist.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef ULIST_H_54E3B510498982C87A0A1E1932E6729D @@ -50,9 +50,8 @@ public: template void list::merge (list& l) { - list::resize (size() + l.size()); - iterator me = merge (begin(), end(), l.begin(), l.end(), begin()); - list::resize (distance (begin(), me)); + insert_space (begin(), l.size()); + ::ustl::merge (iat(l.size()), end(), l.begin(), l.end(), begin()); } /// Moves the range [first, last) from \p l to this list at \p ip. diff --git a/packages/language/cxx/ustl/current/include/ustl/umap.h b/packages/language/cxx/ustl/current/include/ustl/umap.h --- a/packages/language/cxx/ustl/current/include/ustl/umap.h +++ b/packages/language/cxx/ustl/current/include/ustl/umap.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UMAP_H_45643F516E02A87A3DCEA5024052A6F5 @@ -16,14 +16,14 @@ namespace ustl { /// /// \brief A sorted associative container of pair /// -template +template > class map : public vector > { public: typedef K key_type; typedef V data_type; typedef const K& const_key_ref; typedef const V& const_data_ref; - typedef const map& rcself_t; + typedef const map& rcself_t; typedef vector > base_class; typedef typename base_class::value_type value_type; typedef typename base_class::size_type size_type; @@ -39,10 +39,10 @@ public: typedef pair range_t; typedef pair insertrv_t; public: - inline map (void) : vector > () {} - explicit inline map (size_type n) : vector > (n) {} - inline map (rcself_t v) : vector > (v) {} - inline map (const_iterator i1, const_iterator i2) : vector >() { insert (i1, i2); } + inline map (void) : base_class() {} + explicit inline map (size_type n) : base_class (n) {} + inline map (rcself_t v) : base_class (v) {} + inline map (const_iterator i1, const_iterator i2) : base_class() { insert (i1, i2); } inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); } inline const_data_ref operator[] (const_key_ref i) const; data_type& operator[] (const_key_ref i); @@ -56,25 +56,29 @@ public: inline const_iterator find (const_key_ref k) const; inline iterator find (const_key_ref k) { return (const_cast (const_cast(*this).find (k))); } inline const_iterator find_data (const_data_ref v, const_iterator first = NULL, const_iterator last = NULL) const; - inline iterator find_data (const_data_ref v, iterator first = NULL, iterator last = NULL); + inline iterator find_data (const_data_ref v, iterator first = NULL, iterator last = NULL) { return (const_cast (find_data (v, const_cast(first), const_cast(last)))); } insertrv_t insert (const_reference v); + inline iterator insert (iterator, const_reference v) { return (insert(v).first); } void insert (const_iterator i1, const_iterator i2); inline void erase (const_key_ref k); inline iterator erase (iterator ep) { return (base_class::erase (ep)); } inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); } inline void clear (void) { base_class::clear(); } -private: const_iterator lower_bound (const_key_ref k) const; inline iterator lower_bound (const_key_ref k) { return (const_cast(const_cast(*this).lower_bound (k))); } + const_iterator upper_bound (const_key_ref k) const; + inline iterator upper_bound (const_key_ref k) { return (const_cast(const_cast(*this).upper_bound (k))); } + const_range_t equal_range (const_key_ref k) const; + inline range_t equal_range (const_key_ref k) { return (const_cast(const_cast(*this).equal_range (k))); } }; -template -typename map::const_iterator map::lower_bound (const_key_ref k) const +template +typename map::const_iterator map::lower_bound (const_key_ref k) const { const_iterator first (begin()), last (end()); while (first != last) { const_iterator mid = advance (first, distance (first,last) / 2); - if (mid->first < k) + if (Comp()(mid->first, k)) first = advance (mid, 1); else last = mid; @@ -82,17 +86,41 @@ typename map::const_iterator map +typename map::const_iterator map::upper_bound (const_key_ref k) const +{ + const_iterator first (begin()), last (end()); + while (first != last) { + const_iterator mid = advance (first, distance (first,last) / 2); + if (Comp()(k, mid->first)) + last = mid; + else + first = mid + 1; + } + return (last); +} + +template +typename map::const_range_t map::equal_range (const_key_ref k) const +{ + const_range_t rv; + rv.second = rv.first = lower_bound (k); + while (rv.second != end() && !Comp()(k, rv.second->first)) + ++rv.second; + return (rv); +} + /// Returns the pair where K = \p k. -template -inline typename map::const_iterator map::find (const_key_ref k) const +template +inline typename map::const_iterator map::find (const_key_ref k) const { const_iterator i = lower_bound (k); - return ((i < end() && k < i->first) ? end() : i); + return ((i < end() && Comp()(k,i->first)) ? end() : i); } /// Returns the pair where V = \p v, occuring in range [first,last). -template -inline typename map::const_iterator map::find_data (const_data_ref v, const_iterator first, const_iterator last) const +template +inline typename map::const_iterator map::find_data (const_data_ref v, const_iterator first, const_iterator last) const { if (!first) first = begin(); if (!last) last = end(); @@ -100,55 +128,48 @@ inline typename map::const_iterator return (first); } -/// Returns the pair where V = \p v, occuring in range [first,last). -template -inline typename map::iterator map::find_data (const_data_ref v, iterator first, iterator last) -{ - return (const_cast (find_data (v, const_cast(first), const_cast(last)))); -} - /// Returns data associated with key \p k. -template -inline const typename map::data_type& map::operator[] (const_key_ref k) const +template +inline const typename map::data_type& map::operator[] (const_key_ref k) const { assert (find(k) != end() && "operator[] const can not insert non-existent keys"); return (find(k)->second); } /// Returns data associated with key \p k. -template -typename map::data_type& map::operator[] (const_key_ref k) +template +typename map::data_type& map::operator[] (const_key_ref k) { iterator ip = lower_bound (k); - if (ip == end() || k < ip->first) + if (ip == end() || Comp()(k,ip->first)) ip = base_class::insert (ip, make_pair (k, V())); return (ip->second); } /// Inserts the pair into the container. -template -typename map::insertrv_t map::insert (const_reference v) +template +typename map::insertrv_t map::insert (const_reference v) { iterator ip = lower_bound (v.first); - bool bInserted = ip == end() || v.first < ip->first; + bool bInserted = ip == end() || Comp()(v.first, ip->first); if (bInserted) ip = base_class::insert (ip, v); return (make_pair (ip, bInserted)); } /// Inserts elements from range [i1,i2) into the container. -template -void map::insert (const_iterator i1, const_iterator i2) +template +void map::insert (const_iterator i1, const_iterator i2) { assert (i1 <= i2); - reserve (size() + distance (i1, i2)); + base_class::reserve (size() + distance (i1, i2)); for (; i1 != i2; ++i1) insert (*i1); } /// Erases the element with key value \p k. -template -inline void map::erase (const_key_ref k) +template +inline void map::erase (const_key_ref k) { iterator ip = find (k); if (ip != end()) diff --git a/packages/language/cxx/ustl/current/include/ustl/umatrix.h b/packages/language/cxx/ustl/current/include/ustl/umatrix.h --- a/packages/language/cxx/ustl/current/include/ustl/umatrix.h +++ b/packages/language/cxx/ustl/current/include/ustl/umatrix.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UMATRIX_H_740EBFEF554E833645E0FD72419A8185 diff --git a/packages/language/cxx/ustl/current/include/ustl/umemory.h b/packages/language/cxx/ustl/current/include/ustl/umemory.h --- a/packages/language/cxx/ustl/current/include/ustl/umemory.h +++ b/packages/language/cxx/ustl/current/include/ustl/umemory.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UMEMORY_H_4AB5B0DB5BF09140541409CC47BCD17A @@ -75,8 +75,10 @@ template inline void construct (ForwardIterator first, ForwardIterator last) { typedef typename iterator_traits::value_type value_type; - if (!numeric_limits::is_integral && first) - for (--last; first <= last; ++first) + if (numeric_limits::is_integral) + memset (first, 0, distance(first,last)*sizeof(value_type)); + else + for (--last; intptr_t(first) <= intptr_t(last); ++first) construct (&*first); } @@ -101,7 +103,7 @@ inline void destroy (T* p) throw() // Helper templates to not instantiate anything for integral types. template void dtors (T first, T last) throw() - { for (--last; first <= last; ++first) destroy (&*first); } + { for (--last; intptr_t(first) <= intptr_t(last); ++first) destroy (&*first); } template struct Sdtorsr { inline void operator()(T first, T last) throw() { dtors (first, last); } diff --git a/packages/language/cxx/ustl/current/include/ustl/umultimap.h b/packages/language/cxx/ustl/current/include/ustl/umultimap.h --- a/packages/language/cxx/ustl/current/include/ustl/umultimap.h +++ b/packages/language/cxx/ustl/current/include/ustl/umultimap.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UMULTIMAP_H_45743F516E02A87A3FCEA5024052A6F5 @@ -16,20 +16,20 @@ namespace ustl { /// /// \brief A sorted associative container that may container multiple entries for each key. /// -template +template > class multimap : public vector > { public: typedef K key_type; typedef V data_type; typedef const K& const_key_ref; typedef const V& const_data_ref; - typedef const multimap& rcself_t; + typedef const multimap& rcself_t; typedef vector > base_class; - typedef typename base_class::value_type value_type; - typedef typename base_class::size_type size_type; - typedef typename base_class::pointer pointer; - typedef typename base_class::const_pointer const_pointer; - typedef typename base_class::reference reference; + typedef typename base_class::value_type value_type; + typedef typename base_class::size_type size_type; + typedef typename base_class::pointer pointer; + typedef typename base_class::const_pointer const_pointer; + typedef typename base_class::reference reference; typedef typename base_class::const_reference const_reference; typedef typename base_class::const_iterator const_iterator; typedef typename base_class::iterator iterator; @@ -38,10 +38,10 @@ public: typedef pair const_range_t; typedef pair range_t; public: - inline multimap (void) : vector > () {} - explicit inline multimap (size_type n) : vector > (n) {} - inline multimap (rcself_t v) : vector > (v) {} - inline multimap (const_iterator i1, const_iterator i2) : vector > () { insert (i1, i2); } + inline multimap (void) : base_class() {} + explicit inline multimap (size_type n) : base_class (n) {} + inline multimap (rcself_t v) : base_class (v) {} + inline multimap (const_iterator i1, const_iterator i2) : base_class() { insert (i1, i2); } inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); } inline size_type size (void) const { return (base_class::size()); } inline iterator begin (void) { return (base_class::begin()); } @@ -51,11 +51,15 @@ public: inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); } inline size_type count (const_key_ref k) const { return (upper_bound(k) - lower_bound(k)); } inline void push_back (const_reference v) { insert (v); } + inline const_iterator find (const_key_ref k) const; + inline iterator find (const_key_ref k) { return (const_cast (const_cast(*this).find (k))); } inline const_range_t equal_range (const_key_ref k) const { return (make_pair (lower_bound(k), upper_bound(k))); } inline range_t equal_range (const_key_ref k) { return (make_pair (const_cast(lower_bound(k)), const_cast(upper_bound(k)))); } const_iterator lower_bound (const_key_ref k) const; + inline iterator lower_bound (const_key_ref k) { return (const_cast (const_cast(*this).lower_bound (k))); } const_iterator upper_bound (const_key_ref k) const; - inline iterator insert (const_reference v); + inline iterator upper_bound (const_key_ref k) { return (const_cast (const_cast(*this).upper_bound (k))); } + inline iterator insert (const_reference v) { return (base_class::insert (upper_bound (v.first), v)); } void insert (const_iterator i1, const_iterator i2); inline void erase (const_key_ref k) { erase (const_cast(lower_bound(k)), const_cast(upper_bound(k))); } inline iterator erase (iterator ep) { return (base_class::erase (ep)); } @@ -64,13 +68,13 @@ public: }; /// Returns an iterator to the first element with key value \p k. -template -typename multimap::const_iterator multimap::lower_bound (const_key_ref k) const +template +typename multimap::const_iterator multimap::lower_bound (const_key_ref k) const { const_iterator first (begin()), last (end()); while (first != last) { const_iterator mid = advance (first, distance (first,last) / 2); - if (mid->first < k) + if (Comp()(mid->first, k)) first = advance (mid, 1); else last = mid; @@ -79,13 +83,13 @@ typename multimap::const_iterator m } /// Returns an iterator to the first element with key value \p k. -template -typename multimap::const_iterator multimap::upper_bound (const_key_ref k) const +template +typename multimap::const_iterator multimap::upper_bound (const_key_ref k) const { const_iterator first (begin()), last (end()); while (first != last) { const_iterator mid = advance (first, distance (first,last) / 2); - if (k < mid->first) + if (Comp()(k, mid->first)) last = mid; else first = advance (mid, 1); @@ -93,20 +97,20 @@ typename multimap::const_iterator m return (last); } -/// Inserts the pair into the container. -template -inline typename multimap::iterator multimap::insert (const_reference v) +/// Returns the pair where K = \p k. +template +inline typename multimap::const_iterator multimap::find (const_key_ref k) const { - iterator ip = const_cast (upper_bound (v.first)); - return (base_class::insert (ip, v)); + const_iterator i = lower_bound (k); + return ((i < end() && Comp()(k, i->first)) ? end() : i); } /// Inserts elements from range [i1,i2) into the container. -template -void multimap::insert (const_iterator i1, const_iterator i2) +template +void multimap::insert (const_iterator i1, const_iterator i2) { assert (i1 <= i2); - reserve (size() + distance (i1, i2)); + base_class::reserve (size() + distance (i1, i2)); for (; i1 != i2; ++i1) insert (*i1); } diff --git a/packages/language/cxx/ustl/current/include/ustl/umultiset.h b/packages/language/cxx/ustl/current/include/ustl/umultiset.h --- a/packages/language/cxx/ustl/current/include/ustl/umultiset.h +++ b/packages/language/cxx/ustl/current/include/ustl/umultiset.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UMULTISET_H_446AEDBB7F61C6994DC228C25D5FA3A1 @@ -17,10 +17,10 @@ namespace ustl { /// \brief Multiple sorted container. /// Unlike set, it may contain multiple copies of each element. /// -template +template > class multiset : public vector { public: - typedef const multiset& rcself_t; + typedef const multiset& rcself_t; typedef vector base_class; typedef typename base_class::value_type value_type; typedef typename base_class::size_type size_type; @@ -33,17 +33,17 @@ public: typedef typename base_class::reverse_iterator reverse_iterator; typedef typename base_class::const_reverse_iterator const_reverse_iterator; public: - inline multiset (void) : vector () {} - explicit inline multiset (size_type n) : vector (n) {} - inline multiset (rcself_t v) : vector (v) {} - inline multiset (const_iterator i1, const_iterator i2) : vector () { insert (i1, i2); } + inline multiset (void) : base_class() {} + explicit inline multiset (size_type n) : base_class (n) {} + inline multiset (rcself_t v) : base_class (v) {} + inline multiset (const_iterator i1, const_iterator i2) : base_class() { insert (i1, i2); } inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); } inline size_type size (void) const { return (base_class::size()); } inline iterator begin (void) { return (base_class::begin()); } inline const_iterator begin (void) const { return (base_class::begin()); } inline iterator end (void) { return (base_class::end()); } inline const_iterator end (void) const { return (base_class::end()); } - inline void assign (const_iterator i1, const_iterator i2); + inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); } size_type count (const_reference v) const; inline void push_back (const_reference v) { insert (v); } inline iterator insert (const_reference v); @@ -54,45 +54,37 @@ public: inline void clear (void) { base_class::clear(); } }; -/// Copies contents of range [i1,i2) -template -inline void multiset::assign (const_iterator i1, const_iterator i2) +/// Returns the number of elements of value \p v. +template +typename multiset::size_type multiset::count (const_reference v) const { - base_class::clear(); - insert (i1, i2); -} - -/// Returns the number of elements of value \p v. -template -typename multiset::size_type multiset::count (const_reference v) const -{ - const pair fr = equal_range (begin(), end(), v); + const pair fr = equal_range (begin(), end(), v, Comp()); return (distance (fr.first, fr.second)); } /// Inserts \p v. -template -inline typename multiset::iterator multiset::insert (const_reference v) +template +inline typename multiset::iterator multiset::insert (const_reference v) { - iterator ip = upper_bound (begin(), end(), v); + iterator ip = upper_bound (begin(), end(), v, Comp()); return (base_class::insert (ip, v)); } /// Inserts all elements from range [i1,i2). -template -void multiset::insert (const_iterator i1, const_iterator i2) +template +void multiset::insert (const_iterator i1, const_iterator i2) { assert (i1 <= i2); - reserve (size() + distance (i1, i2)); + base_class::reserve (size() + distance (i1, i2)); for (; i1 < i2; ++i1) push_back (*i1); } /// Erases all elements with value \p v. -template -void multiset::erase (const_reference v) +template +void multiset::erase (const_reference v) { - pair epr = equal_range (begin(), end(), v); + pair epr = equal_range (begin(), end(), v, Comp()); erase (epr.first, epr.second); } diff --git a/packages/language/cxx/ustl/current/include/ustl/unew.h b/packages/language/cxx/ustl/current/include/ustl/unew.h --- a/packages/language/cxx/ustl/current/include/ustl/unew.h +++ b/packages/language/cxx/ustl/current/include/ustl/unew.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UNEW_H_11D237512B324C9C05A55DAF1BF086F1 diff --git a/packages/language/cxx/ustl/current/include/ustl/unumeric.h b/packages/language/cxx/ustl/current/include/ustl/unumeric.h --- a/packages/language/cxx/ustl/current/include/ustl/unumeric.h +++ b/packages/language/cxx/ustl/current/include/ustl/unumeric.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UNUMERIC_H_6C99D6F6363832C644A6FFF336E84E18 diff --git a/packages/language/cxx/ustl/current/include/ustl/upair.h b/packages/language/cxx/ustl/current/include/ustl/upair.h --- a/packages/language/cxx/ustl/current/include/ustl/upair.h +++ b/packages/language/cxx/ustl/current/include/ustl/upair.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UPAIR_H_7DC08F1B7FECF8AE6856D84C3B617A75 diff --git a/packages/language/cxx/ustl/current/include/ustl/upredalgo.h b/packages/language/cxx/ustl/current/include/ustl/upredalgo.h --- a/packages/language/cxx/ustl/current/include/ustl/upredalgo.h +++ b/packages/language/cxx/ustl/current/include/ustl/upredalgo.h @@ -1,11 +1,13 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UPREDALGO_H_2CB058AE0807A01A2F6A51BA5D5820A5 #define UPREDALGO_H_2CB058AE0807A01A2F6A51BA5D5820A5 +#include "ualgo.h" + namespace ustl { /// Copy_if copies elements from the range [first, last) to the range diff --git a/packages/language/cxx/ustl/current/include/ustl/uqueue.h b/packages/language/cxx/ustl/current/include/ustl/uqueue.h --- a/packages/language/cxx/ustl/current/include/ustl/uqueue.h +++ b/packages/language/cxx/ustl/current/include/ustl/uqueue.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UQUEUE_H_27F01FDB0D59B75277E0E5C41ABC6B5B diff --git a/packages/language/cxx/ustl/current/include/ustl/uset.h b/packages/language/cxx/ustl/current/include/ustl/uset.h --- a/packages/language/cxx/ustl/current/include/ustl/uset.h +++ b/packages/language/cxx/ustl/current/include/ustl/uset.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USET_H_45543F516E02A87A3FCEA5024052A6F5 @@ -15,29 +15,29 @@ namespace ustl { /// /// \brief Unique sorted container. Sorted vector with all values unique. /// -template +template > class set : public vector { public: - typedef const set& rcself_t; - typedef vector base_class; + typedef const set& rcself_t; + typedef vector base_class; typedef typename base_class::value_type key_type; typedef typename base_class::value_type data_type; typedef typename base_class::value_type value_type; typedef typename base_class::size_type size_type; - typedef typename base_class::pointer pointer; + typedef typename base_class::pointer pointer; typedef typename base_class::const_pointer const_pointer; typedef typename base_class::reference reference; - typedef typename base_class::const_reference const_reference; + typedef typename base_class::const_reference const_reference; typedef typename base_class::const_iterator const_iterator; typedef typename base_class::iterator iterator; typedef typename base_class::reverse_iterator reverse_iterator; typedef typename base_class::const_reverse_iterator const_reverse_iterator; typedef pair insertrv_t; public: - inline set (void) : vector () { } - explicit inline set (size_type n) : vector (n) { } - inline set (rcself_t v) : vector (v) { } - inline set (const_iterator i1, const_iterator i2) : vector () { insert (i1, i2); } + inline set (void) : base_class() { } + explicit inline set (size_type n) : base_class (n) { } + inline set (rcself_t v) : base_class (v) { } + inline set (const_iterator i1, const_iterator i2) : base_class() { insert (i1, i2); } inline rcself_t operator= (rcself_t v) { base_class::operator= (v); return (*this); } inline size_type size (void) const { return (base_class::size()); } inline iterator begin (void) { return (base_class::begin()); } @@ -46,46 +46,39 @@ public: inline const_iterator end (void) const { return (base_class::end()); } inline void assign (const_iterator i1, const_iterator i2) { clear(); insert (i1, i2); } inline void push_back (const_reference v) { insert (v); } - inline const_iterator find (const_reference v) const { const_iterator i = lower_bound (begin(), end(), v); return ((i != end() && *i == v) ? i : end()); } + inline const_iterator find (const_reference v) const { const_iterator i = lower_bound (begin(), end(), v, Comp()); return ((i != end() && *i == v) ? i : end()); } inline iterator find (const_reference v) { return (const_cast(const_cast(*this).find (v))); } insertrv_t insert (const_reference v); + inline iterator insert (iterator, const_reference v) { return (insert(v).first); } inline void insert (const_iterator i1, const_iterator i2); - inline void erase (const_reference v); - inline iterator erase (iterator ep) { return (base_class::erase (ep)); } + inline void erase (const_reference v) { iterator ip = find (v); if (ip != end()) erase (ip); } + inline iterator erase (iterator ep) { return (base_class::erase (ep)); } inline iterator erase (iterator ep1, iterator ep2) { return (base_class::erase (ep1, ep2)); } - inline void clear (void) { base_class::clear(); } + inline void clear (void) { base_class::clear(); } }; /// Inserts \p v into the container, maintaining the sort order. -template -typename set::insertrv_t set::insert (const_reference v) +template +typename set::insertrv_t set::insert (const_reference v) { - iterator ip = lower_bound (begin(), end(), v); - bool bInserted = (ip == end() || v < *ip); + Comp f; + iterator ip = lower_bound (begin(), end(), v, f); + bool bInserted = (ip == end() || f(v,*ip)); if (bInserted) ip = base_class::insert (ip, v); return (make_pair (ip, bInserted)); } /// Inserts the contents of range [i1,i2) -template -void set::insert (const_iterator i1, const_iterator i2) +template +void set::insert (const_iterator i1, const_iterator i2) { assert (i1 <= i2); - reserve (size() + distance (i1, i2)); + base_class::reserve (size() + distance (i1, i2)); for (; i1 < i2; ++i1) push_back (*i1); } -/// Erases the element with value \p v. -template -inline void set::erase (const_reference v) -{ - iterator ip = find (v); - if (ip != end()) - erase (ip); -} - } // namespace ustl #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/uspecial.h b/packages/language/cxx/ustl/current/include/ustl/uspecial.h --- a/packages/language/cxx/ustl/current/include/ustl/uspecial.h +++ b/packages/language/cxx/ustl/current/include/ustl/uspecial.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USPECIAL_H_947ADYOU0ARE3YOU2REALLY8ARE44CE0 @@ -46,9 +46,9 @@ template istream& operator>> (istream& is, pair& p) { is >> p.first; - is.align (alignof(p.second)); + is.align (stream_align_of(p.second)); is >> p.second; - is.align (alignof(p.first)); + is.align (stream_align_of(p.first)); return (is); } @@ -57,9 +57,9 @@ template ostream& operator<< (ostream& os, const pair& p) { os << p.first; - os.align (alignof(p.second)); + os.align (stream_align_of(p.second)); os << p.second; - os.align (alignof(p.first)); + os.align (stream_align_of(p.first)); return (os); } @@ -76,8 +76,8 @@ template struct object_stream_size > { inline size_t operator()(const pair& v) const { - return (Align (stream_size_of(v.first), alignof(v.second)) + - Align (stream_size_of(v.second), alignof(v.first))); + return (Align (stream_size_of(v.first), stream_align_of(v.second)) + + Align (stream_size_of(v.second), stream_align_of(v.first))); } }; @@ -111,10 +111,10 @@ unconst (const pair -inline size_t alignof (const vector&) +inline size_t stream_align_of (const vector&) { typedef typename vector::written_size_type written_size_type; - return (alignof (written_size_type())); + return (stream_align_of (written_size_type())); } //----{ bitset }-------------------------------------------------------- @@ -152,7 +152,7 @@ struct numeric_limits > { }; template -inline size_t alignof (const tuple&) { return (alignof (NullValue())); } +inline size_t stream_align_of (const tuple&) { return (stream_align_of (NullValue())); } template inline ostringstream& chartype_text_write (ostringstream& os, const T& v) @@ -257,4 +257,7 @@ CAST_STREAMABLE(bool, uint8_t) ALIGNOF (_long4grain, 4) #endif +ALIGNOF(ustl::CBacktrace, sizeof(void*)) +ALIGNOF (ustl::string, stream_align_of (string::value_type())) + #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/ustack.h b/packages/language/cxx/ustl/current/include/ustl/ustack.h --- a/packages/language/cxx/ustl/current/include/ustl/ustack.h +++ b/packages/language/cxx/ustl/current/include/ustl/ustack.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USTACK_H_5242F5635322B2EC44A9AEE73022C6E9 diff --git a/packages/language/cxx/ustl/current/include/ustl/ustdxept.h b/packages/language/cxx/ustl/current/include/ustl/ustdxept.h --- a/packages/language/cxx/ustl/current/include/ustl/ustdxept.h +++ b/packages/language/cxx/ustl/current/include/ustl/ustdxept.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USTDXEPT_H_46F7AE967738B588038F95E41158D7FF diff --git a/packages/language/cxx/ustl/current/include/ustl/ustring.h b/packages/language/cxx/ustl/current/include/ustl/ustring.h --- a/packages/language/cxx/ustl/current/include/ustl/ustring.h +++ b/packages/language/cxx/ustl/current/include/ustl/ustring.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef USTRING_H_1249CB7A098A9010763AAC6D37B133CF @@ -55,7 +55,7 @@ public: typedef ::ustl::reverse_iterator reverse_iterator; typedef ::ustl::reverse_iterator const_reverse_iterator; typedef utf8in_iterator utf8_iterator; - static const uoff_t npos = static_cast(-1); ///< Value that means the end of string. + static const size_type npos = INT_MAX; ///< Value that means the end of string. public: inline string (void) : memblock () { relink ("",0); } string (const string& s); @@ -84,8 +84,8 @@ public: inline utf8_iterator utf8_end (void) const { return (utf8_iterator (end())); } inline const_reference at (uoff_t pos) const { assert (pos <= size() && begin()); return (begin()[pos]); } inline reference at (uoff_t pos) { assert (pos <= size() && begin()); return (begin()[pos]); } - inline const_iterator iat (uoff_t pos) const { return (begin() + min (pos, size())); } - inline iterator iat (uoff_t pos) { return (begin() + min (pos, size())); } + inline const_iterator iat (uoff_t pos) const { return (begin() + (__builtin_constant_p(pos) && pos >= npos ? size() : min(pos,size()))); } + inline iterator iat (uoff_t pos) { return (const_cast(const_cast(this)->iat(pos))); } const_iterator wiat (uoff_t i) const; inline iterator wiat (uoff_t i) { return (const_cast(const_cast(this)->wiat(i))); } inline const_reference back (void) const { return (at(size()-1)); } @@ -142,7 +142,7 @@ public: inline void insert (uoff_t ip, size_type n, value_type c) { insert (iat(ip), c, n); } inline void insert (uoff_t ip, const string& s, uoff_t sp, size_type slen) { insert (iat(ip), s.iat(sp), s.iat(sp + slen)); } iterator erase (iterator epo, size_type n = 1); - void erase (uoff_t epo, size_type n = 1); + void erase (uoff_t epo = 0, size_type n = 1); inline iterator erase (iterator first, const_iterator last) { return (erase (first, size_type(distance(first,last)))); } inline void eraser (uoff_t first, uoff_t last) { erase (iat(first), iat(last)); } inline void push_back (const_reference c) { append (1, c); } @@ -251,6 +251,8 @@ PTR_STRING_CMP (operator>, (s2 < s1)) PTR_STRING_CMP (operator>=, (s2 <= s1)) #undef PTR_STRING_CMP +inline string operator+ (const char* cs, const string& ss) { string r; r.reserve (strlen(cs)+ss.size()); r += cs; r += ss; return (r); } + //---------------------------------------------------------------------- inline hashvalue_t hash_value (const char* first, const char* last) @@ -262,7 +264,4 @@ inline hashvalue_t hash_value (const cha } // namespace ustl -// Specialization for stream alignment -ALIGNOF (ustl::string, alignof (string::value_type())) - #endif diff --git a/packages/language/cxx/ustl/current/include/ustl/utf8.h b/packages/language/cxx/ustl/current/include/ustl/utf8.h --- a/packages/language/cxx/ustl/current/include/ustl/utf8.h +++ b/packages/language/cxx/ustl/current/include/ustl/utf8.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // // This file contains stream iterators that read and write UTF-8 encoded diff --git a/packages/language/cxx/ustl/current/include/ustl/utuple.h b/packages/language/cxx/ustl/current/include/ustl/utuple.h --- a/packages/language/cxx/ustl/current/include/ustl/utuple.h +++ b/packages/language/cxx/ustl/current/include/ustl/utuple.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UTUPLE_H_7324ADEC49B397CA74A56F6050FD5A6B diff --git a/packages/language/cxx/ustl/current/include/ustl/utypes.h b/packages/language/cxx/ustl/current/include/ustl/utypes.h --- a/packages/language/cxx/ustl/current/include/ustl/utypes.h +++ b/packages/language/cxx/ustl/current/include/ustl/utypes.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UTYPES_H_118BBB3B50B7DBF22F5460C52E515C83 diff --git a/packages/language/cxx/ustl/current/include/ustl/uutility.h b/packages/language/cxx/ustl/current/include/ustl/uutility.h --- a/packages/language/cxx/ustl/current/include/ustl/uutility.h +++ b/packages/language/cxx/ustl/current/include/ustl/uutility.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. // /// \file uutility.h @@ -96,7 +96,7 @@ inline T* NullPointer (void) { return ((T*) NULL); } /// \brief Returns a non-dereferentiable value reference. -/// This is useful for passing to alignof or the like which need a value but +/// This is useful for passing to stream_align_of or the like which need a value but /// don't need to actually use it. template inline T& NullValue (void) @@ -145,11 +145,13 @@ UNVOID_DISTANCE(const,) #undef UNVOID_DISTANCE #endif +#ifndef DOXYGEN_SHOULD_SKIP_THIS // The compiler issues a warning if an unsigned type is compared to 0. template struct __is_negative { inline bool operator()(const T& v) { return (v < 0); } }; template struct __is_negative { inline bool operator()(const T&) { return (false); } }; /// Warning-free way to check if \p v is negative, even if for unsigned types. template inline bool is_negative (const T& v) { return (__is_negative::is_signed>()(v)); } +#endif /// \brief Returns the absolute value of \p v /// Unlike the stdlib functions, this is inline and works with all types. @@ -308,9 +310,6 @@ inline T1 DivRU (T1 n1, T2 n2) return ((n1 + adj) / n2); } -#if __GNUC__ >= 3 -inline bool TestAndSet (int* pm) INLINE; -#endif /// Sets the contents of \p pm to 1 and returns true if the previous value was 0. inline bool TestAndSet (int* pm) { @@ -339,6 +338,69 @@ inline bool TestAndSet (int* pm) #endif } +/// Returns the index of the first set bit in \p v or \p nbv if none. +inline uoff_t FirstBit (uint32_t v, uoff_t nbv) +{ + uoff_t n = nbv; +#if __i386__ || __x86_64__ + if (!__builtin_constant_p(v)) asm ("bsr\t%1, %k0":"+r,r"(n):"r,m"(v)); else +#endif +#if __GNUC__ + if (v) n = 31 - __builtin_clz(v); +#else + if (v) for (uint32_t m = uint32_t(1)<<(n=31); !(v & m); m >>= 1) --n; +#endif + return (n); +} +/// Returns the index of the first set bit in \p v or \p nbv if none. +inline uoff_t FirstBit (uint64_t v, uoff_t nbv) +{ + uoff_t n = nbv; +#if __x86_64__ + if (!__builtin_constant_p(v)) asm ("bsr\t%1, %0":"+r,r"(n):"r,m"(v)); else +#endif +#if __GNUC__ + if (v) n = 63 - __builtin_clzl(v); +#else + if (v) for (uint64_t m = uint64_t(1)<<(n=63); !(v & m); m >>= 1) --n; +#endif + return (n); +} + +/// Returns the next power of 2 >= \p v. +/// Values larger than UINT32_MAX/2 will return 2^0 +inline uint32_t NextPow2 (uint32_t v) +{ + uint32_t r = v-1; +#if __i386__ || __x86_64__ + if (!__builtin_constant_p(r)) asm("bsr\t%0, %0":"+r"(r)); else +#endif + { r = FirstBit(r,r); if (r >= BitsInType(r)-1) r = uint32_t(-1); } + return (1<<(1+r)); +} + +/// Bitwise rotate value left +template +inline T Rol (T v, size_t n) +{ +#if __i386__ || __x86_64__ + if (!(__builtin_constant_p(v) && __builtin_constant_p(n))) asm("rol\t%b1, %0":"+r,r"(v):"i,c"(n)); else +#endif + v = (v << n) | (v >> (BitsInType(T)-n)); + return (v); +} + +/// Bitwise rotate value right +template +inline T Ror (T v, size_t n) +{ +#if __i386__ || __x86_64__ + if (!(__builtin_constant_p(v) && __builtin_constant_p(n))) asm("ror\t%b1, %0":"+r,r"(v):"i,c"(n)); else +#endif + v = (v >> n) | (v << (BitsInType(T)-n)); + return (v); +} + /// \brief This template is to be used for dereferencing a type-punned pointer without a warning. /// /// When casting a local variable to an unrelated type through a pointer (for @@ -368,7 +430,6 @@ inline DEST noalias_cast (SRC s) namespace simd { /// Call after you are done using SIMD algorithms for 64 bit tuples. - inline void reset_mmx (void) INLINE; #define ALL_MMX_REGS_CHANGELIST "mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7","st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)" #if CPU_HAS_3DNOW inline void reset_mmx (void) { asm ("femms":::ALL_MMX_REGS_CHANGELIST); } diff --git a/packages/language/cxx/ustl/current/include/ustl/uvector.h b/packages/language/cxx/ustl/current/include/ustl/uvector.h --- a/packages/language/cxx/ustl/current/include/ustl/uvector.h +++ b/packages/language/cxx/ustl/current/include/ustl/uvector.h @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef UVECTOR_H_00BB13AF082BEB7829C031B265518169 @@ -8,6 +8,7 @@ #include "memblock.h" #include "umemory.h" +#include "upredalgo.h" namespace ustl { @@ -98,7 +99,7 @@ public: inline void write (ostream& os) const { container_write (os, *this); } inline void text_write (ostringstream& os) const { container_text_write (os, *this); } inline size_t stream_size (void) const { return (container_stream_size (*this)); } -private: +protected: inline iterator insert_space (iterator ip, size_type n); private: memblock m_Data; ///< Raw element data, consecutively stored. diff --git a/packages/language/cxx/ustl/current/src/bktrace.cpp b/packages/language/cxx/ustl/current/src/bktrace.cpp --- a/packages/language/cxx/ustl/current/src/bktrace.cpp +++ b/packages/language/cxx/ustl/current/src/bktrace.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2006-2009 by Mike Sharov +// Copyright (c) 2006 by Mike Sharov // This file is free software, distributed under the MIT License. #include "bktrace.h" @@ -109,7 +109,7 @@ void CBacktrace::text_write (ostringstre /// Reads the object from stream \p is. void CBacktrace::read (istream& is) { - assert (is.aligned (alignof (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned"); + assert (is.aligned (stream_align_of (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned"); is >> m_nFrames >> m_SymbolsSize; nfree (m_Symbols); m_Symbols = (char*) malloc (m_SymbolsSize + 1); @@ -122,7 +122,7 @@ void CBacktrace::read (istream& is) /// Writes the object to stream \p os. void CBacktrace::write (ostream& os) const { - assert (os.aligned (alignof (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned"); + assert (os.aligned (stream_align_of (m_Addresses[0])) && "Backtrace object contains pointers and must be void* aligned"); os << m_nFrames << m_SymbolsSize; os.write (m_Symbols, m_SymbolsSize); os.align(); diff --git a/packages/language/cxx/ustl/current/src/cmemlink.cpp b/packages/language/cxx/ustl/current/src/cmemlink.cpp --- a/packages/language/cxx/ustl/current/src/cmemlink.cpp +++ b/packages/language/cxx/ustl/current/src/cmemlink.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "cmemlink.h" @@ -40,7 +40,7 @@ void cmemlink::write (ostream& os) const assert (sz == size() && "No support for writing memblocks larger than 4G"); os << sz; os.write (cdata(), sz); - os.align (alignof (sz)); + os.align (stream_align_of (sz)); } /// Writes the object to stream \p os @@ -53,7 +53,7 @@ void cmemlink::text_write (ostringstream cmemlink::size_type cmemlink::stream_size (void) const { const written_size_type sz (size()); - return (Align (stream_size_of (sz) + sz, alignof(sz))); + return (Align (stream_size_of (sz) + sz, stream_align_of(sz))); } #ifdef CYGCLS_USTL_FSTREAMS diff --git a/packages/language/cxx/ustl/current/src/fstream.cpp b/packages/language/cxx/ustl/current/src/fstream.cpp --- a/packages/language/cxx/ustl/current/src/fstream.cpp +++ b/packages/language/cxx/ustl/current/src/fstream.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "fstream.h" @@ -96,7 +96,11 @@ void fstream::detach (void) 0, // nocreate O_NOCTTY // noctty }; - int flags = (m - 1) & O_ACCMODE; // in and out + int flags; + if (O_RDONLY == in-1 && O_WRONLY == out-1 && O_RDWR == (in|out)-1) + flags = (m - 1) & O_ACCMODE; + else + flags = ((m&(in|out))==(in|out)) ? O_RDWR : ((m&out) ? O_WRONLY : O_RDONLY); for (uoff_t i = 0; i < VectorSize(s_OMFlags); ++ i) flags |= s_OMFlags[i] & (!(m & (1 << i)) - 1); if (m & nocreate) diff --git a/packages/language/cxx/ustl/current/src/memblock.cpp b/packages/language/cxx/ustl/current/src/memblock.cpp --- a/packages/language/cxx/ustl/current/src/memblock.cpp +++ b/packages/language/cxx/ustl/current/src/memblock.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "mistream.h" @@ -73,7 +73,7 @@ void memblock::assign (const void* p, si { assert ((p != (const void*) cdata() || size() == n) && "Self-assignment can not resize"); resize (n); - copy (p, n); + copy_n (pointer(p), n, begin()); } /// \brief Reallocates internal block to hold at least \p newSize bytes. @@ -132,7 +132,7 @@ void memblock::read (istream& is) return; resize (n); is.read (data(), writable_size()); - is.align (alignof (n)); + is.align (stream_align_of (n)); } #ifdef CYGCLS_USTL_FSTREAMS diff --git a/packages/language/cxx/ustl/current/src/memlink.cpp b/packages/language/cxx/ustl/current/src/memlink.cpp --- a/packages/language/cxx/ustl/current/src/memlink.cpp +++ b/packages/language/cxx/ustl/current/src/memlink.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "mistream.h" @@ -19,17 +19,7 @@ void memlink::read (istream& is) USTL_THROW(length_error ("memlink can not increase the size of the linked storage for reading")); resize (n); is.read (data(), n); - is.align (alignof (n)); -} - -/// Copies data from \p p, \p n to the linked block starting at \p start. -void memlink::copy (iterator start, const void* p, size_type n) -{ - assert (data() || !n); - assert (p || !n); - assert (start >= begin() && start + n <= end()); - if (p) - copy_n (const_iterator(p), n, start); + is.align (stream_align_of (n)); } /// Fills the linked block with the given pattern. diff --git a/packages/language/cxx/ustl/current/src/mistream.cpp b/packages/language/cxx/ustl/current/src/mistream.cpp --- a/packages/language/cxx/ustl/current/src/mistream.cpp +++ b/packages/language/cxx/ustl/current/src/mistream.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "mistream.h" diff --git a/packages/language/cxx/ustl/current/src/ofstream.cpp b/packages/language/cxx/ustl/current/src/ofstream.cpp --- a/packages/language/cxx/ustl/current/src/ofstream.cpp +++ b/packages/language/cxx/ustl/current/src/ofstream.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "ofstream.h" diff --git a/packages/language/cxx/ustl/current/src/sistream.cpp b/packages/language/cxx/ustl/current/src/sistream.cpp --- a/packages/language/cxx/ustl/current/src/sistream.cpp +++ b/packages/language/cxx/ustl/current/src/sistream.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "sistream.h" diff --git a/packages/language/cxx/ustl/current/src/sostream.cpp b/packages/language/cxx/ustl/current/src/sostream.cpp --- a/packages/language/cxx/ustl/current/src/sostream.cpp +++ b/packages/language/cxx/ustl/current/src/sostream.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "mistream.h" // for istream_iterator, referenced in utf8.h diff --git a/packages/language/cxx/ustl/current/src/ualgobase.cpp b/packages/language/cxx/ustl/current/src/ualgobase.cpp --- a/packages/language/cxx/ustl/current/src/ualgobase.cpp +++ b/packages/language/cxx/ustl/current/src/ualgobase.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #ifndef NDEBUG // Optimized code here. asserts slow it down, and are checked elsewhere. @@ -21,13 +21,6 @@ template static inline void // Copy functions //---------------------------------------------------------------------- -#if __GNUC__ >= 3 -static inline void movsb_dir_up (void) INLINE; -static inline void movsb_dir_down (void) INLINE; -static inline void movsb (const void*& src, size_t nBytes, void*& dest) INLINE; -static inline void movsd (const void*& src, size_t nWords, void*& dest) INLINE; -#endif - static inline void movsb_dir_up (void) { asm volatile ("cld"); } static inline void movsb_dir_down (void) { asm volatile ("std"); } @@ -58,10 +51,6 @@ template <> inline void stosv (uint32_t* #define MMX_ALIGN 16U // Data must be aligned on this grain #define MMX_BS 32U // Assembly routines copy data this many bytes at a time. -static inline void simd_block_copy (const void* src, void* dest) INLINE; -static inline void simd_block_store (uint8_t* dest) INLINE; -static inline void simd_block_cleanup (void) INLINE; - static inline void simd_block_copy (const void* src, void* dest) { const char* csrc ((const char*) src); diff --git a/packages/language/cxx/ustl/current/src/ubitset.cpp b/packages/language/cxx/ustl/current/src/ubitset.cpp --- a/packages/language/cxx/ustl/current/src/ubitset.cpp +++ b/packages/language/cxx/ustl/current/src/ubitset.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "ubitset.h" diff --git a/packages/language/cxx/ustl/current/src/uexception.cpp b/packages/language/cxx/ustl/current/src/uexception.cpp --- a/packages/language/cxx/ustl/current/src/uexception.cpp +++ b/packages/language/cxx/ustl/current/src/uexception.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "uexception.h" @@ -10,8 +10,9 @@ #include "strmsize.h" #include "uspecial.h" #include + #if HAVE_CXXABI_H && WANT_NAME_DEMANGLING - #include +extern "C" char* __cxa_demangle (const char* mangled_name, char* output_buffer, size_t* length, int* status); #endif namespace ustl { @@ -212,7 +213,7 @@ const char* demangle_type_name (char* bu char dmname [256]; size_t sz = VectorSize(dmname); int bFailed; - abi::__cxa_demangle (buf, dmname, &sz, &bFailed); + __cxa_demangle (buf, dmname, &sz, &bFailed); if (!bFailed) { bl = min (strlen (dmname), bufSize - 1); memcpy (buf, dmname, bl); diff --git a/packages/language/cxx/ustl/current/src/unew.cpp b/packages/language/cxx/ustl/current/src/unew.cpp --- a/packages/language/cxx/ustl/current/src/unew.cpp +++ b/packages/language/cxx/ustl/current/src/unew.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "unew.h" diff --git a/packages/language/cxx/ustl/current/src/ustdxept.cpp b/packages/language/cxx/ustl/current/src/ustdxept.cpp --- a/packages/language/cxx/ustl/current/src/ustdxept.cpp +++ b/packages/language/cxx/ustl/current/src/ustdxept.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "ustdxept.h" diff --git a/packages/language/cxx/ustl/current/src/ustring.cpp b/packages/language/cxx/ustl/current/src/ustring.cpp --- a/packages/language/cxx/ustl/current/src/ustring.cpp +++ b/packages/language/cxx/ustl/current/src/ustring.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "ustring.h" @@ -68,7 +68,7 @@ void string::assign (const_pointer s, si while (len && s[len - 1] == 0) -- len; resize (len); - copy (s, len); + copy_n (s, len, begin()); } /// Appends to itself the value of string \p s of length \p len. @@ -235,7 +235,7 @@ void string::replace (iterator first, it uoff_t string::find (const_reference c, uoff_t pos) const { const_iterator found = ::ustl::find (iat(pos), end(), c); - return (found < end() ? distance(begin(),found) : npos); + return (found < end() ? (uoff_t) distance(begin(),found) : npos); } /// Returns the offset of the first occurence of substring \p s of length \p n after \p pos. @@ -274,7 +274,7 @@ uoff_t string::rfind (const string& s, u for (i = 0; size_type(i) < s.size(); ++ i) if (m[-i] != d[-i]) break; - return (d > sp ? distance (begin(), d + 2 - s.size()) : npos); + return (d > sp ? (uoff_t) distance (begin(), d + 2 - s.size()) : npos); } /// Returns the offset of the first occurence of one of characters in \p s of size \p n after \p pos. diff --git a/packages/language/cxx/ustl/current/tests/bvt00.cpp b/packages/language/cxx/ustl/current/tests/bvt00.cpp --- a/packages/language/cxx/ustl/current/tests/bvt00.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt00.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt01.cpp b/packages/language/cxx/ustl/current/tests/bvt01.cpp --- a/packages/language/cxx/ustl/current/tests/bvt01.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt01.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -53,7 +53,7 @@ void TestML (void) WriteCML (a); a.fill (a.begin() + 5, "TEST", 4, 3); WriteCML (a); - a.copy (cstr, VectorSize(str) - 1); + copy_n (cstr, VectorSize(str) - 1, a.begin()); WriteCML (a); } diff --git a/packages/language/cxx/ustl/current/tests/bvt02.cpp b/packages/language/cxx/ustl/current/tests/bvt02.cpp --- a/packages/language/cxx/ustl/current/tests/bvt02.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt02.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -49,8 +49,7 @@ void TestMB (void) if (a.begin() == b.begin()) cout << "Assignment does not copy a link\n"; a.deallocate(); - a.resize (strTestLen); - a.copy (strTest, strTestLen); + a.assign (strTest, strTestLen); WriteCML (a); a.insert (a.begin() + 5, 9); a.fill (a.begin() + 5, "-", 1, 9); diff --git a/packages/language/cxx/ustl/current/tests/bvt03.cpp b/packages/language/cxx/ustl/current/tests/bvt03.cpp --- a/packages/language/cxx/ustl/current/tests/bvt03.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt03.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -29,17 +29,17 @@ void TestStreams (void) size_t totalSize = stream_size_of(c); totalSize += stream_size_of(uc); - totalSize = Align (totalSize, alignof(bv)); + totalSize = Align (totalSize, stream_align_of(bv)); totalSize += stream_size_of(bv); - totalSize = Align (totalSize, alignof(i)); + totalSize = Align (totalSize, stream_align_of(i)); totalSize += stream_size_of(i); totalSize += stream_size_of(ui); totalSize = Align (totalSize); totalSize += stream_size_of(li); totalSize += stream_size_of(uli); - totalSize = Align (totalSize, alignof(f)); + totalSize = Align (totalSize, stream_align_of(f)); totalSize += stream_size_of(f); - totalSize = Align (totalSize, alignof(d)); + totalSize = Align (totalSize, stream_align_of(d)); totalSize += stream_size_of(d); totalSize += stream_size_of(si); totalSize += stream_size_of(usi); diff --git a/packages/language/cxx/ustl/current/tests/bvt04.cpp b/packages/language/cxx/ustl/current/tests/bvt04.cpp --- a/packages/language/cxx/ustl/current/tests/bvt04.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt04.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt05.cpp b/packages/language/cxx/ustl/current/tests/bvt05.cpp --- a/packages/language/cxx/ustl/current/tests/bvt05.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt05.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -158,32 +158,32 @@ static void TestAlgorithms (void) PrintVector (v); v.assign (first, last); - cout << "fill 64083 uint8_t(0x41) "; - TestBigFill (64083, 0x41); - cout << "fill 64083 uint16_t(0x4142) "; - TestBigFill (64083, 0x4142); - cout << "fill 64083 uint32_t(0x41424344) "; - TestBigFill (64083, 0x41424344); - cout << "fill 64083 float(0.4242) "; - TestBigFill (64083, 0x4242f); + cout << "fill 3207 uint8_t(0x41) "; + TestBigFill (3207, 0x41); + cout << "fill 3207 uint16_t(0x4142) "; + TestBigFill (3207, 0x4142); + cout << "fill 3207 uint32_t(0x41424344) "; + TestBigFill (3207, 0x41424344); + cout << "fill 3207 float(0.4242) "; + TestBigFill (3207, 0x4242f); #if HAVE_INT64_T - cout << "fill 64083 uint64_t(0x4142434445464748) "; - TestBigFill (64083, UINT64_C(0x4142434445464748)); + cout << "fill 3207 uint64_t(0x4142434445464748) "; + TestBigFill (3207, UINT64_C(0x4142434445464748)); #else cout << "No 64bit types available on this platform\n"; #endif - cout << "copy 64083 uint8_t(0x41) "; - TestBigCopy (64083, 0x41); - cout << "copy 64083 uint16_t(0x4142) "; - TestBigCopy (64083, 0x4142); - cout << "copy 64083 uint32_t(0x41424344) "; - TestBigCopy (64083, 0x41424344); - cout << "copy 64083 float(0.4242) "; - TestBigCopy (64083, 0.4242f); + cout << "copy 3207 uint8_t(0x41) "; + TestBigCopy (3207, 0x41); + cout << "copy 3207 uint16_t(0x4142) "; + TestBigCopy (3207, 0x4142); + cout << "copy 3207 uint32_t(0x41424344) "; + TestBigCopy (3207, 0x41424344); + cout << "copy 3207 float(0.4242) "; + TestBigCopy (3207, 0.4242f); #if HAVE_INT64_T - cout << "copy 64083 uint64_t(0x4142434445464748) "; - TestBigCopy (64083, UINT64_C(0x4142434445464748)); + cout << "copy 3207 uint64_t(0x4142434445464748) "; + TestBigCopy (3207, UINT64_C(0x4142434445464748)); #else cout << "No 64bit types available on this platform\n"; #endif @@ -377,22 +377,22 @@ static void TestAlgorithms (void) v.resize (4); setEnd = set_difference (VectorRange(c_Set1), VectorRange(c_Set2), v.begin()); PrintVector (v); - assert (setEnd == v.end()); + if (setEnd != v.end()) cout << "incorrect range\n"; cout << "set_symmetric_difference\n"; v.resize (7); setEnd = set_symmetric_difference (VectorRange(c_Set1), VectorRange(c_Set2), v.begin()); PrintVector (v); - assert (setEnd == v.end()); + if (setEnd != v.end()) cout << "incorrect range\n"; cout << "set_intersection\n"; v.resize (2); setEnd = set_intersection (VectorRange(c_Set1), VectorRange(c_Set2), v.begin()); PrintVector (v); - assert (setEnd == v.end()); + if (setEnd != v.end()) cout << "incorrect range\n"; cout << "set_union\n"; v.resize (9); setEnd = set_union (VectorRange(c_Set1), VectorRange(c_Set2), v.begin()); PrintVector (v); - assert (setEnd == v.end()); + if (setEnd != v.end()) cout << "incorrect range\n"; v.assign (first, last); } diff --git a/packages/language/cxx/ustl/current/tests/bvt06.cpp b/packages/language/cxx/ustl/current/tests/bvt06.cpp --- a/packages/language/cxx/ustl/current/tests/bvt06.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt06.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt07.cpp b/packages/language/cxx/ustl/current/tests/bvt07.cpp --- a/packages/language/cxx/ustl/current/tests/bvt07.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt07.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -45,10 +45,7 @@ void TestString (void) s2 = "World"; s3 = s1 + s2; cout << s3 << endl; - s3 = "Concatenated "; - s3 += s1.c_str(); - s3 += s2; - s3 += " string."; + s3 = "Concatenated " + s1 + s2 + " string."; cout << s3 << endl; if (s1 < s2) diff --git a/packages/language/cxx/ustl/current/tests/bvt08.cpp b/packages/language/cxx/ustl/current/tests/bvt08.cpp --- a/packages/language/cxx/ustl/current/tests/bvt08.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt08.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt09.cpp b/packages/language/cxx/ustl/current/tests/bvt09.cpp --- a/packages/language/cxx/ustl/current/tests/bvt09.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt09.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -72,8 +72,8 @@ void TestStringStreams (void) cout.format ("u_long: %ld\n", uli); cout.format ("float: %.2f\n", f); cout.format ("double: %.2f\n", d); - cout.format ("short: %hd\n", static_cast(si)); - cout.format ("u_short: %hd\n", static_cast(usi)); + cout.format ("short: %d\n", static_cast(si)); + cout.format ("u_short: %d\n", static_cast(usi)); cout << endl; cout << "Dump:" << endl; diff --git a/packages/language/cxx/ustl/current/tests/bvt10.cpp b/packages/language/cxx/ustl/current/tests/bvt10.cpp --- a/packages/language/cxx/ustl/current/tests/bvt10.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt10.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt11.cpp b/packages/language/cxx/ustl/current/tests/bvt11.cpp --- a/packages/language/cxx/ustl/current/tests/bvt11.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt11.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt12.cpp b/packages/language/cxx/ustl/current/tests/bvt12.cpp --- a/packages/language/cxx/ustl/current/tests/bvt12.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt12.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt13.cpp b/packages/language/cxx/ustl/current/tests/bvt13.cpp --- a/packages/language/cxx/ustl/current/tests/bvt13.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt13.cpp @@ -3,7 +3,7 @@ // // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt14.cpp b/packages/language/cxx/ustl/current/tests/bvt14.cpp --- a/packages/language/cxx/ustl/current/tests/bvt14.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt14.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -49,7 +49,7 @@ void TestMap (void) cout << endl; mcopy = months; - monthmap_t::iterator frob = mcopy.insert (make_pair (string("frobuary"), 42)).first; + monthmap_t::iterator frob = mcopy.insert (mcopy.begin(), make_pair (string("frobuary"), 42)); cout << "After inserting " << frob->first << "," << frob->second << ":" << endl; for (i = mcopy.begin(); i < mcopy.end(); ++ i) cout << i->first << " "; diff --git a/packages/language/cxx/ustl/current/tests/bvt15.cpp b/packages/language/cxx/ustl/current/tests/bvt15.cpp --- a/packages/language/cxx/ustl/current/tests/bvt15.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt15.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -27,10 +27,10 @@ void TestMultiMap (void) employees.insert (make_pair (47000, string("Barbara"))); employees.insert (make_pair (47000, string("Mary"))); - cout << "As-inserted listing:" << endl; + cout << "As-inserted listing:\n"; PrintEntries (employees); - cout << "Alphabetical listing:" << endl; + cout << "Alphabetical listing:\n"; sort (employees); PrintEntries (employees); @@ -41,13 +41,15 @@ void TestMultiMap (void) cout << " " << i->second; cout << endl; - cout << "There are " << employees.count (27000) << " low-paid employees" << endl; + cout << employees.find(27000)->second << " makes $27000\n"; - cout << "Firing all low-paid employees:" << endl; + cout << "There are " << employees.count (27000) << " low-paid employees\n"; + + cout << "Firing all low-paid employees:\n"; employees.erase (27000); PrintEntries (employees); - cout << "Firing dumb employees:" << endl; + cout << "Firing dumb employees:\n"; employees.erase (employees.begin(), employees.begin() + 1); PrintEntries (employees); } diff --git a/packages/language/cxx/ustl/current/tests/bvt15.std b/packages/language/cxx/ustl/current/tests/bvt15.std --- a/packages/language/cxx/ustl/current/tests/bvt15.std +++ b/packages/language/cxx/ustl/current/tests/bvt15.std @@ -15,6 +15,7 @@ Gail - $47000 Mary - $47000 BigBoss - $99000 Employees making $47000: Barbara Gail Mary +Dave makes $27000 There are 2 low-paid employees Firing all low-paid employees: Dumb - $15000 diff --git a/packages/language/cxx/ustl/current/tests/bvt16.cpp b/packages/language/cxx/ustl/current/tests/bvt16.cpp --- a/packages/language/cxx/ustl/current/tests/bvt16.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt16.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -22,7 +22,7 @@ void TestUTF8 (void) { cout << "Generating Unicode characters "; vector srcChars; - srcChars.resize (0xFFFF); + srcChars.resize (0xFFF); iota (srcChars.begin(), srcChars.end(), 0); cout.format ("%zu - %zu\n", size_t(srcChars[0]), size_t(srcChars.back())); diff --git a/packages/language/cxx/ustl/current/tests/bvt17.cpp b/packages/language/cxx/ustl/current/tests/bvt17.cpp --- a/packages/language/cxx/ustl/current/tests/bvt17.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt17.cpp @@ -1,7 +1,7 @@ // 011010011001011001011000100100 // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt18.cpp b/packages/language/cxx/ustl/current/tests/bvt18.cpp --- a/packages/language/cxx/ustl/current/tests/bvt18.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt18.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt19.cpp b/packages/language/cxx/ustl/current/tests/bvt19.cpp --- a/packages/language/cxx/ustl/current/tests/bvt19.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt19.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt20.cpp b/packages/language/cxx/ustl/current/tests/bvt20.cpp --- a/packages/language/cxx/ustl/current/tests/bvt20.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt20.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt21.cpp b/packages/language/cxx/ustl/current/tests/bvt21.cpp --- a/packages/language/cxx/ustl/current/tests/bvt21.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt21.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" @@ -33,6 +33,12 @@ void TestUtility (void) cout << "Align(17,7) = " << Align(17,7) << endl; cout << "Align(14,7) = " << Align(14,7) << endl; cout << endl; + cout << "NextPow2(0) = " << NextPow2(0) << endl; + cout << "NextPow2(1) = " << NextPow2(1) << endl; + cout << "NextPow2(4) = " << NextPow2(4) << endl; + cout << "NextPow2(3827) = " << NextPow2(3827) << endl; + cout << "NextPow2(0xFFFFFFF0) = " << NextPow2(0xFFFFFFF0) << endl; + cout << endl; cout << "advance(42,0) = " << advance(42,0) << endl; cout << "advance(42,3) = " << advance(42,3) << endl; const void *cvp = (const void*) 0x1234; diff --git a/packages/language/cxx/ustl/current/tests/bvt21.std b/packages/language/cxx/ustl/current/tests/bvt21.std --- a/packages/language/cxx/ustl/current/tests/bvt21.std +++ b/packages/language/cxx/ustl/current/tests/bvt21.std @@ -7,6 +7,12 @@ Align(5,2) = 6 Align(17,7) = 21 Align(14,7) = 14 +NextPow2(0) = 1 +NextPow2(1) = 2 +NextPow2(4) = 4 +NextPow2(3827) = 4096 +NextPow2(0xFFFFFFF0) = 1 + advance(42,0) = 42 advance(42,3) = 45 cvp = 1234 diff --git a/packages/language/cxx/ustl/current/tests/bvt22.cpp b/packages/language/cxx/ustl/current/tests/bvt22.cpp --- a/packages/language/cxx/ustl/current/tests/bvt22.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt22.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt23.cpp b/packages/language/cxx/ustl/current/tests/bvt23.cpp --- a/packages/language/cxx/ustl/current/tests/bvt23.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt23.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt24.cpp b/packages/language/cxx/ustl/current/tests/bvt24.cpp --- a/packages/language/cxx/ustl/current/tests/bvt24.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt24.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt25.cpp b/packages/language/cxx/ustl/current/tests/bvt25.cpp --- a/packages/language/cxx/ustl/current/tests/bvt25.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt25.cpp @@ -1,10 +1,20 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" +#ifdef CYGIMP_USTL_TESTS_BVT25_ROMFS +# include +# if (CYG_BYTEORDER == CYG_LSBFIRST) +# include +# else +# include +# endif +MTAB_ENTRY(romfs_mte1, "/", "romfs", "", (CYG_ADDRWORD) &filedata[0]); +#endif + void TestFStream (void) { fstream fs ("bvt/bvt25.std", ios::in | ios::nocreate); diff --git a/packages/language/cxx/ustl/current/tests/bvt26.cpp b/packages/language/cxx/ustl/current/tests/bvt26.cpp --- a/packages/language/cxx/ustl/current/tests/bvt26.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt26.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/language/cxx/ustl/current/tests/bvt27.cpp b/packages/language/cxx/ustl/current/tests/bvt27.cpp --- a/packages/language/cxx/ustl/current/tests/bvt27.cpp +++ b/packages/language/cxx/ustl/current/tests/bvt27.cpp @@ -1,6 +1,6 @@ // This file is part of the uSTL library, an STL implementation. // -// Copyright (c) 2005-2009 by Mike Sharov +// Copyright (c) 2005 by Mike Sharov // This file is free software, distributed under the MIT License. #include "stdtest.h" diff --git a/packages/net/bsd_tcpip/current/ChangeLog b/packages/net/bsd_tcpip/current/ChangeLog --- a/packages/net/bsd_tcpip/current/ChangeLog +++ b/packages/net/bsd_tcpip/current/ChangeLog @@ -1,3 +1,100 @@ +2012-03-13 Grant Edwards + + * src/ecos/support.c (_dumpentry, show_network_tables): Fix + compiler warnings by removing variables that are set but never + referenced. [ Bugzilla 1001516 ] + +2012-03-08 Grant Edwards + + * doc/freebsd.sgml: Add section on how to disable ipv6 support at + runtime. [ Bugzilla 1001502 ] + +2012-03-08 Grant Edwards + + * src/sys/netinet6/icmp6.c (icmp6_redirect_input): + * src/sys/netinet6/in6_src.c (in6_selectroute): + * src/sys/netinet6/ip6_mroute.c (phyint_send, pim6_input): + * src/sys/netinet6/nd6.c (nd6_timer, nd6_dad_ns_input): + * src/sys/netinet6/nd6_rtr.c (prelist_update): + * src/sys/netinet6/ip6_output.c (ip6_ctloutput, ip6_raw_ctloutput): + * src/sys/netinet6/raw_ip6.c (rip6_ctlinput): + * src/sys/netinet6/ip6_input.c (ip6_hopopts_input): Fix compiler + warnings by removing variables that are set but never referenced, + or by declaring them as "unused" if they are referenced only by + conditionally-compiled code. + * src/sys/netinet6/raw_ip6.c (rip6_ctlinput): + * src/sys/netinet6/in6_ifattach.c (get_rand_ifid,in6_nigroup): + * src/sys/netinet6/ip6_output.c (ip6_insert_jumboopt): + * src/sys/netinet6/ip6_input.c (ip6_get_prevhdr): Fix compiler + warnings about signed/unsigned char mismatches. + * src/sys/netinet6/ip6_input.c (ip6_savecontrol): Fix + grouping/precedence/paren error in flag checking expression -- + verified same fix is already in upstream. + [ Bugzilla 1001526 ] + +2012-03-08 Grant Edwards + + * src/sys/net/if_ethersubr.c (ether_output, ether_resolvemulti): + Fix compiler warning by removing variable that was set but never + referenced. Fix compiler warning about signed/unsigned pointer + mismatch. + * src/sys/netinet/tcp_input.c (tcp_input): + * src/sys/netinet/tcp_output.c (tcp_output): + * src/sys/netinet/ip_encap.c (encap6_ctlinput): + * src/sys/netinet/udp_usrreq.c (udp_output, udp_connect): Fix + compiler warnings about variables that are set but not referenced. + Some are removed, others that are referenced in + conditionally-compiled code are marked with the "unused" + attribute. + [ Bugzilla 1001525 ] + +2012-03-06 Grant Edwards + + * cdl/freebsd_net.cdl: + * src/sys/netinet/in_pcb.c: Add CDL option + CYGOPT_NET_FREEBSD_FORCE_DIRECTED_BROADCAST that allows you to + control whether or not packets sent to 255.255.255.255 get + redirected to the interface's subnet broadcast address. By + default, this option is enabled (behavior is the same as + before this change). [ Bugzilla 1001508 ] + +2012-03-06 Grant Edwards + + * include/sys/param.h: + * src/sys/netinet6/ip6_input.c: Make ip6_init2() visible globally + as cyg_ip6_init2() so that it's possible to disable ipv6 support + at runtime by munging the net init table and replacing calls to + net_add_domain(&inet6domain) and ip6_init2() with calls to a noop + function. [ Bugzilla 1001502 ] + +2012-02-29 Grant Edwards + + * cdl/freebsd_net.cdl: Add -fno-strict-aliasing compiler flag to fix + compiler warnings from newer versions (4.6) of gcc. [ bugzilla 1001501 ] + +2011-05-12 John Dallaway + + * include/sys/param.h: Fix cyg_arc4random() extern. Issue reported by + Marwijn Hessel. [ Bugzilla 1001227 ] + +2011-02-22 Kelvin Lawson + + * src/sys/netinet/if_ether.c: Merge fix from FreeBSD CVS r1.108. + Prevents creation of reciprocal ARP cache entries for hosts not on + local subnet. + * cdl/freebsd_net.cdl: + * include/netinet/tcp_var.c: + * src/sys/netinet/tcp_subr.c: + * src/sys/netinet/tcp_input.c: Merge fix from FreeBSD CVS. Introduces + a maximum size for the TCP reassembly queue to limit network buffer + usage associated with reassembly. Enable CYGNUM_NET_TCP_REASS_DIVISOR + and set it to configure the maximum number of buffers usable for TCP + reassembly. + +2010-09-18 John Dallaway + + * doc/freebsd.sgml: No longer "recent". + 2009-07-22 John Dallaway * include/sys/cdefs.h: Silence undefined macro warning reported @@ -629,7 +726,7 @@ 2002-02-05 Hugo Tyson # ####GPLCOPYRIGHTBEGIN#### # ------------------------------------------- # This file is part of eCos, the Embedded Configurable Operating System. -# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001, 2002, 2010, 2011 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/packages/net/bsd_tcpip/current/cdl/freebsd_net.cdl b/packages/net/bsd_tcpip/current/cdl/freebsd_net.cdl --- a/packages/net/bsd_tcpip/current/cdl/freebsd_net.cdl +++ b/packages/net/bsd_tcpip/current/cdl/freebsd_net.cdl @@ -291,7 +291,7 @@ cdl_package CYGPKG_NET_FREEBSD_STACK { for buffers used by the networking code. The number is an upper limit, with at least enough space to get the stack initialized. Tip: setting a breakpoint at cyg_memalloc_alloc_fail() - is an especially useful tool in establishing when there is too + is an especially useful tool in establishing when there is too little memory for an application. " } @@ -320,6 +320,22 @@ cdl_package CYGPKG_NET_FREEBSD_STACK { Clusters size." } + cdl_option CYGNUM_NET_TCP_REASS_DIVISOR { + display "Max TCP reassembly queue fraction" + flavor booldata + default_value 0 + description " + Enabling this option puts a maximum limit on the number of TCP + segments which can be queued for reassembly. The value of this + option gives the maximum proportion of clusters that can be used + for TCP reassembly. The maximum number of segments is given + by the total number of clusters available divided by the value of + this option (in other words, + nmbclusters / CYGNUM_NET_TCP_REASS_DIVISOR). So for example, + setting this option to 16 will means that no more than 1/16 of + the total number of clusters will be used for TCP reassembly." + } + cdl_option CYGPKG_NET_MAXSOCKETS { display "Max number of open sockets" flavor data @@ -419,8 +435,8 @@ cdl_package CYGPKG_NET_FREEBSD_STACK { description " The default is 50, which will usually mean a delay between tests for 'stuck' devices of 500mS, that is half a second. - The overhead only applies if no network activity occurred, - so it may be acceptable to make this value very small, + The overhead only applies if no network activity occurred, + so it may be acceptable to make this value very small, where high CPU load does not matter during network idle periods, or very large if your application tries often to send packets itself." @@ -450,7 +466,7 @@ cdl_package CYGPKG_NET_FREEBSD_STACK { display "Additional compiler flags" flavor data no_define - default_value { "-D_KERNEL" } + default_value { "-D_KERNEL -fno-strict-aliasing" } description " This option modifies the set of compiler flags for building the networking package. @@ -478,4 +494,29 @@ cdl_package CYGPKG_NET_FREEBSD_STACK { These are test specifically for the FreeBSD stack. These test features which only the FreeBSD stack has" } + + cdl_option CYGOPT_NET_FREEBSD_FORCE_DIRECTED_BROADCAST { + display "Convert limited broadcast addresses into directed broadcasts" + flavor bool + default_value 1 + description " + In line with other IP stack implementations, the BSD + network stack has historically converted packets sent to + the INADDR_BROADCAST destination addresses + (255.255.255.255) into a more specific directed broadcast + address according to the address configuration of the + primary network interface. For example if your network + interface is configured as 192.168.100.33/24 and you send + a UDP broadcast packet to 255.255.255.255, it will + actually be sent with a destination IP address of + 192.168.100.255. Over time, this behavior has been + criticized for various reasons. The primary reason is + that it becomes impossible to send UDP packets to + 255.255.255.255 once the primary network (broadcast) + interface is configured with address information. For this + reason, it is possible to disable this behavior with this + option so that packets will be sent explicitly to + INADDR_BROADCAST when that destination address is + specified." + } } diff --git a/packages/net/bsd_tcpip/current/doc/freebsd.sgml b/packages/net/bsd_tcpip/current/doc/freebsd.sgml --- a/packages/net/bsd_tcpip/current/doc/freebsd.sgml +++ b/packages/net/bsd_tcpip/current/doc/freebsd.sgml @@ -9,7 +9,7 @@ - + @@ -33,7 +33,7 @@ TCP/IP Networking for eCos now provides a complete TCP/IP networking stack, -based on a recent snapshot of the FreeBSD code, released by the +based on a snapshot of the FreeBSD code, released by the KAME project. The networking support is fully featured and well tested within the eCos environment. @@ -191,6 +191,97 @@ void cyg_select_abortcyg_select_with_abort() call to cease waiting and continue execution. - + + +Disabling IPv6 Support at Runtime + +The FreeBSD stack starts up with IPv4 support in an essentially +"disabled" state. It requires the application to take positive actions +to assign IPv4 address and routes before the interfaces will respond +to packets from the outside world. + + +This is not true of IPv6 support. If IPv6 support was enabled in the +eCos build, the stack will start up with link-local addresses +assigned and interfaces listening to certain multicast addresses. The +stack will not only respond to IPv6 packets, it will spontaneously +send IPv6 packets without actions from application code. + + +If an eCos application wishes to disable IPv6 support at runtime, the +decision has to be made very early in the boot process and actions +taken to prevent the invocation of IPv6 startup code in the network +stack. This involves two rather obscure "tricks": + + +Using a dummy device driver's "init" hook as a place to execute some +code early in the startup process + + Monkey-patching the network stack's table of +initializers by looping through it and checking the function pointers +against certain globally visible symbols and replacing the two +IPv6-specific function pointers with pointers to a "noop" function. + + + + +The code listing below shows an example of disabling IPv6 support at +runtime if the global variable we_want_to_disable_ipv6 is non-zero. +The assumption is that some code in the HAL initialization or +somewhere else has made the decision whether or not to disable IPv6 +support and set that variable accordingly. + + +// Sample code showing a method of disabling IPv6 support at runtime +// Do-nothing function we can patch into the network stack's init table +// when we want to disable one of the entries +static void +init_noop(void *dummy) +{ +} + +// Function that loops through the network stack's init table and +// disables the two IPv6 entries +static void +disable_ipv6(void) +{ + extern struct init_tab_entry __NET_INIT_TAB__[], + __NET_INIT_TAB_END__; + struct init_tab_entry *init_entry; + extern void cyg_net_add_domain(void *); + extern void ip6_init2(void *); + extern char inet6domain[]; + + for (init_entry = __NET_INIT_TAB__; init_entry != &__NET_INIT_TAB_END__; + init_entry++) + if ((init_entry->fun == ip6_init2) + || (init_entry->fun == cyg_net_add_domain + && init_entry->data == (void *)inet6domain)) + init_entry->fun = init_noop; +} + +// Function called early in the inintialization process via a dummy +// device table entry +static bool +early_init(struct cyg_devtab_entry *tab) +{ + if (we_want_to_disable_ipv6) + disable_ipv6(); + return 0; +} + +// Dummy device driver table entry that will call the above early_init() +// function during the startup process +DEVTAB_ENTRY(device_master_early_init, + "neveruse", + NULL, + NULL, + early_init, + NULL, + NULL + ); + + + diff --git a/packages/net/bsd_tcpip/current/include/netinet/tcp_var.h b/packages/net/bsd_tcpip/current/include/netinet/tcp_var.h --- a/packages/net/bsd_tcpip/current/include/netinet/tcp_var.h +++ b/packages/net/bsd_tcpip/current/include/netinet/tcp_var.h @@ -67,6 +67,8 @@ struct tseg_qent { struct mbuf *tqe_m; /* mbuf contains packet */ }; LIST_HEAD(tsegqe_head, tseg_qent); +extern int tcp_reass_maxseg; +extern int tcp_reass_qsize; #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_TSEGQ); #endif diff --git a/packages/net/bsd_tcpip/current/include/sys/param.h b/packages/net/bsd_tcpip/current/include/sys/param.h --- a/packages/net/bsd_tcpip/current/include/sys/param.h +++ b/packages/net/bsd_tcpip/current/include/sys/param.h @@ -12,7 +12,7 @@ // and license included herein. // // Portions created by the Free Software Foundation are -// Copyright (C) 2002 Free Software Foundation, Inc. +// Copyright (C) 2002, 2011 Free Software Foundation, Inc. // ------------------------------------------- // ####BSDCOPYRIGHTEND#### //========================================================================== @@ -222,6 +222,7 @@ #define ip6_get_prevhdr cyg_ip6_get_prevhdr #define ip6_getdstifaddr cyg_ip6_getdstifaddr #define ip6_init cyg_ip6_init +#define ip6_init2 cyg_ip6_init2 #define ip6_input cyg_ip6_input #define ip6_lasthdr cyg_ip6_lasthdr #define ip6_mforward cyg_ip6_mforward @@ -1042,5 +1043,5 @@ if (cyg_net_log_mask & lvl) #endif #endif // _KERNEL -int extern cyg_arc4random(void); +extern int cyg_arc4random(void); #endif //_SYS_PARAM_H_ diff --git a/packages/net/bsd_tcpip/current/src/ecos/support.c b/packages/net/bsd_tcpip/current/src/ecos/support.c --- a/packages/net/bsd_tcpip/current/src/ecos/support.c +++ b/packages/net/bsd_tcpip/current/src/ecos/support.c @@ -979,14 +979,13 @@ static int _dumpentry(struct radix_node *rn, void *vw) { struct rtentry *rt = (struct rtentry *)rn; - struct sockaddr *dst, *gate, *netmask, *genmask; + struct sockaddr *dst, *gate, *netmask; char addr[64], *cp; pr_fun *pr = (pr_fun *)vw; dst = rt_key(rt); gate = rt->rt_gateway; netmask = rt_mask(rt); - genmask = rt->rt_genmask; if ((rt->rt_flags & (RTF_UP | RTF_WASCLONED)) == RTF_UP) { _inet_ntop(dst, addr, sizeof(addr)); (*pr)("%-15s ", addr); @@ -1030,7 +1029,7 @@ static int void show_network_tables(pr_fun *pr) { - int i, error; + int i; struct radix_node_head *rnh; struct ifnet *ifp; @@ -1039,7 +1038,7 @@ show_network_tables(pr_fun *pr) (*pr)("Destination Gateway Mask Flags Interface\n"); for (i = 1; i <= AF_MAX; i++) { if ((rnh = rt_tables[i]) != NULL) { - error = rnh->rnh_walktree(rnh, _dumpentry, pr); + rnh->rnh_walktree(rnh, _dumpentry, pr); } } diff --git a/packages/net/bsd_tcpip/current/src/sys/net/if_ethersubr.c b/packages/net/bsd_tcpip/current/src/sys/net/if_ethersubr.c --- a/packages/net/bsd_tcpip/current/src/sys/net/if_ethersubr.c +++ b/packages/net/bsd_tcpip/current/src/sys/net/if_ethersubr.c @@ -147,7 +147,7 @@ ether_output(ifp, m, dst, rt0) u_char esrc[6], edst[6]; register struct rtentry *rt; register struct ether_header *eh; - int off, loop_copy = 0; + int loop_copy = 0; int hlen; /* link layer header lenght */ struct arpcom *ac = IFP2AC(ifp); @@ -184,7 +184,6 @@ ether_output(ifp, m, dst, rt0) case AF_INET: if (!arpresolve(ac, rt, m, dst, edst, rt0)) return (0); /* if not yet resolved */ - off = m->m_pkthdr.len - m->m_len; type = htons(ETHERTYPE_IP); break; #endif @@ -194,7 +193,6 @@ ether_output(ifp, m, dst, rt0) /* Something bad happened */ return(0); } - off = m->m_pkthdr.len - m->m_len; type = htons(ETHERTYPE_IPV6); break; #endif @@ -935,7 +933,7 @@ ether_resolvemulti(ifp, llsa, sa) sdl->sdl_index = ifp->if_index; sdl->sdl_type = IFT_ETHER; sdl->sdl_alen = ETHER_ADDR_LEN; - e_addr = LLADDR(sdl); + e_addr = (unsigned char*)LLADDR(sdl); ETHER_MAP_IPV6_MULTICAST(&sin6->sin6_addr, e_addr); *llsa = (struct sockaddr *)sdl; return 0; diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/if_ether.c b/packages/net/bsd_tcpip/current/src/sys/netinet/if_ether.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/if_ether.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/if_ether.c @@ -807,13 +807,25 @@ arplookup(addr, create, proxy) why = "could not allocate llinfo"; else if (rt->rt_gateway->sa_family != AF_LINK) why = "gateway route is not ours"; - - if (why && create) { - log(LOG_DEBUG, "arplookup %s failed: %s\n", - inet_ntoa(sin.sin_addr), why); - return 0; - } else if (why) { - return 0; + + if (why) { + if (create) { + log(LOG_DEBUG, "arplookup %s failed: %s\n", + inet_ntoa(sin.sin_addr), why); + /* + * If there are no references to this Layer 2 route, + * and it is a cloned route, and not static, and + * arplookup() is creating the route, then purge + * it from the routing table as it is probably bogus. + */ + if (((rt->rt_flags & (RTF_STATIC | RTF_WASCLONED)) == + RTF_WASCLONED) && (rt->rt_refcnt == 0)) + rtrequest(RTM_DELETE, + (struct sockaddr *)rt_key(rt), + rt->rt_gateway, rt_mask(rt), + rt->rt_flags, 0); + } + return (0); } return ((struct llinfo_arp *)rt->rt_llinfo); } diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/in_pcb.c b/packages/net/bsd_tcpip/current/src/sys/netinet/in_pcb.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/in_pcb.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/in_pcb.c @@ -369,9 +369,11 @@ in_pcbladdr(inp, nam, plocal_sin) #define ifatoia(ifa) ((struct in_ifaddr *)(ifa)) if (sin->sin_addr.s_addr == INADDR_ANY) sin->sin_addr = IA_SIN(TAILQ_FIRST(&in_ifaddrhead))->sin_addr; +#ifdef CYGOPT_NET_FREEBSD_FORCE_DIRECTED_BROADCAST else if (sin->sin_addr.s_addr == (u_long)INADDR_BROADCAST && (TAILQ_FIRST(&in_ifaddrhead)->ia_ifp->if_flags & IFF_BROADCAST)) sin->sin_addr = satosin(&TAILQ_FIRST(&in_ifaddrhead)->ia_broadaddr)->sin_addr; +#endif } if (inp->inp_laddr.s_addr == INADDR_ANY) { register struct route *ro; diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/ip_encap.c b/packages/net/bsd_tcpip/current/src/sys/netinet/ip_encap.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/ip_encap.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/ip_encap.c @@ -817,12 +817,10 @@ encap6_ctlinput(cmd, sa, d0) void *d0; { void *d = d0; - struct ip6_hdr *ip6; - struct mbuf *m; - int off; + struct ip6_hdr *ip6 CYGBLD_ATTRIB_UNUSED; + struct mbuf *m CYGBLD_ATTRIB_UNUSED; + int off CYGBLD_ATTRIB_UNUSED; struct ip6ctlparam *ip6cp = NULL; - const struct sockaddr_in6 *sa6_src = NULL; - void *cmdarg; int nxt; struct encaptab *ep; const struct ip6protosw *psw; @@ -848,14 +846,10 @@ encap6_ctlinput(cmd, sa, d0) m = ip6cp->ip6c_m; ip6 = ip6cp->ip6c_ip6; off = ip6cp->ip6c_off; - cmdarg = ip6cp->ip6c_cmdarg; - sa6_src = ip6cp->ip6c_src; nxt = ip6cp->ip6c_nxt; } else { m = NULL; ip6 = NULL; - cmdarg = NULL; - sa6_src = &sa6_any; nxt = -1; } diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_input.c b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_input.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_input.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_input.c @@ -132,6 +132,26 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, drop &drop_synfin, 0, "Drop TCP packets with SYN+FIN set"); #endif +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR +SYSCTL_NODE(_net_inet_tcp, OID_AUTO, reass, CTLFLAG_RW, 0, + "TCP Segment Reassembly Queue"); + +int tcp_reass_maxseg = 0; +SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO, maxsegments, CTLFLAG_RD, + &tcp_reass_maxseg, 0, + "Global maximum number of TCP Segments in Reassembly Queue"); + +int tcp_reass_qsize = 0; +SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO, cursegments, CTLFLAG_RD, + &tcp_reass_qsize, 0, + "Global number of TCP Segments currently in Reassembly Queue"); + +static int tcp_reass_overflows = 0; +SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO, overflows, CTLFLAG_RD, + &tcp_reass_overflows, 0, + "Global number of TCP Segment Reassembly Queue Overflows"); +#endif + struct inpcbhead tcb; #define tcb6 tcb /* for KAME src sync over BSD*'s */ struct inpcbinfo tcbinfo; @@ -185,6 +205,23 @@ tcp_reass(tp, th, tlenp, m) if (th == 0) goto present; + /* + * Limit the number of segments in the reassembly queue to prevent + * holding on to too many segments (and thus running out of mbufs). + * Make sure to let the missing segment through which caused this + * queue. Always keep one global queue entry spare to be able to + * process the missing segment. + */ +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + if (th->th_seq != tp->rcv_nxt && + tcp_reass_qsize + 1 >= tcp_reass_maxseg) { + tcp_reass_overflows++; + tcpstat.tcps_rcvmemdrop++; + m_freem(m); + return (0); + } +#endif + /* Allocate a new queue entry. If we can't, just drop the pkt. XXX */ MALLOC(te, struct tseg_qent *, sizeof (struct tseg_qent), M_TSEGQ, M_NOWAIT); @@ -193,6 +230,9 @@ tcp_reass(tp, th, tlenp, m) m_freem(m); return (0); } +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize++; +#endif /* * Find a segment which begins after this one does. @@ -218,6 +258,9 @@ tcp_reass(tp, th, tlenp, m) tcpstat.tcps_rcvdupbyte += *tlenp; m_freem(m); FREE(te, M_TSEGQ); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize--; +#endif /* * Try to present any queued data * at the left window edge to the user. @@ -253,6 +296,9 @@ tcp_reass(tp, th, tlenp, m) LIST_REMOVE(q, tqe_q); m_freem(q->tqe_m); FREE(q, M_TSEGQ); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize--; +#endif q = nq; } @@ -287,6 +333,9 @@ present: else sbappend(&so->so_rcv, q->tqe_m); FREE(q, M_TSEGQ); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize--; +#endif q = nq; } while (q && q->tqe_th->th_seq == tp->rcv_nxt); ND6_HINT(tp); @@ -362,7 +411,7 @@ tcp_input(m, off0) struct ip6_hdr *ip6 = NULL; int isipv6; #endif /* INET6 */ - int rstreason; /* For badport_bandlim accounting purposes */ + int rstreason CYGBLD_ATTRIB_UNUSED; /* For badport_bandlim accounting purposes */ #ifdef INET6 isipv6 = (mtod(m, struct ip *)->ip_v == 6) ? 1 : 0; diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_output.c b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_output.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_output.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_output.c @@ -119,7 +119,6 @@ tcp_output(tp) int off, flags, error; register struct mbuf *m; struct ip *ip = NULL; - register struct ipovly *ipov = NULL; #ifdef INET6 struct ip6_hdr *ip6 = NULL; #endif /* INET6 */ @@ -650,7 +649,6 @@ send: #endif /* INET6 */ { ip = mtod(m, struct ip *); - ipov = (struct ipovly *)ip; th = (struct tcphdr *)(ip + 1); /* this picks up the pseudo header (w/o the length) */ tcp_fillheaders(tp, ip, th); diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_subr.c b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_subr.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_subr.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_subr.c @@ -213,6 +213,10 @@ tcp_init() &tcbinfo.porthashmask); tcbinfo.ipi_zone = zinit("tcpcb", sizeof(struct inp_tp), maxsockets, ZONE_INTERRUPT, 0); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_maxseg = nmbclusters / CYGNUM_NET_TCP_REASS_DIVISOR; +#endif + #ifdef INET6 #define TCP_MINPROTOHDR (sizeof(struct ip6_hdr) + sizeof(struct tcphdr)) #else /* INET6 */ @@ -732,6 +736,9 @@ tcp_close(tp) LIST_REMOVE(q, tqe_q); m_freem(q->tqe_m); FREE(q, M_TSEGQ); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize--; +#endif } inp->inp_ppcb = NULL; soisdisconnected(so); @@ -770,6 +777,9 @@ tcp_drain() LIST_REMOVE(te, tqe_q); m_freem(te->tqe_m); FREE(te, M_TSEGQ); +#ifdef CYGNUM_NET_TCP_REASS_DIVISOR + tcp_reass_qsize--; +#endif } } } diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_usrreq.c b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_usrreq.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_usrreq.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_usrreq.c @@ -132,7 +132,7 @@ tcp_usr_attach(struct socket *so, int pr int s = splnet(); int error; struct inpcb *inp = sotoinpcb(so); - struct tcpcb *tp = 0; + struct tcpcb *tp CYGBLD_ATTRIB_UNUSED = 0; TCPDEBUG0; TCPDEBUG1(); @@ -205,7 +205,7 @@ tcp_usr_bind(struct socket *so, struct s int s = splnet(); int error = 0; struct inpcb *inp = sotoinpcb(so); - struct tcpcb *tp; + struct tcpcb *tp CYGBLD_ATTRIB_UNUSED; struct sockaddr_in *sinp; COMMON_START(); @@ -234,7 +234,7 @@ tcp6_usr_bind(struct socket *so, struct int s = splnet(); int error = 0; struct inpcb *inp = sotoinpcb(so); - struct tcpcb *tp; + struct tcpcb *tp CYGBLD_ATTRIB_UNUSED; struct sockaddr_in6 *sin6p; COMMON_START(); @@ -429,7 +429,7 @@ tcp_usr_accept(struct socket *so, struct int s = splnet(); int error = 0; struct inpcb *inp = sotoinpcb(so); - struct tcpcb *tp = NULL; + struct tcpcb *tp CYGBLD_ATTRIB_UNUSED = NULL; TCPDEBUG0; if (so->so_state & SS_ISDISCONNECTED) { @@ -453,7 +453,7 @@ tcp6_usr_accept(struct socket *so, struc int s = splnet(); int error = 0; struct inpcb *inp = sotoinpcb(so); - struct tcpcb *tp = NULL; + struct tcpcb *tp CYGBLD_ATTRIB_UNUSED = NULL; TCPDEBUG0; if (so->so_state & SS_ISDISCONNECTED) { diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet/udp_usrreq.c b/packages/net/bsd_tcpip/current/src/sys/netinet/udp_usrreq.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet/udp_usrreq.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet/udp_usrreq.c @@ -667,7 +667,6 @@ udp_output(inp, m, addr, control, p) register struct udpiphdr *ui; register int len = m->m_pkthdr.len; struct in_addr laddr; - struct sockaddr_in *sin; int s = 0, error = 0; bzero(&laddr, sizeof(laddr)); @@ -680,7 +679,6 @@ udp_output(inp, m, addr, control, p) } if (addr) { - sin = (struct sockaddr_in *)addr; laddr = inp->inp_laddr; if (inp->inp_faddr.s_addr != INADDR_ANY) { error = EISCONN; @@ -840,7 +838,6 @@ udp_connect(struct socket *so, struct so { struct inpcb *inp; int s, error; - struct sockaddr_in *sin; inp = sotoinpcb(so); if (inp == 0) @@ -850,7 +847,6 @@ udp_connect(struct socket *so, struct so error = 0; s = splnet(); if (error == 0) { - sin = (struct sockaddr_in *)nam; error = in_pcbconnect(inp, nam, p); } splx(s); diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/icmp6.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/icmp6.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/icmp6.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/icmp6.c @@ -2536,8 +2536,6 @@ icmp6_redirect_input(m, off) int icmp6len = ntohs(ip6->ip6_plen); char *lladdr = NULL; int lladdrlen = 0; - u_char *redirhdr = NULL; - int redirhdrlen = 0; struct rtentry *rt = NULL; int is_router; int is_onlink; @@ -2670,11 +2668,6 @@ icmp6_redirect_input(m, off) lladdrlen = ndopts.nd_opts_tgt_lladdr->nd_opt_len << 3; } - if (ndopts.nd_opts_rh) { - redirhdrlen = ndopts.nd_opts_rh->nd_opt_rh_len; - redirhdr = (u_char *)(ndopts.nd_opts_rh + 1); /* xxx */ - } - if (lladdr && ((ifp->if_addrlen + 2 + 7) & ~7) != lladdrlen) { nd6log((LOG_INFO, "icmp6_redirect_input: lladdrlen mismatch for %s " diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_ifattach.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_ifattach.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_ifattach.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_ifattach.c @@ -209,7 +209,7 @@ get_rand_ifid(ifp, in6) /* generate 8 bytes of pseudo-random value. */ bzero(&ctxt, sizeof(ctxt)); MD5Init(&ctxt); - MD5Update(&ctxt, hostname, hostnamelen); + MD5Update(&ctxt, (unsigned char*)hostname, hostnamelen); MD5Final(digest, &ctxt); /* assumes sizeof(digest) > sizeof(ifid) */ @@ -411,7 +411,7 @@ get_hw_ifid(ifp, in6) return -1; found: - addr = LLADDR(sdl); + addr = (unsigned char*)LLADDR(sdl); addrlen = sdl->sdl_alen; switch (ifp->if_type) { @@ -841,7 +841,7 @@ in6_nigroup(ifp, name, namelen, in6) l = p - name; strncpy(n, name, l); n[(int)l] = '\0'; - for (q = n; *q; q++) { + for (q = (unsigned char*)n; *q; q++) { if ('A' <= *q && *q <= 'Z') *q = *q - 'A' + 'a'; } @@ -849,8 +849,8 @@ in6_nigroup(ifp, name, namelen, in6) /* generate 8 bytes of pseudo-random value. */ bzero(&ctxt, sizeof(ctxt)); MD5Init(&ctxt); - MD5Update(&ctxt, &l, sizeof(l)); - MD5Update(&ctxt, n, l); + MD5Update(&ctxt, (unsigned char*)&l, sizeof(l)); + MD5Update(&ctxt, (unsigned char*)n, l); MD5Final(digest, &ctxt); bzero(in6, sizeof(*in6)); diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_src.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_src.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_src.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/in6_src.c @@ -716,8 +716,6 @@ in6_selectroute(dstsock, opts, mopts, ro * a new one. */ if (ro) { - int newroute = 0; - if (ro->ro_rt && (!(ro->ro_rt->rt_flags & RTF_UP) || !IN6_ARE_ADDR_EQUAL(&satosin6(&ro->ro_dst)->sin6_addr, @@ -729,7 +727,6 @@ in6_selectroute(dstsock, opts, mopts, ro struct sockaddr_in6 *sa6; /* No route yet, so try to acquire one */ - newroute = 1; bzero(&ro->ro_dst, sizeof(struct sockaddr_in6)); sa6 = (struct sockaddr_in6 *)&ro->ro_dst; sa6->sin6_family = AF_INET6; diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_input.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_input.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_input.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_input.c @@ -222,7 +222,7 @@ int ip6_fw_enable = 1; struct ip6stat ip6stat; -static void ip6_init2 __P((void *)); +void ip6_init2 __P((void *)); static struct mbuf *ip6_setdstifaddr __P((struct mbuf *, struct in6_ifaddr *)); static int ip6_hopopts_input __P((u_int32_t *, u_int32_t *, struct mbuf **, int *)); @@ -338,7 +338,7 @@ ip6_init() #endif } -static void +void ip6_init2(dummy) void *dummy; { @@ -1362,7 +1362,6 @@ ip6_hopopts_input(plenp, rtalertp, mp, o struct mbuf *m = *mp; int off = *offp, hbhlen; struct ip6_hbh *hbh; - u_int8_t *opt; /* validation of the length of the header */ #ifndef PULLDOWN_TEST @@ -1389,7 +1388,6 @@ ip6_hopopts_input(plenp, rtalertp, mp, o #endif off += hbhlen; hbhlen -= sizeof(struct ip6_hbh); - opt = (u_int8_t *)hbh + sizeof(struct ip6_hbh); if (ip6_process_hopopts(m, (u_int8_t *)hbh + sizeof(struct ip6_hbh), hbhlen, rtalertp, plenp) < 0) @@ -1914,7 +1912,7 @@ ip6_savecontrol(in6p, ip6, m, ctl, prevc struct ip6_rthdr *prevrth = NULL; int prevrhlen = 0; - if (!in6p->in6p_flags & IN6P_RTHDR) + if (!(in6p->in6p_flags & IN6P_RTHDR)) break; if (prevctl && prevctl->rthdr) { @@ -2274,7 +2272,7 @@ ip6_get_prevhdr(m, off) struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *); if (off == sizeof(struct ip6_hdr)) - return(&ip6->ip6_nxt); + return((char*)&ip6->ip6_nxt); else { int len, nxt; struct ip6_ext *ip6e = NULL; @@ -2298,7 +2296,7 @@ ip6_get_prevhdr(m, off) nxt = ip6e->ip6e_nxt; } if (ip6e) - return(&ip6e->ip6e_nxt); + return((char*)&ip6e->ip6e_nxt); else return NULL; } diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_mroute.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_mroute.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_mroute.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_mroute.c @@ -1605,7 +1605,7 @@ phyint_send(ip6, mifp, m) { struct mbuf *mb_copy; struct ifnet *ifp = mifp->m6_ifp; - int error = 0; + int error CYGBLD_ATTRIB_UNUSED = 0; #ifdef __NetBSD__ int s = splsoftnet(); /* needs to protect static "ro" below. */ #else @@ -1896,7 +1896,6 @@ pim6_input(mp, offp, proto) struct mbuf *mcp; struct ip6_hdr *eip6; u_int32_t *reghdr; - int rc; ++pim6stat.pim6s_rcv_registers; @@ -2000,15 +1999,15 @@ pim6_input(mp, offp, proto) #if defined(__FreeBSD__) && __FreeBSD__ >= 3 #if (__FreeBSD_version >= 410000) - rc = if_simloop(mif6table[reg_mif_num].m6_ifp, m, + if_simloop(mif6table[reg_mif_num].m6_ifp, m, dst.sin6_family, (int)NULL); #else - rc = if_simloop(mif6table[reg_mif_num].m6_ifp, m, + if_simloop(mif6table[reg_mif_num].m6_ifp, m, (struct sockaddr *) &dst, NULL); #endif #else - rc = looutput(mif6table[reg_mif_num].m6_ifp, m, + looutput(mif6table[reg_mif_num].m6_ifp, m, (struct sockaddr *) &dst, (struct rtentry *) NULL); #endif diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_output.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_output.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_output.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/ip6_output.c @@ -1654,7 +1654,7 @@ ip6_insert_jumboopt(exthdrs, plen) n->m_len = oldoptlen + JUMBOOPTLEN; bcopy(mtod(mopt, caddr_t), mtod(n, caddr_t), oldoptlen); - optbuf = mtod(n, caddr_t) + oldoptlen; + optbuf = (unsigned char*)mtod(n, caddr_t) + oldoptlen; m_freem(mopt); mopt = exthdrs->ip6e_hbh = n; } else { @@ -1822,7 +1822,6 @@ ip6_ctloutput(op, so, level, optname, mp void *optdata; struct ip6_recvpktopts *rcvopts; #if defined(IPSEC) && defined(__OpenBSD__) - struct proc *p = curproc; /* XXX */ struct tdb *tdb; struct tdb_ident *tdbip, tdbi; int s; @@ -1832,7 +1831,6 @@ ip6_ctloutput(op, so, level, optname, mp int error, optval; int level, op, optname; int optlen; - struct proc *p; if (!sopt) { panic("ip6_ctloutput: arg soopt is NULL"); @@ -1841,7 +1839,6 @@ ip6_ctloutput(op, so, level, optname, mp op = sopt->sopt_dir; optname = sopt->sopt_name; optlen = sopt->sopt_valsize; - p = sopt->sopt_p; #else #ifdef HAVE_NRL_INPCB struct inpcb *inp = sotoinpcb(so); @@ -1853,7 +1850,6 @@ ip6_ctloutput(op, so, level, optname, mp int error, optval; int optlen; #if defined(__NetBSD__) || (defined(__FreeBSD__) && __FreeBSD__ >= 3) - struct proc *p = curproc; /* XXX */ #endif optlen = m ? m->m_len : 0; @@ -2863,7 +2859,6 @@ ip6_raw_ctloutput(op, so, level, optname #endif #if defined(__FreeBSD__) && __FreeBSD__ >= 3 int level, op, optname; - struct proc *p; #else struct mbuf *m = *mp; #endif /* FreeBSD >= 3 */ @@ -2876,7 +2871,6 @@ ip6_raw_ctloutput(op, so, level, optname op = sopt->sopt_dir; optname = sopt->sopt_name; optlen = sopt->sopt_valsize; - p = sopt->sopt_p; #else optlen = m ? m->m_len : 0; #endif /* FreeBSD >= 3 */ diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6.c @@ -496,7 +496,6 @@ nd6_timer(ignored_arg) #endif struct ifnet *ifp; struct in6_ifaddr *ia6, *nia6; - struct in6_addrlifetime *lt6; #ifdef __NetBSD__ s = splsoftnet(); @@ -672,7 +671,6 @@ nd6_timer(ignored_arg) for (ia6 = in6_ifaddr; ia6; ia6 = nia6) { nia6 = ia6->ia_next; /* check address lifetime */ - lt6 = &ia6->ia6_lifetime; if (IFA6_IS_INVALID(ia6)) { int regen = 0; diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_nbr.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_nbr.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_nbr.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_nbr.c @@ -1460,7 +1460,6 @@ nd6_dad_ns_input(ifa) struct ifaddr *ifa; { struct in6_ifaddr *ia; - struct ifnet *ifp; const struct in6_addr *taddr6; struct dadq *dp; int duplicate; @@ -1469,7 +1468,6 @@ nd6_dad_ns_input(ifa) panic("ifa == NULL in nd6_dad_ns_input"); ia = (struct in6_ifaddr *)ifa; - ifp = ifa->ifa_ifp; taddr6 = &ia->ia_addr.sin6_addr; duplicate = 0; dp = nd6_dad_find(ifa); diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_rtr.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_rtr.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_rtr.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/nd6_rtr.c @@ -1258,7 +1258,6 @@ prelist_update(new, dr, m) int s = splnet(); #endif int error = 0; - int newprefix = 0; int auth; struct in6_addrlifetime lt6_tmp; @@ -1317,8 +1316,6 @@ prelist_update(new, dr, m) } else { struct nd_prefix *newpr = NULL; - newprefix = 1; - if (new->ndpr_vltime == 0) goto end; if (new->ndpr_raf_onlink == 0 && new->ndpr_raf_auto == 0) diff --git a/packages/net/bsd_tcpip/current/src/sys/netinet6/raw_ip6.c b/packages/net/bsd_tcpip/current/src/sys/netinet6/raw_ip6.c --- a/packages/net/bsd_tcpip/current/src/sys/netinet6/raw_ip6.c +++ b/packages/net/bsd_tcpip/current/src/sys/netinet6/raw_ip6.c @@ -259,9 +259,6 @@ rip6_ctlinput(cmd, sa, d) struct sockaddr *sa; void *d; { - struct ip6_hdr *ip6; - struct mbuf *m; - int off = 0; struct ip6ctlparam *ip6cp = NULL; const struct sockaddr_in6 *sa6_src = NULL; void *cmdarg; @@ -283,14 +280,9 @@ rip6_ctlinput(cmd, sa, d) /* if the parameter is from icmp6, decode it. */ if (d != NULL) { ip6cp = (struct ip6ctlparam *)d; - m = ip6cp->ip6c_m; - ip6 = ip6cp->ip6c_ip6; - off = ip6cp->ip6c_off; cmdarg = ip6cp->ip6c_cmdarg; sa6_src = ip6cp->ip6c_src; } else { - m = NULL; - ip6 = NULL; cmdarg = NULL; sa6_src = &sa6_any; } diff --git a/packages/net/common/current/ChangeLog b/packages/net/common/current/ChangeLog --- a/packages/net/common/current/ChangeLog +++ b/packages/net/common/current/ChangeLog @@ -1,3 +1,22 @@ +2012-03-13 Grant Edwards + + * src/bootp_support.c (init_net): Fix compiler warning by removing + 'netmask' variable which is set but then never used. + [ Bugzilla 1001516 ] + +2012-03-06 Grant Edwards + + * current/src/inet_ntop.c (inet_ntop6): Fixed compiler warnings + about variables possibly used before they are initialized. + [ Bugzilla 1001509 ] + +2011-03-09 Jay Foster + Sergei Gavrikov + + * src/bootp_support.c (show_bootp): Fixed output for some fields. + * src/dhcp_prot.c (do_dhcp): Convert bp_secs field to network byte + order. Inspired by Kelvin Lawson. [ Bugzilla 1001170 ] + 2009-09-17 Jay Foster * src/dhcp_prot.c (do_dhcp): Fix packet parsing for DHCP servers diff --git a/packages/net/common/current/src/bootp_support.c b/packages/net/common/current/src/bootp_support.c --- a/packages/net/common/current/src/bootp_support.c +++ b/packages/net/common/current/src/bootp_support.c @@ -274,8 +274,8 @@ show_bootp(const char *intf, struct boot diag_printf(" hlen: %d\n", bp->bp_hlen ); diag_printf(" hops: %d\n", bp->bp_hops ); diag_printf(" xid: 0x%x\n", bp->bp_xid ); - diag_printf(" secs: %d\n", bp->bp_secs ); - diag_printf(" flags: 0x%x\n", bp->bp_flags ); + diag_printf(" secs: %d\n", ntohs(bp->bp_secs) ); + diag_printf(" flags: 0x%x\n", ntohs(bp->bp_flags) ); diag_printf(" hw_addr: "); for (i = 0; i < bp->bp_hlen; i++) { diag_printf("%02x", bp->bp_chaddr[i]); @@ -449,7 +449,7 @@ init_net(const char *intf, struct bootp int s=-1; int one = 1; struct ecos_rtentry route; - struct in_addr netmask, gateway; + struct in_addr gateway; unsigned int length; int retcode = false; @@ -481,7 +481,6 @@ init_net(const char *intf, struct bootp length = sizeof(addrp->sin_addr); if (get_bootp_option(bp, TAG_SUBNET_MASK, &addrp->sin_addr,&length)) { - netmask = addrp->sin_addr; if (ioctl(s, SIOCSIFNETMASK, &ifr)) { perror("SIOCSIFNETMASK"); goto out; diff --git a/packages/net/common/current/src/dhcp_prot.c b/packages/net/common/current/src/dhcp_prot.c --- a/packages/net/common/current/src/dhcp_prot.c +++ b/packages/net/common/current/src/dhcp_prot.c @@ -701,6 +701,7 @@ do_dhcp(const char *intf, struct bootp * unsigned int length; cyg_uint32 xid; + unsigned short bp_secs; #define CHECK_XID() ( /* and other details */ \ received->bp_xid != xid || /* not the same transaction */ \ @@ -842,7 +843,8 @@ do_dhcp(const char *intf, struct bootp * xmit->bp_htype = HTYPE_ETHERNET; xmit->bp_hlen = IFHWADDRLEN; xmit->bp_xid = xid; - xmit->bp_secs = cyg_current_time() / 100; + bp_secs = cyg_current_time() / 100; + xmit->bp_secs = htons(bp_secs); xmit->bp_flags = htons(0x8000); // BROADCAST FLAG bcopy(ifr.ifr_hwaddr.sa_data, &xmit->bp_chaddr, xmit->bp_hlen); bcopy(mincookie, xmit->bp_vend, sizeof(mincookie)); diff --git a/packages/net/common/current/src/inet_ntop.c b/packages/net/common/current/src/inet_ntop.c --- a/packages/net/common/current/src/inet_ntop.c +++ b/packages/net/common/current/src/inet_ntop.c @@ -190,7 +190,9 @@ inet_ntop6(const u_char *src, char *dst, memset(words, '\0', sizeof words); for (i = 0; i < IN6ADDRSZ; i++) words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); + best.len = 0; best.base = -1; + cur.len = 0; cur.base = -1; for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { if (words[i] == 0) { diff --git a/packages/net/httpd/current/ChangeLog b/packages/net/httpd/current/ChangeLog --- a/packages/net/httpd/current/ChangeLog +++ b/packages/net/httpd/current/ChangeLog @@ -1,3 +1,7 @@ +2010-09-18 John Dallaway + + * doc/httpd.sgml: Fix GoAhead URL. + 2006-07-28 Jochen Gerster * src/monitor.c (cyg_monitor_network): Calling the network monitor @@ -102,8 +106,24 @@ 2002-12-06 Nick Garnett - + @@ -40,7 +40,7 @@ content, simple forms handling and a bas not intended to be a general purpose server for delivering arbitrary web content. For these purposes a port of the GoAhead web server is available from www.goahead.com. +url="http://www.goahead.com">www.goahead.com. This server is also capable of serving content using IPv6 when the eCos configuration contains IPv6. diff --git a/packages/net/lwip_tcpip/current/ChangeLog b/packages/net/lwip_tcpip/current/ChangeLog --- a/packages/net/lwip_tcpip/current/ChangeLog +++ b/packages/net/lwip_tcpip/current/ChangeLog @@ -1,3 +1,73 @@ +2013-03-03 Mike Jones + + * src/core/snmp/msg_out.c: Applied lwip bugfix #29256. + ip_addr_set_hton(...) does not exist in this revision, + so an equivalent solution was provided. The application + was retested. Any application that worked around the problem by + using htonl(...) will need to be changed by removing it. + [ Bugzilla 1001789 ] + +2012-05-26 Ilija Kocho + + * tests/nc_test_slave.c: Reduced stack sizes of IDLE, LOAD and TMAIN + threads as well as NUM_LOAD_THREADS to 5 (was 10) in order to fit the + test for targets with as low as 128KiB RAM. + Bug fix: MAX_BUF fixed so that in_buf[] and out_buf[] can accomodate + 10KiB messages. + [ Bugzilla 1001344 ] + +2012-03-06 Ilija Kocho + + * src/core/tcp_out.c: Fix compiler warning about unused variables. + [Bugzilla 1001521] + +2011-08-23 Ilija Kocho + + * tests/nc_test_slave.c: Reduced stack sizes of IDLE, LOAD and TMAIN + threads as well as NUM_LOAD_THREADS to 5 (was 10) in order to fit the + test for targets with as low as 128KiB RAM. + [ Bugzilla 1001344 ] + +2011-08-25 John Dallaway + + * include/lwipopts.h: Fix naming of + CYGNUM_LWIP_NETIF_LOOPBACK_MAX_PBUFS. Patch from Christophe Coutand. + [ Bugzilla 1001323 ] + +2011-08-23 Ilija Kocho + + * cdl/lwip_net.cdl: New CDL option CYGIMP_LWIP_ENDIAN_BY_HAL. + * include/lwipopts.h: Add HAL override of htonl() and htons(). + [ Bugzilla 1001275 ] + +2011-03-08 John Dallaway + + * cdl/lwip_net.cdl: Require CYGPKG_ISOINFRA. + * include/arch/cc.h: Define ERRNO if CYGINT_ISO_ERRNO is + implemented. Based on patch from Will Wagner. [ Bugzilla 1001169 ] + +2011-01-30 Ilija Kocho + + * cdl/lwip_net.cdl: New CDL option CYGSEM_LWIP_MEM_SECTION. + * include/lwipopts.h: Enter MEM_SECTION entity. + * src/mem.c, src/memp.c: Add an ability to use GCC section + attribute for statically allocated buffers, pbufs, and heap. + +2011-01-02 Ilija Kocho + + * src/ecos/sequential.c, src/ecos/simple.c: Fixed miltiple-line + comment warnings. + +2010-12-10 Christophe Coutand + + * include/lwipopts.h: Fix compilation error when compiling SNMP + code. + +2010-08-02 John Dallaway + + * include/network.h: Match braces when including from C++ code. + Issue reported by Will Wagner. + 2010-02-07 John Dallaway * cdl/lwip_net.cdl: Rename CFLAGS_ADD and CFLAGS_REMOVE options to @@ -217,7 +287,7 @@ 2004-05-04 Jani Monoses //####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2004, 2010 Free Software Foundation +// Copyright (C) 2004, 2010, 2011 Free Software Foundation // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free diff --git a/packages/net/lwip_tcpip/current/cdl/lwip_net.cdl b/packages/net/lwip_tcpip/current/cdl/lwip_net.cdl --- a/packages/net/lwip_tcpip/current/cdl/lwip_net.cdl +++ b/packages/net/lwip_tcpip/current/cdl/lwip_net.cdl @@ -8,7 +8,7 @@ #####ECOSGPLCOPYRIGHTBEGIN#### ## ------------------------------------------- ## This file is part of eCos, the Embedded Configurable Operating System. -## Copyright (C) 2008, 2009, 2010 Free Software Foundation +## Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation ## ## eCos is free software; you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free @@ -48,6 +48,7 @@ cdl_package CYGPKG_NET_LWIP { display "lwIP networking stack" description "The lightweight TCP/IP stack." + requires CYGPKG_ISOINFRA requires CYGINT_ISO_ERRNO_CODES compile core/dns.c \ @@ -126,6 +127,17 @@ cdl_package CYGPKG_NET_LWIP { compile ecos/sio.c } + cdl_option CYGIMP_LWIP_ENDIAN_BY_HAL { + display "HAL optimized endian functions" + flavor bool + active_if CYGIMP_HAL_ARCH_ENDIAN + default_value CYGIMP_HAL_ARCH_ENDIAN + description " + Some architectures provide optimized functions for endian + manipulation (byte swapping). If utilized, they can give + shorter and faster code for that." + } + cdl_component CYGPKG_LWIP_APIS { display "APIs" flavor none @@ -1422,6 +1434,33 @@ cdl_package CYGPKG_NET_LWIP { to accomodate single full size TCP frame in one pbuf, including TCP_MSS, IP header, and link header." } + + cdl_component CYGOPT_LWIP_MEM_PLF_SPEC { + display "Platform/application specific memory settings" + flavor none + no_define + description " + Platform or application specific settings such as special + memory section and memory constrains." + + cdl_option CYGSEM_LWIP_MEM_SECTION { + display "Place lwIP buffers and heap in special\ + memory section." + flavor bool + default_value is_active(CYGDAT_LWIP_MEM_SECTION_NAME) + active_if CYGDAT_LWIP_MEM_SECTION_NAME + + description " + If you need lwIP buffers to appear in some special + memory section (it is useful for devices with low + memory footprint that is in addition fragmented + in several non-contiguous blocks) the platform + config file should provide the name of this section + through CYGDAT_LWIP_MEM_SECTION_NAME option, if so, + you can let to use the GCC section attribute for + needed variables by this option." + } + } } cdl_component CYGPKG_LWIP_THREADS { diff --git a/packages/net/lwip_tcpip/current/include/arch/cc.h b/packages/net/lwip_tcpip/current/include/arch/cc.h --- a/packages/net/lwip_tcpip/current/include/arch/cc.h +++ b/packages/net/lwip_tcpip/current/include/arch/cc.h @@ -2,7 +2,7 @@ //####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008 Free Software Foundation +// Copyright (C) 2008, 2011 Free Software Foundation // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -34,7 +34,7 @@ #define __LWIP_ARCH_CC_H__ #include -#include +#include #include typedef int sys_prot_t; @@ -47,6 +47,11 @@ typedef int sys_prot_t; #define ETIME 62 #define ENSRNOTFOUND 163 +// If errno support, define ERRNO used in api/sockets.c +#if CYGINT_ISO_ERRNO > 0 +#define ERRNO +#endif + // Platform byteorder #if (CYG_BYTEORDER == CYG_LSBFIRST) #define BYTE_ORDER LITTLE_ENDIAN diff --git a/packages/net/lwip_tcpip/current/include/lwipopts.h b/packages/net/lwip_tcpip/current/include/lwipopts.h --- a/packages/net/lwip_tcpip/current/include/lwipopts.h +++ b/packages/net/lwip_tcpip/current/include/lwipopts.h @@ -4,7 +4,7 @@ //####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2008, 2009 Free Software Foundation +// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -36,6 +36,10 @@ #include +#if defined(CYGIMP_LWIP_ENDIAN_BY_HAL) && CYGIMP_LWIP_ENDIAN_BY_HAL +# include +#endif + //------------------------------------------------------------------------------ // Platform specific locking //------------------------------------------------------------------------------ @@ -44,6 +48,16 @@ #define NO_SYS defined(CYGFUN_LWIP_MODE_SIMPLE) //------------------------------------------------------------------------------ +// Architecture specific options +//------------------------------------------------------------------------------ + +#if defined(CYGIMP_LWIP_ENDIAN_BY_HAL) && CYGIMP_LWIP_ENDIAN_BY_HAL +# define LWIP_PLATFORM_BYTESWAP 1 +# define LWIP_PLATFORM_HTONS(__val) CYG_CPU_TO_BE16(__val) +# define LWIP_PLATFORM_HTONL(__val) CYG_CPU_TO_BE32(__val) +#endif + +//------------------------------------------------------------------------------ // Memory options //------------------------------------------------------------------------------ @@ -51,6 +65,14 @@ #define MEMP_MEM_MALLOC defined(CYGIMP_LWIP_MEMP_MEM_MALLOC) #define MEM_ALIGNMENT CYGNUM_LWIP_MEM_ALIGNMENT #define MEM_SIZE CYGNUM_LWIP_MEM_SIZE + +#if defined(CYGSEM_LWIP_MEM_SECTION) && CYGSEM_LWIP_MEM_SECTION +# include +# define MEM_SECTION CYGBLD_ATTRIB_SECTION(CYGDAT_LWIP_MEM_SECTION_NAME) +#else +# define MEM_SECTION +#endif + #define MEMP_OVERFLOW_CHECK defined(CYGDBG_LWIP_MEMP_OVERFLOW_CHECK) #define MEMP_SANITY_CHECK defined(CYGDBG_LWIP_MEMP_SANITY_CHECK) @@ -99,7 +121,9 @@ // IP options //------------------------------------------------------------------------------ -#define IP_FORWARD defined(CYGFUN_LWIP_IP_FORWARD) +#ifdef CYGFUN_LWIP_IP_FORWARD +# define IP_FORWARD 1 +#endif #define IP_OPTIONS_ALLOWED defined(CYGFUN_LWIP_IP_OPTIONS_ALLOWED) #define IP_REASSEMBLY defined(CYGFUN_LWIP_IP_REASSEMBLY) #define IP_FRAG defined(CYGFUN_LWIP_IP_FRAG) @@ -251,7 +275,7 @@ #define LWIP_NETIF_LINK_CALLBACK defined(CYGFUN_LWIP_NETIF_LINK_CALLBACK) #define LWIP_NETIF_HWADDRHINT defined(CYGIMP_LWIP_NETIF_HWADDRHINT) #define LWIP_NETIF_LOOPBACK defined(CYGIMP_LWIP_NETIF_LOOPBACK) -#define LWIP_LOOPBACK_MAX_PBUFS CYGIMP_LWIP_NETIF_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS CYGNUM_LWIP_NETIF_LOOPBACK_MAX_PBUFS //#define LWIP_NETIF_LOOPBACK_MULTITHREADING // not configurable //#define LWIP_NETIF_TX_SINGLE_PBUF // not configurable diff --git a/packages/net/lwip_tcpip/current/include/network.h b/packages/net/lwip_tcpip/current/include/network.h --- a/packages/net/lwip_tcpip/current/include/network.h +++ b/packages/net/lwip_tcpip/current/include/network.h @@ -57,5 +57,9 @@ extern "C" { #endif #include + +#ifdef __cplusplus +} +#endif #endif // #ifndef CYGONCE_NETWORK_H diff --git a/packages/net/lwip_tcpip/current/src/core/inet.c b/packages/net/lwip_tcpip/current/src/core/inet.c deleted file mode 100644 --- a/packages/net/lwip_tcpip/current/src/core/inet.c +++ /dev/null @@ -1,525 +0,0 @@ -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - - -/* inet.c - * - * Functions common to all TCP/IP modules, such as the Internet checksum and the - * byte order functions. - * - */ - - -#include "lwip/opt.h" - -#include "lwip/arch.h" - -#include "lwip/def.h" -#include "lwip/inet.h" - -#include "lwip/sys.h" - -/* This is a reference implementation of the checksum algorithm, with the - * aim of being simple, correct and fully portable. Checksumming is the - * first thing you would want to optimize for your platform. You will - * need to port it to your architecture and in your sys_arch.h: - * - * #define LWIP_CHKSUM -*/ -#ifndef LWIP_CHKSUM -#define LWIP_CHKSUM lwip_standard_chksum - -/** - * lwip checksum - * - * @param dataptr points to start of data to be summed at any boundary - * @param len length of data to be summed - * @return host order (!) lwip checksum (non-inverted Internet sum) - * - * @note accumulator size limits summable lenght to 64k - * @note host endianess is irrelevant (p3 RFC1071) - */ -static u16_t -lwip_standard_chksum(void *dataptr, u16_t len) -{ - u32_t acc; - u16_t src; - u8_t *octetptr; - - acc = 0; - /* dataptr may be at odd or even addresses */ - octetptr = (u8_t*)dataptr; - while (len > 1) - { - /* declare first octet as most significant - thus assume network order, ignoring host order */ - src = (*octetptr) << 8; - octetptr++; - /* declare second octet as least significant */ - src |= (*octetptr); - octetptr++; - acc += src; - len -= 2; - } - if (len > 0) - { - /* accumulate remaining octet */ - src = (*octetptr) << 8; - acc += src; - } - /* add deferred carry bits */ - acc = (acc >> 16) + (acc & 0x0000ffffUL); - if ((acc & 0xffff0000) != 0) { - acc = (acc >> 16) + (acc & 0x0000ffffUL); - } - /* This maybe a little confusing: reorder sum using htons() - instead of ntohs() since it has a little less call overhead. - The caller must invert bits for Internet sum ! */ - return htons((u16_t)acc); -} - -#endif - -#if 0 -/* - * Curt McDowell - * Broadcom Corp. - * csm@broadcom.com - * - * IP checksum two bytes at a time with support for - * unaligned buffer. - * Works for len up to and including 0x20000. - * by Curt McDowell, Broadcom Corp. 12/08/2005 - */ - -static u16_t -lwip_standard_chksum2(void *dataptr, int len) -{ - u8_t *pb = dataptr; - u16_t *ps, t = 0; - u32_t sum = 0; - int odd = ((u32_t)pb & 1); - - /* Get aligned to u16_t */ - if (odd && len > 0) { - ((u8_t *)&t)[1] = *pb++; - len--; - } - - /* Add the bulk of the data */ - ps = (u16_t *)pb; - while (len > 1) { - sum += *ps++; - len -= 2; - } - - /* Consume left-over byte, if any */ - if (len > 0) - ((u8_t *)&t)[0] = *(u8_t *)ps;; - - /* Add end bytes */ - sum += t; - - /* Fold 32-bit sum to 16 bits */ - while (sum >> 16) - sum = (sum & 0xffff) + (sum >> 16); - - /* Swap if alignment was odd */ - if (odd) - sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); - - return sum; -} - -/** - * An optimized checksum routine. Basically, it uses loop-unrolling on - * the checksum loop, treating the head and tail bytes specially, whereas - * the inner loop acts on 8 bytes at a time. - * - * @arg start of buffer to be checksummed. May be an odd byte address. - * @len number of bytes in the buffer to be checksummed. - * - * @todo First argument type conflicts with generic checksum routine. - * - * by Curt McDowell, Broadcom Corp. December 8th, 2005 - */ - -static u16_t -lwip_standard_chksum4(u8_t *pb, int len) -{ - u16_t *ps, t = 0; - u32_t *pl; - u32_t sum = 0, tmp; - /* starts at odd byte address? */ - int odd = ((u32_t)pb & 1); - - if (odd && len > 0) { - ((u8_t *)&t)[1] = *pb++; - len--; - } - - ps = (u16_t *)pb; - - if (((u32_t)ps & 3) && len > 1) { - sum += *ps++; - len -= 2; - } - - pl = (u32_t *)ps; - - while (len > 7) { - tmp = sum + *pl++; /* ping */ - if (tmp < sum) - tmp++; /* add back carry */ - - sum = tmp + *pl++; /* pong */ - if (sum < tmp) - sum++; /* add back carry */ - - len -= 8; - } - - /* make room in upper bits */ - sum = (sum >> 16) + (sum & 0xffff); - - ps = (u16_t *)pl; - - /* 16-bit aligned word remaining? */ - while (len > 1) { - sum += *ps++; - len -= 2; - } - - /* dangling tail byte remaining? */ - if (len > 0) /* include odd byte */ - ((u8_t *)&t)[0] = *(u8_t *)ps; - - sum += t; /* add end bytes */ - - while (sum >> 16) /* combine halves */ - sum = (sum >> 16) + (sum & 0xffff); - - if (odd) - sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); - - return sum; -} -#endif - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - */ - -u16_t -inet_chksum_pseudo(struct pbuf *p, - struct ip_addr *src, struct ip_addr *dest, - u8_t proto, u16_t proto_len) -{ - u32_t acc; - struct pbuf *q; - u8_t swapped; - - acc = 0; - swapped = 0; - /* iterate through all pbuf in chain */ - for(q = p; q != NULL; q = q->next) { - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", - (void *)q, (void *)q->next)); - acc += LWIP_CHKSUM(q->payload, q->len); - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ - while (acc >> 16) { - acc = (acc & 0xffffUL) + (acc >> 16); - } - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); - } - /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ - } - - if (swapped) { - acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); - } - acc += (src->addr & 0xffffUL); - acc += ((src->addr >> 16) & 0xffffUL); - acc += (dest->addr & 0xffffUL); - acc += ((dest->addr >> 16) & 0xffffUL); - acc += (u32_t)htons((u16_t)proto); - acc += (u32_t)htons(proto_len); - - while (acc >> 16) { - acc = (acc & 0xffffUL) + (acc >> 16); - } - LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); - return (u16_t)~(acc & 0xffffUL); -} - -/* inet_chksum: - * - * Calculates the Internet checksum over a portion of memory. Used primarely for IP - * and ICMP. - */ - -u16_t -inet_chksum(void *dataptr, u16_t len) -{ - u32_t acc; - - acc = LWIP_CHKSUM(dataptr, len); - while (acc >> 16) { - acc = (acc & 0xffff) + (acc >> 16); - } - return (u16_t)~(acc & 0xffff); -} - -u16_t -inet_chksum_pbuf(struct pbuf *p) -{ - u32_t acc; - struct pbuf *q; - u8_t swapped; - - acc = 0; - swapped = 0; - for(q = p; q != NULL; q = q->next) { - acc += LWIP_CHKSUM(q->payload, q->len); - while (acc >> 16) { - acc = (acc & 0xffffUL) + (acc >> 16); - } - if (q->len % 2 != 0) { - swapped = 1 - swapped; - acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8); - } - } - - if (swapped) { - acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8); - } - return (u16_t)~(acc & 0xffffUL); -} - -/* Here for now until needed in other places in lwIP */ -#ifndef isascii -#define in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up) -#define isascii(c) in_range(c, 0x20, 0x7f) -#define isdigit(c) in_range(c, '0', '9') -#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) -#define islower(c) in_range(c, 'a', 'z') -#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') -#endif - - - /* - * Ascii internet address interpretation routine. - * The value returned is in network order. - */ - - /* */ - /* inet_addr */ - u32_t inet_addr(const char *cp) - { - struct in_addr val; - - if (inet_aton(cp, &val)) { - return (val.s_addr); - } - return (INADDR_NONE); - } - - /* - * Check whether "cp" is a valid ascii representation - * of an Internet address and convert to a binary address. - * Returns 1 if the address is valid, 0 if not. - * This replaces inet_addr, the return value from which - * cannot distinguish between failure and a local broadcast address. - */ - /* */ - /* inet_aton */ - s8_t - inet_aton(const char *cp, struct in_addr *addr) - { - u32_t val; - s32_t base, n; - char c; - u32_t parts[4]; - u32_t* pp = parts; - - c = *cp; - for (;;) { - /* - * Collect number up to ``.''. - * Values are specified as for C: - * 0x=hex, 0=octal, isdigit=decimal. - */ - if (!isdigit(c)) - return (0); - val = 0; base = 10; - if (c == '0') { - c = *++cp; - if (c == 'x' || c == 'X') - base = 16, c = *++cp; - else - base = 8; - } - for (;;) { - if (isdigit(c)) { - val = (val * base) + (s16_t)(c - '0'); - c = *++cp; - } else if (base == 16 && isxdigit(c)) { - val = (val << 4) | - (s16_t)(c + 10 - (islower(c) ? 'a' : 'A')); - c = *++cp; - } else - break; - } - if (c == '.') { - /* - * Internet format: - * a.b.c.d - * a.b.c (with c treated as 16 bits) - * a.b (with b treated as 24 bits) - */ - if (pp >= parts + 3) - return (0); - *pp++ = val; - c = *++cp; - } else - break; - } - /* - * Check for trailing characters. - */ - if (c != '\0' && (!isascii(c) || !isspace(c))) - return (0); - /* - * Concoct the address according to - * the number of parts specified. - */ - n = pp - parts + 1; - switch (n) { - - case 0: - return (0); /* initial nondigit */ - - case 1: /* a -- 32 bits */ - break; - - case 2: /* a.b -- 8.24 bits */ - if (val > 0xffffff) - return (0); - val |= parts[0] << 24; - break; - - case 3: /* a.b.c -- 8.8.16 bits */ - if (val > 0xffff) - return (0); - val |= (parts[0] << 24) | (parts[1] << 16); - break; - - case 4: /* a.b.c.d -- 8.8.8.8 bits */ - if (val > 0xff) - return (0); - val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); - break; - } - if (addr) - addr->s_addr = htonl(val); - return (1); - } - -/* Convert numeric IP address into decimal dotted ASCII representation. - * returns ptr to static buffer; not reentrant! - */ -char *inet_ntoa(struct in_addr addr) -{ - static char str[16]; - u32_t s_addr = addr.s_addr; - char inv[3]; - char *rp; - u8_t *ap; - u8_t rem; - u8_t n; - u8_t i; - - rp = str; - ap = (u8_t *)&s_addr; - for(n = 0; n < 4; n++) { - i = 0; - do { - rem = *ap % (u8_t)10; - *ap /= (u8_t)10; - inv[i++] = '0' + rem; - } while(*ap); - while(i--) - *rp++ = inv[i]; - *rp++ = '.'; - ap++; - } - *--rp = 0; - return str; -} - - -#ifndef BYTE_ORDER -#error BYTE_ORDER is not defined -#endif -#if BYTE_ORDER == LITTLE_ENDIAN - -u16_t -htons(u16_t n) -{ - return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); -} - -u16_t -ntohs(u16_t n) -{ - return htons(n); -} - -u32_t -htonl(u32_t n) -{ - return ((n & 0xff) << 24) | - ((n & 0xff00) << 8) | - ((n & 0xff0000) >> 8) | - ((n & 0xff000000) >> 24); -} - -u32_t -ntohl(u32_t n) -{ - return htonl(n); -} - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ diff --git a/packages/net/lwip_tcpip/current/src/core/mem.c b/packages/net/lwip_tcpip/current/src/core/mem.c --- a/packages/net/lwip_tcpip/current/src/core/mem.c +++ b/packages/net/lwip_tcpip/current/src/core/mem.c @@ -172,7 +172,7 @@ struct mem { #define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) /** the heap. we need one struct mem at the end and some room for alignment */ -static u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT]; +static u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT] MEM_SECTION; /** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ static u8_t *ram; /** the last entry, always unused! */ diff --git a/packages/net/lwip_tcpip/current/src/core/memp.c b/packages/net/lwip_tcpip/current/src/core/memp.c --- a/packages/net/lwip_tcpip/current/src/core/memp.c +++ b/packages/net/lwip_tcpip/current/src/core/memp.c @@ -146,7 +146,7 @@ static const char *memp_desc[MEMP_MAX] = static u8_t memp_memory[MEM_ALIGNMENT - 1 #define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) #include "lwip/memp_std.h" -]; +] MEM_SECTION; #if MEMP_SANITY_CHECK /** diff --git a/packages/net/lwip_tcpip/current/src/core/snmp/msg_out.c b/packages/net/lwip_tcpip/current/src/core/snmp/msg_out.c --- a/packages/net/lwip_tcpip/current/src/core/snmp/msg_out.c +++ b/packages/net/lwip_tcpip/current/src/core/snmp/msg_out.c @@ -96,7 +96,7 @@ snmp_trap_dst_ip_set(u8_t dst_idx, struc { if (dst_idx < SNMP_TRAP_DESTINATIONS) { - trap_dst[dst_idx].dip.addr = htonl(dst->addr); + trap_dst[dst_idx].dip.addr = dst->addr; } } @@ -269,11 +269,8 @@ snmp_send_trap(s8_t generic_trap, struct snmp_inc_snmpouttraps(); snmp_inc_snmpoutpkts(); - /** connect to the TRAP destination */ - udp_connect(trap_msg.pcb, &trap_msg.dip, SNMP_TRAP_PORT); - udp_send(trap_msg.pcb, p); - /** disassociate remote address and port with this pcb */ - udp_disconnect(trap_msg.pcb); + /** send to the TRAP destination */ + udp_sendto(trap_msg.pcb, p, &trap_msg.dip, SNMP_TRAP_PORT); pbuf_free(p); } diff --git a/packages/net/lwip_tcpip/current/src/core/tcp_out.c b/packages/net/lwip_tcpip/current/src/core/tcp_out.c --- a/packages/net/lwip_tcpip/current/src/core/tcp_out.c +++ b/packages/net/lwip_tcpip/current/src/core/tcp_out.c @@ -462,7 +462,9 @@ err_t tcp_send_empty_ack(struct tcp_pcb *pcb) { struct pbuf *p; +#if LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP struct tcp_hdr *tcphdr; +#endif u8_t optlen = 0; #if LWIP_TCP_TIMESTAMPS @@ -479,8 +481,10 @@ tcp_send_empty_ack(struct tcp_pcb *pcb) ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); /* remove ACK flags from the PCB, as we send an empty ACK now */ pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); - - tcphdr = tcp_output_set_header(pcb, p, optlen, htonl(pcb->snd_nxt)); +#if LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP + tcphdr = +#endif + tcp_output_set_header(pcb, p, optlen, htonl(pcb->snd_nxt)); /* NB. MSS option is only sent on SYNs, so ignore it here */ #if LWIP_TCP_TIMESTAMPS @@ -932,8 +936,9 @@ void tcp_keepalive(struct tcp_pcb *pcb) { struct pbuf *p; +#if CHECKSUM_GEN_TCP struct tcp_hdr *tcphdr; - +#endif LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); @@ -950,8 +955,10 @@ tcp_keepalive(struct tcp_pcb *pcb) } LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", (p->len >= sizeof(struct tcp_hdr))); - - tcphdr = tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1)); +#if CHECKSUM_GEN_TCP + tcphdr = +#endif + tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1)); #if CHECKSUM_GEN_TCP tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, diff --git a/packages/net/lwip_tcpip/current/src/ecos/init.c b/packages/net/lwip_tcpip/current/src/ecos/init.c deleted file mode 100644 --- a/packages/net/lwip_tcpip/current/src/ecos/init.c +++ /dev/null @@ -1,325 +0,0 @@ -//========================================================================== -// ####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2004 Free Software Foundation, Inc. -// -// eCos is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 or (at your option) any later -// version. -// -// eCos 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 General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License -// along with eCos; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// As a special exception, if other files instantiate templates or use -// macros or inline functions from this file, or you compile this file -// and link it with other works to produce a work based on this file, -// this file does not by itself cause the resulting work to be covered by -// the GNU General Public License. However the source code for this file -// must still be made available in accordance with section (3) of the GNU -// General Public License v2. -// -// This exception does not invalidate any other reasons why a work based -// on this file might be covered by the GNU General Public License. -// ------------------------------------------- -// ####ECOSGPLCOPYRIGHTEND#### -//========================================================================== - -/* - * init.c - misc lwip ecos glue functions - */ -#include -#include -#include "lwip/opt.h" -#include "lwip/sys.h" -#include "lwip/memp.h" -#include "lwip/tcpip.h" -#include "lwip/ip_addr.h" - -#if LWIP_DHCP -#include "lwip/dhcp.h" -#endif - -#if LWIP_SLIP -#include "netif/slipif.h" -#endif - -#if PPP_SUPPORT -#include "netif/ppp/ppp.h" -#endif - -#include "netif/loopif.h" -#include -#include - -#ifdef CYGPKG_LWIP_ETH -#include "netif/etharp.h" - -#include -#include - - -// Define table boundaries -CYG_HAL_TABLE_BEGIN(__NETDEVTAB__, netdev); -CYG_HAL_TABLE_END(__NETDEVTAB_END__, netdev); -static void ecosglue_init(void); -#endif - -void inline IP_ADDR(struct ip_addr *ipaddr, char a, char b, char c, char d) -{ - IP4_ADDR(ipaddr,a,b,c,d); -} - - -struct netif mynetif, loopif; -void lwip_set_addr(struct netif *netif); -#if PPP_SUPPORT -#define PPP_USER "pppuser" -#define PPP_PASS "ppppass" - -void -pppMyCallback(void *a , int e, void * arg) -{ - diag_printf("callback %d \n",e); -} - -/* These temporarily here */ -unsigned long -sys_jiffies(void) -{ - return cyg_current_time(); -} - -void -ppp_trace(int level, const char *format,...) -{ - va_list args; - - (void)level; - va_start(args, format); - diag_vprintf(format, args); - va_end(args); -} -#endif - -#if LWIP_HAVE_LOOPIF -struct netif ecos_loopif; -#endif - -#ifdef CYGPKG_LWIP_ETH -static void -arp_timer(void *arg) -{ - etharp_tmr(); - sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler) arp_timer, NULL); -} -#endif - -#if LWIP_DHCP -static void lwip_dhcp_fine_tmr(void *arg) -{ - dhcp_fine_tmr(); - sys_timeout(500, (sys_timeout_handler) lwip_dhcp_fine_tmr, NULL); -} - -static void lwip_dhcp_coarse_tmr(void *arg) -{ - dhcp_coarse_tmr(); - sys_timeout(60000, (sys_timeout_handler) lwip_dhcp_coarse_tmr, NULL); -} -#endif - - -// -// This function is called when tcpip thread finished initialisation. -// We start several timers here - these timers are all handled in the -// tcpip thread. That means that also the DHCP stuff is handled in the -// TCPIP thread. If this causes any trouble than it may be necessaray to -// use an own DHCP thread insted. -// -void tcpip_init_done(void * arg) -{ -#ifdef CYGPKG_LWIP_ETH - sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler) arp_timer, NULL); -#endif -#ifdef CYGOPT_LWIP_DHCP_MANAGEMENT - sys_timeout(500, (sys_timeout_handler) lwip_dhcp_fine_tmr, NULL); - sys_timeout(60000, (sys_timeout_handler) lwip_dhcp_coarse_tmr, NULL); -#endif - sys_sem_t *sem = arg; - sys_sem_signal(*sem); -} - - -/* - * Called by the eCos application at startup - * wraps various init calls - */ -int -lwip_init(void) -{ -#if LWIP_HAVE_LOOPIF - struct ip_addr ipaddr, netmask, gw; -#endif - static int inited = 0; - sys_sem_t sem; - if (inited) - return 1; - inited++; - - sys_init(); /* eCos specific initialization */ - mem_init(); /* heap based memory allocator */ - memp_init(); /* pool based memory allocator */ - pbuf_init(); /* packet buffer allocator */ - netif_init(); /* netif layer */ - - /* Start the stack.It will spawn a new dedicated thread */ - sem = sys_sem_new(0); - tcpip_init(tcpip_init_done,&sem); - sys_sem_wait(sem); - sys_sem_free(sem); - -#if LWIP_HAVE_LOOPIF - IP4_ADDR(&gw, 127,0,0,1); - IP4_ADDR(&ipaddr, 127,0,0,1); - IP4_ADDR(&netmask, 255,0,0,0); - - netif_add(&ecos_loopif, &ipaddr, &netmask, &gw, NULL, loopif_init, - tcpip_input); -#endif - -#if LWIP_SLIP - lwip_set_addr(&mynetif); - slipif_init(&mynetif); - netif_set_default(&mynetif); -#elif PPP_SUPPORT - pppInit(); -#if PAP_SUPPORT || CHAP_SUPPORT - pppSetAuth(PPPAUTHTYPE_PAP, PPP_USER, PPP_PASS); -#endif - pppOpen(sio_open(2), pppMyCallback, NULL); -#else - ecosglue_init(); -#endif - return 0; -} - - -err_t lwip_dummy_netif_init(struct netif *netif) -{ - return ERR_OK; -} - - -void -lwip_set_addr(struct netif *netif) -{ - struct ip_addr ipaddr, netmask, gw; - -#if LWIP_DHCP - IP4_ADDR(&gw, 0,0,0,0); - IP4_ADDR(&ipaddr, 0,0,0,0); - IP4_ADDR(&netmask, 0,0,0,0); - - netif_add(netif, &ipaddr, &netmask, &gw, netif->state, lwip_dummy_netif_init, tcpip_input); - netif_set_default(netif); - netif_set_up(netif); // new step from lwip 1.0.0 -#else - IP_ADDR(&gw, CYGDAT_LWIP_SERV_ADDR); - IP_ADDR(&ipaddr, CYGDAT_LWIP_MY_ADDR); - IP_ADDR(&netmask, CYGDAT_LWIP_NETMASK); - - netif_add(netif, &ipaddr, &netmask, &gw, netif->state, lwip_dummy_netif_init, tcpip_input); - netif_set_default(netif); - netif_set_up(netif); // new step from lwip 1.0.0 -#endif -} - -void lwip_dhcp_init(struct netif *netif) -{ -#ifdef CYGOPT_LWIP_DHCP_MANAGEMENT - dhcp_start(netif); -#endif -} - - -#ifdef CYGPKG_LWIP_ETH -//io eth stuff - -cyg_sem_t delivery; - -void -lwip_dsr_stuff(void) -{ - cyg_semaphore_post(&delivery); -} - -//Input thread signalled by DSR calls deliver() on low level drivers -static void -input_thread(void *arg) -{ - cyg_netdevtab_entry_t *t; - - for (;;) { - cyg_semaphore_wait(&delivery); - - for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) { - struct eth_drv_sc *sc = (struct eth_drv_sc *)t->device_instance; - if (sc->state & ETH_DRV_NEEDS_DELIVERY) { -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) - cyg_bool was_ctrlc_int; -#endif - sc->state &= ~ETH_DRV_NEEDS_DELIVERY; -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) - was_ctrlc_int = HAL_CTRLC_CHECK((*sc->funs->int_vector)(sc), (int)sc); - if (!was_ctrlc_int) // Fall through and run normal code - -#endif - (sc->funs->deliver) (sc); - } - } - } - -} - - -// Initialize all network devices -static void -init_hw_drivers(void) -{ - cyg_netdevtab_entry_t *t; - - for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) { - if (t->init(t)) { - t->status = CYG_NETDEVTAB_STATUS_AVAIL; - } else { - // What to do if device init fails? - t->status = 0; // Device not [currently] available - } - } -} - -extern struct netif *netif_default; - -static void -ecosglue_init(void) -{ - etharp_init(); - cyg_semaphore_init(&delivery, 0); - // - // start input thread before hardware drivers are initialized because - // init_hw_drivers() calls dhcp_init() if DHCP support is configured - // and dhcp_init() requires a running input thread - // - sys_thread_new(input_thread, (void*)0, CYGNUM_LWIP_ETH_THREAD_PRIORITY); - init_hw_drivers(); -} - -#endif //CYGPKG_LWIP_ETH diff --git a/packages/net/lwip_tcpip/current/src/ecos/sequential.c b/packages/net/lwip_tcpip/current/src/ecos/sequential.c --- a/packages/net/lwip_tcpip/current/src/ecos/sequential.c +++ b/packages/net/lwip_tcpip/current/src/ecos/sequential.c @@ -115,8 +115,8 @@ set_ip_addr(struct ip_addr *addr, u8_t a IP4_ADDR(addr, a, b, c, d); } -#endif // (LWIP_HAVE_LOOPIF && defined(CYGIMP_LWIP_LOOPIF_INSTANCE)) || \ - (LWIP_HAVE_SLIPIF && defined(CYGIMP_LWIP_SLIPIF_INSTANCE)) +#endif // (LWIP_HAVE_LOOPIF && defined(CYGIMP_LWIP_LOOPIF_INSTANCE)) || + // (LWIP_HAVE_SLIPIF && defined(CYGIMP_LWIP_SLIPIF_INSTANCE)) #ifdef CYGFUN_LWIP_SHOW_NETIF_CONFIG diff --git a/packages/net/lwip_tcpip/current/src/ecos/simple.c b/packages/net/lwip_tcpip/current/src/ecos/simple.c --- a/packages/net/lwip_tcpip/current/src/ecos/simple.c +++ b/packages/net/lwip_tcpip/current/src/ecos/simple.c @@ -187,8 +187,8 @@ simple_input(struct pbuf *p, struct neti return ERR_OK; } -#endif // (LWIP_HAVE_LOOPIF && defined(CYGIMP_LWIP_LOOPIF_INSTANCE)) || \ - (LWIP_HAVE_SLIPIF && defined(CYGIMP_LWIP_SLIPIF_INSTANCE)) +#endif // (LWIP_HAVE_LOOPIF && defined(CYGIMP_LWIP_LOOPIF_INSTANCE)) || + // (LWIP_HAVE_SLIPIF && defined(CYGIMP_LWIP_SLIPIF_INSTANCE)) #ifdef CYGFUN_LWIP_SHOW_NETIF_CONFIG diff --git a/packages/net/lwip_tcpip/current/src/netif/ppp/ppp.h b/packages/net/lwip_tcpip/current/src/netif/ppp/ppp.h deleted file mode 100644 --- a/packages/net/lwip_tcpip/current/src/netif/ppp/ppp.h +++ /dev/null @@ -1,446 +0,0 @@ -/***************************************************************************** -* ppp.h - Network Point to Point Protocol header file. -* -* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. -* portions Copyright (c) 1997 Global Election Systems Inc. -* -* The authors hereby grant permission to use, copy, modify, distribute, -* and license this software and its documentation for any purpose, provided -* that existing copyright notices are retained in all copies and that this -* notice and the following disclaimer are included verbatim in any -* distributions. No written agreement, license, or royalty fee is required -* for any of the authorized uses. -* -* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -****************************************************************************** -* REVISION HISTORY -* -* 03-01-01 Marc Boucher -* Ported to lwIP. -* 97-11-05 Guy Lancaster , Global Election Systems Inc. -* Original derived from BSD codes. -*****************************************************************************/ - -#ifndef PPP_H -#define PPP_H - -#include "lwip/opt.h" - -#if PPP_SUPPORT > 0 -#include "lwip/sio.h" -#include "lwip/api.h" -#include "lwip/sockets.h" -#include "lwip/stats.h" -#include "lwip/mem.h" -#include "lwip/tcpip.h" -#include "lwip/netif.h" - -/* - * pppd.h - PPP daemon global declarations. - * - * Copyright (c) 1989 Carnegie Mellon University. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by Carnegie Mellon University. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - */ -/* - * ppp_defs.h - PPP definitions. - * - * Copyright (c) 1994 The Australian National University. - * All rights reserved. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation is hereby granted, provided that the above copyright - * notice appears in all copies. This software is provided without any - * warranty, express or implied. The Australian National University - * makes no representations about the suitability of this software for - * any purpose. - * - * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY - * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF - * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO - * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, - * OR MODIFICATIONS. - */ - -#define TIMEOUT(f, a, t) sys_untimeout((f), (a)), sys_timeout((t)*1000, (f), (a)) -#define UNTIMEOUT(f, a) sys_untimeout((f), (a)) - - -# ifndef __u_char_defined - -/* Type definitions for BSD code. */ -typedef unsigned long u_long; -typedef unsigned int u_int; -typedef unsigned short u_short; -typedef unsigned char u_char; - -#endif - -/* - * Constants and structures defined by the internet system, - * Per RFC 790, September 1981, and numerous additions. - */ - -/* - * The basic PPP frame. - */ -#define PPP_HDRLEN 4 /* octets for standard ppp header */ -#define PPP_FCSLEN 2 /* octets for FCS */ - - -/* - * Significant octet values. - */ -#define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */ -#define PPP_UI 0x03 /* Unnumbered Information */ -#define PPP_FLAG 0x7e /* Flag Sequence */ -#define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */ -#define PPP_TRANS 0x20 /* Asynchronous transparency modifier */ - -/* - * Protocol field values. - */ -#define PPP_IP 0x21 /* Internet Protocol */ -#define PPP_AT 0x29 /* AppleTalk Protocol */ -#define PPP_VJC_COMP 0x2d /* VJ compressed TCP */ -#define PPP_VJC_UNCOMP 0x2f /* VJ uncompressed TCP */ -#define PPP_COMP 0xfd /* compressed packet */ -#define PPP_IPCP 0x8021 /* IP Control Protocol */ -#define PPP_ATCP 0x8029 /* AppleTalk Control Protocol */ -#define PPP_CCP 0x80fd /* Compression Control Protocol */ -#define PPP_LCP 0xc021 /* Link Control Protocol */ -#define PPP_PAP 0xc023 /* Password Authentication Protocol */ -#define PPP_LQR 0xc025 /* Link Quality Report protocol */ -#define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */ -#define PPP_CBCP 0xc029 /* Callback Control Protocol */ - -/* - * Values for FCS calculations. - */ -#define PPP_INITFCS 0xffff /* Initial FCS value */ -#define PPP_GOODFCS 0xf0b8 /* Good final FCS value */ -#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]) - -/* - * Extended asyncmap - allows any character to be escaped. - */ -typedef u_char ext_accm[32]; - -/* - * What to do with network protocol (NP) packets. - */ -enum NPmode { - NPMODE_PASS, /* pass the packet through */ - NPMODE_DROP, /* silently drop the packet */ - NPMODE_ERROR, /* return an error */ - NPMODE_QUEUE /* save it up for later. */ -}; - -/* - * Inline versions of get/put char/short/long. - * Pointer is advanced; we assume that both arguments - * are lvalues and will already be in registers. - * cp MUST be u_char *. - */ -#define GETCHAR(c, cp) { \ - (c) = *(cp)++; \ -} -#define PUTCHAR(c, cp) { \ - *(cp)++ = (u_char) (c); \ -} - - -#define GETSHORT(s, cp) { \ - (s) = *(cp)++ << 8; \ - (s) |= *(cp)++; \ -} -#define PUTSHORT(s, cp) { \ - *(cp)++ = (u_char) ((s) >> 8); \ - *(cp)++ = (u_char) (s); \ -} - -#define GETLONG(l, cp) { \ - (l) = *(cp)++ << 8; \ - (l) |= *(cp)++; (l) <<= 8; \ - (l) |= *(cp)++; (l) <<= 8; \ - (l) |= *(cp)++; \ -} -#define PUTLONG(l, cp) { \ - *(cp)++ = (u_char) ((l) >> 24); \ - *(cp)++ = (u_char) ((l) >> 16); \ - *(cp)++ = (u_char) ((l) >> 8); \ - *(cp)++ = (u_char) (l); \ -} - - -#define INCPTR(n, cp) ((cp) += (n)) -#define DECPTR(n, cp) ((cp) -= (n)) - -#define BCMP(s0, s1, l) memcmp((u_char *)(s0), (u_char *)(s1), (l)) -#define BCOPY(s, d, l) memcpy((d), (s), (l)) -#define BZERO(s, n) memset(s, 0, n) -#if PPP_DEBUG -#define PRINTMSG(m, l) { m[l] = '\0'; ppp_trace(LOG_INFO, "Remote message: %s\n", m); } -#else -#define PRINTMSG(m, l) -#endif - -/* - * MAKEHEADER - Add PPP Header fields to a packet. - */ -#define MAKEHEADER(p, t) { \ - PUTCHAR(PPP_ALLSTATIONS, p); \ - PUTCHAR(PPP_UI, p); \ - PUTSHORT(t, p); } - -/************************* -*** PUBLIC DEFINITIONS *** -*************************/ - -/* Error codes. */ -#define PPPERR_NONE 0 /* No error. */ -#define PPPERR_PARAM -1 /* Invalid parameter. */ -#define PPPERR_OPEN -2 /* Unable to open PPP session. */ -#define PPPERR_DEVICE -3 /* Invalid I/O device for PPP. */ -#define PPPERR_ALLOC -4 /* Unable to allocate resources. */ -#define PPPERR_USER -5 /* User interrupt. */ -#define PPPERR_CONNECT -6 /* Connection lost. */ -#define PPPERR_AUTHFAIL -7 /* Failed authentication challenge. */ -#define PPPERR_PROTOCOL -8 /* Failed to meet protocol. */ - -/* - * PPP IOCTL commands. - */ -/* - * Get the up status - 0 for down, non-zero for up. The argument must - * point to an int. - */ -#define PPPCTLG_UPSTATUS 100 /* Get the up status - 0 down else up */ -#define PPPCTLS_ERRCODE 101 /* Set the error code */ -#define PPPCTLG_ERRCODE 102 /* Get the error code */ -#define PPPCTLG_FD 103 /* Get the fd associated with the ppp */ - -/************************ -*** PUBLIC DATA TYPES *** -************************/ - -/* - * The following struct gives the addresses of procedures to call - * for a particular protocol. - */ -struct protent { - u_short protocol; /* PPP protocol number */ - /* Initialization procedure */ - void (*init) (int unit); - /* Process a received packet */ - void (*input) (int unit, u_char *pkt, int len); - /* Process a received protocol-reject */ - void (*protrej) (int unit); - /* Lower layer has come up */ - void (*lowerup) (int unit); - /* Lower layer has gone down */ - void (*lowerdown) (int unit); - /* Open the protocol */ - void (*open) (int unit); - /* Close the protocol */ - void (*close) (int unit, char *reason); -#if 0 - /* Print a packet in readable form */ - int (*printpkt) (u_char *pkt, int len, - void (*printer) (void *, char *, ...), - void *arg); - /* Process a received data packet */ - void (*datainput) (int unit, u_char *pkt, int len); -#endif - int enabled_flag; /* 0 iff protocol is disabled */ - char *name; /* Text name of protocol */ -#if 0 - /* Check requested options, assign defaults */ - void (*check_options) (u_long); - /* Configure interface for demand-dial */ - int (*demand_conf) (int unit); - /* Say whether to bring up link for this pkt */ - int (*active_pkt) (u_char *pkt, int len); -#endif -}; - -/* - * The following structure records the time in seconds since - * the last NP packet was sent or received. - */ -struct ppp_idle { - u_short xmit_idle; /* seconds since last NP packet sent */ - u_short recv_idle; /* seconds since last NP packet received */ -}; - -struct ppp_settings { - - u_int disable_defaultip : 1; /* Don't use hostname for default IP addrs */ - u_int auth_required : 1; /* Peer is required to authenticate */ - u_int explicit_remote : 1; /* remote_name specified with remotename opt */ - u_int refuse_pap : 1; /* Don't wanna auth. ourselves with PAP */ - u_int refuse_chap : 1; /* Don't wanna auth. ourselves with CHAP */ - u_int usehostname : 1; /* Use hostname for our_name */ - u_int usepeerdns : 1; /* Ask peer for DNS adds */ - - u_short idle_time_limit; /* Shut down link if idle for this long */ - int maxconnect; /* Maximum connect time (seconds) */ - - char user[MAXNAMELEN + 1];/* Username for PAP */ - char passwd[MAXSECRETLEN + 1]; /* Password for PAP, secret for CHAP */ - char our_name[MAXNAMELEN + 1]; /* Our name for authentication purposes */ - char remote_name[MAXNAMELEN + 1]; /* Peer's name for authentication */ -}; - -struct ppp_addrs { - struct ip_addr our_ipaddr, his_ipaddr, netmask, dns1, dns2; -}; - -/***************************** -*** PUBLIC DATA STRUCTURES *** -*****************************/ -/* Buffers for outgoing packets. */ -extern u_char outpacket_buf[NUM_PPP][PPP_MRU+PPP_HDRLEN]; - -extern struct ppp_settings ppp_settings; - -extern struct protent *ppp_protocols[];/* Table of pointers to supported protocols */ - - -/*********************** -*** PUBLIC FUNCTIONS *** -***********************/ - -/* Initialize the PPP subsystem. */ -void pppInit(void); - -/* Warning: Using PPPAUTHTYPE_ANY might have security consequences. - * RFC 1994 says: - * - * In practice, within or associated with each PPP server, there is a - * database which associates "user" names with authentication - * information ("secrets"). It is not anticipated that a particular - * named user would be authenticated by multiple methods. This would - * make the user vulnerable to attacks which negotiate the least secure - * method from among a set (such as PAP rather than CHAP). If the same - * secret was used, PAP would reveal the secret to be used later with - * CHAP. - * - * Instead, for each user name there should be an indication of exactly - * one method used to authenticate that user name. If a user needs to - * make use of different authentication methods under different - * circumstances, then distinct user names SHOULD be employed, each of - * which identifies exactly one authentication method. - * - */ -enum pppAuthType { - PPPAUTHTYPE_NONE, - PPPAUTHTYPE_ANY, - PPPAUTHTYPE_PAP, - PPPAUTHTYPE_CHAP -}; - -void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd); - -/* - * Open a new PPP connection using the given I/O device. - * This initializes the PPP control block but does not - * attempt to negotiate the LCP session. - * Return a new PPP connection descriptor on success or - * an error code (negative) on failure. - */ -int pppOpen(sio_fd_t fd, void (*linkStatusCB)(void *ctx, int errCode, void *arg), void *linkStatusCtx); - -/* - * Close a PPP connection and release the descriptor. - * Any outstanding packets in the queues are dropped. - * Return 0 on success, an error code on failure. - */ -int pppClose(int pd); - -/* - * Indicate to the PPP process that the line has disconnected. - */ -void pppSigHUP(int pd); - -/* - * Get and set parameters for the given connection. - * Return 0 on success, an error code on failure. - */ -int pppIOCtl(int pd, int cmd, void *arg); - -/* - * Return the Maximum Transmission Unit for the given PPP connection. - */ -u_int pppMTU(int pd); - -/* - * Write n characters to a ppp link. - * RETURN: >= 0 Number of characters written - * -1 Failed to write to device - */ -int pppWrite(int pd, const u_char *s, int n); - -void pppMainWakeup(int pd); - -/* Configure i/f transmit parameters */ -void ppp_send_config (int, int, u32_t, int, int); -/* Set extended transmit ACCM */ -void ppp_set_xaccm (int, ext_accm *); -/* Configure i/f receive parameters */ -void ppp_recv_config (int, int, u32_t, int, int); -/* Find out how long link has been idle */ -int get_idle_time (int, struct ppp_idle *); - -/* Configure VJ TCP header compression */ -int sifvjcomp (int, int, int, int); -/* Configure i/f down (for IP) */ -int sifup (int); -/* Set mode for handling packets for proto */ -int sifnpmode (int u, int proto, enum NPmode mode); -/* Configure i/f down (for IP) */ -int sifdown (int); -/* Configure IP addresses for i/f */ -int sifaddr (int, u32_t, u32_t, u32_t, u32_t, u32_t); -/* Reset i/f IP addresses */ -int cifaddr (int, u32_t, u32_t); -/* Create default route through i/f */ -int sifdefaultroute (int, u32_t, u32_t); -/* Delete default route through i/f */ -int cifdefaultroute (int, u32_t, u32_t); - -/* Get appropriate netmask for address */ -u32_t GetMask (u32_t); - -#endif /* PPP_SUPPORT */ - -#endif /* PPP_H */ diff --git a/packages/net/lwip_tcpip/current/tests/httpd.c b/packages/net/lwip_tcpip/current/tests/httpd.c deleted file mode 100644 --- a/packages/net/lwip_tcpip/current/tests/httpd.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright (c) 2001, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ - -#include "lwip/debug.h" -#include "lwip/stats.h" -#include "lwip/tcp.h" -#include - -#ifdef CYGPKG_LWIP_TCP - -struct http_state { - const char *file; - u32_t left; - u8_t retries; -}; - -/* Stack smashing arch-independent shellcode: will brick your target :-) */ -static const char sdata[] __attribute__ ((aligned)) = { - 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, - 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, - 0xd, 0xa, 0xd, 0xa, 0x49, 0x74, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x64, 0x2e, 0xa, }; - - - - -/*-----------------------------------------------------------------------------------*/ -static void -conn_err(void *arg, err_t err) -{ - struct http_state *hs; - - hs = arg; - mem_free(hs); -} -/*-----------------------------------------------------------------------------------*/ -static void -close_conn(struct tcp_pcb *pcb, struct http_state *hs) -{ - tcp_arg(pcb, NULL); - tcp_sent(pcb, NULL); - tcp_recv(pcb, NULL); - mem_free(hs); - tcp_close(pcb); -} -/*-----------------------------------------------------------------------------------*/ -static void -send_data(struct tcp_pcb *pcb, struct http_state *hs) -{ - err_t err; - u16_t len; - - /* We cannot send more data than space available in the send - buffer. */ - if(tcp_sndbuf(pcb) < hs->left) { - len = tcp_sndbuf(pcb); - } else { - len = hs->left; - } - - do { - err = tcp_write(pcb, hs->file, len, 0); - if(err == ERR_MEM) { - len /= 2; - } - } while(err == ERR_MEM && len > 1); - - if(err == ERR_OK) { - hs->file += len; - hs->left -= len; - } -} -/*-----------------------------------------------------------------------------------*/ -static err_t -http_poll(void *arg, struct tcp_pcb *pcb) -{ - struct http_state *hs; - - hs = arg; - - /* printf("Polll\n");*/ - if(hs == NULL) { - /* printf("Null, close\n");*/ - tcp_abort(pcb); - return ERR_ABRT; - } else { - ++hs->retries; - if(hs->retries == 4) { - tcp_abort(pcb); - return ERR_ABRT; - } - send_data(pcb, hs); - } - - return ERR_OK; -} -/*-----------------------------------------------------------------------------------*/ -static err_t -http_sent(void *arg, struct tcp_pcb *pcb, u16_t len) -{ - struct http_state *hs; - - hs = arg; - - hs->retries = 0; - - if(hs->left > 0) { - send_data(pcb, hs); - } else { - close_conn(pcb, hs); - } - - return ERR_OK; -} -/*-----------------------------------------------------------------------------------*/ -static err_t -http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ - int i; - char *data; - struct http_state *hs; - - hs = arg; - - if(err == ERR_OK && p != NULL) { - - /* Inform TCP that we have taken the data. */ - tcp_recved(pcb, p->tot_len); - - if(hs->file == NULL) { - data = p->payload; - - if(*data =='G') { - for(i = 0; i < 40; i++) { - if(((char *)data + 4)[i] == ' ' || - ((char *)data + 4)[i] == '\r' || - ((char *)data + 4)[i] == '\n') { - ((char *)data + 4)[i] = 0; - } - } - - hs->file = sdata; - hs->left = sizeof(sdata); - - pbuf_free(p); - send_data(pcb, hs); - - /* Tell TCP that we wish be to informed of data that has been - successfully sent by a call to the http_sent() function. */ - tcp_sent(pcb, http_sent); - } else { - pbuf_free(p); - close_conn(pcb, hs); - } - } else { - pbuf_free(p); - } - } - - if(err == ERR_OK && p == NULL) { - close_conn(pcb, hs); - } - return ERR_OK; -} -/*-----------------------------------------------------------------------------------*/ -static err_t -http_accept(void *arg, struct tcp_pcb *pcb, err_t err) -{ - struct http_state *hs; - - tcp_setprio(pcb, TCP_PRIO_MIN); - - /* Allocate memory for the structure that holds the state of the - connection. */ - hs = mem_malloc(sizeof(struct http_state)); - - if(hs == NULL) { - return ERR_MEM; - } - - /* Initialize the structure. */ - hs->file = NULL; - hs->left = 0; - hs->retries = 0; - - /* Tell TCP that this is the structure we wish to be passed for our - callbacks. */ - tcp_arg(pcb, hs); - - /* Tell TCP that we wish to be informed of incoming data by a call - to the http_recv() function. */ - tcp_recv(pcb, http_recv); - - tcp_err(pcb, conn_err); - - tcp_poll(pcb, http_poll, 4); - return ERR_OK; -} - -/*-----------------------------------------------------------------------------------*/ -void -httpd_init(void *arg) -{ - struct tcp_pcb *pcb; - - pcb = tcp_new(); - tcp_bind(pcb, IP_ADDR_ANY, 80); - pcb = tcp_listen(pcb); - tcp_accept(pcb, http_accept); - while(1) - cyg_thread_delay(1000); -} - -void -tmain(cyg_addrword_t p) -{ - lwip_init(); - sys_thread_new(httpd_init, (void*)"httpd",7); -} - -#define STACK_SIZE 0x1000 -static char stack[STACK_SIZE]; -static cyg_thread thread_data; -static cyg_handle_t thread_handle; - -void -httpd_main(void) -{ - CYG_TEST_INIT(); - // Create a main thread, so we can run the scheduler and have time 'pass' - cyg_thread_create(10, // Priority - just a number - tmain, // entry - 0, // entry parameter - "thread", // Name - &stack[0], // Stack - STACK_SIZE, // Size - &thread_handle, // Handle - &thread_data // Thread data structure - ); - cyg_thread_resume(thread_handle); // Start it - cyg_scheduler_start(); - CYG_TEST_FAIL_FINISH("Not reached"); -} - -externC void -cyg_start( void ) -{ - httpd_main(); -} - -#else // def CYGPKG_LWIP_TCP -#define N_A_MSG "TCP support disabled" -#endif // def CYGFUN_KERNEL_API_C - -#ifdef N_A_MSG -externC void -cyg_start( void ) -{ - CYG_TEST_INIT(); - CYG_TEST_NA(N_A_MSG); -} -#endif // N_A_MSG - diff --git a/packages/net/lwip_tcpip/current/tests/nc_test_slave.c b/packages/net/lwip_tcpip/current/tests/nc_test_slave.c --- a/packages/net/lwip_tcpip/current/tests/nc_test_slave.c +++ b/packages/net/lwip_tcpip/current/tests/nc_test_slave.c @@ -57,7 +57,8 @@ #include "nc_test_framework.h" -#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000) +#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_MINIMUM + \ + 4*CYGNUM_HAL_STACK_FRAME_SIZE) #define MAX_LOAD_THREAD_LEVEL 20 #define MIN_LOAD_THREAD_LEVEL 0 #define NUM_LOAD_THREADS 10 @@ -90,7 +91,7 @@ static void do_some_random_computation(i extern void show_net_times(void); #endif -#define MAX_BUF 8192 +#define MAX_BUF (sizeof(struct nc_test_data)+10240) static unsigned char in_buf[MAX_BUF], out_buf[MAX_BUF]; extern void @@ -186,13 +187,13 @@ do_udp_test(int s1, struct nc_request *r if ((ntohl(tdp->key1) == NC_TEST_DATA_KEY1) && (ntohl(tdp->key2) == NC_TEST_DATA_KEY2)) { if (ntohl(tdp->seq) != seq) { - test_printf("Packets out of sequence - recvd: %lu, expected: %d\n", + test_printf("Packets out of sequence - recvd: %u, expected: %d\n", ntohl(tdp->seq), seq); seq = ntohl(tdp->seq); seq_errors++; } } else { - test_printf("Bad data packet - key: %lx/%lx, seq: %lu\n", + test_printf("Bad data packet - key: %x/%x, seq: %u\n", ntohl(tdp->key1), ntohl(tdp->key2), ntohl(tdp->seq)); } @@ -362,13 +363,13 @@ do_tcp_test(int s1, struct nc_request *r if ((ntohl(tdp->key1) == NC_TEST_DATA_KEY1) && (ntohl(tdp->key2) == NC_TEST_DATA_KEY2)) { if (ntohl(tdp->seq) != seq) { - test_printf("Packets out of sequence - recvd: %lu, expected: %d\n", + test_printf("Packets out of sequence - recvd: %u, expected: %d\n", ntohl(tdp->seq), seq); seq = ntohl(tdp->seq); seq_errors++; } } else { - test_printf("Bad data packet - key: %lx/%lx, seq: %lu\n", + test_printf("Bad data packet - key: %x/%x, seq: %u\n", ntohl(tdp->key1), ntohl(tdp->key2), ntohl(tdp->seq)); } @@ -446,7 +447,7 @@ nc_slave(test_param_t param) if (recvfrom(s, &req, sizeof(req), 0, (struct sockaddr *)&master, &masterlen) < 0) { pexit("recvfrom"); } - test_printf("Request %lu from %s:%d\n", ntohl(req.type), + test_printf("Request %u from %s:%d\n", ntohl(req.type), inet_ntoa(master.sin_addr), ntohs(master.sin_port)); reply.response = htonl(NC_REPLY_ACK); reply.seq = req.seq; @@ -455,22 +456,22 @@ nc_slave(test_param_t param) done = true; break; case NC_REQUEST_UDP_SEND: - test_printf("UDP send - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("UDP send - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_UDP_RECV: - test_printf("UDP recv - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("UDP recv - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_UDP_ECHO: - test_printf("UDP echo - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("UDP echo - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_TCP_SEND: - test_printf("TCP send - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("TCP send - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_TCP_RECV: - test_printf("TCP recv - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("TCP recv - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_TCP_ECHO: - test_printf("TCP echo - %lu buffers, %lu bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); + test_printf("TCP echo - %u buffers, %u bytes\n", ntohl(req.nbufs), ntohl(req.buflen)); break; case NC_REQUEST_SET_LOAD: start_load(ntohl(req.nbufs)); @@ -490,7 +491,7 @@ nc_slave(test_param_t param) reply.misc.idle_results.count[1] = htonl((long)idle_thread_count); break; default: - test_printf("Unrecognized request: %lu\n", ntohl(req.type)); + test_printf("Unrecognized request: %u\n", ntohl(req.type)); reply.response = htonl(NC_REPLY_NAK); reply.reason = htonl(NC_REPLY_NAK_UNKNOWN_REQUEST); break; @@ -678,7 +679,7 @@ static void do_some_random_computation(int p) { // Just something that might be "hard" - volatile double x; + volatile double x CYGBLD_ATTRIB_UNUSED; x = ((p * 10) * 3.14159) / 180.0; // radians } diff --git a/packages/net/ns/dns/current/ChangeLog b/packages/net/ns/dns/current/ChangeLog --- a/packages/net/ns/dns/current/ChangeLog +++ b/packages/net/ns/dns/current/ChangeLog @@ -1,3 +1,8 @@ +2010-09-29 Kelvin Lawson + + * src/dns.c: Remove spurious mutex unlock in cyg_res_getaddrinfo() + when name lookup string is too long. + 2008-08-12 Jonathan Larmour * src/dns.c: id global should be unsigned, in line with DNS header. diff --git a/packages/net/ns/dns/current/src/dns.c b/packages/net/ns/dns/current/src/dns.c --- a/packages/net/ns/dns/current/src/dns.c +++ b/packages/net/ns/dns/current/src/dns.c @@ -593,7 +593,6 @@ cyg_dns_getaddrinfo(const char * hostnam if (domainname) { if ((strlen(hostname) + strlen(domainname)) > 254) { - cyg_drv_mutex_unlock(&dns_mutex); CYG_REPORT_RETVAL( -EAI_FAIL ); return -EAI_FAIL; } diff --git a/packages/net/tcpip/current/ChangeLog b/packages/net/tcpip/current/ChangeLog --- a/packages/net/tcpip/current/ChangeLog +++ b/packages/net/tcpip/current/ChangeLog @@ -1,3 +1,7 @@ +2010-09-18 John Dallaway + + * doc/openbsd.sgml: No longer "recent". + 2009-09-10 John Dallaway * src/sys/netinet/tcp_input.c, src/sys/netinet/tcp_timer.c: Remove @@ -1735,7 +1739,7 @@ 2000-02-08 John Dallaway - + @@ -32,7 +32,7 @@ TCP/IP Networking for eCos now provides a complete - TCP/IP networking stack, which is derived from a recent + TCP/IP networking stack, which is derived from a stable release of OpenBSD. The networking support is fully featured and well tested within the eCos environment. diff --git a/packages/redboot/current/ChangeLog b/packages/redboot/current/ChangeLog --- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,25 @@ +2012-03-06 Grant Edwards + + * src/net/net_io.c: + * cdl/redboot.cdl: Added new CDL option + CYGPKG_REDBOOT_NETWORKING_BOOTP to control whether BOOTP/DHCP + support is built into Redboot. Moved "DEFAULT_NO_BOOTP" option + into the new package. + [ Bugzilla 1001177 ] + + * src/net/bootp.c: + * cdl/redboot.cdl: Re-wrote BOOTP/DHCP client code to fix retry + mechanism and to fix race conditions that were corrupting the + received IP configuration data. Added verbose BOOTP/DHCP output + CDL option. + [ Bugzilla 1001177 ] + + +2011-12-02 John Dallaway + + * cdl/redboot.cdl: Fix typographical error. Issue reported by + Keith Smith. [ Bugzilla 1001403 ] + 2010-04-23 John Dallaway * src/net/dns.c: Initialise DNS domain with an empty string to diff --git a/packages/redboot/current/cdl/redboot.cdl b/packages/redboot/current/cdl/redboot.cdl --- a/packages/redboot/current/cdl/redboot.cdl +++ b/packages/redboot/current/cdl/redboot.cdl @@ -251,6 +251,7 @@ cdl_package CYGPKG_REDBOOT { display "Include POSIX checksum command" doc ref/cksum-command.html default_value 1 + requires CYGPKG_CRC compile -library=libextras.a cksum.c } @@ -339,7 +340,7 @@ cdl_package CYGPKG_REDBOOT { active_if CYGPKG_IO_ETH_DRIVERS default_value 1 implements CYGINT_REDBOOT_LOAD_METHOD - compile net/bootp.c net/udp.c net/ip.c net/pktbuf.c net/cksum.c + compile net/udp.c net/ip.c net/pktbuf.c net/cksum.c compile net/enet.c net/icmp.c net/tcp.c net/timers.c net/arp.c compile net/inet_addr.c compile -library=libextras.a net/ping.c net/net_io.c @@ -389,17 +390,6 @@ cdl_package CYGPKG_REDBOOT { an IP address is configured into the Flash configuration, that will be used in preference." - cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { - display "Do not try to use BOOTP" - flavor bool - default_value 0 - description " - By default Redboot tries to use BOOTP to get an IP - address. If there's no BOOTP server on your network - use this option to avoid to wait until the - timeout. This option is overriden by the - configuration stored in flash." - } cdl_option CYGDAT_REDBOOT_DEFAULT_BOOTP_SERVER_IP_ADDR { display "Default bootp server" flavor booldata @@ -415,21 +405,54 @@ cdl_package CYGPKG_REDBOOT { preference." } } - - cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { - display "Use DHCP to get IP information" + + cdl_component CYGPKG_REDBOOT_NETWORKING_BOOTP { + display "Enable BOOTP/DHCP support" flavor bool default_value 1 + compile net/bootp.c description " - Use DHCP protocol to obtain pertinent IP addresses, such - as the client, server, gateway, etc." + Use BOOTP/DHCP protocol to obtain pertinent IP + addresses, such as the client, server, gateway, + etc." + + cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + display "Enable DHCP in addition to BOOTP support" + flavor bool + default_value 1 + description " + Enables DHCP protocol in addition to BOOTP. If not enabled, + only BOOTP will be suported." + } + + cdl_component CYGSEM_REDBOOT_NETWORKING_BOOTP_VERBOSE { + display "Enable verbose output from BOOTP/DHCP code" + flavor bool + default_value 0 + description " + Enable more verbose output from BOOTP/DHCP that logs rx/tx + packet types and state-machine transitions." + } + + cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + display "Do not try to use BOOTP/DHCP" + flavor bool + default_value 0 + description " + By default Redboot tries to use BOOTP/DHCP to + get an IP address when BOOTP/DHCP support is + present in Redboot. If there's no BOOTP/DHCP + server on your network use this option to + avoid waiting for the BOOTP/DHCP timeouts and + retries. This option is overriden by the + configuration stored in flash." + } } - + cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { display "Use a gateway for non-local IP traffic" flavor bool default_value 1 - requires CYGSEM_REDBOOT_NETWORKING_DHCP description " Enabling this option will allow the RedBoot networking stack to use a \[single\] gateway to reach a non-local @@ -932,6 +955,7 @@ cdl_package CYGPKG_REDBOOT { display "Use CRC checksums on FIS images." flavor bool default_value 1 + requires CYGPKG_CRC description " When this option is enabled, RedBoot will use CRC checksums when reading and writing flash images." diff --git a/packages/redboot/current/include/redboot.h b/packages/redboot/current/include/redboot.h --- a/packages/redboot/current/include/redboot.h +++ b/packages/redboot/current/include/redboot.h @@ -67,8 +67,10 @@ #include #include // Determine an IP address for this node, using BOOTP +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP extern int __bootp_find_local_ip(bootp_header_t *info); #endif +#endif #ifdef DEFINE_VARS #define EXTERN diff --git a/packages/redboot/current/src/net/bootp.c b/packages/redboot/current/src/net/bootp.c --- a/packages/redboot/current/src/net/bootp.c +++ b/packages/redboot/current/src/net/bootp.c @@ -40,11 +40,13 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): gthomas +// grant edwards // Contributors: gthomas -// Date: 2000-07-14 -// Purpose: -// Description: -// +// grant edwards +// Date: 2011-03-18 +// Purpose: +// Description: +// // This code is part of RedBoot (tm). // //####DESCRIPTIONEND#### @@ -55,299 +57,341 @@ #include #include -#define SHOULD_BE_RANDOM 0x12345555 +#define RETRY_TIME_MS 2000 +#define MAX_RETRIES 4 -/* How many milliseconds to wait before retrying the request */ -#define RETRY_TIME 2000 -#define MAX_RETRIES 8 - +static unsigned xid; // transaction ID, should be random/unique +static const ip_route_t broadcast = { {255, 255, 255, 255}, + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} }; static bootp_header_t *bp_info; - + #ifdef CYGSEM_REDBOOT_NETWORKING_DHCP -static const unsigned char dhcpCookie[] = {99,130,83,99}; -static const unsigned char dhcpEnd[] = {255}; -static const unsigned char dhcpDiscover[] = {53,1,1}; -static const unsigned char dhcpRequest[] = {53,1,3}; -static const unsigned char dhcpRequestIP[] = {50,4}; -static const unsigned char dhcpParamRequestList[] = {55,3,1,3,6}; +static const unsigned char dhcpCookie[] = { 99, 130, 83, 99 }; +static const unsigned char dhcpDiscover[] = { 53, 1, 1 }; +static const unsigned char dhcpRequest[] = { 53, 1, 3 }; +static const unsigned char dhcpRequestIP[] = { 50, 4 }; +static const unsigned char dhcpParamRequestList[] = { 55, 3, 1, 3, 6 }; +static const unsigned char dhcpEnd[] = { 255 }; +#endif + +// FSM states -- only NONE and DONE are used in BOOTP mode static enum { DHCP_NONE = 0, - DHCP_DISCOVER, - DHCP_OFFER, - DHCP_REQUEST, - DHCP_ACK + DHCP_WAITING_FOR_OFFER, + DHCP_WAITING_FOR_ACK, + DHCP_DONE, + DHCP_FAILED } dhcpState; + +#if !defined(CYGSEM_REDBOOT_NETWORKING_BOOTP_VERBOSE) +# define debug_printf(format, ...) /* noop */ +#else +# define debug_printf(format, ...) diag_printf(format, ##__VA_ARGS__) +static const char *dhcpStateString[] = { "NONE", "WAITING_FOR_OFFER", "WAITING_FOR_ACK", "DONE", "FAILED" }; +# ifdef CYGSEM_REDBOOT_NETWORKING_DHCP +static const char *dhcpTypeString[] = { "0x00", "DISCOVER", "OFFER", "REQUEST", "0x04", "ACK", "NAK", "0x07" }; +# endif +#endif + +// parse network configuration from a DHCP ACK packet or BOOTP REPLY +static void +parseConfig(bootp_header_t *bp, int len) +{ +#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP + unsigned char *end, + *p; + int optlen; +#endif + memcpy(__local_ip_addr, &bp->bp_yiaddr, sizeof __local_ip_addr); +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + memcpy(__local_ip_gate, &bp->bp_giaddr, sizeof __local_ip_gate); #endif +#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP + + // are there option fields to parse? + if (memcmp(bp->bp_vend, dhcpCookie, sizeof dhcpCookie)) + return; + + p = bp->bp_vend + 4; + end = (unsigned char *)bp + len; + while (p < end) { + unsigned char tag = *p; + if (tag == TAG_END) + break; + if (tag == TAG_PAD) + optlen = 1; + else { + optlen = p[1]; + p += 2; + switch (tag) { +# ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + case TAG_SUBNET_MASK: + memcpy(__local_ip_mask, p, sizeof __local_ip_mask); + break; + case TAG_GATEWAY: + memcpy(__local_ip_gate, p, sizeof __local_ip_gate); + break; +# endif +# ifdef CYGPKG_REDBOOT_NETWORKING_DNS + case TAG_DOMAIN_SERVER: + memcpy(&__bootp_dns_addr, p, sizeof __bootp_dns_addr); + __bootp_dns_set = 1; + break; +# endif + default: + break; + } + } + p += optlen; + } +#endif +} + +// functions used to prepare BOOTP/DHCP tx packets + +// basic BOOTP request static void -bootp_handler(udp_socket_t *skt, char *buf, int len, - ip_route_t *src_route, word src_port) +prep_bootp_request(bootp_header_t *b) +{ + memset(b, 0, sizeof *b); + b->bp_op = BOOTREQUEST; + b->bp_htype = HTYPE_ETHERNET; + b->bp_hlen = sizeof __local_enet_addr; + b->bp_xid = xid; + memcpy(b->bp_chaddr, __local_enet_addr, sizeof b->bp_chaddr); +} + +#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP + +# define AddOption(p,d) do {memcpy(p,d,sizeof d); p += sizeof d;} while (0) + +// add DHCP DISCOVER fields to a basic BOOTP request +static int +prep_dhcp_discover(bootp_header_t *b) +{ + unsigned char *p = b->bp_vend; + AddOption(p, dhcpCookie); + AddOption(p, dhcpDiscover); + AddOption(p, dhcpParamRequestList); + AddOption(p, dhcpEnd); + if (p < &b->bp_vend[BP_MIN_VEND_SIZE]) + p = &b->bp_vend[BP_MIN_VEND_SIZE]; + return p - (unsigned char *)b; +} + +// add DHCP REQUEST fields to a basic BOOTP request using data from supplied DHCP OFFER +static int +prep_dhcp_request(bootp_header_t *b, bootp_header_t *offer) +{ + unsigned char *p = b->bp_vend; + AddOption(p, dhcpCookie); + AddOption(p, dhcpRequest); + AddOption(p, dhcpRequestIP); + memcpy(p, &offer->bp_yiaddr, dhcpRequestIP[1]); + p += dhcpRequestIP[1]; // Ask for the address just given + AddOption(p, dhcpParamRequestList); + AddOption(p, dhcpEnd); + if (p < &b->bp_vend[BP_MIN_VEND_SIZE]) + p = &b->bp_vend[BP_MIN_VEND_SIZE]; + return p - (unsigned char *)b; +} +#endif + +// Macro used to change state of BOOTP/DHCP state machine +#define NewDhcpState(state) do {dhcpState = state; debug_printf("DHCP state: %s\n",dhcpStateString[state]);}while(0) + +// send BOOTP REQUEST or DHCP DISCOVER +static void +bootp_start(void) +{ + int txSize; + bootp_header_t b; + // send out a BOOTP request or DHCP DISCOVER + prep_bootp_request(&b); // basic BOOTP request +#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP + debug_printf("DHCP send: DISCOVER\n"); + NewDhcpState(DHCP_WAITING_FOR_OFFER); + txSize = prep_dhcp_discover(&b); // make it into DHCP DISCOVER +#else + debug_printf("BOOTP send: REQUEST\n"); + txSize = sizeof(b); +#endif + __udp_send((char *)&b, txSize, (ip_route_t*)&broadcast, IPPORT_BOOTPS, IPPORT_BOOTPC); +} + +// save packet for use by other commands +static void +save_packet(void *b, int len) +{ + memset(bp_info, 0, sizeof *bp_info); + if ((unsigned)len > sizeof *bp_info) + len = sizeof *bp_info; + memcpy(bp_info, b, len); +} + +// Handler for received BOOTP/DHCP packets +static void +bootp_handler(udp_socket_t *skt, char *buf, int len, ip_route_t *src_route, + word src_port) { bootp_header_t *b; #ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - unsigned char *p, expected = 0; + int txSize; + int type; + bootp_header_t txpkt; + unsigned expected = 0; #endif - b = (bootp_header_t *)buf; - if (bp_info) { - memset(bp_info,0,sizeof *bp_info); - if (len > sizeof *bp_info) - len = sizeof *bp_info; - memcpy(bp_info, b, len); + b = (bootp_header_t *) buf; + + // only accept BOOTP REPLY responses + if (b->bp_op != BOOTREPLY) + return; + + // must be sent to me + if (memcmp(b->bp_chaddr, __local_enet_addr, b->bp_hlen)) + return; + + // verify XID + if (b->bp_xid != xid) + return; + +#if !defined(CYGSEM_REDBOOT_NETWORKING_DHCP) + // simple BOOTP - this is all there is! + debug_printf("BOOTP recv: REPLY\n"); + if (dhcpState != DHCP_DONE) { + save_packet(b, len); + parseConfig(b, len); + NewDhcpState(DHCP_DONE); + } +#else + // DHCP support is enabled... + + // Check to see that it's a DHCP packet with a DHCP type field + + type = -1; + if (!memcmp(b->bp_vend, dhcpCookie, sizeof dhcpCookie)) { + unsigned char *p = b->bp_vend + 4; + while (p < (unsigned char *)b + len) { + if (*p == TAG_DHCP_MESS_TYPE) { + type = p[2]; + break; + } + p += p[1] + 2; + } } - // Only accept pure REPLY responses - if (b->bp_op != BOOTREPLY) - return; - - // Must be sent to me, as well! - if (memcmp(b->bp_chaddr, __local_enet_addr, 6)) - return; + if (type == -1) { + // apparently we have a BOOTP (but not not DHCP) server + debug_printf("DHCP recv: BOOTP-REPLY -- falling back to BOOTP mode\n"); + if (dhcpState != DHCP_DONE) { + save_packet(b, len); + parseConfig(b, len); + NewDhcpState(DHCP_DONE); + } + return; + } -#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - p = b->bp_vend; - if (memcmp(p, dhcpCookie, sizeof(dhcpCookie))) - return; - p += 4; - - // Find the DHCP Message Type tag - while (*p != TAG_DHCP_MESS_TYPE) { - p += p[1] + 2; - if (p >= (unsigned char*)b + sizeof(*bp_info)) - return; - } - - p += 2; + // it's a real DHCP packet + debug_printf("DHCP recv: %s [%d]\n", dhcpTypeString[type], type); switch (dhcpState) { - case DHCP_DISCOVER: - // The discover message has been sent, only accept an offer reply - if (*p == DHCP_MESS_TYPE_OFFER) { - dhcpState = DHCP_OFFER; + case DHCP_WAITING_FOR_OFFER: + if (type == (expected = DHCP_MESS_TYPE_OFFER)) { + prep_bootp_request(&txpkt); + txSize = prep_dhcp_request(&txpkt, b); + debug_printf("DHCP send: REQUEST\n"); + NewDhcpState(DHCP_WAITING_FOR_ACK); + __udp_send((char *)&txpkt, txSize, (ip_route_t *)&broadcast, IPPORT_BOOTPS, IPPORT_BOOTPC); return; - } else { - expected = DHCP_MESS_TYPE_OFFER; } break; - case DHCP_REQUEST: - // The request message has been sent, only accept an ack reply - if (*p == DHCP_MESS_TYPE_ACK) { - dhcpState = DHCP_ACK; + + case DHCP_WAITING_FOR_ACK: + if (type == (expected = DHCP_MESS_TYPE_ACK)) { + save_packet(b, len); + parseConfig(b, len); + NewDhcpState(DHCP_DONE); return; - } else { - expected = DHCP_MESS_TYPE_ACK; } break; - case DHCP_NONE: - case DHCP_OFFER: - case DHCP_ACK: - // Quitely ignore these - they indicate repeated message from server + + default: + debug_printf("DHCP packet ignored\n"); return; } - // See if we've been NAK'd - if so, give up and try again - if (*p == DHCP_MESS_TYPE_NAK) { - dhcpState = DHCP_NONE; + + if (type == DHCP_MESS_TYPE_NAK && dhcpState != DHCP_DONE) { + NewDhcpState(DHCP_FAILED); return; } - diag_printf("DHCP reply: %d, not %d\n", (int)*p, (int)expected); - return; -#else - // Simple BOOTP - this is all there is! - memcpy(__local_ip_addr, &b->bp_yiaddr, 4); + + debug_printf("DHCP packet ignored -- expected %d[%s]\n", expected, dhcpTypeString[expected]); #endif } -#define AddOption(p,d) do {memcpy(p,d,sizeof d); p += sizeof d;} while (0) -/* - * Find our IP address and copy to __local_ip_addr. - * Return zero if successful, -1 if not. - */ +// Request IP configuration via BOOTP/DHCP. +// Return zero if successful, -1 if not. + int __bootp_find_local_ip(bootp_header_t *info) { - udp_socket_t udp_skt; - bootp_header_t b; - ip_route_t r; - int retry; - unsigned long start; - ip_addr_t saved_ip_addr; -#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - unsigned char *p; - int oldState; -#endif - int txSize; - bool abort = false; - static int xid = SHOULD_BE_RANDOM; + udp_socket_t udp_skt; + int retry; + unsigned long start; + ip_addr_t saved_ip_addr; -#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - dhcpState = DHCP_NONE; -#endif + bp_info = info; + + diag_printf("\nRequesting IP conf via BOOTP/DHCP...\n"); - // Where we want the results saved - bp_info = info; - // Preserve any IP address we currently have, just in case - memcpy(saved_ip_addr, __local_ip_addr, sizeof(__local_ip_addr)); + memcpy(&xid, __local_enet_addr, sizeof xid); + xid ^= (__local_enet_addr[4]<<16) + __local_enet_addr[5]; + xid ^= (unsigned)&retry + (unsigned)&__bootp_find_local_ip; - // fill out route for a broadcast - r.ip_addr[0] = 255; - r.ip_addr[1] = 255; - r.ip_addr[2] = 255; - r.ip_addr[3] = 255; - r.enet_addr[0] = 255; - r.enet_addr[1] = 255; - r.enet_addr[2] = 255; - r.enet_addr[3] = 255; - r.enet_addr[4] = 255; - r.enet_addr[5] = 255; + debug_printf("XID: %08x\n",xid); - // setup a socket listener for bootp replies + memcpy(saved_ip_addr, __local_ip_addr, sizeof __local_ip_addr); // save our IP in case of failure + + NewDhcpState(DHCP_NONE); + __udp_install_listener(&udp_skt, IPPORT_BOOTPC, bootp_handler); - retry = MAX_RETRIES; - do { - start = MS_TICKS(); + retry = MAX_RETRIES; - // Build up the BOOTP/DHCP request - memset(&b, 0, sizeof(b)); - b.bp_op = BOOTREQUEST; - b.bp_htype = HTYPE_ETHERNET; - b.bp_hlen = 6; - b.bp_xid = xid++; - memcpy(b.bp_chaddr, __local_enet_addr, 6); + while (retry > 0) { + start = MS_TICKS(); memset(__local_ip_addr, 0, sizeof(__local_ip_addr)); - -#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - p = b.bp_vend; - switch (dhcpState) { - case DHCP_NONE: - case DHCP_DISCOVER: - AddOption(p,dhcpCookie); - AddOption(p,dhcpDiscover); - AddOption(p,dhcpParamRequestList); - AddOption(p,dhcpEnd); - dhcpState = DHCP_DISCOVER; - break; - case DHCP_OFFER: - retry = MAX_RETRIES; - case DHCP_REQUEST: - b.bp_xid = bp_info->bp_xid; // Match what server sent - AddOption(p,dhcpCookie); - AddOption(p,dhcpRequest); - AddOption(p,dhcpRequestIP); - memcpy(p, &bp_info->bp_yiaddr, 4); p += 4; // Ask for the address just given - AddOption(p,dhcpParamRequestList); - AddOption(p,dhcpEnd); - dhcpState = DHCP_REQUEST; - memset(&b.bp_yiaddr, 0xFF, 4); - memset(&b.bp_siaddr, 0xFF, 4); - memset(&b.bp_yiaddr, 0x00, 4); - memset(&b.bp_siaddr, 0x00, 4); - break; - case DHCP_ACK: - // Ignore these states (they won't happen) - break; - } - - // Some servers insist on a minimum amount of "vendor" data - if (p < &b.bp_vend[BP_MIN_VEND_SIZE]) p = &b.bp_vend[BP_MIN_VEND_SIZE]; - txSize = p - (unsigned char*)&b; - oldState = dhcpState; -#else - txSize = sizeof(b); -#endif - __udp_send((char *)&b, txSize, &r, IPPORT_BOOTPS, IPPORT_BOOTPC); - - // If we're retrying, inform the user - if (retry == (MAX_RETRIES-1)) - diag_printf("... waiting for BOOTP information\n"); + // send bootp REQUEST or dhcp DISCOVER + bootp_start(); - do { - __enet_poll(); -#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP - if (dhcpState != oldState) { - if (dhcpState == DHCP_ACK) { - unsigned char *end; - int optlen; - // Address information has now arrived! - memcpy(__local_ip_addr, &bp_info->bp_yiaddr, 4); -#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY - memcpy(__local_ip_gate, &bp_info->bp_giaddr, 4); -#endif - p = bp_info->bp_vend+4; - end = (unsigned char *)bp_info+sizeof(*bp_info); - while (p < end) { - unsigned char tag = *p; - if (tag == TAG_END) - break; - if (tag == TAG_PAD) - optlen = 1; - else { - optlen = p[1]; - p += 2; - switch (tag) { -#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY - case TAG_SUBNET_MASK: // subnet mask - memcpy(__local_ip_mask,p,4); - break; - case TAG_GATEWAY: // router - memcpy(__local_ip_gate,p,4); - break; -#endif -#ifdef CYGPKG_REDBOOT_NETWORKING_DNS - case TAG_DOMAIN_SERVER: -// diag_printf(" DNS server found!\n"); - memcpy(&__bootp_dns_addr, p, 4); - __bootp_dns_set = 1; - break; -#ifdef CYGPKG_REDBOOT_NETWORKING_DNS_DHCP_DOMAIN - case TAG_DOMAIN_NAME: - if(optlen < sizeof(__bootp_dns_domain)) { - memcpy(__bootp_dns_domain, p, optlen); - __bootp_dns_domain[optlen] = '\0'; - __bootp_dns_domain_set = 1; - } else { - diag_printf("DNS domain name too long\n"); - } - break; -#endif //CYGPKG_REDBOOT_NETWORKING_DNS_DHCP_DOMAIN -#endif //CYGPKG_REDBOOT_NETWORKING_DNS - default: - break; - } - } - p += optlen; - } - __udp_remove_listener(IPPORT_BOOTPC); - return 0; - } else { - break; // State changed, handle it - } - } -#else - // All done, if address response has arrived - if (__local_ip_addr[0] || __local_ip_addr[1] || - __local_ip_addr[2] || __local_ip_addr[3]) { - /* success */ - __udp_remove_listener(IPPORT_BOOTPC); - return 0; - } -#endif - if (_rb_break(1)) { - // The user typed ^C on the console - abort = true; + // wait for timeout, user-abort, or for receive packet handler to fail/succeed + while ((MS_TICKS_DELAY() - start) < RETRY_TIME_MS) { + __enet_poll(); + if (dhcpState == DHCP_FAILED) break; - } - MS_TICKS_DELAY(); // Count for ^C test - } while ((MS_TICKS_DELAY() - start) < RETRY_TIME); - } while (!abort && (retry-- > 0)); + if (dhcpState == DHCP_DONE) + goto done; + if (_rb_break(1)) // did user hit ^C? + goto failed; + MS_TICKS_DELAY(); + } + --retry; + ++xid; + diag_printf("TIMEOUT%s\n", retry ? ", retrying..." : ""); + } - // timed out +failed: + diag_printf("FAIL\n"); __udp_remove_listener(IPPORT_BOOTPC); - // Restore any previous IP address - memcpy(__local_ip_addr, saved_ip_addr, sizeof(__local_ip_addr)); + memcpy(__local_ip_addr, saved_ip_addr, sizeof __local_ip_addr); // restore prev IP return -1; + +done: + diag_printf("OK\n"); + __udp_remove_listener(IPPORT_BOOTPC); + return 0; } - - diff --git a/packages/redboot/current/src/net/net_io.c b/packages/redboot/current/src/net/net_io.c --- a/packages/redboot/current/src/net/net_io.c +++ b/packages/redboot/current/src/net/net_io.c @@ -59,6 +59,10 @@ #include #include // assertion macros +#ifndef CYGSEM_REDBOOT_DEFAULT_NO_BOOTP +#define CYGSEM_REDBOOT_DEFAULT_NO_BOOTP 0 +#endif + #ifdef CYGSEM_REDBOOT_FLASH_CONFIG #include @@ -90,15 +94,14 @@ RedBoot_config_option("Default network d // negated (if false, the others apply) which makes the names even more // confusing. -#ifndef CYGSEM_REDBOOT_DEFAULT_NO_BOOTP -#define CYGSEM_REDBOOT_DEFAULT_NO_BOOTP 0 -#endif +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP RedBoot_config_option("Use BOOTP for network configuration", bootp, ALWAYS_ENABLED, true, CONFIG_BOOL, !CYGSEM_REDBOOT_DEFAULT_NO_BOOTP ); +#endif RedBoot_config_option("Local IP address", bootp_my_ip, "bootp", false, @@ -689,10 +692,10 @@ net_init(void) #endif // Set defaults as appropriate -#ifdef CYGSEM_REDBOOT_DEFAULT_NO_BOOTP +#if defined(CYGPKG_REDBOOT_NETWORKING_BOOTP) && !CYGSEM_REDBOOT_DEFAULT_NO_BOOTP + use_bootp = true; +#else use_bootp = false; -#else - use_bootp = true; #endif #ifdef CYGDBG_REDBOOT_NET_DEBUG net_debug = true; @@ -707,7 +710,9 @@ net_init(void) #endif flash_get_config("net_debug", &net_debug, CONFIG_BOOL); flash_get_config("gdb_port", &gdb_port, CONFIG_INT); +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP flash_get_config("bootp", &use_bootp, CONFIG_BOOL); +#endif if (!use_bootp) { flash_get_IP("bootp_my_ip", &__local_ip_addr); #ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY @@ -767,6 +772,7 @@ net_init(void) return; } // Initialize the network [if present] +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP if (use_bootp) { if (__bootp_find_local_ip(&my_bootp_info) == 0) { have_net = true; @@ -781,7 +787,9 @@ net_init(void) have_net = true; } } - } else { + } +#endif + if (!use_bootp) { if (__local_ip_addr[0] == 0 && __local_ip_addr[1] == 0 && __local_ip_addr[2] == 0 && __local_ip_addr[3] == 0) { show_eth_info(); @@ -813,7 +821,11 @@ net_init(void) } } -static char usage[] = "[-b] [-l [/]] [-h ]" +static char usage[] = "" +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP + " [-b]" +#endif + " [-l [/]] [-h ]" #ifdef CYGPKG_REDBOOT_NETWORKING_DNS " [-d ]" #ifdef CYGPKG_REDBOOT_NETWORKING_DNS_FCONFIG_DOMAIN @@ -836,7 +848,9 @@ do_ip_addr(int argc, char *argv[]) struct option_info opts[5]; char *ip_addr, *host_addr; bool ip_addr_set, host_addr_set; +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP bool do_bootp = false; +#endif struct sockaddr_in host; #ifdef CYGPKG_REDBOOT_NETWORKING_DNS char *dns_addr; @@ -857,9 +871,12 @@ do_ip_addr(int argc, char *argv[]) (void *)&ip_addr, (bool *)&ip_addr_set, "local IP address"); init_opts(&opts[1], 'h', true, OPTION_ARG_TYPE_STR, (void *)&host_addr, (bool *)&host_addr_set, "default server address"); + num_opts = 2; +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP init_opts(&opts[2], 'b', false, OPTION_ARG_TYPE_FLG, &do_bootp, 0, "use BOOTP"); - num_opts = 3; + num_opts++; +#endif #ifdef CYGPKG_REDBOOT_NETWORKING_DNS init_opts(&opts[num_opts], 'd', true, OPTION_ARG_TYPE_STR, (void *)&dns_addr, (bool *)&dns_addr_set, "DNS server address"); @@ -875,11 +892,13 @@ do_ip_addr(int argc, char *argv[]) if (!scan_opts(argc, argv, 1, opts, num_opts, 0, 0, "")) { return; } +#ifdef CYGPKG_REDBOOT_NETWORKING_BOOTP if (do_bootp) { if (__bootp_find_local_ip(&my_bootp_info) != 0) { diag_printf("Failed to get BOOTP address\n"); } } +#endif if (ip_addr_set) { #ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY char *slash_pos; diff --git a/packages/services/curses/pdcurses/current/ChangeLog b/packages/services/curses/pdcurses/current/ChangeLog --- a/packages/services/curses/pdcurses/current/ChangeLog +++ b/packages/services/curses/pdcurses/current/ChangeLog @@ -1,3 +1,14 @@ +2012-03-26 Sergei Gavrikov + + * examples/*: Removed an odd skeleton of PDcurses application. + NOTE: PDCurses is not thread-safe. [ Bugilla 1001544 ] + +2012-03-24 Sergei Gavrikov + + * src/drivers/serial.c (PDC_check_key): Refactored to fix new compiler + warnings (dereferencing type-punned pointer will break strict-aliasing + rules). + 2009-03-26 Sergei Gavrikov * cdl/pdcurses.cdl: diff --git a/packages/services/curses/pdcurses/current/examples/Makefile b/packages/services/curses/pdcurses/current/examples/Makefile deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# -# Makefile for PDCurses eCos Application -# - -.PHONY: all clean - -# Platform specific setups -include Make.params - -# Simple build rules - -%.o: %.c - $(CC) -c $*.c $(ACTUAL_CFLAGS) -I$(PREFIX)/include -o $@ - -# PDCurses CFLAGS -ACTUAL_CFLAGS := $(subst , -D__ECOS__,$(ACTUAL_CFLAGS)) -ACTUAL_CFLAGS := $(subst , -D_LP64=0,$(ACTUAL_CFLAGS)) - -OBJS = pdcecos_app.o pdcecos_init.o pdcecos_thread.o -DST = pdcecos_app - -all: ${DST} - -clean: - -rm -f ${DST} ${OBJS} - -${DST}: ${OBJS} - $(CC) $(ACTUAL_LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ $^ - diff --git a/packages/services/curses/pdcurses/current/examples/README b/packages/services/curses/pdcurses/current/examples/README deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/README +++ /dev/null @@ -1,65 +0,0 @@ -* PDCurses + eCos Application - --------------------------- - -It is possible to run a curses program in a separate eCos thread. Look -at the pdcecos_app.h, pdcecos_app.c, pdcecos_init.c, pdcecos_thread.c -sources for details. - -As you can see you should put own curses code inside a pdcecos_main() -function instead of traditional main() entry. In such a build you have -to link your executable with a pdcecos_app.o object file, and a curses -program must look as - - #include - ... - - int - pdcecos_main(int argc, char *argv[]) - { - initscr(); - ... - } - -The pdcecos_app.c has cyg_user_start() entry where a startup_thread() -creates and resumes itself there. The startup_tread() creates and -invokes a set of threads are defined in a __PDC_APP_TAB__. By default -only alone thread is registered in the table, it is pdcecos_thread(), -but you can expand the table. When the pdcecos_thread() is started, it -invokes the pdcecos_main() function -- your curses program. - -The "PDCECOS" thread uses a separate stack as well, you can change its -size by default is ( CYGNUM_HAL_STACK_SIZE_TYPICAL * 2 ). - -To build a PDCurses+eCos demo application, first generate a Make.params -file using the build_Make.params script which is placed under the eCos -`examples' directory and then just type 'make'. - -There is an example of running the pdcecos_app demo in GDB the below. As -you can see the "PDCECOS" thread starts and invokes pdcecos_main() then. - - (gdb) break pdcecos_main - Breakpoint 1 at 0x100111b: pdcecos_thread.c, line 93. - (gdb) continue - Starting program: pdcecos_app - SYSTEM INITIALIZATION in progress - data index = 4 - Creating system threads - Creating PDCECOS thread - Starting threads - Starting PDCECOS - SYSTEM THREADS STARTED! - - Breakpoint 1, pdcecos_main (argc=0, argv=0x0) - at pdcecos_thread.c:93 - 88 initscr(); - Current language: auto; currently c - (gdb) continue - -Then you should see a message - - Hello PDCurses+eCos World! - -in a terminal program (minicom, hyperterm, etc.). - - ------------------------------------------------------------------------- diff --git a/packages/services/curses/pdcurses/current/examples/pdcecos_app.c b/packages/services/curses/pdcurses/current/examples/pdcecos_app.c deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/pdcecos_app.c +++ /dev/null @@ -1,170 +0,0 @@ -// ========================================================================== -// -// pdcecos_app.c -// -// Public Domain Curses for eCos -// -// =========================================================================== -// ####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2009 Free Software Foundation, Inc. -// -// eCos is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 or (at your option) any later -// version. -// -// eCos 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 General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License -// along with eCos; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// As a special exception, if other files instantiate templates or use -// macros or inline functions from this file, or you compile this file -// and link it with other works to produce a work based on this file, -// this file does not by itself cause the resulting work to be covered by -// the GNU General Public License. However the source code for this file -// must still be made available in accordance with section (3) of the GNU -// General Public License v2. -// -// This exception does not invalidate any other reasons why a work based -// on this file might be covered by the GNU General Public License. -// ------------------------------------------- -// ####ECOSGPLCOPYRIGHTEND#### -// =========================================================================== -// =========================================================================== -// #####DESCRIPTIONBEGIN#### -// -// Author(s): Sergei Gavrikov -// Contributors: Sergei Gavrikov -// Date: 2009-03-26 -// Purpose: Early startup for PDCurses stuff -// Description: -// -// ####DESCRIPTIONEND#### -// -// ========================================================================*/ - -// --------------------------------------------------------------------------- -// CONFIGURATION CHECKS -// - -#include // which packages are enabled/disabled -#ifdef CYGPKG_KERNEL -# include -#endif -#ifdef CYGPKG_LIBC -# include -#endif -#ifdef CYGPKG_IO_SERIAL -# include -#endif -#ifdef CYGPKG_FS_JFFS2 -# include -#define USE_JFFS2 -#endif - -#ifndef CYGFUN_KERNEL_API_C -# error Kernel API must be enabled to build this application -#endif - -#ifndef CYGPKG_LIBC_STDIO -# error C library standard I/O must be enabled to build this application -#endif - -#ifndef CYGPKG_IO_SERIAL_HALDIAG -# error I/O HALDIAG pseudo-device driver must be enabled to build this application -#endif - -#include - -// --------------------------------------------------------------------------- -// INCLUDES -// - -#include // printf -#include // printf - -#include // All the kernel specific stuff -#include // CYGNUM_HAL_STACK_SIZE_TYPICAL - -#include "pdcecos_app.h" - -// Define table boundaries -CYG_HAL_TABLE_BEGIN(__PDC_APP_TAB__, _pdc_apps); -CYG_HAL_TABLE_END(__PDC_APP_TAB_END__, _pdc_apps); -extern struct _pdc_app_entry __PDC_APP_TAB__[], - __PDC_APP_TAB_END__; - -// --------------------------------------------------------------------------- -// PDCurses startup thread. -// -static char startup_stack[STACKSIZE]; -cyg_handle_t startup_thread; -cyg_thread startup_thread_obj; - -static void -startup(CYG_ADDRESS data) -{ - cyg_ucount32 pdc_data_index; - struct _pdc_app_entry *pdc; - - printf("SYSTEM INITIALIZATION in progress\n"); - -#ifdef USE_JFFS2 - { - int res; - printf("... Mounting JFFS2 on \"/\"\n"); - res = mount(CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/", "jffs2"); - if (res < 0) { - printf("Mount \"/\" failed - res: %d\n", res); - } - chdir("/"); - } -#endif - - pdc_data_index = cyg_thread_new_data_index(); - printf("data index = %d\n", pdc_data_index); - - printf("Creating system threads\n"); - for (pdc = __PDC_APP_TAB__; pdc != &__PDC_APP_TAB_END__; pdc++) { - printf("Creating %s thread\n", pdc->name); - cyg_thread_create(pdc->prio, - pdc->entry, - (cyg_addrword_t) pdc_data_index, - pdc->name, - (void *) pdc->stack, STACKSIZE, - &pdc->t, &pdc->t_obj); - } - printf("Starting threads\n"); - for (pdc = __PDC_APP_TAB__; pdc != &__PDC_APP_TAB_END__; pdc++) { - printf("Starting %s\n", pdc->name); - cyg_thread_resume(pdc->t); - if (pdc->init) { - (pdc->init) (pdc_data_index); - } - } - - printf("SYSTEM THREADS STARTED!\n"); -} - -void -cyg_user_start(void) -{ - // Create the initial thread and start it up - cyg_thread_create(PDC_ECOS_STARTUP_PRIORITY, - startup, - (cyg_addrword_t) 0, - "System startup", - (void *) startup_stack, STACKSIZE, - &startup_thread, &startup_thread_obj); - cyg_thread_resume(startup_thread); -} - -// --------------------------------------------------------------------------- -// EOF pdcecos_app.c diff --git a/packages/services/curses/pdcurses/current/examples/pdcecos_app.h b/packages/services/curses/pdcurses/current/examples/pdcecos_app.h deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/pdcecos_app.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef CYGONCE_PDCECOS_APP_H -#define CYGONCE_PDCECOS_APP_H -// ========================================================================== -// -// pdcecos_app.h -// -// Public Domain Curses for eCos -// -// =========================================================================== -// ####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2009 Free Software Foundation, Inc. -// -// eCos is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 or (at your option) any later -// version. -// -// eCos 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 General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License -// along with eCos; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// As a special exception, if other files instantiate templates or use -// macros or inline functions from this file, or you compile this file -// and link it with other works to produce a work based on this file, -// this file does not by itself cause the resulting work to be covered by -// the GNU General Public License. However the source code for this file -// must still be made available in accordance with section (3) of the GNU -// General Public License v2. -// -// This exception does not invalidate any other reasons why a work based -// on this file might be covered by the GNU General Public License. -// ------------------------------------------- -// ####ECOSGPLCOPYRIGHTEND#### -// =========================================================================== -// =========================================================================== -// #####DESCRIPTIONBEGIN#### -// -// Author(s): Sergei Gavrikov -// Contributors: Sergei Gavrikov -// Date: 2009-03-26 -// Purpose: Definitions for PDCECOS thread -// Description: -// Usage: #include "pdcecos_app.h" -// -// ####DESCRIPTIONEND#### -// -// ========================================================================*/ - -#include -#include -#include -#include // CYGNUM_HAL_STACK_SIZE_TYPICAL - -#include - -#define STACKSIZE ( CYGNUM_HAL_STACK_SIZE_TYPICAL * 2 ) - -typedef void fun(CYG_ADDRWORD); -struct _pdc_app_entry { - char *name; - fun *entry; - int prio; - fun *init; - cyg_handle_t t; - cyg_thread t_obj; - char stack[STACKSIZE]; -} CYG_HAL_TABLE_TYPE; - -#define _pdc_app(_name_,_id_,_pri_,_init_) \ -externC void _id_##_thread(CYG_ADDRWORD data); \ -struct _pdc_app_entry _pdc_app_##_pri_##_##_id_ \ - CYG_HAL_TABLE_QUALIFIED_ENTRY(_pdc_apps,_pri_) = \ - { _name_, _id_##_thread, _pri_, _init_}; - - -#define INIT_PER_THREAD_DATA() - -#define PDC_ECOS_STARTUP_PRIORITY 11 -#define PDC_ECOS_CORE_PRIORITY (PDC_ECOS_STARTUP_PRIORITY+3) - -int -pdcecos_main(int argc, char **argv) - CYGBLD_ATTRIB_WEAK; -#endif - -// --------------------------------------------------------------------- -// EOF pdcecos_app.h diff --git a/packages/services/curses/pdcurses/current/examples/pdcecos_init.c b/packages/services/curses/pdcurses/current/examples/pdcecos_init.c deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/pdcecos_init.c +++ /dev/null @@ -1,66 +0,0 @@ -// ========================================================================== -// -// pdcecos_init.c -// -// Public Domain Curses for eCos -// -// =========================================================================== -// ####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2009 Free Software Foundation, Inc. -// -// eCos is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 or (at your option) any later -// version. -// -// eCos 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 General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License -// along with eCos; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// As a special exception, if other files instantiate templates or use -// macros or inline functions from this file, or you compile this file -// and link it with other works to produce a work based on this file, -// this file does not by itself cause the resulting work to be covered by -// the GNU General Public License. However the source code for this file -// must still be made available in accordance with section (3) of the GNU -// General Public License v2. -// -// This exception does not invalidate any other reasons why a work based -// on this file might be covered by the GNU General Public License. -// ------------------------------------------- -// ####ECOSGPLCOPYRIGHTEND#### -// =========================================================================== -// =========================================================================== -// #####DESCRIPTIONBEGIN#### -// -// Author(s): Sergei Gavrikov -// Contributors: Sergei Gavrikov -// Date: 2009-03-26 -// Purpose: -// Description: -// -// ####DESCRIPTIONEND#### -// -// ========================================================================*/ - -#include - -// --------------------------------------------------------------------------- -// pdcecos_init -- -// -void -pdcecos_init(CYG_ADDRWORD data) -{ - // Currently, it does nothing. - CYG_UNUSED_PARAM(CYG_ADDRWORD, data); -} - -// --------------------------------------------------------------------------- -// EOF pdcecos_init.c diff --git a/packages/services/curses/pdcurses/current/examples/pdcecos_thread.c b/packages/services/curses/pdcurses/current/examples/pdcecos_thread.c deleted file mode 100644 --- a/packages/services/curses/pdcurses/current/examples/pdcecos_thread.c +++ /dev/null @@ -1,129 +0,0 @@ -// ========================================================================== -// -// pdcecos_thread.c -// -// Public Domain Curses for eCos -// -// =========================================================================== -// ####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2009 Free Software Foundation, Inc. -// -// eCos is free software; you can redistribute it and/or modify it under -// the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 or (at your option) any later -// version. -// -// eCos 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 General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License -// along with eCos; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// As a special exception, if other files instantiate templates or use -// macros or inline functions from this file, or you compile this file -// and link it with other works to produce a work based on this file, -// this file does not by itself cause the resulting work to be covered by -// the GNU General Public License. However the source code for this file -// must still be made available in accordance with section (3) of the GNU -// General Public License v2. -// -// This exception does not invalidate any other reasons why a work based -// on this file might be covered by the GNU General Public License. -// ------------------------------------------- -// ####ECOSGPLCOPYRIGHTEND#### -// =========================================================================== -// =========================================================================== -// #####DESCRIPTIONBEGIN#### -// -// Author(s): Sergei Gavrikov -// Contributors: Sergei Gavrikov -// Date: 2009-03-26 -// Purpose: Used to run PDCurses program as eCos thread. -// Description: -// -// ####DESCRIPTIONEND#### -// -// ========================================================================*/ - -#include // which packages are enabled/disabled -#ifdef CYGPKG_KERNEL -# include -#endif -#ifdef CYGPKG_LIBC -# include -#endif -#ifdef CYGPKG_IO_SERIAL -# include -#endif - -#ifndef CYGFUN_KERNEL_API_C -# error Kernel API must be enabled to build this application -#endif - -#ifndef CYGPKG_LIBC_STDIO -# error C library standard I/O must be enabled to build this application -#endif - -#ifndef CYGPKG_IO_SERIAL_HALDIAG -# error I/O HALDIAG pseudo-device driver must be enabled to build this application -#endif - -// -------------------------------------------------------------------------- -// INCLUDES -// - -#include // All the kernel specific stuff -#include - -#include -#include - -#include "pdcecos_app.h" - -extern void pdcecos_init(CYG_ADDRWORD data); -_pdc_app("PDCECOS", pdcecos, PDC_ECOS_CORE_PRIORITY, pdcecos_init); - -// -------------------------------------------------------------------------- -// Component interfaces -// - -// -------------------------------------------------------------------------- -// pdcecos_main -- -// -// Note: the pdcecos_main() is declared as a weaked function, Look at the -// "pdcecos_app.h". So, you can have own one in a user space. -int -pdcecos_main(int argc, char **argv) -{ - initscr(); - printw("Hello PDCurses+eCos World!"); - refresh(); - getch(); - endwin(); - - return 0; -} - -// -------------------------------------------------------------------------- -// pdcecos_thread -- -// -void -pdcecos_thread(CYG_ADDRWORD data) -{ - int argc = 0; - char **argv = NULL; - - CYG_UNUSED_PARAM(CYG_ADDRWORD, data); - - INIT_PER_THREAD_DATA(); - - pdcecos_main(argc, argv); -} - -// --------------------------------------------------------------------------- -// EOF pdcecos_thread.c diff --git a/packages/services/curses/pdcurses/current/src/drivers/serial.c b/packages/services/curses/pdcurses/current/src/drivers/serial.c --- a/packages/services/curses/pdcurses/current/src/drivers/serial.c +++ b/packages/services/curses/pdcurses/current/src/drivers/serial.c @@ -293,15 +293,18 @@ PDC_get_rows(void) // --------------------------------------------------------------------------- static int key_code = ERR; -static unsigned char keystroke[4] = { '\0', '\0', '\0', '\0' }; +static union { + cyg_uint32 key; + cyg_uint8 seq[4]; +} kk = {0}; -#define _FLSH_KEY() *(unsigned int *) &keystroke[0] = 0; +#define SYM kk.seq +#define FLUSH() kk.key=0 + #if (CYG_BYTEORDER == CYG_LSBFIRST) -// Little endian -# define _UNGET_KEY(_n_) *(unsigned int *) &keystroke[0] >>= 8*(_n_) -#elif (CYG_BYTEORDER == CYG_MSBFIRST) -// Big endian -# define _UNGET_KEY(_n_) *(unsigned int *) &keystroke[0] <<= 8*(_n_) +# define POP(x) kk.key>>=8*(x) +#else +# define POP(x) kk.key<<=8*(x) #endif bool @@ -319,73 +322,73 @@ PDC_check_key(void) return (dev_buf_conf.rx_count > 0); #else if ((count = dev_buf_conf.rx_count) > 0) { - if (keystroke[0] == '\0') { + if (SYM[0] == '\0') { count = min(count, 4); - cyg_io_read(handle, &keystroke[0], &count); - } else if (keystroke[1] == '\0') { + cyg_io_read(handle, &SYM[0], &count); + } else if (SYM[1] == '\0') { count = min(count, 3); - cyg_io_read(handle, &keystroke[1], &count); - } else if (keystroke[2] == '\0') { + cyg_io_read(handle, &SYM[1], &count); + } else if (SYM[2] == '\0') { count = min(count, 2); - cyg_io_read(handle, &keystroke[2], &count); - } else if (keystroke[3] == '\0') { + cyg_io_read(handle, &SYM[2], &count); + } else if (SYM[3] == '\0') { count = min(count, 1); - cyg_io_read(handle, &keystroke[3], &count); + cyg_io_read(handle, &SYM[3], &count); } } - if (keystroke[0] == '\0') + if (SYM[0] == '\0') return FALSE; - switch (keystroke[0]) { + switch (SYM[0]) { case '\x1b': - switch (keystroke[1]) { + switch (SYM[1]) { case '[': - switch (keystroke[2]) { + switch (SYM[2]) { // ^[[A -- KEY_UP case 'A': key_code = KEY_UP; - _UNGET_KEY(3); + POP(3); return TRUE; // ^[[B -- KEY_DOWN case 'B': key_code = KEY_DOWN; - _UNGET_KEY(3); + POP(3); return TRUE; // ^[[C -- KEY_RIGHT case 'C': key_code = KEY_RIGHT; - _UNGET_KEY(3); + POP(3); return TRUE; // ^[[D -- KEY_LEFT case 'D': key_code = KEY_LEFT; - _UNGET_KEY(3); + POP(3); return TRUE; case '1': case '4': case '5': case '6': - switch (keystroke[3]) { + switch (SYM[3]) { case '~': - switch (keystroke[2]) { + switch (SYM[2]) { // ^[[1~ -- KEY_HOME case '1': key_code = KEY_HOME; - _FLSH_KEY(); + FLUSH(); return TRUE; // ^[[4~ -- KEY_END case '4': key_code = KEY_END; - _FLSH_KEY(); + FLUSH(); return TRUE; // ^[[5~ -- KEY_PPAGE case '5': key_code = KEY_PPAGE; - _FLSH_KEY(); + FLUSH(); return TRUE; // ^[[6~ -- KEY_NPAGE case '6': key_code = KEY_NPAGE; - _FLSH_KEY(); + FLUSH(); return TRUE; } default: @@ -395,16 +398,16 @@ PDC_check_key(void) break; } case 'O': - switch (keystroke[2]) { + switch (SYM[2]) { // ^[OF -- KEY_END case 'F': key_code = KEY_END; - _UNGET_KEY(3); + POP(3); return TRUE; // ^[OH -- KEY_HOME case 'H': key_code = KEY_HOME; - _UNGET_KEY(3); + POP(3); return TRUE; default: break; @@ -415,8 +418,8 @@ PDC_check_key(void) default: break; } - key_code = keystroke[0]; - _UNGET_KEY(1); + key_code = SYM[0]; + POP(1); return TRUE; #endif // ENABLE_KEYPAD } @@ -435,7 +438,7 @@ PDC_flushinp(void) cyg_io_get_config(handle, CYG_IO_GET_CONFIG_SERIAL_INPUT_FLUSH, NULL, NULL); #ifdef ENABLE_KEYPAD - _FLSH_KEY(); + FLUSH(); #endif } diff --git a/packages/services/memalloc/common/current/ChangeLog b/packages/services/memalloc/common/current/ChangeLog --- a/packages/services/memalloc/common/current/ChangeLog +++ b/packages/services/memalloc/common/current/ChangeLog @@ -1,3 +1,15 @@ +2012-06-07 Bernard Fouché + + * include/memjoin.inl: Fix compiler warning about variable that + is set but never referenced when CYG_ASSERT isn't used. + +2012-03-06 Grant Edwards + + * src/malloc.cxx (free): + * src/kapi.cxx (cyg_mempool_var_free, cyg_mempool_fix_free): Fix + compiler warnings about variables that are set but never + referenced. [ Bugzilla 1001511 ] + 2009-09-01 Bart Veer * src/heapgen.tcl (tcl_path): use the makefile's HOST instead of diff --git a/packages/services/memalloc/common/current/include/memjoin.inl b/packages/services/memalloc/common/current/include/memjoin.inl --- a/packages/services/memalloc/common/current/include/memjoin.inl +++ b/packages/services/memalloc/common/current/include/memjoin.inl @@ -149,7 +149,7 @@ Cyg_Mempool_Joined::~Cyg_Mempool_Join CYG_REPORT_FUNCTION(); CYG_REPORT_FUNCARGVOID(); - cyg_bool freestat; + cyg_bool freestat CYGBLD_ATTRIB_UNUSED; freestat = free( (cyg_uint8 *)pools, poolcount * sizeof(struct pooldesc) ); CYG_ASSERT( freestat, "free failed!"); diff --git a/packages/services/memalloc/common/current/src/kapi.cxx b/packages/services/memalloc/common/current/src/kapi.cxx --- a/packages/services/memalloc/common/current/src/kapi.cxx +++ b/packages/services/memalloc/common/current/src/kapi.cxx @@ -166,7 +166,7 @@ externC void *cyg_mempool_var_try_alloc( /* Frees memory back into variable size pool. */ externC void cyg_mempool_var_free(cyg_handle_t varpool, void *p) __THROW { - cyg_bool b; + cyg_bool b CYGBLD_ATTRIB_UNUSED; b = ((Cyg_Mempool_Variable *)varpool)->free((cyg_uint8 *)p, 0); CYG_ASSERT( b, "Bad free"); } @@ -267,7 +267,7 @@ externC void *cyg_mempool_fix_try_alloc( /* Frees memory back into fixed size pool. */ externC void cyg_mempool_fix_free(cyg_handle_t fixpool, void *p) __THROW { - cyg_bool b; + cyg_bool b CYGBLD_ATTRIB_UNUSED; b = ((Cyg_Mempool_Fixed *)fixpool)->free((cyg_uint8 *)p); CYG_ASSERT( b, "Bad free"); } diff --git a/packages/services/memalloc/common/current/src/malloc.cxx b/packages/services/memalloc/common/current/src/malloc.cxx --- a/packages/services/memalloc/common/current/src/malloc.cxx +++ b/packages/services/memalloc/common/current/src/malloc.cxx @@ -155,7 +155,7 @@ malloc( size_t size ) void free( void *ptr ) { - cyg_bool freeret; + cyg_bool freeret CYGBLD_ATTRIB_UNUSED; CYG_REPORT_FUNCNAME( "free"); diff --git a/packages/services/objloader/current/ChangeLog b/packages/services/objloader/current/ChangeLog --- a/packages/services/objloader/current/ChangeLog +++ b/packages/services/objloader/current/ChangeLog @@ -1,3 +1,8 @@ +2011-06-14 Sergei Gavrikov + + * src/objelf.c:cyg_ldr_relocate_section(): Conditional block did + shadow the return of error code. Fixed. + 2010-03-03 Stanislav Karpenko * include/objelf.h: Add missed entry to CYG_LDR_TABLE_KAPI_MUTEX diff --git a/packages/services/objloader/current/src/objelf.c b/packages/services/objloader/current/src/objelf.c --- a/packages/services/objloader/current/src/objelf.c +++ b/packages/services/objloader/current/src/objelf.c @@ -369,8 +369,8 @@ cyg_ldr_relocate_section(PELF_OBJECT p, #if CYGPKG_SERVICES_OBJLOADER_DEBUG_LEVEL > 1 diag_printf("Error while relocating symbol: %s\n", p_strtab + p_symtab[sym_index].st_name); +#endif return -1; -#endif } }