1 /* Definitions of target machine for GNU compiler, for CR16.
2 Copyright (C) 2012-2014 Free Software Foundation, Inc.
3 Contributed by KPIT Cummins Infosystems Limited.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published
9 by the Free Software Foundation; either version 3, or (at your
10 option) any later version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
24 #define OBJECT_FORMAT_ELF
26 /* Controlling the driver. */
28 /* The GNU C++ standard library requires that these macros be defined. */
29 #undef CPLUSPLUS_CPP_SPEC
30 #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
33 #define STARTFILE_SPEC "crt1.o%s crti.o%s crtbegin.o%s crtlibid.o%s"
36 #define ENDFILE_SPEC "crtend.o%s crtn.o%s"
39 #define MATH_LIBRARY ""
42 #define LIB_SPEC "-( -lc %{msim*:-lsim}%{!msim*:-lnosys} -) \
43 %{msim*:%{!T*:-Tsim.ld}} \
44 %{!T*:%{!msim*: %{-Telf32cr16.x}}}"
46 /* Run-time target specification. */
47 #ifndef TARGET_CPU_CPP_BUILTINS
48 #define TARGET_CPU_CPP_BUILTINS() \
51 builtin_define ("__CR__"); \
52 builtin_define ("__CR16__"); \
53 builtin_define ("__CR16C__"); \
55 builtin_define ("__CR16CP__"); \
57 builtin_define ("__CR16CSTD__"); \
58 if (CR16_TARGET_DATA_NEAR) \
59 builtin_define ("__DATA_NEAR__"); \
60 if (CR16_TARGET_DATA_MEDIUM) \
61 builtin_define ("__DATA_MEDIUM__"); \
62 if (CR16_TARGET_DATA_FAR) \
63 builtin_define ("__DATA_FAR__"); \
65 builtin_define ("__INT32__"); \
70 /* Force the generation of dwarf .debug_frame sections even if not
71 compiling -g. This guarantees that we can unwind the stack. */
72 #define DWARF2_FRAME_INFO 1
74 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
76 /* Generate .file/.loc directives, so that the assembler generates the
78 #define DWARF2_ASM_LINE_DEBUG_INFO 1
80 #define CR16_TARGET_DATA_NEAR cr16_is_data_model (DM_NEAR)
81 #define CR16_TARGET_DATA_MEDIUM cr16_is_data_model (DM_DEFAULT)
82 #define CR16_TARGET_DATA_FAR cr16_is_data_model (DM_FAR)
85 #define BITS_BIG_ENDIAN 0
87 #define BYTES_BIG_ENDIAN 0
89 #define WORDS_BIG_ENDIAN 0
91 #define UNITS_PER_WORD 2
93 /* Units per 32-bit (DWORD). */
94 #define CR16_UNITS_PER_DWORD 4
96 #define POINTER_SIZE 32
98 #define PARM_BOUNDARY 16
100 #define STACK_BOUNDARY (MAX (BIGGEST_ALIGNMENT, PARM_BOUNDARY))
102 #define FUNCTION_BOUNDARY BIGGEST_ALIGNMENT
104 /* Biggest alignment on CR16C+ is 32-bit as internal bus is AMBA based
105 where as CR16C is proprietary internal bus architecture. */
106 #define BIGGEST_ALIGNMENT ((TARGET_CR16CP) ? 32 : 16)
108 #define MAX_FIXED_MODE_SIZE 64
110 /* In CR16 arrays of chars are word-aligned, so strcpy () will be faster. */
111 #define DATA_ALIGNMENT(TYPE, ALIGN) \
112 (((TREE_CODE (TYPE) == ARRAY_TYPE) \
113 && (TYPE_MODE (TREE_TYPE (TYPE)) == QImode) \
114 && ((ALIGN) < BITS_PER_WORD)) \
115 ? (BITS_PER_WORD) : (ALIGN))
117 /* In CR16 strings are word-aligne; strcpy from constants will be faster. */
118 #define CONSTANT_ALIGNMENT(CONSTANT, ALIGN) \
119 (((TREE_CODE (CONSTANT) == STRING_CST) && ((ALIGN) < BITS_PER_WORD)) \
120 ? (BITS_PER_WORD) : (ALIGN))
122 #define STRICT_ALIGNMENT 0
124 #define PCC_BITFIELD_TYPE_MATTERS 1
126 /* Layout of source language data types. */
127 #define INT_TYPE_SIZE (TARGET_INT32 ? 32 : 16)
129 #define SHORT_TYPE_SIZE 16
131 #define LONG_TYPE_SIZE 32
133 #define LONG_LONG_TYPE_SIZE 64
135 #define FLOAT_TYPE_SIZE 32
137 #define DOUBLE_TYPE_SIZE 64
139 #define LONG_DOUBLE_TYPE_SIZE 64
141 #define DEFAULT_SIGNED_CHAR 1
143 #define SIZE_TYPE "long unsigned int"
145 #define PTRDIFF_TYPE "long int"
147 #define WCHAR_TYPE "short unsigned int"
149 #define WCHAR_TYPE_SIZE 16
151 /* By default, the C++ compiler will use the lowest bit of the pointer
152 to function to indicate a pointer-to-member-function points to a
153 virtual member function. However, in CR architecture FUNCTION_BOUNDARY
154 indicates function addresses are always even, but function pointers can be
155 odd (after right-shifting them when loading them into a register), and the
156 default doesn't work. In that case, the lowest bit of the delta
157 field will be used (the remainder of the field is shifted to the left). */
158 #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_delta
160 /* Define DEFAULT_PCC_STRUCT_RETURN to 1 if all structure and union return
161 values must be in memory. */
162 #define DEFAULT_PCC_STRUCT_RETURN 0
164 /* Register usage. */
166 /* First 32-bit register is R12. */
167 #define CR16_FIRST_DWORD_REGISTER 12
169 #define FIRST_PSEUDO_REGISTER 16
171 /* 1 for registers that have pervasive standard uses
172 and are not available for the register allocator.
173 On the CR16, only the stack pointer (r15) is such. */
174 #define FIXED_REGISTERS \
176 /* r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10. */ \
177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
178 /* r11 r12 r13 ra sp. */ \
182 /* 1 for registers not available across function calls.
183 These must include the FIXED_REGISTERS and also any
184 registers that can be used without being saved.
185 The latter must include the registers where values are returned
186 and the register where structure-value addresses are passed.
188 On the CR16, calls clobbers r0-r6 (scratch registers),
189 ra (the return address) and sp (the stack pointer). */
190 #define CALL_USED_REGISTERS \
192 /* r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10. */ \
193 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \
194 /* r11 r12 r13 ra sp. */ \
198 /* Returns 1 if the register is longer than word size, 0 otherwise. */
199 #define LONG_REG_P(REGNO) \
200 (HARD_REGNO_NREGS (REGNO, \
201 GET_MODE_WIDER_MODE (smallest_mode_for_size \
202 (BITS_PER_WORD, MODE_INT))) == 1)
204 #define HARD_REGNO_NREGS(REGNO, MODE) \
205 ((REGNO >= CR16_FIRST_DWORD_REGISTER) \
206 ? ((GET_MODE_SIZE (MODE) + CR16_UNITS_PER_DWORD - 1) / CR16_UNITS_PER_DWORD)\
207 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
209 /* Nonzero if it is permissible to store a value of mode @var{mode} in hard
210 register number @var{regno} (or in several registers starting with that
211 one). On the CR16 architecture, all registers can hold all modes,
212 except that double precision floats (and double ints) must fall on
213 even-register boundaries. */
214 #define HARD_REGNO_MODE_OK(REGNO, MODE) cr16_hard_regno_mode_ok (REGNO, MODE)
216 #define NOTICE_UPDATE_CC(EXP, INSN) \
217 notice_update_cc ((EXP))
219 /* Interrupt functions can only use registers that have already been
220 saved by the prologue, even if they would normally be call-clobbered
221 Check if sizes are same and then check if it is possible to rename. */
222 #define HARD_REGNO_RENAME_OK(SRC, DEST) \
223 (!cr16_interrupt_function_p () || (df_regs_ever_live_p (DEST)))
225 /* Exception handling stuff. */
227 /*To ensure correct dwarf unwinding. */
228 #define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((optimize ("no-gcse","no-dse")))
230 #define gen_rtx_RA gen_rtx_REG (Pmode, RETURN_ADDRESS_REGNUM)
232 /* Use (r8,r7) and (r10,r9) to pass exception handling information. */
233 #define EH_RETURN_DATA_REGNO(N) (((N) < 2) ? (N*2 + 7) : INVALID_REGNUM)
235 #define DWARF2_UNWIND_INFO 1
237 /* (r5,r4) holds a stack adjustment for returning to a handler. */
238 #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 4)
240 #define EH_RETURN_HANDLER_RTX \
241 gen_rtx_MEM (Pmode, plus_constant (Pmode, arg_pointer_rtx, -4))
243 #define INCOMING_RETURN_ADDR_RTX gen_rtx_RA
245 #define DWARF_FRAME_RETURN_COLUMN \
246 DWARF_FRAME_REGNUM (RETURN_ADDRESS_REGNUM)
248 #define INCOMING_FRAME_SP_OFFSET 0
249 #define FRAME_POINTER_CFA_OFFSET(FNDECL) 0
251 /* A C expression whose value is RTL representing the value of the return
252 address for the frame COUNT steps up from the current frame. */
253 #define RETURN_ADDR_RTX(COUNT, FRAME) \
254 (0 == COUNT) ? gen_rtx_PLUS (Pmode, gen_rtx_RA, gen_rtx_RA) \
257 #define MODES_TIEABLE_P(MODE1, MODE2) \
258 (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
272 #define N_REG_CLASSES (int) LIM_REG_CLASSES
274 #define REG_CLASS_NAMES \
280 "DOUBLE_BASE_REGS", \
285 #define REG_CLASS_CONTENTS \
287 {0x00000000}, /* NO_REGS */ \
288 {0x00000FFF}, /* SHORT_REGS : 0 - 11 */ \
289 {0x0000F000}, /* LONG_REGS : 12 - 15 */ \
290 {0x00007FFF}, /* NOSP_REGS : 0 - 14 */ \
291 {0x0000F555}, /* DOUBLE_BASE_REGS : 2,4,6,8,10 */ \
292 {0x0000FFFF}, /* GENERAL_REGS : 0 - 15 */ \
293 {0x0000FFFF} /* ALL_REGS : 0 - 15 */ \
296 #define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true
298 #define REGNO_REG_CLASS(REGNO) cr16_regno_reg_class (REGNO)
300 #define BASE_REG_CLASS GENERAL_REGS
302 #define MODE_BASE_REG_CLASS(MODE) \
303 (GET_MODE_SIZE (MODE) <= 4 ? (BASE_REG_CLASS) : (DOUBLE_BASE_REGS))
305 #define INDEX_REG_CLASS LONG_REGS
307 #define CR16_REGNO_OK_FOR_BASE_P(REGNO) \
308 (((REGNO) < FIRST_PSEUDO_REGISTER) \
309 || (reg_renumber && ((unsigned) reg_renumber[REGNO] \
310 < FIRST_PSEUDO_REGISTER)))
312 /* Use even-numbered reg for 64-bit accesses. */
313 #define REGNO_MODE_OK_FOR_BASE_P(REGNO, MODE) \
314 (CR16_REGNO_OK_FOR_BASE_P(REGNO) && \
315 ((GET_MODE_SIZE (MODE) > 4 && \
316 (REGNO) < CR16_FIRST_DWORD_REGISTER) \
317 ? (0 == ((REGNO) & 1)) \
320 /* TODO: For now lets not support index addressing mode. */
321 #define REGNO_OK_FOR_INDEX_P(REGNO) \
322 (((REGNO >= CR16_FIRST_DWORD_REGISTER) \
323 && ((REGNO) < FIRST_PSEUDO_REGISTER)) \
325 && (((unsigned) reg_renumber[REGNO] >= CR16_FIRST_DWORD_REGISTER) \
326 && ((unsigned) reg_renumber[REGNO] < FIRST_PSEUDO_REGISTER))) \
329 #define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
331 /* The maximum number of consecutive registers of class CLASS needed to
332 hold a value of mode MODE.
333 On the CompactRISC architecture, the size of MODE in words.
334 The size of MODE in double words for the class LONG_REGS.
336 The following check assumes if the class is not LONG_REGS, then
337 all (NO_REGS, SHORT_REGS, NOSP_REGS and GENERAL_REGS) other classes are
338 short. We may have to check if this can cause any degradation in
340 #define CLASS_MAX_NREGS(CLASS, MODE) \
341 (CLASS == LONG_REGS \
342 ? (GET_MODE_SIZE (MODE) + CR16_UNITS_PER_DWORD - 1) / CR16_UNITS_PER_DWORD\
343 : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
345 /* Macros to check the range of integers . These macros were used across
346 the port, majorly in constraints.md, predicates.md files. */
347 #define SIGNED_INT_FITS_N_BITS(imm, N) \
348 ((((imm) < ((HOST_WIDE_INT) 1 << ((N) - 1))) \
349 && ((imm) >= -((HOST_WIDE_INT) 1 << ((N) - 1)))) ? 1 : 0)
351 #define UNSIGNED_INT_FITS_N_BITS(imm, N) \
352 (((imm) < ((HOST_WIDE_INT) 1 << (N)) && (imm) >= (HOST_WIDE_INT) 0) ? 1 : 0)
354 #define IN_RANGE_P(VALUE, LOW, HIGH) \
355 ((((HOST_WIDE_INT)(VALUE)) >= (HOST_WIDE_INT)(LOW)) \
356 && (((HOST_WIDE_INT)(VALUE)) <= ((HOST_WIDE_INT)(HIGH))))
358 #define IN_RAN(VALUE, LOW, HIGH) \
359 (((((HOST_WIDE_INT)(VALUE)) >= (HOST_WIDE_INT)(LOW)) \
360 && (((HOST_WIDE_INT)(VALUE)) <= ((HOST_WIDE_INT)(HIGH)))) ? 1 : 0)
362 /* This check is for sbit/cbit instruction. */
363 #define OK_FOR_Z(OP) \
364 ((GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == CONST_INT) \
365 || (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == REG) \
366 || (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == PLUS \
367 && GET_CODE (XEXP ((XEXP (OP, 0)), 0)) == REG \
368 && GET_CODE (XEXP ((XEXP (OP, 0)), 1)) == CONST_INT))
370 /* Stack layout and calling conventions. */
371 #define STACK_GROWS_DOWNWARD
373 #define STARTING_FRAME_OFFSET 0
375 #define STACK_POINTER_REGNUM 15
377 #define FRAME_POINTER_REGNUM 13
379 #define ARG_POINTER_REGNUM 12
381 #define STATIC_CHAIN_REGNUM 1
383 #define RETURN_ADDRESS_REGNUM 14
385 #define FIRST_PARM_OFFSET(FNDECL) 0
387 #define ELIMINABLE_REGS \
389 { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
390 { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
391 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \
394 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
397 (OFFSET) = cr16_initial_elimination_offset ((FROM), (TO)); \
401 /* Passing function arguments. */
403 #define ACCUMULATE_OUTGOING_ARGS 0
407 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
409 #ifndef CUMULATIVE_ARGS
410 struct cumulative_args
413 int last_parm_in_reg
;
416 #define CUMULATIVE_ARGS struct cumulative_args
419 /* On the CR16 architecture, Varargs routines should receive their parameters
422 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
423 cr16_init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME))
425 #define FUNCTION_ARG_REGNO_P(REGNO) cr16_function_arg_regno_p (REGNO)
427 /* Generating code for profiling - NOT IMPLEMENTED. */
428 #undef FUNCTION_PROFILER
429 #define FUNCTION_PROFILER(STREAM, LABELNO) \
431 sorry ("profiler support for CR16"); \
434 /* Trampolines for nested functions - NOT SUPPORTED. */
435 #define TRAMPOLINE_SIZE 16
437 /* ADDRESSING MODES. */
439 #define CONSTANT_ADDRESS_P(X) \
440 (GET_CODE (X) == LABEL_REF \
441 || GET_CODE (X) == SYMBOL_REF \
442 || GET_CODE (X) == CONST \
443 || GET_CODE (X) == CONST_INT)
445 #define MAX_REGS_PER_ADDRESS 2
447 #define HAVE_POST_INCREMENT 0
448 #define HAVE_POST_DECREMENT 0
449 #define HAVE_POST_MODIFY_DISP 0
450 #define HAVE_POST_MODIFY_REG 0
453 #define CR16_REG_OK_FOR_BASE_P(X) CR16_REGNO_OK_FOR_BASE_P (REGNO (X))
454 #define REG_MODE_OK_FOR_BASE_P(X, MODE) \
455 REGNO_MODE_OK_FOR_BASE_P (REGNO(X), MODE)
456 #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
457 #else /* not REG_OK_STRICT. */
458 #define CR16_REG_OK_FOR_BASE_P(X) 1
459 #define REG_MODE_OK_FOR_BASE_P(X, MODE) 1
460 #define REG_OK_FOR_INDEX_P(X) 1
461 #endif /* not REG_OK_STRICT. */
463 /* Assume best case (branch predicted). */
464 #define BRANCH_COST(speed_p, predictable_p) 2
466 #define SLOW_BYTE_ACCESS 1
468 /* It is as good or better to call a constant function address than to
469 call an address kept in a register. */
470 #define NO_FUNCTION_CSE
472 /* Dividing the output into sections. */
474 #define TEXT_SECTION_ASM_OP "\t.section\t.text"
476 #define DATA_SECTION_ASM_OP "\t.section\t.data"
478 #define BSS_SECTION_ASM_OP "\t.section\t.bss"
480 /* Position independent code (PIC). */
481 /* NEAR_PIC for -fpic option. */
485 /* FAR_PIC for -fPIC option. */
489 #define PIC_OFFSET_TABLE_REGNUM 12
491 #define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
493 /* Assembler format. */
495 /* Character to start a comment. */
496 #define ASM_COMMENT_START "#"
498 #define GLOBAL_ASM_OP "\t.globl\t"
500 #undef USER_LABEL_PREFIX
501 #define USER_LABEL_PREFIX "_"
503 #undef ASM_OUTPUT_LABELREF
504 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
505 asm_fprintf (STREAM, "%U%s", (*targetm.strip_name_encoding) (NAME));
507 #define ASM_OUTPUT_SYMBOL_REF(STREAM, SYMBOL) \
510 const char *rn = XSTR (SYMBOL, 0); \
511 assemble_name (STREAM, rn); \
512 if (SYMBOL_REF_FUNCTION_P (SYMBOL)) \
514 fprintf ((STREAM), "@c"); \
520 #define ASM_APP_ON "#APP\n"
523 #define ASM_APP_OFF "#NO_APP\n"
525 /* Switch into a generic section. */
526 #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
528 #undef INIT_SECTION_ASM_OP
529 #define INIT_SECTION_ASM_OP "\t.section\t.init"
531 #undef FINI_SECTION_ASM_OP
532 #define FINI_SECTION_ASM_OP "\t.section\t.fini"
534 /* Instruction output. */
536 #define REGISTER_NAMES \
538 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
539 "r8", "r9", "r10", "r11", "r12", "r13", "ra", "sp" \
542 /* Output of dispatch tables. */
544 /* Revisit. No PC relative case as label expressions are not
545 properly supported in binutils else we could have done this:
546 #define CASE_VECTOR_PC_RELATIVE (optimize_size ? 1 : 0). */
547 #define CASE_VECTOR_PC_RELATIVE 0
549 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
550 ((GET_MODE (BODY) == QImode) \
551 ? fprintf ((FILE), "\t.byte (.L%d-.L%d) >> 1\n", \
553 : fprintf ((FILE), "\t.word (.L%d-.L%d) >> 1\n", \
556 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
557 asm_fprintf ((STREAM), "\t.long\t.L%d@c\n", (VALUE))
559 /* Alignment in assembler file. */
561 #define ASM_OUTPUT_ALIGN(STREAM, POWER) \
562 asm_fprintf ((STREAM), "\t.align\t%d\n", 1 << (POWER))
564 /* Miscellaneous parameters. */
566 #define CASE_VECTOR_MODE Pmode
570 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
572 #define STORE_FLAG_VALUE 1
576 #define FUNCTION_MODE QImode
578 /* Define this boolean macro(s) to indicate whether or not your architecture
579 has (un)conditional branches that can span all of memory. It is used in
580 conjunction with an optimization that partitions hot and cold basic blocks
581 into separate sections of the executable.
582 CR16 contains branch instructions that span whole address space. */
583 #define HAS_LONG_COND_BRANCH 1
584 #define HAS_LONG_UNCOND_BRANCH 1
586 #endif /* End of GCC_CR16_H. */