アトミックインラインアセンブリコードを使用して、次のコードを模倣しようとしています。
struct Node{
Node * next;
int value;
}
typedef struct Node * Node_ptr;
Node_ptr store(Node_ptr ** L, Node_ptr * I){
pthread_mutex_lock (&queue_mutex);
Node_ptr tmp = **L;
**L = *I;
pthread_mutex_unlock (&queue_mutex)
return tmp;
}
これが私が試したことです:
Node_ptr tmp;
__asm volatile ("lock; movq %1, %%rax; movq %%rax, %0"
: "=r" (tmp)
: "r" (**L)
: "%rax"
);
__asm volatile ("lock; movq %1, %%rax; movq %%rax, %0"
: "=r" (**L)
: "r" (*I)
: "%rax"
);
return tmp;
しかし、「Illegal Instruction」エラーが発生し、どこが間違っているのかわかりません。誰かが問題が何であるかについていくつかの洞察を持っていますか?
ありがとう
編集:node_ptrの定義を追加