mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-06 05:07:48 +02:00
#368 micro optimizations
This commit is contained in:
@@ -157,16 +157,19 @@
|
|||||||
#define X_INLINE inline
|
#define X_INLINE inline
|
||||||
#define X_NOINLINE __declspec(noinline)
|
#define X_NOINLINE __declspec(noinline)
|
||||||
#define ALIGN4 __declspec(align(4))
|
#define ALIGN4 __declspec(align(4))
|
||||||
|
#define ALIGN8 __declspec(align(8))
|
||||||
#define ALIGN16 __declspec(align(16))
|
#define ALIGN16 __declspec(align(16))
|
||||||
#elif defined(__WATCOMC__) || defined(__3DO__)
|
#elif defined(__WATCOMC__) || defined(__3DO__)
|
||||||
#define X_INLINE inline
|
#define X_INLINE inline
|
||||||
#define X_NOINLINE
|
#define X_NOINLINE
|
||||||
#define ALIGN4
|
#define ALIGN4
|
||||||
|
#define ALIGN8
|
||||||
#define ALIGN16
|
#define ALIGN16
|
||||||
#else
|
#else
|
||||||
#define X_INLINE __attribute__((always_inline)) inline
|
#define X_INLINE __attribute__((always_inline)) inline
|
||||||
#define X_NOINLINE __attribute__((noinline))
|
#define X_NOINLINE __attribute__((noinline))
|
||||||
#define ALIGN4 __attribute__((aligned(4)))
|
#define ALIGN4 __attribute__((aligned(4)))
|
||||||
|
#define ALIGN8 __attribute__((aligned(8)))
|
||||||
#define ALIGN16 __attribute__((aligned(16)))
|
#define ALIGN16 __attribute__((aligned(16)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -689,6 +692,7 @@ struct Face
|
|||||||
int32 ccb_HDDX;
|
int32 ccb_HDDX;
|
||||||
int32 ccb_HDDY;
|
int32 ccb_HDDY;
|
||||||
uint32 ccb_PIXC;
|
uint32 ccb_PIXC;
|
||||||
|
// TODO use 1x1 textures instead of colored faces to remove preamble words (8 bytes per face - 15k)
|
||||||
uint32 ccb_PRE0;
|
uint32 ccb_PRE0;
|
||||||
uint32 ccb_PRE1;
|
uint32 ccb_PRE1;
|
||||||
//int32 ccb_Width;
|
//int32 ccb_Width;
|
||||||
|
@@ -32,6 +32,8 @@ tmp .req flags
|
|||||||
vertices .req vg2
|
vertices .req vg2
|
||||||
next .req vp0
|
next .req vp0
|
||||||
|
|
||||||
|
SP_SIZE = 4
|
||||||
|
|
||||||
.global faceAddMeshQuads_asm
|
.global faceAddMeshQuads_asm
|
||||||
faceAddMeshQuads_asm:
|
faceAddMeshQuads_asm:
|
||||||
stmfd sp!, {r4-r11, lr}
|
stmfd sp!, {r4-r11, lr}
|
||||||
@@ -39,6 +41,10 @@ faceAddMeshQuads_asm:
|
|||||||
ldr vp, =gVerticesBase
|
ldr vp, =gVerticesBase
|
||||||
ldr vp, [vp]
|
ldr vp, [vp]
|
||||||
|
|
||||||
|
ldr vertices, =gVertices
|
||||||
|
lsr vertices, #3
|
||||||
|
stmfd sp!, {vertices}
|
||||||
|
|
||||||
ldr face, =gFacesBase
|
ldr face, =gFacesBase
|
||||||
ldr face, [face]
|
ldr face, [face]
|
||||||
|
|
||||||
@@ -90,16 +96,14 @@ faceAddMeshQuads_asm:
|
|||||||
lsr depth, #(2 + OT_SHIFT)
|
lsr depth, #(2 + OT_SHIFT)
|
||||||
|
|
||||||
// faceAdd
|
// faceAdd
|
||||||
ldr vertices, =gVertices
|
ldr vertices, [sp]
|
||||||
sub vp0, vertices
|
rsb vp0, vertices, vp0, lsr #3
|
||||||
sub vp1, vertices
|
rsb vp1, vertices, vp1, lsr #3
|
||||||
sub vp2, vertices
|
rsb vp2, vertices, vp2, lsr #3
|
||||||
sub vp3, vertices
|
rsb vp3, vertices, vp3, lsr #3
|
||||||
|
|
||||||
lsr vp0, #3
|
orr vp1, vp0, vp1, lsl #16
|
||||||
orr vp1, vp0, vp1, lsl #(16 - 3)
|
orr vp3, vp2, vp3, lsl #16
|
||||||
lsr vp2, #3
|
|
||||||
orr vp3, vp2, vp3, lsl #(16 - 3)
|
|
||||||
|
|
||||||
ldr next, [ot, depth, lsl #2]
|
ldr next, [ot, depth, lsl #2]
|
||||||
str face, [ot, depth, lsl #2]
|
str face, [ot, depth, lsl #2]
|
||||||
@@ -111,4 +115,5 @@ faceAddMeshQuads_asm:
|
|||||||
ldr tmp, =gFacesBase
|
ldr tmp, =gFacesBase
|
||||||
str face, [tmp]
|
str face, [tmp]
|
||||||
|
|
||||||
|
add sp, #SP_SIZE
|
||||||
ldmfd sp!, {r4-r11, pc}
|
ldmfd sp!, {r4-r11, pc}
|
||||||
|
@@ -42,6 +42,7 @@ faceAddMeshTriangles_asm:
|
|||||||
|
|
||||||
ldr ot, =gOT
|
ldr ot, =gOT
|
||||||
ldr vertices, =gVertices
|
ldr vertices, =gVertices
|
||||||
|
lsr vertices, #3
|
||||||
|
|
||||||
add polys, #2 // skip flags
|
add polys, #2 // skip flags
|
||||||
|
|
||||||
@@ -82,13 +83,11 @@ faceAddMeshTriangles_asm:
|
|||||||
lsr depth, #(2 + OT_SHIFT)
|
lsr depth, #(2 + OT_SHIFT)
|
||||||
|
|
||||||
// faceAdd
|
// faceAdd
|
||||||
sub vp0, vertices
|
rsb vp0, vertices, vp0, lsr #3
|
||||||
sub vp1, vertices
|
rsb vp1, vertices, vp1, lsr #3
|
||||||
sub vp2, vertices
|
rsb vp2, vertices, vp2, lsr #3
|
||||||
|
|
||||||
lsr vp0, #3
|
orr vp1, vp0, vp1, lsl #16
|
||||||
orr vp1, vp0, vp1, lsl #(16 - 3)
|
|
||||||
lsr vp2, #3
|
|
||||||
|
|
||||||
orr flags, #FACE_TRIANGLE
|
orr flags, #FACE_TRIANGLE
|
||||||
|
|
||||||
|
@@ -32,6 +32,8 @@ tmp .req flags
|
|||||||
vertices .req vg2
|
vertices .req vg2
|
||||||
next .req vp0
|
next .req vp0
|
||||||
|
|
||||||
|
SP_SIZE = 4
|
||||||
|
|
||||||
.global faceAddRoomQuads_asm
|
.global faceAddRoomQuads_asm
|
||||||
faceAddRoomQuads_asm:
|
faceAddRoomQuads_asm:
|
||||||
stmfd sp!, {r4-r11, lr}
|
stmfd sp!, {r4-r11, lr}
|
||||||
@@ -39,6 +41,10 @@ faceAddRoomQuads_asm:
|
|||||||
ldr vp, =gVerticesBase
|
ldr vp, =gVerticesBase
|
||||||
ldr vp, [vp]
|
ldr vp, [vp]
|
||||||
|
|
||||||
|
ldr vertices, =gVertices
|
||||||
|
lsr vertices, #3
|
||||||
|
stmfd sp!, {vertices}
|
||||||
|
|
||||||
ldr face, =gFacesBase
|
ldr face, =gFacesBase
|
||||||
ldr face, [face]
|
ldr face, [face]
|
||||||
|
|
||||||
@@ -101,16 +107,14 @@ faceAddRoomQuads_asm:
|
|||||||
mov depth, vz0, lsr #OT_SHIFT
|
mov depth, vz0, lsr #OT_SHIFT
|
||||||
|
|
||||||
// faceAdd
|
// faceAdd
|
||||||
ldr vertices, =gVertices
|
ldr vertices, [sp]
|
||||||
sub vp0, vertices
|
rsb vp0, vertices, vp0, lsr #3
|
||||||
sub vp1, vertices
|
rsb vp1, vertices, vp1, lsr #3
|
||||||
sub vp2, vertices
|
rsb vp2, vertices, vp2, lsr #3
|
||||||
sub vp3, vertices
|
rsb vp3, vertices, vp3, lsr #3
|
||||||
|
|
||||||
lsr vp0, #3
|
orr vp1, vp0, vp1, lsl #16
|
||||||
orr vp1, vp0, vp1, lsl #(16 - 3)
|
orr vp3, vp2, vp3, lsl #16
|
||||||
lsr vp2, #3
|
|
||||||
orr vp3, vp2, vp3, lsl #(16 - 3)
|
|
||||||
|
|
||||||
ldr next, [ot, depth, lsl #2]
|
ldr next, [ot, depth, lsl #2]
|
||||||
str face, [ot, depth, lsl #2]
|
str face, [ot, depth, lsl #2]
|
||||||
@@ -122,4 +126,5 @@ faceAddRoomQuads_asm:
|
|||||||
ldr tmp, =gFacesBase
|
ldr tmp, =gFacesBase
|
||||||
str face, [tmp]
|
str face, [tmp]
|
||||||
|
|
||||||
|
add sp, #SP_SIZE
|
||||||
ldmfd sp!, {r4-r11, pc}
|
ldmfd sp!, {r4-r11, pc}
|
||||||
|
@@ -42,6 +42,7 @@ faceAddRoomTriangles_asm:
|
|||||||
|
|
||||||
ldr ot, =gOT
|
ldr ot, =gOT
|
||||||
ldr vertices, =gVertices
|
ldr vertices, =gVertices
|
||||||
|
lsr vertices, #3
|
||||||
|
|
||||||
add polys, #2 // skip flags
|
add polys, #2 // skip flags
|
||||||
|
|
||||||
@@ -91,13 +92,11 @@ faceAddRoomTriangles_asm:
|
|||||||
mov depth, vz0, lsr #OT_SHIFT
|
mov depth, vz0, lsr #OT_SHIFT
|
||||||
|
|
||||||
// faceAdd
|
// faceAdd
|
||||||
sub vp0, vertices
|
rsb vp0, vertices, vp0, lsr #3
|
||||||
sub vp1, vertices
|
rsb vp1, vertices, vp1, lsr #3
|
||||||
sub vp2, vertices
|
rsb vp2, vertices, vp2, lsr #3
|
||||||
|
|
||||||
lsr vp0, #3
|
orr vp1, vp0, vp1, lsl #16
|
||||||
orr vp1, vp0, vp1, lsl #(16 - 3)
|
|
||||||
lsr vp2, #3
|
|
||||||
|
|
||||||
orr flags, #FACE_TRIANGLE
|
orr flags, #FACE_TRIANGLE
|
||||||
|
|
||||||
|
@@ -66,8 +66,8 @@ Vertex* gVerticesBase;
|
|||||||
Face* gFacesBase;
|
Face* gFacesBase;
|
||||||
|
|
||||||
EWRAM_DATA uint8 gBackgroundCopy[FRAME_WIDTH * FRAME_HEIGHT]; // EWRAM 37.5k
|
EWRAM_DATA uint8 gBackgroundCopy[FRAME_WIDTH * FRAME_HEIGHT]; // EWRAM 37.5k
|
||||||
EWRAM_DATA Vertex gVertices[MAX_VERTICES]; // EWRAM 16k
|
EWRAM_DATA ALIGN8 Vertex gVertices[MAX_VERTICES]; // EWRAM 16k
|
||||||
EWRAM_DATA Face gFaces[MAX_FACES]; // EWRAM 5k
|
EWRAM_DATA Face gFaces[MAX_FACES]; // EWRAM 30k
|
||||||
Face* gOT[OT_SIZE]; // IWRAM 2.5k
|
Face* gOT[OT_SIZE]; // IWRAM 2.5k
|
||||||
|
|
||||||
enum ClipFlags {
|
enum ClipFlags {
|
||||||
|
Reference in New Issue
Block a user