mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-09 14:47:02 +02:00
#368 GBA matrixRotateYXZ_fast_asm (pre-shifted angles)
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#ifndef H_COMMON
|
#ifndef H_COMMON
|
||||||
#define H_COMMON
|
#define H_COMMON
|
||||||
//#define STATIC_ITEMS
|
//#define STATIC_ITEMS
|
||||||
#define PROFILING
|
//#define PROFILING
|
||||||
#ifdef PROFILING
|
#ifdef PROFILING
|
||||||
#define STATIC_ITEMS
|
#define STATIC_ITEMS
|
||||||
#define PROFILE_FRAMETIME
|
#define PROFILE_FRAMETIME
|
||||||
|
@@ -5,9 +5,10 @@ angles .req r1 // arg
|
|||||||
x .req pos
|
x .req pos
|
||||||
y .req angles
|
y .req angles
|
||||||
z .req r2
|
z .req r2
|
||||||
|
mask .req r3
|
||||||
packed .req r12
|
packed .req r12
|
||||||
|
|
||||||
.extern matrixTranslateRel_asm, matrixRotateYXZ_asm
|
.extern matrixTranslateRel_asm, matrixRotateYXZ_fast_asm
|
||||||
|
|
||||||
.global matrixFrame_asm
|
.global matrixFrame_asm
|
||||||
matrixFrame_asm:
|
matrixFrame_asm:
|
||||||
@@ -20,20 +21,14 @@ matrixFrame_asm:
|
|||||||
|
|
||||||
bl matrixTranslateRel_asm // doesn't affect user mode r12
|
bl matrixTranslateRel_asm // doesn't affect user mode r12
|
||||||
|
|
||||||
lsl z, packed, #22
|
mov mask, #4096
|
||||||
asr z, #16
|
sub mask, #4
|
||||||
|
|
||||||
lsr packed, #10
|
and z, mask, packed, lsl #2
|
||||||
|
and y, mask, packed, lsr #(10 - 2)
|
||||||
lsl y, packed, #22
|
and x, mask, packed, lsr #(20 - 2)
|
||||||
asr y, #16
|
|
||||||
|
|
||||||
lsr packed, #10
|
|
||||||
|
|
||||||
lsl x, packed, #22
|
|
||||||
asr x, #16
|
|
||||||
|
|
||||||
ldmfd sp!, {lr}
|
ldmfd sp!, {lr}
|
||||||
b matrixRotateYXZ_asm
|
b matrixRotateYXZ_fast_asm
|
||||||
|
|
||||||
// TODO matrixFrameLerp
|
// TODO matrixFrameLerp
|
@@ -142,7 +142,7 @@ cosZ .req angleZ
|
|||||||
mask .req tmp
|
mask .req tmp
|
||||||
mm .req tmp
|
mm .req tmp
|
||||||
|
|
||||||
.global matrixRotateYXZ_asm
|
.global matrixRotateYXZ_asm, matrixRotateYXZ_fast_asm
|
||||||
matrixRotateYXZ_asm:
|
matrixRotateYXZ_asm:
|
||||||
mov mask, #0xFF
|
mov mask, #0xFF
|
||||||
orr mask, mask, #0xF00 ; mask = 0xFFF
|
orr mask, mask, #0xF00 ; mask = 0xFFF
|
||||||
@@ -151,6 +151,7 @@ matrixRotateYXZ_asm:
|
|||||||
and angleY, mask, angleY, lsr #4
|
and angleY, mask, angleY, lsr #4
|
||||||
and angleZ, mask, angleZ, lsr #4
|
and angleZ, mask, angleZ, lsr #4
|
||||||
|
|
||||||
|
matrixRotateYXZ_fast_asm:
|
||||||
orr mask, angleX, angleY
|
orr mask, angleX, angleY
|
||||||
orrs mask, mask, angleZ
|
orrs mask, mask, angleZ
|
||||||
bxeq lr
|
bxeq lr
|
||||||
|
Reference in New Issue
Block a user