1 inline jint     Atomic::cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value) {
2 int mp = os::is_MP();
3 __asm__ volatile (LOCK_IF_MP(%4) "cmpxchgl %1,(%3)"
4 : "=a" (exchange_value)
5 : "r" (exchange_value), "a" (compare_value), "r" (dest), "r" (mp)
6 : "cc", "memory");
7 return exchange_value;
8 }
9
10 // Adding a lock prefix to an instruction on MP machine
11 // 在多处理的指令前添加lock前缀
12 #define LOCK_IF_MP(mp) "cmp $0, " #mp "; je 1f; lock; 1: "

12行代码的意思应该是:

 cmp $0 $1;
je 1f;//等于则跳转
lock;// 内存屏障

"1:"是什么意思还看不出来

inline 关键字主要功能是为了 代替掉 宏代码片段。
jint 猜测是指代java int
cmpxchg compare and change

内嵌汇编:高级语言与汇编混合的代码

cmpxchgl %1,(%3)  是汇编指令模板, %1 %3是指令的操作数,称为占位符
指令模板后面用小括号括起来的是C语言表达式
操作数至多有10 个
在每个操作数前面有一个用引号括起来的字符串,字符串的内容是对该操作数的限制或者说要求。
"="表示"exchange_value"是输出操作数
"=a" (exchange_value),表示把eax寄存器中存的值写入exchange_value变量中。
"r" 表示需要将"exchange_value"与某个通用寄存器相关联,先将操作数的值读入寄存器,然后在指令中使用相应寄存器,而不是"resexchange_valueult"本身,当然指令执行 完后需要将寄存器中的值存入变量"exchange_value",从表面上看好像是指令直接对"exchange_value"进行操作,实际上GCC做了隐式处理,这样我们可以少写一 些指令。
"m"表示操作数放在内存,两个操作数不能同时使用"m"作为限定字符,指令movl允许寄存器到寄存器,立即数到寄存器等,但是不允许内存到内存的操作

立即数:通常把在立即寻址方式指令中给出的数称为立即数

内嵌汇编语法如下:
       __asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)
共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用":"格开,汇编语句模板必不可少,其他三部分可选,
    如果使用了后面的部分,而前面部分为空,也需要用":"格开,相应部分内容为空。例如:
             __asm__ __volatile__("cli": : :"memory")

部分参考自https://www.cnblogs.com/joey-hua/p/5279875.html

CAS学习过程中的一些记录的更多相关文章

  1. sun.misc.Unsafe中一些常用方法记录

    sun.misc.Unsafe中一些常用方法记录 前情摘要 sun公司提供了可以用于直接操作内存的类,这个类就是sun.misc.Unsafe.因为Java本身是不会涉及到直接操作内存的,Java A ...

  2. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  3. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  4. Java 需要记得、了解的关键词 (Java 学习中的小记录)

    Java 需要记得.了解的关键词 (Java 学习中的小记录)     作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用

  5. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  6. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  7. html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)

    html/css  盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width     是"宽 ...

  8. SQL Server-删除表中重复的记录!

    比如现在有一人员表  (表名:peosons)若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select   p1.*   from   persons   p1,persons   p ...

  9. Microsoft Office Access 不能在追加查询中追加所有记录

    有客户反映,我们的软件ACCESS数据库版本在使用时会出现"Microsoft Office Access 不能在追加查询中追加所有记录"的错误.使用客户的数据库调试软件发现错误出 ...

随机推荐

  1. 2020最常见的200+Java面试题汇总(含答案解析)

    前言 2020年快要结束了,很多朋友问题,有没有整理今年的一些面试题,最近抽时间整理了一份Java面试题.或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信足以应对目前市面上绝大部分的 ...

  2. Android网络性能监控方案

    阿里云 云原生应用研发平台EMAS 刘宝文(木睿) 背景 移动互联网时代,移动端极大部分业务都需要通过App和Server之间的数据交互来实现,所以大部分App提供的业务功能都需要使用网络请求.如果因 ...

  3. Pycharm激活码无偿分享,2020年最新Pycharm永久激活码!

    2020年10月7日08:04:34更新的Pycharm激活码,还热乎着呢,速用~ 如果下边的这个Pycharm激活码过期失效了的话,大家可以关注我的微信公众号:Python联盟,然后回复" ...

  4. 剑指Offer-Python(21-25)

    21.栈的压入和弹出序列 新建一个栈,将数组A压入栈中,当栈顶元素等于数组B时,就将其出栈,当循环结束时,判断栈是否为空,若为空则返回true. class Solution: def IsPopOr ...

  5. itextpdf freemarker渲染

    现有需求涉及到打印pdf操作,简单找了俩种方式 在现有的模板上进行编辑,操作难度比较大 通过freemarker生成静态页面,在进行转换html,完美. 关于动态生成pdf,网上参考的挺多的,看来看去 ...

  6. Pandas_分组与聚合

    # 分组统计是数据分析中的重要环节: # 1-数据分组:GroupBy的原理和使用方法: # 2-聚合运算:学会分组数据的聚合运算方法和函数使用: 类似于 SQL思想 # 3-分组运算:重点 appl ...

  7. 今天的一个SQL题-case语句和decode函数

    数据库表: select * from rec order by rst,game_time; ID GAME_TIME      RST ------ -------------- ---- 2 0 ...

  8. 主动关闭 time wait结构体

    /* * This is a TIME_WAIT sock. It works around the memory consumption * problems of sockets in such ...

  9. python dvwa布尔盲注自动化脚本(level=low)

    仅供学习代码参考 1#python dvwa布尔盲注自动化脚本 2 import requests 3 import string 4 import time 5 INIT_URL="htt ...

  10. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

    目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...