`
sunzixun
  • 浏览: 75960 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

<gcc> __sync_bool_compare_and_swap

 
阅读更多

跑的很欢的 代码 到了 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
分享到:
评论

相关推荐

    Minix源代码

    源代码:&lt;br&gt;00020 #ifndef _ANSI_H&lt;br&gt;00021 #define _ANSI_H&lt;br&gt;00022&lt;br&gt;00023 #if __STDC__ == 1&lt;br&gt;00024 #define _ANSI 31459 /* compiler claims full ANSI conformance */&lt;br&gt;00025 #endif&lt;br&gt;00026&lt;br&gt;...

    Linux环境下检测Tcp端口连通性小工具(tcping工具)

    参数: tcping [-q] [-t timeout_sec] [-utimeout_usec] &lt;ip addr&gt; &lt;port&gt; -q : quiet mode, do not output anything (except error messages) -t : timeout in seconds -u : timeout in microseconds 下载以后放到...

    Linux_slides.rar

    Introduction to Linux&lt;br&gt;Module 2 — Logging In and General Orientation&lt;br&gt;Module 3 — Navigating the File System&lt;br&gt;Module 4 — Managing Files&lt;br&gt;Module 5 — File Permissions and Access&lt;br&gt;Module 6 ...

    gcc for dos

    发布目的:&lt;br&gt;相信在linux下或是unix工作的朋友,多多少少都阅读过内核源代码,但源代码中有关硬件编程的部分是不能试验的(除非你已精通驱动编程),即使你以root身份登录.而dos下没有这种限制,可以随意的对硬件进行编程...

    gcc_phat.m.rar_GCC matlab_GCC tdoa_GCC_PHAT_TDOA GCC_gcc phat.m

    标题中的“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

    而"riscv32-esp-elf-gcc8_4_0-esp-2021r1-win32.zip"则包含了针对RISC-V架构的ESP32的GCC编译器,用于在Windows环境下进行程序开发。 GCC(GNU Compiler Collection)是GNU项目的一部分,是一个高度可移植的编译器...

    memsim_csdn_0.1

    &lt;br&gt;使用的开发工具为:&lt;br&gt;cygwin gcc 3.4.4&lt;br&gt;CodeBlocks IDE&lt;br&gt;bfin-uclinux-2008-r1&lt;br&gt;它删除了开关中断,同步及调度相关的代码。&lt;br&gt;使用了CodeBlocks 8做为IDE,这样就可以方便地进行跟踪调试,对理解...

    GCC.rar_gcc 中文手册_gcc chm_gcc 使用_gcc手册_qt c++

    这个“GCC.rar_gcc 中文手册_gcc chm_gcc 使用_gcc手册_qt c++”的资源包,显然是一个针对GCC编译器的详细教程,旨在帮助用户深入理解和熟练运用GCC。 **GCC中文手册** GCC的中文手册是学习和调试GCC的重要参考...

    xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win32

    《ESP32开发环境搭建——基于xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win32的详细指南》 ESP32是一款高度集成的微控制器,广泛应用于物联网(IoT)、智能家居、智能硬件等领域,因其强大的性能和丰富的外设接口...

    xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-win32.zip

    《ESP32-S2开发环境:xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-win32.zip详解》 ESP32-S2是Espressif Systems公司推出的一款高性能、低功耗的物联网微控制器,集成了Wi-Fi、蓝牙和强大的可编程计算资源。为了便于...

    xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip

    《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.zip_GCC PHAT_GCC-PHAT_GCC_PHAT_波束形成 实测_降噪”指的是一个与GCC-PHAT(Generalized Cross-Correlation with Phase Transform)技术相关的压缩包文件,它主要用于波束形成和降噪应用。GCC-...

    xtensa-esp32-elf-gcc8_4_0-esp-2020r3-win64

    在Windows下安装和使用"xtensa-esp32-elf-gcc8_4_0-esp-2020r3-win64"时,通常需要配合MSYS2环境,这是一个轻量级的类Unix环境,提供bash shell、POSIX兼容库和命令行工具,以便于在Windows上运行如make等Linux工具...

    gcc7.2.0_download_prerequisites_安装gcc依赖

    安装本地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

    gcc 3.4.6 rpm 包 (2)

    最后找的安装光盘,把相关的几个rpm包共享给大家.&lt;br&gt;cpp-3.4.6-3.i386.rpm&lt;br&gt;gcc-3.4.6-3.i386.rpm&lt;br&gt;glibc-2.3.4-2.25.i386.rpm&lt;br&gt;glibc-devel-2.3.4-2.25.i386.rpm&lt;br&gt;glibc-headers-2.3.4-2.25.i386.rpm&lt;br&gt;...

    xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip

    《ESP32-S3开发工具:xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch5-win64详解》 ESP32-S3是一款高性能、低功耗的微控制器,由Espressif Systems公司设计,广泛应用于物联网(IoT)设备和无线通信应用。本篇将详细...

    嵌入式avr编译器工具链GCC支持lambda和initializer-list<T>

    `functional`文件夹很可能包含实现了一些C++标准库`&lt;functional&gt;`中功能的对象,如函数对象、函数适配器等,这些在使用lambda时可能会用到。而`initializer_list`文件可能包含了对`std::initializer_list`类型的实现...

    xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch3-win64.zip

    《ESP32-S3开发工具:xtensa-esp32s3-elf-gcc8_4_0-esp-2021r2-patch3-win64详解》 ESP32-S3是一款由Espressif Systems推出的高性能、低功耗的微控制器,集成了Wi-Fi、蓝牙和丰富的外设接口,广泛应用于物联网(IoT)...

    Embarcadero_Dev-Cpp_6.3_TDM-GCC 9.2_Setup.exe

    Dev-Cpp_6.3版本

    gcc_except_table的资料

    `gcc_except_table`是GCC(GNU Compiler Collection)编译器在处理C++异常处理时使用的一个内部机制。这个表格在编译过程中自动生成,用于在程序执行期间有效地管理异常捕获和传播。在这个主题中,我们将深入探讨`...

Global site tag (gtag.js) - Google Analytics