summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/asm/mips/thread-mips32.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/firmware/asm/mips/thread-mips32.c b/firmware/asm/mips/thread-mips32.c
index 19efb6eea9..3e38685f1b 100644
--- a/firmware/asm/mips/thread-mips32.c
+++ b/firmware/asm/mips/thread-mips32.c
@@ -31,13 +31,13 @@ static void USED_ATTR start_thread(void *addr)
31 asm volatile ( 31 asm volatile (
32 ".set noreorder \n" 32 ".set noreorder \n"
33 ".set noat \n" 33 ".set noat \n"
34 "lw $t9, 4(%0) \n" /* Fetch thread function pointer ($25 = t9) */ 34 "lw $25, 4(%0) \n" /* Fetch thread function pointer ($25 = t9) */
35 "lw $sp, 40(%0) \n" /* Set initial sp(=$29) */ 35 "lw $25, 40(%0) \n" /* Set initial sp(=$29) */
36 "jalr $t9 \n" /* Start the thread */ 36 "jalr $25 \n" /* Start the thread */
37 "sw $zero, 48(%0) \n" /* Clear start address */ 37 "sw $0, 48(%0) \n" /* Clear start address */
38 ".set at \n" 38 ".set at \n"
39 ".set reorder \n" 39 ".set reorder \n"
40 : : "r" (addr) : "t9" 40 : : "r" (addr) : "$25"
41 ); 41 );
42 thread_exit(); 42 thread_exit();
43} 43}
@@ -59,18 +59,18 @@ static inline void store_context(void* addr)
59 asm volatile ( 59 asm volatile (
60 ".set noreorder \n" 60 ".set noreorder \n"
61 ".set noat \n" 61 ".set noat \n"
62 "sw $s0, 0(%0) \n" /* s0 */ 62 "sw $16, 0(%0) \n" /* s0 */
63 "sw $s1, 4(%0) \n" /* s1 */ 63 "sw $17, 4(%0) \n" /* s1 */
64 "sw $s2, 8(%0) \n" /* s2 */ 64 "sw $18, 8(%0) \n" /* s2 */
65 "sw $s3, 12(%0) \n" /* s3 */ 65 "sw $19, 12(%0) \n" /* s3 */
66 "sw $s4, 16(%0) \n" /* s4 */ 66 "sw $20, 16(%0) \n" /* s4 */
67 "sw $s5, 20(%0) \n" /* s5 */ 67 "sw $21, 20(%0) \n" /* s5 */
68 "sw $s6, 24(%0) \n" /* s6 */ 68 "sw $22, 24(%0) \n" /* s6 */
69 "sw $s7, 28(%0) \n" /* s7 */ 69 "sw $23, 28(%0) \n" /* s7 */
70 "sw $gp, 32(%0) \n" /* gp */ 70 "sw $28, 32(%0) \n" /* gp */
71 "sw $fp, 36(%0) \n" /* fp */ 71 "sw $30, 36(%0) \n" /* fp */
72 "sw $sp, 40(%0) \n" /* sp */ 72 "sw $29, 40(%0) \n" /* sp */
73 "sw $ra, 44(%0) \n" /* ra */ 73 "sw $31, 44(%0) \n" /* ra */
74 ".set at \n" 74 ".set at \n"
75 ".set reorder \n" 75 ".set reorder \n"
76 : : "r" (addr) 76 : : "r" (addr)
@@ -86,27 +86,27 @@ static inline void load_context(const void* addr)
86 asm volatile ( 86 asm volatile (
87 ".set noat \n" 87 ".set noat \n"
88 ".set noreorder \n" 88 ".set noreorder \n"
89 "lw $t9, 48(%0) \n" /* Get start address ($8 = t0) */ 89 "lw $25, 48(%0) \n" /* Get start address (t9 = $25) */
90 "beqz $t9, running \n" /* NULL -> already running */ 90 "beqz $25, running \n" /* NULL -> already running */
91 "nop \n" 91 "nop \n"
92 "jr $t9 \n" 92 "jr $25 \n"
93 "move $a0, %0 \n" /* a0 = context branch delay slot anyway */ 93 "move $4, %0 \n" /* a0 = context branch delay slot anyway */
94 "running: \n" 94 "running: \n"
95 "lw $s0, 0(%0) \n" /* s0 */ 95 "lw $16, 0(%0) \n" /* s0 */
96 "lw $s1, 4(%0) \n" /* s1 */ 96 "lw $17, 4(%0) \n" /* s1 */
97 "lw $s2, 8(%0) \n" /* s2 */ 97 "lw $18, 8(%0) \n" /* s2 */
98 "lw $s3, 12(%0) \n" /* s3 */ 98 "lw $19, 12(%0) \n" /* s3 */
99 "lw $s4, 16(%0) \n" /* s4 */ 99 "lw $20, 16(%0) \n" /* s4 */
100 "lw $s5, 20(%0) \n" /* s5 */ 100 "lw $21, 20(%0) \n" /* s5 */
101 "lw $s6, 24(%0) \n" /* s6 */ 101 "lw $22, 24(%0) \n" /* s6 */
102 "lw $s7, 28(%0) \n" /* s7 */ 102 "lw $23, 28(%0) \n" /* s7 */
103 "lw $gp, 32(%0) \n" /* gp */ 103 "lw $28, 32(%0) \n" /* gp */
104 "lw $fp, 36(%0) \n" /* fp */ 104 "lw $30, 36(%0) \n" /* fp */
105 "lw $sp, 40(%0) \n" /* sp */ 105 "lw $29, 40(%0) \n" /* sp */
106 "lw $ra, 44(%0) \n" /* ra */ 106 "lw $31, 44(%0) \n" /* ra */
107 ".set at \n" 107 ".set at \n"
108 ".set reorder \n" 108 ".set reorder \n"
109 : : "r" (addr) : "t9" 109 : : "r" (addr) : "$25"
110 ); 110 );
111} 111}
112 112