xref: /linux/arch/parisc/kernel/perf_asm.S (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*1a59d1b8SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-or-later */
21da177e4SLinus Torvalds
31da177e4SLinus Torvalds/*    low-level asm for "intrigue" (PA8500-8700 CPU perf counters)
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds *    Copyright (C) 2001 Randolph Chung <tausq at parisc-linux.org>
61da177e4SLinus Torvalds *    Copyright (C) 2001 Hewlett-Packard (Grant Grundler)
71da177e4SLinus Torvalds */
81da177e4SLinus Torvalds
91da177e4SLinus Torvalds#include <asm/assembly.h>
10c913f94dSKyle McMartin
11c913f94dSKyle McMartin#include <linux/init.h>
128e9e9844SHelge Deller#include <linux/linkage.h>
131da177e4SLinus Torvalds
141da177e4SLinus Torvalds#ifdef CONFIG_64BIT
151da177e4SLinus Torvalds	.level		2.0w
161da177e4SLinus Torvalds#endif /* CONFIG_64BIT */
171da177e4SLinus Torvalds
181da177e4SLinus Torvalds#define MTDIAG_1(gr)    .word 0x14201840 + gr*0x10000
191da177e4SLinus Torvalds#define MTDIAG_2(gr)    .word 0x14401840 + gr*0x10000
201da177e4SLinus Torvalds#define MFDIAG_1(gr)    .word 0x142008A0 + gr
211da177e4SLinus Torvalds#define MFDIAG_2(gr)    .word 0x144008A0 + gr
221da177e4SLinus Torvalds#define STDIAG(dr)      .word 0x14000AA0 + dr*0x200000
231da177e4SLinus Torvalds#define SFDIAG(dr)      .word 0x14000BA0 + dr*0x200000
241da177e4SLinus Torvalds#define DR2_SLOW_RET    53
251da177e4SLinus Torvalds
261da177e4SLinus Torvalds
271da177e4SLinus Torvalds;
281da177e4SLinus Torvalds; Enable the performance counters
291da177e4SLinus Torvalds;
301da177e4SLinus Torvalds; The coprocessor only needs to be enabled when
311da177e4SLinus Torvalds; starting/stopping the coprocessor with the pmenb/pmdis.
321da177e4SLinus Torvalds;
33dfcf753bSKyle McMartin	.text
341da177e4SLinus Torvalds
358e9e9844SHelge DellerENTRY(perf_intrigue_enable_perf_counters)
361da177e4SLinus Torvalds	.proc
371da177e4SLinus Torvalds	.callinfo  frame=0,NO_CALLS
381da177e4SLinus Torvalds	.entry
391da177e4SLinus Torvalds
401da177e4SLinus Torvalds	ldi     0x20,%r25                ; load up perfmon bit
411da177e4SLinus Torvalds	mfctl   ccr,%r26                 ; get coprocessor register
421da177e4SLinus Torvalds	or      %r25,%r26,%r26             ; set bit
431da177e4SLinus Torvalds	mtctl   %r26,ccr                 ; turn on performance coprocessor
441da177e4SLinus Torvalds	pmenb                           ; enable performance monitor
451da177e4SLinus Torvalds	ssm     0,0                     ; dummy op to ensure completion
461da177e4SLinus Torvalds	sync                            ; follow ERS
471da177e4SLinus Torvalds	andcm   %r26,%r25,%r26             ; clear bit now
481da177e4SLinus Torvalds	mtctl   %r26,ccr                 ; turn off performance coprocessor
491da177e4SLinus Torvalds	nop                             ; NOPs as specified in ERS
501da177e4SLinus Torvalds	nop
511da177e4SLinus Torvalds	nop
521da177e4SLinus Torvalds	nop
531da177e4SLinus Torvalds	nop
541da177e4SLinus Torvalds	nop
551da177e4SLinus Torvalds	nop
561da177e4SLinus Torvalds	bve    (%r2)
571da177e4SLinus Torvalds	nop
581da177e4SLinus Torvalds	.exit
591da177e4SLinus Torvalds	.procend
608e9e9844SHelge DellerENDPROC(perf_intrigue_enable_perf_counters)
611da177e4SLinus Torvalds
628e9e9844SHelge DellerENTRY(perf_intrigue_disable_perf_counters)
631da177e4SLinus Torvalds	.proc
641da177e4SLinus Torvalds	.callinfo  frame=0,NO_CALLS
651da177e4SLinus Torvalds	.entry
661da177e4SLinus Torvalds	ldi     0x20,%r25                ; load up perfmon bit
671da177e4SLinus Torvalds	mfctl   ccr,%r26                 ; get coprocessor register
681da177e4SLinus Torvalds	or      %r25,%r26,%r26             ; set bit
691da177e4SLinus Torvalds	mtctl   %r26,ccr                 ; turn on performance coprocessor
701da177e4SLinus Torvalds	pmdis                           ; disable performance monitor
711da177e4SLinus Torvalds	ssm     0,0                     ; dummy op to ensure completion
721da177e4SLinus Torvalds	andcm   %r26,%r25,%r26             ; clear bit now
731da177e4SLinus Torvalds	bve    (%r2)
741da177e4SLinus Torvalds	mtctl   %r26,ccr                 ; turn off performance coprocessor
751da177e4SLinus Torvalds	.exit
761da177e4SLinus Torvalds	.procend
778e9e9844SHelge DellerENDPROC(perf_intrigue_disable_perf_counters)
781da177e4SLinus Torvalds
791da177e4SLinus Torvalds;***********************************************************************
801da177e4SLinus Torvalds;*
811da177e4SLinus Torvalds;* Name: perf_rdr_shift_in_W
821da177e4SLinus Torvalds;*
831da177e4SLinus Torvalds;* Description:
841da177e4SLinus Torvalds;*	This routine shifts data in from the RDR in arg0 and returns
851da177e4SLinus Torvalds;*	the result in ret0.  If the RDR is <= 64 bits in length, it
861da177e4SLinus Torvalds;*	is shifted shifted backup immediately.  This is to compensate
871da177e4SLinus Torvalds;*	for RDR10 which has bits that preclude PDC stack operations
881da177e4SLinus Torvalds;*	when they are in the wrong state.
891da177e4SLinus Torvalds;*
901da177e4SLinus Torvalds;* Arguments:
911da177e4SLinus Torvalds;*	arg0 : rdr to be read
921da177e4SLinus Torvalds;*	arg1 : bit length of rdr
931da177e4SLinus Torvalds;*
941da177e4SLinus Torvalds;* Returns:
951da177e4SLinus Torvalds;*	ret0 = next 64 bits of rdr data from staging register
961da177e4SLinus Torvalds;*
971da177e4SLinus Torvalds;* Register usage:
981da177e4SLinus Torvalds;*	arg0 : rdr to be read
991da177e4SLinus Torvalds;*	arg1 : bit length of rdr
1001da177e4SLinus Torvalds;*	%r24  - original DR2 value
1011da177e4SLinus Torvalds;*	%r1   - scratch
1021da177e4SLinus Torvalds;*  %r29  - scratch
1031da177e4SLinus Torvalds;*
1041da177e4SLinus Torvalds;* Returns:
1051da177e4SLinus Torvalds;*	ret0 = RDR data (right justified)
1061da177e4SLinus Torvalds;*
1071da177e4SLinus Torvalds;***********************************************************************
1081da177e4SLinus Torvalds
1098e9e9844SHelge DellerENTRY(perf_rdr_shift_in_W)
1101da177e4SLinus Torvalds	.proc
1111da177e4SLinus Torvalds	.callinfo frame=0,NO_CALLS
1121da177e4SLinus Torvalds	.entry
1131da177e4SLinus Torvalds;
1141da177e4SLinus Torvalds; read(shift in) the RDR.
1151da177e4SLinus Torvalds;
1161da177e4SLinus Torvalds
1171da177e4SLinus Torvalds; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
1181da177e4SLinus Torvalds; shifting is done, from or to, remote diagnose registers.
1191da177e4SLinus Torvalds;
1201da177e4SLinus Torvalds
1211da177e4SLinus Torvalds	depdi,z		1,DR2_SLOW_RET,1,%r29
1221da177e4SLinus Torvalds	MFDIAG_2	(24)
1231da177e4SLinus Torvalds	or		    %r24,%r29,%r29
1241da177e4SLinus Torvalds	MTDIAG_2	(29)			; set DR2_SLOW_RET
1251da177e4SLinus Torvalds
1261da177e4SLinus Torvalds	nop
1271da177e4SLinus Torvalds	nop
1281da177e4SLinus Torvalds	nop
1291da177e4SLinus Torvalds	nop
1301da177e4SLinus Torvalds
1311da177e4SLinus Torvalds;
1321da177e4SLinus Torvalds; Cacheline start (32-byte cacheline)
1331da177e4SLinus Torvalds;
1341da177e4SLinus Torvalds	nop
1351da177e4SLinus Torvalds	nop
1361da177e4SLinus Torvalds	nop
1371da177e4SLinus Torvalds	extrd,u		arg1,63,6,%r1	; setup shift amount by bits to move
1381da177e4SLinus Torvalds
1391da177e4SLinus Torvalds	mtsar		%r1
1401da177e4SLinus Torvalds	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number
1411da177e4SLinus Torvalds	blr  		%r1,%r0		; branch to 8-instruction sequence
1421da177e4SLinus Torvalds	nop
1431da177e4SLinus Torvalds
1441da177e4SLinus Torvalds;
1451da177e4SLinus Torvalds; Cacheline start (32-byte cacheline)
1461da177e4SLinus Torvalds;
1471da177e4SLinus Torvalds
1481da177e4SLinus Torvalds	;
1491da177e4SLinus Torvalds	; RDR 0 sequence
1501da177e4SLinus Torvalds	;
1511da177e4SLinus Torvalds	SFDIAG		(0)
1521da177e4SLinus Torvalds	ssm		    0,0
1531da177e4SLinus Torvalds	MFDIAG_1	(28)
1541da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
1551da177e4SLinus Torvalds	MTDIAG_1	(1)			; mtdiag %dr1, %r1
1561da177e4SLinus Torvalds	STDIAG		(0)
1571da177e4SLinus Torvalds	ssm		    0,0
1581da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
1591da177e4SLinus Torvalds
1601da177e4SLinus Torvalds	;
1611da177e4SLinus Torvalds	; RDR 1 sequence
1621da177e4SLinus Torvalds	;
1631da177e4SLinus Torvalds	sync
1641da177e4SLinus Torvalds	ssm		    0,0
1651da177e4SLinus Torvalds	SFDIAG		(1)
1661da177e4SLinus Torvalds	ssm		    0,0
1671da177e4SLinus Torvalds	MFDIAG_1	(28)
1681da177e4SLinus Torvalds	ssm		    0,0
1691da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
1701da177e4SLinus Torvalds	nop
1711da177e4SLinus Torvalds
1721da177e4SLinus Torvalds	;
1731da177e4SLinus Torvalds	; RDR 2 read sequence
1741da177e4SLinus Torvalds	;
1751da177e4SLinus Torvalds	SFDIAG		(2)
1761da177e4SLinus Torvalds	ssm		    0,0
1771da177e4SLinus Torvalds	MFDIAG_1	(28)
1781da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
1791da177e4SLinus Torvalds	MTDIAG_1	(1)
1801da177e4SLinus Torvalds	STDIAG		(2)
1811da177e4SLinus Torvalds	ssm		    0,0
1821da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
1831da177e4SLinus Torvalds
1841da177e4SLinus Torvalds	;
1851da177e4SLinus Torvalds	; RDR 3 read sequence
1861da177e4SLinus Torvalds	;
1871da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
1881da177e4SLinus Torvalds	nop
1891da177e4SLinus Torvalds	nop
1901da177e4SLinus Torvalds	nop
1911da177e4SLinus Torvalds	nop
1921da177e4SLinus Torvalds	nop
1931da177e4SLinus Torvalds	nop
1941da177e4SLinus Torvalds	nop
1951da177e4SLinus Torvalds
1961da177e4SLinus Torvalds	;
1971da177e4SLinus Torvalds	; RDR 4 read sequence
1981da177e4SLinus Torvalds	;
1991da177e4SLinus Torvalds	sync
2001da177e4SLinus Torvalds	ssm		0,0
2011da177e4SLinus Torvalds	SFDIAG		(4)
2021da177e4SLinus Torvalds	ssm		0,0
2031da177e4SLinus Torvalds	MFDIAG_1	(28)
2041da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2051da177e4SLinus Torvalds	ssm		0,0
2061da177e4SLinus Torvalds	nop
2071da177e4SLinus Torvalds
2081da177e4SLinus Torvalds	;
2091da177e4SLinus Torvalds	; RDR 5 read sequence
2101da177e4SLinus Torvalds	;
2111da177e4SLinus Torvalds	sync
2121da177e4SLinus Torvalds	ssm		0,0
2131da177e4SLinus Torvalds	SFDIAG		(5)
2141da177e4SLinus Torvalds	ssm		0,0
2151da177e4SLinus Torvalds	MFDIAG_1	(28)
2161da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2171da177e4SLinus Torvalds	ssm		0,0
2181da177e4SLinus Torvalds	nop
2191da177e4SLinus Torvalds
2201da177e4SLinus Torvalds	;
2211da177e4SLinus Torvalds	; RDR 6 read sequence
2221da177e4SLinus Torvalds	;
2231da177e4SLinus Torvalds	sync
2241da177e4SLinus Torvalds	ssm		0,0
2251da177e4SLinus Torvalds	SFDIAG		(6)
2261da177e4SLinus Torvalds	ssm		0,0
2271da177e4SLinus Torvalds	MFDIAG_1	(28)
2281da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2291da177e4SLinus Torvalds	ssm		0,0
2301da177e4SLinus Torvalds	nop
2311da177e4SLinus Torvalds
2321da177e4SLinus Torvalds	;
2331da177e4SLinus Torvalds	; RDR 7 read sequence
2341da177e4SLinus Torvalds	;
2351da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2361da177e4SLinus Torvalds	nop
2371da177e4SLinus Torvalds	nop
2381da177e4SLinus Torvalds	nop
2391da177e4SLinus Torvalds	nop
2401da177e4SLinus Torvalds	nop
2411da177e4SLinus Torvalds	nop
2421da177e4SLinus Torvalds	nop
2431da177e4SLinus Torvalds
2441da177e4SLinus Torvalds	;
2451da177e4SLinus Torvalds	; RDR 8 read sequence
2461da177e4SLinus Torvalds	;
2471da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2481da177e4SLinus Torvalds	nop
2491da177e4SLinus Torvalds	nop
2501da177e4SLinus Torvalds	nop
2511da177e4SLinus Torvalds	nop
2521da177e4SLinus Torvalds	nop
2531da177e4SLinus Torvalds	nop
2541da177e4SLinus Torvalds	nop
2551da177e4SLinus Torvalds
2561da177e4SLinus Torvalds	;
2571da177e4SLinus Torvalds	; RDR 9 read sequence
2581da177e4SLinus Torvalds	;
2591da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2601da177e4SLinus Torvalds	nop
2611da177e4SLinus Torvalds	nop
2621da177e4SLinus Torvalds	nop
2631da177e4SLinus Torvalds	nop
2641da177e4SLinus Torvalds	nop
2651da177e4SLinus Torvalds	nop
2661da177e4SLinus Torvalds	nop
2671da177e4SLinus Torvalds
2681da177e4SLinus Torvalds	;
2691da177e4SLinus Torvalds	; RDR 10 read sequence
2701da177e4SLinus Torvalds	;
2711da177e4SLinus Torvalds	SFDIAG		(10)
2721da177e4SLinus Torvalds	ssm		0,0
2731da177e4SLinus Torvalds	MFDIAG_1	(28)
2741da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
2751da177e4SLinus Torvalds	MTDIAG_1	(1)
2761da177e4SLinus Torvalds	STDIAG		(10)
2771da177e4SLinus Torvalds	ssm		0,0
2781da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2791da177e4SLinus Torvalds
2801da177e4SLinus Torvalds	;
2811da177e4SLinus Torvalds	; RDR 11 read sequence
2821da177e4SLinus Torvalds	;
2831da177e4SLinus Torvalds	SFDIAG		(11)
2841da177e4SLinus Torvalds	ssm		0,0
2851da177e4SLinus Torvalds	MFDIAG_1	(28)
2861da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
2871da177e4SLinus Torvalds	MTDIAG_1	(1)
2881da177e4SLinus Torvalds	STDIAG		(11)
2891da177e4SLinus Torvalds	ssm		0,0
2901da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2911da177e4SLinus Torvalds
2921da177e4SLinus Torvalds	;
2931da177e4SLinus Torvalds	; RDR 12 read sequence
2941da177e4SLinus Torvalds	;
2951da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
2961da177e4SLinus Torvalds	nop
2971da177e4SLinus Torvalds	nop
2981da177e4SLinus Torvalds	nop
2991da177e4SLinus Torvalds	nop
3001da177e4SLinus Torvalds	nop
3011da177e4SLinus Torvalds	nop
3021da177e4SLinus Torvalds	nop
3031da177e4SLinus Torvalds
3041da177e4SLinus Torvalds	;
3051da177e4SLinus Torvalds	; RDR 13 read sequence
3061da177e4SLinus Torvalds	;
3071da177e4SLinus Torvalds	sync
3081da177e4SLinus Torvalds	ssm		0,0
3091da177e4SLinus Torvalds	SFDIAG		(13)
3101da177e4SLinus Torvalds	ssm		0,0
3111da177e4SLinus Torvalds	MFDIAG_1	(28)
3121da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3131da177e4SLinus Torvalds	ssm		0,0
3141da177e4SLinus Torvalds	nop
3151da177e4SLinus Torvalds
3161da177e4SLinus Torvalds	;
3171da177e4SLinus Torvalds	; RDR 14 read sequence
3181da177e4SLinus Torvalds	;
3191da177e4SLinus Torvalds	SFDIAG		(14)
3201da177e4SLinus Torvalds	ssm		0,0
3211da177e4SLinus Torvalds	MFDIAG_1	(28)
3221da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
3231da177e4SLinus Torvalds	MTDIAG_1	(1)
3241da177e4SLinus Torvalds	STDIAG		(14)
3251da177e4SLinus Torvalds	ssm		0,0
3261da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3271da177e4SLinus Torvalds
3281da177e4SLinus Torvalds	;
3291da177e4SLinus Torvalds	; RDR 15 read sequence
3301da177e4SLinus Torvalds	;
3311da177e4SLinus Torvalds	sync
3321da177e4SLinus Torvalds	ssm		0,0
3331da177e4SLinus Torvalds	SFDIAG		(15)
3341da177e4SLinus Torvalds	ssm		0,0
3351da177e4SLinus Torvalds	MFDIAG_1	(28)
3361da177e4SLinus Torvalds	ssm		0,0
3371da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3381da177e4SLinus Torvalds	nop
3391da177e4SLinus Torvalds
3401da177e4SLinus Torvalds	;
3411da177e4SLinus Torvalds	; RDR 16 read sequence
3421da177e4SLinus Torvalds	;
3431da177e4SLinus Torvalds	sync
3441da177e4SLinus Torvalds	ssm		0,0
3451da177e4SLinus Torvalds	SFDIAG		(16)
3461da177e4SLinus Torvalds	ssm		0,0
3471da177e4SLinus Torvalds	MFDIAG_1	(28)
3481da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3491da177e4SLinus Torvalds	ssm		0,0
3501da177e4SLinus Torvalds	nop
3511da177e4SLinus Torvalds
3521da177e4SLinus Torvalds	;
3531da177e4SLinus Torvalds	; RDR 17 read sequence
3541da177e4SLinus Torvalds	;
3551da177e4SLinus Torvalds	SFDIAG		(17)
3561da177e4SLinus Torvalds	ssm		0,0
3571da177e4SLinus Torvalds	MFDIAG_1	(28)
3581da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
3591da177e4SLinus Torvalds	MTDIAG_1	(1)
3601da177e4SLinus Torvalds	STDIAG		(17)
3611da177e4SLinus Torvalds	ssm		0,0
3621da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3631da177e4SLinus Torvalds
3641da177e4SLinus Torvalds	;
3651da177e4SLinus Torvalds	; RDR 18 read sequence
3661da177e4SLinus Torvalds	;
3671da177e4SLinus Torvalds	SFDIAG		(18)
3681da177e4SLinus Torvalds	ssm		0,0
3691da177e4SLinus Torvalds	MFDIAG_1	(28)
3701da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
3711da177e4SLinus Torvalds	MTDIAG_1	(1)
3721da177e4SLinus Torvalds	STDIAG		(18)
3731da177e4SLinus Torvalds	ssm		0,0
3741da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3751da177e4SLinus Torvalds
3761da177e4SLinus Torvalds	;
3771da177e4SLinus Torvalds	; RDR 19 read sequence
3781da177e4SLinus Torvalds	;
3791da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3801da177e4SLinus Torvalds	nop
3811da177e4SLinus Torvalds	nop
3821da177e4SLinus Torvalds	nop
3831da177e4SLinus Torvalds	nop
3841da177e4SLinus Torvalds	nop
3851da177e4SLinus Torvalds	nop
3861da177e4SLinus Torvalds	nop
3871da177e4SLinus Torvalds
3881da177e4SLinus Torvalds	;
3891da177e4SLinus Torvalds	; RDR 20 read sequence
3901da177e4SLinus Torvalds	;
3911da177e4SLinus Torvalds	sync
3921da177e4SLinus Torvalds	ssm		0,0
3931da177e4SLinus Torvalds	SFDIAG		(20)
3941da177e4SLinus Torvalds	ssm		0,0
3951da177e4SLinus Torvalds	MFDIAG_1	(28)
3961da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
3971da177e4SLinus Torvalds	ssm		0,0
3981da177e4SLinus Torvalds	nop
3991da177e4SLinus Torvalds
4001da177e4SLinus Torvalds	;
4011da177e4SLinus Torvalds	; RDR 21 read sequence
4021da177e4SLinus Torvalds	;
4031da177e4SLinus Torvalds	sync
4041da177e4SLinus Torvalds	ssm		0,0
4051da177e4SLinus Torvalds	SFDIAG		(21)
4061da177e4SLinus Torvalds	ssm		0,0
4071da177e4SLinus Torvalds	MFDIAG_1	(28)
4081da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4091da177e4SLinus Torvalds	ssm		0,0
4101da177e4SLinus Torvalds	nop
4111da177e4SLinus Torvalds
4121da177e4SLinus Torvalds	;
4131da177e4SLinus Torvalds	; RDR 22 read sequence
4141da177e4SLinus Torvalds	;
4151da177e4SLinus Torvalds	sync
4161da177e4SLinus Torvalds	ssm		0,0
4171da177e4SLinus Torvalds	SFDIAG		(22)
4181da177e4SLinus Torvalds	ssm		0,0
4191da177e4SLinus Torvalds	MFDIAG_1	(28)
4201da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4211da177e4SLinus Torvalds	ssm		0,0
4221da177e4SLinus Torvalds	nop
4231da177e4SLinus Torvalds
4241da177e4SLinus Torvalds	;
4251da177e4SLinus Torvalds	; RDR 23 read sequence
4261da177e4SLinus Torvalds	;
4271da177e4SLinus Torvalds	sync
4281da177e4SLinus Torvalds	ssm		0,0
4291da177e4SLinus Torvalds	SFDIAG		(23)
4301da177e4SLinus Torvalds	ssm		0,0
4311da177e4SLinus Torvalds	MFDIAG_1	(28)
4321da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4331da177e4SLinus Torvalds	ssm		0,0
4341da177e4SLinus Torvalds	nop
4351da177e4SLinus Torvalds
4361da177e4SLinus Torvalds	;
4371da177e4SLinus Torvalds	; RDR 24 read sequence
4381da177e4SLinus Torvalds	;
4391da177e4SLinus Torvalds	sync
4401da177e4SLinus Torvalds	ssm		0,0
4411da177e4SLinus Torvalds	SFDIAG		(24)
4421da177e4SLinus Torvalds	ssm		0,0
4431da177e4SLinus Torvalds	MFDIAG_1	(28)
4441da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4451da177e4SLinus Torvalds	ssm		0,0
4461da177e4SLinus Torvalds	nop
4471da177e4SLinus Torvalds
4481da177e4SLinus Torvalds	;
4491da177e4SLinus Torvalds	; RDR 25 read sequence
4501da177e4SLinus Torvalds	;
4511da177e4SLinus Torvalds	sync
4521da177e4SLinus Torvalds	ssm		0,0
4531da177e4SLinus Torvalds	SFDIAG		(25)
4541da177e4SLinus Torvalds	ssm		0,0
4551da177e4SLinus Torvalds	MFDIAG_1	(28)
4561da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4571da177e4SLinus Torvalds	ssm		0,0
4581da177e4SLinus Torvalds	nop
4591da177e4SLinus Torvalds
4601da177e4SLinus Torvalds	;
4611da177e4SLinus Torvalds	; RDR 26 read sequence
4621da177e4SLinus Torvalds	;
4631da177e4SLinus Torvalds	SFDIAG		(26)
4641da177e4SLinus Torvalds	ssm		0,0
4651da177e4SLinus Torvalds	MFDIAG_1	(28)
4661da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
4671da177e4SLinus Torvalds	MTDIAG_1	(1)
4681da177e4SLinus Torvalds	STDIAG		(26)
4691da177e4SLinus Torvalds	ssm		0,0
4701da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4711da177e4SLinus Torvalds
4721da177e4SLinus Torvalds	;
4731da177e4SLinus Torvalds	; RDR 27 read sequence
4741da177e4SLinus Torvalds	;
4751da177e4SLinus Torvalds	SFDIAG		(27)
4761da177e4SLinus Torvalds	ssm		0,0
4771da177e4SLinus Torvalds	MFDIAG_1	(28)
4781da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
4791da177e4SLinus Torvalds	MTDIAG_1	(1)
4801da177e4SLinus Torvalds	STDIAG		(27)
4811da177e4SLinus Torvalds	ssm		0,0
4821da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4831da177e4SLinus Torvalds
4841da177e4SLinus Torvalds	;
4851da177e4SLinus Torvalds	; RDR 28 read sequence
4861da177e4SLinus Torvalds	;
4871da177e4SLinus Torvalds	sync
4881da177e4SLinus Torvalds	ssm		0,0
4891da177e4SLinus Torvalds	SFDIAG		(28)
4901da177e4SLinus Torvalds	ssm		0,0
4911da177e4SLinus Torvalds	MFDIAG_1	(28)
4921da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
4931da177e4SLinus Torvalds	ssm		0,0
4941da177e4SLinus Torvalds	nop
4951da177e4SLinus Torvalds
4961da177e4SLinus Torvalds	;
4971da177e4SLinus Torvalds	; RDR 29 read sequence
4981da177e4SLinus Torvalds	;
4991da177e4SLinus Torvalds	sync
5001da177e4SLinus Torvalds	ssm		0,0
5011da177e4SLinus Torvalds	SFDIAG		(29)
5021da177e4SLinus Torvalds	ssm		0,0
5031da177e4SLinus Torvalds	MFDIAG_1	(28)
5041da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
5051da177e4SLinus Torvalds	ssm		0,0
5061da177e4SLinus Torvalds	nop
5071da177e4SLinus Torvalds
5081da177e4SLinus Torvalds	;
5091da177e4SLinus Torvalds	; RDR 30 read sequence
5101da177e4SLinus Torvalds	;
5111da177e4SLinus Torvalds	SFDIAG		(30)
5121da177e4SLinus Torvalds	ssm		0,0
5131da177e4SLinus Torvalds	MFDIAG_1	(28)
5141da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
5151da177e4SLinus Torvalds	MTDIAG_1	(1)
5161da177e4SLinus Torvalds	STDIAG		(30)
5171da177e4SLinus Torvalds	ssm		0,0
5181da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_W_leave
5191da177e4SLinus Torvalds
5201da177e4SLinus Torvalds	;
5211da177e4SLinus Torvalds	; RDR 31 read sequence
5221da177e4SLinus Torvalds	;
5231da177e4SLinus Torvalds	sync
5241da177e4SLinus Torvalds	ssm		0,0
5251da177e4SLinus Torvalds	SFDIAG		(31)
5261da177e4SLinus Torvalds	ssm		0,0
5271da177e4SLinus Torvalds	MFDIAG_1	(28)
5281da177e4SLinus Torvalds	nop
5291da177e4SLinus Torvalds	ssm		0,0
5301da177e4SLinus Torvalds	nop
5311da177e4SLinus Torvalds
5321da177e4SLinus Torvalds	;
5331da177e4SLinus Torvalds	; Fallthrough
5341da177e4SLinus Torvalds	;
5351da177e4SLinus Torvalds
5361da177e4SLinus Torvaldsperf_rdr_shift_in_W_leave:
5371da177e4SLinus Torvalds	bve		    (%r2)
5381da177e4SLinus Torvalds	.exit
5391da177e4SLinus Torvalds	MTDIAG_2	(24)			; restore DR2
5401da177e4SLinus Torvalds	.procend
5418e9e9844SHelge DellerENDPROC(perf_rdr_shift_in_W)
5421da177e4SLinus Torvalds
5431da177e4SLinus Torvalds
5441da177e4SLinus Torvalds;***********************************************************************
5451da177e4SLinus Torvalds;*
5461da177e4SLinus Torvalds;* Name: perf_rdr_shift_out_W
5471da177e4SLinus Torvalds;*
5481da177e4SLinus Torvalds;* Description:
5491da177e4SLinus Torvalds;*	This routine moves data to the RDR's.  The double-word that
5501da177e4SLinus Torvalds;*	arg1 points to is loaded and moved into the staging register.
5511da177e4SLinus Torvalds;*	Then the STDIAG instruction for the RDR # in arg0 is called
5521da177e4SLinus Torvalds;*	to move the data to the RDR.
5531da177e4SLinus Torvalds;*
5541da177e4SLinus Torvalds;* Arguments:
5551da177e4SLinus Torvalds;*	arg0 = rdr number
5561da177e4SLinus Torvalds;*	arg1 = 64-bit value to write
5571da177e4SLinus Torvalds;*	%r24 - DR2 | DR2_SLOW_RET
5581da177e4SLinus Torvalds;*	%r23 - original DR2 value
5591da177e4SLinus Torvalds;*
5601da177e4SLinus Torvalds;* Returns:
5611da177e4SLinus Torvalds;*	None
5621da177e4SLinus Torvalds;*
5631da177e4SLinus Torvalds;* Register usage:
5641da177e4SLinus Torvalds;*
5651da177e4SLinus Torvalds;***********************************************************************
5661da177e4SLinus Torvalds
5678e9e9844SHelge DellerENTRY(perf_rdr_shift_out_W)
5681da177e4SLinus Torvalds	.proc
5691da177e4SLinus Torvalds	.callinfo frame=0,NO_CALLS
5701da177e4SLinus Torvalds	.entry
5711da177e4SLinus Torvalds;
5721da177e4SLinus Torvalds; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
5731da177e4SLinus Torvalds; shifting is done, from or to, the remote diagnose registers.
5741da177e4SLinus Torvalds;
5751da177e4SLinus Torvalds
5761da177e4SLinus Torvalds	depdi,z		1,DR2_SLOW_RET,1,%r24
5771da177e4SLinus Torvalds	MFDIAG_2	(23)
5781da177e4SLinus Torvalds	or		%r24,%r23,%r24
5791da177e4SLinus Torvalds	MTDIAG_2	(24)		; set DR2_SLOW_RET
5801da177e4SLinus Torvalds	MTDIAG_1	(25)		; data to the staging register
5811da177e4SLinus Torvalds	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number
5821da177e4SLinus Torvalds	blr		    %r1,%r0	; branch to 8-instruction sequence
5831da177e4SLinus Torvalds	nop
5841da177e4SLinus Torvalds
5851da177e4SLinus Torvalds	;
5861da177e4SLinus Torvalds	; RDR 0 write sequence
5871da177e4SLinus Torvalds	;
5881da177e4SLinus Torvalds	sync				; RDR 0 write sequence
5891da177e4SLinus Torvalds	ssm		0,0
5901da177e4SLinus Torvalds	STDIAG		(0)
5911da177e4SLinus Torvalds	ssm		0,0
5921da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
5931da177e4SLinus Torvalds	nop
5941da177e4SLinus Torvalds	ssm		0,0
5951da177e4SLinus Torvalds	nop
5961da177e4SLinus Torvalds
5971da177e4SLinus Torvalds	;
5981da177e4SLinus Torvalds	; RDR 1 write sequence
5991da177e4SLinus Torvalds	;
6001da177e4SLinus Torvalds	sync
6011da177e4SLinus Torvalds	ssm		0,0
6021da177e4SLinus Torvalds	STDIAG		(1)
6031da177e4SLinus Torvalds	ssm		0,0
6041da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6051da177e4SLinus Torvalds	nop
6061da177e4SLinus Torvalds	ssm		0,0
6071da177e4SLinus Torvalds	nop
6081da177e4SLinus Torvalds
6091da177e4SLinus Torvalds	;
6101da177e4SLinus Torvalds	; RDR 2 write sequence
6111da177e4SLinus Torvalds	;
6121da177e4SLinus Torvalds	sync
6131da177e4SLinus Torvalds	ssm		0,0
6141da177e4SLinus Torvalds	STDIAG		(2)
6151da177e4SLinus Torvalds	ssm		0,0
6161da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6171da177e4SLinus Torvalds	nop
6181da177e4SLinus Torvalds	ssm		0,0
6191da177e4SLinus Torvalds	nop
6201da177e4SLinus Torvalds
6211da177e4SLinus Torvalds	;
6221da177e4SLinus Torvalds	; RDR 3 write sequence
6231da177e4SLinus Torvalds	;
6241da177e4SLinus Torvalds	sync
6251da177e4SLinus Torvalds	ssm		0,0
6261da177e4SLinus Torvalds	STDIAG		(3)
6271da177e4SLinus Torvalds	ssm		0,0
6281da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6291da177e4SLinus Torvalds	nop
6301da177e4SLinus Torvalds	ssm		0,0
6311da177e4SLinus Torvalds	nop
6321da177e4SLinus Torvalds
6331da177e4SLinus Torvalds	;
6341da177e4SLinus Torvalds	; RDR 4 write sequence
6351da177e4SLinus Torvalds	;
6361da177e4SLinus Torvalds	sync
6371da177e4SLinus Torvalds	ssm		0,0
6381da177e4SLinus Torvalds	STDIAG		(4)
6391da177e4SLinus Torvalds	ssm		0,0
6401da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6411da177e4SLinus Torvalds	nop
6421da177e4SLinus Torvalds	ssm		0,0
6431da177e4SLinus Torvalds	nop
6441da177e4SLinus Torvalds
6451da177e4SLinus Torvalds	;
6461da177e4SLinus Torvalds	; RDR 5 write sequence
6471da177e4SLinus Torvalds	;
6481da177e4SLinus Torvalds	sync
6491da177e4SLinus Torvalds	ssm		0,0
6501da177e4SLinus Torvalds	STDIAG		(5)
6511da177e4SLinus Torvalds	ssm		0,0
6521da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6531da177e4SLinus Torvalds	nop
6541da177e4SLinus Torvalds	ssm		0,0
6551da177e4SLinus Torvalds	nop
6561da177e4SLinus Torvalds
6571da177e4SLinus Torvalds	;
6581da177e4SLinus Torvalds	; RDR 6 write sequence
6591da177e4SLinus Torvalds	;
6601da177e4SLinus Torvalds	sync
6611da177e4SLinus Torvalds	ssm		0,0
6621da177e4SLinus Torvalds	STDIAG		(6)
6631da177e4SLinus Torvalds	ssm		0,0
6641da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6651da177e4SLinus Torvalds	nop
6661da177e4SLinus Torvalds	ssm		0,0
6671da177e4SLinus Torvalds	nop
6681da177e4SLinus Torvalds
6691da177e4SLinus Torvalds	;
6701da177e4SLinus Torvalds	; RDR 7 write sequence
6711da177e4SLinus Torvalds	;
6721da177e4SLinus Torvalds	sync
6731da177e4SLinus Torvalds	ssm		0,0
6741da177e4SLinus Torvalds	STDIAG		(7)
6751da177e4SLinus Torvalds	ssm		0,0
6761da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6771da177e4SLinus Torvalds	nop
6781da177e4SLinus Torvalds	ssm		0,0
6791da177e4SLinus Torvalds	nop
6801da177e4SLinus Torvalds
6811da177e4SLinus Torvalds	;
6821da177e4SLinus Torvalds	; RDR 8 write sequence
6831da177e4SLinus Torvalds	;
6841da177e4SLinus Torvalds	sync
6851da177e4SLinus Torvalds	ssm		0,0
6861da177e4SLinus Torvalds	STDIAG		(8)
6871da177e4SLinus Torvalds	ssm		0,0
6881da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
6891da177e4SLinus Torvalds	nop
6901da177e4SLinus Torvalds	ssm		0,0
6911da177e4SLinus Torvalds	nop
6921da177e4SLinus Torvalds
6931da177e4SLinus Torvalds	;
6941da177e4SLinus Torvalds	; RDR 9 write sequence
6951da177e4SLinus Torvalds	;
6961da177e4SLinus Torvalds	sync
6971da177e4SLinus Torvalds	ssm		0,0
6981da177e4SLinus Torvalds	STDIAG		(9)
6991da177e4SLinus Torvalds	ssm		0,0
7001da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7011da177e4SLinus Torvalds	nop
7021da177e4SLinus Torvalds	ssm		0,0
7031da177e4SLinus Torvalds	nop
7041da177e4SLinus Torvalds
7051da177e4SLinus Torvalds	;
7061da177e4SLinus Torvalds	; RDR 10 write sequence
7071da177e4SLinus Torvalds	;
7081da177e4SLinus Torvalds	sync
7091da177e4SLinus Torvalds	ssm		0,0
7101da177e4SLinus Torvalds	STDIAG		(10)
7111da177e4SLinus Torvalds	STDIAG		(26)
7121da177e4SLinus Torvalds	ssm		0,0
7131da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7141da177e4SLinus Torvalds	ssm		0,0
7151da177e4SLinus Torvalds	nop
7161da177e4SLinus Torvalds
7171da177e4SLinus Torvalds	;
7181da177e4SLinus Torvalds	; RDR 11 write sequence
7191da177e4SLinus Torvalds	;
7201da177e4SLinus Torvalds	sync
7211da177e4SLinus Torvalds	ssm		0,0
7221da177e4SLinus Torvalds	STDIAG		(11)
7231da177e4SLinus Torvalds	STDIAG		(27)
7241da177e4SLinus Torvalds	ssm		0,0
7251da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7261da177e4SLinus Torvalds	ssm		0,0
7271da177e4SLinus Torvalds	nop
7281da177e4SLinus Torvalds
7291da177e4SLinus Torvalds	;
7301da177e4SLinus Torvalds	; RDR 12 write sequence
7311da177e4SLinus Torvalds	;
7321da177e4SLinus Torvalds	sync
7331da177e4SLinus Torvalds	ssm		0,0
7341da177e4SLinus Torvalds	STDIAG		(12)
7351da177e4SLinus Torvalds	ssm		0,0
7361da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7371da177e4SLinus Torvalds	nop
7381da177e4SLinus Torvalds	ssm		0,0
7391da177e4SLinus Torvalds	nop
7401da177e4SLinus Torvalds
7411da177e4SLinus Torvalds	;
7421da177e4SLinus Torvalds	; RDR 13 write sequence
7431da177e4SLinus Torvalds	;
7441da177e4SLinus Torvalds	sync
7451da177e4SLinus Torvalds	ssm		0,0
7461da177e4SLinus Torvalds	STDIAG		(13)
7471da177e4SLinus Torvalds	ssm		0,0
7481da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7491da177e4SLinus Torvalds	nop
7501da177e4SLinus Torvalds	ssm		0,0
7511da177e4SLinus Torvalds	nop
7521da177e4SLinus Torvalds
7531da177e4SLinus Torvalds	;
7541da177e4SLinus Torvalds	; RDR 14 write sequence
7551da177e4SLinus Torvalds	;
7561da177e4SLinus Torvalds	sync
7571da177e4SLinus Torvalds	ssm		0,0
7581da177e4SLinus Torvalds	STDIAG		(14)
7591da177e4SLinus Torvalds	ssm		0,0
7601da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7611da177e4SLinus Torvalds	nop
7621da177e4SLinus Torvalds	ssm		0,0
7631da177e4SLinus Torvalds	nop
7641da177e4SLinus Torvalds
7651da177e4SLinus Torvalds	;
7661da177e4SLinus Torvalds	; RDR 15 write sequence
7671da177e4SLinus Torvalds	;
7681da177e4SLinus Torvalds	sync
7691da177e4SLinus Torvalds	ssm		0,0
7701da177e4SLinus Torvalds	STDIAG		(15)
7711da177e4SLinus Torvalds	ssm		0,0
7721da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7731da177e4SLinus Torvalds	nop
7741da177e4SLinus Torvalds	ssm		0,0
7751da177e4SLinus Torvalds	nop
7761da177e4SLinus Torvalds
7771da177e4SLinus Torvalds	;
7781da177e4SLinus Torvalds	; RDR 16 write sequence
7791da177e4SLinus Torvalds	;
7801da177e4SLinus Torvalds	sync
7811da177e4SLinus Torvalds	ssm		0,0
7821da177e4SLinus Torvalds	STDIAG		(16)
7831da177e4SLinus Torvalds	ssm		0,0
7841da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7851da177e4SLinus Torvalds	nop
7861da177e4SLinus Torvalds	ssm		0,0
7871da177e4SLinus Torvalds	nop
7881da177e4SLinus Torvalds
7891da177e4SLinus Torvalds	;
7901da177e4SLinus Torvalds	; RDR 17 write sequence
7911da177e4SLinus Torvalds	;
7921da177e4SLinus Torvalds	sync
7931da177e4SLinus Torvalds	ssm		0,0
7941da177e4SLinus Torvalds	STDIAG		(17)
7951da177e4SLinus Torvalds	ssm		0,0
7961da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
7971da177e4SLinus Torvalds	nop
7981da177e4SLinus Torvalds	ssm		0,0
7991da177e4SLinus Torvalds	nop
8001da177e4SLinus Torvalds
8011da177e4SLinus Torvalds	;
8021da177e4SLinus Torvalds	; RDR 18 write sequence
8031da177e4SLinus Torvalds	;
8041da177e4SLinus Torvalds	sync
8051da177e4SLinus Torvalds	ssm		0,0
8061da177e4SLinus Torvalds	STDIAG		(18)
8071da177e4SLinus Torvalds	ssm		0,0
8081da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8091da177e4SLinus Torvalds	nop
8101da177e4SLinus Torvalds	ssm		0,0
8111da177e4SLinus Torvalds	nop
8121da177e4SLinus Torvalds
8131da177e4SLinus Torvalds	;
8141da177e4SLinus Torvalds	; RDR 19 write sequence
8151da177e4SLinus Torvalds	;
8161da177e4SLinus Torvalds	sync
8171da177e4SLinus Torvalds	ssm		0,0
8181da177e4SLinus Torvalds	STDIAG		(19)
8191da177e4SLinus Torvalds	ssm		0,0
8201da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8211da177e4SLinus Torvalds	nop
8221da177e4SLinus Torvalds	ssm		0,0
8231da177e4SLinus Torvalds	nop
8241da177e4SLinus Torvalds
8251da177e4SLinus Torvalds	;
8261da177e4SLinus Torvalds	; RDR 20 write sequence
8271da177e4SLinus Torvalds	;
8281da177e4SLinus Torvalds	sync
8291da177e4SLinus Torvalds	ssm		0,0
8301da177e4SLinus Torvalds	STDIAG		(20)
8311da177e4SLinus Torvalds	ssm		0,0
8321da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8331da177e4SLinus Torvalds	nop
8341da177e4SLinus Torvalds	ssm		0,0
8351da177e4SLinus Torvalds	nop
8361da177e4SLinus Torvalds
8371da177e4SLinus Torvalds	;
8381da177e4SLinus Torvalds	; RDR 21 write sequence
8391da177e4SLinus Torvalds	;
8401da177e4SLinus Torvalds	sync
8411da177e4SLinus Torvalds	ssm		0,0
8421da177e4SLinus Torvalds	STDIAG		(21)
8431da177e4SLinus Torvalds	ssm		0,0
8441da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8451da177e4SLinus Torvalds	nop
8461da177e4SLinus Torvalds	ssm		0,0
8471da177e4SLinus Torvalds	nop
8481da177e4SLinus Torvalds
8491da177e4SLinus Torvalds	;
8501da177e4SLinus Torvalds	; RDR 22 write sequence
8511da177e4SLinus Torvalds	;
8521da177e4SLinus Torvalds	sync
8531da177e4SLinus Torvalds	ssm		0,0
8541da177e4SLinus Torvalds	STDIAG		(22)
8551da177e4SLinus Torvalds	ssm		0,0
8561da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8571da177e4SLinus Torvalds	nop
8581da177e4SLinus Torvalds	ssm		0,0
8591da177e4SLinus Torvalds	nop
8601da177e4SLinus Torvalds
8611da177e4SLinus Torvalds	;
8621da177e4SLinus Torvalds	; RDR 23 write sequence
8631da177e4SLinus Torvalds	;
8641da177e4SLinus Torvalds	sync
8651da177e4SLinus Torvalds	ssm		0,0
8661da177e4SLinus Torvalds	STDIAG		(23)
8671da177e4SLinus Torvalds	ssm		0,0
8681da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8691da177e4SLinus Torvalds	nop
8701da177e4SLinus Torvalds	ssm		0,0
8711da177e4SLinus Torvalds	nop
8721da177e4SLinus Torvalds
8731da177e4SLinus Torvalds	;
8741da177e4SLinus Torvalds	; RDR 24 write sequence
8751da177e4SLinus Torvalds	;
8761da177e4SLinus Torvalds	sync
8771da177e4SLinus Torvalds	ssm		0,0
8781da177e4SLinus Torvalds	STDIAG		(24)
8791da177e4SLinus Torvalds	ssm		0,0
8801da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8811da177e4SLinus Torvalds	nop
8821da177e4SLinus Torvalds	ssm		0,0
8831da177e4SLinus Torvalds	nop
8841da177e4SLinus Torvalds
8851da177e4SLinus Torvalds	;
8861da177e4SLinus Torvalds	; RDR 25 write sequence
8871da177e4SLinus Torvalds	;
8881da177e4SLinus Torvalds	sync
8891da177e4SLinus Torvalds	ssm		0,0
8901da177e4SLinus Torvalds	STDIAG		(25)
8911da177e4SLinus Torvalds	ssm		0,0
8921da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
8931da177e4SLinus Torvalds	nop
8941da177e4SLinus Torvalds	ssm		0,0
8951da177e4SLinus Torvalds	nop
8961da177e4SLinus Torvalds
8971da177e4SLinus Torvalds	;
8981da177e4SLinus Torvalds	; RDR 26 write sequence
8991da177e4SLinus Torvalds	;
9001da177e4SLinus Torvalds	sync
9011da177e4SLinus Torvalds	ssm		0,0
9021da177e4SLinus Torvalds	STDIAG		(10)
9031da177e4SLinus Torvalds	STDIAG		(26)
9041da177e4SLinus Torvalds	ssm		0,0
9051da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9061da177e4SLinus Torvalds	ssm		0,0
9071da177e4SLinus Torvalds	nop
9081da177e4SLinus Torvalds
9091da177e4SLinus Torvalds	;
9101da177e4SLinus Torvalds	; RDR 27 write sequence
9111da177e4SLinus Torvalds	;
9121da177e4SLinus Torvalds	sync
9131da177e4SLinus Torvalds	ssm		0,0
9141da177e4SLinus Torvalds	STDIAG		(11)
9151da177e4SLinus Torvalds	STDIAG		(27)
9161da177e4SLinus Torvalds	ssm		0,0
9171da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9181da177e4SLinus Torvalds	ssm		0,0
9191da177e4SLinus Torvalds	nop
9201da177e4SLinus Torvalds
9211da177e4SLinus Torvalds	;
9221da177e4SLinus Torvalds	; RDR 28 write sequence
9231da177e4SLinus Torvalds	;
9241da177e4SLinus Torvalds	sync
9251da177e4SLinus Torvalds	ssm		0,0
9261da177e4SLinus Torvalds	STDIAG		(28)
9271da177e4SLinus Torvalds	ssm		0,0
9281da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9291da177e4SLinus Torvalds	nop
9301da177e4SLinus Torvalds	ssm		0,0
9311da177e4SLinus Torvalds	nop
9321da177e4SLinus Torvalds
9331da177e4SLinus Torvalds	;
9341da177e4SLinus Torvalds	; RDR 29 write sequence
9351da177e4SLinus Torvalds	;
9361da177e4SLinus Torvalds	sync
9371da177e4SLinus Torvalds	ssm		0,0
9381da177e4SLinus Torvalds	STDIAG		(29)
9391da177e4SLinus Torvalds	ssm		0,0
9401da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9411da177e4SLinus Torvalds	nop
9421da177e4SLinus Torvalds	ssm		0,0
9431da177e4SLinus Torvalds	nop
9441da177e4SLinus Torvalds
9451da177e4SLinus Torvalds	;
9461da177e4SLinus Torvalds	; RDR 30 write sequence
9471da177e4SLinus Torvalds	;
9481da177e4SLinus Torvalds	sync
9491da177e4SLinus Torvalds	ssm		0,0
9501da177e4SLinus Torvalds	STDIAG		(30)
9511da177e4SLinus Torvalds	ssm		0,0
9521da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9531da177e4SLinus Torvalds	nop
9541da177e4SLinus Torvalds	ssm		0,0
9551da177e4SLinus Torvalds	nop
9561da177e4SLinus Torvalds
9571da177e4SLinus Torvalds	;
9581da177e4SLinus Torvalds	; RDR 31 write sequence
9591da177e4SLinus Torvalds	;
9601da177e4SLinus Torvalds	sync
9611da177e4SLinus Torvalds	ssm		0,0
9621da177e4SLinus Torvalds	STDIAG		(31)
9631da177e4SLinus Torvalds	ssm		0,0
9641da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_W_leave
9651da177e4SLinus Torvalds	nop
9661da177e4SLinus Torvalds	ssm		0,0
9671da177e4SLinus Torvalds	nop
9681da177e4SLinus Torvalds
9691da177e4SLinus Torvaldsperf_rdr_shift_out_W_leave:
9701da177e4SLinus Torvalds	bve		(%r2)
9711da177e4SLinus Torvalds	.exit
9721da177e4SLinus Torvalds	MTDIAG_2	(23)			; restore DR2
9731da177e4SLinus Torvalds	.procend
9748e9e9844SHelge DellerENDPROC(perf_rdr_shift_out_W)
9751da177e4SLinus Torvalds
9761da177e4SLinus Torvalds
9771da177e4SLinus Torvalds;***********************************************************************
9781da177e4SLinus Torvalds;*
9791da177e4SLinus Torvalds;* Name: rdr_shift_in_U
9801da177e4SLinus Torvalds;*
9811da177e4SLinus Torvalds;* Description:
9821da177e4SLinus Torvalds;*	This routine shifts data in from the RDR in arg0 and returns
9831da177e4SLinus Torvalds;*	the result in ret0.  If the RDR is <= 64 bits in length, it
9841da177e4SLinus Torvalds;*	is shifted shifted backup immediately.  This is to compensate
9851da177e4SLinus Torvalds;*	for RDR10 which has bits that preclude PDC stack operations
9861da177e4SLinus Torvalds;*	when they are in the wrong state.
9871da177e4SLinus Torvalds;*
9881da177e4SLinus Torvalds;* Arguments:
9891da177e4SLinus Torvalds;*	arg0 : rdr to be read
9901da177e4SLinus Torvalds;*	arg1 : bit length of rdr
9911da177e4SLinus Torvalds;*
9921da177e4SLinus Torvalds;* Returns:
9931da177e4SLinus Torvalds;*	ret0 = next 64 bits of rdr data from staging register
9941da177e4SLinus Torvalds;*
9951da177e4SLinus Torvalds;* Register usage:
9961da177e4SLinus Torvalds;*	arg0 : rdr to be read
9971da177e4SLinus Torvalds;*	arg1 : bit length of rdr
9981da177e4SLinus Torvalds;*	%r24 - original DR2 value
9991da177e4SLinus Torvalds;*	%r23 - DR2 | DR2_SLOW_RET
10001da177e4SLinus Torvalds;*	%r1  - scratch
10011da177e4SLinus Torvalds;*
10021da177e4SLinus Torvalds;***********************************************************************
10031da177e4SLinus Torvalds
10048e9e9844SHelge DellerENTRY(perf_rdr_shift_in_U)
10051da177e4SLinus Torvalds	.proc
10061da177e4SLinus Torvalds	.callinfo frame=0,NO_CALLS
10071da177e4SLinus Torvalds	.entry
10081da177e4SLinus Torvalds
10091da177e4SLinus Torvalds; read(shift in) the RDR.
10101da177e4SLinus Torvalds;
10111da177e4SLinus Torvalds; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
10121da177e4SLinus Torvalds; shifting is done, from or to, remote diagnose registers.
10131da177e4SLinus Torvalds
10141da177e4SLinus Torvalds	depdi,z		1,DR2_SLOW_RET,1,%r29
10151da177e4SLinus Torvalds	MFDIAG_2	(24)
10161da177e4SLinus Torvalds	or			%r24,%r29,%r29
10171da177e4SLinus Torvalds	MTDIAG_2	(29)			; set DR2_SLOW_RET
10181da177e4SLinus Torvalds
10191da177e4SLinus Torvalds	nop
10201da177e4SLinus Torvalds	nop
10211da177e4SLinus Torvalds	nop
10221da177e4SLinus Torvalds	nop
10231da177e4SLinus Torvalds
10241da177e4SLinus Torvalds;
10251da177e4SLinus Torvalds; Start of next 32-byte cacheline
10261da177e4SLinus Torvalds;
10271da177e4SLinus Torvalds	nop
10281da177e4SLinus Torvalds	nop
10291da177e4SLinus Torvalds	nop
10301da177e4SLinus Torvalds	extrd,u		arg1,63,6,%r1
10311da177e4SLinus Torvalds
10321da177e4SLinus Torvalds	mtsar		%r1
10331da177e4SLinus Torvalds	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number
10341da177e4SLinus Torvalds	blr 		%r1,%r0		; branch to 8-instruction sequence
10351da177e4SLinus Torvalds	nop
10361da177e4SLinus Torvalds
10371da177e4SLinus Torvalds;
10381da177e4SLinus Torvalds; Start of next 32-byte cacheline
10391da177e4SLinus Torvalds;
10401da177e4SLinus Torvalds	SFDIAG		(0)		; RDR 0 read sequence
10411da177e4SLinus Torvalds	ssm		0,0
10421da177e4SLinus Torvalds	MFDIAG_1	(28)
10431da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
10441da177e4SLinus Torvalds	MTDIAG_1	(1)
10451da177e4SLinus Torvalds	STDIAG		(0)
10461da177e4SLinus Torvalds	ssm		0,0
10471da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10481da177e4SLinus Torvalds
10491da177e4SLinus Torvalds	SFDIAG		(1)		; RDR 1 read sequence
10501da177e4SLinus Torvalds	ssm		0,0
10511da177e4SLinus Torvalds	MFDIAG_1	(28)
10521da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
10531da177e4SLinus Torvalds	MTDIAG_1	(1)
10541da177e4SLinus Torvalds	STDIAG		(1)
10551da177e4SLinus Torvalds	ssm		0,0
10561da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10571da177e4SLinus Torvalds
10581da177e4SLinus Torvalds	sync				; RDR 2 read sequence
10591da177e4SLinus Torvalds	ssm		0,0
10601da177e4SLinus Torvalds	SFDIAG		(4)
10611da177e4SLinus Torvalds	ssm		0,0
10621da177e4SLinus Torvalds	MFDIAG_1	(28)
10631da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10641da177e4SLinus Torvalds	ssm		0,0
10651da177e4SLinus Torvalds	nop
10661da177e4SLinus Torvalds
10671da177e4SLinus Torvalds	sync				; RDR 3 read sequence
10681da177e4SLinus Torvalds	ssm		0,0
10691da177e4SLinus Torvalds	SFDIAG		(3)
10701da177e4SLinus Torvalds	ssm		0,0
10711da177e4SLinus Torvalds	MFDIAG_1	(28)
10721da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10731da177e4SLinus Torvalds	ssm		0,0
10741da177e4SLinus Torvalds	nop
10751da177e4SLinus Torvalds
10761da177e4SLinus Torvalds	sync				; RDR 4 read sequence
10771da177e4SLinus Torvalds	ssm		0,0
10781da177e4SLinus Torvalds	SFDIAG		(4)
10791da177e4SLinus Torvalds	ssm		0,0
10801da177e4SLinus Torvalds	MFDIAG_1	(28)
10811da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10821da177e4SLinus Torvalds	ssm		0,0
10831da177e4SLinus Torvalds	nop
10841da177e4SLinus Torvalds
10851da177e4SLinus Torvalds	sync				; RDR 5 read sequence
10861da177e4SLinus Torvalds	ssm		0,0
10871da177e4SLinus Torvalds	SFDIAG		(5)
10881da177e4SLinus Torvalds	ssm		0,0
10891da177e4SLinus Torvalds	MFDIAG_1	(28)
10901da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
10911da177e4SLinus Torvalds	ssm		0,0
10921da177e4SLinus Torvalds	nop
10931da177e4SLinus Torvalds
10941da177e4SLinus Torvalds	sync				; RDR 6 read sequence
10951da177e4SLinus Torvalds	ssm		0,0
10961da177e4SLinus Torvalds	SFDIAG		(6)
10971da177e4SLinus Torvalds	ssm		0,0
10981da177e4SLinus Torvalds	MFDIAG_1	(28)
10991da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11001da177e4SLinus Torvalds	ssm		0,0
11011da177e4SLinus Torvalds	nop
11021da177e4SLinus Torvalds
11031da177e4SLinus Torvalds	sync				; RDR 7 read sequence
11041da177e4SLinus Torvalds	ssm		0,0
11051da177e4SLinus Torvalds	SFDIAG		(7)
11061da177e4SLinus Torvalds	ssm		0,0
11071da177e4SLinus Torvalds	MFDIAG_1	(28)
11081da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11091da177e4SLinus Torvalds	ssm		0,0
11101da177e4SLinus Torvalds	nop
11111da177e4SLinus Torvalds
11121da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11131da177e4SLinus Torvalds	nop
11141da177e4SLinus Torvalds	nop
11151da177e4SLinus Torvalds	nop
11161da177e4SLinus Torvalds	nop
11171da177e4SLinus Torvalds	nop
11181da177e4SLinus Torvalds	nop
11191da177e4SLinus Torvalds	nop
11201da177e4SLinus Torvalds
11211da177e4SLinus Torvalds	SFDIAG		(9)		; RDR 9 read sequence
11221da177e4SLinus Torvalds	ssm		0,0
11231da177e4SLinus Torvalds	MFDIAG_1	(28)
11241da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11251da177e4SLinus Torvalds	MTDIAG_1	(1)
11261da177e4SLinus Torvalds	STDIAG		(9)
11271da177e4SLinus Torvalds	ssm		0,0
11281da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11291da177e4SLinus Torvalds
11301da177e4SLinus Torvalds	SFDIAG		(10)		; RDR 10 read sequence
11311da177e4SLinus Torvalds	ssm		0,0
11321da177e4SLinus Torvalds	MFDIAG_1	(28)
11331da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11341da177e4SLinus Torvalds	MTDIAG_1	(1)
11351da177e4SLinus Torvalds	STDIAG		(10)
11361da177e4SLinus Torvalds	ssm		0,0
11371da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11381da177e4SLinus Torvalds
11391da177e4SLinus Torvalds	SFDIAG		(11)		; RDR 11 read sequence
11401da177e4SLinus Torvalds	ssm		0,0
11411da177e4SLinus Torvalds	MFDIAG_1	(28)
11421da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11431da177e4SLinus Torvalds	MTDIAG_1	(1)
11441da177e4SLinus Torvalds	STDIAG		(11)
11451da177e4SLinus Torvalds	ssm		0,0
11461da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11471da177e4SLinus Torvalds
11481da177e4SLinus Torvalds	SFDIAG		(12)		; RDR 12 read sequence
11491da177e4SLinus Torvalds	ssm		0,0
11501da177e4SLinus Torvalds	MFDIAG_1	(28)
11511da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11521da177e4SLinus Torvalds	MTDIAG_1	(1)
11531da177e4SLinus Torvalds	STDIAG		(12)
11541da177e4SLinus Torvalds	ssm		0,0
11551da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11561da177e4SLinus Torvalds
11571da177e4SLinus Torvalds	SFDIAG		(13)		; RDR 13 read sequence
11581da177e4SLinus Torvalds	ssm		0,0
11591da177e4SLinus Torvalds	MFDIAG_1	(28)
11601da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11611da177e4SLinus Torvalds	MTDIAG_1	(1)
11621da177e4SLinus Torvalds	STDIAG		(13)
11631da177e4SLinus Torvalds	ssm		0,0
11641da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11651da177e4SLinus Torvalds
11661da177e4SLinus Torvalds	SFDIAG		(14)		; RDR 14 read sequence
11671da177e4SLinus Torvalds	ssm		0,0
11681da177e4SLinus Torvalds	MFDIAG_1	(28)
11691da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11701da177e4SLinus Torvalds	MTDIAG_1	(1)
11711da177e4SLinus Torvalds	STDIAG		(14)
11721da177e4SLinus Torvalds	ssm		0,0
11731da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11741da177e4SLinus Torvalds
11751da177e4SLinus Torvalds	SFDIAG		(15)		; RDR 15 read sequence
11761da177e4SLinus Torvalds	ssm		0,0
11771da177e4SLinus Torvalds	MFDIAG_1	(28)
11781da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11791da177e4SLinus Torvalds	MTDIAG_1	(1)
11801da177e4SLinus Torvalds	STDIAG		(15)
11811da177e4SLinus Torvalds	ssm		0,0
11821da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11831da177e4SLinus Torvalds
11841da177e4SLinus Torvalds	sync				; RDR 16 read sequence
11851da177e4SLinus Torvalds	ssm		0,0
11861da177e4SLinus Torvalds	SFDIAG		(16)
11871da177e4SLinus Torvalds	ssm		0,0
11881da177e4SLinus Torvalds	MFDIAG_1	(28)
11891da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
11901da177e4SLinus Torvalds	ssm		0,0
11911da177e4SLinus Torvalds	nop
11921da177e4SLinus Torvalds
11931da177e4SLinus Torvalds	SFDIAG		(17)		; RDR 17 read sequence
11941da177e4SLinus Torvalds	ssm		0,0
11951da177e4SLinus Torvalds	MFDIAG_1	(28)
11961da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
11971da177e4SLinus Torvalds	MTDIAG_1	(1)
11981da177e4SLinus Torvalds	STDIAG		(17)
11991da177e4SLinus Torvalds	ssm		0,0
12001da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12011da177e4SLinus Torvalds
12021da177e4SLinus Torvalds	SFDIAG		(18)		; RDR 18 read sequence
12031da177e4SLinus Torvalds	ssm		0,0
12041da177e4SLinus Torvalds	MFDIAG_1	(28)
12051da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
12061da177e4SLinus Torvalds	MTDIAG_1	(1)
12071da177e4SLinus Torvalds	STDIAG		(18)
12081da177e4SLinus Torvalds	ssm		0,0
12091da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12101da177e4SLinus Torvalds
12111da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12121da177e4SLinus Torvalds	nop
12131da177e4SLinus Torvalds	nop
12141da177e4SLinus Torvalds	nop
12151da177e4SLinus Torvalds	nop
12161da177e4SLinus Torvalds	nop
12171da177e4SLinus Torvalds	nop
12181da177e4SLinus Torvalds	nop
12191da177e4SLinus Torvalds
12201da177e4SLinus Torvalds	sync				; RDR 20 read sequence
12211da177e4SLinus Torvalds	ssm		0,0
12221da177e4SLinus Torvalds	SFDIAG		(20)
12231da177e4SLinus Torvalds	ssm		0,0
12241da177e4SLinus Torvalds	MFDIAG_1	(28)
12251da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12261da177e4SLinus Torvalds	ssm		0,0
12271da177e4SLinus Torvalds	nop
12281da177e4SLinus Torvalds
12291da177e4SLinus Torvalds	sync				; RDR 21 read sequence
12301da177e4SLinus Torvalds	ssm		0,0
12311da177e4SLinus Torvalds	SFDIAG		(21)
12321da177e4SLinus Torvalds	ssm		0,0
12331da177e4SLinus Torvalds	MFDIAG_1	(28)
12341da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12351da177e4SLinus Torvalds	ssm		0,0
12361da177e4SLinus Torvalds	nop
12371da177e4SLinus Torvalds
12381da177e4SLinus Torvalds	sync				; RDR 22 read sequence
12391da177e4SLinus Torvalds	ssm		0,0
12401da177e4SLinus Torvalds	SFDIAG		(22)
12411da177e4SLinus Torvalds	ssm		0,0
12421da177e4SLinus Torvalds	MFDIAG_1	(28)
12431da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12441da177e4SLinus Torvalds	ssm		0,0
12451da177e4SLinus Torvalds	nop
12461da177e4SLinus Torvalds
12471da177e4SLinus Torvalds	sync				; RDR 23 read sequence
12481da177e4SLinus Torvalds	ssm		0,0
12491da177e4SLinus Torvalds	SFDIAG		(23)
12501da177e4SLinus Torvalds	ssm		0,0
12511da177e4SLinus Torvalds	MFDIAG_1	(28)
12521da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12531da177e4SLinus Torvalds	ssm		0,0
12541da177e4SLinus Torvalds	nop
12551da177e4SLinus Torvalds
12561da177e4SLinus Torvalds	sync				; RDR 24 read sequence
12571da177e4SLinus Torvalds	ssm		0,0
12581da177e4SLinus Torvalds	SFDIAG		(24)
12591da177e4SLinus Torvalds	ssm		0,0
12601da177e4SLinus Torvalds	MFDIAG_1	(28)
12611da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12621da177e4SLinus Torvalds	ssm		0,0
12631da177e4SLinus Torvalds	nop
12641da177e4SLinus Torvalds
12651da177e4SLinus Torvalds	sync				; RDR 25 read sequence
12661da177e4SLinus Torvalds	ssm		0,0
12671da177e4SLinus Torvalds	SFDIAG		(25)
12681da177e4SLinus Torvalds	ssm		0,0
12691da177e4SLinus Torvalds	MFDIAG_1	(28)
12701da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12711da177e4SLinus Torvalds	ssm		0,0
12721da177e4SLinus Torvalds	nop
12731da177e4SLinus Torvalds
12741da177e4SLinus Torvalds	SFDIAG		(26)		; RDR 26 read sequence
12751da177e4SLinus Torvalds	ssm		0,0
12761da177e4SLinus Torvalds	MFDIAG_1	(28)
12771da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
12781da177e4SLinus Torvalds	MTDIAG_1	(1)
12791da177e4SLinus Torvalds	STDIAG		(26)
12801da177e4SLinus Torvalds	ssm		0,0
12811da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12821da177e4SLinus Torvalds
12831da177e4SLinus Torvalds	SFDIAG		(27)		; RDR 27 read sequence
12841da177e4SLinus Torvalds	ssm		0,0
12851da177e4SLinus Torvalds	MFDIAG_1	(28)
12861da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
12871da177e4SLinus Torvalds	MTDIAG_1	(1)
12881da177e4SLinus Torvalds	STDIAG		(27)
12891da177e4SLinus Torvalds	ssm		0,0
12901da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12911da177e4SLinus Torvalds
12921da177e4SLinus Torvalds	sync				; RDR 28 read sequence
12931da177e4SLinus Torvalds	ssm		0,0
12941da177e4SLinus Torvalds	SFDIAG		(28)
12951da177e4SLinus Torvalds	ssm		0,0
12961da177e4SLinus Torvalds	MFDIAG_1	(28)
12971da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
12981da177e4SLinus Torvalds	ssm		0,0
12991da177e4SLinus Torvalds	nop
13001da177e4SLinus Torvalds
13011da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
13021da177e4SLinus Torvalds	nop
13031da177e4SLinus Torvalds	nop
13041da177e4SLinus Torvalds	nop
13051da177e4SLinus Torvalds	nop
13061da177e4SLinus Torvalds	nop
13071da177e4SLinus Torvalds	nop
13081da177e4SLinus Torvalds	nop
13091da177e4SLinus Torvalds
13101da177e4SLinus Torvalds	SFDIAG		(30)		; RDR 30 read sequence
13111da177e4SLinus Torvalds	ssm		0,0
13121da177e4SLinus Torvalds	MFDIAG_1	(28)
13131da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
13141da177e4SLinus Torvalds	MTDIAG_1	(1)
13151da177e4SLinus Torvalds	STDIAG		(30)
13161da177e4SLinus Torvalds	ssm		0,0
13171da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
13181da177e4SLinus Torvalds
13191da177e4SLinus Torvalds	SFDIAG		(31)		; RDR 31 read sequence
13201da177e4SLinus Torvalds	ssm		0,0
13211da177e4SLinus Torvalds	MFDIAG_1	(28)
13221da177e4SLinus Torvalds	shrpd		ret0,%r0,%sar,%r1
13231da177e4SLinus Torvalds	MTDIAG_1	(1)
13241da177e4SLinus Torvalds	STDIAG		(31)
13251da177e4SLinus Torvalds	ssm		0,0
13261da177e4SLinus Torvalds	b,n         perf_rdr_shift_in_U_leave
13271da177e4SLinus Torvalds	nop
13281da177e4SLinus Torvalds
13291da177e4SLinus Torvaldsperf_rdr_shift_in_U_leave:
13301da177e4SLinus Torvalds	bve		    (%r2)
13311da177e4SLinus Torvalds	.exit
13321da177e4SLinus Torvalds	MTDIAG_2	(24)			; restore DR2
13331da177e4SLinus Torvalds	.procend
13348e9e9844SHelge DellerENDPROC(perf_rdr_shift_in_U)
13351da177e4SLinus Torvalds
13361da177e4SLinus Torvalds;***********************************************************************
13371da177e4SLinus Torvalds;*
13381da177e4SLinus Torvalds;* Name: rdr_shift_out_U
13391da177e4SLinus Torvalds;*
13401da177e4SLinus Torvalds;* Description:
13411da177e4SLinus Torvalds;*	This routine moves data to the RDR's.  The double-word that
13421da177e4SLinus Torvalds;*	arg1 points to is loaded and moved into the staging register.
13431da177e4SLinus Torvalds;*	Then the STDIAG instruction for the RDR # in arg0 is called
13441da177e4SLinus Torvalds;*	to move the data to the RDR.
13451da177e4SLinus Torvalds;*
13461da177e4SLinus Torvalds;* Arguments:
13471da177e4SLinus Torvalds;*	arg0 = rdr target
13481da177e4SLinus Torvalds;*	arg1 = buffer pointer
13491da177e4SLinus Torvalds;*
13501da177e4SLinus Torvalds;* Returns:
13511da177e4SLinus Torvalds;*	None
13521da177e4SLinus Torvalds;*
13531da177e4SLinus Torvalds;* Register usage:
13541da177e4SLinus Torvalds;*	arg0 = rdr target
13551da177e4SLinus Torvalds;*	arg1 = buffer pointer
13561da177e4SLinus Torvalds;*	%r24 - DR2 | DR2_SLOW_RET
13571da177e4SLinus Torvalds;*	%r23 - original DR2 value
13581da177e4SLinus Torvalds;*
13591da177e4SLinus Torvalds;***********************************************************************
13601da177e4SLinus Torvalds
13618e9e9844SHelge DellerENTRY(perf_rdr_shift_out_U)
13621da177e4SLinus Torvalds	.proc
13631da177e4SLinus Torvalds	.callinfo frame=0,NO_CALLS
13641da177e4SLinus Torvalds	.entry
13651da177e4SLinus Torvalds
13661da177e4SLinus Torvalds;
13671da177e4SLinus Torvalds; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
13681da177e4SLinus Torvalds; shifting is done, from or to, the remote diagnose registers.
13691da177e4SLinus Torvalds;
13701da177e4SLinus Torvalds
13711da177e4SLinus Torvalds	depdi,z		1,DR2_SLOW_RET,1,%r24
13721da177e4SLinus Torvalds	MFDIAG_2	(23)
13731da177e4SLinus Torvalds	or		%r24,%r23,%r24
13741da177e4SLinus Torvalds	MTDIAG_2	(24)		; set DR2_SLOW_RET
13751da177e4SLinus Torvalds
13761da177e4SLinus Torvalds	MTDIAG_1	(25)		; data to the staging register
13771da177e4SLinus Torvalds	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number
13781da177e4SLinus Torvalds	blr		%r1,%r0		; branch to 8-instruction sequence
13791da177e4SLinus Torvalds	nop
13801da177e4SLinus Torvalds
13811da177e4SLinus Torvalds;
13821da177e4SLinus Torvalds; 32-byte cachline aligned
13831da177e4SLinus Torvalds;
13841da177e4SLinus Torvalds
13851da177e4SLinus Torvalds	sync				; RDR 0 write sequence
13861da177e4SLinus Torvalds	ssm		0,0
13871da177e4SLinus Torvalds	STDIAG		(0)
13881da177e4SLinus Torvalds	ssm		0,0
13891da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
13901da177e4SLinus Torvalds	nop
13911da177e4SLinus Torvalds	ssm		0,0
13921da177e4SLinus Torvalds	nop
13931da177e4SLinus Torvalds
13941da177e4SLinus Torvalds	sync				; RDR 1 write sequence
13951da177e4SLinus Torvalds	ssm		0,0
13961da177e4SLinus Torvalds	STDIAG		(1)
13971da177e4SLinus Torvalds	ssm		0,0
13981da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
13991da177e4SLinus Torvalds	nop
14001da177e4SLinus Torvalds	ssm		0,0
14011da177e4SLinus Torvalds	nop
14021da177e4SLinus Torvalds
14031da177e4SLinus Torvalds	sync				; RDR 2 write sequence
14041da177e4SLinus Torvalds	ssm		0,0
14051da177e4SLinus Torvalds	STDIAG		(2)
14061da177e4SLinus Torvalds	ssm		0,0
14071da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14081da177e4SLinus Torvalds	nop
14091da177e4SLinus Torvalds	ssm		0,0
14101da177e4SLinus Torvalds	nop
14111da177e4SLinus Torvalds
14121da177e4SLinus Torvalds	sync				; RDR 3 write sequence
14131da177e4SLinus Torvalds	ssm		0,0
14141da177e4SLinus Torvalds	STDIAG		(3)
14151da177e4SLinus Torvalds	ssm		0,0
14161da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14171da177e4SLinus Torvalds	nop
14181da177e4SLinus Torvalds	ssm		0,0
14191da177e4SLinus Torvalds	nop
14201da177e4SLinus Torvalds
14211da177e4SLinus Torvalds	sync				; RDR 4 write sequence
14221da177e4SLinus Torvalds	ssm		0,0
14231da177e4SLinus Torvalds	STDIAG		(4)
14241da177e4SLinus Torvalds	ssm		0,0
14251da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14261da177e4SLinus Torvalds	nop
14271da177e4SLinus Torvalds	ssm		0,0
14281da177e4SLinus Torvalds	nop
14291da177e4SLinus Torvalds
14301da177e4SLinus Torvalds	sync				; RDR 5 write sequence
14311da177e4SLinus Torvalds	ssm		0,0
14321da177e4SLinus Torvalds	STDIAG		(5)
14331da177e4SLinus Torvalds	ssm		0,0
14341da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14351da177e4SLinus Torvalds	nop
14361da177e4SLinus Torvalds	ssm		0,0
14371da177e4SLinus Torvalds	nop
14381da177e4SLinus Torvalds
14391da177e4SLinus Torvalds	sync				; RDR 6 write sequence
14401da177e4SLinus Torvalds	ssm		0,0
14411da177e4SLinus Torvalds	STDIAG		(6)
14421da177e4SLinus Torvalds	ssm		0,0
14431da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14441da177e4SLinus Torvalds	nop
14451da177e4SLinus Torvalds	ssm		0,0
14461da177e4SLinus Torvalds	nop
14471da177e4SLinus Torvalds
14481da177e4SLinus Torvalds	sync				; RDR 7 write sequence
14491da177e4SLinus Torvalds	ssm		0,0
14501da177e4SLinus Torvalds	STDIAG		(7)
14511da177e4SLinus Torvalds	ssm		0,0
14521da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14531da177e4SLinus Torvalds	nop
14541da177e4SLinus Torvalds	ssm		0,0
14551da177e4SLinus Torvalds	nop
14561da177e4SLinus Torvalds
14571da177e4SLinus Torvalds	sync				; RDR 8 write sequence
14581da177e4SLinus Torvalds	ssm		0,0
14591da177e4SLinus Torvalds	STDIAG		(8)
14601da177e4SLinus Torvalds	ssm		0,0
14611da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14621da177e4SLinus Torvalds	nop
14631da177e4SLinus Torvalds	ssm		0,0
14641da177e4SLinus Torvalds	nop
14651da177e4SLinus Torvalds
14661da177e4SLinus Torvalds	sync				; RDR 9 write sequence
14671da177e4SLinus Torvalds	ssm		0,0
14681da177e4SLinus Torvalds	STDIAG		(9)
14691da177e4SLinus Torvalds	ssm		0,0
14701da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14711da177e4SLinus Torvalds	nop
14721da177e4SLinus Torvalds	ssm		0,0
14731da177e4SLinus Torvalds	nop
14741da177e4SLinus Torvalds
14751da177e4SLinus Torvalds	sync				; RDR 10 write sequence
14761da177e4SLinus Torvalds	ssm		0,0
14771da177e4SLinus Torvalds	STDIAG		(10)
14781da177e4SLinus Torvalds	ssm		0,0
14791da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14801da177e4SLinus Torvalds	nop
14811da177e4SLinus Torvalds	ssm		0,0
14821da177e4SLinus Torvalds	nop
14831da177e4SLinus Torvalds
14841da177e4SLinus Torvalds	sync				; RDR 11 write sequence
14851da177e4SLinus Torvalds	ssm		0,0
14861da177e4SLinus Torvalds	STDIAG		(11)
14871da177e4SLinus Torvalds	ssm		0,0
14881da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14891da177e4SLinus Torvalds	nop
14901da177e4SLinus Torvalds	ssm		0,0
14911da177e4SLinus Torvalds	nop
14921da177e4SLinus Torvalds
14931da177e4SLinus Torvalds	sync				; RDR 12 write sequence
14941da177e4SLinus Torvalds	ssm		0,0
14951da177e4SLinus Torvalds	STDIAG		(12)
14961da177e4SLinus Torvalds	ssm		0,0
14971da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
14981da177e4SLinus Torvalds	nop
14991da177e4SLinus Torvalds	ssm		0,0
15001da177e4SLinus Torvalds	nop
15011da177e4SLinus Torvalds
15021da177e4SLinus Torvalds	sync				; RDR 13 write sequence
15031da177e4SLinus Torvalds	ssm		0,0
15041da177e4SLinus Torvalds	STDIAG		(13)
15051da177e4SLinus Torvalds	ssm		0,0
15061da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15071da177e4SLinus Torvalds	nop
15081da177e4SLinus Torvalds	ssm		0,0
15091da177e4SLinus Torvalds	nop
15101da177e4SLinus Torvalds
15111da177e4SLinus Torvalds	sync				; RDR 14 write sequence
15121da177e4SLinus Torvalds	ssm		0,0
15131da177e4SLinus Torvalds	STDIAG		(14)
15141da177e4SLinus Torvalds	ssm		0,0
15151da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15161da177e4SLinus Torvalds	nop
15171da177e4SLinus Torvalds	ssm		0,0
15181da177e4SLinus Torvalds	nop
15191da177e4SLinus Torvalds
15201da177e4SLinus Torvalds	sync				; RDR 15 write sequence
15211da177e4SLinus Torvalds	ssm		0,0
15221da177e4SLinus Torvalds	STDIAG		(15)
15231da177e4SLinus Torvalds	ssm		0,0
15241da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15251da177e4SLinus Torvalds	nop
15261da177e4SLinus Torvalds	ssm		0,0
15271da177e4SLinus Torvalds	nop
15281da177e4SLinus Torvalds
15291da177e4SLinus Torvalds	sync				; RDR 16 write sequence
15301da177e4SLinus Torvalds	ssm		0,0
15311da177e4SLinus Torvalds	STDIAG		(16)
15321da177e4SLinus Torvalds	ssm		0,0
15331da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15341da177e4SLinus Torvalds	nop
15351da177e4SLinus Torvalds	ssm		0,0
15361da177e4SLinus Torvalds	nop
15371da177e4SLinus Torvalds
15381da177e4SLinus Torvalds	sync				; RDR 17 write sequence
15391da177e4SLinus Torvalds	ssm		0,0
15401da177e4SLinus Torvalds	STDIAG		(17)
15411da177e4SLinus Torvalds	ssm		0,0
15421da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15431da177e4SLinus Torvalds	nop
15441da177e4SLinus Torvalds	ssm		0,0
15451da177e4SLinus Torvalds	nop
15461da177e4SLinus Torvalds
15471da177e4SLinus Torvalds	sync				; RDR 18 write sequence
15481da177e4SLinus Torvalds	ssm		0,0
15491da177e4SLinus Torvalds	STDIAG		(18)
15501da177e4SLinus Torvalds	ssm		0,0
15511da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15521da177e4SLinus Torvalds	nop
15531da177e4SLinus Torvalds	ssm		0,0
15541da177e4SLinus Torvalds	nop
15551da177e4SLinus Torvalds
15561da177e4SLinus Torvalds	sync				; RDR 19 write sequence
15571da177e4SLinus Torvalds	ssm		0,0
15581da177e4SLinus Torvalds	STDIAG		(19)
15591da177e4SLinus Torvalds	ssm		0,0
15601da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15611da177e4SLinus Torvalds	nop
15621da177e4SLinus Torvalds	ssm		0,0
15631da177e4SLinus Torvalds	nop
15641da177e4SLinus Torvalds
15651da177e4SLinus Torvalds	sync				; RDR 20 write sequence
15661da177e4SLinus Torvalds	ssm		0,0
15671da177e4SLinus Torvalds	STDIAG		(20)
15681da177e4SLinus Torvalds	ssm		0,0
15691da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15701da177e4SLinus Torvalds	nop
15711da177e4SLinus Torvalds	ssm		0,0
15721da177e4SLinus Torvalds	nop
15731da177e4SLinus Torvalds
15741da177e4SLinus Torvalds	sync				; RDR 21 write sequence
15751da177e4SLinus Torvalds	ssm		0,0
15761da177e4SLinus Torvalds	STDIAG		(21)
15771da177e4SLinus Torvalds	ssm		0,0
15781da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15791da177e4SLinus Torvalds	nop
15801da177e4SLinus Torvalds	ssm		0,0
15811da177e4SLinus Torvalds	nop
15821da177e4SLinus Torvalds
15831da177e4SLinus Torvalds	sync				; RDR 22 write sequence
15841da177e4SLinus Torvalds	ssm		0,0
15851da177e4SLinus Torvalds	STDIAG		(22)
15861da177e4SLinus Torvalds	ssm		0,0
15871da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15881da177e4SLinus Torvalds	nop
15891da177e4SLinus Torvalds	ssm		0,0
15901da177e4SLinus Torvalds	nop
15911da177e4SLinus Torvalds
15921da177e4SLinus Torvalds	sync				; RDR 23 write sequence
15931da177e4SLinus Torvalds	ssm		0,0
15941da177e4SLinus Torvalds	STDIAG		(23)
15951da177e4SLinus Torvalds	ssm		0,0
15961da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
15971da177e4SLinus Torvalds	nop
15981da177e4SLinus Torvalds	ssm		0,0
15991da177e4SLinus Torvalds	nop
16001da177e4SLinus Torvalds
16011da177e4SLinus Torvalds	sync				; RDR 24 write sequence
16021da177e4SLinus Torvalds	ssm		0,0
16031da177e4SLinus Torvalds	STDIAG		(24)
16041da177e4SLinus Torvalds	ssm		0,0
16051da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16061da177e4SLinus Torvalds	nop
16071da177e4SLinus Torvalds	ssm		0,0
16081da177e4SLinus Torvalds	nop
16091da177e4SLinus Torvalds
16101da177e4SLinus Torvalds	sync				; RDR 25 write sequence
16111da177e4SLinus Torvalds	ssm		0,0
16121da177e4SLinus Torvalds	STDIAG		(25)
16131da177e4SLinus Torvalds	ssm		0,0
16141da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16151da177e4SLinus Torvalds	nop
16161da177e4SLinus Torvalds	ssm		0,0
16171da177e4SLinus Torvalds	nop
16181da177e4SLinus Torvalds
16191da177e4SLinus Torvalds	sync				; RDR 26 write sequence
16201da177e4SLinus Torvalds	ssm		0,0
16211da177e4SLinus Torvalds	STDIAG		(26)
16221da177e4SLinus Torvalds	ssm		0,0
16231da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16241da177e4SLinus Torvalds	nop
16251da177e4SLinus Torvalds	ssm		0,0
16261da177e4SLinus Torvalds	nop
16271da177e4SLinus Torvalds
16281da177e4SLinus Torvalds	sync				; RDR 27 write sequence
16291da177e4SLinus Torvalds	ssm		0,0
16301da177e4SLinus Torvalds	STDIAG		(27)
16311da177e4SLinus Torvalds	ssm		0,0
16321da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16331da177e4SLinus Torvalds	nop
16341da177e4SLinus Torvalds	ssm		0,0
16351da177e4SLinus Torvalds	nop
16361da177e4SLinus Torvalds
16371da177e4SLinus Torvalds	sync				; RDR 28 write sequence
16381da177e4SLinus Torvalds	ssm		0,0
16391da177e4SLinus Torvalds	STDIAG		(28)
16401da177e4SLinus Torvalds	ssm		0,0
16411da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16421da177e4SLinus Torvalds	nop
16431da177e4SLinus Torvalds	ssm		0,0
16441da177e4SLinus Torvalds	nop
16451da177e4SLinus Torvalds
16461da177e4SLinus Torvalds	sync				; RDR 29 write sequence
16471da177e4SLinus Torvalds	ssm		0,0
16481da177e4SLinus Torvalds	STDIAG		(29)
16491da177e4SLinus Torvalds	ssm		0,0
16501da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16511da177e4SLinus Torvalds	nop
16521da177e4SLinus Torvalds	ssm		0,0
16531da177e4SLinus Torvalds	nop
16541da177e4SLinus Torvalds
16551da177e4SLinus Torvalds	sync				; RDR 30 write sequence
16561da177e4SLinus Torvalds	ssm		0,0
16571da177e4SLinus Torvalds	STDIAG		(30)
16581da177e4SLinus Torvalds	ssm		0,0
16591da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16601da177e4SLinus Torvalds	nop
16611da177e4SLinus Torvalds	ssm		0,0
16621da177e4SLinus Torvalds	nop
16631da177e4SLinus Torvalds
16641da177e4SLinus Torvalds	sync				; RDR 31 write sequence
16651da177e4SLinus Torvalds	ssm		0,0
16661da177e4SLinus Torvalds	STDIAG		(31)
16671da177e4SLinus Torvalds	ssm		0,0
16681da177e4SLinus Torvalds	b,n         perf_rdr_shift_out_U_leave
16691da177e4SLinus Torvalds	nop
16701da177e4SLinus Torvalds	ssm		0,0
16711da177e4SLinus Torvalds	nop
16721da177e4SLinus Torvalds
16731da177e4SLinus Torvaldsperf_rdr_shift_out_U_leave:
16741da177e4SLinus Torvalds	bve		(%r2)
16751da177e4SLinus Torvalds	.exit
16761da177e4SLinus Torvalds	MTDIAG_2	(23)			; restore DR2
16771da177e4SLinus Torvalds	.procend
16788e9e9844SHelge DellerENDPROC(perf_rdr_shift_out_U)
16791da177e4SLinus Torvalds
1680