📄 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -