float.hh revision 5041
12SN/A/*
21762SN/A * Copyright (c) 2007 The Hewlett-Packard Development Company
32SN/A * All rights reserved.
42SN/A *
52SN/A * Redistribution and use of this software in source and binary forms,
62SN/A * with or without modification, are permitted provided that the
72SN/A * following conditions are met:
82SN/A *
92SN/A * The software must be used only for Non-Commercial Use which means any
102SN/A * use which is NOT directed to receiving any direct monetary
112SN/A * compensation for, or commercial advantage from such use.  Illustrative
122SN/A * examples of non-commercial use are academic research, personal study,
132SN/A * teaching, education and corporate research & development.
142SN/A * Illustrative examples of commercial use are distributing products for
152SN/A * commercial advantage and providing services using the software for
162SN/A * commercial advantage.
172SN/A *
182SN/A * If you wish to use this software or functionality therein that may be
192SN/A * covered by patents for commercial use, please contact:
202SN/A *     Director of Intellectual Property Licensing
212SN/A *     Office of Strategy and Technology
222SN/A *     Hewlett-Packard Company
232SN/A *     1501 Page Mill Road
242SN/A *     Palo Alto, California  94304
252SN/A *
262SN/A * Redistributions of source code must retain the above copyright notice,
272665Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer.  Redistributions
282665Ssaidi@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of
292665Ssaidi@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or
302665Ssaidi@eecs.umich.edu * other materials provided with the distribution.  Neither the name of
312SN/A * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
322SN/A * contributors may be used to endorse or promote products derived from
332623SN/A * this software without specific prior written permission.  No right of
342623SN/A * sublicense is granted herewith.  Derivatives of the software and
352SN/A * output created using the software may be prepared, but only for
364182Sgblack@eecs.umich.edu * Non-Commercial Uses.  Derivatives of the software may be shared with
371354SN/A * others provided: (i) the others agree to abide by the list of
381858SN/A * conditions herein which includes the Non-Commercial Use restrictions;
396658Snate@binkert.org * and (ii) such Derivatives of the software include the above copyright
401717SN/A * notice to acknowledge the contribution from this software where
412683Sktlim@umich.edu * applicable, this list of conditions and the disclaimer below.
421354SN/A *
431354SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
442387SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
452387SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
462387SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
4756SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
485348Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
492SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
502SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
511858SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
522SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
533453Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
543453Sgblack@eecs.umich.edu *
553453Sgblack@eecs.umich.edu * Authors: Gabe Black
563453Sgblack@eecs.umich.edu */
573453Sgblack@eecs.umich.edu
582462SN/A#ifndef __ARCH_X86_FLOATREGS_HH__
592SN/A#define __ARCH_X86_FLOATREGS_HH__
60715SN/A
61715SN/A#include "arch/x86/x86_traits.hh"
62715SN/A#include "base/bitunion.hh"
63715SN/A
642SN/Anamespace X86ISA
652SN/A{
664182Sgblack@eecs.umich.edu    enum FloatRegIndex
674182Sgblack@eecs.umich.edu    {
684182Sgblack@eecs.umich.edu        // MMX/X87 registers
694182Sgblack@eecs.umich.edu        FLOATREG_MMX_BASE,
702680Sktlim@umich.edu        FLOATREG_FPR_BASE = FLOATREG_MMX_BASE,
71237SN/A        FLOATREG_MMX0 = FLOATREG_MMX_BASE,
722SN/A        FLOATREG_MMX1,
732SN/A        FLOATREG_MMX2,
742SN/A        FLOATREG_MMX3,
752SN/A        FLOATREG_MMX4,
762SN/A        FLOATREG_MMX5,
775529Snate@binkert.org        FLOATREG_MMX6,
785529Snate@binkert.org        FLOATREG_MMX7,
792420SN/A
802623SN/A        FLOATREG_FPR0 = FLOATREG_FPR_BASE,
812SN/A        FLOATREG_FPR1,
822107SN/A        FLOATREG_FPR2,
832159SN/A        FLOATREG_FPR3,
842455SN/A        FLOATREG_FPR4,
852455SN/A        FLOATREG_FPR5,
862386SN/A        FLOATREG_FPR6,
872623SN/A        FLOATREG_FPR7,
882SN/A
891371SN/A        FLOATREG_XMM_BASE = FLOATREG_MMX_BASE + NumMMXRegs,
905348Ssaidi@eecs.umich.edu        FLOATREG_XMM0_LOW = FLOATREG_XMM_BASE,
915348Ssaidi@eecs.umich.edu        FLOATREG_XMM0_HIGH,
925348Ssaidi@eecs.umich.edu        FLOATREG_XMM1_LOW,
935348Ssaidi@eecs.umich.edu        FLOATREG_XMM1_HIGH,
945348Ssaidi@eecs.umich.edu        FLOATREG_XMM2_LOW,
955348Ssaidi@eecs.umich.edu        FLOATREG_XMM2_HIGH,
965348Ssaidi@eecs.umich.edu        FLOATREG_XMM3_LOW,
975348Ssaidi@eecs.umich.edu        FLOATREG_XMM3_HIGH,
982SN/A        FLOATREG_XMM4_LOW,
995807Snate@binkert.org        FLOATREG_XMM4_HIGH,
1002SN/A        FLOATREG_XMM5_LOW,
1012SN/A        FLOATREG_XMM5_HIGH,
1022SN/A        FLOATREG_XMM6_LOW,
1032SN/A        FLOATREG_XMM6_HIGH,
1042SN/A        FLOATREG_XMM7_LOW,
1052SN/A        FLOATREG_XMM7_HIGH,
1062SN/A        FLOATREG_XMM8_LOW,
1072SN/A        FLOATREG_XMM8_HIGH,
1082SN/A        FLOATREG_XMM9_LOW,
1091400SN/A        FLOATREG_XMM9_HIGH,
1105529Snate@binkert.org        FLOATREG_XMM10_LOW,
1112623SN/A        FLOATREG_XMM10_HIGH,
1122SN/A        FLOATREG_XMM11_LOW,
1131400SN/A        FLOATREG_XMM11_HIGH,
1142683Sktlim@umich.edu        FLOATREG_XMM12_LOW,
1152683Sktlim@umich.edu        FLOATREG_XMM12_HIGH,
1162190SN/A        FLOATREG_XMM13_LOW,
1172683Sktlim@umich.edu        FLOATREG_XMM13_HIGH,
1182683Sktlim@umich.edu        FLOATREG_XMM14_LOW,
1192683Sktlim@umich.edu        FLOATREG_XMM14_HIGH,
1202680Sktlim@umich.edu        FLOATREG_XMM15_LOW,
1215169Ssaidi@eecs.umich.edu        FLOATREG_XMM15_HIGH,
1225169Ssaidi@eecs.umich.edu
1235496Ssaidi@eecs.umich.edu        NUM_FLOATREGS = FLOATREG_XMM_BASE + 2 * NumXMMRegs
1245496Ssaidi@eecs.umich.edu    };
1255496Ssaidi@eecs.umich.edu
1265894Sgblack@eecs.umich.edu    static inline FloatRegIndex
1275496Ssaidi@eecs.umich.edu    FLOATREG_MMX(int index)
1285496Ssaidi@eecs.umich.edu    {
1295496Ssaidi@eecs.umich.edu        return (FloatRegIndex)(FLOATREG_MMX_BASE + index);
1305894Sgblack@eecs.umich.edu    }
1315496Ssaidi@eecs.umich.edu
1325496Ssaidi@eecs.umich.edu    static inline FloatRegIndex
1335496Ssaidi@eecs.umich.edu    FLOATREG_FPR(int index)
1345496Ssaidi@eecs.umich.edu    {
1355496Ssaidi@eecs.umich.edu        return (FloatRegIndex)(FLOATREG_FPR_BASE + index);
1365496Ssaidi@eecs.umich.edu    }
1375496Ssaidi@eecs.umich.edu
1385496Ssaidi@eecs.umich.edu    static inline FloatRegIndex
1395169Ssaidi@eecs.umich.edu    FLOATREG_XMM_LOW(int index)
1402SN/A    {
1411858SN/A        return (FloatRegIndex)(FLOATREG_XMM_BASE + 2 * index);
1422SN/A    }
1432SN/A
1442SN/A    static inline FloatRegIndex
1452SN/A    FLOATREG_XMM_HIGH(int index)
1462SN/A    {
1472SN/A        return (FloatRegIndex)(FLOATREG_XMM_BASE + 2 * index + 1);
1484181Sgblack@eecs.umich.edu    }
1494181Sgblack@eecs.umich.edu};
1504182Sgblack@eecs.umich.edu
1514182Sgblack@eecs.umich.edu#endif // __ARCH_X86_FLOATREGS_HH__
1522SN/A