Sparc support added. (#734)

* Fix for MIPS issue.

* Sparc support added.
This commit is contained in:
xorstream 2017-01-23 16:29:41 +11:00 committed by Nguyen Anh Quynh
parent 69ae8f7987
commit a40921ce32
12 changed files with 722 additions and 356 deletions

View file

@ -18,6 +18,50 @@
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\qemu\cpu-exec.c" />
<ClCompile Include="..\..\..\qemu\cpus.c" />
<ClCompile Include="..\..\..\qemu\cputlb.c" />
<ClCompile Include="..\..\..\qemu\exec.c" />
<ClCompile Include="..\..\..\qemu\fpu\softfloat.c" />
<ClCompile Include="..\..\..\qemu\hw\sparc\leon3.c" />
<ClCompile Include="..\..\..\qemu\ioport.c" />
<ClCompile Include="..\..\..\qemu\memory.c" />
<ClCompile Include="..\..\..\qemu\memory_mapping.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\cc_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\cpu.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\fop_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\int32_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\ldst_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\mmu_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\translate.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\unicorn.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\win_helper.c" />
<ClCompile Include="..\..\..\qemu\tcg\i386\tcg-target.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\optimize.c" />
<ClCompile Include="..\..\..\qemu\tcg\tcg.c" />
<ClCompile Include="..\..\..\qemu\translate-all.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-macros.h" />
<ClInclude Include="..\..\..\qemu\fpu\softfloat-specialize.h" />
<ClInclude Include="..\..\..\qemu\sparc.h" />
<ClInclude Include="..\..\..\qemu\tcg\i386\tcg-target.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-ldst.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-null.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-op.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-opc.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-runtime.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg.h" />
<ClInclude Include="..\config-host.h" />
<ClInclude Include="..\mips-softmmu\config-target.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{698C2D54-475C-446F-B879-F629BBEF75FE}</ProjectGuid>
<Keyword>Win32Proj</Keyword>

View file

@ -1,2 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="fpu">
<UniqueIdentifier>{d424a094-0a26-4db6-85e9-e75f81c6e142}</UniqueIdentifier>
</Filter>
<Filter Include="hw">
<UniqueIdentifier>{dec3e9f1-0fc3-454e-ae70-78d866b5c3f8}</UniqueIdentifier>
</Filter>
<Filter Include="tcg">
<UniqueIdentifier>{b229bf2b-cc40-4135-b3b7-40c73bd9f597}</UniqueIdentifier>
</Filter>
<Filter Include="tcg\i386">
<UniqueIdentifier>{133a0d6a-6f71-4d4b-be6d-f90636aa02a2}</UniqueIdentifier>
</Filter>
<Filter Include="hw\sparc">
<UniqueIdentifier>{0a04b798-735c-4115-ab62-b6cfc772efed}</UniqueIdentifier>
</Filter>
<Filter Include="target-sparc">
<UniqueIdentifier>{10f0c533-e16b-4e31-b979-812af068bb36}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\qemu\fpu\softfloat.c">
<Filter>fpu</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\optimize.c">
<Filter>tcg</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\tcg.c">
<Filter>tcg</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\i386\tcg-target.c">
<Filter>tcg\i386</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\cpu-exec.c" />
<ClCompile Include="..\..\..\qemu\cpus.c" />
<ClCompile Include="..\..\..\qemu\cputlb.c" />
<ClCompile Include="..\..\..\qemu\exec.c" />
<ClCompile Include="..\..\..\qemu\ioport.c" />
<ClCompile Include="..\..\..\qemu\memory.c" />
<ClCompile Include="..\..\..\qemu\memory_mapping.c" />
<ClCompile Include="..\..\..\qemu\translate-all.c" />
<ClCompile Include="..\..\..\qemu\hw\sparc\leon3.c">
<Filter>hw\sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\fop_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\ldst_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\mmu_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\translate.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\win_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\cc_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\cpu.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\unicorn.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\int32_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-macros.h">
<Filter>fpu</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-specialize.h">
<Filter>fpu</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-ldst.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-null.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-op.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-opc.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-runtime.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\i386\tcg-target.h">
<Filter>tcg\i386</Filter>
</ClInclude>
<ClInclude Include="..\config-host.h" />
<ClInclude Include="..\mips-softmmu\config-target.h" />
<ClInclude Include="..\..\..\qemu\sparc.h" />
</ItemGroup>
</Project>

View file

@ -18,6 +18,51 @@
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\qemu\cpu-exec.c" />
<ClCompile Include="..\..\..\qemu\cpus.c" />
<ClCompile Include="..\..\..\qemu\cputlb.c" />
<ClCompile Include="..\..\..\qemu\exec.c" />
<ClCompile Include="..\..\..\qemu\fpu\softfloat.c" />
<ClCompile Include="..\..\..\qemu\hw\sparc64\sun4u.c" />
<ClCompile Include="..\..\..\qemu\ioport.c" />
<ClCompile Include="..\..\..\qemu\memory.c" />
<ClCompile Include="..\..\..\qemu\memory_mapping.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\cc_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\cpu.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\fop_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\int64_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\ldst_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\mmu_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\translate.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\unicorn64.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\vis_helper.c" />
<ClCompile Include="..\..\..\qemu\target-sparc\win_helper.c" />
<ClCompile Include="..\..\..\qemu\tcg\i386\tcg-target.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\optimize.c" />
<ClCompile Include="..\..\..\qemu\tcg\tcg.c" />
<ClCompile Include="..\..\..\qemu\translate-all.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-macros.h" />
<ClInclude Include="..\..\..\qemu\fpu\softfloat-specialize.h" />
<ClInclude Include="..\..\..\qemu\sparc64.h" />
<ClInclude Include="..\..\..\qemu\tcg\i386\tcg-target.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-ldst.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-null.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-op.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-opc.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg-runtime.h" />
<ClInclude Include="..\..\..\qemu\tcg\tcg.h" />
<ClInclude Include="..\config-host.h" />
<ClInclude Include="..\mips-softmmu\config-target.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8804AD29-E398-480C-AC0F-98EC1B7A51CB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>

View file

@ -1,2 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="target-sparc">
<UniqueIdentifier>{1f15e2b2-fae3-41e5-b787-70c44beb828c}</UniqueIdentifier>
</Filter>
<Filter Include="fpu">
<UniqueIdentifier>{ee6a3abf-6f14-47ab-8b40-f859d030230a}</UniqueIdentifier>
</Filter>
<Filter Include="hw">
<UniqueIdentifier>{4a271b0a-7736-4457-98f8-8c21ad4d2601}</UniqueIdentifier>
</Filter>
<Filter Include="tcg">
<UniqueIdentifier>{7c7b0370-fe65-4c21-94e6-f4561470087d}</UniqueIdentifier>
</Filter>
<Filter Include="tcg\i386">
<UniqueIdentifier>{51a4ddc6-4078-4db0-9b29-c68c558b2f93}</UniqueIdentifier>
</Filter>
<Filter Include="hw\sparc64">
<UniqueIdentifier>{46e355ab-da0b-431b-929b-8d77b3ab90bc}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\qemu\target-sparc\cc_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\cpu.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\fop_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\ldst_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\mmu_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\translate.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\win_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\vis_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\int64_helper.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\target-sparc\unicorn64.c">
<Filter>target-sparc</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\fpu\softfloat.c">
<Filter>fpu</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\optimize.c">
<Filter>tcg</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\tcg.c">
<Filter>tcg</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\tcg\i386\tcg-target.c">
<Filter>tcg\i386</Filter>
</ClCompile>
<ClCompile Include="..\..\..\qemu\translate-all.c" />
<ClCompile Include="..\..\..\qemu\memory_mapping.c" />
<ClCompile Include="..\..\..\qemu\memory.c" />
<ClCompile Include="..\..\..\qemu\ioport.c" />
<ClCompile Include="..\..\..\qemu\exec.c" />
<ClCompile Include="..\..\..\qemu\cputlb.c" />
<ClCompile Include="..\..\..\qemu\cpus.c" />
<ClCompile Include="..\..\..\qemu\cpu-exec.c" />
<ClCompile Include="..\..\..\qemu\hw\sparc64\sun4u.c">
<Filter>hw\sparc64</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-macros.h">
<Filter>fpu</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\fpu\softfloat-specialize.h">
<Filter>fpu</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-ldst.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-be-null.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-op.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-opc.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg-runtime.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\tcg.h">
<Filter>tcg</Filter>
</ClInclude>
<ClInclude Include="..\..\..\qemu\tcg\i386\tcg-target.h">
<Filter>tcg\i386</Filter>
</ClInclude>
<ClInclude Include="..\mips-softmmu\config-target.h" />
<ClInclude Include="..\config-host.h" />
<ClInclude Include="..\..\..\qemu\sparc64.h" />
</ItemGroup>
</Project>

View file

@ -237,7 +237,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__i386__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__i386__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_SPARC;UNICORN_HAS_X86</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>.;..;../../../include;../../../qemu;../../../qemu/include;../../../qemu/tcg</AdditionalIncludeDirectories>
<AdditionalOptions>/wd4018 /wd4244 /wd4267 %(AdditionalOptions)</AdditionalOptions>
@ -249,7 +249,7 @@
</Link>
<Lib>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;sparc-softmmu.lib;sparc64-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
</Lib>
<PreBuildEvent>
<Command>..\prebuild_script.bat</Command>
@ -261,7 +261,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__x86_64__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__x86_64__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_SPARC;UNICORN_HAS_X86</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>.;..;../../../include;../../../qemu;../../../qemu/include;../../../qemu/tcg</AdditionalIncludeDirectories>
<AdditionalOptions>/wd4018 /wd4244 /wd4267 %(AdditionalOptions)</AdditionalOptions>
@ -273,7 +273,7 @@
</Link>
<Lib>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;sparc-softmmu.lib;sparc64-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
</Lib>
<PreBuildEvent>
<Command>..\prebuild_script.bat</Command>
@ -287,7 +287,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__i386__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__i386__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_SPARC;UNICORN_HAS_X86</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>.;..;../../../include;../../../qemu;../../../qemu/include;../../../qemu/tcg</AdditionalIncludeDirectories>
<AdditionalOptions>/wd4018 /wd4244 /wd4267 %(AdditionalOptions)</AdditionalOptions>
@ -301,7 +301,7 @@
</Link>
<Lib>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;sparc-softmmu.lib;sparc64-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
</Lib>
<PreBuildEvent>
<Command>..\prebuild_script.bat</Command>
@ -315,7 +315,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__x86_64__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_X86</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;inline=__inline;__func__=__FUNCTION__;__x86_64__;UNICORN_HAS_MIPS;UNICORN_HAS_MIPS64;UNICORN_HAS_MIPSEL;UNICORN_HAS_MIPS64EL;UNICORN_HAS_SPARC;UNICORN_HAS_X86</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>.;..;../../../include;../../../qemu;../../../qemu/include;../../../qemu/tcg</AdditionalIncludeDirectories>
<AdditionalOptions>/wd4018 /wd4244 /wd4267 %(AdditionalOptions)</AdditionalOptions>
@ -329,7 +329,7 @@
</Link>
<Lib>
<AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;mips-softmmu.lib;mips64-softmmu.lib;mipsel-softmmu.lib;mips64el-softmmu.lib;sparc-softmmu.lib;sparc64-softmmu.lib;x86_64-softmmu.lib</AdditionalDependencies>
</Lib>
<PreBuildEvent>
<Command>..\prebuild_script.bat</Command>

View file

@ -58,10 +58,13 @@ static int leon3_generic_hw_init(struct uc_struct *uc, MachineState *machine)
void leon3_machine_init(struct uc_struct *uc)
{
static QEMUMachine leon3_generic_machine = {
.name = "leon3_generic",
.init = leon3_generic_hw_init,
.is_default = 1,
.arch = UC_ARCH_SPARC,
NULL,
"leon3_generic",
leon3_generic_hw_init,
NULL,
0,
1,
UC_ARCH_SPARC,
};
//printf(">>> leon3_machine_init\n");

View file

@ -50,11 +50,13 @@ static int sun4u_init(struct uc_struct *uc, MachineState *machine)
void sun4u_machine_init(struct uc_struct *uc)
{
static QEMUMachine sun4u_machine = {
.name = "sun4u",
.init = sun4u_init,
.max_cpus = 1, // XXX for now
.is_default = 1,
.arch = UC_ARCH_SPARC,
NULL,
"sun4u",
sun4u_init,
NULL,
1, // XXX for now
1,
UC_ARCH_SPARC,
};
qemu_register_machine(uc, &sun4u_machine, TYPE_MACHINE, NULL);

View file

@ -438,35 +438,35 @@ typedef struct CCTable {
static const CCTable icc_table[CC_OP_NB] = {
/* CC_OP_DYNAMIC should never happen */
[CC_OP_DYNAMIC] = { compute_null, compute_null },
[CC_OP_FLAGS] = { compute_all_flags, compute_C_flags },
[CC_OP_DIV] = { compute_all_div, compute_C_div },
[CC_OP_ADD] = { compute_all_add, compute_C_add },
[CC_OP_ADDX] = { compute_all_addx, compute_C_addx },
[CC_OP_TADD] = { compute_all_tadd, compute_C_add },
[CC_OP_TADDTV] = { compute_all_taddtv, compute_C_add },
[CC_OP_SUB] = { compute_all_sub, compute_C_sub },
[CC_OP_SUBX] = { compute_all_subx, compute_C_subx },
[CC_OP_TSUB] = { compute_all_tsub, compute_C_sub },
[CC_OP_TSUBTV] = { compute_all_tsubtv, compute_C_sub },
[CC_OP_LOGIC] = { compute_all_logic, compute_C_logic },
{ compute_null, compute_null },
{ compute_all_flags, compute_C_flags },
{ compute_all_div, compute_C_div },
{ compute_all_add, compute_C_add },
{ compute_all_addx, compute_C_addx },
{ compute_all_tadd, compute_C_add },
{ compute_all_taddtv, compute_C_add },
{ compute_all_sub, compute_C_sub },
{ compute_all_subx, compute_C_subx },
{ compute_all_tsub, compute_C_sub },
{ compute_all_tsubtv, compute_C_sub },
{ compute_all_logic, compute_C_logic },
};
#ifdef TARGET_SPARC64
static const CCTable xcc_table[CC_OP_NB] = {
/* CC_OP_DYNAMIC should never happen */
[CC_OP_DYNAMIC] = { compute_null, compute_null },
[CC_OP_FLAGS] = { compute_all_flags_xcc, compute_C_flags_xcc },
[CC_OP_DIV] = { compute_all_logic_xcc, compute_C_logic },
[CC_OP_ADD] = { compute_all_add_xcc, compute_C_add_xcc },
[CC_OP_ADDX] = { compute_all_addx_xcc, compute_C_addx_xcc },
[CC_OP_TADD] = { compute_all_add_xcc, compute_C_add_xcc },
[CC_OP_TADDTV] = { compute_all_add_xcc, compute_C_add_xcc },
[CC_OP_SUB] = { compute_all_sub_xcc, compute_C_sub_xcc },
[CC_OP_SUBX] = { compute_all_subx_xcc, compute_C_subx_xcc },
[CC_OP_TSUB] = { compute_all_sub_xcc, compute_C_sub_xcc },
[CC_OP_TSUBTV] = { compute_all_sub_xcc, compute_C_sub_xcc },
[CC_OP_LOGIC] = { compute_all_logic_xcc, compute_C_logic },
{ compute_null, compute_null },
{ compute_all_flags_xcc, compute_C_flags_xcc },
{ compute_all_logic_xcc, compute_C_logic },
{ compute_all_add_xcc, compute_C_add_xcc },
{ compute_all_addx_xcc, compute_C_addx_xcc },
{ compute_all_add_xcc, compute_C_add_xcc },
{ compute_all_add_xcc, compute_C_add_xcc },
{ compute_all_sub_xcc, compute_C_sub_xcc },
{ compute_all_subx_xcc, compute_C_subx_xcc },
{ compute_all_sub_xcc, compute_C_sub_xcc },
{ compute_all_sub_xcc, compute_C_sub_xcc },
{ compute_all_logic_xcc, compute_C_logic },
};
#endif

View file

@ -158,338 +158,378 @@ void cpu_sparc_set_id(CPUSPARCState *env, unsigned int cpu)
static const sparc_def_t sparc_defs[] = {
#ifdef TARGET_SPARC64
{
.name = "Fujitsu Sparc64",
.iu_version = ((0x04ULL << 48) | (0x02ULL << 32) | (0ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 4,
.maxtl = 4,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu Sparc64",
((0x04ULL << 48) | (0x02ULL << 32) | (0ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
4,
4,
},
{
.name = "Fujitsu Sparc64 III",
.iu_version = ((0x04ULL << 48) | (0x03ULL << 32) | (0ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 5,
.maxtl = 4,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu Sparc64 III",
((0x04ULL << 48) | (0x03ULL << 32) | (0ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
5,
4,
},
{
.name = "Fujitsu Sparc64 IV",
.iu_version = ((0x04ULL << 48) | (0x04ULL << 32) | (0ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu Sparc64 IV",
((0x04ULL << 48) | (0x04ULL << 32) | (0ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Fujitsu Sparc64 V",
.iu_version = ((0x04ULL << 48) | (0x05ULL << 32) | (0x51ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu Sparc64 V",
((0x04ULL << 48) | (0x05ULL << 32) | (0x51ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "TI UltraSparc I",
.iu_version = ((0x17ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"TI UltraSparc I",
((0x17ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "TI UltraSparc II",
.iu_version = ((0x17ULL << 48) | (0x11ULL << 32) | (0x20ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"TI UltraSparc II",
((0x17ULL << 48) | (0x11ULL << 32) | (0x20ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "TI UltraSparc IIi",
.iu_version = ((0x17ULL << 48) | (0x12ULL << 32) | (0x91ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"TI UltraSparc IIi",
((0x17ULL << 48) | (0x12ULL << 32) | (0x91ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "TI UltraSparc IIe",
.iu_version = ((0x17ULL << 48) | (0x13ULL << 32) | (0x14ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"TI UltraSparc IIe",
((0x17ULL << 48) | (0x13ULL << 32) | (0x14ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc III",
.iu_version = ((0x3eULL << 48) | (0x14ULL << 32) | (0x34ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Sun UltraSparc III",
((0x3eULL << 48) | (0x14ULL << 32) | (0x34ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc III Cu",
.iu_version = ((0x3eULL << 48) | (0x15ULL << 32) | (0x41ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_3,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Sun UltraSparc III Cu",
((0x3eULL << 48) | (0x15ULL << 32) | (0x41ULL << 24)),
0x00000000,
mmu_us_3,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc IIIi",
.iu_version = ((0x3eULL << 48) | (0x16ULL << 32) | (0x34ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Sun UltraSparc IIIi",
((0x3eULL << 48) | (0x16ULL << 32) | (0x34ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc IV",
.iu_version = ((0x3eULL << 48) | (0x18ULL << 32) | (0x31ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_4,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Sun UltraSparc IV",
((0x3eULL << 48) | (0x18ULL << 32) | (0x31ULL << 24)),
0x00000000,
mmu_us_4,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc IV+",
.iu_version = ((0x3eULL << 48) | (0x19ULL << 32) | (0x22ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_CMT,
"Sun UltraSparc IV+",
((0x3eULL << 48) | (0x19ULL << 32) | (0x22ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES | CPU_FEATURE_CMT,
8,
5,
},
{
.name = "Sun UltraSparc IIIi+",
.iu_version = ((0x3eULL << 48) | (0x22ULL << 32) | (0ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_3,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"Sun UltraSparc IIIi+",
((0x3eULL << 48) | (0x22ULL << 32) | (0ULL << 24)),
0x00000000,
mmu_us_3,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
{
.name = "Sun UltraSparc T1",
"Sun UltraSparc T1",
/* defined in sparc_ifu_fdp.v and ctu.h */
.iu_version = ((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_sun4v,
.nwindows = 8,
.maxtl = 6,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24)),
0x00000000,
mmu_sun4v,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
| CPU_FEATURE_GL,
8,
6,
},
{
.name = "Sun UltraSparc T2",
"Sun UltraSparc T2",
/* defined in tlu_asi_ctl.v and n2_revid_cust.v */
.iu_version = ((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_sun4v,
.nwindows = 8,
.maxtl = 6,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24)),
0x00000000,
mmu_sun4v,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
| CPU_FEATURE_GL,
8,
6,
},
{
.name = "NEC UltraSparc I",
.iu_version = ((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
.fpu_version = 0x00000000,
.mmu_version = mmu_us_12,
.nwindows = 8,
.maxtl = 5,
.features = CPU_DEFAULT_FEATURES,
"NEC UltraSparc I",
((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)),
0x00000000,
mmu_us_12,
0,0,0,0,0,0,
CPU_DEFAULT_FEATURES,
8,
5,
},
#else
{
.name = "Fujitsu MB86904",
.iu_version = 0x04 << 24, /* Impl 0, ver 4 */
.fpu_version = 4 << 17, /* FPU version 4 (Meiko) */
.mmu_version = 0x04 << 24, /* Impl 0, ver 4 */
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0x00ffffc0,
.mmu_cxr_mask = 0x000000ff,
.mmu_sfsr_mask = 0x00016fff,
.mmu_trcr_mask = 0x00ffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu MB86904",
0x04 << 24, /* Impl 0, ver 4 */
4 << 17, /* FPU version 4 (Meiko) */
0x04 << 24, /* Impl 0, ver 4 */
0x00004000,
0x00ffffc0,
0x000000ff,
0x00016fff,
0x00ffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "Fujitsu MB86907",
.iu_version = 0x05 << 24, /* Impl 0, ver 5 */
.fpu_version = 4 << 17, /* FPU version 4 (Meiko) */
.mmu_version = 0x05 << 24, /* Impl 0, ver 5 */
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x000000ff,
.mmu_sfsr_mask = 0x00016fff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"Fujitsu MB86907",
0x05 << 24, /* Impl 0, ver 5 */
4 << 17, /* FPU version 4 (Meiko) */
0x05 << 24, /* Impl 0, ver 5 */
0x00004000,
0xffffffc0,
0x000000ff,
0x00016fff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI MicroSparc I",
.iu_version = 0x41000000,
.fpu_version = 4 << 17,
.mmu_version = 0x41000000,
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0x007ffff0,
.mmu_cxr_mask = 0x0000003f,
.mmu_sfsr_mask = 0x00016fff,
.mmu_trcr_mask = 0x0000003f,
.nwindows = 7,
.features = CPU_FEATURE_FLOAT | CPU_FEATURE_SWAP | CPU_FEATURE_MUL |
"TI MicroSparc I",
0x41000000,
4 << 17,
0x41000000,
0x00004000,
0x007ffff0,
0x0000003f,
0x00016fff,
0x0000003f,
0,
CPU_FEATURE_FLOAT | CPU_FEATURE_SWAP | CPU_FEATURE_MUL |
CPU_FEATURE_DIV | CPU_FEATURE_FLUSH | CPU_FEATURE_FSQRT |
CPU_FEATURE_FMUL,
7,
0,
},
{
.name = "TI MicroSparc II",
.iu_version = 0x42000000,
.fpu_version = 4 << 17,
.mmu_version = 0x02000000,
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0x00ffffc0,
.mmu_cxr_mask = 0x000000ff,
.mmu_sfsr_mask = 0x00016fff,
.mmu_trcr_mask = 0x00ffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI MicroSparc II",
0x42000000,
4 << 17,
0x02000000,
0x00004000,
0x00ffffc0,
0x000000ff,
0x00016fff,
0x00ffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI MicroSparc IIep",
.iu_version = 0x42000000,
.fpu_version = 4 << 17,
.mmu_version = 0x04000000,
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0x00ffffc0,
.mmu_cxr_mask = 0x000000ff,
.mmu_sfsr_mask = 0x00016bff,
.mmu_trcr_mask = 0x00ffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI MicroSparc IIep",
0x42000000,
4 << 17,
0x04000000,
0x00004000,
0x00ffffc0,
0x000000ff,
0x00016bff,
0x00ffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc 40", /* STP1020NPGA */
.iu_version = 0x41000000, /* SuperSPARC 2.x */
.fpu_version = 0 << 17,
.mmu_version = 0x00000800, /* SuperSPARC 2.x, no MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc 40", /* STP1020NPGA */
0x41000000, /* SuperSPARC 2.x */
0 << 17,
0x00000800, /* SuperSPARC 2.x, no MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc 50", /* STP1020PGA */
.iu_version = 0x40000000, /* SuperSPARC 3.x */
.fpu_version = 0 << 17,
.mmu_version = 0x01000800, /* SuperSPARC 3.x, no MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc 50", /* STP1020PGA */
0x40000000, /* SuperSPARC 3.x */
0 << 17,
0x01000800, /* SuperSPARC 3.x, no MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc 51",
.iu_version = 0x40000000, /* SuperSPARC 3.x */
.fpu_version = 0 << 17,
.mmu_version = 0x01000000, /* SuperSPARC 3.x, MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.mxcc_version = 0x00000104,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc 51",
0x40000000, /* SuperSPARC 3.x */
0 << 17,
0x01000000, /* SuperSPARC 3.x, MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0x00000104,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc 60", /* STP1020APGA */
.iu_version = 0x40000000, /* SuperSPARC 3.x */
.fpu_version = 0 << 17,
.mmu_version = 0x01000800, /* SuperSPARC 3.x, no MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc 60", /* STP1020APGA */
0x40000000, /* SuperSPARC 3.x */
0 << 17,
0x01000800, /* SuperSPARC 3.x, no MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc 61",
.iu_version = 0x44000000, /* SuperSPARC 3.x */
.fpu_version = 0 << 17,
.mmu_version = 0x01000000, /* SuperSPARC 3.x, MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.mxcc_version = 0x00000104,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc 61",
0x44000000, /* SuperSPARC 3.x */
0 << 17,
0x01000000, /* SuperSPARC 3.x, MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0x00000104,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "TI SuperSparc II",
.iu_version = 0x40000000, /* SuperSPARC II 1.x */
.fpu_version = 0 << 17,
.mmu_version = 0x08000000, /* SuperSPARC II 1.x, MXCC */
.mmu_bm = 0x00002000,
.mmu_ctpr_mask = 0xffffffc0,
.mmu_cxr_mask = 0x0000ffff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.mxcc_version = 0x00000104,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
"TI SuperSparc II",
0x40000000, /* SuperSPARC II 1.x */
0 << 17,
0x08000000, /* SuperSPARC II 1.x, MXCC */
0x00002000,
0xffffffc0,
0x0000ffff,
0xffffffff,
0xffffffff,
0x00000104,
CPU_DEFAULT_FEATURES,
8,
0,
},
{
.name = "LEON2",
.iu_version = 0xf2000000,
.fpu_version = 4 << 17, /* FPU version 4 (Meiko) */
.mmu_version = 0xf2000000,
.mmu_bm = 0x00004000,
.mmu_ctpr_mask = 0x007ffff0,
.mmu_cxr_mask = 0x0000003f,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN,
"LEON2",
0xf2000000,
4 << 17, /* FPU version 4 (Meiko) */
0xf2000000,
0x00004000,
0x007ffff0,
0x0000003f,
0xffffffff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN,
8,
0,
},
{
.name = "LEON3",
.iu_version = 0xf3000000,
.fpu_version = 4 << 17, /* FPU version 4 (Meiko) */
.mmu_version = 0xf3000000,
.mmu_bm = 0x00000000,
.mmu_ctpr_mask = 0xfffffffc,
.mmu_cxr_mask = 0x000000ff,
.mmu_sfsr_mask = 0xffffffff,
.mmu_trcr_mask = 0xffffffff,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN |
"LEON3",
0xf3000000,
4 << 17, /* FPU version 4 (Meiko) */
0xf3000000,
0x00000000,
0xfffffffc,
0x000000ff,
0xffffffff,
0xffffffff,
0,
CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN |
CPU_FEATURE_ASR17 | CPU_FEATURE_CACHE_CTRL | CPU_FEATURE_POWERDOWN |
CPU_FEATURE_CASA,
8,
0,
},
#endif
};
@ -857,16 +897,25 @@ static void sparc_cpu_class_init(struct uc_struct *uc, ObjectClass *oc, void *da
void sparc_cpu_register_types(void *opaque)
{
TypeInfo sparc_cpu_type_info = {
.name = TYPE_SPARC_CPU,
.parent = TYPE_CPU,
.instance_userdata = opaque,
.instance_size = sizeof(SPARCCPU),
.instance_init = sparc_cpu_initfn,
.instance_finalize = sparc_cpu_uninitfn,
.abstract = false,
.class_size = sizeof(SPARCCPUClass),
.class_init = sparc_cpu_class_init,
const TypeInfo sparc_cpu_type_info = {
TYPE_SPARC_CPU,
TYPE_CPU,
sizeof(SPARCCPUClass),
sizeof(SPARCCPU),
opaque,
sparc_cpu_initfn,
NULL,
sparc_cpu_uninitfn,
NULL,
sparc_cpu_class_init,
NULL,
NULL,
false,
};
//printf(">>> sparc_cpu_register_types\n");

View file

@ -63,9 +63,9 @@ void sparc_cpu_do_interrupt(CPUState *cs)
break;
case TT_TFAULT:
case TT_DFAULT:
case TT_TMISS ... TT_TMISS + 3:
case TT_DMISS ... TT_DMISS + 3:
case TT_DPROT ... TT_DPROT + 3:
case TT_TMISS: case TT_TMISS+1: case TT_TMISS+2: case TT_TMISS+3:
case TT_DMISS: case TT_DMISS+1: case TT_DMISS+2: case TT_DMISS+3:
case TT_DPROT: case TT_DPROT+1: case TT_DPROT+2: case TT_DPROT+3:
cpu_change_pstate(env, PS_PEF | PS_PRIV | PS_MG);
break;
default:

View file

@ -558,7 +558,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size,
break;
}
break;
case 0x21 ... 0x2f: /* MMU passthrough, 0x100000000 to 0xfffffffff */
/* MMU passthrough, 0x100000000 to 0xfffffffff */
case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:
switch (size) {
case 1:
ret = ldub_phys(cs->as, (hwaddr)addr
@ -964,7 +966,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val, int asi,
}
}
break;
case 0x21 ... 0x2f: /* MMU passthrough, 0x100000000 to 0xfffffffff */
/* MMU passthrough, 0x100000000 to 0xfffffffff */
case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:
{
switch (size) {
case 1:
@ -1052,17 +1056,18 @@ static inline int is_translating_asi(int asi)
/* Ultrasparc IIi translating asi
- note this list is defined by cpu implementation
*/
switch (asi) {
case 0x04 ... 0x11:
case 0x16 ... 0x19:
case 0x1E ... 0x1F:
case 0x24 ... 0x2C:
case 0x70 ... 0x73:
case 0x78 ... 0x79:
case 0x80 ... 0xFF:
if( (asi >= 0x04 && asi <= 0x11) ||
(asi >= 0x16 && asi <= 0x19) ||
(asi >= 0x1E && asi <= 0x1F) ||
(asi >= 0x24 && asi <= 0x2C) ||
(asi >= 0x70 && asi <= 0x73) ||
(asi >= 0x78 && asi <= 0x79) ||
(asi >= 0x80 && asi <= 0xFF) )
{
return 1;
default:
}
else
{
return 0;
}
#else
@ -1303,7 +1308,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size,
mmu_idx = (asi & 1) ? MMU_USER_SECONDARY_IDX : MMU_USER_IDX;
}
if (cpu_get_phys_page_nofault(env, addr, mmu_idx) == -1ULL) {
if (cpu_get_phys_page_nofault(env, addr, mmu_idx) == (0-1ULL)) {
#ifdef DEBUG_ASI
dump_asi("read ", last_addr, asi, size, ret);
#endif

View file

@ -2833,14 +2833,14 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn, bool hook_ins
switch(rs1) {
case 0: /* rdy */
#ifndef TARGET_SPARC64
case 0x01 ... 0x0e: /* undefined in the SPARCv8
manual, rdy on the microSPARC
II */
case 0x0f: /* stbar in the SPARCv8 manual,
rdy on the microSPARC II */
case 0x10 ... 0x1f: /* implementation-dependent in the
SPARCv8 manual, rdy on the
microSPARC II */
/* undefined in the SPARCv8 manual, rdy on the microSPARC II */
case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e:
/* stbar in the SPARCv8 manual, rdy on the microSPARC II */
case 0x0f:
/* implementation-dependent in the SPARCv8 manual, rdy on the microSPARC II */
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:
/* Read Asr17 */
if (rs1 == 0x11 && dc->def->features & CPU_FEATURE_ASR17) {
TCGv t = gen_dest_gpr(dc, rd);
@ -3747,14 +3747,13 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn, bool hook_ins
tcg_gen_andi_tl(tcg_ctx, *(TCGv *)tcg_ctx->cpu_y, cpu_tmp0, 0xffffffff);
break;
#ifndef TARGET_SPARC64
case 0x01 ... 0x0f: /* undefined in the
SPARCv8 manual, nop
on the microSPARC
II */
case 0x10 ... 0x1f: /* implementation-dependent
in the SPARCv8
manual, nop on the
microSPARC II */
/* undefined in the SPARCv8 manual, nop on the microSPARC II */
case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
/* implementation-dependent in the SPARCv8 manual, nop on the microSPARC II */
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:
if ((rd == 0x13) && (dc->def->features &
CPU_FEATURE_POWERDOWN)) {
/* LEON3 power-down */