vptr.hh revision 8706:b1838faf3bcc
15323Sgblack@eecs.umich.edu/* 22934Sktlim@umich.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 32934Sktlim@umich.edu * All rights reserved. 42934Sktlim@umich.edu * 52934Sktlim@umich.edu * Redistribution and use in source and binary forms, with or without 62934Sktlim@umich.edu * modification, are permitted provided that the following conditions are 72934Sktlim@umich.edu * met: redistributions of source code must retain the above copyright 82934Sktlim@umich.edu * notice, this list of conditions and the following disclaimer; 92934Sktlim@umich.edu * redistributions in binary form must reproduce the above copyright 102934Sktlim@umich.edu * notice, this list of conditions and the following disclaimer in the 112934Sktlim@umich.edu * documentation and/or other materials provided with the distribution; 122934Sktlim@umich.edu * neither the name of the copyright holders nor the names of its 132934Sktlim@umich.edu * contributors may be used to endorse or promote products derived from 142934Sktlim@umich.edu * this software without specific prior written permission. 152934Sktlim@umich.edu * 162934Sktlim@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172934Sktlim@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182934Sktlim@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192934Sktlim@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202934Sktlim@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212934Sktlim@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222934Sktlim@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232934Sktlim@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242934Sktlim@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252934Sktlim@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262934Sktlim@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272934Sktlim@umich.edu * 282934Sktlim@umich.edu * Authors: Nathan Binkert 292934Sktlim@umich.edu */ 302969Sktlim@umich.edu 312934Sktlim@umich.edu#ifndef __ARCH_ALPHA_VPTR_HH__ 322995Ssaidi@eecs.umich.edu#define __ARCH_ALPHA_VPTR_HH__ 332934Sktlim@umich.edu 342934Sktlim@umich.edu#include "arch/isa_traits.hh" 352934Sktlim@umich.edu#include "arch/vtophys.hh" 362934Sktlim@umich.edu#include "mem/fs_translating_port_proxy.hh" 372934Sktlim@umich.edu 382934Sktlim@umich.educlass ThreadContext; 392934Sktlim@umich.edu 402934Sktlim@umich.edutemplate <class T> 414520Ssaidi@eecs.umich.educlass VPtr 424520Ssaidi@eecs.umich.edu{ 434982Ssaidi@eecs.umich.edu public: 444520Ssaidi@eecs.umich.edu typedef T Type; 454520Ssaidi@eecs.umich.edu 462934Sktlim@umich.edu protected: 472934Sktlim@umich.edu ThreadContext *tc; 483005Sstever@eecs.umich.edu Addr ptr; 493005Sstever@eecs.umich.edu Addr buffer[(sizeof(T)-1)/sizeof(Addr) + 1]; 503304Sstever@eecs.umich.edu 512995Ssaidi@eecs.umich.edu public: 522934Sktlim@umich.edu explicit VPtr(ThreadContext *_tc, Addr p = 0) 532934Sktlim@umich.edu : tc(_tc), ptr(p) 544965Ssaidi@eecs.umich.edu { 555266Sksewell@umich.edu refresh(); 562934Sktlim@umich.edu } 572934Sktlim@umich.edu 582934Sktlim@umich.edu template <class U> 592934Sktlim@umich.edu VPtr(const VPtr<U> &vp) 602934Sktlim@umich.edu : tc(vp.tc), ptr(vp.ptr) 612995Ssaidi@eecs.umich.edu { 622934Sktlim@umich.edu refresh(); 632934Sktlim@umich.edu } 642934Sktlim@umich.edu 652934Sktlim@umich.edu ~VPtr() 662934Sktlim@umich.edu {} 672995Ssaidi@eecs.umich.edu 682934Sktlim@umich.edu void 692934Sktlim@umich.edu refresh() 702953Sktlim@umich.edu { 714094Sbinkertn@umich.edu if (!ptr) 722934Sktlim@umich.edu return; 733449Shsul@eecs.umich.edu 742934Sktlim@umich.edu FSTranslatingPortProxy* proxy = tc->getVirtProxy(); 752934Sktlim@umich.edu proxy->readBlob(ptr, buffer, sizeof(T)); 762934Sktlim@umich.edu } 772934Sktlim@umich.edu 782934Sktlim@umich.edu bool 793584Ssaidi@eecs.umich.edu operator!() const 804486Sbinkertn@umich.edu { 814486Sbinkertn@umich.edu return ptr == 0; 824486Sbinkertn@umich.edu } 834486Sbinkertn@umich.edu 844486Sbinkertn@umich.edu VPtr<T> 854486Sbinkertn@umich.edu operator+(int offset) 864486Sbinkertn@umich.edu { 873584Ssaidi@eecs.umich.edu return VPtr<T>(tc, ptr + offset); 883584Ssaidi@eecs.umich.edu } 893584Ssaidi@eecs.umich.edu 903584Ssaidi@eecs.umich.edu const VPtr<T> & 913584Ssaidi@eecs.umich.edu operator+=(int offset) 923743Sgblack@eecs.umich.edu { 933584Ssaidi@eecs.umich.edu ptr += offset; 944972Ssaidi@eecs.umich.edu refresh(); 953743Sgblack@eecs.umich.edu 964104Ssaidi@eecs.umich.edu return *this; 973743Sgblack@eecs.umich.edu } 983823Ssaidi@eecs.umich.edu 993814Ssaidi@eecs.umich.edu const VPtr<T> & 1003743Sgblack@eecs.umich.edu operator=(Addr p) 1013743Sgblack@eecs.umich.edu { 1023584Ssaidi@eecs.umich.edu ptr = p; 1033814Ssaidi@eecs.umich.edu refresh(); 1043584Ssaidi@eecs.umich.edu 1053745Sgblack@eecs.umich.edu return *this; 1063745Sgblack@eecs.umich.edu } 1073745Sgblack@eecs.umich.edu 1083584Ssaidi@eecs.umich.edu template <class U> 1093898Ssaidi@eecs.umich.edu const VPtr<T> & 1103898Ssaidi@eecs.umich.edu operator=(const VPtr<U> &vp) 1113898Ssaidi@eecs.umich.edu { 1124103Ssaidi@eecs.umich.edu tc = vp.tc; 1134103Ssaidi@eecs.umich.edu ptr = vp.ptr; 1144103Ssaidi@eecs.umich.edu refresh(); 1153745Sgblack@eecs.umich.edu 1163745Sgblack@eecs.umich.edu return *this; 1173745Sgblack@eecs.umich.edu } 1183584Ssaidi@eecs.umich.edu 1193584Ssaidi@eecs.umich.edu operator T *() 1203584Ssaidi@eecs.umich.edu { 1215222Sksewell@umich.edu return (T *)buffer; 1225222Sksewell@umich.edu } 1235222Sksewell@umich.edu 1245222Sksewell@umich.edu T * 1255222Sksewell@umich.edu operator->() 1265222Sksewell@umich.edu { 1275222Sksewell@umich.edu return (T *)buffer; 1285222Sksewell@umich.edu } 1295222Sksewell@umich.edu 1305222Sksewell@umich.edu T & 1315222Sksewell@umich.edu operator*() 1325222Sksewell@umich.edu { 1335222Sksewell@umich.edu return *(T *)buffer; 1345222Sksewell@umich.edu } 1355222Sksewell@umich.edu}; 1365222Sksewell@umich.edu 1375222Sksewell@umich.edu#endif // __ARCH_ALPHA_VPTR_HH__ 1385222Sksewell@umich.edu