Andrew J. Schorr
unread,Feb 18, 2015, 10:42:36 AM2/18/15Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to concurr...@googlegroups.com
Hi,
This is probably a really stupid question. But just in case it isn't...
On x86_64, in commit f8b41af77c40751d0d89b6a394dd34d744f7f9d7, the definition
of ck_pr_store_64 changed as follows:
Previous version:
__attribute__((unused)) inline static void ck_pr_store_64(uint64_t *target, uint64_t v) { __asm__ __volatile__("movq" " %1, %0" : "=m" (*(uint64_t *)target) : "i" "q" (v) : "memory"); return; }
New version:
__attribute__((unused)) inline static void ck_pr_store_64(uint64_t *target, uint64_t v) { __asm__ __volatile__("movq" " %1, %0" : "=m" (*(uint64_t *)target) : "Z" "q" (v) : "memory"); return; }
In other words, the "i" constraint was replaced with "Z". In the gcc manual,
it appears to describe the "Z" constraint for x86 systems like so:
'Z'
32-bit unsigned integer constant, or a symbolic reference
known to fit that range (for immediate operands in
zero-extending x86-64 instructions).
Is this problematic since the actual argument here is a 64-bit unsigned
integer, not 32-bit? I'm guessing it does no harm, but just wanted to confirm.
Thanks,
Andy