summaryrefslogtreecommitdiff
path: root/firmware/asm/mips/thread-mips32.c
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-09-02 08:25:43 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-09-02 08:29:04 -0400
commitbb6fc21244032fd763159d02639e91390712dec2 (patch)
treef8173b2553ef878dbce03192d441fe2b7ac6cfce /firmware/asm/mips/thread-mips32.c
parent963e979e6c1abeb81d1f4e1a2cca92ed220f0a67 (diff)
downloadrockbox-bb6fc21244032fd763159d02639e91390712dec2.tar.gz
rockbox-bb6fc21244032fd763159d02639e91390712dec2.zip
mips: use .set push/pop in asm code
Change-Id: I3e7bc7ffb8d6d0c5d18a6ab38b1a270559a62fb9
Diffstat (limited to 'firmware/asm/mips/thread-mips32.c')
-rw-r--r--firmware/asm/mips/thread-mips32.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/firmware/asm/mips/thread-mips32.c b/firmware/asm/mips/thread-mips32.c
index b8e684bb80..3da8de560b 100644
--- a/firmware/asm/mips/thread-mips32.c
+++ b/firmware/asm/mips/thread-mips32.c
@@ -32,14 +32,14 @@ static void USED_ATTR _start_thread(void)
32 /* t1 = context */ 32 /* t1 = context */
33 asm volatile ( 33 asm volatile (
34 "start_thread: \n" 34 "start_thread: \n"
35 ".set push \n"
35 ".set noreorder \n" 36 ".set noreorder \n"
36 ".set noat \n" 37 ".set noat \n"
37 "lw $8, 4($9) \n" /* Fetch thread function pointer ($8 = t0, $9 = t1) */ 38 "lw $8, 4($9) \n" /* Fetch thread function pointer ($8 = t0, $9 = t1) */
38 "lw $29, 36($9) \n" /* Set initial sp(=$29) */ 39 "lw $29, 36($9) \n" /* Set initial sp(=$29) */
39 "jalr $8 \n" /* Start the thread */ 40 "jalr $8 \n" /* Start the thread */
40 "sw $0, 44($9) \n" /* Clear start address */ 41 "sw $0, 44($9) \n" /* Clear start address */
41 ".set at \n" 42 ".set pop \n"
42 ".set reorder \n"
43 ); 43 );
44 thread_exit(); 44 thread_exit();
45} 45}
@@ -58,6 +58,7 @@ static void USED_ATTR _start_thread(void)
58static inline void store_context(void* addr) 58static inline void store_context(void* addr)
59{ 59{
60 asm volatile ( 60 asm volatile (
61 ".set push \n"
61 ".set noreorder \n" 62 ".set noreorder \n"
62 ".set noat \n" 63 ".set noat \n"
63 "move $8, %0 \n" /* Store addr in clobbered t0 othrewise 64 "move $8, %0 \n" /* Store addr in clobbered t0 othrewise
@@ -76,8 +77,7 @@ static inline void store_context(void* addr)
76 "sw $30, 32($8) \n" /* fp */ 77 "sw $30, 32($8) \n" /* fp */
77 "sw $29, 36($8) \n" /* sp */ 78 "sw $29, 36($8) \n" /* sp */
78 "sw $31, 40($8) \n" /* ra */ 79 "sw $31, 40($8) \n" /* ra */
79 ".set at \n" 80 ".set pop \n"
80 ".set reorder \n"
81 : : "r" (addr) : "t0" 81 : : "r" (addr) : "t0"
82 ); 82 );
83} 83}
@@ -89,6 +89,7 @@ static inline void store_context(void* addr)
89static inline void load_context(const void* addr) 89static inline void load_context(const void* addr)
90{ 90{
91 asm volatile ( 91 asm volatile (
92 ".set push \n"
92 ".set noat \n" 93 ".set noat \n"
93 ".set noreorder \n" 94 ".set noreorder \n"
94 "lw $8, 44(%0) \n" /* Get start address ($8 = t0) */ 95 "lw $8, 44(%0) \n" /* Get start address ($8 = t0) */
@@ -113,9 +114,7 @@ static inline void load_context(const void* addr)
113 "lw $30, 32($8) \n" /* fp */ 114 "lw $30, 32($8) \n" /* fp */
114 "lw $29, 36($8) \n" /* sp */ 115 "lw $29, 36($8) \n" /* sp */
115 "lw $31, 40($8) \n" /* ra */ 116 "lw $31, 40($8) \n" /* ra */
116 ".set at \n" 117 ".set pop \n"
117 ".set reorder \n"
118 : : "r" (addr) : "t0", "t1" 118 : : "r" (addr) : "t0", "t1"
119 ); 119 );
120} 120}
121