⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armtest.cpp

📁 浙江大学的悟空嵌入式系统模拟器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#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 + -