aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2015-03-09 10:54:51 -0400
committerRalf Baechle <ralf@linux-mips.org>2015-04-10 09:41:44 -0400
commit3563c32d6532ece53c9dd8905a8e41983ef9952f (patch)
tree5c2a00d13913295a2683d1259a55b86629e2f589
parenteeb538950367e3966cbf0237ab1a1dc30e059818 (diff)
MIPS: unaligned: Surround load/store macros in do {} while statements
It's best to surround such complex macros with do {} while statements so they can appear as independent logical blocks when used within other control blocks. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> Cc: <stable@vger.kernel.org> # v3.15+ Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9502/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r--arch/mips/kernel/unaligned.c116
1 files changed, 90 insertions, 26 deletions
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
index 7a5707eea898..ab475903175f 100644
--- a/arch/mips/kernel/unaligned.c
+++ b/arch/mips/kernel/unaligned.c
@@ -110,6 +110,7 @@ extern void show_registers(struct pt_regs *regs);
110 110
111#ifdef __BIG_ENDIAN 111#ifdef __BIG_ENDIAN
112#define _LoadHW(addr, value, res, type) \ 112#define _LoadHW(addr, value, res, type) \
113do { \
113 __asm__ __volatile__ (".set\tnoat\n" \ 114 __asm__ __volatile__ (".set\tnoat\n" \
114 "1:\t"type##_lb("%0", "0(%2)")"\n" \ 115 "1:\t"type##_lb("%0", "0(%2)")"\n" \
115 "2:\t"type##_lbu("$1", "1(%2)")"\n\t"\ 116 "2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
@@ -127,10 +128,12 @@ extern void show_registers(struct pt_regs *regs);
127 STR(PTR)"\t2b, 4b\n\t" \ 128 STR(PTR)"\t2b, 4b\n\t" \
128 ".previous" \ 129 ".previous" \
129 : "=&r" (value), "=r" (res) \ 130 : "=&r" (value), "=r" (res) \
130 : "r" (addr), "i" (-EFAULT)); 131 : "r" (addr), "i" (-EFAULT)); \
132} while(0)
131 133
132#ifndef CONFIG_CPU_MIPSR6 134#ifndef CONFIG_CPU_MIPSR6
133#define _LoadW(addr, value, res, type) \ 135#define _LoadW(addr, value, res, type) \
136do { \
134 __asm__ __volatile__ ( \ 137 __asm__ __volatile__ ( \
135 "1:\t"type##_lwl("%0", "(%2)")"\n" \ 138 "1:\t"type##_lwl("%0", "(%2)")"\n" \
136 "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\ 139 "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
@@ -146,10 +149,13 @@ extern void show_registers(struct pt_regs *regs);
146 STR(PTR)"\t2b, 4b\n\t" \ 149 STR(PTR)"\t2b, 4b\n\t" \
147 ".previous" \ 150 ".previous" \
148 : "=&r" (value), "=r" (res) \ 151 : "=&r" (value), "=r" (res) \
149 : "r" (addr), "i" (-EFAULT)); 152 : "r" (addr), "i" (-EFAULT)); \
153} while(0)
154
150#else 155#else
151/* MIPSR6 has no lwl instruction */ 156/* MIPSR6 has no lwl instruction */
152#define _LoadW(addr, value, res, type) \ 157#define _LoadW(addr, value, res, type) \
158do { \
153 __asm__ __volatile__ ( \ 159 __asm__ __volatile__ ( \
154 ".set\tpush\n" \ 160 ".set\tpush\n" \
155 ".set\tnoat\n\t" \ 161 ".set\tnoat\n\t" \
@@ -178,10 +184,13 @@ extern void show_registers(struct pt_regs *regs);
178 STR(PTR)"\t4b, 11b\n\t" \ 184 STR(PTR)"\t4b, 11b\n\t" \
179 ".previous" \ 185 ".previous" \
180 : "=&r" (value), "=r" (res) \ 186 : "=&r" (value), "=r" (res) \
181 : "r" (addr), "i" (-EFAULT)); 187 : "r" (addr), "i" (-EFAULT)); \
188} while(0)
189
182#endif /* CONFIG_CPU_MIPSR6 */ 190#endif /* CONFIG_CPU_MIPSR6 */
183 191
184#define _LoadHWU(addr, value, res, type) \ 192#define _LoadHWU(addr, value, res, type) \
193do { \
185 __asm__ __volatile__ ( \ 194 __asm__ __volatile__ ( \
186 ".set\tnoat\n" \ 195 ".set\tnoat\n" \
187 "1:\t"type##_lbu("%0", "0(%2)")"\n" \ 196 "1:\t"type##_lbu("%0", "0(%2)")"\n" \
@@ -201,10 +210,12 @@ extern void show_registers(struct pt_regs *regs);
201 STR(PTR)"\t2b, 4b\n\t" \ 210 STR(PTR)"\t2b, 4b\n\t" \
202 ".previous" \ 211 ".previous" \
203 : "=&r" (value), "=r" (res) \ 212 : "=&r" (value), "=r" (res) \
204 : "r" (addr), "i" (-EFAULT)); 213 : "r" (addr), "i" (-EFAULT)); \
214} while(0)
205 215
206#ifndef CONFIG_CPU_MIPSR6 216#ifndef CONFIG_CPU_MIPSR6
207#define _LoadWU(addr, value, res, type) \ 217#define _LoadWU(addr, value, res, type) \
218do { \
208 __asm__ __volatile__ ( \ 219 __asm__ __volatile__ ( \
209 "1:\t"type##_lwl("%0", "(%2)")"\n" \ 220 "1:\t"type##_lwl("%0", "(%2)")"\n" \
210 "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\ 221 "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
@@ -222,9 +233,11 @@ extern void show_registers(struct pt_regs *regs);
222 STR(PTR)"\t2b, 4b\n\t" \ 233 STR(PTR)"\t2b, 4b\n\t" \
223 ".previous" \ 234 ".previous" \
224 : "=&r" (value), "=r" (res) \ 235 : "=&r" (value), "=r" (res) \
225 : "r" (addr), "i" (-EFAULT)); 236 : "r" (addr), "i" (-EFAULT)); \
237} while(0)
226 238
227#define _LoadDW(addr, value, res) \ 239#define _LoadDW(addr, value, res) \
240do { \
228 __asm__ __volatile__ ( \ 241 __asm__ __volatile__ ( \
229 "1:\tldl\t%0, (%2)\n" \ 242 "1:\tldl\t%0, (%2)\n" \
230 "2:\tldr\t%0, 7(%2)\n\t" \ 243 "2:\tldr\t%0, 7(%2)\n\t" \
@@ -240,10 +253,13 @@ extern void show_registers(struct pt_regs *regs);
240 STR(PTR)"\t2b, 4b\n\t" \ 253 STR(PTR)"\t2b, 4b\n\t" \
241 ".previous" \ 254 ".previous" \
242 : "=&r" (value), "=r" (res) \ 255 : "=&r" (value), "=r" (res) \
243 : "r" (addr), "i" (-EFAULT)); 256 : "r" (addr), "i" (-EFAULT)); \
257} while(0)
258
244#else 259#else
245/* MIPSR6 has not lwl and ldl instructions */ 260/* MIPSR6 has not lwl and ldl instructions */
246#define _LoadWU(addr, value, res, type) \ 261#define _LoadWU(addr, value, res, type) \
262do { \
247 __asm__ __volatile__ ( \ 263 __asm__ __volatile__ ( \
248 ".set\tpush\n\t" \ 264 ".set\tpush\n\t" \
249 ".set\tnoat\n\t" \ 265 ".set\tnoat\n\t" \
@@ -272,9 +288,11 @@ extern void show_registers(struct pt_regs *regs);
272 STR(PTR)"\t4b, 11b\n\t" \ 288 STR(PTR)"\t4b, 11b\n\t" \
273 ".previous" \ 289 ".previous" \
274 : "=&r" (value), "=r" (res) \ 290 : "=&r" (value), "=r" (res) \
275 : "r" (addr), "i" (-EFAULT)); 291 : "r" (addr), "i" (-EFAULT)); \
292} while(0)
276 293
277#define _LoadDW(addr, value, res) \ 294#define _LoadDW(addr, value, res) \
295do { \
278 __asm__ __volatile__ ( \ 296 __asm__ __volatile__ ( \
279 ".set\tpush\n\t" \ 297 ".set\tpush\n\t" \
280 ".set\tnoat\n\t" \ 298 ".set\tnoat\n\t" \
@@ -319,11 +337,14 @@ extern void show_registers(struct pt_regs *regs);
319 STR(PTR)"\t8b, 11b\n\t" \ 337 STR(PTR)"\t8b, 11b\n\t" \
320 ".previous" \ 338 ".previous" \
321 : "=&r" (value), "=r" (res) \ 339 : "=&r" (value), "=r" (res) \
322 : "r" (addr), "i" (-EFAULT)); 340 : "r" (addr), "i" (-EFAULT)); \
341} while(0)
342
323#endif /* CONFIG_CPU_MIPSR6 */ 343#endif /* CONFIG_CPU_MIPSR6 */
324 344
325 345
326#define _StoreHW(addr, value, res, type) \ 346#define _StoreHW(addr, value, res, type) \
347do { \
327 __asm__ __volatile__ ( \ 348 __asm__ __volatile__ ( \
328 ".set\tnoat\n" \ 349 ".set\tnoat\n" \
329 "1:\t"type##_sb("%1", "1(%2)")"\n" \ 350 "1:\t"type##_sb("%1", "1(%2)")"\n" \
@@ -342,10 +363,12 @@ extern void show_registers(struct pt_regs *regs);
342 STR(PTR)"\t2b, 4b\n\t" \ 363 STR(PTR)"\t2b, 4b\n\t" \
343 ".previous" \ 364 ".previous" \
344 : "=r" (res) \ 365 : "=r" (res) \
345 : "r" (value), "r" (addr), "i" (-EFAULT)); 366 : "r" (value), "r" (addr), "i" (-EFAULT));\
367} while(0)
346 368
347#ifndef CONFIG_CPU_MIPSR6 369#ifndef CONFIG_CPU_MIPSR6
348#define _StoreW(addr, value, res, type) \ 370#define _StoreW(addr, value, res, type) \
371do { \
349 __asm__ __volatile__ ( \ 372 __asm__ __volatile__ ( \
350 "1:\t"type##_swl("%1", "(%2)")"\n" \ 373 "1:\t"type##_swl("%1", "(%2)")"\n" \
351 "2:\t"type##_swr("%1", "3(%2)")"\n\t"\ 374 "2:\t"type##_swr("%1", "3(%2)")"\n\t"\
@@ -361,9 +384,11 @@ extern void show_registers(struct pt_regs *regs);
361 STR(PTR)"\t2b, 4b\n\t" \ 384 STR(PTR)"\t2b, 4b\n\t" \
362 ".previous" \ 385 ".previous" \
363 : "=r" (res) \ 386 : "=r" (res) \
364 : "r" (value), "r" (addr), "i" (-EFAULT)); 387 : "r" (value), "r" (addr), "i" (-EFAULT)); \
388} while(0)
365 389
366#define _StoreDW(addr, value, res) \ 390#define _StoreDW(addr, value, res) \
391do { \
367 __asm__ __volatile__ ( \ 392 __asm__ __volatile__ ( \
368 "1:\tsdl\t%1,(%2)\n" \ 393 "1:\tsdl\t%1,(%2)\n" \
369 "2:\tsdr\t%1, 7(%2)\n\t" \ 394 "2:\tsdr\t%1, 7(%2)\n\t" \
@@ -379,10 +404,13 @@ extern void show_registers(struct pt_regs *regs);
379 STR(PTR)"\t2b, 4b\n\t" \ 404 STR(PTR)"\t2b, 4b\n\t" \
380 ".previous" \ 405 ".previous" \
381 : "=r" (res) \ 406 : "=r" (res) \
382 : "r" (value), "r" (addr), "i" (-EFAULT)); 407 : "r" (value), "r" (addr), "i" (-EFAULT)); \
408} while(0)
409
383#else 410#else
384/* MIPSR6 has no swl and sdl instructions */ 411/* MIPSR6 has no swl and sdl instructions */
385#define _StoreW(addr, value, res, type) \ 412#define _StoreW(addr, value, res, type) \
413do { \
386 __asm__ __volatile__ ( \ 414 __asm__ __volatile__ ( \
387 ".set\tpush\n\t" \ 415 ".set\tpush\n\t" \
388 ".set\tnoat\n\t" \ 416 ".set\tnoat\n\t" \
@@ -409,9 +437,11 @@ extern void show_registers(struct pt_regs *regs);
409 ".previous" \ 437 ".previous" \
410 : "=&r" (res) \ 438 : "=&r" (res) \
411 : "r" (value), "r" (addr), "i" (-EFAULT) \ 439 : "r" (value), "r" (addr), "i" (-EFAULT) \
412 : "memory"); 440 : "memory"); \
441} while(0)
413 442
414#define StoreDW(addr, value, res) \ 443#define StoreDW(addr, value, res) \
444do { \
415 __asm__ __volatile__ ( \ 445 __asm__ __volatile__ ( \
416 ".set\tpush\n\t" \ 446 ".set\tpush\n\t" \
417 ".set\tnoat\n\t" \ 447 ".set\tnoat\n\t" \
@@ -451,12 +481,15 @@ extern void show_registers(struct pt_regs *regs);
451 ".previous" \ 481 ".previous" \
452 : "=&r" (res) \ 482 : "=&r" (res) \
453 : "r" (value), "r" (addr), "i" (-EFAULT) \ 483 : "r" (value), "r" (addr), "i" (-EFAULT) \
454 : "memory"); 484 : "memory"); \
485} while(0)
486
455#endif /* CONFIG_CPU_MIPSR6 */ 487#endif /* CONFIG_CPU_MIPSR6 */
456 488
457#else /* __BIG_ENDIAN */ 489#else /* __BIG_ENDIAN */
458 490
459#define _LoadHW(addr, value, res, type) \ 491#define _LoadHW(addr, value, res, type) \
492do { \
460 __asm__ __volatile__ (".set\tnoat\n" \ 493 __asm__ __volatile__ (".set\tnoat\n" \
461 "1:\t"type##_lb("%0", "1(%2)")"\n" \ 494 "1:\t"type##_lb("%0", "1(%2)")"\n" \
462 "2:\t"type##_lbu("$1", "0(%2)")"\n\t"\ 495 "2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
@@ -474,10 +507,12 @@ extern void show_registers(struct pt_regs *regs);
474 STR(PTR)"\t2b, 4b\n\t" \ 507 STR(PTR)"\t2b, 4b\n\t" \
475 ".previous" \ 508 ".previous" \
476 : "=&r" (value), "=r" (res) \ 509 : "=&r" (value), "=r" (res) \
477 : "r" (addr), "i" (-EFAULT)); 510 : "r" (addr), "i" (-EFAULT)); \
511} while(0)
478 512
479#ifndef CONFIG_CPU_MIPSR6 513#ifndef CONFIG_CPU_MIPSR6
480#define _LoadW(addr, value, res, type) \ 514#define _LoadW(addr, value, res, type) \
515do { \
481 __asm__ __volatile__ ( \ 516 __asm__ __volatile__ ( \
482 "1:\t"type##_lwl("%0", "3(%2)")"\n" \ 517 "1:\t"type##_lwl("%0", "3(%2)")"\n" \
483 "2:\t"type##_lwr("%0", "(%2)")"\n\t"\ 518 "2:\t"type##_lwr("%0", "(%2)")"\n\t"\
@@ -493,10 +528,13 @@ extern void show_registers(struct pt_regs *regs);
493 STR(PTR)"\t2b, 4b\n\t" \ 528 STR(PTR)"\t2b, 4b\n\t" \
494 ".previous" \ 529 ".previous" \
495 : "=&r" (value), "=r" (res) \ 530 : "=&r" (value), "=r" (res) \
496 : "r" (addr), "i" (-EFAULT)); 531 : "r" (addr), "i" (-EFAULT)); \
532} while(0)
533
497#else 534#else
498/* MIPSR6 has no lwl instruction */ 535/* MIPSR6 has no lwl instruction */
499#define _LoadW(addr, value, res, type) \ 536#define _LoadW(addr, value, res, type) \
537do { \
500 __asm__ __volatile__ ( \ 538 __asm__ __volatile__ ( \
501 ".set\tpush\n" \ 539 ".set\tpush\n" \
502 ".set\tnoat\n\t" \ 540 ".set\tnoat\n\t" \
@@ -525,11 +563,14 @@ extern void show_registers(struct pt_regs *regs);
525 STR(PTR)"\t4b, 11b\n\t" \ 563 STR(PTR)"\t4b, 11b\n\t" \
526 ".previous" \ 564 ".previous" \
527 : "=&r" (value), "=r" (res) \ 565 : "=&r" (value), "=r" (res) \
528 : "r" (addr), "i" (-EFAULT)); 566 : "r" (addr), "i" (-EFAULT)); \
567} while(0)
568
529#endif /* CONFIG_CPU_MIPSR6 */ 569#endif /* CONFIG_CPU_MIPSR6 */
530 570
531 571
532#define _LoadHWU(addr, value, res, type) \ 572#define _LoadHWU(addr, value, res, type) \
573do { \
533 __asm__ __volatile__ ( \ 574 __asm__ __volatile__ ( \
534 ".set\tnoat\n" \ 575 ".set\tnoat\n" \
535 "1:\t"type##_lbu("%0", "1(%2)")"\n" \ 576 "1:\t"type##_lbu("%0", "1(%2)")"\n" \
@@ -549,10 +590,12 @@ extern void show_registers(struct pt_regs *regs);
549 STR(PTR)"\t2b, 4b\n\t" \ 590 STR(PTR)"\t2b, 4b\n\t" \
550 ".previous" \ 591 ".previous" \
551 : "=&r" (value), "=r" (res) \ 592 : "=&r" (value), "=r" (res) \
552 : "r" (addr), "i" (-EFAULT)); 593 : "r" (addr), "i" (-EFAULT)); \
594} while(0)
553 595
554#ifndef CONFIG_CPU_MIPSR6 596#ifndef CONFIG_CPU_MIPSR6
555#define _LoadWU(addr, value, res, type) \ 597#define _LoadWU(addr, value, res, type) \
598do { \
556 __asm__ __volatile__ ( \ 599 __asm__ __volatile__ ( \
557 "1:\t"type##_lwl("%0", "3(%2)")"\n" \ 600 "1:\t"type##_lwl("%0", "3(%2)")"\n" \
558 "2:\t"type##_lwr("%0", "(%2)")"\n\t"\ 601 "2:\t"type##_lwr("%0", "(%2)")"\n\t"\
@@ -570,9 +613,11 @@ extern void show_registers(struct pt_regs *regs);
570 STR(PTR)"\t2b, 4b\n\t" \ 613 STR(PTR)"\t2b, 4b\n\t" \
571 ".previous" \ 614 ".previous" \
572 : "=&r" (value), "=r" (res) \ 615 : "=&r" (value), "=r" (res) \
573 : "r" (addr), "i" (-EFAULT)); 616 : "r" (addr), "i" (-EFAULT)); \
617} while(0)
574 618
575#define _LoadDW(addr, value, res) \ 619#define _LoadDW(addr, value, res) \
620do { \
576 __asm__ __volatile__ ( \ 621 __asm__ __volatile__ ( \
577 "1:\tldl\t%0, 7(%2)\n" \ 622 "1:\tldl\t%0, 7(%2)\n" \
578 "2:\tldr\t%0, (%2)\n\t" \ 623 "2:\tldr\t%0, (%2)\n\t" \
@@ -588,10 +633,13 @@ extern void show_registers(struct pt_regs *regs);
588 STR(PTR)"\t2b, 4b\n\t" \ 633 STR(PTR)"\t2b, 4b\n\t" \
589 ".previous" \ 634 ".previous" \
590 : "=&r" (value), "=r" (res) \ 635 : "=&r" (value), "=r" (res) \
591 : "r" (addr), "i" (-EFAULT)); 636 : "r" (addr), "i" (-EFAULT)); \
637} while(0)
638
592#else 639#else
593/* MIPSR6 has not lwl and ldl instructions */ 640/* MIPSR6 has not lwl and ldl instructions */
594#define _LoadWU(addr, value, res, type) \ 641#define _LoadWU(addr, value, res, type) \
642do { \
595 __asm__ __volatile__ ( \ 643 __asm__ __volatile__ ( \
596 ".set\tpush\n\t" \ 644 ".set\tpush\n\t" \
597 ".set\tnoat\n\t" \ 645 ".set\tnoat\n\t" \
@@ -620,9 +668,11 @@ extern void show_registers(struct pt_regs *regs);
620 STR(PTR)"\t4b, 11b\n\t" \ 668 STR(PTR)"\t4b, 11b\n\t" \
621 ".previous" \ 669 ".previous" \
622 : "=&r" (value), "=r" (res) \ 670 : "=&r" (value), "=r" (res) \
623 : "r" (addr), "i" (-EFAULT)); 671 : "r" (addr), "i" (-EFAULT)); \
672} while(0)
624 673
625#define _LoadDW(addr, value, res) \ 674#define _LoadDW(addr, value, res) \
675do { \
626 __asm__ __volatile__ ( \ 676 __asm__ __volatile__ ( \
627 ".set\tpush\n\t" \ 677 ".set\tpush\n\t" \
628 ".set\tnoat\n\t" \ 678 ".set\tnoat\n\t" \
@@ -667,10 +717,12 @@ extern void show_registers(struct pt_regs *regs);
667 STR(PTR)"\t8b, 11b\n\t" \ 717 STR(PTR)"\t8b, 11b\n\t" \
668 ".previous" \ 718 ".previous" \
669 : "=&r" (value), "=r" (res) \ 719 : "=&r" (value), "=r" (res) \
670 : "r" (addr), "i" (-EFAULT)); 720 : "r" (addr), "i" (-EFAULT)); \
721} while(0)
671#endif /* CONFIG_CPU_MIPSR6 */ 722#endif /* CONFIG_CPU_MIPSR6 */
672 723
673#define _StoreHW(addr, value, res, type) \ 724#define _StoreHW(addr, value, res, type) \
725do { \
674 __asm__ __volatile__ ( \ 726 __asm__ __volatile__ ( \
675 ".set\tnoat\n" \ 727 ".set\tnoat\n" \
676 "1:\t"type##_sb("%1", "0(%2)")"\n" \ 728 "1:\t"type##_sb("%1", "0(%2)")"\n" \
@@ -689,9 +741,12 @@ extern void show_registers(struct pt_regs *regs);
689 STR(PTR)"\t2b, 4b\n\t" \ 741 STR(PTR)"\t2b, 4b\n\t" \
690 ".previous" \ 742 ".previous" \
691 : "=r" (res) \ 743 : "=r" (res) \
692 : "r" (value), "r" (addr), "i" (-EFAULT)); 744 : "r" (value), "r" (addr), "i" (-EFAULT));\
745} while(0)
746
693#ifndef CONFIG_CPU_MIPSR6 747#ifndef CONFIG_CPU_MIPSR6
694#define _StoreW(addr, value, res, type) \ 748#define _StoreW(addr, value, res, type) \
749do { \
695 __asm__ __volatile__ ( \ 750 __asm__ __volatile__ ( \
696 "1:\t"type##_swl("%1", "3(%2)")"\n" \ 751 "1:\t"type##_swl("%1", "3(%2)")"\n" \
697 "2:\t"type##_swr("%1", "(%2)")"\n\t"\ 752 "2:\t"type##_swr("%1", "(%2)")"\n\t"\
@@ -707,9 +762,11 @@ extern void show_registers(struct pt_regs *regs);
707 STR(PTR)"\t2b, 4b\n\t" \ 762 STR(PTR)"\t2b, 4b\n\t" \
708 ".previous" \ 763 ".previous" \
709 : "=r" (res) \ 764 : "=r" (res) \
710 : "r" (value), "r" (addr), "i" (-EFAULT)); 765 : "r" (value), "r" (addr), "i" (-EFAULT)); \
766} while(0)
711 767
712#define _StoreDW(addr, value, res) \ 768#define _StoreDW(addr, value, res) \
769do { \
713 __asm__ __volatile__ ( \ 770 __asm__ __volatile__ ( \
714 "1:\tsdl\t%1, 7(%2)\n" \ 771 "1:\tsdl\t%1, 7(%2)\n" \
715 "2:\tsdr\t%1, (%2)\n\t" \ 772 "2:\tsdr\t%1, (%2)\n\t" \
@@ -725,10 +782,13 @@ extern void show_registers(struct pt_regs *regs);
725 STR(PTR)"\t2b, 4b\n\t" \ 782 STR(PTR)"\t2b, 4b\n\t" \
726 ".previous" \ 783 ".previous" \
727 : "=r" (res) \ 784 : "=r" (res) \
728 : "r" (value), "r" (addr), "i" (-EFAULT)); 785 : "r" (value), "r" (addr), "i" (-EFAULT)); \
786} while(0)
787
729#else 788#else
730/* MIPSR6 has no swl and sdl instructions */ 789/* MIPSR6 has no swl and sdl instructions */
731#define _StoreW(addr, value, res, type) \ 790#define _StoreW(addr, value, res, type) \
791do { \
732 __asm__ __volatile__ ( \ 792 __asm__ __volatile__ ( \
733 ".set\tpush\n\t" \ 793 ".set\tpush\n\t" \
734 ".set\tnoat\n\t" \ 794 ".set\tnoat\n\t" \
@@ -755,9 +815,11 @@ extern void show_registers(struct pt_regs *regs);
755 ".previous" \ 815 ".previous" \
756 : "=&r" (res) \ 816 : "=&r" (res) \
757 : "r" (value), "r" (addr), "i" (-EFAULT) \ 817 : "r" (value), "r" (addr), "i" (-EFAULT) \
758 : "memory"); 818 : "memory"); \
819} while(0)
759 820
760#define _StoreDW(addr, value, res) \ 821#define _StoreDW(addr, value, res) \
822do { \
761 __asm__ __volatile__ ( \ 823 __asm__ __volatile__ ( \
762 ".set\tpush\n\t" \ 824 ".set\tpush\n\t" \
763 ".set\tnoat\n\t" \ 825 ".set\tnoat\n\t" \
@@ -797,7 +859,9 @@ extern void show_registers(struct pt_regs *regs);
797 ".previous" \ 859 ".previous" \
798 : "=&r" (res) \ 860 : "=&r" (res) \
799 : "r" (value), "r" (addr), "i" (-EFAULT) \ 861 : "r" (value), "r" (addr), "i" (-EFAULT) \
800 : "memory"); 862 : "memory"); \
863} while(0)
864
801#endif /* CONFIG_CPU_MIPSR6 */ 865#endif /* CONFIG_CPU_MIPSR6 */
802#endif 866#endif
803 867