Advanced Micro Devices, Inc.
Software License Agreement

IMPORTANT—READ CAREFULLY: Do not install, copy or use the enclosed
software, documentation and/or materials until you have carefully read
and agreed to the following terms and conditions.  This is a legal
agreement (“Agreement”) between you (either an individual or an
entity) (“You”) and Advanced Micro Devices, Inc. (“AMD”).

If You do not agree to the terms of this Agreement, do not install,
copy or use this software, documentation or materials or any portion
thereof.  By loading or using the software provided herewith, which
may include associated install scripts and online or electronic
documentation, or materials or any portion thereof, that is made
available by AMD to download from any media (collectively “Software”),
You agree to all of the terms of this Agreement.

1. LICENSE:

  a. Subject to the terms and conditions of this Agreement, AMD grants
     You the following non-exclusive, non-transferable, royalty-free,
     limited copyright license to (i) download, copy and use the
     object code version of the Software and materials associated with
     this Agreement, including without limitation printed
     documentation, (collectively, “Materials”) for internal use only
     for support of AMD processors; and (ii) make and distribute
     copies of the Materials for use only with Your products that
     support AMD processors and in computer systems including AMD
     processors, provided that Licensee agrees to include all
     copyright legends and other legal notices that may appear in the
     Software.  Additionally, Licensee agrees that any distribution of
     the Materials to a third party, must include a software license
     agreement with terms and conditions that are at least as
     restrictive and protective of AMD’s intellectual property rights
     in the Materials as the terms and conditions set forth herein.
     Except for the limited license granted herein, Licensee shall
     have no other rights in the Materials, whether express, implied,
     arising by estoppel or otherwise.

  b. Except as expressly licensed herein, You do not have the right to
     (i) distribute, rent, lease, sell, sublicense, assign, or
     otherwise transfer the Materials, in whole or in part, to third
     parties for commercial or for non-commercial use; or (ii) modify,
     disassemble, reverse engineer, or decompile the Software, or
     otherwise reduce any part of the Software to any human readable
     form.

  c. AMD is under no obligation to support or provide maintenance for
     the Materials or to provide any updates or enhancements to You.

2. FEEDBACK:

   You may provide AMD feedback, suggestions or opinions as to the
   Software, its features, and desired enhancements or changes.  If
   You provide feedback, suggestions or opinions to AMD regarding any
   new features, use, functionality, or change to the Software or any
   materials related to the Software, You hereby agree to grant, and
   do grant, AMD all rights needed for AMD to incorporate and
   commercialize any new feature, use, functionality, or change at no
   charge or encumbrance to AMD. You agree that AMD may disclose such
   feedback, suggestions or opinions to any third party in any manner,
   and You agree that AMD has the ability to sublicense any of the
   foregoing rights in any feedback, suggestions or opinions or AMD
   products or services in any form to any third party without
   restriction.

3. OWNERSHIP AND COPYRIGHT OF MATERIALS:

   You agree that the Materials are owned by AMD and/or AMD’s
   licensors (if any), and are protected by United States and foreign
   intellectual property laws (e.g. patent and copyright laws) and
   international treaty provisions.  You will not remove the copyright
   notice from the Materials.  You agree to prevent any unauthorized
   copying of the Materials.  All title and copyrights in and to the
   Materials, all copies thereof (in whole or in part, and in any
   form), and all rights therein shall remain vested in AMD.  Except
   as expressly provided herein, AMD does not grant any express or
   implied right to You under AMD patents, copyrights, trademarks, or
   trade secret information and such rights are reserved to AMD and/or
   its licensors.

4. WARRANTY DISCLAIMER:

   THE MATERIALS ARE PROVIDED “AS IS” WITHOUT ANY EXPRESS OR IMPLIED
   WARRANTY OF ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY,
   NONINFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY, TITLE, OR
   FITNESS FOR ANY PARTICULAR PURPOSE, OR THOSE ARISING FROM CUSTOM OF
   TRADE OR COURSE OF USAGE.

   FOR CLARIFICATION, THE ENTIRE RISK ARISING OUT OF USE OR
   PERFORMANCE OF THE MATERIALS REMAINS WITH YOU.  AMD DOES NOT
   WARRANT, GUARANTEE, OR MAKE ANY REPRESENTATIONS AS TO THE
   CORRECTNESS, ACCURACY, COMPLETENESS, QUALITY, OR RELIABILITY OF THE
   MATERIALS.  AMD DOES NOT WARRANT THAT OPERATION OF THE MATERIALS
   WILL BE UNINTERRUPTED OR ERROR-FREE.  YOU ARE RESPONSIBLE FOR
   DETERMINING THE APPROPRIATENESS OF USING THE SOFTWARE AND ASSUME
   ALL RISKS ASSOCIATED WITH THE USE OF THE MATERIALS, INCLUDING BUT
   NOT LIMITED TO THE RISKS OF PROGRAM ERRORS, DAMAGE TO OR LOSS OF
   DATA, PROGRAMS OR EQUIPMENT, AND UNAVAILABILITY OR INTERRUPTION OF
   OPERATIONS.  Some jurisdictions do not allow for the exclusion or
   limitation of implied warranties, so the above limitations or
   exclusions may not apply to You.

