test03.cpp revision 12855:588919e0e4aa
17635SBrad.Beckmann@amd.com/*****************************************************************************
27635SBrad.Beckmann@amd.com
37635SBrad.Beckmann@amd.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
47635SBrad.Beckmann@amd.com  more contributor license agreements.  See the NOTICE file distributed
57635SBrad.Beckmann@amd.com  with this work for additional information regarding copyright ownership.
67635SBrad.Beckmann@amd.com  Accellera licenses this file to you under the Apache License, Version 2.0
77635SBrad.Beckmann@amd.com  (the "License"); you may not use this file except in compliance with the
87635SBrad.Beckmann@amd.com  License.  You may obtain a copy of the License at
97635SBrad.Beckmann@amd.com
107635SBrad.Beckmann@amd.com    http://www.apache.org/licenses/LICENSE-2.0
117635SBrad.Beckmann@amd.com
127635SBrad.Beckmann@amd.com  Unless required by applicable law or agreed to in writing, software
137635SBrad.Beckmann@amd.com  distributed under the License is distributed on an "AS IS" BASIS,
147635SBrad.Beckmann@amd.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
157635SBrad.Beckmann@amd.com  implied.  See the License for the specific language governing
167635SBrad.Beckmann@amd.com  permissions and limitations under the License.
177635SBrad.Beckmann@amd.com
187635SBrad.Beckmann@amd.com *****************************************************************************/
197635SBrad.Beckmann@amd.com
207635SBrad.Beckmann@amd.com/*****************************************************************************
217635SBrad.Beckmann@amd.com
227635SBrad.Beckmann@amd.com  test03.cpp --
237635SBrad.Beckmann@amd.com
247635SBrad.Beckmann@amd.com  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
257635SBrad.Beckmann@amd.com
267635SBrad.Beckmann@amd.com *****************************************************************************/
277635SBrad.Beckmann@amd.com
287635SBrad.Beckmann@amd.com/*****************************************************************************
297635SBrad.Beckmann@amd.com
307635SBrad.Beckmann@amd.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112564Sgabeblack@google.com  changes you are making here.
3213774Sandreas.sandberg@arm.com
3312564Sgabeblack@google.com      Name, Affiliation, Date: Andy Goodrich, Forte Design Systems 2006-08-17
347635SBrad.Beckmann@amd.com  Description of Modification: Converted over to test sc_big types.
357635SBrad.Beckmann@amd.com
367635SBrad.Beckmann@amd.com *****************************************************************************/
377635SBrad.Beckmann@amd.com
387635SBrad.Beckmann@amd.com// test of the reduce methods in the sc_big[u]int datatypes -- method notation
3911682Sandreas.hansson@arm.com
4011670Sandreas.hansson@arm.com#include "systemc.h"
417635SBrad.Beckmann@amd.com
4211682Sandreas.hansson@arm.comint
4311670Sandreas.hansson@arm.comsc_main( int, char*[] )
447635SBrad.Beckmann@amd.com{
457635SBrad.Beckmann@amd.com    // 1) check the existence of the reduce methods
467635SBrad.Beckmann@amd.com
477635SBrad.Beckmann@amd.com    sc_bigint<42> a = 42;
487635SBrad.Beckmann@amd.com
497635SBrad.Beckmann@amd.com    // sc_signed
507635SBrad.Beckmann@amd.com    cout << endl;
5111688Sandreas.hansson@arm.com    cout << a.and_reduce() << endl;
527635SBrad.Beckmann@amd.com    cout << a.or_reduce() << endl;
5310083Snilay@cs.wisc.edu    cout << a.xor_reduce() << endl;
5410083Snilay@cs.wisc.edu    cout << a.nand_reduce() << endl;
557635SBrad.Beckmann@amd.com    cout << a.nor_reduce() << endl;
567635SBrad.Beckmann@amd.com    cout << a.xnor_reduce() << endl;
577635SBrad.Beckmann@amd.com
587635SBrad.Beckmann@amd.com    // sc_signed_subref
597635SBrad.Beckmann@amd.com    cout << endl;
607635SBrad.Beckmann@amd.com    cout << a( 7, 0 ).and_reduce() << endl;
617635SBrad.Beckmann@amd.com    cout << a( 7, 0 ).or_reduce() << endl;
627635SBrad.Beckmann@amd.com    cout << a( 7, 0 ).xor_reduce() << endl;
6313731Sandreas.sandberg@arm.com    cout << a( 7, 0 ).nand_reduce() << endl;
6413731Sandreas.sandberg@arm.com    cout << a( 7, 0 ).nor_reduce() << endl;
6513731Sandreas.sandberg@arm.com    cout << a( 7, 0 ).xnor_reduce() << endl;
667635SBrad.Beckmann@amd.com
677635SBrad.Beckmann@amd.com    // concatenation
687635SBrad.Beckmann@amd.com    cout << endl;
697635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).and_reduce() << endl;
707635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).or_reduce() << endl;
717635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).xor_reduce() << endl;
727635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).nand_reduce() << endl;
737635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).nor_reduce() << endl;
747635SBrad.Beckmann@amd.com    cout << ( a( 7, 0 ), a( 15, 8 ) ).xnor_reduce() << endl;
757635SBrad.Beckmann@amd.com
767635SBrad.Beckmann@amd.com    sc_biguint<42> b = 42;
777635SBrad.Beckmann@amd.com
787635SBrad.Beckmann@amd.com    // sc_unsigned
797635SBrad.Beckmann@amd.com    cout << endl;
807635SBrad.Beckmann@amd.com    cout << b.and_reduce() << endl;
817635SBrad.Beckmann@amd.com    cout << b.or_reduce() << endl;
827635SBrad.Beckmann@amd.com    cout << b.xor_reduce() << endl;
8312564Sgabeblack@google.com    cout << b.nand_reduce() << endl;
847635SBrad.Beckmann@amd.com    cout << b.nor_reduce() << endl;
857635SBrad.Beckmann@amd.com    cout << b.xnor_reduce() << endl;
867635SBrad.Beckmann@amd.com
877635SBrad.Beckmann@amd.com    // sc_unsigned_subref
887635SBrad.Beckmann@amd.com    cout << endl;
898184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).and_reduce() << endl;
908184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).or_reduce() << endl;
918184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).xor_reduce() << endl;
928184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).nand_reduce() << endl;
938184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).nor_reduce() << endl;
948184Ssomayeh@cs.wisc.edu    cout << b( 7, 0 ).xnor_reduce() << endl;
958184Ssomayeh@cs.wisc.edu
9610083Snilay@cs.wisc.edu    // concatenation
979108SBrad.Beckmann@amd.com    cout << endl;
987635SBrad.Beckmann@amd.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).and_reduce() << endl;
997635SBrad.Beckmann@amd.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).or_reduce() << endl;
1008931Sandreas.hansson@arm.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).xor_reduce() << endl;
1017635SBrad.Beckmann@amd.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).nand_reduce() << endl;
1027635SBrad.Beckmann@amd.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).nor_reduce() << endl;
1037635SBrad.Beckmann@amd.com    cout << ( b( 7, 0 ), b( 15, 8 ) ).xnor_reduce() << endl;
10410524Snilay@cs.wisc.edu
1059870Sandreas.hansson@arm.com    // 2) check the functionality of the reduce methods
1069870Sandreas.hansson@arm.com
1079870Sandreas.hansson@arm.com    sc_bigint<2> c2 = -1;
1089870Sandreas.hansson@arm.com    cout << endl;
1099870Sandreas.hansson@arm.com    cout << c2.and_reduce() << endl;
1109870Sandreas.hansson@arm.com    cout << c2.xor_reduce() << endl;
1117635SBrad.Beckmann@amd.com
11210519Snilay@cs.wisc.edu    sc_bigint<3> c3 = -1;
1137635SBrad.Beckmann@amd.com    cout << endl;
1149793Sakash.bagdia@arm.com    cout << c3.and_reduce() << endl;
1159870Sandreas.hansson@arm.com    cout << c3.xor_reduce() << endl;
1169870Sandreas.hansson@arm.com
1179793Sakash.bagdia@arm.com    sc_biguint<2> d2 = sc_dt::uint_type( -1 );
11810120Snilay@cs.wisc.edu    cout << endl;
1197635SBrad.Beckmann@amd.com    cout << d2.and_reduce() << endl;
12010120Snilay@cs.wisc.edu    cout << d2.xor_reduce() << endl;
1219108SBrad.Beckmann@amd.com
1227635SBrad.Beckmann@amd.com    sc_biguint<3> d3 = sc_dt::uint_type( -1 );
1237635SBrad.Beckmann@amd.com    cout << endl;
1247635SBrad.Beckmann@amd.com    cout << d3.and_reduce() << endl;
1257635SBrad.Beckmann@amd.com    cout << d3.xor_reduce() << endl;
1267635SBrad.Beckmann@amd.com
1277635SBrad.Beckmann@amd.com    sc_bigint<6> e;
12810120Snilay@cs.wisc.edu    sc_biguint<6> f;
1297635SBrad.Beckmann@amd.com    cout << endl;
1308932SBrad.Beckmann@amd.com    for( int i = 0; i >= -10; -- i ) {
1317635SBrad.Beckmann@amd.com        e = i;
13211266SBrad.Beckmann@amd.com        f = i;
13311266SBrad.Beckmann@amd.com        cout << e.xor_reduce() << endl;
13411266SBrad.Beckmann@amd.com        cout << f.xor_reduce() << endl;
13511266SBrad.Beckmann@amd.com    }
13611266SBrad.Beckmann@amd.com
13711266SBrad.Beckmann@amd.com    return 0;
13811266SBrad.Beckmann@amd.com}
13911266SBrad.Beckmann@amd.com