[BACK]Return to asm.h CVS log [TXT][DIR] Up to [local] / sys / arch / m68k / include

Annotation of sys/arch/m68k/include/asm.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: asm.h,v 1.7 2007/05/15 13:46:22 martin Exp $  */
                      2: /*     $NetBSD: asm.h,v 1.13 1997/04/24 22:49:39 thorpej Exp $ */
                      3:
                      4: /*
                      5:  * Copyright (c) 1997 Jason R. Thorpe.  All rights reserved.
                      6:  * Copyright (c) 1994 Allen Briggs
                      7:  * All rights reserved.
                      8:  *
                      9:  * Gleaned from locore.s and sun3 asm.h which had the following copyrights:
                     10:  * locore.s:
                     11:  * Copyright (c) 1988 University of Utah.
                     12:  * Copyright (c) 1982, 1990 The Regents of the University of California.
                     13:  * sun3/include/asm.h:
                     14:  * Copyright (c) 1993 Adam Glass
                     15:  * Copyright (c) 1990 The Regents of the University of California.
                     16:  *
                     17:  * Redistribution and use in source and binary forms, with or without
                     18:  * modification, are permitted provided that the following conditions
                     19:  * are met:
                     20:  * 1. Redistributions of source code must retain the above copyright
                     21:  *    notice, this list of conditions and the following disclaimer.
                     22:  * 2. Redistributions in binary form must reproduce the above copyright
                     23:  *    notice, this list of conditions and the following disclaimer in the
                     24:  *    documentation and/or other materials provided with the distribution.
                     25:  * 3. Neither the name of the University nor the names of its contributors
                     26:  *    may be used to endorse or promote products derived from this software
                     27:  *    without specific prior written permission.
                     28:  *
                     29:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     30:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     31:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     32:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     33:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     34:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     35:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     36:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     37:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     38:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     39:  * SUCH DAMAGE.
                     40:  */
                     41:
                     42: #ifndef _ASM_H_
                     43: #define _ASM_H_
                     44:
                     45: #ifdef __ELF__
                     46: #define        _C_LABEL(name)          name
                     47: #else
                     48: #ifdef __STDC__
                     49: #define        _C_LABEL(name)          _ ## name
                     50: #else
                     51: #define        _C_LABEL(name)          _/**/name
                     52: #endif /* __STDC__ */
                     53: #endif
                     54:
                     55: #define        _ASM_LABEL(name)        name
                     56:
                     57: #ifndef _KERNEL
                     58: #define        _ENTRY(name) \
                     59:        .text; .even; .globl name; .type name,@function; name:
                     60: #else
                     61: #define        _ENTRY(name) \
                     62:        .text; .even; .globl name; name:
                     63: #endif
                     64:
                     65: #ifdef GPROF
                     66: #define _PROF_PROLOG   link a6,#0; jbsr mcount; unlk a6
                     67: #else
                     68: #define _PROF_PROLOG
                     69: #endif
                     70:
                     71: #define ENTRY(name)            _ENTRY(_C_LABEL(name)) _PROF_PROLOG
                     72: #define        ASENTRY(name)           _ENTRY(_ASM_LABEL(name)) _PROF_PROLOG
                     73:
                     74: #define        ENTRY_NOPROFILE(name)   _ENTRY(_C_LABEL(name))
                     75: #define        ASENTRY_NOPROFILE(name) _ENTRY(_ASM_LABEL(name))
                     76:
                     77: /*
                     78:  * The m68k ALTENTRY macro is very different than the traditional
                     79:  * implementation used by other OpenBSD ports.  Usually ALTENTRY
                     80:  * simply provides an alternate function entry point.  The m68k
                     81:  * definition takes a second argument and jumps inside the second
                     82:  * function when profiling is enabled.
                     83:  *
                     84:  * The m68k behavior is similar to the ENTRY2 macro found in
                     85:  * solaris' asm_linkage.h.
                     86:  *
                     87:  * Providing ENTRY2 and changing all the code that uses ALTENTRY
                     88:  * to use it would be a desirable change.
                     89:  */
                     90: #ifdef PROF
                     91: #define ALTENTRY(name, rname)  ENTRY(name); jra rname+12
                     92: #else
                     93: #define ALTENTRY(name, rname)  _ENTRY(_C_LABEL(name))
                     94: #endif
                     95:
                     96: #define RCSID(x)       .text                   ;       \
                     97:                        .asciz x                ;       \
                     98:                        .even
                     99:
                    100: #ifdef __ELF__
                    101: #define        WEAK_ALIAS(alias,sym)                           \
                    102:        .weak alias;                                    \
                    103:        alias = sym
                    104: #else
                    105: #ifdef __STDC__
                    106: #define        WEAK_ALIAS(alias,sym)                           \
                    107:        .weak _##alias;                         \
                    108:        _##alias = _##sym
                    109: #else
                    110: #define        WEAK_ALIAS(alias,sym)                           \
                    111:        .weak _/**/alias;                               \
                    112:        _/**/alias = _/**/sym
                    113: #endif
                    114: #endif
                    115:
                    116: /*
                    117:  * Global variables of whatever sort.
                    118:  */
                    119: #define        GLOBAL(x)                                       \
                    120:                .globl  _C_LABEL(x)             ;       \
                    121:        _C_LABEL(x):
                    122:
                    123: #define        ASGLOBAL(x)                                     \
                    124:                .globl  _ASM_LABEL(x)           ;       \
                    125:        _ASM_LABEL(x):
                    126:
                    127: /*
                    128:  * ...and local variables.
                    129:  */
                    130: #define        LOCAL(x)                                        \
                    131:        _C_LABEL(x):
                    132:
                    133: #define        ASLOCAL(x)                                      \
                    134:        _ASM_LABEL(x):
                    135:
                    136: /*
                    137:  * Items in the BSS segment.
                    138:  */
                    139: #define        BSS(name, size)                                 \
                    140:        .comm   _C_LABEL(name),size
                    141:
                    142: #define        ASBSS(name, size)                               \
                    143:        .comm   _ASM_LABEL(name),size
                    144:
                    145: #ifdef _KERNEL
                    146: /*
                    147:  * Shorthand for calling panic().
                    148:  * Note the side-effect: it uses up the 9: label, so be careful!
                    149:  */
                    150: #define        PANIC(x)                                        \
                    151:                pea     9f                      ;       \
                    152:                jbsr    _C_LABEL(panic)         ;       \
                    153:        9:      .asciz  x                       ;       \
                    154:                .even
                    155:
                    156: /*
                    157:  * Shorthand for defining vectors for the vector table.
                    158:  */
                    159: #define        VECTOR(x)                                       \
                    160:        .long   _C_LABEL(x)
                    161:
                    162: #define        ASVECTOR(x)                                     \
                    163:        .long   _ASM_LABEL(x)
                    164:
                    165: #define        VECTOR_UNUSED                                   \
                    166:        .long   0
                    167:
                    168: #define CURPROC        _C_LABEL(cpu_info_store) + CI_CURPROC
                    169:
                    170: #endif /* _KERNEL */
                    171:
                    172: #endif /* _ASM_H_ */

CVSweb