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_ */ |