X86: Implement a locking version of CMPXCHG.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 11:56:40 +0000 (04:56 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 11:56:40 +0000 (04:56 -0700)
src/arch/x86/isa/insts/general_purpose/semaphores.py

index f232418636c7224b666148ed555435090e798758..a34e2a3c7433a1fa9092b8d9135ee424b34102ba 100644 (file)
@@ -79,6 +79,25 @@ def macroop CMPXCHG_P_R {
     mov rax, rax, t1, flags=(nCZF,)
 };
 
+def macroop CMPXCHG_LOCKED_M_R {
+    ldstl t1, seg, sib, disp
+    sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF)
+
+    mov t1, t1, reg, flags=(CZF,)
+    stul t1, seg, sib, disp
+    mov rax, rax, t1, flags=(nCZF,)
+};
+
+def macroop CMPXCHG_LOCKED_P_R {
+    rdip t7
+    ldstl t1, seg, riprel, disp
+    sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF)
+
+    mov t1, t1, reg, flags=(CZF,)
+    stul t1, seg, riprel, disp
+    mov rax, rax, t1, flags=(nCZF,)
+};
+
 def macroop XADD_M_R {
     ldst t1, seg, sib, disp
     add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)