Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BS2VM_API u64 BSVM2_Double2XFloat2(u64 lv)
- {
- const u64 n0=0x7FFFFFFFFFFFFFFFULL;
- const u64 n1=0x3800000000000000ULL;
- const u64 n2=0x8000000000000000ULL;
- u64 m3;
- u64 lv1;
- lv1=(lv&n0)-n1;
- m3=lv1|(lv1<<1); m3|=m3<<2;
- m3=~(((s64)m3)>>63);
- lv1=((lv1&m3)<<3)|(lv&n2);
- return(lv1);
- }
- BS2VM_API void BSVM2_Pack3DvTo3Xf(u32 *pv, double *px)
- {
- u64 lx, ly, lz;
- lx=((u64 *)px)[0];
- ly=((u64 *)px)[1];
- lz=((u64 *)px)[2];
- if(!((u32)(lx|ly|lz)))
- {
- ((float *)pv)[0]=px[0];
- ((float *)pv)[1]=px[1];
- ((float *)pv)[2]=px[2];
- pv[3]=0;
- return;
- }
- lx=BSVM2_Double2XFloat2(lx);
- ly=BSVM2_Double2XFloat2(ly);
- lz=BSVM2_Double2XFloat2(lz);
- lx+=0x000FFFFFU;
- ly+=0x000FFFFFU;
- lz+=0x001FFFFFU;
- pv[0]=lx>>32;
- pv[1]=ly>>32;
- pv[2]=lz>>32;
- pv[3]=
- ((lz>>22)&0x000003FF)|
- ((ly>>11)&0x001FFC00)|
- ((lx )&0xFFE00000);
- }
- BS2VM_API void BSVM2_Unpack3XfTo3Dv(u32 *pv, double *px)
- {
- const u64 m0=0x8000000000000000ULL;
- const u64 m1=0x7FFFFFFFFFE00000ULL;
- const u64 m2=0x3800000000000000ULL;
- u64 lx, ly, lz;
- u64 lx1, ly1, lz1;
- if(pv[3])
- {
- lx=(((u64)pv[0])<<32)|((u32)(pv[3] ));
- ly=(((u64)pv[1])<<32)|((u32)(pv[3]<<11));
- lz=(((u64)pv[2])<<32)|((u32)(pv[3]<<22));
- lx1=(lx&m0)|(((lx&m1)>>3)+m2);
- ly1=(ly&m0)|(((ly&m1)>>3)+m2);
- lz1=(lz&m0)|(((lz&m1)>>3)+m2);
- px[0]=*(double *)(&lx1);
- px[1]=*(double *)(&ly1);
- px[2]=*(double *)(&lz1);
- }else
- {
- px[0]=((float *)pv)[0];
- px[1]=((float *)pv)[1];
- px[2]=((float *)pv)[2];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement