annotate src/madplug/SFMT-sse2.h @ 2284:d19b53359b24

cleaned up the sndfile wav plugin, currently limiting it ONLY TO WAV PLAYBACK. if somebody is more experienced with it and wants to restore the other formats, go ahead (maybe change the name of the plugin too?).
author mf0102 <0102@gmx.at>
date Wed, 09 Jan 2008 15:41:22 +0100
parents b8dd67ad7b86
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
1 /**
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
2 * @file SFMT-sse2.h
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
3 * @brief SIMD oriented Fast Mersenne Twister(SFMT) for Intel SSE2
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
4 *
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
5 * @author Mutsuo Saito (Hiroshima University)
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
6 * @author Makoto Matsumoto (Hiroshima University)
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
7 *
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
8 * @note We assume LITTLE ENDIAN in this file
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
9 *
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
10 * Copyright (C) 2006, 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
11 * University. All rights reserved.
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
12 *
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
13 * The new BSD License is applied to this software, see LICENSE.txt
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
14 */
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
15
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
16 #ifndef SFMT_SSE2_H
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
17 #define SFMT_SSE2_H
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
18
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
19 inline static __m128i mm_recursion(__m128i *a, __m128i *b, __m128i c,
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
20 __m128i d, __m128i mask) ALWAYSINLINE;
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
21
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
22 /**
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
23 * This function represents the recursion formula.
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
24 * @param a a 128-bit part of the interal state array
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
25 * @param b a 128-bit part of the interal state array
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
26 * @param c a 128-bit part of the interal state array
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
27 * @param d a 128-bit part of the interal state array
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
28 * @param mask 128-bit mask
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
29 * @return output
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
30 */
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
31 inline static __m128i mm_recursion(__m128i *a, __m128i *b,
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
32 __m128i c, __m128i d, __m128i mask) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
33 __m128i v, x, y, z;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
34
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
35 x = _mm_load_si128(a);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
36 y = _mm_srli_epi32(*b, SR1);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
37 z = _mm_srli_si128(c, SR2);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
38 v = _mm_slli_epi32(d, SL1);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
39 z = _mm_xor_si128(z, x);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
40 z = _mm_xor_si128(z, v);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
41 x = _mm_slli_si128(x, SL2);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
42 y = _mm_and_si128(y, mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
43 z = _mm_xor_si128(z, x);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
44 z = _mm_xor_si128(z, y);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
45 return z;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
46 }
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
47
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
48 /**
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
49 * This function fills the internal state array with pseudorandom
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
50 * integers.
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
51 */
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
52 inline static void gen_rand_all(void) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
53 int i;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
54 __m128i r, r1, r2, mask;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
55 mask = _mm_set_epi32(MSK4, MSK3, MSK2, MSK1);
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
56
1386
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
57 r1 = _mm_load_si128(&sfmt[N - 2].si);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
58 r2 = _mm_load_si128(&sfmt[N - 1].si);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
59 for (i = 0; i < N - POS1; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
60 r = mm_recursion(&sfmt[i].si, &sfmt[i + POS1].si, r1, r2, mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
61 _mm_store_si128(&sfmt[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
62 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
63 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
64 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
65 for (; i < N; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
66 r = mm_recursion(&sfmt[i].si, &sfmt[i + POS1 - N].si, r1, r2, mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
67 _mm_store_si128(&sfmt[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
68 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
69 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
70 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
71 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
72
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
73 /**
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
74 * This function fills the user-specified array with pseudorandom
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
75 * integers.
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
76 *
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
77 * @param array an 128-bit array to be filled by pseudorandom numbers.
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
78 * @param size number of 128-bit pesudorandom numbers to be generated.
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
79 */
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
80 inline static void gen_rand_array(w128_t *array, int size) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
81 int i, j;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
82 __m128i r, r1, r2, mask;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
83 mask = _mm_set_epi32(MSK4, MSK3, MSK2, MSK1);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
84
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
85 r1 = _mm_load_si128(&sfmt[N - 2].si);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
86 r2 = _mm_load_si128(&sfmt[N - 1].si);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
87 for (i = 0; i < N - POS1; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
88 r = mm_recursion(&sfmt[i].si, &sfmt[i + POS1].si, r1, r2, mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
89 _mm_store_si128(&array[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
90 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
91 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
92 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
93 for (; i < N; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
94 r = mm_recursion(&sfmt[i].si, &array[i + POS1 - N].si, r1, r2, mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
95 _mm_store_si128(&array[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
96 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
97 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
98 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
99 /* main loop */
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
100 for (; i < size - N; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
101 r = mm_recursion(&array[i - N].si, &array[i + POS1 - N].si, r1, r2,
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
102 mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
103 _mm_store_si128(&array[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
104 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
105 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
106 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
107 for (j = 0; j < 2 * N - size; j++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
108 r = _mm_load_si128(&array[j + size - N].si);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
109 _mm_store_si128(&sfmt[j].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
110 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
111 for (; i < size; i++) {
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
112 r = mm_recursion(&array[i - N].si, &array[i + POS1 - N].si, r1, r2,
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
113 mask);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
114 _mm_store_si128(&array[i].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
115 _mm_store_si128(&sfmt[j++].si, r);
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
116 r1 = r2;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
117 r2 = r;
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
118 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
119 }
b8dd67ad7b86 update SFMT files to version 1.3. please let me know if it break on altivec box.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 922
diff changeset
120
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents:
diff changeset
121 #endif