Update of /cvsroot/monetdb/MonetDB/src/gdk
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1920/src/gdk
Modified Files:
gdk_ssort.mx
Log Message:
fixed unaligned data access on titan
Index: gdk_ssort.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB/src/gdk/gdk_ssort.mx,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- gdk_ssort.mx 4 Oct 2007 10:33:44 -0000 1.10
+++ gdk_ssort.mx 14 Nov 2007 12:39:24 -0000 1.11
@@ -171,6 +171,37 @@
} \
} while (0)
+#define COPY_anyN(d,s,w,N) do { \
+ int i; \
+ switch (w) { \
+ case 0: \
+ break; \
+ case sizeof(bte): \
+ for(i=0; i<N; i++) \
+ ((bte*)(d))[i] = ((bte*)(s))[i];\
+ break; \
+ case sizeof(sht): \
+ for(i=0; i<N; i++) \
+ ((sht*)(d))[i] = ((sht*)(s))[i];\
+ break; \
+ case sizeof(int): \
+ for(i=0; i<N; i++) \
+ ((int*)(d))[i] = ((int*)(s))[i];\
+ break; \
+ case sizeof(lng): \
+ for(i=0; i<N; i++) \
+ ((lng*)(d))[i] = ((lng*)(s))[i];\
+ break; \
+ case 2 * sizeof(lng): \
+ for(i=0; i<(N<2); i++) \
+ ((lng*)(d))[i] = ((lng*)(s))[i];\
+ break; \
+ default: \
+ memcpy((d), (s), (size_t) (w)*N); \
+ break; \
+ } \
+ } while (0)
+
#define ISLT_any(X, Y, ms) (((ms)->heap ? (*(ms)->compare)((ms)->heap + *
(var_t *) (X), (ms)->heap + * (var_t *) (Y)) : (*(ms)->compare)((X), (Y))) < 0)
#define ISLT_any_rev(X, Y, ms) (((ms)->heap ? (*(ms)->compare)((ms)->heap + *
(var_t *) (X), (ms)->heap + * (var_t *) (Y)) : (*(ms)->compare)((X), (Y))) > 0)
@= islt
@@ -498,8 +529,8 @@
return -1;
if (MERGE_GETMEMT(ms, na) < 0)
return -1;
- COPY_any(ms->ah, PTRADD(ms->bh, pa, ms->hs), na * ms->hs);
- COPY_any(ms->at, PTRADD(ms->bt, pa, ms->ts), na * ms->ts);
+ COPY_anyN(ms->ah, PTRADD(ms->bh, pa, ms->hs), ms->hs, na);
+ COPY_anyN(ms->at, PTRADD(ms->bt, pa, ms->ts), ms->ts, na);
dest = pa;
pa = 0;
@@ -563,8 +594,8 @@
k = [EMAIL PROTECTED]@2(PTRADD(ms->bh, pb,
ms->hs), PTRADD(ms->ah, pa, ms->hs), na, 0, ms);
acount = k;
if (k) {
- COPY_any(PTRADD(ms->bh, dest, ms->hs),
PTRADD(ms->ah, pa, ms->hs), k * ms->hs);
- COPY_any(PTRADD(ms->bt, dest, ms->ts),
PTRADD(ms->at, pa, ms->ts), k * ms->ts);
+ COPY_anyN(PTRADD(ms->bh, dest, ms->hs),
PTRADD(ms->ah, pa, ms->hs), ms->hs, k);
+ COPY_anyN(PTRADD(ms->bt, dest, ms->ts),
PTRADD(ms->at, pa, ms->ts), ms->ts, k);
dest += k;
pa += k;
na -= k;
@@ -609,8 +640,8 @@
}
SucceedA:
if (na) {
- COPY_any(PTRADD(ms->bh, dest, ms->hs), PTRADD(ms->ah,
pa, ms->hs), na * ms->hs);
- COPY_any(PTRADD(ms->bt, dest, ms->ts), PTRADD(ms->at,
pa, ms->ts), na * ms->ts);
+ COPY_anyN(PTRADD(ms->bh, dest, ms->hs), PTRADD(ms->ah,
pa, ms->hs), ms->hs, na);
+ COPY_anyN(PTRADD(ms->bt, dest, ms->ts), PTRADD(ms->at,
pa, ms->ts), ms->ts, na);
}
return 0;
CopyB:
@@ -638,8 +669,8 @@
if (MERGE_GETMEMT(ms, nb) < 0)
return -1;
dest = pb + nb - 1;
- COPY_any(ms->ah, PTRADD(ms->bh, pb, ms->hs), nb * ms->hs);
- COPY_any(ms->at, PTRADD(ms->bt, pb, ms->ts), nb * ms->ts);
+ COPY_anyN(ms->ah, PTRADD(ms->bh, pb, ms->hs), ms->hs, nb);
+ COPY_anyN(ms->at, PTRADD(ms->bt, pb, ms->ts), ms->ts, nb);
basea = pa;
baseb = 0;
pb = nb - 1;
@@ -761,8 +792,8 @@
}
SucceedB:
if (nb) {
- COPY_any(PTRADD(ms->bh, dest + 1 - nb, ms->hs),
PTRADD(ms->ah, baseb, ms->hs), nb * ms->hs);
- COPY_any(PTRADD(ms->bt, dest + 1 - nb, ms->ts),
PTRADD(ms->at, baseb, ms->ts), nb * ms->ts);
+ COPY_anyN(PTRADD(ms->bh, dest + 1 - nb, ms->hs),
PTRADD(ms->ah, baseb, ms->hs), ms->hs, nb);
+ COPY_anyN(PTRADD(ms->bt, dest + 1 - nb, ms->ts),
PTRADD(ms->at, baseb, ms->ts), ms->ts, nb);
}
return 0;
CopyA:
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins