Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/pica/pica Moved to /cvsroot/syssrc/sys/arch/arc/arc...
details: https://anonhg.NetBSD.org/src/rev/c69ac5ef4e11
branches: trunk
changeset: 481105:c69ac5ef4e11
user: soda <soda%NetBSD.org@localhost>
date: Sun Jan 23 20:09:11 2000 +0000
description:
Moved to /cvsroot/syssrc/sys/arch/arc/arc/locore.S,v
diffstat:
sys/arch/pica/pica/locore.S | 4178 -------------------------------------------
1 files changed, 0 insertions(+), 4178 deletions(-)
diffs (truncated from 4182 to 300 lines):
diff -r 4f19512ace1b -r c69ac5ef4e11 sys/arch/pica/pica/locore.S
--- a/sys/arch/pica/pica/locore.S Sun Jan 23 20:09:10 2000 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4178 +0,0 @@
-/* $NetBSD: locore.S,v 1.8 1998/02/05 04:19:42 jonathan 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
- * Digital Equipment Corporation and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * 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/loMem.s,
- * v 1.1 89/07/11 17:55:04 nelson Exp SPRITE (DECWRL)
- * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAsm.s,
- * v 9.2 90/01/29 18:00:39 shirriff Exp SPRITE (DECWRL)
- * from: Header: /sprite/src/kernel/vm/ds3100.md/vmPmaxAsm.s,
- * v 1.1 89/07/10 14:27:41 nelson Exp SPRITE (DECWRL)
- *
- * @(#)locore.s 8.5 (Berkeley) 1/4/94
- */
-
-/*
- * Contains code that is the first executed at boot time plus
- * assembly language support routines.
- */
-
-#include <sys/errno.h>
-#include <sys/syscall.h>
-
-#include <machine/param.h>
-#include <machine/psl.h>
-#include <machine/asm.h>
-#include <machine/regnum.h>
-#include <machine/pte.h>
-
-#include "assym.h"
-
- .set noreorder
-
-/*
- * Amount to take off of the stack for the benefit of the debugger.
- */
-#define START_FRAME ((4 * 4) + 4 + 4)
-
- .globl start
- .globl _C_LABEL(kernel_text)
-start:
-_C_LABEL(kernel_text):
- mtc0 zero, MIPS_COP_0_STATUS_REG # Disable interrupts
- mtc0 zero, MIPS_COP_0_CAUSE_REG # Clear soft interrupts
-
-/*
- * Initialize stack and call machine startup.
- */
- la sp, start - START_FRAME
-#ifdef __GP_SUPPORT__
- la gp, _C_LABEL(_gp)
-#endif
- sw zero, START_FRAME - 4(sp) # Zero out old ra for debugger
- jal mips_init # mips_init(argc, argv, envp)
- sw zero, START_FRAME - 8(sp) # Zero out old fp for debugger
-
- li t0, MIPS_SR_COP_1_BIT # Disable interrupts and
- mtc0 t0, MIPS_COP_0_STATUS_REG # enable the fp coprocessor
- li sp, KERNELSTACK - START_FRAME # switch to standard stack
- mfc0 t0, MIPS_COP_0_PRID # read processor ID register
-
- nop # XXX r4000 pipeline:
- nop # wait for new status to
- nop # to be effective
- nop
- cfc1 t1, MIPS_FPU_ID # read FPU ID register
- sw t0, _C_LABEL(cpu_id) # save PRID register
- sw t1, _C_LABEL(fpu_id) # save FPU ID register
- jal _C_LABEL(main) # main(regs)
- move a0, zero
-/*
- * proc[1] == /etc/init now running here.
- * Restore user registers and return.
- */
- .set noat
- li v0, MIPS_SR_EXL
- mtc0 v0, MIPS_COP_0_STATUS_REG # set exeption level bit.
- lw a0, UADDR+U_PCB_REGS+(SR * 4)
- lw t0, UADDR+U_PCB_REGS+(MULLO * 4)
- lw t1, UADDR+U_PCB_REGS+(MULHI * 4)
- mtlo t0
- mthi t1
- lw a0, UADDR+U_PCB_REGS+(PC * 4)
- lw AT, UADDR+U_PCB_REGS+(AST * 4)
- lw v0, UADDR+U_PCB_REGS+(V0 * 4)
- dmtc0 a0, MIPS_COP_0_EXC_PC # set return address
- li a0, PSL_USERSET
- mtc0 a0, MIPS_COP_0_STATUS_REG # switch to user mode
- lw v1, UADDR+U_PCB_REGS+(V1 * 4)
- lw a0, UADDR+U_PCB_REGS+(A0 * 4)
- lw a1, UADDR+U_PCB_REGS+(A1 * 4)
- lw a2, UADDR+U_PCB_REGS+(A2 * 4)
- lw a3, UADDR+U_PCB_REGS+(A3 * 4)
- lw t0, UADDR+U_PCB_REGS+(T0 * 4)
- lw t1, UADDR+U_PCB_REGS+(T1 * 4)
- lw t2, UADDR+U_PCB_REGS+(T2 * 4)
- lw t3, UADDR+U_PCB_REGS+(T3 * 4)
- lw t4, UADDR+U_PCB_REGS+(T4 * 4)
- lw t5, UADDR+U_PCB_REGS+(T5 * 4)
- lw t6, UADDR+U_PCB_REGS+(T6 * 4)
- lw t7, UADDR+U_PCB_REGS+(T7 * 4)
- lw s0, UADDR+U_PCB_REGS+(S0 * 4)
- lw s1, UADDR+U_PCB_REGS+(S1 * 4)
- lw s2, UADDR+U_PCB_REGS+(S2 * 4)
- lw s3, UADDR+U_PCB_REGS+(S3 * 4)
- lw s4, UADDR+U_PCB_REGS+(S4 * 4)
- lw s5, UADDR+U_PCB_REGS+(S5 * 4)
- lw s6, UADDR+U_PCB_REGS+(S6 * 4)
- lw s7, UADDR+U_PCB_REGS+(S7 * 4)
- lw t8, UADDR+U_PCB_REGS+(T8 * 4)
- lw t9, UADDR+U_PCB_REGS+(T9 * 4)
- lw gp, UADDR+U_PCB_REGS+(GP * 4)
- lw sp, UADDR+U_PCB_REGS+(SP * 4)
- lw s8, UADDR+U_PCB_REGS+(S8 * 4)
- lw ra, UADDR+U_PCB_REGS+(RA * 4)
- eret
- .set at
-
-/*
- * GCC2 seems to want to call __main in main() for some reason.
- */
-LEAF(__main)
- j ra
- nop
-END(__main)
-
-/*
- * Primitives
- */
-
-/*
- * This table is indexed by u.u_pcb.pcb_onfault in trap().
- * The reason for using this table rather than storing an address in
- * u.u_pcb.pcb_onfault is simply to make the code faster.
- */
- .globl onfault_table
- .data
- .align 2
-_C_LABEL(onfault_table):
- .word 0 # invalid index number
-#define BADERR 1
- .word _C_LABEL(baderr)
-#define COPYERR 2
- .word _C_LABEL(copyerr)
-#define FSWBERR 3
- .word _C_LABEL(fswberr)
-#define FSWINTRBERR 4
- .word _C_LABEL(fswintrberr)
-#ifdef DEBUG
-#define MDBERR 5
- .word _C_LABEL(mdberr)
-#endif
- .text
-
-/*
- * See if access to addr with a len type instruction causes a machine check.
- * len is length of access (1=byte, 2=short, 4=long)
- *
- * badaddr(addr, len)
- * char *addr;
- * int len;
- */
-LEAF(badaddr)
- li v0, BADERR
- bne a1, 1, 2f
- sw v0, UADDR+U_PCB_ONFAULT
- b 5f
- lbu v0, (a0)
-2:
- bne a1, 2, 4f
- nop
- b 5f
- lhu v0, (a0)
-4:
- lw v0, (a0)
-5:
- sw zero, UADDR+U_PCB_ONFAULT
- j ra
- move v0, zero # made it w/o errors
-baderr:
- j ra
- li v0, 1 # trap sends us here
-END(badaddr)
-
-/*
- * This code is copied the user's stack for returning from signal handlers
- * (see sendsig() and sigreturn()). We have to compute the address
- * of the sigcontext struct for the sigreturn call.
- */
- .globl sigcode
-sigcode:
- addu a0, sp, 16 # address of sigcontext
- li v0, SYS_sigreturn # sigreturn(scp)
- syscall
- break 0 # just in case sigreturn fails
- .globl esigcode
-esigcode:
-
-/*
- * netorder = htonl(hostorder)
- * hostorder = ntohl(netorder)
- */
-LEAF(htonl) # a0 = 0x11223344, return 0x44332211
-ALEAF(ntohl)
- srl v1, a0, 24 # v1 = 0x00000011
- sll v0, a0, 24 # v0 = 0x44000000
- or v0, v0, v1
- and v1, a0, 0xff00
- sll v1, v1, 8 # v1 = 0x00330000
- or v0, v0, v1
- srl v1, a0, 8
- and v1, v1, 0xff00 # v1 = 0x00002200
- j ra
- or v0, v0, v1
-END(htonl)
-
-/*
- * netorder = htons(hostorder)
- * hostorder = ntohs(netorder)
- */
-LEAF(htons)
-ALEAF(ntohs)
- srl v0, a0, 8
- and v0, v0, 0xff
- sll v1, a0, 8
- and v1, v1, 0xff00
- j ra
- or v0, v0, v1
-END(htons)
-
-/*
- * bit = ffs(value)
- */
-LEAF(ffs)
- beq a0, zero, 2f
- move v0, zero
-1:
- and v1, a0, 1 # bit set?
- addu v0, v0, 1
- beq v1, zero, 1b # no, continue
- srl a0, a0, 1
-2:
- j ra
- nop
-END(ffs)
-
-/*
- * strlen(str)
- */
-LEAF(strlen)
- addu v1, a0, 1
-1:
- lb v0, 0(a0) # get byte from string
- addu a0, a0, 1 # increment pointer
- bne v0, zero, 1b # continue if not end
- nop
Home |
Main Index |
Thread Index |
Old Index