isa_traits.hh revision 2460
12914Ssaidi@eecs.umich.edu/* 22914Ssaidi@eecs.umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan 32914Ssaidi@eecs.umich.edu * All rights reserved. 42914Ssaidi@eecs.umich.edu * 52914Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 62914Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 72914Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 82914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 92914Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 102914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 112914Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 122914Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 132914Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 142914Ssaidi@eecs.umich.edu * this software without specific prior written permission. 152914Ssaidi@eecs.umich.edu * 162914Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172914Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182914Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192914Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202914Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212914Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222914Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232914Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242914Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252914Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262914Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272914Ssaidi@eecs.umich.edu */ 282914Ssaidi@eecs.umich.edu 292914Ssaidi@eecs.umich.edu#ifndef __ARCH_ALPHA_ISA_TRAITS_HH__ 302914Ssaidi@eecs.umich.edu#define __ARCH_ALPHA_ISA_TRAITS_HH__ 313091Sstever@eecs.umich.edu 323091Sstever@eecs.umich.edunamespace LittleEndianGuest {} 333091Sstever@eecs.umich.edu 342914Ssaidi@eecs.umich.edu#include "arch/alpha/types.hh" 352914Ssaidi@eecs.umich.edu#include "arch/alpha/constants.hh" 363091Sstever@eecs.umich.edu#include "arch/alpha/regfile.hh" 373091Sstever@eecs.umich.edu#include "config/full_system.hh" 382914Ssaidi@eecs.umich.edu#include "sim/host.hh" 392914Ssaidi@eecs.umich.edu 402914Ssaidi@eecs.umich.educlass StaticInstPtr; 412914Ssaidi@eecs.umich.edu 422914Ssaidi@eecs.umich.edu#if !FULL_SYSTEM 432914Ssaidi@eecs.umich.educlass SyscallReturn { 442914Ssaidi@eecs.umich.edu public: 453091Sstever@eecs.umich.edu template <class T> 463091Sstever@eecs.umich.edu SyscallReturn(T v, bool s) 473091Sstever@eecs.umich.edu { 483091Sstever@eecs.umich.edu retval = (uint64_t)v; 493091Sstever@eecs.umich.edu success = s; 503091Sstever@eecs.umich.edu } 513091Sstever@eecs.umich.edu 523091Sstever@eecs.umich.edu template <class T> 533091Sstever@eecs.umich.edu SyscallReturn(T v) 543091Sstever@eecs.umich.edu { 553091Sstever@eecs.umich.edu success = (v >= 0); 563091Sstever@eecs.umich.edu retval = (uint64_t)v; 573091Sstever@eecs.umich.edu } 582914Ssaidi@eecs.umich.edu 592914Ssaidi@eecs.umich.edu ~SyscallReturn() {} 602914Ssaidi@eecs.umich.edu 614490Sstever@eecs.umich.edu SyscallReturn& operator=(const SyscallReturn& s) { 624490Sstever@eecs.umich.edu retval = s.retval; 634490Sstever@eecs.umich.edu success = s.success; 644490Sstever@eecs.umich.edu return *this; 654490Sstever@eecs.umich.edu } 664490Sstever@eecs.umich.edu 674490Sstever@eecs.umich.edu bool successful() { return success; } 684490Sstever@eecs.umich.edu uint64_t value() { return retval; } 694490Sstever@eecs.umich.edu 704490Sstever@eecs.umich.edu 714490Sstever@eecs.umich.edu private: 724490Sstever@eecs.umich.edu uint64_t retval; 734490Sstever@eecs.umich.edu bool success; 743090Sstever@eecs.umich.edu}; 753090Sstever@eecs.umich.edu 764490Sstever@eecs.umich.edu#endif 774490Sstever@eecs.umich.edu 784490Sstever@eecs.umich.edunamespace AlphaISA 794490Sstever@eecs.umich.edu{ 804490Sstever@eecs.umich.edu 813091Sstever@eecs.umich.eduusing namespace LittleEndianGuest; 822914Ssaidi@eecs.umich.edu 833090Sstever@eecs.umich.edu// redirected register map, really only used for the full system case. 843403Ssaidi@eecs.umich.eduextern const int reg_redir[NumIntRegs]; 853403Ssaidi@eecs.umich.edu 863403Ssaidi@eecs.umich.edu#if FULL_SYSTEM 873403Ssaidi@eecs.umich.edu 884490Sstever@eecs.umich.edu#include "arch/alpha/isa_fullsys_traits.hh" 894490Sstever@eecs.umich.edu 902914Ssaidi@eecs.umich.edu#endif 914490Sstever@eecs.umich.edu 922914Ssaidi@eecs.umich.edu StaticInstPtr decodeInst(ExtMachInst); 932914Ssaidi@eecs.umich.edu 942914Ssaidi@eecs.umich.edu#if !FULL_SYSTEM 952914Ssaidi@eecs.umich.edu static inline void setSyscallReturn(SyscallReturn return_value, RegFile *regs) 962914Ssaidi@eecs.umich.edu { 974490Sstever@eecs.umich.edu // check for error condition. Alpha syscall convention is to 984490Sstever@eecs.umich.edu // indicate success/failure in reg a3 (r19) and put the 994490Sstever@eecs.umich.edu // return value itself in the standard return value reg (v0). 1004490Sstever@eecs.umich.edu if (return_value.successful()) { 1013403Ssaidi@eecs.umich.edu // no error 1023403Ssaidi@eecs.umich.edu regs->intRegFile[SyscallSuccessReg] = 0; 1033403Ssaidi@eecs.umich.edu regs->intRegFile[ReturnValueReg] = return_value.value(); 1043403Ssaidi@eecs.umich.edu } else { 1053403Ssaidi@eecs.umich.edu // got an error, return details 1062914Ssaidi@eecs.umich.edu regs->intRegFile[SyscallSuccessReg] = (IntReg) -1; 1072914Ssaidi@eecs.umich.edu regs->intRegFile[ReturnValueReg] = -return_value.value(); 1082914Ssaidi@eecs.umich.edu } 1092914Ssaidi@eecs.umich.edu } 1102914Ssaidi@eecs.umich.edu#endif 1113091Sstever@eecs.umich.edu}; 1123349Sbinkertn@umich.edu 1133091Sstever@eecs.umich.edu#endif // __ARCH_ALPHA_ISA_TRAITS_HH__ 1143091Sstever@eecs.umich.edu