semaphores.py (6097:842991b33990) semaphores.py (6486:33faa9915d16)
1# Copyright (c) 2007 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# Redistribution and use of this software in source and binary forms,
5# with or without modification, are permitted provided that the
6# following conditions are met:
7#
8# The software must be used only for Non-Commercial Use which means any

--- 84 unchanged lines hidden (view full) ---

93 ldstl t1, seg, riprel, disp
94 sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF)
95
96 mov t1, t1, reg, flags=(CZF,)
97 stul t1, seg, riprel, disp
98 mov rax, rax, t1, flags=(nCZF,)
99};
100
1# Copyright (c) 2007 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# Redistribution and use of this software in source and binary forms,
5# with or without modification, are permitted provided that the
6# following conditions are met:
7#
8# The software must be used only for Non-Commercial Use which means any

--- 84 unchanged lines hidden (view full) ---

93 ldstl t1, seg, riprel, disp
94 sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF)
95
96 mov t1, t1, reg, flags=(CZF,)
97 stul t1, seg, riprel, disp
98 mov rax, rax, t1, flags=(nCZF,)
99};
100
101def macroop CMPXCHG8B_M {
102 lea t1, seg, sib, disp, dataSize=asz
103 ldst t2, seg, [1, t0, t1], 0
104 ldst t3, seg, [1, t0, t1], dsz
105
106 sub t0, rax, t2, flags=(ZF,)
107 br label("doneComparing"), flags=(nCZF,)
108 sub t0, rdx, t3, flags=(ZF,)
109doneComparing:
110
111 # If they're equal, set t3:t2 to rbx:rcx to write to memory
112 mov t2, t2, rbx, flags=(CZF,)
113 mov t3, t3, rcx, flags=(CZF,)
114
115 # If they're not equal, set rdx:rax to the value from memory.
116 mov rax, rax, t2, flags=(nCZF,)
117 mov rdx, rdx, t3, flags=(nCZF,)
118
119 # Write to memory
120 st t3, seg, [1, t0, t1], dsz
121 st t2, seg, [1, t0, t1], 0
122};
123
124def macroop CMPXCHG8B_P {
125 rdip t7
126 lea t1, seg, riprel, disp, dataSize=asz
127 ldst t2, seg, [1, t0, t1], 0
128 ldst t3, seg, [1, t0, t1], dsz
129
130 sub t0, rax, t2, flags=(ZF,)
131 br label("doneComparing"), flags=(nCZF,)
132 sub t0, rdx, t3, flags=(ZF,)
133doneComparing:
134
135 # If they're equal, set t3:t2 to rbx:rcx to write to memory
136 mov t2, t2, rbx, flags=(CZF,)
137 mov t3, t3, rcx, flags=(CZF,)
138
139 # If they're not equal, set rdx:rax to the value from memory.
140 mov rax, rax, t2, flags=(nCZF,)
141 mov rdx, rdx, t3, flags=(nCZF,)
142
143 # Write to memory
144 st t3, seg, [1, t0, t1], dsz
145 st t2, seg, [1, t0, t1], 0
146};
147
148def macroop CMPXCHG8B_LOCKED_M {
149 lea t1, seg, sib, disp, dataSize=asz
150 ldstl t2, seg, [1, t0, t1], 0
151 ldstl t3, seg, [1, t0, t1], dsz
152
153 sub t0, rax, t2, flags=(ZF,)
154 br label("doneComparing"), flags=(nCZF,)
155 sub t0, rdx, t3, flags=(ZF,)
156doneComparing:
157
158 # If they're equal, set t3:t2 to rbx:rcx to write to memory
159 mov t2, t2, rbx, flags=(CZF,)
160 mov t3, t3, rcx, flags=(CZF,)
161
162 # If they're not equal, set rdx:rax to the value from memory.
163 mov rax, rax, t2, flags=(nCZF,)
164 mov rdx, rdx, t3, flags=(nCZF,)
165
166 # Write to memory
167 stul t3, seg, [1, t0, t1], dsz
168 stul t2, seg, [1, t0, t1], 0
169};
170
171def macroop CMPXCHG8B_LOCKED_P {
172 rdip t7
173 lea t1, seg, riprel, disp, dataSize=asz
174 ldstl t2, seg, [1, t0, t1], 0
175 ldstl t3, seg, [1, t0, t1], dsz
176
177 sub t0, rax, t2, flags=(ZF,)
178 br label("doneComparing"), flags=(nCZF,)
179 sub t0, rdx, t3, flags=(ZF,)
180doneComparing:
181
182 # If they're equal, set t3:t2 to rbx:rcx to write to memory
183 mov t2, t2, rbx, flags=(CZF,)
184 mov t3, t3, rcx, flags=(CZF,)
185
186 # If they're not equal, set rdx:rax to the value from memory.
187 mov rax, rax, t2, flags=(nCZF,)
188 mov rdx, rdx, t3, flags=(nCZF,)
189
190 # Write to memory
191 stul t3, seg, [1, t0, t1], dsz
192 stul t2, seg, [1, t0, t1], 0
193};
194
101def macroop XADD_M_R {
102 ldst t1, seg, sib, disp
103 add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
104 st t2, seg, sib, disp
105 mov reg, reg, t1
106};
107
108def macroop XADD_P_R {

--- 33 unchanged lines hidden ---
195def macroop XADD_M_R {
196 ldst t1, seg, sib, disp
197 add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
198 st t2, seg, sib, disp
199 mov reg, reg, t1
200};
201
202def macroop XADD_P_R {

--- 33 unchanged lines hidden ---