1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/sys.h>
17#include <asm/unistd.h>
18#include <asm/errno.h>
19#include <asm/reg.h>
20#include <asm/page.h>
21#include <asm/cache.h>
22#include <asm/cputable.h>
23#include <asm/mmu.h>
24#include <asm/ppc_asm.h>
25#include <asm/thread_info.h>
26#include <asm/asm-offsets.h>
27#include <asm/processor.h>
28#include <asm/kexec.h>
29#include <asm/bug.h>
30#include <asm/ptrace.h>
31#include <asm/export.h>
32#include <asm/feature-fixups.h>
33
34 .text
35
36
37
38
39
40_GLOBAL(call_do_softirq)
41 mflr r0
42 stw r0,4(r1)
43 lwz r10,THREAD+KSP_LIMIT(r2)
44 stw r3, THREAD+KSP_LIMIT(r2)
45 stwu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3)
46 mr r1,r3
47 stw r10,8(r1)
48 bl __do_softirq
49 lwz r10,8(r1)
50 lwz r1,0(r1)
51 lwz r0,4(r1)
52 stw r10,THREAD+KSP_LIMIT(r2)
53 mtlr r0
54 blr
55
56
57
58
59_GLOBAL(call_do_irq)
60 mflr r0
61 stw r0,4(r1)
62 lwz r10,THREAD+KSP_LIMIT(r2)
63 stw r4, THREAD+KSP_LIMIT(r2)
64 stwu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r4)
65 mr r1,r4
66 stw r10,8(r1)
67 bl __do_irq
68 lwz r10,8(r1)
69 lwz r1,0(r1)
70 lwz r0,4(r1)
71 stw r10,THREAD+KSP_LIMIT(r2)
72 mtlr r0
73 blr
74
75
76
77
78_GLOBAL(mulhdu)
79 cmpwi r6,0
80 cmpwi cr1,r3,0
81 mr r10,r4
82 mulhwu r4,r4,r5
83 beq 1f
84 mulhwu r0,r10,r6
85 mullw r7,r10,r5
86 addc r7,r0,r7
87 addze r4,r4
881: beqlr cr1
89 mullw r9,r3,r5
90 mulhwu r10,r3,r5
91 beq 2f
92 mullw r0,r3,r6
93 mulhwu r8,r3,r6
94 addc r7,r0,r7
95 adde r4,r4,r8
96 addze r10,r10
972: addc r4,r4,r9
98 addze r3,r10
99 blr
100
101
102
103
104
105_GLOBAL(reloc_got2)
106 mflr r11
107 lis r7,__got2_start@ha
108 addi r7,r7,__got2_start@l
109 lis r8,__got2_end@ha
110 addi r8,r8,__got2_end@l
111 subf r8,r7,r8
112 srwi. r8,r8,2
113 beqlr
114 mtctr r8
115 bl 1f
1161: mflr r0
117 lis r4,1b@ha
118 addi r4,r4,1b@l
119 subf r0,r4,r0
120 add r7,r0,r7
1212: lwz r0,0(r7)
122 add r0,r0,r3
123 stw r0,0(r7)
124 addi r7,r7,4
125 bdnz 2b
126 mtlr r11
127 blr
128
129
130
131
132
133
134
135
136
137_GLOBAL(call_setup_cpu)
138 addis r4,r3,cur_cpu_spec@ha
139 addi r4,r4,cur_cpu_spec@l
140 lwz r4,0(r4)
141 add r4,r4,r3
142 lwz r5,CPU_SPEC_SETUP(r4)
143 cmpwi 0,r5,0
144 add r5,r5,r3
145 beqlr
146 mtctr r5
147 bctr
148
149
150
151
152
153
154
155_GLOBAL(low_choose_750fx_pll)
156
157 mfmsr r7
158 rlwinm r0,r7,0,17,15
159 mtmsr r0
160
161
162 cmplwi cr0,r3,0
163 beq 1f
164 mfspr r5,SPRN_HID0
165 rlwinm r5,r5,0,27,25
166 sync
167 mtspr SPRN_HID0,r5
168 isync
169 sync
170
1711:
172
173 mfspr r4,SPRN_HID1
174 rlwinm r5,r3,16,15,15
175 rlwinm r4,r4,0,16,14
176 or r4,r4,r5
177 mtspr SPRN_HID1,r4
178
179#ifdef CONFIG_SMP
180
181 lwz r6,TASK_CPU(r2)
182 slwi r6,r6,2
183#else
184 li r6, 0
185#endif
186 addis r6,r6,nap_save_hid1@ha
187 stw r4,nap_save_hid1@l(r6)
188
189
190 cmplwi cr0,r3,0
191 bne 1f
192 mfspr r5,SPRN_HID0
193 ori r5,r5,HID0_BTIC
194 sync
195 mtspr SPRN_HID0,r5
196 isync
197 sync
198
1991:
200
201 mtmsr r7
202 blr
203
204_GLOBAL(low_choose_7447a_dfs)
205
206 mfmsr r7
207 rlwinm r0,r7,0,17,15
208 mtmsr r0
209
210
211 mfspr r4,SPRN_HID1
212 insrwi r4,r3,1,9
213 sync
214 mtspr SPRN_HID1,r4
215 sync
216 isync
217
218
219 mtmsr r7
220 blr
221
222#endif
223
224
225
226
227
228_GLOBAL(_nmask_and_or_msr)
229 mfmsr r0
230 andc r0,r0,r3
231 or r0,r0,r4
232 SYNC
233 mtmsr r0
234 isync
235 blr
236
237#ifdef CONFIG_40x
238
239
240
241
242_GLOBAL(real_readb)
243 mfmsr r7
244 rlwinm r0,r7,0,~MSR_DR
245 sync
246 mtmsr r0
247 sync
248 isync
249 lbz r3,0(r3)
250 sync
251 mtmsr r7
252 sync
253 isync
254 blr
255
256
257
258
259_GLOBAL(real_writeb)
260 mfmsr r7
261 rlwinm r0,r7,0,~MSR_DR
262 sync
263 mtmsr r0
264 sync
265 isync
266 stb r3,0(r4)
267 sync
268 mtmsr r7
269 sync
270 isync
271 blr
272
273#endif
274
275
276
277
278
279
280#ifndef CONFIG_PPC_8xx
281_GLOBAL(flush_instruction_cache)
282
283#ifdef CONFIG_403GCX
284 li r3, 512
285 mtctr r3
286 lis r4, KERNELBASE@h
2871: iccci 0, r4
288 addi r4, r4, 16
289 bdnz 1b
290#else
291 lis r3, KERNELBASE@h
292 iccci 0,r3
293#endif
294
295#ifdef CONFIG_E200
296 mfspr r3,SPRN_L1CSR0
297 ori r3,r3,L1CSR0_CFI|L1CSR0_CLFC
298
299 mtspr SPRN_L1CSR0,r3
300 isync
301 blr
302#endif
303 mfspr r3,SPRN_L1CSR1
304 ori r3,r3,L1CSR1_ICFI|L1CSR1_ICLFR
305 mtspr SPRN_L1CSR1,r3
306
307 blr
308#else
309
310 mfspr r3,SPRN_HID0
311 ori r3,r3,HID0_ICFI
312 mtspr SPRN_HID0,r3
313#endif
314 isync
315 blr
316EXPORT_SYMBOL(flush_instruction_cache)
317#endif
318
319
320
321
322
323
324
325
326_GLOBAL(flush_icache_range)
327
328 PURGE_PREFETCHED_INS
329 blr
330#else
331 rlwinm r3,r3,0,0,31 - L1_CACHE_SHIFT
332 subf r4,r3,r4
333 addi r4,r4,L1_CACHE_BYTES - 1
334 srwi. r4,r4,L1_CACHE_SHIFT
335 beqlr
336 mtctr r4
337 mr r6,r3
3381: dcbst 0,r3
339 addi r3,r3,L1_CACHE_BYTES
340 bdnz 1b
341 sync
342#ifndef CONFIG_44x
343 mtctr r4
3442: icbi 0,r6
345 addi r6,r6,L1_CACHE_BYTES
346 bdnz 2b
347#else
348
349
350
351 iccci 0, r0
352#endif
353 sync
354 isync
355 blr
356#endif
357_ASM_NOKPROBE_SYMBOL(flush_icache_range)
358EXPORT_SYMBOL(flush_icache_range)
359
360
361
362
363
364
365
366
367
368_GLOBAL(__flush_dcache_icache)
369
370 PURGE_PREFETCHED_INS
371 blr
372#else
373 rlwinm r3,r3,0,0,31-PAGE_SHIFT
374 li r4,PAGE_SIZE/L1_CACHE_BYTES
375 mtctr r4
376 mr r6,r3
3770: dcbst 0,r3
378 addi r3,r3,L1_CACHE_BYTES
379 bdnz 0b
380 sync
381#ifdef CONFIG_44x
382
383
384
385
386
387
388
389BEGIN_MMU_FTR_SECTION
390 blr
391END_MMU_FTR_SECTION_IFSET(MMU_FTR_TYPE_44x)
392#endif
393 mtctr r4
3941: icbi 0,r6
395 addi r6,r6,L1_CACHE_BYTES
396 bdnz 1b
397 sync
398 isync
399 blr
400#endif
401
402#ifndef CONFIG_BOOKE
403
404
405
406
407
408
409
410
411_GLOBAL(__flush_dcache_icache_phys)
412
413 PURGE_PREFETCHED_INS
414 blr
415#else
416 mfmsr r10
417 rlwinm r0,r10,0,28,26
418 mtmsr r0
419 isync
420 rlwinm r3,r3,0,0,31-PAGE_SHIFT
421 li r4,PAGE_SIZE/L1_CACHE_BYTES
422 mtctr r4
423 mr r6,r3
4240: dcbst 0,r3
425 addi r3,r3,L1_CACHE_BYTES
426 bdnz 0b
427 sync
428 mtctr r4
4291: icbi 0,r6
430 addi r6,r6,L1_CACHE_BYTES
431 bdnz 1b
432 sync
433 mtmsr r10
434 isync
435 blr
436#endif
437#endif
438
439
440
441
442
443
444
445#define COPY_16_BYTES \
446 lwz r6,4(r4); \
447 lwz r7,8(r4); \
448 lwz r8,12(r4); \
449 lwzu r9,16(r4); \
450 stw r6,4(r3); \
451 stw r7,8(r3); \
452 stw r8,12(r3); \
453 stwu r9,16(r3)
454
455_GLOBAL(copy_page)
456 rlwinm r5, r3, 0, L1_CACHE_BYTES - 1
457 addi r3,r3,-4
458
4590: twnei r5, 0
460 EMIT_BUG_ENTRY 0b,__FILE__,__LINE__, BUGFLAG_WARNING
461
462 addi r4,r4,-4
463
464 li r5,4
465
466
467 li r0,MAX_COPY_PREFETCH
468 li r11,4
469 mtctr r0
47011: dcbt r11,r4
471 addi r11,r11,L1_CACHE_BYTES
472 bdnz 11b
473#else
474 dcbt r5,r4
475 li r11,L1_CACHE_BYTES+4
476#endif
477 li r0,PAGE_SIZE/L1_CACHE_BYTES - MAX_COPY_PREFETCH
478 crclr 4*cr0+eq
4792:
480 mtctr r0
4811:
482 dcbt r11,r4
483 dcbz r5,r3
484 COPY_16_BYTES
485
486 COPY_16_BYTES
487
488 COPY_16_BYTES
489 COPY_16_BYTES
490
491 COPY_16_BYTES
492 COPY_16_BYTES
493 COPY_16_BYTES
494 COPY_16_BYTES
495#endif
496#endif
497#endif
498 bdnz 1b
499 beqlr
500 crnot 4*cr0+eq,4*cr0+eq
501 li r0,MAX_COPY_PREFETCH
502 li r11,4
503 b 2b
504EXPORT_SYMBOL(copy_page)
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520_GLOBAL(__ashrdi3)
521 subfic r6,r5,32
522 srw r4,r4,r5
523 addi r7,r5,32
524 slw r6,r3,r6
525 rlwinm r8,r7,0,32
526 sraw r7,r3,r7
527 or r4,r4,r6
528 slw r7,r7,r8
529 sraw r3,r3,r5
530 or r4,r4,r7
531 blr
532EXPORT_SYMBOL(__ashrdi3)
533
534_GLOBAL(__ashldi3)
535 subfic r6,r5,32
536 slw r3,r3,r5
537 addi r7,r5,32
538 srw r6,r4,r6
539 slw r7,r4,r7
540 or r3,r3,r6
541 slw r4,r4,r5
542 or r3,r3,r7
543 blr
544EXPORT_SYMBOL(__ashldi3)
545
546_GLOBAL(__lshrdi3)
547 subfic r6,r5,32
548 srw r4,r4,r5
549 addi r7,r5,32
550 slw r6,r3,r6
551 srw r7,r3,r7
552 or r4,r4,r6
553 srw r3,r3,r5
554 or r4,r4,r7
555 blr
556EXPORT_SYMBOL(__lshrdi3)
557
558
559
560
561
562_GLOBAL(__cmpdi2)
563 cmpw r3,r5
564 li r3,1
565 bne 1f
566 cmplw r4,r6
567 beqlr
5681: li r3,0
569 bltlr
570 li r3,2
571 blr
572EXPORT_SYMBOL(__cmpdi2)
573
574
575
576
577_GLOBAL(__ucmpdi2)
578 cmplw r3,r5
579 li r3,1
580 bne 1f
581 cmplw r4,r6
582 beqlr
5831: li r3,0
584 bltlr
585 li r3,2
586 blr
587EXPORT_SYMBOL(__ucmpdi2)
588
589_GLOBAL(__bswapdi2)
590 rotlwi r9,r4,8
591 rotlwi r10,r3,8
592 rlwimi r9,r4,24,0,7
593 rlwimi r10,r3,24,0,7
594 rlwimi r9,r4,24,16,23
595 rlwimi r10,r3,24,16,23
596 mr r3,r9
597 mr r4,r10
598 blr
599EXPORT_SYMBOL(__bswapdi2)
600
601#ifdef CONFIG_SMP
602_GLOBAL(start_secondary_resume)
603
604 rlwinm r1, r1, 0, 0, 31 - THREAD_SHIFT
605 addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
606 li r3,0
607 stw r3,0(r1)
608 bl start_secondary
609 b .
610#endif
611
612
613
614
615_GLOBAL(__main)
616 blr
617
618#ifdef CONFIG_KEXEC_CORE
619
620
621
622 .globl relocate_new_kernel
623relocate_new_kernel:
624
625
626
627
628#ifdef CONFIG_FSL_BOOKE
629
630 mr r29, r3
631 mr r30, r4
632 mr r31, r5
633
634#define ENTRY_MAPPING_KEXEC_SETUP
635#include "fsl_booke_entry_mapping.S"
636#undef ENTRY_MAPPING_KEXEC_SETUP
637
638 mr r3, r29
639 mr r4, r30
640 mr r5, r31
641
642 li r0, 0
643
644
645
646 mr r29, r3
647 mr r30, r4
648 mr r31, r5
649
650#ifdef CONFIG_PPC_47x
651
652 mfspr r3,SPRN_PVR
653 srwi r3,r3,16
654 cmplwi cr0,r3,PVR_476FPE@h
655 beq setup_map_47x
656 cmplwi cr0,r3,PVR_476@h
657 beq setup_map_47x
658 cmplwi cr0,r3,PVR_476_ISS@h
659 beq setup_map_47x
660#endif
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682 li r3, 0
683 mtspr SPRN_PID, r3
684 mfmsr r4
685 andi. r4,r4,MSR_IS@l
686 beq wmmucr
687 oris r3,r3,PPC44x_MMUCR_STS@h
688wmmucr:
689 mtspr SPRN_MMUCR,r3
690 sync
691
692
693
694
695
696 bl 0f
6970: mflr r5
698 tlbsx r23,0,r5
699 li r4,0
700 li r3,0
7011: cmpw r23,r4
702 beq skip
703 tlbwe r3,r4,PPC44x_TLB_PAGEID
704skip:
705 addi r4,r4,1
706 cmpwi r4,64
707 bne 1b
708 isync
709
710
711 andi. r6, r23, 1
712 addi r24, r6, 1
713
714 mfmsr r9
715 rlwinm r5, r9, 27, 31, 31
716 xori r7, r5, 1
717
718
719 tlbre r3, r23, PPC44x_TLB_PAGEID
720 tlbre r4, r23, PPC44x_TLB_XLAT
721 tlbre r5, r23, PPC44x_TLB_ATTRIB
722
723
724 mr r25, r4
725
726
727 li r10, 1
728 rlwinm r11, r3, 0, 24, 27
729
730
731 cmpwi r11, PPC44x_TLB_256M
732 bne tlb_4k
733 rotlwi r10, r10, 28
734 b write_out
735tlb_4k:
736 cmpwi r11, PPC44x_TLB_4K
737 bne default
738 rotlwi r10, r10, 12
739 b write_out
740default:
741 rotlwi r10, r10, 10
742
743write_out:
744
745
746
747
748 insrwi r3, r7, 1, 23
749
750
751 tlbwe r3, r24, PPC44x_TLB_PAGEID
752 tlbwe r4, r24, PPC44x_TLB_XLAT
753 tlbwe r5, r24, PPC44x_TLB_ATTRIB
754
755 subi r11, r10, 1
756 not r10, r11
757
758
759 insrwi r9, r7, 1, 26
760
761 bl 1f
7621: mflr r8
763 addi r8, r8, (2f-1b)
764
765
766 mtspr SPRN_SRR0, r8
767 mtspr SPRN_SRR1, r9
768 rfi
769
7702:
771
772 li r3, 0
773 tlbwe r3, r23, PPC44x_TLB_PAGEID
774
775
776 li r5, 0
777 ori r5, r5, (PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_SX | PPC44x_TLB_G)
778
779
780 xori r7, r7, 1
781
782 li r8, 0
783 li r6, 3
784
785next_tlb:
786 rotlwi r3, r8, 28
787 mr r4, r3
788 ori r3, r3, (PPC44x_TLB_VALID | PPC44x_TLB_256M)
789 insrwi r3, r7, 1, 23
790
791 tlbwe r3, r6, PPC44x_TLB_PAGEID
792 tlbwe r4, r6, PPC44x_TLB_XLAT
793 tlbwe r5, r6, PPC44x_TLB_ATTRIB
794
795 addi r8, r8, 1
796 addi r6, r6, 1
797 cmpwi r8, 8
798 bne next_tlb
799 isync
800
801
802 li r9,0
803 insrwi r9, r7, 1, 26
804
805 bl 1f
8061: mflr r8
807 and r8, r8, r11
808 addi r8, r8, (2f-1b)
809
810 and r5, r25, r10
811 or r8, r8, r5
812
813 mtspr SPRN_SRR0, r8
814 mtspr SPRN_SRR1, r9
815 rfi
8162:
817
818 li r3, 0
819 tlbwe r3, r24, PPC44x_TLB_PAGEID
820 sync
821 b ppc44x_map_done
822
823#ifdef CONFIG_PPC_47x
824
825
826
827setup_map_47x:
828
829
830
831
832
833 li r3, 0
834 mtspr SPRN_PID, r3
835 mfmsr r4
836 andi. r4, r4, MSR_IS@l
837 beq 1f
838 oris r3, r3, PPC47x_MMUCR_STS@h
8391: mtspr SPRN_MMUCR, r3
840 sync
841
842
843 bl 2f
8442: mflr r23
845 tlbsx r23, 0, r23
846 tlbre r24, r23, 0
847 tlbre r25, r23, 1
848 tlbre r26, r23, 2
849
850
851
852
853
854
855
856
857
858 addis r3, 0, 0x8000
859 addi r4, 0, 0
860 addi r5, 0, 0
861 b clear_utlb_entry
862
863
864 .align 6
865
866clear_utlb_entry:
867
868 tlbwe r4, r3, 0
869 tlbwe r5, r3, 1
870 tlbwe r5, r3, 2
871 addis r3, r3, 0x2000
872 cmpwi r3, 0
873 bne clear_utlb_entry
874 addis r3, 0, 0x8000
875 addis r4, r4, 0x100
876 cmpwi r4, 0
877 bne clear_utlb_entry
878
879
880 mfmsr r5
881 rlwinm r7, r5, 27, 31, 31
882 xori r7, r7, 1
883
884 insrwi r24, r7, 1, 21
885
886
887
888
889
890 lis r3, 0x8000
891
892 tlbwe r24, r3, 0
893 tlbwe r25, r3, 1
894 tlbwe r26, r3, 2
895
896
897 insrwi r5, r7, 1, 26
898
899 bl 1f
9001: mflr r6
901 addi r6, r6, (2f-1b)
902
903 mtspr SPRN_SRR0, r6
904 mtspr SPRN_SRR1, r5
905 rfi
906
907
908
909
910
9112:
912 li r3, 0
913 li r4, 0
914 li r5, 0
915 li r6, 0
916 ori r6, r6, PPC47x_TLB2_S_RWX
917
918 li r8, 0
919
920 xori r7, r7, 1
921
922write_utlb:
923 rotlwi r5, r8, 28
924
925
926 mr r4, r5
927 ori r4, r4, (PPC47x_TLB0_VALID | PPC47x_TLB0_256M)
928 insrwi r4, r7, 1, 21
929
930 tlbwe r4, r3, 0
931 tlbwe r5, r3, 1
932 tlbwe r6, r3, 2
933 addi r8, r8, 1
934 cmpwi r8, 8
935 bne write_utlb
936
937
938 isync
939
940
941
942
943
944
945
946
947 rlwinm r10, r24, 0, 22, 27
948
949 cmpwi r10, PPC47x_TLB0_4K
950 bne 0f
951 li r10, 0x1000
952 bl 1f
953
9540:
955
956 lis r10, 0x1000
957
958 bl 1f
9591: mflr r4
960 addi r4, r4, (2f-1b)
961
962 subi r11, r10, 1
963 not r10, r11
964
965 and r5, r25, r10
966 and r6, r4, r11
967
968 or r5, r5, r6
969
970
971 mfmsr r8
972 insrwi r8, r7, 1, 26
973
974 mtspr SPRN_SRR1, r8
975 mtspr SPRN_SRR0, r5
976 rfi
977
9782:
979
980 lis r3, 0x8000
981
982 clrrwi r24, r24, 12
983 tlbwe r24, r3, 0
984 tlbwe r25, r3, 1
985 tlbwe r26, r3, 2
986
987
988 isync
989
990#endif
991
992ppc44x_map_done:
993
994
995
996 mr r3, r29
997 mr r4, r30
998 mr r5, r31
999
1000 li r0, 0
1001#else
1002 li r0, 0
1003
1004
1005
1006
1007
1008
1009 mr r8, r0
1010 ori r8, r8, MSR_RI|MSR_ME
1011 mtspr SPRN_SRR1, r8
1012 addi r8, r4, 1f - relocate_new_kernel
1013 mtspr SPRN_SRR0, r8
1014 sync
1015 rfi
1016
10171:
1018#endif
1019
1020
1021
1022
1023
1024 addi r1, r4, KEXEC_CONTROL_PAGE_SIZE - 8
1025 stw r0, 0(r1)
1026
1027
1028 li r6, 0
1029 mr r0, r3
1030 b 1f
1031
10320:
1033 lwzu r0, 4(r3)
1034
10351:
1036
1037 rlwinm. r7, r0, 0, 31, 31
1038 beq 2f
1039
1040 rlwinm r8, r0, 0, 0, 19
1041 b 0b
1042
10432:
1044 rlwinm. r7, r0, 0, 30, 30
1045 beq 2f
1046
1047 rlwinm r3, r0, 0, 0, 19
1048 subi r3, r3, 4
1049 b 0b
1050
10512:
1052 rlwinm. r7, r0, 0, 29, 29
1053 beq 2f
1054 b 3f
1055
10562:
1057 rlwinm. r7, r0, 0, 28, 28
1058 beq 0b
1059
1060 rlwinm r9, r0, 0, 0, 19
1061
1062 li r7, PAGE_SIZE / 4
1063 mtctr r7
1064 subi r9, r9, 4
1065 subi r8, r8, 4
10669:
1067 lwzu r0, 4(r9)
1068 xor r6, r6, r0
1069 stwu r0, 4(r8)
1070 dcbst 0, r8
1071 sync
1072 icbi 0, r8
1073 bdnz 9b
1074
1075 addi r9, r9, 4
1076 addi r8, r8, 4
1077 b 0b
1078
10793:
1080
1081
1082
1083
1084 isync
1085 sync
1086
1087 mfspr r3, SPRN_PIR
1088 mr r4, r5
1089
1090
1091 mtlr r5
1092 blrl
1093
10941: b 1b
1095
1096relocate_new_kernel_end:
1097
1098 .globl relocate_new_kernel_size
1099relocate_new_kernel_size:
1100 .long relocate_new_kernel_end - relocate_new_kernel
1101#endif
1102