[pascal]
type
tvector4f = record
x, y, z, w: single;
end;

function Normalize(vec: tvector4f): tvector4f;
asm
movups xmm0, [vec]
movaps xmm1, xmm0
mulps xmm1, xmm1
movaps xmm2, xmm1
shufps xmm2,xmm2, $39
addss xmm1, xmm2
shufps xmm2,xmm2, $39
addss xmm1, xmm2
sqrtss xmm1, xmm1
shufps xmm1, xmm1, $00
divps xmm0, xmm1
movups [result], xmm0
end;[/pascal]

I cheated with SSE