emulenv.hh revision 6329
110037SARM gem5 Developers/*
210037SARM gem5 Developers * Copyright (c) 2007 The Hewlett-Packard Development Company
312580Sgiacomo.travaglini@arm.com * All rights reserved.
410037SARM gem5 Developers *
510037SARM gem5 Developers * Redistribution and use of this software in source and binary forms,
610037SARM gem5 Developers * with or without modification, are permitted provided that the
710037SARM gem5 Developers * following conditions are met:
810037SARM gem5 Developers *
910037SARM gem5 Developers * The software must be used only for Non-Commercial Use which means any
1010037SARM gem5 Developers * use which is NOT directed to receiving any direct monetary
1110037SARM gem5 Developers * compensation for, or commercial advantage from such use.  Illustrative
1210037SARM gem5 Developers * examples of non-commercial use are academic research, personal study,
1310037SARM gem5 Developers * teaching, education and corporate research & development.
1410037SARM gem5 Developers * Illustrative examples of commercial use are distributing products for
1510037SARM gem5 Developers * commercial advantage and providing services using the software for
1610037SARM gem5 Developers * commercial advantage.
1710037SARM gem5 Developers *
1810037SARM gem5 Developers * If you wish to use this software or functionality therein that may be
1910037SARM gem5 Developers * covered by patents for commercial use, please contact:
2010037SARM gem5 Developers *     Director of Intellectual Property Licensing
2110037SARM gem5 Developers *     Office of Strategy and Technology
2210037SARM gem5 Developers *     Hewlett-Packard Company
2310037SARM gem5 Developers *     1501 Page Mill Road
2410037SARM gem5 Developers *     Palo Alto, California  94304
2510037SARM gem5 Developers *
2610037SARM gem5 Developers * Redistributions of source code must retain the above copyright notice,
2710037SARM gem5 Developers * this list of conditions and the following disclaimer.  Redistributions
2810037SARM gem5 Developers * in binary form must reproduce the above copyright notice, this list of
2910037SARM gem5 Developers * conditions and the following disclaimer in the documentation and/or
3010037SARM gem5 Developers * other materials provided with the distribution.  Neither the name of
3110037SARM gem5 Developers * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
3210037SARM gem5 Developers * contributors may be used to endorse or promote products derived from
3310037SARM gem5 Developers * this software without specific prior written permission.  No right of
3410037SARM gem5 Developers * sublicense is granted herewith.  Derivatives of the software and
3510037SARM gem5 Developers * output created using the software may be prepared, but only for
3610037SARM gem5 Developers * Non-Commercial Uses.  Derivatives of the software may be shared with
3710037SARM gem5 Developers * others provided: (i) the others agree to abide by the list of
3810037SARM gem5 Developers * conditions herein which includes the Non-Commercial Use restrictions;
3910037SARM gem5 Developers * and (ii) such Derivatives of the software include the above copyright
4010037SARM gem5 Developers * notice to acknowledge the contribution from this software where
4110037SARM gem5 Developers * applicable, this list of conditions and the disclaimer below.
4210037SARM gem5 Developers *
4310037SARM gem5 Developers * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4410037SARM gem5 Developers * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
4510037SARM gem5 Developers * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
4610037SARM gem5 Developers * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
4710037SARM gem5 Developers * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4810037SARM gem5 Developers * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4910037SARM gem5 Developers * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
5010037SARM gem5 Developers * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
5110037SARM gem5 Developers * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
5210037SARM gem5 Developers * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
5310037SARM gem5 Developers * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5410037SARM gem5 Developers *
5510037SARM gem5 Developers * Authors: Gabe Black
5610037SARM gem5 Developers */
5710037SARM gem5 Developers
5810037SARM gem5 Developers#ifndef __ARCH_X86_EMULENV_HH__
5910037SARM gem5 Developers#define __ARCH_X86_EMULENV_HH__
6010037SARM gem5 Developers
6110037SARM gem5 Developers#include "arch/x86/intregs.hh"
6210037SARM gem5 Developers#include "arch/x86/segmentregs.hh"
6310037SARM gem5 Developers#include "arch/x86/registers.hh"
6410037SARM gem5 Developers#include "arch/x86/types.hh"
6510037SARM gem5 Developers
6610037SARM gem5 Developersnamespace X86ISA
6710037SARM gem5 Developers{
6810037SARM gem5 Developers    struct EmulEnv
6910037SARM gem5 Developers    {
7010037SARM gem5 Developers        RegIndex reg;
7110037SARM gem5 Developers        RegIndex regm;
7210037SARM gem5 Developers        SegmentRegIndex seg;
7310037SARM gem5 Developers        uint8_t scale;
7410037SARM gem5 Developers        RegIndex index;
7510037SARM gem5 Developers        RegIndex base;
7610037SARM gem5 Developers        int dataSize;
7710037SARM gem5 Developers        int addressSize;
7810037SARM gem5 Developers        int stackSize;
7910037SARM gem5 Developers
8010037SARM gem5 Developers        EmulEnv(RegIndex _reg, RegIndex _regm,
8110037SARM gem5 Developers                int _dataSize, int _addressSize, int _stackSize) :
8210037SARM gem5 Developers            reg(_reg), regm(_regm), seg(SEGMENT_REG_DS),
8310037SARM gem5 Developers            scale(0), index(NUM_INTREGS),
8410037SARM gem5 Developers            base(NUM_INTREGS),
8510037SARM gem5 Developers            dataSize(_dataSize), addressSize(_addressSize),
8610037SARM gem5 Developers            stackSize(_stackSize)
8710037SARM gem5 Developers        {;}
8810037SARM gem5 Developers
8910037SARM gem5 Developers        void doModRM(const ExtMachInst & machInst);
9010037SARM gem5 Developers        void setSeg(const ExtMachInst & machInst);
9110037SARM gem5 Developers    };
9210037SARM gem5 Developers};
9310037SARM gem5 Developers
9410037SARM gem5 Developers#endif // __ARCH_X86_TYPES_HH__
9510037SARM gem5 Developers