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)
|
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
|
||||||
|
@@ -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]
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user