diff packages/hal/frv/arch/current/src/context.S @ 1746:f8c5906d7c6e

Add FR-V ports for MB9309x boards.
author msalter
date Sun, 05 Sep 2004 20:56:08 +0000
parents d2c90368aeef
children 74dbf4c3f2e1
line wrap: on
line diff
--- a/packages/hal/frv/arch/current/src/context.S
+++ b/packages/hal/frv/arch/current/src/context.S
@@ -8,7 +8,7 @@
 //####ECOSGPLCOPYRIGHTBEGIN####
 // -------------------------------------------
 // This file is part of eCos, the Embedded Configurable Operating System.
-// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Red Hat, Inc.
 //
 // eCos is free software; you can redistribute it and/or modify it under
 // the terms of the GNU General Public License as published by the Free
@@ -99,6 +99,12 @@ hal_thread_switch_context:
         sti     gr30,@(sp,_TS_GPR30)
         sti     gr31,@(sp,_TS_GPR31)
 #if _NGPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#10,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif
         sti     gr32,@(sp,_TS_GPR32)
         sti     gr33,@(sp,_TS_GPR33)
         sti     gr34,@(sp,_TS_GPR34)
@@ -131,6 +137,7 @@ hal_thread_switch_context:
         sti     gr61,@(sp,_TS_GPR61)
         sti     gr62,@(sp,_TS_GPR62)
         sti     gr63,@(sp,_TS_GPR63)
+1:	
 #endif        
         movsg   psr,gr4
         sti     gr4,@(sp,_TS_PSR)
@@ -173,37 +180,13 @@ hal_thread_load_context:
         movgs   gr8,lcr
         ldi     @(sp,_TS_CCCR),gr8
         movgs   gr8,cccr
-        ldi     @(sp,_TS_GPR2),gr2       // Restore registers
-        ldi     @(sp,_TS_GPR3),gr3
-        ldi     @(sp,_TS_GPR4),gr4
-        ldi     @(sp,_TS_GPR5),gr5
-        ldi     @(sp,_TS_GPR6),gr6
-        ldi     @(sp,_TS_GPR7),gr7
-        ldi     @(sp,_TS_GPR8),gr8
-        ldi     @(sp,_TS_GPR9),gr9
-        ldi     @(sp,_TS_GPR10),gr10
-        ldi     @(sp,_TS_GPR11),gr11
-        ldi     @(sp,_TS_GPR12),gr12
-        ldi     @(sp,_TS_GPR13),gr13
-        ldi     @(sp,_TS_GPR14),gr14
-        ldi     @(sp,_TS_GPR15),gr15
-        ldi     @(sp,_TS_GPR16),gr16
-        ldi     @(sp,_TS_GPR17),gr17
-        ldi     @(sp,_TS_GPR18),gr18
-        ldi     @(sp,_TS_GPR19),gr19
-        ldi     @(sp,_TS_GPR20),gr20
-        ldi     @(sp,_TS_GPR21),gr21
-        ldi     @(sp,_TS_GPR22),gr22
-        ldi     @(sp,_TS_GPR23),gr23
-        ldi     @(sp,_TS_GPR24),gr24
-        ldi     @(sp,_TS_GPR25),gr25
-        ldi     @(sp,_TS_GPR26),gr26
-        ldi     @(sp,_TS_GPR27),gr27
-        ldi     @(sp,_TS_GPR28),gr28
-        ldi     @(sp,_TS_GPR29),gr29
-        ldi     @(sp,_TS_GPR30),gr30
-        ldi     @(sp,_TS_GPR31),gr31
 #if _NGPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#10,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif	
         ldi     @(sp,_TS_GPR32),gr32
         ldi     @(sp,_TS_GPR33),gr33
         ldi     @(sp,_TS_GPR34),gr34
@@ -236,7 +219,38 @@ hal_thread_load_context:
         ldi     @(sp,_TS_GPR61),gr61
         ldi     @(sp,_TS_GPR62),gr62
         ldi     @(sp,_TS_GPR63),gr63
+1:	
 #endif        
