我在嵌入式项目中使用MIPS cpu(PIC32),但我开始质疑我的选择.
我知道像MIPS这样的RISC cpu会生成比预期更多的指令,但我不认为它会是这样的.以下是反汇编列表中的代码段:
我知道像MIPS这样的RISC cpu会生成比预期更多的指令,但我不认为它会是这样的.以下是反汇编列表中的代码段:
225: LATDSET = 0x0040; sw s1,24808(s2) sw s4,24808(s2) sw s1,24808(s3) sw s4,24808(s3) sw s1,24808(s3) 226: { 227: porte = PORTE; lw t1,24848(s4) andi v0,t1,0xffff lw v1,24848(s6) andi ra,v1,0xffff lw v0,24848(s6) andi t2,v0,0xffff lw a2,24848(s5) andi v1,a2,0xffff lw t2,t2,24848(s5) andi t2,0xffff 228: if (porte & 0x0004) andi t2,0x4 andi s8,ra,0x4 andi ra,0x4 andi a1,0x4 andi a2,0x4 229: pst_bytes_somi[0] |= sliding_bit; or t3,t4,s0 xori a3,0x0 movz t3,s0,a3 addu s0,t3,zero or t3,s1 xori a3,s8,s1,a3 addu s1,zero or v1,0x0 movz v1,zero or a0,s2 xori a3,a1,0x0 movz a0,s2,a3 addu s2,a0,a3
这似乎是一个疯狂的指令,用于在固定地址进行简单的读/写和测试变量.在不同的cpu上,我可能会将每个C语句降低到大约1..3条指令,而不需要使用手写的asm.显然,时钟频率相当高,但它不比我在不同cpu(例如dsPIC)中的时钟频率高10倍.
我已将优化设置为最大值.我的C编译器很糟糕(这是gcc 3.4.4)?或者这是典型的MIPS?