⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perf_asm.s

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 S
📖 第 1 页 / 共 2 页
字号:
; ;   Purpose:;	This file has the overall purpose of suppyling low-level;   assembly to program the intrigue portion of the cpu.; #include <linux/config.h>#include <asm/assembly.h>#ifdef __LP64__	.level		2.0w#endif /* __LP64__ */#define MTDIAG_1(gr)    .word 0x14201840 + gr*0x10000#define MTDIAG_2(gr)    .word 0x14401840 + gr*0x10000#define MFDIAG_1(gr)    .word 0x142008A0 + gr#define MFDIAG_2(gr)    .word 0x144008A0 + gr#define STDIAG(dr)      .word 0x14000AA0 + dr*0x200000#define SFDIAG(dr)      .word 0x14000BA0 + dr*0x200000#define DR2_SLOW_RET    53;; Enable the performance counters;; The coprocessor only needs to be enabled when; starting/stopping the coprocessor with the pmenb/pmdis.;	.text	.align 32	.export perf_intrigue_enable_perf_counters,codeperf_intrigue_enable_perf_counters:	.proc	.callinfo  frame=0,NO_CALLS	.entry		ldi     0x20,%r25                ; load up perfmon bit	mfctl   ccr,%r26                 ; get coprocessor register	or      %r25,%r26,%r26             ; set bit	mtctl   %r26,ccr                 ; turn on performance coprocessor	pmenb                           ; enable performance monitor	ssm     0,0                     ; dummy op to ensure completion	sync                            ; follow ERS	andcm   %r26,%r25,%r26             ; clear bit now 	mtctl   %r26,ccr                 ; turn off performance coprocessor	nop                             ; NOPs as specified in ERS	nop	nop	nop	nop	nop	nop	bve    (%r2)	nop	.exit	.procend	.export perf_intrigue_disable_perf_counters,codeperf_intrigue_disable_perf_counters:	.proc	.callinfo  frame=0,NO_CALLS	.entry	ldi     0x20,%r25                ; load up perfmon bit	mfctl   ccr,%r26                 ; get coprocessor register	or      %r25,%r26,%r26             ; set bit	mtctl   %r26,ccr                 ; turn on performance coprocessor	pmdis                           ; disable performance monitor	ssm     0,0                     ; dummy op to ensure completion	andcm   %r26,%r25,%r26             ; clear bit now 	bve    (%r2)	mtctl   %r26,ccr                 ; turn off performance coprocessor	.exit	.procend;************************************************************************;*																		*;* Name: perf_rdr_shift_in_W												*;*																		*;* Description:															*;*	This routine shifts data in from the RDR in arg0 and returns		*;*	the result in ret0.  If the RDR is <= 64 bits in length, it			*;*	is shifted shifted backup immediately.  This is to compensate		*;*	for RDR10 which has bits that preclude PDC stack operations			*;*	when they are in the wrong state.									*;*																		*;* Arguments:															*;*	arg0 : rdr to be read												*;*	arg1 : bit length of rdr											*;*																		*;* Returns:																*;*	ret0 = next 64 bits of rdr data from staging register				*;*																		*;* Register usage:														*;*	arg0 : rdr to be read												*;*	arg1 : bit length of rdr											*;*	%r24  - original DR2 value											*;*	%r1   - scratch														*;*  %r29  - scratch														*;*																		*;* Returns:																*;*	ret0 = RDR data (right justified)									*;*																		*;************************************************************************	.export perf_rdr_shift_in_W,codeperf_rdr_shift_in_W:	.proc	.callinfo frame=0,NO_CALLS	.entry;; read(shift in) the RDR.;; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any; shifting is done, from or to, remote diagnose registers.;	depdi,z		1,DR2_SLOW_RET,1,%r29	MFDIAG_2	(24)	or		    %r24,%r29,%r29	MTDIAG_2	(29)			; set DR2_SLOW_RET	nop	nop	nop	nop	;; Cacheline start (32-byte cacheline);	nop	nop	nop	extrd,u		arg1,63,6,%r1    ; setup shift amount based on bits to move 	mtsar		%r1	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number	blr  		%r1,%r0		    ; branch to 8-instruction sequence	nop;; Cacheline start (32-byte cacheline);	;	; RDR 0 sequence	;	SFDIAG		(0)			ssm		    0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)					; mtdiag %dr1, %r1 	STDIAG		(0)	ssm		    0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 1 sequence	;	sync				ssm		    0,0	SFDIAG		(1)	ssm		    0,0	MFDIAG_1	(28)	ssm		    0,0	b,n         perf_rdr_shift_in_W_leave	nop		;	; RDR 2 read sequence	;	SFDIAG		(2)			ssm		    0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(2)	ssm		    0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 3 read sequence	;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 4 read sequence	;	sync					ssm			0,0	SFDIAG		(4)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		; 	; RDR 5 read sequence	;	sync		ssm			0,0	SFDIAG		(5)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 6 read sequence	;	sync		ssm			0,0	SFDIAG		(6)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 7 read sequence	;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 8 read sequence	;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 9 read sequence	;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 10 read sequence	;	SFDIAG		(10)	ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(10)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 11 read sequence	;	SFDIAG		(11)	ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(11)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 12 read sequence	;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 13 read sequence	;	sync	ssm			0,0	SFDIAG		(13)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 14 read sequence	;	SFDIAG		(14)		ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(14)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 15 read sequence	;	sync				; RDR 15 read sequence	ssm			0,0	SFDIAG		(15)	ssm			0,0	MFDIAG_1	(28)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave	nop		;	; RDR 16 read sequence	;	sync				; RDR 16 read sequence	ssm			0,0	SFDIAG		(16)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 17 read sequence	;	SFDIAG		(17)		ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(17)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 18 read sequence	;	SFDIAG		(18)		ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(18)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave	;; RDR 19 read sequence;	b,n         perf_rdr_shift_in_W_leave	nop	nop	nop	nop	nop	nop	nop	;	; RDR 20 read sequence	;	sync	ssm			0,0	SFDIAG		(20)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 21 read sequence	;	sync	ssm			0,0	SFDIAG		(21)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 22 read sequence	;	sync	ssm			0,0	SFDIAG		(22)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 23 read sequence	;	sync			ssm			0,0	SFDIAG		(23)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 24 read sequence	;	sync		ssm			0,0	SFDIAG		(24)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 25 read sequence	;	sync	ssm			0,0	SFDIAG		(25)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 26 read sequence	;	SFDIAG		(26)			ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(26)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 27 read sequence	;	SFDIAG		(27)	ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(27)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 28 read sequence	;	sync					ssm			0,0	SFDIAG		(28)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 29 read sequence	;	sync			ssm			0,0	SFDIAG		(29)	ssm			0,0	MFDIAG_1	(28)	b,n         perf_rdr_shift_in_W_leave	ssm			0,0	nop		;	; RDR 30 read sequence	;	SFDIAG		(30)	ssm			0,0	MFDIAG_1	(28)	shrpd		ret0,%r0,%sar,%r1	MTDIAG_1	(1)	STDIAG		(30)	ssm			0,0	b,n         perf_rdr_shift_in_W_leave		;	; RDR 31 read sequence	;	sync			ssm			0,0	SFDIAG		(31)	ssm			0,0	MFDIAG_1	(28)	nop	ssm			0,0	nop	;	; Fallthrough	;perf_rdr_shift_in_W_leave:	bve		    (%r2)	.exit	MTDIAG_2	(24)			; restore DR2	.procend;************************************************************************;*																		*;* Name: perf_rdr_shift_out_W												*;*																		*;* Description:															*;*	This routine moves data to the RDR's.  The double-word that			*;*	arg1 points to is loaded and moved into the staging register.		*;*	Then the STDIAG instruction for the RDR # in arg0 is called			*;*	to move the data to the RDR.										*;*																		*;* Arguments:															*;*	arg0 = rdr number													*;*	arg1 = 64-bit value to write										*;*	%r24 - DR2 | DR2_SLOW_RET											*;*	%r23 - original DR2 value											*;*																		*;* Returns:																*;*	None																*;*																		*;* Register usage:														*;*																		*;************************************************************************	.export perf_rdr_shift_out_W,codeperf_rdr_shift_out_W:	.proc	.callinfo frame=0,NO_CALLS	.entry;; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any; shifting is done, from or to, the remote diagnose registers.;	depdi,z		1,DR2_SLOW_RET,1,%r24	MFDIAG_2	(23)	or		     %r24,%r23,%r24	MTDIAG_2	(24)			; set DR2_SLOW_RET	MTDIAG_1	(25)			; data to the staging register	shladd		arg0,2,%r0,%r1	; %r1 = 4 * RDR number	blr		    %r1,%r0		    ; branch to 8-instruction sequence	nop	;	; RDR 0 write sequence	;	sync				; RDR 0 write sequence	ssm			0,0	STDIAG		(0)	ssm			0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm			0,0	nop	;	; RDR 1 write sequence	;	sync	ssm		0,0	STDIAG		(1)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 2 write sequence	;	sync	ssm		0,0	STDIAG		(2)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 3 write sequence	;	sync	ssm		0,0	STDIAG		(3)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 4 write sequence	;	sync	ssm		0,0	STDIAG		(4)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 5 write sequence	;	sync	ssm		0,0	STDIAG		(5)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 6 write sequence	;	sync	ssm		0,0	STDIAG		(6)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 7 write sequence	;	sync	ssm		0,0	STDIAG		(7)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 8 write sequence	;	sync	ssm		0,0	STDIAG		(8)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 9 write sequence	;	sync	ssm		0,0	STDIAG		(9)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 10 write sequence	;	sync		ssm		0,0	STDIAG		(10)	STDIAG		(26)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	ssm		0,0	nop	;	; RDR 11 write sequence	;	sync	ssm		0,0	STDIAG		(11)	STDIAG		(27)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	ssm		0,0	nop	;	; RDR 12 write sequence	;	sync	ssm		0,0	STDIAG		(12)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 13 write sequence	;	sync	ssm		0,0	STDIAG		(13)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 14 write sequence	;	sync	ssm		0,0	STDIAG		(14)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 15 write sequence	;	sync	ssm		0,0	STDIAG		(15)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 16 write sequence	;	sync	ssm		0,0	STDIAG		(16)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 17 write sequence	;	sync	ssm		0,0	STDIAG		(17)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 18 write sequence	;	sync	ssm		0,0	STDIAG		(18)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 19 write sequence	;	sync	ssm		0,0	STDIAG		(19)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 20 write sequence	;	sync	ssm		0,0	STDIAG		(20)	ssm		0,0	b,n         perf_rdr_shift_out_W_leave	nop	ssm		0,0	nop	;	; RDR 21 write sequence	;	sync	ssm		0,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -