summaryrefslogtreecommitdiff
path: root/src/systemc/tests/systemc/datatypes/int/arith
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/tests/systemc/datatypes/int/arith')
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith01/arith01.cpp141
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log4002
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log.hpux114001
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith02/arith02.cpp157
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith02/golden/arith02.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith02/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith03/arith03.cpp127
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith03/golden/arith03.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith03/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith04/arith04.cpp182
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith04/golden/arith04.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith04/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith05/arith05.cpp182
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith05/golden/arith05.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith05/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith06/arith06.cpp147
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith06/golden/arith06.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith06/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith07/arith07.cpp137
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith07/golden/arith07.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith07/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith08/arith08.cpp123
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith08/golden/arith08.log730
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith08/isaac.h272
-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
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith10/arith10.cpp119
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith10/golden/arith10.log842
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith10/isaac.h272
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith11/arith11.cpp57
-rw-r--r--src/systemc/tests/systemc/datatypes/int/arith/arith11/golden/arith11.log8
32 files changed, 19419 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith01/arith01.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith01/arith01.cpp
new file mode 100644
index 000000000..36b768e2b
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith01/arith01.cpp
@@ -0,0 +1,141 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith01.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 <stdio.h>
+#include <stdlib.h>
+#include "systemc.h"
+
+/*
+
+ int9 x;
+
+ x.q = -256;
+
+ x.q is equal to 256 in Sun's CC, and -256 in gcc. The standard leaves
+ this issue as implementation dependent unless the definition is
+ qualified explicitly by signed or unsigned.
+
+ In order to force consistent behavior, I've qualified every int
+ definition accordingly in all the arith files.
+
+*/
+
+typedef struct int9 {
+ signed int q : 9;
+} int9;
+
+typedef struct int31 {
+ signed int q : 31;
+} int31;
+
+void
+crunch(sc_signed& z, int31 v31, int u, int v)
+{
+ for (int i = 0; i < 100000; ++i) {
+ z *= u;
+ z += v;
+ v31.q *= u;
+ v31.q += v;
+ sc_assert(z == v31.q);
+ }
+}
+
+// Function to fix result in int9 struct to correctly under-/overflow
+// within its 9 bits range and still ensure the correct sign encoding
+// over the full size of the integer variable. Otherwise, compiler
+// optimization may lead to spurious assertion errors.
+void
+fix_int9(int9& v) {
+ v.q %= 0x200;
+}
+
+int
+sc_main( int argc, char* argv[] )
+{
+ sc_signed x(31);
+ sc_signed y(9);
+ sc_signed z(31);
+ int9 v;
+
+ y = -256;
+ v.q = -256;
+ sc_assert(y == v.q);
+ cout << y << '\t' << v.q << endl;
+ for (int i = 0; i < 1000; ++i) {
+ y++;
+ v.q++;
+ fix_int9(v);
+ cout << y << '\t' << v.q << endl;
+ sc_assert(y == v.q);
+ }
+ for (int i = 0; i < 1000; ++i) {
+ y--;
+ v.q--;
+ fix_int9(v);
+ cout << y << '\t' << v.q << endl;
+ sc_assert(y == v.q);
+ }
+ for (int i = 0; i < 1000; ++i) {
+ ++y;
+ ++v.q;
+ fix_int9(v);
+ cout << y << '\t' << v.q << endl;
+ sc_assert(y == v.q);
+ }
+ for (int i = 0; i < 1000; ++i) {
+ --y;
+ --v.q;
+ fix_int9(v);
+ cout << y << '\t' << v.q << endl;
+ sc_assert(y == v.q);
+ }
+
+ z = 129023;
+ int31 v31;
+ v31.q = 129023;
+ crunch(z, v31, 491, 12089);
+
+ x = -129023;
+ v31.q = -129023;
+ crunch(x, v31, 109, -426);
+
+ x = -1;
+ v31.q = -1;
+ crunch(x, v31, 30941, -1188);
+
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log b/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log
new file mode 100644
index 000000000..23813137d
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log
@@ -0,0 +1,4002 @@
+SystemC Simulation
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+233 233
+234 234
+235 235
+236 236
+237 237
+238 238
+239 239
+240 240
+241 241
+242 242
+243 243
+244 244
+245 245
+246 246
+247 247
+248 248
+249 249
+250 250
+251 251
+252 252
+253 253
+254 254
+255 255
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
+255 255
+254 254
+253 253
+252 252
+251 251
+250 250
+249 249
+248 248
+247 247
+246 246
+245 245
+244 244
+243 243
+242 242
+241 241
+240 240
+239 239
+238 238
+237 237
+236 236
+235 235
+234 234
+233 233
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+233 233
+234 234
+235 235
+236 236
+237 237
+238 238
+239 239
+240 240
+241 241
+242 242
+243 243
+244 244
+245 245
+246 246
+247 247
+248 248
+249 249
+250 250
+251 251
+252 252
+253 253
+254 254
+255 255
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
+255 255
+254 254
+253 253
+252 252
+251 251
+250 250
+249 249
+248 248
+247 247
+246 246
+245 245
+244 244
+243 243
+242 242
+241 241
+240 240
+239 239
+238 238
+237 237
+236 236
+235 235
+234 234
+233 233
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log.hpux11 b/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log.hpux11
new file mode 100644
index 000000000..89bf387a1
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log.hpux11
@@ -0,0 +1,4001 @@
+SystemC Simulation
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+233 233
+234 234
+235 235
+236 236
+237 237
+238 238
+239 239
+240 240
+241 241
+242 242
+243 243
+244 244
+245 245
+246 246
+247 247
+248 248
+249 249
+250 250
+251 251
+252 252
+253 253
+254 254
+255 255
+-256 -256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
+255 255
+254 254
+253 253
+252 252
+251 251
+250 250
+249 249
+248 248
+247 247
+246 246
+245 245
+244 244
+243 243
+242 242
+241 241
+240 240
+239 239
+238 238
+237 237
+236 236
+235 235
+234 234
+233 233
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+233 233
+234 234
+235 235
+236 236
+237 237
+238 238
+239 239
+240 240
+241 241
+242 242
+243 243
+244 244
+245 245
+246 246
+247 247
+248 248
+249 249
+250 250
+251 251
+252 252
+253 253
+254 254
+255 255
+-256 256
+-255 -255
+-254 -254
+-253 -253
+-252 -252
+-251 -251
+-250 -250
+-249 -249
+-248 -248
+-247 -247
+-246 -246
+-245 -245
+-244 -244
+-243 -243
+-242 -242
+-241 -241
+-240 -240
+-239 -239
+-238 -238
+-237 -237
+-236 -236
+-235 -235
+-234 -234
+-233 -233
+-232 -232
+-231 -231
+-230 -230
+-229 -229
+-228 -228
+-227 -227
+-226 -226
+-225 -225
+-224 -224
+-223 -223
+-222 -222
+-221 -221
+-220 -220
+-219 -219
+-218 -218
+-217 -217
+-216 -216
+-215 -215
+-214 -214
+-213 -213
+-212 -212
+-211 -211
+-210 -210
+-209 -209
+-208 -208
+-207 -207
+-206 -206
+-205 -205
+-204 -204
+-203 -203
+-202 -202
+-201 -201
+-200 -200
+-199 -199
+-198 -198
+-197 -197
+-196 -196
+-195 -195
+-194 -194
+-193 -193
+-192 -192
+-191 -191
+-190 -190
+-189 -189
+-188 -188
+-187 -187
+-186 -186
+-185 -185
+-184 -184
+-183 -183
+-182 -182
+-181 -181
+-180 -180
+-179 -179
+-178 -178
+-177 -177
+-176 -176
+-175 -175
+-174 -174
+-173 -173
+-172 -172
+-171 -171
+-170 -170
+-169 -169
+-168 -168
+-167 -167
+-166 -166
+-165 -165
+-164 -164
+-163 -163
+-162 -162
+-161 -161
+-160 -160
+-159 -159
+-158 -158
+-157 -157
+-156 -156
+-155 -155
+-154 -154
+-153 -153
+-152 -152
+-151 -151
+-150 -150
+-149 -149
+-148 -148
+-147 -147
+-146 -146
+-145 -145
+-144 -144
+-143 -143
+-142 -142
+-141 -141
+-140 -140
+-139 -139
+-138 -138
+-137 -137
+-136 -136
+-135 -135
+-134 -134
+-133 -133
+-132 -132
+-131 -131
+-130 -130
+-129 -129
+-128 -128
+-127 -127
+-126 -126
+-125 -125
+-124 -124
+-123 -123
+-122 -122
+-121 -121
+-120 -120
+-119 -119
+-118 -118
+-117 -117
+-116 -116
+-115 -115
+-114 -114
+-113 -113
+-112 -112
+-111 -111
+-110 -110
+-109 -109
+-108 -108
+-107 -107
+-106 -106
+-105 -105
+-104 -104
+-103 -103
+-102 -102
+-101 -101
+-100 -100
+-99 -99
+-98 -98
+-97 -97
+-96 -96
+-95 -95
+-94 -94
+-93 -93
+-92 -92
+-91 -91
+-90 -90
+-89 -89
+-88 -88
+-87 -87
+-86 -86
+-85 -85
+-84 -84
+-83 -83
+-82 -82
+-81 -81
+-80 -80
+-79 -79
+-78 -78
+-77 -77
+-76 -76
+-75 -75
+-74 -74
+-73 -73
+-72 -72
+-71 -71
+-70 -70
+-69 -69
+-68 -68
+-67 -67
+-66 -66
+-65 -65
+-64 -64
+-63 -63
+-62 -62
+-61 -61
+-60 -60
+-59 -59
+-58 -58
+-57 -57
+-56 -56
+-55 -55
+-54 -54
+-53 -53
+-52 -52
+-51 -51
+-50 -50
+-49 -49
+-48 -48
+-47 -47
+-46 -46
+-45 -45
+-44 -44
+-43 -43
+-42 -42
+-41 -41
+-40 -40
+-39 -39
+-38 -38
+-37 -37
+-36 -36
+-35 -35
+-34 -34
+-33 -33
+-32 -32
+-31 -31
+-30 -30
+-29 -29
+-28 -28
+-27 -27
+-26 -26
+-25 -25
+-24 -24
+-23 -23
+-22 -22
+-21 -21
+-20 -20
+-19 -19
+-18 -18
+-17 -17
+-16 -16
+-15 -15
+-14 -14
+-13 -13
+-12 -12
+-11 -11
+-10 -10
+-9 -9
+-8 -8
+-7 -7
+-6 -6
+-5 -5
+-4 -4
+-3 -3
+-2 -2
+-1 -1
+0 0
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+80 80
+81 81
+82 82
+83 83
+84 84
+85 85
+86 86
+87 87
+88 88
+89 89
+90 90
+91 91
+92 92
+93 93
+94 94
+95 95
+96 96
+97 97
+98 98
+99 99
+100 100
+101 101
+102 102
+103 103
+104 104
+105 105
+106 106
+107 107
+108 108
+109 109
+110 110
+111 111
+112 112
+113 113
+114 114
+115 115
+116 116
+117 117
+118 118
+119 119
+120 120
+121 121
+122 122
+123 123
+124 124
+125 125
+126 126
+127 127
+128 128
+129 129
+130 130
+131 131
+132 132
+133 133
+134 134
+135 135
+136 136
+137 137
+138 138
+139 139
+140 140
+141 141
+142 142
+143 143
+144 144
+145 145
+146 146
+147 147
+148 148
+149 149
+150 150
+151 151
+152 152
+153 153
+154 154
+155 155
+156 156
+157 157
+158 158
+159 159
+160 160
+161 161
+162 162
+163 163
+164 164
+165 165
+166 166
+167 167
+168 168
+169 169
+170 170
+171 171
+172 172
+173 173
+174 174
+175 175
+176 176
+177 177
+178 178
+179 179
+180 180
+181 181
+182 182
+183 183
+184 184
+185 185
+186 186
+187 187
+188 188
+189 189
+190 190
+191 191
+192 192
+193 193
+194 194
+195 195
+196 196
+197 197
+198 198
+199 199
+200 200
+201 201
+202 202
+203 203
+204 204
+205 205
+206 206
+207 207
+208 208
+209 209
+210 210
+211 211
+212 212
+213 213
+214 214
+215 215
+216 216
+217 217
+218 218
+219 219
+220 220
+221 221
+222 222
+223 223
+224 224
+225 225
+226 226
+227 227
+228 228
+229 229
+230 230
+231 231
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
+255 -257
+254 254
+253 253
+252 252
+251 251
+250 250
+249 249
+248 248
+247 247
+246 246
+245 245
+244 244
+243 243
+242 242
+241 241
+240 240
+239 239
+238 238
+237 237
+236 236
+235 235
+234 234
+233 233
+232 232
+231 231
+230 230
+229 229
+228 228
+227 227
+226 226
+225 225
+224 224
+223 223
+222 222
+221 221
+220 220
+219 219
+218 218
+217 217
+216 216
+215 215
+214 214
+213 213
+212 212
+211 211
+210 210
+209 209
+208 208
+207 207
+206 206
+205 205
+204 204
+203 203
+202 202
+201 201
+200 200
+199 199
+198 198
+197 197
+196 196
+195 195
+194 194
+193 193
+192 192
+191 191
+190 190
+189 189
+188 188
+187 187
+186 186
+185 185
+184 184
+183 183
+182 182
+181 181
+180 180
+179 179
+178 178
+177 177
+176 176
+175 175
+174 174
+173 173
+172 172
+171 171
+170 170
+169 169
+168 168
+167 167
+166 166
+165 165
+164 164
+163 163
+162 162
+161 161
+160 160
+159 159
+158 158
+157 157
+156 156
+155 155
+154 154
+153 153
+152 152
+151 151
+150 150
+149 149
+148 148
+147 147
+146 146
+145 145
+144 144
+143 143
+142 142
+141 141
+140 140
+139 139
+138 138
+137 137
+136 136
+135 135
+134 134
+133 133
+132 132
+131 131
+130 130
+129 129
+128 128
+127 127
+126 126
+125 125
+124 124
+123 123
+122 122
+121 121
+120 120
+119 119
+118 118
+117 117
+116 116
+115 115
+114 114
+113 113
+112 112
+111 111
+110 110
+109 109
+108 108
+107 107
+106 106
+105 105
+104 104
+103 103
+102 102
+101 101
+100 100
+99 99
+98 98
+97 97
+96 96
+95 95
+94 94
+93 93
+92 92
+91 91
+90 90
+89 89
+88 88
+87 87
+86 86
+85 85
+84 84
+83 83
+82 82
+81 81
+80 80
+79 79
+78 78
+77 77
+76 76
+75 75
+74 74
+73 73
+72 72
+71 71
+70 70
+69 69
+68 68
+67 67
+66 66
+65 65
+64 64
+63 63
+62 62
+61 61
+60 60
+59 59
+58 58
+57 57
+56 56
+55 55
+54 54
+53 53
+52 52
+51 51
+50 50
+49 49
+48 48
+47 47
+46 46
+45 45
+44 44
+43 43
+42 42
+41 41
+40 40
+39 39
+38 38
+37 37
+36 36
+35 35
+34 34
+33 33
+32 32
+31 31
+30 30
+29 29
+28 28
+27 27
+26 26
+25 25
+24 24
+23 23
+22 22
+21 21
+20 20
+19 19
+18 18
+17 17
+16 16
+15 15
+14 14
+13 13
+12 12
+11 11
+10 10
+9 9
+8 8
+7 7
+6 6
+5 5
+4 4
+3 3
+2 2
+1 1
+0 0
+-1 -1
+-2 -2
+-3 -3
+-4 -4
+-5 -5
+-6 -6
+-7 -7
+-8 -8
+-9 -9
+-10 -10
+-11 -11
+-12 -12
+-13 -13
+-14 -14
+-15 -15
+-16 -16
+-17 -17
+-18 -18
+-19 -19
+-20 -20
+-21 -21
+-22 -22
+-23 -23
+-24 -24
+-25 -25
+-26 -26
+-27 -27
+-28 -28
+-29 -29
+-30 -30
+-31 -31
+-32 -32
+-33 -33
+-34 -34
+-35 -35
+-36 -36
+-37 -37
+-38 -38
+-39 -39
+-40 -40
+-41 -41
+-42 -42
+-43 -43
+-44 -44
+-45 -45
+-46 -46
+-47 -47
+-48 -48
+-49 -49
+-50 -50
+-51 -51
+-52 -52
+-53 -53
+-54 -54
+-55 -55
+-56 -56
+-57 -57
+-58 -58
+-59 -59
+-60 -60
+-61 -61
+-62 -62
+-63 -63
+-64 -64
+-65 -65
+-66 -66
+-67 -67
+-68 -68
+-69 -69
+-70 -70
+-71 -71
+-72 -72
+-73 -73
+-74 -74
+-75 -75
+-76 -76
+-77 -77
+-78 -78
+-79 -79
+-80 -80
+-81 -81
+-82 -82
+-83 -83
+-84 -84
+-85 -85
+-86 -86
+-87 -87
+-88 -88
+-89 -89
+-90 -90
+-91 -91
+-92 -92
+-93 -93
+-94 -94
+-95 -95
+-96 -96
+-97 -97
+-98 -98
+-99 -99
+-100 -100
+-101 -101
+-102 -102
+-103 -103
+-104 -104
+-105 -105
+-106 -106
+-107 -107
+-108 -108
+-109 -109
+-110 -110
+-111 -111
+-112 -112
+-113 -113
+-114 -114
+-115 -115
+-116 -116
+-117 -117
+-118 -118
+-119 -119
+-120 -120
+-121 -121
+-122 -122
+-123 -123
+-124 -124
+-125 -125
+-126 -126
+-127 -127
+-128 -128
+-129 -129
+-130 -130
+-131 -131
+-132 -132
+-133 -133
+-134 -134
+-135 -135
+-136 -136
+-137 -137
+-138 -138
+-139 -139
+-140 -140
+-141 -141
+-142 -142
+-143 -143
+-144 -144
+-145 -145
+-146 -146
+-147 -147
+-148 -148
+-149 -149
+-150 -150
+-151 -151
+-152 -152
+-153 -153
+-154 -154
+-155 -155
+-156 -156
+-157 -157
+-158 -158
+-159 -159
+-160 -160
+-161 -161
+-162 -162
+-163 -163
+-164 -164
+-165 -165
+-166 -166
+-167 -167
+-168 -168
+-169 -169
+-170 -170
+-171 -171
+-172 -172
+-173 -173
+-174 -174
+-175 -175
+-176 -176
+-177 -177
+-178 -178
+-179 -179
+-180 -180
+-181 -181
+-182 -182
+-183 -183
+-184 -184
+-185 -185
+-186 -186
+-187 -187
+-188 -188
+-189 -189
+-190 -190
+-191 -191
+-192 -192
+-193 -193
+-194 -194
+-195 -195
+-196 -196
+-197 -197
+-198 -198
+-199 -199
+-200 -200
+-201 -201
+-202 -202
+-203 -203
+-204 -204
+-205 -205
+-206 -206
+-207 -207
+-208 -208
+-209 -209
+-210 -210
+-211 -211
+-212 -212
+-213 -213
+-214 -214
+-215 -215
+-216 -216
+-217 -217
+-218 -218
+-219 -219
+-220 -220
+-221 -221
+-222 -222
+-223 -223
+-224 -224
+-225 -225
+-226 -226
+-227 -227
+-228 -228
+-229 -229
+-230 -230
+-231 -231
+-232 -232
+-233 -233
+-234 -234
+-235 -235
+-236 -236
+-237 -237
+-238 -238
+-239 -239
+-240 -240
+-241 -241
+-242 -242
+-243 -243
+-244 -244
+-245 -245
+-246 -246
+-247 -247
+-248 -248
+-249 -249
+-250 -250
+-251 -251
+-252 -252
+-253 -253
+-254 -254
+-255 -255
+-256 -256
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith02/arith02.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith02/arith02.cpp
new file mode 100644
index 000000000..90919bfbd
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith02/arith02.cpp
@@ -0,0 +1,157 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith02.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.
+
+void
+check_string( const sc_signed& z, int v )
+{
+ std::string buf(z.to_string( SC_BIN ) );
+ if (z < 0) {
+ sc_assert(buf[2] == '1');
+ } else {
+ sc_assert(buf[2] == '0');
+ }
+}
+
+int
+sc_main( int argc, char* argv[] )
+{
+ signed int vali[5] = { 0, 1, -1, 7, -8 };
+ signed int valj[5] = { 0, 1, -1, 7, -8 };
+
+ for (int i = 3; i < 32; ++i) {
+ for (int j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_signed x(i);
+ sc_signed y(j);
+ sc_signed z(64);
+
+ vali[3] = (1 << (i - 1)) - 1;
+ vali[4] = - (1 << (i - 1));
+
+ valj[3] = (1 << (j - 1)) - 1;
+ valj[4] = - (1 << (j - 1));
+
+ /*
+ // old code - takes too much time.
+ for (int ii = 0; ii < 100; ++ii) {
+ for (int jj = 0; jj < 100; ++jj) {
+ */
+ for (int ii = 0; ii < 10; ++ii) {
+ for (int jj = 0; jj < 10; ++jj) {
+ signed int qi = (ii < 5) ? vali[ii] : (rng.rand() & ((1 << i) - 1));
+ signed int 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;
+ sc_assert( x == qi );
+ y = qj;
+ sc_assert( y == qj );
+ sc_assert((x == qj) == (qi == qj));
+ sc_assert((x == qj) == (qj == x));
+ sc_assert((x != qj) == (qi != qj));
+ sc_assert((x != qj) == (qj != x));
+ sc_assert((x < qj) == (qi < qj));
+ sc_assert((x < qj) == (qj > x));
+ sc_assert((x <= qj) == (qi <= qj));
+ sc_assert((x <= qj) == (qj >= x));
+ sc_assert((x > qj) == (qi > qj));
+ sc_assert((x > qj) == (qj < x));
+ sc_assert((x >= qj) == (qi >= qj));
+ sc_assert((x >= qj) == (qj <= x));
+ z = x + y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi + qj) );
+ check_string( z, qi + qj );
+ z = x - y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi - qj) );
+ check_string( z, qi - qj );
+ z = x * y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi * qj) );
+ check_string( z, qi * qj );
+ if (y != 0) {
+ z = x / y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi / qj) );
+ check_string( z, qi / qj );
+ z = x % y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi % qj) );
+ check_string( z, qi % qj );
+ }
+ z = x & y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi & qj) );
+ check_string( z, qi & qj );
+ z = x | y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi | qj) );
+ check_string( z, qi | qj );
+ z = x ^ y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi ^ qj) );
+ check_string( z, qi ^ qj );
+ if (jj < i - 1) {
+ z = x << jj;
+ for (int r = 0; r < i; ++r) {
+ sc_assert( (bool) z[r] == !!((qi << jj) & (1 << r)) );
+ }
+ z = x >> jj;
+ for (int r = 0; r < i; ++r) {
+ sc_assert( (bool) z[r] == !!((qi >> jj) & (1 << r)) );
+ }
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith02/golden/arith02.log b/src/systemc/tests/systemc/datatypes/int/arith/arith02/golden/arith02.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith02/golden/arith02.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/arith02/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith02/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith02/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith03/arith03.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith03/arith03.cpp
new file mode 100644
index 000000000..a9ee10f3f
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith03/arith03.cpp
@@ -0,0 +1,127 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith03.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.
+
+#define TEST(A,B) \
+{ \
+ if ( A != B ) \
+ cout << #A << " (" << hex << A << ") != " << #B << "(" << hex << B << ")" << endl; \
+}
+
+#define TESTA(A,B,C) \
+{ \
+ if ( A != (B-C) ) \
+ cout << #A << " (" << hex << A << ") != " << hex << B-C << " " << B << " " << C << endl; \
+}
+
+int
+sc_main( int argc, char* argv[] )
+{
+ unsigned vali[5] = { 0, 1, (unsigned) -1, 7, (unsigned)-8 };
+ unsigned 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);
+
+ 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;
+ TEST(x,qi);
+ y = qj;
+ TEST(y,qj);
+ z = x + y;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi + qj));
+ z = x - y;
+ // TEST((sc_unsigned)( z.range(31,0) ),(qi - qj));
+ TESTA((sc_unsigned)( z.range(31,0) ),qi,qj);
+ z = x * y;
+ TEST((sc_unsigned)( z.range(31,0) ),
+ (qi * qj) );
+ if (y != 0) {
+ z = x / y;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi/qj));
+ z = x % y;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi%qj));
+ }
+ z = x & y;
+ TEST( (sc_unsigned)( z.range(31,0) ), (qi & qj) );
+ z = x | y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi | qj) );
+ z = x ^ y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi ^ qj) );
+ if (jj < i - 1) {
+ z = x << jj;
+ for (int r = 0; r < i; ++r) {
+ TEST((bool) z[r],!!((qi << jj) & (1 << r)) );
+ }
+ z = x >> jj;
+ for (int r = 0; r < i; ++r) {
+ TEST((bool) z[r],!!((qi >> jj) & (1 << r)) );
+ }
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith03/golden/arith03.log b/src/systemc/tests/systemc/datatypes/int/arith/arith03/golden/arith03.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith03/golden/arith03.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/arith03/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith03/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith03/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith04/arith04.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith04/arith04.cpp
new file mode 100644
index 000000000..587f35f80
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith04/arith04.cpp
@@ -0,0 +1,182 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith04.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.
+
+void
+check_string( const sc_signed& z, int v )
+{
+ std::string buf( z.to_string( SC_BIN ) );
+ if (z < 0) {
+ sc_assert(buf[2] == '1');
+ } else {
+ sc_assert(buf[2] == '0');
+ }
+}
+
+int
+sc_main( int argc, char* argv[] )
+{
+ signed int vali[5] = { 0, 1, -1, 7, -8 };
+ signed int valj[5] = { 0, 1, -1, 7, -8 };
+
+ for (int i = 3; i < 32; ++i) {
+ for (int j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_signed x(i);
+ sc_signed y(j);
+ sc_signed z(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) {
+ signed int qi = (ii < 5) ? vali[ii] : (rng.rand() & ((1 << i) - 1));
+ signed int qj = (jj < 5) ? valj[jj] : (rng.rand() & ((1 << j) - 1));
+ signed int tqi;
+
+ if (qi & (1 << (i - 1))) {
+ qi = (qi << (32 - i)) >> (32 - i);
+ }
+ if (qj & (1 << (j - 1))) {
+ qj = (qj << (32 - j)) >> (32 - j);
+ }
+
+ x = qi;
+ tqi = qi;
+ sc_assert( x == qi );
+ y = qj;
+ sc_assert( y == qj );
+ sc_assert((x == qj) == (qi == qj));
+ sc_assert((x == qj) == (qj == x));
+ sc_assert((x != qj) == (qi != qj));
+ sc_assert((x != qj) == (qj != x));
+ sc_assert((x < qj) == (qi < qj));
+ sc_assert((x < qj) == (qj > x));
+ sc_assert((x <= qj) == (qi <= qj));
+ sc_assert((x <= qj) == (qj >= x));
+ sc_assert((x > qj) == (qi > qj));
+ sc_assert((x > qj) == (qj < x));
+ sc_assert((x >= qj) == (qi >= qj));
+ sc_assert((x >= qj) == (qj <= x));
+
+ x += y;
+ tqi += qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x -= y;
+ tqi -= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x *= y;
+ tqi *= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ if (y != 0) {
+ x = qi;
+ tqi = qi;
+ x /= y;
+ tqi /= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x %= y;
+ tqi %= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+ }
+
+ x = qi;
+ tqi = qi;
+ x &= y;
+ tqi &= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x |= y;
+ tqi |= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x ^= y;
+ tqi ^= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ if (jj < i - 1) {
+ x = qi;
+ tqi = qi;
+ x <<= jj;
+ tqi <<= jj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x >>= jj;
+ tqi >>= jj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith04/golden/arith04.log b/src/systemc/tests/systemc/datatypes/int/arith/arith04/golden/arith04.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith04/golden/arith04.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/arith04/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith04/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith04/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith05/arith05.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith05/arith05.cpp
new file mode 100644
index 000000000..7eb83eaff
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith05/arith05.cpp
@@ -0,0 +1,182 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith05.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.
+
+void
+check_string( const sc_signed& z, int v )
+{
+ std::string buf( z.to_string( SC_BIN ) );
+ if (z < 0) {
+ sc_assert(buf[2] == '1');
+ } else {
+ sc_assert(buf[2] == '0');
+ }
+}
+
+int
+sc_main( int argc, char* argv[] )
+{
+ unsigned vali[5] = { 0, 1, (unsigned)-1, 7, (unsigned)-8 };
+ unsigned valj[5] = { 0, 1, (unsigned)-1, 7, (unsigned)-8 };
+
+ for (unsigned i = 3; i < 32; ++i) {
+ for (unsigned j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_unsigned x(i);
+ sc_unsigned y(j);
+ sc_unsigned z(64);
+
+ vali[3] = (1 << (i - 1)) - 1;
+ vali[4] = - (1 << (i - 1));
+
+ valj[3] = (1 << (j - 1)) - 1;
+ valj[4] = - (1 << (j - 1));
+
+ for (unsigned ii = 0; ii < 100; ++ii) {
+ for (unsigned 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));
+ unsigned tqi;
+
+ if (qi & (1 << (i - 1))) {
+ qi = (qi << (32 - i)) >> (32 - i);
+ }
+ if (qj & (1 << (j - 1))) {
+ qj = (qj << (32 - j)) >> (32 - j);
+ }
+
+ x = qi;
+ tqi = qi;
+ sc_assert( x == qi );
+ y = qj;
+ sc_assert( y == qj );
+ sc_assert((x == qj) == (qi == qj));
+ sc_assert((x == qj) == (qj == x));
+ sc_assert((x != qj) == (qi != qj));
+ sc_assert((x != qj) == (qj != x));
+ sc_assert((x < qj) == (qi < qj));
+ sc_assert((x < qj) == (qj > x));
+ sc_assert((x <= qj) == (qi <= qj));
+ sc_assert((x <= qj) == (qj >= x));
+ sc_assert((x > qj) == (qi > qj));
+ sc_assert((x > qj) == (qj < x));
+ sc_assert((x >= qj) == (qi >= qj));
+ sc_assert((x >= qj) == (qj <= x));
+
+ x += y;
+ tqi += qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x -= y;
+ tqi -= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x *= y;
+ tqi *= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ if (y != 0) {
+ x = qi;
+ tqi = qi;
+ x /= y;
+ tqi /= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x %= y;
+ tqi %= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+ }
+
+ x = qi;
+ tqi = qi;
+ x &= y;
+ tqi &= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x |= y;
+ tqi |= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x ^= y;
+ tqi ^= qj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ if (jj < i - 1) {
+ x = qi;
+ tqi = qi;
+ x <<= jj;
+ tqi <<= jj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+
+ x = qi;
+ tqi = qi;
+ x >>= jj;
+ tqi >>= jj;
+ tqi = (tqi << (32 - i)) >> (32 - i);
+ sc_assert( x == tqi );
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith05/golden/arith05.log b/src/systemc/tests/systemc/datatypes/int/arith/arith05/golden/arith05.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith05/golden/arith05.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/arith05/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith05/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith05/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith06/arith06.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith06/arith06.cpp
new file mode 100644
index 000000000..0eebbcd79
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith06/arith06.cpp
@@ -0,0 +1,147 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith06.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[] )
+{
+ signed int vali[5] = { 0, 1, -1, 7, -8 };
+ signed int valj[5] = { 0, 1, -1, 7, -8 };
+
+ for (int i = 3; i < 32; ++i) {
+ for (int j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_signed x(i);
+ sc_signed y(j);
+ sc_signed z(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) {
+ signed int qi = (ii < 5) ? vali[ii] : (rng.rand() & ((1 << i) - 1));
+ signed int 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;
+ sc_assert( x == qi );
+ y = qj;
+ sc_assert( y == qj );
+ sc_assert((x == qj) == (qi == qj));
+ sc_assert((x == qj) == (qj == x));
+ sc_assert((x != qj) == (qi != qj));
+ sc_assert((x != qj) == (qj != x));
+ sc_assert((x < qj) == (qi < qj));
+ sc_assert((x < qj) == (qj > x));
+ sc_assert((x <= qj) == (qi <= qj));
+ sc_assert((x <= qj) == (qj >= x));
+ sc_assert((x > qj) == (qi > qj));
+ sc_assert((x > qj) == (qj < x));
+ sc_assert((x >= qj) == (qi >= qj));
+ sc_assert((x >= qj) == (qj <= x));
+ z = x + qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi + qj) );
+ z = qi + y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi + qj) );
+ z = x - qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi - qj) );
+ z = qi - y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi - qj) );
+ z = x * qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi * qj) );
+ z = qi * y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi * qj) );
+ if (qj != 0) {
+ z = x / qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi / qj) );
+ z = qi / y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi / qj) );
+ z = x % qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi % qj) );
+ z = qi % y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi % qj) );
+ }
+ z = x & qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi & qj) );
+ z = qi & y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi & qj) );
+ z = x | qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi | qj) );
+ z = qi | y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi | qj) );
+ z = x ^ qj;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi ^ qj) );
+ z = qi ^ y;
+ sc_assert( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi ^ qj) );
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith06/golden/arith06.log b/src/systemc/tests/systemc/datatypes/int/arith/arith06/golden/arith06.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith06/golden/arith06.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/arith06/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith06/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith06/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith07/arith07.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith07/arith07.cpp
new file mode 100644
index 000000000..977108ea8
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith07/arith07.cpp
@@ -0,0 +1,137 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith07.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.
+
+#define TEST(A,B) \
+{ \
+ if ( A != B ) \
+ cout << #A << " (" << A << ") != " << #B << "(" << B << ")" << endl; \
+}
+
+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);
+
+ 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;
+ TEST(x,qi );
+ y = qj;
+ TEST(y,qj );
+ TEST((x == qj),(qi == qj));
+ TEST((x == qj),(qj == x));
+ TEST((x != qj),(qi != qj));
+ TEST((x != qj),(qj != x));
+ TEST((x < qj),(qi < qj));
+ TEST((x < qj),(qj > x));
+ TEST((x <= qj),(qi <= qj));
+ TEST((x <= qj),(qj >= x));
+ TEST((x > qj),(qi > qj));
+ TEST((x > qj),(qj < x));
+ TEST((x >= qj),(qi >= qj));
+ TEST((x >= qj),(qj <= x));
+ z = x + qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi + qj) );
+ z = qi + y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi + qj) );
+ z = x - qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi - qj) );
+ z = qi - y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi - qj) );
+ z = x * qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi * qj) );
+ z = qi * y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi * qj) );
+ if (qj != 0) {
+ z = x / qj;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi/qj));
+ z = qi / y;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi/qj));
+ z = x % qj;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi%qj));
+ z = qi % y;
+ TEST((sc_unsigned)( z.range(31,0) ),(qi%qj));
+ }
+ z = x & qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi & qj) );
+ z = qi & y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi & qj) );
+ z = x | qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi | qj) );
+ z = qi | y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi | qj) );
+ z = x ^ qj;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi ^ qj) );
+ z = qi ^ y;
+ TEST((sc_unsigned)( z.range(31,0) ), (qi ^ qj) );
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith07/golden/arith07.log b/src/systemc/tests/systemc/datatypes/int/arith/arith07/golden/arith07.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith07/golden/arith07.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/arith07/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith07/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith07/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith08/arith08.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith08/arith08.cpp
new file mode 100644
index 000000000..d44dda816
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith08/arith08.cpp
@@ -0,0 +1,123 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith08.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 "systemc.h"
+#include "isaac.h"
+
+QTIsaac<8> rng; // Platform independent random number generator.
+
+#define TEST(A,B) \
+{ \
+ if ( A != B ) \
+ cout << #A << " (" << A << ") != " << #B << "(" << B << ")" << endl; \
+}
+
+int
+sc_main(int, char**)
+{
+ unsigned vali[5] = { 0, 1, (unsigned)-1, 7, (unsigned)-8 };
+ signed int valj[5] = { 0, 1, -1, 7, -8 };
+
+ for (int i = 3; i < 30; ++i) {
+ for (int j = 3; j < 30; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+ sc_unsigned x(i);
+ sc_signed y(j);
+ sc_signed z(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));
+ signed int 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;
+
+ sc_signed ty(x);
+ TEST(x,ty );
+ sc_assert( ty >= 0 );
+ sc_assert((! x[i-1]) || (ty.length() == i+1) );
+
+ z = x + y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ),
+ int(int(qi) + qj) );
+ z = x - y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ),
+ int(int(qi) - qj) );
+ z = x * y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ),
+ int(int(qi) * qj) );
+ sc_unsigned xx(i);
+ xx = x;
+ xx *= y;
+ sc_unsigned xx2(i);
+ xx2 = z.range(i - 1, 0);
+ TEST(xx,xx2);
+
+ if (y != 0) {
+ z = x / y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ), int(int(qi) / qj) );
+ z = x % y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ), int(int(qi) % qj) );
+ }
+ z = x & y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ), int(int(qi) & qj) );
+ z = x | y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ), int(int(qi) | qj) );
+ z = x ^ y;
+ TEST(static_cast<sc_bigint<32> >( z.range(31,0) ), int(int(qi) ^ qj) );
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith08/golden/arith08.log b/src/systemc/tests/systemc/datatypes/int/arith/arith08/golden/arith08.log
new file mode 100644
index 000000000..d7f3045b2
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith08/golden/arith08.log
@@ -0,0 +1,730 @@
+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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith08/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith08/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith08/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
+
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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith10/arith10.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith10/arith10.cpp
new file mode 100644
index 000000000..e649cb2a3
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith10/arith10.cpp
@@ -0,0 +1,119 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith10.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[] )
+{
+ signed int vali[5] = { 0, 1, -1, 7, -8 };
+ signed int valj[5] = { 0, 1, -1, 7, -8 };
+
+ for (int i = 3; i < 32; ++i) {
+ for (int j = 3; j < 32; ++j) {
+ cout << "i = " << i << ", j = " << j << endl;
+
+ sc_signed x(i);
+ sc_signed y(j);
+ sc_signed z(65), q(65);
+
+ 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) {
+ signed int qi = (ii < 5) ? vali[ii] : (rng.rand() & ((1 << i) - 1));
+ signed int 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( static_cast<sc_bigint<32> >( z.range(31,0) ) ==
+ (qi * qj) );
+ bool s;
+ s = ((x < 0) != (y < 0));
+ sc_signed x2(i+1);
+ x2 = x;
+ if (x < 0) {
+ x2 = - x;
+ }
+ sc_signed y2(j+1);
+ y2 = y;
+ if (y < 0) {
+ y2 = - y;
+ }
+
+ sc_unsigned xhi(16), xlo(16);
+ sc_unsigned yhi(16), ylo(16);
+ sc_unsigned zero(16);
+ zero = 0;
+ xlo = i > 14 ? x2.range(15,0) : x2.range(i,0);
+ xhi = i > 15 ? x2.range(i,16) : zero;
+ ylo = j > 14 ? y2.range(15,0) : y2.range(j,0);
+ yhi = j > 15 ? y2.range(j,16) : zero;
+ q = (xlo * ylo) +
+ (xhi * ylo + xlo * yhi) * 65536 +
+ ((xhi * yhi) * 65536) * 65536;
+ if (s)
+ q = - q;
+ if (z.range(63,0) != q.range(63,0)) {
+ cout << "xlo = " << xlo << endl;
+ cout << "xhi = " << xhi << endl;
+ cout << "ylo = " << ylo << endl;
+ cout << "yhi = " << yhi << endl;
+ sc_assert(false);
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith10/golden/arith10.log b/src/systemc/tests/systemc/datatypes/int/arith/arith10/golden/arith10.log
new file mode 100644
index 000000000..4e17a8196
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith10/golden/arith10.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/arith10/isaac.h b/src/systemc/tests/systemc/datatypes/int/arith/arith10/isaac.h
new file mode 100644
index 000000000..9625be2ac
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith10/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
+
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith11/arith11.cpp b/src/systemc/tests/systemc/datatypes/int/arith/arith11/arith11.cpp
new file mode 100644
index 000000000..341ebf150
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith11/arith11.cpp
@@ -0,0 +1,57 @@
+/*****************************************************************************
+
+ 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.
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ arith11.cpp -- test auto increment on sc_bigint<N> and sc_biguint<N>
+
+ Original Author: Andy Goodrich, Forte Design Systems, 24 March 2008
+
+ *****************************************************************************/
+
+/*****************************************************************************
+
+ MODIFICATION LOG - modifiers, enter your name, affiliation, date and
+ changes you are making here.
+
+ Name, Affiliation, Date:
+ Description of Modification:
+
+ *****************************************************************************/
+
+#include <systemc.h>
+
+int sc_main(int argc, char**argv)
+{
+ sc_biguint<3> a = 7;
+ sc_bigint<3> b = 7;
+
+ ++a;
+ cout << "a is " << a << endl;
+ cout << "a == 0 is " << (a==0) << endl;
+ cout << "raw digit: " << *a.get_raw() << endl;
+ cout << endl;
+
+ ++b;
+ cout << "b is " << b << endl;
+ cout << "b == 0 is " << (b==0) << endl;
+ cout << "raw digit: " << *b.get_raw() << endl;
+
+ return 0;
+}
diff --git a/src/systemc/tests/systemc/datatypes/int/arith/arith11/golden/arith11.log b/src/systemc/tests/systemc/datatypes/int/arith/arith11/golden/arith11.log
new file mode 100644
index 000000000..06a259a10
--- /dev/null
+++ b/src/systemc/tests/systemc/datatypes/int/arith/arith11/golden/arith11.log
@@ -0,0 +1,8 @@
+SystemC Simulation
+a is 0
+a == 0 is 1
+raw digit: 0
+
+b is 0
+b == 0 is 1
+raw digit: 0