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:
@@ -69,10 +69,9 @@ SIZE = (6 * 3 * 4)
|
||||
|
||||
mov dz, z, lsr #(FIXED_SHIFT + 6)
|
||||
add dz, dz, z, lsr #(FIXED_SHIFT + 4)
|
||||
add tmp, dz, #DIVLUT_ADDR
|
||||
ldrh dz, [tmp, dz]
|
||||
mul x, dz, x
|
||||
mul y, dz, y
|
||||
divLUT tmp, dz
|
||||
mul x, tmp, x
|
||||
mul y, tmp, y
|
||||
|
||||
cmp x, rMinX
|
||||
movlt rMinX, x
|
||||
|
@@ -92,6 +92,11 @@
|
||||
.equ MIN_INT32, 0x80000000
|
||||
.equ MAX_INT32, 0x7FFFFFFF
|
||||
|
||||
.macro divLUT res, x
|
||||
add \res, \x, #DIVLUT_ADDR
|
||||
ldrh \res, [\res, \x]
|
||||
.endm
|
||||
|
||||
.macro CCW skip
|
||||
ldrsh vx0, [vp0, #VERTEX_X]
|
||||
ldrsh vy0, [vp0, #VERTEX_Y]
|
||||
|
@@ -106,8 +106,7 @@ matrixLerp_asm:
|
||||
lerp _1_2
|
||||
b .done
|
||||
.mX_dY:
|
||||
add tmp, pdiv, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, pdiv]
|
||||
divLUT tmp, pdiv
|
||||
mul tmp, pmul, tmp
|
||||
mov pmul, tmp, asr #8
|
||||
lerp _X_Y
|
||||
|
@@ -55,8 +55,7 @@ rasterizeF_asm:
|
||||
cmp Lh, #1 // if (Lh == 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -80,8 +79,7 @@ rasterizeF_asm:
|
||||
cmp Rh, #1 // if (Rh == 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
|
@@ -109,8 +109,7 @@ rasterizeFT_asm:
|
||||
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -142,8 +141,7 @@ rasterizeFT_asm:
|
||||
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
@@ -172,8 +170,7 @@ rasterizeFT_asm:
|
||||
|
||||
add ptr, pixel, tmp // ptr = pixel + x1
|
||||
|
||||
add inv, width, #DIVLUT_ADDR
|
||||
ldrh inv, [inv, width] // inv = FixedInvU(width)
|
||||
divLUT inv, width // inv = FixedInvU(width)
|
||||
|
||||
sub dtdx, Rt, Lt // duv = Rt - Lt
|
||||
scaleUV dtdx, du, dv, inv
|
||||
|
@@ -109,8 +109,7 @@ rasterizeFTA_asm:
|
||||
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -142,8 +141,7 @@ rasterizeFTA_asm:
|
||||
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
@@ -172,8 +170,7 @@ rasterizeFTA_asm:
|
||||
|
||||
add ptr, pixel, tmp // ptr = pixel + x1
|
||||
|
||||
add inv, width, #DIVLUT_ADDR
|
||||
ldrh inv, [inv, width] // inv = FixedInvU(width)
|
||||
divLUT inv, width // inv = FixedInvU(width)
|
||||
|
||||
sub dtdx, Rt, Lt // duv = Rt - Lt
|
||||
scaleUV dtdx, du, dv, inv
|
||||
|
@@ -130,8 +130,7 @@ rasterizeGT_asm:
|
||||
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -171,8 +170,7 @@ rasterizeGT_asm:
|
||||
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
@@ -214,8 +212,7 @@ rasterizeGT_asm:
|
||||
|
||||
add ptr, pixel, Lx // ptr = pixel + x1
|
||||
|
||||
add inv, width, #DIVLUT_ADDR
|
||||
ldrh inv, [inv, width] // inv = FixedInvU(width)
|
||||
divLUT inv, width // inv = FixedInvU(width)
|
||||
|
||||
sub dtdx, Rt, Lt // dtdx = Rt - Lt
|
||||
scaleUV dtdx, du, dv, inv
|
||||
|
@@ -132,8 +132,7 @@ rasterizeGTA_asm:
|
||||
cmp Lh, #1 // if (Lh <= 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -173,8 +172,7 @@ rasterizeGTA_asm:
|
||||
cmp Rh, #1 // if (Rh <= 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
@@ -216,8 +214,7 @@ rasterizeGTA_asm:
|
||||
|
||||
add ptr, pixel, Lx // ptr = pixel + x1
|
||||
|
||||
add inv, width, #DIVLUT_ADDR
|
||||
ldrh inv, [inv, width] // inv = FixedInvU(width)
|
||||
divLUT inv, width // inv = FixedInvU(width)
|
||||
|
||||
sub dtdx, Rt, Lt // dtdx = Rt - Lt
|
||||
scaleUV dtdx, du, dv, inv
|
||||
|
@@ -51,8 +51,7 @@ rasterizeS_asm:
|
||||
cmp Lh, #1 // if (Lh == 1) skip Ldx calc
|
||||
beq .calc_left_end
|
||||
|
||||
add tmp, Lh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Lh] // tmp = FixedInvU(Lh)
|
||||
divLUT tmp, Lh // tmp = FixedInvU(Lh)
|
||||
|
||||
ldrsh Ldx, [L, #VERTEX_X]
|
||||
sub Ldx, Lx, asr #16
|
||||
@@ -76,8 +75,7 @@ rasterizeS_asm:
|
||||
cmp Rh, #1 // if (Rh == 1) skip Rdx calc
|
||||
beq .calc_right_end
|
||||
|
||||
add tmp, Rh, #DIVLUT_ADDR
|
||||
ldrh tmp, [tmp, Rh] // tmp = FixedInvU(Rh)
|
||||
divLUT tmp, Rh // tmp = FixedInvU(Rh)
|
||||
|
||||
ldrsh Rdx, [R, #VERTEX_X]
|
||||
sub Rdx, Rx, asr #16
|
||||
|
@@ -49,11 +49,10 @@ sphereIsVisible_asm:
|
||||
|
||||
mov z, vz, lsr #(FIXED_SHIFT + 6)
|
||||
add z, z, vz, lsr #(FIXED_SHIFT + 4)
|
||||
add tmp, z, #DIVLUT_ADDR
|
||||
ldrh z, [tmp, z]
|
||||
mul x, z, x
|
||||
mul y, z, y
|
||||
mul r, z, r
|
||||
divLUT tmp, z
|
||||
mul x, tmp, x
|
||||
mul y, tmp, y
|
||||
mul r, tmp, r
|
||||
|
||||
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||
mov y, y, lsl #(PROJ_SHIFT)
|
||||
|
@@ -93,10 +93,9 @@ transformMesh_asm:
|
||||
// project
|
||||
mov dz, z, lsr #4
|
||||
add dz, dz, z, lsr #6
|
||||
add tmp, dz, #DIVLUT_ADDR
|
||||
ldrh dz, [tmp, dz]
|
||||
mul x, dz, x
|
||||
mul y, dz, y
|
||||
divLUT tmp, dz
|
||||
mul x, tmp, x
|
||||
mul y, tmp, y
|
||||
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||
mov y, y, asr #(16 - PROJ_SHIFT)
|
||||
|
||||
|
@@ -110,10 +110,9 @@ transformRoom_asm:
|
||||
// project
|
||||
mov dz, z, lsr #6
|
||||
add dz, dz, z, lsr #4
|
||||
add tmp, dz, #DIVLUT_ADDR
|
||||
ldrh dz, [tmp, dz]
|
||||
mul x, dz, x
|
||||
mul y, dz, y
|
||||
divLUT tmp, dz
|
||||
mul x, tmp, x
|
||||
mul y, tmp, y
|
||||
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||
mov y, y, asr #(16 - PROJ_SHIFT)
|
||||
|
||||
|
@@ -136,10 +136,9 @@ transformRoomUW_asm:
|
||||
// project
|
||||
mov dz, z, lsr #6
|
||||
add dz, dz, z, lsr #4
|
||||
add tmp, dz, #DIVLUT_ADDR
|
||||
ldrh dz, [tmp, dz]
|
||||
mul x, dz, x
|
||||
mul y, dz, y
|
||||
divLUT tmp, dz
|
||||
mul x, tmp, x
|
||||
mul y, tmp, y
|
||||
mov x, x, asr #(16 - PROJ_SHIFT)
|
||||
mov y, y, asr #(16 - PROJ_SHIFT)
|
||||
|
||||
|
Reference in New Issue
Block a user