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