This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

H8/300 patches (7/8) exception handler


exception handling update.
thread support update.

--
Yoshinori Sato
<ysato@users.sourceforge.jp>

Index: hal/h8300/arch/current/include/hal_arch.h
===================================================================
RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/arch/current/include/hal_arch.h,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 hal_arch.h
--- hal/h8300/arch/current/include/hal_arch.h	27 Nov 2003 14:27:20 -0000	1.1.1.4
+++ hal/h8300/arch/current/include/hal_arch.h	4 Mar 2004 13:31:22 -0000
@@ -92,8 +92,8 @@
 #define HAL_THREAD_INIT_CONTEXT( _sp_, _thread_, _entry_, _id_ )            \
 {                                                                           \
     register HAL_SavedRegisters *_regs_;                                    \
-    _regs_ = (HAL_SavedRegisters *)(((CYG_ADDRWORD)(_sp_)&~15) -            \
-                                    sizeof(HAL_SavedRegisters)*2);          \
+    _regs_ = (HAL_SavedRegisters *)(((CYG_ADDRWORD)(_sp_)) -                \
+                                    sizeof(HAL_SavedRegisters));            \
     HAL_THREAD_INIT_CONTEXT_EXTRA(_regs_, _id_);                            \
     _regs_->er0   = (CYG_WORD)(_thread_);                                   \
     _regs_->er1   = (_id_)|0xddd1;                                          \
@@ -199,7 +199,7 @@
     (_regs_)->er4            = _regval_[4];                             \
     (_regs_)->er5            = _regval_[5];                             \
     (_regs_)->er6            = _regval_[6];                             \
-                                                                        \
+    (_regs_)->sp             = _regval_[7];                             \
     (_regs_)->ccr            = _regval_[8];                             \
     (_regs_)->pc             = (_regval_[9] & 0xffffff);                \
                                                                         \
Index: hal/h8300/arch/current/src/vectors.S
===================================================================
RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/arch/current/src/vectors.S,v
retrieving revision 1.1.1.4
retrieving revision 1.17
diff -u -r1.1.1.4 -r1.17
--- hal/h8300/arch/current/src/vectors.S	27 Nov 2003 14:27:20 -0000	1.1.1.4
+++ hal/h8300/arch/current/src/vectors.S	4 Mar 2004 12:55:14 -0000	1.17
@@ -98,48 +98,103 @@
 ## Macros for Stack handling when running Cygmon
         		
 .macro hal_cygmon_switch_app_stack
-	#
+#ifdef CYGPKG_HAL_H8300_H8300H
 	; Switch to interrupt stack to handle exception
-	#
 
 	; First, save some scratch registers
-	mov.l	er0,@er0_save
-	mov.l	er1,@er1_save
+	mov.l	er0,@-sp
+	mov.l	er1,@-sp
+
+	; Copy the exception frame
+	mov.l	#__cygmon_interrupt_stack,er0
+	mov.l	@(8:16,sp),er1
+	mov.l	er1,@-er0
+
+	; Save the pre-exception sp in the register image	 
+	mov.l	sp,@-er0
+
+	; Actually switch the stack
+	mov.l	er0,sp
+	
+	mov.l	@sp,er0
+	adds	#4,er0
+	adds	#4,er0
+	mov.l	er0,@sp
 
+	; Now, restore the scratch registers
+	mov.l	@(-4:16,er0),er1
+	mov.l	@(-8:16,er0),er0
+#endif
+#ifdef CYGPKG_HAL_H8300_H8S
+	; Switch to interrupt stack to handle exception
+
+	; First, save some scratch registers
+	stm.l	er0-er1,@-sp
+	
 	; Copy the exception frame
 	mov.l	#__cygmon_interrupt_stack,er0
-	mov.l	@sp,er1
+	mov.l	@(10,sp:16),er1
 	mov.l	er1,@-er0
+	mov.w	@(10,sp:16),r1
+	mov.w	r1,@-er0
 
 	; Save the pre-exception sp in the register image	 
 	mov.l	sp,@-er0
 
 	; Actually switch the stack
 	mov.l	er0,sp
+	
+	mov.l	@sp,er0
+	adds	#4,er0
+	adds	#4,er0
+	mov.l	er0,@sp
 
 	; Now, restore the scratch registers
-	mov.l	@er0_save,er0
-	mov.l	@er1_save,er1
+	mov.l	@(-4:16,er0),er1
+	mov.l	@(-8:16,er0),er0
+#endif
 .endm
 
 .macro hal_cygmon_restore_app_stack
 	// For cygmon we are switching stacks immediately on exception.
 	// We must wait until the very end before restoring the original stack.
 
+#ifdef CYGPKG_HAL_H8300_H8300H
 	; Save some scratch registers
-	mov.l	er0,@er0_save
-	mov.l	er1,@er1_save
+	subs	#4,sp
+	mov.l	er0,@-sp
+	mov.l	er1,@-sp
 
 	; We need to restore the application stack pointer, but we also
 	; need to restore the exception frame.
-	mov.l	@sp+,er0
+	mov.l	@(12:16,sp),er0
+	mov.l	@(16:16,sp),er1
+	mov.l	er1,@er0
+	mov.l	er0,@(8:16,sp)
+
+	; Restore the scratch registers
 	mov.l	@sp+,er1
-	mov.l	er0,@er1
-	mov.l	er1,sp				// Restore the frame-adjusted SP
+	mov.l	@sp+,er0
+	mov.l	@sp+,sp			// Restore the frame-adjusted SP
+#endif
+#ifdef CYGPKG_HAL_H8300_H8S
+	; Save some scratch registers
+	subs	#4,sp
+	stm.l	er0-er1,@-sp
+
+	; We need to restore the application stack pointer, but we also
+	; need to restore the exception frame.
+	mov.l	@(12:16,sp),er0
+	mov.w	@(16:16,sp),r1
+	mov.w	r1,@er0
+	mov.l	@(18:16,sp),er1
+	mov.l	er1,@er0
+	mov.l	er0,@(8:16,sp)
 
 	; Restore the scratch registers
-	mov.l	@er0_save,er0
-	mov.l	@er1_save,er1
+	ldm.l	@sp+,er0-er1
+	mov.l	@sp+,sp			// Restore the frame-adjusted SP
+#endif
 .endm
 
 #endif // CYGPKG_CYGMON
@@ -155,271 +210,29 @@
 	.globl	reset_vector
 
 reset_vector:
-	; Reset vector
 	.long	CYG_LABEL_DEFN(_start)
 	.long	CYG_LABEL_DEFN(_start)
-	.space	3*4
-	.long	__interrupt5
-	.long	__interrupt6
-	.long	__interrupt7
-	.long	__interrupt8
-	.long	__interrupt9
-	.long	__interrupt10
-	.long	__interrupt11
-	.long	__interrupt12
-	.long	__interrupt13
-	.long	__interrupt14
-	.long	__interrupt15
-	.long	__interrupt16
-	.long	__interrupt17
-	.long	__interrupt18
-	.long	__interrupt19
-	.long	__interrupt20
-	.long	__interrupt21
-	.long	__interrupt22
-	.long	__interrupt23
-	.long	__interrupt24
-	.long	__interrupt25
-	.long	__interrupt26
-	.long	__interrupt27
-	.long	__interrupt28
-	.long	__interrupt29
-	.long	__interrupt30
-	.long	__interrupt31
-	.long	__interrupt32
-	.long	__interrupt33
-	.long	__interrupt34
-	.long	__interrupt35
-	.long	__interrupt36
-	.long	__interrupt37
-	.long	__interrupt38
-	.long	__interrupt39
-	.long	__interrupt40
-	.long	__interrupt41
-	.long	__interrupt42
-	.long	__interrupt43
-	.long	__interrupt44
-	.long	__interrupt45
-	.long	__interrupt46
-	.long	__interrupt47
-	.long	__interrupt48
-	.long	__interrupt49
-	.long	__interrupt50
-	.long	__interrupt51
-	.long	__interrupt52
-	.long	__interrupt53
-	.long	__interrupt54
-	.long	__interrupt55
-	.long	__interrupt56
-	.long	__interrupt57
-	.long	__interrupt58
-	.long	__interrupt59
-	.long	__interrupt60
-	.long	__interrupt61
-	.long	__interrupt62
-	.long	__interrupt63
-
-#ifdef CYGPKG_HAL_H8300_H8S
-	.long	__interrupt64
-	.long	__interrupt65
-	.long	__interrupt66
-	.long	__interrupt67
-	.long	__interrupt68
-	.long	__interrupt69
-	.long	__interrupt70
-	.long	__interrupt71
-	.long	__interrupt72
-	.long	__interrupt73
-	.long	__interrupt74
-	.long	__interrupt75
-	.long	__interrupt76
-	.long	__interrupt77
-	.long	__interrupt78
-	.long	__interrupt79
-	.long	__interrupt80
-	.long	__interrupt81
-	.long	__interrupt82
-	.long	__interrupt83
-	.long	__interrupt84
-	.long	__interrupt85
-	.long	__interrupt86
-	.long	__interrupt87
-	.long	__interrupt88
-	.long	__interrupt89
-	.long	__interrupt90
-	.long	__interrupt91
-	.long	__interrupt92
-	.long	__interrupt93
-	.long	__interrupt94
-	.long	__interrupt95
-	.long	__interrupt96
-	.long	__interrupt97
-	.long	__interrupt98
-	.long	__interrupt99
-	.long	__interrupt100
-	.long	__interrupt101
-	.long	__interrupt102
-	.long	__interrupt103
-	.long	__interrupt104
-	.long	__interrupt105
-	.long	__interrupt106
-	.long	__interrupt107
-	.long	__interrupt108
-	.long	__interrupt109
-	.long	__interrupt110
-	.long	__interrupt111
-	.long	__interrupt112
-	.long	__interrupt113
-	.long	__interrupt114
-	.long	__interrupt115
-	.long	__interrupt116
-	.long	__interrupt117
-	.long	__interrupt118
-	.long	__interrupt119
-	.long	__interrupt120
-	.long	__interrupt121
-	.long	__interrupt122
-	.long	__interrupt123
-	.long	__interrupt124
-	.long	__interrupt125
-	.long	__interrupt126
-	.long	__interrupt127
-#endif
+vector	=	2
+	.rept	CYG_ISR_TABLE_SIZE-2
+	.long	interrupt_redirect_table+vector*4
+vector	=	vector + 1
+	.endr
 #endif
 
-#define INTERRUPT_ENTRY(no) \
-__interrupt##no:	    \
-	jsr	@interrupt_entry
-
+#if !defined(CYGSEM_HAL_H8300_VECTOR_HOOK)
 	.section .int_hook_table,"ax"
-	.space	5*4	
-__interrupt_table:
-INTERRUPT_ENTRY(5)
-INTERRUPT_ENTRY(6)
-INTERRUPT_ENTRY(7)
-INTERRUPT_ENTRY(8)
-INTERRUPT_ENTRY(9)
-INTERRUPT_ENTRY(10)
-INTERRUPT_ENTRY(11)
-INTERRUPT_ENTRY(12)
-INTERRUPT_ENTRY(13)
-INTERRUPT_ENTRY(14)
-INTERRUPT_ENTRY(15)
-INTERRUPT_ENTRY(16)
-INTERRUPT_ENTRY(17)
-INTERRUPT_ENTRY(18)
-INTERRUPT_ENTRY(19)
-INTERRUPT_ENTRY(20)
-INTERRUPT_ENTRY(21)
-INTERRUPT_ENTRY(22)
-INTERRUPT_ENTRY(23)
-INTERRUPT_ENTRY(24)
-INTERRUPT_ENTRY(25)
-INTERRUPT_ENTRY(26)
-INTERRUPT_ENTRY(27)
-INTERRUPT_ENTRY(28)
-INTERRUPT_ENTRY(29)
-INTERRUPT_ENTRY(30)
-INTERRUPT_ENTRY(31)
-INTERRUPT_ENTRY(32)
-INTERRUPT_ENTRY(33)
-INTERRUPT_ENTRY(34)
-INTERRUPT_ENTRY(35)
-INTERRUPT_ENTRY(36)
-INTERRUPT_ENTRY(37)
-INTERRUPT_ENTRY(38)
-INTERRUPT_ENTRY(39)
-INTERRUPT_ENTRY(40)
-INTERRUPT_ENTRY(41)
-INTERRUPT_ENTRY(42)
-INTERRUPT_ENTRY(43)
-INTERRUPT_ENTRY(44)
-INTERRUPT_ENTRY(45)
-INTERRUPT_ENTRY(46)
-INTERRUPT_ENTRY(47)
-INTERRUPT_ENTRY(48)
-INTERRUPT_ENTRY(49)
-INTERRUPT_ENTRY(50)
-INTERRUPT_ENTRY(51)
-INTERRUPT_ENTRY(52)
-INTERRUPT_ENTRY(53)
-INTERRUPT_ENTRY(54)
-INTERRUPT_ENTRY(55)
-INTERRUPT_ENTRY(56)
-INTERRUPT_ENTRY(57)
-INTERRUPT_ENTRY(58)
-INTERRUPT_ENTRY(59)
-INTERRUPT_ENTRY(60)
-INTERRUPT_ENTRY(61)
-INTERRUPT_ENTRY(62)
-INTERRUPT_ENTRY(63)
-#ifdef CYGPKG_HAL_H8300_H8S
-INTERRUPT_ENTRY(64)
-INTERRUPT_ENTRY(65)
-INTERRUPT_ENTRY(66)
-INTERRUPT_ENTRY(67)
-INTERRUPT_ENTRY(68)
-INTERRUPT_ENTRY(69)
-INTERRUPT_ENTRY(70)
-INTERRUPT_ENTRY(71)
-INTERRUPT_ENTRY(72)
-INTERRUPT_ENTRY(73)
-INTERRUPT_ENTRY(74)
-INTERRUPT_ENTRY(75)
-INTERRUPT_ENTRY(76)
-INTERRUPT_ENTRY(77)
-INTERRUPT_ENTRY(78)
-INTERRUPT_ENTRY(79)
-INTERRUPT_ENTRY(80)
-INTERRUPT_ENTRY(81)
-INTERRUPT_ENTRY(82)
-INTERRUPT_ENTRY(83)
-INTERRUPT_ENTRY(84)
-INTERRUPT_ENTRY(85)
-INTERRUPT_ENTRY(86)
-INTERRUPT_ENTRY(87)
-INTERRUPT_ENTRY(88)
-INTERRUPT_ENTRY(89)
-INTERRUPT_ENTRY(90)
-INTERRUPT_ENTRY(91)
-INTERRUPT_ENTRY(92)
-INTERRUPT_ENTRY(93)
-INTERRUPT_ENTRY(94)
-INTERRUPT_ENTRY(95)
-INTERRUPT_ENTRY(96)
-INTERRUPT_ENTRY(97)
-INTERRUPT_ENTRY(98)
-INTERRUPT_ENTRY(99)
-INTERRUPT_ENTRY(100)
-INTERRUPT_ENTRY(101)
-INTERRUPT_ENTRY(102)
-INTERRUPT_ENTRY(103)
-INTERRUPT_ENTRY(104)
-INTERRUPT_ENTRY(105)
-INTERRUPT_ENTRY(106)
-INTERRUPT_ENTRY(107)
-INTERRUPT_ENTRY(108)
-INTERRUPT_ENTRY(109)
-INTERRUPT_ENTRY(110)
-INTERRUPT_ENTRY(111)
-INTERRUPT_ENTRY(112)
-INTERRUPT_ENTRY(113)
-INTERRUPT_ENTRY(114)
-INTERRUPT_ENTRY(115)
-INTERRUPT_ENTRY(116)
-INTERRUPT_ENTRY(117)
-INTERRUPT_ENTRY(118)
-INTERRUPT_ENTRY(119)
-INTERRUPT_ENTRY(120)
-INTERRUPT_ENTRY(121)
-INTERRUPT_ENTRY(122)
-INTERRUPT_ENTRY(123)
-INTERRUPT_ENTRY(124)
-INTERRUPT_ENTRY(125)
-INTERRUPT_ENTRY(126)
-INTERRUPT_ENTRY(127)
+interrupt_redirect_table:	
+vector	=	0
+	.rept	CYG_ISR_TABLE_SIZE
+	jsr	@interrupt_entry
+vector	=	vector + 1
+	.endr
+#else
+	.section .int_hook_table,"x"
+interrupt_redirect_table:	
+	.space	4*CYG_ISR_TABLE_SIZE
 #endif
-			
+
 ##-----------------------------------------------------------------------------
 ## Startup code
 			
@@ -449,42 +262,74 @@
 	mov.l	#CYG_LABEL_DEFN(__ram_data_start),er6
 	mov.l	#CYG_LABEL_DEFN(__ram_data_end),er4
 	sub.l	er6,er4
+	shlr2	er4
 1:	
-	eepmov.w
-	dec.w	#1,e4
-	cmp.w	#-1,e4
-	bhi	1b
+	mov.l	@er5+,er0
+	mov.l	er0,@er6
+	adds	#4,er6
+	dec.l	#1,er4
+	bne	1b
 
 #endif
 
 #if defined(CYGSEM_HAL_H8300_VECTOR_HOOK)
 	; Setup Interrupt Vector (virtual)
-	mov.l	#CYG_LABEL_DEFN(__rom_int_hook_table),er5
-	mov.l	#CYG_LABEL_DEFN(__int_hook_start),er6
-	mov.l	#CYG_LABEL_DEFN(__int_hook_end),er4
-	sub.l	er6,er4
-1:	
-	eepmov.w
-	dec.w	#1,e4
-	cmp.w	#-1,e4
-	bhi	1b
+
+	;; check rom table
+	mov.l	#8*4,er0
+	mov.l	@er0+,er1
+	adds	#4,er1
+	mov.b	#3,r3l
+1:
+	mov.l	@er0+,er2
+	cmp.l	er1,er2
+	bne	3f
+	adds	#4,er1
+	dec.b	r3l
+	bne	1b
+	;; calculate vector address
+	mov.l	@8*4,er0
+	and.w	#0xff,e0
+	sub.l	#8*4,er0
+	;; build ram vector
+	mov.l	er0,@__interrupt_table
+	mov.l	#0x5e000000+interrupt_entry,er1
+	mov.l	#save_vector_table,er3
+	mov.b	#0,r2l
+2:
+	;; check saved vector
+	mov.b	@er3+,r2h
+	cmp.b	r2l,r2h
+	beq	5f
+	subs	#1,er3
+	mov.l	er1,@er0
+5:	
+	adds	#4,er0
+	inc.b	r2l
+	cmp.b	#CYG_ISR_TABLE_SIZE,r2l
+	bcs	2b
+	bra	4f
+3:
+	bra	3b
+4:	
+		
+#else
+	mov.l	#interrupt_redirect_table,er0
+	mov.l	er0,@__interrupt_table
 #endif
 	
 	; Clear BSS
 	mov.l	#CYG_LABEL_DEFN(__bss_start),er5
-	mov.l	er5,er6
-	adds	#1,er6
 	mov.l	#CYG_LABEL_DEFN(__bss_end),er4
 	sub.l	#CYG_LABEL_DEFN(__bss_start),er4
-
-	mov.b	#0,r0l
-	mov.b	r0l,@er5
-1:	
-	eepmov.w
-	dec.w	#1,e4
-	cmp.w	#-1,e4
-	bhi	1b
-
+	shlr2	er4
+	sub.l	er0,er0
+1:
+	mov.l	er0,@er5
+	adds	#4,er5
+	dec.l	#1,er4
+	bne	1b
+	
 	; Call variant and platform HAL
 	; initialization routines.
 
@@ -520,14 +365,26 @@
 9:
 	bra	9b		; Loop if we return
 
+save_vector_table:	
+#if defined(CYGSEM_HAL_H8300_SAVE_STUB_VECTOR)
+	.byte	5,11
+#if defined(CYGPKG_HAL_H8300_SAVED_VECTORS)
+	h8300_save_vectors
+#endif
+#endif
+	.byte	0		; end maker
+	.align	2
+	
 interrupt_entry:
 	mov.l	er0,@-sp
-	mov.l	@(4,sp),er0
-	sub.l	#__interrupt_table,er0
-	shlr.l	er0
-	shlr.l	er0
-	add.w	#5-1,r0
+	mov.l	@(4:16,sp),er0	; interrupt vector offset
+	mov.l	er1,@-sp
+	mov.l	@__interrupt_table,er1
+	sub.l	er1,er0
+	shlr2	er0
+	dec.l	#1,er0
 	mov.l	er0,@CYG_LABEL_DEFN(_intvector)
+	mov.l	@sp+,er1
 	mov.l	@sp+,er0
 	adds	#4,sp
 #ifdef CYGPKG_CYGMON
@@ -711,6 +568,9 @@
         .global __lastpc        
 __lastpc:
         .long   0
+__interrupt_table:	
+	.long	0
+
 	.text	
 ##-----------------------------------------------------------------------------
 ## Execute pending DSRs on the interrupt stack with interrupts enabled.
@@ -724,14 +584,6 @@
 	h8300_var_call_pending_DSR
 #endif		
 		
-#ifdef CYGPKG_CYGMON
-        .section	.bss
-er0_save:
-	.long	0
-er1_save:
-	.long	0
-#endif
-
 ##-----------------------------------------------------------------------------
 ## Default TRAP VSR
 
@@ -742,12 +594,12 @@
 #ifdef CYG_HAL_DIAG_EXCPT_END
 	hal_diag_excpt_start
 #endif
-	mov.l	@(32,sp),er0
-	subs	#2,er0
-	mov.l	er0,@(32,sp)
+	mov.l	@CYG_LABEL_DEFN(_intvector),er1
+	cmp.l	#11,er1		; Adjust trap entry address
+	bne	1f
+	h8300_trap_adjust_pc
+1:	
 	mov.l	sp,er0
-	mov.l	@CYG_LABEL_DEFN(_intvector),er1	
-
 	jsr	@CYG_LABEL_DEFN(cyg_hal_exception_handler)
 
 #ifdef CYG_HAL_DIAG_EXCPT_END
Index: hal/h8300/h8300h/current/include/variant.inc
===================================================================
RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/h8300h/current/include/variant.inc,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 variant.inc
--- hal/h8300/h8300h/current/include/variant.inc	27 Nov 2003 14:27:21 -0000	1.1.1.4
+++ hal/h8300/h8300h/current/include/variant.inc	4 Mar 2004 13:31:27 -0000
@@ -167,6 +167,12 @@
 	mov.b	r0h,ccr
 	.endm
 
+	.macro	h8300_trap_adjust_pc
+	mov.l	@(36:16,sp),er0
+	subs	#2,er0
+	mov.l	er0,@(36:16,sp)
+	.endm
+
 ##-----------------------------------------------------------------------------
 # Default interrupt decoding macros.
 
Index: hal/h8300/h8s/current/include/var_arch.h
===================================================================
RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/h8s/current/include/var_arch.h,v
retrieving revision 1.1.1.1
retrieving revision 1.5
diff -u -r1.1.1.1 -r1.5
--- hal/h8300/h8s/current/include/var_arch.h	27 Nov 2003 14:27:24 -0000	1.1.1.1
+++ hal/h8300/h8s/current/include/var_arch.h	4 Mar 2004 08:57:02 -0000	1.5
@@ -83,6 +83,15 @@
     CYG_WORD32          pc;
 } HAL_SavedRegisters;
 
