utility.hh revision 7506
16691Stjones1@inf.ed.ac.uk/*
26691Stjones1@inf.ed.ac.uk * Copyright (c) 2003-2005 The Regents of The University of Michigan
36691Stjones1@inf.ed.ac.uk * Copyright (c) 2007-2008 The Florida State University
46691Stjones1@inf.ed.ac.uk * Copyright (c) 2009 The University of Edinburgh
56691Stjones1@inf.ed.ac.uk * All rights reserved.
66691Stjones1@inf.ed.ac.uk *
76691Stjones1@inf.ed.ac.uk * Redistribution and use in source and binary forms, with or without
86691Stjones1@inf.ed.ac.uk * modification, are permitted provided that the following conditions are
96691Stjones1@inf.ed.ac.uk * met: redistributions of source code must retain the above copyright
106691Stjones1@inf.ed.ac.uk * notice, this list of conditions and the following disclaimer;
116691Stjones1@inf.ed.ac.uk * redistributions in binary form must reproduce the above copyright
126691Stjones1@inf.ed.ac.uk * notice, this list of conditions and the following disclaimer in the
136691Stjones1@inf.ed.ac.uk * documentation and/or other materials provided with the distribution;
146691Stjones1@inf.ed.ac.uk * neither the name of the copyright holders nor the names of its
156691Stjones1@inf.ed.ac.uk * contributors may be used to endorse or promote products derived from
166691Stjones1@inf.ed.ac.uk * this software without specific prior written permission.
176691Stjones1@inf.ed.ac.uk *
186691Stjones1@inf.ed.ac.uk * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
196691Stjones1@inf.ed.ac.uk * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
206691Stjones1@inf.ed.ac.uk * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
216691Stjones1@inf.ed.ac.uk * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
226691Stjones1@inf.ed.ac.uk * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
236691Stjones1@inf.ed.ac.uk * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
246691Stjones1@inf.ed.ac.uk * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
256691Stjones1@inf.ed.ac.uk * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
266691Stjones1@inf.ed.ac.uk * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
276691Stjones1@inf.ed.ac.uk * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
286691Stjones1@inf.ed.ac.uk * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
296691Stjones1@inf.ed.ac.uk *
306691Stjones1@inf.ed.ac.uk * Authors: Korey Sewell
316691Stjones1@inf.ed.ac.uk *          Stephen Hines
326691Stjones1@inf.ed.ac.uk *          Timothy M. Jones
336691Stjones1@inf.ed.ac.uk */
346691Stjones1@inf.ed.ac.uk
356691Stjones1@inf.ed.ac.uk#ifndef __ARCH_POWER_UTILITY_HH__
366691Stjones1@inf.ed.ac.uk#define __ARCH_POWER_UTILITY_HH__
376691Stjones1@inf.ed.ac.uk
386691Stjones1@inf.ed.ac.uk#include "arch/power/miscregs.hh"
396691Stjones1@inf.ed.ac.uk#include "arch/power/types.hh"
406691Stjones1@inf.ed.ac.uk#include "base/hashmap.hh"
416691Stjones1@inf.ed.ac.uk#include "base/types.hh"
426691Stjones1@inf.ed.ac.uk#include "cpu/thread_context.hh"
436691Stjones1@inf.ed.ac.uk
446691Stjones1@inf.ed.ac.uknamespace __hash_namespace {
456691Stjones1@inf.ed.ac.uk
466691Stjones1@inf.ed.ac.uktemplate<>
476691Stjones1@inf.ed.ac.ukstruct hash<PowerISA::ExtMachInst> : public hash<uint32_t> {
486691Stjones1@inf.ed.ac.uk    size_t operator()(const PowerISA::ExtMachInst &emi) const {
496691Stjones1@inf.ed.ac.uk        return hash<uint32_t>::operator()((uint32_t)emi);
506691Stjones1@inf.ed.ac.uk    };
516691Stjones1@inf.ed.ac.uk};
526691Stjones1@inf.ed.ac.uk
536691Stjones1@inf.ed.ac.uk} // __hash_namespace namespace
546691Stjones1@inf.ed.ac.uk
556691Stjones1@inf.ed.ac.uknamespace PowerISA {
566691Stjones1@inf.ed.ac.uk
576691Stjones1@inf.ed.ac.uk/**
586691Stjones1@inf.ed.ac.uk * Function to ensure ISA semantics about 0 registers.
596691Stjones1@inf.ed.ac.uk * @param tc The thread context.
606691Stjones1@inf.ed.ac.uk */
616691Stjones1@inf.ed.ac.uktemplate <class TC>
626691Stjones1@inf.ed.ac.ukvoid zeroRegisters(TC *tc);
636691Stjones1@inf.ed.ac.uk
646691Stjones1@inf.ed.ac.uk// Instruction address compression hooks
656691Stjones1@inf.ed.ac.ukstatic inline Addr
666691Stjones1@inf.ed.ac.ukrealPCToFetchPC(const Addr &addr)
676691Stjones1@inf.ed.ac.uk{
686691Stjones1@inf.ed.ac.uk    return addr;
696691Stjones1@inf.ed.ac.uk}
706691Stjones1@inf.ed.ac.uk
716691Stjones1@inf.ed.ac.ukstatic inline Addr
726691Stjones1@inf.ed.ac.ukfetchPCToRealPC(const Addr &addr)
736691Stjones1@inf.ed.ac.uk{
746691Stjones1@inf.ed.ac.uk    return addr;
756691Stjones1@inf.ed.ac.uk}
766691Stjones1@inf.ed.ac.uk
776691Stjones1@inf.ed.ac.uk// the size of "fetched" instructions
786691Stjones1@inf.ed.ac.ukstatic inline size_t
796691Stjones1@inf.ed.ac.ukfetchInstSize()
806691Stjones1@inf.ed.ac.uk{
816691Stjones1@inf.ed.ac.uk    return sizeof(MachInst);
826691Stjones1@inf.ed.ac.uk}
836691Stjones1@inf.ed.ac.uk
846691Stjones1@inf.ed.ac.ukstatic inline MachInst
856691Stjones1@inf.ed.ac.ukmakeRegisterCopy(int dest, int src)
866691Stjones1@inf.ed.ac.uk{
876691Stjones1@inf.ed.ac.uk    panic("makeRegisterCopy not implemented");
886691Stjones1@inf.ed.ac.uk    return 0;
896691Stjones1@inf.ed.ac.uk}
906691Stjones1@inf.ed.ac.uk
916691Stjones1@inf.ed.ac.ukinline void
926691Stjones1@inf.ed.ac.ukstartupCPU(ThreadContext *tc, int cpuId)
936691Stjones1@inf.ed.ac.uk{
946691Stjones1@inf.ed.ac.uk    tc->activate(0);
956691Stjones1@inf.ed.ac.uk}
966691Stjones1@inf.ed.ac.uk
976691Stjones1@inf.ed.ac.uktemplate <class XC>
986691Stjones1@inf.ed.ac.ukFault
996691Stjones1@inf.ed.ac.ukcheckFpEnableFault(XC *xc)
1006691Stjones1@inf.ed.ac.uk{
1016691Stjones1@inf.ed.ac.uk    return NoFault;
1026691Stjones1@inf.ed.ac.uk}
1036691Stjones1@inf.ed.ac.uk
1047506Stjones1@inf.ed.ac.ukvoid
1057506Stjones1@inf.ed.ac.ukcopyRegs(ThreadContext *src, ThreadContext *dest);
1066691Stjones1@inf.ed.ac.uk
1076691Stjones1@inf.ed.ac.ukstatic inline void
1086691Stjones1@inf.ed.ac.ukcopyMiscRegs(ThreadContext *src, ThreadContext *dest)
1096691Stjones1@inf.ed.ac.uk{
1106691Stjones1@inf.ed.ac.uk}
1116691Stjones1@inf.ed.ac.uk
1126691Stjones1@inf.ed.ac.uk} // PowerISA namespace
1136691Stjones1@inf.ed.ac.uk
1146691Stjones1@inf.ed.ac.uk#endif // __ARCH_POWER_UTILITY_HH__
115