diff options
author | Gabe Black <gabeblack@google.com> | 2018-05-22 02:21:17 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-08-08 10:08:12 +0000 |
commit | 5ee040a534d422ee08918ef49d55620184df7120 (patch) | |
tree | 1688e050dec6abf1a36fc92070b151e6b0682fdd /src/systemc/ext/dt/fx/sc_fixed.hh | |
parent | 7adb1b250b712920ea5d685f146ad6df55346393 (diff) | |
download | gem5-5ee040a534d422ee08918ef49d55620184df7120.tar.xz |
Systemc: Port over all of the systemc "datatype" headers.
These are the headers originally written by Accellera with a few
modifications. Most significantly, I went through and mostly (but not
entirely) manually editted them to conform to gem5 style and to be
more self consistent. Second, I resolved some macros which optionally
select features. I removed support for deprecated functions, and
otherwise enabled everything.
The actual implementation behind these headers will also be ported
over, but in a subsequent change.
Change-Id: I203d3f6c8a3af9120b946001d01defbb0643a6b6
Reviewed-on: https://gem5-review.googlesource.com/10843
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/ext/dt/fx/sc_fixed.hh')
-rw-r--r-- | src/systemc/ext/dt/fx/sc_fixed.hh | 586 |
1 files changed, 586 insertions, 0 deletions
diff --git a/src/systemc/ext/dt/fx/sc_fixed.hh b/src/systemc/ext/dt/fx/sc_fixed.hh new file mode 100644 index 000000000..2f8e7a52e --- /dev/null +++ b/src/systemc/ext/dt/fx/sc_fixed.hh @@ -0,0 +1,586 @@ +/***************************************************************************** + + 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. + + *****************************************************************************/ + +/***************************************************************************** + + sc_fixed.h - + + Original Author: Martin Janssen, Synopsys, Inc. + + *****************************************************************************/ + +/***************************************************************************** + + MODIFICATION LOG - modifiers, enter your name, affiliation, date and + changes you are making here. + + Name, Affiliation, Date: + Description of Modification: + + *****************************************************************************/ + +// $Log: sc_fixed.h,v $ +// Revision 1.2 2011/01/19 18:57:40 acg +// Andy Goodrich: changes for IEEE_1666_2011. +// +// Revision 1.1.1.1 2006/12/15 20:20:04 acg +// SystemC 2.3 +// +// Revision 1.3 2006/01/13 18:53:57 acg +// Andy Goodrich: added $Log command so that CVS comments are reproduced in +// the source. +// + +#ifndef __SYSTEMC_EXT_DT_FX_SC_FIXED_HH__ +#define __SYSTEMC_EXT_DT_FX_SC_FIXED_HH__ + +#include "sc_fix.hh" + +namespace sc_dt +{ + +// classes defined in this module +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +class sc_fixed; +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +class sc_fixed_fast; + +// ---------------------------------------------------------------------------- +// TEMPLATE CLASS : sc_fixed +// +// "Constrained" signed fixed-point class; arbitrary precision. +// ---------------------------------------------------------------------------- + +template <int W, int I, + sc_q_mode Q=SC_DEFAULT_Q_MODE_, + sc_o_mode O=SC_DEFAULT_O_MODE_, int N=SC_DEFAULT_N_BITS_> +class sc_fixed : public sc_fix +{ + public: + // constructors + explicit sc_fixed(sc_fxnum_observer * =0); + explicit sc_fixed(const sc_fxcast_switch &, sc_fxnum_observer * =0); + +#define DECL_CTORS_T_A(tp) \ + sc_fixed(tp, sc_fxnum_observer * =0); \ + sc_fixed(tp, const sc_fxcast_switch &, sc_fxnum_observer * =0); + +#define DECL_CTORS_T_B(tp) \ + explicit sc_fixed(tp, sc_fxnum_observer * =0); \ + sc_fixed(tp, const sc_fxcast_switch &, sc_fxnum_observer * =0); + + DECL_CTORS_T_A(int) + DECL_CTORS_T_A(unsigned int) + DECL_CTORS_T_A(long) + DECL_CTORS_T_A(unsigned long) + DECL_CTORS_T_A(float) + DECL_CTORS_T_A(double) + DECL_CTORS_T_A(const char *) + DECL_CTORS_T_A(const sc_fxval &) + DECL_CTORS_T_A(const sc_fxval_fast &) + DECL_CTORS_T_A(const sc_fxnum &) + DECL_CTORS_T_A(const sc_fxnum_fast &) + + DECL_CTORS_T_B(int64) + DECL_CTORS_T_B(uint64) + DECL_CTORS_T_B(const sc_int_base&) + DECL_CTORS_T_B(const sc_uint_base&) + DECL_CTORS_T_B(const sc_signed&) + DECL_CTORS_T_B(const sc_unsigned&) + +#undef DECL_CTORS_T_A +#undef DECL_CTORS_T_B + + // copy constructor + sc_fixed(const sc_fixed<W, I, Q, O, N> &); + + // assignment operators + sc_fixed &operator = (const sc_fixed<W, I, Q, O, N> &); + +#define DECL_ASN_OP_T(op, tp) sc_fixed &operator op (tp); + +#define DECL_ASN_OP_OTHER(op) \ + DECL_ASN_OP_T(op, int64) \ + DECL_ASN_OP_T(op, uint64) \ + DECL_ASN_OP_T(op, const sc_int_base&) \ + DECL_ASN_OP_T(op, const sc_uint_base&) \ + DECL_ASN_OP_T(op, const sc_signed&) \ + DECL_ASN_OP_T(op, const sc_unsigned&) + +#define DECL_ASN_OP(op) \ + DECL_ASN_OP_T(op, int) \ + DECL_ASN_OP_T(op, unsigned int) \ + DECL_ASN_OP_T(op, long) \ + DECL_ASN_OP_T(op, unsigned long) \ + DECL_ASN_OP_T(op, float) \ + DECL_ASN_OP_T(op, double) \ + DECL_ASN_OP_T(op, const char *) \ + DECL_ASN_OP_T(op, const sc_fxval &) \ + DECL_ASN_OP_T(op, const sc_fxval_fast &) \ + DECL_ASN_OP_T(op, const sc_fxnum &) \ + DECL_ASN_OP_T(op, const sc_fxnum_fast &) \ + DECL_ASN_OP_OTHER(op) + + DECL_ASN_OP(=) + + DECL_ASN_OP(*=) + DECL_ASN_OP(/=) + DECL_ASN_OP(+=) + DECL_ASN_OP(-=) + + DECL_ASN_OP_T(<<=, int) + DECL_ASN_OP_T(>>=, int) + + DECL_ASN_OP_T(&=, const sc_fix &) + DECL_ASN_OP_T(&=, const sc_fix_fast &) + DECL_ASN_OP_T(|=, const sc_fix &) + DECL_ASN_OP_T(|=, const sc_fix_fast &) + DECL_ASN_OP_T(^=, const sc_fix &) + DECL_ASN_OP_T(^=, const sc_fix_fast &) + +#undef DECL_ASN_OP_T +#undef DECL_ASN_OP_OTHER +#undef DECL_ASN_OP + + // auto-increment and auto-decrement + const sc_fxval operator ++ (int); + const sc_fxval operator -- (int); + + sc_fixed & operator ++ (); + sc_fixed & operator -- (); +}; + + +// ---------------------------------------------------------------------------- +// TEMPLATE CLASS : sc_fixed_fast +// +// "Constrained" signed fixed-point class; limited precision. +// ---------------------------------------------------------------------------- + +template <int W, int I, + sc_q_mode Q=SC_DEFAULT_Q_MODE_, + sc_o_mode O=SC_DEFAULT_O_MODE_, int N=SC_DEFAULT_N_BITS_> +class sc_fixed_fast : public sc_fix_fast +{ + public: + // constructors + explicit sc_fixed_fast(sc_fxnum_fast_observer * =0); + explicit sc_fixed_fast(const sc_fxcast_switch &, + sc_fxnum_fast_observer * =0); + +#define DECL_CTORS_T_A(tp) \ + sc_fixed_fast(tp, sc_fxnum_fast_observer * =0); \ + sc_fixed_fast(tp, const sc_fxcast_switch &, \ + sc_fxnum_fast_observer * =0); + +#define DECL_CTORS_T_B(tp) \ + explicit sc_fixed_fast(tp, sc_fxnum_fast_observer * =0); \ + sc_fixed_fast(tp, const sc_fxcast_switch &, \ + sc_fxnum_fast_observer * =0); + + DECL_CTORS_T_A(int) + DECL_CTORS_T_A(unsigned int) + DECL_CTORS_T_A(long) + DECL_CTORS_T_A(unsigned long) + DECL_CTORS_T_A(float) + DECL_CTORS_T_A(double) + DECL_CTORS_T_A(const char *) + DECL_CTORS_T_A(const sc_fxval &) + DECL_CTORS_T_A(const sc_fxval_fast &) + DECL_CTORS_T_A(const sc_fxnum &) + DECL_CTORS_T_A(const sc_fxnum_fast &) + + DECL_CTORS_T_B(int64) + DECL_CTORS_T_B(uint64) + DECL_CTORS_T_B(const sc_int_base &) + DECL_CTORS_T_B(const sc_uint_base &) + DECL_CTORS_T_B(const sc_signed &) + DECL_CTORS_T_B(const sc_unsigned &) + +#undef DECL_CTORS_T_A +#undef DECL_CTORS_T_B + + // copy constructor + sc_fixed_fast(const sc_fixed_fast<W, I, Q, O, N> &); + + // assignment operators + sc_fixed_fast &operator = (const sc_fixed_fast<W, I, Q, O, N> &); + +#define DECL_ASN_OP_T(op, tp) sc_fixed_fast &operator op (tp); + +#define DECL_ASN_OP_OTHER(op) \ + DECL_ASN_OP_T(op, int64) \ + DECL_ASN_OP_T(op, uint64) \ + DECL_ASN_OP_T(op, const sc_int_base &) \ + DECL_ASN_OP_T(op, const sc_uint_base &) \ + DECL_ASN_OP_T(op, const sc_signed &) \ + DECL_ASN_OP_T(op, const sc_unsigned &) + +#define DECL_ASN_OP(op) \ + DECL_ASN_OP_T(op, int) \ + DECL_ASN_OP_T(op, unsigned int) \ + DECL_ASN_OP_T(op, long) \ + DECL_ASN_OP_T(op, unsigned long) \ + DECL_ASN_OP_T(op, float) \ + DECL_ASN_OP_T(op, double) \ + DECL_ASN_OP_T(op, const char *) \ + DECL_ASN_OP_T(op, const sc_fxval &) \ + DECL_ASN_OP_T(op, const sc_fxval_fast &) \ + DECL_ASN_OP_T(op, const sc_fxnum &) \ + DECL_ASN_OP_T(op, const sc_fxnum_fast &) \ + DECL_ASN_OP_OTHER(op) + + DECL_ASN_OP(=) + + DECL_ASN_OP(*=) + DECL_ASN_OP(/=) + DECL_ASN_OP(+=) + DECL_ASN_OP(-=) + + DECL_ASN_OP_T(<<=, int) + DECL_ASN_OP_T(>>=, int) + + DECL_ASN_OP_T(&=, const sc_fix &) + DECL_ASN_OP_T(&=, const sc_fix_fast &) + DECL_ASN_OP_T(|=, const sc_fix &) + DECL_ASN_OP_T(|=, const sc_fix_fast &) + DECL_ASN_OP_T(^=, const sc_fix &) + DECL_ASN_OP_T(^=, const sc_fix_fast &) + +#undef DECL_ASN_OP_T +#undef DECL_ASN_OP_OTHER +#undef DECL_ASN_OP + + // auto-increment and auto-decrement + const sc_fxval_fast operator ++ (int); + const sc_fxval_fast operator -- (int); + + sc_fixed_fast& operator ++ (); + sc_fixed_fast& operator -- (); +}; + + +// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII + +// ---------------------------------------------------------------------------- +// TEMPLATE CLASS : sc_fixed +// +// "Constrained" signed fixed-point class; arbitrary precision. +// ---------------------------------------------------------------------------- + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N>::sc_fixed(sc_fxnum_observer *observer_) : + sc_fix(W, I, Q, O, N, observer_) +{} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N>::sc_fixed( + const sc_fxcast_switch &cast_sw, sc_fxnum_observer *observer_) : + sc_fix(W, I, Q, O, N, cast_sw, observer_) +{} + +#define DEFN_CTORS_T(tp) \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed<W, I, Q, O, N>::sc_fixed( \ + tp a, sc_fxnum_observer* observer_) : \ + sc_fix(a, W, I, Q, O, N, observer_) \ +{} \ + \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed<W, I, Q, O, N>::sc_fixed( \ + tp a, const sc_fxcast_switch &cast_sw, \ + sc_fxnum_observer *observer_) : \ + sc_fix(a, W, I, Q, O, N, cast_sw, observer_) \ +{} + +DEFN_CTORS_T(int) +DEFN_CTORS_T(unsigned int) +DEFN_CTORS_T(long) +DEFN_CTORS_T(unsigned long) +DEFN_CTORS_T(float) +DEFN_CTORS_T(double) +DEFN_CTORS_T(const char *) +DEFN_CTORS_T(const sc_fxval &) +DEFN_CTORS_T(const sc_fxval_fast &) +DEFN_CTORS_T(const sc_fxnum &) +DEFN_CTORS_T(const sc_fxnum_fast &) + +DEFN_CTORS_T(int64) +DEFN_CTORS_T(uint64) +DEFN_CTORS_T(const sc_int_base &) +DEFN_CTORS_T(const sc_uint_base &) +DEFN_CTORS_T(const sc_signed &) +DEFN_CTORS_T(const sc_unsigned &) + +#undef DEFN_CTORS_T + +// copy constructor +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N>::sc_fixed(const sc_fixed<W, I, Q, O, N> &a) : + sc_fix(a, W, I, Q, O, N) +{} + +// assignment operators +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N> & +sc_fixed<W, I, Q, O, N>::operator = (const sc_fixed<W, I, Q, O, N> &a) +{ + sc_fix::operator = (a); + return *this; +} + +#define DEFN_ASN_OP_T(op, tp) \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed<W, I, Q, O, N> & \ +sc_fixed<W, I, Q, O, N>::operator op (tp a) \ +{ \ + sc_fix::operator op (a); \ + return *this; \ +} + +#define DEFN_ASN_OP_OTHER(op) \ +DEFN_ASN_OP_T(op, int64) \ +DEFN_ASN_OP_T(op, uint64) \ +DEFN_ASN_OP_T(op, const sc_int_base &) \ +DEFN_ASN_OP_T(op, const sc_uint_base &) \ +DEFN_ASN_OP_T(op, const sc_signed &) \ +DEFN_ASN_OP_T(op, const sc_unsigned &) + +#define DEFN_ASN_OP(op) \ +DEFN_ASN_OP_T(op, int) \ +DEFN_ASN_OP_T(op, unsigned int) \ +DEFN_ASN_OP_T(op, long) \ +DEFN_ASN_OP_T(op, unsigned long) \ +DEFN_ASN_OP_T(op, float) \ +DEFN_ASN_OP_T(op, double) \ +DEFN_ASN_OP_T(op, const char *) \ +DEFN_ASN_OP_T(op, const sc_fxval &) \ +DEFN_ASN_OP_T(op, const sc_fxval_fast &) \ +DEFN_ASN_OP_T(op, const sc_fxnum &) \ +DEFN_ASN_OP_T(op, const sc_fxnum_fast &) \ +DEFN_ASN_OP_OTHER(op) + +DEFN_ASN_OP(=) + +DEFN_ASN_OP(*=) +DEFN_ASN_OP(/=) +DEFN_ASN_OP(+=) +DEFN_ASN_OP(-=) + +DEFN_ASN_OP_T(<<=, int) +DEFN_ASN_OP_T(>>=, int) + +DEFN_ASN_OP_T(&=, const sc_fix &) +DEFN_ASN_OP_T(&=, const sc_fix_fast &) +DEFN_ASN_OP_T(|=, const sc_fix &) +DEFN_ASN_OP_T(|=, const sc_fix_fast &) +DEFN_ASN_OP_T(^=, const sc_fix &) +DEFN_ASN_OP_T(^=, const sc_fix_fast &) + +#undef DEFN_ASN_OP_T +#undef DEFN_ASN_OP_OTHER +#undef DEFN_ASN_OP + +// auto-increment and auto-decrement +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline const sc_fxval +sc_fixed<W, I, Q, O, N>::operator ++ (int) +{ + return sc_fxval(sc_fix::operator ++ (0)); +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline const sc_fxval +sc_fixed<W, I, Q, O, N>::operator -- (int) +{ + return sc_fxval(sc_fix::operator -- (0)); +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N> & +sc_fixed<W, I, Q, O, N>::operator ++ () +{ + sc_fix::operator ++ (); + return *this; +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed<W, I, Q, O, N> & +sc_fixed<W, I, Q, O, N>::operator -- () +{ + sc_fix::operator -- (); + return *this; +} + + +// ---------------------------------------------------------------------------- +// TEMPLATE CLASS : sc_fixed_fast +// +// "Constrained" signed fixed-point class; limited precision. +// ---------------------------------------------------------------------------- + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N>::sc_fixed_fast( + sc_fxnum_fast_observer *observer_) : + sc_fix_fast(W, I, Q, O, N, observer_) +{} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N>::sc_fixed_fast( + const sc_fxcast_switch &cast_sw, sc_fxnum_fast_observer *observer_) : + sc_fix_fast(W, I, Q, O, N, cast_sw, observer_) +{} + +#define DEFN_CTORS_T(tp) \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed_fast<W, I, Q, O, N>::sc_fixed_fast( \ + tp a, sc_fxnum_fast_observer *observer_) : \ + sc_fix_fast(a, W, I, Q, O, N, observer_) \ +{} \ + \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed_fast<W, I, Q, O, N>::sc_fixed_fast( \ + tp a, const sc_fxcast_switch &cast_sw, \ + sc_fxnum_fast_observer *observer_) : \ + sc_fix_fast(a, W, I, Q, O, N, cast_sw, observer_) \ +{} + +DEFN_CTORS_T(int) +DEFN_CTORS_T(unsigned int) +DEFN_CTORS_T(long) +DEFN_CTORS_T(unsigned long) +DEFN_CTORS_T(float) +DEFN_CTORS_T(double) +DEFN_CTORS_T(const char *) +DEFN_CTORS_T(const sc_fxval &) +DEFN_CTORS_T(const sc_fxval_fast &) +DEFN_CTORS_T(const sc_fxnum &) +DEFN_CTORS_T(const sc_fxnum_fast &) + +DEFN_CTORS_T(int64) +DEFN_CTORS_T(uint64) +DEFN_CTORS_T(const sc_int_base &) +DEFN_CTORS_T(const sc_uint_base &) +DEFN_CTORS_T(const sc_signed &) +DEFN_CTORS_T(const sc_unsigned &) + +#undef DEFN_CTORS_T + +// copy constructor +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N>::sc_fixed_fast( + const sc_fixed_fast<W, I, Q, O, N> &a) : sc_fix_fast(a, W, I, Q, O, N) +{} + +// assignment operators +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N> & +sc_fixed_fast<W, I, Q, O, N>::operator = ( + const sc_fixed_fast<W, I, Q, O, N> &a) +{ + sc_fix_fast::operator = (a); + return *this; +} + +#define DEFN_ASN_OP_T(op, tp) \ +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> \ +inline sc_fixed_fast<W, I, Q, O, N> & \ +sc_fixed_fast<W, I, Q, O, N>::operator op (tp a) \ +{ \ + sc_fix_fast::operator op (a); \ + return *this; \ +} + +#define DEFN_ASN_OP_OTHER(op) \ +DEFN_ASN_OP_T(op, int64) \ +DEFN_ASN_OP_T(op, uint64) \ +DEFN_ASN_OP_T(op, const sc_int_base &) \ +DEFN_ASN_OP_T(op, const sc_uint_base &) \ +DEFN_ASN_OP_T(op, const sc_signed &) \ +DEFN_ASN_OP_T(op, const sc_unsigned &) + +#define DEFN_ASN_OP(op) \ +DEFN_ASN_OP_T(op, int) \ +DEFN_ASN_OP_T(op, unsigned int) \ +DEFN_ASN_OP_T(op, long) \ +DEFN_ASN_OP_T(op, unsigned long) \ +DEFN_ASN_OP_T(op, float) \ +DEFN_ASN_OP_T(op, double) \ +DEFN_ASN_OP_T(op, const char *) \ +DEFN_ASN_OP_T(op, const sc_fxval &) \ +DEFN_ASN_OP_T(op, const sc_fxval_fast &) \ +DEFN_ASN_OP_T(op, const sc_fxnum &) \ +DEFN_ASN_OP_T(op, const sc_fxnum_fast &) \ +DEFN_ASN_OP_OTHER(op) + +DEFN_ASN_OP(=) + +DEFN_ASN_OP(*=) +DEFN_ASN_OP(/=) +DEFN_ASN_OP(+=) +DEFN_ASN_OP(-=) + +DEFN_ASN_OP_T(<<=, int) +DEFN_ASN_OP_T(>>=, int) + +DEFN_ASN_OP_T(&=, const sc_fix &) +DEFN_ASN_OP_T(&=, const sc_fix_fast &) +DEFN_ASN_OP_T(|=, const sc_fix &) +DEFN_ASN_OP_T(|=, const sc_fix_fast &) +DEFN_ASN_OP_T(^=, const sc_fix &) +DEFN_ASN_OP_T(^=, const sc_fix_fast &) + +#undef DEFN_ASN_OP_T +#undef DEFN_ASN_OP_OTHER +#undef DEFN_ASN_OP + +// auto-increment and auto-decrement +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline const sc_fxval_fast +sc_fixed_fast<W, I, Q, O, N>::operator ++ (int) +{ + return sc_fxval_fast(sc_fix_fast::operator ++ (0)); +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline const sc_fxval_fast +sc_fixed_fast<W, I, Q, O, N>::operator -- (int) +{ + return sc_fxval_fast(sc_fix_fast::operator -- (0)); +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N> & +sc_fixed_fast<W, I, Q, O, N>::operator ++ () +{ + sc_fix_fast::operator ++ (); + return *this; +} + +template <int W, int I, sc_q_mode Q, sc_o_mode O, int N> +inline sc_fixed_fast<W, I, Q, O, N> & +sc_fixed_fast<W, I, Q, O, N>::operator -- () +{ + sc_fix_fast::operator -- (); + return *this; +} + +} // namespace sc_dt + +#endif // __SYSTEMC_EXT_DT_FX_SC_FIXED_HH__ |