+#define HAL_THREAD_INIT_CONTEXT_EXTRA(_regs_, _id_) \
+    {_regs_->exr   = 0;}
+
+#define HAL_GET_GDB_EXTRA_REGISTERS(_regval_,_regs_) \
+    {_regval_[10] = (_regs_)->exr;}
+
+#define HAL_SET_GDB_EXTRA_REGISTERS( _regs_,_regval_) \
+    {(_regs_)->exr = _regval_[10];}
+
 // Internal peripheral registers
 #include <cyg/hal/mod_regs_adc.h>
 #include <cyg/hal/mod_regs_bsc.h>
@@ -95,12 +104,6 @@
 #include <cyg/hal/mod_regs_ppg.h>
 #include <cyg/hal/mod_regs_wdt.h>
 
-//--------------------------------------------------------------------------
-
-#ifndef HAL_THREAD_INIT_CONTEXT_EXTRA
-#define HAL_THREAD_INIT_CONTEXT_EXTRA(_regs_, _id_) \
-        (_regs_)->exr = 0;
-#endif
 
 //--------------------------------------------------------------------------
 #endif // CYGONCE_HAL_VAR_ARCH_H
Index: hal/h8300/h8s/current/include/variant.inc
===================================================================
RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/h8s/current/include/variant.inc,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 variant.inc
--- hal/h8300/h8s/current/include/variant.inc	27 Nov 2003 14:27:25 -0000	1.1.1.1
+++ hal/h8300/h8s/current/include/variant.inc	4 Mar 2004 13:31:34 -0000
@@ -79,7 +79,7 @@
 	stm	er4-er6,@-sp
 	sub.w	e0,e0
 	mov.w	e0,@(4*9:16,sp)			; clear exr high word
-        mov.l	@(4*10:16,sp),r0
+        mov.w	@(4*10:16,sp),r0
 	sub.l	er1,er1
 	mov.b	r0h,r1l
 	mov.l	er1,@(4*8:16,sp)		; copy ccr
@@ -92,6 +92,9 @@
 	mov.w	@(4*10:16,sp),r1
 	mov.b	r0l,r1h
 	mov.w	r1,@(4*10:16,sp)		; set ccr
+	mov.w	@(4*9+2:16,sp),r0
+	mov.b	r0l,r0h
+	mov.w	r0,@(4*9+2:16,sp)		; extend exr
 	ldm	@sp+,er4-er6
 	ldm	@sp+,er0-er3
 	add.l	#10,sp
@@ -159,6 +162,12 @@
 	and.b	#0xf8,r0h
 	or.b	r0l,r0h
 	mov.b	r0h,exr
+	.endm
+
+	.macro	h8300_trap_adjust_pc
+	mov.l	@(40:16,sp),er0
+	subs	#2,er0
+	mov.l	er0,@(40:16,sp)
 	.endm
 
 ##-----------------------------------------------------------------------------


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]