www.pudn.com > HEC-win32.zip > load.c


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+                                                                   + 
+  load.c - this file implements load instructions                  + 
+				LBI, LWI, LDI, LQI, LF1I, LF2I						+ 
+				LAD, LAI											+ 
+               LB, LW, LD, LQ, LF1, LF2			     			+ 
+                                                                   + 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
 
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+  macros                                                           + 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
 
/*#define DBG_RUN		1*/ 
 
#ifdef DBG_RUN 
#define DBG_RUN0(str);				printf("run(): "); printf(str); 
#define DBG_RUN1(str,arg1);			printf("run(): "); printf(str,arg1); 
#else 
#define DBG_RUN0(str); 
#define DBG_RUN1(str,arg1);				 
#endif	 
 
/* 
	LBI $r1, byte constant ->  BBB   
	 
	first byte	= instruction 
	second byte = register to put constant into 
	third byte	= constant to place in register 
*/ 
 
#define HANDLE_LBI();	DBG_RUN0("Optimized HANDLE_LBI\n"); \ 
						R[RAM[R[$IP]+1]]=(S1)RAM[R[$IP]+2]; R[$IP]=R[$IP]+3; 
					   
/*-----------------------------------------------------------------*/ 
 
 
#define HANDLE_LWI();	DBG_RUN0("Optimized HANDLE_LWI\n"); \ 
						R[RAM[R[$IP]+1]]=(S2)*((S2*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+4; 
 
/*-----------------------------------------------------------------*/ 
 
 
#define HANDLE_LDI();	DBG_RUN0("Optimized HANDLE_LDI\n"); \ 
						R[RAM[R[$IP]+1]]=(S4)*((S4*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+6; 
 
/*-----------------------------------------------------------------*/ 
 
 
#define HANDLE_LQI();	DBG_RUN0("Optimized HANDLE_LQI\n"); \ 
						R[RAM[R[$IP]+1]]=(S8)*((S8*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+10; 
 
/*-----------------------------------------------------------------*/ 
 
#define HANDLE_LF1I();	DBG_RUN0("Optimized HANDLE_LF1I\n"); \ 
						Rf[RAM[R[$IP]+1]]=(F4)*((F4*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+6; 
 
/*-----------------------------------------------------------------*/ 
 
#define HANDLE_LF2I();	DBG_RUN0("Optimized HANDLE_LF2I\n"); \ 
						Rd[RAM[R[$IP]+1]]=(F8)*((F8*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+10; 
 
/*-----------------------------------------------------------------*/ 
 
/* LAD $r1, address */  
 
#define HANDLE_LAD();	DBG_RUN0("Optimized HANDLE_LAD\n"); \ 
						R[RAM[R[$IP]+1]]=(U8)*((U8*)&RAM[R[$IP]+2]);\ 
						badAddress(R[RAM[R[$IP]+1]],R[$IP]); R[$IP]=R[$IP]+10; 
 
/*-----------------------------------------------------------------*/ 
 
/* LAI $r1, $r2, qword*/  
 
#define HANDLE_LAI();	DBG_RUN0("Optimized HANDLE_LAI\n"); \ 
						R[RAM[R[$IP]+1]]=(R[RAM[R[$IP]+2]])+((S8)*((S8*)&RAM[R[$IP]+3]));\ 
						badAddress(R[RAM[R[$IP]+1]],R[$IP]); R[$IP]=R[$IP]+11; 
 
/*-----------------------------------------------------------------*/ 
 
/* 
	LB $r1, $r2 ->  BBB   
	 
	first byte = instruction 
	second byte = register to put byte into 
	third byte = register containing address where byte is located  
*/ 
 
#define HANDLE_LB();	DBG_RUN0("Optimized HANDLE_LB\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						R[RAM[R[$IP]+1]] = (S8)(*((S1*)&RAM[R[RAM[R[$IP]+2]]])); \ 
						R[$IP]=R[$IP]+3; 
 
/*-----------------------------------------------------------------*/ 
 
#define HANDLE_LW();	DBG_RUN0("Optimized HANDLE_LW\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						R[RAM[R[$IP]+1]] = (S8)(*((S2*)&RAM[(U8)R[RAM[R[$IP]+2]]])); \ 
						R[$IP]=R[$IP]+3; 
 
/*-----------------------------------------------------------------*/ 
 
#define HANDLE_LD();	DBG_RUN0("Optimized HANDLE_LD\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						R[RAM[R[$IP]+1]] = (S8)(*((S4*)&RAM[(U8)R[RAM[R[$IP]+2]]])); \ 
						R[$IP]=R[$IP]+3; 
 
/*-----------------------------------------------------------------*/ 
 
 
#define HANDLE_LQ();	DBG_RUN0("Optimized HANDLE_LQ\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						R[RAM[R[$IP]+1]] = (S8)(*((S8*)&RAM[(U8)R[RAM[R[$IP]+2]]])); \ 
						R[$IP]=R[$IP]+3; 
 
/*-----------------------------------------------------------------*/ 
 
/* LFI $f, $r */ 
 
#define HANDLE_LF1();	DBG_RUN0("Optimized HANDLE_LF1\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						Rf[RAM[R[$IP]+1]] = *((F4*)&RAM[(U8)R[RAM[R[$IP]+2]]]); \ 
						R[$IP]=R[$IP]+3;	 
 
/*-----------------------------------------------------------------*/ 
 
/* LF2 $d, $r */ 
 
#define HANDLE_LF2();	DBG_RUN0("Optimized HANDLE_LF2\n");\ 
						badAddress(R[RAM[R[$IP]+2]],R[$IP]); \ 
						Rd[RAM[R[$IP]+1]] = *((F8*)&RAM[(U8)R[RAM[R[$IP]+2]]]); \ 
						R[$IP]=R[$IP]+3;