跑的很欢的 代码 到了 gcc version 4.1.2
下面 __sync_bool_compare_and_swap 找不到了。。。
加了 -march 也不管用 。。
干脆自己写一个吧
参考gcc 的atomic.h
#define LOCK_PREFIX "lock;"
#define __sync_bool_compare_and_swap(mem, oldval, newval) \
({ __typeof (*mem) ret; \
__asm __volatile (LOCK_PREFIX "cmpxchg %2, %1" \
: "=a" (ret), "=m" (*mem) \
: "r" (newval), "m" (*mem), "0" (oldval)); \
ret; })
写了一个 。。。
运行。。。。。lock free 变成死循环了。。。gdb 汇编调试之
发现返回值不对。。。。
看了看nginx的实现 发现需要 setz %返回寄存器。。
加上吧。。。
写道
/tmp/ccyACQUP.s:55: Error: suffix or operands invalid for `setz'
/tmp/ccyACQUP.s:103: Error: suffix or operands invalid for `setz'
报错。。。。崩溃。。。 Google之 发现这也是高版本才可以 asm ("setz %n");
折腾了半天 发现只能
重新修改
#define LOCK_PREFIX "lock;"
#define __sync_bool_compare_and_swap(mem, oldval, newval) \
({ __typeof (*mem) ret; \
__asm __volatile (LOCK_PREFIX "cmpxchgl %2, %1;sete %%al; movzbl %%al,%%eax" \
: "=a" (ret), "=m" (*mem) \
: "r" (newval), "m" (*mem), "a" (oldval)\
:"memory"); \
ret; })
一切正常。。。
有需要的人 拿去用吧。。。有问题留言
- 大小: 4 KB
分享到:
相关推荐
源代码:<br>00020 #ifndef _ANSI_H<br>00021 #define _ANSI_H<br>00022<br>00023 #if __STDC__ == 1<br>00024 #define _ANSI 31459 /* compiler claims full ANSI conformance */<br>00025 #endif<br>00026<br>...
Introduction to Linux<br>Module 2 — Logging In and General Orientation<br>Module 3 — Navigating the File System<br>Module 4 — Managing Files<br>Module 5 — File Permissions and Access<br>Module 6 ...
发布目的:<br>相信在linux下或是unix工作的朋友,多多少少都阅读过内核源代码,但源代码中有关硬件编程的部分是不能试验的(除非你已精通驱动编程),即使你以root身份登录.而dos下没有这种限制,可以随意的对硬件进行编程...
<br>使用的开发工具为:<br>cygwin gcc 3.4.4<br>CodeBlocks IDE<br>bfin-uclinux-2008-r1<br>它删除了开关中断,同步及调度相关的代码。<br>使用了CodeBlocks 8做为IDE,这样就可以方便地进行跟踪调试,对理解...
riscv32-esp-elf-gcc8_4_0-esp-2021r1-win32.zip
最后找的安装光盘,把相关的几个rpm包共享给大家.<br>cpp-3.4.6-3.i386.rpm<br>gcc-3.4.6-3.i386.rpm<br>glibc-2.3.4-2.25.i386.rpm<br>glibc-devel-2.3.4-2.25.i386.rpm<br>glibc-headers-2.3.4-2.25.i386.rpm<br>...
xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win32 esp32资源for windows_x64(2022.03.22)
gcc_广义互相关_gcc时延_GCC互相关_gcc_源码.rar
xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-patch5-win64
xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-patch2-win32 esp32资源for windows_x64(2022.03.22)
参数: tcping [-q] [-t timeout_sec] [-utimeout_usec] <ip addr> <port> -q : quiet mode, do not output anything (except error messages) -t : timeout in seconds -u : timeout in microseconds 下载以后放到...
Dev-Cpp_6.3版本
<br><br>其中的包有:<br>binutils-2.16.91-20060119-1.tar.gz<br>gcc-core-3.4.2-20040916-1.tar.gz<br>gcc-g++-3.4.2-20040916-1.tar.gz<br>mingw32-make-3.81-2.tar.gz<br>mingw-runtime-3.13.tar.gz<br>w32api-...
xtensa-esp32-elf-gcc8_4_0-esp-2021r1-win32.zip
xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64
资源中包含两个文件,将其拷贝到AVR-GCC系统include文件目录下,就可以在代码中支持initializer_list<E>和lambda表达式
<br><br>其中的包有:<br>binutils-2.16.91-20060119-1.tar.gz<br>gcc-core-3.4.2-20040916-1.tar.gz<br>gcc-g++-3.4.2-20040916-1.tar.gz<br>mingw32-make-3.81-2.tar.gz<br>mingw-runtime-3.13.tar.gz<br>w32api-...
此版本非官方版本,是基于 esp32_win32_msys2_environment_and_esp2020r2_toolchain-20200601 版本修改,替换工具链为 xtensa-esp32-elf-gcc8_4_0-esp-2020r3 ,以支持 esp-idf V4.2 版本的开发。
gcc_广义互相关_gcc时延_GCC互相关_gcc.zip
xtensa-esp32-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz