Subversion Repositories HelenOS-historic

Rev

Rev 83 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 83 Rev 94
Line 30... Line 30...
30
 
30
 
31
.global context_save
31
.global context_save
32
.global context_restore
32
.global context_restore
33
 
33
 
34
context_save:
34
context_save:
35
	alloc loc0 = ar.pfs, 1, 10, 0, 0
35
	alloc loc0 = ar.pfs, 1, 11, 0, 0
36
	mov loc1 = ar.unat	;;
36
	mov loc1 = ar.unat	;;
-
 
37
	/* loc2 */
-
 
38
	mov loc3 = ar.rsc
-
 
39
	mov loc4 = ar.bsp
-
 
40
	mov loc5 = ar.rnat
-
 
41
	mov loc6 = ar.lc
-
 
42
	mov loc7 = ar.ec
-
 
43
	mov loc8 = ar.ccv
-
 
44
	mov loc9 = ar.csd
-
 
45
	mov loc10 = ar.ssd
37
	
46
	
-
 
47
	/*
-
 
48
	 * Save application registers
-
 
49
	 */
38
	st8 [in0] = loc0, 8	;;	/* save ar.pfs */
50
	st8 [in0] = loc0, 8	;;	/* save ar.pfs */
39
	st8 [in0] = loc1, 8	;;	/* save ar.unat (caller) */
51
	st8 [in0] = loc1, 8	;;	/* save ar.unat (caller) */
40
	mov loc2 = in0		;;
52
	mov loc2 = in0		;;
41
	add in0 = 8, in0	;;	/* skip ar.unat (callee) */
53
	add in0 = 8, in0	;;	/* skip ar.unat (callee) */
-
 
54
	st8 [in0] = loc3, 8	;;	/* save ar.rsc */
-
 
55
	st8 [in0] = loc4, 8	;;	/* save ar.bsp */
-
 
56
	st8 [in0] = loc5, 8	;;	/* save ar.rnat */
-
 
57
	st8 [in0] = loc6, 8	;;	/* save ar.lc */
-
 
58
	st8 [in0] = loc7, 8	;;	/* save ar.ec */
-
 
59
	st8 [in0] = loc8, 8	;;	/* save ar.ccv */
-
 
60
	st8 [in0] = loc9, 8	;;	/* save ar.csd */
-
 
61
	st8 [in0] = loc10, 8	;;	/* save ar.ssd */	
42
	
62
	
43
	/*
63
	/*
44
	 * TODO: save the rest of the context registers.
-
 
45
	 */
-
 
46
 
-
 
47
	/*
-
 
48
	 * Save general registers including NaT bits
64
	 * Save general registers including NaT bits
49
	 */
65
	 */
50
	st8.spill [in0] = r1, 8		;;
66
	st8.spill [in0] = r1, 8		;;
51
	st8.spill [in0] = r2, 8		;;
67
	st8.spill [in0] = r2, 8		;;
52
	st8.spill [in0] = r3, 8		;;
68
	st8.spill [in0] = r3, 8		;;
Line 113... Line 129...
113
	
129
	
114
	add r8 = r0, r0, 1 		/* context_save returns 1 */
130
	add r8 = r0, r0, 1 		/* context_save returns 1 */
115
	br.ret.sptk.many b0
131
	br.ret.sptk.many b0
116
 
132
 
117
context_restore:
133
context_restore:
118
	alloc loc0 = ar.pfs, 1, 10, 0, 0	;;
134
	alloc loc0 = ar.pfs, 1, 11, 0, 0	;;
119
 
135
 
-
 
136
	ld8 loc0 = [in0], 8	;;	/* load ar.pfs */
-
 
137
	ld8 loc1 = [in0], 8	;;	/* load ar.unat (caller) */
-
 
138
	ld8 loc2 = [in0], 8	;;	/* load ar.unat (callee) */
-
 
139
	ld8 loc3 = [in0], 8	;;	/* load ar.rsc */
-
 
140
	ld8 loc4 = [in0], 8	;;	/* load ar.bsp */
-
 
141
	ld8 loc5 = [in0], 8	;;	/* load ar.rnat */
-
 
142
	ld8 loc6 = [in0], 8	;;	/* load ar.lc */
-
 
143
	ld8 loc7 = [in0], 8	;;	/* load ar.ec */
-
 
144
	ld8 loc8 = [in0], 8	;;	/* load ar.ccv */
-
 
145
	ld8 loc9 = [in0], 8	;;	/* load ar.csd */
-
 
146
	ld8 loc10 = [in0], 8	;;	/* load ar.ssd */
-
 
147
	
120
	/*
148
	/*
121
	 * TODO: restore the rest of the context registers.
149
	 * Restore application registers
122
	 */
150
	 */
123
	
-
 
124
	ld8 loc0 = [in0], 8	;;	/* load pfs */
-
 
125
	ld8 loc1 = [in0], 8	;;	/* load unat (caller) */
-
 
126
	ld8 loc2 = [in0], 8	;;	/* load unat (callee) */
-
 
127
	
-
 
128
	mov ar.unat = loc2	;;
151
	mov ar.unat = loc2	;;
-
 
152
	/* TODO: restore ar.rsc, ar.rnat, ar.bspstore */	
-
 
153
	mov ar.lc = loc6
-
 
154
	mov ar.ec = loc7
-
 
155
	mov ar.ccv = loc8
-
 
156
	mov ar.csd = loc9
-
 
157
	mov ar.ssd = loc10
129
	
158
	
130
	/*
159
	/*
131
	 * Restore general registers including NaT bits
160
	 * Restore general registers including NaT bits
132
	 */
161
	 */
133
	ld8.fill r1 = [in0], 8	;;
162
	ld8.fill r1 = [in0], 8	;;