00001 // 00002 // Copyright (c) 2005-2008 Kenichi Watanabe. 00003 // Copyright (c) 2005-2008 Yasuhiro Watari. 00004 // Copyright (c) 2005-2008 Hironori Ichibayashi. 00005 // Copyright (c) 2008-2009 Kazuo Horio. 00006 // Copyright (c) 2009-2013 Naruki Kurata. 00007 // Copyright (c) 2005-2013 Ryota Shioya. 00008 // Copyright (c) 2005-2013 Masahiro Goshima. 00009 // 00010 // This software is provided 'as-is', without any express or implied 00011 // warranty. In no event will the authors be held liable for any damages 00012 // arising from the use of this software. 00013 // 00014 // Permission is granted to anyone to use this software for any purpose, 00015 // including commercial applications, and to alter it and redistribute it 00016 // freely, subject to the following restrictions: 00017 // 00018 // 1. The origin of this software must not be misrepresented; you must not 00019 // claim that you wrote the original software. If you use this software 00020 // in a product, an acknowledgment in the product documentation would be 00021 // appreciated but is not required. 00022 // 00023 // 2. Altered source versions must be plainly marked as such, and must not be 00024 // misrepresented as being the original software. 00025 // 00026 // 3. This notice may not be removed or altered from any source 00027 // distribution. 00028 // 00029 // 00030 00031 00032 #include <pch.h> 00033 00034 #include "Sim/ISAInfo.h" 00035 00036 using namespace Onikiri; 00037 00038 bool SimISAInfoDef::SimISAInfo_IW32_RW64_AS64::TestISAInfo(ISAInfoIF* info) 00039 { 00040 int iw = info->GetInstructionWordBitSize(); 00041 if(iw != 32){ 00042 THROW_RUNTIME_ERROR( 00043 "An emulator of ISA with instruction" 00044 "word size(%d) is not supported.", iw ); 00045 } 00046 00047 int rw = info->GetRegisterWordBitSize(); 00048 if(rw > 64){ 00049 THROW_RUNTIME_ERROR( 00050 "An emulator of ISA with register" 00051 "word size(%d) is not supported.", rw ); 00052 } 00053 00054 int as = info->GetAddressSpaceBitSize(); 00055 if(as > 64){ 00056 THROW_RUNTIME_ERROR( 00057 "An emulator of ISA with address" 00058 "space size(%d) is not supported.", as ); 00059 } 00060 00061 int maxSN = info->GetMaxSrcRegCount(); 00062 if(maxSN > MAX_SRC_REG_COUNT){ 00063 THROW_RUNTIME_ERROR( 00064 "An emulator of ISA with max source register" 00065 "number(%d) is not supported.", maxSN ); 00066 } 00067 00068 int maxDN = info->GetMaxDstRegCount(); 00069 if(maxDN > MAX_DST_REG_COUNT){ 00070 THROW_RUNTIME_ERROR( 00071 "An emulator of ISA with max destination register" 00072 "number(%d) is not supported.", maxDN ); 00073 } 00074 00075 int regCnt = info->GetRegisterCount(); 00076 if(regCnt > MAX_REG_COUNT){ 00077 THROW_RUNTIME_ERROR( 00078 "An emulator of ISA with register" 00079 "number(%d) is not supported.", regCnt ); 00080 } 00081 00082 int maxOpInfo = info->GetMaxOpInfoCountPerPC(); 00083 if(maxOpInfo > MAX_OP_INFO_COUNT_PER_PC){ 00084 THROW_RUNTIME_ERROR( 00085 "An emulator of ISA with register" 00086 "number(%d) is not supported.", maxOpInfo ); 00087 } 00088 00089 int regSegmentCount = info->GetRegisterSegmentCount(); 00090 if( regSegmentCount > MAX_REG_SEGMENT_COUNT ){ 00091 THROW_RUNTIME_ERROR( 00092 "An emulator of ISA with register" 00093 "segments(%d) is not supported.", regSegmentCount ); 00094 } 00095 00096 return true; 00097 }