📄 armtest.cpp
字号:
#include "ARMTest.h"
#include "arm_util.hpp"
static std::string arch_name = "ARM";
//static std::string conf_file = "AT91X40.conf";
//static std::string conf_file = "EP7312 with lcd.conf";
static std::string conf_file = "PXA_Lubbock.conf";
//static std::string conf_file = "EP7312.conf";
//static std::string binary_file = "1.bin";
CPPUNIT_TEST_SUITE_REGISTRATION( Integrate_Test );
void Integrate_Test::setUp()
{
Core::Wukong_Get_System().load_config(arch_name, conf_file);
Core::Config_File * cf = Core::Wukong_Get_System().get_config();
std::string cpu_name, board_name, loader_name,device_name,device1_name;
cf->read("/cpu/name", cpu_name);
cf->read("/board/name", board_name);
cf->read("/loader/name", loader_name);
cf->read("/device/0/name", device_name);
//for nic8019
//cf->read("/device/1/name", device1_name);
Core::Module * cpu = Core::Module_Manager::create_module(cpu_name);
Core::Module * board = Core::Module_Manager::create_module(board_name);
loader = Core::Module_Manager::create_module(loader_name);
Core::Module * device = Core::Module_Manager::create_module(device_name);
//for nic8019
//Core::Module * device1 = Core::Module_Manager::create_module(device1_name);
Core::Wukong_Get_System().install_cpu((Core::Part *)cpu);
Core::Wukong_Get_System().install_board((Core::Part *)board);
Core::Wukong_Get_System().install_loader((Core::Binary_Loader *)loader);
Core::Wukong_Get_System().install_device((Core::Part *)device);
//for nic8019
//Core::Wukong_Get_System().install_device((Core::Part *)device1);
Core::Wukong_Get_System().reset();
}
void Integrate_Test::tearDown()
{
if(loader)
delete loader;
}
void Integrate_Test::test_mul()
{
u32 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,cpsr,spsr;
#ifdef TEST_MUL
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
CPPUNIT_ASSERT( r2 == 2 );
//-------------------------------------------------------- rm=1 rs=2
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul_2");
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
CPPUNIT_ASSERT( (signed long)r2 == -2 );
//-------------------------------------------------------- rm=1 rs=-2
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul_3");
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( (signed long)r2 == -2 );
CPPUNIT_ASSERT( cpsr>>31 == 1);
CPPUNIT_ASSERT( (cpsr>>30 &0x01) == 0);
//-------------------------------------------------------- rm=1 rs=-2 with S
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul_4");
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rs = 0 with S
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul_5");
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 1 );
CPPUNIT_ASSERT( cpsr>>31 == 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm =rs =#0xFFFFFFFF reslut>32bits
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mul_6");
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->run();
//-------------------------------------------------------- use PC as rd
#endif
//____________________________________________________________________________
#ifdef TEST_MLA
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mla_1");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r3 == 0x65 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=10 rs=10 rn=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mla_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r3 == 0xFFFFFFF9 );
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=0x6 rn=0xFFFFFFFF
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mla_3");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r3 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rm=10 rs=-10 rn=100
#endif
//____________________________________________________________________________
#ifdef TEST_SMULL
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smull_1");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xFFFFFFFA );
CPPUNIT_ASSERT( r3 == 0xFFFFFFFF );
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smull_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0x1);
CPPUNIT_ASSERT( r3 == 0x0);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=-1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smull_3");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xEFFFFF01 );
CPPUNIT_ASSERT( r3 == 0x0000000F );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0x0FFFFFFF rs=0x000000FF
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smull_4");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0 );
CPPUNIT_ASSERT( r3 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rm=0x0FFFFFFF rs=0
#endif
//____________________________________________________________________________
#ifdef TEST_SMLAL
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_1");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xFFFFFFFB );
CPPUNIT_ASSERT( r3 == 0x0);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =1 rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_2");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xf9);
CPPUNIT_ASSERT( r3 == 0x1);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =0xff rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_3");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0x105 );
CPPUNIT_ASSERT( r3 == 0x1);
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=-6 rdlo =0xff rdhi=1
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_4");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0xF9 );
CPPUNIT_ASSERT( r3 == 0xFFFFFFFF );
CPPUNIT_ASSERT( cpsr>>31== 1);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=6 rdlo =0xff rdhi=0xffffffff
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_5");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
CPPUNIT_ASSERT( r2 == 0 );
CPPUNIT_ASSERT( r3 == 0 );
CPPUNIT_ASSERT( cpsr>>31== 0);
CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 1);
//-------------------------------------------------------- rm=0xFFFFFFFF rs=0 rdlo =0 rdhi=0
Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_6");
( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(3,r3);
cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -