00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #undef TARGET_ABI_UNICOSMK
00025 #define TARGET_ABI_UNICOSMK 1
00026
00027
00028
00029 #undef TARGET_AS_SLASH_BEFORE_SUFFIX
00030 #define TARGET_AS_SLASH_BEFORE_SUFFIX 1
00031
00032
00033
00034
00035 #undef CPP_PREDEFINES
00036 #define CPP_PREDEFINES "-D__unix=1 -D_UNICOS=205 -D_CRAY=1 -D_CRAYT3E=1 -D_CRAYMPP=1 -D_CRAYIEEE=1 -D_ADDR64=1 -D_LD64=1 -D__UNICOSMK__ -D__INT_MAX__=9223372036854775807 -D__SHRT_MAX__=2147483647"
00037
00038
00039
00040
00041 #ifndef __GNUC__
00042 #undef REAL_ARITHMETIC
00043 #endif
00044
00045 #define SHORT_TYPE_SIZE 32
00046
00047 #undef INT_TYPE_SIZE
00048 #define INT_TYPE_SIZE 64
00049
00050
00051 #undef WCHAR_TYPE
00052 #define WCHAR_TYPE "int"
00053 #undef WCHAR_TYPE_SIZE
00054 #define WCHAR_TYPE_SIZE 64
00055
00056
00057
00058
00059
00060
00061
00062
00063 #undef BITS_BIG_ENDIAN
00064 #undef BYTES_BIG_ENDIAN
00065 #undef WORDS_BIG_ENDIAN
00066 #define BITS_BIG_ENDIAN 0
00067 #define BYTES_BIG_ENDIAN 1
00068 #define WORDS_BIG_ENDIAN 1
00069
00070
00071
00072
00073 #undef STRUCTURE_SIZE_BOUNDARY
00074 #define STRUCTURE_SIZE_BOUNDARY 64
00075
00076
00077
00078 #undef BIGGEST_ALIGNMENT
00079 #define BIGGEST_ALIGNMENT 256
00080
00081
00082
00083
00084
00085
00086 #undef CONDITIONAL_REGISTER_USAGE
00087 #define CONDITIONAL_REGISTER_USAGE \
00088 do { \
00089 fixed_regs[15] = 1; \
00090 call_used_regs[15] = 1; \
00091 global_regs[15] = 1; \
00092 } while(0)
00093
00094
00095
00096 #define FRAME_GROWS_DOWNWARD
00097
00098
00099
00100
00101
00102 extern int unicosmk_initial_elimination_offset PARAMS ((int, int));
00103
00104 #undef INITIAL_ELIMINATION_OFFSET
00105 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
00106 do { \
00107 (OFFSET) = unicosmk_initial_elimination_offset ((FROM), (TO)); \
00108 } while (0)
00109
00110
00111
00112
00113
00114
00115
00116
00117 #define REG_PARM_STACK_SPACE(DECL) 48
00118 #define OUTGOING_REG_PARM_STACK_SPACE
00119
00120
00121
00122
00123
00124 #define STACK_PARMS_IN_REG_PARM_AREA
00125
00126
00127
00128
00129
00130 #define MUST_PASS_IN_STACK(MODE,TYPE) \
00131 ((TYPE) != 0 \
00132 && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
00133 || (TREE_ADDRESSABLE (TYPE) || ALPHA_ARG_SIZE (MODE, TYPE, 0) > 2)))
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 typedef struct {
00146
00147
00148 int num_args;
00149
00150
00151 int num_arg_words;
00152
00153
00154 int num_reg_words;
00155
00156
00157
00158
00159 int force_stack;
00160
00161
00162
00163
00164
00165
00166
00167 int reg_args_type[6];
00168
00169 } unicosmk_arg_info;
00170
00171 #undef CUMULATIVE_ARGS
00172 #define CUMULATIVE_ARGS unicosmk_arg_info
00173
00174
00175
00176
00177 #undef INIT_CUMULATIVE_ARGS
00178 #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
00179 do { (CUM).num_args = 0; \
00180 (CUM).num_arg_words = 0; \
00181 (CUM).num_reg_words = 0; \
00182 (CUM).force_stack = 0; \
00183 } while(0)
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 #undef FUNCTION_ARG_ADVANCE
00194 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
00195 do { \
00196 int size; \
00197 \
00198 size = ALPHA_ARG_SIZE (MODE, TYPE, NAMED); \
00199 \
00200 if (size > 2 || MUST_PASS_IN_STACK (MODE, TYPE) \
00201 || (CUM).num_reg_words + size > 6) \
00202 (CUM).force_stack = 1; \
00203 \
00204 if (! (CUM).force_stack) \
00205 { \
00206 int i; \
00207 int isfloat; \
00208 isfloat = (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
00209 || GET_MODE_CLASS (MODE) == MODE_FLOAT); \
00210 for (i = 0; i < size; i++) \
00211 { \
00212 (CUM).reg_args_type[(CUM).num_reg_words] = isfloat; \
00213 ++(CUM).num_reg_words; \
00214 } \
00215 } \
00216 (CUM).num_arg_words += size; \
00217 ++(CUM).num_args; \
00218 } while(0)
00219
00220
00221
00222
00223
00224 #undef FUNCTION_ARG_PADDING
00225
00226
00227
00228 #undef FUNCTION_ARG_PARTIAL_NREGS
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 #undef SETUP_INCOMING_VARARGS
00243 #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
00244 { if ((CUM).num_reg_words < 6) \
00245 { \
00246 if (! (NO_RTL)) \
00247 { \
00248 int start; \
00249 \
00250 start = (CUM).num_reg_words; \
00251 if (!current_function_varargs || start == 0) \
00252 ++start; \
00253 \
00254 emit_insn (gen_umk_mismatch_args (GEN_INT (start))); \
00255 if (current_function_varargs && (CUM).num_reg_words == 0) \
00256 { \
00257 rtx tmp; \
00258 rtx int_label, end_label; \
00259 \
00260 tmp = gen_reg_rtx (DImode); \
00261 emit_move_insn (tmp, \
00262 gen_rtx_ZERO_EXTRACT (DImode, \
00263 gen_rtx_REG (DImode, 2),\
00264 (GEN_INT (1)), \
00265 (GEN_INT (7)))); \
00266 int_label = gen_label_rtx (); \
00267 end_label = gen_label_rtx (); \
00268 emit_insn (gen_cmpdi (tmp, GEN_INT (0))); \
00269 emit_jump_insn (gen_beq (int_label)); \
00270 emit_move_insn (gen_rtx_MEM (DFmode, virtual_incoming_args_rtx),\
00271 gen_rtx_REG (DFmode, 48)); \
00272 emit_jump (end_label); \
00273 emit_label (int_label); \
00274 emit_move_insn (gen_rtx_MEM (DImode, virtual_incoming_args_rtx),\
00275 gen_rtx_REG (DImode, 16)); \
00276 emit_label (end_label); \
00277 } \
00278 emit_insn (gen_arg_home_umk ()); \
00279 } \
00280 \
00281 PRETEND_SIZE = 0; \
00282 } \
00283 }
00284
00285
00286
00287
00288 #undef EPILOGUE_USES
00289 #define EPILOGUE_USES(REGNO) ((REGNO) == 26 || (REGNO) == 15)
00290
00291
00292
00293 struct machine_function
00294 {
00295
00296 struct rtx_def *first_ciw;
00297 struct rtx_def *last_ciw;
00298 int ciw_count;
00299
00300
00301 struct rtx_def *addr_list;
00302 };
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 #undef TRAMPOLINE_TEMPLATE
00318 #define TRAMPOLINE_TEMPLATE(FILE) abort ()
00319
00320
00321
00322
00323
00324 #undef CASE_VECTOR_MODE
00325 #define CASE_VECTOR_MODE DImode
00326
00327 #undef CASE_VECTOR_PC_RELATIVE
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 #undef TEXT_SECTION_ASM_OP
00340 #define TEXT_SECTION_ASM_OP unicosmk_text_section ()
00341
00342 #undef DATA_SECTION_ASM_OP
00343 #define DATA_SECTION_ASM_OP unicosmk_data_section ()
00344
00345
00346
00347 #undef READONLY_DATA_SECTION
00348 #define READONLY_DATA_SECTION data_section
00349
00350
00351
00352
00353
00354 #undef EXTRA_SECTIONS
00355 #undef EXTRA_SECTION_FUNCTIONS
00356
00357 #define EXTRA_SECTIONS in_common, in_ssib
00358 #define EXTRA_SECTION_FUNCTIONS \
00359 COMMON_SECTION \
00360 SSIB_SECTION
00361
00362 extern void common_section PARAMS ((void));
00363 #define COMMON_SECTION \
00364 void \
00365 common_section () \
00366 { \
00367 in_section = in_common; \
00368 }
00369
00370 extern void ssib_section PARAMS ((void));
00371 #define SSIB_SECTION \
00372 void \
00373 ssib_section () \
00374 { \
00375 in_section = in_ssib; \
00376 }
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386 #define UNIQUE_SECTION(DECL, RELOC) unicosmk_unique_section (DECL, RELOC)
00387
00388
00389
00390 #undef ASM_FILE_START
00391 #define ASM_FILE_START(FILE) unicosmk_asm_file_start (FILE)
00392
00393
00394
00395 #undef ASM_FILE_END
00396 #define ASM_FILE_END(FILE) unicosmk_asm_file_end (FILE)
00397
00398
00399
00400 #undef ASM_OUTPUT_SOURCE_FILENAME
00401
00402
00403
00404
00405 #undef ASM_GLOBALIZE_LABEL
00406 #define ASM_GLOBALIZE_LABEL(FILE,NAME)
00407
00408
00409
00410
00411
00412 #undef ASM_OUTPUT_CASE_LABEL
00413 #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
00414 ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
00415
00416
00417
00418
00419
00420
00421
00422 #undef ASM_OUTPUT_ASCII
00423 #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
00424 do { \
00425 FILE *_hide_asm_out_file = (MYFILE); \
00426 const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \
00427 int _hide_thissize = (MYLENGTH); \
00428 int _size_so_far = 0; \
00429 { \
00430 FILE *asm_out_file = _hide_asm_out_file; \
00431 const unsigned char *p = _hide_p; \
00432 int thissize = _hide_thissize; \
00433 int in_ascii = 0; \
00434 int i; \
00435 \
00436 for (i = 0; i < thissize; i++) \
00437 { \
00438 register int c = p[i]; \
00439 \
00440 if (c > 127) \
00441 { \
00442 if (in_ascii) \
00443 { \
00444 fprintf (asm_out_file, "\"\n"); \
00445 in_ascii = 0; \
00446 } \
00447 \
00448 fprintf (asm_out_file, "\t.byte\t%d\n", c); \
00449 } \
00450 else \
00451 { \
00452 if (! in_ascii) \
00453 { \
00454 fprintf (asm_out_file, "\t.ascii\t\""); \
00455 in_ascii = 1; \
00456 _size_so_far = 0; \
00457 } \
00458 else if (_size_so_far >= 64) \
00459 { \
00460 fprintf (asm_out_file, "\"\n\t.ascii\t\""); \
00461 _size_so_far = 0; \
00462 } \
00463 \
00464 if (c == '\"' || c == '\\' || c == '`') \
00465 putc ('\\', asm_out_file); \
00466 if (c >= ' ') \
00467 putc (c, asm_out_file); \
00468 else \
00469 fprintf (asm_out_file, "\\%.3o", c); \
00470 ++ _size_so_far; \
00471 } \
00472 } \
00473 if (in_ascii) \
00474 fprintf (asm_out_file, "\"\n"); \
00475 } \
00476 } while(0)
00477
00478
00479
00480 #undef ASM_OUTPUT_ADDR_VEC_ELT
00481 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
00482 fprintf (FILE, "\t.quad $L%d\n", (VALUE))
00483
00484
00485
00486
00487 #undef ASM_OUTPUT_ADDR_DIFF_ELT
00488 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) abort ()
00489
00490
00491
00492
00493
00494
00495 #define ASM_OUTPUT_ADDR_VEC(LAB,VEC) \
00496 unicosmk_defer_case_vector ((LAB),(VEC))
00497
00498 #define ASM_OUTPUT_ADDR_DIFF_VEC(LAB,VEC) abort ()
00499
00500
00501
00502
00503
00504
00505 #undef ASM_OUTPUT_ALIGN
00506 #define ASM_OUTPUT_ALIGN(STREAM,LOG) unicosmk_output_align (STREAM, LOG)
00507
00508
00509
00510 #undef ASM_OUTPUT_SKIP
00511 #define ASM_OUTPUT_SKIP(STREAM,SIZE) \
00512 fprintf ((STREAM), "\t.byte\t0:%d\n", (SIZE));
00513
00514
00515
00516
00517
00518 #undef ASM_OUTPUT_COMMON
00519 #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
00520 unicosmk_output_common ((FILE), (NAME), (SIZE), (ALIGN))
00521
00522
00523
00524 #undef ASM_OUTPUT_LOCAL
00525 #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
00526 do { data_section (); \
00527 fprintf (FILE, "\t.align\t%d\n", floor_log2 ((ALIGN) / BITS_PER_UNIT));\
00528 ASM_OUTPUT_LABEL ((FILE), (NAME)); \
00529 fprintf (FILE, "\t.byte 0:%d\n", SIZE); \
00530 } while (0)
00531
00532
00533
00534
00535
00536
00537 #define ASM_OUTPUT_EXTERNAL(FILE,DECL,NAME) \
00538 unicosmk_add_extern ((NAME))
00539
00540 #define ASM_OUTPUT_EXTERNAL_LIBCALL(STREAM,SYMREF) \
00541 unicosmk_add_extern (XSTR ((SYMREF), 0))
00542
00543
00544
00545
00546
00547
00548
00549 #define ASM_DECLARE_OBJECT_NAME(STREAM,NAME,DECL) \
00550 do { tree name_tree; \
00551 name_tree = get_identifier ((NAME)); \
00552 TREE_ASM_WRITTEN (name_tree) = 1; \
00553 if (!TREE_PUBLIC (DECL)) \
00554 { \
00555 assemble_name (STREAM, NAME); \
00556 fputs (":\n", STREAM); \
00557 } \
00558 } while(0)
00559
00560
00561
00562
00563
00564
00565
00566 #define TARGET_ASM_NAMED_SECTION unicosmk_asm_named_section
00567
00568 #undef ASM_OUTPUT_MAX_SKIP_ALIGN
00569 #define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM,POWER,MAXSKIP)
00570
00571
00572
00573
00574 #ifndef REAL_ARITHMETIC
00575 #define REAL_VALUE_ATOF(x,s) atof(x)
00576 #define REAL_VALUE_HTOF(x,s) atof(x)
00577
00578 #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \
00579 do { \
00580 union { \
00581 float f; \
00582 HOST_WIDE_INT l; \
00583 } u; \
00584 \
00585 u.f = (IN); \
00586 (OUT) = (u.l >> 32) & 0xFFFFFFFF; \
00587 } while (0)
00588
00589 #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \
00590 do { \
00591 union { \
00592 REAL_VALUE_TYPE f; \
00593 HOST_WIDE_INT l; \
00594 } u; \
00595 \
00596 u.f = (IN); \
00597 (OUT)[0] = (u.l >> 32) & 0xFFFFFFFF; \
00598 (OUT)[1] = (u.l & 0xFFFFFFFF); \
00599 } while (0)
00600
00601 #endif
00602
00603 #undef NM_FLAGS
00604
00605 #undef OBJECT_FORMAT_COFF
00606
00607
00608
00609 #undef SDB_DEBUGGING_INFO
00610 #undef MIPS_DEBUGGING_INFO
00611 #undef DBX_DEBUGGING_INFO
00612 #undef DWARF_DEBUGGING_INFO
00613 #undef DWARF2_DEBUGGING_INFO
00614 #undef DWARF2_UNWIND_INFO
00615 #undef INCOMING_RETURN_ADDR_RTX
00616
00617
00618
00619
00620
00621 #undef UDIVDI3_LIBCALL
00622 #undef DIVDI3_LIBCALL
00623 #define UDIVDI3_LIBCALL "$uldiv"
00624 #define DIVDI3_LIBCALL "$sldiv"
00625
00626
00627
00628 #define INIT_TARGET_OPTABS \
00629 do { \
00630 sdiv_optab->handlers[(int) SImode].libfunc = NULL_RTX; \
00631 udiv_optab->handlers[(int) SImode].libfunc = NULL_RTX; \
00632 } while (0)
00633
00634 #undef ASM_OUTPUT_SOURCE_LINE
00635
00636
00637
00638 #undef STARTFILE_SPEC
00639 #define STARTFILE_SPEC ""
00640
00641
00642
00643 #undef LIB_SPEC
00644 #define LIB_SPEC "-L/opt/ctl/craylibs/craylibs -lu -lm -lc -lsma"
00645
00646 #undef BUILD_VA_LIST_TYPE
00647 #undef EXPAND_BUILTIN_VA_START
00648 #undef EXPAND_BUILTIN_VA_ARG
00649
00650 #define EH_FRAME_IN_DATA_SECTION 1