Rev 83 | Rev 100 | 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 ;; |