xref: /titanic_44/usr/src/uts/i86xpv/ml/ia32.il (revision 0a1ad920531b37f01f4aa8084737026621c76bdb)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/
28/ Inline functions for the x86 kernel running on the hypervisor
29/
30
31	.inline	__hypercall0, 4
32	movl	(%esp), %eax
33	int	$0x82
34	.end
35
36	.inline	__hypercall1, 8
37	pushl	%ebx
38	movl	4(%esp), %eax
39	movl	8(%esp), %ebx
40	int	$0x82
41	popl	%ebx
42	.end
43
44	.inline	__hypercall2, 12
45	pushl	%ebx
46	movl	4(%esp), %eax
47	movl	8(%esp), %ebx
48	movl	12(%esp), %ecx
49	int	$0x82
50	popl	%ebx
51	.end
52
53	.inline	__hypercall3, 16
54	pushl	%ebx
55	movl	4(%esp), %eax
56	movl	8(%esp), %ebx
57	movl	12(%esp), %ecx
58	movl	16(%esp), %edx
59	int	$0x82
60	popl	%ebx
61	.end
62
63	.inline	__hypercall4, 20
64	pushl	%ebx
65	pushl	%esi
66	movl	8(%esp), %eax
67	movl	12(%esp), %ebx
68	movl	16(%esp), %ecx
69	movl	20(%esp), %edx
70	movl	24(%esp), %esi
71	int	$0x82
72	popl	%esi
73	popl	%ebx
74	.end
75
76	.inline	__hypercall5, 24
77	pushl	%ebx
78	pushl	%esi
79	pushl	%edi
80	movl	12(%esp), %eax
81	movl	16(%esp), %ebx
82	movl	20(%esp), %ecx
83	movl	24(%esp), %edx
84	movl	28(%esp), %esi
85	movl	32(%esp), %edi
86	int	$0x82
87	popl	%edi
88	popl	%esi
89	popl	%ebx
90	.end
91
92/*
93 * Read the -real- TSC.
94 * This is difficult to virtualize on the hypervisor given there is
95 * no way to prevent preemption; thus this inline function
96 * should only be used in the middle of the paravirtualized
97 * implementation of tsc_read.
98 */
99	.inline	__rdtsc_insn, 0
100	rdtsc
101	.end
102
103/*
104 * prefetch 64 bytes
105 *
106 * prefetch is an SSE extension which is not supported on older 32-bit processors
107 * so define this as a no-op for now
108 */
109
110 	.inline	prefetch_read_many, 4
111/	movl  (%esp), %eax
112/	prefetcht0	(%eax)
113/	prefetcht0	32(%eax)
114	.end
115
116 	.inline	prefetch_read_once, 4
117/	movl  (%esp), %eax
118/	prefetchnta	(%eax)
119/	prefetchnta	32(%eax)
120	.end
121
122 	.inline	prefetch_write_many, 4
123/	movl  (%esp), %eax
124/	prefetcht0	(%eax)
125/	prefetcht0	32(%eax)
126	.end
127
128 	.inline	prefetch_write_once, 4
129/	movl  (%esp), %eax
130/	prefetcht0	(%eax)
131/	prefetcht0	32(%eax)
132	.end
133