summaryrefslogtreecommitdiff
path: root/src/systemc/tests/systemc/datatypes/int/arith/arith09
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/tests/systemc/datatypes/int/arith/arith09')
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith09/arith09.cpp122
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith09/golden/arith09.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith09/isaac.h272
3 files changed, 1236 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith09/arith09.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith09/arith09.cpp
new file mode 100644
index 000000000..f918c0506
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith09/arith09.cpp
@@ -0,0 +1,122 @@
+/*****************************************************************************
+
+ Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
+ more contributor license agreements. See the NOTICE file distributed
+ with this work for additional information regarding copyright ownership.
+ Accellera licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith09.cpp --
+
+ Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ MODIFICATION LOG - modifiers, enter your name, affiliation, date and
+ changes you are making here.
+
+ Name, Affiliation, Date:
+ Description of Modification:
+
+ *****************************************************************************/
+
+#include <stdlib.h>
+#include "systemc.h"
+#include "isaac.h"
+
+QTIsaac<8> rng; // Platform independent random number generator.
+
+int
+sc_main( int argc, char* argv[] )
+{
+ unsigned int vali[5] = { 0, 1, (unsigned)-1, 7, (unsigned)-8 };
+ unsigned int valj[5] = { 0, 1, (unsigned)-1, 7, (unsigned)-8 };
+
+ for (int i = 3; i < 32; ++i) {
+ for (int j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_unsigned x(i);
+ sc_unsigned y(j);
+ sc_unsigned z(64), q(64);
+
+ vali[3] = (1 << (i - 1)) - 1;
+ vali[4] = - (1 << (i - 1));
+
+ valj[3] = (1 << (j - 1)) - 1;
+ valj[4] = - (1 << (j - 1));
+
+ for (int ii = 0; ii < 100; ++ii) {
+ for (int jj = 0; jj < 100; ++jj) {
+ unsigned qi = (ii < 5) ? vali[ii] :
+ (rng.rand() & ((1 << i) - 1));
+ unsigned qj = (jj < 5) ? valj[jj] :
+ (rng.rand() & ((1 << j) - 1));
+
+ if (qi & (1 << (i - 1))) {
+ qi = (qi << (32 - i)) >> (32 - i);
+ }
+ if (qj & (1 << (j - 1))) {
+ qj = (qj << (32 - j)) >> (32 - j);
+ }
+
+ x = qi;
+ y = qj;
+ z = x * y;
+ sc_assert( (sc_unsigned)( z.range(31,0) ) ==
+ (qi * qj) );
+ if ( i < 17 )
+ {
+ if ( j < 17 ) // (i < 17)
+ {
+ q = (x.range(i-1,0) * y.range(j-1,0));
+ }
+ else // (j >= 17) (i < 17)
+ {
+ q = (x.range(i-1,0) * y.range(15,0)) +
+ ( x.range(i-1,0) * y.range(j-1,16) ) * 65536;
+ }
+ }
+ else
+ {
+ if ( j < 17 ) // (i >= 17)
+ {
+ q = (x.range(15,0) * y.range(j-1,0)) +
+ (x.range(i-1,16) * y.range(j-1,0)) * 65536;
+ }
+ else // (j >= 17) (i >= 17)
+ {
+ q = (x.range(15,0) * y.range(15,0)) +
+ (x.range(i-1,16) * y.range(15,0) +
+ x.range(15,0) * y.range(j-1,16)) * 65536 +
+ ((x.range(i-1,16) * y.range(j-1,16) * 65536)
+ * 65536);
+ }
+ }
+ sc_assert(z == q);
+
+ if (y != 0) {
+ z /= y;
+ sc_assert(z == x);
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith09/golden/arith09.log b/src/systemc/tests/systemc/datatypes/int/arith/arith09/golden/arith09.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith09/golden/arith09.log
@@ -0,0 +1,842 @@
+SystemC Simulation
+i = 3, j = 3
+i = 3, j = 4
+i = 3, j = 5
+i = 3, j = 6
+i = 3, j = 7
+i = 3, j = 8
+i = 3, j = 9
+i = 3, j = 10
+i = 3, j = 11
+i = 3, j = 12
+i = 3, j = 13
+i = 3, j = 14
+i = 3, j = 15
+i = 3, j = 16
+i = 3, j = 17
+i = 3, j = 18
+i = 3, j = 19
+i = 3, j = 20
+i = 3, j = 21
+i = 3, j = 22
+i = 3, j = 23
+i = 3, j = 24
+i = 3, j = 25
+i = 3, j = 26
+i = 3, j = 27
+i = 3, j = 28
+i = 3, j = 29
+i = 3, j = 30
+i = 3, j = 31
+i = 4, j = 3
+i = 4, j = 4
+i = 4, j = 5
+i = 4, j = 6
+i = 4, j = 7
+i = 4, j = 8
+i = 4, j = 9
+i = 4, j = 10
+i = 4, j = 11
+i = 4, j = 12
+i = 4, j = 13
+i = 4, j = 14
+i = 4, j = 15
+i = 4, j = 16
+i = 4, j = 17
+i = 4, j = 18
+i = 4, j = 19
+i = 4, j = 20
+i = 4, j = 21
+i = 4, j = 22
+i = 4, j = 23
+i = 4, j = 24
+i = 4, j = 25
+i = 4, j = 26
+i = 4, j = 27
+i = 4, j = 28
+i = 4, j = 29
+i = 4, j = 30
+i = 4, j = 31
+i = 5, j = 3
+i = 5, j = 4
+i = 5, j = 5
+i = 5, j = 6
+i = 5, j = 7
+i = 5, j = 8
+i = 5, j = 9
+i = 5, j = 10
+i = 5, j = 11
+i = 5, j = 12
+i = 5, j = 13
+i = 5, j = 14
+i = 5, j = 15
+i = 5, j = 16
+i = 5, j = 17
+i = 5, j = 18
+i = 5, j = 19
+i = 5, j = 20
+i = 5, j = 21
+i = 5, j = 22
+i = 5, j = 23
+i = 5, j = 24
+i = 5, j = 25
+i = 5, j = 26
+i = 5, j = 27
+i = 5, j = 28
+i = 5, j = 29
+i = 5, j = 30
+i = 5, j = 31
+i = 6, j = 3
+i = 6, j = 4
+i = 6, j = 5
+i = 6, j = 6
+i = 6, j = 7
+i = 6, j = 8
+i = 6, j = 9
+i = 6, j = 10
+i = 6, j = 11
+i = 6, j = 12
+i = 6, j = 13
+i = 6, j = 14
+i = 6, j = 15
+i = 6, j = 16
+i = 6, j = 17
+i = 6, j = 18
+i = 6, j = 19
+i = 6, j = 20
+i = 6, j = 21
+i = 6, j = 22
+i = 6, j = 23
+i = 6, j = 24
+i = 6, j = 25
+i = 6, j = 26
+i = 6, j = 27
+i = 6, j = 28
+i = 6, j = 29
+i = 6, j = 30
+i = 6, j = 31
+i = 7, j = 3
+i = 7, j = 4
+i = 7, j = 5
+i = 7, j = 6
+i = 7, j = 7
+i = 7, j = 8
+i = 7, j = 9
+i = 7, j = 10
+i = 7, j = 11
+i = 7, j = 12
+i = 7, j = 13
+i = 7, j = 14
+i = 7, j = 15
+i = 7, j = 16
+i = 7, j = 17
+i = 7, j = 18
+i = 7, j = 19
+i = 7, j = 20
+i = 7, j = 21
+i = 7, j = 22
+i = 7, j = 23
+i = 7, j = 24
+i = 7, j = 25
+i = 7, j = 26
+i = 7, j = 27
+i = 7, j = 28
+i = 7, j = 29
+i = 7, j = 30
+i = 7, j = 31
+i = 8, j = 3
+i = 8, j = 4
+i = 8, j = 5
+i = 8, j = 6
+i = 8, j = 7
+i = 8, j = 8
+i = 8, j = 9
+i = 8, j = 10
+i = 8, j = 11
+i = 8, j = 12
+i = 8, j = 13
+i = 8, j = 14
+i = 8, j = 15
+i = 8, j = 16
+i = 8, j = 17
+i = 8, j = 18
+i = 8, j = 19
+i = 8, j = 20
+i = 8, j = 21
+i = 8, j = 22
+i = 8, j = 23
+i = 8, j = 24
+i = 8, j = 25
+i = 8, j = 26
+i = 8, j = 27
+i = 8, j = 28
+i = 8, j = 29
+i = 8, j = 30
+i = 8, j = 31
+i = 9, j = 3
+i = 9, j = 4
+i = 9, j = 5
+i = 9, j = 6
+i = 9, j = 7
+i = 9, j = 8
+i = 9, j = 9
+i = 9, j = 10
+i = 9, j = 11
+i = 9, j = 12
+i = 9, j = 13
+i = 9, j = 14
+i = 9, j = 15
+i = 9, j = 16
+i = 9, j = 17
+i = 9, j = 18
+i = 9, j = 19
+i = 9, j = 20
+i = 9, j = 21
+i = 9, j = 22
+i = 9, j = 23
+i = 9, j = 24
+i = 9, j = 25
+i = 9, j = 26
+i = 9, j = 27
+i = 9, j = 28
+i = 9, j = 29
+i = 9, j = 30
+i = 9, j = 31
+i = 10, j = 3
+i = 10, j = 4
+i = 10, j = 5
+i = 10, j = 6
+i = 10, j = 7
+i = 10, j = 8
+i = 10, j = 9
+i = 10, j = 10
+i = 10, j = 11
+i = 10, j = 12
+i = 10, j = 13
+i = 10, j = 14
+i = 10, j = 15
+i = 10, j = 16
+i = 10, j = 17
+i = 10, j = 18
+i = 10, j = 19
+i = 10, j = 20
+i = 10, j = 21
+i = 10, j = 22
+i = 10, j = 23
+i = 10, j = 24
+i = 10, j = 25
+i = 10, j = 26
+i = 10, j = 27
+i = 10, j = 28
+i = 10, j = 29
+i = 10, j = 30
+i = 10, j = 31
+i = 11, j = 3
+i = 11, j = 4
+i = 11, j = 5
+i = 11, j = 6
+i = 11, j = 7
+i = 11, j = 8
+i = 11, j = 9
+i = 11, j = 10
+i = 11, j = 11
+i = 11, j = 12
+i = 11, j = 13
+i = 11, j = 14
+i = 11, j = 15
+i = 11, j = 16
+i = 11, j = 17
+i = 11, j = 18
+i = 11, j = 19
+i = 11, j = 20
+i = 11, j = 21
+i = 11, j = 22
+i = 11, j = 23
+i = 11, j = 24
+i = 11, j = 25
+i = 11, j = 26
+i = 11, j = 27
+i = 11, j = 28
+i = 11, j = 29
+i = 11, j = 30
+i = 11, j = 31
+i = 12, j = 3
+i = 12, j = 4
+i = 12, j = 5
+i = 12, j = 6
+i = 12, j = 7
+i = 12, j = 8
+i = 12, j = 9
+i = 12, j = 10
+i = 12, j = 11
+i = 12, j = 12
+i = 12, j = 13
+i = 12, j = 14
+i = 12, j = 15
+i = 12, j = 16
+i = 12, j = 17
+i = 12, j = 18
+i = 12, j = 19
+i = 12, j = 20
+i = 12, j = 21
+i = 12, j = 22
+i = 12, j = 23
+i = 12, j = 24
+i = 12, j = 25
+i = 12, j = 26
+i = 12, j = 27
+i = 12, j = 28
+i = 12, j = 29
+i = 12, j = 30
+i = 12, j = 31
+i = 13, j = 3
+i = 13, j = 4
+i = 13, j = 5
+i = 13, j = 6
+i = 13, j = 7
+i = 13, j = 8
+i = 13, j = 9
+i = 13, j = 10
+i = 13, j = 11
+i = 13, j = 12
+i = 13, j = 13
+i = 13, j = 14
+i = 13, j = 15
+i = 13, j = 16
+i = 13, j = 17
+i = 13, j = 18
+i = 13, j = 19
+i = 13, j = 20
+i = 13, j = 21
+i = 13, j = 22
+i = 13, j = 23
+i = 13, j = 24
+i = 13, j = 25
+i = 13, j = 26
+i = 13, j = 27
+i = 13, j = 28
+i = 13, j = 29
+i = 13, j = 30
+i = 13, j = 31
+i = 14, j = 3
+i = 14, j = 4
+i = 14, j = 5
+i = 14, j = 6
+i = 14, j = 7
+i = 14, j = 8
+i = 14, j = 9
+i = 14, j = 10
+i = 14, j = 11
+i = 14, j = 12
+i = 14, j = 13
+i = 14, j = 14
+i = 14, j = 15
+i = 14, j = 16
+i = 14, j = 17
+i = 14, j = 18
+i = 14, j = 19
+i = 14, j = 20
+i = 14, j = 21
+i = 14, j = 22
+i = 14, j = 23
+i = 14, j = 24
+i = 14, j = 25
+i = 14, j = 26
+i = 14, j = 27
+i = 14, j = 28
+i = 14, j = 29
+i = 14, j = 30
+i = 14, j = 31
+i = 15, j = 3
+i = 15, j = 4
+i = 15, j = 5
+i = 15, j = 6
+i = 15, j = 7
+i = 15, j = 8
+i = 15, j = 9
+i = 15, j = 10
+i = 15, j = 11
+i = 15, j = 12
+i = 15, j = 13
+i = 15, j = 14
+i = 15, j = 15
+i = 15, j = 16
+i = 15, j = 17
+i = 15, j = 18
+i = 15, j = 19
+i = 15, j = 20
+i = 15, j = 21
+i = 15, j = 22
+i = 15, j = 23
+i = 15, j = 24
+i = 15, j = 25
+i = 15, j = 26
+i = 15, j = 27
+i = 15, j = 28
+i = 15, j = 29
+i = 15, j = 30
+i = 15, j = 31
+i = 16, j = 3
+i = 16, j = 4
+i = 16, j = 5
+i = 16, j = 6
+i = 16, j = 7
+i = 16, j = 8
+i = 16, j = 9
+i = 16, j = 10
+i = 16, j = 11
+i = 16, j = 12
+i = 16, j = 13
+i = 16, j = 14
+i = 16, j = 15
+i = 16, j = 16
+i = 16, j = 17
+i = 16, j = 18
+i = 16, j = 19
+i = 16, j = 20
+i = 16, j = 21
+i = 16, j = 22
+i = 16, j = 23
+i = 16, j = 24
+i = 16, j = 25
+i = 16, j = 26
+i = 16, j = 27
+i = 16, j = 28
+i = 16, j = 29
+i = 16, j = 30
+i = 16, j = 31
+i = 17, j = 3
+i = 17, j = 4
+i = 17, j = 5
+i = 17, j = 6
+i = 17, j = 7
+i = 17, j = 8
+i = 17, j = 9
+i = 17, j = 10
+i = 17, j = 11
+i = 17, j = 12
+i = 17, j = 13
+i = 17, j = 14
+i = 17, j = 15
+i = 17, j = 16
+i = 17, j = 17
+i = 17, j = 18
+i = 17, j = 19
+i = 17, j = 20
+i = 17, j = 21
+i = 17, j = 22
+i = 17, j = 23
+i = 17, j = 24
+i = 17, j = 25
+i = 17, j = 26
+i = 17, j = 27
+i = 17, j = 28
+i = 17, j = 29
+i = 17, j = 30
+i = 17, j = 31
+i = 18, j = 3
+i = 18, j = 4
+i = 18, j = 5
+i = 18, j = 6
+i = 18, j = 7
+i = 18, j = 8
+i = 18, j = 9
+i = 18, j = 10
+i = 18, j = 11
+i = 18, j = 12
+i = 18, j = 13
+i = 18, j = 14
+i = 18, j = 15
+i = 18, j = 16
+i = 18, j = 17
+i = 18, j = 18
+i = 18, j = 19
+i = 18, j = 20
+i = 18, j = 21
+i = 18, j = 22
+i = 18, j = 23
+i = 18, j = 24
+i = 18, j = 25
+i = 18, j = 26
+i = 18, j = 27
+i = 18, j = 28
+i = 18, j = 29
+i = 18, j = 30
+i = 18, j = 31
+i = 19, j = 3
+i = 19, j = 4
+i = 19, j = 5
+i = 19, j = 6
+i = 19, j = 7
+i = 19, j = 8
+i = 19, j = 9
+i = 19, j = 10
+i = 19, j = 11
+i = 19, j = 12
+i = 19, j = 13
+i = 19, j = 14
+i = 19, j = 15
+i = 19, j = 16
+i = 19, j = 17
+i = 19, j = 18
+i = 19, j = 19
+i = 19, j = 20
+i = 19, j = 21
+i = 19, j = 22
+i = 19, j = 23
+i = 19, j = 24
+i = 19, j = 25
+i = 19, j = 26
+i = 19, j = 27
+i = 19, j = 28
+i = 19, j = 29
+i = 19, j = 30
+i = 19, j = 31
+i = 20, j = 3
+i = 20, j = 4
+i = 20, j = 5
+i = 20, j = 6
+i = 20, j = 7
+i = 20, j = 8
+i = 20, j = 9
+i = 20, j = 10
+i = 20, j = 11
+i = 20, j = 12
+i = 20, j = 13
+i = 20, j = 14
+i = 20, j = 15
+i = 20, j = 16
+i = 20, j = 17
+i = 20, j = 18
+i = 20, j = 19
+i = 20, j = 20
+i = 20, j = 21
+i = 20, j = 22
+i = 20, j = 23
+i = 20, j = 24
+i = 20, j = 25
+i = 20, j = 26
+i = 20, j = 27
+i = 20, j = 28
+i = 20, j = 29
+i = 20, j = 30
+i = 20, j = 31
+i = 21, j = 3
+i = 21, j = 4
+i = 21, j = 5
+i = 21, j = 6
+i = 21, j = 7
+i = 21, j = 8
+i = 21, j = 9
+i = 21, j = 10
+i = 21, j = 11
+i = 21, j = 12
+i = 21, j = 13
+i = 21, j = 14
+i = 21, j = 15
+i = 21, j = 16
+i = 21, j = 17
+i = 21, j = 18
+i = 21, j = 19
+i = 21, j = 20
+i = 21, j = 21
+i = 21, j = 22
+i = 21, j = 23
+i = 21, j = 24
+i = 21, j = 25
+i = 21, j = 26
+i = 21, j = 27
+i = 21, j = 28
+i = 21, j = 29
+i = 21, j = 30
+i = 21, j = 31
+i = 22, j = 3
+i = 22, j = 4
+i = 22, j = 5
+i = 22, j = 6
+i = 22, j = 7
+i = 22, j = 8
+i = 22, j = 9
+i = 22, j = 10
+i = 22, j = 11
+i = 22, j = 12
+i = 22, j = 13
+i = 22, j = 14
+i = 22, j = 15
+i = 22, j = 16
+i = 22, j = 17
+i = 22, j = 18
+i = 22, j = 19
+i = 22, j = 20
+i = 22, j = 21
+i = 22, j = 22
+i = 22, j = 23
+i = 22, j = 24
+i = 22, j = 25
+i = 22, j = 26
+i = 22, j = 27
+i = 22, j = 28
+i = 22, j = 29
+i = 22, j = 30
+i = 22, j = 31
+i = 23, j = 3
+i = 23, j = 4
+i = 23, j = 5
+i = 23, j = 6
+i = 23, j = 7
+i = 23, j = 8
+i = 23, j = 9
+i = 23, j = 10
+i = 23, j = 11
+i = 23, j = 12
+i = 23, j = 13
+i = 23, j = 14
+i = 23, j = 15
+i = 23, j = 16
+i = 23, j = 17
+i = 23, j = 18
+i = 23, j = 19
+i = 23, j = 20
+i = 23, j = 21
+i = 23, j = 22
+i = 23, j = 23
+i = 23, j = 24
+i = 23, j = 25
+i = 23, j = 26
+i = 23, j = 27
+i = 23, j = 28
+i = 23, j = 29
+i = 23, j = 30
+i = 23, j = 31
+i = 24, j = 3
+i = 24, j = 4
+i = 24, j = 5
+i = 24, j = 6
+i = 24, j = 7
+i = 24, j = 8
+i = 24, j = 9
+i = 24, j = 10
+i = 24, j = 11
+i = 24, j = 12
+i = 24, j = 13
+i = 24, j = 14
+i = 24, j = 15
+i = 24, j = 16
+i = 24, j = 17
+i = 24, j = 18
+i = 24, j = 19
+i = 24, j = 20
+i = 24, j = 21
+i = 24, j = 22
+i = 24, j = 23
+i = 24, j = 24
+i = 24, j = 25
+i = 24, j = 26
+i = 24, j = 27
+i = 24, j = 28
+i = 24, j = 29
+i = 24, j = 30
+i = 24, j = 31
+i = 25, j = 3
+i = 25, j = 4
+i = 25, j = 5
+i = 25, j = 6
+i = 25, j = 7
+i = 25, j = 8
+i = 25, j = 9
+i = 25, j = 10
+i = 25, j = 11
+i = 25, j = 12
+i = 25, j = 13
+i = 25, j = 14
+i = 25, j = 15
+i = 25, j = 16
+i = 25, j = 17
+i = 25, j = 18
+i = 25, j = 19
+i = 25, j = 20
+i = 25, j = 21
+i = 25, j = 22
+i = 25, j = 23
+i = 25, j = 24
+i = 25, j = 25
+i = 25, j = 26
+i = 25, j = 27
+i = 25, j = 28
+i = 25, j = 29
+i = 25, j = 30
+i = 25, j = 31
+i = 26, j = 3
+i = 26, j = 4
+i = 26, j = 5
+i = 26, j = 6
+i = 26, j = 7
+i = 26, j = 8
+i = 26, j = 9
+i = 26, j = 10
+i = 26, j = 11
+i = 26, j = 12
+i = 26, j = 13
+i = 26, j = 14
+i = 26, j = 15
+i = 26, j = 16
+i = 26, j = 17
+i = 26, j = 18
+i = 26, j = 19
+i = 26, j = 20
+i = 26, j = 21
+i = 26, j = 22
+i = 26, j = 23
+i = 26, j = 24
+i = 26, j = 25
+i = 26, j = 26
+i = 26, j = 27
+i = 26, j = 28
+i = 26, j = 29
+i = 26, j = 30
+i = 26, j = 31
+i = 27, j = 3
+i = 27, j = 4
+i = 27, j = 5
+i = 27, j = 6
+i = 27, j = 7
+i = 27, j = 8
+i = 27, j = 9
+i = 27, j = 10
+i = 27, j = 11
+i = 27, j = 12
+i = 27, j = 13
+i = 27, j = 14
+i = 27, j = 15
+i = 27, j = 16
+i = 27, j = 17
+i = 27, j = 18
+i = 27, j = 19
+i = 27, j = 20
+i = 27, j = 21
+i = 27, j = 22
+i = 27, j = 23
+i = 27, j = 24
+i = 27, j = 25
+i = 27, j = 26
+i = 27, j = 27
+i = 27, j = 28
+i = 27, j = 29
+i = 27, j = 30
+i = 27, j = 31
+i = 28, j = 3
+i = 28, j = 4
+i = 28, j = 5
+i = 28, j = 6
+i = 28, j = 7
+i = 28, j = 8
+i = 28, j = 9
+i = 28, j = 10
+i = 28, j = 11
+i = 28, j = 12
+i = 28, j = 13
+i = 28, j = 14
+i = 28, j = 15
+i = 28, j = 16
+i = 28, j = 17
+i = 28, j = 18
+i = 28, j = 19
+i = 28, j = 20
+i = 28, j = 21
+i = 28, j = 22
+i = 28, j = 23
+i = 28, j = 24
+i = 28, j = 25
+i = 28, j = 26
+i = 28, j = 27
+i = 28, j = 28
+i = 28, j = 29
+i = 28, j = 30
+i = 28, j = 31
+i = 29, j = 3
+i = 29, j = 4
+i = 29, j = 5
+i = 29, j = 6
+i = 29, j = 7
+i = 29, j = 8
+i = 29, j = 9
+i = 29, j = 10
+i = 29, j = 11
+i = 29, j = 12
+i = 29, j = 13
+i = 29, j = 14
+i = 29, j = 15
+i = 29, j = 16
+i = 29, j = 17
+i = 29, j = 18
+i = 29, j = 19
+i = 29, j = 20
+i = 29, j = 21
+i = 29, j = 22
+i = 29, j = 23
+i = 29, j = 24
+i = 29, j = 25
+i = 29, j = 26
+i = 29, j = 27
+i = 29, j = 28
+i = 29, j = 29
+i = 29, j = 30
+i = 29, j = 31
+i = 30, j = 3
+i = 30, j = 4
+i = 30, j = 5
+i = 30, j = 6
+i = 30, j = 7
+i = 30, j = 8
+i = 30, j = 9
+i = 30, j = 10
+i = 30, j = 11
+i = 30, j = 12
+i = 30, j = 13
+i = 30, j = 14
+i = 30, j = 15
+i = 30, j = 16
+i = 30, j = 17
+i = 30, j = 18
+i = 30, j = 19
+i = 30, j = 20
+i = 30, j = 21
+i = 30, j = 22
+i = 30, j = 23
+i = 30, j = 24
+i = 30, j = 25
+i = 30, j = 26
+i = 30, j = 27
+i = 30, j = 28
+i = 30, j = 29
+i = 30, j = 30
+i = 30, j = 31
+i = 31, j = 3
+i = 31, j = 4
+i = 31, j = 5
+i = 31, j = 6
+i = 31, j = 7
+i = 31, j = 8
+i = 31, j = 9
+i = 31, j = 10
+i = 31, j = 11
+i = 31, j = 12
+i = 31, j = 13
+i = 31, j = 14
+i = 31, j = 15
+i = 31, j = 16
+i = 31, j = 17
+i = 31, j = 18
+i = 31, j = 19
+i = 31, j = 20
+i = 31, j = 21
+i = 31, j = 22
+i = 31, j = 23
+i = 31, j = 24
+i = 31, j = 25
+i = 31, j = 26
+i = 31, j = 27
+i = 31, j = 28
+i = 31, j = 29
+i = 31, j = 30
+i = 31, j = 31
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith09/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith09/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith09/isaac.h
@@ -0,0 +1,272 @@
+#ifndef __ISAAC_HPP
+#define __ISAAC_HPP
+
+
+/*
+
+ C++ TEMPLATE VERSION OF Robert J. Jenkins Jr.'s
+ ISAAC Random Number Generator.
+
+ Ported from vanilla C to to template C++ class
+ by Quinn Tyler Jackson on 16-23 July 1998.
+
+ quinn@qtj.net
+
+ The function for the expected period of this
+ random number generator, according to Jenkins is:
+
+ f(a,b) = 2**((a+b*(3+2^^a)-1)
+
+ (where a is ALPHA and b is bitwidth)
+
+ So, for a bitwidth of 32 and an ALPHA of 8,
+ the expected period of ISAAC is:
+
+ 2^^(8+32*(3+2^^8)-1) = 2^^8295
+
+ Jackson has been able to run implementations
+ with an ALPHA as high as 16, or
+
+ 2^^2097263
+
+*/
+
+
+typedef unsigned int UINT32;
+const UINT32 GOLDEN_RATIO = UINT32(0x9e3779b9);
+
+
+template <UINT32 ALPHA = (8)>
+class QTIsaac
+{
+ public:
+
+ typedef unsigned char byte;
+
+ struct randctx
+ {
+ randctx(void)
+ {
+ randrsl = new UINT32[N];
+ randmem = new UINT32[N];
+ }
+
+ ~randctx(void)
+ {
+ delete [] randrsl;
+ delete [] randmem;
+ }
+
+ UINT32 randcnt;
+ UINT32* randrsl;
+ UINT32* randmem;
+ UINT32 randa;
+ UINT32 randb;
+ UINT32 randc;
+ };
+
+ QTIsaac(UINT32 a = 0, UINT32 b = 0, UINT32 c = 0);
+ virtual ~QTIsaac(void);
+
+ UINT32 rand(void);
+ virtual void randinit(randctx* ctx, bool bUseSeed);
+ virtual void srand(
+ UINT32 a = 0, UINT32 b = 0, UINT32 c = 0, UINT32* s = NULL);
+
+ enum {N = (1<<ALPHA)};
+
+ protected:
+
+ virtual void isaac(randctx* ctx);
+
+ UINT32 ind(UINT32* mm, UINT32 x);
+ void rngstep(
+ UINT32 mix, UINT32& a, UINT32& b, UINT32*& mm, UINT32*& m,
+ UINT32*& m2, UINT32*& r, UINT32& x, UINT32& y);
+ virtual void shuffle(
+ UINT32& a, UINT32& b, UINT32& c, UINT32& d, UINT32& e, UINT32& f,
+ UINT32& g, UINT32& h);
+
+ private:
+ randctx m_rc;
+};
+
+
+template<UINT32 ALPHA>
+QTIsaac<ALPHA>::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc()
+{
+ srand(a, b, c);
+}
+
+
+template<UINT32 ALPHA>
+QTIsaac<ALPHA>::~QTIsaac(void)
+{
+ // DO NOTHING
+}
+
+
+template<UINT32 ALPHA>
+void QTIsaac<ALPHA>::srand(UINT32 a, UINT32 b, UINT32 c, UINT32* s)
+{
+ for(int i = 0; i < N; i++)
+ {
+ m_rc.randrsl[i] = s != NULL ? s[i] : 0;
+ }
+
+ m_rc.randa = a;
+ m_rc.randb = b;
+ m_rc.randc = c;
+
+ randinit(&m_rc, true);
+}
+
+
+template<UINT32 ALPHA>
+inline UINT32 QTIsaac<ALPHA>::rand(void)
+{
+ return 0x7fffffff & (!m_rc.randcnt-- ?
+ (isaac(&m_rc), m_rc.randcnt=(N-1), m_rc.randrsl[m_rc.randcnt]) :
+ m_rc.randrsl[m_rc.randcnt]);
+}
+
+
+template<UINT32 ALPHA>
+inline void QTIsaac<ALPHA>::randinit(randctx* ctx, bool bUseSeed)
+{
+ UINT32 a,b,c,d,e,f,g,h;
+ int i;
+
+ a = b = c = d = e = f = g = h = GOLDEN_RATIO;
+
+ UINT32* m = (ctx->randmem);
+ UINT32* r = (ctx->randrsl);
+
+ if(!bUseSeed)
+ {
+ ctx->randa = 0;
+ ctx->randb = 0;
+ ctx->randc = 0;
+ }
+
+ // scramble it
+ for(i=0; i < 4; ++i)
+ {
+ shuffle(a,b,c,d,e,f,g,h);
+ }
+
+ if(bUseSeed)
+ {
+ // initialize using the contents of r[] as the seed
+
+ for(i=0; i < N; i+=8)
+ {
+ a+=r[i ]; b+=r[i+1]; c+=r[i+2]; d+=r[i+3];
+ e+=r[i+4]; f+=r[i+5]; g+=r[i+6]; h+=r[i+7];
+
+ shuffle(a,b,c,d,e,f,g,h);
+
+ m[i ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
+ m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
+ }
+
+ //do a second pass to make all of the seed affect all of m
+
+ for(i=0; i < N; i += 8)
+ {
+ a+=m[i ]; b+=m[i+1]; c+=m[i+2]; d+=m[i+3];
+ e+=m[i+4]; f+=m[i+5]; g+=m[i+6]; h+=m[i+7];
+
+ shuffle(a,b,c,d,e,f,g,h);
+
+ m[i ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
+ m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
+ }
+ }
+ else
+ {
+ // fill in mm[] with messy stuff
+
+ shuffle(a,b,c,d,e,f,g,h);
+
+ m[i ]=a; m[i+1]=b; m[i+2]=c; m[i+3]=d;
+ m[i+4]=e; m[i+5]=f; m[i+6]=g; m[i+7]=h;
+
+ }
+
+ isaac(ctx); // fill in the first set of results
+ ctx->randcnt = N; // prepare to use the first set of results
+}
+
+
+template<UINT32 ALPHA>
+inline UINT32 QTIsaac<ALPHA>::ind(UINT32* mm, UINT32 x)
+{
+ return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2))));
+}
+
+
+template<UINT32 ALPHA>
+inline void QTIsaac<ALPHA>::rngstep(UINT32 mix, UINT32& a, UINT32& b, UINT32*& mm, UINT32*& m, UINT32*& m2, UINT32*& r, UINT32& x, UINT32& y)
+{
+ x = *m;
+ a = (a^(mix)) + *(m2++);
+ *(m++) = y = ind(mm,x) + a + b;
+ *(r++) = b = ind(mm,y>>ALPHA) + x;
+}
+
+
+template<UINT32 ALPHA>
+inline void QTIsaac<ALPHA>::shuffle(UINT32& a, UINT32& b, UINT32& c, UINT32& d, UINT32& e, UINT32& f, UINT32& g, UINT32& h)
+{
+ a^=b<<11; d+=a; b+=c;
+ b^=c>>2; e+=b; c+=d;
+ c^=d<<8; f+=c; d+=e;
+ d^=e>>16; g+=d; e+=f;
+ e^=f<<10; h+=e; f+=g;
+ f^=g>>4; a+=f; g+=h;
+ g^=h<<8; b+=g; h+=a;
+ h^=a>>9; c+=h; a+=b;
+}
+
+
+template<UINT32 ALPHA>
+inline void QTIsaac<ALPHA>::isaac(randctx* ctx)
+{
+ UINT32 x,y;
+
+ UINT32* mm = ctx->randmem;
+ UINT32* r = ctx->randrsl;
+
+ UINT32 a = (ctx->randa);
+ UINT32 b = (ctx->randb + (++ctx->randc));
+
+ UINT32* m = mm;
+ UINT32* m2 = (m+(N/2));
+ UINT32* mend = m2;
+
+ for(; m<mend; )
+ {
+ rngstep((a<<13), a, b, mm, m, m2, r, x, y);
+ rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
+ rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
+ rngstep((a>>16), a, b, mm, m, m2, r, x, y);
+ }
+
+ m2 = mm;
+
+ for(; m2<mend; )
+ {
+ rngstep((a<<13), a, b, mm, m, m2, r, x, y);
+ rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
+ rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
+ rngstep((a>>16), a, b, mm, m, m2, r, x, y);
+ }
+
+ ctx->randb = b;
+ ctx->randa = a;
+}
+
+
+#endif // __ISAAC_HPP
+