isa.hh revision 10033:21c14a2b2117
111348Sandreas.sandberg@arm.com/*
211470Sandreas.sandberg@arm.com * Copyright (c) 2009 The Regents of The University of Michigan
311348Sandreas.sandberg@arm.com * All rights reserved.
411348Sandreas.sandberg@arm.com *
511348Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
611348Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
711348Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
811348Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
911348Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
1011348Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
1111348Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
1211348Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
1311348Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
1411348Sandreas.sandberg@arm.com * this software without specific prior written permission.
1511348Sandreas.sandberg@arm.com *
1611348Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711348Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811348Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911348Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011348Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111348Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211348Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311348Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411348Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511348Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611348Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2711348Sandreas.sandberg@arm.com *
2811348Sandreas.sandberg@arm.com * Authors: Gabe Black
2911348Sandreas.sandberg@arm.com */
3011348Sandreas.sandberg@arm.com
3111348Sandreas.sandberg@arm.com#ifndef __ARCH_X86_ISA_HH__
3211348Sandreas.sandberg@arm.com#define __ARCH_X86_ISA_HH__
3311348Sandreas.sandberg@arm.com
3411348Sandreas.sandberg@arm.com#include <iostream>
3511348Sandreas.sandberg@arm.com#include <string>
3611348Sandreas.sandberg@arm.com
3711348Sandreas.sandberg@arm.com#include "arch/x86/regs/float.hh"
3811348Sandreas.sandberg@arm.com#include "arch/x86/regs/misc.hh"
3911348Sandreas.sandberg@arm.com#include "arch/x86/registers.hh"
4011348Sandreas.sandberg@arm.com#include "base/types.hh"
4111348Sandreas.sandberg@arm.com#include "sim/sim_object.hh"
4211348Sandreas.sandberg@arm.com
4311348Sandreas.sandberg@arm.comclass Checkpoint;
4411348Sandreas.sandberg@arm.comclass EventManager;
4511348Sandreas.sandberg@arm.comclass ThreadContext;
4611348Sandreas.sandberg@arm.comstruct X86ISAParams;
4711348Sandreas.sandberg@arm.com
4811348Sandreas.sandberg@arm.comnamespace X86ISA
4911348Sandreas.sandberg@arm.com{
5011348Sandreas.sandberg@arm.com    class ISA : public SimObject
5111348Sandreas.sandberg@arm.com    {
5211348Sandreas.sandberg@arm.com      protected:
5311348Sandreas.sandberg@arm.com        MiscReg regVal[NUM_MISCREGS];
5411348Sandreas.sandberg@arm.com        void updateHandyM5Reg(Efer efer, CR0 cr0,
5511348Sandreas.sandberg@arm.com                SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags,
5611348Sandreas.sandberg@arm.com                ThreadContext *tc);
5711348Sandreas.sandberg@arm.com
5811348Sandreas.sandberg@arm.com      public:
5911348Sandreas.sandberg@arm.com        typedef X86ISAParams Params;
6011348Sandreas.sandberg@arm.com
6111348Sandreas.sandberg@arm.com        void clear();
6211348Sandreas.sandberg@arm.com
6311348Sandreas.sandberg@arm.com        ISA(Params *p);
6411348Sandreas.sandberg@arm.com        const Params *params() const;
6511348Sandreas.sandberg@arm.com
6611348Sandreas.sandberg@arm.com        MiscReg readMiscRegNoEffect(int miscReg);
6711348Sandreas.sandberg@arm.com        MiscReg readMiscReg(int miscReg, ThreadContext *tc);
6811348Sandreas.sandberg@arm.com
6911348Sandreas.sandberg@arm.com        void setMiscRegNoEffect(int miscReg, MiscReg val);
7011348Sandreas.sandberg@arm.com        void setMiscReg(int miscReg, MiscReg val, ThreadContext *tc);
7111348Sandreas.sandberg@arm.com
7211348Sandreas.sandberg@arm.com        int
7311348Sandreas.sandberg@arm.com        flattenIntIndex(int reg)
7411348Sandreas.sandberg@arm.com        {
7511348Sandreas.sandberg@arm.com            return reg & ~IntFoldBit;
7611348Sandreas.sandberg@arm.com        }
7711348Sandreas.sandberg@arm.com
7811348Sandreas.sandberg@arm.com        int
7911348Sandreas.sandberg@arm.com        flattenFloatIndex(int reg)
8011348Sandreas.sandberg@arm.com        {
8111348Sandreas.sandberg@arm.com            if (reg >= NUM_FLOATREGS) {
8211348Sandreas.sandberg@arm.com                reg = FLOATREG_STACK(reg - NUM_FLOATREGS,
8311348Sandreas.sandberg@arm.com                                     regVal[MISCREG_X87_TOP]);
8411348Sandreas.sandberg@arm.com            }
8511348Sandreas.sandberg@arm.com            return reg;
8611348Sandreas.sandberg@arm.com        }
8711348Sandreas.sandberg@arm.com
8811348Sandreas.sandberg@arm.com        int
8911348Sandreas.sandberg@arm.com        flattenCCIndex(int reg)
9011348Sandreas.sandberg@arm.com        {
9111348Sandreas.sandberg@arm.com            return reg;
9211348Sandreas.sandberg@arm.com        }
9311348Sandreas.sandberg@arm.com
9411348Sandreas.sandberg@arm.com        int
9511348Sandreas.sandberg@arm.com        flattenMiscIndex(int reg)
9611348Sandreas.sandberg@arm.com        {
9711348Sandreas.sandberg@arm.com            return reg;
9811348Sandreas.sandberg@arm.com        }
9911348Sandreas.sandberg@arm.com
10011348Sandreas.sandberg@arm.com        void serialize(std::ostream &os);
10111348Sandreas.sandberg@arm.com        void unserialize(Checkpoint *cp, const std::string &section);
10211348Sandreas.sandberg@arm.com        void startup(ThreadContext *tc);
10311348Sandreas.sandberg@arm.com
10411348Sandreas.sandberg@arm.com        /// Explicitly import the otherwise hidden startup
10511348Sandreas.sandberg@arm.com        using SimObject::startup;
10611348Sandreas.sandberg@arm.com
10711348Sandreas.sandberg@arm.com    };
10811348Sandreas.sandberg@arm.com}
10911470Sandreas.sandberg@arm.com
11011348Sandreas.sandberg@arm.com#endif
11111348Sandreas.sandberg@arm.com