Deleted Added
full compact
asmacros.h (97721) asmacros.h (114349)
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

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

25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
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

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

25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * $FreeBSD: head/sys/amd64/include/asmacros.h 97721 2002-06-01 20:22:33Z alfred $
33 * $FreeBSD: head/sys/amd64/include/asmacros.h 114349 2003-05-01 01:05:25Z peter $
34 */
35
36#ifndef _MACHINE_ASMACROS_H_
37#define _MACHINE_ASMACROS_H_
38
39#include <sys/cdefs.h>
40
41/* XXX too much duplication in various asm*.h's. */
42
43/*
44 * CNAME and HIDENAME manage the relationship between symbol names in C
45 * and the equivalent assembly language names. CNAME is given a name as
46 * it would be used in a C program. It expands to the equivalent assembly
47 * language name. HIDENAME is given an assembly-language name, and expands
48 * to a possibly-modified form that will be invisible to C programs.
49 */
50#define CNAME(csym) csym
51#define HIDENAME(asmsym) .asmsym
52
34 */
35
36#ifndef _MACHINE_ASMACROS_H_
37#define _MACHINE_ASMACROS_H_
38
39#include <sys/cdefs.h>
40
41/* XXX too much duplication in various asm*.h's. */
42
43/*
44 * CNAME and HIDENAME manage the relationship between symbol names in C
45 * and the equivalent assembly language names. CNAME is given a name as
46 * it would be used in a C program. It expands to the equivalent assembly
47 * language name. HIDENAME is given an assembly-language name, and expands
48 * to a possibly-modified form that will be invisible to C programs.
49 */
50#define CNAME(csym) csym
51#define HIDENAME(asmsym) .asmsym
52
53#define ALIGN_DATA .p2align 2 /* 4 byte alignment, zero filled */
53#define ALIGN_DATA .p2align 3 /* 8 byte alignment, zero filled */
54#ifdef GPROF
55#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
56#else
54#ifdef GPROF
55#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
56#else
57#define ALIGN_TEXT .p2align 2,0x90 /* 4-byte alignment, nop filled */
57#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
58#endif
59#define SUPERALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
60
61#define GEN_ENTRY(name) ALIGN_TEXT; .globl CNAME(name); \
62 .type CNAME(name),@function; CNAME(name):
63#define NON_GPROF_ENTRY(name) GEN_ENTRY(name)
64#define NON_GPROF_RET .byte 0xc3 /* opcode for `ret' */
65
66#ifdef LOCORE
58#endif
59#define SUPERALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */
60
61#define GEN_ENTRY(name) ALIGN_TEXT; .globl CNAME(name); \
62 .type CNAME(name),@function; CNAME(name):
63#define NON_GPROF_ENTRY(name) GEN_ENTRY(name)
64#define NON_GPROF_RET .byte 0xc3 /* opcode for `ret' */
65
66#ifdef LOCORE
67#define PCPU(member) %fs:PC_ ## member
68#define PCPU_ADDR(member, reg) movl %fs:PC_PRVSPACE,reg; \
69 addl $PC_ ## member,reg
67#define PCPU(member) %gs:PC_ ## member
68#define PCPU_ADDR(member, reg) movq %gs:PC_PRVSPACE,reg; \
69 addq $PC_ ## member,reg
70#endif
71
72#ifdef GPROF
73/*
74 * __mcount is like [.]mcount except that doesn't require its caller to set
75 * up a frame pointer. It must be called before pushing anything onto the
76 * stack. gcc should eventually generate code to call __mcount in most
77 * cases. This would make -pg in combination with -fomit-frame-pointer

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

110 * `ret' clobbers eflags but this doesn't matter.
111 */
112#define ALTENTRY(name) GEN_ENTRY(name) ; MCOUNT ; MEXITCOUNT ; jmp 9f
113#define CROSSJUMP(jtrue, label, jfalse) \
114 jfalse 8f; MEXITCOUNT; jmp __CONCAT(to,label); 8:
115#define CROSSJUMPTARGET(label) \
116 ALIGN_TEXT; __CONCAT(to,label): ; MCOUNT; jmp label
117#define ENTRY(name) GEN_ENTRY(name) ; 9: ; MCOUNT
70#endif
71
72#ifdef GPROF
73/*
74 * __mcount is like [.]mcount except that doesn't require its caller to set
75 * up a frame pointer. It must be called before pushing anything onto the
76 * stack. gcc should eventually generate code to call __mcount in most
77 * cases. This would make -pg in combination with -fomit-frame-pointer

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

110 * `ret' clobbers eflags but this doesn't matter.
111 */
112#define ALTENTRY(name) GEN_ENTRY(name) ; MCOUNT ; MEXITCOUNT ; jmp 9f
113#define CROSSJUMP(jtrue, label, jfalse) \
114 jfalse 8f; MEXITCOUNT; jmp __CONCAT(to,label); 8:
115#define CROSSJUMPTARGET(label) \
116 ALIGN_TEXT; __CONCAT(to,label): ; MCOUNT; jmp label
117#define ENTRY(name) GEN_ENTRY(name) ; 9: ; MCOUNT
118#define FAKE_MCOUNT(caller) pushl caller ; call __mcount ; popl %ecx
118#define FAKE_MCOUNT(caller) pushq caller ; call __mcount ; popl %ecx
119#define MCOUNT call __mcount
120#define MCOUNT_LABEL(name) GEN_ENTRY(name) ; nop ; ALIGN_TEXT
121#define MEXITCOUNT call HIDENAME(mexitcount)
122#define ret MEXITCOUNT ; NON_GPROF_RET
123
124#else /* !GPROF */
125/*
126 * ALTENTRY() has to align because it is before a corresponding ENTRY().

--- 15 unchanged lines hidden ---
119#define MCOUNT call __mcount
120#define MCOUNT_LABEL(name) GEN_ENTRY(name) ; nop ; ALIGN_TEXT
121#define MEXITCOUNT call HIDENAME(mexitcount)
122#define ret MEXITCOUNT ; NON_GPROF_RET
123
124#else /* !GPROF */
125/*
126 * ALTENTRY() has to align because it is before a corresponding ENTRY().

--- 15 unchanged lines hidden ---