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 #define CPP_PREDEFINES "-D_AM29K -D_AM29000 -D_EPI -Acpu=a29k -Amachine=a29k"
00027
00028
00029 #define TARGET_VERSION
00030
00031
00032 #define ASM_SPEC "-w"
00033
00034
00035
00036 extern int target_flags;
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #define TARGET_DW_ENABLE (target_flags & 1)
00048
00049
00050
00051 #define TARGET_BYTE_WRITES (target_flags & 2)
00052
00053
00054
00055
00056
00057 #define TARGET_SMALL_MEMORY (target_flags & 4)
00058
00059
00060
00061
00062 #define TARGET_LARGE_MEMORY (target_flags & 8)
00063
00064
00065
00066 #define TARGET_29050 (target_flags & 16)
00067
00068
00069
00070
00071 #define TARGET_KERNEL_REGISTERS (target_flags & 32)
00072
00073
00074
00075
00076 #define TARGET_STACK_CHECK (target_flags & 64)
00077
00078
00079
00080
00081
00082 #define TARGET_NO_STOREM_BUG (target_flags & 128)
00083
00084
00085
00086
00087
00088 #define TARGET_NO_REUSE_ARGS (target_flags & 256)
00089
00090
00091
00092
00093 #define TARGET_SOFT_FLOAT (target_flags & 512)
00094
00095
00096
00097
00098 #define TARGET_MULTM ((target_flags & 1024) == 0)
00099
00100 #define TARGET_SWITCHES \
00101 { {"dw", 1, N_("Generate code assuming DW bit is set")}, \
00102 {"ndw", -1, N_("Generate code assuming DW bit is not set")}, \
00103 {"bw", 2, N_("Generate code using byte writes")}, \
00104 {"nbw", - (1|2), N_("Do not generate byte writes")}, \
00105 {"small", 4, N_("Use small memory model")}, \
00106 {"normal", - (4|8), N_("Use normal memory model")}, \
00107 {"large", 8, N_("Use large memory model")}, \
00108 {"29050", 16+128, N_("Generate 29050 code")}, \
00109 {"29000", -16, N_("Generate 29000 code")}, \
00110 {"kernel-registers", 32, N_("Use kernel global registers")}, \
00111 {"user-registers", -32, N_("Use user global registers")}, \
00112 {"stack-check", 64, N_("Emit stack checking code")}, \
00113 {"no-stack-check", - 74, N_("Do not emit stack checking code")}, \
00114 {"storem-bug", -128, N_("Work around storem hardware bug")}, \
00115 {"no-storem-bug", 128, N_("Do not work around storem hardware bug")}, \
00116 {"reuse-arg-regs", -256, N_("Store locals in argument registers")}, \
00117 {"no-reuse-arg-regs", 256, N_("Do not store locals in arg registers")}, \
00118 {"soft-float", 512, N_("Use software floating point")}, \
00119 {"no-multm", 1024, N_("Do not generate multm instructions")}, \
00120 {"", TARGET_DEFAULT, NULL}}
00121
00122 #define TARGET_DEFAULT 3
00123
00124
00125 #define CAN_DEBUG_WITHOUT_FP
00126
00127
00128
00129
00130
00131
00132
00133 #define SIZE_TYPE "unsigned int"
00134 #define PTRDIFF_TYPE "int"
00135 #define WCHAR_TYPE "char"
00136 #define WCHAR_TYPE_SIZE BITS_PER_UNIT
00137
00138
00139
00140
00141
00142
00143
00144 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
00145 if (GET_MODE_CLASS (MODE) == MODE_INT \
00146 && GET_MODE_SIZE (MODE) < 4) \
00147 (MODE) = SImode;
00148
00149
00150
00151
00152
00153
00154
00155 #define BITS_BIG_ENDIAN 1
00156
00157
00158
00159 #define BYTES_BIG_ENDIAN 1
00160
00161
00162
00163
00164
00165
00166 #define WORDS_BIG_ENDIAN 1
00167
00168
00169 #define BITS_PER_UNIT 8
00170
00171
00172
00173
00174
00175 #define BITS_PER_WORD 32
00176
00177
00178 #define UNITS_PER_WORD 4
00179
00180
00181
00182 #define POINTER_SIZE 32
00183
00184
00185 #define PARM_BOUNDARY 32
00186
00187
00188 #define STACK_BOUNDARY 64
00189
00190
00191 #define FUNCTION_BOUNDARY 32
00192
00193
00194 #define EMPTY_FIELD_BOUNDARY 32
00195
00196
00197 #define STRUCTURE_SIZE_BOUNDARY 8
00198
00199
00200 #define PCC_BITFIELD_TYPE_MATTERS 1
00201
00202
00203 #define BIGGEST_ALIGNMENT 32
00204
00205
00206 #define CONSTANT_ALIGNMENT(EXP, ALIGN) \
00207 (TREE_CODE (EXP) == STRING_CST \
00208 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
00209
00210
00211 #define DATA_ALIGNMENT(TYPE, ALIGN) \
00212 (TREE_CODE (TYPE) == ARRAY_TYPE \
00213 && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
00214 && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
00215
00216
00217
00218 #define STRICT_ALIGNMENT 0
00219
00220
00221
00222
00223 #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
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 #define FIRST_PSEUDO_REGISTER 236
00259
00260
00261
00262
00263
00264 #define R_GR(N) ((N) - 96)
00265 #define R_LR(N) ((N) + 32)
00266 #define R_FP 176
00267 #define R_AR(N) ((N) + 160)
00268 #define R_KR(N) ((N) + 204)
00269
00270
00271 #define R_BP 177
00272 #define R_FC 178
00273 #define R_CR 179
00274 #define R_Q 180
00275
00276
00277
00278
00279 #define R_VAB 181
00280 #define R_OPS 182
00281 #define R_CPS 183
00282 #define R_CFG 184
00283 #define R_CHA 185
00284 #define R_CHD 186
00285 #define R_CHC 187
00286 #define R_RBP 188
00287 #define R_TMC 189
00288 #define R_TMR 190
00289 #define R_PC0 191
00290 #define R_PC1 192
00291 #define R_PC2 193
00292 #define R_MMU 194
00293 #define R_LRU 195
00294 #define R_FPE 196
00295 #define R_INT 197
00296 #define R_FPS 198
00297 #define R_EXO 199
00298
00299
00300 #define R_ACU(N) ((N) + 200)
00301
00302
00303 #define R_TAV R_GR (121)
00304 #define R_TPC R_GR (122)
00305 #define R_LRP R_GR (123)
00306 #define R_SLP R_GR (124)
00307 #define R_MSP R_GR (125)
00308 #define R_RAB R_GR (126)
00309 #define R_RFB R_GR (127)
00310
00311
00312
00313
00314 #define FIXED_REGISTERS \
00315 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00316 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, \
00317 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00318 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00321 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00324 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00325 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00326 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00327 1, 1, 1, 1, 1, 1, 1, 1, \
00328 0, 0, 0, 0, \
00329 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00330 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
00331
00332
00333
00334
00335
00336
00337
00338 #define CALL_USED_REGISTERS \
00339 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00340 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00341 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00348 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00349 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00350 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00351 1, 1, 1, 1, 1, 1, 1, 1, \
00352 1, 1, 1, 1, \
00353 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
00354 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367 #define REG_ALLOC_ORDER \
00368 {R_GR (116), R_GR (117), R_GR (118), R_GR (119), R_GR (120), \
00369 R_GR (111), R_GR (110), R_GR (109), R_GR (108), R_GR (107), \
00370 R_GR (106), R_GR (105), R_GR (104), R_GR (103), R_GR (102), \
00371 R_GR (101), R_GR (100), R_GR (99), R_GR (98), R_GR (97), R_GR (96), \
00372 R_AR (0), R_AR (1), R_AR (2), R_AR (3), R_AR (4), R_AR (5), \
00373 R_AR (6), R_AR (7), R_AR (8), R_AR (9), R_AR (10), R_AR (11), \
00374 R_AR (12), R_AR (13), R_AR (14), R_AR (15), \
00375 R_LR (0), R_LR (1), R_LR (2), R_LR (3), R_LR (4), R_LR (5), \
00376 R_LR (6), R_LR (7), R_LR (8), R_LR (9), R_LR (10), R_LR (11), \
00377 R_LR (12), R_LR (13), R_LR (14), R_LR (15), R_LR (16), R_LR (17), \
00378 R_LR (18), R_LR (19), R_LR (20), R_LR (21), R_LR (22), R_LR (23), \
00379 R_LR (24), R_LR (25), R_LR (26), R_LR (27), R_LR (28), R_LR (29), \
00380 R_LR (30), R_LR (31), R_LR (32), R_LR (33), R_LR (34), R_LR (35), \
00381 R_LR (36), R_LR (37), R_LR (38), R_LR (39), R_LR (40), R_LR (41), \
00382 R_LR (42), R_LR (43), R_LR (44), R_LR (45), R_LR (46), R_LR (47), \
00383 R_LR (48), R_LR (49), R_LR (50), R_LR (51), R_LR (52), R_LR (53), \
00384 R_LR (54), R_LR (55), R_LR (56), R_LR (57), R_LR (58), R_LR (59), \
00385 R_LR (60), R_LR (61), R_LR (62), R_LR (63), R_LR (64), R_LR (65), \
00386 R_LR (66), R_LR (67), R_LR (68), R_LR (69), R_LR (70), R_LR (71), \
00387 R_LR (72), R_LR (73), R_LR (74), R_LR (75), R_LR (76), R_LR (77), \
00388 R_LR (78), R_LR (79), R_LR (80), R_LR (81), R_LR (82), R_LR (83), \
00389 R_LR (84), R_LR (85), R_LR (86), R_LR (87), R_LR (88), R_LR (89), \
00390 R_LR (90), R_LR (91), R_LR (92), R_LR (93), R_LR (94), R_LR (95), \
00391 R_LR (96), R_LR (97), R_LR (98), R_LR (99), R_LR (100), R_LR (101), \
00392 R_LR (102), R_LR (103), R_LR (104), R_LR (105), R_LR (106), \
00393 R_LR (107), R_LR (108), R_LR (109), R_LR (110), R_LR (111), \
00394 R_LR (112), R_LR (113), R_LR (114), R_LR (115), R_LR (116), \
00395 R_LR (117), R_LR (118), R_LR (119), R_LR (120), R_LR (121), \
00396 R_LR (122), R_LR (123), R_LR (124), R_LR (124), R_LR (126), \
00397 R_LR (127), \
00398 R_ACU (3), R_ACU (2), R_ACU (1), R_ACU (0), \
00399 R_GR (112), R_GR (113), R_GR (114), R_GR (115), R_GR (121), \
00400 R_GR (122), R_GR (123), R_GR (124), R_GR (125), R_GR (126), \
00401 R_GR (127), \
00402 R_FP, R_BP, R_FC, R_CR, R_Q, \
00403 R_VAB, R_OPS, R_CPS, R_CFG, R_CHA, R_CHD, R_CHC, R_RBP, R_TMC, \
00404 R_TMR, R_PC0, R_PC1, R_PC2, R_MMU, R_LRU, R_FPE, R_INT, R_FPS, \
00405 R_EXO, \
00406 R_KR (0), R_KR (1), R_KR (2), R_KR (3), R_KR (4), R_KR (5), \
00407 R_KR (6), R_KR (7), R_KR (8), R_KR (9), R_KR (10), R_KR (11), \
00408 R_KR (12), R_KR (13), R_KR (14), R_KR (15), R_KR (16), R_KR (17), \
00409 R_KR (18), R_KR (19), R_KR (20), R_KR (21), R_KR (22), R_KR (23), \
00410 R_KR (24), R_KR (25), R_KR (26), R_KR (27), R_KR (28), R_KR (29), \
00411 R_KR (30), R_KR (31) }
00412
00413
00414
00415
00416
00417
00418 #define HARD_REGNO_NREGS(REGNO, MODE) \
00419 ((REGNO) >= R_ACU (0) && (REGNO) <= R_ACU (3)? 1 \
00420 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
00436 (((REGNO) >= R_ACU (0) && (REGNO) <= R_ACU (3) \
00437 && (GET_MODE_CLASS (MODE) == MODE_FLOAT \
00438 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)) \
00439 || ((REGNO) >= R_BP && (REGNO) <= R_CR \
00440 && GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT) \
00441 || ((REGNO) >= R_Q && (REGNO) < R_ACU (0) \
00442 && GET_MODE_CLASS (MODE) != MODE_FLOAT \
00443 && GET_MODE_CLASS (MODE) != MODE_COMPLEX_FLOAT) \
00444 || (((REGNO) < R_BP || (REGNO) >= R_KR (0)) \
00445 && ((((REGNO) & 1) == 0) \
00446 || GET_MODE_UNIT_SIZE (MODE) <= UNITS_PER_WORD)))
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459 #define MODES_TIEABLE_P(MODE1, MODE2) \
00460 ((MODE1) == (MODE2) \
00461 || (GET_MODE_CLASS (MODE1) == MODE_INT \
00462 && GET_MODE_CLASS (MODE2) == MODE_INT))
00463
00464
00465
00466
00467
00468
00469
00470
00471 #define STACK_POINTER_REGNUM R_GR (125)
00472
00473
00474 #define FRAME_POINTER_REGNUM R_FP
00475
00476
00477
00478
00479
00480 #define FRAME_POINTER_REQUIRED 0
00481
00482
00483 #define ARG_POINTER_REGNUM R_FP
00484
00485
00486 #define STATIC_CHAIN_REGNUM R_SLP
00487
00488
00489
00490 #define STRUCT_VALUE_REGNUM R_LRP
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 enum reg_class { NO_REGS, LR0_REGS, GENERAL_REGS, BP_REGS, FC_REGS, CR_REGS,
00523 Q_REGS, SPECIAL_REGS, ACCUM0_REGS, ACCUM_REGS, FLOAT_REGS,
00524 ALL_REGS, LIM_REG_CLASSES };
00525
00526 #define N_REG_CLASSES (int) LIM_REG_CLASSES
00527
00528
00529
00530 #define REG_CLASS_NAMES \
00531 {"NO_REGS", "LR0_REGS", "GENERAL_REGS", "BP_REGS", "FC_REGS", "CR_REGS", \
00532 "Q_REGS", "SPECIAL_REGS", "ACCUM0_REGS", "ACCUM_REGS", "FLOAT_REGS", \
00533 "ALL_REGS" }
00534
00535
00536
00537
00538
00539 #define REG_CLASS_CONTENTS \
00540 { {0, 0, 0, 0, 0, 0, 0, 0}, \
00541 {0, 1, 0, 0, 0, 0, 0, 0}, \
00542 {~0, ~0, ~0, ~0, ~0, ~ 0xfffe0000, ~ 0xfff, 0xfff}, \
00543 {0, 0, 0, 0, 0, 0x20000, 0, 0}, \
00544 {0, 0, 0, 0, 0, 0x40000, 0, 0}, \
00545 {0, 0, 0, 0, 0, 0x80000, 0, 0}, \
00546 {0, 0, 0, 0, 0, 0x100000, 0, 0}, \
00547 {0, 0, 0, 0, 0, 0xfffe0000, 0xff, 0}, \
00548 {0, 0, 0, 0, 0, 0, 0x100, 0}, \
00549 {0, 0, 0, 0, 0, 0, 0xf00, 0}, \
00550 {~0, ~0, ~0, ~0, ~0, ~ 0xfffe0000, ~ 0xff, 0xfff}, \
00551 {~0, ~0, ~0, ~0, ~0, ~0, ~0, 0xfff} }
00552
00553
00554
00555
00556
00557
00558 #define REGNO_REG_CLASS(REGNO) \
00559 ((REGNO) == R_BP ? BP_REGS \
00560 : (REGNO) == R_FC ? FC_REGS \
00561 : (REGNO) == R_CR ? CR_REGS \
00562 : (REGNO) == R_Q ? Q_REGS \
00563 : (REGNO) > R_BP && (REGNO) <= R_EXO ? SPECIAL_REGS \
00564 : (REGNO) == R_ACU (0) ? ACCUM0_REGS \
00565 : (REGNO) >= R_KR (0) ? GENERAL_REGS \
00566 : (REGNO) > R_ACU (0) ? ACCUM_REGS \
00567 : (REGNO) == R_LR (0) ? LR0_REGS \
00568 : GENERAL_REGS)
00569
00570
00571 #define INDEX_REG_CLASS NO_REGS
00572 #define BASE_REG_CLASS GENERAL_REGS
00573
00574
00575
00576 #define REG_CLASS_FROM_LETTER(C) \
00577 ((C) == 'r' ? GENERAL_REGS \
00578 : (C) == 'l' ? LR0_REGS \
00579 : (C) == 'b' ? BP_REGS \
00580 : (C) == 'f' ? FC_REGS \
00581 : (C) == 'c' ? CR_REGS \
00582 : (C) == 'q' ? Q_REGS \
00583 : (C) == 'h' ? SPECIAL_REGS \
00584 : (C) == 'a' ? ACCUM_REGS \
00585 : (C) == 'A' ? ACCUM0_REGS \
00586 : (C) == 'f' ? FLOAT_REGS \
00587 : NO_REGS)
00588
00589
00590
00591
00592
00593 #define CONDITIONAL_REGISTER_USAGE \
00594 { \
00595 const char *p; \
00596 int i; \
00597 \
00598 if (TARGET_KERNEL_REGISTERS) \
00599 for (i = 0; i < 32; i++) \
00600 { \
00601 p = reg_names[i]; \
00602 reg_names[i] = reg_names[R_KR (i)]; \
00603 reg_names[R_KR (i)] = p; \
00604 } \
00605 }
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624 #define CONST_OK_FOR_LETTER_P(VALUE, C) \
00625 ((C) == 'I' ? (unsigned) (VALUE) < 0x100 \
00626 : (C) == 'J' ? (unsigned) (VALUE) < 0x10000 \
00627 : (C) == 'K' ? ((VALUE) & 0xffffff00) == 0xffffff00 \
00628 : (C) == 'L' ? ((VALUE) & 0xff00) == 0xff00 \
00629 : (C) == 'M' ? ((VALUE) & 0xffff0000) == 0xffff0000 \
00630 : (C) == 'N' ? ((VALUE) < 0 && (VALUE) > -256) \
00631 : (C) == 'O' ? ((VALUE) == 0x80000000 \
00632 || (TARGET_29050 && ((VALUE) & 0xffff) == 0)) \
00633 : (C) == 'P' ? (((VALUE) | 0xffff0000) < 0 \
00634 && ((VALUE) | 0xffff0000) > -256) \
00635 : 0)
00636
00637
00638
00639
00640
00641 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 1
00642
00643
00644
00645
00646
00647
00648 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
00649
00650
00651
00652
00653
00654 #define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \
00655 secondary_reload_class (CLASS, MODE, IN)
00656
00657
00658
00659
00660
00661
00662
00663 #define CLASS_MAX_NREGS(CLASS, MODE) \
00664 (((CLASS) == ACCUM_REGS || (CLASS) == ACCUM0_REGS) ? 1 \
00665 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
00666
00667
00668
00669
00670
00671 #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
00672 ((CLASS1) == GENERAL_REGS || (CLASS2) == GENERAL_REGS ? 2 : 4)
00673
00674
00675
00676
00677
00678
00679
00680
00681 #define MEMORY_MOVE_COST(MODE,CLASS,IN) 6
00682
00683
00684
00685
00686
00687 #define STACK_GROWS_DOWNWARD
00688
00689
00690
00691
00692
00693 #define FRAME_GROWS_DOWNWARD
00694
00695
00696
00697
00698
00699
00700 #define STARTING_FRAME_OFFSET (- current_function_pretend_args_size)
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710 #define ACCUMULATE_OUTGOING_ARGS 1
00711
00712
00713
00714 #define FIRST_PARM_OFFSET(FNDECL) (- current_function_pretend_args_size)
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
00728
00729
00730
00731
00732
00733
00734
00735
00736 #define FUNCTION_VALUE(VALTYPE, FUNC) \
00737 gen_rtx_REG (TYPE_MODE (VALTYPE), R_GR (96))
00738
00739
00740
00741
00742 #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, R_GR (96))
00743
00744
00745
00746
00747
00748 #define FUNCTION_VALUE_REGNO_P(N) ((N) == R_GR (96))
00749
00750
00751
00752
00753 #define FUNCTION_ARG_REGNO_P(N) ((N) <= R_LR (17) && (N) >= R_LR (2))
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765 #define CUMULATIVE_ARGS int
00766
00767
00768
00769
00770
00771 #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) (CUM) = 0
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781 #define INIT_CUMULATIVE_INCOMING_ARGS(CUM,FNTYPE,IGNORE) \
00782 { int i; \
00783 for (i = R_AR (0) - 2; i < R_AR (16); i++) \
00784 { \
00785 fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1; \
00786 SET_HARD_REG_BIT (fixed_reg_set, i); \
00787 SET_HARD_REG_BIT (call_used_reg_set, i); \
00788 SET_HARD_REG_BIT (call_fixed_reg_set, i); \
00789 } \
00790 for (i = R_LR (110); i < R_LR (126); i++) \
00791 { \
00792 fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 0; \
00793 CLEAR_HARD_REG_BIT (fixed_reg_set, i); \
00794 CLEAR_HARD_REG_BIT (call_used_reg_set, i); \
00795 CLEAR_HARD_REG_BIT (call_fixed_reg_set, i); \
00796 } \
00797 (CUM) = 0; \
00798 }
00799
00800
00801
00802
00803 #define A29K_ARG_SIZE(MODE, TYPE, NAMED) \
00804 (! (NAMED) ? 0 \
00805 : (MODE) != BLKmode \
00806 ? (GET_MODE_SIZE (MODE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD \
00807 : (int_size_in_bytes (TYPE) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
00808
00809
00810
00811
00812
00813 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
00814 if (MUST_PASS_IN_STACK (MODE, TYPE)) \
00815 (CUM) = 16; \
00816 else \
00817 (CUM) += A29K_ARG_SIZE (MODE, TYPE, NAMED)
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
00836 ((CUM) < 16 && (NAMED) && ! MUST_PASS_IN_STACK (MODE, TYPE) \
00837 ? gen_rtx_REG ((MODE), R_LR (2) + (CUM)) : 0)
00838
00839
00840
00841
00842
00843
00844
00845 #define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
00846 ((CUM) < 16 && (NAMED) && ! MUST_PASS_IN_STACK (MODE, TYPE) \
00847 ? gen_rtx_REG (MODE, \
00848 incoming_reg (CUM, A29K_ARG_SIZE (MODE, TYPE, NAMED))) \
00849 : 0)
00850
00851
00852
00853
00854
00855
00856 #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
00857 (MUST_PASS_IN_STACK (MODE, TYPE))
00858
00859
00860
00861
00862
00863
00864 #define FUNCTION_ARG_PADDING(MODE, TYPE) upward
00865
00866
00867
00868
00869
00870 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
00871 ((CUM) < 16 && 16 < (CUM) + A29K_ARG_SIZE (MODE, TYPE, NAMED) && (NAMED) \
00872 ? 16 - (CUM) : 0)
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888 #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
00889 { if ((CUM) < 16) \
00890 { \
00891 int first_reg_offset = (CUM); \
00892 \
00893 if (MUST_PASS_IN_STACK (MODE, TYPE)) \
00894 first_reg_offset += A29K_ARG_SIZE (TYPE_MODE (TYPE), TYPE, 1); \
00895 \
00896 if (first_reg_offset > 16) \
00897 first_reg_offset = 16; \
00898 \
00899 if (! (NO_RTL) && first_reg_offset != 16) \
00900 move_block_from_reg \
00901 (R_AR (0) + first_reg_offset, \
00902 gen_rtx_MEM (BLKmode, virtual_incoming_args_rtx), \
00903 16 - first_reg_offset, (16 - first_reg_offset) * UNITS_PER_WORD); \
00904 PRETEND_SIZE = (16 - first_reg_offset) * UNITS_PER_WORD; \
00905 } \
00906 }
00907
00908
00909
00910
00911
00912 extern struct rtx_def *a29k_compare_op0, *a29k_compare_op1;
00913 extern int a29k_compare_fp_p;
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923 extern const char *a29k_function_name;
00924
00925 #define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
00926 a29k_function_name = NAME; \
00927 a29k_compute_reg_names ();
00928
00929
00930
00931
00932 #define FUNCTION_PROFILER(FILE, LABELNO)
00933
00934
00935
00936
00937
00938
00939 #define EXIT_IGNORE_STACK 1
00940
00941
00942
00943
00944
00945
00946 #define DELAY_SLOTS_FOR_EPILOGUE \
00947 (! (needs_regstack_p () \
00948 && (get_frame_size () + current_function_pretend_args_size \
00949 + current_function_outgoing_args_size) != 0 \
00950 && ! frame_pointer_needed))
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960 #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N) \
00961 (get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \
00962 && ! (frame_pointer_needed \
00963 && reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN))) \
00964 && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))) \
00965 && (GET_CODE (PATTERN (INSN)) != SET \
00966 || GET_CODE (SET_SRC (PATTERN (INSN))) != MEM \
00967 || ! rtx_varies_p (XEXP (SET_SRC (PATTERN (INSN)), 0), 0)))
00968
00969
00970
00971
00972
00973
00974
00975
00976 #define TRAMPOLINE_TEMPLATE(FILE) \
00977 { \
00978 fprintf (FILE, "\tconst %s,0\n", reg_names[R_TAV]); \
00979 fprintf (FILE, "\tconsth %s,0\n", reg_names[R_TAV]); \
00980 fprintf (FILE, "\tconst %s,0\n", reg_names[R_SLP]); \
00981 fprintf (FILE, "\tjmpi %s\n", reg_names[R_TAV]); \
00982 fprintf (FILE, "\tconsth %s,0\n", reg_names[R_SLP]); \
00983 }
00984
00985
00986
00987 #define TRAMPOLINE_SIZE 20
00988
00989
00990
00991
00992
00993
00994
00995
00996 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
00997 { \
00998 INITIALIZE_TRAMPOLINE_VALUE (TRAMP, FNADDR, 0, 4); \
00999 INITIALIZE_TRAMPOLINE_VALUE (TRAMP, CXT, 8, 16); \
01000 }
01001
01002
01003
01004
01005
01006 #define INITIALIZE_TRAMPOLINE_VALUE(TRAMP, VALUE, CONST, CONSTH) \
01007 { \
01008 rtx _addr, _temp; \
01009 rtx _val = force_reg (SImode, VALUE); \
01010 \
01011 _addr = memory_address (QImode, plus_constant (TRAMP, (CONST) + 3)); \
01012 emit_move_insn (gen_rtx_MEM (QImode, _addr), \
01013 gen_lowpart (QImode, _val)); \
01014 \
01015 _temp = expand_shift (RSHIFT_EXPR, SImode, _val, \
01016 build_int_2 (8, 0), 0, 1); \
01017 _addr = memory_address (QImode, plus_constant (TRAMP, (CONST) + 1)); \
01018 emit_move_insn (gen_rtx_MEM (QImode, _addr), \
01019 gen_lowpart (QImode, _temp)); \
01020 \
01021 _temp = expand_shift (RSHIFT_EXPR, SImode, _temp, \
01022 build_int_2 (8, 0), _temp, 1); \
01023 _addr = memory_address (QImode, plus_constant (TRAMP, (CONSTH) + 3)); \
01024 emit_move_insn (gen_rtx_MEM (QImode, _addr), \
01025 gen_lowpart (QImode, _temp)); \
01026 \
01027 _temp = expand_shift (RSHIFT_EXPR, SImode, _temp, \
01028 build_int_2 (8, 0), _temp, 1); \
01029 _addr = memory_address (QImode, plus_constant (TRAMP, (CONSTH) + 1)); \
01030 emit_move_insn (gen_rtx_MEM (QImode, _addr), \
01031 gen_lowpart (QImode, _temp)); \
01032 }
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050 #define REGNO_OK_FOR_INDEX_P(REGNO) 0
01051 #define REGNO_OK_FOR_BASE_P(REGNO) 1
01052
01053
01054
01055
01056
01057 #define ACTUAL_FRAME_SIZE(SIZE) \
01058 (((SIZE) + current_function_pretend_args_size \
01059 + current_function_outgoing_args_size + 7) & ~7)
01060
01061
01062
01063 #define INITIAL_FRAME_POINTER_OFFSET(DEPTH) \
01064 (DEPTH) = ACTUAL_FRAME_SIZE (get_frame_size ())
01065
01066
01067 #define MAX_REGS_PER_ADDRESS 1
01068
01069
01070
01071 #define CONSTANT_ADDRESS_P(X) \
01072 (GET_CODE (X) == CONST_INT && (unsigned) INTVAL (X) < 0x100)
01073
01074
01075 #define LEGITIMATE_CONSTANT_P(X) 1
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089
01090 #ifndef REG_OK_STRICT
01091
01092
01093
01094 #define REG_OK_FOR_INDEX_P(X) 0
01095
01096
01097 #define REG_OK_FOR_BASE_P(X) 1
01098
01099 #else
01100
01101
01102 #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
01103
01104 #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
01105
01106 #endif
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
01117 { if (REG_P (X) && REG_OK_FOR_BASE_P (X)) \
01118 goto ADDR; \
01119 if (GET_CODE (X) == CONST_INT \
01120 && (unsigned) INTVAL (X) < 0x100) \
01121 goto ADDR; \
01122 }
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
01147 { if (GET_CODE (X) == PLUS && XEXP (X, 1) == const0_rtx) \
01148 X = XEXP (x, 0); \
01149 if (GET_CODE (X) == MULT || GET_CODE (X) == PLUS) \
01150 X = force_operand (X, 0); \
01151 else \
01152 X = force_reg (Pmode, X); \
01153 goto WIN; \
01154 }
01155
01156
01157
01158
01159
01160 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
01161
01162
01163
01164
01165 #define ADDRESS_COST(X) 0
01166
01167
01168
01169
01170
01171
01172
01173
01174 #define CASE_VECTOR_MODE SImode
01175
01176
01177
01178
01179
01180
01181
01182
01183 #define DEFAULT_SIGNED_CHAR 0
01184
01185
01186
01187
01188
01189
01190
01191 #define FIXUNS_TRUNC_LIKE_FIX_TRUNC
01192
01193
01194
01195
01196
01197 #define MOVE_MAX 16
01198
01199
01200
01201 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
01202
01203
01204
01205
01206
01207
01208
01209 #define SLOW_BYTE_ACCESS 0
01210
01211
01212
01213 #define WORD_REGISTER_OPERATIONS
01214
01215
01216
01217
01218
01219 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
01220
01221
01222 #define OBJECT_FORMAT_COFF
01223
01224
01225 #define SDB_DEBUGGING_INFO
01226
01227
01228
01229 #define SDB_DELIM "\n"
01230
01231
01232 #define DBX_CONTIN_LENGTH 0
01233
01234
01235
01236
01237 #define DBX_NO_XREFS
01238
01239
01240
01241 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
01242
01243
01244
01245
01246
01247 #define STORE_FLAG_VALUE (-2147483647 - 1)
01248
01249
01250
01251
01252 #define Pmode SImode
01253
01254
01255
01256
01257 #define FUNCTION_MODE SImode
01258
01259
01260
01261
01262
01263 #define NO_FUNCTION_CSE
01264
01265
01266
01267 #define SHIFT_COUNT_TRUNCATED 1
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279 #define CONST_COSTS(RTX,CODE,OUTER_CODE) \
01280 case CONST_INT: \
01281 return 0; \
01282 case CONST: \
01283 case LABEL_REF: \
01284 case SYMBOL_REF: \
01285 return 6; \
01286 case CONST_DOUBLE: \
01287 return GET_MODE (RTX) == SFmode ? 6 : 8;
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297 #define RTX_COSTS(X,CODE,OUTER_CODE) \
01298 case MULT: \
01299 return TARGET_29050 ? COSTS_N_INSNS (2) : COSTS_N_INSNS (40); \
01300 case DIV: \
01301 case UDIV: \
01302 case MOD: \
01303 case UMOD: \
01304 return COSTS_N_INSNS (50); \
01305 case MEM: \
01306 return COSTS_N_INSNS (2);
01307
01308
01309
01310
01311
01312 #define ASM_FILE_START(FILE) \
01313 { const char *p, *after_dir = main_input_filename; \
01314 if (TARGET_29050) \
01315 fprintf (FILE, "\t.cputype 29050\n"); \
01316 for (p = main_input_filename; *p; p++) \
01317 if (*p == '/') \
01318 after_dir = p + 1; \
01319 fprintf (FILE, "\t.file "); \
01320 output_quoted_string (FILE, after_dir); \
01321 fprintf (FILE, "\n"); \
01322 fprintf (FILE, "\t.sect .lit,lit\n"); }
01323
01324
01325
01326
01327 #define ASM_APP_ON ""
01328
01329
01330
01331
01332 #define ASM_APP_OFF ""
01333
01334
01335
01336
01337
01338
01339 #define TEXT_SECTION_ASM_OP "\t.text"
01340
01341
01342
01343 #define READONLY_DATA_SECTION_ASM_OP "\t.use .lit"
01344
01345
01346
01347 #define DATA_SECTION_ASM_OP "\t.data"
01348
01349
01350
01351
01352 #define EXTRA_SECTIONS readonly_data
01353
01354 #define EXTRA_SECTION_FUNCTIONS \
01355 void \
01356 literal_section () \
01357 { \
01358 if (in_section != readonly_data) \
01359 { \
01360 fprintf (asm_out_file, "%s\n", READONLY_DATA_SECTION_ASM_OP); \
01361 in_section = readonly_data; \
01362 } \
01363 } \
01364
01365 #define READONLY_DATA_SECTION literal_section
01366
01367
01368
01369
01370
01371
01372 #define ENCODE_SECTION_INFO(DECL) \
01373 if (TREE_CODE (DECL) == FUNCTION_DECL \
01374 && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL))) \
01375 SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;
01376
01377
01378
01379
01380 #define REGISTER_NAMES \
01381 {"gr96", "gr97", "gr98", "gr99", "gr100", "gr101", "gr102", "gr103", "gr104", \
01382 "gr105", "gr106", "gr107", "gr108", "gr109", "gr110", "gr111", "gr112", \
01383 "gr113", "gr114", "gr115", "gr116", "gr117", "gr118", "gr119", "gr120", \
01384 "gr121", "gr122", "gr123", "gr124", "gr125", "gr126", "gr127", \
01385 "lr0", "lr1", "lr2", "lr3", "lr4", "lr5", "lr6", "lr7", "lr8", "lr9", \
01386 "lr10", "lr11", "lr12", "lr13", "lr14", "lr15", "lr16", "lr17", "lr18", \
01387 "lr19", "lr20", "lr21", "lr22", "lr23", "lr24", "lr25", "lr26", "lr27", \
01388 "lr28", "lr29", "lr30", "lr31", "lr32", "lr33", "lr34", "lr35", "lr36", \
01389 "lr37", "lr38", "lr39", "lr40", "lr41", "lr42", "lr43", "lr44", "lr45", \
01390 "lr46", "lr47", "lr48", "lr49", "lr50", "lr51", "lr52", "lr53", "lr54", \
01391 "lr55", "lr56", "lr57", "lr58", "lr59", "lr60", "lr61", "lr62", "lr63", \
01392 "lr64", "lr65", "lr66", "lr67", "lr68", "lr69", "lr70", "lr71", "lr72", \
01393 "lr73", "lr74", "lr75", "lr76", "lr77", "lr78", "lr79", "lr80", "lr81", \
01394 "lr82", "lr83", "lr84", "lr85", "lr86", "lr87", "lr88", "lr89", "lr90", \
01395 "lr91", "lr92", "lr93", "lr94", "lr95", "lr96", "lr97", "lr98", "lr99", \
01396 "lr100", "lr101", "lr102", "lr103", "lr104", "lr105", "lr106", "lr107", \
01397 "lr108", "lr109", "lr110", "lr111", "lr112", "lr113", "lr114", "lr115", \
01398 "lr116", "lr117", "lr118", "lr119", "lr120", "lr121", "lr122", "lr123", \
01399 "lr124", "lr125", "lr126", "lr127", \
01400 "AI0", "AI1", "AI2", "AI3", "AI4", "AI5", "AI6", "AI7", "AI8", "AI9", \
01401 "AI10", "AI11", "AI12", "AI13", "AI14", "AI15", "FP", \
01402 "bp", "fc", "cr", "q", \
01403 "vab", "ops", "cps", "cfg", "cha", "chd", "chc", "rbp", "tmc", "tmr", \
01404 "pc0", "pc1", "pc2", "mmu", "lru", "fpe", "int", "fps", "exo", \
01405 "0", "1", "2", "3", \
01406 "gr64", "gr65", "gr66", "gr67", "gr68", "gr69", "gr70", "gr71", \
01407 "gr72", "gr73", "gr74", "gr75", "gr76", "gr77", "gr78", "gr79", \
01408 "gr80", "gr81", "gr82", "gr83", "gr84", "gr85", "gr86", "gr87", \
01409 "gr88", "gr89", "gr90", "gr91", "gr92", "gr93", "gr94", "gr95" }
01410
01411
01412
01413 extern int a29k_debug_reg_map[FIRST_PSEUDO_REGISTER];
01414 #define DBX_REGISTER_NUMBER(REGNO) a29k_debug_reg_map[REGNO]
01415
01416
01417 #define TARGET_ASM_NAMED_SECTION a29k_asm_named_section
01418
01419
01420
01421
01422 #define ASM_OUTPUT_LABEL(FILE,NAME) \
01423 do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
01424
01425
01426
01427
01428 #define ASM_GLOBALIZE_LABEL(FILE,NAME) \
01429 do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
01430
01431
01432
01433 #undef USER_LABEL_PREFIX
01434 #define USER_LABEL_PREFIX "_"
01435
01436
01437
01438
01439 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
01440 fprintf (FILE, "%s%d:\n", PREFIX, NUM)
01441
01442
01443
01444
01445
01446 #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
01447 { ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }
01448
01449
01450
01451
01452
01453
01454 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
01455 sprintf (LABEL, "*%s%d", PREFIX, NUM)
01456
01457
01458
01459
01460 #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
01461 fprintf (FILE, "\tsub %s,%s,4\n\tstore 0,0,%s,%s\n", \
01462 reg_names[R_MSP], reg_names[R_MSP], reg_names[REGNO], \
01463 reg_names[R_MSP]);
01464
01465
01466
01467
01468 #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
01469 fprintf (FILE, "\tload 0,0,%s,%s\n\tadd %s,%s,4\n", \
01470 reg_names[REGNO], reg_names[R_MSP], reg_names[R_MSP], \
01471 reg_names[R_MSP]);
01472
01473
01474
01475 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
01476 fprintf (FILE, "\t.word L%d\n", VALUE)
01477
01478
01479
01480
01481
01482
01483
01484
01485
01486
01487 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
01488 if ((LOG) != 0) \
01489 fprintf (FILE, "\t.align %d\n", 1 << (LOG))
01490
01491 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
01492 fprintf (FILE, "\t.block %d\n", (SIZE))
01493
01494
01495
01496
01497 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
01498 ( fputs ("\t.comm ", (FILE)), \
01499 assemble_name ((FILE), (NAME)), \
01500 fprintf ((FILE), ",%d\n", (SIZE)))
01501
01502
01503
01504
01505 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
01506 ( fputs ("\t.lcomm ", (FILE)), \
01507 assemble_name ((FILE), (NAME)), \
01508 fprintf ((FILE), ",%d\n", (SIZE)))
01509
01510
01511
01512
01513
01514 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
01515 ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
01516 sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
01517
01518
01519
01520
01521
01522 #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
01523
01524
01525
01526
01527
01528
01529
01530 #define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '#' || (CODE) == '*')
01531
01532
01533
01534 #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
01535 { register rtx addr = ADDR; \
01536 if (!REG_P (addr) \
01537 && ! (GET_CODE (addr) == CONST_INT \
01538 && INTVAL (addr) >= 0 && INTVAL (addr) < 256)) \
01539 abort (); \
01540 output_operand (addr, 0); \
01541 }
01542
01543
01544 #define PREDICATE_CODES \
01545 {"cint_8_operand", {CONST_INT}}, \
01546 {"cint_16_operand", {CONST_INT}}, \
01547 {"long_const_operand", {CONST_INT, CONST, CONST_DOUBLE, \
01548 LABEL_REF, SYMBOL_REF}}, \
01549 {"const_0_operand", {CONST_INT, ASHIFT}}, \
01550 {"const_8_operand", {CONST_INT, ASHIFT}}, \
01551 {"const_16_operand", {CONST_INT, ASHIFT}}, \
01552 {"const_24_operand", {CONST_INT, ASHIFT}}, \
01553 {"float_const_operand", {CONST_DOUBLE}}, \
01554 {"gpc_reg_operand", {SUBREG, REG}}, \
01555 {"gpc_reg_or_float_constant_operand", {SUBREG, REG, CONST_DOUBLE}}, \
01556 {"gpc_reg_or_integer_constant_operand", {SUBREG, REG, \
01557 CONST_INT, CONST_DOUBLE}}, \
01558 {"gpc_reg_or_immediate_operand", {SUBREG, REG, CONST_INT, \
01559 CONST_DOUBLE, CONST, \
01560 SYMBOL_REF, LABEL_REF}}, \
01561 {"spec_reg_operand", {REG}}, \
01562 {"accum_reg_operand", {REG}}, \
01563 {"srcb_operand", {SUBREG, REG, CONST_INT}}, \
01564 {"cmplsrcb_operand", {SUBREG, REG, CONST_INT}}, \
01565 {"reg_or_immediate_operand", {SUBREG, REG, CONST_INT, CONST, \
01566 CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF}}, \
01567 {"reg_or_u_short_operand", {SUBREG, REG, CONST_INT}}, \
01568 {"and_operand", {SUBREG, REG, CONST_INT}}, \
01569 {"add_operand", {SUBREG, REG, CONST_INT}}, \
01570 {"call_operand", {SYMBOL_REF, CONST_INT}}, \
01571 {"in_operand", {SUBREG, MEM, REG, CONST_INT, CONST, SYMBOL_REF, \
01572 LABEL_REF, CONST_DOUBLE}}, \
01573 {"out_operand", {SUBREG, REG, MEM}}, \
01574 {"reload_memory_operand", {SUBREG, REG, MEM}}, \
01575 {"fp_comparison_operator", {EQ, GT, GE}}, \
01576 {"branch_operator", {GE, LT}}, \
01577 {"load_multiple_operation", {PARALLEL}}, \
01578 {"store_multiple_operation", {PARALLEL}}, \
01579 {"epilogue_operand", {CODE_LABEL}},