Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

114 lines
1.8 KiB

#include "_Alphasm.h"
#define v_a0 a0 /* Output: Normal vector address */
#define v_a1 a1 /* INPUT : Normal vector address */
#define Nx_f16 f16
#define Ny_f17 f17
#define Nz_f18 f18
#define xsq_f19 f19
#define ysq_f20 f20
#define zsq_f21 f21
#define lsq_f24 f24
#define HiLim_f22 f22
#define LoLim_f23 f23
#define Zero_f25 f25
#define FNOP cpys fzero, fzero, fzero
#define EPSILON 0.025
/*
** __glNormalize(__GLfloat *vout, const __GLfloat *vin)
*/
.rdata
ONEPLUSEPSILON:
.float 1.025
ONEMINUSEPSILON:
.float 0.975
.text
.globl __glNormalize
.ent __glNormalize
.extern _InvSqrt
__glNormalize:
.align 4
ldgp gp, 0(pv) /* regenerate gp */
.align 4
lds Nx_f16, 0(v_a1)
lds Ny_f17, 4(v_a1)
lds Nz_f18, 8(v_a1)
lds HiLim_f22, ONEPLUSEPSILON
.align 4
normalize1:
lds LoLim_f23, ONEMINUSEPSILON
muls Nx_f16, Nx_f16, xsq_f19
subq sp, 24, sp
unop
muls Ny_f17, Ny_f17, ysq_f20
stq ra, 0(sp)
unop
unop
stq v_a0, 8(sp)
muls Nz_f18, Nz_f18, zsq_f21
adds xsq_f19, ysq_f20, lsq_f24
unop
stq v_a1, 16(sp)
adds lsq_f24, zsq_f21, lsq_f24
cmpteq lsq_f24, fzero, Zero_f25
fbne Zero_f25, ItsZero
cmptlt lsq_f24, LoLim_f23, LoLim_f23
cmptlt HiLim_f22, lsq_f24, HiLim_f22
fbne LoLim_f23, ItsNotOne1
fbne HiLim_f22, ItsNotOne1
addq sp, 24, sp
br rzero, store1
ItsNotOne1:
fmov lsq_f24, f16
jsr _InvSqrt
ldq v_a0, 8(sp)
ldq ra, 0(sp)
ldq v_a1, 16(sp)
addq sp, 24, sp
lds Nx_f16, 0(v_a1)
lds Ny_f17, 4(v_a1)
lds Nz_f18, 8(v_a1)
muls Nx_f16, f0, Nx_f16
muls Ny_f17, f0, Ny_f17
muls Nz_f18, f0, Nz_f18
/*
** Store current normal
*/
.align 4
store1:
sts Nx_f16, 0(v_a0)
sts Ny_f17, 4(v_a0)
sts Nz_f18, 8(v_a0)
ret
ItsZero:
.align 4
addq sp, 24, sp
fclr Nx_f16
fclr Ny_f17
fclr Nz_f18
br rzero, store1
.end