int_datatype.cpp revision 12855:588919e0e4aa
1/*****************************************************************************
2
3  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4  more contributor license agreements.  See the NOTICE file distributed
5  with this work for additional information regarding copyright ownership.
6  Accellera licenses this file to you under the Apache License, Version 2.0
7  (the "License"); you may not use this file except in compliance with the
8  License.  You may obtain a copy of the License at
9
10    http://www.apache.org/licenses/LICENSE-2.0
11
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15  implied.  See the License for the specific language governing
16  permissions and limitations under the License.
17
18 *****************************************************************************/
19
20/*****************************************************************************
21
22  int_datatype.cpp --
23
24  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
25
26 *****************************************************************************/
27
28/*****************************************************************************
29
30  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
31  changes you are making here.
32
33      Name, Affiliation, Date:
34  Description of Modification:
35
36 *****************************************************************************/
37
38/* Main file for "int" data type */
39
40#include "systemc.h"
41
42int sc_main(int ac, char *av[])
43{
44
45// 1. DECLARATION SYNTAX
46  int	a;
47  int	b;
48
49// 2. TYPE CONVERSION
50
51  // int <- int
52  a = 5;
53  b = -12;
54
55  cout 	<< "int \t<=\t int"
56	<< "\n---------------------"
57	<< "\nA = " << a << "\t\t 5"
58	<< "\nB = " << b << "\t\t -12"
59	<< "\n" << endl;
60
61  // **** ADD MORE TYPE CONVERSIONS *****
62
63// 3. OPERATORS
64//    Supported operators:      ! && || ~ & ^ | + - * / % << >>
65//                              &= ^= |= += -= *= /= %= <<= >>=
66//                              = == != < <= > >= << >>
67//                              ()++ ++() ()-- --() ?: ,
68
69#define VAL1	13
70#define VAL2	 3
71
72  unsigned int 	op1 = VAL1;
73  unsigned int  op2 = VAL2;
74  unsigned int 	r1, r2, r3, r4, r5, r6, r7, r8, r9;
75  unsigned int 	r10, r11, r12, r13, r14, r15, r16, r17, r18, r19;
76  unsigned int 	r20, r21, r22, r23, r24, r25, r26, r27, r28, r29;
77  unsigned int 	r30, r31, r32, r33, r34, r35;
78
79  r1 = op1 * op2;			// Multiplication
80
81  r2 = op1 / op2;			// Division
82
83  r3 = op1 % op2;			// Modulus
84
85  r4 = op1 + op2;			// Addition
86
87  r5 = op1 - op2;			// Subtraction
88
89  r6 = !op1;				// Logical NOT
90
91  r7 = op1 && op2;			// Logical AND
92
93  r8 = op1 || op2;			// Logical OR
94
95  r9 = op1 < op2;			// Less than
96
97  r10 = op1 <= op2;			// Less than or equal
98
99  r11 = op1 > op2;			// Greater than
100
101  r12 = op1 >= op2;			// Greater than or equal
102
103  r13 = op1 += op2;			// Compound addition
104    op1 = VAL1; op2 = VAL2;
105
106  r14 = op1 -= op2;			// Compound subtraction
107    op1 = VAL1; op2 = VAL2;
108
109  r15 = op1 *= op2;			// Compound multiplication
110    op1 = VAL1; op2 = VAL2;
111
112  r16 = op1 /= op2;			// Compound division
113    op1 = VAL1; op2 = VAL2;
114
115  r17 = op1 %= op2;			// Compound modulus
116    op1 = VAL1; op2 = VAL2;
117
118  r18 = op1 <<= op2;			// Compound shift left
119    op1 = VAL1; op2 = VAL2;
120
121  r19 = op1 >>= op2;			// Compound shift right
122    op1 = VAL1; op2 = VAL2;
123
124  r20 = op1 &= op2;			// Compound bitwise AND
125    op1 = VAL1; op2 = VAL2;
126
127  r21 = op1 ^= op2;			// Compound bitwise XOR
128    op1 = VAL1; op2 = VAL2;
129
130  r22 = op1 |= op2;			// Compound bitwise OR
131    op1 = VAL1; op2 = VAL2;
132
133  r23 = op2++;				// Postfix increment
134    op1 = VAL1; op2 = VAL2;
135
136  r24 = ++op2;				// Prefix increment
137    op1 = VAL1; op2 = VAL2;
138
139  r25 = op2--;				// Postfix decrement
140    op1 = VAL1; op2 = VAL2;
141
142  r26 = --op2;				// Prefix decrement
143    op1 = VAL1; op2 = VAL2;
144
145  r27 = (op1 > op2) ? true : false;	// Arithmetic if
146  r28 = (op1 < op2) ? true : false;	// Arithmetic if
147
148  r29 = op1, r29 = op2;		 	// Comma
149
150  r30 = ~op1;				// Bitwise NOT
151
152  r31 = op1 << op2;			// Left shift
153    op1 = VAL1; op2 = VAL2;
154
155  r32 = op1 >> op2;			// Right shift
156    op1 = VAL1; op2 = VAL2;
157
158  r33 = op1 & op2;			// Bitwise AND
159
160  r34 = op1 ^ op2;			// Bitwise XOR
161
162  r35 = op1 | op2;			// Bitwise OR
163
164  cout 	<< "op1 \t operator \t op2 \t result  [All operands are int]"
165	<< "\n----------------------------------------------------------------"
166  	<< "\n" << op1 << "\t    * \t\t " << op2 << "\t = " << r1
167  	<< "\n" << op1 << "\t    / \t\t " << op2 << "\t = " << r2
168  	<< "\n" << op1 << "\t    % \t\t " << op2 << "\t = " << r3
169  	<< "\n" << op1 << "\t    + \t\t " << op2 << "\t = " << r4
170  	<< "\n" << op1 << "\t    - \t\t " << op2 << "\t = " << r5
171  	<< "\n!(" << op1 << ") \t\t\t\t = " << r6
172  	<< "\n" << op1 << "\t    && \t\t " << op2 << "\t = " << r7
173  	<< "\n" << op1 << "\t    || \t\t " << op2 << "\t = " << r8
174  	<< "\n" << op1 << "\t    < \t\t "  << op2 << "\t = " << r9
175  	<< "\n" << op1 << "\t    <= \t\t " << op2 << "\t = " << r10
176  	<< "\n" << op1 << "\t    > \t\t "  << op2 << "\t = " << r11
177  	<< "\n" << op1 << "\t    >= \t\t " << op2 << "\t = " << r12
178  	<< "\n" << op1 << "\t    += \t\t " << op2 << "\t = " << r13
179  	<< "\n" << op1 << "\t    -= \t\t " << op2 << "\t = " << r14
180  	<< "\n" << op1 << "\t    *= \t\t " << op2 << "\t = " << r15
181  	<< "\n" << op1 << "\t    /= \t\t " << op2 << "\t = " << r16
182  	<< "\n" << op1 << "\t    %= \t\t " << op2 << "\t = " << r17
183  	<< "\n" << op1 << "\t    <<=\t\t " << op2 << "\t = " << r18
184  	<< "\n" << op1 << "\t    >>=\t\t " << op2 << "\t = " << r19
185  	<< "\n" << op1 << "\t    &= \t\t " << op2 << "\t = " << r20
186  	<< "\n" << op1 << "\t    ^= \t\t " << op2 << "\t = " << r21
187  	<< "\n" << op1 << "\t    |= \t\t " << op2 << "\t = " << r22
188  	<< "\n" << "\t    ()++ \t " << op2 << "\t = " << r23
189  	<< "\n" << "\t    ++() \t " << op2 << "\t = " << r24
190  	<< "\n" << "\t    ()-- \t " << op2 << "\t = " << r25
191  	<< "\n" << "\t    --() \t " << op2 << "\t = " << r26
192  	<< "\n" << op1 << "\t    > ?: \t " << op2 << "\t = " << r27
193  	<< "\n" << op1 << "\t    < ?: \t " << op2 << "\t = " << r28
194  	<< "\n" << op1 << "\t    , \t\t " << op2 << "\t = " << r29
195  	<< "\n~(" << op1 << ") \t\t\t\t = " << r30
196  	<< "\n" << op1 << "\t    << \t\t " << op2 << "\t = " << r31
197  	<< "\n" << op1 << "\t    >> \t\t " << op2 << "\t = " << r32
198  	<< "\n" << op1 << "\t    & \t\t " << op2 << "\t = " << r33
199  	<< "\n" << op1 << "\t    ^ \t\t " << op2 << "\t = " << r34
200  	<< "\n" << op1 << "\t    | \t\t " << op2 << "\t = " << r35
201 	<< endl;
202
203  if (op1 == op2)			// Equality
204   cout << op1 << "\t    == \t\t " << op2 << "\t -> true" << endl;
205  else
206   cout << op1 << "\t    == \t\t " << op2 << "\t -> false" << endl;
207
208  if (op1 != op2)			// Inequality
209   cout << op1 << "\t    != \t\t " << op2 << "\t -> true" << endl;
210  else
211   cout << op1 << "\t    != \t\t " << op2 << "\t -> false" << endl;
212
213  op1 = op2 = 0;			// Assignment operator concatenation
214   cout << op1 << "\t    = \t\t " << op2 << endl;
215  sc_start(0, SC_NS);
216  return 0;
217}
218