Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/x86/lib/cmpxchg8b_emu.S
10818 views
1
/*
2
* This program is free software; you can redistribute it and/or
3
* modify it under the terms of the GNU General Public License
4
* as published by the Free Software Foundation; version 2
5
* of the License.
6
*
7
*/
8
9
#include <linux/linkage.h>
10
#include <asm/alternative-asm.h>
11
#include <asm/frame.h>
12
#include <asm/dwarf2.h>
13
14
15
.text
16
17
/*
18
* Inputs:
19
* %esi : memory location to compare
20
* %eax : low 32 bits of old value
21
* %edx : high 32 bits of old value
22
* %ebx : low 32 bits of new value
23
* %ecx : high 32 bits of new value
24
*/
25
ENTRY(cmpxchg8b_emu)
26
CFI_STARTPROC
27
28
#
29
# Emulate 'cmpxchg8b (%esi)' on UP except we don't
30
# set the whole ZF thing (caller will just compare
31
# eax:edx with the expected value)
32
#
33
cmpxchg8b_emu:
34
pushfl
35
cli
36
37
cmpl (%esi), %eax
38
jne not_same
39
cmpl 4(%esi), %edx
40
jne half_same
41
42
movl %ebx, (%esi)
43
movl %ecx, 4(%esi)
44
45
popfl
46
ret
47
48
not_same:
49
movl (%esi), %eax
50
half_same:
51
movl 4(%esi), %edx
52
53
popfl
54
ret
55
56
CFI_ENDPROC
57
ENDPROC(cmpxchg8b_emu)
58
59