00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef REGISTER_INCLUDED
00041 #define REGISTER_INCLUDED
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592 #ifdef _KEEP_RCS_ID
00593 static const char register_rcs_id[] = "$Source: /scratch/mee/2.4-65/kpro64-pending/be/cg/SCCS/s.register.h $ $Revision: 1.7 $";
00594 #endif
00595
00596 #include "mtypes.h"
00597 #include "targ_isa_registers.h"
00598
00599 struct op;
00600 struct tn;
00601
00602
00603
00604
00605
00606 typedef UINT REGISTER;
00607
00608
00609
00610 typedef mUINT16 mREGISTER;
00611
00612
00613
00614
00615 typedef union class_reg_pair {
00616 mUINT32 class_n_reg;
00617 struct class_reg_struct {
00618 mREGISTER reg;
00619 mISA_REGISTER_CLASS rclass;
00620 } class_reg;
00621 } CLASS_REG_PAIR;
00622
00623
00624
00625 #define Set_CLASS_REG_PAIR_class_n_reg(x,cnr) ((x).class_n_reg = (cnr))
00626 #define CLASS_REG_PAIR_class_n_reg(x) ((x).class_n_reg+0)
00627 #define Set_CLASS_REG_PAIR_rclass(x,rc) ((x).class_reg.rclass = (rc))
00628 #define CLASS_REG_PAIR_rclass(x) ((ISA_REGISTER_CLASS)(x).class_reg.rclass)
00629 #define Set_CLASS_REG_PAIR_reg(x,r) ((x).class_reg.reg = (r))
00630 #define CLASS_REG_PAIR_reg(x) ((x).class_reg.reg+0)
00631
00632
00633 extern void Set_CLASS_REG_PAIR(CLASS_REG_PAIR& rp, ISA_REGISTER_CLASS rclass, REGISTER reg);
00634
00635
00636 #define CREATE_CLASS_N_REG(rclass,reg) ((mUINT16)(((reg)<<8)|(rclass)))
00637 #define CONSTRUCT_CLASS_REG_PAIR(cl_reg_pair,rclass,reg) \
00638 (Set_CLASS_REG_PAIR_class_n_reg(cl_reg_pair, \
00639 CREATE_CLASS_N_REG(rclass,reg))
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651 #if ISA_REGISTER_MAX < 32
00652
00653 typedef UINT32 REGISTER_SET;
00654
00655 #define REGISTER_SET_EMPTY_SET ((REGISTER_SET)0)
00656
00657
00658
00659 #define REGISTER_SET_WORD UINT32
00660 #define REGISTER_SET_ELEM(set, idx) (set)
00661 #define REGISTER_SET_IDX(iv)
00662 #define FOR_REGISTER_SET(init, test, incr) if (0)
00663 #define MAX_REGISTER_SET_IDX (0)
00664 #define REGISTER_SET_WORD_IDX(bit) (0)
00665 #define REGISTER_SET_BIT_IDX(bit) (bit)
00666
00667 #elif ISA_REGISTER_MAX < 64
00668
00669 typedef UINT64 REGISTER_SET;
00670
00671 #define REGISTER_SET_EMPTY_SET ((REGISTER_SET)0)
00672
00673
00674
00675 #define REGISTER_SET_WORD UINT64
00676 #define REGISTER_SET_ELEM(set, idx) (set)
00677 #define REGISTER_SET_IDX(iv)
00678 #define FOR_REGISTER_SET(init, test, incr) if (0)
00679 #define MAX_REGISTER_SET_IDX (0)
00680 #define REGISTER_SET_WORD_IDX(bit) (0)
00681 #define REGISTER_SET_BIT_IDX(bit) (bit)
00682
00683 #else
00684
00685 typedef struct {
00686 UINT64 v[(ISA_REGISTER_MAX/64)+1];
00687 } REGISTER_SET;
00688
00689 extern const REGISTER_SET REGISTER_SET_EMPTY_SET;
00690
00691
00692
00693 #define REGISTER_SET_WORD UINT64
00694 #define REGISTER_SET_ELEM(set, idx) ((set).v[(idx)])
00695 #define REGISTER_SET_IDX(iv) INT iv
00696 #define FOR_REGISTER_SET(init, test, incr) for ((init); (test); (incr))
00697 #define MAX_REGISTER_SET_IDX (ISA_REGISTER_MAX/64)
00698 #define REGISTER_SET_WORD_IDX(bit) ((bit) >> 6)
00699 #define REGISTER_SET_BIT_IDX(bit) ((bit) & (64-1))
00700
00701 #endif
00702
00703
00704
00705
00706
00707 #ifdef INCLUDING_IN_REGISTER
00708 #define REGISTER_CLIENT_CONST
00709 #else
00710 #define REGISTER_CLIENT_CONST const
00711 #endif
00712
00713
00714
00715
00716 #define REGISTER_UNDEFINED ((REGISTER) 0)
00717 #define REGISTER_MIN ((REGISTER) 1)
00718 #define REGISTER_MAX ((REGISTER) (ISA_REGISTER_MAX+REGISTER_MIN))
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728 typedef struct {
00729 mUINT16 reg_machine_id[REGISTER_MAX + 1];
00730 mUINT8 reg_bit_size[REGISTER_MAX + 1];
00731 mBOOL reg_allocatable[REGISTER_MAX + 1];
00732 #if !defined(TARG_NVISA)
00733 const char *reg_name[REGISTER_MAX + 1];
00734 #endif
00735
00736 mBOOL can_store;
00737 mBOOL multiple_save;
00738 mUINT16 register_count;
00739 const char *name;
00740 REGISTER_SET universe;
00741 REGISTER_SET allocatable;
00742 REGISTER_SET caller_saves;
00743 REGISTER_SET callee_saves;
00744 REGISTER_SET function_value;
00745 REGISTER_SET function_argument;
00746 REGISTER_SET shrink_wrap;
00747 REGISTER_SET stacked;
00748 REGISTER_SET rotating;
00749
00750
00751
00752
00753 } REGISTER_CLASS_INFO;
00754
00755
00756 extern REGISTER_CLIENT_CONST ISA_REGISTER_CLASS
00757 REGISTER_CLASS_vec[ISA_REGISTER_CLASS_MAX + 1];
00758
00759
00760
00761 extern REGISTER_CLIENT_CONST REGISTER_CLASS_INFO
00762 REGISTER_CLASS_info[ISA_REGISTER_CLASS_MAX + 1];
00763
00764
00765
00766 #define REGISTER_CLASS_reg_allocatable(x) \
00767 (REGISTER_CLASS_info[x].reg_allocatable)
00768 #define REGISTER_CLASS_reg_machine_id(x) \
00769 (REGISTER_CLASS_info[x].reg_machine_id)
00770 #define REGISTER_CLASS_reg_name(x) \
00771 (REGISTER_CLASS_info[x].reg_name)
00772 #define REGISTER_CLASS_reg_bit_size(x) \
00773 (REGISTER_CLASS_info[x].reg_bit_size)
00774 #define REGISTER_CLASS_name(x) (REGISTER_CLASS_info[x].name)
00775 #define REGISTER_CLASS_register_count(x) \
00776 (REGISTER_CLASS_info[x].register_count)
00777 #define REGISTER_CLASS_universe(x) \
00778 (REGISTER_CLASS_info[x].universe)
00779 #define REGISTER_CLASS_allocatable(x) \
00780 (REGISTER_CLASS_info[x].allocatable)
00781 #define REGISTER_CLASS_caller_saves(x) \
00782 (REGISTER_CLASS_info[x].caller_saves)
00783 #define REGISTER_CLASS_callee_saves(x) \
00784 (REGISTER_CLASS_info[x].callee_saves)
00785 #define REGISTER_CLASS_stacked(x) \
00786 (REGISTER_CLASS_info[x].stacked)
00787 #define REGISTER_CLASS_rotating(x) \
00788 (REGISTER_CLASS_info[x].rotating)
00789 #define REGISTER_CLASS_function_value(x) \
00790 (REGISTER_CLASS_info[x].function_value)
00791 #define REGISTER_CLASS_function_argument(x) \
00792 (REGISTER_CLASS_info[x].function_argument)
00793 #define REGISTER_CLASS_shrink_wrap(x) \
00794 (REGISTER_CLASS_info[x].shrink_wrap)
00795 #define REGISTER_CLASS_can_store(x) \
00796 (REGISTER_CLASS_info[x].can_store)
00797 #define REGISTER_CLASS_multiple_save(x) \
00798 (REGISTER_CLASS_info[x].multiple_save)
00799
00800
00801
00802
00803 #define REGISTER_CLASS_last_register(x) \
00804 (REGISTER_CLASS_register_count(x) + REGISTER_MIN - 1)
00805
00806 #define REGISTER_machine_id(rclass,reg) \
00807 (REGISTER_CLASS_reg_machine_id(rclass)[reg])
00808 #define REGISTER_allocatable(rclass,reg) \
00809 (REGISTER_CLASS_reg_allocatable(rclass)[reg])
00810 #if defined(TARG_NVISA)
00811
00812
00813
00814
00815
00816 #define REGISTER_name(rclass,reg) \
00817 (ISA_REGISTER_CLASS_INFO_Reg_Name(ISA_REGISTER_CLASS_Info(rclass), \
00818 reg - REGISTER_MIN))
00819 #else
00820 #define REGISTER_name(rclass,reg) \
00821 (REGISTER_CLASS_reg_name(rclass)[reg])
00822 #endif
00823 #define REGISTER_bit_size(rclass,reg) \
00824 (REGISTER_CLASS_reg_bit_size(rclass)[reg])
00825
00826
00827
00828 #define FOR_ALL_REGISTER_SET_members(set,reg) \
00829 for (reg = REGISTER_SET_Choose (set); \
00830 reg != REGISTER_UNDEFINED; \
00831 reg = REGISTER_SET_Choose_Next(set,reg))
00832
00833
00834
00835
00836 typedef struct {
00837 const char *name;
00838 const char *reg_name[REGISTER_MAX + 1];
00839 REGISTER_SET members;
00840 ISA_REGISTER_CLASS rclass;
00841 } REGISTER_SUBCLASS_INFO;
00842
00843
00844
00845
00846 extern REGISTER_CLIENT_CONST REGISTER_SUBCLASS_INFO
00847 REGISTER_SUBCLASS_info[ISA_REGISTER_SUBCLASS_MAX + 1];
00848
00849
00850
00851 #define REGISTER_SUBCLASS_name(x) \
00852 (REGISTER_SUBCLASS_info[x].name)
00853 #define REGISTER_SUBCLASS_members(x) \
00854 (REGISTER_SUBCLASS_info[x].members)
00855 #define REGISTER_SUBCLASS_register_class(x) \
00856 (REGISTER_SUBCLASS_info[x].rclass)
00857 #define REGISTER_SUBCLASS_reg_name(x,reg) \
00858 (REGISTER_SUBCLASS_info[x].reg_name[reg])
00859
00860
00861
00862 extern CLASS_REG_PAIR CLASS_REG_PAIR_zero;
00863 #define REGISTER_zero CLASS_REG_PAIR_reg(CLASS_REG_PAIR_zero)
00864 #define REGISTER_CLASS_zero CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_zero)
00865 #define CLASS_AND_REG_zero CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_zero)
00866
00867 extern CLASS_REG_PAIR CLASS_REG_PAIR_ep;
00868 #define REGISTER_ep CLASS_REG_PAIR_reg(CLASS_REG_PAIR_ep)
00869 #define REGISTER_CLASS_ep CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_ep)
00870 #define CLASS_AND_REG_ep CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_ep)
00871
00872 extern CLASS_REG_PAIR CLASS_REG_PAIR_gp;
00873 #define REGISTER_gp CLASS_REG_PAIR_reg(CLASS_REG_PAIR_gp)
00874 #define REGISTER_CLASS_gp CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_gp)
00875 #define CLASS_AND_REG_gp CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_gp)
00876
00877 extern CLASS_REG_PAIR CLASS_REG_PAIR_sp;
00878 #define REGISTER_sp CLASS_REG_PAIR_reg(CLASS_REG_PAIR_sp)
00879 #define REGISTER_CLASS_sp CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_sp)
00880 #define CLASS_AND_REG_sp CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_sp)
00881
00882 #ifdef TARG_IA64
00883 extern CLASS_REG_PAIR CLASS_REG_PAIR_tp;
00884 #define REGISTER_tp CLASS_REG_PAIR_reg(CLASS_REG_PAIR_tp)
00885 #define REGISTER_CLASS_tp CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_tp)
00886 #define CLASS_AND_REG_tp CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_tp)
00887 #endif
00888
00889 extern CLASS_REG_PAIR CLASS_REG_PAIR_fp;
00890 #define REGISTER_fp CLASS_REG_PAIR_reg(CLASS_REG_PAIR_fp)
00891 #define REGISTER_CLASS_fp CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_fp)
00892 #define CLASS_AND_REG_fp CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_fp)
00893
00894 extern CLASS_REG_PAIR CLASS_REG_PAIR_ra;
00895 #define REGISTER_ra CLASS_REG_PAIR_reg(CLASS_REG_PAIR_ra)
00896 #define REGISTER_CLASS_ra CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_ra)
00897 #define CLASS_AND_REG_ra CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_ra)
00898
00899 extern CLASS_REG_PAIR CLASS_REG_PAIR_v0;
00900 #define REGISTER_v0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_v0)
00901 #define REGISTER_CLASS_v0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_v0)
00902 #define CLASS_AND_REG_v0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_v0)
00903
00904 #ifdef TARG_X8664
00905 extern CLASS_REG_PAIR CLASS_REG_PAIR_f0;
00906 #define REGISTER_f0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_f0)
00907 #define REGISTER_CLASS_f0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_f0)
00908 #define CLASS_AND_REG_f0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_f0)
00909 #endif
00910
00911
00912 extern CLASS_REG_PAIR CLASS_REG_PAIR_static_link;
00913 #define REGISTER_static_link CLASS_REG_PAIR_reg(CLASS_REG_PAIR_static_link)
00914 #define REGISTER_CLASS_static_link CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_static_link)
00915 #define CLASS_AND_REG_static_link CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_static_link)
00916
00917 extern CLASS_REG_PAIR CLASS_REG_PAIR_pfs;
00918 #define REGISTER_pfs CLASS_REG_PAIR_reg(CLASS_REG_PAIR_pfs)
00919 #define REGISTER_CLASS_pfs CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_pfs)
00920 #define CLASS_AND_REG_pfs CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_pfs)
00921
00922 extern CLASS_REG_PAIR CLASS_REG_PAIR_lc;
00923 #define REGISTER_lc CLASS_REG_PAIR_reg(CLASS_REG_PAIR_lc)
00924 #define REGISTER_CLASS_lc CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_lc)
00925 #define CLASS_AND_REG_lc CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_lc)
00926
00927 extern CLASS_REG_PAIR CLASS_REG_PAIR_ec;
00928 #define REGISTER_ec CLASS_REG_PAIR_reg(CLASS_REG_PAIR_ec)
00929 #define REGISTER_CLASS_ec CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_ec)
00930 #define CLASS_AND_REG_ec CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_ec)
00931
00932 extern CLASS_REG_PAIR CLASS_REG_PAIR_true;
00933 #define REGISTER_true CLASS_REG_PAIR_reg(CLASS_REG_PAIR_true)
00934 #define REGISTER_CLASS_true CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_true)
00935 #define CLASS_AND_REG_true CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_true)
00936
00937 extern CLASS_REG_PAIR CLASS_REG_PAIR_fzero;
00938 #define REGISTER_fzero CLASS_REG_PAIR_reg(CLASS_REG_PAIR_fzero)
00939 #define REGISTER_CLASS_fzero CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_fzero)
00940 #define CLASS_AND_REG_fzero CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_fzero)
00941
00942 extern CLASS_REG_PAIR CLASS_REG_PAIR_fone;
00943 #define REGISTER_fone CLASS_REG_PAIR_reg(CLASS_REG_PAIR_fone)
00944 #define REGISTER_CLASS_fone CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_fone)
00945 #define CLASS_AND_REG_fone CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_fone)
00946
00947 #if defined(TARG_SL)
00948 extern CLASS_REG_PAIR CLASS_REG_PAIR_k0;
00949 #define REGISTER_k0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_k0)
00950 #define REGISTER_CLASS_k0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_k0)
00951 #define CLASS_AND_REG_k0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_k0)
00952 extern CLASS_REG_PAIR CLASS_REG_PAIR_k1;
00953 #define REGISTER_k1 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_k1)
00954 #define REGISTER_CLASS_k1 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_k1)
00955 #define CLASS_AND_REG_k1 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_k1)
00956
00957
00958 extern CLASS_REG_PAIR CLASS_REG_PAIR_ja;
00959 #define REGISTER_ja CLASS_REG_PAIR_reg(CLASS_REG_PAIR_ja)
00960 #define REGISTER_CLASS_ja CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_ja)
00961 #define CLASS_AND_REG_ja CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_ja)
00962
00963 extern CLASS_REG_PAIR CLASS_REG_PAIR_lc0;
00964 #define REGISTER_lc0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_lc0)
00965 #define REGISTER_CLASS_lc0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_lc0)
00966 #define CLASS_AND_REG_lc0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_lc0)
00967
00968 extern CLASS_REG_PAIR CLASS_REG_PAIR_lc1;
00969 #define REGISTER_lc1 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_lc1)
00970 #define REGISTER_CLASS_lc1 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_lc1)
00971 #define CLASS_AND_REG_lc1 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_lc1)
00972
00973 extern CLASS_REG_PAIR CLASS_REG_PAIR_lc2;
00974 #define REGISTER_lc2 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_lc2)
00975 #define REGISTER_CLASS_lc2 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_lc2)
00976 #define CLASS_AND_REG_lc2 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_lc2)
00977
00978 extern CLASS_REG_PAIR CLASS_REG_PAIR_lc3;
00979 #define REGISTER_lc3 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_lc3)
00980 #define REGISTER_CLASS_lc3 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_lc3)
00981 #define CLASS_AND_REG_lc3 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_lc3)
00982
00983 extern CLASS_REG_PAIR CLASS_REG_PAIR_hi;
00984 #define REGISTER_hi CLASS_REG_PAIR_reg(CLASS_REG_PAIR_hi)
00985 #define REGISTER_CLASS_hi CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_hi)
00986 #define CLASS_AND_REG_hi CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_hi)
00987
00988 extern CLASS_REG_PAIR CLASS_REG_PAIR_acc0;
00989 #define REGISTER_acc0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_acc0)
00990 #define REGISTER_CLASS_acc0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_acc0)
00991 #define CLASS_AND_REG_acc0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_acc0)
00992
00993 extern CLASS_REG_PAIR CLASS_REG_PAIR_acc1;
00994 #define REGISTER_acc1 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_acc1)
00995 #define REGISTER_CLASS_acc1 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_acc1)
00996 #define CLASS_AND_REG_acc1 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_acc1)
00997
00998 extern CLASS_REG_PAIR CLASS_REG_PAIR_acc2;
00999 #define REGISTER_acc2 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_acc2)
01000 #define REGISTER_CLASS_acc2 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_acc2)
01001 #define CLASS_AND_REG_acc2 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_acc2)
01002
01003 extern CLASS_REG_PAIR CLASS_REG_PAIR_acc3;
01004 #define REGISTER_acc3 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_acc3)
01005 #define REGISTER_CLASS_acc3 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_acc3)
01006 #define CLASS_AND_REG_acc3 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_acc3)
01007
01008 extern CLASS_REG_PAIR CLASS_REG_PAIR_add0;
01009 #define REGISTER_add0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add0)
01010 #define REGISTER_CLASS_add0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add0)
01011 #define CLASS_AND_REG_add0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add0)
01012
01013 extern CLASS_REG_PAIR CLASS_REG_PAIR_add1;
01014 #define REGISTER_add1 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add1)
01015 #define REGISTER_CLASS_add1 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add1)
01016 #define CLASS_AND_REG_add1 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add1)
01017
01018 extern CLASS_REG_PAIR CLASS_REG_PAIR_add2;
01019 #define REGISTER_add2 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add2)
01020 #define REGISTER_CLASS_add2 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add2)
01021 #define CLASS_AND_REG_add2 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add2)
01022
01023 extern CLASS_REG_PAIR CLASS_REG_PAIR_add3;
01024 #define REGISTER_add3 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add3)
01025 #define REGISTER_CLASS_add3 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add3)
01026 #define CLASS_AND_REG_add3 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add3)
01027
01028 extern CLASS_REG_PAIR CLASS_REG_PAIR_add4;
01029 #define REGISTER_add4 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add4)
01030 #define REGISTER_CLASS_add4 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add4)
01031 #define CLASS_AND_REG_add4 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add4)
01032
01033 extern CLASS_REG_PAIR CLASS_REG_PAIR_add5;
01034 #define REGISTER_add5 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add5)
01035 #define REGISTER_CLASS_add5 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add5)
01036 #define CLASS_AND_REG_add5 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add5)
01037
01038 extern CLASS_REG_PAIR CLASS_REG_PAIR_add6;
01039 #define REGISTER_add6 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add6)
01040 #define REGISTER_CLASS_add6 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add6)
01041 #define CLASS_AND_REG_add6 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add6)
01042
01043 extern CLASS_REG_PAIR CLASS_REG_PAIR_add7;
01044 #define REGISTER_add7 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_add7)
01045 #define REGISTER_CLASS_add7 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_add7)
01046 #define CLASS_AND_REG_add7 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_add7)
01047
01048 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize0;
01049 #define REGISTER_addsize0 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize0)
01050 #define REGISTER_CLASS_addsize0 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize0)
01051 #define CLASS_AND_REG_addsize0 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize0)
01052
01053 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize1;
01054 #define REGISTER_addsize1 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize1)
01055 #define REGISTER_CLASS_addsize1 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize1)
01056 #define CLASS_AND_REG_addsize1 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize1)
01057
01058 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize2;
01059 #define REGISTER_addsize2 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize2)
01060 #define REGISTER_CLASS_addsize2 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize2)
01061 #define CLASS_AND_REG_addsize2 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize2)
01062
01063 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize3;
01064 #define REGISTER_addsize3 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize3)
01065 #define REGISTER_CLASS_addsize3 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize3)
01066 #define CLASS_AND_REG_addsize3 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize3)
01067
01068 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize4;
01069 #define REGISTER_addsize4 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize4)
01070 #define REGISTER_CLASS_addsize4 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize4)
01071 #define CLASS_AND_REG_addsize4 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize4)
01072
01073 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize5;
01074 #define REGISTER_addsize5 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize5)
01075 #define REGISTER_CLASS_addsize5 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize5)
01076 #define CLASS_AND_REG_addsize5 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize5)
01077
01078 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize6;
01079 #define REGISTER_addsize6 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize6)
01080 #define REGISTER_CLASS_addsize6 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize6)
01081 #define CLASS_AND_REG_addsize6 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize6)
01082
01083 extern CLASS_REG_PAIR CLASS_REG_PAIR_addsize7;
01084 #define REGISTER_addsize7 CLASS_REG_PAIR_reg(CLASS_REG_PAIR_addsize7)
01085 #define REGISTER_CLASS_addsize7 CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_addsize7)
01086 #define CLASS_AND_REG_addsize7 CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_addsize7)
01087 #endif // TARG_SL
01088
01089 #ifdef TARG_SL2
01090 extern CLASS_REG_PAIR CLASS_REG_PAIR_c2acc;
01091 #define REGISTER_c2acc CLASS_REG_PAIR_reg(CLASS_REG_PAIR_c2acc)
01092 #define REGISTER_CLASS_c2acc CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_c2acc)
01093 #define CLASS_AND_REG_c2acc CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_c2acc)
01094
01095 extern CLASS_REG_PAIR CLASS_REG_PAIR_c2cond;
01096 #define REGISTER_c2cond CLASS_REG_PAIR_reg(CLASS_REG_PAIR_c2cond)
01097 #define REGISTER_CLASS_c2cond CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_c2cond)
01098 #define CLASS_AND_REG_c2cond CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_c2cond)
01099
01100 extern CLASS_REG_PAIR CLASS_REG_PAIR_c2mvsel;
01101 #define REGISTER_c2mvsel CLASS_REG_PAIR_reg(CLASS_REG_PAIR_c2mvsel)
01102 #define REGISTER_CLASS_c2mvsel CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_c2mvsel)
01103 #define CLASS_AND_REG_c2mvsel CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_c2mvsel)
01104
01105 extern CLASS_REG_PAIR CLASS_REG_PAIR_c2vlcs;
01106 #define REGISTER_c2vlcs CLASS_REG_PAIR_reg(CLASS_REG_PAIR_c2vlcs)
01107 #define REGISTER_CLASS_c2vlcs CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_c2vlcs)
01108 #define CLASS_AND_REG_c2vlcs CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_c2vlcs)
01109
01110 #endif
01111
01112 extern CLASS_REG_PAIR CLASS_REG_PAIR_c2movpat;
01113 #define REGISTER_c2movpat CLASS_REG_PAIR_reg(CLASS_REG_PAIR_c2movpat)
01114 #define REGISTER_CLASS_c2movpat CLASS_REG_PAIR_rclass(CLASS_REG_PAIR_c2movpat)
01115 #define CLASS_AND_REG_c2movpat CLASS_REG_PAIR_class_n_reg(CLASS_REG_PAIR_c2movpat)
01116
01117 extern const CLASS_REG_PAIR CLASS_REG_PAIR_undef;
01118
01119
01120
01121
01122 extern void
01123 REGISTER_Begin(void);
01124
01125 extern void
01126 REGISTER_Pu_Begin(void);
01127
01128
01129 extern void
01130 REGISTER_Reset_FP (void);
01131
01132 extern void
01133 REGISTER_CLASS_OP_Update_Mapping(
01134 struct op *op
01135 );
01136
01137
01138
01139
01140
01141
01142 inline BOOL
01143 REGISTER_SET_EqualP(
01144 REGISTER_SET set1,
01145 REGISTER_SET set2
01146 )
01147 {
01148 REGISTER_SET_IDX(i);
01149
01150 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01151 if (REGISTER_SET_ELEM(set1, i) != REGISTER_SET_ELEM(set2, i)) {
01152 return FALSE;
01153 }
01154 }
01155 return REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)
01156 == REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX);
01157 }
01158
01159 inline BOOL
01160 REGISTER_SET_EmptyP(
01161 REGISTER_SET set
01162 )
01163 {
01164 REGISTER_SET_IDX(i);
01165
01166 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01167 if (REGISTER_SET_ELEM(set, i)) return FALSE;
01168 }
01169 return REGISTER_SET_ELEM(set, MAX_REGISTER_SET_IDX) == 0;
01170 }
01171
01172 inline REGISTER_SET
01173 REGISTER_SET_Intersection(
01174 REGISTER_SET set1,
01175 REGISTER_SET set2
01176 )
01177 {
01178 REGISTER_SET result;
01179 REGISTER_SET_IDX(i);
01180
01181 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01182 REGISTER_SET_ELEM(result, i) =
01183 REGISTER_SET_ELEM(set1, i) & REGISTER_SET_ELEM(set2, i);
01184 }
01185 REGISTER_SET_ELEM(result, MAX_REGISTER_SET_IDX) =
01186 REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)
01187 & REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX);
01188
01189 return result;
01190 }
01191
01192 inline REGISTER_SET
01193 REGISTER_SET_Union(
01194 REGISTER_SET set1,
01195 REGISTER_SET set2
01196 )
01197 {
01198 REGISTER_SET result;
01199 REGISTER_SET_IDX(i);
01200
01201 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01202 REGISTER_SET_ELEM(result, i) =
01203 REGISTER_SET_ELEM(set1, i) | REGISTER_SET_ELEM(set2, i);
01204 }
01205 REGISTER_SET_ELEM(result, MAX_REGISTER_SET_IDX) =
01206 REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)
01207 | REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX);
01208
01209 return result;
01210 }
01211
01212 inline REGISTER_SET
01213 REGISTER_SET_Difference(
01214 REGISTER_SET set1,
01215 REGISTER_SET set2
01216 )
01217 {
01218 REGISTER_SET result;
01219 REGISTER_SET_IDX(i);
01220
01221 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01222 REGISTER_SET_ELEM(result, i) =
01223 REGISTER_SET_ELEM(set1, i) & ~REGISTER_SET_ELEM(set2, i);
01224 }
01225 REGISTER_SET_ELEM(result, MAX_REGISTER_SET_IDX) =
01226 REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)
01227 & ~REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX);
01228
01229 return result;
01230 }
01231
01232 inline BOOL
01233 REGISTER_SET_IntersectsP(
01234 REGISTER_SET set1,
01235 REGISTER_SET set2
01236 )
01237 {
01238 REGISTER_SET_IDX(i);
01239
01240 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01241 if (REGISTER_SET_ELEM(set1, i) & REGISTER_SET_ELEM(set2, i)) {
01242 return TRUE;
01243 }
01244 }
01245 return ( REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)
01246 & REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX)) != 0;
01247 }
01248
01249 inline BOOL
01250 REGISTER_SET_ContainsP(
01251 REGISTER_SET set1,
01252 REGISTER_SET set2
01253 )
01254 {
01255 REGISTER_SET_IDX(i);
01256
01257 FOR_REGISTER_SET(i = 0, i < MAX_REGISTER_SET_IDX, ++i) {
01258 if (REGISTER_SET_ELEM(set2, i) & ~REGISTER_SET_ELEM(set1, i)) {
01259 return FALSE;
01260 }
01261 }
01262 return ( REGISTER_SET_ELEM(set2, MAX_REGISTER_SET_IDX)
01263 & ~REGISTER_SET_ELEM(set1, MAX_REGISTER_SET_IDX)) == 0;
01264 }
01265
01266 inline REGISTER_SET
01267 REGISTER_SET_Difference1(
01268 REGISTER_SET set,
01269 REGISTER reg
01270 )
01271 {
01272 REGISTER_SET result = set;
01273 INT bit = reg - REGISTER_MIN;
01274 Is_True((UINT)bit <= (REGISTER_MAX - REGISTER_MIN),
01275 ("REGISTER_SET_Difference1: register value out of range"));
01276 REGISTER_SET_ELEM(result, REGISTER_SET_WORD_IDX(bit)) =
01277 REGISTER_SET_ELEM(set, REGISTER_SET_WORD_IDX(bit))
01278 & ~((REGISTER_SET_WORD)1 << REGISTER_SET_BIT_IDX(bit));
01279 return result;
01280 }
01281
01282 inline REGISTER_SET
01283 REGISTER_SET_Union1(
01284 REGISTER_SET set,
01285 REGISTER reg
01286 )
01287 {
01288 REGISTER_SET result = set;
01289 INT bit = reg - REGISTER_MIN;
01290 Is_True((UINT)bit <= (REGISTER_MAX - REGISTER_MIN),
01291 ("REGISTER_SET_Union1: register value out of range"));
01292 REGISTER_SET_ELEM(result, REGISTER_SET_WORD_IDX(bit)) =
01293 REGISTER_SET_ELEM(set, REGISTER_SET_WORD_IDX(bit))
01294 | ((REGISTER_SET_WORD)1 << REGISTER_SET_BIT_IDX(bit));
01295 return result;
01296 }
01297
01298 inline REGISTER_SET
01299 REGISTER_SET_Intersection1(
01300 REGISTER_SET set,
01301 REGISTER reg
01302 )
01303 {
01304 REGISTER_SET result = set;
01305 INT bit = reg - REGISTER_MIN;
01306 Is_True((UINT)bit <= (REGISTER_MAX - REGISTER_MIN),
01307 ("REGISTER_SET_Intersection1: register value out of range"));
01308 REGISTER_SET_ELEM(result, REGISTER_SET_WORD_IDX(bit)) =
01309 REGISTER_SET_ELEM(set, REGISTER_SET_WORD_IDX(bit))
01310 & ((REGISTER_SET_WORD)1 << REGISTER_SET_BIT_IDX(bit));
01311 return result;
01312 }
01313
01314 inline BOOL
01315 REGISTER_SET_MemberP(
01316 REGISTER_SET set,
01317 REGISTER reg
01318 )
01319 {
01320 INT bit = reg - REGISTER_MIN;
01321 Is_True((UINT)bit <= (REGISTER_MAX - REGISTER_MIN),
01322 ("REGISTER_SET_MemberP: register value out of range"));
01323 return ( REGISTER_SET_ELEM(set, REGISTER_SET_WORD_IDX(bit))
01324 & ((REGISTER_SET_WORD)1 << REGISTER_SET_BIT_IDX(bit))) != 0;
01325 }
01326
01327 extern REGISTER_SET
01328 REGISTER_SET_Difference_Range(
01329 REGISTER_SET set,
01330 REGISTER low,
01331 REGISTER high
01332 );
01333
01334 extern REGISTER
01335 REGISTER_SET_Choose(
01336 REGISTER_SET set
01337 );
01338
01339 extern REGISTER
01340 REGISTER_SET_Choose_Next(
01341 REGISTER_SET set,
01342 REGISTER reg
01343 );
01344
01345 extern REGISTER
01346 REGISTER_SET_Choose_Range(
01347 REGISTER_SET set,
01348 REGISTER low,
01349 REGISTER high
01350 );
01351
01352 extern REGISTER
01353 REGISTER_SET_Choose_Intersection(
01354 REGISTER_SET set1,
01355 REGISTER_SET set2
01356 );
01357
01358 extern INT32
01359 REGISTER_SET_Size(
01360 REGISTER_SET set
01361 );
01362
01363 extern void
01364 REGISTER_SET_Print(
01365 REGISTER_SET set,
01366 FILE *f
01367 );
01368 #pragma mips_frequency_hint NEVER REGISTER_SET_Print
01369
01370 extern void
01371 REGISTER_Print(
01372 ISA_REGISTER_CLASS rclass,
01373 REGISTER reg,
01374 FILE *f
01375 );
01376 #pragma mips_frequency_hint NEVER REGISTER_Print
01377
01378 extern void
01379 CLASS_REG_PAIR_Print(
01380 CLASS_REG_PAIR crp,
01381 FILE *f
01382 );
01383
01384 extern void REGISTER_Trace(
01385 ISA_REGISTER_CLASS rclass,
01386 REGISTER reg
01387 );
01388 #pragma mips_frequency_hint NEVER REGISTER_Trace
01389
01390 extern void REGISTER_CLASS_Trace(
01391 ISA_REGISTER_CLASS rclass
01392 );
01393 #pragma mips_frequency_hint NEVER REGISTER_CLASS_Trace
01394
01395 extern void REGISTER_CLASS_Trace_All(void);
01396
01397 extern void REGISTER_Set_Allocatable(
01398 ISA_REGISTER_CLASS rclass,
01399 REGISTER reg,
01400 BOOL is_allocatable
01401 );
01402
01403
01404 #define CLASS_REG_PAIR_EqualP(crp1,crp2) \
01405 (CLASS_REG_PAIR_class_n_reg(crp1) == \
01406 CLASS_REG_PAIR_class_n_reg(crp2))
01407
01408
01409 extern REGISTER_SET REGISTER_SET_Range(UINT low, UINT high);
01410
01411
01412 extern void Set_Register_Never_Allocatable (char *regname);
01413 extern void Set_Register_Never_Allocatable (PREG_NUM preg);
01414
01415 inline ISA_REGISTER_CLASS Register_Class_For_Mtype(TYPE_ID mtype)
01416 {
01417 extern mISA_REGISTER_CLASS Mtype_RegClass_Map[MTYPE_LAST+1];
01418 return (mtype <= MTYPE_LAST)
01419 ? (ISA_REGISTER_CLASS)Mtype_RegClass_Map[mtype]
01420 : ISA_REGISTER_CLASS_UNDEFINED;
01421 }
01422
01423 extern void Init_Mtype_RegClass_Map(void);
01424
01425 #include "register_targ.h"
01426
01427 #endif