[问题] readb/readw/readl/readq

楼主: loach98 (银货两讫)   2016-07-11 21:12:20
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
X
问题(Question):
trace linux-3.18/arch/arm64/include/asm/io.h时候,
看到关于readl的描述:
#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; })
想请教这段语法的意思? (已知iormb是barrier, 可以略过)
看起来是先宣告__v, 让它去接readl_relaxed(c)的return值,
接着卡一个barrier, 确保read的动作有完成,
但是不太懂为何最后还有一个"__v;", 想请教它的意思是?
附注real_relaxed(c)也用了类似的定义手法
#define readl_relaxed(c) ({ u32 __v = \
le32_to_cpu((__force __le32)__raw_readl(c)); __v; })
补充说明(Supplement):
恳请大大赐教...
作者: bibo9901 (function(){})()   2016-07-11 21:15:00
这是gnu c extension. 把 __v 当作 {} 的回传值
作者: LPH66 (-6.2598534e+18f)   2016-07-11 21:26:00
楼主: loach98 (银货两讫)   2016-07-11 21:51:00
感激两位大大!!

Links booklink

Contact Us: admin [ a t ] ucptt.com