Module Name:    src
Committed By:   matt
Date:           Mon Feb 27 16:59:43 UTC 2012

Modified Files:
        src/sys/arch/mips/conf [matt-nb5-mips64]: files.mips
        src/sys/arch/mips/mips [matt-nb5-mips64]: mips_emul.c

Log Message:
Add option NOMIPSEMUL so disable (almost) all emulation.


To generate a diff of this commit:
cvs rdiff -u -r1.58.24.19 -r1.58.24.20 src/sys/arch/mips/conf/files.mips
cvs rdiff -u -r1.14.78.14 -r1.14.78.15 src/sys/arch/mips/mips/mips_emul.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/conf/files.mips
diff -u src/sys/arch/mips/conf/files.mips:1.58.24.19 src/sys/arch/mips/conf/files.mips:1.58.24.20
--- src/sys/arch/mips/conf/files.mips:1.58.24.19	Tue Dec 27 06:55:38 2011
+++ src/sys/arch/mips/conf/files.mips	Mon Feb 27 16:59:42 2012
@@ -14,6 +14,7 @@ defflag	opt_cputype.h		NOFPU FPEMUL
 					# ENABLE_MIPS_R4700
 					# ENABLE_MIPS_R3NKK
 defparam opt_cputype.h		MIPS_PAGE_SHIFT
+defflag opt_mips_emul.h		NOMIPSEMUL
 defflag	opt_mips_cache.h	MIPS3_NO_PV_UNCACHED
 				ENABLE_MIPS4_CACHE_R10K
 defflag opt_mips3_wired.h	ENABLE_MIPS3_WIRED_MAP

Index: src/sys/arch/mips/mips/mips_emul.c
diff -u src/sys/arch/mips/mips/mips_emul.c:1.14.78.14 src/sys/arch/mips/mips/mips_emul.c:1.14.78.15
--- src/sys/arch/mips/mips/mips_emul.c:1.14.78.14	Mon Feb 13 08:13:42 2012
+++ src/sys/arch/mips/mips/mips_emul.c	Mon Feb 27 16:59:42 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_emul.c,v 1.14.78.14 2012/02/13 08:13:42 matt Exp $ */
+/*	mips_emul.c,v 1.14.78.14 2012/02/13 08:13:42 matt Exp */
 
 /*
  * Copyright (c) 1999 Shuichiro URATA.  All rights reserved.
@@ -27,7 +27,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_emul.c,v 1.14.78.14 2012/02/13 08:13:42 matt Exp $");
+__KERNEL_RCSID(0, "mips_emul.c,v 1.14.78.14 2012/02/13 08:13:42 matt Exp");
+
+#include "opt_mips_emul.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -43,11 +45,14 @@ __KERNEL_RCSID(0, "$NetBSD: mips_emul.c,
 #include <mips/vmparam.h>			/* for VM_MAX_ADDRESS */
 #include <mips/trap.h>
 
+#ifndef NOMIPSEMUL
 static void	send_sigsegv(intptr_t, uint32_t, struct trapframe *, uint32_t);
+#endif
 static void	send_sigill(intptr_t, uint32_t, struct trapframe *, uint32_t,
 		    uint32_t);
 static void	update_pc(struct trapframe *, uint32_t);
 
+#if (MIPS1 + MIPS2) > 0
 /*
  * MIPS2 LL instruction emulation state
  */
@@ -56,6 +61,7 @@ struct {
 	vaddr_t addr;
 	uint32_t value;
 } llstate;
+#endif
 
 /*
  * Analyse 'next' PC address taking account of branch/jump instructions
@@ -206,18 +212,24 @@ mips_emul_inst(uint32_t status, uint32_t
 		inst = ufetch_uint32((uint32_t *)opc);
 
 	switch (((InstFmt)inst).FRType.op) {
+#ifndef NOMIPSEMUL
+#if (MIPS1 + MIPS2) > 0
 	case OP_LWC0:
 		mips_emul_lwc0(inst, tf, cause);
 		break;
 	case OP_SWC0:
 		mips_emul_swc0(inst, tf, cause);
 		break;
+#endif
 	case OP_SPECIAL:
 		mips_emul_special(inst, tf, cause);
 		break;
+#endif
+#if (MIPS1 + MIPS2 + MIPS3 + MIPS32 + MIPS64 + MIPS64_RMIXL) > 0
 	case OP_SPECIAL3:
 		mips_emul_special3(inst, tf, cause);
 		break;
+#endif
 	case OP_COP1:
 #if defined(FPEMUL)
 		mips_emul_fp(inst, tf, cause);
@@ -251,6 +263,7 @@ mips_emul_inst(uint32_t status, uint32_t
 	}
 }
 
+#ifndef NOMIPSEMUL
 static void
 send_sigsegv(intptr_t vaddr, uint32_t exccode, struct trapframe *tf,
     uint32_t cause)
@@ -266,6 +279,7 @@ send_sigsegv(intptr_t vaddr, uint32_t ex
 	ksi.ksi_addr = (void *)vaddr;
 	cpu_trapsignal(curlwp, &ksi, tf);
 }
+#endif /* NOMIPSEMUL */
 
 static void
 send_sigill(intptr_t vaddr, uint32_t exccode, struct trapframe *tf,
@@ -295,6 +309,7 @@ update_pc(struct trapframe *tf, uint32_t
 		tf->tf_regs[_R_PC] += 4;
 }
 
+#if !defined(NOMIPSEMUL) && (MIPS1 + MIPS2) > 0
 /*
  * MIPS2 LL instruction
  */
@@ -381,7 +396,9 @@ mips_emul_swc0(uint32_t inst, struct tra
 	*t = 0;
 	update_pc(tf, cause);
 }
+#endif /* !defined(NOMIPSEMUL) && (MIPS1 + MIPS2) > 0 */
 
+#ifndef NOMIPSEMUL
 void
 mips_emul_special(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
@@ -399,6 +416,9 @@ mips_emul_special(uint32_t inst, struct 
 	update_pc(tf, cause);
 }
 
+#endif /* NOMIPSEMUL */
+
+#if (MIPS1 + MIPS2 + MIPS3 + MIPS32 + MIPS64 + MIPS64_RMIXL) > 0
 void
 mips_emul_special3(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
@@ -419,6 +439,7 @@ mips_emul_special3(uint32_t inst, struct
 
 	update_pc(tf, cause);
 }
+#endif
 
 #if defined(FPEMUL)
 

Reply via email to