112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_fixed.h -
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Martin Janssen, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de *****************************************************************************/
2712027Sjungma@eit.uni-kl.de
2812027Sjungma@eit.uni-kl.de/*****************************************************************************
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112027Sjungma@eit.uni-kl.de  changes you are making here.
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.de      Name, Affiliation, Date:
3412027Sjungma@eit.uni-kl.de  Description of Modification:
3512027Sjungma@eit.uni-kl.de
3612027Sjungma@eit.uni-kl.de *****************************************************************************/
3712027Sjungma@eit.uni-kl.de
3812027Sjungma@eit.uni-kl.de// $Log: sc_fixed.h,v $
3912027Sjungma@eit.uni-kl.de// Revision 1.2  2011/01/19 18:57:40  acg
4012027Sjungma@eit.uni-kl.de//  Andy Goodrich: changes for IEEE_1666_2011.
4112027Sjungma@eit.uni-kl.de//
4212027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:04  acg
4312027Sjungma@eit.uni-kl.de// SystemC 2.3
4412027Sjungma@eit.uni-kl.de//
4512027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:53:57  acg
4612027Sjungma@eit.uni-kl.de// Andy Goodrich: added $Log command so that CVS comments are reproduced in
4712027Sjungma@eit.uni-kl.de// the source.
4812027Sjungma@eit.uni-kl.de//
4912027Sjungma@eit.uni-kl.de
5012027Sjungma@eit.uni-kl.de#ifndef SC_FIXED_H
5112027Sjungma@eit.uni-kl.de#define SC_FIXED_H
5212027Sjungma@eit.uni-kl.de
5312027Sjungma@eit.uni-kl.de
5412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fix.h"
5512027Sjungma@eit.uni-kl.de
5612027Sjungma@eit.uni-kl.de
5712027Sjungma@eit.uni-kl.denamespace sc_dt
5812027Sjungma@eit.uni-kl.de{
5912027Sjungma@eit.uni-kl.de
6012027Sjungma@eit.uni-kl.de// classes defined in this module
6112027Sjungma@eit.uni-kl.detemplate <int W, int I, sc_q_mode Q, sc_o_mode O, int N> class sc_fixed;
6212027Sjungma@eit.uni-kl.detemplate <int W, int I, sc_q_mode Q, sc_o_mode O, int N> class sc_fixed_fast;
6312027Sjungma@eit.uni-kl.de
6412027Sjungma@eit.uni-kl.de
6512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
6612027Sjungma@eit.uni-kl.de//  TEMPLATE CLASS : sc_fixed
6712027Sjungma@eit.uni-kl.de//
6812027Sjungma@eit.uni-kl.de//  "Constrained" signed fixed-point class; arbitrary precision.
6912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7012027Sjungma@eit.uni-kl.de
7112027Sjungma@eit.uni-kl.detemplate <int W, int I,
7212027Sjungma@eit.uni-kl.de	  sc_q_mode Q = SC_DEFAULT_Q_MODE_,
7312027Sjungma@eit.uni-kl.de	  sc_o_mode O = SC_DEFAULT_O_MODE_, int N = SC_DEFAULT_N_BITS_>
7412027Sjungma@eit.uni-kl.declass sc_fixed : public sc_fix
7512027Sjungma@eit.uni-kl.de{
7612027Sjungma@eit.uni-kl.de
7712027Sjungma@eit.uni-kl.depublic:
7812027Sjungma@eit.uni-kl.de
7912027Sjungma@eit.uni-kl.de    // constructors
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.de    explicit sc_fixed( sc_fxnum_observer* = 0 );
8212027Sjungma@eit.uni-kl.de    explicit sc_fixed( const sc_fxcast_switch&, sc_fxnum_observer* = 0 );
8312027Sjungma@eit.uni-kl.de
8412027Sjungma@eit.uni-kl.de#define DECL_CTORS_T_A(tp)                                                    \
8512027Sjungma@eit.uni-kl.de             sc_fixed( tp, sc_fxnum_observer* = 0 );                          \
8612027Sjungma@eit.uni-kl.de             sc_fixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 );
8712027Sjungma@eit.uni-kl.de
8812027Sjungma@eit.uni-kl.de#define DECL_CTORS_T_B(tp)                                                    \
8912027Sjungma@eit.uni-kl.de    explicit sc_fixed( tp, sc_fxnum_observer* = 0 );                          \
9012027Sjungma@eit.uni-kl.de             sc_fixed( tp, const sc_fxcast_switch&, sc_fxnum_observer* = 0 );
9112027Sjungma@eit.uni-kl.de
9212027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(int)
9312027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(unsigned int)
9412027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(long)
9512027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(unsigned long)
9612027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(float)
9712027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(double)
9812027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const char*)
9912027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxval&)
10012027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxval_fast&)
10112027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxnum&)
10212027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxnum_fast&)
10312027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
10412027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(int64)
10512027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(uint64)
10612027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_int_base&)
10712027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_uint_base&)
10812027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_signed&)
10912027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_unsigned&)
11012027Sjungma@eit.uni-kl.de#endif
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de#undef DECL_CTORS_T_A
11312027Sjungma@eit.uni-kl.de#undef DECL_CTORS_T_B
11412027Sjungma@eit.uni-kl.de
11512027Sjungma@eit.uni-kl.de    // copy constructor
11612027Sjungma@eit.uni-kl.de
11712027Sjungma@eit.uni-kl.de    sc_fixed( const sc_fixed<W,I,Q,O,N>& );
11812027Sjungma@eit.uni-kl.de
11912027Sjungma@eit.uni-kl.de
12012027Sjungma@eit.uni-kl.de    // assignment operators
12112027Sjungma@eit.uni-kl.de
12212027Sjungma@eit.uni-kl.de    sc_fixed& operator = ( const sc_fixed<W,I,Q,O,N>& );
12312027Sjungma@eit.uni-kl.de
12412027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp)                                                  \
12512027Sjungma@eit.uni-kl.de    sc_fixed& operator op ( tp );
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
12812027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op)                                                 \
12912027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,int64)                                                   \
13012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,uint64)                                                  \
13112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_int_base&)                                      \
13212027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_uint_base&)                                     \
13312027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_signed&)                                        \
13412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_unsigned&)
13512027Sjungma@eit.uni-kl.de#else
13612027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op)
13712027Sjungma@eit.uni-kl.de#endif
13812027Sjungma@eit.uni-kl.de
13912027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op)                                                       \
14012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,int)                                                     \
14112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,unsigned int)                                            \
14212027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,long)                                                    \
14312027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,unsigned long)                                           \
14412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,float)                                                  \
14512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,double)                                                  \
14612027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const char*)                                             \
14712027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxval&)                                         \
14812027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxval_fast&)                                    \
14912027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxnum&)                                         \
15012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxnum_fast&)                                    \
15112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_OTHER(op)
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de    DECL_ASN_OP(=)
15412027Sjungma@eit.uni-kl.de
15512027Sjungma@eit.uni-kl.de    DECL_ASN_OP(*=)
15612027Sjungma@eit.uni-kl.de    DECL_ASN_OP(/=)
15712027Sjungma@eit.uni-kl.de    DECL_ASN_OP(+=)
15812027Sjungma@eit.uni-kl.de    DECL_ASN_OP(-=)
15912027Sjungma@eit.uni-kl.de
16012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(<<=,int)
16112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(>>=,int)
16212027Sjungma@eit.uni-kl.de
16312027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(&=,const sc_fix&)
16412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(&=,const sc_fix_fast&)
16512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(|=,const sc_fix&)
16612027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(|=,const sc_fix_fast&)
16712027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(^=,const sc_fix&)
16812027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(^=,const sc_fix_fast&)
16912027Sjungma@eit.uni-kl.de
17012027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T
17112027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER
17212027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP
17312027Sjungma@eit.uni-kl.de
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.de    // auto-increment and auto-decrement
17612027Sjungma@eit.uni-kl.de
17712027Sjungma@eit.uni-kl.de    const sc_fxval operator ++ ( int );
17812027Sjungma@eit.uni-kl.de    const sc_fxval operator -- ( int );
17912027Sjungma@eit.uni-kl.de
18012027Sjungma@eit.uni-kl.de    sc_fixed& operator ++ ();
18112027Sjungma@eit.uni-kl.de    sc_fixed& operator -- ();
18212027Sjungma@eit.uni-kl.de
18312027Sjungma@eit.uni-kl.de};
18412027Sjungma@eit.uni-kl.de
18512027Sjungma@eit.uni-kl.de
18612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
18712027Sjungma@eit.uni-kl.de//  TEMPLATE CLASS : sc_fixed_fast
18812027Sjungma@eit.uni-kl.de//
18912027Sjungma@eit.uni-kl.de//  "Constrained" signed fixed-point class; limited precision.
19012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
19112027Sjungma@eit.uni-kl.de
19212027Sjungma@eit.uni-kl.detemplate <int W, int I,
19312027Sjungma@eit.uni-kl.de	  sc_q_mode Q = SC_DEFAULT_Q_MODE_,
19412027Sjungma@eit.uni-kl.de	  sc_o_mode O = SC_DEFAULT_O_MODE_, int N = SC_DEFAULT_N_BITS_>
19512027Sjungma@eit.uni-kl.declass sc_fixed_fast : public sc_fix_fast
19612027Sjungma@eit.uni-kl.de{
19712027Sjungma@eit.uni-kl.de
19812027Sjungma@eit.uni-kl.depublic:
19912027Sjungma@eit.uni-kl.de
20012027Sjungma@eit.uni-kl.de    // constructors
20112027Sjungma@eit.uni-kl.de
20212027Sjungma@eit.uni-kl.de    explicit sc_fixed_fast( sc_fxnum_fast_observer* = 0 );
20312027Sjungma@eit.uni-kl.de    explicit sc_fixed_fast( const sc_fxcast_switch&,
20412027Sjungma@eit.uni-kl.de			    sc_fxnum_fast_observer* = 0 );
20512027Sjungma@eit.uni-kl.de
20612027Sjungma@eit.uni-kl.de#define DECL_CTORS_T_A(tp)                                                    \
20712027Sjungma@eit.uni-kl.de             sc_fixed_fast( tp, sc_fxnum_fast_observer* = 0 );                \
20812027Sjungma@eit.uni-kl.de             sc_fixed_fast( tp, const sc_fxcast_switch&,                      \
20912027Sjungma@eit.uni-kl.de                            sc_fxnum_fast_observer* = 0 );
21012027Sjungma@eit.uni-kl.de
21112027Sjungma@eit.uni-kl.de#define DECL_CTORS_T_B(tp)                                                    \
21212027Sjungma@eit.uni-kl.de    explicit sc_fixed_fast( tp, sc_fxnum_fast_observer* = 0 );                \
21312027Sjungma@eit.uni-kl.de             sc_fixed_fast( tp, const sc_fxcast_switch&,                      \
21412027Sjungma@eit.uni-kl.de                            sc_fxnum_fast_observer* = 0 );
21512027Sjungma@eit.uni-kl.de
21612027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(int)
21712027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(unsigned int)
21812027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(long)
21912027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(unsigned long)
22012027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(float)
22112027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(double)
22212027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const char*)
22312027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxval&)
22412027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxval_fast&)
22512027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxnum&)
22612027Sjungma@eit.uni-kl.de    DECL_CTORS_T_A(const sc_fxnum_fast&)
22712027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
22812027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(int64)
22912027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(uint64)
23012027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_int_base&)
23112027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_uint_base&)
23212027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_signed&)
23312027Sjungma@eit.uni-kl.de    DECL_CTORS_T_B(const sc_unsigned&)
23412027Sjungma@eit.uni-kl.de#endif
23512027Sjungma@eit.uni-kl.de
23612027Sjungma@eit.uni-kl.de#undef DECL_CTORS_T_A
23712027Sjungma@eit.uni-kl.de#undef DECL_CTORS_T_B
23812027Sjungma@eit.uni-kl.de
23912027Sjungma@eit.uni-kl.de    // copy constructor
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.de    sc_fixed_fast( const sc_fixed_fast<W,I,Q,O,N>& );
24212027Sjungma@eit.uni-kl.de
24312027Sjungma@eit.uni-kl.de
24412027Sjungma@eit.uni-kl.de    // assignment operators
24512027Sjungma@eit.uni-kl.de
24612027Sjungma@eit.uni-kl.de    sc_fixed_fast& operator = ( const sc_fixed_fast<W,I,Q,O,N>& );
24712027Sjungma@eit.uni-kl.de
24812027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_T(op,tp)                                                  \
24912027Sjungma@eit.uni-kl.de    sc_fixed_fast& operator op ( tp );
25012027Sjungma@eit.uni-kl.de
25112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
25212027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op)                                                 \
25312027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,int64)                                                   \
25412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,uint64)                                                  \
25512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_int_base&)                                      \
25612027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_uint_base&)                                     \
25712027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_signed&)                                        \
25812027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_unsigned&)
25912027Sjungma@eit.uni-kl.de#else
26012027Sjungma@eit.uni-kl.de#define DECL_ASN_OP_OTHER(op)
26112027Sjungma@eit.uni-kl.de#endif
26212027Sjungma@eit.uni-kl.de
26312027Sjungma@eit.uni-kl.de#define DECL_ASN_OP(op)                                                       \
26412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,int)                                                     \
26512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,unsigned int)                                            \
26612027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,long)                                                    \
26712027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,unsigned long)                                           \
26812027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,float)                                                  \
26912027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,double)                                                  \
27012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const char*)                                             \
27112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxval&)                                         \
27212027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxval_fast&)                                    \
27312027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxnum&)                                         \
27412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(op,const sc_fxnum_fast&)                                    \
27512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_OTHER(op)
27612027Sjungma@eit.uni-kl.de
27712027Sjungma@eit.uni-kl.de    DECL_ASN_OP(=)
27812027Sjungma@eit.uni-kl.de
27912027Sjungma@eit.uni-kl.de    DECL_ASN_OP(*=)
28012027Sjungma@eit.uni-kl.de    DECL_ASN_OP(/=)
28112027Sjungma@eit.uni-kl.de    DECL_ASN_OP(+=)
28212027Sjungma@eit.uni-kl.de    DECL_ASN_OP(-=)
28312027Sjungma@eit.uni-kl.de
28412027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(<<=,int)
28512027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(>>=,int)
28612027Sjungma@eit.uni-kl.de
28712027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(&=,const sc_fix&)
28812027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(&=,const sc_fix_fast&)
28912027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(|=,const sc_fix&)
29012027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(|=,const sc_fix_fast&)
29112027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(^=,const sc_fix&)
29212027Sjungma@eit.uni-kl.de    DECL_ASN_OP_T(^=,const sc_fix_fast&)
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_T
29512027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP_OTHER
29612027Sjungma@eit.uni-kl.de#undef DECL_ASN_OP
29712027Sjungma@eit.uni-kl.de
29812027Sjungma@eit.uni-kl.de
29912027Sjungma@eit.uni-kl.de    // auto-increment and auto-decrement
30012027Sjungma@eit.uni-kl.de
30112027Sjungma@eit.uni-kl.de    const sc_fxval_fast operator ++ ( int );
30212027Sjungma@eit.uni-kl.de    const sc_fxval_fast operator -- ( int );
30312027Sjungma@eit.uni-kl.de
30412027Sjungma@eit.uni-kl.de    sc_fixed_fast& operator ++ ();
30512027Sjungma@eit.uni-kl.de    sc_fixed_fast& operator -- ();
30612027Sjungma@eit.uni-kl.de
30712027Sjungma@eit.uni-kl.de};
30812027Sjungma@eit.uni-kl.de
30912027Sjungma@eit.uni-kl.de
31012027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
31112027Sjungma@eit.uni-kl.de
31212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
31312027Sjungma@eit.uni-kl.de//  TEMPLATE CLASS : sc_fixed
31412027Sjungma@eit.uni-kl.de//
31512027Sjungma@eit.uni-kl.de//  "Constrained" signed fixed-point class; arbitrary precision.
31612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
31712027Sjungma@eit.uni-kl.de
31812027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
31912027Sjungma@eit.uni-kl.deinline
32012027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::sc_fixed( sc_fxnum_observer* observer_ )
32112027Sjungma@eit.uni-kl.de: sc_fix( W, I, Q, O, N, observer_ )
32212027Sjungma@eit.uni-kl.de{}
32312027Sjungma@eit.uni-kl.de
32412027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
32512027Sjungma@eit.uni-kl.deinline
32612027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::sc_fixed( const sc_fxcast_switch& cast_sw,
32712027Sjungma@eit.uni-kl.de			       sc_fxnum_observer* observer_ )
32812027Sjungma@eit.uni-kl.de: sc_fix( W, I, Q, O, N, cast_sw, observer_ )
32912027Sjungma@eit.uni-kl.de{}
33012027Sjungma@eit.uni-kl.de
33112027Sjungma@eit.uni-kl.de#define DEFN_CTORS_T(tp)                                                      \
33212027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
33312027Sjungma@eit.uni-kl.deinline                                                                        \
33412027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::sc_fixed( tp a,                                          \
33512027Sjungma@eit.uni-kl.de			       sc_fxnum_observer* observer_ )                 \
33612027Sjungma@eit.uni-kl.de: sc_fix( a, W, I, Q, O, N, observer_ )                                       \
33712027Sjungma@eit.uni-kl.de{}                                                                            \
33812027Sjungma@eit.uni-kl.de                                                                              \
33912027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
34012027Sjungma@eit.uni-kl.deinline                                                                        \
34112027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::sc_fixed( tp a,                                          \
34212027Sjungma@eit.uni-kl.de			       const sc_fxcast_switch& cast_sw,               \
34312027Sjungma@eit.uni-kl.de			       sc_fxnum_observer* observer_ )                 \
34412027Sjungma@eit.uni-kl.de: sc_fix( a, W, I, Q, O, N, cast_sw, observer_ )                              \
34512027Sjungma@eit.uni-kl.de{}
34612027Sjungma@eit.uni-kl.de
34712027Sjungma@eit.uni-kl.deDEFN_CTORS_T(int)
34812027Sjungma@eit.uni-kl.deDEFN_CTORS_T(unsigned int)
34912027Sjungma@eit.uni-kl.deDEFN_CTORS_T(long)
35012027Sjungma@eit.uni-kl.deDEFN_CTORS_T(unsigned long)
35112027Sjungma@eit.uni-kl.deDEFN_CTORS_T(float)
35212027Sjungma@eit.uni-kl.deDEFN_CTORS_T(double)
35312027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const char*)
35412027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxval&)
35512027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxval_fast&)
35612027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxnum&)
35712027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxnum_fast&)
35812027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
35912027Sjungma@eit.uni-kl.deDEFN_CTORS_T(int64)
36012027Sjungma@eit.uni-kl.deDEFN_CTORS_T(uint64)
36112027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_int_base&)
36212027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_uint_base&)
36312027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_signed&)
36412027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_unsigned&)
36512027Sjungma@eit.uni-kl.de#endif
36612027Sjungma@eit.uni-kl.de
36712027Sjungma@eit.uni-kl.de#undef DEFN_CTORS_T
36812027Sjungma@eit.uni-kl.de
36912027Sjungma@eit.uni-kl.de// copy constructor
37012027Sjungma@eit.uni-kl.de
37112027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
37212027Sjungma@eit.uni-kl.deinline
37312027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::sc_fixed( const sc_fixed<W,I,Q,O,N>& a )
37412027Sjungma@eit.uni-kl.de: sc_fix( a, W, I, Q, O, N )
37512027Sjungma@eit.uni-kl.de{}
37612027Sjungma@eit.uni-kl.de
37712027Sjungma@eit.uni-kl.de
37812027Sjungma@eit.uni-kl.de// assignment operators
37912027Sjungma@eit.uni-kl.de
38012027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
38112027Sjungma@eit.uni-kl.deinline
38212027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>&
38312027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator = ( const sc_fixed<W,I,Q,O,N>& a )
38412027Sjungma@eit.uni-kl.de{
38512027Sjungma@eit.uni-kl.de    sc_fix::operator = ( a );
38612027Sjungma@eit.uni-kl.de    return *this;
38712027Sjungma@eit.uni-kl.de}
38812027Sjungma@eit.uni-kl.de
38912027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp)                                                  \
39012027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
39112027Sjungma@eit.uni-kl.deinline                                                                        \
39212027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>&                                                          \
39312027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator op ( tp a )                                     \
39412027Sjungma@eit.uni-kl.de{                                                                             \
39512027Sjungma@eit.uni-kl.de    sc_fix::operator op ( a );                                                \
39612027Sjungma@eit.uni-kl.de    return *this;                                                             \
39712027Sjungma@eit.uni-kl.de}
39812027Sjungma@eit.uni-kl.de
39912027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
40012027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op)                                                 \
40112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int64)                                                       \
40212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,uint64)                                                      \
40312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_int_base&)                                          \
40412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_uint_base&)                                         \
40512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_signed&)                                            \
40612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_unsigned&)
40712027Sjungma@eit.uni-kl.de#else
40812027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op)
40912027Sjungma@eit.uni-kl.de#endif
41012027Sjungma@eit.uni-kl.de
41112027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op)                                                       \
41212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int)                                                         \
41312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned int)                                                \
41412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,long)                                                        \
41512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned long)                                               \
41612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,float)                                                      \
41712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,double)                                                      \
41812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const char*)                                                 \
41912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval&)                                             \
42012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval_fast&)                                        \
42112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum&)                                             \
42212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum_fast&)                                        \
42312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op)
42412027Sjungma@eit.uni-kl.de
42512027Sjungma@eit.uni-kl.deDEFN_ASN_OP(=)
42612027Sjungma@eit.uni-kl.de
42712027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=)
42812027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=)
42912027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=)
43012027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=)
43112027Sjungma@eit.uni-kl.de
43212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(<<=,int)
43312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(>>=,int)
43412027Sjungma@eit.uni-kl.de
43512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(&=,const sc_fix&)
43612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(&=,const sc_fix_fast&)
43712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(|=,const sc_fix&)
43812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(|=,const sc_fix_fast&)
43912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(^=,const sc_fix&)
44012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(^=,const sc_fix_fast&)
44112027Sjungma@eit.uni-kl.de
44212027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T
44312027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER
44412027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP
44512027Sjungma@eit.uni-kl.de
44612027Sjungma@eit.uni-kl.de
44712027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement
44812027Sjungma@eit.uni-kl.de
44912027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
45012027Sjungma@eit.uni-kl.deinline
45112027Sjungma@eit.uni-kl.deconst sc_fxval
45212027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator ++ ( int )
45312027Sjungma@eit.uni-kl.de{
45412027Sjungma@eit.uni-kl.de    return sc_fxval( sc_fix::operator ++ ( 0 ) );
45512027Sjungma@eit.uni-kl.de}
45612027Sjungma@eit.uni-kl.de
45712027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
45812027Sjungma@eit.uni-kl.deinline
45912027Sjungma@eit.uni-kl.deconst sc_fxval
46012027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator -- ( int )
46112027Sjungma@eit.uni-kl.de{
46212027Sjungma@eit.uni-kl.de    return sc_fxval( sc_fix::operator -- ( 0 ) );
46312027Sjungma@eit.uni-kl.de}
46412027Sjungma@eit.uni-kl.de
46512027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
46612027Sjungma@eit.uni-kl.deinline
46712027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>&
46812027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator ++ ()
46912027Sjungma@eit.uni-kl.de{
47012027Sjungma@eit.uni-kl.de    sc_fix::operator ++ ();
47112027Sjungma@eit.uni-kl.de    return *this;
47212027Sjungma@eit.uni-kl.de}
47312027Sjungma@eit.uni-kl.de
47412027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
47512027Sjungma@eit.uni-kl.deinline
47612027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>&
47712027Sjungma@eit.uni-kl.desc_fixed<W,I,Q,O,N>::operator -- ()
47812027Sjungma@eit.uni-kl.de{
47912027Sjungma@eit.uni-kl.de    sc_fix::operator -- ();
48012027Sjungma@eit.uni-kl.de    return *this;
48112027Sjungma@eit.uni-kl.de}
48212027Sjungma@eit.uni-kl.de
48312027Sjungma@eit.uni-kl.de
48412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
48512027Sjungma@eit.uni-kl.de//  TEMPLATE CLASS : sc_fixed_fast
48612027Sjungma@eit.uni-kl.de//
48712027Sjungma@eit.uni-kl.de//  "Constrained" signed fixed-point class; limited precision.
48812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
48912027Sjungma@eit.uni-kl.de
49012027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
49112027Sjungma@eit.uni-kl.deinline
49212027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::sc_fixed_fast( sc_fxnum_fast_observer* observer_ )
49312027Sjungma@eit.uni-kl.de: sc_fix_fast( W, I, Q, O, N, observer_ )
49412027Sjungma@eit.uni-kl.de{}
49512027Sjungma@eit.uni-kl.de
49612027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
49712027Sjungma@eit.uni-kl.deinline
49812027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::sc_fixed_fast( const sc_fxcast_switch& cast_sw,
49912027Sjungma@eit.uni-kl.de					 sc_fxnum_fast_observer* observer_ )
50012027Sjungma@eit.uni-kl.de: sc_fix_fast( W, I, Q, O, N, cast_sw, observer_ )
50112027Sjungma@eit.uni-kl.de{}
50212027Sjungma@eit.uni-kl.de
50312027Sjungma@eit.uni-kl.de#define DEFN_CTORS_T(tp)                                                      \
50412027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
50512027Sjungma@eit.uni-kl.deinline                                                                        \
50612027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::sc_fixed_fast( tp a,                                \
50712027Sjungma@eit.uni-kl.de					 sc_fxnum_fast_observer* observer_ )  \
50812027Sjungma@eit.uni-kl.de: sc_fix_fast( a, W, I, Q, O, N, observer_ )                                  \
50912027Sjungma@eit.uni-kl.de{}                                                                            \
51012027Sjungma@eit.uni-kl.de                                                                              \
51112027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
51212027Sjungma@eit.uni-kl.deinline                                                                        \
51312027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::sc_fixed_fast( tp a,                                \
51412027Sjungma@eit.uni-kl.de					 const sc_fxcast_switch& cast_sw,     \
51512027Sjungma@eit.uni-kl.de					 sc_fxnum_fast_observer* observer_ )  \
51612027Sjungma@eit.uni-kl.de: sc_fix_fast( a, W, I, Q, O, N, cast_sw, observer_ )                         \
51712027Sjungma@eit.uni-kl.de{}
51812027Sjungma@eit.uni-kl.de
51912027Sjungma@eit.uni-kl.deDEFN_CTORS_T(int)
52012027Sjungma@eit.uni-kl.deDEFN_CTORS_T(unsigned int)
52112027Sjungma@eit.uni-kl.deDEFN_CTORS_T(long)
52212027Sjungma@eit.uni-kl.deDEFN_CTORS_T(unsigned long)
52312027Sjungma@eit.uni-kl.deDEFN_CTORS_T(float)
52412027Sjungma@eit.uni-kl.deDEFN_CTORS_T(double)
52512027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const char*)
52612027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxval&)
52712027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxval_fast&)
52812027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxnum&)
52912027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_fxnum_fast&)
53012027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
53112027Sjungma@eit.uni-kl.deDEFN_CTORS_T(int64)
53212027Sjungma@eit.uni-kl.deDEFN_CTORS_T(uint64)
53312027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_int_base&)
53412027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_uint_base&)
53512027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_signed&)
53612027Sjungma@eit.uni-kl.deDEFN_CTORS_T(const sc_unsigned&)
53712027Sjungma@eit.uni-kl.de#endif
53812027Sjungma@eit.uni-kl.de
53912027Sjungma@eit.uni-kl.de#undef DEFN_CTORS_T
54012027Sjungma@eit.uni-kl.de
54112027Sjungma@eit.uni-kl.de// copy constructor
54212027Sjungma@eit.uni-kl.de
54312027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
54412027Sjungma@eit.uni-kl.deinline
54512027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::sc_fixed_fast( const sc_fixed_fast<W,I,Q,O,N>& a )
54612027Sjungma@eit.uni-kl.de: sc_fix_fast( a, W, I, Q, O, N )
54712027Sjungma@eit.uni-kl.de{}
54812027Sjungma@eit.uni-kl.de
54912027Sjungma@eit.uni-kl.de
55012027Sjungma@eit.uni-kl.de// assignment operators
55112027Sjungma@eit.uni-kl.de
55212027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
55312027Sjungma@eit.uni-kl.deinline
55412027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>&
55512027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator = ( const sc_fixed_fast<W,I,Q,O,N>& a )
55612027Sjungma@eit.uni-kl.de{
55712027Sjungma@eit.uni-kl.de    sc_fix_fast::operator = ( a );
55812027Sjungma@eit.uni-kl.de    return *this;
55912027Sjungma@eit.uni-kl.de}
56012027Sjungma@eit.uni-kl.de
56112027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_T(op,tp)                                                  \
56212027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>                       \
56312027Sjungma@eit.uni-kl.deinline                                                                        \
56412027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>&                                                     \
56512027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator op ( tp a )                                \
56612027Sjungma@eit.uni-kl.de{                                                                             \
56712027Sjungma@eit.uni-kl.de    sc_fix_fast::operator op ( a );                                           \
56812027Sjungma@eit.uni-kl.de    return *this;                                                             \
56912027Sjungma@eit.uni-kl.de}
57012027Sjungma@eit.uni-kl.de
57112027Sjungma@eit.uni-kl.de#ifndef SC_FX_EXCLUDE_OTHER
57212027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op)                                                 \
57312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int64)                                                       \
57412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,uint64)                                                      \
57512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_int_base&)                                          \
57612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_uint_base&)                                         \
57712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_signed&)                                            \
57812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_unsigned&)
57912027Sjungma@eit.uni-kl.de#else
58012027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP_OTHER(op)
58112027Sjungma@eit.uni-kl.de#endif
58212027Sjungma@eit.uni-kl.de
58312027Sjungma@eit.uni-kl.de#define DEFN_ASN_OP(op)                                                       \
58412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,int)                                                         \
58512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned int)                                                \
58612027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,long)                                                        \
58712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,unsigned long)                                               \
58812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,float)                                                      \
58912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,double)                                                      \
59012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const char*)                                                 \
59112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval&)                                             \
59212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxval_fast&)                                        \
59312027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum&)                                             \
59412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(op,const sc_fxnum_fast&)                                        \
59512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_OTHER(op)
59612027Sjungma@eit.uni-kl.de
59712027Sjungma@eit.uni-kl.deDEFN_ASN_OP(=)
59812027Sjungma@eit.uni-kl.de
59912027Sjungma@eit.uni-kl.deDEFN_ASN_OP(*=)
60012027Sjungma@eit.uni-kl.deDEFN_ASN_OP(/=)
60112027Sjungma@eit.uni-kl.deDEFN_ASN_OP(+=)
60212027Sjungma@eit.uni-kl.deDEFN_ASN_OP(-=)
60312027Sjungma@eit.uni-kl.de
60412027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(<<=,int)
60512027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(>>=,int)
60612027Sjungma@eit.uni-kl.de
60712027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(&=,const sc_fix&)
60812027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(&=,const sc_fix_fast&)
60912027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(|=,const sc_fix&)
61012027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(|=,const sc_fix_fast&)
61112027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(^=,const sc_fix&)
61212027Sjungma@eit.uni-kl.deDEFN_ASN_OP_T(^=,const sc_fix_fast&)
61312027Sjungma@eit.uni-kl.de
61412027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_T
61512027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP_OTHER
61612027Sjungma@eit.uni-kl.de#undef DEFN_ASN_OP
61712027Sjungma@eit.uni-kl.de
61812027Sjungma@eit.uni-kl.de
61912027Sjungma@eit.uni-kl.de// auto-increment and auto-decrement
62012027Sjungma@eit.uni-kl.de
62112027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
62212027Sjungma@eit.uni-kl.deinline
62312027Sjungma@eit.uni-kl.deconst sc_fxval_fast
62412027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator ++ ( int )
62512027Sjungma@eit.uni-kl.de{
62612027Sjungma@eit.uni-kl.de    return sc_fxval_fast( sc_fix_fast::operator ++ ( 0 ) );
62712027Sjungma@eit.uni-kl.de}
62812027Sjungma@eit.uni-kl.de
62912027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
63012027Sjungma@eit.uni-kl.deinline
63112027Sjungma@eit.uni-kl.deconst sc_fxval_fast
63212027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator -- ( int )
63312027Sjungma@eit.uni-kl.de{
63412027Sjungma@eit.uni-kl.de    return sc_fxval_fast( sc_fix_fast::operator -- ( 0 ) );
63512027Sjungma@eit.uni-kl.de}
63612027Sjungma@eit.uni-kl.de
63712027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
63812027Sjungma@eit.uni-kl.deinline
63912027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>&
64012027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator ++ ()
64112027Sjungma@eit.uni-kl.de{
64212027Sjungma@eit.uni-kl.de    sc_fix_fast::operator ++ ();
64312027Sjungma@eit.uni-kl.de    return *this;
64412027Sjungma@eit.uni-kl.de}
64512027Sjungma@eit.uni-kl.de
64612027Sjungma@eit.uni-kl.detemplate<int W, int I, sc_q_mode Q, sc_o_mode O, int N>
64712027Sjungma@eit.uni-kl.deinline
64812027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>&
64912027Sjungma@eit.uni-kl.desc_fixed_fast<W,I,Q,O,N>::operator -- ()
65012027Sjungma@eit.uni-kl.de{
65112027Sjungma@eit.uni-kl.de    sc_fix_fast::operator -- ();
65212027Sjungma@eit.uni-kl.de    return *this;
65312027Sjungma@eit.uni-kl.de}
65412027Sjungma@eit.uni-kl.de
65512027Sjungma@eit.uni-kl.de} // namespace sc_dt
65612027Sjungma@eit.uni-kl.de
65712027Sjungma@eit.uni-kl.de
65812027Sjungma@eit.uni-kl.de#endif
65912027Sjungma@eit.uni-kl.de
66012027Sjungma@eit.uni-kl.de// Taf!
661