Linux 移植日记 day2

今日任务预测:完成cache以及TLB设计与异常处理

继续在尝试运行u-boot
Error:bfc007a0: bc500000 cache 0x10,0(v0)

==============nemu registers================
$pc:    0xbfc007a0   $hi:    0x00000000   $lo:    0x00000000
$ninstr: 00000000                  $instr: bc500000
$0 :0x00000000 $at:0x00000000 $v0:0x87fc0000 $v1:0x00000010
$a0:0x00000000 $a1:0x87ff8713 $a2:0x87ff8710 $a3:0x00000010
$t0:0xffffc83c $t1:0xf20f0000 $t2:0x00000004 $t3:0xfc000000
$t4:0x00000005 $t5:0x00000012 $t6:0xffffffff $t7:0x00000002
$s0:0xc83c0000 $s1:0x00038714 $s2:0x87f60000 $s3:0x87f60ef4
$s4:0x87fc0000 $s5:0x00000000 $s6:0x00000000 $s7:0x00000000
$t8:0x00000000 $t9:0x00000002 $k0:0x803fff50 $k1:0x00000000
$gp:0x00000000 $sp:0x803fbef0 $fp:0x803fbf50 $ra:0xbfc00c98
==============nemu status end===============
cycle 8727277: pc: nemu:bfc007a0 <> pc:bfc00380

在这里插入图片描述此处是当前写回的PC错误,发生这样的错误一般是上条指令正常执行后,下一条指令的取址出错。
故寻找上一条PC bfc0079c: bc550000 cache 0x15,0(v0),也是同样的指令cache,但目前代码内cache和TLB并没有实现,所以应该去完善cache和TLB。

中断异常测试
Error:

bfc3ca60:	2694ca64 	addiu	s4,s4,-13724
bfc3ca64 <break_pc1>:
bfc3ca64:	0000000d 	break

首先看上一条指令的addiu,我发现了我很久以来都没有明确mips的addiaddiuu的意义,于是我搜索了一下。
“MIPS32的ADDI和ADDIU的实现要点(加法指令)”感谢原博主!

上面的博文最后总结ADDI和ADDIU的实现有以下2个要点:

1)仅支持有符号运算(补码运算),16位立即数需要进行符号扩展;

2)ADDI带有溢出检测(或者说带“自陷”功能,虽然不常用)。

所以u并不是有无符号,而是是否进行溢出检测
(下图出自上述博文,里面的c和c++对于整数的溢出情况处理原理以前也注意过)
在这里插入图片描述-----------------------------------------------------------------------------------------------------------------------
框架更新分割线,上面的error是框架bug导致
-----------------------------------------------------------------------------------------------------------------------

框架更新:

  • 合并了Linux和u-boot的编译与运行
  • 把CP0的congfig1寄存器的TLB entries 砍掉了一半,从64变为32
  • 更新了insttest测试集,为了模拟linux,加入了许多AdEL 和AdeD异常。
  • 更新以前WBU的反馈逻辑,现在是根据CP0的中断异常反馈情况来决定是否写入,逻辑比之前更清晰

看来得先完成异常中断才能开始TLB了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值