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 #ifndef USE_GAS
00029 #define MOTOROLA
00030 #define MOTOROLA_BSR
00031 #define SGS
00032 #define SGS_CMP_ORDER
00033 #define SGS_SWAP_W
00034 #endif
00035
00036 #define NO_DOLLAR_IN_LABEL
00037 #define NO_DOT_IN_LABEL
00038
00039 #include "m68k/m68k.h"
00040
00041
00042 #define STABS_GCC_MARKER "gcc2_compiled%"
00043
00044
00045
00046 #ifndef TARGET_DEFAULT
00047 #define TARGET_DEFAULT (MASK_68040|MASK_BITFIELD|MASK_68881|MASK_68020)
00048 #endif
00049
00050
00051
00052 #undef ASM_SPEC
00053 #ifndef USE_GAS
00054 #define ASM_SPEC "%{m68000:-p 000}%{mc68000:-p 000}"
00055 #else
00056 #define ASM_SPEC \
00057 "%{v:-v} %{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
00058 #endif
00059
00060
00061
00062
00063
00064
00065
00066
00067 #undef LIB_SPEC
00068 #define LIB_SPEC "%{!shlib:%{!msoft-float:-lc881}%{msoft-float:-lc}}"
00069 #ifdef CROSS_COMPILE
00070 #ifndef USE_GLD
00071 #define DEFAULT_A_OUT_NAME "m68ka.out"
00072 #endif
00073 #endif
00074
00075 #ifdef USE_GLD
00076 #undef LINK_SPEC
00077 #define LINK_SPEC "%{v:-v}"
00078 #endif
00079
00080 #define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__}\
00081 %{!mc68000:%{!m68000: -D__mc68020__}}"
00082
00083
00084
00085 #undef STARTFILE_SPEC
00086 #ifdef CROSS_COMPILE
00087 #define STARTFILE_SPEC \
00088 "%{!shlib:%{pg:mcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\
00089 %{shlib:crt0s.o%s shlib.ifile%s} %{p:-L"TOOLDIR_BASE_PREFIX DEFAULT_TARGET_MACHINE"/lib/libp} %{pg:-L"TOOLDIR_BASE_PREFIX DEFAULT_TARGET_MACHINE"/lib/libp} "
00090 #else
00091 #define STARTFILE_SPEC \
00092 "%{!shlib:%{pg:mcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\
00093 %{shlib:crt0s.o%s shlib.ifile%s} %{p:-L/usr/lib/libp} %{pg:-L/usr/lib/libp} "
00094 #endif
00095
00096
00097
00098 #define TARGET_MEM_FUNCTIONS
00099
00100
00101
00102 #define SIZE_TYPE "unsigned int"
00103
00104
00105 #define ADD_MISSING_POSIX 1
00106 #define ADD_MISSING_XOPEN 1
00107
00108
00109
00110 #define STRUCTURE_SIZE_BOUNDARY 16
00111
00112
00113
00114 #define PCC_BITFIELD_TYPE_MATTERS 1
00115
00116
00117
00118 #undef PARM_BOUNDARY
00119 #define PARM_BOUNDARY 16
00120
00121
00122
00123 #define SCCS_DIRECTIVE
00124
00125
00126
00127 #define SDB_DEBUGGING_INFO
00128
00129 #undef REGISTER_PREFIX
00130 #define REGISTER_PREFIX "%"
00131
00132 #undef LOCAL_LABEL_PREFIX
00133 #ifdef USE_GAS
00134 #define LOCAL_LABEL_PREFIX ".L"
00135 #else
00136 #define LOCAL_LABEL_PREFIX "L%"
00137 #endif
00138
00139 #undef USER_LABEL_PREFIX
00140
00141 #undef IMMEDIATE_PREFIX
00142 #define IMMEDIATE_PREFIX "&"
00143
00144 #undef REGISTER_NAMES
00145 #define REGISTER_NAMES \
00146 {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \
00147 "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \
00148 "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7"}
00149
00150 #undef FUNCTION_EXTRA_EPILOGUE
00151 #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \
00152 { if (current_function_returns_pointer \
00153 && ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode)) \
00154 asm_fprintf (FILE, "\tmov.l %Ra0,%Rd0\n"); }
00155
00156 #undef FUNCTION_PROFILER
00157 #define FUNCTION_PROFILER(FILE, LABEL_NO) \
00158 asm_fprintf (FILE, "\tmov.l %I%LLP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
00159
00160
00161
00162
00163 #undef ASM_OUTPUT_REG_PUSH
00164 #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
00165 fprintf (FILE, "\tmov.l %s,-(%%sp)\n", reg_names[REGNO])
00166
00167
00168
00169
00170 #undef ASM_OUTPUT_REG_POP
00171 #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
00172 fprintf (FILE, "\tmov.l (%%sp)+,%s\n", reg_names[REGNO])
00173
00174 #ifndef USE_GAS
00175
00176 #undef ASM_APP_ON
00177 #define ASM_APP_ON ""
00178
00179 #undef ASM_APP_OFF
00180 #define ASM_APP_OFF ""
00181
00182 #undef TEXT_SECTION_ASM_OP
00183 #define TEXT_SECTION_ASM_OP "\ttext"
00184 #undef DATA_SECTION_ASM_OP
00185 #define DATA_SECTION_ASM_OP "\tdata"
00186 #undef ASCII_DATA_ASM_OP
00187 #define ASCII_DATA_ASM_OP "\tbyte\t"
00188
00189 #undef SET_ASM_OP
00190 #define SET_ASM_OP "\tset\t"
00191
00192 #endif
00193
00194 #ifdef USE_GLD
00195
00196
00197 #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\""
00198 #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\""
00199 #endif
00200
00201
00202
00203 #undef ASM_FILE_START
00204 #ifndef USE_GAS
00205 #define ASM_FILE_START(FILE) \
00206 output_file_directive ((FILE), main_input_filename)
00207 #else
00208 #define ASM_FILE_START(FILE) \
00209 { \
00210 fprintf (FILE, "%s", ASM_APP_OFF); \
00211 output_file_directive ((FILE), main_input_filename); \
00212 }
00213 #endif
00214
00215
00216
00217
00218
00219 #undef CPP_PREDEFINES
00220 #define CPP_PREDEFINES "-Dm68k -Dunix -DsysV68 -D__motorola__ -Asystem=unix -Asystem=svr3 -Acpu=m68k -Amachine=m68k"
00221
00222 #undef TARGET_VERSION
00223 #ifndef USE_GAS
00224 #define TARGET_VERSION fprintf (stderr, " (68k, SGS/AT&T sysV68 syntax)");
00225 #endif
00226
00227
00228 #define RETURN_IN_MEMORY(type) \
00229 ((TYPE_MODE (type) == BLKmode) \
00230 || (AGGREGATE_TYPE_P (type) \
00231 && GET_MODE_SIZE (TYPE_MODE (type)) > UNITS_PER_WORD))
00232
00233
00234
00235 #define DEFAULT_PCC_STRUCT_RETURN 0
00236
00237
00238
00239
00240
00241 #undef FUNCTION_VALUE
00242
00243 #define FUNCTION_VALUE(VALTYPE,FUNC) \
00244 (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \
00245 ? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \
00246 : (POINTER_TYPE_P (VALTYPE) \
00247 ? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \
00248 : gen_rtx_REG (TYPE_MODE (VALTYPE), 0)))
00249
00250
00251
00252
00253 #undef LIBCALL_VALUE
00254 #define LIBCALL_VALUE(MODE) \
00255 gen_rtx_REG ((MODE), \
00256 ((TARGET_68881 \
00257 && ((MODE) == SFmode || (MODE) == DFmode \
00258 || (MODE) == XFmode)) \
00259 ? 16 : 0))
00260
00261
00262
00263
00264 #undef FUNCTION_VALUE_REGNO_P
00265
00266 #define FUNCTION_VALUE_REGNO_P(N) \
00267 ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16))
00268
00269
00270
00271
00272 #undef NEEDS_UNTYPED_CALL
00273 #define NEEDS_UNTYPED_CALL 1
00274
00275 #ifndef USE_GAS
00276
00277
00278
00279 #undef GLOBAL_ASM_OP
00280 #define GLOBAL_ASM_OP "\tglobal\t"
00281 #endif
00282
00283
00284
00285
00286
00287 #undef ASM_FORMAT_PRIVATE_NAME
00288 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
00289 ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \
00290 sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO)))
00291
00292 #undef INT_OP_GROUP
00293 #ifdef USE_GAS
00294 #define INT_OP_GROUP INT_OP_STANDARD
00295 #else
00296 #define INT_OP_GROUP INT_OP_NO_DOT
00297 #endif
00298
00299
00300
00301
00302
00303 #ifndef USE_GAS
00304 #define ALIGN_ASM_OP "\teven"
00305 #else
00306 #define ALIGN_ASM_OP "\t.even"
00307 #endif
00308
00309 #undef ASM_OUTPUT_ALIGN
00310 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
00311 if ((LOG) >= 1) \
00312 fprintf (FILE, "%s\n", ALIGN_ASM_OP);
00313
00314 #ifndef USE_GAS
00315 #define SKIP_ASM_OP "\tspace\t"
00316 #else
00317 #define SKIP_ASM_OP "\t.skip\t"
00318 #endif
00319
00320 #undef ASM_OUTPUT_SKIP
00321 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
00322 fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (SIZE))
00323
00324
00325
00326 #define ASM_NO_SKIP_IN_TEXT 1
00327
00328
00329
00330
00331
00332 #undef ASM_OUTPUT_MAIN_SOURCE_FILENAME
00333 #ifndef USE_GAS
00334 #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \
00335 do { fprintf (FILE, "\tfile\t"); \
00336 output_quoted_string (FILE, FILENAME); \
00337 fprintf (FILE, "\n"); \
00338 } while (0)
00339
00340 #undef ASM_OUTPUT_SOURCE_LINE
00341 #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \
00342 fprintf (FILE, "\tln\t%d\n", \
00343 (sdb_begin_function_line \
00344 ? (LINENO) - sdb_begin_function_line : 1))
00345
00346
00347
00348 #undef ASM_OUTPUT_ASCII
00349 #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \
00350 do { register size_t sp = 0, lp = 0, limit = (LEN); \
00351 fputs (integer_asm_op (1, TRUE), (FILE)); \
00352 loop: \
00353 if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \
00354 { lp += 3; \
00355 fprintf ((FILE), "'%c", (PTR)[sp]); } \
00356 else \
00357 { lp += 5; \
00358 fprintf ((FILE), "0x%x", (PTR)[sp]); } \
00359 if (++sp < limit) \
00360 { if (lp > 60) \
00361 { lp = 0; \
00362 fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \
00363 else \
00364 putc (',', (FILE)); \
00365 goto loop; } \
00366 putc ('\n', (FILE)); } while (0)
00367 #endif
00368
00369 #ifndef USE_GAS
00370
00371
00372
00373 #undef ASM_OUTPUT_FLOAT_OPERAND
00374 #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \
00375 do { long l; \
00376 REAL_VALUE_TO_TARGET_SINGLE (r, l); \
00377 \
00378 fprintf ((FILE), "&0x%lx", l); \
00379 } while (0)
00380
00381
00382
00383 #undef ASM_OUTPUT_DOUBLE_OPERAND
00384 #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
00385 do { long l[2]; \
00386 REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \
00387 fprintf ((FILE), "&0x%lx%08lx", l[0], l[1]); \
00388 } while (0)
00389 #endif
00390
00391
00392
00393
00394
00395
00396 #undef ASM_GENERATE_INTERNAL_LABEL
00397 #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
00398 sprintf ((LABEL), "%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUM))
00399
00400
00401
00402
00403 #undef ASM_OUTPUT_INTERNAL_LABEL
00404 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
00405 asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM)
00406
00407
00408
00409 #undef USER_LABEL_PREFIX
00410 #define USER_LABEL_PREFIX ""
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420 #undef ASM_OUTPUT_ADDR_VEC_ELT
00421 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
00422 asm_fprintf (FILE, "%s%LL%d\n", integer_asm_op (4, TRUE), (VALUE))
00423
00424
00425
00426 #undef ASM_OUTPUT_ADDR_DIFF_ELT
00427 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
00428 asm_fprintf (FILE, "\t%s %LL%d-%LL%d\n", \
00429 integer_asm_op (2, TRUE), (VALUE), (REL))
00430
00431 #ifndef USE_GAS
00432
00433 #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
00434 asm_fprintf (FILE, "\tswbeg &%d\n%L%s%d:\n", \
00435 XVECLEN (PATTERN (TABLE), 1), (PREFIX), (NUM))
00436
00437
00438 #define SGS_NO_LI
00439
00440
00441 #define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
00442 asm_fprintf (file, "12(%Rpc,%s.", regname)
00443
00444 #define ASM_RETURN_CASE_JUMP \
00445 do { \
00446 if (TARGET_5200) \
00447 { \
00448 if (ADDRESS_REG_P (operands[0])) \
00449 return "jmp 8(%%pc,%0.l)"; \
00450 else \
00451 return "ext%.l %0\n\tjmp 8(%%pc,%0.l)"; \
00452 } \
00453 else \
00454 return "jmp 8(%%pc,%0.w)"; \
00455 } while (0)
00456
00457 #else
00458
00459
00460 #define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
00461 asm_fprintf (file, "%Rpc@(6,%s:", regname)
00462
00463 #define ASM_RETURN_CASE_JUMP return "jmp %%pc@(2,%0:w)"
00464
00465 #endif
00466
00467 #ifndef USE_GAS
00468
00469
00470
00471
00472
00473 #undef ASM_OUTPUT_OPCODE
00474 #define ASM_OUTPUT_OPCODE(FILE, PTR) \
00475 { if ((PTR)[0] == 'j' && (PTR)[1] == 'b') \
00476 { ++(PTR); \
00477 while (*(PTR) != ' ') \
00478 { putc (*(PTR), (FILE)); ++(PTR); } \
00479 } \
00480 else if ((PTR)[0] == 's') \
00481 { \
00482 if (!strncmp ((PTR), "swap", 4)) \
00483 { fprintf ((FILE), "swap.w"); (PTR) += 4; } \
00484 } \
00485 else if ((PTR)[0] == 'f') \
00486 { \
00487 if (!strncmp ((PTR), "fmove", 5)) \
00488 { fprintf ((FILE), "fmov"); (PTR) += 5; } \
00489 else if (!strncmp ((PTR), "f%$move", 7)) \
00490 { if (TARGET_68040_ONLY) \
00491 { fprintf ((FILE), "fsmov"); (PTR) += 7; } \
00492 else \
00493 { fprintf ((FILE), "fmov"); (PTR) += 7; } } \
00494 else if (!strncmp ((PTR), "f%&move", 7)) \
00495 { if (TARGET_68040_ONLY) \
00496 { fprintf ((FILE), "fdmov"); (PTR) += 7; } \
00497 else \
00498 { fprintf ((FILE), "fmov"); (PTR) += 7; } } \
00499 else if (!strncmp ((PTR), "ftst", 4)) \
00500 { fprintf ((FILE), "ftest"); (PTR) += 4; } \
00501 else if (!strncmp ((PTR), "fbne", 4)) \
00502 { fprintf ((FILE), "fbneq"); (PTR) += 4; } \
00503 else if (!strncmp ((PTR), "fsne", 4)) \
00504 { fprintf ((FILE), "fsneq"); (PTR) += 4; } \
00505 } \
00506 \
00507 else if ((PTR)[0] == 'm' && (PTR)[1] == 'o' \
00508 && (PTR)[2] == 'v' && (PTR)[3] == 'e') \
00509 { fprintf ((FILE), "mov"); (PTR) += 4; \
00510 if ((PTR)[0] == 'q' || (PTR)[0] == 'a' \
00511 || (PTR)[0] == 'c') (PTR)++; } \
00512 \
00513 else if ((PTR)[0] == 's' && (PTR)[1] == 'u' \
00514 && (PTR)[2] == 'b') \
00515 { fprintf ((FILE), "sub"); (PTR) += 3; \
00516 if ((PTR)[0] == 'q' || (PTR)[0] == 'i' \
00517 || (PTR)[0] == 'a') (PTR)++; } \
00518 \
00519 else if ((PTR)[0] == 'c' && (PTR)[1] == 'm' \
00520 && (PTR)[2] == 'p') \
00521 { fprintf ((FILE), "cmp"); (PTR) += 3; \
00522 if ((PTR)[0] == 'a' || (PTR)[0] == 'i' \
00523 || (PTR)[0] == 'm') (PTR)++; } \
00524 }
00525 #endif
00526
00527
00528
00529
00530
00531
00532 #undef ASM_OUTPUT_COMMON
00533 #ifndef USE_GAS
00534 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
00535 ( fputs ("\tcomm ", (FILE)), \
00536 assemble_name ((FILE), (NAME)), \
00537 fprintf ((FILE), ",%u\n", (SIZE)))
00538 #else
00539 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
00540 ( fputs ("\t.comm ", (FILE)), \
00541 assemble_name ((FILE), (NAME)), \
00542 fprintf ((FILE), ",%u\n", (SIZE)))
00543 #endif
00544
00545
00546
00547
00548 #undef ASM_OUTPUT_LOCAL
00549 #ifndef USE_GAS
00550 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
00551 ( fputs ("\tlcomm ", (FILE)), \
00552 assemble_name ((FILE), (NAME)), \
00553 fprintf ((FILE), ",%u\n", (SIZE)))
00554 #else
00555 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
00556 ( fputs ("\t.lcomm ", (FILE)), \
00557 assemble_name ((FILE), (NAME)), \
00558 fprintf ((FILE), ",%u\n", (SIZE)))
00559 #endif
00560
00561 #ifndef USE_GAS
00562
00563
00564
00565
00566
00567 #define PUT_SDB_SCL(a) fprintf(asm_out_file, "\tscl\t%d;", (a))
00568 #define PUT_SDB_INT_VAL(a) fprintf (asm_out_file, "\tval\t%d;", (a))
00569 #define PUT_SDB_VAL(a) \
00570 ( fputs ("\tval\t", asm_out_file), \
00571 output_addr_const (asm_out_file, (a)), \
00572 fputc (';', asm_out_file))
00573
00574 #define PUT_SDB_DEF(a) \
00575 do { fprintf (asm_out_file, "\tdef\t"); \
00576 ASM_OUTPUT_LABELREF (asm_out_file, a); \
00577 fprintf (asm_out_file, ";"); } while (0)
00578
00579 #define PUT_SDB_PLAIN_DEF(a) fprintf(asm_out_file,"\tdef\t~%s;",a)
00580 #define PUT_SDB_ENDEF fputs("\tendef\n", asm_out_file)
00581 #define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\ttype\t0%o;", a)
00582 #define PUT_SDB_SIZE(a) fprintf(asm_out_file, "\tsize\t%d;", a)
00583 #define PUT_SDB_START_DIM fprintf(asm_out_file, "\tdim\t")
00584 #define PUT_SDB_NEXT_DIM(a) fprintf(asm_out_file, "%d,", a)
00585 #define PUT_SDB_LAST_DIM(a) fprintf(asm_out_file, "%d;", a)
00586
00587 #define PUT_SDB_TAG(a) \
00588 do { fprintf (asm_out_file, "\ttag\t"); \
00589 ASM_OUTPUT_LABELREF (asm_out_file, a); \
00590 fprintf (asm_out_file, ";"); } while (0)
00591
00592 #define PUT_SDB_BLOCK_START(LINE) \
00593 fprintf (asm_out_file, \
00594 "\tdef\t~bb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n", \
00595 (LINE))
00596
00597 #define PUT_SDB_BLOCK_END(LINE) \
00598 fprintf (asm_out_file, \
00599 "\tdef\t~eb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n", \
00600 (LINE))
00601
00602 #define PUT_SDB_FUNCTION_START(LINE) \
00603 fprintf (asm_out_file, \
00604 "\tdef\t~bf;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n", \
00605 (LINE))
00606
00607 #define PUT_SDB_FUNCTION_END(LINE) \
00608 fprintf (asm_out_file, \
00609 "\tdef\t~ef;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n", \
00610 (LINE))
00611
00612 #define PUT_SDB_EPILOGUE_END(NAME) \
00613 fprintf (asm_out_file, \
00614 "\tdef\t%s;\tval\t~;\tscl\t-1;\tendef\n", \
00615 (NAME))
00616
00617 #define SDB_GENERATE_FAKE(BUFFER, NUMBER) \
00618 sprintf ((BUFFER), "~%dfake", (NUMBER));
00619
00620 #endif
00621
00622
00623
00624
00625
00626
00627 #define DIVSI3_LIBCALL "*ldiv%%"
00628 #define UDIVSI3_LIBCALL "*uldiv%%"
00629 #define MODSI3_LIBCALL "*lrem%%"
00630 #define UMODSI3_LIBCALL "*ulrem%%"
00631 #define MULSI3_LIBCALL "*lmul%%"
00632
00633 struct sysV68_cumulative_args
00634 {
00635 int offset;
00636 int libcall;
00637 };
00638
00639 #undef CUMULATIVE_ARGS
00640 #define CUMULATIVE_ARGS struct sysV68_cumulative_args
00641
00642 #undef INIT_CUMULATIVE_ARGS
00643 #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
00644 do {(CUM).offset = 0;\
00645 (CUM).libcall = (LIBNAME) && (*XSTR((LIBNAME), 0) == '*');} while(0)
00646
00647 #undef FUNCTION_ARG_ADVANCE
00648 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
00649 ((CUM).offset += ((MODE) != BLKmode \
00650 ? (GET_MODE_SIZE (MODE) + 3) & ~3 \
00651 : (int_size_in_bytes (TYPE) + 3) & ~3))
00652
00653 #undef FUNCTION_ARG
00654 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
00655 (((CUM).libcall && (CUM).offset == 0) ? gen_rtx_REG ((MODE), 0)\
00656 : (TARGET_REGPARM && (CUM).offset < 8) ? gen_rtx_REG ((MODE), (CUM).offset / 4) : 0)
00657
00658 #undef FUNCTION_ARG_PARTIAL_NREGS
00659 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
00660 ((TARGET_REGPARM && (CUM).offset < 8 \
00661 && 8 < ((CUM).offset + ((MODE) == BLKmode \
00662 ? int_size_in_bytes (TYPE) \
00663 : GET_MODE_SIZE (MODE)))) \
00664 ? 2 - (CUM).offset / 4 : 0)
00665
00666 #undef FUNCTION_ARG_REGNO_P
00667 #define FUNCTION_ARG_REGNO_P(N) (TARGET_68020 ? 0 : (N) == 0)
00668
00669
00670
00671
00672 #define ALT_LIBM "-lm881"
00673
00674 #if (TARGET_DEFAULT & MASK_68881)
00675 #define MATH_LIBRARY "-lm881"
00676 #endif
00677
00678
00679
00680
00681 #define NEED_ATEXIT 1
00682
00683 #define EXIT_BODY \
00684 do \
00685 { \
00686 __stop_monitor (); \
00687 _cleanup (); \
00688 } while (0)
00689
00690
00691
00692 #undef FINALIZE_TRAMPOLINE
00693 #define FINALIZE_TRAMPOLINE(TRAMP) \
00694 if (!TARGET_68040) \
00695 ; \
00696 else \
00697 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_insn_cache"), \
00698 0, VOIDmode, 0)