我有以下来自 PowerPc 内核源代码的代码片段

#define SPRN_IVOR32     0x210   /* Interrupt Vector Offset Register 32 */

unsigned long ivor[3];
ivor[0] = mfspr(SPRN_IVOR32);

#define __stringify_1(x)        #x
#define __stringify(x)          __stringify_1(x)

#define mfspr(rn)       ({unsigned long rval; \
                    asm volatile("mfspr %0," __stringify(rn) \
                            : "=r" (rval)); rval; })

另外,上面的练习是关于在 PowerPc 中模拟 MSR 寄存器的位吗?

任何人都可以帮助我了解我们在这里做什么吗?

最佳答案

mfspr 宏生成一条 asm 指令 mfspr,它将给定的专用寄存器读取到编译器选择的寄存器中,然后将其分配给 rval,从而成为表达式的返回值。

正如评论所说, SPRN_IVOR32Interrupt Vector Offset Register 32 ,其内容因此被提取到 ivor[0] 中。

关于c - 在 PowerPc 上解码这个汇编内联代码片段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25606196/

10-11 15:32