source: soft/giet_vm/giet_kernel/switch.s @ 258

Last change on this file since 258 was 258, checked in by alain, 11 years ago

This is a major release, including a deep restructuration of code.
The main evolutions are

  • use of the Tsar preloader to load the GIET boot-loader from disk
  • introduction of a FAT32 file system library,
  • use of this fat32 library by the boot-loader to load the map.bin data structure, and the various .elf files
  • reorganisation of drivers (one file per peripheral).
  • introduction of drivers for new peripherals: vci_chbuf_dma and vci_multi_ahci.
  • introduction of a new physical memory allocator in the boot code.

This release has been tested on the tsar_generic_iob architecture,
for the two following mappings: 4c_1p_iob_four.xml and 4c_1p_iob_sort.xml

  • Property svn:executable set to *
File size: 5.0 KB
Line 
1/******************************************************************************
2* This function receives two arguments that are the current task context
3* (virtual) addresses and the next task context (virtual) address.
4******************************************************************************/
5
6    .globl  _task_switch
7    .func   _task_switch
8    .type   _task_switch, %function
9
10_task_switch:
11
12    /* enter critical section */
13    li      $2,     0xFFFFFFFE 
14    mfc0    $3,     $12       
15    and     $3,     $3, $2   
16    mtc0    $3,     $12   
17
18    /* save _current task context */
19    add     $27,    $4,     $0  /* $27 <= &context[curr_task_id] */
20
21    .set noat
22    sw      $1,     1*4($27)    /* ctx[1] <= $1 */
23    .set at
24    sw      $2,     2*4($27)    /* ctx[2] <= $2 */
25    sw      $3,     3*4($27)    /* ctx[3] <= $3 */
26    sw      $4,     4*4($27)    /* ctx[4] <= $4 */
27    sw      $5,     5*4($27)    /* ctx[5] <= $5 */
28    sw      $6,     6*4($27)    /* ctx[6] <= $6 */
29    sw      $7,     7*4($27)    /* ctx[7] <= $7 */
30    sw      $8,     8*4($27)    /* ctx[8] <= $8 */
31    sw      $9,     9*4($27)    /* ctx[9] <= $9 */
32    sw      $10,    10*4($27)   /* ctx[10] <= $10 */
33    sw      $11,    11*4($27)   /* ctx[11] <= $11 */
34    sw      $12,    12*4($27)   /* ctx[12] <= $12 */
35    sw      $13,    13*4($27)   /* ctx[13] <= $13 */
36    sw      $14,    14*4($27)   /* ctx[14] <= $14 */
37    sw      $15,    15*4($27)   /* ctx[15] <= $15 */
38    sw      $16,    16*4($27)   /* ctx[16] <= $16 */
39    sw      $17,    17*4($27)   /* ctx[17] <= $17 */
40    sw      $18,    18*4($27)   /* ctx[18] <= $18 */
41    sw      $19,    19*4($27)   /* ctx[19] <= $19 */
42    sw      $20,    20*4($27)   /* ctx[20] <= $20 */
43    sw      $21,    21*4($27)   /* ctx[21] <= $21 */
44    sw      $22,    22*4($27)   /* ctx[22] <= $22 */
45    sw      $23,    23*4($27)   /* ctx[23] <= $23 */
46    sw      $24,    24*4($27)   /* ctx[24] <= $24 */
47    sw      $25,    25*4($27)   /* ctx[25] <= $25 */
48    mflo    $26
49    sw      $26,    26*4($27)   /* ctx[26] <= LO  */
50    mfhi    $26
51    sw      $26,    27*4($27)   /* ctx[27] <= H1  */
52    sw      $28,    28*4($27)   /* ctx[28] <= $28 */
53    sw      $29,    29*4($27)   /* ctx[29] <= $29 */
54    sw      $30,    30*4($27)   /* ctx[30] <= $30 */
55    sw      $31,    31*4($27)   /* ctx[31] <= $31 */
56    mfc0    $26,    $14
57    sw      $26,    32*4($27)   /* ctx[32] <= EPC */
58    mfc0    $26,    $13
59    sw      $26,    33*4($27)   /* ctx[33] <= CR  */
60    mfc0    $26,    $12
61    sw      $26,    34*4($27)   /* ctx[34] <= SR  */
62    mfc0    $26,    $8
63    sw      $26,    35*4($27)   /* ctx[34] <= BVAR */
64    mfc2    $26,    $0
65    sw      $26,    39*4($27)   /* ctx[35] <= PTPR */
66
67    /* restore next task context */
68    add     $27,    $5,     $0  /* $27<= &context[next_task_id] */
69
70    .set noat
71    lw      $1,     1*4($27)    /* restore $1 */
72    .set at
73    lw      $2,     2*4($27)    /* restore $2 */
74    lw      $3,     3*4($27)    /* restore $3 */
75    lw      $4,     4*4($27)    /* restore $4 */
76    lw      $5,     5*4($27)    /* restore $5 */
77    lw      $6,     6*4($27)    /* restore $6 */
78    lw      $7,     7*4($27)    /* restore $7 */
79    lw      $8,     8*4($27)    /* restore $8 */
80    lw      $9,     9*4($27)    /* restore $9 */
81    lw      $10,    10*4($27)   /* restore $10 */
82    lw      $11,    11*4($27)   /* restore $11 */
83    lw      $12,    12*4($27)   /* restore $12 */
84    lw      $13,    13*4($27)   /* restore $13 */
85    lw      $14,    14*4($27)   /* restore $14 */
86    lw      $15,    15*4($27)   /* restore $15 */
87    lw      $16,    16*4($27)   /* restore $16 */
88    lw      $17,    17*4($27)   /* restore $17 */
89    lw      $18,    18*4($27)   /* restore $18 */
90    lw      $19,    19*4($27)   /* restore $19 */
91    lw      $20,    20*4($27)   /* restore $20 */
92    lw      $21,    21*4($27)   /* restore $21 */
93    lw      $22,    22*4($27)   /* restore $22 */
94    lw      $23,    23*4($27)   /* restore $23 */
95    lw      $24,    24*4($27)   /* restore $24 */
96    lw      $25,    25*4($27)   /* restore $25 */
97    lw      $26,    26*4($27)
98    mtlo    $26                 /* restore LO */
99    lw      $26,    27*4($27)
100    mthi    $26                 /* restore HI */
101    lw      $28,    28*4($27)   /* restore $28 */
102    lw      $29,    29*4($27)   /* restore $29 */
103    lw      $30,    30*4($27)   /* restore $30 */
104    lw      $31,    31*4($27)   /* restore $31 */
105    lw      $26,    32*4($27)
106    mtc0    $26,    $14         /* restore EPC */
107    lw      $26,    33*4($27)
108    mtc0    $26,    $13         /* restore CR */
109    lw      $26,    34*4($27)
110    mtc0    $26,    $12         /* restore SR */
111    lw      $26,    35*4($27)
112    mtc0    $26,    $8          /* restore BVAR */
113    lw      $26,    39*4($27)
114    mtc2    $26,    $0          /* restore PTPR */
115
116    /* exit critical section */
117    li      $2,     0x00000001 
118    mfc0    $3,     $12       
119    or      $3,     $3, $2   
120    mtc0    $3,     $12   
121
122    /* returns to caller */
123    jr      $31 
124
125    .endfunc
126    .size _task_switch, .-_task_switch
127
Note: See TracBrowser for help on using the repository browser.