# PowerISA Version 3.0C Book 1 App. B, Table 129
+DPD_TO_BCD_TABLE = """
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+00_ 000 001 002 003 004 005 006 007 008 009 080 081 800 801 880 881
+01_ 010 011 012 013 014 015 016 017 018 019 090 091 810 811 890 891
+02_ 020 021 022 023 024 025 026 027 028 029 082 083 820 821 808 809
+03_ 030 031 032 033 034 035 036 037 038 039 092 093 830 831 818 819
+04_ 040 041 042 043 044 045 046 047 048 049 084 085 840 841 088 089
+05_ 050 051 052 053 054 055 056 057 058 059 094 095 850 851 098 099
+06_ 060 061 062 063 064 065 066 067 068 069 086 087 860 861 888 889
+07_ 070 071 072 073 074 075 076 077 078 079 096 097 870 871 898 899
+08_ 100 101 102 103 104 105 106 107 108 109 180 181 900 901 980 981
+09_ 110 111 112 113 114 115 116 117 118 119 190 191 910 911 990 991
+0A_ 120 121 122 123 124 125 126 127 128 129 182 183 920 921 908 909
+0B_ 130 131 132 133 134 135 136 137 138 139 192 193 930 931 918 919
+0C_ 140 141 142 143 144 145 146 147 148 149 184 185 940 941 188 189
+0D_ 150 151 152 153 154 155 156 157 158 159 194 195 950 951 198 199
+0E_ 160 161 162 163 164 165 166 167 168 169 186 187 960 961 988 989
+0F_ 170 171 172 173 174 175 176 177 178 179 196 197 970 971 998 999
+10_ 200 201 202 203 204 205 206 207 208 209 280 281 802 803 882 883
+11_ 210 211 212 213 214 215 216 217 218 219 290 291 812 813 892 893
+12_ 220 221 222 223 224 225 226 227 228 229 282 283 822 823 828 829
+13_ 230 231 232 233 234 235 236 237 238 239 292 293 832 833 838 839
+14_ 240 241 242 243 244 245 246 247 248 249 284 285 842 843 288 289
+15_ 250 251 252 253 254 255 256 257 258 259 294 295 852 853 298 299
+16_ 260 261 262 263 264 265 266 267 268 269 286 287 862 863 (888) (889)
+17_ 270 271 272 273 274 275 276 277 278 279 296 297 872 873 (898) (899)
+18_ 300 301 302 303 304 305 306 307 308 309 380 381 902 903 982 983
+19_ 310 311 312 313 314 315 316 317 318 319 390 391 912 913 992 993
+1A_ 320 321 322 323 324 325 326 327 328 329 382 383 922 923 928 929
+1B_ 330 331 332 333 334 335 336 337 338 339 392 393 932 933 938 939
+1C_ 340 341 342 343 344 345 346 347 348 349 384 385 942 943 388 389
+1D_ 350 351 352 353 354 355 356 357 358 359 394 395 952 953 398 399
+1E_ 360 361 362 363 364 365 366 367 368 369 386 387 962 963 (988) (989)
+1F_ 370 371 372 373 374 375 376 377 378 379 396 397 972 973 (998) (999)
+20_ 400 401 402 403 404 405 406 407 408 409 480 481 804 805 884 885
+21_ 410 411 412 413 414 415 416 417 418 419 490 491 814 815 894 895
+22_ 420 421 422 423 424 425 426 427 428 429 482 483 824 825 848 849
+23_ 430 431 432 433 434 435 436 437 438 439 492 493 834 835 858 859
+24_ 440 441 442 443 444 445 446 447 448 449 484 485 844 845 488 489
+25_ 450 451 452 453 454 455 456 457 458 459 494 495 854 855 498 499
+26_ 460 461 462 463 464 465 466 467 468 469 486 487 864 865 (888) (889)
+27_ 470 471 472 473 474 475 476 477 478 479 496 497 874 875 (898) (899)
+28_ 500 501 502 503 504 505 506 507 508 509 580 581 904 905 984 985
+29_ 510 511 512 513 514 515 516 517 518 519 590 591 914 915 994 995
+2A_ 520 521 522 523 524 525 526 527 528 529 582 583 924 925 948 949
+2B_ 530 531 532 533 534 535 536 537 538 539 592 593 934 935 958 959
+2C_ 540 541 542 543 544 545 546 547 548 549 584 585 944 945 588 589
+2D_ 550 551 552 553 554 555 556 557 558 559 594 595 954 955 598 599
+2E_ 560 561 562 563 564 565 566 567 568 569 586 587 964 965 (988) (989)
+2F_ 570 571 572 573 574 575 576 577 578 579 596 597 974 975 (998) (999)
+30_ 600 601 602 603 604 605 606 607 608 609 680 681 806 807 886 887
+31_ 610 611 612 613 614 615 616 617 618 619 690 691 816 817 896 897
+32_ 620 621 622 623 624 625 626 627 628 629 682 683 826 827 868 869
+33_ 630 631 632 633 634 635 636 637 638 639 692 693 836 837 878 879
+34_ 640 641 642 643 644 645 646 647 648 649 684 685 846 847 688 689
+35_ 650 651 652 653 654 655 656 657 658 659 694 695 856 857 698 699
+36_ 660 661 662 663 664 665 666 667 668 669 686 687 866 867 (888) (889)
+37_ 670 671 672 673 674 675 676 677 678 679 696 697 876 877 (898) (899)
+38_ 700 701 702 703 704 705 706 707 708 709 780 781 906 907 986 987
+39_ 710 711 712 713 714 715 716 717 718 719 790 791 916 917 996 997
+3A_ 720 721 722 723 724 725 726 727 728 729 782 783 926 927 968 969
+3B_ 730 731 732 733 734 735 736 737 738 739 792 793 936 937 978 979
+3C_ 740 741 742 743 744 745 746 747 748 749 784 785 946 947 788 789
+3D_ 750 751 752 753 754 755 756 757 758 759 794 795 956 957 798 799
+3E_ 760 761 762 763 764 765 766 767 768 769 786 787 966 967 (988) (989)
+3F_ 770 771 772 773 774 775 776 777 778 779 796 797 976 977 (998) (999)
+"""
+DPD_TO_BCD_PATTERN = (r"^([0-9A-F]{2})_\s+" +
+ r"\s+".join([r"\(?(\d{3})\)?"] * 16) +
+ r"$")
+DPD_TO_BCD_REGEX = re.compile(DPD_TO_BCD_PATTERN, re.M)
+
+
BCD_TO_DPD_TABLE = """
0 1 2 3 4 5 6 7 8 9
00_ 000 001 002 003 004 005 006 007 008 009
BCD_TO_DPD_REGEX = re.compile(BCD_TO_DPD_PATTERN, re.M)
-DPD_TO_BCD_TABLE = """
- 0 1 2 3 4 5 6 7 8 9 A B C D E F
-00_ 000 001 002 003 004 005 006 007 008 009 080 081 800 801 880 881
-01_ 010 011 012 013 014 015 016 017 018 019 090 091 810 811 890 891
-02_ 020 021 022 023 024 025 026 027 028 029 082 083 820 821 808 809
-03_ 030 031 032 033 034 035 036 037 038 039 092 093 830 831 818 819
-04_ 040 041 042 043 044 045 046 047 048 049 084 085 840 841 088 089
-05_ 050 051 052 053 054 055 056 057 058 059 094 095 850 851 098 099
-06_ 060 061 062 063 064 065 066 067 068 069 086 087 860 861 888 889
-07_ 070 071 072 073 074 075 076 077 078 079 096 097 870 871 898 899
-08_ 100 101 102 103 104 105 106 107 108 109 180 181 900 901 980 981
-09_ 110 111 112 113 114 115 116 117 118 119 190 191 910 911 990 991
-0A_ 120 121 122 123 124 125 126 127 128 129 182 183 920 921 908 909
-0B_ 130 131 132 133 134 135 136 137 138 139 192 193 930 931 918 919
-0C_ 140 141 142 143 144 145 146 147 148 149 184 185 940 941 188 189
-0D_ 150 151 152 153 154 155 156 157 158 159 194 195 950 951 198 199
-0E_ 160 161 162 163 164 165 166 167 168 169 186 187 960 961 988 989
-0F_ 170 171 172 173 174 175 176 177 178 179 196 197 970 971 998 999
-10_ 200 201 202 203 204 205 206 207 208 209 280 281 802 803 882 883
-11_ 210 211 212 213 214 215 216 217 218 219 290 291 812 813 892 893
-12_ 220 221 222 223 224 225 226 227 228 229 282 283 822 823 828 829
-13_ 230 231 232 233 234 235 236 237 238 239 292 293 832 833 838 839
-14_ 240 241 242 243 244 245 246 247 248 249 284 285 842 843 288 289
-15_ 250 251 252 253 254 255 256 257 258 259 294 295 852 853 298 299
-16_ 260 261 262 263 264 265 266 267 268 269 286 287 862 863 (888) (889)
-17_ 270 271 272 273 274 275 276 277 278 279 296 297 872 873 (898) (899)
-18_ 300 301 302 303 304 305 306 307 308 309 380 381 902 903 982 983
-19_ 310 311 312 313 314 315 316 317 318 319 390 391 912 913 992 993
-1A_ 320 321 322 323 324 325 326 327 328 329 382 383 922 923 928 929
-1B_ 330 331 332 333 334 335 336 337 338 339 392 393 932 933 938 939
-1C_ 340 341 342 343 344 345 346 347 348 349 384 385 942 943 388 389
-1D_ 350 351 352 353 354 355 356 357 358 359 394 395 952 953 398 399
-1E_ 360 361 362 363 364 365 366 367 368 369 386 387 962 963 (988) (989)
-1F_ 370 371 372 373 374 375 376 377 378 379 396 397 972 973 (998) (999)
-20_ 400 401 402 403 404 405 406 407 408 409 480 481 804 805 884 885
-21_ 410 411 412 413 414 415 416 417 418 419 490 491 814 815 894 895
-22_ 420 421 422 423 424 425 426 427 428 429 482 483 824 825 848 849
-23_ 430 431 432 433 434 435 436 437 438 439 492 493 834 835 858 859
-24_ 440 441 442 443 444 445 446 447 448 449 484 485 844 845 488 489
-25_ 450 451 452 453 454 455 456 457 458 459 494 495 854 855 498 499
-26_ 460 461 462 463 464 465 466 467 468 469 486 487 864 865 (888) (889)
-27_ 470 471 472 473 474 475 476 477 478 479 496 497 874 875 (898) (899)
-28_ 500 501 502 503 504 505 506 507 508 509 580 581 904 905 984 985
-29_ 510 511 512 513 514 515 516 517 518 519 590 591 914 915 994 995
-2A_ 520 521 522 523 524 525 526 527 528 529 582 583 924 925 948 949
-2B_ 530 531 532 533 534 535 536 537 538 539 592 593 934 935 958 959
-2C_ 540 541 542 543 544 545 546 547 548 549 584 585 944 945 588 589
-2D_ 550 551 552 553 554 555 556 557 558 559 594 595 954 955 598 599
-2E_ 560 561 562 563 564 565 566 567 568 569 586 587 964 965 (988) (989)
-2F_ 570 571 572 573 574 575 576 577 578 579 596 597 974 975 (998) (999)
-30_ 600 601 602 603 604 605 606 607 608 609 680 681 806 807 886 887
-31_ 610 611 612 613 614 615 616 617 618 619 690 691 816 817 896 897
-32_ 620 621 622 623 624 625 626 627 628 629 682 683 826 827 868 869
-33_ 630 631 632 633 634 635 636 637 638 639 692 693 836 837 878 879
-34_ 640 641 642 643 644 645 646 647 648 649 684 685 846 847 688 689
-35_ 650 651 652 653 654 655 656 657 658 659 694 695 856 857 698 699
-36_ 660 661 662 663 664 665 666 667 668 669 686 687 866 867 (888) (889)
-37_ 670 671 672 673 674 675 676 677 678 679 696 697 876 877 (898) (899)
-38_ 700 701 702 703 704 705 706 707 708 709 780 781 906 907 986 987
-39_ 710 711 712 713 714 715 716 717 718 719 790 791 916 917 996 997
-3A_ 720 721 722 723 724 725 726 727 728 729 782 783 926 927 968 969
-3B_ 730 731 732 733 734 735 736 737 738 739 792 793 936 937 978 979
-3C_ 740 741 742 743 744 745 746 747 748 749 784 785 946 947 788 789
-3D_ 750 751 752 753 754 755 756 757 758 759 794 795 956 957 798 799
-3E_ 760 761 762 763 764 765 766 767 768 769 786 787 966 967 (988) (989)
-3F_ 770 771 772 773 774 775 776 777 778 779 796 797 976 977 (998) (999)
-"""
-DPD_TO_BCD_PATTERN = (r"^([0-9A-F]{2})_\s+" +
- r"\s+".join([r"\(?(\d{3})\)?"] * 16) +
- r"$")
-DPD_TO_BCD_REGEX = re.compile(DPD_TO_BCD_PATTERN, re.M)
-
-
def run_tst(generator, initial_regs, initial_sprs=None, svstate=0, mmu=False,
initial_cr=0, mem=None,
initial_fprs=None,