Deleted Added
full compact
asmacros.h (127914) asmacros.h (153241)
1/*-
2 * Copyright (c) 1993 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 12 unchanged lines hidden (view full) ---

21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
1/*-
2 * Copyright (c) 1993 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 12 unchanged lines hidden (view full) ---

21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD: head/sys/amd64/include/asmacros.h 127914 2004-04-05 21:29:41Z imp $
29 * $FreeBSD: head/sys/amd64/include/asmacros.h 153241 2005-12-08 18:33:30Z jhb $
30 */
31
32#ifndef _MACHINE_ASMACROS_H_
33#define _MACHINE_ASMACROS_H_
34
35#include <sys/cdefs.h>
36
37/* XXX too much duplication in various asm*.h's. */

--- 16 unchanged lines hidden (view full) ---

54#endif
55#define SUPERALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
56
57#define GEN_ENTRY(name) ALIGN_TEXT; .globl CNAME(name); \
58 .type CNAME(name),@function; CNAME(name):
59#define NON_GPROF_ENTRY(name) GEN_ENTRY(name)
60#define NON_GPROF_RET .byte 0xc3 /* opcode for `ret' */
61
30 */
31
32#ifndef _MACHINE_ASMACROS_H_
33#define _MACHINE_ASMACROS_H_
34
35#include <sys/cdefs.h>
36
37/* XXX too much duplication in various asm*.h's. */

--- 16 unchanged lines hidden (view full) ---

54#endif
55#define SUPERALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
56
57#define GEN_ENTRY(name) ALIGN_TEXT; .globl CNAME(name); \
58 .type CNAME(name),@function; CNAME(name):
59#define NON_GPROF_ENTRY(name) GEN_ENTRY(name)
60#define NON_GPROF_RET .byte 0xc3 /* opcode for `ret' */
61
62#ifdef LOCORE
63#define PCPU(member) %gs:PC_ ## member
64#define PCPU_ADDR(member, reg) movq %gs:PC_PRVSPACE,reg; \
65 addq $PC_ ## member,reg
66#endif
67
68#ifdef GPROF
69/*
70 * __mcount is like [.]mcount except that doesn't require its caller to set
71 * up a frame pointer. It must be called before pushing anything onto the
72 * stack. gcc should eventually generate code to call __mcount in most
73 * cases. This would make -pg in combination with -fomit-frame-pointer
74 * useful. gcc has a configuration variable PROFILE_BEFORE_PROLOGUE to
75 * allow profiling before setting up the frame pointer, but this is

--- 60 unchanged lines hidden (view full) ---

136
137#ifdef LOCORE
138/*
139 * Convenience macros for declaring interrupt entry points.
140 */
141#define IDTVEC(name) ALIGN_TEXT; .globl __CONCAT(X,name); \
142 .type __CONCAT(X,name),@function; __CONCAT(X,name):
143
62#ifdef GPROF
63/*
64 * __mcount is like [.]mcount except that doesn't require its caller to set
65 * up a frame pointer. It must be called before pushing anything onto the
66 * stack. gcc should eventually generate code to call __mcount in most
67 * cases. This would make -pg in combination with -fomit-frame-pointer
68 * useful. gcc has a configuration variable PROFILE_BEFORE_PROLOGUE to
69 * allow profiling before setting up the frame pointer, but this is

--- 60 unchanged lines hidden (view full) ---

130
131#ifdef LOCORE
132/*
133 * Convenience macros for declaring interrupt entry points.
134 */
135#define IDTVEC(name) ALIGN_TEXT; .globl __CONCAT(X,name); \
136 .type __CONCAT(X,name),@function; __CONCAT(X,name):
137
138/*
139 * Macros to create and destroy a trap frame.
140 */
141#define PUSH_FRAME \
142 subq $TF_RIP,%rsp ; /* skip dummy tf_err and tf_trapno */ \
143 testb $SEL_RPL_MASK,TF_CS(%rsp) ; /* come from kernel? */ \
144 jz 1f ; /* Yes, dont swapgs again */ \
145 swapgs ; \
1461: movq %rdi,TF_RDI(%rsp) ; \
147 movq %rsi,TF_RSI(%rsp) ; \
148 movq %rdx,TF_RDX(%rsp) ; \
149 movq %rcx,TF_RCX(%rsp) ; \
150 movq %r8,TF_R8(%rsp) ; \
151 movq %r9,TF_R9(%rsp) ; \
152 movq %rax,TF_RAX(%rsp) ; \
153 movq %rbx,TF_RBX(%rsp) ; \
154 movq %rbp,TF_RBP(%rsp) ; \
155 movq %r10,TF_R10(%rsp) ; \
156 movq %r11,TF_R11(%rsp) ; \
157 movq %r12,TF_R12(%rsp) ; \
158 movq %r13,TF_R13(%rsp) ; \
159 movq %r14,TF_R14(%rsp) ; \
160 movq %r15,TF_R15(%rsp)
161
162#define POP_FRAME \
163 movq TF_RDI(%rsp),%rdi ; \
164 movq TF_RSI(%rsp),%rsi ; \
165 movq TF_RDX(%rsp),%rdx ; \
166 movq TF_RCX(%rsp),%rcx ; \
167 movq TF_R8(%rsp),%r8 ; \
168 movq TF_R9(%rsp),%r9 ; \
169 movq TF_RAX(%rsp),%rax ; \
170 movq TF_RBX(%rsp),%rbx ; \
171 movq TF_RBP(%rsp),%rbp ; \
172 movq TF_R10(%rsp),%r10 ; \
173 movq TF_R11(%rsp),%r11 ; \
174 movq TF_R12(%rsp),%r12 ; \
175 movq TF_R13(%rsp),%r13 ; \
176 movq TF_R14(%rsp),%r14 ; \
177 movq TF_R15(%rsp),%r15 ; \
178 testb $SEL_RPL_MASK,TF_CS(%rsp) ; /* come from kernel? */ \
179 jz 1f ; /* keep kernel GS.base */ \
180 cli ; \
181 swapgs ; \
1821: addq $TF_RIP,%rsp /* skip over tf_err, tf_trapno */
183
184/*
185 * Access per-CPU data.
186 */
187#define PCPU(member) %gs:PC_ ## member
188#define PCPU_ADDR(member, reg) \
189 movq %gs:PC_PRVSPACE, reg ; \
190 addq $PC_ ## member, reg
191
144#endif /* LOCORE */
145
146#endif /* !_MACHINE_ASMACROS_H_ */
192#endif /* LOCORE */
193
194#endif /* !_MACHINE_ASMACROS_H_ */