summaryrefslogtreecommitdiffstats
path: root/x11-servers/xorg-server/files/extra-arch-i386
blob: 9bebe285797ca96e428cdf7e43373cf08887b382 (plain)
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
--- hw/xfree86/common/compiler.h.orig	2015-06-05 17:19:40.000000000 +0200
+++ hw/xfree86/common/compiler.h	2015-10-12 15:41:30.817470000 +0200
@@ -968,6 +968,59 @@ inl(unsigned PORT_SIZE port)
 #endif                          /* NDS32_MMIO_SWAP */
 
 #elif defined(__i386__) || defined(__ia64__)
+#if defined(__clang__)
+
+/*
+ * If gcc uses gas rather than the native assembler, the syntax of these
+ * inlines has to be different.		DHD
+ */
+
+static __inline__ void
+outb(unsigned short port, unsigned char val)
+{
+    __asm__ __volatile__("outb %0,%1"::"a"(val), "d"(port));
+}
+
+static __inline__ void
+outw(unsigned short port, unsigned short val)
+{
+    __asm__ __volatile__("outw %0,%1"::"a"(val), "d"(port));
+}
+
+static __inline__ void
+outl(unsigned short port, unsigned int val)
+{
+    __asm__ __volatile__("outl %0,%1"::"a"(val), "d"(port));
+}
+
+static __inline__ unsigned int
+inb(unsigned short port)
+{
+    unsigned char ret;
+    __asm__ __volatile__("inb %1,%0":"=a"(ret):"d"(port));
+
+    return ret;
+}
+
+static __inline__ unsigned int
+inw(unsigned short port)
+{
+    unsigned short ret;
+    __asm__ __volatile__("inw %1,%0":"=a"(ret):"d"(port));
+
+    return ret;
+}
+
+static __inline__ unsigned int
+inl(unsigned short port)
+{
+    unsigned int ret;
+    __asm__ __volatile__("inl %1,%0":"=a"(ret):"d"(port));
+
+    return ret;
+}
+
+#else /* !__clang__, presumable GAS */
 
 static __inline__ void
 outb(unsigned short port, unsigned char val)
@@ -1014,6 +1067,7 @@ inl(unsigned short port)
     return ret;
 }
 
+#endif /* !__clang__, GAS part */
 #endif                          /* arch madness */
 
 #else                           /* !GNUC */
OpenPOWER on IntegriCloud