112855Sgabeblack@google.com/*****************************************************************************
212855Sgabeblack@google.com
312855Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412855Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512855Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612855Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712855Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812855Sgabeblack@google.com  License.  You may obtain a copy of the License at
912855Sgabeblack@google.com
1012855Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112855Sgabeblack@google.com
1212855Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312855Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412855Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512855Sgabeblack@google.com  implied.  See the License for the specific language governing
1612855Sgabeblack@google.com  permissions and limitations under the License.
1712855Sgabeblack@google.com
1812855Sgabeblack@google.com *****************************************************************************/
1912855Sgabeblack@google.com
2012855Sgabeblack@google.com/*****************************************************************************
2112855Sgabeblack@google.com
2212855Sgabeblack@google.com  operator_shift_right.cpp --
2312855Sgabeblack@google.com
2412855Sgabeblack@google.com  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
2512855Sgabeblack@google.com
2612855Sgabeblack@google.com *****************************************************************************/
2712855Sgabeblack@google.com
2812855Sgabeblack@google.com/*****************************************************************************
2912855Sgabeblack@google.com
3012855Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112855Sgabeblack@google.com  changes you are making here.
3212855Sgabeblack@google.com
3312855Sgabeblack@google.com      Name, Affiliation, Date:
3412855Sgabeblack@google.com  Description of Modification:
3512855Sgabeblack@google.com
3612855Sgabeblack@google.com *****************************************************************************/
3712855Sgabeblack@google.com
3812855Sgabeblack@google.com// This may look like C code, but it is really -*- C++ -*-
3912855Sgabeblack@google.com//
4012855Sgabeblack@google.com// operator_shift_right.cxx --
4112855Sgabeblack@google.com// Copyright Synopsys 1998
4212855Sgabeblack@google.com// Author          : Ric Hilderink
4312855Sgabeblack@google.com// Created On      : Fri Jan 15 14:08:43 1999
4412855Sgabeblack@google.com// Status          : none
4512855Sgabeblack@google.com//
4612855Sgabeblack@google.com
4712855Sgabeblack@google.com
4812855Sgabeblack@google.com#include <limits.h>
4912855Sgabeblack@google.com#define SC_INCLUDE_FX
5012855Sgabeblack@google.com#include "systemc.h"
5112855Sgabeblack@google.com
5212855Sgabeblack@google.com
5312855Sgabeblack@google.com
5412855Sgabeblack@google.com#define T_FX_FLOAT  sc_fxval
5512855Sgabeblack@google.com#define T_FX_UFIX   sc_ufix
5612855Sgabeblack@google.com#define T_FX_FIX    sc_fix
5712855Sgabeblack@google.com#define T_FX_FIXED  sc_fixed<T_WL, T_IWL>
5812855Sgabeblack@google.com#define T_FX_UFIXED sc_ufixed<T_WL, T_IWL>
5912855Sgabeblack@google.com
6012855Sgabeblack@google.com#define SHOW(i, a) \
6112855Sgabeblack@google.com  out << i << " : " << a.to_string(SC_BIN) << "\n";
6212855Sgabeblack@google.com
6312855Sgabeblack@google.com#if 0
6412855Sgabeblack@google.com
6512855Sgabeblack@google.com#define SHIFT_RIGHT_OP(T_op)						      \
6612855Sgabeblack@google.com{									      \
6712855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);		      \
6812855Sgabeblack@google.com  									      \
6912855Sgabeblack@google.com  out << "------------------ " #T_op " ---- " << T_WL << ", " << T_IWL << " --------------\n"; \
7012855Sgabeblack@google.com  T_op r(0x8000);							      \
7112855Sgabeblack@google.com  T_op m(0x8000, FX_off);						      \
7212855Sgabeblack@google.com  T_op q(FX_off);							      \
7312855Sgabeblack@google.com  int i;								      \
7412855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)						      \
7512855Sgabeblack@google.com    {									      \
7612855Sgabeblack@google.com      r = r >> 1;							      \
7712855Sgabeblack@google.com      r += 1;								      \
7812855Sgabeblack@google.com      q = m << i;							      \
7912855Sgabeblack@google.com      q += 1; 								      \
8012855Sgabeblack@google.com      SHOW(i, r);							      \
8112855Sgabeblack@google.com      SHOW(i, q);							      \
8212855Sgabeblack@google.com    }									      \
8312855Sgabeblack@google.com    r = r >> 0;								      \
8412855Sgabeblack@google.com    SHOW(0, r);								      \
8512855Sgabeblack@google.com    r = r >> -4;							      \
8612855Sgabeblack@google.com    SHOW(-4, r);							      \
8712855Sgabeblack@google.com    r >>= 0;								      \
8812855Sgabeblack@google.com    SHOW(0, r);								      \
8912855Sgabeblack@google.com    r >>= -4;							              \
9012855Sgabeblack@google.com    SHOW(-4, r);							      \
9112855Sgabeblack@google.com    q = m >> 0;								      \
9212855Sgabeblack@google.com    SHOW(0, m);								      \
9312855Sgabeblack@google.com    q = m >> -5;							      \
9412855Sgabeblack@google.com    SHOW(-5, q);							      \
9512855Sgabeblack@google.com}
9612855Sgabeblack@google.com
9712855Sgabeblack@google.com#define SHIFT_RIGHT							      \
9812855Sgabeblack@google.comSHIFT_RIGHT_OP(T_FX_FLOAT)						      \
9912855Sgabeblack@google.comSHIFT_RIGHT_OP(T_FX_UFIX)						      \
10012855Sgabeblack@google.comSHIFT_RIGHT_OP(T_FX_FIX)						      \
10112855Sgabeblack@google.comSHIFT_RIGHT_OP(T_FX_FIXED)						      \
10212855Sgabeblack@google.comSHIFT_RIGHT_OP(T_FX_UFIXED)
10312855Sgabeblack@google.com
10412855Sgabeblack@google.com
10512855Sgabeblack@google.com
10612855Sgabeblack@google.comvoid operator_shift_right(ostream& out)
10712855Sgabeblack@google.com{
10812855Sgabeblack@google.com#define T_WL 13
10912855Sgabeblack@google.com#define T_IWL 1
11012855Sgabeblack@google.com  SHIFT_RIGHT;
11112855Sgabeblack@google.com#undef T_WL
11212855Sgabeblack@google.com#undef T_IWL
11312855Sgabeblack@google.com#define T_WL 65
11412855Sgabeblack@google.com#define T_IWL 1
11512855Sgabeblack@google.com  SHIFT_RIGHT;
11612855Sgabeblack@google.com#undef T_WL
11712855Sgabeblack@google.com#undef T_IWL
11812855Sgabeblack@google.com#define T_WL 150
11912855Sgabeblack@google.com#define T_IWL 1
12012855Sgabeblack@google.com  SHIFT_RIGHT;
12112855Sgabeblack@google.com}
12212855Sgabeblack@google.com
12312855Sgabeblack@google.com#else
12412855Sgabeblack@google.com
12512855Sgabeblack@google.com#define QUOTE(x) #x
12612855Sgabeblack@google.com
12712855Sgabeblack@google.comvoid operator_shift_right(ostream& out)
12812855Sgabeblack@google.com{
12912855Sgabeblack@google.com#define T_WL 13
13012855Sgabeblack@google.com#define T_IWL 1
13112855Sgabeblack@google.com
13212855Sgabeblack@google.com{
13312855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
13412855Sgabeblack@google.com
13512855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", "
13612855Sgabeblack@google.com     << T_IWL << " --------------\n";
13712855Sgabeblack@google.com  T_FX_FLOAT r(0x8000);
13812855Sgabeblack@google.com#include "fx_precision_double.h"
13912855Sgabeblack@google.com  T_FX_FLOAT m(0x8000);
14012855Sgabeblack@google.com  T_FX_FLOAT q;
14112855Sgabeblack@google.com#include "fx_precision_default.h"
14212855Sgabeblack@google.com  int i;
14312855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
14412855Sgabeblack@google.com    {
14512855Sgabeblack@google.com      r = r >> 1;
14612855Sgabeblack@google.com      r += 1;
14712855Sgabeblack@google.com      q = m << i;
14812855Sgabeblack@google.com      q += 1;
14912855Sgabeblack@google.com      SHOW(i, r);
15012855Sgabeblack@google.com      SHOW(i, q);
15112855Sgabeblack@google.com    }
15212855Sgabeblack@google.com    r = r >> 0;
15312855Sgabeblack@google.com    SHOW(0, r);
15412855Sgabeblack@google.com    r = r >> -4;
15512855Sgabeblack@google.com    SHOW(-4, r);
15612855Sgabeblack@google.com    r >>= 0;
15712855Sgabeblack@google.com    SHOW(0, r);
15812855Sgabeblack@google.com    r >>= -4;
15912855Sgabeblack@google.com    SHOW(-4, r);
16012855Sgabeblack@google.com    q = m >> 0;
16112855Sgabeblack@google.com    SHOW(0, m);
16212855Sgabeblack@google.com    q = m >> -5;
16312855Sgabeblack@google.com    SHOW(-5, q);
16412855Sgabeblack@google.com}
16512855Sgabeblack@google.com
16612855Sgabeblack@google.com{
16712855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
16812855Sgabeblack@google.com
16912855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", "
17012855Sgabeblack@google.com     << T_IWL << " --------------\n";
17112855Sgabeblack@google.com  T_FX_UFIX r(0x8000);
17212855Sgabeblack@google.com#include "fx_precision_double.h"
17312855Sgabeblack@google.com  T_FX_UFIX m(0x8000);
17412855Sgabeblack@google.com  T_FX_UFIX q;
17512855Sgabeblack@google.com#include "fx_precision_default.h"
17612855Sgabeblack@google.com  int i;
17712855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
17812855Sgabeblack@google.com    {
17912855Sgabeblack@google.com      r = r >> 1;
18012855Sgabeblack@google.com      r += 1;
18112855Sgabeblack@google.com      q = m << i;
18212855Sgabeblack@google.com      q += 1;
18312855Sgabeblack@google.com      SHOW(i, r);
18412855Sgabeblack@google.com      SHOW(i, q);
18512855Sgabeblack@google.com    }
18612855Sgabeblack@google.com    r = r >> 0;
18712855Sgabeblack@google.com    SHOW(0, r);
18812855Sgabeblack@google.com    r = r >> -4;
18912855Sgabeblack@google.com    SHOW(-4, r);
19012855Sgabeblack@google.com    r >>= 0;
19112855Sgabeblack@google.com    SHOW(0, r);
19212855Sgabeblack@google.com    r >>= -4;
19312855Sgabeblack@google.com    SHOW(-4, r);
19412855Sgabeblack@google.com    q = m >> 0;
19512855Sgabeblack@google.com    SHOW(0, m);
19612855Sgabeblack@google.com    q = m >> -5;
19712855Sgabeblack@google.com    SHOW(-5, q);
19812855Sgabeblack@google.com}
19912855Sgabeblack@google.com
20012855Sgabeblack@google.com{
20112855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
20212855Sgabeblack@google.com
20312855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", "
20412855Sgabeblack@google.com     << T_IWL << " --------------\n";
20512855Sgabeblack@google.com  T_FX_FIX r(0x8000);
20612855Sgabeblack@google.com#include "fx_precision_double.h"
20712855Sgabeblack@google.com  T_FX_FIX m(0x8000);
20812855Sgabeblack@google.com  T_FX_FIX q;
20912855Sgabeblack@google.com#include "fx_precision_default.h"
21012855Sgabeblack@google.com  int i;
21112855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
21212855Sgabeblack@google.com    {
21312855Sgabeblack@google.com      r = r >> 1;
21412855Sgabeblack@google.com      r += 1;
21512855Sgabeblack@google.com      q = m << i;
21612855Sgabeblack@google.com      q += 1;
21712855Sgabeblack@google.com      SHOW(i, r);
21812855Sgabeblack@google.com      SHOW(i, q);
21912855Sgabeblack@google.com    }
22012855Sgabeblack@google.com    r = r >> 0;
22112855Sgabeblack@google.com    SHOW(0, r);
22212855Sgabeblack@google.com    r = r >> -4;
22312855Sgabeblack@google.com    SHOW(-4, r);
22412855Sgabeblack@google.com    r >>= 0;
22512855Sgabeblack@google.com    SHOW(0, r);
22612855Sgabeblack@google.com    r >>= -4;
22712855Sgabeblack@google.com    SHOW(-4, r);
22812855Sgabeblack@google.com    q = m >> 0;
22912855Sgabeblack@google.com    SHOW(0, m);
23012855Sgabeblack@google.com    q = m >> -5;
23112855Sgabeblack@google.com    SHOW(-5, q);
23212855Sgabeblack@google.com}
23312855Sgabeblack@google.com
23412855Sgabeblack@google.com{
23512855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
23612855Sgabeblack@google.com
23712855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", "
23812855Sgabeblack@google.com     << T_IWL << " --------------\n";
23912855Sgabeblack@google.com  T_FX_FIXED r(0x8000);
24012855Sgabeblack@google.com#include "fx_precision_double.h"
24112855Sgabeblack@google.com  T_FX_FIXED m(0x8000);
24212855Sgabeblack@google.com  T_FX_FIXED q;
24312855Sgabeblack@google.com#include "fx_precision_default.h"
24412855Sgabeblack@google.com  int i;
24512855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
24612855Sgabeblack@google.com    {
24712855Sgabeblack@google.com      r = r >> 1;
24812855Sgabeblack@google.com      r += 1;
24912855Sgabeblack@google.com      q = m << i;
25012855Sgabeblack@google.com      q += 1;
25112855Sgabeblack@google.com      SHOW(i, r);
25212855Sgabeblack@google.com      SHOW(i, q);
25312855Sgabeblack@google.com    }
25412855Sgabeblack@google.com    r = r >> 0;
25512855Sgabeblack@google.com    SHOW(0, r);
25612855Sgabeblack@google.com    r = r >> -4;
25712855Sgabeblack@google.com    SHOW(-4, r);
25812855Sgabeblack@google.com    r >>= 0;
25912855Sgabeblack@google.com    SHOW(0, r);
26012855Sgabeblack@google.com    r >>= -4;
26112855Sgabeblack@google.com    SHOW(-4, r);
26212855Sgabeblack@google.com    q = m >> 0;
26312855Sgabeblack@google.com    SHOW(0, m);
26412855Sgabeblack@google.com    q = m >> -5;
26512855Sgabeblack@google.com    SHOW(-5, q);
26612855Sgabeblack@google.com}
26712855Sgabeblack@google.com
26812855Sgabeblack@google.com{
26912855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
27012855Sgabeblack@google.com
27112855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", "
27212855Sgabeblack@google.com     << T_IWL << " --------------\n";
27312855Sgabeblack@google.com  T_FX_UFIXED r(0x8000);
27412855Sgabeblack@google.com#include "fx_precision_double.h"
27512855Sgabeblack@google.com  T_FX_UFIXED m(0x8000);
27612855Sgabeblack@google.com  T_FX_UFIXED q;
27712855Sgabeblack@google.com#include "fx_precision_default.h"
27812855Sgabeblack@google.com  int i;
27912855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
28012855Sgabeblack@google.com    {
28112855Sgabeblack@google.com      r = r >> 1;
28212855Sgabeblack@google.com      r += 1;
28312855Sgabeblack@google.com      q = m << i;
28412855Sgabeblack@google.com      q += 1;
28512855Sgabeblack@google.com      SHOW(i, r);
28612855Sgabeblack@google.com      SHOW(i, q);
28712855Sgabeblack@google.com    }
28812855Sgabeblack@google.com    r = r >> 0;
28912855Sgabeblack@google.com    SHOW(0, r);
29012855Sgabeblack@google.com    r = r >> -4;
29112855Sgabeblack@google.com    SHOW(-4, r);
29212855Sgabeblack@google.com    r >>= 0;
29312855Sgabeblack@google.com    SHOW(0, r);
29412855Sgabeblack@google.com    r >>= -4;
29512855Sgabeblack@google.com    SHOW(-4, r);
29612855Sgabeblack@google.com    q = m >> 0;
29712855Sgabeblack@google.com    SHOW(0, m);
29812855Sgabeblack@google.com    q = m >> -5;
29912855Sgabeblack@google.com    SHOW(-5, q);
30012855Sgabeblack@google.com}
30112855Sgabeblack@google.com
30212855Sgabeblack@google.com#undef T_WL
30312855Sgabeblack@google.com#undef T_IWL
30412855Sgabeblack@google.com#define T_WL 65
30512855Sgabeblack@google.com#define T_IWL 1
30612855Sgabeblack@google.com
30712855Sgabeblack@google.com{
30812855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
30912855Sgabeblack@google.com
31012855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", "
31112855Sgabeblack@google.com     << T_IWL << " --------------\n";
31212855Sgabeblack@google.com  T_FX_FLOAT r(0x8000);
31312855Sgabeblack@google.com#include "fx_precision_double.h"
31412855Sgabeblack@google.com  T_FX_FLOAT m(0x8000);
31512855Sgabeblack@google.com  T_FX_FLOAT q;
31612855Sgabeblack@google.com#include "fx_precision_default.h"
31712855Sgabeblack@google.com  int i;
31812855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
31912855Sgabeblack@google.com    {
32012855Sgabeblack@google.com      r = r >> 1;
32112855Sgabeblack@google.com      r += 1;
32212855Sgabeblack@google.com      q = m << i;
32312855Sgabeblack@google.com      q += 1;
32412855Sgabeblack@google.com      SHOW(i, r);
32512855Sgabeblack@google.com      SHOW(i, q);
32612855Sgabeblack@google.com    }
32712855Sgabeblack@google.com    r = r >> 0;
32812855Sgabeblack@google.com    SHOW(0, r);
32912855Sgabeblack@google.com    r = r >> -4;
33012855Sgabeblack@google.com    SHOW(-4, r);
33112855Sgabeblack@google.com    r >>= 0;
33212855Sgabeblack@google.com    SHOW(0, r);
33312855Sgabeblack@google.com    r >>= -4;
33412855Sgabeblack@google.com    SHOW(-4, r);
33512855Sgabeblack@google.com    q = m >> 0;
33612855Sgabeblack@google.com    SHOW(0, m);
33712855Sgabeblack@google.com    q = m >> -5;
33812855Sgabeblack@google.com    SHOW(-5, q);
33912855Sgabeblack@google.com}
34012855Sgabeblack@google.com
34112855Sgabeblack@google.com{
34212855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
34312855Sgabeblack@google.com
34412855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", "
34512855Sgabeblack@google.com     << T_IWL << " --------------\n";
34612855Sgabeblack@google.com  T_FX_UFIX r(0x8000);
34712855Sgabeblack@google.com#include "fx_precision_double.h"
34812855Sgabeblack@google.com  T_FX_UFIX m(0x8000);
34912855Sgabeblack@google.com  T_FX_UFIX q;
35012855Sgabeblack@google.com#include "fx_precision_default.h"
35112855Sgabeblack@google.com  int i;
35212855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
35312855Sgabeblack@google.com    {
35412855Sgabeblack@google.com      r = r >> 1;
35512855Sgabeblack@google.com      r += 1;
35612855Sgabeblack@google.com      q = m << i;
35712855Sgabeblack@google.com      q += 1;
35812855Sgabeblack@google.com      SHOW(i, r);
35912855Sgabeblack@google.com      SHOW(i, q);
36012855Sgabeblack@google.com    }
36112855Sgabeblack@google.com    r = r >> 0;
36212855Sgabeblack@google.com    SHOW(0, r);
36312855Sgabeblack@google.com    r = r >> -4;
36412855Sgabeblack@google.com    SHOW(-4, r);
36512855Sgabeblack@google.com    r >>= 0;
36612855Sgabeblack@google.com    SHOW(0, r);
36712855Sgabeblack@google.com    r >>= -4;
36812855Sgabeblack@google.com    SHOW(-4, r);
36912855Sgabeblack@google.com    q = m >> 0;
37012855Sgabeblack@google.com    SHOW(0, m);
37112855Sgabeblack@google.com    q = m >> -5;
37212855Sgabeblack@google.com    SHOW(-5, q);
37312855Sgabeblack@google.com}
37412855Sgabeblack@google.com
37512855Sgabeblack@google.com{
37612855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
37712855Sgabeblack@google.com
37812855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", "
37912855Sgabeblack@google.com     << T_IWL << " --------------\n";
38012855Sgabeblack@google.com  T_FX_FIX r(0x8000);
38112855Sgabeblack@google.com#include "fx_precision_double.h"
38212855Sgabeblack@google.com  T_FX_FIX m(0x8000);
38312855Sgabeblack@google.com  T_FX_FIX q;
38412855Sgabeblack@google.com#include "fx_precision_default.h"
38512855Sgabeblack@google.com  int i;
38612855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
38712855Sgabeblack@google.com    {
38812855Sgabeblack@google.com      r = r >> 1;
38912855Sgabeblack@google.com      r += 1;
39012855Sgabeblack@google.com      q = m << i;
39112855Sgabeblack@google.com      q += 1;
39212855Sgabeblack@google.com      SHOW(i, r);
39312855Sgabeblack@google.com      SHOW(i, q);
39412855Sgabeblack@google.com    }
39512855Sgabeblack@google.com    r = r >> 0;
39612855Sgabeblack@google.com    SHOW(0, r);
39712855Sgabeblack@google.com    r = r >> -4;
39812855Sgabeblack@google.com    SHOW(-4, r);
39912855Sgabeblack@google.com    r >>= 0;
40012855Sgabeblack@google.com    SHOW(0, r);
40112855Sgabeblack@google.com    r >>= -4;
40212855Sgabeblack@google.com    SHOW(-4, r);
40312855Sgabeblack@google.com    q = m >> 0;
40412855Sgabeblack@google.com    SHOW(0, m);
40512855Sgabeblack@google.com    q = m >> -5;
40612855Sgabeblack@google.com    SHOW(-5, q);
40712855Sgabeblack@google.com}
40812855Sgabeblack@google.com
40912855Sgabeblack@google.com{
41012855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
41112855Sgabeblack@google.com
41212855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", "
41312855Sgabeblack@google.com     << T_IWL << " --------------\n";
41412855Sgabeblack@google.com  T_FX_FIXED r(0x8000);
41512855Sgabeblack@google.com#include "fx_precision_double.h"
41612855Sgabeblack@google.com  T_FX_FIXED m(0x8000);
41712855Sgabeblack@google.com  T_FX_FIXED q;
41812855Sgabeblack@google.com#include "fx_precision_default.h"
41912855Sgabeblack@google.com  int i;
42012855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
42112855Sgabeblack@google.com    {
42212855Sgabeblack@google.com      r = r >> 1;
42312855Sgabeblack@google.com      r += 1;
42412855Sgabeblack@google.com      q = m << i;
42512855Sgabeblack@google.com      q += 1;
42612855Sgabeblack@google.com      SHOW(i, r);
42712855Sgabeblack@google.com      SHOW(i, q);
42812855Sgabeblack@google.com    }
42912855Sgabeblack@google.com    r = r >> 0;
43012855Sgabeblack@google.com    SHOW(0, r);
43112855Sgabeblack@google.com    r = r >> -4;
43212855Sgabeblack@google.com    SHOW(-4, r);
43312855Sgabeblack@google.com    r >>= 0;
43412855Sgabeblack@google.com    SHOW(0, r);
43512855Sgabeblack@google.com    r >>= -4;
43612855Sgabeblack@google.com    SHOW(-4, r);
43712855Sgabeblack@google.com    q = m >> 0;
43812855Sgabeblack@google.com    SHOW(0, m);
43912855Sgabeblack@google.com    q = m >> -5;
44012855Sgabeblack@google.com    SHOW(-5, q);
44112855Sgabeblack@google.com}
44212855Sgabeblack@google.com
44312855Sgabeblack@google.com{
44412855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
44512855Sgabeblack@google.com
44612855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", "
44712855Sgabeblack@google.com     << T_IWL << " --------------\n";
44812855Sgabeblack@google.com  T_FX_UFIXED r(0x8000);
44912855Sgabeblack@google.com#include "fx_precision_double.h"
45012855Sgabeblack@google.com  T_FX_UFIXED m(0x8000);
45112855Sgabeblack@google.com  T_FX_UFIXED q;
45212855Sgabeblack@google.com#include "fx_precision_default.h"
45312855Sgabeblack@google.com  int i;
45412855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
45512855Sgabeblack@google.com    {
45612855Sgabeblack@google.com      r = r >> 1;
45712855Sgabeblack@google.com      r += 1;
45812855Sgabeblack@google.com      q = m << i;
45912855Sgabeblack@google.com      q += 1;
46012855Sgabeblack@google.com      SHOW(i, r);
46112855Sgabeblack@google.com      SHOW(i, q);
46212855Sgabeblack@google.com    }
46312855Sgabeblack@google.com    r = r >> 0;
46412855Sgabeblack@google.com    SHOW(0, r);
46512855Sgabeblack@google.com    r = r >> -4;
46612855Sgabeblack@google.com    SHOW(-4, r);
46712855Sgabeblack@google.com    r >>= 0;
46812855Sgabeblack@google.com    SHOW(0, r);
46912855Sgabeblack@google.com    r >>= -4;
47012855Sgabeblack@google.com    SHOW(-4, r);
47112855Sgabeblack@google.com    q = m >> 0;
47212855Sgabeblack@google.com    SHOW(0, m);
47312855Sgabeblack@google.com    q = m >> -5;
47412855Sgabeblack@google.com    SHOW(-5, q);
47512855Sgabeblack@google.com}
47612855Sgabeblack@google.com
47712855Sgabeblack@google.com#undef T_WL
47812855Sgabeblack@google.com#undef T_IWL
47912855Sgabeblack@google.com#define T_WL 150
48012855Sgabeblack@google.com#define T_IWL 1
48112855Sgabeblack@google.com
48212855Sgabeblack@google.com{
48312855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
48412855Sgabeblack@google.com
48512855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", "
48612855Sgabeblack@google.com     << T_IWL << " --------------\n";
48712855Sgabeblack@google.com  T_FX_FLOAT r(0x8000);
48812855Sgabeblack@google.com#include "fx_precision_double.h"
48912855Sgabeblack@google.com  T_FX_FLOAT m(0x8000);
49012855Sgabeblack@google.com  T_FX_FLOAT q;
49112855Sgabeblack@google.com#include "fx_precision_default.h"
49212855Sgabeblack@google.com  int i;
49312855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
49412855Sgabeblack@google.com    {
49512855Sgabeblack@google.com      r = r >> 1;
49612855Sgabeblack@google.com      r += 1;
49712855Sgabeblack@google.com      q = m << i;
49812855Sgabeblack@google.com      q += 1;
49912855Sgabeblack@google.com      SHOW(i, r);
50012855Sgabeblack@google.com      SHOW(i, q);
50112855Sgabeblack@google.com    }
50212855Sgabeblack@google.com    r = r >> 0;
50312855Sgabeblack@google.com    SHOW(0, r);
50412855Sgabeblack@google.com    r = r >> -4;
50512855Sgabeblack@google.com    SHOW(-4, r);
50612855Sgabeblack@google.com    r >>= 0;
50712855Sgabeblack@google.com    SHOW(0, r);
50812855Sgabeblack@google.com    r >>= -4;
50912855Sgabeblack@google.com    SHOW(-4, r);
51012855Sgabeblack@google.com    q = m >> 0;
51112855Sgabeblack@google.com    SHOW(0, m);
51212855Sgabeblack@google.com    q = m >> -5;
51312855Sgabeblack@google.com    SHOW(-5, q);
51412855Sgabeblack@google.com}
51512855Sgabeblack@google.com
51612855Sgabeblack@google.com{
51712855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
51812855Sgabeblack@google.com
51912855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", "
52012855Sgabeblack@google.com     << T_IWL << " --------------\n";
52112855Sgabeblack@google.com  T_FX_UFIX r(0x8000);
52212855Sgabeblack@google.com#include "fx_precision_double.h"
52312855Sgabeblack@google.com  T_FX_UFIX m(0x8000);
52412855Sgabeblack@google.com  T_FX_UFIX q;
52512855Sgabeblack@google.com#include "fx_precision_default.h"
52612855Sgabeblack@google.com  int i;
52712855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
52812855Sgabeblack@google.com    {
52912855Sgabeblack@google.com      r = r >> 1;
53012855Sgabeblack@google.com      r += 1;
53112855Sgabeblack@google.com      q = m << i;
53212855Sgabeblack@google.com      q += 1;
53312855Sgabeblack@google.com      SHOW(i, r);
53412855Sgabeblack@google.com      SHOW(i, q);
53512855Sgabeblack@google.com    }
53612855Sgabeblack@google.com    r = r >> 0;
53712855Sgabeblack@google.com    SHOW(0, r);
53812855Sgabeblack@google.com    r = r >> -4;
53912855Sgabeblack@google.com    SHOW(-4, r);
54012855Sgabeblack@google.com    r >>= 0;
54112855Sgabeblack@google.com    SHOW(0, r);
54212855Sgabeblack@google.com    r >>= -4;
54312855Sgabeblack@google.com    SHOW(-4, r);
54412855Sgabeblack@google.com    q = m >> 0;
54512855Sgabeblack@google.com    SHOW(0, m);
54612855Sgabeblack@google.com    q = m >> -5;
54712855Sgabeblack@google.com    SHOW(-5, q);
54812855Sgabeblack@google.com}
54912855Sgabeblack@google.com
55012855Sgabeblack@google.com{
55112855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
55212855Sgabeblack@google.com
55312855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", "
55412855Sgabeblack@google.com     << T_IWL << " --------------\n";
55512855Sgabeblack@google.com  T_FX_FIX r(0x8000);
55612855Sgabeblack@google.com#include "fx_precision_double.h"
55712855Sgabeblack@google.com  T_FX_FIX m(0x8000);
55812855Sgabeblack@google.com  T_FX_FIX q;
55912855Sgabeblack@google.com#include "fx_precision_default.h"
56012855Sgabeblack@google.com  int i;
56112855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
56212855Sgabeblack@google.com    {
56312855Sgabeblack@google.com      r = r >> 1;
56412855Sgabeblack@google.com      r += 1;
56512855Sgabeblack@google.com      q = m << i;
56612855Sgabeblack@google.com      q += 1;
56712855Sgabeblack@google.com      SHOW(i, r);
56812855Sgabeblack@google.com      SHOW(i, q);
56912855Sgabeblack@google.com    }
57012855Sgabeblack@google.com    r = r >> 0;
57112855Sgabeblack@google.com    SHOW(0, r);
57212855Sgabeblack@google.com    r = r >> -4;
57312855Sgabeblack@google.com    SHOW(-4, r);
57412855Sgabeblack@google.com    r >>= 0;
57512855Sgabeblack@google.com    SHOW(0, r);
57612855Sgabeblack@google.com    r >>= -4;
57712855Sgabeblack@google.com    SHOW(-4, r);
57812855Sgabeblack@google.com    q = m >> 0;
57912855Sgabeblack@google.com    SHOW(0, m);
58012855Sgabeblack@google.com    q = m >> -5;
58112855Sgabeblack@google.com    SHOW(-5, q);
58212855Sgabeblack@google.com}
58312855Sgabeblack@google.com
58412855Sgabeblack@google.com{
58512855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
58612855Sgabeblack@google.com
58712855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", "
58812855Sgabeblack@google.com     << T_IWL << " --------------\n";
58912855Sgabeblack@google.com  T_FX_FIXED r(0x8000);
59012855Sgabeblack@google.com#include "fx_precision_double.h"
59112855Sgabeblack@google.com  T_FX_FIXED m(0x8000);
59212855Sgabeblack@google.com  T_FX_FIXED q;
59312855Sgabeblack@google.com#include "fx_precision_default.h"
59412855Sgabeblack@google.com  int i;
59512855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
59612855Sgabeblack@google.com    {
59712855Sgabeblack@google.com      r = r >> 1;
59812855Sgabeblack@google.com      r += 1;
59912855Sgabeblack@google.com      q = m << i;
60012855Sgabeblack@google.com      q += 1;
60112855Sgabeblack@google.com      SHOW(i, r);
60212855Sgabeblack@google.com      SHOW(i, q);
60312855Sgabeblack@google.com    }
60412855Sgabeblack@google.com    r = r >> 0;
60512855Sgabeblack@google.com    SHOW(0, r);
60612855Sgabeblack@google.com    r = r >> -4;
60712855Sgabeblack@google.com    SHOW(-4, r);
60812855Sgabeblack@google.com    r >>= 0;
60912855Sgabeblack@google.com    SHOW(0, r);
61012855Sgabeblack@google.com    r >>= -4;
61112855Sgabeblack@google.com    SHOW(-4, r);
61212855Sgabeblack@google.com    q = m >> 0;
61312855Sgabeblack@google.com    SHOW(0, m);
61412855Sgabeblack@google.com    q = m >> -5;
61512855Sgabeblack@google.com    SHOW(-5, q);
61612855Sgabeblack@google.com}
61712855Sgabeblack@google.com
61812855Sgabeblack@google.com{
61912855Sgabeblack@google.com  sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP);
62012855Sgabeblack@google.com
62112855Sgabeblack@google.com  out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", "
62212855Sgabeblack@google.com     << T_IWL << " --------------\n";
62312855Sgabeblack@google.com  T_FX_UFIXED r(0x8000);
62412855Sgabeblack@google.com#include "fx_precision_double.h"
62512855Sgabeblack@google.com  T_FX_UFIXED m(0x8000);
62612855Sgabeblack@google.com  T_FX_UFIXED q;
62712855Sgabeblack@google.com#include "fx_precision_default.h"
62812855Sgabeblack@google.com  int i;
62912855Sgabeblack@google.com  for (i = 0; i < T_WL+10; ++i)
63012855Sgabeblack@google.com    {
63112855Sgabeblack@google.com      r = r >> 1;
63212855Sgabeblack@google.com      r += 1;
63312855Sgabeblack@google.com      q = m << i;
63412855Sgabeblack@google.com      q += 1;
63512855Sgabeblack@google.com      SHOW(i, r);
63612855Sgabeblack@google.com      SHOW(i, q);
63712855Sgabeblack@google.com    }
63812855Sgabeblack@google.com    r = r >> 0;
63912855Sgabeblack@google.com    SHOW(0, r);
64012855Sgabeblack@google.com    r = r >> -4;
64112855Sgabeblack@google.com    SHOW(-4, r);
64212855Sgabeblack@google.com    r >>= 0;
64312855Sgabeblack@google.com    SHOW(0, r);
64412855Sgabeblack@google.com    r >>= -4;
64512855Sgabeblack@google.com    SHOW(-4, r);
64612855Sgabeblack@google.com    q = m >> 0;
64712855Sgabeblack@google.com    SHOW(0, m);
64812855Sgabeblack@google.com    q = m >> -5;
64912855Sgabeblack@google.com    SHOW(-5, q);
65012855Sgabeblack@google.com}
65112855Sgabeblack@google.com}
65212855Sgabeblack@google.com
65312855Sgabeblack@google.com#endif
654