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