Linux kernel 什么是;拇指;ARM linux代码中的宏是什么?

Linux kernel 什么是;拇指;ARM linux代码中的宏是什么?,linux-kernel,arm,thumb,Linux Kernel,Arm,Thumb,我正在看head.S的ARM linux代码。 我知道拇指模式是什么。但是有一行,如THUMB(it eq),它是一个预定义的宏,如#define THUMB(x…)x 点实际上是写的 请告诉我宏是做什么的 ENTRY(stext) setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode @ and irqs disabled

我正在看head.S的ARM linux代码。 我知道拇指模式是什么。但是有一行,如
THUMB(it eq)
,它是一个预定义的宏,如
#define THUMB(x…)x
点实际上是写的

请告诉我宏是做什么的

ENTRY(stext)
  setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
                                               @ and irqs disabled
  mrc p15, 0, r9, c0, c0      @ get processor id
  bl__lookup_processor_type   @ r5=procinfo r9=cpuid
  movs r10, r5                @ invalid processor (r5=0)? 
  THUMB( iteq )               @ force fixup-able long branch encoding
  beq __error_p               @ yes, error 'p'

THUMB()
预处理器宏用于根据目标指令集有条件地编译源程序集。如果内核是为ARM目标编译的,则THUMB()宏为no-op。相反,如果内核是为THUMB编译的,则THUMB()宏将扩展为其参数。

请参阅。请参阅:和以获取更多条件化宏。这允许将相同的代码用于Thumb2(高级thumb)和常规ARM内核。宏使汇编程序(本例中为head.S)更容易阅读。通常是一堆
#ifdef#endif
会分散注意力。由于90%以上的代码是相同的,因此维护一个文件比维护两个文件更容易。非常感谢。我现在明白了。困扰我的一件事是“it eq”或“it ne”指令,我无法理解。但至少现在,我想我可以跳过thumb things
,它是一个特殊的thumb-2指令,允许有条件地执行多达4条后续指令。在Thumb-2模式下,有多种方式进行条件分支:16位条件短分支指令或IT+长分支指令。在本例中,explicit
it eq
强制汇编程序使用长偏移量编码。无论如何,它只对拇指目标有意义。如果回答了您的问题,请将答案标记为已接受。