Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xfree86 / os-support / solaris / solaris-sparcv8plus.S
CommitLineData
a09e091a
JB
1/* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a
4 * copy of this software and associated documentation files (the "Software"),
5 * to deal in the Software without restriction, including without limitation
6 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 * and/or sell copies of the Software, and to permit persons to whom the
8 * Software is furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice (including the next
11 * paragraph) shall be included in all copies or substantial portions of the
12 * Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22
23#ifdef INLINE_ASM
24#define FUNCTION_START(f,n) .inline f,n
25#define FUNCTION_END(f) .end
26#else
27#define _ASM
28#include <sys/asm_linkage.h>
29#define FUNCTION_START(f,n) ENTRY(f)
30#define FUNCTION_END(f) retl; nop; SET_SIZE(f)
31#endif
32
33/* Converted from common/compiler.h gcc inline format to Sun cc inline
34 * format by Kenjiro Tsuji
35 *
36 * The value 0x88 means ASI_PRIMARY_LITTLE.
37 * The store or load to/from the address space will be done
38 * as little-endian. In the original xrog code, the value
39 * is defined as the macro ASI_PL.
40 *
41 * In the original xorg code, "membar #StoreStore|#StoreLoad"
42 * is directly implemented as an instruction "0x8143e00a".
43 *
44 */
45
46 FUNCTION_START(outb, 0)
47 stba %o1, [%o0] 0x88
48 membar #StoreStore|#StoreLoad
49 FUNCTION_END(outb)
50
51 FUNCTION_START(outw, 0)
52 stha %o1, [%o0] 0x88
53 membar #StoreStore|#StoreLoad
54 FUNCTION_END(outw)
55
56 FUNCTION_START(outl, 0)
57 sta %o1, [%o0] 0x88
58 membar #StoreStore|#StoreLoad
59 FUNCTION_END(outl)
60
61 FUNCTION_START(inb, 0)
62 lduba [%o0] 0x88, %o0
63 FUNCTION_END(inb)
64
65 FUNCTION_START(inw, 0)
66 lduha [%o0] 0x88, %o0
67 FUNCTION_END(inw)
68
69 FUNCTION_START(inl, 0)
70 lda [%o0] 0x88, %o0
71 FUNCTION_END(inl)
72
73 FUNCTION_START(xf86ReadMmio8, 0)
74 lduba [%o0 + %o1] 0x88, %o0
75 FUNCTION_END(xf86ReadMmio8)
76
77 FUNCTION_START(xf86ReadMmio16Be, 0)
78 lduh [%o0 + %o1], %o0
79 FUNCTION_END(xf86ReadMmio16Be)
80
81 FUNCTION_START(xf86ReadMmio16Le, 0)
82 lduha [%o0 + %o1] 0x88, %o0
83 FUNCTION_END(xf86ReadMmio16Le)
84
85 FUNCTION_START(xf86ReadMmio32Be, 0)
86 ld [%o0 + %o1], %o0
87 FUNCTION_END(xf86ReadMmio32Be)
88
89 FUNCTION_START(xf86ReadMmio32Le, 0)
90 lda [%o0 + %o1] 0x88, %o0
91 FUNCTION_END(xf86ReadMmio32Le)
92
93 FUNCTION_START(xf86WriteMmio8, 0)
94 stba %o2, [%o0 + %o1] 0x88
95 membar #StoreStore|#StoreLoad
96 FUNCTION_END(xf86WriteMmio8)
97
98 FUNCTION_START(xf86WriteMmio16Be, 0)
99 sth %o2, [%o0 + %o1]
100 membar #StoreStore|#StoreLoad
101 FUNCTION_END(xf86WriteMmio16Be)
102
103 FUNCTION_START(xf86WriteMmio16Le, 0)
104 stha %o2, [%o0 + %o1] 0x88
105 membar #StoreStore|#StoreLoad
106 FUNCTION_END(xf86WriteMmio16Le)
107
108 FUNCTION_START(xf86WriteMmio32Be, 0)
109 st %o2, [%o0 + %o1]
110 membar #StoreStore|#StoreLoad
111 FUNCTION_END(xf86WriteMmio32Be)
112
113 FUNCTION_START(xf86WriteMmio32Le, 0)
114 sta %o2, [%o0 + %o1] 0x88
115 membar #StoreStore|#StoreLoad
116 FUNCTION_END(xf86WriteMmio32Le)
117
118 FUNCTION_START(xf86WriteMmio8NB, 0)
119 add %o0, %o1, %o0
120 stba %o2, [%o0] 0x88
121 FUNCTION_END(xf86WriteMmio8NB)
122
123 FUNCTION_START(xf86WriteMmio16BeNB, 0)
124 sth %o2, [%o0 + %o1]
125 FUNCTION_END(xf86WriteMmio16BeNB)
126
127 FUNCTION_START(xf86WriteMmio16LeNB, 0)
128 stha %o2, [%o0 + %o1] 0x88
129 FUNCTION_END(xf86WriteMmio16LeNB)
130
131 FUNCTION_START(xf86WriteMmio32BeNB, 0)
132 st %o2, [%o0 + %o1]
133 FUNCTION_END(xf86WriteMmio32BeNB)
134
135 FUNCTION_START(xf86WriteMmio32LeNB, 0)
136 sta %o2, [%o0 + %o1] 0x88
137 FUNCTION_END(xf86WriteMmio32LeNB)
138