]>
gcc.gnu.org Git - gcc.git/blob - gcc/config/m68k/hp320.h
1 /* Definitions of target machine for GNU compiler. HP-UX 68000/68020 version.
2 Copyright (C) 1987, 1988, 1993, 1994 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* Define USE_GAS if GCC is supposed to work with the GNU assembler,
21 GNU linker and GNU debugger using DBX debugging information.
22 (In other words, much of HPUX has been cast aside.)
23 Undefine USE_GAS if you want GCC to feed the HP assembler. */
25 /* #define USE_GAS */ /* Use hp320g.h if you want this. */
27 /* Control assembler-syntax conditionals in m68k.md. */
30 #define MOTOROLA /* Use Motorola syntax rather than "MIT" */
31 #define SGS /* Uses SGS assembler */
32 #define SGS_CMP_ORDER /* Takes cmp operands in reverse order */
35 #if !defined (CROSS_COMPILE) && !defined (NO_BUGS)
36 /* The assembler on HP 9k3xx machines running HPUX 8.0 doesn't translate
37 floating point constants behind some operands. The workaround is to
38 use hex constants. Reported by Thomas Nau (nau@medizin.uni-ulm.de). */
39 #define AS_BUG_FLOATING_CONSTANT
40 /* The assembler on HP 9k3xx machines running HPUX 8.0 doesn't accept
41 labels followed by a text, data, or other section directive. Reported
42 by Thomas Nau (nau@medizin.uni-ulm.de). */
43 #define AS_BUG_TRAILING_LABEL
46 #endif /* not USE_GAS */
48 /* gcc.c should find libgcc.a itself rather than expecting linker to. */
49 #define LINK_LIBGCC_SPECIAL
50 /* The arguments of -L must be a separate argv element. */
51 #define SPACE_AFTER_L_OPTION
52 /* HP/UX doesn't have libg.a. */
53 #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
55 /* Be compatible with system stddef.h. */
56 #define SIZE_TYPE "unsigned int"
58 /* Use atexit for static constructors/destructors, instead of defining
59 our own exit function. */
62 #include "m68k/m68k.h"
64 /* See m68k.h. 7 means 68020 with 68881. */
66 #ifndef TARGET_DEFAULT
67 #define TARGET_DEFAULT 7
70 /* Define __HAVE_68881__ in preprocessor, unless -msoft-float is specified.
71 This will control the use of inline 68881 insns in certain macros. */
75 #define ASM_SPEC "%{m68000:+X}%{mc68000:+X}"
77 #define NO_DOT_IN_LABEL
79 #if TARGET_DEFAULT & 02 /* -m68881 is the default */
81 /* These definitions differ from those used for GAS by defining __HPUX_ASM__.
82 This is needed because some programs, particularly GDB, need to
83 know which assembler is being used so that the correct `asm'
84 instructions can be used. */
87 "%{!msoft-float:-D__HAVE_68881__ }\
88 %{!ansi:%{!mc68000:%{!m68000:-Dmc68020}} -D_HPUX_SOURCE} -D__HPUX_ASM__"
90 #else /* default is -msoft-float */
93 "%{m68881:-D__HAVE_68881__ }\
94 %{!ansi:%{!mc68000:%{!m68000:-Dmc68020}} -D_HPUX_SOURCE} -D__HPUX_ASM__"
96 #endif /* default is -msoft-float */
98 #else /* not HPUX_ASM */
100 #if TARGET_DEFAULT & 02 /* -m68881 is the default */
103 "%{!msoft-float:-D__HAVE_68881__ }\
104 %{!ansi:%{!mc68000:%{!m68000:-Dmc68020}} -D_HPUX_SOURCE}"
106 #else /* default is -msoft-float */
109 "%{m68881:-D__HAVE_68881__ }\
110 %{!ansi:%{!mc68000:%{!m68000:-Dmc68020}} -D_HPUX_SOURCE}"
112 #endif /* default is -msoft-float */
115 /* -m68000 requires special flags to the assembler. */
117 "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
119 /* Tell GCC to put a space after -L when generating such options. */
120 #define SPACE_AFTER_L_OPTION
122 #endif /* Not HPUX_ASM */
124 /* Translate -static for HPUX linker. */
125 #define LINK_SPEC "%{static:-a archive}"
127 /* Names to predefine in the preprocessor for this target machine
128 (for non-strict-ANSI programs only). */
129 /* These are the ones defined by HPUX cc, plus mc68000 for uniformity with
130 GCC on other 68000 systems. */
132 #define CPP_PREDEFINES "-Dhp9000s200 -Dhp9000s300 -DPWB -Dhpux -Dunix -D__hp9000s300 -D__hp9000s200 -D__PWB -D__hpux -D__unix -D__motorola__ -Asystem(unix) -Asystem(hpux) -Acpu(m68k) -Amachine(m68k)"
134 /* Every structure or union's size must be a multiple of 2 bytes. */
136 #define STRUCTURE_SIZE_BOUNDARY 16
138 /* hpux doesn't use static area for struct returns. */
139 #undef PCC_STATIC_STRUCT_RETURN
141 /* Generate calls to memcpy, memcmp and memset. */
142 #define TARGET_MEM_FUNCTIONS
144 #if 0 /* No longer correct in HPUX version 6.5. */
145 /* Function calls don't save any fp registers on hpux. */
146 #undef CALL_USED_REGISTERS
147 #define CALL_USED_REGISTERS \
148 {1, 1, 0, 0, 0, 0, 0, 0, \
149 1, 1, 0, 0, 0, 0, 0, 1, \
150 1, 1, 1, 1, 1, 1, 1, 1}
155 /* Override parts of m68k.h to fit the HPUX assembler. */
157 #undef TARGET_VERSION
158 #undef REGISTER_NAMES
159 #undef ASM_OUTPUT_REG_PUSH
160 #undef ASM_OUTPUT_REG_POP
161 #undef ASM_FILE_START
164 #undef TEXT_SECTION_ASM_OP
165 #undef DATA_SECTION_ASM_OP
166 #undef READONLY_DATA_SECTION
167 #undef ASM_OUTPUT_DOUBLE
168 #undef ASM_OUTPUT_FLOAT
169 #undef ASM_OUTPUT_INT
170 #undef ASM_OUTPUT_SHORT
171 #undef ASM_OUTPUT_CHAR
172 #undef ASM_OUTPUT_BYTE
173 #undef ASM_OUTPUT_ADDR_VEC_ELT
174 #undef ASM_OUTPUT_ADDR_DIFF_ELT
175 #undef ASM_OUTPUT_ALIGN
176 #undef ASM_OUTPUT_SKIP
177 #undef ASM_OUTPUT_COMMON
178 #undef ASM_OUTPUT_LOCAL
179 #undef ASM_FORMAT_PRIVATE_NAME
181 #undef PRINT_OPERAND_ADDRESS
182 #undef FUNCTION_PROFILER
183 #undef ASM_OUTPUT_INTERNAL_LABEL
185 #undef IMMEDIATE_PREFIX
186 #undef REGISTER_PREFIX
188 #define TARGET_VERSION fprintf (stderr, " (68k, SGS/hpux syntax)");
190 #define REGISTER_NAMES \
191 {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \
192 "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \
193 "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7"}
195 #define IMMEDIATE_PREFIX "&"
196 #define REGISTER_PREFIX "%"
198 #define FUNCTION_PROFILER(FILE, LABEL_NO) \
199 fprintf (FILE, "\tmov.l &LP%d,%%a0\n\tjsr mcount\n", (LABEL_NO));
201 /* This is how to output an insn to push a register on the stack.
202 It need not be very fast code. */
204 #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
205 fprintf (FILE, "\tmov.l %s,-(%%sp)\n", reg_names[REGNO])
207 /* This is how to output an insn to pop a register from the stack.
208 It need not be very fast code. */
210 #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
211 fprintf (FILE, "\tmov.l (%%sp)+,%s\n", reg_names[REGNO])
213 /* For HPUX versions before 6.5, define this macro as empty. */
214 #define ASM_FILE_START(FILE) \
218 fprintf (FILE, "\tversion 3\n"); /* 68020 fp regs saved */ \
220 fprintf (FILE, "\tversion 2\n"); /* 68020 no fp regs saved */ \
223 fprintf (FILE, "\tversion 1\n"); /* 68010 */
225 #define ASM_APP_ON ""
227 #define ASM_APP_OFF ""
229 #ifdef AS_BUG_TRAILING_LABEL
230 #define TEXT_SECTION_ASM_OP "\tlalign\t1\ntext"
231 #define DATA_SECTION_ASM_OP "\tlalign\t1\ndata"
233 #define TEXT_SECTION_ASM_OP "text"
234 #define DATA_SECTION_ASM_OP "data"
236 #define ASCII_DATA_ASM_OP "byte"
238 /* This is the command to make the user-level label named NAME
239 defined for reference from other files. */
241 #define GLOBAL_ASM_OP "global"
243 /* This says how to output an assembler line
244 to define a global common symbol. */
246 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
247 ( fputs ("\tcomm ", (FILE)), \
248 assemble_name ((FILE), (NAME)), \
249 fprintf ((FILE), ",%u\n", (ROUNDED)))
251 /* This says how to output an assembler line
252 to define a local common symbol. */
254 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
255 ( fputs ("\tlcomm ", (FILE)), \
256 assemble_name ((FILE), (NAME)), \
257 fprintf ((FILE), ",%u,2\n", (ROUNDED)))
259 /* Store in OUTPUT a string (made with alloca) containing
260 an assembler-name for a local static variable named NAME.
261 LABELNO is an integer which is different for each call. */
263 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
264 ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \
265 sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))
267 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
268 do{ if (PREFIX[0] == 'L' && PREFIX[1] == 'I') \
269 fprintf(FILE, "\tset %s%d,.+2\n", PREFIX, NUM); \
271 fprintf (FILE, "%s%d:\n", PREFIX, NUM); \
274 #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
275 do { char dstr[30]; \
276 REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \
277 fprintf (FILE, "\tdouble 0f%s\n", dstr); \
280 #define ASM_OUTPUT_FLOAT(FILE, VALUE) \
281 do { char dstr[30]; \
282 REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr); \
283 fprintf (FILE, "\tfloat 0f%s\n", dstr); \
286 #undef ASM_OUTPUT_LONG_DOUBLE
287 #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
289 REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \
290 fprintf (FILE, "\tlong 0x%x,0x%x,0x%x\n", l[0], l[1], l[2]); \
293 /* This is how to output an assembler line defining an `int' constant. */
295 #define ASM_OUTPUT_INT(FILE,VALUE) \
296 ( fprintf (FILE, "\tlong "), \
297 output_addr_const (FILE, (VALUE)), \
298 fprintf (FILE, "\n"))
300 /* Likewise for `char' and `short' constants. */
302 #define ASM_OUTPUT_SHORT(FILE,VALUE) \
303 ( fprintf (FILE, "\tshort "), \
304 output_addr_const (FILE, (VALUE)), \
305 fprintf (FILE, "\n"))
307 #define ASM_OUTPUT_CHAR(FILE,VALUE) \
308 ( fprintf (FILE, "\tbyte "), \
309 output_addr_const (FILE, (VALUE)), \
310 fprintf (FILE, "\n"))
312 /* This is how to output an assembler line for a numeric constant byte. */
314 #define ASM_OUTPUT_BYTE(FILE,VALUE) \
315 fprintf (FILE, "\tbyte 0x%x\n", (VALUE))
317 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
318 fprintf (FILE, "\tlong L%d\n", VALUE)
320 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
321 fprintf (FILE, "\tshort L%d-L%d\n", VALUE, REL)
323 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
325 fprintf (FILE, "\tlalign 2\n"); \
326 else if ((LOG) != 0) \
329 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
330 fprintf (FILE, "\tspace %u\n", (SIZE))
332 #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME)
333 #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO)
335 #ifdef AS_BUG_FLOATING_CONSTANT
336 #define PRINT_OPERAND_FLOAT(CODE,FILE,VALUE,INT) \
337 do { REAL_VALUE_TO_TARGET_SINGLE (VALUE, INT); \
338 fprintf (FILE, "&0x%x", INT); } while (0)
340 #define PRINT_OPERAND_FLOAT(CODE,FILE,VALUE,INT) \
341 do { if (CODE == 'f') \
343 REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr); \
344 fprintf (FILE, "&0f%s", dstr); \
348 REAL_VALUE_TO_TARGET_SINGLE (VALUE, INT); \
349 fprintf (FILE, "&0x%x", INT); } } while (0)
350 #endif /* AS_BUG_FLOATING_CONSTANT */
352 #define PRINT_OPERAND(FILE, X, CODE) \
353 { if (CODE == '.') fprintf (FILE, "."); \
354 else if (CODE == '#') fprintf (FILE, "&"); \
355 else if (CODE == '-') fprintf (FILE, "-(%%sp)"); \
356 else if (CODE == '+') fprintf (FILE, "(%%sp)+"); \
357 else if (CODE == '@') fprintf (FILE, "(%%sp)"); \
358 else if (CODE == '!') fprintf (FILE, "%%fpcr"); \
359 else if (CODE == '$') { if (TARGET_68040_ONLY) fprintf (FILE, "s"); } \
360 else if (CODE == '&') { if (TARGET_68040_ONLY) fprintf (FILE, "d"); } \
361 else if (CODE == '/') \
362 fprintf (FILE, "%%"); \
363 else if (GET_CODE (X) == REG) \
364 fprintf (FILE, "%s", reg_names[REGNO (X)]); \
365 else if (GET_CODE (X) == MEM) \
366 output_address (XEXP (X, 0)); \
367 else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode) \
368 { REAL_VALUE_TYPE r; long l; \
369 REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
370 PRINT_OPERAND_FLOAT (CODE, FILE, r, l); } \
371 else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \
372 { REAL_VALUE_TYPE r; char dstr[30]; \
373 REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
374 REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); \
375 fprintf (FILE, "&0f%s", dstr); } \
376 else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \
377 { REAL_VALUE_TYPE r; char dstr[30]; \
378 REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
379 REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); \
380 fprintf (FILE, "&0f%s", dstr); } \
381 else { putc ('&', FILE); output_addr_const (FILE, X); }}
383 #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
384 { register rtx reg1, reg2, breg, ireg; \
385 register rtx addr = ADDR; \
387 switch (GET_CODE (addr)) \
390 fprintf (FILE, "(%s)", reg_names[REGNO (addr)]); \
393 fprintf (FILE, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]); \
396 fprintf (FILE, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]); \
399 reg1 = 0; reg2 = 0; \
400 ireg = 0; breg = 0; \
402 if (CONSTANT_ADDRESS_P (XEXP (addr, 0))) \
404 offset = XEXP (addr, 0); \
405 addr = XEXP (addr, 1); \
407 else if (CONSTANT_ADDRESS_P (XEXP (addr, 1))) \
409 offset = XEXP (addr, 1); \
410 addr = XEXP (addr, 0); \
412 if (GET_CODE (addr) != PLUS) ; \
413 else if (GET_CODE (XEXP (addr, 0)) == SIGN_EXTEND) \
415 reg1 = XEXP (addr, 0); \
416 addr = XEXP (addr, 1); \
418 else if (GET_CODE (XEXP (addr, 1)) == SIGN_EXTEND) \
420 reg1 = XEXP (addr, 1); \
421 addr = XEXP (addr, 0); \
423 else if (GET_CODE (XEXP (addr, 0)) == MULT) \
425 reg1 = XEXP (addr, 0); \
426 addr = XEXP (addr, 1); \
428 else if (GET_CODE (XEXP (addr, 1)) == MULT) \
430 reg1 = XEXP (addr, 1); \
431 addr = XEXP (addr, 0); \
433 else if (GET_CODE (XEXP (addr, 0)) == REG) \
435 reg1 = XEXP (addr, 0); \
436 addr = XEXP (addr, 1); \
438 else if (GET_CODE (XEXP (addr, 1)) == REG) \
440 reg1 = XEXP (addr, 1); \
441 addr = XEXP (addr, 0); \
443 if (GET_CODE (addr) == REG || GET_CODE (addr) == MULT \
444 || GET_CODE (addr) == SIGN_EXTEND) \
445 { if (reg1 == 0) reg1 = addr; else reg2 = addr; addr = 0; } \
446 /* for OLD_INDEXING \
447 else if (GET_CODE (addr) == PLUS) \
449 if (GET_CODE (XEXP (addr, 0)) == REG) \
451 reg2 = XEXP (addr, 0); \
452 addr = XEXP (addr, 1); \
454 else if (GET_CODE (XEXP (addr, 1)) == REG) \
456 reg2 = XEXP (addr, 1); \
457 addr = XEXP (addr, 0); \
461 if (offset != 0) { if (addr != 0) abort (); addr = offset; } \
462 if ((reg1 && (GET_CODE (reg1) == SIGN_EXTEND \
463 || GET_CODE (reg1) == MULT)) \
464 || (reg2 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg2)))) \
465 { breg = reg2; ireg = reg1; } \
466 else if (reg1 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg1))) \
467 { breg = reg1; ireg = reg2; } \
468 if (ireg != 0 && breg == 0 && GET_CODE (addr) == LABEL_REF) \
470 if (GET_CODE (ireg) == MULT) \
471 { scale = INTVAL (XEXP (ireg, 1)); \
472 ireg = XEXP (ireg, 0); } \
473 if (GET_CODE (ireg) == SIGN_EXTEND) \
474 fprintf (FILE, "L%d-LI%d(%%pc,%s.w", \
475 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
476 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
477 reg_names[REGNO (XEXP (ireg, 0))]); \
479 fprintf (FILE, "L%d-LI%d(%%pc,%s.l", \
480 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
481 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
482 reg_names[REGNO (ireg)]); \
483 if (scale != 1) fprintf (FILE, "*%d", scale); \
486 if (ireg != 0 || breg != 0) \
491 output_addr_const (FILE, addr); \
492 fprintf (FILE, "(%s", reg_names[REGNO (breg)]); \
495 if (ireg != 0 && GET_CODE (ireg) == MULT) \
496 { scale = INTVAL (XEXP (ireg, 1)); \
497 ireg = XEXP (ireg, 0); } \
498 if (ireg != 0 && GET_CODE (ireg) == SIGN_EXTEND) \
499 fprintf (FILE, "%s.w", reg_names[REGNO (XEXP (ireg, 0))]); \
500 else if (ireg != 0) \
501 fprintf (FILE, "%s.l", reg_names[REGNO (ireg)]); \
502 if (scale != 1) fprintf (FILE, "*%d", scale); \
506 else if (reg1 != 0 && GET_CODE (addr) == LABEL_REF) \
507 { fprintf (FILE, "L%d-LI%d(%%pc,%s.w)", \
508 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
509 CODE_LABEL_NUMBER (XEXP (addr, 0)), \
510 reg_names[REGNO (reg1)]); \
513 if (GET_CODE (addr) == CONST_INT \
514 && INTVAL (addr) < 0x8000 \
515 && INTVAL (addr) >= -0x8000) \
516 fprintf (FILE, "%d.w", INTVAL (addr)); \
518 output_addr_const (FILE, addr); \
521 #define ASM_OUTPUT_ASCII(f, p, size) \
522 do { register int i; \
525 for (i = 0; i < (size); i++) { \
533 fprintf((f), "\t%s ", ASCII_DATA_ASM_OP); \
535 if ((p)[i] < 32 || (p)[i] == '\\' || (p)[i] == '"' || (p)[i] == 127) { \
542 fprintf((f), "%d", (p)[i]); \
558 /* Translate Motorola opcodes such as `jbeq'
559 into SGS opcodes such as `beq.w'.
560 Delete the `e' in `move...' and `fmove'.
561 Change `ftst' to `ftest'. */
563 #define ASM_OUTPUT_OPCODE(FILE, PTR) \
564 { if ((PTR)[0] == 'j' && (PTR)[1] == 'b') \
566 while (*(PTR) != ' ') \
567 { putc (*(PTR), (FILE)); ++(PTR); } \
568 fprintf ((FILE), ".w"); } \
569 else if ((PTR)[0] == 'f') \
571 if (!strncmp ((PTR), "fmove", 5)) \
572 { fprintf ((FILE), "fmov"); (PTR) += 5; } \
573 else if (!strncmp ((PTR), "ftst", 4)) \
574 { fprintf ((FILE), "ftest"); (PTR) += 4; } \
576 else if ((PTR)[0] == 'm' && (PTR)[1] == 'o' \
577 && (PTR)[2] == 'v' && (PTR)[3] == 'e') \
578 { fprintf ((FILE), "mov"); (PTR) += 4; } \
581 /* Prevent output of `gcc_compiled.:'. */
583 #define ASM_IDENTIFY_GCC(FILE)
585 #else /* not HPUX_ASM */
587 #undef FUNCTION_PROFILER
589 /* HP-UX needs the call to mcount before the link instruction.
590 Copy the return address onto the stack before the call to fake it out. */
591 #define FUNCTION_PROFILER(FILE, LABEL_NO) \
593 "\tmovel a6@(4),sp@-\n\tmovl #LP%d,a0\n\tjsr mcount\n\taddqw #4,sp\n", \
596 #endif /* not HPUX_ASM */
597 /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an
598 operand of a function call. */
599 #undef LEGITIMATE_PIC_OPERAND_P
600 #define LEGITIMATE_PIC_OPERAND_P(X) \
601 (! symbolic_operand (X, VOIDmode) \
602 || ((GET_CODE(X) == SYMBOL_REF) && SYMBOL_REF_FLAG(X)))
604 /* hpux8 and later have C++ compatible include files, so do not
605 pretend they are `extern "C"'. */
606 #define NO_IMPLICIT_EXTERN_C
This page took 0.066968 seconds and 5 git commands to generate.