+        ldi     @(sp,_TS_GPR2),gr2       // Restore registers
+        ldi     @(sp,_TS_GPR3),gr3
+        ldi     @(sp,_TS_GPR4),gr4
+        ldi     @(sp,_TS_GPR5),gr5
+        ldi     @(sp,_TS_GPR6),gr6
+        ldi     @(sp,_TS_GPR7),gr7
+        ldi     @(sp,_TS_GPR8),gr8
+        ldi     @(sp,_TS_GPR9),gr9
+        ldi     @(sp,_TS_GPR10),gr10
+        ldi     @(sp,_TS_GPR11),gr11
+        ldi     @(sp,_TS_GPR12),gr12
+        ldi     @(sp,_TS_GPR13),gr13
+        ldi     @(sp,_TS_GPR14),gr14
+        ldi     @(sp,_TS_GPR15),gr15
+        ldi     @(sp,_TS_GPR16),gr16
+        ldi     @(sp,_TS_GPR17),gr17
+        ldi     @(sp,_TS_GPR18),gr18
+        ldi     @(sp,_TS_GPR19),gr19
+        ldi     @(sp,_TS_GPR20),gr20
+        ldi     @(sp,_TS_GPR21),gr21
+        ldi     @(sp,_TS_GPR22),gr22
+        ldi     @(sp,_TS_GPR23),gr23
+        ldi     @(sp,_TS_GPR24),gr24
+        ldi     @(sp,_TS_GPR25),gr25
+        ldi     @(sp,_TS_GPR26),gr26
+        ldi     @(sp,_TS_GPR27),gr27
+        ldi     @(sp,_TS_GPR28),gr28
+        ldi     @(sp,_TS_GPR29),gr29
+        ldi     @(sp,_TS_GPR30),gr30
+        ldi     @(sp,_TS_GPR31),gr31
         ldi     @(sp,_TS_SP),sp
         rett    #0
 
@@ -266,6 +280,12 @@ hal_setjmp:
 	stdi	gr28, @(gr8,48)
 	stdi	gr30, @(gr8,56)
 #if _NGPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#10,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif	
 	stdi	gr48, @(gr8,64)
 	stdi	gr50, @(gr8,72)
 	stdi	gr52, @(gr8,80)
@@ -274,6 +294,7 @@ hal_setjmp:
 	stdi	gr58, @(gr8,104)
 	stdi	gr60, @(gr8,112)
 	stdi	gr62, @(gr8,120)
+1:	
 #endif
 
 #if _NFPR != 0
@@ -286,6 +307,12 @@ hal_setjmp:
 	stdfi	fr28, @(gr8,176)
 	stdfi	fr30, @(gr8,184)
 #if _NFPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#11,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif	
 	stdfi	fr48, @(gr8,192)
 	stdfi	fr50, @(gr8,200)
 	stdfi	fr52, @(gr8,208)
@@ -294,6 +321,7 @@ hal_setjmp:
 	stdfi	fr58, @(gr8,232)
 	stdfi	fr60, @(gr8,240)
 	stdfi	fr62, @(gr8,248)
+1:	
 #endif
 #endif
 
@@ -309,26 +337,7 @@ hal_setjmp:
 
 	.global	hal_longjmp
 	.type	hal_longjmp,@function
-hallongjmp:
-	lddi	@(gr8,0), gr16
-	lddi	@(gr8,8), gr18
-	lddi 	@(gr8,16), gr20
-	lddi	@(gr8,24), gr22
-	lddi	@(gr8,32), gr24
-	lddi	@(gr8,40), gr26
-	lddi	@(gr8,48), gr28
-	lddi	@(gr8,56), gr30
-#if _NGPR != 32
-	lddi	@(gr8,64), gr48
-	lddi	@(gr8,72), gr50
-	lddi	@(gr8,80), gr52
-	lddi	@(gr8,88), gr54
-	lddi	@(gr8,96), gr56
-	lddi	@(gr8,104), gr58
-	lddi	@(gr8,112), gr60
-	lddi	@(gr8,120), gr62
-#endif
-
+hal_longjmp:
 #if _NFPR != 0
 	lddfi	@(gr8,128), fr16
 	lddfi	@(gr8,136), fr18
@@ -339,6 +348,12 @@ hallongjmp:
 	lddfi	@(gr8,176), fr28
 	lddfi	@(gr8,184), fr30
 #if _NFPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#11,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif	
 	lddfi	@(gr8,192), fr48
 	lddfi	@(gr8,200), fr50
 	lddfi	@(gr8,208), fr52
@@ -347,9 +362,37 @@ hallongjmp:
 	lddfi	@(gr8,232), fr58
 	lddfi	@(gr8,240), fr60
 	lddfi	@(gr8,248), fr62
+1:
 #endif
 #endif
 
+#if _NGPR != 32
+#ifdef CYGINT_HAL_FRV_ARCH_FR400	
+	movsg	HSR0,gr5
+	srli	gr5,#10,gr5
+	andicc	gr5,#1,gr0,icc0
+	bne	icc0,0,1f
+#endif	
+	lddi	@(gr8,64), gr48
+	lddi	@(gr8,72), gr50
+	lddi	@(gr8,80), gr52
+	lddi	@(gr8,88), gr54
+	lddi	@(gr8,96), gr56
+	lddi	@(gr8,104), gr58
+	lddi	@(gr8,112), gr60
+	lddi	@(gr8,120), gr62
+1:	
+#endif
+	lddi	@(gr8,0), gr16
+	lddi	@(gr8,8), gr18
+	lddi 	@(gr8,16), gr20
+	lddi	@(gr8,24), gr22
+	lddi	@(gr8,32), gr24
+	lddi	@(gr8,40), gr26
+	lddi	@(gr8,48), gr28
+	lddi	@(gr8,56), gr30
+
+
         ldi     @(gr8,256), gr4
 	movgs   gr4,lr