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

📄 hxfprofilerarm.s

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 S
字号:
;/* ************************************************************************ *\
;**    INTEL Corporation Proprietary Information
;**
;**    This listing is supplied under the terms of a license
;**    agreement with INTEL Corporation and may not be copied
;**    nor disclosed except in accordance with the terms of
;**    that agreement.
;**
;**    Copyright (c) 2003 Intel Corporation.
;**    All Rights Reserved.
;**
;** ************************************************************************ **
;**	FILE: HXFUtils.s
;**	DESCRIPTION: Optimized Vertex lighting routines. 
;**	
;**	AUTHOR: Cian Montgomery
;**	CREATED: July 31, 2003
;**
; * $Date: 7/19/04 5:13p $ $Revision: 6 $
; * $Log: /Intel_Development/Drivers/Marathon/WinCE42/opengles/HXFProfilerARM.s $
; * 
; * 6     7/19/04 5:13p Cmdoan
; * changed ARM to not use delta calculations  (always resets PMU), and
; * added I64 to %u output for large numbers.
; * 
; * 5     1/30/04 10:37a Clmontgo
; * 
; * 4     1/26/04 10:42p Clmontgo
; * FIX Profiler enable stuff
; * 
; * 3     1/26/04 9:33p Clmontgo
; * 
; * 2     1/26/04 6:46p Clmontgo
; * Added Profiler, Converted Lighting procs to Fixed point, Worked on
; * screen rotation code, Added wMMX debug Macros to Lighting. 
; * 
; * 1     1/24/04 11:50p Clmontgo
; * 
; * 2     1/24/04 7:49p Clmontgo
; * 
; * 1     1/22/04 11:58a Clmontgo
; 
; 7     12/21/03 12:59p Clmontgo
; 
; 6     12/17/03 9:22a Clmontgo
; Added Version ID and log to file headers
;\* ************************************************************************ */
	INCLUDE HXFState.inc ; Definitions of the HXFState Structure
	
	IF :DEF:HXF_PROFILE

;** ************************************************************************ **
;**	CONSTANTS
;** ************************************************************************ **
ACCUMULATOR_SIZE EQU 48
ACCUMULATOR_COUNT_OFFSET_L EQU 0
ACCUMULATOR_COUNT_OFFSET_H EQU 4
ACCUMULATOR_CYCLES_OFFSET_L EQU 8
ACCUMULATOR_CYCLES_OFFSET_H EQU 12
ACCUMULATOR_EVENT_0_OFFSET_L EQU 16
ACCUMULATOR_EVENT_0_OFFSET_H EQU 20
ACCUMULATOR_EVENT_1_OFFSET_L EQU 24
ACCUMULATOR_EVENT_1_OFFSET_H EQU 28
ACCUMULATOR_EVENT_2_OFFSET_L EQU 32
ACCUMULATOR_EVENT_2_OFFSET_H EQU 36
ACCUMULATOR_EVENT_3_OFFSET_L EQU 40
ACCUMULATOR_EVENT_3_OFFSET_H EQU 44

;** ************************************************************************ **
;**	EXPORTS
;** ************************************************************************ **
 	EXPORT	|HXFSetupPMU|	
	EXPORT	|HXFProfilerStart|
 	EXPORT	|HXFProfilerStop|
 	EXPORT	|HXFProfilerTransition|

;** ************************************************************************ **
;**	IMPORTS
;** ************************************************************************ **
	IMPORT |g_Accumulators|
	IMPORT |g_AccumulatorStartValue|
	IMPORT |g_CurrentAccumulator|


;** ************************************************************************ **
;**	VARIABLES
;** ************************************************************************ **


;** ************************************************************************ **
;**	MAROS
;** ************************************************************************ **


;** ************************************************************************ **
;**	FUNCTIONS
;** ************************************************************************ **
	AREA	HXFPROFILE, CODE, READONLY


