isa.hh revision 6361:62de7e765286
14134Sgblack@eecs.umich.edu/*
24134Sgblack@eecs.umich.edu * Copyright (c) 2009 The Regents of The University of Michigan
34134Sgblack@eecs.umich.edu * All rights reserved.
44134Sgblack@eecs.umich.edu *
54134Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
64134Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
74134Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
84134Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
94134Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
104134Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
114134Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
124134Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
134134Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
144134Sgblack@eecs.umich.edu * this software without specific prior written permission.
154134Sgblack@eecs.umich.edu *
164134Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
174134Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
184134Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
194134Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
204134Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
214134Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
224134Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234134Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244134Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254134Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264134Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274134Sgblack@eecs.umich.edu *
284134Sgblack@eecs.umich.edu * Authors: Gabe Black
294134Sgblack@eecs.umich.edu */
304134Sgblack@eecs.umich.edu
314134Sgblack@eecs.umich.edu#ifndef __ARCH_X86_ISA_HH__
324134Sgblack@eecs.umich.edu#define __ARCH_X86_ISA_HH__
334134Sgblack@eecs.umich.edu
344134Sgblack@eecs.umich.edu#include "arch/x86/floatregs.hh"
354134Sgblack@eecs.umich.edu#include "arch/x86/miscregs.hh"
364134Sgblack@eecs.umich.edu#include "arch/x86/registers.hh"
374134Sgblack@eecs.umich.edu#include "base/types.hh"
384134Sgblack@eecs.umich.edu
394134Sgblack@eecs.umich.edu#include <string>
404134Sgblack@eecs.umich.edu#include <iostream>
414134Sgblack@eecs.umich.edu
424134Sgblack@eecs.umich.educlass Checkpoint;
434134Sgblack@eecs.umich.educlass EventManager;
444134Sgblack@eecs.umich.educlass ThreadContext;
454134Sgblack@eecs.umich.edu
464134Sgblack@eecs.umich.edunamespace X86ISA
474134Sgblack@eecs.umich.edu{
484134Sgblack@eecs.umich.edu    class ISA
494134Sgblack@eecs.umich.edu    {
504134Sgblack@eecs.umich.edu      protected:
514134Sgblack@eecs.umich.edu        MiscReg regVal[NUM_MISCREGS];
524134Sgblack@eecs.umich.edu        void updateHandyM5Reg(Efer efer, CR0 cr0,
534134Sgblack@eecs.umich.edu                SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags);
544134Sgblack@eecs.umich.edu
554134Sgblack@eecs.umich.edu      public:
564134Sgblack@eecs.umich.edu        void clear();
574134Sgblack@eecs.umich.edu
584134Sgblack@eecs.umich.edu        ISA()
594134Sgblack@eecs.umich.edu        {
604134Sgblack@eecs.umich.edu            clear();
615648Sgblack@eecs.umich.edu        }
625648Sgblack@eecs.umich.edu
635648Sgblack@eecs.umich.edu        MiscReg readMiscRegNoEffect(int miscReg);
645648Sgblack@eecs.umich.edu        MiscReg readMiscReg(int miscReg, ThreadContext *tc);
654134Sgblack@eecs.umich.edu
664134Sgblack@eecs.umich.edu        void setMiscRegNoEffect(int miscReg, MiscReg val);
674578Sgblack@eecs.umich.edu        void setMiscReg(int miscReg, MiscReg val, ThreadContext *tc);
685063Sgblack@eecs.umich.edu
694682Sgblack@eecs.umich.edu        int
705063Sgblack@eecs.umich.edu        flattenIntIndex(int reg)
715075Sgblack@eecs.umich.edu        {
725063Sgblack@eecs.umich.edu            return reg & ~IntFoldBit;
735063Sgblack@eecs.umich.edu        }
745063Sgblack@eecs.umich.edu
755063Sgblack@eecs.umich.edu        int
765075Sgblack@eecs.umich.edu        flattenFloatIndex(int reg)
774134Sgblack@eecs.umich.edu        {
784134Sgblack@eecs.umich.edu            if (reg >= NUM_FLOATREGS) {
794134Sgblack@eecs.umich.edu                reg = FLOATREG_STACK(reg - NUM_FLOATREGS,
805045Sgblack@eecs.umich.edu                                     regVal[MISCREG_X87_TOP]);
815025Sgblack@eecs.umich.edu            }
825025Sgblack@eecs.umich.edu            return reg;
835025Sgblack@eecs.umich.edu        }
845025Sgblack@eecs.umich.edu
855025Sgblack@eecs.umich.edu        void serialize(EventManager *em, std::ostream &os);
865025Sgblack@eecs.umich.edu        void unserialize(EventManager *em, Checkpoint *cp,
875149Sgblack@eecs.umich.edu                const std::string &section);
885149Sgblack@eecs.umich.edu    };
895149Sgblack@eecs.umich.edu}
905149Sgblack@eecs.umich.edu
915161Sgblack@eecs.umich.edu#endif
925323Sgblack@eecs.umich.edu