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

📄 armtest.cpp

📁 浙江大学的悟空嵌入式系统模拟器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	CPPUNIT_ASSERT( r2 == 0xc00001c8 );
	CPPUNIT_ASSERT( r3 == 0xffffff41 );
	CPPUNIT_ASSERT( cpsr>>31== 1);
    CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0x20   rs=0xF000000F    rdlo =156  rdhi=-189
	  Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "smlal_7");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	
//-------------------------------------------------------- use PC as rd
#endif


//____________________________________________________________________________
	#ifdef  TEST_UMULL
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull");
	( (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 == 0x5);
	CPPUNIT_ASSERT( cpsr>>31== 0);
    CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);

//-------------------------------------------------------- rm=0xFFFFFFFF   rs=6  
    Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_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 == 0xFFFFFFFE);
	CPPUNIT_ASSERT( cpsr>>31== 1);
    CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=0xFFFFFFFF      rs=-1   
	  Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_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 == 0x2 );
    CPPUNIT_ASSERT( r3 == 0x0);
	CPPUNIT_ASSERT( cpsr>>31== 0);
    CPPUNIT_ASSERT( (cpsr>>30 & 0x01) == 0);
//-------------------------------------------------------- rm=1    rs=2 
	  Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umull_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=0x1   rs=0
#endif


//____________________________________________________________________________
	#ifdef  TEST_UMLAL
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "umlal");
	( (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 == 0x6);
	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", "umlal_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 == 0x7);
	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", "umlal_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 == 0xFFFFFFFA);
	CPPUNIT_ASSERT( cpsr>>31== 1);
    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", "umlal_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 == 0x5 );
	CPPUNIT_ASSERT( cpsr>>31== 0);
    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", "umlal_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

#endif

//____________________________________________________________________________
	#ifdef  TEST_MRS
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mrs");
	( (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 == cpsr );
//-------------------------------------------------------- 
    Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr1_1");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();

	CPPUNIT_ASSERT( (cpsr & 0xFF)== 0x7);
//-------------------------------------------------------- 
    Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr1_2");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();

	CPPUNIT_ASSERT( (spsr & 0xFF0000)== 0xA0000);
//--------------------------------------------------------  
	  Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr2_1");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	cpsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_cpsr().convert_to_int();

    CPPUNIT_ASSERT( (cpsr & 0xFF000000)== 0xA000000);
//-------------------------------------------------------- 
	  Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "msr2_2");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();

	CPPUNIT_ASSERT( (spsr & 0xFF00)== 0xA00);
//--------------------------------------------------------  
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "mrs_2");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(2,r2);
	spsr = ( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->get_spsr().convert_to_int();

	CPPUNIT_ASSERT( r2 == spsr );
#endif


//____________________________________________________________________________
#ifdef TEST_STR
//-------------------------------------------------------- zero offset
//            MOV     r0,#0x10000002 
//            MOV     r1,#0x000000E0   
//            STR     r0,[r1]
	std::vector<u8> buf;

	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_1.axf");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
		     get_mmu().access(Memory_32Bit::MEMORY_READ,0xe0,4,buf);
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);

	u8 buf0 = buf[0];
	u8 buf1 = buf[1];
	u8 buf2 = buf[2];
	u8 buf3 = buf[3];
	CPPUNIT_ASSERT( buf0 == 0x02);
    CPPUNIT_ASSERT( buf1 == 0x00);
	CPPUNIT_ASSERT( buf2 == 0x00);
	CPPUNIT_ASSERT( buf3 == 0x10);
	CPPUNIT_ASSERT( r1 == 0x000000E0);
//-------------------------------------------------------- pre-indexed offset
//            MOV     r0,#0x30000004 
//            MOV     r1,#0x000000E1   
//            STR     r0,[r1,#0x3]
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_2.axf");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	std::vector<u8> STR_2_buf;
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
		     get_mmu().access(Memory_32Bit::MEMORY_READ,0xe4,4,STR_2_buf);
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);

	u8 STR_2_buf0 = STR_2_buf[0];
	u8 STR_2_buf1 = STR_2_buf[1];
	u8 STR_2_buf2 = STR_2_buf[2];
	u8 STR_2_buf3 = STR_2_buf[3];
	CPPUNIT_ASSERT( STR_2_buf0 == 0x04);
    CPPUNIT_ASSERT( STR_2_buf1 == 0x00);
	CPPUNIT_ASSERT( STR_2_buf2 == 0x00);
	CPPUNIT_ASSERT( STR_2_buf3 == 0x30);
	CPPUNIT_ASSERT( r1 == 0x000000E1);
//-------------------------------------------------------- pre-indexed offset with write-back
//	   MOV     r0,#0x10000002 
//     MOV     r1,#0x000000E1   
//     STR     r0,[r1,#0x00000003]!
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_3.axf");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	std::vector<u8> STR_3_buf;
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
		     get_mmu().access(Memory_32Bit::MEMORY_READ,0xe4,4,STR_3_buf);
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);
	u8 STR_3_buf0 = STR_3_buf[0];
	u8 STR_3_buf1 = STR_3_buf[1];
	u8 STR_3_buf2 = STR_3_buf[2];
	u8 STR_3_buf3 = STR_3_buf[3];
	CPPUNIT_ASSERT( STR_3_buf0 == 0x02);
    CPPUNIT_ASSERT( STR_3_buf1 == 0x00);
	CPPUNIT_ASSERT( STR_3_buf2 == 0x00);
	CPPUNIT_ASSERT( STR_3_buf3 == 0x10);
	CPPUNIT_ASSERT(  r1 == 0x000000E4);
//-------------------------------------------------------- post-indexed offset
//	   MOV     r0,#0x10000002 
//     MOV     r1,#0x000000E0   
//     STR     r0,[r1],#0x00000002
	Core::Wukong_Get_System().load_binary((Core::Binary_Loader &)(*loader), "ARM", "str_4.axf");
	( (ARM::CPU_7TDMI *) Core::Wukong_Get_System().get_cpu() )->run();
	std::vector<u8> STR_4_buf;
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->\
		     get_mmu().access(Memory_32Bit::MEMORY_READ,0xe0,4,STR_4_buf);
	( (ARM::CPU_7TDMI *)Core::Wukong_Get_System().get_cpu() )->read_register(1,r1);

	u8 STR_4_buf0 = STR_4_buf[0];
	u8 STR_4_buf1 = STR_4_buf[1];
	u8 STR_4_buf2 = STR_4_buf[2];
	u8 STR_4_buf3 = STR_4_buf[3];
	CPPUNIT_ASSERT( STR_4_buf0 == 0x02);
    CPPUNIT_ASSERT( STR_4_buf1 == 0x00);
	CPPUNIT_ASSERT( STR_4_buf2 == 0x00);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -