Module Name:    src
Committed By:   thorpej
Date:           Fri Jan 19 17:08:42 UTC 2024

Modified Files:
        src/sys/arch/amiga/amiga: locore.s
        src/sys/arch/amiga/include: cpu.h

Log Message:
Switch the amiga port to use the same clockframe layout as the other
m68k ports.


To generate a diff of this commit:
cvs rdiff -u -r1.170 -r1.171 src/sys/arch/amiga/amiga/locore.s
cvs rdiff -u -r1.85 -r1.86 src/sys/arch/amiga/include/cpu.h

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/amiga/amiga/locore.s
diff -u src/sys/arch/amiga/amiga/locore.s:1.170 src/sys/arch/amiga/amiga/locore.s:1.171
--- src/sys/arch/amiga/amiga/locore.s:1.170	Wed Jan 17 12:33:49 2024
+++ src/sys/arch/amiga/amiga/locore.s	Fri Jan 19 17:08:42 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.170 2024/01/17 12:33:49 thorpej Exp $	*/
+/*	$NetBSD: locore.s,v 1.171 2024/01/19 17:08:42 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -479,9 +479,7 @@ ENTRY_NOPROFILE(DraCoLev2intr)
 	btst	#0,%d0			| timerA interrupt?
 	jeq	Ldraciaend
 
-	lea	%sp@(16),%a1		| get pointer to PS
-	movl	%a1,%sp@-		| push pointer to PS, PC
-
+	movl	%sp,%sp@-		| push pointer to clockframe
 	movw	#PSL_HIGHIPL,%sr	| hardclock at high IPL
 	jbsr	_C_LABEL(hardclock)	| call generic clock int routine
 	addql	#4,%sp			| pop params
@@ -504,10 +502,9 @@ ENTRY_NOPROFILE(DraCoLev1intr)
 	jeq	Ldrintrcommon	| so test last.
 	movw	#PSL_HIGHIPL,%sr	| run clock at high ipl
 Ldrclockretry:
-	lea	%sp@(16),%a1	| get pointer to PS
-	movl	%a1,%sp@-	| push pointer to PS, PC
+	movl	%sp,%sp@-		| push pointer to clockframe
 	jbsr	_C_LABEL(hardclock)
-	addql	#4,%sp		| pop params
+	addql	#4,%sp			| pop params
 	addql	#1,_C_LABEL(intrcnt)+32	| add another system clock interrupt
 
 	movl	_C_LABEL(draco_ioct),%a0
@@ -627,8 +624,8 @@ ENTRY_NOPROFILE(fake_lev6intr)
 	btst	#0,%d0			| timerA interrupt?
 	jeq     Ltstciab4		| no
 	movl	%d0,%sp@-		| push CIAB interrupt flags
-	lea	%sp@(20),%a1		| get pointer to PS
-	movl	%a1,%sp@-		| push pointer to PS, PC
+	lea	%sp@(4),%a1		| get pointer to clockframe
+	movl	%a1,%sp@-		| push pointer to clockframe
 	jbsr	_C_LABEL(hardclock)	| call generic clock int routine
 	addql	#4,%sp			| pop params
 	addql	#1,_C_LABEL(intrcnt)+32	| add another system clock interrupt

Index: src/sys/arch/amiga/include/cpu.h
diff -u src/sys/arch/amiga/include/cpu.h:1.85 src/sys/arch/amiga/include/cpu.h:1.86
--- src/sys/arch/amiga/include/cpu.h:1.85	Thu Jan 18 14:39:05 2024
+++ src/sys/arch/amiga/include/cpu.h	Fri Jan 19 17:08:42 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.85 2024/01/18 14:39:05 thorpej Exp $	*/
+/*	$NetBSD: cpu.h,v 1.86 2024/01/19 17:08:42 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -55,19 +55,19 @@ extern volatile unsigned int interrupt_d
 /*
  * Arguments to hardclock and gatherstats encapsulate the previous
  * machine state in an opaque clockframe.  On the amiga, we use
- * what the hardware pushes on an interrupt (frame format 0).
+ * what the locore.s glue puts on the stack before calling C-code.
  */
 struct clockframe {
-	u_short	sr;		/* sr at time of interrupt */
-	u_long	pc;		/* pc at time of interrupt */
-	u_short	vo;		/* vector offset (4-word frame) */
-};
+	u_int	cf_regs[4];	/* d0,d1,a0,a1 */
+	u_short	cf_sr;		/* sr at time of interrupt */
+	u_long	cf_pc;		/* pc at time of interrupt */
+	u_short	cf_vo;		/* vector offset (4-word frame) */
+} __attribute__((__packed__));
 
-#define	CLKF_USERMODE(framep)	(((framep)->sr & PSL_S) == 0)
-#define	CLKF_PC(framep)		((framep)->pc)
+#define	CLKF_USERMODE(framep)	(((framep)->cf_sr & PSL_S) == 0)
+#define	CLKF_PC(framep)		((framep)->cf_pc)
 #define	CLKF_INTR(framep)	(interrupt_depth > 1)
 
-
 /*
  * Preempt the current process if in interrupt from user mode,
  * or after the current trap/syscall if in system mode.

Reply via email to