arguments.cc revision 2665
19651SAndreas.Sandberg@ARM.com/* 29651SAndreas.Sandberg@ARM.com * Copyright (c) 2003-2005 The Regents of The University of Michigan 39651SAndreas.Sandberg@ARM.com * All rights reserved. 49651SAndreas.Sandberg@ARM.com * 59651SAndreas.Sandberg@ARM.com * Redistribution and use in source and binary forms, with or without 69651SAndreas.Sandberg@ARM.com * modification, are permitted provided that the following conditions are 79651SAndreas.Sandberg@ARM.com * met: redistributions of source code must retain the above copyright 89651SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer; 99651SAndreas.Sandberg@ARM.com * redistributions in binary form must reproduce the above copyright 109651SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer in the 119651SAndreas.Sandberg@ARM.com * documentation and/or other materials provided with the distribution; 129651SAndreas.Sandberg@ARM.com * neither the name of the copyright holders nor the names of its 139651SAndreas.Sandberg@ARM.com * contributors may be used to endorse or promote products derived from 149651SAndreas.Sandberg@ARM.com * this software without specific prior written permission. 159651SAndreas.Sandberg@ARM.com * 169651SAndreas.Sandberg@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179651SAndreas.Sandberg@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189651SAndreas.Sandberg@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199651SAndreas.Sandberg@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209651SAndreas.Sandberg@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219651SAndreas.Sandberg@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229651SAndreas.Sandberg@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239651SAndreas.Sandberg@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249651SAndreas.Sandberg@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259651SAndreas.Sandberg@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269651SAndreas.Sandberg@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279651SAndreas.Sandberg@ARM.com * 289651SAndreas.Sandberg@ARM.com * Authors: Nathan Binkert 299651SAndreas.Sandberg@ARM.com */ 309651SAndreas.Sandberg@ARM.com 319651SAndreas.Sandberg@ARM.com#include "arch/alpha/arguments.hh" 329651SAndreas.Sandberg@ARM.com#include "arch/alpha/vtophys.hh" 339651SAndreas.Sandberg@ARM.com#include "cpu/exec_context.hh" 349651SAndreas.Sandberg@ARM.com#include "mem/vport.hh" 359651SAndreas.Sandberg@ARM.com 369651SAndreas.Sandberg@ARM.comusing namespace AlphaISA; 379651SAndreas.Sandberg@ARM.com 389651SAndreas.Sandberg@ARM.comAlphaArguments::Data::~Data() 399651SAndreas.Sandberg@ARM.com{ 4011793Sbrandon.potter@amd.com while (!data.empty()) { 4111793Sbrandon.potter@amd.com delete [] data.front(); 4211793Sbrandon.potter@amd.com data.pop_front(); 4311793Sbrandon.potter@amd.com } 4411793Sbrandon.potter@amd.com} 459881Sandreas@sandberg.pp.se 469651SAndreas.Sandberg@ARM.comchar * 479651SAndreas.Sandberg@ARM.comAlphaArguments::Data::alloc(size_t size) 489651SAndreas.Sandberg@ARM.com{ 499651SAndreas.Sandberg@ARM.com char *buf = new char[size]; 509651SAndreas.Sandberg@ARM.com data.push_back(buf); 519651SAndreas.Sandberg@ARM.com return buf; 529651SAndreas.Sandberg@ARM.com} 5310073Sandreas@sandberg.pp.se 5410073Sandreas@sandberg.pp.seuint64_t 5510073Sandreas@sandberg.pp.seAlphaArguments::getArg(bool fp) 5610073Sandreas@sandberg.pp.se{ 5710073Sandreas@sandberg.pp.se if (number < 6) { 5810073Sandreas@sandberg.pp.se if (fp) 5910073Sandreas@sandberg.pp.se return xc->readFloatRegBits(16 + number); 6010073Sandreas@sandberg.pp.se else 6110073Sandreas@sandberg.pp.se return xc->readIntReg(16 + number); 6210073Sandreas@sandberg.pp.se } else { 6310073Sandreas@sandberg.pp.se Addr sp = xc->readIntReg(30); 6410073Sandreas@sandberg.pp.se VirtualPort *vp = xc->getVirtPort(xc); 6510073Sandreas@sandberg.pp.se uint64_t arg = vp->read<uint64_t>(sp + (number-6) * sizeof(uint64_t)); 6610073Sandreas@sandberg.pp.se xc->delVirtPort(vp); 6710073Sandreas@sandberg.pp.se return arg; 6810073Sandreas@sandberg.pp.se } 699881Sandreas@sandberg.pp.se} 709881Sandreas@sandberg.pp.se 719881Sandreas@sandberg.pp.se