5. LIMITATION OF LIABILITY:

   IN NO EVENT SHALL AMD OR ITS DIRECTORS, OFFICERS, EMPLOYEES AND
   AGENTS, ITS SUPPLIERS OR ITS LICENSORS BE LIABLE TO YOU OR ANY
   THIRD PARTIES IN RECEIPT OF THE MATERIALS UNDER ANY THEORY OF
   LIABILITY, WHETHER EQUITABLE, LEGAL OR COMMON LAW ACTION ARISING
   HEREUNDER FOR CONTRACT, STRICT LIABILITY, INDEMNITY, TORT
   (INCLUDING NEGLIGENCE), OR OTHERWISE FOR DAMAGES WHICH, IN THE
   AGGREGATE EXCEED TEN DOLLARS ($10.00).  IN NO EVENT SHALL AMD BE
   LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, PUNITIVE OR SPECIAL
   DAMAGES, INCLUDING, BUT NOT LIMITED TO LOSS OF PROFITS, BUSINESS
   INTERRUPTION, OR LOSS OF INFORMATION ARISING OUT OF THE USE OF OR
   INABILITY TO USE THE MATERIALS, EVEN IF AMD HAS BEEN ADVISED OF THE
   POSSIBILITY OF SUCH DAMAGES.  BY USING THE MATERIALS WITHOUT
   CHARGE, YOU ACCEPT THIS ALLOCATION OF RISK.  Because some
   jurisdictions prohibit the exclusion or limitation of liability for
   consequential or incidental damages, the above limitation may not
   apply to You.

6. EXPORT RESTRICTIONS:

   You shall adhere to all applicable U.S., European, and other export
   laws, including but not limited to the U.S. Export Administration
   Regulations (“EAR”), (15 C.F.R. Sections 730 through 774), and
   E.U. Council Regulation (EC) No 1334/2000 of 22 June 2000.
   Further, pursuant to Section 740.6 of the EAR, You hereby certify
   that, except pursuant to a license granted by the United States
   Department of Commerce Bureau of Industry and Security or as
   otherwise permitted pursuant to a License Exception under the EAR,
   You will not (1) export, re-export or release to a national of a
   country in Country Groups D:1, E:1 or E:2 any restricted
   technology, software, or source code it receives from AMD, or (2)
   export to Country Groups D:1, E:1 or E:2 the direct product of such
   technology or software, if such foreign produced direct product is
   subject to national security controls as identified on the Commerce
   Control List (currently found in Supplement 1 to Part 774 of
   EAR). For the most current Country Group listings, or for
   additional information about the EAR or Your obligations under
   those regulations, please refer to the U.S. Bureau of Industry and
   Security’s website at http://www.bis.doc.gov/.

7. U.S. GOVERNMENT RESTRICTED RIGHTS:

   The Materials are provided with “RESTRICTED RIGHTS.”  Use,
   duplication or disclosure by the Government is subject to
   restrictions as set forth in FAR52.227-14 and DFAR252.227-7013, et
   seq., or its successor.  Use of the Materials by the Government
   constitutes acknowledgment of AMD’s proprietary rights in them.

8. TERMINATION OF LICENSE:

   This Agreement will terminate immediately without notice from AMD
   or judicial resolution if You fail to comply with any provisions of
   this Agreement.  Upon termination of this Agreement, You must
   delete or destroy all copies of the Materials.

9. SURVIVAL:

   Sections 1(b)-(c), 2, 3, 4, 5, 6, 7, 9, 10, 11, 12 and 13 shall
   survive any expiration or termination of this Agreement.

10. APPLICABLE LAWS:

   Any claim arising under or relating to this Agreement shall be
   governed by and construed in accordance with the substantive laws
   of the State of California, without regard to principles of
   conflict of laws.  Each party hereto submits to the jurisdiction of
   the state and federal courts of Santa Clara County and the Northern
   District of California for the purposes of all legal proceedings
   arising out of or relating to this Agreement or the subject matter
   hereof.  Each party waives any objection which it may have to
   contest such forum.

11. SEVERABILITY:

   Should any term of this Agreement be declared void or unenforceable
   by any court of competent jurisdiction, such declaration shall have
   no effect on the remaining terms hereof.


12. NO WAIVER:

   The failure of either party to enforce any rights granted hereunder
   or to take action against the other party in the event of any
   breach hereunder shall not be deemed a waiver by that party as to
   subsequent enforcement of rights or subsequent actions in the event
   of future breaches.

13. ENTIRE AGREEMENT:

   This Agreement constitutes the entire agreement between the parties
   and supersedes any prior or contemporaneous oral or written
   agreements with respect to the subject matter of this Agreement.
