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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/PortIO.S,v 1.2 2004/03/05 04:02:14 dawes Exp $ */
/* Port I/O functions for platforms with no inlining. */
#if defined(i386)
#include "assyntax.h"
FILE("PortIO.s")
AS_BEGIN
GLOBL GLNAME(outb)
GLOBL GLNAME(outw)
GLOBL GLNAME(outl)
GLOBL GLNAME(inb)
GLOBL GLNAME(inw)
GLOBL GLNAME(inl)
SEG_TEXT
ALIGNTEXT4
GLNAME(outb):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_B
RET
ALIGNTEXT4
GLNAME(outw):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_W
RET
ALIGNTEXT4
GLNAME(outl):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_L
RET
ALIGNTEXT4
GLNAME(inb):
MOV_L (REGOFF(4,ESP), EDX)
IN_B
RET
ALIGNTEXT4
GLNAME(inw):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET
ALIGNTEXT4
GLNAME(inl):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET
#elif defined(sparc)
#ifndef ASI_PL
#define ASI_PL 136
#endif
.file "PortIO.s"
.global outb
.global outw
.global outl
.global inb
.global inw
.global inl
.section ".text"
.align 4
outb:
stba %o1, [%o0] ASI_PL
membar 10
retl
nop
.align 4
outw:
stha %o1, [%o0] ASI_PL
membar 10
retl
nop
.align 4
outl:
sta %o1, [%o0] ASI_PL
membar 10
retl
nop
.align 4
inb:
lduba [%o0] ASI_PL, %o0
retl
nop
.align 4
inw:
lduha [%o0] ASI_PL, %o0
retl
nop
.align 4
inl:
lda [%o0] ASI_PL, %o0
retl
nop
#endif
|