From owner-p4-projects@FreeBSD.ORG Sat Sep 2 16:08:53 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1824516A4E6; Sat, 2 Sep 2006 16:08:53 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B497416A4E1 for ; Sat, 2 Sep 2006 16:08:52 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6B5F543D45 for ; Sat, 2 Sep 2006 16:08:52 +0000 (GMT) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k82G8quY032358 for ; Sat, 2 Sep 2006 16:08:52 GMT (envelope-from gonzo@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k82G8qrG032355 for perforce@freebsd.org; Sat, 2 Sep 2006 16:08:52 GMT (envelope-from gonzo@FreeBSD.org) Date: Sat, 2 Sep 2006 16:08:52 GMT Message-Id: <200609021608.k82G8qrG032355@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko To: Perforce Change Reviews Cc: Subject: PERFORCE change 105539 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Sep 2006 16:08:53 -0000 http://perforce.freebsd.org/chv.cgi?CH=105539 Change 105539 by gonzo@gonzo_hideout on 2006/09/02 16:08:03 o Get macroses for MIPS assembly from NetBSD tree. o Put NetBSD's mips/include/asm.h copyrights. o Some additional call-frame defines added. Affected files ... .. //depot/projects/mips2/src/sys/mips/include/asm.h#7 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/include/asm.h#7 (text+ko) ==== @@ -1,9 +1,11 @@ -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. +/* $NetBSD: asm.h,v 1.37 2006/01/20 22:02:40 christos Exp $ */ + +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by - * William Jolitz. + * Ralph Campbell. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -13,7 +15,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -29,8 +31,24 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90 - * $FreeBSD: src/sys/amd64/include/asm.h,v 1.17 2005/04/10 20:49:21 alc Exp $ + * @(#)machAsmDefs.h 8.1 (Berkeley) 6/10/93 + */ + +/* + * machAsmDefs.h -- + * + * Macros used when writing assembler programs. + * + * Copyright (C) 1989 Digital Equipment Corporation. + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appears in all copies. + * Digital Equipment Corporation makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAsmDefs.h, + * v 1.2 89/08/15 18:28:24 rab Exp SPRITE (DECWRL) */ #ifndef _MACHINE_ASM_H_ @@ -101,59 +119,158 @@ #define ta2 $10 #define ta3 $11 -/* XXX: values which depends on register size. - * Used for sigcontext/mcontext_t handling. +#ifdef __ELF__ +# define _C_LABEL(x) x +#else +# ifdef __STDC__ +# define _C_LABEL(x) _ ## x +# else +# define _C_LABEL(x) _/**/x +# endif +#endif + +/* + * WEAK_ALIAS: create a weak alias. + */ +#define WEAK_ALIAS(alias,sym) \ + .weak alias; \ + alias = sym +/* + * STRONG_ALIAS: create a strong alias. */ -#define SZREG 4 -#define _OFFSETOF_SC_REGS 8 +#define STRONG_ALIAS(alias,sym) \ + .globl alias; \ + alias = sym + +#define GLOBAL(sym) \ + .globl sym; sym: + +#define ENTRY(sym) \ + .text; .globl sym; .ent sym; sym: -#if 0 -/* XXX: Should this be kt0 or kt1? */ -/* In the kernel, we use t7 to point at the per-cpu globals. */ -#ifdef _KERNEL -#define pcpup $8 -#endif -#endif +#define ASM_ENTRY(sym) \ + .text; .globl sym; .type sym,@function; sym: /* - * XXXMIPS: I don't like #ifdef noyet, since vim doesn't seem to understand - * it. + * LEAF + * A leaf routine does + * - call no other function, + * - never use any register that callee-saved (S0-S8), and + * - not use any local stack storage. */ -#if 0 +#define LEAF(x) \ + .globl _C_LABEL(x); \ + .ent _C_LABEL(x), 0; \ +_C_LABEL(x): ; \ + .frame sp, 0, ra; + /* - * Load the global pointer. + * STATIC_LEAF + * Declare a local leaf function. */ -#define LDGP(reg) \ - ldgp gp, 0(reg) -#endif /* notyet */ +#define STATIC_LEAF(x) \ + .ent _C_LABEL(x), 0; \ +_C_LABEL(x): ; \ + .frame sp, 0, ra; /* - * XXXMIPS: Stolen from juli's code. - * begin + * XLEAF + * declare alternate entry to leaf routine */ +#define XLEAF(x) \ + .globl _C_LABEL(x); \ + AENT (_C_LABEL(x)); \ +_C_LABEL(x): -#define GLOBAL(sym) \ - .globl sym; sym: +/* + * STATIC_XLEAF + * declare alternate entry to a static leaf routine + */ +#define STATIC_XLEAF(x) \ + AENT (_C_LABEL(x)); \ +_C_LABEL(x): + +/* + * NESTED + * A function calls other functions and needs + * therefore stack space to save/restore registers. + */ +#define NESTED(x, fsize, retpc) \ + .globl _C_LABEL(x); \ + .ent _C_LABEL(x), 0; \ +_C_LABEL(x): ; \ + .frame sp, fsize, retpc; -#define XLEAF(sym) \ - .globl sym; sym: +/* + * XNESTED + * declare alternate entry point to nested routine. + */ +#define XNESTED(x) \ + .globl _C_LABEL(x); \ + AENT (_C_LABEL(x)); \ +_C_LABEL(x): -#define LEAF(sym) \ - .globl sym; .ent sym; sym: .frame sp, 0, ra +/* + * END + * Mark end of a procedure. + */ +#define END(x) \ + .end _C_LABEL(x) -#define ENTRY(sym) \ - .text; .globl sym; .ent sym; sym: -#define ASM_ENTRY(sym) \ - .text; .globl sym; .type sym,@function; sym: +/* + * standard callframe { + * register_t cf_args[4]; arg0 - arg3 + * register_t cf_sp; frame pointer + * register_t cf_ra; return address + * }; + */ +#define CALLFRAME_SIZ (4 * (4 + 2)) +#define CALLFRAME_SP (4 * 4) +#define CALLFRAME_RA (4 * 5) -#define END(sym) \ - .end sym +/* + * While it would be nice to be compatible with the SGI + * REG_L and REG_S macros, because they do not take parameters, it + * is impossible to use them with the _MIPS_SIM_ABIX32 model. + * + * These macros hide the use of mips3 instructions from the + * assembler to prevent the assembler from generating 64-bit style + * ABI calls. + */ -/* XXXMIPS: end */ +#if !defined(_MIPS_BSD_API) || _MIPS_BSD_API == _MIPS_BSD_API_LP32 +#define REG_L lw +#define REG_S sw +#define REG_LI li +#define REG_PROLOGUE .set push +#define REG_EPILOGUE .set pop +#define SZREG 4 +#else +#define REG_L ld +#define REG_S sd +#define REG_LI dli +#define REG_PROLOGUE .set push ; .set mips3 +#define REG_EPILOGUE .set pop +#define SZREG 8 +#endif /* _MIPS_BSD_API */ +/* + * XXX: Values which depends on register size. Used for sigcontext/mcontext_t + * handling. Should to be checked and replaced in _setjmp/_longjmp functions. + */ +#if !defined(_MIPS_BSD_API) || _MIPS_BSD_API == _MIPS_BSD_API_LP32 +#define _OFFSETOF_SC_REGS 12 +#define _OFFSETOF_SC_FPREGS 152 +#define _OFFSETOF_SC_MASK 320 +#else +#define _OFFSETOF_SC_REGS 16 +#define _OFFSETOF_SC_FPREGS 292 +#define _OFFSETOF_SC_MASK 460 +#endif +/* XXXMIPS: end */ #define RCSID(x) .text; .asciz x #undef __FBSDID @@ -163,14 +280,18 @@ #define __FBSDID(s) /* nothing */ #endif /* not lint and not STRIP_FBSDID */ -#ifdef __ELF__ -# define _C_LABEL(x) x +#ifdef __STDC__ +#define WARN_REFERENCES(sym,msg) \ + .stabs msg ## ,30,0,0,0 ; \ + .stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0 +#elif defined(__ELF__) +#define WARN_REFERENCES(sym,msg) \ + .stabs msg,30,0,0,0 ; \ + .stabs __STRING(sym),1,0,0,0 #else -# ifdef __STDC__ -# define _C_LABEL(x) _ ## x -# else -# define _C_LABEL(x) _/**/x -# endif -#endif +#define WARN_REFERENCES(sym,msg) \ + .stabs msg,30,0,0,0 ; \ + .stabs __STRING(_/**/sym),1,0,0,0 +#endif /* __STDC__ */ #endif /* !_MACHINE_ASM_H_ */