📄 hxftransformarm.s
字号:
cmp r6, #0
movne r3, #0x0
bne HTV_FOG_EXP_STORE
; Get
ldr r4, =g_HXFExpTable
mov r6, r5, lsr #24 ; get major index
mov r5, r5, lsr #16 ; put fractional bits for linear interp in r1
and r5, r5, #0xFF ; mask of weight bits
add r6, r6, r4 ; compute base address of look up table
ldrb r3, [r6] ; Load Base value
ldrb r6, [r6, #1] ; Load Second Value
; compute weighted value
mul r4, r6, r5
rsb r5, r5, #0x100
mul r6, r3, r5
add r3, r6, r4
mov r3, r3, lsr #8
HTV_FOG_EXP_STORE
; Store the result
add r2, r2, r12
strb r3, [r2, #3]
b HTV_FOG_RETURN
ENDP
|HXFFogExp2Proc| PROC
ldrd r4, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X] ; Load in X,Y Position
ldrd r8, [r0, #HXFSTATE_OFFSET_FOG_XFORM_X] ; Load the Fog X, Y Transform
ldrd r6, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z] ; Load in Z, W Position
ldrd r10, [r0, #HXFSTATE_OFFSET_FOG_XFORM_Z] ; Load the Fog Z, W Transform
; fFog = GLES_POWF(GLES_E, -(fDensity * fEyeZ * fDensity * fEyeZ));
wzero wr0
tmia wr0, r4, r8
tmia wr0, r5, r9
tmia wr0, r6, r10
tmia wr0, r7, r11
ldr r5, [r0, #HXFSTATE_OFFSET_FOG_DENSITY] ; Load the Fog End, Fog Inverse Range
wsradg wr0, wr0, wcgr0
textrmsw r3, wr0, #0
; abs(ed)
cmp r3, #0
rsblt r3, r3, #0
; fp = Density * (ed)
smull r4, r5, r3, r5
mov r5, r5, lsl #16
orr r3, r5, r4, lsr #16 ;Concatenating Lo and Hi
;fp^2
smull r4, r5, r3, r3
mov r5, r5, lsl #16
orr r3, r5, r4, lsr #16 ;Concatenating Lo and Hi
rsb r3, r3, #0 ; -(fp^2)
; Clamp to Max
cmp r3, #0
movge r3, #0xFF;
bge HTV_FOG_EXP2_STORE
; r0 * Scale Factor(0xFFFFD1D8) -0.180310 = 1.0f/-5.546000f
mov r4, #0xFF000000
orr r4, r4, #0x00FF0000
orr r4, r4, #0x0000D100
orr r4, r4, #0x000000D8
smull r5, r6, r3, r4
cmp r6, #0
movne r3, #0x0
bne HTV_FOG_EXP2_STORE
; Get
ldr r4, =g_HXFExpTable
mov r6, r5, lsr #24 ; get major index
mov r5, r5, lsr #16 ; put fractional bits for linear interp in r1
and r5, r5, #0xFF ; mask of weight bits
add r6, r6, r4 ; compute base address of look up table
ldrb r3, [r6] ; Load Base value
ldrb r6, [r6, #1] ; Load Second Value
; compute weighted value
mul r4, r6, r5
rsb r5, r5, #0x100
mul r6, r3, r5
add r3, r6, r4
mov r3, r3, lsr #8
HTV_FOG_EXP2_STORE
; Store The result
add r2, r2, r12
strb r3, [r2, #3]
b HTV_FOG_RETURN
ENDP
; ---------------------------------------------------------------------- --
; Register Map - Fog Procs
; ---------------------------------------------------------------------- --
; r0 = pState r4 = Vtx.x r8 = Mtx r12 = pOutVtx
; r1 = flags r5 = Vtx.y r9 = Mtx r13 = sp
; r2 = Spec Off r6 = Vtx.z r10 =Mtx r14 = lr (return)
; r3 = r7 = Vtx.w r11 =Mtx r15 = pc
; ---------------------------------------------------------------------- --
; wr0 = wr4 = wr8 = wr12 = 0xFFFF0000
; wr1 = wr5 = wr9 = wr13 =
; wr2 = wr6 = wr10 = wr14 = Zero
; wr3 = wr7 = wr11 = 0x04040404wr15 =
; wcgr0 = 16 wcgr1 = 12 wcgr2 = 8 wcgr3 = 32
; ---------------------------------------------------------------------- --
|HXFFogLinearProc| PROC
ldrd r4, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_X] ; Load in X,Y Position
ldrd r8, [r0, #HXFSTATE_OFFSET_FOG_XFORM_X] ; Load in Z, W Position
ldrd r6, [r0, #HXFSTATE_OFFSET_STORAGE_VTXPOSITION_Z] ; Load the Fog X, Y Transform
ldrd r10, [r0, #HXFSTATE_OFFSET_FOG_XFORM_Z] ; Load the Fog Z, W Transform
wzero wr0
tmia wr0, r4, r8
tmia wr0, r5, r9
tmia wr0, r6, r10
tmia wr0, r7, r11
ldrd r4, [r0, #HXFSTATE_OFFSET_FOG_END] ; Load the Fog End, Fog Inverse Range
wsradg wr0, wr0, wcgr0
textrmsw r3, wr0, #0
; ed = end - z
add r3, r4, r3
; ed * INV_RANGE(1/(e-s))
smull r4, r5, r3, r5
mov r5, r5, lsl #16
orr r3, r5, r4, lsr #16 ;Concatenating Lo and Hi
; clamp and convert to 0-255
movs r3, r3, asr #8
movlt r3, #0
cmp r3, #255
movgt r3, #255
; Store the result
add r2, r2, r12
strb r3, [r2, #3]
b HTV_FOG_RETURN
ENDP
;** ************************************************************************ **
;** Load Tex Coord Procs
;** ************************************************************************ **
; ---------------------------------------------------------------------- --
; Register Map - Load Tex Coord Procs
; ---------------------------------------------------------------------- --
; r0 = pState r4 = r8 = r12 = pOutVtx
; r1 = flags r5 = r9 = r13 = sp
; r2 = pOutTC r6 = r10 = r14 = lr (return)
; r3 = r7 = r11 = r15 = pc
; ---------------------------------------------------------------------- --
; wr0 = wr4 = wr8 = wr12 = 0xFFFF0000
; wr1 = wr5 = wr9 = wr13 =
; wr2 = wr6 = wr10 = wr14 = Zero
; wr3 = wr7 = wr11 = 0x04040404wr15 =
; wcgr0 = 16 wcgr1 = 12 wcgr2 = 8 wcgr3 = 32
; ---------------------------------------------------------------------- --
;** ************************************************************************ **
|HXFCopyTexCoordFIXED2Proc| PROC
ldr r5, [r6]
ldr r6, [r6, #4]
str r5, [r2]
str r6, [r2, #4]
mov pc, lr
ENDP
|HXFCopyTexCoordINT82Proc| PROC
ldsb r5, [r6]
ldsb r6, [r6, #1]
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r6, r6, lsl #16 ; Shift into fixed position.
str r5, [r2]
str r6, [r2, #4]
mov pc, lr
ENDP
|HXFCopyTexCoordINT162Proc| PROC
ldsh r5, [r6]
ldsh r6, [r6, #2]
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r6, r6, lsl #16 ; Shift into fixed position.
str r5, [r2]
str r6, [r2, #4]
mov pc, lr
ENDP
|HXFTransformTexCoordFIXED2Proc| PROC
ldr r4, [r6]
ldr r5, [r6, #4]
mov r10, #0 ; = 0 otherwise.
mov r11, #HFX_ONE ; Equal to FIXED point 1.0 otherwise.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordFIXED3Proc| PROC
ldr r4, [r6]
ldr r5, [r6, #4]
ldr r10, [r6, #8]
mov r11, #HFX_ONE ; Equal to FIXED point 1.0 otherwise.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordFIXED4Proc| PROC
ldr r4, [r6]
ldr r5, [r6, #4]
ldr r10, [r6, #8]
ldr r11, [r6, #12]
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT82Proc| PROC
ldsb r4, [r6]
ldsb r5, [r6, #1]
mov r10, #0 ; = 0 otherwise.
mov r11, #HFX_ONE ; Equal to fixed point 1.0 otherwise.
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT83Proc| PROC
ldsb r4, [r6]
ldsb r5, [r6, #1]
ldsb r10, [r6, #2]
mov r11, #HFX_ONE ; Equal to fixed point 1.0 otherwise.
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r10, r10, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT84Proc| PROC
ldsb r4, [r6]
ldsb r5, [r6, #1]
ldsb r10, [r6, #2]
ldsb r11, [r6, #3]
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r10, r10, lsl #16 ; Shift into fixed position.
mov r11, r11, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT162Proc| PROC
ldsh r4, [r6]
ldsh r5, [r6, #2]
mov r10, #0 ; = 0 otherwise.
mov r11, #HFX_ONE ; Equal to fixed point 1.0 otherwise.
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT163Proc| PROC
ldsh r4, [r6]
ldsh r5, [r6, #2]
ldsh r10, [r6, #4]
mov r11, #HFX_ONE ; Equal to fixed point 1.0 otherwise.
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r10, r10, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
|HXFTransformTexCoordINT164Proc| PROC
ldsh r4, [r6]
ldsh r5, [r6, #2]
ldsh r10, [r6, #4]
ldsh r11, [r6, #6]
mov r4, r4, lsl #16 ; Shift into fixed position.
mov r5, r5, lsl #16 ; Shift into fixed position.
mov r10, r10, lsl #16 ; Shift into fixed position.
mov r11, r11, lsl #16 ; Shift into fixed position.
b TransformTextureCoords
ENDP
;** ************************************************************************ **
; Name: TransformTextureCoords
; Description:
; Same basic concepts as CopyVertexColors.
; Input Arguments: r0 - HXFState* pState
; Output Argument: None;
; ---------------------------------------------------------------------- --
; Register Map - Transform Tex Coord Procs
; ---------------------------------------------------------------------- --
; r0 = pState r4 = s(in) r8 = r12 = pOutVtx
; r1 = flags r5 = t(in) r9 = r13 = sp
; r2 = pOutTC r6 = r10 = u(in) r14 = lr (return)
; r3 = r7 = r11 = v(in) r15 = pc
; ---------------------------------------------------------------------- --
; wr0 = wr4 = wr8 = wr12 = 0xFFFF0000
; wr1 = wr5 = wr9 = wr13 =
; wr2 = wr6 = wr10 = wr14 = Zero
; wr3 = wr7 = wr11 = 0x04040404wr15 =
; wcgr0 = 16 wcgr1 = 12 wcgr2 = 8 wcgr3 = 32
; ---------------------------------------------------------------------- --
; Prototype in C: N/A
;** ************************************************************************ **
|TransformTextureCoords| PROC
; load Transform Matrix
ldr r3, [r0, #HXFSTATE_OFFSET_PTRANFORMMATRIX]
add r3, r3, r9
; ---------------------------------------------------------------------- --
; Register Map -
; ---------------------------------------------------------------------- --
; r0 = pState r4 = s(in) r8 = r12 = pOutVtx
; r1 = flags r5 = t(in) r9 = r13 = sp
; r2 = pOutTC r6 = r10 = u(in) r14 = lr (return)
; r3 = pMatrix r7 = r11 = v(in) r15 = pc
; ---------------------------------------------------------------------- --
; wr0 = r.x wr4 = wr8 = xadj|yadj wr12 = 0xFFFF0000
; wr1 = r.y wr5 = wr9 = zadj|wadj wr13 =
; wr2 = r.z wr6 =slz v.x|v.y wr10 = wr14 = Zero
; wr3 = r.w wr7 =slz v.z|v.w wr11 = 0x04040404wr15 =
; wcgr0 = 16 wcgr1 = 12 wcgr2 = 8 wcgr3 = 32
; ---------------------------------------------------------------------- --
ldrd r6, [r3] ; Load M_11 & M_12
ldrd r8, [r3, #16] ; Load M_21 & M_22
wzero wr0 ; r.x = 0
tmia wr0, r4, r6 ; r.x += v1.x * M_11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -