Skip to content

Commit 3021773

Browse files
committed
MIPS: DEC: Avoid la pseudo-instruction in delay slots
When expanding the la or dla pseudo-instruction in a delay slot the GNU assembler will complain should the pseudo-instruction expand to multiple actual instructions, since only the first of them will be in the delay slot leading to the pseudo-instruction being only partially executed if the branch is taken. Use of PTR_LA in the dec int-handler.S leads to such warnings: arch/mips/dec/int-handler.S: Assembler messages: arch/mips/dec/int-handler.S:149: Warning: macro instruction expanded into multiple instructions in a branch delay slot arch/mips/dec/int-handler.S:198: Warning: macro instruction expanded into multiple instructions in a branch delay slot Avoid this by open coding the PTR_LA macros. Signed-off-by: Ralf Baechle <[email protected]>
1 parent 0a90055 commit 3021773

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

arch/mips/dec/int-handler.S

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,25 @@
146146
/*
147147
* Find irq with highest priority
148148
*/
149-
PTR_LA t1,cpu_mask_nr_tbl
149+
# open coded PTR_LA t1, cpu_mask_nr_tbl
150+
#if (_MIPS_SZPTR == 32)
151+
# open coded la t1, cpu_mask_nr_tbl
152+
lui t1, %hi(cpu_mask_nr_tbl)
153+
addiu t1, %lo(cpu_mask_nr_tbl)
154+
155+
#endif
156+
#if (_MIPS_SZPTR == 64)
157+
# open coded dla t1, cpu_mask_nr_tbl
158+
.set push
159+
.set noat
160+
lui t1, %highest(cpu_mask_nr_tbl)
161+
lui AT, %hi(cpu_mask_nr_tbl)
162+
daddiu t1, t1, %higher(cpu_mask_nr_tbl)
163+
daddiu AT, AT, %lo(cpu_mask_nr_tbl)
164+
dsll t1, 32
165+
daddu t1, t1, AT
166+
.set pop
167+
#endif
150168
1: lw t2,(t1)
151169
nop
152170
and t2,t0
@@ -195,7 +213,25 @@
195213
/*
196214
* Find irq with highest priority
197215
*/
198-
PTR_LA t1,asic_mask_nr_tbl
216+
# open coded PTR_LA t1,asic_mask_nr_tbl
217+
#if (_MIPS_SZPTR == 32)
218+
# open coded la t1, asic_mask_nr_tbl
219+
lui t1, %hi(asic_mask_nr_tbl)
220+
addiu t1, %lo(asic_mask_nr_tbl)
221+
222+
#endif
223+
#if (_MIPS_SZPTR == 64)
224+
# open coded dla t1, asic_mask_nr_tbl
225+
.set push
226+
.set noat
227+
lui t1, %highest(asic_mask_nr_tbl)
228+
lui AT, %hi(asic_mask_nr_tbl)
229+
daddiu t1, t1, %higher(asic_mask_nr_tbl)
230+
daddiu AT, AT, %lo(asic_mask_nr_tbl)
231+
dsll t1, 32
232+
daddu t1, t1, AT
233+
.set pop
234+
#endif
199235
2: lw t2,(t1)
200236
nop
201237
and t2,t0

0 commit comments

Comments
 (0)