2 * (C) GraÅžvydas "notaz" Ignotas, 2014
4 * This work is licensed under the terms of GNU GPL version 2 or later.
5 * See the COPYING file in the top-level directory.
8 #include "arm_features.h"
14 .macro do_mac_flags rr1 rr2 rr3
20 * ProcessVertexData register map:
42 * 12 24 gRSPworldProject _11,_21,_31,_41
44 * 13 26 gRSPworldProject _12,_22,_32,_42
46 * 14 28 gRSPworldProject _13,_23,_33,_43
48 * 15 30 gRSPworldProject _14,_24,_34,_44
52 * short y, x, flag, z, tv, tu;
57 * r0 - XVECTOR4 *g_vtxTransformed
58 * r1 - XVECTOR4 *g_vecProjected
59 * r2 - uint32 *g_dwVtxDifColor
60 * r3 - VECTOR2 *g_fVtxTxtCoords
61 * sp+00 - float *g_fFogCoord
62 * sp+04 - uint32 *g_clipFlag2
64 * r11 sp+08 - uint32 dwNum
65 * sp+0c - int neon_flags
66 * r4 sp+10 - FiddledVtx vtx[]
67 * sp+14 - Light *gRSPlights
68 * sp+18 - float *fRSPAmbientLightRGBA
69 * sp+1c - XMATRIX *gRSPworldProjectTransported
70 * sp+20 - XMATRIX *gRSPmodelViewTop
71 * sp+24 - uint32 gRSPnumLights
72 * sp+28 - float gRSPfFogMin
82 ldr r12, [sp, #0x64+0x1c]
83 ldr r11, [sp, #0x64+0x08]
84 vld1.32 {q12,q13}, [r12, :128]! @ load gRSPworldProject
85 vld1.32 {q14,q15}, [r12, :128]
88 vld1.16 d4[1], [r4]! @ y
89 vld1.16 d4[0], [r4]! @ x
90 vld1.16 d4[3], [r4]! @ flag
91 vld1.16 d4[2], [r4]! @ z
92 vld1.16 d5[1], [r4]! @ v
93 vld1.16 d5[0], [r4]! @ u
96 mov r12, #0x3f800000 @ 1.0f
97 vcvt.f32.s32 q2, q0 @ q2 = vtx_raw
98 vcvt.f32.s32 q3, q1 @ d6 = float u, v
99 vmov.32 d5[1], r12 @ q2 = { x, y, x, 1.0f }
104 /* wrt u,v to g_fVtxTxtCoords */ vst1.32 {d6}, [r3]!
105 vpadd.f32 d7, d14, d15
106 vpadd.f32 d6, d12, d13
107 vpadd.f32 d5, d10, d11
109 vpadd.f32 d1, d6, d7 @ g_vtxTransformed .z .w
110 vpadd.f32 d0, d4, d5 @ g_vtxTransformed .x .y
113 vrecpe.f32 d2, d1 @ inv .z(unused) .w
114 vrecps.f32 d3, d1, d2 @ step
115 /* wrt g_vtxTransformed */ vst1.32 {q0}, [r0]!
116 vmul.f32 d2, d3, d2 @ better inv
117 vrecps.f32 d3, d1, d2 @ step
118 vmul.f32 d2, d3, d2 @ better inv
120 vrecps.f32 d3, d1, d2 @ step
121 vmul.f32 d2, d3, d2 @ better inv
125 /* wrt g_vtxTransformed */ vst1.32 {q0}, [r0]!
129 vmul.f32 q7, q0, d2[1]
132 /* wrt g_vecProjected */ vst1.32 {q7}, [r1]!
136 .size pv_neon, .-pv_neon
139 @ vim:filetype=armasm