xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

solaris-sparcv8plus.S (3967B)


      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