asm.h revision 231044
1/*- 2 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 3 * Copyright (C) 1995, 1996 TooLs GmbH. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. All advertising materials mentioning features or use of this software 15 * must display the following acknowledgement: 16 * This product includes software developed by TooLs GmbH. 17 * 4. The name of TooLs GmbH may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 * $NetBSD: asm.h,v 1.6.18.1 2000/07/25 08:37:14 kleink Exp $ 32 * $FreeBSD: head/sys/powerpc/include/asm.h 231044 2012-02-05 20:04:43Z andreast $ 33 */ 34 35#ifndef _MACHINE_ASM_H_ 36#define _MACHINE_ASM_H_ 37 38#include <sys/cdefs.h> 39 40#if defined(PIC) && !defined(__powerpc64__) 41#define PIC_PROLOGUE XXX 42#define PIC_EPILOGUE XXX 43#define PIC_PLT(x) x@plt 44#ifdef __STDC__ 45#define PIC_GOT(x) XXX 46#else /* not __STDC__ */ 47#define PIC_GOT(x) XXX 48#endif /* __STDC__ */ 49#else 50#define PIC_PROLOGUE 51#define PIC_EPILOGUE 52#define PIC_PLT(x) x 53#define PIC_GOT(x) x 54#endif 55 56#define CNAME(csym) csym 57#define ASMNAME(asmsym) asmsym 58#ifdef __powerpc64__ 59#define HIDENAME(asmsym) __CONCAT(_,asmsym) 60#else 61#define HIDENAME(asmsym) __CONCAT(.,asmsym) 62#endif 63 64#define _GLOBAL(x) \ 65 .data; .align 2; .globl x; x: 66 67#ifdef __powerpc64__ 68#define _ENTRY(x) \ 69 .text; .align 2; .globl x; .section ".opd","aw"; \ 70 .align 3; x: \ 71 .quad .L.x,.TOC.@tocbase,0; .size x,24; .previous; \ 72 .align 4; .type x,@function; .L.x: 73#else 74#define _ENTRY(x) \ 75 .text; .align 4; .globl x; .type x,@function; x: 76#endif 77 78#if defined(PROF) || (defined(_KERNEL) && defined(GPROF)) 79# ifdef __powerpc64__ 80# define _PROF_PROLOGUE mflr 0; \ 81 std 3,48(1); \ 82 std 4,56(1); \ 83 std 5,64(1); \ 84 std 0,16(1); \ 85 stdu 1,-112(1); \ 86 bl _mcount; \ 87 nop; \ 88 ld 0,112+16(1); \ 89 ld 3,112+48(1); \ 90 ld 4,112+56(1); \ 91 ld 5,112+64(1); \ 92 mtlr 0; \ 93 addi 1,1,112 94# else 95# define _PROF_PROLOGUE mflr 0; stw 0,4(1); bl _mcount 96# endif 97#else 98# define _PROF_PROLOGUE 99#endif 100 101#define ASENTRY(y) _ENTRY(ASMNAME(y)); _PROF_PROLOGUE 102#define ENTRY(y) _ENTRY(CNAME(y)); _PROF_PROLOGUE 103#define GLOBAL(y) _GLOBAL(CNAME(y)) 104 105#define ASENTRY_NOPROF(y) _ENTRY(ASMNAME(y)) 106#define ENTRY_NOPROF(y) _ENTRY(CNAME(y)) 107 108#define ASMSTR .asciz 109 110#define RCSID(x) .text; .asciz x 111 112#undef __FBSDID 113#if !defined(lint) && !defined(STRIP_FBSDID) 114#define __FBSDID(s) .ident s 115#else 116#define __FBSDID(s) /* nothing */ 117#endif /* not lint and not STRIP_FBSDID */ 118 119#define WEAK_REFERENCE(sym, alias) \ 120 .weak alias; \ 121 .equ alias,sym 122 123#ifdef __STDC__ 124#define WARN_REFERENCES(_sym,_msg) \ 125 .section .gnu.warning. ## _sym ; .ascii _msg ; .text 126#else 127#define WARN_REFERENCES(_sym,_msg) \ 128 .section .gnu.warning./**/_sym ; .ascii _msg ; .text 129#endif /* __STDC__ */ 130 131#endif /* !_MACHINE_ASM_H_ */ 132