operator_shift_left.cpp revision 12855:588919e0e4aa
1/***************************************************************************** 2 3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 4 more contributor license agreements. See the NOTICE file distributed 5 with this work for additional information regarding copyright ownership. 6 Accellera licenses this file to you under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with the 8 License. You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 15 implied. See the License for the specific language governing 16 permissions and limitations under the License. 17 18 *****************************************************************************/ 19 20/***************************************************************************** 21 22 operator_shift_left.cpp -- 23 24 Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15 25 26 *****************************************************************************/ 27 28/***************************************************************************** 29 30 MODIFICATION LOG - modifiers, enter your name, affiliation, date and 31 changes you are making here. 32 33 Name, Affiliation, Date: 34 Description of Modification: 35 36 *****************************************************************************/ 37 38// This may look like C code, but it is really -*- C++ -*- 39// 40// operator_shift_left.cxx -- 41// Copyright Synopsys 1998 42// Author : Ric Hilderink 43// Created On : Fri Jan 15 14:08:43 1999 44// Status : none 45// 46 47 48#include <limits.h> 49#define SC_INCLUDE_FX 50#include "systemc.h" 51 52 53 54#define T_FX_FLOAT sc_fxval 55#define T_FX_UFIX sc_ufix 56#define T_FX_FIX sc_fix 57#define T_FX_FIXED sc_fixed<T_WL, T_IWL> 58#define T_FX_UFIXED sc_ufixed<T_WL, T_IWL> 59 60#define SHOW(i, a) \ 61 out << i << " : " << a.to_string(SC_BIN) << "\n"; 62 63 64#if 0 65 66#define SHIFT_LEFT_OP(T_op) \ 67{ \ 68 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); \ 69 \ 70 out << "------------------ " #T_op " ---- " << T_WL << ", " << T_IWL << " --------------\n"; \ 71 T_op r(2); 72 int i; \ 73 for (i = 0; i < T_WL+10; ++i) \ 74 { \ 75 r = r << 1; \ 76 r += 1; \ 77 SHOW(i, r); \ 78 } \ 79 { \ 80 T_op m(1, FX_off); \ 81 T_op q(FX_off); \ 82 for (i = 0; i < T_WL+10; ++i) \ 83 { \ 84 q = m << i; \ 85 q += 1; \ 86 SHOW(i, q); \ 87 } \ 88 q = m << 0; \ 89 SHOW(0, q); \ 90 q = m << -5; \ 91 SHOW(-5, m); \ 92 } \ 93 r = r << 0; \ 94 SHOW(0, r); \ 95 r = r << -4; \ 96 SHOW(-4, r); \ 97 r <<= 0; \ 98 SHOW(0, r); \ 99 r <<= -4; \ 100 SHOW(-4, r); \ 101} 102 103#define SHIFT_LEFT \ 104SHIFT_LEFT_OP(T_FX_FLOAT) \ 105SHIFT_LEFT_OP(T_FX_UFIX) \ 106SHIFT_LEFT_OP(T_FX_FIX) \ 107SHIFT_LEFT_OP(T_FX_FIXED) \ 108SHIFT_LEFT_OP(T_FX_UFIXED) 109 110 111 112void operator_shift_left(ostream& out) 113{ 114#define T_WL 13 115#define T_IWL 13 116 SHIFT_LEFT; 117#undef T_WL 118#undef T_IWL 119#define T_WL 65 120#define T_IWL 65 121 SHIFT_LEFT; 122#undef T_WL 123#undef T_IWL 124#define T_WL 150 125#define T_IWL 150 126 SHIFT_LEFT; 127} 128 129#else 130 131#define QUOTE(x) #x 132 133void operator_shift_left(ostream& out) 134{ 135#define T_WL 13 136#define T_IWL 13 137 138{ 139 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 140 141 out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", " 142 << T_IWL << " --------------\n"; 143 T_FX_FLOAT r(2); 144 int i; 145 for (i = 0; i < T_WL+10; ++i) 146 { 147 r = r << 1; 148 r += 1; 149 SHOW(i, r); 150 } 151 { 152#include "fx_precision_double.h" 153 T_FX_FLOAT m(1); 154 T_FX_FLOAT q; 155#include "fx_precision_default.h" 156 for (i = 0; i < T_WL+10; ++i) 157 { 158 q = m << i; 159 q += 1; 160 SHOW(i, q); 161 } 162 q = m << 0; 163 SHOW(0, q); 164 q = m << -5; 165 SHOW(-5, m); 166 } 167 r = r << 0; 168 SHOW(0, r); 169 r = r << -4; 170 SHOW(-4, r); 171 r <<= 0; 172 SHOW(0, r); 173 r <<= -4; 174 SHOW(-4, r); 175} 176 177{ 178 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 179 180 out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", " 181 << T_IWL << " --------------\n"; 182 T_FX_UFIX r(2); 183 int i; 184 for (i = 0; i < T_WL+10; ++i) 185 { 186 r = r << 1; 187 r += 1; 188 SHOW(i, r); 189 } 190 { 191#include "fx_precision_double.h" 192 T_FX_UFIX m(1); 193 T_FX_UFIX q; 194#include "fx_precision_default.h" 195 for (i = 0; i < T_WL+10; ++i) 196 { 197 q = m << i; 198 q += 1; 199 SHOW(i, q); 200 } 201 q = m << 0; 202 SHOW(0, q); 203 q = m << -5; 204 SHOW(-5, m); 205 } 206 r = r << 0; 207 SHOW(0, r); 208 r = r << -4; 209 SHOW(-4, r); 210 r <<= 0; 211 SHOW(0, r); 212 r <<= -4; 213 SHOW(-4, r); 214} 215 216{ 217 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 218 219 out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", " 220 << T_IWL << " --------------\n"; 221 T_FX_FIX r(2); 222 int i; 223 for (i = 0; i < T_WL+10; ++i) 224 { 225 r = r << 1; 226 r += 1; 227 SHOW(i, r); 228 } 229 { 230#include "fx_precision_double.h" 231 T_FX_FIX m(1); 232 T_FX_FIX q; 233#include "fx_precision_default.h" 234 for (i = 0; i < T_WL+10; ++i) 235 { 236 q = m << i; 237 q += 1; 238 SHOW(i, q); 239 } 240 q = m << 0; 241 SHOW(0, q); 242 q = m << -5; 243 SHOW(-5, m); 244 } 245 r = r << 0; 246 SHOW(0, r); 247 r = r << -4; 248 SHOW(-4, r); 249 r <<= 0; 250 SHOW(0, r); 251 r <<= -4; 252 SHOW(-4, r); 253} 254 255{ 256 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 257 258 out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", " 259 << T_IWL << " --------------\n"; 260 T_FX_FIXED r(2); 261 int i; 262 for (i = 0; i < T_WL+10; ++i) 263 { 264 r = r << 1; 265 r += 1; 266 SHOW(i, r); 267 } 268 { 269#include "fx_precision_double.h" 270 T_FX_FIXED m(1); 271 T_FX_FIXED q; 272#include "fx_precision_default.h" 273 for (i = 0; i < T_WL+10; ++i) 274 { 275 q = m << i; 276 q += 1; 277 SHOW(i, q); 278 } 279 q = m << 0; 280 SHOW(0, q); 281 q = m << -5; 282 SHOW(-5, m); 283 } 284 r = r << 0; 285 SHOW(0, r); 286 r = r << -4; 287 SHOW(-4, r); 288 r <<= 0; 289 SHOW(0, r); 290 r <<= -4; 291 SHOW(-4, r); 292} 293 294{ 295 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 296 297 out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", " 298 << T_IWL << " --------------\n"; 299 T_FX_UFIXED r(2); 300 int i; 301 for (i = 0; i < T_WL+10; ++i) 302 { 303 r = r << 1; 304 r += 1; 305 SHOW(i, r); 306 } 307 { 308#include "fx_precision_double.h" 309 T_FX_UFIXED m(1); 310 T_FX_UFIXED q; 311#include "fx_precision_default.h" 312 for (i = 0; i < T_WL+10; ++i) 313 { 314 q = m << i; 315 q += 1; 316 SHOW(i, q); 317 } 318 q = m << 0; 319 SHOW(0, q); 320 q = m << -5; 321 SHOW(-5, m); 322 } 323 r = r << 0; 324 SHOW(0, r); 325 r = r << -4; 326 SHOW(-4, r); 327 r <<= 0; 328 SHOW(0, r); 329 r <<= -4; 330 SHOW(-4, r); 331} 332 333#undef T_WL 334#undef T_IWL 335#define T_WL 65 336#define T_IWL 65 337 338{ 339 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 340 341 out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", " 342 << T_IWL << " --------------\n"; 343 T_FX_FLOAT r(2); 344 int i; 345 for (i = 0; i < T_WL+10; ++i) 346 { 347 r = r << 1; 348 r += 1; 349 SHOW(i, r); 350 } 351 { 352#include "fx_precision_double.h" 353 T_FX_FLOAT m(1); 354 T_FX_FLOAT q; 355#include "fx_precision_default.h" 356 for (i = 0; i < T_WL+10; ++i) 357 { 358 q = m << i; 359 q += 1; 360 SHOW(i, q); 361 } 362 q = m << 0; 363 SHOW(0, q); 364 q = m << -5; 365 SHOW(-5, m); 366 } 367 r = r << 0; 368 SHOW(0, r); 369 r = r << -4; 370 SHOW(-4, r); 371 r <<= 0; 372 SHOW(0, r); 373 r <<= -4; 374 SHOW(-4, r); 375} 376 377{ 378 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 379 380 out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", " 381 << T_IWL << " --------------\n"; 382 T_FX_UFIX r(2); 383 int i; 384 for (i = 0; i < T_WL+10; ++i) 385 { 386 r = r << 1; 387 r += 1; 388 SHOW(i, r); 389 } 390 { 391#include "fx_precision_double.h" 392 T_FX_UFIX m(1); 393 T_FX_UFIX q; 394#include "fx_precision_default.h" 395 for (i = 0; i < T_WL+10; ++i) 396 { 397 q = m << i; 398 q += 1; 399 SHOW(i, q); 400 } 401 q = m << 0; 402 SHOW(0, q); 403 q = m << -5; 404 SHOW(-5, m); 405 } 406 r = r << 0; 407 SHOW(0, r); 408 r = r << -4; 409 SHOW(-4, r); 410 r <<= 0; 411 SHOW(0, r); 412 r <<= -4; 413 SHOW(-4, r); 414} 415 416{ 417 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 418 419 out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", " 420 << T_IWL << " --------------\n"; 421 T_FX_FIX r(2); 422 int i; 423 for (i = 0; i < T_WL+10; ++i) 424 { 425 r = r << 1; 426 r += 1; 427 SHOW(i, r); 428 } 429 { 430#include "fx_precision_double.h" 431 T_FX_FIX m(1); 432 T_FX_FIX q; 433#include "fx_precision_default.h" 434 for (i = 0; i < T_WL+10; ++i) 435 { 436 q = m << i; 437 q += 1; 438 SHOW(i, q); 439 } 440 q = m << 0; 441 SHOW(0, q); 442 q = m << -5; 443 SHOW(-5, m); 444 } 445 r = r << 0; 446 SHOW(0, r); 447 r = r << -4; 448 SHOW(-4, r); 449 r <<= 0; 450 SHOW(0, r); 451 r <<= -4; 452 SHOW(-4, r); 453} 454 455{ 456 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 457 458 out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", " 459 << T_IWL << " --------------\n"; 460 T_FX_FIXED r(2); 461 int i; 462 for (i = 0; i < T_WL+10; ++i) 463 { 464 r = r << 1; 465 r += 1; 466 SHOW(i, r); 467 } 468 { 469#include "fx_precision_double.h" 470 T_FX_FIXED m(1); 471 T_FX_FIXED q; 472#include "fx_precision_default.h" 473 for (i = 0; i < T_WL+10; ++i) 474 { 475 q = m << i; 476 q += 1; 477 SHOW(i, q); 478 } 479 q = m << 0; 480 SHOW(0, q); 481 q = m << -5; 482 SHOW(-5, m); 483 } 484 r = r << 0; 485 SHOW(0, r); 486 r = r << -4; 487 SHOW(-4, r); 488 r <<= 0; 489 SHOW(0, r); 490 r <<= -4; 491 SHOW(-4, r); 492} 493 494{ 495 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 496 497 out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", " 498 << T_IWL << " --------------\n"; 499 T_FX_UFIXED r(2); 500 int i; 501 for (i = 0; i < T_WL+10; ++i) 502 { 503 r = r << 1; 504 r += 1; 505 SHOW(i, r); 506 } 507 { 508#include "fx_precision_double.h" 509 T_FX_UFIXED m(1); 510 T_FX_UFIXED q; 511#include "fx_precision_default.h" 512 for (i = 0; i < T_WL+10; ++i) 513 { 514 q = m << i; 515 q += 1; 516 SHOW(i, q); 517 } 518 q = m << 0; 519 SHOW(0, q); 520 q = m << -5; 521 SHOW(-5, m); 522 } 523 r = r << 0; 524 SHOW(0, r); 525 r = r << -4; 526 SHOW(-4, r); 527 r <<= 0; 528 SHOW(0, r); 529 r <<= -4; 530 SHOW(-4, r); 531} 532 533#undef T_WL 534#undef T_IWL 535#define T_WL 150 536#define T_IWL 150 537 538{ 539 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 540 541 out << "------------------ " QUOTE(T_FX_FLOAT) " ---- " << T_WL << ", " 542 << T_IWL << " --------------\n"; 543 T_FX_FLOAT r(2); 544 int i; 545 for (i = 0; i < T_WL+10; ++i) 546 { 547 r = r << 1; 548 r += 1; 549 SHOW(i, r); 550 } 551 { 552#include "fx_precision_double.h" 553 T_FX_FLOAT m(1); 554 T_FX_FLOAT q; 555#include "fx_precision_default.h" 556 for (i = 0; i < T_WL+10; ++i) 557 { 558 q = m << i; 559 q += 1; 560 SHOW(i, q); 561 } 562 q = m << 0; 563 SHOW(0, q); 564 q = m << -5; 565 SHOW(-5, m); 566 } 567 r = r << 0; 568 SHOW(0, r); 569 r = r << -4; 570 SHOW(-4, r); 571 r <<= 0; 572 SHOW(0, r); 573 r <<= -4; 574 SHOW(-4, r); 575} 576 577{ 578 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 579 580 out << "------------------ " QUOTE(T_FX_UFIX) " ---- " << T_WL << ", " 581 << T_IWL << " --------------\n"; 582 T_FX_UFIX r(2); 583 int i; 584 for (i = 0; i < T_WL+10; ++i) 585 { 586 r = r << 1; 587 r += 1; 588 SHOW(i, r); 589 } 590 { 591#include "fx_precision_double.h" 592 T_FX_UFIX m(1); 593 T_FX_UFIX q; 594#include "fx_precision_default.h" 595 for (i = 0; i < T_WL+10; ++i) 596 { 597 q = m << i; 598 q += 1; 599 SHOW(i, q); 600 } 601 q = m << 0; 602 SHOW(0, q); 603 q = m << -5; 604 SHOW(-5, m); 605 } 606 r = r << 0; 607 SHOW(0, r); 608 r = r << -4; 609 SHOW(-4, r); 610 r <<= 0; 611 SHOW(0, r); 612 r <<= -4; 613 SHOW(-4, r); 614} 615 616{ 617 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 618 619 out << "------------------ " QUOTE(T_FX_FIX) " ---- " << T_WL << ", " 620 << T_IWL << " --------------\n"; 621 T_FX_FIX r(2); 622 int i; 623 for (i = 0; i < T_WL+10; ++i) 624 { 625 r = r << 1; 626 r += 1; 627 SHOW(i, r); 628 } 629 { 630#include "fx_precision_double.h" 631 T_FX_FIX m(1); 632 T_FX_FIX q; 633#include "fx_precision_default.h" 634 for (i = 0; i < T_WL+10; ++i) 635 { 636 q = m << i; 637 q += 1; 638 SHOW(i, q); 639 } 640 q = m << 0; 641 SHOW(0, q); 642 q = m << -5; 643 SHOW(-5, m); 644 } 645 r = r << 0; 646 SHOW(0, r); 647 r = r << -4; 648 SHOW(-4, r); 649 r <<= 0; 650 SHOW(0, r); 651 r <<= -4; 652 SHOW(-4, r); 653} 654 655{ 656 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 657 658 out << "------------------ " QUOTE(T_FX_FIXED) " ---- " << T_WL << ", " 659 << T_IWL << " --------------\n"; 660 T_FX_FIXED r(2); 661 int i; 662 for (i = 0; i < T_WL+10; ++i) 663 { 664 r = r << 1; 665 r += 1; 666 SHOW(i, r); 667 } 668 { 669#include "fx_precision_double.h" 670 T_FX_FIXED m(1); 671 T_FX_FIXED q; 672#include "fx_precision_default.h" 673 for (i = 0; i < T_WL+10; ++i) 674 { 675 q = m << i; 676 q += 1; 677 SHOW(i, q); 678 } 679 q = m << 0; 680 SHOW(0, q); 681 q = m << -5; 682 SHOW(-5, m); 683 } 684 r = r << 0; 685 SHOW(0, r); 686 r = r << -4; 687 SHOW(-4, r); 688 r <<= 0; 689 SHOW(0, r); 690 r <<= -4; 691 SHOW(-4, r); 692} 693 694{ 695 sc_fxtype_params fooc(T_WL, T_IWL, SC_TRN, SC_WRAP); 696 697 out << "------------------ " QUOTE(T_FX_UFIXED) " ---- " << T_WL << ", " 698 << T_IWL << " --------------\n"; 699 T_FX_UFIXED r(2); 700 int i; 701 for (i = 0; i < T_WL+10; ++i) 702 { 703 r = r << 1; 704 r += 1; 705 SHOW(i, r); 706 } 707 { 708#include "fx_precision_double.h" 709 T_FX_UFIXED m(1); 710 T_FX_UFIXED q; 711#include "fx_precision_default.h" 712 for (i = 0; i < T_WL+10; ++i) 713 { 714 q = m << i; 715 q += 1; 716 SHOW(i, q); 717 } 718 q = m << 0; 719 SHOW(0, q); 720 q = m << -5; 721 SHOW(-5, m); 722 } 723 r = r << 0; 724 SHOW(0, r); 725 r = r << -4; 726 SHOW(-4, r); 727 r <<= 0; 728 SHOW(0, r); 729 r <<= -4; 730 SHOW(-4, r); 731} 732} 733 734#endif 735