Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/kernel/perf_asm.S
26292 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
3
/* low-level asm for "intrigue" (PA8500-8700 CPU perf counters)
4
*
5
* Copyright (C) 2001 Randolph Chung <tausq at parisc-linux.org>
6
* Copyright (C) 2001 Hewlett-Packard (Grant Grundler)
7
*/
8
9
#include <asm/assembly.h>
10
11
#include <linux/init.h>
12
#include <linux/linkage.h>
13
14
#ifdef CONFIG_64BIT
15
.level 2.0w
16
#endif /* CONFIG_64BIT */
17
18
#define MTDIAG_1(gr) .word 0x14201840 + gr*0x10000
19
#define MTDIAG_2(gr) .word 0x14401840 + gr*0x10000
20
#define MFDIAG_1(gr) .word 0x142008A0 + gr
21
#define MFDIAG_2(gr) .word 0x144008A0 + gr
22
#define STDIAG(dr) .word 0x14000AA0 + dr*0x200000
23
#define SFDIAG(dr) .word 0x14000BA0 + dr*0x200000
24
#define DR2_SLOW_RET 53
25
26
27
;
28
; Enable the performance counters
29
;
30
; The coprocessor only needs to be enabled when
31
; starting/stopping the coprocessor with the pmenb/pmdis.
32
;
33
.text
34
35
ENTRY(perf_intrigue_enable_perf_counters)
36
.proc
37
.callinfo frame=0,NO_CALLS
38
.entry
39
40
ldi 0x20,%r25 ; load up perfmon bit
41
mfctl ccr,%r26 ; get coprocessor register
42
or %r25,%r26,%r26 ; set bit
43
mtctl %r26,ccr ; turn on performance coprocessor
44
pmenb ; enable performance monitor
45
ssm 0,0 ; dummy op to ensure completion
46
sync ; follow ERS
47
andcm %r26,%r25,%r26 ; clear bit now
48
mtctl %r26,ccr ; turn off performance coprocessor
49
nop ; NOPs as specified in ERS
50
nop
51
nop
52
nop
53
nop
54
nop
55
nop
56
bve (%r2)
57
nop
58
.exit
59
.procend
60
ENDPROC(perf_intrigue_enable_perf_counters)
61
62
ENTRY(perf_intrigue_disable_perf_counters)
63
.proc
64
.callinfo frame=0,NO_CALLS
65
.entry
66
ldi 0x20,%r25 ; load up perfmon bit
67
mfctl ccr,%r26 ; get coprocessor register
68
or %r25,%r26,%r26 ; set bit
69
mtctl %r26,ccr ; turn on performance coprocessor
70
pmdis ; disable performance monitor
71
ssm 0,0 ; dummy op to ensure completion
72
andcm %r26,%r25,%r26 ; clear bit now
73
bve (%r2)
74
mtctl %r26,ccr ; turn off performance coprocessor
75
.exit
76
.procend
77
ENDPROC(perf_intrigue_disable_perf_counters)
78
79
;***********************************************************************
80
;*
81
;* Name: perf_rdr_shift_in_W
82
;*
83
;* Description:
84
;* This routine shifts data in from the RDR in arg0 and returns
85
;* the result in ret0. If the RDR is <= 64 bits in length, it
86
;* is shifted shifted backup immediately. This is to compensate
87
;* for RDR10 which has bits that preclude PDC stack operations
88
;* when they are in the wrong state.
89
;*
90
;* Arguments:
91
;* arg0 : rdr to be read
92
;* arg1 : bit length of rdr
93
;*
94
;* Returns:
95
;* ret0 = next 64 bits of rdr data from staging register
96
;*
97
;* Register usage:
98
;* arg0 : rdr to be read
99
;* arg1 : bit length of rdr
100
;* %r24 - original DR2 value
101
;* %r1 - scratch
102
;* %r29 - scratch
103
;*
104
;* Returns:
105
;* ret0 = RDR data (right justified)
106
;*
107
;***********************************************************************
108
109
ENTRY(perf_rdr_shift_in_W)
110
.proc
111
.callinfo frame=0,NO_CALLS
112
.entry
113
;
114
; read(shift in) the RDR.
115
;
116
117
; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
118
; shifting is done, from or to, remote diagnose registers.
119
;
120
121
depdi,z 1,DR2_SLOW_RET,1,%r29
122
MFDIAG_2 (24)
123
or %r24,%r29,%r29
124
MTDIAG_2 (29) ; set DR2_SLOW_RET
125
126
nop
127
nop
128
nop
129
nop
130
131
;
132
; Cacheline start (32-byte cacheline)
133
;
134
nop
135
nop
136
nop
137
extrd,u arg1,63,6,%r1 ; setup shift amount by bits to move
138
139
mtsar %r1
140
shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
141
blr %r1,%r0 ; branch to 8-instruction sequence
142
nop
143
144
;
145
; Cacheline start (32-byte cacheline)
146
;
147
148
;
149
; RDR 0 sequence
150
;
151
SFDIAG (0)
152
ssm 0,0
153
MFDIAG_1 (28)
154
shrpd ret0,%r0,%sar,%r1
155
MTDIAG_1 (1) ; mtdiag %dr1, %r1
156
STDIAG (0)
157
ssm 0,0
158
b,n perf_rdr_shift_in_W_leave
159
160
;
161
; RDR 1 sequence
162
;
163
sync
164
ssm 0,0
165
SFDIAG (1)
166
ssm 0,0
167
MFDIAG_1 (28)
168
ssm 0,0
169
b,n perf_rdr_shift_in_W_leave
170
nop
171
172
;
173
; RDR 2 read sequence
174
;
175
SFDIAG (2)
176
ssm 0,0
177
MFDIAG_1 (28)
178
shrpd ret0,%r0,%sar,%r1
179
MTDIAG_1 (1)
180
STDIAG (2)
181
ssm 0,0
182
b,n perf_rdr_shift_in_W_leave
183
184
;
185
; RDR 3 read sequence
186
;
187
b,n perf_rdr_shift_in_W_leave
188
nop
189
nop
190
nop
191
nop
192
nop
193
nop
194
nop
195
196
;
197
; RDR 4 read sequence
198
;
199
sync
200
ssm 0,0
201
SFDIAG (4)
202
ssm 0,0
203
MFDIAG_1 (28)
204
b,n perf_rdr_shift_in_W_leave
205
ssm 0,0
206
nop
207
208
;
209
; RDR 5 read sequence
210
;
211
sync
212
ssm 0,0
213
SFDIAG (5)
214
ssm 0,0
215
MFDIAG_1 (28)
216
b,n perf_rdr_shift_in_W_leave
217
ssm 0,0
218
nop
219
220
;
221
; RDR 6 read sequence
222
;
223
sync
224
ssm 0,0
225
SFDIAG (6)
226
ssm 0,0
227
MFDIAG_1 (28)
228
b,n perf_rdr_shift_in_W_leave
229
ssm 0,0
230
nop
231
232
;
233
; RDR 7 read sequence
234
;
235
b,n perf_rdr_shift_in_W_leave
236
nop
237
nop
238
nop
239
nop
240
nop
241
nop
242
nop
243
244
;
245
; RDR 8 read sequence
246
;
247
b,n perf_rdr_shift_in_W_leave
248
nop
249
nop
250
nop
251
nop
252
nop
253
nop
254
nop
255
256
;
257
; RDR 9 read sequence
258
;
259
b,n perf_rdr_shift_in_W_leave
260
nop
261
nop
262
nop
263
nop
264
nop
265
nop
266
nop
267
268
;
269
; RDR 10 read sequence
270
;
271
SFDIAG (10)
272
ssm 0,0
273
MFDIAG_1 (28)
274
shrpd ret0,%r0,%sar,%r1
275
MTDIAG_1 (1)
276
STDIAG (10)
277
ssm 0,0
278
b,n perf_rdr_shift_in_W_leave
279
280
;
281
; RDR 11 read sequence
282
;
283
SFDIAG (11)
284
ssm 0,0
285
MFDIAG_1 (28)
286
shrpd ret0,%r0,%sar,%r1
287
MTDIAG_1 (1)
288
STDIAG (11)
289
ssm 0,0
290
b,n perf_rdr_shift_in_W_leave
291
292
;
293
; RDR 12 read sequence
294
;
295
b,n perf_rdr_shift_in_W_leave
296
nop
297
nop
298
nop
299
nop
300
nop
301
nop
302
nop
303
304
;
305
; RDR 13 read sequence
306
;
307
sync
308
ssm 0,0
309
SFDIAG (13)
310
ssm 0,0
311
MFDIAG_1 (28)
312
b,n perf_rdr_shift_in_W_leave
313
ssm 0,0
314
nop
315
316
;
317
; RDR 14 read sequence
318
;
319
SFDIAG (14)
320
ssm 0,0
321
MFDIAG_1 (28)
322
shrpd ret0,%r0,%sar,%r1
323
MTDIAG_1 (1)
324
STDIAG (14)
325
ssm 0,0
326
b,n perf_rdr_shift_in_W_leave
327
328
;
329
; RDR 15 read sequence
330
;
331
sync
332
ssm 0,0
333
SFDIAG (15)
334
ssm 0,0
335
MFDIAG_1 (28)
336
ssm 0,0
337
b,n perf_rdr_shift_in_W_leave
338
nop
339
340
;
341
; RDR 16 read sequence
342
;
343
sync
344
ssm 0,0
345
SFDIAG (16)
346
ssm 0,0
347
MFDIAG_1 (28)
348
b,n perf_rdr_shift_in_W_leave
349
ssm 0,0
350
nop
351
352
;
353
; RDR 17 read sequence
354
;
355
SFDIAG (17)
356
ssm 0,0
357
MFDIAG_1 (28)
358
shrpd ret0,%r0,%sar,%r1
359
MTDIAG_1 (1)
360
STDIAG (17)
361
ssm 0,0
362
b,n perf_rdr_shift_in_W_leave
363
364
;
365
; RDR 18 read sequence
366
;
367
SFDIAG (18)
368
ssm 0,0
369
MFDIAG_1 (28)
370
shrpd ret0,%r0,%sar,%r1
371
MTDIAG_1 (1)
372
STDIAG (18)
373
ssm 0,0
374
b,n perf_rdr_shift_in_W_leave
375
376
;
377
; RDR 19 read sequence
378
;
379
b,n perf_rdr_shift_in_W_leave
380
nop
381
nop
382
nop
383
nop
384
nop
385
nop
386
nop
387
388
;
389
; RDR 20 read sequence
390
;
391
sync
392
ssm 0,0
393
SFDIAG (20)
394
ssm 0,0
395
MFDIAG_1 (28)
396
b,n perf_rdr_shift_in_W_leave
397
ssm 0,0
398
nop
399
400
;
401
; RDR 21 read sequence
402
;
403
sync
404
ssm 0,0
405
SFDIAG (21)
406
ssm 0,0
407
MFDIAG_1 (28)
408
b,n perf_rdr_shift_in_W_leave
409
ssm 0,0
410
nop
411
412
;
413
; RDR 22 read sequence
414
;
415
sync
416
ssm 0,0
417
SFDIAG (22)
418
ssm 0,0
419
MFDIAG_1 (28)
420
b,n perf_rdr_shift_in_W_leave
421
ssm 0,0
422
nop
423
424
;
425
; RDR 23 read sequence
426
;
427
sync
428
ssm 0,0
429
SFDIAG (23)
430
ssm 0,0
431
MFDIAG_1 (28)
432
b,n perf_rdr_shift_in_W_leave
433
ssm 0,0
434
nop
435
436
;
437
; RDR 24 read sequence
438
;
439
sync
440
ssm 0,0
441
SFDIAG (24)
442
ssm 0,0
443
MFDIAG_1 (28)
444
b,n perf_rdr_shift_in_W_leave
445
ssm 0,0
446
nop
447
448
;
449
; RDR 25 read sequence
450
;
451
sync
452
ssm 0,0
453
SFDIAG (25)
454
ssm 0,0
455
MFDIAG_1 (28)
456
b,n perf_rdr_shift_in_W_leave
457
ssm 0,0
458
nop
459
460
;
461
; RDR 26 read sequence
462
;
463
SFDIAG (26)
464
ssm 0,0
465
MFDIAG_1 (28)
466
shrpd ret0,%r0,%sar,%r1
467
MTDIAG_1 (1)
468
STDIAG (26)
469
ssm 0,0
470
b,n perf_rdr_shift_in_W_leave
471
472
;
473
; RDR 27 read sequence
474
;
475
SFDIAG (27)
476
ssm 0,0
477
MFDIAG_1 (28)
478
shrpd ret0,%r0,%sar,%r1
479
MTDIAG_1 (1)
480
STDIAG (27)
481
ssm 0,0
482
b,n perf_rdr_shift_in_W_leave
483
484
;
485
; RDR 28 read sequence
486
;
487
sync
488
ssm 0,0
489
SFDIAG (28)
490
ssm 0,0
491
MFDIAG_1 (28)
492
b,n perf_rdr_shift_in_W_leave
493
ssm 0,0
494
nop
495
496
;
497
; RDR 29 read sequence
498
;
499
sync
500
ssm 0,0
501
SFDIAG (29)
502
ssm 0,0
503
MFDIAG_1 (28)
504
b,n perf_rdr_shift_in_W_leave
505
ssm 0,0
506
nop
507
508
;
509
; RDR 30 read sequence
510
;
511
SFDIAG (30)
512
ssm 0,0
513
MFDIAG_1 (28)
514
shrpd ret0,%r0,%sar,%r1
515
MTDIAG_1 (1)
516
STDIAG (30)
517
ssm 0,0
518
b,n perf_rdr_shift_in_W_leave
519
520
;
521
; RDR 31 read sequence
522
;
523
sync
524
ssm 0,0
525
SFDIAG (31)
526
ssm 0,0
527
MFDIAG_1 (28)
528
nop
529
ssm 0,0
530
nop
531
532
;
533
; Fallthrough
534
;
535
536
perf_rdr_shift_in_W_leave:
537
bve (%r2)
538
.exit
539
MTDIAG_2 (24) ; restore DR2
540
.procend
541
ENDPROC(perf_rdr_shift_in_W)
542
543
544
;***********************************************************************
545
;*
546
;* Name: perf_rdr_shift_out_W
547
;*
548
;* Description:
549
;* This routine moves data to the RDR's. The double-word that
550
;* arg1 points to is loaded and moved into the staging register.
551
;* Then the STDIAG instruction for the RDR # in arg0 is called
552
;* to move the data to the RDR.
553
;*
554
;* Arguments:
555
;* arg0 = rdr number
556
;* arg1 = 64-bit value to write
557
;* %r24 - DR2 | DR2_SLOW_RET
558
;* %r23 - original DR2 value
559
;*
560
;* Returns:
561
;* None
562
;*
563
;* Register usage:
564
;*
565
;***********************************************************************
566
567
ENTRY(perf_rdr_shift_out_W)
568
.proc
569
.callinfo frame=0,NO_CALLS
570
.entry
571
;
572
; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
573
; shifting is done, from or to, the remote diagnose registers.
574
;
575
576
depdi,z 1,DR2_SLOW_RET,1,%r24
577
MFDIAG_2 (23)
578
or %r24,%r23,%r24
579
MTDIAG_2 (24) ; set DR2_SLOW_RET
580
MTDIAG_1 (25) ; data to the staging register
581
shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
582
blr %r1,%r0 ; branch to 8-instruction sequence
583
nop
584
585
;
586
; RDR 0 write sequence
587
;
588
sync ; RDR 0 write sequence
589
ssm 0,0
590
STDIAG (0)
591
ssm 0,0
592
b,n perf_rdr_shift_out_W_leave
593
nop
594
ssm 0,0
595
nop
596
597
;
598
; RDR 1 write sequence
599
;
600
sync
601
ssm 0,0
602
STDIAG (1)
603
ssm 0,0
604
b,n perf_rdr_shift_out_W_leave
605
nop
606
ssm 0,0
607
nop
608
609
;
610
; RDR 2 write sequence
611
;
612
sync
613
ssm 0,0
614
STDIAG (2)
615
ssm 0,0
616
b,n perf_rdr_shift_out_W_leave
617
nop
618
ssm 0,0
619
nop
620
621
;
622
; RDR 3 write sequence
623
;
624
sync
625
ssm 0,0
626
STDIAG (3)
627
ssm 0,0
628
b,n perf_rdr_shift_out_W_leave
629
nop
630
ssm 0,0
631
nop
632
633
;
634
; RDR 4 write sequence
635
;
636
sync
637
ssm 0,0
638
STDIAG (4)
639
ssm 0,0
640
b,n perf_rdr_shift_out_W_leave
641
nop
642
ssm 0,0
643
nop
644
645
;
646
; RDR 5 write sequence
647
;
648
sync
649
ssm 0,0
650
STDIAG (5)
651
ssm 0,0
652
b,n perf_rdr_shift_out_W_leave
653
nop
654
ssm 0,0
655
nop
656
657
;
658
; RDR 6 write sequence
659
;
660
sync
661
ssm 0,0
662
STDIAG (6)
663
ssm 0,0
664
b,n perf_rdr_shift_out_W_leave
665
nop
666
ssm 0,0
667
nop
668
669
;
670
; RDR 7 write sequence
671
;
672
sync
673
ssm 0,0
674
STDIAG (7)
675
ssm 0,0
676
b,n perf_rdr_shift_out_W_leave
677
nop
678
ssm 0,0
679
nop
680
681
;
682
; RDR 8 write sequence
683
;
684
sync
685
ssm 0,0
686
STDIAG (8)
687
ssm 0,0
688
b,n perf_rdr_shift_out_W_leave
689
nop
690
ssm 0,0
691
nop
692
693
;
694
; RDR 9 write sequence
695
;
696
sync
697
ssm 0,0
698
STDIAG (9)
699
ssm 0,0
700
b,n perf_rdr_shift_out_W_leave
701
nop
702
ssm 0,0
703
nop
704
705
;
706
; RDR 10 write sequence
707
;
708
sync
709
ssm 0,0
710
STDIAG (10)
711
STDIAG (26)
712
ssm 0,0
713
b,n perf_rdr_shift_out_W_leave
714
ssm 0,0
715
nop
716
717
;
718
; RDR 11 write sequence
719
;
720
sync
721
ssm 0,0
722
STDIAG (11)
723
STDIAG (27)
724
ssm 0,0
725
b,n perf_rdr_shift_out_W_leave
726
ssm 0,0
727
nop
728
729
;
730
; RDR 12 write sequence
731
;
732
sync
733
ssm 0,0
734
STDIAG (12)
735
ssm 0,0
736
b,n perf_rdr_shift_out_W_leave
737
nop
738
ssm 0,0
739
nop
740
741
;
742
; RDR 13 write sequence
743
;
744
sync
745
ssm 0,0
746
STDIAG (13)
747
ssm 0,0
748
b,n perf_rdr_shift_out_W_leave
749
nop
750
ssm 0,0
751
nop
752
753
;
754
; RDR 14 write sequence
755
;
756
sync
757
ssm 0,0
758
STDIAG (14)
759
ssm 0,0
760
b,n perf_rdr_shift_out_W_leave
761
nop
762
ssm 0,0
763
nop
764
765
;
766
; RDR 15 write sequence
767
;
768
sync
769
ssm 0,0
770
STDIAG (15)
771
ssm 0,0
772
b,n perf_rdr_shift_out_W_leave
773
nop
774
ssm 0,0
775
nop
776
777
;
778
; RDR 16 write sequence
779
;
780
sync
781
ssm 0,0
782
STDIAG (16)
783
ssm 0,0
784
b,n perf_rdr_shift_out_W_leave
785
nop
786
ssm 0,0
787
nop
788
789
;
790
; RDR 17 write sequence
791
;
792
sync
793
ssm 0,0
794
STDIAG (17)
795
ssm 0,0
796
b,n perf_rdr_shift_out_W_leave
797
nop
798
ssm 0,0
799
nop
800
801
;
802
; RDR 18 write sequence
803
;
804
sync
805
ssm 0,0
806
STDIAG (18)
807
ssm 0,0
808
b,n perf_rdr_shift_out_W_leave
809
nop
810
ssm 0,0
811
nop
812
813
;
814
; RDR 19 write sequence
815
;
816
sync
817
ssm 0,0
818
STDIAG (19)
819
ssm 0,0
820
b,n perf_rdr_shift_out_W_leave
821
nop
822
ssm 0,0
823
nop
824
825
;
826
; RDR 20 write sequence
827
;
828
sync
829
ssm 0,0
830
STDIAG (20)
831
ssm 0,0
832
b,n perf_rdr_shift_out_W_leave
833
nop
834
ssm 0,0
835
nop
836
837
;
838
; RDR 21 write sequence
839
;
840
sync
841
ssm 0,0
842
STDIAG (21)
843
ssm 0,0
844
b,n perf_rdr_shift_out_W_leave
845
nop
846
ssm 0,0
847
nop
848
849
;
850
; RDR 22 write sequence
851
;
852
sync
853
ssm 0,0
854
STDIAG (22)
855
ssm 0,0
856
b,n perf_rdr_shift_out_W_leave
857
nop
858
ssm 0,0
859
nop
860
861
;
862
; RDR 23 write sequence
863
;
864
sync
865
ssm 0,0
866
STDIAG (23)
867
ssm 0,0
868
b,n perf_rdr_shift_out_W_leave
869
nop
870
ssm 0,0
871
nop
872
873
;
874
; RDR 24 write sequence
875
;
876
sync
877
ssm 0,0
878
STDIAG (24)
879
ssm 0,0
880
b,n perf_rdr_shift_out_W_leave
881
nop
882
ssm 0,0
883
nop
884
885
;
886
; RDR 25 write sequence
887
;
888
sync
889
ssm 0,0
890
STDIAG (25)
891
ssm 0,0
892
b,n perf_rdr_shift_out_W_leave
893
nop
894
ssm 0,0
895
nop
896
897
;
898
; RDR 26 write sequence
899
;
900
sync
901
ssm 0,0
902
STDIAG (10)
903
STDIAG (26)
904
ssm 0,0
905
b,n perf_rdr_shift_out_W_leave
906
ssm 0,0
907
nop
908
909
;
910
; RDR 27 write sequence
911
;
912
sync
913
ssm 0,0
914
STDIAG (11)
915
STDIAG (27)
916
ssm 0,0
917
b,n perf_rdr_shift_out_W_leave
918
ssm 0,0
919
nop
920
921
;
922
; RDR 28 write sequence
923
;
924
sync
925
ssm 0,0
926
STDIAG (28)
927
ssm 0,0
928
b,n perf_rdr_shift_out_W_leave
929
nop
930
ssm 0,0
931
nop
932
933
;
934
; RDR 29 write sequence
935
;
936
sync
937
ssm 0,0
938
STDIAG (29)
939
ssm 0,0
940
b,n perf_rdr_shift_out_W_leave
941
nop
942
ssm 0,0
943
nop
944
945
;
946
; RDR 30 write sequence
947
;
948
sync
949
ssm 0,0
950
STDIAG (30)
951
ssm 0,0
952
b,n perf_rdr_shift_out_W_leave
953
nop
954
ssm 0,0
955
nop
956
957
;
958
; RDR 31 write sequence
959
;
960
sync
961
ssm 0,0
962
STDIAG (31)
963
ssm 0,0
964
b,n perf_rdr_shift_out_W_leave
965
nop
966
ssm 0,0
967
nop
968
969
perf_rdr_shift_out_W_leave:
970
bve (%r2)
971
.exit
972
MTDIAG_2 (23) ; restore DR2
973
.procend
974
ENDPROC(perf_rdr_shift_out_W)
975
976
977
;***********************************************************************
978
;*
979
;* Name: rdr_shift_in_U
980
;*
981
;* Description:
982
;* This routine shifts data in from the RDR in arg0 and returns
983
;* the result in ret0. If the RDR is <= 64 bits in length, it
984
;* is shifted shifted backup immediately. This is to compensate
985
;* for RDR10 which has bits that preclude PDC stack operations
986
;* when they are in the wrong state.
987
;*
988
;* Arguments:
989
;* arg0 : rdr to be read
990
;* arg1 : bit length of rdr
991
;*
992
;* Returns:
993
;* ret0 = next 64 bits of rdr data from staging register
994
;*
995
;* Register usage:
996
;* arg0 : rdr to be read
997
;* arg1 : bit length of rdr
998
;* %r24 - original DR2 value
999
;* %r23 - DR2 | DR2_SLOW_RET
1000
;* %r1 - scratch
1001
;*
1002
;***********************************************************************
1003
1004
ENTRY(perf_rdr_shift_in_U)
1005
.proc
1006
.callinfo frame=0,NO_CALLS
1007
.entry
1008
1009
; read(shift in) the RDR.
1010
;
1011
; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
1012
; shifting is done, from or to, remote diagnose registers.
1013
1014
depdi,z 1,DR2_SLOW_RET,1,%r29
1015
MFDIAG_2 (24)
1016
or %r24,%r29,%r29
1017
MTDIAG_2 (29) ; set DR2_SLOW_RET
1018
1019
nop
1020
nop
1021
nop
1022
nop
1023
1024
;
1025
; Start of next 32-byte cacheline
1026
;
1027
nop
1028
nop
1029
nop
1030
extrd,u arg1,63,6,%r1
1031
1032
mtsar %r1
1033
shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
1034
blr %r1,%r0 ; branch to 8-instruction sequence
1035
nop
1036
1037
;
1038
; Start of next 32-byte cacheline
1039
;
1040
SFDIAG (0) ; RDR 0 read sequence
1041
ssm 0,0
1042
MFDIAG_1 (28)
1043
shrpd ret0,%r0,%sar,%r1
1044
MTDIAG_1 (1)
1045
STDIAG (0)
1046
ssm 0,0
1047
b,n perf_rdr_shift_in_U_leave
1048
1049
SFDIAG (1) ; RDR 1 read sequence
1050
ssm 0,0
1051
MFDIAG_1 (28)
1052
shrpd ret0,%r0,%sar,%r1
1053
MTDIAG_1 (1)
1054
STDIAG (1)
1055
ssm 0,0
1056
b,n perf_rdr_shift_in_U_leave
1057
1058
sync ; RDR 2 read sequence
1059
ssm 0,0
1060
SFDIAG (4)
1061
ssm 0,0
1062
MFDIAG_1 (28)
1063
b,n perf_rdr_shift_in_U_leave
1064
ssm 0,0
1065
nop
1066
1067
sync ; RDR 3 read sequence
1068
ssm 0,0
1069
SFDIAG (3)
1070
ssm 0,0
1071
MFDIAG_1 (28)
1072
b,n perf_rdr_shift_in_U_leave
1073
ssm 0,0
1074
nop
1075
1076
sync ; RDR 4 read sequence
1077
ssm 0,0
1078
SFDIAG (4)
1079
ssm 0,0
1080
MFDIAG_1 (28)
1081
b,n perf_rdr_shift_in_U_leave
1082
ssm 0,0
1083
nop
1084
1085
sync ; RDR 5 read sequence
1086
ssm 0,0
1087
SFDIAG (5)
1088
ssm 0,0
1089
MFDIAG_1 (28)
1090
b,n perf_rdr_shift_in_U_leave
1091
ssm 0,0
1092
nop
1093
1094
sync ; RDR 6 read sequence
1095
ssm 0,0
1096
SFDIAG (6)
1097
ssm 0,0
1098
MFDIAG_1 (28)
1099
b,n perf_rdr_shift_in_U_leave
1100
ssm 0,0
1101
nop
1102
1103
sync ; RDR 7 read sequence
1104
ssm 0,0
1105
SFDIAG (7)
1106
ssm 0,0
1107
MFDIAG_1 (28)
1108
b,n perf_rdr_shift_in_U_leave
1109
ssm 0,0
1110
nop
1111
1112
b,n perf_rdr_shift_in_U_leave
1113
nop
1114
nop
1115
nop
1116
nop
1117
nop
1118
nop
1119
nop
1120
1121
SFDIAG (9) ; RDR 9 read sequence
1122
ssm 0,0
1123
MFDIAG_1 (28)
1124
shrpd ret0,%r0,%sar,%r1
1125
MTDIAG_1 (1)
1126
STDIAG (9)
1127
ssm 0,0
1128
b,n perf_rdr_shift_in_U_leave
1129
1130
SFDIAG (10) ; RDR 10 read sequence
1131
ssm 0,0
1132
MFDIAG_1 (28)
1133
shrpd ret0,%r0,%sar,%r1
1134
MTDIAG_1 (1)
1135
STDIAG (10)
1136
ssm 0,0
1137
b,n perf_rdr_shift_in_U_leave
1138
1139
SFDIAG (11) ; RDR 11 read sequence
1140
ssm 0,0
1141
MFDIAG_1 (28)
1142
shrpd ret0,%r0,%sar,%r1
1143
MTDIAG_1 (1)
1144
STDIAG (11)
1145
ssm 0,0
1146
b,n perf_rdr_shift_in_U_leave
1147
1148
SFDIAG (12) ; RDR 12 read sequence
1149
ssm 0,0
1150
MFDIAG_1 (28)
1151
shrpd ret0,%r0,%sar,%r1
1152
MTDIAG_1 (1)
1153
STDIAG (12)
1154
ssm 0,0
1155
b,n perf_rdr_shift_in_U_leave
1156
1157
SFDIAG (13) ; RDR 13 read sequence
1158
ssm 0,0
1159
MFDIAG_1 (28)
1160
shrpd ret0,%r0,%sar,%r1
1161
MTDIAG_1 (1)
1162
STDIAG (13)
1163
ssm 0,0
1164
b,n perf_rdr_shift_in_U_leave
1165
1166
SFDIAG (14) ; RDR 14 read sequence
1167
ssm 0,0
1168
MFDIAG_1 (28)
1169
shrpd ret0,%r0,%sar,%r1
1170
MTDIAG_1 (1)
1171
STDIAG (14)
1172
ssm 0,0
1173
b,n perf_rdr_shift_in_U_leave
1174
1175
SFDIAG (15) ; RDR 15 read sequence
1176
ssm 0,0
1177
MFDIAG_1 (28)
1178
shrpd ret0,%r0,%sar,%r1
1179
MTDIAG_1 (1)
1180
STDIAG (15)
1181
ssm 0,0
1182
b,n perf_rdr_shift_in_U_leave
1183
1184
sync ; RDR 16 read sequence
1185
ssm 0,0
1186
SFDIAG (16)
1187
ssm 0,0
1188
MFDIAG_1 (28)
1189
b,n perf_rdr_shift_in_U_leave
1190
ssm 0,0
1191
nop
1192
1193
SFDIAG (17) ; RDR 17 read sequence
1194
ssm 0,0
1195
MFDIAG_1 (28)
1196
shrpd ret0,%r0,%sar,%r1
1197
MTDIAG_1 (1)
1198
STDIAG (17)
1199
ssm 0,0
1200
b,n perf_rdr_shift_in_U_leave
1201
1202
SFDIAG (18) ; RDR 18 read sequence
1203
ssm 0,0
1204
MFDIAG_1 (28)
1205
shrpd ret0,%r0,%sar,%r1
1206
MTDIAG_1 (1)
1207
STDIAG (18)
1208
ssm 0,0
1209
b,n perf_rdr_shift_in_U_leave
1210
1211
b,n perf_rdr_shift_in_U_leave
1212
nop
1213
nop
1214
nop
1215
nop
1216
nop
1217
nop
1218
nop
1219
1220
sync ; RDR 20 read sequence
1221
ssm 0,0
1222
SFDIAG (20)
1223
ssm 0,0
1224
MFDIAG_1 (28)
1225
b,n perf_rdr_shift_in_U_leave
1226
ssm 0,0
1227
nop
1228
1229
sync ; RDR 21 read sequence
1230
ssm 0,0
1231
SFDIAG (21)
1232
ssm 0,0
1233
MFDIAG_1 (28)
1234
b,n perf_rdr_shift_in_U_leave
1235
ssm 0,0
1236
nop
1237
1238
sync ; RDR 22 read sequence
1239
ssm 0,0
1240
SFDIAG (22)
1241
ssm 0,0
1242
MFDIAG_1 (28)
1243
b,n perf_rdr_shift_in_U_leave
1244
ssm 0,0
1245
nop
1246
1247
sync ; RDR 23 read sequence
1248
ssm 0,0
1249
SFDIAG (23)
1250
ssm 0,0
1251
MFDIAG_1 (28)
1252
b,n perf_rdr_shift_in_U_leave
1253
ssm 0,0
1254
nop
1255
1256
sync ; RDR 24 read sequence
1257
ssm 0,0
1258
SFDIAG (24)
1259
ssm 0,0
1260
MFDIAG_1 (28)
1261
b,n perf_rdr_shift_in_U_leave
1262
ssm 0,0
1263
nop
1264
1265
sync ; RDR 25 read sequence
1266
ssm 0,0
1267
SFDIAG (25)
1268
ssm 0,0
1269
MFDIAG_1 (28)
1270
b,n perf_rdr_shift_in_U_leave
1271
ssm 0,0
1272
nop
1273
1274
SFDIAG (26) ; RDR 26 read sequence
1275
ssm 0,0
1276
MFDIAG_1 (28)
1277
shrpd ret0,%r0,%sar,%r1
1278
MTDIAG_1 (1)
1279
STDIAG (26)
1280
ssm 0,0
1281
b,n perf_rdr_shift_in_U_leave
1282
1283
SFDIAG (27) ; RDR 27 read sequence
1284
ssm 0,0
1285
MFDIAG_1 (28)
1286
shrpd ret0,%r0,%sar,%r1
1287
MTDIAG_1 (1)
1288
STDIAG (27)
1289
ssm 0,0
1290
b,n perf_rdr_shift_in_U_leave
1291
1292
sync ; RDR 28 read sequence
1293
ssm 0,0
1294
SFDIAG (28)
1295
ssm 0,0
1296
MFDIAG_1 (28)
1297
b,n perf_rdr_shift_in_U_leave
1298
ssm 0,0
1299
nop
1300
1301
b,n perf_rdr_shift_in_U_leave
1302
nop
1303
nop
1304
nop
1305
nop
1306
nop
1307
nop
1308
nop
1309
1310
SFDIAG (30) ; RDR 30 read sequence
1311
ssm 0,0
1312
MFDIAG_1 (28)
1313
shrpd ret0,%r0,%sar,%r1
1314
MTDIAG_1 (1)
1315
STDIAG (30)
1316
ssm 0,0
1317
b,n perf_rdr_shift_in_U_leave
1318
1319
SFDIAG (31) ; RDR 31 read sequence
1320
ssm 0,0
1321
MFDIAG_1 (28)
1322
shrpd ret0,%r0,%sar,%r1
1323
MTDIAG_1 (1)
1324
STDIAG (31)
1325
ssm 0,0
1326
b,n perf_rdr_shift_in_U_leave
1327
nop
1328
1329
perf_rdr_shift_in_U_leave:
1330
bve (%r2)
1331
.exit
1332
MTDIAG_2 (24) ; restore DR2
1333
.procend
1334
ENDPROC(perf_rdr_shift_in_U)
1335
1336
;***********************************************************************
1337
;*
1338
;* Name: rdr_shift_out_U
1339
;*
1340
;* Description:
1341
;* This routine moves data to the RDR's. The double-word that
1342
;* arg1 points to is loaded and moved into the staging register.
1343
;* Then the STDIAG instruction for the RDR # in arg0 is called
1344
;* to move the data to the RDR.
1345
;*
1346
;* Arguments:
1347
;* arg0 = rdr target
1348
;* arg1 = buffer pointer
1349
;*
1350
;* Returns:
1351
;* None
1352
;*
1353
;* Register usage:
1354
;* arg0 = rdr target
1355
;* arg1 = buffer pointer
1356
;* %r24 - DR2 | DR2_SLOW_RET
1357
;* %r23 - original DR2 value
1358
;*
1359
;***********************************************************************
1360
1361
ENTRY(perf_rdr_shift_out_U)
1362
.proc
1363
.callinfo frame=0,NO_CALLS
1364
.entry
1365
1366
;
1367
; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
1368
; shifting is done, from or to, the remote diagnose registers.
1369
;
1370
1371
depdi,z 1,DR2_SLOW_RET,1,%r24
1372
MFDIAG_2 (23)
1373
or %r24,%r23,%r24
1374
MTDIAG_2 (24) ; set DR2_SLOW_RET
1375
1376
MTDIAG_1 (25) ; data to the staging register
1377
shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
1378
blr %r1,%r0 ; branch to 8-instruction sequence
1379
nop
1380
1381
;
1382
; 32-byte cachline aligned
1383
;
1384
1385
sync ; RDR 0 write sequence
1386
ssm 0,0
1387
STDIAG (0)
1388
ssm 0,0
1389
b,n perf_rdr_shift_out_U_leave
1390
nop
1391
ssm 0,0
1392
nop
1393
1394
sync ; RDR 1 write sequence
1395
ssm 0,0
1396
STDIAG (1)
1397
ssm 0,0
1398
b,n perf_rdr_shift_out_U_leave
1399
nop
1400
ssm 0,0
1401
nop
1402
1403
sync ; RDR 2 write sequence
1404
ssm 0,0
1405
STDIAG (2)
1406
ssm 0,0
1407
b,n perf_rdr_shift_out_U_leave
1408
nop
1409
ssm 0,0
1410
nop
1411
1412
sync ; RDR 3 write sequence
1413
ssm 0,0
1414
STDIAG (3)
1415
ssm 0,0
1416
b,n perf_rdr_shift_out_U_leave
1417
nop
1418
ssm 0,0
1419
nop
1420
1421
sync ; RDR 4 write sequence
1422
ssm 0,0
1423
STDIAG (4)
1424
ssm 0,0
1425
b,n perf_rdr_shift_out_U_leave
1426
nop
1427
ssm 0,0
1428
nop
1429
1430
sync ; RDR 5 write sequence
1431
ssm 0,0
1432
STDIAG (5)
1433
ssm 0,0
1434
b,n perf_rdr_shift_out_U_leave
1435
nop
1436
ssm 0,0
1437
nop
1438
1439
sync ; RDR 6 write sequence
1440
ssm 0,0
1441
STDIAG (6)
1442
ssm 0,0
1443
b,n perf_rdr_shift_out_U_leave
1444
nop
1445
ssm 0,0
1446
nop
1447
1448
sync ; RDR 7 write sequence
1449
ssm 0,0
1450
STDIAG (7)
1451
ssm 0,0
1452
b,n perf_rdr_shift_out_U_leave
1453
nop
1454
ssm 0,0
1455
nop
1456
1457
sync ; RDR 8 write sequence
1458
ssm 0,0
1459
STDIAG (8)
1460
ssm 0,0
1461
b,n perf_rdr_shift_out_U_leave
1462
nop
1463
ssm 0,0
1464
nop
1465
1466
sync ; RDR 9 write sequence
1467
ssm 0,0
1468
STDIAG (9)
1469
ssm 0,0
1470
b,n perf_rdr_shift_out_U_leave
1471
nop
1472
ssm 0,0
1473
nop
1474
1475
sync ; RDR 10 write sequence
1476
ssm 0,0
1477
STDIAG (10)
1478
ssm 0,0
1479
b,n perf_rdr_shift_out_U_leave
1480
nop
1481
ssm 0,0
1482
nop
1483
1484
sync ; RDR 11 write sequence
1485
ssm 0,0
1486
STDIAG (11)
1487
ssm 0,0
1488
b,n perf_rdr_shift_out_U_leave
1489
nop
1490
ssm 0,0
1491
nop
1492
1493
sync ; RDR 12 write sequence
1494
ssm 0,0
1495
STDIAG (12)
1496
ssm 0,0
1497
b,n perf_rdr_shift_out_U_leave
1498
nop
1499
ssm 0,0
1500
nop
1501
1502
sync ; RDR 13 write sequence
1503
ssm 0,0
1504
STDIAG (13)
1505
ssm 0,0
1506
b,n perf_rdr_shift_out_U_leave
1507
nop
1508
ssm 0,0
1509
nop
1510
1511
sync ; RDR 14 write sequence
1512
ssm 0,0
1513
STDIAG (14)
1514
ssm 0,0
1515
b,n perf_rdr_shift_out_U_leave
1516
nop
1517
ssm 0,0
1518
nop
1519
1520
sync ; RDR 15 write sequence
1521
ssm 0,0
1522
STDIAG (15)
1523
ssm 0,0
1524
b,n perf_rdr_shift_out_U_leave
1525
nop
1526
ssm 0,0
1527
nop
1528
1529
sync ; RDR 16 write sequence
1530
ssm 0,0
1531
STDIAG (16)
1532
ssm 0,0
1533
b,n perf_rdr_shift_out_U_leave
1534
nop
1535
ssm 0,0
1536
nop
1537
1538
sync ; RDR 17 write sequence
1539
ssm 0,0
1540
STDIAG (17)
1541
ssm 0,0
1542
b,n perf_rdr_shift_out_U_leave
1543
nop
1544
ssm 0,0
1545
nop
1546
1547
sync ; RDR 18 write sequence
1548
ssm 0,0
1549
STDIAG (18)
1550
ssm 0,0
1551
b,n perf_rdr_shift_out_U_leave
1552
nop
1553
ssm 0,0
1554
nop
1555
1556
sync ; RDR 19 write sequence
1557
ssm 0,0
1558
STDIAG (19)
1559
ssm 0,0
1560
b,n perf_rdr_shift_out_U_leave
1561
nop
1562
ssm 0,0
1563
nop
1564
1565
sync ; RDR 20 write sequence
1566
ssm 0,0
1567
STDIAG (20)
1568
ssm 0,0
1569
b,n perf_rdr_shift_out_U_leave
1570
nop
1571
ssm 0,0
1572
nop
1573
1574
sync ; RDR 21 write sequence
1575
ssm 0,0
1576
STDIAG (21)
1577
ssm 0,0
1578
b,n perf_rdr_shift_out_U_leave
1579
nop
1580
ssm 0,0
1581
nop
1582
1583
sync ; RDR 22 write sequence
1584
ssm 0,0
1585
STDIAG (22)
1586
ssm 0,0
1587
b,n perf_rdr_shift_out_U_leave
1588
nop
1589
ssm 0,0
1590
nop
1591
1592
sync ; RDR 23 write sequence
1593
ssm 0,0
1594
STDIAG (23)
1595
ssm 0,0
1596
b,n perf_rdr_shift_out_U_leave
1597
nop
1598
ssm 0,0
1599
nop
1600
1601
sync ; RDR 24 write sequence
1602
ssm 0,0
1603
STDIAG (24)
1604
ssm 0,0
1605
b,n perf_rdr_shift_out_U_leave
1606
nop
1607
ssm 0,0
1608
nop
1609
1610
sync ; RDR 25 write sequence
1611
ssm 0,0
1612
STDIAG (25)
1613
ssm 0,0
1614
b,n perf_rdr_shift_out_U_leave
1615
nop
1616
ssm 0,0
1617
nop
1618
1619
sync ; RDR 26 write sequence
1620
ssm 0,0
1621
STDIAG (26)
1622
ssm 0,0
1623
b,n perf_rdr_shift_out_U_leave
1624
nop
1625
ssm 0,0
1626
nop
1627
1628
sync ; RDR 27 write sequence
1629
ssm 0,0
1630
STDIAG (27)
1631
ssm 0,0
1632
b,n perf_rdr_shift_out_U_leave
1633
nop
1634
ssm 0,0
1635
nop
1636
1637
sync ; RDR 28 write sequence
1638
ssm 0,0
1639
STDIAG (28)
1640
ssm 0,0
1641
b,n perf_rdr_shift_out_U_leave
1642
nop
1643
ssm 0,0
1644
nop
1645
1646
sync ; RDR 29 write sequence
1647
ssm 0,0
1648
STDIAG (29)
1649
ssm 0,0
1650
b,n perf_rdr_shift_out_U_leave
1651
nop
1652
ssm 0,0
1653
nop
1654
1655
sync ; RDR 30 write sequence
1656
ssm 0,0
1657
STDIAG (30)
1658
ssm 0,0
1659
b,n perf_rdr_shift_out_U_leave
1660
nop
1661
ssm 0,0
1662
nop
1663
1664
sync ; RDR 31 write sequence
1665
ssm 0,0
1666
STDIAG (31)
1667
ssm 0,0
1668
b,n perf_rdr_shift_out_U_leave
1669
nop
1670
ssm 0,0
1671
nop
1672
1673
perf_rdr_shift_out_U_leave:
1674
bve (%r2)
1675
.exit
1676
MTDIAG_2 (23) ; restore DR2
1677
.procend
1678
ENDPROC(perf_rdr_shift_out_U)
1679
1680
1681