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 --- |