From 16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 24 May 2018 01:37:55 -0700 Subject: systemc: Import tests from the Accellera systemc distribution. Change-Id: Iad76b398949a55d768a34d027a2d8e3739953da6 Reviewed-on: https://gem5-review.googlesource.com/10845 Reviewed-by: Giacomo Travaglini Maintainer: Gabe Black --- .../datatypes/int/arith/arith01/arith01.cpp | 141 + .../datatypes/int/arith/arith01/golden/arith01.log | 4002 ++++++++++++++++++++ .../int/arith/arith01/golden/arith01.log.hpux11 | 4001 +++++++++++++++++++ .../datatypes/int/arith/arith02/arith02.cpp | 157 + .../datatypes/int/arith/arith02/golden/arith02.log | 842 ++++ .../systemc/datatypes/int/arith/arith02/isaac.h | 272 ++ .../datatypes/int/arith/arith03/arith03.cpp | 127 + .../datatypes/int/arith/arith03/golden/arith03.log | 842 ++++ .../systemc/datatypes/int/arith/arith03/isaac.h | 272 ++ .../datatypes/int/arith/arith04/arith04.cpp | 182 + .../datatypes/int/arith/arith04/golden/arith04.log | 842 ++++ .../systemc/datatypes/int/arith/arith04/isaac.h | 272 ++ .../datatypes/int/arith/arith05/arith05.cpp | 182 + .../datatypes/int/arith/arith05/golden/arith05.log | 842 ++++ .../systemc/datatypes/int/arith/arith05/isaac.h | 272 ++ .../datatypes/int/arith/arith06/arith06.cpp | 147 + .../datatypes/int/arith/arith06/golden/arith06.log | 842 ++++ .../systemc/datatypes/int/arith/arith06/isaac.h | 272 ++ .../datatypes/int/arith/arith07/arith07.cpp | 137 + .../datatypes/int/arith/arith07/golden/arith07.log | 842 ++++ .../systemc/datatypes/int/arith/arith07/isaac.h | 272 ++ .../datatypes/int/arith/arith08/arith08.cpp | 123 + .../datatypes/int/arith/arith08/golden/arith08.log | 730 ++++ .../systemc/datatypes/int/arith/arith08/isaac.h | 272 ++ .../datatypes/int/arith/arith09/arith09.cpp | 122 + .../datatypes/int/arith/arith09/golden/arith09.log | 842 ++++ .../systemc/datatypes/int/arith/arith09/isaac.h | 272 ++ .../datatypes/int/arith/arith10/arith10.cpp | 119 + .../datatypes/int/arith/arith10/golden/arith10.log | 842 ++++ .../systemc/datatypes/int/arith/arith10/isaac.h | 272 ++ .../datatypes/int/arith/arith11/arith11.cpp | 57 + .../datatypes/int/arith/arith11/golden/arith11.log | 8 + 32 files changed, 19419 insertions(+) create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith01/arith01.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith01/golden/arith01.log.hpux11 create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith02/arith02.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith02/golden/arith02.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith02/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith03/arith03.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith03/golden/arith03.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith03/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith04/arith04.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith04/golden/arith04.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith04/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith05/arith05.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith05/golden/arith05.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith05/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith06/arith06.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith06/golden/arith06.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith06/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith07/arith07.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith07/golden/arith07.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith07/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith08/arith08.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith08/golden/arith08.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith08/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith09/arith09.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith09/golden/arith09.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith09/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith10/arith10.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith10/golden/arith10.log create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith10/isaac.h create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith11/arith11.cpp create mode 100644 src/systemc/tests/systemc/datatypes/int/arith/arith11/golden/arith11.log (limited to 'src/systemc/tests/systemc/datatypes/int/arith') 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 +#include +#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 +#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 >( z.range(31,0) ) == + (qi + qj) ); + check_string( z, qi + qj ); + z = x - y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi - qj) ); + check_string( z, qi - qj ); + z = x * y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi * qj) ); + check_string( z, qi * qj ); + if (y != 0) { + z = x / y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi / qj) ); + check_string( z, qi / qj ); + z = x % y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi % qj) ); + check_string( z, qi % qj ); + } + z = x & y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi & qj) ); + check_string( z, qi & qj ); + z = x | y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi | qj) ); + check_string( z, qi | qj ); + z = x ^ y; + sc_assert( static_cast >( 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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 >( z.range(31,0) ) == + (qi + qj) ); + z = qi + y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi + qj) ); + z = x - qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi - qj) ); + z = qi - y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi - qj) ); + z = x * qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi * qj) ); + z = qi * y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi * qj) ); + if (qj != 0) { + z = x / qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi / qj) ); + z = qi / y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi / qj) ); + z = x % qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi % qj) ); + z = qi % y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi % qj) ); + } + z = x & qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi & qj) ); + z = qi & y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi & qj) ); + z = x | qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi | qj) ); + z = qi | y; + sc_assert( static_cast >( z.range(31,0) ) == + (qi | qj) ); + z = x ^ qj; + sc_assert( static_cast >( z.range(31,0) ) == + (qi ^ qj) ); + z = qi ^ y; + sc_assert( static_cast >( 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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 >( z.range(31,0) ), + int(int(qi) + qj) ); + z = x - y; + TEST(static_cast >( z.range(31,0) ), + int(int(qi) - qj) ); + z = x * y; + TEST(static_cast >( 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 >( z.range(31,0) ), int(int(qi) / qj) ); + z = x % y; + TEST(static_cast >( z.range(31,0) ), int(int(qi) % qj) ); + } + z = x & y; + TEST(static_cast >( z.range(31,0) ), int(int(qi) & qj) ); + z = x | y; + TEST(static_cast >( z.range(31,0) ), int(int(qi) | qj) ); + z = x ^ y; + TEST(static_cast >( 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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 +#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 >( 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 +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< +QTIsaac::QTIsaac(UINT32 a, UINT32 b, UINT32 c) : m_rc() +{ + srand(a, b, c); +} + + +template +QTIsaac::~QTIsaac(void) +{ + // DO NOTHING +} + + +template +void QTIsaac::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 +inline UINT32 QTIsaac::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 +inline void QTIsaac::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 +inline UINT32 QTIsaac::ind(UINT32* mm, UINT32 x) +{ + return (*(UINT32*)((byte*)(mm) + ((x) & ((N-1)<<2)))); +} + + +template +inline void QTIsaac::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 +inline void QTIsaac::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 +inline void QTIsaac::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>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>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 and sc_biguint + + 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 + +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 -- cgit v1.2.3