diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-09-02 08:25:43 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-09-02 08:29:04 -0400 |
commit | bb6fc21244032fd763159d02639e91390712dec2 (patch) | |
tree | f8173b2553ef878dbce03192d441fe2b7ac6cfce /firmware/asm/mips | |
parent | 963e979e6c1abeb81d1f4e1a2cca92ed220f0a67 (diff) | |
download | rockbox-bb6fc21244032fd763159d02639e91390712dec2.tar.gz rockbox-bb6fc21244032fd763159d02639e91390712dec2.zip |
mips: use .set push/pop in asm code
Change-Id: I3e7bc7ffb8d6d0c5d18a6ab38b1a270559a62fb9
Diffstat (limited to 'firmware/asm/mips')
-rw-r--r-- | firmware/asm/mips/thread-mips32.c | 13 |
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) | |||
58 | static inline void store_context(void* addr) | 58 | static 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) | |||
89 | static inline void load_context(const void* addr) | 89 | static 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 | |||