跑的很欢的 代码 到了 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>...
参数: 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 下载以后放到...
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下没有这种限制,可以随意的对硬件进行编程...
标题中的“gcc_phat.m.rar_GCC matlab_GCC tdoa_GCC_PHAT_TDOA GCC_gcc phat.m”表明这是一个与GCC-PHAT算法相关的MATLAB代码压缩包,用于计算时间差到达(TDOA)。GCC-PHAT是Generalized Cross-Correlation with ...
而"riscv32-esp-elf-gcc8_4_0-esp-2021r1-win32.zip"则包含了针对RISC-V架构的ESP32的GCC编译器,用于在Windows环境下进行程序开发。 GCC(GNU Compiler Collection)是GNU项目的一部分,是一个高度可移植的编译器...
<br>使用的开发工具为:<br>cygwin gcc 3.4.4<br>CodeBlocks IDE<br>bfin-uclinux-2008-r1<br>它删除了开关中断,同步及调度相关的代码。<br>使用了CodeBlocks 8做为IDE,这样就可以方便地进行跟踪调试,对理解...
这个“GCC.rar_gcc 中文手册_gcc chm_gcc 使用_gcc手册_qt c++”的资源包,显然是一个针对GCC编译器的详细教程,旨在帮助用户深入理解和熟练运用GCC。 **GCC中文手册** GCC的中文手册是学习和调试GCC的重要参考...
《ESP32开发环境搭建——基于xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win32的详细指南》 ESP32是一款高度集成的微控制器,广泛应用于物联网(IoT)、智能家居、智能硬件等领域,因其强大的性能和丰富的外设接口...
《ESP32-S2开发环境:xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-win32.zip详解》 ESP32-S2是Espressif Systems公司推出的一款高性能、低功耗的物联网微控制器,集成了Wi-Fi、蓝牙和强大的可编程计算资源。为了便于...
《ESP32-S2开发环境构建:XTensa ESP32S2 ELF GCC 8.4.0工具链详解》 在嵌入式开发领域,ESP32-S2是一款备受瞩目的微控制器,由Espressif Systems公司设计,以其强大的性能和丰富的外设接口在物联网(IoT)应用中占据...
标题中的“gcc_phat.zip_GCC PHAT_GCC-PHAT_GCC_PHAT_波束形成 实测_降噪”指的是一个与GCC-PHAT(Generalized Cross-Correlation with Phase Transform)技术相关的压缩包文件,它主要用于波束形成和降噪应用。GCC-...
在Windows下安装和使用"xtensa-esp32-elf-gcc8_4_0-esp-2020r3-win64"时,通常需要配合MSYS2环境,这是一个轻量级的类Unix环境,提供bash shell、POSIX兼容库和命令行工具,以便于在Windows上运行如make等Linux工具...
安装本地gcc版本所需的离线安装包详情如下: gcc-7.2.0.tar.xz gmp-6.1.0.tar.bz2 mpc-1.0.3.tar.gz mpfr-3.1.4.tar.bz2 isl-0.16.1.tar.bz2
最后找的安装光盘,把相关的几个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>...
《ESP32-S3开发工具:xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch5-win64详解》 ESP32-S3是一款高性能、低功耗的微控制器,由Espressif Systems公司设计,广泛应用于物联网(IoT)设备和无线通信应用。本篇将详细...
`functional`文件夹很可能包含实现了一些C++标准库`<functional>`中功能的对象,如函数对象、函数适配器等,这些在使用lambda时可能会用到。而`initializer_list`文件可能包含了对`std::initializer_list`类型的实现...
《ESP32-S3开发工具:xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch3-win64详解》 ESP32-S3是一款由Espressif Systems推出的高性能、低功耗的微控制器,集成了Wi-Fi、蓝牙和丰富的外设接口,广泛应用于物联网(IoT)...
Dev-Cpp_6.3版本
`gcc_except_table`是GCC(GNU Compiler Collection)编译器在处理C++异常处理时使用的一个内部机制。这个表格在编译过程中自动生成,用于在程序执行期间有效地管理异常捕获和传播。在这个主题中,我们将深入探讨`...