1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-09 14:47:02 +02:00

#368 add divLUT macro

This commit is contained in:
XProger
2022-02-12 16:13:16 +03:00
parent 594541d6f4
commit 1744204cd8
13 changed files with 38 additions and 55 deletions

View File

@@ -69,10 +69,9 @@ SIZE = (6 * 3 * 4)
mov dz, z, lsr #(FIXED_SHIFT + 6) mov dz, z, lsr #(FIXED_SHIFT + 6)
add dz, dz, z, lsr #(FIXED_SHIFT + 4) add dz, dz, z, lsr #(FIXED_SHIFT + 4)
add tmp, dz, #DIVLUT_ADDR divLUT tmp, dz
ldrh dz, [tmp, dz] mul x, tmp, x
mul x, dz, x mul y, tmp, y
mul y, dz, y
cmp x, rMinX cmp x, rMinX
movlt rMinX, x movlt rMinX, x

View File

@@ -92,6 +92,11 @@
.equ MIN_INT32, 0x80000000 .equ MIN_INT32, 0x80000000
.equ MAX_INT32, 0x7FFFFFFF .equ MAX_INT32, 0x7FFFFFFF
.macro divLUT res, x
add \res, \x, #DIVLUT_ADDR
ldrh \res, [\res, \x]
.endm
.macro CCW skip .macro CCW skip
ldrsh vx0, [vp0, #VERTEX_X] ldrsh vx0, [vp0, #VERTEX_X]
ldrsh vy0, [vp0, #VERTEX_Y] ldrsh vy0, [vp0, #VERTEX_Y]

View File

@@ -106,8 +106,7 @@ matrixLerp_asm:
lerp _1_2 lerp _1_2
b .done b .done
.mX_dY: .mX_dY:
add tmp, pdiv, #DIVLUT_ADDR divLUT tmp, pdiv
ldrh tmp, [tmp, pdiv]
mul tmp, pmul, tmp mul tmp, pmul, tmp
mov pmul, tmp, asr #8 mov pmul, tmp, asr #8
lerp _X_Y lerp _X_Y

View File

@@ -55,8 +55,7 @@ rasterizeF_asm:
cmp Lh, #1 // if (Lh == 1) skip Ldx calc cmp Lh, #1 // if (Lh == 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -80,8 +79,7 @@ rasterizeF_asm:
cmp Rh, #1 // if (Rh == 1) skip Rdx calc cmp Rh, #1 // if (Rh == 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16

View File

@@ -109,8 +109,7 @@ rasterizeFT_asm:
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -142,8 +141,7 @@ rasterizeFT_asm:
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16
@@ -172,8 +170,7 @@ rasterizeFT_asm:
add ptr, pixel, tmp // ptr = pixel + x1 add ptr, pixel, tmp // ptr = pixel + x1
add inv, width, #DIVLUT_ADDR divLUT inv, width // inv = FixedInvU(width)
ldrh inv, [inv, width] // inv = FixedInvU(width)
sub dtdx, Rt, Lt // duv = Rt - Lt sub dtdx, Rt, Lt // duv = Rt - Lt
scaleUV dtdx, du, dv, inv scaleUV dtdx, du, dv, inv

View File

@@ -109,8 +109,7 @@ rasterizeFTA_asm:
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -142,8 +141,7 @@ rasterizeFTA_asm:
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16
@@ -172,8 +170,7 @@ rasterizeFTA_asm:
add ptr, pixel, tmp // ptr = pixel + x1 add ptr, pixel, tmp // ptr = pixel + x1
add inv, width, #DIVLUT_ADDR divLUT inv, width // inv = FixedInvU(width)
ldrh inv, [inv, width] // inv = FixedInvU(width)
sub dtdx, Rt, Lt // duv = Rt - Lt sub dtdx, Rt, Lt // duv = Rt - Lt
scaleUV dtdx, du, dv, inv scaleUV dtdx, du, dv, inv

View File

@@ -130,8 +130,7 @@ rasterizeGT_asm:
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -171,8 +170,7 @@ rasterizeGT_asm:
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16
@@ -214,8 +212,7 @@ rasterizeGT_asm:
add ptr, pixel, Lx // ptr = pixel + x1 add ptr, pixel, Lx // ptr = pixel + x1
add inv, width, #DIVLUT_ADDR divLUT inv, width // inv = FixedInvU(width)
ldrh inv, [inv, width] // inv = FixedInvU(width)
sub dtdx, Rt, Lt // dtdx = Rt - Lt sub dtdx, Rt, Lt // dtdx = Rt - Lt
scaleUV dtdx, du, dv, inv scaleUV dtdx, du, dv, inv

View File

@@ -132,8 +132,7 @@ rasterizeGTA_asm:
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -173,8 +172,7 @@ rasterizeGTA_asm:
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16
@@ -216,8 +214,7 @@ rasterizeGTA_asm:
add ptr, pixel, Lx // ptr = pixel + x1 add ptr, pixel, Lx // ptr = pixel + x1
add inv, width, #DIVLUT_ADDR divLUT inv, width // inv = FixedInvU(width)
ldrh inv, [inv, width] // inv = FixedInvU(width)
sub dtdx, Rt, Lt // dtdx = Rt - Lt sub dtdx, Rt, Lt // dtdx = Rt - Lt
scaleUV dtdx, du, dv, inv scaleUV dtdx, du, dv, inv

View File

@@ -51,8 +51,7 @@ rasterizeS_asm:
cmp Lh, #1 // if (Lh == 1) skip Ldx calc cmp Lh, #1 // if (Lh == 1) skip Ldx calc
beq .calc_left_end beq .calc_left_end
add tmp, Lh, #DIVLUT_ADDR divLUT tmp, Lh // tmp = FixedInvU(Lh)
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
ldrsh Ldx, [L, #VERTEX_X] ldrsh Ldx, [L, #VERTEX_X]
sub Ldx, Lx, asr #16 sub Ldx, Lx, asr #16
@@ -76,8 +75,7 @@ rasterizeS_asm:
cmp Rh, #1 // if (Rh == 1) skip Rdx calc cmp Rh, #1 // if (Rh == 1) skip Rdx calc
beq .calc_right_end beq .calc_right_end
add tmp, Rh, #DIVLUT_ADDR divLUT tmp, Rh // tmp = FixedInvU(Rh)
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
ldrsh Rdx, [R, #VERTEX_X] ldrsh Rdx, [R, #VERTEX_X]
sub Rdx, Rx, asr #16 sub Rdx, Rx, asr #16

View File

@@ -49,11 +49,10 @@ sphereIsVisible_asm:
mov z, vz, lsr #(FIXED_SHIFT + 6) mov z, vz, lsr #(FIXED_SHIFT + 6)
add z, z, vz, lsr #(FIXED_SHIFT + 4) add z, z, vz, lsr #(FIXED_SHIFT + 4)
add tmp, z, #DIVLUT_ADDR divLUT tmp, z
ldrh z, [tmp, z] mul x, tmp, x
mul x, z, x mul y, tmp, y
mul y, z, y mul r, tmp, r
mul r, z, r
mov x, x, asr #(16 - PROJ_SHIFT) mov x, x, asr #(16 - PROJ_SHIFT)
mov y, y, lsl #(PROJ_SHIFT) mov y, y, lsl #(PROJ_SHIFT)

View File

@@ -93,10 +93,9 @@ transformMesh_asm:
// project // project
mov dz, z, lsr #4 mov dz, z, lsr #4
add dz, dz, z, lsr #6 add dz, dz, z, lsr #6
add tmp, dz, #DIVLUT_ADDR divLUT tmp, dz
ldrh dz, [tmp, dz] mul x, tmp, x
mul x, dz, x mul y, tmp, y
mul y, dz, y
mov x, x, asr #(16 - PROJ_SHIFT) mov x, x, asr #(16 - PROJ_SHIFT)
mov y, y, asr #(16 - PROJ_SHIFT) mov y, y, asr #(16 - PROJ_SHIFT)

View File

@@ -110,10 +110,9 @@ transformRoom_asm:
// project // project
mov dz, z, lsr #6 mov dz, z, lsr #6
add dz, dz, z, lsr #4 add dz, dz, z, lsr #4
add tmp, dz, #DIVLUT_ADDR divLUT tmp, dz
ldrh dz, [tmp, dz] mul x, tmp, x
mul x, dz, x mul y, tmp, y
mul y, dz, y
mov x, x, asr #(16 - PROJ_SHIFT) mov x, x, asr #(16 - PROJ_SHIFT)
mov y, y, asr #(16 - PROJ_SHIFT) mov y, y, asr #(16 - PROJ_SHIFT)

View File

@@ -136,10 +136,9 @@ transformRoomUW_asm:
// project // project
mov dz, z, lsr #6 mov dz, z, lsr #6
add dz, dz, z, lsr #4 add dz, dz, z, lsr #4
add tmp, dz, #DIVLUT_ADDR divLUT tmp, dz
ldrh dz, [tmp, dz] mul x, tmp, x
mul x, dz, x mul y, tmp, y
mul y, dz, y
mov x, x, asr #(16 - PROJ_SHIFT) mov x, x, asr #(16 - PROJ_SHIFT)
mov y, y, asr #(16 - PROJ_SHIFT) mov y, y, asr #(16 - PROJ_SHIFT)