-
Notifications
You must be signed in to change notification settings - Fork 0
/
asmfunc.s
55 lines (47 loc) · 962 Bytes
/
asmfunc.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
.intel_syntax noprefix
.code64
.global IoOut8
IoOut8:
mov rdx, rdi
mov rax, rsi
out dx, al
ret
.global IoOut16
IoOut16:
mov rdx, rdi
mov rax, rsi
out dx, ax
ret
.global IoOut32
IoOut32:
mov rdx, rdi
mov rax, rsi
out dx, eax
ret
.global IoIn8
IoIn8:
mov rdx, rdi
in al, dx
ret
.global IoIn16
IoIn16:
mov rdx, rdi
in ax, dx
ret
.global IoIn32
IoIn32:
mov rdx, rdi
in eax, dx
ret
.global CompareExchange
CompareExchange: # CompareExchange(mem_addr, expected, value)
mov rax, rsi
# If [mem_addr] = expected, then [mem_addr] <- value
# Otherwise rax <- [mem_addr]
lock cmpxchg [rdi], rdx
ret
.global LFencedWrite
LFencedWrite:
lfence
mov [rdi], rsi
ret