TurboPFor: Floating Point encode/decode
This commit is contained in:
69
fp.c
69
fp.c
@ -462,72 +462,3 @@ unsigned char *bitg0dec64(unsigned char *in, size_t n, uint64_t *out, uint64_t s
|
||||
}
|
||||
#endif
|
||||
|
||||
/*unsigned char *bitgenc64(uint64_t *in, size_t n, unsigned char *out, uint64_t start) {
|
||||
uint64_t *ip = in, pd = 0, *pp = in,dd;
|
||||
|
||||
bitdef(bw,br);
|
||||
if(n > 4)
|
||||
for(; ip < in+(n-1-4);) {
|
||||
start = ip[0] - start; dd = start-pd; pd = start; start = ip[0]; if(dd) goto a; ip++;
|
||||
start = ip[0] - start; dd = start-pd; pd = start; start = ip[0]; if(dd) goto a; ip++;
|
||||
start = ip[0] - start; dd = start-pd; pd = start; start = ip[0]; if(dd) goto a; ip++;
|
||||
start = ip[0] - start; dd = start-pd; pd = start; start = ip[0]; if(dd) goto a; ip++; __builtin_prefetch(ip+256, 0);
|
||||
continue;
|
||||
a:;
|
||||
ENC64(pp,ip, dd, out);
|
||||
pp = ++ip;
|
||||
}
|
||||
|
||||
for(;ip < in+n;) {
|
||||
start = ip[0] - start; dd = start-pd; pd = start; start = ip[0]; if(dd) goto b; ip++; continue;
|
||||
b: ENC64(pp,ip, dd, out);
|
||||
pp = ++ip;
|
||||
}
|
||||
if(ip > pp) {
|
||||
start = ip[0] - start; dd = start-pd;
|
||||
ENC64(pp, ip, dd, out);
|
||||
}
|
||||
bitflush(bw,br,out);
|
||||
return out;
|
||||
}
|
||||
|
||||
unsigned char *bitgdec64(unsigned char *in, size_t n, uint64_t *out, uint64_t start) { if(!n) return in;
|
||||
uint64_t *op = out, pd = 0;
|
||||
bitdef(bw,br);
|
||||
for(bitdnorm(bw,br,in); op < out+n; ) { __builtin_prefetch(in+384, 0);
|
||||
uint32_t dd = bitpeek(bw,br);
|
||||
if(dd & 1) bitrmv(bw,br, 0+1), dd = 0;
|
||||
else if(dd & 2) bitrmv(bw,br,N2+2), dd = _bzhi_u32(dd>>2, N2);
|
||||
else if(dd & 4) bitrmv(bw,br,N3+3), dd = _bzhi_u32(dd>>3, N3);
|
||||
else if(dd & 8) bitrmv(bw,br,N4+4), dd = _bzhi_u32(dd>>4, N4);
|
||||
else {
|
||||
unsigned b; size_t r; uint64_t *_op;
|
||||
bitget(bw,br, 4+3, b);
|
||||
if(!b) {
|
||||
bitget(bw,br,3,b); bitget64(bw,br,(b+1)*8,r,in); bitdnorm(bw,br,in);
|
||||
for(r+=NL, _op = op; op != _op+(r&~7); op += 8)
|
||||
op[0]=(start+=pd),
|
||||
op[1]=(start+=pd),
|
||||
op[2]=(start+=pd),
|
||||
op[3]=(start+=pd),
|
||||
op[4]=(start+=pd),
|
||||
op[5]=(start+=pd),
|
||||
op[6]=(start+=pd),
|
||||
op[7]=(start+=pd);
|
||||
for(; op != _op+r; op++)
|
||||
*op = (start+=pd);
|
||||
continue;
|
||||
}
|
||||
uint64_t dd;
|
||||
bitget64(bw,br,((b>>4)+1)*8,dd,in);
|
||||
pd += zigzagdec64(dd);
|
||||
*op++ = (start += pd);
|
||||
bitdnorm(bw,br,in); continue;
|
||||
}
|
||||
pd += zigzagdec32(dd);
|
||||
*op++ = (start += pd);
|
||||
bitdnorm(bw,br,in);
|
||||
}
|
||||
return bitalign(bw,br,in);
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user