;** ************************************************************************ **
; Name:	HXFSetupAccumulator
; Description:
; ---------------------------------------------------------------------- --
; Register Map -
; ---------------------------------------------------------------------- --
; r0 =	            r4 =            r8 =            r12 =
; r1 =              r5 =            r9 =            r13 = sp
; r2 =              r6 =            r10 =           r14 = lr (return)
; r3 =              r7 =            r11 =           r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 =
; wr1 =             wr5 =            wr9 =            wr13 =
; wr2 =             wr6 =            wr10 =           wr14 =
; wr3 =             wr7 =            wr11 =           wr15 =
; wcgr0 =           wcgr1 =          wcgr2 =          wcgr3 =
; ---------------------------------------------------------------------- --
; Prototype in C:	void HXFSetupPMU(HUINT32*)
;** ************************************************************************ **
|HXFSetupPMU| PROC
	; Disable PMU 
	mov r3, #0x00
	mcr p14, 0, r3, c0, c1, 0

	; reset all events
	eor r2, r2, r2 ; clear r2
	; Setup PMNC 0
	ldr r1, [r0, #4] ; Load value
	and r1, r1, #0xFF ; Mask off important part
	orr r2, r2, r1	; Mask in to our config reg

	; Setup PMNC 1	
	ldr r1, [r0, #8]
	and r1, r1, #0xFF ; Mask off important part
	orr r2, r2, r1,	LSL #8	; Mask in to our config reg

	; Setup PMNC 2
	ldr r1, [r0, #12]
	and r1, r1, #0xFF ; Mask off important part
	orr r2, r2, r1,	LSL #16	; Mask in to our config reg

	; Setup PMNC 3
	ldr r1, [r0, #16]
	and r1, r1, #0xFF ; Mask off important part
	orr r2, r2, r1,	LSL #24 ; Mask in to our config reg

	mcr p14, 0, r2, c8, c1, 0 ; set the event sel register

	; reset and enable counters
	mov r3, #0x07
	mcr p14, 0, r3, c0, c1, 0	

	mov pc, lr
	ENDP
;** ************************************************************************ **


;** ************************************************************************ **
; Name:	HXFStartAccumulator
; Description:
; ---------------------------------------------------------------------- --
; Register Map -
; ---------------------------------------------------------------------- --
; r0 =	            r4 =            r8 =            r12 =
; r1 =              r5 =            r9 =            r13 = sp
; r2 =              r6 =            r10 =           r14 = lr (return)
; r3 =              r7 =            r11 =           r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 =
; wr1 =             wr5 =            wr9 =            wr13 =
; wr2 =             wr6 =            wr10 =           wr14 =
; wr3 =             wr7 =            wr11 =           wr15 =
; wcgr0 =           wcgr1 =          wcgr2 =          wcgr3 =
; ---------------------------------------------------------------------- --
; Prototype in C:	void HXFProfilerStart(HUINT32);
;** ************************************************************************ **
|HXFProfilerStart| PROC
	; Stop the PMU
;	mov r0, #0x00
;	mcr p14, 0, r0, c0, c1, 0

	ldr r1, =g_CurrentAccumulator
	str r0, [r1]
	 
	ldr r0, =g_AccumulatorStartValue

	mov r1, #0
	str r1, [r0, #ACCUMULATOR_COUNT_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_COUNT_OFFSET_H]
	
; 	mrc p14, 0, r1, c1, c1, 0	; Get Cycle Counter
	mov r1, #0
	str r1, [r0, #ACCUMULATOR_CYCLES_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_CYCLES_OFFSET_H]
	
;	mrc p14, 0, r1, c0, c2, 0	; Get PMNC0
	mov r1, #0
	str r1, [r0, #ACCUMULATOR_EVENT_0_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_EVENT_0_OFFSET_H]
	
;	mrc p14, 0, r1, c1, c2, 0	; Get PMNC1
	mov r1, #0
	str r1, [r0, #ACCUMULATOR_EVENT_1_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_EVENT_1_OFFSET_H]

;	mrc p14, 0, r1, c2, c2, 0	; Get PMNC2
	mov r1, #0
	str r1, [r0, #ACCUMULATOR_EVENT_2_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_EVENT_2_OFFSET_H]

;	mrc p14, 0, r1, c3, c2, 0	; Get PMNC3
	mov r1, #0
	str r1, [r0, #ACCUMULATOR_EVENT_3_OFFSET_L]
	str r1, [r0, #ACCUMULATOR_EVENT_3_OFFSET_H]

	; Restart the PMU
;	mov r0, #0x01
;	mcr p14, 0, r0, c0, c1, 0

	; reset and enable counters
	mov r3, #0x07
	mcr p14, 0, r3, c0, c1, 0

	mov pc, lr
	ENDP
;** ************************************************************************ **

;** ************************************************************************ **
; Name:	HXFProfilerStop
; Description:
; ---------------------------------------------------------------------- --
; Register Map -
; ---------------------------------------------------------------------- --
; r0 = AccId	    r4 =            r8 =            r12 =
; r1 =              r5 =            r9 =            r13 = sp
; r2 =              r6 =            r10 =           r14 = lr (return)
; r3 =              r7 =            r11 =           r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 =
; wr1 =             wr5 =            wr9 =            wr13 =
; wr2 =             wr6 =            wr10 =           wr14 =
; wr3 =             wr7 =            wr11 =           wr15 =
; wcgr0 =           wcgr1 =          wcgr2 =          wcgr3 =
; ---------------------------------------------------------------------- --
; Prototype in C:	void HXFProfilerStop(HUINT32)
;** ************************************************************************ **
|HXFProfilerStop| PROC	
	; Stop the PMU
	mov r1, #0x00
	mcr p14, 0, r1, c0, c1, 0

	ldr r1, =g_CurrentAccumulator
	str r0, [r1]
	 
	ldr r1, =g_Accumulators 
	mov r12, #ACCUMULATOR_SIZE
	mul r2, r0, r12
	add r0, r1, r2  ; Compute offset to current accumulator
	
	
	ldr r2, [r0,  #ACCUMULATOR_COUNT_OFFSET_L]
	add r2, r2, #1
	str r2, [r0, #ACCUMULATOR_COUNT_OFFSET_L]
	
	ldr r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_L]
	mrc p14, 0, r12, c1, c1, 0	; Get Cycle Counter
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_CYCLES_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_H]
	
	ldr r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_L]
	mrc p14, 0, r12, c0, c2, 0	; Get PMNC0
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_0_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_H]
	
	ldr r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_L]
	mrc p14, 0, r12, c1, c2, 0	; Get PMNC1
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_1_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_H]
		
	ldr r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_L]
	mrc p14, 0, r12, c2, c2, 0	; Get PMNC2
	adds r2, r2, r12
	str r2, [r0, #ACCUMULATOR_EVENT_2_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_H]
		
	ldr r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_L]
	mrc p14, 0, r12, c3, c2, 0	; Get PMNC3
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_3_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_H]
		
	mov pc, lr
	ENDP
;** ************************************************************************ **

;** ************************************************************************ **
; Name:	HXFProfilerTransition
; Description:
; ---------------------------------------------------------------------- --
; Register Map -
; ---------------------------------------------------------------------- --
; r0 = AccId	    r4 =            r8 =            r12 =
; r1 =              r5 =            r9 =            r13 = sp
; r2 =              r6 =            r10 =           r14 = lr (return)
; r3 =              r7 =            r11 =           r15 = pc
; ---------------------------------------------------------------------- --
; wr0 =             wr4 =            wr8 =            wr12 =
; wr1 =             wr5 =            wr9 =            wr13 =
; wr2 =             wr6 =            wr10 =           wr14 =
; wr3 =             wr7 =            wr11 =           wr15 =
; wcgr0 =           wcgr1 =          wcgr2 =          wcgr3 =
; ---------------------------------------------------------------------- --
; Prototype in C:	void HXFProfilerTransition(HUINT32)
;** ************************************************************************ **
|HXFProfilerTransition| PROC	
	; Stop the PMU
	mov r1, #0x00
	mcr p14, 0, r1, c0, c1, 0

	ldr r1, =g_CurrentAccumulator
	ldr r2, [r1] ; load current Accumulator
	str r0, [r1] ; Store New Accumulator
	 
	ldr r1, =g_Accumulators 
	mov r12, #ACCUMULATOR_SIZE
	mul r0, r2, r12
	add r0, r1, r0  ; Compute offset to current accumulator
		
	ldr r2, [r0,  #ACCUMULATOR_COUNT_OFFSET_L]
	add r2, r2, #1
	str r2, [r0, #ACCUMULATOR_COUNT_OFFSET_L]
	
	ldr r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_L]
	mrc p14, 0, r12, c1, c1, 0	; Get Cycle Counter
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_CYCLES_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_CYCLES_OFFSET_H]

	ldr r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_L]
	mrc p14, 0, r12, c0, c2, 0	; Get PMNC0
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_0_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_0_OFFSET_H]
		
	ldr r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_L]
	mrc p14, 0, r12, c1, c2, 0	; Get PMNC1
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_1_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_1_OFFSET_H]
		
	ldr r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_L]
	mrc p14, 0, r12, c2, c2, 0	; Get PMNC2	
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_2_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_2_OFFSET_H]
		
	ldr r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_L]
	mrc p14, 0, r12, c3, c2, 0	; Get PMNC3
	adds r2, r2, r12	
	str r2, [r0, #ACCUMULATOR_EVENT_3_OFFSET_L]
	ldrcs r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_H]
	adccs r2, r2, #0	
	strcs r2, [r0,  #ACCUMULATOR_EVENT_3_OFFSET_H]
		
	; Restart the PMU
	mov r0, #0x01
	mcr p14, 0, r0, c0, c1, 0

	; reset and enable counters
	mov r3, #0x07
	mcr p14, 0, r3, c0, c1, 0
		
	mov pc, lr
	ENDP
;** ************************************************************************ **


	ENDIF ; :DEF:HXF_PROFILE

;** ************************************************************************ **
	END

;/* ************************************************************************ *\
;** ************************************************************************ **	
;** EOF
;** ************************************************************************ **		
;\* ************************************************************************ */

⌨️ 快捷键说明

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