Variable Simple
This commit is contained in:
@ -73,7 +73,7 @@ static SV_LIM64;
|
|||||||
unsigned char *TEMPLATE2(vsenc, USIZE)(uint_t *__restrict in, int n, unsigned char *__restrict op) {
|
unsigned char *TEMPLATE2(vsenc, USIZE)(uint_t *__restrict in, int n, unsigned char *__restrict op) {
|
||||||
unsigned xm,m,r,x;
|
unsigned xm,m,r,x;
|
||||||
uint_t *e = in+n,*ip;
|
uint_t *e = in+n,*ip;
|
||||||
for(ip = in; ip < e; ) {
|
for(ip = in; ip < e; ) { __builtin_prefetch(ip+64, 0);
|
||||||
#ifdef USE_RLE
|
#ifdef USE_RLE
|
||||||
if(ip+4 < e && *ip == *(ip+1)) {
|
if(ip+4 < e && *ip == *(ip+1)) {
|
||||||
uint_t *q = ip+1;
|
uint_t *q = ip+1;
|
||||||
@ -301,7 +301,7 @@ unsigned char *TEMPLATE2(vsenc, USIZE)(uint_t *__restrict in, int n, unsigned ch
|
|||||||
unsigned char *TEMPLATE2(vsdec, USIZE)(unsigned char *__restrict ip, int n, uint_t *__restrict op) {
|
unsigned char *TEMPLATE2(vsdec, USIZE)(unsigned char *__restrict ip, int n, uint_t *__restrict op) {
|
||||||
uint_t *op_ = op+n;
|
uint_t *op_ = op+n;
|
||||||
while(op < op_) {
|
while(op < op_) {
|
||||||
register uint64_t w = *(uint64_t *)ip;
|
register uint64_t w = *(uint64_t *)ip; __builtin_prefetch(ip+64, 0);
|
||||||
switch(w & 0xf) {
|
switch(w & 0xf) {
|
||||||
case 0: {
|
case 0: {
|
||||||
unsigned r = (w>>4)&0xf; ip++;
|
unsigned r = (w>>4)&0xf; ip++;
|
||||||
@ -312,11 +312,11 @@ unsigned char *TEMPLATE2(vsdec, USIZE)(unsigned char *__restrict ip, int n, uint
|
|||||||
r = vbget(ip);
|
r = vbget(ip);
|
||||||
}
|
}
|
||||||
uint_t *q = op; op += r+1;
|
uint_t *q = op; op += r+1;
|
||||||
#if defined(__SSE2__) && USIZE == 32
|
#if defined(__SSE2__)
|
||||||
__m128i zv = _mm_setzero_si128();
|
__m128i zv = _mm_setzero_si128();
|
||||||
#endif
|
#endif
|
||||||
while(q < op) {
|
while(q < op) {
|
||||||
#if defined(__SSE2__) && USIZE == 32
|
#if defined(__SSE2__)
|
||||||
_mm_storeu_si128((__m128i *)q,zv); q = (uint_t *)((unsigned char *)q+16);
|
_mm_storeu_si128((__m128i *)q,zv); q = (uint_t *)((unsigned char *)q+16);
|
||||||
_mm_storeu_si128((__m128i *)q,zv); q = (uint_t *)((unsigned char *)q+16);
|
_mm_storeu_si128((__m128i *)q,zv); q = (uint_t *)((unsigned char *)q+16);
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user