经年治世

西风烈,长空雁叫霜晨月

工程debug经验

工程项目

关于实现指令过程中的debug 1.加载/存储指令调用Mr/Mw宏,Mr/Mw宏是对vaddr_read/vaddr_write函数的封装 注意,关于vaddr_read/vaddr_write函数其中封装的paddr系列函数,以及更深的guest_to_host函数,以及更深的pmem系列函数,以及更深的位于host.h文件中的host_read函数.返回的都是uint32_t.如果读取1......

预编译变参系统与预编译器粘结运算符以及"回调宏"的应用

C/C++

预编译变参系统与预编译器粘结运算符以及"回调宏"的应用 使用变参系统时,无预编译器粘结运算符的情况 这里提到的变参系统不是stdarg文件中声明的那些系列函数与变量系统.而是针对用于宏定义中的变参系统 在有些情况下,我们在使用__VA_ARGS__时,是不需要添加前缀##. 关于前缀##(预编译器粘结运算符),见这篇C编译器名称粘结运算符 __VA_ARGS__是预编译器......

多行宏添加注释的错误(如果不想因为脑子局部性注意力而导致浪费一下午+一晚上时间,请好好看)

C/C++

多行宏添加注释的错误(如果不想因为脑子局部性注意力而导致浪费一下午时间,请好好看) 正确的示例用法 12345678910#include <stdio.h>#define some_macro(x, y) \ ((x) + \ (y) )int main(int argc, char** argv){ printf("use some_macro: %d\n......

YEMU模拟器运行机制

项目工程

YEMU模拟器运行机制 #include <stdint.h> #include <stdio.h> //------------4个寄存器,16字节地址 #define NREG 4 #define NMEM 16 // define the instruction format //-----------------联合体用法,总长是8bit,可以引用不同的位域......

instruction

项目工程

decode_operand函数 使用BITS宏,从s中的指令二进制串抓取rs1,rs2以及rd的二进制值. 然后根据传入的type类型进行switch跳转,然后执行流水线中的各个操作: src1R宏,这个宏就是读取rs1存储的寄存器值. src2R宏,读取rs2存储的寄存器值. 关于src(x)R宏中,调用R宏来做最底层的读取操作. 或调用immI宏:读取I型指令立即数字段. immU宏......

C-Preprocessor-Token-Pasting-Operator

小酒小菜

c编译器名称粘结运算符(C Preprocessor Token Pasting Operator) 使用示例 12345678910#include <stdio.h>#define concat(x, y) x ## yint main(int argc, char** argv){ int concat(x, y) = 32; printf("%d\n&......

cmd_c嵌套调用

项目工程

cmd_c等一系列执行函数CALL cpu_exec函数 cpu_exec参数:调用一次该函数要执行的指令数 然后cpu_exec带着指令数CALL execute(n)函数 execute函数(详解) execute函数会调用exec_once函数传入Decode s变量和cpu.pc变量 调用execute的cpu_exec函数的n值,在execute中用于for循环,多次调用exec_......

系列宏以及函数

项目工程

INSTPAT_INST宏是怎么起作用的? 只引用了Decode类型变量s,引用s中的isa内部变量,引用内部变量isa的inst联合体,引用inst联合体中的val字段. 该宏在INSTPAT宏的定义中使用,用于在pattern_decode函数之后,检测当前执行指令是否与当前执行的模式匹配中的指令格式匹配.这里的发挥的作用就是使用但前指令的二进制串. INSTPAT_MATCH宏是怎么其......

定义一个宏,来检测另一个宏是否被定义的优化代码

风景如画

定义一个宏,来检测另一个宏是否被定义的优化代码 该问题的原提出者见stackoverflow: https://stackoverflow.com/questions/26099745/test-if-preprocessor-symbol-is-defined-inside-macro 关于这个宏定义: 1#define TRACE(x) "" #x #x是c预处理器的......

RISCVcache数据块容量权衡问题/大数据块导致的失效损失长延迟问题/cache容量大小与命中率问题/多路组相联策略减低失效率/组相联组内选择数据块策略

RISC-V

层次化存储的根据:局部性原理 由时间局部性和空间局部性 层次化存储 这意味着所有的上层次的数据都是下层次数据的子集:只有数据先在第i+1层出现,才会在第i层出现. SRAM与DRAM的价格差主要体现 S和D的实现面积有很大差别,在相同面积的硅上D能实现更多的存储容量,S的每比特占用面积要大很多. S的每比特需要6到8个晶体管,过去是使用S芯片来作为一级或二级高速缓存 由于摩尔定律,现在所有的......