- 论坛徽章:
- 0
|
本帖最后由 runrun_snail 于 2013-07-11 18:29 编辑
#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
__asm__ __volatile__( \
"1: mov"itype" %"rtype"1,%2\n" \
"2:\n" \
".section .fixup,\"ax\"\n" \
"3: movl %3,%0\n" \
" jmp 2b\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" .align 4\n" \
" .long 1b,3b\n" \
".previous" \
: "=r"(err) \
: ltype (x), "m"(__m(addr)), "i"(errret), "0"(err))
其他的都好理解 不懂rtype这个参数的含义
举例:
__put_user_asm(x,ptr,retval,"w","w","ir",errret);break;
替换以后 1: movw %w1 %2
%1 之间的w 有什么含义呢?
同意的问题出现在 内存栅栏的 实现中
#define alternative(oldinstr, newinstr, feature) \
asm volatile ("661:\n\t"
oldinstr "\n
662:\n" \
".section .altinstructions,\"a\"\n" \
" .align 4\n" \
" .long 661b\n" /* label */ \
" .long 663f\n" /* new instruction */ \
" .byte %c0\n" /* feature bit */ \
" .byte 662b-661b\n" /* sourcelen */ \
" .byte 664f-663f\n" /* replacementlen */ \
".previous\n" \
".section .altinstr_replacement,\"ax\"\n" \
"663:\n\t" newinstr "\n664:\n" /* replacement */ \
".previous"
:
: "i" (feature)
: "memory")
%0 中间的c有什么含义??
求大神回答。 |
|