ユーザ用ツール

サイト用ツール


cpu:atomic

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
cpu:atomic [2019/07/07 00:17]
oga
cpu:atomic [2019/07/07 21:08] (現在)
oga [x64 (relaxed/release/seq_cst)]
行 44: 行 44:
  
  
-==== ARMv8.2A ====+==== ARMv8.1A ====
  
 <code asm> <code asm>
行 55: 行 55:
 ===== fetch_and (seq_cst) ===== ===== fetch_and (seq_cst) =====
  
-==== ARMv8.2A ====+==== x64 ==== 
 + 
 +<code asm> 
 +; linux clang 
 + movl (%rsp), %ecx 
 + movl %ecx, %edx 
 + andl $4, %edx 
 + movl %ecx, %eax 
 + lock cmpxchgl %edx, (%rsp) 
 + movl %eax, %ecx 
 +</code> 
 + 
 +<code asm> 
 +; windows 
 +prefetchw   [rbp-10h]   
 +mov         eax,dword ptr [rbp-10h]   
 +nop   
 +mov         ecx,eax   
 +and         ecx,  
 +lock cmpxchg dword ptr [rbp-10h],ecx   
 +</code> 
 + 
 + 
 +==== ARMv8.1A ====
  
 <code asm> <code asm>
行 65: 行 88:
 ===== fetch_or (seq_cst) ===== ===== fetch_or (seq_cst) =====
  
-==== ARMv8.2A ====+==== ARMv8.1A ====
  
 <code asm> <code asm>
行 76: 行 99:
 ===== fetch_xor (seq_cst) ===== ===== fetch_xor (seq_cst) =====
  
-==== ARMv8.2A ====+==== ARMv8.1A ====
  
 <code asm> <code asm>
行 87: 行 110:
 ===== exchange (seq_cst) ===== ===== exchange (seq_cst) =====
  
-==== ARMv8.2A ====+==== x64 ==== 
 + 
 +<code asm> 
 +; linux clang 
 + xchgl %esi, (%rsp) 
 +</code> 
 + 
 +<code asm> 
 +; windows 
 +xchg        edx,dword ptr [rbp-10h]  
 +</code> 
 + 
 +==== ARMv8.1A ====
  
 <code asm> <code asm>
行 117: 行 152:
  ldrex r2, [r4]  ldrex r2, [r4]
  cmp r2, #0  cmp r2, #0
- beq .LBB0_18+ beq .LBB0_44
  clrex  clrex
- b .LBB0_19 + b .LBB0_45 
-.LBB0_18:+.LBB0_44:
  dmb ish  dmb ish
  mov r0, #3  mov r0, #3
  strex r1, r0, [r4]  strex r1, r0, [r4]
  cmp r1, #0  cmp r1, #0
- + beq .LBB0_53 
 +.LBB0_45:
 </code> </code>
  
行 133: 行 169:
  
 <code asm> <code asm>
- stlr wzr, [x19] 
- ldar w1, [x19] 
- adrp x0, .L.str.11 
- add x0, x0, :lo12:.L.str.11 
- bl printf 
  ldaxr w2, [x19]  ldaxr w2, [x19]
  cbz w2, .LBB0_18  cbz w2, .LBB0_18
行 150: 行 181:
  
  
-==== ARMv8.2A ====+==== ARMv8.1A ====
  
 <code asm> <code asm>
行 176: 行 207:
  
 <code asm> <code asm>
 +.LBB0_47:
  ldrex r2, [r4]  ldrex r2, [r4]
  cmp r2, #3  cmp r2, #3
- bne .LBB0_24 + bne .LBB0_50
- mov r0, #0 +
- dmb ish +
-.LBB0_22:+
  strex r1, r0, [r4]  strex r1, r0, [r4]
  cmp r1, #0  cmp r1, #0
- beq .LBB0_25 + bne .LBB0_47 
- ldrex r2, [r4] + dmb ish 
- cmp r2, #3 + mov r1, #1 
- beq .LBB0_22 + b .LBB0_51 
-.LBB0_24:+.LBB0_50:
  clrex  clrex
  mov r1, #0  mov r1, #0
  dmb ish  dmb ish
- b .LBB0_26 +.LBB0_51:
-.LBB0_25: +
- dmb ish +
- mov r1, #1 +
-.LBB0_26:+
 </code> </code>
  
行 218: 行 243:
  
  
-==== ARMv8.2A ====+==== ARMv8.1A ====
  
 <code asm> <code asm>
行 228: 行 253:
 ===== load ===== ===== load =====
  
-==== ARMv8.xA (seq_cst/acquire) ====+==== x64 (relaxed/acquire/consume/seq_cst) ==== 
 + 
 +<code asm> 
 + movl (%rbx), %esi 
 +</code> 
 + 
 + 
 + 
 +==== ARMv7A (relaxed) ==== 
 + 
 +<code asm> 
 +        ldr    r0, [r4] 
 +</code> 
 + 
 +==== ARMv7A (acquire/consume/seq_cst) ==== 
 + 
 +<code asm> 
 +        ldr    r0, [r4] 
 +        dmb    ish 
 +</code> 
 + 
 + 
 +==== ARMv8.xA (relaxed) ==== 
 + 
 +<code asm> 
 + ldr w1, [x19] 
 +</code> 
 + 
 + 
 +==== ARMv8.xA (acquire/consume/seq_cst) ====
  
 <code asm> <code asm>
  ldar w1, [x19]  ldar w1, [x19]
 +</code>
 +
 +
 +
 +
 +----
 +===== store =====
 +
 +==== x64 (relaxed/release) ====
 +
 +<code asm>
 + movl %ebp, (%rbx)
 +</code>
 +
 +==== x64 (seq_cst) ====
 +
 +<code asm>
 + xchgl %ebp, (%rbx)
 +</code>
 +
 +==== ARMv7A (relaxed) ====
 +
 +<code asm>
 +        str     r5, [r4]
 +</code>
 +
 +==== ARMv7A (release) ====
 +
 +<code asm>
 +        dmb     ish
 +        str     r5, [r4]
 +</code>
 +
 +==== ARMv7A (seq_cst) ====
 +
 +<code asm>
 +        dmb     ish
 +        str     r5, [r4]
 +        dmb     ish
 </code> </code>
  
行 238: 行 331:
  
 <code asm> <code asm>
- ldr w1, [sp, #8]+        str     w20, [x19]
 </code> </code>
  
  
 +==== ARMv8.xA (release/seq_cst) ====
 +
 +<code asm>
 +        stlr    w20, [x19]
 +</code>
  
  
cpu/atomic.1562426271.txt.gz · 最終更新: 2019/07/07 00:17 by oga