1 /* Subroutines for insn-output.c for SPARC.
2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 64-bit SPARC-V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING. If not, write to
22 the Free Software Foundation, 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
27 #include "coretypes.h"
32 #include "hard-reg-set.h"
34 #include "insn-config.h"
35 #include "conditions.h"
37 #include "insn-attr.h"
48 #include "target-def.h"
49 #include "cfglayout.h"
51 /* 1 if the caller has placed an "unimp" insn immediately after the call.
52 This is used in v8 code when calling a function that returns a structure.
53 v9 doesn't have this. Be careful to have this test be the same as that
56 #define SKIP_CALLERS_UNIMP_P \
57 (!TARGET_ARCH64 && current_function_returns_struct \
58 && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl))) \
59 && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl))) \
62 /* Global variables for machine-dependent things. */
64 /* Size of frame. Need to know this to emit return insns from leaf procedures.
65 ACTUAL_FSIZE is set by compute_frame_size() which is called during the
66 reload pass. This is important as the value is later used in insn
67 scheduling (to see what can go in a delay slot).
68 APPARENT_FSIZE is the size of the stack less the register save area and less
69 the outgoing argument area. It is used when saving call preserved regs. */
70 static HOST_WIDE_INT apparent_fsize;
71 static HOST_WIDE_INT actual_fsize;
73 /* Number of live general or floating point registers needed to be
74 saved (as 4-byte quantities). */
75 static int num_gfregs;
77 /* Save the operands last given to a compare for use when we
78 generate a scc or bcc insn. */
79 rtx sparc_compare_op0, sparc_compare_op1;
81 /* Coordinate with the md file wrt special insns created by
82 sparc_nonflat_function_epilogue. */
83 bool sparc_emitting_epilogue;
85 /* Vector to say how input registers are mapped to output registers.
86 HARD_FRAME_POINTER_REGNUM cannot be remapped by this function to
87 eliminate it. You must use -fomit-frame-pointer to get that. */
88 char leaf_reg_remap[] =
89 { 0, 1, 2, 3, 4, 5, 6, 7,
90 -1, -1, -1, -1, -1, -1, 14, -1,
91 -1, -1, -1, -1, -1, -1, -1, -1,
92 8, 9, 10, 11, 12, 13, -1, 15,
94 32, 33, 34, 35, 36, 37, 38, 39,
95 40, 41, 42, 43, 44, 45, 46, 47,
96 48, 49, 50, 51, 52, 53, 54, 55,
97 56, 57, 58, 59, 60, 61, 62, 63,
98 64, 65, 66, 67, 68, 69, 70, 71,
99 72, 73, 74, 75, 76, 77, 78, 79,
100 80, 81, 82, 83, 84, 85, 86, 87,
101 88, 89, 90, 91, 92, 93, 94, 95,
102 96, 97, 98, 99, 100};
104 /* Vector, indexed by hard register number, which contains 1
105 for a register that is allowable in a candidate for leaf
106 function treatment. */
107 char sparc_leaf_regs[] =
108 { 1, 1, 1, 1, 1, 1, 1, 1,
109 0, 0, 0, 0, 0, 0, 1, 0,
110 0, 0, 0, 0, 0, 0, 0, 0,
111 1, 1, 1, 1, 1, 1, 0, 1,
112 1, 1, 1, 1, 1, 1, 1, 1,
113 1, 1, 1, 1, 1, 1, 1, 1,
114 1, 1, 1, 1, 1, 1, 1, 1,
115 1, 1, 1, 1, 1, 1, 1, 1,
116 1, 1, 1, 1, 1, 1, 1, 1,
117 1, 1, 1, 1, 1, 1, 1, 1,
118 1, 1, 1, 1, 1, 1, 1, 1,
119 1, 1, 1, 1, 1, 1, 1, 1,
122 struct machine_function GTY(())
124 /* Some local-dynamic TLS symbol name. */
125 const char *some_ld_name;
128 /* Name of where we pretend to think the frame pointer points.
129 Normally, this is "%fp", but if we are in a leaf procedure,
130 this is "%sp+something". We record "something" separately as it may be
131 too big for reg+constant addressing. */
133 static const char *frame_base_name;
134 static HOST_WIDE_INT frame_base_offset;
136 static void sparc_init_modes (void);
137 static int save_regs (FILE *, int, int, const char *, int, int, HOST_WIDE_INT);
138 static int restore_regs (FILE *, int, int, const char *, int, int);
139 static void build_big_number (FILE *, HOST_WIDE_INT, const char *);
140 static int function_arg_slotno (const CUMULATIVE_ARGS *, enum machine_mode,
141 tree, int, int, int *, int *);
143 static int supersparc_adjust_cost (rtx, rtx, rtx, int);
144 static int hypersparc_adjust_cost (rtx, rtx, rtx, int);
146 static void sparc_output_addr_vec (rtx);
147 static void sparc_output_addr_diff_vec (rtx);
148 static void sparc_output_deferred_case_vectors (void);
149 static int check_return_regs (rtx);
150 static int epilogue_renumber (rtx *, int);
151 static bool sparc_assemble_integer (rtx, unsigned int, int);
152 static int set_extends (rtx);
153 static void output_restore_regs (FILE *, int);
154 static void sparc_output_function_prologue (FILE *, HOST_WIDE_INT);
155 static void sparc_output_function_epilogue (FILE *, HOST_WIDE_INT);
156 static void sparc_flat_function_epilogue (FILE *, HOST_WIDE_INT);
157 static void sparc_flat_function_prologue (FILE *, HOST_WIDE_INT);
158 static void sparc_flat_save_restore (FILE *, const char *, int,
159 unsigned long, unsigned long,
160 const char *, const char *,
162 static void sparc_nonflat_function_epilogue (FILE *, HOST_WIDE_INT, int);
163 static void sparc_nonflat_function_prologue (FILE *, HOST_WIDE_INT, int);
164 #ifdef OBJECT_FORMAT_ELF
165 static void sparc_elf_asm_named_section (const char *, unsigned int);
167 static void sparc_aout_select_section (tree, int, unsigned HOST_WIDE_INT)
169 static void sparc_aout_select_rtx_section (enum machine_mode, rtx,
170 unsigned HOST_WIDE_INT)
173 static int sparc_adjust_cost (rtx, rtx, rtx, int);
174 static int sparc_issue_rate (void);
175 static void sparc_sched_init (FILE *, int, int);
176 static int sparc_use_dfa_pipeline_interface (void);
177 static int sparc_use_sched_lookahead (void);
179 static void emit_soft_tfmode_libcall (const char *, int, rtx *);
180 static void emit_soft_tfmode_binop (enum rtx_code, rtx *);
181 static void emit_soft_tfmode_unop (enum rtx_code, rtx *);
182 static void emit_soft_tfmode_cvt (enum rtx_code, rtx *);
183 static void emit_hard_tfmode_operation (enum rtx_code, rtx *);
185 static bool sparc_function_ok_for_sibcall (tree, tree);
186 static void sparc_init_libfuncs (void);
187 static void sparc_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
188 HOST_WIDE_INT, tree);
189 static struct machine_function * sparc_init_machine_status (void);
190 static bool sparc_cannot_force_const_mem (rtx);
191 static rtx sparc_tls_get_addr (void);
192 static rtx sparc_tls_got (void);
193 static const char *get_some_local_dynamic_name (void);
194 static int get_some_local_dynamic_name_1 (rtx *, void *);
195 static bool sparc_rtx_costs (rtx, int, int, int *);
197 /* Option handling. */
199 /* Code model option as passed by user. */
200 const char *sparc_cmodel_string;
202 enum cmodel sparc_cmodel;
204 char sparc_hard_reg_printed[8];
206 struct sparc_cpu_select sparc_select[] =
208 /* switch name, tune arch */
209 { (char *)0, "default", 1, 1 },
210 { (char *)0, "-mcpu=", 1, 1 },
211 { (char *)0, "-mtune=", 1, 0 },
215 /* CPU type. This is set from TARGET_CPU_DEFAULT and -m{cpu,tune}=xxx. */
216 enum processor_type sparc_cpu;
218 /* Initialize the GCC target structure. */
220 /* The sparc default is to use .half rather than .short for aligned
221 HI objects. Use .word instead of .long on non-ELF systems. */
222 #undef TARGET_ASM_ALIGNED_HI_OP
223 #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
224 #ifndef OBJECT_FORMAT_ELF
225 #undef TARGET_ASM_ALIGNED_SI_OP
226 #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t"
229 #undef TARGET_ASM_UNALIGNED_HI_OP
230 #define TARGET_ASM_UNALIGNED_HI_OP "\t.uahalf\t"
231 #undef TARGET_ASM_UNALIGNED_SI_OP
232 #define TARGET_ASM_UNALIGNED_SI_OP "\t.uaword\t"
233 #undef TARGET_ASM_UNALIGNED_DI_OP
234 #define TARGET_ASM_UNALIGNED_DI_OP "\t.uaxword\t"
236 /* The target hook has to handle DI-mode values. */
237 #undef TARGET_ASM_INTEGER
238 #define TARGET_ASM_INTEGER sparc_assemble_integer
240 #undef TARGET_ASM_FUNCTION_PROLOGUE
241 #define TARGET_ASM_FUNCTION_PROLOGUE sparc_output_function_prologue
242 #undef TARGET_ASM_FUNCTION_EPILOGUE
243 #define TARGET_ASM_FUNCTION_EPILOGUE sparc_output_function_epilogue
245 #undef TARGET_SCHED_ADJUST_COST
246 #define TARGET_SCHED_ADJUST_COST sparc_adjust_cost
247 #undef TARGET_SCHED_ISSUE_RATE
248 #define TARGET_SCHED_ISSUE_RATE sparc_issue_rate
249 #undef TARGET_SCHED_INIT
250 #define TARGET_SCHED_INIT sparc_sched_init
251 #undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE
252 #define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE sparc_use_dfa_pipeline_interface
253 #undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
254 #define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD sparc_use_sched_lookahead
256 #undef TARGET_FUNCTION_OK_FOR_SIBCALL
257 #define TARGET_FUNCTION_OK_FOR_SIBCALL sparc_function_ok_for_sibcall
259 #undef TARGET_INIT_LIBFUNCS
260 #define TARGET_INIT_LIBFUNCS sparc_init_libfuncs
263 #undef TARGET_HAVE_TLS
264 #define TARGET_HAVE_TLS true
266 #undef TARGET_CANNOT_FORCE_CONST_MEM
267 #define TARGET_CANNOT_FORCE_CONST_MEM sparc_cannot_force_const_mem
269 #undef TARGET_ASM_OUTPUT_MI_THUNK
270 #define TARGET_ASM_OUTPUT_MI_THUNK sparc_output_mi_thunk
271 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
272 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
274 #undef TARGET_RTX_COSTS
275 #define TARGET_RTX_COSTS sparc_rtx_costs
276 #undef TARGET_ADDRESS_COST
277 #define TARGET_ADDRESS_COST hook_int_rtx_0
279 struct gcc_target targetm = TARGET_INITIALIZER;
281 /* Validate and override various options, and do some machine dependent
285 sparc_override_options (void)
287 static struct code_model {
288 const char *const name;
290 } const cmodels[] = {
292 { "medlow", CM_MEDLOW },
293 { "medmid", CM_MEDMID },
294 { "medany", CM_MEDANY },
295 { "embmedany", CM_EMBMEDANY },
298 const struct code_model *cmodel;
299 /* Map TARGET_CPU_DEFAULT to value for -m{arch,tune}=. */
300 static struct cpu_default {
302 const char *const name;
303 } const cpu_default[] = {
304 /* There must be one entry here for each TARGET_CPU value. */
305 { TARGET_CPU_sparc, "cypress" },
306 { TARGET_CPU_sparclet, "tsc701" },
307 { TARGET_CPU_sparclite, "f930" },
308 { TARGET_CPU_v8, "v8" },
309 { TARGET_CPU_hypersparc, "hypersparc" },
310 { TARGET_CPU_sparclite86x, "sparclite86x" },
311 { TARGET_CPU_supersparc, "supersparc" },
312 { TARGET_CPU_v9, "v9" },
313 { TARGET_CPU_ultrasparc, "ultrasparc" },
314 { TARGET_CPU_ultrasparc3, "ultrasparc3" },
317 const struct cpu_default *def;
318 /* Table of values for -m{cpu,tune}=. */
319 static struct cpu_table {
320 const char *const name;
321 const enum processor_type processor;
324 } const cpu_table[] = {
325 { "v7", PROCESSOR_V7, MASK_ISA, 0 },
326 { "cypress", PROCESSOR_CYPRESS, MASK_ISA, 0 },
327 { "v8", PROCESSOR_V8, MASK_ISA, MASK_V8 },
328 /* TI TMS390Z55 supersparc */
329 { "supersparc", PROCESSOR_SUPERSPARC, MASK_ISA, MASK_V8 },
330 { "sparclite", PROCESSOR_SPARCLITE, MASK_ISA, MASK_SPARCLITE },
331 /* The Fujitsu MB86930 is the original sparclite chip, with no fpu.
332 The Fujitsu MB86934 is the recent sparclite chip, with an fpu. */
333 { "f930", PROCESSOR_F930, MASK_ISA|MASK_FPU, MASK_SPARCLITE },
334 { "f934", PROCESSOR_F934, MASK_ISA, MASK_SPARCLITE|MASK_FPU },
335 { "hypersparc", PROCESSOR_HYPERSPARC, MASK_ISA, MASK_V8|MASK_FPU },
336 { "sparclite86x", PROCESSOR_SPARCLITE86X, MASK_ISA|MASK_FPU,
338 { "sparclet", PROCESSOR_SPARCLET, MASK_ISA, MASK_SPARCLET },
340 { "tsc701", PROCESSOR_TSC701, MASK_ISA, MASK_SPARCLET },
341 { "v9", PROCESSOR_V9, MASK_ISA, MASK_V9 },
342 /* TI ultrasparc I, II, IIi */
343 { "ultrasparc", PROCESSOR_ULTRASPARC, MASK_ISA, MASK_V9
344 /* Although insns using %y are deprecated, it is a clear win on current
346 |MASK_DEPRECATED_V8_INSNS},
347 /* TI ultrasparc III */
348 /* ??? Check if %y issue still holds true in ultra3. */
349 { "ultrasparc3", PROCESSOR_ULTRASPARC3, MASK_ISA, MASK_V9|MASK_DEPRECATED_V8_INSNS},
352 const struct cpu_table *cpu;
353 const struct sparc_cpu_select *sel;
356 #ifndef SPARC_BI_ARCH
357 /* Check for unsupported architecture size. */
358 if (! TARGET_64BIT != DEFAULT_ARCH32_P)
359 error ("%s is not supported by this configuration",
360 DEFAULT_ARCH32_P ? "-m64" : "-m32");
363 /* We force all 64bit archs to use 128 bit long double */
364 if (TARGET_64BIT && ! TARGET_LONG_DOUBLE_128)
366 error ("-mlong-double-64 not allowed with -m64");
367 target_flags |= MASK_LONG_DOUBLE_128;
370 /* Code model selection. */
371 sparc_cmodel = SPARC_DEFAULT_CMODEL;
375 sparc_cmodel = CM_32;
378 if (sparc_cmodel_string != NULL)
382 for (cmodel = &cmodels[0]; cmodel->name; cmodel++)
383 if (strcmp (sparc_cmodel_string, cmodel->name) == 0)
385 if (cmodel->name == NULL)
386 error ("bad value (%s) for -mcmodel= switch", sparc_cmodel_string);
388 sparc_cmodel = cmodel->value;
391 error ("-mcmodel= is not supported on 32 bit systems");
394 fpu = TARGET_FPU; /* save current -mfpu status */
396 /* Set the default CPU. */
397 for (def = &cpu_default[0]; def->name; ++def)
398 if (def->cpu == TARGET_CPU_DEFAULT)
402 sparc_select[0].string = def->name;
404 for (sel = &sparc_select[0]; sel->name; ++sel)
408 for (cpu = &cpu_table[0]; cpu->name; ++cpu)
409 if (! strcmp (sel->string, cpu->name))
412 sparc_cpu = cpu->processor;
416 target_flags &= ~cpu->disable;
417 target_flags |= cpu->enable;
423 error ("bad value (%s) for %s switch", sel->string, sel->name);
427 /* If -mfpu or -mno-fpu was explicitly used, don't override with
428 the processor default. Clear MASK_FPU_SET to avoid confusing
429 the reverse mapping from switch values to names. */
432 target_flags = (target_flags & ~MASK_FPU) | fpu;
433 target_flags &= ~MASK_FPU_SET;
436 /* Don't allow -mvis if FPU is disabled. */
438 target_flags &= ~MASK_VIS;
440 /* -mvis assumes UltraSPARC+, so we are sure v9 instructions
442 -m64 also implies v9. */
443 if (TARGET_VIS || TARGET_ARCH64)
445 target_flags |= MASK_V9;
446 target_flags &= ~(MASK_V8 | MASK_SPARCLET | MASK_SPARCLITE);
449 /* Use the deprecated v8 insns for sparc64 in 32 bit mode. */
450 if (TARGET_V9 && TARGET_ARCH32)
451 target_flags |= MASK_DEPRECATED_V8_INSNS;
453 /* V8PLUS requires V9, makes no sense in 64 bit mode. */
454 if (! TARGET_V9 || TARGET_ARCH64)
455 target_flags &= ~MASK_V8PLUS;
457 /* Don't use stack biasing in 32 bit mode. */
459 target_flags &= ~MASK_STACK_BIAS;
461 /* Supply a default value for align_functions. */
462 if (align_functions == 0
463 && (sparc_cpu == PROCESSOR_ULTRASPARC
464 || sparc_cpu == PROCESSOR_ULTRASPARC3))
465 align_functions = 32;
467 /* Validate PCC_STRUCT_RETURN. */
468 if (flag_pcc_struct_return == DEFAULT_PCC_STRUCT_RETURN)
469 flag_pcc_struct_return = (TARGET_ARCH64 ? 0 : 1);
471 /* Only use .uaxword when compiling for a 64-bit target. */
473 targetm.asm_out.unaligned_op.di = NULL;
475 /* Do various machine dependent initializations. */
478 /* Set up function hooks. */
479 init_machine_status = sparc_init_machine_status;
482 /* Miscellaneous utilities. */
484 /* Nonzero if CODE, a comparison, is suitable for use in v9 conditional move
485 or branch on register contents instructions. */
488 v9_regcmp_p (enum rtx_code code)
490 return (code == EQ || code == NE || code == GE || code == LT
491 || code == LE || code == GT);
495 /* Operand constraints. */
497 /* Return nonzero only if OP is a register of mode MODE,
501 reg_or_0_operand (rtx op, enum machine_mode mode)
503 if (register_operand (op, mode))
505 if (op == const0_rtx)
507 if (GET_MODE (op) == VOIDmode && GET_CODE (op) == CONST_DOUBLE
508 && CONST_DOUBLE_HIGH (op) == 0
509 && CONST_DOUBLE_LOW (op) == 0)
511 if (fp_zero_operand (op, mode))
516 /* Return nonzero only if OP is const1_rtx. */
519 const1_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
521 return op == const1_rtx;
524 /* Nonzero if OP is a floating point value with value 0.0. */
527 fp_zero_operand (rtx op, enum machine_mode mode)
529 if (GET_MODE_CLASS (GET_MODE (op)) != MODE_FLOAT)
531 return op == CONST0_RTX (mode);
534 /* Nonzero if OP is a register operand in floating point register. */
537 fp_register_operand (rtx op, enum machine_mode mode)
539 if (! register_operand (op, mode))
541 if (GET_CODE (op) == SUBREG)
542 op = SUBREG_REG (op);
543 return GET_CODE (op) == REG && SPARC_FP_REG_P (REGNO (op));
546 /* Nonzero if OP is a floating point constant which can
547 be loaded into an integer register using a single
548 sethi instruction. */
553 if (GET_CODE (op) == CONST_DOUBLE)
558 REAL_VALUE_FROM_CONST_DOUBLE (r, op);
559 if (REAL_VALUES_EQUAL (r, dconst0) &&
560 ! REAL_VALUE_MINUS_ZERO (r))
562 REAL_VALUE_TO_TARGET_SINGLE (r, i);
563 if (SPARC_SETHI_P (i))
570 /* Nonzero if OP is a floating point constant which can
571 be loaded into an integer register using a single
577 if (GET_CODE (op) == CONST_DOUBLE)
582 REAL_VALUE_FROM_CONST_DOUBLE (r, op);
583 if (REAL_VALUES_EQUAL (r, dconst0) &&
584 ! REAL_VALUE_MINUS_ZERO (r))
586 REAL_VALUE_TO_TARGET_SINGLE (r, i);
587 if (SPARC_SIMM13_P (i))
594 /* Nonzero if OP is a floating point constant which can
595 be loaded into an integer register using a high/losum
596 instruction sequence. */
599 fp_high_losum_p (rtx op)
601 /* The constraints calling this should only be in
602 SFmode move insns, so any constant which cannot
603 be moved using a single insn will do. */
604 if (GET_CODE (op) == CONST_DOUBLE)
609 REAL_VALUE_FROM_CONST_DOUBLE (r, op);
610 if (REAL_VALUES_EQUAL (r, dconst0) &&
611 ! REAL_VALUE_MINUS_ZERO (r))
613 REAL_VALUE_TO_TARGET_SINGLE (r, i);
614 if (! SPARC_SETHI_P (i)
615 && ! SPARC_SIMM13_P (i))
622 /* Nonzero if OP is an integer register. */
625 intreg_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
627 return (register_operand (op, SImode)
628 || (TARGET_ARCH64 && register_operand (op, DImode)));
631 /* Nonzero if OP is a floating point condition code register. */
634 fcc_reg_operand (rtx op, enum machine_mode mode)
636 /* This can happen when recog is called from combine. Op may be a MEM.
637 Fail instead of calling abort in this case. */
638 if (GET_CODE (op) != REG)
641 if (mode != VOIDmode && mode != GET_MODE (op))
644 && (GET_MODE (op) != CCFPmode && GET_MODE (op) != CCFPEmode))
647 #if 0 /* ??? ==> 1 when %fcc0-3 are pseudos first. See gen_compare_reg(). */
648 if (reg_renumber == 0)
649 return REGNO (op) >= FIRST_PSEUDO_REGISTER;
650 return REGNO_OK_FOR_CCFP_P (REGNO (op));
652 return (unsigned) REGNO (op) - SPARC_FIRST_V9_FCC_REG < 4;
656 /* Nonzero if OP is a floating point condition code fcc0 register. */
659 fcc0_reg_operand (rtx op, enum machine_mode mode)
661 /* This can happen when recog is called from combine. Op may be a MEM.
662 Fail instead of calling abort in this case. */
663 if (GET_CODE (op) != REG)
666 if (mode != VOIDmode && mode != GET_MODE (op))
669 && (GET_MODE (op) != CCFPmode && GET_MODE (op) != CCFPEmode))
672 return REGNO (op) == SPARC_FCC_REG;
675 /* Nonzero if OP is an integer or floating point condition code register. */
678 icc_or_fcc_reg_operand (rtx op, enum machine_mode mode)
680 if (GET_CODE (op) == REG && REGNO (op) == SPARC_ICC_REG)
682 if (mode != VOIDmode && mode != GET_MODE (op))
685 && GET_MODE (op) != CCmode && GET_MODE (op) != CCXmode)
690 return fcc_reg_operand (op, mode);
693 /* Nonzero if OP can appear as the dest of a RESTORE insn. */
695 restore_operand (rtx op, enum machine_mode mode)
697 return (GET_CODE (op) == REG && GET_MODE (op) == mode
698 && (REGNO (op) < 8 || (REGNO (op) >= 24 && REGNO (op) < 32)));
701 /* Call insn on SPARC can take a PC-relative constant address, or any regular
705 call_operand (rtx op, enum machine_mode mode)
707 if (GET_CODE (op) != MEM)
710 return (symbolic_operand (op, mode) || memory_address_p (Pmode, op));
714 call_operand_address (rtx op, enum machine_mode mode)
716 return (symbolic_operand (op, mode) || memory_address_p (Pmode, op));
719 /* If OP is a SYMBOL_REF of a thread-local symbol, return its TLS mode,
720 otherwise return 0. */
723 tls_symbolic_operand (rtx op)
725 if (GET_CODE (op) != SYMBOL_REF)
727 return SYMBOL_REF_TLS_MODEL (op);
731 tgd_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
733 return tls_symbolic_operand (op) == TLS_MODEL_GLOBAL_DYNAMIC;
737 tld_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
739 return tls_symbolic_operand (op) == TLS_MODEL_LOCAL_DYNAMIC;
743 tie_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
745 return tls_symbolic_operand (op) == TLS_MODEL_INITIAL_EXEC;
749 tle_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
751 return tls_symbolic_operand (op) == TLS_MODEL_LOCAL_EXEC;
754 /* Returns 1 if OP is either a symbol reference or a sum of a symbol
755 reference and a constant. */
758 symbolic_operand (register rtx op, enum machine_mode mode)
760 enum machine_mode omode = GET_MODE (op);
762 if (omode != mode && omode != VOIDmode && mode != VOIDmode)
765 switch (GET_CODE (op))
768 return !SYMBOL_REF_TLS_MODEL (op);
775 return (((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
776 && !SYMBOL_REF_TLS_MODEL (XEXP (op, 0)))
777 || GET_CODE (XEXP (op, 0)) == LABEL_REF)
778 && GET_CODE (XEXP (op, 1)) == CONST_INT);
785 /* Return truth value of statement that OP is a symbolic memory
786 operand of mode MODE. */
789 symbolic_memory_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
791 if (GET_CODE (op) == SUBREG)
792 op = SUBREG_REG (op);
793 if (GET_CODE (op) != MEM)
796 return ((GET_CODE (op) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (op))
797 || GET_CODE (op) == CONST || GET_CODE (op) == HIGH
798 || GET_CODE (op) == LABEL_REF);
801 /* Return truth value of statement that OP is a LABEL_REF of mode MODE. */
804 label_ref_operand (rtx op, enum machine_mode mode)
806 if (GET_CODE (op) != LABEL_REF)
808 if (GET_MODE (op) != mode)
813 /* Return 1 if the operand is an argument used in generating pic references
814 in either the medium/low or medium/anywhere code models of sparc64. */
817 sp64_medium_pic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
819 /* Check for (const (minus (symbol_ref:GOT)
820 (const (minus (label) (pc))))). */
821 if (GET_CODE (op) != CONST)
824 if (GET_CODE (op) != MINUS)
826 if (GET_CODE (XEXP (op, 0)) != SYMBOL_REF)
828 /* ??? Ensure symbol is GOT. */
829 if (GET_CODE (XEXP (op, 1)) != CONST)
831 if (GET_CODE (XEXP (XEXP (op, 1), 0)) != MINUS)
836 /* Return 1 if the operand is a data segment reference. This includes
837 the readonly data segment, or in other words anything but the text segment.
838 This is needed in the medium/anywhere code model on v9. These values
839 are accessed with EMBMEDANY_BASE_REG. */
842 data_segment_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
844 switch (GET_CODE (op))
847 return ! SYMBOL_REF_FUNCTION_P (op);
849 /* Assume canonical format of symbol + constant.
852 return data_segment_operand (XEXP (op, 0), VOIDmode);
858 /* Return 1 if the operand is a text segment reference.
859 This is needed in the medium/anywhere code model on v9. */
862 text_segment_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
864 switch (GET_CODE (op))
869 return SYMBOL_REF_FUNCTION_P (op);
871 /* Assume canonical format of symbol + constant.
874 return text_segment_operand (XEXP (op, 0), VOIDmode);
880 /* Return 1 if the operand is either a register or a memory operand that is
884 reg_or_nonsymb_mem_operand (register rtx op, enum machine_mode mode)
886 if (register_operand (op, mode))
889 if (memory_operand (op, mode) && ! symbolic_memory_operand (op, mode))
896 splittable_symbolic_memory_operand (rtx op,
897 enum machine_mode mode ATTRIBUTE_UNUSED)
899 if (GET_CODE (op) != MEM)
901 if (! symbolic_operand (XEXP (op, 0), Pmode))
907 splittable_immediate_memory_operand (rtx op,
908 enum machine_mode mode ATTRIBUTE_UNUSED)
910 if (GET_CODE (op) != MEM)
912 if (! immediate_operand (XEXP (op, 0), Pmode))
917 /* Return truth value of whether OP is EQ or NE. */
920 eq_or_neq (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
922 return (GET_CODE (op) == EQ || GET_CODE (op) == NE);
925 /* Return 1 if this is a comparison operator, but not an EQ, NE, GEU,
926 or LTU for non-floating-point. We handle those specially. */
929 normal_comp_operator (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
931 enum rtx_code code = GET_CODE (op);
933 if (GET_RTX_CLASS (code) != '<')
936 if (GET_MODE (XEXP (op, 0)) == CCFPmode
937 || GET_MODE (XEXP (op, 0)) == CCFPEmode)
940 return (code != NE && code != EQ && code != GEU && code != LTU);
943 /* Return 1 if this is a comparison operator. This allows the use of
944 MATCH_OPERATOR to recognize all the branch insns. */
947 noov_compare_op (register rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
949 enum rtx_code code = GET_CODE (op);
951 if (GET_RTX_CLASS (code) != '<')
954 if (GET_MODE (XEXP (op, 0)) == CC_NOOVmode
955 || GET_MODE (XEXP (op, 0)) == CCX_NOOVmode)
956 /* These are the only branches which work with CC_NOOVmode. */
957 return (code == EQ || code == NE || code == GE || code == LT);
961 /* Return 1 if this is a 64-bit comparison operator. This allows the use of
962 MATCH_OPERATOR to recognize all the branch insns. */
965 noov_compare64_op (register rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
967 enum rtx_code code = GET_CODE (op);
972 if (GET_RTX_CLASS (code) != '<')
975 if (GET_MODE (XEXP (op, 0)) == CCX_NOOVmode)
976 /* These are the only branches which work with CCX_NOOVmode. */
977 return (code == EQ || code == NE || code == GE || code == LT);
978 return (GET_MODE (XEXP (op, 0)) == CCXmode);
981 /* Nonzero if OP is a comparison operator suitable for use in v9
982 conditional move or branch on register contents instructions. */
985 v9_regcmp_op (register rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
987 enum rtx_code code = GET_CODE (op);
989 if (GET_RTX_CLASS (code) != '<')
992 return v9_regcmp_p (code);
995 /* Return 1 if this is a SIGN_EXTEND or ZERO_EXTEND operation. */
998 extend_op (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1000 return GET_CODE (op) == SIGN_EXTEND || GET_CODE (op) == ZERO_EXTEND;
1003 /* Return nonzero if OP is an operator of mode MODE which can set
1004 the condition codes explicitly. We do not include PLUS and MINUS
1005 because these require CC_NOOVmode, which we handle explicitly. */
1008 cc_arithop (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1010 if (GET_CODE (op) == AND
1011 || GET_CODE (op) == IOR
1012 || GET_CODE (op) == XOR)
1018 /* Return nonzero if OP is an operator of mode MODE which can bitwise
1019 complement its second operand and set the condition codes explicitly. */
1022 cc_arithopn (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1024 /* XOR is not here because combine canonicalizes (xor (not ...) ...)
1025 and (xor ... (not ...)) to (not (xor ...)). */
1026 return (GET_CODE (op) == AND
1027 || GET_CODE (op) == IOR);
1030 /* Return true if OP is a register, or is a CONST_INT that can fit in a
1031 signed 13 bit immediate field. This is an acceptable SImode operand for
1032 most 3 address instructions. */
1035 arith_operand (rtx op, enum machine_mode mode)
1037 if (register_operand (op, mode))
1039 if (GET_CODE (op) != CONST_INT)
1041 return SMALL_INT32 (op);
1044 /* Return true if OP is a constant 4096 */
1047 arith_4096_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1049 if (GET_CODE (op) != CONST_INT)
1052 return INTVAL (op) == 4096;
1055 /* Return true if OP is suitable as second operand for add/sub */
1058 arith_add_operand (rtx op, enum machine_mode mode)
1060 return arith_operand (op, mode) || arith_4096_operand (op, mode);
1063 /* Return true if OP is a CONST_INT or a CONST_DOUBLE which can fit in the
1064 immediate field of OR and XOR instructions. Used for 64-bit
1065 constant formation patterns. */
1067 const64_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1069 return ((GET_CODE (op) == CONST_INT
1070 && SPARC_SIMM13_P (INTVAL (op)))
1071 #if HOST_BITS_PER_WIDE_INT != 64
1072 || (GET_CODE (op) == CONST_DOUBLE
1073 && SPARC_SIMM13_P (CONST_DOUBLE_LOW (op))
1074 && (CONST_DOUBLE_HIGH (op) ==
1075 ((CONST_DOUBLE_LOW (op) & 0x80000000) != 0 ?
1076 (HOST_WIDE_INT)-1 : 0)))
1081 /* The same, but only for sethi instructions. */
1083 const64_high_operand (rtx op, enum machine_mode mode)
1085 return ((GET_CODE (op) == CONST_INT
1086 && (INTVAL (op) & ~(HOST_WIDE_INT)0x3ff) != 0
1087 && SPARC_SETHI_P (INTVAL (op) & GET_MODE_MASK (mode))
1089 || (GET_CODE (op) == CONST_DOUBLE
1090 && CONST_DOUBLE_HIGH (op) == 0
1091 && (CONST_DOUBLE_LOW (op) & ~(HOST_WIDE_INT)0x3ff) != 0
1092 && SPARC_SETHI_P (CONST_DOUBLE_LOW (op))));
1095 /* Return true if OP is a register, or is a CONST_INT that can fit in a
1096 signed 11 bit immediate field. This is an acceptable SImode operand for
1097 the movcc instructions. */
1100 arith11_operand (rtx op, enum machine_mode mode)
1102 return (register_operand (op, mode)
1103 || (GET_CODE (op) == CONST_INT && SPARC_SIMM11_P (INTVAL (op))));
1106 /* Return true if OP is a register, or is a CONST_INT that can fit in a
1107 signed 10 bit immediate field. This is an acceptable SImode operand for
1108 the movrcc instructions. */
1111 arith10_operand (rtx op, enum machine_mode mode)
1113 return (register_operand (op, mode)
1114 || (GET_CODE (op) == CONST_INT && SPARC_SIMM10_P (INTVAL (op))));
1117 /* Return true if OP is a register, is a CONST_INT that fits in a 13 bit
1118 immediate field, or is a CONST_DOUBLE whose both parts fit in a 13 bit
1120 v9: Return true if OP is a register, or is a CONST_INT or CONST_DOUBLE that
1121 can fit in a 13 bit immediate field. This is an acceptable DImode operand
1122 for most 3 address instructions. */
1125 arith_double_operand (rtx op, enum machine_mode mode)
1127 return (register_operand (op, mode)
1128 || (GET_CODE (op) == CONST_INT && SMALL_INT (op))
1130 && GET_CODE (op) == CONST_DOUBLE
1131 && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
1132 && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_HIGH (op) + 0x1000) < 0x2000)
1134 && GET_CODE (op) == CONST_DOUBLE
1135 && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
1136 && ((CONST_DOUBLE_HIGH (op) == -1
1137 && (CONST_DOUBLE_LOW (op) & 0x1000) == 0x1000)
1138 || (CONST_DOUBLE_HIGH (op) == 0
1139 && (CONST_DOUBLE_LOW (op) & 0x1000) == 0))));
1142 /* Return true if OP is a constant 4096 for DImode on ARCH64 */
1145 arith_double_4096_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1147 return (TARGET_ARCH64 &&
1148 ((GET_CODE (op) == CONST_INT && INTVAL (op) == 4096) ||
1149 (GET_CODE (op) == CONST_DOUBLE &&
1150 CONST_DOUBLE_LOW (op) == 4096 &&
1151 CONST_DOUBLE_HIGH (op) == 0)));
1154 /* Return true if OP is suitable as second operand for add/sub in DImode */
1157 arith_double_add_operand (rtx op, enum machine_mode mode)
1159 return arith_double_operand (op, mode) || arith_double_4096_operand (op, mode);
1162 /* Return true if OP is a register, or is a CONST_INT or CONST_DOUBLE that
1163 can fit in an 11 bit immediate field. This is an acceptable DImode
1164 operand for the movcc instructions. */
1165 /* ??? Replace with arith11_operand? */
1168 arith11_double_operand (rtx op, enum machine_mode mode)
1170 return (register_operand (op, mode)
1171 || (GET_CODE (op) == CONST_DOUBLE
1172 && (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
1173 && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x400) < 0x800
1174 && ((CONST_DOUBLE_HIGH (op) == -1
1175 && (CONST_DOUBLE_LOW (op) & 0x400) == 0x400)
1176 || (CONST_DOUBLE_HIGH (op) == 0
1177 && (CONST_DOUBLE_LOW (op) & 0x400) == 0)))
1178 || (GET_CODE (op) == CONST_INT
1179 && (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
1180 && (unsigned HOST_WIDE_INT) (INTVAL (op) + 0x400) < 0x800));
1183 /* Return true if OP is a register, or is a CONST_INT or CONST_DOUBLE that
1184 can fit in an 10 bit immediate field. This is an acceptable DImode
1185 operand for the movrcc instructions. */
1186 /* ??? Replace with arith10_operand? */
1189 arith10_double_operand (rtx op, enum machine_mode mode)
1191 return (register_operand (op, mode)
1192 || (GET_CODE (op) == CONST_DOUBLE
1193 && (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
1194 && (unsigned) (CONST_DOUBLE_LOW (op) + 0x200) < 0x400
1195 && ((CONST_DOUBLE_HIGH (op) == -1
1196 && (CONST_DOUBLE_LOW (op) & 0x200) == 0x200)
1197 || (CONST_DOUBLE_HIGH (op) == 0
1198 && (CONST_DOUBLE_LOW (op) & 0x200) == 0)))
1199 || (GET_CODE (op) == CONST_INT
1200 && (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
1201 && (unsigned HOST_WIDE_INT) (INTVAL (op) + 0x200) < 0x400));
1204 /* Return truth value of whether OP is an integer which fits the
1205 range constraining immediate operands in most three-address insns,
1206 which have a 13 bit immediate field. */
1209 small_int (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1211 return (GET_CODE (op) == CONST_INT && SMALL_INT (op));
1215 small_int_or_double (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1217 return ((GET_CODE (op) == CONST_INT && SMALL_INT (op))
1218 || (GET_CODE (op) == CONST_DOUBLE
1219 && CONST_DOUBLE_HIGH (op) == 0
1220 && SPARC_SIMM13_P (CONST_DOUBLE_LOW (op))));
1223 /* Recognize operand values for the umul instruction. That instruction sign
1224 extends immediate values just like all other sparc instructions, but
1225 interprets the extended result as an unsigned number. */
1228 uns_small_int (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1230 #if HOST_BITS_PER_WIDE_INT > 32
1231 /* All allowed constants will fit a CONST_INT. */
1232 return (GET_CODE (op) == CONST_INT
1233 && ((INTVAL (op) >= 0 && INTVAL (op) < 0x1000)
1234 || (INTVAL (op) >= 0xFFFFF000
1235 && INTVAL (op) <= 0xFFFFFFFF)));
1237 return ((GET_CODE (op) == CONST_INT && (unsigned) INTVAL (op) < 0x1000)
1238 || (GET_CODE (op) == CONST_DOUBLE
1239 && CONST_DOUBLE_HIGH (op) == 0
1240 && (unsigned) CONST_DOUBLE_LOW (op) - 0xFFFFF000 < 0x1000));
1245 uns_arith_operand (rtx op, enum machine_mode mode)
1247 return register_operand (op, mode) || uns_small_int (op, mode);
1250 /* Return truth value of statement that OP is a call-clobbered register. */
1252 clobbered_register (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
1254 return (GET_CODE (op) == REG && call_used_regs[REGNO (op)]);
1257 /* Return 1 if OP is a valid operand for the source of a move insn. */
1260 input_operand (rtx op, enum machine_mode mode)
1262 /* If both modes are non-void they must be the same. */
1263 if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
1266 /* Accept CONSTANT_P_RTX, since it will be gone by CSE1 and result in 0/1. */
1267 if (GET_CODE (op) == CONSTANT_P_RTX)
1270 /* Allow any one instruction integer constant, and all CONST_INT
1271 variants when we are working in DImode and !arch64. */
1272 if (GET_MODE_CLASS (mode) == MODE_INT
1273 && ((GET_CODE (op) == CONST_INT
1274 && (SPARC_SETHI_P (INTVAL (op) & GET_MODE_MASK (mode))
1275 || SPARC_SIMM13_P (INTVAL (op))
1277 && ! TARGET_ARCH64)))
1279 && GET_CODE (op) == CONST_DOUBLE
1280 && ((CONST_DOUBLE_HIGH (op) == 0
1281 && SPARC_SETHI_P (CONST_DOUBLE_LOW (op)))
1283 #if HOST_BITS_PER_WIDE_INT == 64
1284 (CONST_DOUBLE_HIGH (op) == 0
1285 && SPARC_SIMM13_P (CONST_DOUBLE_LOW (op)))
1287 (SPARC_SIMM13_P (CONST_DOUBLE_LOW (op))
1288 && (((CONST_DOUBLE_LOW (op) & 0x80000000) == 0
1289 && CONST_DOUBLE_HIGH (op) == 0)
1290 || (CONST_DOUBLE_HIGH (op) == -1
1291 && CONST_DOUBLE_LOW (op) & 0x80000000) != 0))
1296 /* If !arch64 and this is a DImode const, allow it so that
1297 the splits can be generated. */
1300 && GET_CODE (op) == CONST_DOUBLE)
1303 if (register_operand (op, mode))
1306 if (GET_MODE_CLASS (mode) == MODE_FLOAT
1307 && GET_CODE (op) == CONST_DOUBLE)
1310 /* If this is a SUBREG, look inside so that we handle
1311 paradoxical ones. */
1312 if (GET_CODE (op) == SUBREG)
1313 op = SUBREG_REG (op);
1315 /* Check for valid MEM forms. */
1316 if (GET_CODE (op) == MEM)
1318 rtx inside = XEXP (op, 0);
1320 if (GET_CODE (inside) == LO_SUM)
1322 /* We can't allow these because all of the splits
1323 (eventually as they trickle down into DFmode
1324 splits) require offsettable memory references. */
1326 && GET_MODE (op) == TFmode)
1329 return (register_operand (XEXP (inside, 0), Pmode)
1330 && CONSTANT_P (XEXP (inside, 1)));
1332 return memory_address_p (mode, inside);
1339 /* We know it can't be done in one insn when we get here,
1340 the movsi expander guarantees this. */
1342 sparc_emit_set_const32 (rtx op0, rtx op1)
1344 enum machine_mode mode = GET_MODE (op0);
1347 if (GET_CODE (op1) == CONST_INT)
1349 HOST_WIDE_INT value = INTVAL (op1);
1351 if (SPARC_SETHI_P (value & GET_MODE_MASK (mode))
1352 || SPARC_SIMM13_P (value))
1356 /* Full 2-insn decomposition is needed. */
1357 if (reload_in_progress || reload_completed)
1360 temp = gen_reg_rtx (mode);
1362 if (GET_CODE (op1) == CONST_INT)
1364 /* Emit them as real moves instead of a HIGH/LO_SUM,
1365 this way CSE can see everything and reuse intermediate
1366 values if it wants. */
1368 && HOST_BITS_PER_WIDE_INT != 64
1369 && (INTVAL (op1) & 0x80000000) != 0)
1370 emit_insn (gen_rtx_SET
1372 immed_double_const (INTVAL (op1) & ~(HOST_WIDE_INT)0x3ff,
1375 emit_insn (gen_rtx_SET (VOIDmode, temp,
1376 GEN_INT (INTVAL (op1)
1377 & ~(HOST_WIDE_INT)0x3ff)));
1379 emit_insn (gen_rtx_SET (VOIDmode,
1381 gen_rtx_IOR (mode, temp,
1382 GEN_INT (INTVAL (op1) & 0x3ff))));
1386 /* A symbol, emit in the traditional way. */
1387 emit_insn (gen_rtx_SET (VOIDmode, temp,
1388 gen_rtx_HIGH (mode, op1)));
1389 emit_insn (gen_rtx_SET (VOIDmode,
1390 op0, gen_rtx_LO_SUM (mode, temp, op1)));
1396 /* SPARC-v9 code-model support. */
1398 sparc_emit_set_symbolic_const64 (rtx op0, rtx op1, rtx temp1)
1402 if (temp1 && GET_MODE (temp1) == TImode)
1405 temp1 = gen_rtx_REG (DImode, REGNO (temp1));
1408 switch (sparc_cmodel)
1411 /* The range spanned by all instructions in the object is less
1412 than 2^31 bytes (2GB) and the distance from any instruction
1413 to the location of the label _GLOBAL_OFFSET_TABLE_ is less
1414 than 2^31 bytes (2GB).
1416 The executable must be in the low 4TB of the virtual address
1419 sethi %hi(symbol), %temp
1420 or %temp, %lo(symbol), %reg */
1421 emit_insn (gen_rtx_SET (VOIDmode, temp1, gen_rtx_HIGH (DImode, op1)));
1422 emit_insn (gen_rtx_SET (VOIDmode, op0, gen_rtx_LO_SUM (DImode, temp1, op1)));
1426 /* The range spanned by all instructions in the object is less
1427 than 2^31 bytes (2GB) and the distance from any instruction
1428 to the location of the label _GLOBAL_OFFSET_TABLE_ is less
1429 than 2^31 bytes (2GB).
1431 The executable must be in the low 16TB of the virtual address
1434 sethi %h44(symbol), %temp1
1435 or %temp1, %m44(symbol), %temp2
1436 sllx %temp2, 12, %temp3
1437 or %temp3, %l44(symbol), %reg */
1438 emit_insn (gen_seth44 (op0, op1));
1439 emit_insn (gen_setm44 (op0, op0, op1));
1440 emit_insn (gen_rtx_SET (VOIDmode, temp1,
1441 gen_rtx_ASHIFT (DImode, op0, GEN_INT (12))));
1442 emit_insn (gen_setl44 (op0, temp1, op1));
1446 /* The range spanned by all instructions in the object is less
1447 than 2^31 bytes (2GB) and the distance from any instruction
1448 to the location of the label _GLOBAL_OFFSET_TABLE_ is less
1449 than 2^31 bytes (2GB).
1451 The executable can be placed anywhere in the virtual address
1454 sethi %hh(symbol), %temp1
1455 sethi %lm(symbol), %temp2
1456 or %temp1, %hm(symbol), %temp3
1457 or %temp2, %lo(symbol), %temp4
1458 sllx %temp3, 32, %temp5
1459 or %temp4, %temp5, %reg */
1461 /* It is possible that one of the registers we got for operands[2]
1462 might coincide with that of operands[0] (which is why we made
1463 it TImode). Pick the other one to use as our scratch. */
1464 if (rtx_equal_p (temp1, op0))
1467 temp1 = gen_rtx_REG (DImode, REGNO (temp1) + 1);
1472 emit_insn (gen_sethh (op0, op1));
1473 emit_insn (gen_setlm (temp1, op1));
1474 emit_insn (gen_sethm (op0, op0, op1));
1475 emit_insn (gen_rtx_SET (VOIDmode, op0,
1476 gen_rtx_ASHIFT (DImode, op0, GEN_INT (32))));
1477 emit_insn (gen_rtx_SET (VOIDmode, op0,
1478 gen_rtx_PLUS (DImode, op0, temp1)));
1479 emit_insn (gen_setlo (op0, op0, op1));
1483 /* Old old old backwards compatibility kruft here.
1484 Essentially it is MEDLOW with a fixed 64-bit
1485 virtual base added to all data segment addresses.
1486 Text-segment stuff is computed like MEDANY, we can't
1487 reuse the code above because the relocation knobs
1490 Data segment: sethi %hi(symbol), %temp1
1491 or %temp1, %lo(symbol), %temp2
1492 add %temp2, EMBMEDANY_BASE_REG, %reg
1494 Text segment: sethi %uhi(symbol), %temp1
1495 sethi %hi(symbol), %temp2
1496 or %temp1, %ulo(symbol), %temp3
1497 or %temp2, %lo(symbol), %temp4
1498 sllx %temp3, 32, %temp5
1499 or %temp4, %temp5, %reg */
1500 if (data_segment_operand (op1, GET_MODE (op1)))
1502 emit_insn (gen_embmedany_sethi (temp1, op1));
1503 emit_insn (gen_embmedany_brsum (op0, temp1));
1504 emit_insn (gen_embmedany_losum (op0, op0, op1));
1508 /* It is possible that one of the registers we got for operands[2]
1509 might coincide with that of operands[0] (which is why we made
1510 it TImode). Pick the other one to use as our scratch. */
1511 if (rtx_equal_p (temp1, op0))
1514 temp1 = gen_rtx_REG (DImode, REGNO (temp1) + 1);
1519 emit_insn (gen_embmedany_textuhi (op0, op1));
1520 emit_insn (gen_embmedany_texthi (temp1, op1));
1521 emit_insn (gen_embmedany_textulo (op0, op0, op1));
1522 emit_insn (gen_rtx_SET (VOIDmode, op0,
1523 gen_rtx_ASHIFT (DImode, op0, GEN_INT (32))));
1524 emit_insn (gen_rtx_SET (VOIDmode, op0,
1525 gen_rtx_PLUS (DImode, op0, temp1)));
1526 emit_insn (gen_embmedany_textlo (op0, op0, op1));
1535 /* These avoid problems when cross compiling. If we do not
1536 go through all this hair then the optimizer will see
1537 invalid REG_EQUAL notes or in some cases none at all. */
1538 static void sparc_emit_set_safe_HIGH64 (rtx, HOST_WIDE_INT);
1539 static rtx gen_safe_SET64 (rtx, HOST_WIDE_INT);
1540 static rtx gen_safe_OR64 (rtx, HOST_WIDE_INT);
1541 static rtx gen_safe_XOR64 (rtx, HOST_WIDE_INT);
1543 #if HOST_BITS_PER_WIDE_INT == 64
1544 #define GEN_HIGHINT64(__x) GEN_INT ((__x) & ~(HOST_WIDE_INT)0x3ff)
1545 #define GEN_INT64(__x) GEN_INT (__x)
1547 #define GEN_HIGHINT64(__x) \
1548 immed_double_const ((__x) & ~(HOST_WIDE_INT)0x3ff, 0, DImode)
1549 #define GEN_INT64(__x) \
1550 immed_double_const ((__x) & 0xffffffff, \
1551 ((__x) & 0x80000000 ? -1 : 0), DImode)
1554 /* The optimizer is not to assume anything about exactly
1555 which bits are set for a HIGH, they are unspecified.
1556 Unfortunately this leads to many missed optimizations
1557 during CSE. We mask out the non-HIGH bits, and matches
1558 a plain movdi, to alleviate this problem. */
1560 sparc_emit_set_safe_HIGH64 (rtx dest, HOST_WIDE_INT val)
1562 emit_insn (gen_rtx_SET (VOIDmode, dest, GEN_HIGHINT64 (val)));
1566 gen_safe_SET64 (rtx dest, HOST_WIDE_INT val)
1568 return gen_rtx_SET (VOIDmode, dest, GEN_INT64 (val));
1572 gen_safe_OR64 (rtx src, HOST_WIDE_INT val)
1574 return gen_rtx_IOR (DImode, src, GEN_INT64 (val));
1578 gen_safe_XOR64 (rtx src, HOST_WIDE_INT val)
1580 return gen_rtx_XOR (DImode, src, GEN_INT64 (val));
1583 /* Worker routines for 64-bit constant formation on arch64.
1584 One of the key things to be doing in these emissions is
1585 to create as many temp REGs as possible. This makes it
1586 possible for half-built constants to be used later when
1587 such values are similar to something required later on.
1588 Without doing this, the optimizer cannot see such
1591 static void sparc_emit_set_const64_quick1 (rtx, rtx,
1592 unsigned HOST_WIDE_INT, int);
1595 sparc_emit_set_const64_quick1 (rtx op0, rtx temp,
1596 unsigned HOST_WIDE_INT low_bits, int is_neg)
1598 unsigned HOST_WIDE_INT high_bits;
1601 high_bits = (~low_bits) & 0xffffffff;
1603 high_bits = low_bits;
1605 sparc_emit_set_safe_HIGH64 (temp, high_bits);
1608 emit_insn (gen_rtx_SET (VOIDmode, op0,
1609 gen_safe_OR64 (temp, (high_bits & 0x3ff))));
1613 /* If we are XOR'ing with -1, then we should emit a one's complement
1614 instead. This way the combiner will notice logical operations
1615 such as ANDN later on and substitute. */
1616 if ((low_bits & 0x3ff) == 0x3ff)
1618 emit_insn (gen_rtx_SET (VOIDmode, op0,
1619 gen_rtx_NOT (DImode, temp)));
1623 emit_insn (gen_rtx_SET (VOIDmode, op0,
1624 gen_safe_XOR64 (temp,
1625 (-(HOST_WIDE_INT)0x400
1626 | (low_bits & 0x3ff)))));
1631 static void sparc_emit_set_const64_quick2 (rtx, rtx, unsigned HOST_WIDE_INT,
1632 unsigned HOST_WIDE_INT, int);
1635 sparc_emit_set_const64_quick2 (rtx op0, rtx temp,
1636 unsigned HOST_WIDE_INT high_bits,
1637 unsigned HOST_WIDE_INT low_immediate,
1642 if ((high_bits & 0xfffffc00) != 0)
1644 sparc_emit_set_safe_HIGH64 (temp, high_bits);
1645 if ((high_bits & ~0xfffffc00) != 0)
1646 emit_insn (gen_rtx_SET (VOIDmode, op0,
1647 gen_safe_OR64 (temp, (high_bits & 0x3ff))));
1653 emit_insn (gen_safe_SET64 (temp, high_bits));
1657 /* Now shift it up into place. */
1658 emit_insn (gen_rtx_SET (VOIDmode, op0,
1659 gen_rtx_ASHIFT (DImode, temp2,
1660 GEN_INT (shift_count))));
1662 /* If there is a low immediate part piece, finish up by
1663 putting that in as well. */
1664 if (low_immediate != 0)
1665 emit_insn (gen_rtx_SET (VOIDmode, op0,
1666 gen_safe_OR64 (op0, low_immediate)));
1669 static void sparc_emit_set_const64_longway (rtx, rtx, unsigned HOST_WIDE_INT,
1670 unsigned HOST_WIDE_INT);
1672 /* Full 64-bit constant decomposition. Even though this is the
1673 'worst' case, we still optimize a few things away. */
1675 sparc_emit_set_const64_longway (rtx op0, rtx temp,
1676 unsigned HOST_WIDE_INT high_bits,
1677 unsigned HOST_WIDE_INT low_bits)
1681 if (reload_in_progress || reload_completed)
1684 sub_temp = gen_reg_rtx (DImode);
1686 if ((high_bits & 0xfffffc00) != 0)
1688 sparc_emit_set_safe_HIGH64 (temp, high_bits);
1689 if ((high_bits & ~0xfffffc00) != 0)
1690 emit_insn (gen_rtx_SET (VOIDmode,
1692 gen_safe_OR64 (temp, (high_bits & 0x3ff))));
1698 emit_insn (gen_safe_SET64 (temp, high_bits));
1702 if (!reload_in_progress && !reload_completed)
1704 rtx temp2 = gen_reg_rtx (DImode);
1705 rtx temp3 = gen_reg_rtx (DImode);
1706 rtx temp4 = gen_reg_rtx (DImode);
1708 emit_insn (gen_rtx_SET (VOIDmode, temp4,
1709 gen_rtx_ASHIFT (DImode, sub_temp,
1712 sparc_emit_set_safe_HIGH64 (temp2, low_bits);
1713 if ((low_bits & ~0xfffffc00) != 0)
1715 emit_insn (gen_rtx_SET (VOIDmode, temp3,
1716 gen_safe_OR64 (temp2, (low_bits & 0x3ff))));
1717 emit_insn (gen_rtx_SET (VOIDmode, op0,
1718 gen_rtx_PLUS (DImode, temp4, temp3)));
1722 emit_insn (gen_rtx_SET (VOIDmode, op0,
1723 gen_rtx_PLUS (DImode, temp4, temp2)));
1728 rtx low1 = GEN_INT ((low_bits >> (32 - 12)) & 0xfff);
1729 rtx low2 = GEN_INT ((low_bits >> (32 - 12 - 12)) & 0xfff);
1730 rtx low3 = GEN_INT ((low_bits >> (32 - 12 - 12 - 8)) & 0x0ff);
1733 /* We are in the middle of reload, so this is really
1734 painful. However we do still make an attempt to
1735 avoid emitting truly stupid code. */
1736 if (low1 != const0_rtx)
1738 emit_insn (gen_rtx_SET (VOIDmode, op0,
1739 gen_rtx_ASHIFT (DImode, sub_temp,
1740 GEN_INT (to_shift))));
1741 emit_insn (gen_rtx_SET (VOIDmode, op0,
1742 gen_rtx_IOR (DImode, op0, low1)));
1750 if (low2 != const0_rtx)
1752 emit_insn (gen_rtx_SET (VOIDmode, op0,
1753 gen_rtx_ASHIFT (DImode, sub_temp,
1754 GEN_INT (to_shift))));
1755 emit_insn (gen_rtx_SET (VOIDmode, op0,
1756 gen_rtx_IOR (DImode, op0, low2)));
1764 emit_insn (gen_rtx_SET (VOIDmode, op0,
1765 gen_rtx_ASHIFT (DImode, sub_temp,
1766 GEN_INT (to_shift))));
1767 if (low3 != const0_rtx)
1768 emit_insn (gen_rtx_SET (VOIDmode, op0,
1769 gen_rtx_IOR (DImode, op0, low3)));
1774 /* Analyze a 64-bit constant for certain properties. */
1775 static void analyze_64bit_constant (unsigned HOST_WIDE_INT,
1776 unsigned HOST_WIDE_INT,
1777 int *, int *, int *);
1780 analyze_64bit_constant (unsigned HOST_WIDE_INT high_bits,
1781 unsigned HOST_WIDE_INT low_bits,
1782 int *hbsp, int *lbsp, int *abbasp)
1784 int lowest_bit_set, highest_bit_set, all_bits_between_are_set;
1787 lowest_bit_set = highest_bit_set = -1;
1791 if ((lowest_bit_set == -1)
1792 && ((low_bits >> i) & 1))
1794 if ((highest_bit_set == -1)
1795 && ((high_bits >> (32 - i - 1)) & 1))
1796 highest_bit_set = (64 - i - 1);
1799 && ((highest_bit_set == -1)
1800 || (lowest_bit_set == -1)));
1806 if ((lowest_bit_set == -1)
1807 && ((high_bits >> i) & 1))
1808 lowest_bit_set = i + 32;
1809 if ((highest_bit_set == -1)
1810 && ((low_bits >> (32 - i - 1)) & 1))
1811 highest_bit_set = 32 - i - 1;
1814 && ((highest_bit_set == -1)
1815 || (lowest_bit_set == -1)));
1817 /* If there are no bits set this should have gone out
1818 as one instruction! */
1819 if (lowest_bit_set == -1
1820 || highest_bit_set == -1)
1822 all_bits_between_are_set = 1;
1823 for (i = lowest_bit_set; i <= highest_bit_set; i++)
1827 if ((low_bits & (1 << i)) != 0)
1832 if ((high_bits & (1 << (i - 32))) != 0)
1835 all_bits_between_are_set = 0;
1838 *hbsp = highest_bit_set;
1839 *lbsp = lowest_bit_set;
1840 *abbasp = all_bits_between_are_set;
1843 static int const64_is_2insns (unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
1846 const64_is_2insns (unsigned HOST_WIDE_INT high_bits,
1847 unsigned HOST_WIDE_INT low_bits)
1849 int highest_bit_set, lowest_bit_set, all_bits_between_are_set;
1852 || high_bits == 0xffffffff)
1855 analyze_64bit_constant (high_bits, low_bits,
1856 &highest_bit_set, &lowest_bit_set,
1857 &all_bits_between_are_set);
1859 if ((highest_bit_set == 63
1860 || lowest_bit_set == 0)
1861 && all_bits_between_are_set != 0)
1864 if ((highest_bit_set - lowest_bit_set) < 21)
1870 static unsigned HOST_WIDE_INT create_simple_focus_bits (unsigned HOST_WIDE_INT,
1871 unsigned HOST_WIDE_INT,
1874 static unsigned HOST_WIDE_INT
1875 create_simple_focus_bits (unsigned HOST_WIDE_INT high_bits,
1876 unsigned HOST_WIDE_INT low_bits,
1877 int lowest_bit_set, int shift)
1879 HOST_WIDE_INT hi, lo;
1881 if (lowest_bit_set < 32)
1883 lo = (low_bits >> lowest_bit_set) << shift;
1884 hi = ((high_bits << (32 - lowest_bit_set)) << shift);
1889 hi = ((high_bits >> (lowest_bit_set - 32)) << shift);
1896 /* Here we are sure to be arch64 and this is an integer constant
1897 being loaded into a register. Emit the most efficient
1898 insn sequence possible. Detection of all the 1-insn cases
1899 has been done already. */
1901 sparc_emit_set_const64 (rtx op0, rtx op1)
1903 unsigned HOST_WIDE_INT high_bits, low_bits;
1904 int lowest_bit_set, highest_bit_set;
1905 int all_bits_between_are_set;
1908 /* Sanity check that we know what we are working with. */
1909 if (! TARGET_ARCH64)
1912 if (GET_CODE (op0) != SUBREG)
1914 if (GET_CODE (op0) != REG
1915 || (REGNO (op0) >= SPARC_FIRST_FP_REG
1916 && REGNO (op0) <= SPARC_LAST_V9_FP_REG))
1920 if (reload_in_progress || reload_completed)
1923 temp = gen_reg_rtx (DImode);
1925 if (GET_CODE (op1) != CONST_DOUBLE
1926 && GET_CODE (op1) != CONST_INT)
1928 sparc_emit_set_symbolic_const64 (op0, op1, temp);
1932 if (GET_CODE (op1) == CONST_DOUBLE)
1934 #if HOST_BITS_PER_WIDE_INT == 64
1935 high_bits = (CONST_DOUBLE_LOW (op1) >> 32) & 0xffffffff;
1936 low_bits = CONST_DOUBLE_LOW (op1) & 0xffffffff;
1938 high_bits = CONST_DOUBLE_HIGH (op1);
1939 low_bits = CONST_DOUBLE_LOW (op1);
1944 #if HOST_BITS_PER_WIDE_INT == 64
1945 high_bits = ((INTVAL (op1) >> 32) & 0xffffffff);
1946 low_bits = (INTVAL (op1) & 0xffffffff);
1948 high_bits = ((INTVAL (op1) < 0) ?
1951 low_bits = INTVAL (op1);
1955 /* low_bits bits 0 --> 31
1956 high_bits bits 32 --> 63 */
1958 analyze_64bit_constant (high_bits, low_bits,
1959 &highest_bit_set, &lowest_bit_set,
1960 &all_bits_between_are_set);
1962 /* First try for a 2-insn sequence. */
1964 /* These situations are preferred because the optimizer can
1965 * do more things with them:
1967 * sllx %reg, shift, %reg
1969 * srlx %reg, shift, %reg
1970 * 3) mov some_small_const, %reg
1971 * sllx %reg, shift, %reg
1973 if (((highest_bit_set == 63
1974 || lowest_bit_set == 0)
1975 && all_bits_between_are_set != 0)
1976 || ((highest_bit_set - lowest_bit_set) < 12))
1978 HOST_WIDE_INT the_const = -1;
1979 int shift = lowest_bit_set;
1981 if ((highest_bit_set != 63
1982 && lowest_bit_set != 0)
1983 || all_bits_between_are_set == 0)
1986 create_simple_focus_bits (high_bits, low_bits,
1989 else if (lowest_bit_set == 0)
1990 shift = -(63 - highest_bit_set);
1992 if (! SPARC_SIMM13_P (the_const))
1995 emit_insn (gen_safe_SET64 (temp, the_const));
1997 emit_insn (gen_rtx_SET (VOIDmode,
1999 gen_rtx_ASHIFT (DImode,
2003 emit_insn (gen_rtx_SET (VOIDmode,
2005 gen_rtx_LSHIFTRT (DImode,
2007 GEN_INT (-shift))));
2013 /* Now a range of 22 or less bits set somewhere.
2014 * 1) sethi %hi(focus_bits), %reg
2015 * sllx %reg, shift, %reg
2016 * 2) sethi %hi(focus_bits), %reg
2017 * srlx %reg, shift, %reg
2019 if ((highest_bit_set - lowest_bit_set) < 21)
2021 unsigned HOST_WIDE_INT focus_bits =
2022 create_simple_focus_bits (high_bits, low_bits,
2023 lowest_bit_set, 10);
2025 if (! SPARC_SETHI_P (focus_bits))
2028 sparc_emit_set_safe_HIGH64 (temp, focus_bits);
2030 /* If lowest_bit_set == 10 then a sethi alone could have done it. */
2031 if (lowest_bit_set < 10)
2032 emit_insn (gen_rtx_SET (VOIDmode,
2034 gen_rtx_LSHIFTRT (DImode, temp,
2035 GEN_INT (10 - lowest_bit_set))));
2036 else if (lowest_bit_set > 10)
2037 emit_insn (gen_rtx_SET (VOIDmode,
2039 gen_rtx_ASHIFT (DImode, temp,
2040 GEN_INT (lowest_bit_set - 10))));
2046 /* 1) sethi %hi(low_bits), %reg
2047 * or %reg, %lo(low_bits), %reg
2048 * 2) sethi %hi(~low_bits), %reg
2049 * xor %reg, %lo(-0x400 | (low_bits & 0x3ff)), %reg
2052 || high_bits == 0xffffffff)
2054 sparc_emit_set_const64_quick1 (op0, temp, low_bits,
2055 (high_bits == 0xffffffff));
2059 /* Now, try 3-insn sequences. */
2061 /* 1) sethi %hi(high_bits), %reg
2062 * or %reg, %lo(high_bits), %reg
2063 * sllx %reg, 32, %reg
2067 sparc_emit_set_const64_quick2 (op0, temp, high_bits, 0, 32);
2071 /* We may be able to do something quick
2072 when the constant is negated, so try that. */
2073 if (const64_is_2insns ((~high_bits) & 0xffffffff,
2074 (~low_bits) & 0xfffffc00))
2076 /* NOTE: The trailing bits get XOR'd so we need the
2077 non-negated bits, not the negated ones. */
2078 unsigned HOST_WIDE_INT trailing_bits = low_bits & 0x3ff;
2080 if ((((~high_bits) & 0xffffffff) == 0
2081 && ((~low_bits) & 0x80000000) == 0)
2082 || (((~high_bits) & 0xffffffff) == 0xffffffff
2083 && ((~low_bits) & 0x80000000) != 0))
2085 int fast_int = (~low_bits & 0xffffffff);
2087 if ((SPARC_SETHI_P (fast_int)
2088 && (~high_bits & 0xffffffff) == 0)
2089 || SPARC_SIMM13_P (fast_int))
2090 emit_insn (gen_safe_SET64 (temp, fast_int));
2092 sparc_emit_set_const64 (temp, GEN_INT64 (fast_int));
2097 #if HOST_BITS_PER_WIDE_INT == 64
2098 negated_const = GEN_INT (((~low_bits) & 0xfffffc00) |
2099 (((HOST_WIDE_INT)((~high_bits) & 0xffffffff))<<32));
2101 negated_const = immed_double_const ((~low_bits) & 0xfffffc00,
2102 (~high_bits) & 0xffffffff,
2105 sparc_emit_set_const64 (temp, negated_const);
2108 /* If we are XOR'ing with -1, then we should emit a one's complement
2109 instead. This way the combiner will notice logical operations
2110 such as ANDN later on and substitute. */
2111 if (trailing_bits == 0x3ff)
2113 emit_insn (gen_rtx_SET (VOIDmode, op0,
2114 gen_rtx_NOT (DImode, temp)));
2118 emit_insn (gen_rtx_SET (VOIDmode,
2120 gen_safe_XOR64 (temp,
2121 (-0x400 | trailing_bits))));
2126 /* 1) sethi %hi(xxx), %reg
2127 * or %reg, %lo(xxx), %reg
2128 * sllx %reg, yyy, %reg
2130 * ??? This is just a generalized version of the low_bits==0
2131 * thing above, FIXME...
2133 if ((highest_bit_set - lowest_bit_set) < 32)
2135 unsigned HOST_WIDE_INT focus_bits =
2136 create_simple_focus_bits (high_bits, low_bits,
2139 /* We can't get here in this state. */
2140 if (highest_bit_set < 32
2141 || lowest_bit_set >= 32)
2144 /* So what we know is that the set bits straddle the
2145 middle of the 64-bit word. */
2146 sparc_emit_set_const64_quick2 (op0, temp,
2152 /* 1) sethi %hi(high_bits), %reg
2153 * or %reg, %lo(high_bits), %reg
2154 * sllx %reg, 32, %reg
2155 * or %reg, low_bits, %reg
2157 if (SPARC_SIMM13_P(low_bits)
2158 && ((int)low_bits > 0))
2160 sparc_emit_set_const64_quick2 (op0, temp, high_bits, low_bits, 32);
2164 /* The easiest way when all else fails, is full decomposition. */
2166 printf ("sparc_emit_set_const64: Hard constant [%08lx%08lx] neg[%08lx%08lx]\n",
2167 high_bits, low_bits, ~high_bits, ~low_bits);
2169 sparc_emit_set_const64_longway (op0, temp, high_bits, low_bits);
2172 /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
2173 return the mode to be used for the comparison. For floating-point,
2174 CCFP[E]mode is used. CC_NOOVmode should be used when the first operand
2175 is a PLUS, MINUS, NEG, or ASHIFT. CCmode should be used when no special
2176 processing is needed. */
2179 select_cc_mode (enum rtx_code op, rtx x, rtx y ATTRIBUTE_UNUSED)
2181 if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
2207 else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS
2208 || GET_CODE (x) == NEG || GET_CODE (x) == ASHIFT)
2210 if (TARGET_ARCH64 && GET_MODE (x) == DImode)
2211 return CCX_NOOVmode;
2217 if (TARGET_ARCH64 && GET_MODE (x) == DImode)
2224 /* X and Y are two things to compare using CODE. Emit the compare insn and
2225 return the rtx for the cc reg in the proper mode. */
2228 gen_compare_reg (enum rtx_code code, rtx x, rtx y)
2230 enum machine_mode mode = SELECT_CC_MODE (code, x, y);
2233 /* ??? We don't have movcc patterns so we cannot generate pseudo regs for the
2234 fcc regs (cse can't tell they're really call clobbered regs and will
2235 remove a duplicate comparison even if there is an intervening function
2236 call - it will then try to reload the cc reg via an int reg which is why
2237 we need the movcc patterns). It is possible to provide the movcc
2238 patterns by using the ldxfsr/stxfsr v9 insns. I tried it: you need two
2239 registers (say %g1,%g5) and it takes about 6 insns. A better fix would be
2240 to tell cse that CCFPE mode registers (even pseudos) are call
2243 /* ??? This is an experiment. Rather than making changes to cse which may
2244 or may not be easy/clean, we do our own cse. This is possible because
2245 we will generate hard registers. Cse knows they're call clobbered (it
2246 doesn't know the same thing about pseudos). If we guess wrong, no big
2247 deal, but if we win, great! */
2249 if (TARGET_V9 && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
2250 #if 1 /* experiment */
2253 /* We cycle through the registers to ensure they're all exercised. */
2254 static int next_fcc_reg = 0;
2255 /* Previous x,y for each fcc reg. */
2256 static rtx prev_args[4][2];
2258 /* Scan prev_args for x,y. */
2259 for (reg = 0; reg < 4; reg++)
2260 if (prev_args[reg][0] == x && prev_args[reg][1] == y)
2265 prev_args[reg][0] = x;
2266 prev_args[reg][1] = y;
2267 next_fcc_reg = (next_fcc_reg + 1) & 3;
2269 cc_reg = gen_rtx_REG (mode, reg + SPARC_FIRST_V9_FCC_REG);
2272 cc_reg = gen_reg_rtx (mode);
2273 #endif /* ! experiment */
2274 else if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
2275 cc_reg = gen_rtx_REG (mode, SPARC_FCC_REG);
2277 cc_reg = gen_rtx_REG (mode, SPARC_ICC_REG);
2279 emit_insn (gen_rtx_SET (VOIDmode, cc_reg,
2280 gen_rtx_COMPARE (mode, x, y)));
2285 /* This function is used for v9 only.
2286 CODE is the code for an Scc's comparison.
2287 OPERANDS[0] is the target of the Scc insn.
2288 OPERANDS[1] is the value we compare against const0_rtx (which hasn't
2289 been generated yet).
2291 This function is needed to turn
2294 (gt (reg:CCX 100 %icc)
2298 (gt:DI (reg:CCX 100 %icc)
2301 IE: The instruction recognizer needs to see the mode of the comparison to
2302 find the right instruction. We could use "gt:DI" right in the
2303 define_expand, but leaving it out allows us to handle DI, SI, etc.
2305 We refer to the global sparc compare operands sparc_compare_op0 and
2306 sparc_compare_op1. */
2309 gen_v9_scc (enum rtx_code compare_code, register rtx *operands)
2314 && (GET_MODE (sparc_compare_op0) == DImode
2315 || GET_MODE (operands[0]) == DImode))
2318 op0 = sparc_compare_op0;
2319 op1 = sparc_compare_op1;
2321 /* Try to use the movrCC insns. */
2323 && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
2324 && op1 == const0_rtx
2325 && v9_regcmp_p (compare_code))
2327 /* Special case for op0 != 0. This can be done with one instruction if
2328 operands[0] == sparc_compare_op0. */
2330 if (compare_code == NE
2331 && GET_MODE (operands[0]) == DImode
2332 && rtx_equal_p (op0, operands[0]))
2334 emit_insn (gen_rtx_SET (VOIDmode, operands[0],
2335 gen_rtx_IF_THEN_ELSE (DImode,
2336 gen_rtx_fmt_ee (compare_code, DImode,
2343 if (reg_overlap_mentioned_p (operands[0], op0))
2345 /* Handle the case where operands[0] == sparc_compare_op0.
2346 We "early clobber" the result. */
2347 op0 = gen_reg_rtx (GET_MODE (sparc_compare_op0));
2348 emit_move_insn (op0, sparc_compare_op0);
2351 emit_insn (gen_rtx_SET (VOIDmode, operands[0], const0_rtx));
2352 if (GET_MODE (op0) != DImode)
2354 temp = gen_reg_rtx (DImode);
2355 convert_move (temp, op0, 0);
2359 emit_insn (gen_rtx_SET (VOIDmode, operands[0],
2360 gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]),
2361 gen_rtx_fmt_ee (compare_code, DImode,
2369 operands[1] = gen_compare_reg (compare_code, op0, op1);
2371 switch (GET_MODE (operands[1]))
2381 emit_insn (gen_rtx_SET (VOIDmode, operands[0], const0_rtx));
2382 emit_insn (gen_rtx_SET (VOIDmode, operands[0],
2383 gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]),
2384 gen_rtx_fmt_ee (compare_code,
2385 GET_MODE (operands[1]),
2386 operands[1], const0_rtx),
2387 const1_rtx, operands[0])));
2392 /* Emit a conditional jump insn for the v9 architecture using comparison code
2393 CODE and jump target LABEL.
2394 This function exists to take advantage of the v9 brxx insns. */
2397 emit_v9_brxx_insn (enum rtx_code code, rtx op0, rtx label)
2399 emit_jump_insn (gen_rtx_SET (VOIDmode,
2401 gen_rtx_IF_THEN_ELSE (VOIDmode,
2402 gen_rtx_fmt_ee (code, GET_MODE (op0),
2404 gen_rtx_LABEL_REF (VOIDmode, label),
2408 /* Generate a DFmode part of a hard TFmode register.
2409 REG is the TFmode hard register, LOW is 1 for the
2410 low 64bit of the register and 0 otherwise.
2413 gen_df_reg (rtx reg, int low)
2415 int regno = REGNO (reg);
2417 if ((WORDS_BIG_ENDIAN == 0) ^ (low != 0))
2418 regno += (TARGET_ARCH64 && regno < 32) ? 1 : 2;
2419 return gen_rtx_REG (DFmode, regno);
2422 /* Generate a call to FUNC with OPERANDS. Operand 0 is the return value.
2423 Unlike normal calls, TFmode operands are passed by reference. It is
2424 assumed that no more than 3 operands are required. */
2427 emit_soft_tfmode_libcall (const char *func_name, int nargs, rtx *operands)
2429 rtx ret_slot = NULL, arg[3], func_sym;
2432 /* We only expect to be called for conversions, unary, and binary ops. */
2433 if (nargs < 2 || nargs > 3)
2436 for (i = 0; i < nargs; ++i)
2438 rtx this_arg = operands[i];
2441 /* TFmode arguments and return values are passed by reference. */
2442 if (GET_MODE (this_arg) == TFmode)
2444 int force_stack_temp;
2446 force_stack_temp = 0;
2447 if (TARGET_BUGGY_QP_LIB && i == 0)
2448 force_stack_temp = 1;
2450 if (GET_CODE (this_arg) == MEM
2451 && ! force_stack_temp)
2452 this_arg = XEXP (this_arg, 0);
2453 else if (CONSTANT_P (this_arg)
2454 && ! force_stack_temp)
2456 this_slot = force_const_mem (TFmode, this_arg);
2457 this_arg = XEXP (this_slot, 0);
2461 this_slot = assign_stack_temp (TFmode, GET_MODE_SIZE (TFmode), 0);
2463 /* Operand 0 is the return value. We'll copy it out later. */
2465 emit_move_insn (this_slot, this_arg);
2467 ret_slot = this_slot;
2469 this_arg = XEXP (this_slot, 0);
2476 func_sym = gen_rtx_SYMBOL_REF (Pmode, func_name);
2478 if (GET_MODE (operands[0]) == TFmode)
2481 emit_library_call (func_sym, LCT_NORMAL, VOIDmode, 2,
2482 arg[0], GET_MODE (arg[0]),
2483 arg[1], GET_MODE (arg[1]));
2485 emit_library_call (func_sym, LCT_NORMAL, VOIDmode, 3,
2486 arg[0], GET_MODE (arg[0]),
2487 arg[1], GET_MODE (arg[1]),
2488 arg[2], GET_MODE (arg[2]));
2491 emit_move_insn (operands[0], ret_slot);
2500 ret = emit_library_call_value (func_sym, operands[0], LCT_NORMAL,
2501 GET_MODE (operands[0]), 1,
2502 arg[1], GET_MODE (arg[1]));
2504 if (ret != operands[0])
2505 emit_move_insn (operands[0], ret);
2509 /* Expand soft-float TFmode calls to sparc abi routines. */
2512 emit_soft_tfmode_binop (enum rtx_code code, rtx *operands)
2534 emit_soft_tfmode_libcall (func, 3, operands);
2538 emit_soft_tfmode_unop (enum rtx_code code, rtx *operands)
2551 emit_soft_tfmode_libcall (func, 2, operands);
2555 emit_soft_tfmode_cvt (enum rtx_code code, rtx *operands)
2562 switch (GET_MODE (operands[1]))
2575 case FLOAT_TRUNCATE:
2576 switch (GET_MODE (operands[0]))
2590 switch (GET_MODE (operands[1]))
2603 case UNSIGNED_FLOAT:
2604 switch (GET_MODE (operands[1]))
2618 switch (GET_MODE (operands[0]))
2632 switch (GET_MODE (operands[0]))
2649 emit_soft_tfmode_libcall (func, 2, operands);
2652 /* Expand a hard-float tfmode operation. All arguments must be in
2656 emit_hard_tfmode_operation (enum rtx_code code, rtx *operands)
2660 if (GET_RTX_CLASS (code) == '1')
2662 operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
2663 op = gen_rtx_fmt_e (code, GET_MODE (operands[0]), operands[1]);
2667 operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
2668 operands[2] = force_reg (GET_MODE (operands[2]), operands[2]);
2669 op = gen_rtx_fmt_ee (code, GET_MODE (operands[0]),
2670 operands[1], operands[2]);
2673 if (register_operand (operands[0], VOIDmode))
2676 dest = gen_reg_rtx (GET_MODE (operands[0]));
2678 emit_insn (gen_rtx_SET (VOIDmode, dest, op));
2680 if (dest != operands[0])
2681 emit_move_insn (operands[0], dest);
2685 emit_tfmode_binop (enum rtx_code code, rtx *operands)
2687 if (TARGET_HARD_QUAD)
2688 emit_hard_tfmode_operation (code, operands);
2690 emit_soft_tfmode_binop (code, operands);
2694 emit_tfmode_unop (enum rtx_code code, rtx *operands)
2696 if (TARGET_HARD_QUAD)
2697 emit_hard_tfmode_operation (code, operands);
2699 emit_soft_tfmode_unop (code, operands);
2703 emit_tfmode_cvt (enum rtx_code code, rtx *operands)
2705 if (TARGET_HARD_QUAD)
2706 emit_hard_tfmode_operation (code, operands);
2708 emit_soft_tfmode_cvt (code, operands);
2711 /* Return nonzero if a return peephole merging return with
2712 setting of output register is ok. */
2714 leaf_return_peephole_ok (void)
2716 return (actual_fsize == 0);
2719 /* Return nonzero if a branch/jump/call instruction will be emitting
2720 nop into its delay slot. */
2723 empty_delay_slot (rtx insn)
2727 /* If no previous instruction (should not happen), return true. */
2728 if (PREV_INSN (insn) == NULL)
2731 seq = NEXT_INSN (PREV_INSN (insn));
2732 if (GET_CODE (PATTERN (seq)) == SEQUENCE)
2738 /* Return nonzero if TRIAL can go into the function epilogue's
2739 delay slot. SLOT is the slot we are trying to fill. */
2742 eligible_for_epilogue_delay (rtx trial, int slot)
2749 if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
2752 if (get_attr_length (trial) != 1)
2755 /* If there are any call-saved registers, we should scan TRIAL if it
2756 does not reference them. For now just make it easy. */
2760 /* If the function uses __builtin_eh_return, the eh_return machinery
2761 occupies the delay slot. */
2762 if (current_function_calls_eh_return)
2765 /* In the case of a true leaf function, anything can go into the delay slot.
2766 A delay slot only exists however if the frame size is zero, otherwise
2767 we will put an insn to adjust the stack after the return. */
2768 if (current_function_uses_only_leaf_regs)
2770 if (leaf_return_peephole_ok ())
2771 return ((get_attr_in_uncond_branch_delay (trial)
2772 == IN_BRANCH_DELAY_TRUE));
2776 pat = PATTERN (trial);
2778 /* Otherwise, only operations which can be done in tandem with
2779 a `restore' or `return' insn can go into the delay slot. */
2780 if (GET_CODE (SET_DEST (pat)) != REG
2781 || REGNO (SET_DEST (pat)) < 24)
2784 /* If this instruction sets up floating point register and we have a return
2785 instruction, it can probably go in. But restore will not work
2787 if (REGNO (SET_DEST (pat)) >= 32)
2789 if (TARGET_V9 && ! epilogue_renumber (&pat, 1)
2790 && (get_attr_in_uncond_branch_delay (trial) == IN_BRANCH_DELAY_TRUE))
2795 /* The set of insns matched here must agree precisely with the set of
2796 patterns paired with a RETURN in sparc.md. */
2798 src = SET_SRC (pat);
2800 /* This matches "*return_[qhs]i" or even "*return_di" on TARGET_ARCH64. */
2801 if (GET_MODE_CLASS (GET_MODE (src)) != MODE_FLOAT
2802 && arith_operand (src, GET_MODE (src)))
2805 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (DImode);
2807 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (SImode);
2810 /* This matches "*return_di". */
2811 else if (GET_MODE_CLASS (GET_MODE (src)) != MODE_FLOAT
2812 && arith_double_operand (src, GET_MODE (src)))
2813 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (DImode);
2815 /* This matches "*return_sf_no_fpu". */
2816 else if (! TARGET_FPU && restore_operand (SET_DEST (pat), SFmode)
2817 && register_operand (src, SFmode))
2820 /* If we have return instruction, anything that does not use
2821 local or output registers and can go into a delay slot wins. */
2822 else if (TARGET_V9 && ! epilogue_renumber (&pat, 1)
2823 && (get_attr_in_uncond_branch_delay (trial) == IN_BRANCH_DELAY_TRUE))
2826 /* This matches "*return_addsi". */
2827 else if (GET_CODE (src) == PLUS
2828 && arith_operand (XEXP (src, 0), SImode)
2829 && arith_operand (XEXP (src, 1), SImode)
2830 && (register_operand (XEXP (src, 0), SImode)
2831 || register_operand (XEXP (src, 1), SImode)))
2834 /* This matches "*return_adddi". */
2835 else if (GET_CODE (src) == PLUS
2836 && arith_double_operand (XEXP (src, 0), DImode)
2837 && arith_double_operand (XEXP (src, 1), DImode)
2838 && (register_operand (XEXP (src, 0), DImode)
2839 || register_operand (XEXP (src, 1), DImode)))
2842 /* This can match "*return_losum_[sd]i".
2843 Catch only some cases, so that return_losum* don't have
2845 else if (GET_CODE (src) == LO_SUM
2846 && ! TARGET_CM_MEDMID
2847 && ((register_operand (XEXP (src, 0), SImode)
2848 && immediate_operand (XEXP (src, 1), SImode))
2850 && register_operand (XEXP (src, 0), DImode)
2851 && immediate_operand (XEXP (src, 1), DImode))))
2854 /* sll{,x} reg,1,reg2 is add reg,reg,reg2 as well. */
2855 else if (GET_CODE (src) == ASHIFT
2856 && (register_operand (XEXP (src, 0), SImode)
2857 || register_operand (XEXP (src, 0), DImode))
2858 && XEXP (src, 1) == const1_rtx)
2864 /* Return nonzero if TRIAL can go into the call delay slot. */
2866 tls_call_delay (rtx trial)
2871 call __tls_get_addr, %tgd_call (foo)
2872 add %l7, %o0, %o0, %tgd_add (foo)
2873 while Sun as/ld does not. */
2874 if (TARGET_GNU_TLS || !TARGET_TLS)
2877 pat = PATTERN (trial);
2878 if (GET_CODE (pat) != SET || GET_CODE (SET_DEST (pat)) != PLUS)
2881 unspec = XEXP (SET_DEST (pat), 1);
2882 if (GET_CODE (unspec) != UNSPEC
2883 || (XINT (unspec, 1) != UNSPEC_TLSGD
2884 && XINT (unspec, 1) != UNSPEC_TLSLDM))
2890 /* Return nonzero if TRIAL can go into the sibling call
2894 eligible_for_sibcall_delay (rtx trial)
2898 if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
2901 if (get_attr_length (trial) != 1)
2904 pat = PATTERN (trial);
2906 if (current_function_uses_only_leaf_regs)
2908 /* If the tail call is done using the call instruction,
2909 we have to restore %o7 in the delay slot. */
2910 if ((TARGET_ARCH64 && ! TARGET_CM_MEDLOW) || flag_pic)
2913 /* %g1 is used to build the function address */
2914 if (reg_mentioned_p (gen_rtx_REG (Pmode, 1), pat))
2920 /* Otherwise, only operations which can be done in tandem with
2921 a `restore' insn can go into the delay slot. */
2922 if (GET_CODE (SET_DEST (pat)) != REG
2923 || REGNO (SET_DEST (pat)) < 24
2924 || REGNO (SET_DEST (pat)) >= 32)
2927 /* If it mentions %o7, it can't go in, because sibcall will clobber it
2929 if (reg_mentioned_p (gen_rtx_REG (Pmode, 15), pat))
2932 src = SET_SRC (pat);
2934 if (GET_MODE_CLASS (GET_MODE (src)) != MODE_FLOAT
2935 && arith_operand (src, GET_MODE (src)))
2938 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (DImode);
2940 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (SImode);
2943 else if (GET_MODE_CLASS (GET_MODE (src)) != MODE_FLOAT
2944 && arith_double_operand (src, GET_MODE (src)))
2945 return GET_MODE_SIZE (GET_MODE (src)) <= GET_MODE_SIZE (DImode);
2947 else if (! TARGET_FPU && restore_operand (SET_DEST (pat), SFmode)
2948 && register_operand (src, SFmode))
2951 else if (GET_CODE (src) == PLUS
2952 && arith_operand (XEXP (src, 0), SImode)
2953 && arith_operand (XEXP (src, 1), SImode)
2954 && (register_operand (XEXP (src, 0), SImode)
2955 || register_operand (XEXP (src, 1), SImode)))
2958 else if (GET_CODE (src) == PLUS
2959 && arith_double_operand (XEXP (src, 0), DImode)
2960 && arith_double_operand (XEXP (src, 1), DImode)
2961 && (register_operand (XEXP (src, 0), DImode)
2962 || register_operand (XEXP (src, 1), DImode)))
2965 else if (GET_CODE (src) == LO_SUM
2966 && ! TARGET_CM_MEDMID
2967 && ((register_operand (XEXP (src, 0), SImode)
2968 && immediate_operand (XEXP (src, 1), SImode))
2970 && register_operand (XEXP (src, 0), DImode)
2971 && immediate_operand (XEXP (src, 1), DImode))))
2974 else if (GET_CODE (src) == ASHIFT
2975 && (register_operand (XEXP (src, 0), SImode)
2976 || register_operand (XEXP (src, 0), DImode))
2977 && XEXP (src, 1) == const1_rtx)
2984 check_return_regs (rtx x)
2986 switch (GET_CODE (x))
2989 return IN_OR_GLOBAL_P (x);
3004 if (check_return_regs (XEXP (x, 1)) == 0)
3009 return check_return_regs (XEXP (x, 0));
3018 short_branch (int uid1, int uid2)
3020 int delta = INSN_ADDRESSES (uid1) - INSN_ADDRESSES (uid2);
3022 /* Leave a few words of "slop". */
3023 if (delta >= -1023 && delta <= 1022)
3029 /* Return nonzero if REG is not used after INSN.
3030 We assume REG is a reload reg, and therefore does
3031 not live past labels or calls or jumps. */
3033 reg_unused_after (rtx reg, rtx insn)
3035 enum rtx_code code, prev_code = UNKNOWN;
3037 while ((insn = NEXT_INSN (insn)))
3039 if (prev_code == CALL_INSN && call_used_regs[REGNO (reg)])
3042 code = GET_CODE (insn);
3043 if (GET_CODE (insn) == CODE_LABEL)
3046 if (GET_RTX_CLASS (code) == 'i')
3048 rtx set = single_set (insn);
3049 int in_src = set && reg_overlap_mentioned_p (reg, SET_SRC (set));
3052 if (set && reg_overlap_mentioned_p (reg, SET_DEST (set)))
3054 if (set == 0 && reg_overlap_mentioned_p (reg, PATTERN (insn)))
3062 /* Determine if it's legal to put X into the constant pool. This
3063 is not possible if X contains the address of a symbol that is
3064 not constant (TLS) or not known at final link time (PIC). */
3067 sparc_cannot_force_const_mem (rtx x)
3069 switch (GET_CODE (x))
3073 /* Accept all non-symbolic constants. */
3077 /* Labels are OK iff we are non-PIC. */
3078 return flag_pic != 0;
3081 /* 'Naked' TLS symbol references are never OK,
3082 non-TLS symbols are OK iff we are non-PIC. */
3083 if (SYMBOL_REF_TLS_MODEL (x))
3086 return flag_pic != 0;
3089 return sparc_cannot_force_const_mem (XEXP (x, 0));
3092 return sparc_cannot_force_const_mem (XEXP (x, 0))
3093 || sparc_cannot_force_const_mem (XEXP (x, 1));
3101 /* The table we use to reference PIC data. */
3102 static GTY(()) rtx global_offset_table;
3104 /* The function we use to get at it. */
3105 static GTY(()) rtx get_pc_symbol;
3106 static char get_pc_symbol_name[256];
3108 /* Ensure that we are not using patterns that are not OK with PIC. */
3116 if (GET_CODE (recog_data.operand[i]) == SYMBOL_REF
3117 || (GET_CODE (recog_data.operand[i]) == CONST
3118 && ! (GET_CODE (XEXP (recog_data.operand[i], 0)) == MINUS
3119 && (XEXP (XEXP (recog_data.operand[i], 0), 0)
3120 == global_offset_table)
3121 && (GET_CODE (XEXP (XEXP (recog_data.operand[i], 0), 1))
3130 /* Return true if X is an address which needs a temporary register when
3131 reloaded while generating PIC code. */
3134 pic_address_needs_scratch (rtx x)
3136 /* An address which is a symbolic plus a non SMALL_INT needs a temp reg. */
3137 if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS
3138 && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
3139 && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
3140 && ! SMALL_INT (XEXP (XEXP (x, 0), 1)))
3146 /* Determine if a given RTX is a valid constant. We already know this
3147 satisfies CONSTANT_P. */
3150 legitimate_constant_p (rtx x)
3154 switch (GET_CODE (x))
3157 /* TLS symbols are not constant. */
3158 if (SYMBOL_REF_TLS_MODEL (x))
3163 inner = XEXP (x, 0);
3165 /* Offsets of TLS symbols are never valid.
3166 Discourage CSE from creating them. */
3167 if (GET_CODE (inner) == PLUS
3168 && tls_symbolic_operand (XEXP (inner, 0)))
3173 if (GET_MODE (x) == VOIDmode)
3176 /* Floating point constants are generally not ok.
3177 The only exception is 0.0 in VIS. */
3179 && (GET_MODE (x) == SFmode
3180 || GET_MODE (x) == DFmode
3181 || GET_MODE (x) == TFmode)
3182 && fp_zero_operand (x, GET_MODE (x)))
3194 /* Determine if a given RTX is a valid constant address. */
3197 constant_address_p (rtx x)
3199 switch (GET_CODE (x))
3207 if (flag_pic && pic_address_needs_scratch (x))
3209 return legitimate_constant_p (x);
3212 return !flag_pic && legitimate_constant_p (x);
3219 /* Nonzero if the constant value X is a legitimate general operand
3220 when generating PIC code. It is given that flag_pic is on and
3221 that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
3224 legitimate_pic_operand_p (rtx x)
3226 if (pic_address_needs_scratch (x))
3228 if (tls_symbolic_operand (x)
3229 || (GET_CODE (x) == CONST
3230 && GET_CODE (XEXP (x, 0)) == PLUS
3231 && tls_symbolic_operand (XEXP (XEXP (x, 0), 0))))
3236 /* Return nonzero if ADDR is a valid memory address.
3237 STRICT specifies whether strict register checking applies. */
3240 legitimate_address_p (enum machine_mode mode, rtx addr, int strict)
3242 rtx rs1 = NULL, rs2 = NULL, imm1 = NULL, imm2;
3244 if (REG_P (addr) || GET_CODE (addr) == SUBREG)
3246 else if (GET_CODE (addr) == PLUS)
3248 rs1 = XEXP (addr, 0);
3249 rs2 = XEXP (addr, 1);
3251 /* Canonicalize. REG comes first, if there are no regs,
3252 LO_SUM comes first. */
3254 && GET_CODE (rs1) != SUBREG
3256 || GET_CODE (rs2) == SUBREG
3257 || (GET_CODE (rs2) == LO_SUM && GET_CODE (rs1) != LO_SUM)))
3259 rs1 = XEXP (addr, 1);
3260 rs2 = XEXP (addr, 0);
3264 && rs1 == pic_offset_table_rtx
3266 && GET_CODE (rs2) != SUBREG
3267 && GET_CODE (rs2) != LO_SUM
3268 && GET_CODE (rs2) != MEM
3269 && !tls_symbolic_operand (rs2)
3270 && (! symbolic_operand (rs2, VOIDmode) || mode == Pmode)
3271 && (GET_CODE (rs2) != CONST_INT || SMALL_INT (rs2)))
3273 || GET_CODE (rs1) == SUBREG)
3274 && RTX_OK_FOR_OFFSET_P (rs2)))
3279 else if ((REG_P (rs1) || GET_CODE (rs1) == SUBREG)
3280 && (REG_P (rs2) || GET_CODE (rs2) == SUBREG))
3282 /* We prohibit REG + REG for TFmode when there are no instructions
3283 which accept REG+REG instructions. We do this because REG+REG
3284 is not an offsetable address. If we get the situation in reload
3285 where source and destination of a movtf pattern are both MEMs with
3286 REG+REG address, then only one of them gets converted to an
3287 offsetable address. */
3289 && !(TARGET_FPU && TARGET_ARCH64 && TARGET_V9
3290 && TARGET_HARD_QUAD))
3293 /* We prohibit REG + REG on ARCH32 if not optimizing for
3294 DFmode/DImode because then mem_min_alignment is likely to be zero
3295 after reload and the forced split would lack a matching splitter
3297 if (TARGET_ARCH32 && !optimize
3298 && (mode == DFmode || mode == DImode))
3301 else if (USE_AS_OFFSETABLE_LO10
3302 && GET_CODE (rs1) == LO_SUM
3304 && ! TARGET_CM_MEDMID
3305 && RTX_OK_FOR_OLO10_P (rs2))
3309 imm1 = XEXP (rs1, 1);
3310 rs1 = XEXP (rs1, 0);
3311 if (! CONSTANT_P (imm1) || tls_symbolic_operand (rs1))
3315 else if (GET_CODE (addr) == LO_SUM)
3317 rs1 = XEXP (addr, 0);
3318 imm1 = XEXP (addr, 1);
3320 if (! CONSTANT_P (imm1) || tls_symbolic_operand (rs1))
3323 /* We can't allow TFmode, because an offset greater than or equal to the
3324 alignment (8) may cause the LO_SUM to overflow if !v9. */
3325 if (mode == TFmode && !TARGET_V9)
3328 else if (GET_CODE (addr) == CONST_INT && SMALL_INT (addr))
3333 if (GET_CODE (rs1) == SUBREG)
3334 rs1 = SUBREG_REG (rs1);
3340 if (GET_CODE (rs2) == SUBREG)
3341 rs2 = SUBREG_REG (rs2);
3348 if (!REGNO_OK_FOR_BASE_P (REGNO (rs1))
3349 || (rs2 && !REGNO_OK_FOR_BASE_P (REGNO (rs2))))
3354 if ((REGNO (rs1) >= 32
3355 && REGNO (rs1) != FRAME_POINTER_REGNUM
3356 && REGNO (rs1) < FIRST_PSEUDO_REGISTER)
3358 && (REGNO (rs2) >= 32
3359 && REGNO (rs2) != FRAME_POINTER_REGNUM
3360 && REGNO (rs2) < FIRST_PSEUDO_REGISTER)))
3366 /* Construct the SYMBOL_REF for the tls_get_offset function. */
3368 static GTY(()) rtx sparc_tls_symbol;
3370 sparc_tls_get_addr (void)
3372 if (!sparc_tls_symbol)
3373 sparc_tls_symbol = gen_rtx_SYMBOL_REF (Pmode, "__tls_get_addr");
3375 return sparc_tls_symbol;
3379 sparc_tls_got (void)
3384 current_function_uses_pic_offset_table = 1;
3385 return pic_offset_table_rtx;
3388 if (!global_offset_table)
3389 global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
3390 temp = gen_reg_rtx (Pmode);
3391 emit_move_insn (temp, global_offset_table);
3396 /* ADDR contains a thread-local SYMBOL_REF. Generate code to compute
3397 this (thread-local) address. */
3400 legitimize_tls_address (rtx addr)
3402 rtx temp1, temp2, temp3, ret, o0, got, insn;
3407 if (GET_CODE (addr) == SYMBOL_REF)
3408 switch (SYMBOL_REF_TLS_MODEL (addr))
3410 case TLS_MODEL_GLOBAL_DYNAMIC:
3412 temp1 = gen_reg_rtx (SImode);
3413 temp2 = gen_reg_rtx (SImode);
3414 ret = gen_reg_rtx (Pmode);
3415 o0 = gen_rtx_REG (Pmode, 8);
3416 got = sparc_tls_got ();
3417 emit_insn (gen_tgd_hi22 (temp1, addr));
3418 emit_insn (gen_tgd_lo10 (temp2, temp1, addr));
3421 emit_insn (gen_tgd_add32 (o0, got, temp2, addr));
3422 insn = emit_call_insn (gen_tgd_call32 (o0, sparc_tls_get_addr (),
3427 emit_insn (gen_tgd_add64 (o0, got, temp2, addr));
3428 insn = emit_call_insn (gen_tgd_call64 (o0, sparc_tls_get_addr (),
3431 CALL_INSN_FUNCTION_USAGE (insn)
3432 = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_USE (VOIDmode, o0),
3433 CALL_INSN_FUNCTION_USAGE (insn));
3434 insn = get_insns ();
3436 emit_libcall_block (insn, ret, o0, addr);
3439 case TLS_MODEL_LOCAL_DYNAMIC:
3441 temp1 = gen_reg_rtx (SImode);
3442 temp2 = gen_reg_rtx (SImode);
3443 temp3 = gen_reg_rtx (Pmode);
3444 ret = gen_reg_rtx (Pmode);
3445 o0 = gen_rtx_REG (Pmode, 8);
3446 got = sparc_tls_got ();
3447 emit_insn (gen_tldm_hi22 (temp1));
3448 emit_insn (gen_tldm_lo10 (temp2, temp1));
3451 emit_insn (gen_tldm_add32 (o0, got, temp2));
3452 insn = emit_call_insn (gen_tldm_call32 (o0, sparc_tls_get_addr (),
3457 emit_insn (gen_tldm_add64 (o0, got, temp2));
3458 insn = emit_call_insn (gen_tldm_call64 (o0, sparc_tls_get_addr (),
3461 CALL_INSN_FUNCTION_USAGE (insn)
3462 = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_USE (VOIDmode, o0),
3463 CALL_INSN_FUNCTION_USAGE (insn));
3464 insn = get_insns ();
3466 emit_libcall_block (insn, temp3, o0,
3467 gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
3468 UNSPEC_TLSLD_BASE));
3469 temp1 = gen_reg_rtx (SImode);
3470 temp2 = gen_reg_rtx (SImode);
3471 emit_insn (gen_tldo_hix22 (temp1, addr));
3472 emit_insn (gen_tldo_lox10 (temp2, temp1, addr));
3474 emit_insn (gen_tldo_add32 (ret, temp3, temp2, addr));
3476 emit_insn (gen_tldo_add64 (ret, temp3, temp2, addr));
3479 case TLS_MODEL_INITIAL_EXEC:
3480 temp1 = gen_reg_rtx (SImode);
3481 temp2 = gen_reg_rtx (SImode);
3482 temp3 = gen_reg_rtx (Pmode);
3483 got = sparc_tls_got ();
3484 emit_insn (gen_tie_hi22 (temp1, addr));
3485 emit_insn (gen_tie_lo10 (temp2, temp1, addr));
3487 emit_insn (gen_tie_ld32 (temp3, got, temp2, addr));
3489 emit_insn (gen_tie_ld64 (temp3, got, temp2, addr));
3492 ret = gen_reg_rtx (Pmode);
3494 emit_insn (gen_tie_add32 (ret, gen_rtx_REG (Pmode, 7),
3497 emit_insn (gen_tie_add64 (ret, gen_rtx_REG (Pmode, 7),
3501 ret = gen_rtx_PLUS (Pmode, gen_rtx_REG (Pmode, 7), temp3);
3504 case TLS_MODEL_LOCAL_EXEC:
3505 temp1 = gen_reg_rtx (Pmode);
3506 temp2 = gen_reg_rtx (Pmode);
3509 emit_insn (gen_tle_hix22_sp32 (temp1, addr));
3510 emit_insn (gen_tle_lox10_sp32 (temp2, temp1, addr));
3514 emit_insn (gen_tle_hix22_sp64 (temp1, addr));
3515 emit_insn (gen_tle_lox10_sp64 (temp2, temp1, addr));
3517 ret = gen_rtx_PLUS (Pmode, gen_rtx_REG (Pmode, 7), temp2);
3525 abort (); /* for now ... */
3531 /* Legitimize PIC addresses. If the address is already position-independent,
3532 we return ORIG. Newly generated position-independent addresses go into a
3533 reg. This is REG if nonzero, otherwise we allocate register(s) as
3537 legitimize_pic_address (rtx orig, enum machine_mode mode ATTRIBUTE_UNUSED,
3540 if (GET_CODE (orig) == SYMBOL_REF)
3542 rtx pic_ref, address;
3547 if (reload_in_progress || reload_completed)
3550 reg = gen_reg_rtx (Pmode);
3555 /* If not during reload, allocate another temp reg here for loading
3556 in the address, so that these instructions can be optimized
3558 rtx temp_reg = ((reload_in_progress || reload_completed)
3559 ? reg : gen_reg_rtx (Pmode));
3561 /* Must put the SYMBOL_REF inside an UNSPEC here so that cse
3562 won't get confused into thinking that these two instructions
3563 are loading in the true address of the symbol. If in the
3564 future a PIC rtx exists, that should be used instead. */
3565 if (Pmode == SImode)
3567 emit_insn (gen_movsi_high_pic (temp_reg, orig));
3568 emit_insn (gen_movsi_lo_sum_pic (temp_reg, temp_reg, orig));
3572 emit_insn (gen_movdi_high_pic (temp_reg, orig));
3573 emit_insn (gen_movdi_lo_sum_pic (temp_reg, temp_reg, orig));
3580 pic_ref = gen_rtx_MEM (Pmode,
3581 gen_rtx_PLUS (Pmode,
3582 pic_offset_table_rtx, address));
3583 current_function_uses_pic_offset_table = 1;
3584 RTX_UNCHANGING_P (pic_ref) = 1;
3585 insn = emit_move_insn (reg, pic_ref);
3586 /* Put a REG_EQUAL note on this insn, so that it can be optimized
3588 REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, orig,
3592 else if (GET_CODE (orig) == CONST)
3596 if (GET_CODE (XEXP (orig, 0)) == PLUS
3597 && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx)
3602 if (reload_in_progress || reload_completed)
3605 reg = gen_reg_rtx (Pmode);
3608 if (GET_CODE (XEXP (orig, 0)) == PLUS)
3610 base = legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode, reg);
3611 offset = legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
3612 base == reg ? 0 : reg);
3617 if (GET_CODE (offset) == CONST_INT)
3619 if (SMALL_INT (offset))
3620 return plus_constant (base, INTVAL (offset));
3621 else if (! reload_in_progress && ! reload_completed)
3622 offset = force_reg (Pmode, offset);
3624 /* If we reach here, then something is seriously wrong. */
3627 return gen_rtx_PLUS (Pmode, base, offset);
3629 else if (GET_CODE (orig) == LABEL_REF)
3630 /* ??? Why do we do this? */
3631 /* Now movsi_pic_label_ref uses it, but we ought to be checking that
3632 the register is live instead, in case it is eliminated. */
3633 current_function_uses_pic_offset_table = 1;
3638 /* Try machine-dependent ways of modifying an illegitimate address X
3639 to be legitimate. If we find one, return the new, valid address.
3641 OLDX is the address as it was before break_out_memory_refs was called.
3642 In some cases it is useful to look at this to decide what needs to be done.
3644 MODE is the mode of the operand pointed to by X. */
3647 legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED, enum machine_mode mode)
3651 if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == MULT)
3652 x = gen_rtx_PLUS (Pmode, XEXP (x, 1),
3653 force_operand (XEXP (x, 0), NULL_RTX));
3654 if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == MULT)
3655 x = gen_rtx_PLUS (Pmode, XEXP (x, 0),
3656 force_operand (XEXP (x, 1), NULL_RTX));
3657 if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == PLUS)
3658 x = gen_rtx_PLUS (Pmode, force_operand (XEXP (x, 0), NULL_RTX),
3660 if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == PLUS)
3661 x = gen_rtx_PLUS (Pmode, XEXP (x, 0),
3662 force_operand (XEXP (x, 1), NULL_RTX));
3664 if (x != orig_x && legitimate_address_p (mode, x, FALSE))
3667 if (tls_symbolic_operand (x))
3668 x = legitimize_tls_address (x);
3670 x = legitimize_pic_address (x, mode, 0);
3671 else if (GET_CODE (x) == PLUS && CONSTANT_ADDRESS_P (XEXP (x, 1)))
3672 x = gen_rtx_PLUS (Pmode, XEXP (x, 0),
3673 copy_to_mode_reg (Pmode, XEXP (x, 1)));
3674 else if (GET_CODE (x) == PLUS && CONSTANT_ADDRESS_P (XEXP (x, 0)))
3675 x = gen_rtx_PLUS (Pmode, XEXP (x, 1),
3676 copy_to_mode_reg (Pmode, XEXP (x, 0)));
3677 else if (GET_CODE (x) == SYMBOL_REF
3678 || GET_CODE (x) == CONST
3679 || GET_CODE (x) == LABEL_REF)
3680 x = copy_to_suggested_reg (x, NULL_RTX, Pmode);
3684 /* Emit special PIC prologues. */
3687 load_pic_register (void)
3689 /* Labels to get the PC in the prologue of this function. */
3690 int orig_flag_pic = flag_pic;
3695 /* If we haven't emitted the special get_pc helper function, do so now. */
3696 if (get_pc_symbol_name[0] == 0)
3700 ASM_GENERATE_INTERNAL_LABEL (get_pc_symbol_name, "LGETPC", 0);
3703 align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3705 ASM_OUTPUT_ALIGN (asm_out_file, align);
3706 (*targetm.asm_out.internal_label) (asm_out_file, "LGETPC", 0);
3707 fputs ("\tretl\n\tadd\t%o7, %l7, %l7\n", asm_out_file);
3710 /* Initialize every time through, since we can't easily
3711 know this to be permanent. */
3712 global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
3713 get_pc_symbol = gen_rtx_SYMBOL_REF (Pmode, get_pc_symbol_name);
3716 emit_insn (gen_get_pc (pic_offset_table_rtx, global_offset_table,
3719 flag_pic = orig_flag_pic;
3721 /* Need to emit this whether or not we obey regdecls,
3722 since setjmp/longjmp can cause life info to screw up.
3723 ??? In the case where we don't obey regdecls, this is not sufficient
3724 since we may not fall out the bottom. */
3725 emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
3728 /* Return 1 if RTX is a MEM which is known to be aligned to at
3729 least a DESIRED byte boundary. */
3732 mem_min_alignment (rtx mem, int desired)
3734 rtx addr, base, offset;
3736 /* If it's not a MEM we can't accept it. */
3737 if (GET_CODE (mem) != MEM)
3740 addr = XEXP (mem, 0);
3741 base = offset = NULL_RTX;
3742 if (GET_CODE (addr) == PLUS)
3744 if (GET_CODE (XEXP (addr, 0)) == REG)
3746 base = XEXP (addr, 0);
3748 /* What we are saying here is that if the base
3749 REG is aligned properly, the compiler will make
3750 sure any REG based index upon it will be so
3752 if (GET_CODE (XEXP (addr, 1)) == CONST_INT)
3753 offset = XEXP (addr, 1);
3755 offset = const0_rtx;
3758 else if (GET_CODE (addr) == REG)
3761 offset = const0_rtx;
3764 if (base != NULL_RTX)
3766 int regno = REGNO (base);
3768 if (regno != HARD_FRAME_POINTER_REGNUM && regno != STACK_POINTER_REGNUM)
3770 /* Check if the compiler has recorded some information
3771 about the alignment of the base REG. If reload has
3772 completed, we already matched with proper alignments.
3773 If not running global_alloc, reload might give us
3774 unaligned pointer to local stack though. */
3776 && REGNO_POINTER_ALIGN (regno) >= desired * BITS_PER_UNIT)
3777 || (optimize && reload_completed))
3778 && (INTVAL (offset) & (desired - 1)) == 0)
3783 if (((INTVAL (offset) - SPARC_STACK_BIAS) & (desired - 1)) == 0)
3787 else if (! TARGET_UNALIGNED_DOUBLES
3788 || CONSTANT_P (addr)
3789 || GET_CODE (addr) == LO_SUM)
3791 /* Anything else we know is properly aligned unless TARGET_UNALIGNED_DOUBLES
3792 is true, in which case we can only assume that an access is aligned if
3793 it is to a constant address, or the address involves a LO_SUM. */
3797 /* An obviously unaligned address. */
3802 /* Vectors to keep interesting information about registers where it can easily
3803 be got. We used to use the actual mode value as the bit number, but there
3804 are more than 32 modes now. Instead we use two tables: one indexed by
3805 hard register number, and one indexed by mode. */
3807 /* The purpose of sparc_mode_class is to shrink the range of modes so that
3808 they all fit (as bit numbers) in a 32 bit word (again). Each real mode is
3809 mapped into one sparc_mode_class mode. */
3811 enum sparc_mode_class {
3812 S_MODE, D_MODE, T_MODE, O_MODE,
3813 SF_MODE, DF_MODE, TF_MODE, OF_MODE,
3817 /* Modes for single-word and smaller quantities. */
3818 #define S_MODES ((1 << (int) S_MODE) | (1 << (int) SF_MODE))
3820 /* Modes for double-word and smaller quantities. */
3821 #define D_MODES (S_MODES | (1 << (int) D_MODE) | (1 << DF_MODE))
3823 /* Modes for quad-word and smaller quantities. */
3824 #define T_MODES (D_MODES | (1 << (int) T_MODE) | (1 << (int) TF_MODE))
3826 /* Modes for 8-word and smaller quantities. */
3827 #define O_MODES (T_MODES | (1 << (int) O_MODE) | (1 << (int) OF_MODE))
3829 /* Modes for single-float quantities. We must allow any single word or
3830 smaller quantity. This is because the fix/float conversion instructions
3831 take integer inputs/outputs from the float registers. */
3832 #define SF_MODES (S_MODES)
3834 /* Modes for double-float and smaller quantities. */
3835 #define DF_MODES (S_MODES | D_MODES)
3837 /* Modes for double-float only quantities. */
3838 #define DF_MODES_NO_S ((1 << (int) D_MODE) | (1 << (int) DF_MODE))
3840 /* Modes for quad-float only quantities. */
3841 #define TF_ONLY_MODES (1 << (int) TF_MODE)
3843 /* Modes for quad-float and smaller quantities. */
3844 #define TF_MODES (DF_MODES | TF_ONLY_MODES)
3846 /* Modes for quad-float and double-float quantities. */
3847 #define TF_MODES_NO_S (DF_MODES_NO_S | TF_ONLY_MODES)
3849 /* Modes for quad-float pair only quantities. */
3850 #define OF_ONLY_MODES (1 << (int) OF_MODE)
3852 /* Modes for quad-float pairs and smaller quantities. */
3853 #define OF_MODES (TF_MODES | OF_ONLY_MODES)
3855 #define OF_MODES_NO_S (TF_MODES_NO_S | OF_ONLY_MODES)
3857 /* Modes for condition codes. */
3858 #define CC_MODES (1 << (int) CC_MODE)
3859 #define CCFP_MODES (1 << (int) CCFP_MODE)
3861 /* Value is 1 if register/mode pair is acceptable on sparc.
3862 The funny mixture of D and T modes is because integer operations
3863 do not specially operate on tetra quantities, so non-quad-aligned
3864 registers can hold quadword quantities (except %o4 and %i4 because
3865 they cross fixed registers). */
3867 /* This points to either the 32 bit or the 64 bit version. */
3868 const int *hard_regno_mode_classes;
3870 static const int hard_32bit_mode_classes[] = {
3871 S_MODES, S_MODES, T_MODES, S_MODES, T_MODES, S_MODES, D_MODES, S_MODES,
3872 T_MODES, S_MODES, T_MODES, S_MODES, D_MODES, S_MODES, D_MODES, S_MODES,
3873 T_MODES, S_MODES, T_MODES, S_MODES, T_MODES, S_MODES, D_MODES, S_MODES,
3874 T_MODES, S_MODES, T_MODES, S_MODES, D_MODES, S_MODES, D_MODES, S_MODES,
3876 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3877 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3878 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3879 OF_MODES, SF_MODES, DF_MODES, SF_MODES, TF_MODES, SF_MODES, DF_MODES, SF_MODES,
3881 /* FP regs f32 to f63. Only the even numbered registers actually exist,
3882 and none can hold SFmode/SImode values. */
3883 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3884 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3885 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3886 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, TF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3889 CCFP_MODES, CCFP_MODES, CCFP_MODES, CCFP_MODES,
3895 static const int hard_64bit_mode_classes[] = {
3896 D_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES,
3897 O_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES,
3898 T_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES,
3899 O_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES, T_MODES, D_MODES,
3901 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3902 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3903 OF_MODES, SF_MODES, DF_MODES, SF_MODES, OF_MODES, SF_MODES, DF_MODES, SF_MODES,
3904 OF_MODES, SF_MODES, DF_MODES, SF_MODES, TF_MODES, SF_MODES, DF_MODES, SF_MODES,
3906 /* FP regs f32 to f63. Only the even numbered registers actually exist,
3907 and none can hold SFmode/SImode values. */
3908 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3909 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3910 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, OF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3911 OF_MODES_NO_S, 0, DF_MODES_NO_S, 0, TF_MODES_NO_S, 0, DF_MODES_NO_S, 0,
3914 CCFP_MODES, CCFP_MODES, CCFP_MODES, CCFP_MODES,
3920 int sparc_mode_class [NUM_MACHINE_MODES];
3922 enum reg_class sparc_regno_reg_class[FIRST_PSEUDO_REGISTER];
3925 sparc_init_modes (void)
3929 for (i = 0; i < NUM_MACHINE_MODES; i++)
3931 switch (GET_MODE_CLASS (i))
3934 case MODE_PARTIAL_INT:
3935 case MODE_COMPLEX_INT:
3936 if (GET_MODE_SIZE (i) <= 4)
3937 sparc_mode_class[i] = 1 << (int) S_MODE;
3938 else if (GET_MODE_SIZE (i) == 8)
3939 sparc_mode_class[i] = 1 << (int) D_MODE;
3940 else if (GET_MODE_SIZE (i) == 16)
3941 sparc_mode_class[i] = 1 << (int) T_MODE;
3942 else if (GET_MODE_SIZE (i) == 32)
3943 sparc_mode_class[i] = 1 << (int) O_MODE;
3945 sparc_mode_class[i] = 0;
3948 case MODE_COMPLEX_FLOAT:
3949 if (GET_MODE_SIZE (i) <= 4)
3950 sparc_mode_class[i] = 1 << (int) SF_MODE;
3951 else if (GET_MODE_SIZE (i) == 8)
3952 sparc_mode_class[i] = 1 << (int) DF_MODE;
3953 else if (GET_MODE_SIZE (i) == 16)
3954 sparc_mode_class[i] = 1 << (int) TF_MODE;
3955 else if (GET_MODE_SIZE (i) == 32)
3956 sparc_mode_class[i] = 1 << (int) OF_MODE;
3958 sparc_mode_class[i] = 0;
3961 if (i == (int) CCFPmode || i == (int) CCFPEmode)
3962 sparc_mode_class[i] = 1 << (int) CCFP_MODE;
3964 sparc_mode_class[i] = 1 << (int) CC_MODE;
3967 sparc_mode_class[i] = 0;
3973 hard_regno_mode_classes = hard_64bit_mode_classes;
3975 hard_regno_mode_classes = hard_32bit_mode_classes;
3977 /* Initialize the array used by REGNO_REG_CLASS. */
3978 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
3980 if (i < 16 && TARGET_V8PLUS)
3981 sparc_regno_reg_class[i] = I64_REGS;
3982 else if (i < 32 || i == FRAME_POINTER_REGNUM)
3983 sparc_regno_reg_class[i] = GENERAL_REGS;
3985 sparc_regno_reg_class[i] = FP_REGS;
3987 sparc_regno_reg_class[i] = EXTRA_FP_REGS;
3989 sparc_regno_reg_class[i] = FPCC_REGS;
3991 sparc_regno_reg_class[i] = NO_REGS;
3995 /* Save non call used registers from LOW to HIGH at BASE+OFFSET.
3996 N_REGS is the number of 4-byte regs saved thus far. This applies even to
3997 v9 int regs as it simplifies the code. */
4000 save_regs (FILE *file, int low, int high, const char *base,
4001 int offset, int n_regs, HOST_WIDE_INT real_offset)
4005 if (TARGET_ARCH64 && high <= 32)
4007 for (i = low; i < high; i++)
4009 if (regs_ever_live[i] && ! call_used_regs[i])
4011 fprintf (file, "\tstx\t%s, [%s+%d]\n",
4012 reg_names[i], base, offset + 4 * n_regs);
4013 if (dwarf2out_do_frame ())
4014 dwarf2out_reg_save ("", i, real_offset + 4 * n_regs);
4021 for (i = low; i < high; i += 2)
4023 if (regs_ever_live[i] && ! call_used_regs[i])
4025 if (regs_ever_live[i+1] && ! call_used_regs[i+1])
4027 fprintf (file, "\tstd\t%s, [%s+%d]\n",
4028 reg_names[i], base, offset + 4 * n_regs);
4029 if (dwarf2out_do_frame ())
4031 char *l = dwarf2out_cfi_label ();
4032 dwarf2out_reg_save (l, i, real_offset + 4 * n_regs);
4033 dwarf2out_reg_save (l, i+1, real_offset + 4 * n_regs + 4);
4039 fprintf (file, "\tst\t%s, [%s+%d]\n",
4040 reg_names[i], base, offset + 4 * n_regs);
4041 if (dwarf2out_do_frame ())
4042 dwarf2out_reg_save ("", i, real_offset + 4 * n_regs);
4048 if (regs_ever_live[i+1] && ! call_used_regs[i+1])
4050 fprintf (file, "\tst\t%s, [%s+%d]\n",
4051 reg_names[i+1], base, offset + 4 * n_regs + 4);
4052 if (dwarf2out_do_frame ())
4053 dwarf2out_reg_save ("", i + 1, real_offset + 4 * n_regs + 4);
4062 /* Restore non call used registers from LOW to HIGH at BASE+OFFSET.
4064 N_REGS is the number of 4-byte regs saved thus far. This applies even to
4065 v9 int regs as it simplifies the code. */
4068 restore_regs (FILE *file, int low, int high, const char *base,
4069 int offset, int n_regs)
4073 if (TARGET_ARCH64 && high <= 32)
4075 for (i = low; i < high; i++)
4077 if (regs_ever_live[i] && ! call_used_regs[i])
4078 fprintf (file, "\tldx\t[%s+%d], %s\n",
4079 base, offset + 4 * n_regs, reg_names[i]),
4085 for (i = low; i < high; i += 2)
4087 if (regs_ever_live[i] && ! call_used_regs[i])
4088 if (regs_ever_live[i+1] && ! call_used_regs[i+1])
4089 fprintf (file, "\tldd\t[%s+%d], %s\n",
4090 base, offset + 4 * n_regs, reg_names[i]),
4093 fprintf (file, "\tld\t[%s+%d], %s\n",
4094 base, offset + 4 * n_regs, reg_names[i]),
4096 else if (regs_ever_live[i+1] && ! call_used_regs[i+1])
4097 fprintf (file, "\tld\t[%s+%d], %s\n",
4098 base, offset + 4 * n_regs + 4, reg_names[i+1]),
4105 /* Compute the frame size required by the function. This function is called
4106 during the reload pass and also by output_function_prologue(). */
4109 compute_frame_size (HOST_WIDE_INT size, int leaf_function)
4112 int outgoing_args_size = (current_function_outgoing_args_size
4113 + REG_PARM_STACK_SPACE (current_function_decl));
4115 /* N_REGS is the number of 4-byte regs saved thus far. This applies
4116 even to v9 int regs to be consistent with save_regs/restore_regs. */
4120 for (i = 0; i < 8; i++)
4121 if (regs_ever_live[i] && ! call_used_regs[i])
4126 for (i = 0; i < 8; i += 2)
4127 if ((regs_ever_live[i] && ! call_used_regs[i])
4128 || (regs_ever_live[i+1] && ! call_used_regs[i+1]))
4132 for (i = 32; i < (TARGET_V9 ? 96 : 64); i += 2)
4133 if ((regs_ever_live[i] && ! call_used_regs[i])
4134 || (regs_ever_live[i+1] && ! call_used_regs[i+1]))
4137 /* Set up values for use in `function_epilogue'. */
4138 num_gfregs = n_regs;
4140 if (leaf_function && n_regs == 0
4141 && size == 0 && current_function_outgoing_args_size == 0)
4143 actual_fsize = apparent_fsize = 0;
4147 /* We subtract STARTING_FRAME_OFFSET, remember it's negative. */
4148 apparent_fsize = (size - STARTING_FRAME_OFFSET + 7) & -8;
4149 apparent_fsize += n_regs * 4;
4150 actual_fsize = apparent_fsize + ((outgoing_args_size + 7) & -8);
4153 /* Make sure nothing can clobber our register windows.
4154 If a SAVE must be done, or there is a stack-local variable,
4155 the register window area must be allocated.
4156 ??? For v8 we apparently need an additional 8 bytes of reserved space. */
4157 if (leaf_function == 0 || size > 0)
4158 actual_fsize += (16 * UNITS_PER_WORD) + (TARGET_ARCH64 ? 0 : 8);
4160 return SPARC_STACK_ALIGN (actual_fsize);
4163 /* Build big number NUM in register REG and output the result to FILE.
4164 REG is guaranteed to be the only clobbered register. The function
4165 will very likely emit several instructions, so it must not be called
4166 from within a delay slot. */
4169 build_big_number (FILE *file, HOST_WIDE_INT num, const char *reg)
4171 #if HOST_BITS_PER_WIDE_INT == 64
4172 HOST_WIDE_INT high_bits = (num >> 32) & 0xffffffff;
4180 /* We don't use the 'set' macro because it appears to be broken
4181 in the Solaris 7 assembler. */
4182 fprintf (file, "\tsethi\t%%hi("HOST_WIDE_INT_PRINT_DEC"), %s\n",
4184 if ((num & 0x3ff) != 0)
4185 fprintf (file, "\tor\t%s, %%lo("HOST_WIDE_INT_PRINT_DEC"), %s\n",
4188 #if HOST_BITS_PER_WIDE_INT == 64
4189 else if (high_bits == 0xffffffff) /* && TARGET_ARCH64 */
4191 else /* num < 0 && TARGET_ARCH64 */
4194 /* Sethi does not sign extend, so we must use a little trickery
4195 to use it for negative numbers. Invert the constant before
4196 loading it in, then use xor immediate to invert the loaded bits
4197 (along with the upper 32 bits) to the desired constant. This
4198 works because the sethi and immediate fields overlap. */
4199 HOST_WIDE_INT inv = ~num;
4200 HOST_WIDE_INT low = -0x400 + (num & 0x3ff);
4202 fprintf (file, "\tsethi\t%%hi("HOST_WIDE_INT_PRINT_DEC"), %s\n",
4204 fprintf (file, "\txor\t%s, "HOST_WIDE_INT_PRINT_DEC", %s\n",
4207 #if HOST_BITS_PER_WIDE_INT == 64
4208 else /* TARGET_ARCH64 */
4210 /* We don't use the 'setx' macro because if requires a scratch register.
4211 This is the translation of sparc_emit_set_const64_longway into asm.
4212 Hopefully we will soon have prologue/epilogue emitted as RTL. */
4213 HOST_WIDE_INT low1 = (num >> (32 - 12)) & 0xfff;
4214 HOST_WIDE_INT low2 = (num >> (32 - 12 - 12)) & 0xfff;
4215 HOST_WIDE_INT low3 = (num >> (32 - 12 - 12 - 8)) & 0x0ff;
4218 /* We don't use the 'set' macro because it appears to be broken
4219 in the Solaris 7 assembler. */
4220 fprintf (file, "\tsethi\t%%hi("HOST_WIDE_INT_PRINT_DEC"), %s\n",
4222 if ((high_bits & 0x3ff) != 0)
4223 fprintf (file, "\tor\t%s, %%lo("HOST_WIDE_INT_PRINT_DEC"), %s\n",
4224 reg, high_bits, reg);
4228 fprintf (file, "\tsllx\t%s, %d, %s\n", reg, to_shift, reg);
4229 fprintf (file, "\tor\t%s, "HOST_WIDE_INT_PRINT_DEC", %s\n",
4239 fprintf (file, "\tsllx\t%s, %d, %s\n", reg, to_shift, reg);
4240 fprintf (file, "\tor\t%s, "HOST_WIDE_INT_PRINT_DEC", %s\n",
4248 fprintf (file, "\tsllx\t%s, %d, %s\n", reg, to_shift, reg);
4250 fprintf (file, "\tor\t%s, "HOST_WIDE_INT_PRINT_DEC", %s\n",
4256 /* Output any necessary .register pseudo-ops. */
4258 sparc_output_scratch_registers (FILE *file ATTRIBUTE_UNUSED)
4260 #ifdef HAVE_AS_REGISTER_PSEUDO_OP
4266 /* Check if %g[2367] were used without
4267 .register being printed for them already. */
4268 for (i = 2; i < 8; i++)
4270 if (regs_ever_live [i]
4271 && ! sparc_hard_reg_printed [i])
4273 sparc_hard_reg_printed [i] = 1;
4274 fprintf (file, "\t.register\t%%g%d, #scratch\n", i);
4281 /* This function generates the assembly code for function entry.
4282 FILE is a stdio stream to output the code to.
4283 SIZE is an int: how many units of temporary storage to allocate.
4284 Refer to the array `regs_ever_live' to determine which registers
4285 to save; `regs_ever_live[I]' is nonzero if register number I
4286 is ever used in the function. This macro is responsible for
4287 knowing which registers should not be saved even if used. */
4289 /* On SPARC, move-double insns between fpu and cpu need an 8-byte block
4290 of memory. If any fpu reg is used in the function, we allocate
4291 such a block here, at the bottom of the frame, just in case it's needed.
4293 If this function is a leaf procedure, then we may choose not
4294 to do a "save" insn. The decision about whether or not
4295 to do this is made in regclass.c. */
4298 sparc_output_function_prologue (FILE *file, HOST_WIDE_INT size)
4301 sparc_flat_function_prologue (file, size);
4303 sparc_nonflat_function_prologue (file, size,
4304 current_function_uses_only_leaf_regs);
4307 /* Output code for the function prologue. */
4310 sparc_nonflat_function_prologue (FILE *file, HOST_WIDE_INT size,
4313 sparc_output_scratch_registers (file);
4315 /* Need to use actual_fsize, since we are also allocating
4316 space for our callee (and our own register save area). */
4317 actual_fsize = compute_frame_size (size, leaf_function);
4321 frame_base_name = "%sp";
4322 frame_base_offset = actual_fsize + SPARC_STACK_BIAS;
4326 frame_base_name = "%fp";
4327 frame_base_offset = SPARC_STACK_BIAS;
4330 /* This is only for the human reader. */
4331 fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
4333 if (actual_fsize == 0)
4335 else if (! leaf_function)
4337 if (actual_fsize <= 4096)
4338 fprintf (file, "\tsave\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4340 else if (actual_fsize <= 8192)
4342 fprintf (file, "\tsave\t%%sp, -4096, %%sp\n");
4343 fprintf (file, "\tadd\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4344 actual_fsize - 4096);
4348 build_big_number (file, -actual_fsize, "%g1");
4349 fprintf (file, "\tsave\t%%sp, %%g1, %%sp\n");
4352 else /* leaf function */
4354 if (actual_fsize <= 4096)
4355 fprintf (file, "\tadd\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4357 else if (actual_fsize <= 8192)
4359 fprintf (file, "\tadd\t%%sp, -4096, %%sp\n");
4360 fprintf (file, "\tadd\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4361 actual_fsize - 4096);
4365 build_big_number (file, -actual_fsize, "%g1");
4366 fprintf (file, "\tadd\t%%sp, %%g1, %%sp\n");
4370 if (dwarf2out_do_frame () && actual_fsize)
4372 char *label = dwarf2out_cfi_label ();
4374 /* The canonical frame address refers to the top of the frame. */
4375 dwarf2out_def_cfa (label, (leaf_function ? STACK_POINTER_REGNUM
4376 : HARD_FRAME_POINTER_REGNUM),
4379 if (! leaf_function)
4381 /* Note the register window save. This tells the unwinder that
4382 it needs to restore the window registers from the previous
4383 frame's window save area at 0(cfa). */
4384 dwarf2out_window_save (label);
4386 /* The return address (-8) is now in %i7. */
4387 dwarf2out_return_reg (label, 31);
4391 /* If doing anything with PIC, do it now. */
4393 fprintf (file, "\t%s#PROLOGUE# 1\n", ASM_COMMENT_START);
4395 /* Call saved registers are saved just above the outgoing argument area. */
4398 HOST_WIDE_INT offset, real_offset;
4402 real_offset = -apparent_fsize;
4403 offset = -apparent_fsize + frame_base_offset;
4404 if (offset < -4096 || offset + num_gfregs * 4 > 4096)
4406 /* ??? This might be optimized a little as %g1 might already have a
4407 value close enough that a single add insn will do. */
4408 /* ??? Although, all of this is probably only a temporary fix
4409 because if %g1 can hold a function result, then
4410 output_function_epilogue will lose (the result will get
4412 build_big_number (file, offset, "%g1");
4413 fprintf (file, "\tadd\t%s, %%g1, %%g1\n", frame_base_name);
4419 base = frame_base_name;
4422 n_regs = save_regs (file, 0, 8, base, offset, 0, real_offset);
4423 save_regs (file, 32, TARGET_V9 ? 96 : 64, base, offset, n_regs,
4428 /* Output code to restore any call saved registers. */
4431 output_restore_regs (FILE *file, int leaf_function ATTRIBUTE_UNUSED)
4433 HOST_WIDE_INT offset;
4437 offset = -apparent_fsize + frame_base_offset;
4438 if (offset < -4096 || offset + num_gfregs * 4 > 4096 - 8 /*double*/)
4440 build_big_number (file, offset, "%g1");
4441 fprintf (file, "\tadd\t%s, %%g1, %%g1\n", frame_base_name);
4447 base = frame_base_name;
4450 n_regs = restore_regs (file, 0, 8, base, offset, 0);
4451 restore_regs (file, 32, TARGET_V9 ? 96 : 64, base, offset, n_regs);
4454 /* This function generates the assembly code for function exit,
4455 on machines that need it.
4457 The function epilogue should not depend on the current stack pointer!
4458 It should use the frame pointer only. This is mandatory because
4459 of alloca; we also take advantage of it to omit stack adjustments
4460 before returning. */
4463 sparc_output_function_epilogue (FILE *file, HOST_WIDE_INT size)
4466 sparc_flat_function_epilogue (file, size);
4468 sparc_nonflat_function_epilogue (file, size,
4469 current_function_uses_only_leaf_regs);
4472 /* Output code for the function epilogue. */
4475 sparc_nonflat_function_epilogue (FILE *file,
4476 HOST_WIDE_INT size ATTRIBUTE_UNUSED,
4481 if (current_function_epilogue_delay_list == 0)
4483 /* If code does not drop into the epilogue, we need
4484 do nothing except output pending case vectors.
4486 We have to still output a dummy nop for the sake of
4487 sane backtraces. Otherwise, if the last two instructions
4488 of a function were call foo; dslot; this can make the return
4489 PC of foo (ie. address of call instruction plus 8) point to
4490 the first instruction in the next function. */
4491 rtx insn, last_real_insn;
4493 insn = get_last_insn ();
4495 last_real_insn = prev_real_insn (insn);
4497 && GET_CODE (last_real_insn) == INSN
4498 && GET_CODE (PATTERN (last_real_insn)) == SEQUENCE)
4499 last_real_insn = XVECEXP (PATTERN (last_real_insn), 0, 0);
4501 if (last_real_insn && GET_CODE (last_real_insn) == CALL_INSN)
4502 fputs("\tnop\n", file);
4504 if (GET_CODE (insn) == NOTE)
4505 insn = prev_nonnote_insn (insn);
4506 if (insn && GET_CODE (insn) == BARRIER)
4507 goto output_vectors;
4511 output_restore_regs (file, leaf_function);
4513 /* Work out how to skip the caller's unimp instruction if required. */
4515 ret = (SKIP_CALLERS_UNIMP_P ? "jmp\t%o7+12" : "retl");
4517 ret = (SKIP_CALLERS_UNIMP_P ? "jmp\t%i7+12" : "ret");
4519 if (! leaf_function)
4521 if (current_function_calls_eh_return)
4523 if (current_function_epilogue_delay_list)
4525 if (SKIP_CALLERS_UNIMP_P)
4528 fputs ("\trestore\n\tretl\n\tadd\t%sp, %g1, %sp\n", file);
4530 /* If we wound up with things in our delay slot, flush them here. */
4531 else if (current_function_epilogue_delay_list)
4533 rtx delay = PATTERN (XEXP (current_function_epilogue_delay_list, 0));
4535 if (TARGET_V9 && ! epilogue_renumber (&delay, 1))
4537 epilogue_renumber (&delay, 0);
4538 fputs (SKIP_CALLERS_UNIMP_P
4539 ? "\treturn\t%i7+12\n"
4540 : "\treturn\t%i7+8\n", file);
4541 final_scan_insn (XEXP (current_function_epilogue_delay_list, 0),
4542 file, 1, 0, 0, NULL);
4548 if (GET_CODE (delay) != SET)
4551 src = SET_SRC (delay);
4552 if (GET_CODE (src) == ASHIFT)
4554 if (XEXP (src, 1) != const1_rtx)
4557 = gen_rtx_PLUS (GET_MODE (src), XEXP (src, 0),
4561 insn = gen_rtx_PARALLEL (VOIDmode,
4562 gen_rtvec (2, delay,
4563 gen_rtx_RETURN (VOIDmode)));
4564 insn = emit_jump_insn (insn);
4566 sparc_emitting_epilogue = true;
4567 final_scan_insn (insn, file, 1, 0, 1, NULL);
4568 sparc_emitting_epilogue = false;
4571 else if (TARGET_V9 && ! SKIP_CALLERS_UNIMP_P)
4572 fputs ("\treturn\t%i7+8\n\tnop\n", file);
4574 fprintf (file, "\t%s\n\trestore\n", ret);
4576 /* All of the following cases are for leaf functions. */
4577 else if (current_function_calls_eh_return)
4579 else if (current_function_epilogue_delay_list)
4581 /* eligible_for_epilogue_delay_slot ensures that if this is a
4582 leaf function, then we will only have insn in the delay slot
4583 if the frame size is zero, thus no adjust for the stack is
4585 if (actual_fsize != 0)
4587 fprintf (file, "\t%s\n", ret);
4588 final_scan_insn (XEXP (current_function_epilogue_delay_list, 0),
4589 file, 1, 0, 1, NULL);
4591 /* Output 'nop' instead of 'sub %sp,-0,%sp' when no frame, so as to
4592 avoid generating confusing assembly language output. */
4593 else if (actual_fsize == 0)
4594 fprintf (file, "\t%s\n\tnop\n", ret);
4595 else if (actual_fsize <= 4096)
4596 fprintf (file, "\t%s\n\tsub\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4598 else if (actual_fsize <= 8192)
4599 fprintf (file, "\tsub\t%%sp, -4096, %%sp\n\t%s\n\tsub\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n",
4600 ret, actual_fsize - 4096);
4603 build_big_number (file, actual_fsize, "%g1");
4604 fprintf (file, "\t%s\n\tadd\t%%sp, %%g1, %%sp\n", ret);
4608 sparc_output_deferred_case_vectors ();
4611 /* Output a sibling call. */
4614 output_sibcall (rtx insn, rtx call_operand)
4616 int leaf_regs = current_function_uses_only_leaf_regs;
4618 int delay_slot = dbr_sequence_length () > 0;
4622 /* Call to restore global regs might clobber
4623 the delay slot. Instead of checking for this
4624 output the delay slot now. */
4627 rtx delay = NEXT_INSN (insn);
4632 final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
4633 PATTERN (delay) = gen_blockage ();
4634 INSN_CODE (delay) = -1;
4637 output_restore_regs (asm_out_file, leaf_regs);
4640 operands[0] = call_operand;
4644 #ifdef HAVE_AS_RELAX_OPTION
4645 /* If as and ld are relaxing tail call insns into branch always,
4646 use or %o7,%g0,X; call Y; or X,%g0,%o7 always, so that it can
4647 be optimized. With sethi/jmpl as nor ld has no easy way how to
4648 find out if somebody does not branch between the sethi and jmpl. */
4651 int spare_slot = ((TARGET_ARCH32 || TARGET_CM_MEDLOW) && ! flag_pic);
4653 HOST_WIDE_INT size = 0;
4655 if ((actual_fsize || ! spare_slot) && delay_slot)
4657 rtx delay = NEXT_INSN (insn);
4662 final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
4663 PATTERN (delay) = gen_blockage ();
4664 INSN_CODE (delay) = -1;
4669 if (actual_fsize <= 4096)
4670 size = actual_fsize;
4671 else if (actual_fsize <= 8192)
4673 fputs ("\tsub\t%sp, -4096, %sp\n", asm_out_file);
4674 size = actual_fsize - 4096;
4678 build_big_number (asm_out_file, actual_fsize, "%g1");
4679 fputs ("\tadd\t%%sp, %%g1, %%sp\n", asm_out_file);
4684 output_asm_insn ("sethi\t%%hi(%a0), %%g1", operands);
4685 output_asm_insn ("jmpl\t%%g1 + %%lo(%a0), %%g0", operands);
4687 fprintf (asm_out_file, "\t sub\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n", size);
4688 else if (! delay_slot)
4689 fputs ("\t nop\n", asm_out_file);
4694 fprintf (asm_out_file, "\tsub\t%%sp, -"HOST_WIDE_INT_PRINT_DEC", %%sp\n", size);
4695 /* Use or with rs2 %%g0 instead of mov, so that as/ld can optimize
4696 it into branch if possible. */
4697 output_asm_insn ("or\t%%o7, %%g0, %%g1", operands);
4698 output_asm_insn ("call\t%a0, 0", operands);
4699 output_asm_insn (" or\t%%g1, %%g0, %%o7", operands);
4704 output_asm_insn ("call\t%a0, 0", operands);
4707 rtx delay = NEXT_INSN (insn), pat;
4712 pat = PATTERN (delay);
4713 if (GET_CODE (pat) != SET)
4716 operands[0] = SET_DEST (pat);
4717 pat = SET_SRC (pat);
4718 switch (GET_CODE (pat))
4721 operands[1] = XEXP (pat, 0);
4722 operands[2] = XEXP (pat, 1);
4723 output_asm_insn (" restore %r1, %2, %Y0", operands);
4726 operands[1] = XEXP (pat, 0);
4727 operands[2] = XEXP (pat, 1);
4728 output_asm_insn (" restore %r1, %%lo(%a2), %Y0", operands);
4731 operands[1] = XEXP (pat, 0);
4732 output_asm_insn (" restore %r1, %r1, %Y0", operands);
4736 output_asm_insn (" restore %%g0, %1, %Y0", operands);
4739 PATTERN (delay) = gen_blockage ();
4740 INSN_CODE (delay) = -1;
4743 fputs ("\t restore\n", asm_out_file);
4747 /* Functions for handling argument passing.
4749 For v8 the first six args are normally in registers and the rest are
4750 pushed. Any arg that starts within the first 6 words is at least
4751 partially passed in a register unless its data type forbids.
4753 For v9, the argument registers are laid out as an array of 16 elements
4754 and arguments are added sequentially. The first 6 int args and up to the
4755 first 16 fp args (depending on size) are passed in regs.
4757 Slot Stack Integral Float Float in structure Double Long Double
4758 ---- ----- -------- ----- ------------------ ------ -----------
4759 15 [SP+248] %f31 %f30,%f31 %d30
4760 14 [SP+240] %f29 %f28,%f29 %d28 %q28
4761 13 [SP+232] %f27 %f26,%f27 %d26
4762 12 [SP+224] %f25 %f24,%f25 %d24 %q24
4763 11 [SP+216] %f23 %f22,%f23 %d22
4764 10 [SP+208] %f21 %f20,%f21 %d20 %q20
4765 9 [SP+200] %f19 %f18,%f19 %d18
4766 8 [SP+192] %f17 %f16,%f17 %d16 %q16
4767 7 [SP+184] %f15 %f14,%f15 %d14
4768 6 [SP+176] %f13 %f12,%f13 %d12 %q12
4769 5 [SP+168] %o5 %f11 %f10,%f11 %d10
4770 4 [SP+160] %o4 %f9 %f8,%f9 %d8 %q8
4771 3 [SP+152] %o3 %f7 %f6,%f7 %d6
4772 2 [SP+144] %o2 %f5 %f4,%f5 %d4 %q4
4773 1 [SP+136] %o1 %f3 %f2,%f3 %d2
4774 0 [SP+128] %o0 %f1 %f0,%f1 %d0 %q0
4776 Here SP = %sp if -mno-stack-bias or %sp+stack_bias otherwise.
4778 Integral arguments are always passed as 64 bit quantities appropriately
4781 Passing of floating point values is handled as follows.
4782 If a prototype is in scope:
4783 If the value is in a named argument (i.e. not a stdarg function or a
4784 value not part of the `...') then the value is passed in the appropriate
4786 If the value is part of the `...' and is passed in one of the first 6
4787 slots then the value is passed in the appropriate int reg.
4788 If the value is part of the `...' and is not passed in one of the first 6
4789 slots then the value is passed in memory.
4790 If a prototype is not in scope:
4791 If the value is one of the first 6 arguments the value is passed in the
4792 appropriate integer reg and the appropriate fp reg.
4793 If the value is not one of the first 6 arguments the value is passed in
4794 the appropriate fp reg and in memory.
4797 /* Maximum number of int regs for args. */
4798 #define SPARC_INT_ARG_MAX 6
4799 /* Maximum number of fp regs for args. */
4800 #define SPARC_FP_ARG_MAX 16
4802 #define ROUND_ADVANCE(SIZE) (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
4804 /* Handle the INIT_CUMULATIVE_ARGS macro.
4805 Initialize a variable CUM of type CUMULATIVE_ARGS
4806 for a call to a function whose data type is FNTYPE.
4807 For a library call, FNTYPE is 0. */
4810 init_cumulative_args (struct sparc_args *cum, tree fntype,
4811 rtx libname ATTRIBUTE_UNUSED,
4812 tree fndecl ATTRIBUTE_UNUSED)
4815 cum->prototype_p = fntype && TYPE_ARG_TYPES (fntype);
4816 cum->libcall_p = fntype == 0;
4819 /* Compute the slot number to pass an argument in.
4820 Returns the slot number or -1 if passing on the stack.
4822 CUM is a variable of type CUMULATIVE_ARGS which gives info about
4823 the preceding args and about the function being called.
4824 MODE is the argument's machine mode.
4825 TYPE is the data type of the argument (as a tree).
4826 This is null for libcalls where that information may
4828 NAMED is nonzero if this argument is a named parameter
4829 (otherwise it is an extra parameter matching an ellipsis).
4830 INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG.
4831 *PREGNO records the register number to use if scalar type.
4832 *PPADDING records the amount of padding needed in words. */
4835 function_arg_slotno (const struct sparc_args *cum, enum machine_mode mode,
4836 tree type, int named, int incoming_p,
4837 int *pregno, int *ppadding)
4839 int regbase = (incoming_p
4840 ? SPARC_INCOMING_INT_ARG_FIRST
4841 : SPARC_OUTGOING_INT_ARG_FIRST);
4842 int slotno = cum->words;
4847 if (type != 0 && TREE_ADDRESSABLE (type))
4850 && type != 0 && mode == BLKmode
4851 && TYPE_ALIGN (type) % PARM_BOUNDARY != 0)
4857 /* MODE is VOIDmode when generating the actual call.
4861 case QImode : case CQImode :
4862 case HImode : case CHImode :
4863 case SImode : case CSImode :
4864 case DImode : case CDImode :
4865 case TImode : case CTImode :
4866 if (slotno >= SPARC_INT_ARG_MAX)
4868 regno = regbase + slotno;
4871 case SFmode : case SCmode :
4872 case DFmode : case DCmode :
4873 case TFmode : case TCmode :
4876 if (slotno >= SPARC_INT_ARG_MAX)
4878 regno = regbase + slotno;
4882 if ((mode == TFmode || mode == TCmode)
4883 && (slotno & 1) != 0)
4884 slotno++, *ppadding = 1;
4885 if (TARGET_FPU && named)
4887 if (slotno >= SPARC_FP_ARG_MAX)
4889 regno = SPARC_FP_ARG_FIRST + slotno * 2;
4895 if (slotno >= SPARC_INT_ARG_MAX)
4897 regno = regbase + slotno;
4903 /* For sparc64, objects requiring 16 byte alignment get it. */
4906 if (type && TYPE_ALIGN (type) == 128 && (slotno & 1) != 0)
4907 slotno++, *ppadding = 1;
4911 || (type && TREE_CODE (type) == UNION_TYPE))
4913 if (slotno >= SPARC_INT_ARG_MAX)
4915 regno = regbase + slotno;
4920 int intregs_p = 0, fpregs_p = 0;
4921 /* The ABI obviously doesn't specify how packed
4922 structures are passed. These are defined to be passed
4923 in int regs if possible, otherwise memory. */
4926 /* First see what kinds of registers we need. */
4927 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4929 if (TREE_CODE (field) == FIELD_DECL)
4931 if (FLOAT_TYPE_P (TREE_TYPE (field)) && TARGET_FPU)
4935 if (DECL_PACKED (field))
4939 if (packed_p || !named)
4940 fpregs_p = 0, intregs_p = 1;
4942 /* If all arg slots are filled, then must pass on stack. */
4943 if (fpregs_p && slotno >= SPARC_FP_ARG_MAX)
4945 /* If there are only int args and all int arg slots are filled,
4946 then must pass on stack. */
4947 if (!fpregs_p && intregs_p && slotno >= SPARC_INT_ARG_MAX)
4949 /* Note that even if all int arg slots are filled, fp members may
4950 still be passed in regs if such regs are available.
4951 *PREGNO isn't set because there may be more than one, it's up
4952 to the caller to compute them. */
4965 /* Handle recursive register counting for structure field layout. */
4967 struct function_arg_record_value_parms
4969 rtx ret; /* return expression being built. */
4970 int slotno; /* slot number of the argument. */
4971 int named; /* whether the argument is named. */
4972 int regbase; /* regno of the base register. */
4973 int stack; /* 1 if part of the argument is on the stack. */
4974 int intoffset; /* offset of the first pending integer field. */
4975 unsigned int nregs; /* number of words passed in registers. */
4978 static void function_arg_record_value_3
4979 (HOST_WIDE_INT, struct function_arg_record_value_parms *);
4980 static void function_arg_record_value_2
4981 (tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
4982 static void function_arg_record_value_1
4983 (tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
4984 static rtx function_arg_record_value (tree, enum machine_mode, int, int, int);
4986 /* A subroutine of function_arg_record_value. Traverse the structure
4987 recursively and determine how many registers will be required. */
4990 function_arg_record_value_1 (tree type, HOST_WIDE_INT startbitpos,
4991 struct function_arg_record_value_parms *parms,
4996 /* We need to compute how many registers are needed so we can
4997 allocate the PARALLEL but before we can do that we need to know
4998 whether there are any packed fields. The ABI obviously doesn't
4999 specify how structures are passed in this case, so they are
5000 defined to be passed in int regs if possible, otherwise memory,
5001 regardless of whether there are fp values present. */
5004 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5006 if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
5013 /* Compute how many registers we need. */
5014 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5016 if (TREE_CODE (field) == FIELD_DECL)
5018 HOST_WIDE_INT bitpos = startbitpos;
5020 if (DECL_SIZE (field) != 0
5021 && host_integerp (bit_position (field), 1))
5022 bitpos += int_bit_position (field);
5024 /* ??? FIXME: else assume zero offset. */
5026 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
5027 function_arg_record_value_1 (TREE_TYPE (field),
5031 else if (FLOAT_TYPE_P (TREE_TYPE (field))
5036 if (parms->intoffset != -1)
5038 unsigned int startbit, endbit;
5039 int intslots, this_slotno;
5041 startbit = parms->intoffset & -BITS_PER_WORD;
5042 endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5044 intslots = (endbit - startbit) / BITS_PER_WORD;
5045 this_slotno = parms->slotno + parms->intoffset
5048 if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
5050 intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
5051 /* We need to pass this field on the stack. */
5055 parms->nregs += intslots;
5056 parms->intoffset = -1;
5059 /* There's no need to check this_slotno < SPARC_FP_ARG MAX.
5060 If it wasn't true we wouldn't be here. */
5062 if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
5067 if (parms->intoffset == -1)
5068 parms->intoffset = bitpos;
5074 /* A subroutine of function_arg_record_value. Assign the bits of the
5075 structure between parms->intoffset and bitpos to integer registers. */
5078 function_arg_record_value_3 (HOST_WIDE_INT bitpos,
5079 struct function_arg_record_value_parms *parms)
5081 enum machine_mode mode;
5083 unsigned int startbit, endbit;
5084 int this_slotno, intslots, intoffset;
5087 if (parms->intoffset == -1)
5090 intoffset = parms->intoffset;
5091 parms->intoffset = -1;
5093 startbit = intoffset & -BITS_PER_WORD;
5094 endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5095 intslots = (endbit - startbit) / BITS_PER_WORD;
5096 this_slotno = parms->slotno + intoffset / BITS_PER_WORD;
5098 intslots = MIN (intslots, SPARC_INT_ARG_MAX - this_slotno);
5102 /* If this is the trailing part of a word, only load that much into
5103 the register. Otherwise load the whole register. Note that in
5104 the latter case we may pick up unwanted bits. It's not a problem
5105 at the moment but may wish to revisit. */
5107 if (intoffset % BITS_PER_WORD != 0)
5108 mode = mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD,
5113 intoffset /= BITS_PER_UNIT;
5116 regno = parms->regbase + this_slotno;
5117 reg = gen_rtx_REG (mode, regno);
5118 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5119 = gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (intoffset));
5122 intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1;
5127 while (intslots > 0);
5130 /* A subroutine of function_arg_record_value. Traverse the structure
5131 recursively and assign bits to floating point registers. Track which
5132 bits in between need integer registers; invoke function_arg_record_value_3
5133 to make that happen. */
5136 function_arg_record_value_2 (tree type, HOST_WIDE_INT startbitpos,
5137 struct function_arg_record_value_parms *parms,
5143 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5145 if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
5152 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5154 if (TREE_CODE (field) == FIELD_DECL)
5156 HOST_WIDE_INT bitpos = startbitpos;
5158 if (DECL_SIZE (field) != 0
5159 && host_integerp (bit_position (field), 1))
5160 bitpos += int_bit_position (field);
5162 /* ??? FIXME: else assume zero offset. */
5164 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
5165 function_arg_record_value_2 (TREE_TYPE (field),
5169 else if (FLOAT_TYPE_P (TREE_TYPE (field))
5174 int this_slotno = parms->slotno + bitpos / BITS_PER_WORD;
5176 enum machine_mode mode = DECL_MODE (field);
5179 function_arg_record_value_3 (bitpos, parms);
5180 regno = SPARC_FP_ARG_FIRST + this_slotno * 2
5181 + ((mode == SFmode || mode == SCmode)
5182 && (bitpos & 32) != 0);
5185 case SCmode: mode = SFmode; break;
5186 case DCmode: mode = DFmode; break;
5187 case TCmode: mode = TFmode; break;
5190 reg = gen_rtx_REG (mode, regno);
5191 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5192 = gen_rtx_EXPR_LIST (VOIDmode, reg,
5193 GEN_INT (bitpos / BITS_PER_UNIT));
5195 if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
5197 regno += GET_MODE_SIZE (mode) / 4;
5198 reg = gen_rtx_REG (mode, regno);
5199 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5200 = gen_rtx_EXPR_LIST (VOIDmode, reg,
5201 GEN_INT ((bitpos + GET_MODE_BITSIZE (mode))
5208 if (parms->intoffset == -1)
5209 parms->intoffset = bitpos;
5215 /* Used by function_arg and function_value to implement the complex
5216 conventions of the 64-bit ABI for passing and returning structures.
5217 Return an expression valid as a return value for the two macros
5218 FUNCTION_ARG and FUNCTION_VALUE.
5220 TYPE is the data type of the argument (as a tree).
5221 This is null for libcalls where that information may
5223 MODE is the argument's machine mode.
5224 SLOTNO is the index number of the argument's slot in the parameter array.
5225 NAMED is nonzero if this argument is a named parameter
5226 (otherwise it is an extra parameter matching an ellipsis).
5227 REGBASE is the regno of the base register for the parameter array. */
5230 function_arg_record_value (tree type, enum machine_mode mode,
5231 int slotno, int named, int regbase)
5233 HOST_WIDE_INT typesize = int_size_in_bytes (type);
5234 struct function_arg_record_value_parms parms;
5237 parms.ret = NULL_RTX;
5238 parms.slotno = slotno;
5239 parms.named = named;
5240 parms.regbase = regbase;
5243 /* Compute how many registers we need. */
5245 parms.intoffset = 0;
5246 function_arg_record_value_1 (type, 0, &parms, false);
5248 /* Take into account pending integer fields. */
5249 if (parms.intoffset != -1)
5251 unsigned int startbit, endbit;
5252 int intslots, this_slotno;
5254 startbit = parms.intoffset & -BITS_PER_WORD;
5255 endbit = (typesize*BITS_PER_UNIT + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5256 intslots = (endbit - startbit) / BITS_PER_WORD;
5257 this_slotno = slotno + parms.intoffset / BITS_PER_WORD;
5259 if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
5261 intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
5262 /* We need to pass this field on the stack. */
5266 parms.nregs += intslots;
5268 nregs = parms.nregs;
5270 /* Allocate the vector and handle some annoying special cases. */
5273 /* ??? Empty structure has no value? Duh? */
5276 /* Though there's nothing really to store, return a word register
5277 anyway so the rest of gcc doesn't go nuts. Returning a PARALLEL
5278 leads to breakage due to the fact that there are zero bytes to
5280 return gen_rtx_REG (mode, regbase);
5284 /* ??? C++ has structures with no fields, and yet a size. Give up
5285 for now and pass everything back in integer registers. */
5286 nregs = (typesize + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
5288 if (nregs + slotno > SPARC_INT_ARG_MAX)
5289 nregs = SPARC_INT_ARG_MAX - slotno;
5294 parms.ret = gen_rtx_PARALLEL (mode, rtvec_alloc (parms.stack + nregs));
5296 /* If at least one field must be passed on the stack, generate
5297 (parallel [(expr_list (nil) ...) ...]) so that all fields will
5298 also be passed on the stack. We can't do much better because the
5299 semantics of FUNCTION_ARG_PARTIAL_NREGS doesn't handle the case
5300 of structures for which the fields passed exclusively in registers
5301 are not at the beginning of the structure. */
5303 XVECEXP (parms.ret, 0, 0)
5304 = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
5306 /* Fill in the entries. */
5308 parms.intoffset = 0;
5309 function_arg_record_value_2 (type, 0, &parms, false);
5310 function_arg_record_value_3 (typesize * BITS_PER_UNIT, &parms);
5312 if (parms.nregs != nregs)
5318 /* Handle the FUNCTION_ARG macro.
5319 Determine where to put an argument to a function.
5320 Value is zero to push the argument on the stack,
5321 or a hard register in which to store the argument.
5323 CUM is a variable of type CUMULATIVE_ARGS which gives info about
5324 the preceding args and about the function being called.
5325 MODE is the argument's machine mode.
5326 TYPE is the data type of the argument (as a tree).
5327 This is null for libcalls where that information may
5329 NAMED is nonzero if this argument is a named parameter
5330 (otherwise it is an extra parameter matching an ellipsis).
5331 INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG. */
5334 function_arg (const struct sparc_args *cum, enum machine_mode mode,
5335 tree type, int named, int incoming_p)
5337 int regbase = (incoming_p
5338 ? SPARC_INCOMING_INT_ARG_FIRST
5339 : SPARC_OUTGOING_INT_ARG_FIRST);
5340 int slotno, regno, padding;
5343 slotno = function_arg_slotno (cum, mode, type, named, incoming_p,
5351 reg = gen_rtx_REG (mode, regno);
5355 if (type && TREE_CODE (type) == RECORD_TYPE)
5357 /* Structures up to 16 bytes in size are passed in arg slots on the
5358 stack and are promoted to registers where possible. */
5360 if (int_size_in_bytes (type) > 16)
5361 abort (); /* shouldn't get here */
5363 return function_arg_record_value (type, mode, slotno, named, regbase);
5365 else if (type && TREE_CODE (type) == UNION_TYPE)
5367 enum machine_mode mode;
5368 int bytes = int_size_in_bytes (type);
5373 mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
5374 reg = gen_rtx_REG (mode, regno);
5376 /* v9 fp args in reg slots beyond the int reg slots get passed in regs
5377 but also have the slot allocated for them.
5378 If no prototype is in scope fp values in register slots get passed
5379 in two places, either fp regs and int regs or fp regs and memory. */
5380 else if ((GET_MODE_CLASS (mode) == MODE_FLOAT
5381 || GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
5382 && SPARC_FP_REG_P (regno))
5384 reg = gen_rtx_REG (mode, regno);
5385 if (cum->prototype_p || cum->libcall_p)
5387 /* "* 2" because fp reg numbers are recorded in 4 byte
5390 /* ??? This will cause the value to be passed in the fp reg and
5391 in the stack. When a prototype exists we want to pass the
5392 value in the reg but reserve space on the stack. That's an
5393 optimization, and is deferred [for a bit]. */
5394 if ((regno - SPARC_FP_ARG_FIRST) >= SPARC_INT_ARG_MAX * 2)
5395 return gen_rtx_PARALLEL (mode,
5397 gen_rtx_EXPR_LIST (VOIDmode,
5398 NULL_RTX, const0_rtx),
5399 gen_rtx_EXPR_LIST (VOIDmode,
5403 /* ??? It seems that passing back a register even when past
5404 the area declared by REG_PARM_STACK_SPACE will allocate
5405 space appropriately, and will not copy the data onto the
5406 stack, exactly as we desire.
5408 This is due to locate_and_pad_parm being called in
5409 expand_call whenever reg_parm_stack_space > 0, which
5410 while beneficial to our example here, would seem to be
5411 in error from what had been intended. Ho hum... -- r~ */
5419 if ((regno - SPARC_FP_ARG_FIRST) < SPARC_INT_ARG_MAX * 2)
5423 /* On incoming, we don't need to know that the value
5424 is passed in %f0 and %i0, and it confuses other parts
5425 causing needless spillage even on the simplest cases. */
5429 intreg = (SPARC_OUTGOING_INT_ARG_FIRST
5430 + (regno - SPARC_FP_ARG_FIRST) / 2);
5432 v0 = gen_rtx_EXPR_LIST (VOIDmode, reg, const0_rtx);
5433 v1 = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_REG (mode, intreg),
5435 return gen_rtx_PARALLEL (mode, gen_rtvec (2, v0, v1));
5439 v0 = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
5440 v1 = gen_rtx_EXPR_LIST (VOIDmode, reg, const0_rtx);
5441 return gen_rtx_PARALLEL (mode, gen_rtvec (2, v0, v1));
5447 /* Scalar or complex int. */
5448 reg = gen_rtx_REG (mode, regno);
5454 /* Handle the FUNCTION_ARG_PARTIAL_NREGS macro.
5455 For an arg passed partly in registers and partly in memory,
5456 this is the number of registers used.
5457 For args passed entirely in registers or entirely in memory, zero.
5459 Any arg that starts in the first 6 regs but won't entirely fit in them
5460 needs partial registers on v8. On v9, structures with integer
5461 values in arg slots 5,6 will be passed in %o5 and SP+176, and complex fp
5462 values that begin in the last fp reg [where "last fp reg" varies with the
5463 mode] will be split between that reg and memory. */
5466 function_arg_partial_nregs (const struct sparc_args *cum,
5467 enum machine_mode mode, tree type, int named)
5469 int slotno, regno, padding;
5471 /* We pass 0 for incoming_p here, it doesn't matter. */
5472 slotno = function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
5479 if ((slotno + (mode == BLKmode
5480 ? ROUND_ADVANCE (int_size_in_bytes (type))
5481 : ROUND_ADVANCE (GET_MODE_SIZE (mode))))
5482 > NPARM_REGS (SImode))
5483 return NPARM_REGS (SImode) - slotno;
5488 if (type && AGGREGATE_TYPE_P (type))
5490 int size = int_size_in_bytes (type);
5491 int align = TYPE_ALIGN (type);
5494 slotno += slotno & 1;
5495 if (size > 8 && size <= 16
5496 && slotno == SPARC_INT_ARG_MAX - 1)
5499 else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT
5500 || (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
5501 && ! (TARGET_FPU && named)))
5503 /* The complex types are passed as packed types. */
5504 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD)
5507 if (GET_MODE_ALIGNMENT (mode) == 128)
5509 slotno += slotno & 1;
5511 /* ??? The mode needs 3 slots? */
5512 if (slotno == SPARC_INT_ARG_MAX - 2)
5517 if (slotno == SPARC_INT_ARG_MAX - 1)
5521 else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
5523 if (GET_MODE_ALIGNMENT (mode) == 128)
5524 slotno += slotno & 1;
5525 if ((slotno + GET_MODE_SIZE (mode) / UNITS_PER_WORD)
5533 /* Handle the FUNCTION_ARG_PASS_BY_REFERENCE macro.
5534 !v9: The SPARC ABI stipulates passing struct arguments (of any size) and
5535 quad-precision floats by invisible reference.
5536 v9: Aggregates greater than 16 bytes are passed by reference.
5537 For Pascal, also pass arrays by reference. */
5540 function_arg_pass_by_reference (const struct sparc_args *cum ATTRIBUTE_UNUSED,
5541 enum machine_mode mode, tree type,
5542 int named ATTRIBUTE_UNUSED)
5546 return ((type && AGGREGATE_TYPE_P (type))
5547 || mode == TFmode || mode == TCmode);
5551 return ((type && TREE_CODE (type) == ARRAY_TYPE)
5552 /* Consider complex values as aggregates, so care
5553 for CTImode and TCmode. */
5554 || GET_MODE_SIZE (mode) > 16
5556 && AGGREGATE_TYPE_P (type)
5557 && (unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 16));
5561 /* Handle the FUNCTION_ARG_ADVANCE macro.
5562 Update the data in CUM to advance over an argument
5563 of mode MODE and data type TYPE.
5564 TYPE is null for libcalls where that information may not be available. */
5567 function_arg_advance (struct sparc_args *cum, enum machine_mode mode,
5568 tree type, int named)
5570 int slotno, regno, padding;
5572 /* We pass 0 for incoming_p here, it doesn't matter. */
5573 slotno = function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
5575 /* If register required leading padding, add it. */
5577 cum->words += padding;
5581 cum->words += (mode != BLKmode
5582 ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
5583 : ROUND_ADVANCE (int_size_in_bytes (type)));
5587 if (type && AGGREGATE_TYPE_P (type))
5589 int size = int_size_in_bytes (type);
5593 else if (size <= 16)
5595 else /* passed by reference */
5600 cum->words += (mode != BLKmode
5601 ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
5602 : ROUND_ADVANCE (int_size_in_bytes (type)));
5607 /* Handle the FUNCTION_ARG_PADDING macro.
5608 For the 64 bit ABI structs are always stored left shifted in their
5612 function_arg_padding (enum machine_mode mode, tree type)
5614 if (TARGET_ARCH64 && type != 0 && AGGREGATE_TYPE_P (type))
5617 /* Fall back to the default. */
5618 return DEFAULT_FUNCTION_ARG_PADDING (mode, type);
5621 /* Handle FUNCTION_VALUE, FUNCTION_OUTGOING_VALUE, and LIBCALL_VALUE macros.
5622 For v9, function return values are subject to the same rules as arguments,
5623 except that up to 32-bytes may be returned in registers. */
5626 function_value (tree type, enum machine_mode mode, int incoming_p)
5629 int regbase = (incoming_p
5630 ? SPARC_OUTGOING_INT_ARG_FIRST
5631 : SPARC_INCOMING_INT_ARG_FIRST);
5633 if (TARGET_ARCH64 && type)
5635 if (TREE_CODE (type) == RECORD_TYPE)
5637 /* Structures up to 32 bytes in size are passed in registers,
5638 promoted to fp registers where possible. */
5640 if (int_size_in_bytes (type) > 32)
5641 abort (); /* shouldn't get here */
5643 return function_arg_record_value (type, mode, 0, 1, regbase);
5645 else if (AGGREGATE_TYPE_P (type))
5647 /* All other aggregate types are passed in an integer register
5648 in a mode corresponding to the size of the type. */
5649 HOST_WIDE_INT bytes = int_size_in_bytes (type);
5654 mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
5659 && GET_MODE_CLASS (mode) == MODE_INT
5660 && GET_MODE_SIZE (mode) < UNITS_PER_WORD
5661 && type && ! AGGREGATE_TYPE_P (type))
5665 regno = BASE_RETURN_VALUE_REG (mode);
5667 regno = BASE_OUTGOING_VALUE_REG (mode);
5669 return gen_rtx_REG (mode, regno);
5672 /* Do what is necessary for `va_start'. We look at the current function
5673 to determine if stdarg or varargs is used and return the address of
5674 the first unnamed parameter. */
5677 sparc_builtin_saveregs (void)
5679 int first_reg = current_function_args_info.words;
5683 for (regno = first_reg; regno < NPARM_REGS (word_mode); regno++)
5684 emit_move_insn (gen_rtx_MEM (word_mode,
5685 gen_rtx_PLUS (Pmode,
5687 GEN_INT (FIRST_PARM_OFFSET (0)
5690 gen_rtx_REG (word_mode,
5691 BASE_INCOMING_ARG_REG (word_mode) + regno));
5693 address = gen_rtx_PLUS (Pmode,
5695 GEN_INT (FIRST_PARM_OFFSET (0)
5696 + UNITS_PER_WORD * first_reg));
5701 /* Implement `va_start' for varargs and stdarg. */
5704 sparc_va_start (tree valist, rtx nextarg)
5706 nextarg = expand_builtin_saveregs ();
5707 std_expand_builtin_va_start (valist, nextarg);
5710 /* Implement `va_arg'. */
5713 sparc_va_arg (tree valist, tree type)
5715 HOST_WIDE_INT size, rsize, align;
5720 /* Round up sizeof(type) to a word. */
5721 size = int_size_in_bytes (type);
5722 rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
5727 if (TYPE_ALIGN (type) >= 2 * (unsigned) BITS_PER_WORD)
5728 align = 2 * UNITS_PER_WORD;
5730 /* Consider complex values as aggregates, so care
5731 for CTImode and TCmode. */
5732 if ((unsigned HOST_WIDE_INT) size > 16)
5735 size = rsize = UNITS_PER_WORD;
5738 else if (AGGREGATE_TYPE_P (type))
5740 /* SPARC-V9 ABI states that structures up to 16 bytes in size
5741 are given whole slots as needed. */
5743 size = rsize = UNITS_PER_WORD;
5750 if (AGGREGATE_TYPE_P (type)
5751 || TYPE_MODE (type) == TFmode
5752 || TYPE_MODE (type) == TCmode)
5755 size = rsize = UNITS_PER_WORD;
5762 incr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5763 build_int_2 (align - 1, 0)));
5764 incr = fold (build (BIT_AND_EXPR, ptr_type_node, incr,
5765 build_int_2 (-align, -1)));
5768 addr = incr = save_expr (incr);
5769 if (BYTES_BIG_ENDIAN && size < rsize)
5771 addr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5772 build_int_2 (rsize - size, 0)));
5774 incr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5775 build_int_2 (rsize, 0)));
5777 incr = build (MODIFY_EXPR, ptr_type_node, valist, incr);
5778 TREE_SIDE_EFFECTS (incr) = 1;
5779 expand_expr (incr, const0_rtx, VOIDmode, EXPAND_NORMAL);
5781 addr_rtx = expand_expr (addr, NULL, Pmode, EXPAND_NORMAL);
5783 /* If the address isn't aligned properly for the type,
5784 we may need to copy to a temporary.
5785 FIXME: This is inefficient. Usually we can do this
5788 && TYPE_ALIGN (type) > BITS_PER_WORD
5791 /* FIXME: We really need to specify that the temporary is live
5792 for the whole function because expand_builtin_va_arg wants
5793 the alias set to be get_varargs_alias_set (), but in this
5794 case the alias set is that for TYPE and if the memory gets
5795 reused it will be reused with alias set TYPE. */
5796 rtx tmp = assign_temp (type, 0, 1, 0);
5799 addr_rtx = force_reg (Pmode, addr_rtx);
5800 addr_rtx = gen_rtx_MEM (BLKmode, addr_rtx);
5801 set_mem_alias_set (addr_rtx, get_varargs_alias_set ());
5802 set_mem_align (addr_rtx, BITS_PER_WORD);
5803 tmp = shallow_copy_rtx (tmp);
5804 PUT_MODE (tmp, BLKmode);
5805 set_mem_alias_set (tmp, 0);
5807 dest_addr = emit_block_move (tmp, addr_rtx, GEN_INT (rsize),
5809 if (dest_addr != NULL_RTX)
5810 addr_rtx = dest_addr;
5812 addr_rtx = XCEXP (tmp, 0, MEM);
5817 addr_rtx = force_reg (Pmode, addr_rtx);
5818 addr_rtx = gen_rtx_MEM (Pmode, addr_rtx);
5819 set_mem_alias_set (addr_rtx, get_varargs_alias_set ());
5825 /* Return the string to output a conditional branch to LABEL, which is
5826 the operand number of the label. OP is the conditional expression.
5827 XEXP (OP, 0) is assumed to be a condition code register (integer or
5828 floating point) and its mode specifies what kind of comparison we made.
5830 REVERSED is nonzero if we should reverse the sense of the comparison.
5832 ANNUL is nonzero if we should generate an annulling branch.
5834 NOOP is nonzero if we have to follow this branch by a noop.
5836 INSN, if set, is the insn. */
5839 output_cbranch (rtx op, rtx dest, int label, int reversed, int annul,
5842 static char string[50];
5843 enum rtx_code code = GET_CODE (op);
5844 rtx cc_reg = XEXP (op, 0);
5845 enum machine_mode mode = GET_MODE (cc_reg);
5846 const char *labelno, *branch;
5847 int spaces = 8, far;
5850 /* v9 branches are limited to +-1MB. If it is too far away,
5863 fbne,a,pn %fcc2, .LC29
5871 far = get_attr_length (insn) >= 3;
5874 /* Reversal of FP compares takes care -- an ordered compare
5875 becomes an unordered compare and vice versa. */
5876 if (mode == CCFPmode || mode == CCFPEmode)
5877 code = reverse_condition_maybe_unordered (code);
5879 code = reverse_condition (code);
5882 /* Start by writing the branch condition. */
5883 if (mode == CCFPmode || mode == CCFPEmode)
5934 /* ??? !v9: FP branches cannot be preceded by another floating point
5935 insn. Because there is currently no concept of pre-delay slots,
5936 we can fix this only by always emitting a nop before a floating
5941 strcpy (string, "nop\n\t");
5942 strcat (string, branch);
5955 if (mode == CC_NOOVmode || mode == CCX_NOOVmode)
5967 if (mode == CC_NOOVmode || mode == CCX_NOOVmode)
5988 strcpy (string, branch);
5990 spaces -= strlen (branch);
5991 p = strchr (string, '\0');
5993 /* Now add the annulling, the label, and a possible noop. */
6008 if (! far && insn && INSN_ADDRESSES_SET_P ())
6010 int delta = (INSN_ADDRESSES (INSN_UID (dest))
6011 - INSN_ADDRESSES (INSN_UID (insn)));
6012 /* Leave some instructions for "slop". */
6013 if (delta < -260000 || delta >= 260000)
6017 if (mode == CCFPmode || mode == CCFPEmode)
6019 static char v9_fcc_labelno[] = "%%fccX, ";
6020 /* Set the char indicating the number of the fcc reg to use. */
6021 v9_fcc_labelno[5] = REGNO (cc_reg) - SPARC_FIRST_V9_FCC_REG + '0';
6022 labelno = v9_fcc_labelno;
6025 if (REGNO (cc_reg) == SPARC_FCC_REG)
6031 else if (mode == CCXmode || mode == CCX_NOOVmode)
6033 labelno = "%%xcc, ";
6039 labelno = "%%icc, ";
6044 if (*labelno && insn && (note = find_reg_note (insn, REG_BR_PROB, NULL_RTX)))
6047 ((INTVAL (XEXP (note, 0)) >= REG_BR_PROB_BASE / 2) ^ far)
6057 strcpy (p, labelno);
6058 p = strchr (p, '\0');
6061 strcpy (p, ".+12\n\tnop\n\tb\t");
6068 /* Set the char indicating the number of the operand containing the
6073 strcpy (p, "\n\tnop");
6078 /* Emit a library call comparison between floating point X and Y.
6079 COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.).
6080 TARGET_ARCH64 uses _Qp_* functions, which use pointers to TFmode
6081 values as arguments instead of the TFmode registers themselves,
6082 that's why we cannot call emit_float_lib_cmp. */
6084 sparc_emit_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison)
6087 rtx slot0, slot1, result, tem, tem2;
6088 enum machine_mode mode;
6093 qpfunc = (TARGET_ARCH64) ? "_Qp_feq" : "_Q_feq";
6097 qpfunc = (TARGET_ARCH64) ? "_Qp_fne" : "_Q_fne";
6101 qpfunc = (TARGET_ARCH64) ? "_Qp_fgt" : "_Q_fgt";
6105 qpfunc = (TARGET_ARCH64) ? "_Qp_fge" : "_Q_fge";
6109 qpfunc = (TARGET_ARCH64) ? "_Qp_flt" : "_Q_flt";
6113 qpfunc = (TARGET_ARCH64) ? "_Qp_fle" : "_Q_fle";
6124 qpfunc = (TARGET_ARCH64) ? "_Qp_cmp" : "_Q_cmp";
6134 if (GET_CODE (x) != MEM)
6136 slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
6137 emit_insn (gen_rtx_SET (VOIDmode, slot0, x));
6142 if (GET_CODE (y) != MEM)
6144 slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
6145 emit_insn (gen_rtx_SET (VOIDmode, slot1, y));
6150 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
6152 XEXP (slot0, 0), Pmode,
6153 XEXP (slot1, 0), Pmode);
6159 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
6161 x, TFmode, y, TFmode);
6167 /* Immediately move the result of the libcall into a pseudo
6168 register so reload doesn't clobber the value if it needs
6169 the return register for a spill reg. */
6170 result = gen_reg_rtx (mode);
6171 emit_move_insn (result, hard_libcall_value (mode));
6176 emit_cmp_insn (result, const0_rtx, NE, NULL_RTX, mode, 0);
6180 emit_cmp_insn (result, GEN_INT(3), comparison == UNORDERED ? EQ : NE,
6185 emit_cmp_insn (result, const1_rtx,
6186 comparison == UNGT ? GT : NE, NULL_RTX, mode, 0);
6189 emit_cmp_insn (result, const2_rtx, NE, NULL_RTX, mode, 0);
6192 tem = gen_reg_rtx (mode);
6194 emit_insn (gen_andsi3 (tem, result, const1_rtx));
6196 emit_insn (gen_anddi3 (tem, result, const1_rtx));
6197 emit_cmp_insn (tem, const0_rtx, NE, NULL_RTX, mode, 0);
6201 tem = gen_reg_rtx (mode);
6203 emit_insn (gen_addsi3 (tem, result, const1_rtx));
6205 emit_insn (gen_adddi3 (tem, result, const1_rtx));
6206 tem2 = gen_reg_rtx (mode);
6208 emit_insn (gen_andsi3 (tem2, tem, const2_rtx));
6210 emit_insn (gen_anddi3 (tem2, tem, const2_rtx));
6211 emit_cmp_insn (tem2, const0_rtx, comparison == UNEQ ? EQ : NE,
6217 /* Generate an unsigned DImode to FP conversion. This is the same code
6218 optabs would emit if we didn't have TFmode patterns. */
6221 sparc_emit_floatunsdi (rtx *operands)
6223 rtx neglab, donelab, i0, i1, f0, in, out;
6224 enum machine_mode mode;
6227 in = force_reg (DImode, operands[1]);
6228 mode = GET_MODE (out);
6229 neglab = gen_label_rtx ();
6230 donelab = gen_label_rtx ();
6231 i0 = gen_reg_rtx (DImode);
6232 i1 = gen_reg_rtx (DImode);
6233 f0 = gen_reg_rtx (mode);
6235 emit_cmp_and_jump_insns (in, const0_rtx, LT, const0_rtx, DImode, 0, neglab);
6237 emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_FLOAT (mode, in)));
6238 emit_jump_insn (gen_jump (donelab));
6241 emit_label (neglab);
6243 emit_insn (gen_lshrdi3 (i0, in, const1_rtx));
6244 emit_insn (gen_anddi3 (i1, in, const1_rtx));
6245 emit_insn (gen_iordi3 (i0, i0, i1));
6246 emit_insn (gen_rtx_SET (VOIDmode, f0, gen_rtx_FLOAT (mode, i0)));
6247 emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_PLUS (mode, f0, f0)));
6249 emit_label (donelab);
6252 /* Return the string to output a conditional branch to LABEL, testing
6253 register REG. LABEL is the operand number of the label; REG is the
6254 operand number of the reg. OP is the conditional expression. The mode
6255 of REG says what kind of comparison we made.
6257 REVERSED is nonzero if we should reverse the sense of the comparison.
6259 ANNUL is nonzero if we should generate an annulling branch.
6261 NOOP is nonzero if we have to follow this branch by a noop. */
6264 output_v9branch (rtx op, rtx dest, int reg, int label, int reversed,
6265 int annul, int noop, rtx insn)
6267 static char string[50];
6268 enum rtx_code code = GET_CODE (op);
6269 enum machine_mode mode = GET_MODE (XEXP (op, 0));
6274 /* branch on register are limited to +-128KB. If it is too far away,
6287 brgez,a,pn %o1, .LC29
6293 ba,pt %xcc, .LC29 */
6295 far = get_attr_length (insn) >= 3;
6297 /* If not floating-point or if EQ or NE, we can just reverse the code. */
6299 code = reverse_condition (code);
6301 /* Only 64 bit versions of these instructions exist. */
6305 /* Start by writing the branch condition. */
6310 strcpy (string, "brnz");
6314 strcpy (string, "brz");
6318 strcpy (string, "brgez");
6322 strcpy (string, "brlz");
6326 strcpy (string, "brlez");
6330 strcpy (string, "brgz");
6337 p = strchr (string, '\0');
6339 /* Now add the annulling, reg, label, and nop. */
6346 if (insn && (note = find_reg_note (insn, REG_BR_PROB, NULL_RTX)))
6349 ((INTVAL (XEXP (note, 0)) >= REG_BR_PROB_BASE / 2) ^ far)
6354 *p = p < string + 8 ? '\t' : ' ';
6362 int veryfar = 1, delta;
6364 if (INSN_ADDRESSES_SET_P ())
6366 delta = (INSN_ADDRESSES (INSN_UID (dest))
6367 - INSN_ADDRESSES (INSN_UID (insn)));
6368 /* Leave some instructions for "slop". */
6369 if (delta >= -260000 && delta < 260000)
6373 strcpy (p, ".+12\n\tnop\n\t");
6384 strcpy (p, "ba,pt\t%%xcc, ");
6394 strcpy (p, "\n\tnop");
6399 /* Return 1, if any of the registers of the instruction are %l[0-7] or %o[0-7].
6400 Such instructions cannot be used in the delay slot of return insn on v9.
6401 If TEST is 0, also rename all %i[0-7] registers to their %o[0-7] counterparts.
6405 epilogue_renumber (register rtx *where, int test)
6407 register const char *fmt;
6409 register enum rtx_code code;
6414 code = GET_CODE (*where);
6419 if (REGNO (*where) >= 8 && REGNO (*where) < 24) /* oX or lX */
6421 if (! test && REGNO (*where) >= 24 && REGNO (*where) < 32)
6422 *where = gen_rtx (REG, GET_MODE (*where), OUTGOING_REGNO (REGNO(*where)));
6430 /* Do not replace the frame pointer with the stack pointer because
6431 it can cause the delayed instruction to load below the stack.
6432 This occurs when instructions like:
6434 (set (reg/i:SI 24 %i0)
6435 (mem/f:SI (plus:SI (reg/f:SI 30 %fp)
6436 (const_int -20 [0xffffffec])) 0))
6438 are in the return delayed slot. */
6440 if (GET_CODE (XEXP (*where, 0)) == REG
6441 && REGNO (XEXP (*where, 0)) == HARD_FRAME_POINTER_REGNUM
6442 && (GET_CODE (XEXP (*where, 1)) != CONST_INT
6443 || INTVAL (XEXP (*where, 1)) < SPARC_STACK_BIAS))
6448 if (SPARC_STACK_BIAS
6449 && GET_CODE (XEXP (*where, 0)) == REG
6450 && REGNO (XEXP (*where, 0)) == HARD_FRAME_POINTER_REGNUM)
6458 fmt = GET_RTX_FORMAT (code);
6460 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6465 for (j = XVECLEN (*where, i) - 1; j >= 0; j--)
6466 if (epilogue_renumber (&(XVECEXP (*where, i, j)), test))
6469 else if (fmt[i] == 'e'
6470 && epilogue_renumber (&(XEXP (*where, i)), test))
6476 /* Leaf functions and non-leaf functions have different needs. */
6479 reg_leaf_alloc_order[] = REG_LEAF_ALLOC_ORDER;
6482 reg_nonleaf_alloc_order[] = REG_ALLOC_ORDER;
6484 static const int *const reg_alloc_orders[] = {
6485 reg_leaf_alloc_order,
6486 reg_nonleaf_alloc_order};
6489 order_regs_for_local_alloc (void)
6491 static int last_order_nonleaf = 1;
6493 if (regs_ever_live[15] != last_order_nonleaf)
6495 last_order_nonleaf = !last_order_nonleaf;
6496 memcpy ((char *) reg_alloc_order,
6497 (const char *) reg_alloc_orders[last_order_nonleaf],
6498 FIRST_PSEUDO_REGISTER * sizeof (int));
6502 /* Return 1 if REG and MEM are legitimate enough to allow the various
6503 mem<-->reg splits to be run. */
6506 sparc_splitdi_legitimate (rtx reg, rtx mem)
6508 /* Punt if we are here by mistake. */
6509 if (! reload_completed)
6512 /* We must have an offsettable memory reference. */
6513 if (! offsettable_memref_p (mem))
6516 /* If we have legitimate args for ldd/std, we do not want
6517 the split to happen. */
6518 if ((REGNO (reg) % 2) == 0
6519 && mem_min_alignment (mem, 8))
6526 /* Return 1 if x and y are some kind of REG and they refer to
6527 different hard registers. This test is guaranteed to be
6528 run after reload. */
6531 sparc_absnegfloat_split_legitimate (rtx x, rtx y)
6533 if (GET_CODE (x) != REG)
6535 if (GET_CODE (y) != REG)
6537 if (REGNO (x) == REGNO (y))
6542 /* Return 1 if REGNO (reg1) is even and REGNO (reg1) == REGNO (reg2) - 1.
6543 This makes them candidates for using ldd and std insns.
6545 Note reg1 and reg2 *must* be hard registers. */
6548 registers_ok_for_ldd_peep (rtx reg1, rtx reg2)
6550 /* We might have been passed a SUBREG. */
6551 if (GET_CODE (reg1) != REG || GET_CODE (reg2) != REG)
6554 if (REGNO (reg1) % 2 != 0)
6557 /* Integer ldd is deprecated in SPARC V9 */
6558 if (TARGET_V9 && REGNO (reg1) < 32)
6561 return (REGNO (reg1) == REGNO (reg2) - 1);
6564 /* Return 1 if the addresses in mem1 and mem2 are suitable for use in
6567 This can only happen when addr1 and addr2, the addresses in mem1
6568 and mem2, are consecutive memory locations (addr1 + 4 == addr2).
6569 addr1 must also be aligned on a 64-bit boundary.
6571 Also iff dependent_reg_rtx is not null it should not be used to
6572 compute the address for mem1, i.e. we cannot optimize a sequence
6584 But, note that the transformation from:
6589 is perfectly fine. Thus, the peephole2 patterns always pass us
6590 the destination register of the first load, never the second one.
6592 For stores we don't have a similar problem, so dependent_reg_rtx is
6596 mems_ok_for_ldd_peep (rtx mem1, rtx mem2, rtx dependent_reg_rtx)
6600 HOST_WIDE_INT offset1;
6602 /* The mems cannot be volatile. */
6603 if (MEM_VOLATILE_P (mem1) || MEM_VOLATILE_P (mem2))
6606 /* MEM1 should be aligned on a 64-bit boundary. */
6607 if (MEM_ALIGN (mem1) < 64)
6610 addr1 = XEXP (mem1, 0);
6611 addr2 = XEXP (mem2, 0);
6613 /* Extract a register number and offset (if used) from the first addr. */
6614 if (GET_CODE (addr1) == PLUS)
6616 /* If not a REG, return zero. */
6617 if (GET_CODE (XEXP (addr1, 0)) != REG)
6621 reg1 = REGNO (XEXP (addr1, 0));
6622 /* The offset must be constant! */
6623 if (GET_CODE (XEXP (addr1, 1)) != CONST_INT)
6625 offset1 = INTVAL (XEXP (addr1, 1));
6628 else if (GET_CODE (addr1) != REG)
6632 reg1 = REGNO (addr1);
6633 /* This was a simple (mem (reg)) expression. Offset is 0. */
6637 /* Make sure the second address is a (mem (plus (reg) (const_int). */
6638 if (GET_CODE (addr2) != PLUS)
6641 if (GET_CODE (XEXP (addr2, 0)) != REG
6642 || GET_CODE (XEXP (addr2, 1)) != CONST_INT)
6645 if (reg1 != REGNO (XEXP (addr2, 0)))
6648 if (dependent_reg_rtx != NULL_RTX && reg1 == REGNO (dependent_reg_rtx))
6651 /* The first offset must be evenly divisible by 8 to ensure the
6652 address is 64 bit aligned. */
6653 if (offset1 % 8 != 0)
6656 /* The offset for the second addr must be 4 more than the first addr. */
6657 if (INTVAL (XEXP (addr2, 1)) != offset1 + 4)
6660 /* All the tests passed. addr1 and addr2 are valid for ldd and std
6665 /* Return 1 if reg is a pseudo, or is the first register in
6666 a hard register pair. This makes it a candidate for use in
6667 ldd and std insns. */
6670 register_ok_for_ldd (rtx reg)
6672 /* We might have been passed a SUBREG. */
6673 if (GET_CODE (reg) != REG)
6676 if (REGNO (reg) < FIRST_PSEUDO_REGISTER)
6677 return (REGNO (reg) % 2 == 0);
6682 /* Print operand X (an rtx) in assembler syntax to file FILE.
6683 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
6684 For `%' followed by punctuation, CODE is the punctuation and X is null. */
6687 print_operand (FILE *file, rtx x, int code)
6692 /* Output a 'nop' if there's nothing for the delay slot. */
6693 if (dbr_sequence_length () == 0)
6694 fputs ("\n\t nop", file);
6697 /* Output an annul flag if there's nothing for the delay slot and we
6698 are optimizing. This is always used with '(' below. */
6699 /* Sun OS 4.1.1 dbx can't handle an annulled unconditional branch;
6700 this is a dbx bug. So, we only do this when optimizing. */
6701 /* On UltraSPARC, a branch in a delay slot causes a pipeline flush.
6702 Always emit a nop in case the next instruction is a branch. */
6703 if (dbr_sequence_length () == 0
6704 && (optimize && (int)sparc_cpu < PROCESSOR_V9))
6708 /* Output a 'nop' if there's nothing for the delay slot and we are
6709 not optimizing. This is always used with '*' above. */
6710 if (dbr_sequence_length () == 0
6711 && ! (optimize && (int)sparc_cpu < PROCESSOR_V9))
6712 fputs ("\n\t nop", file);
6715 /* Output the Embedded Medium/Anywhere code model base register. */
6716 fputs (EMBMEDANY_BASE_REG, file);
6719 /* Print out what we are using as the frame pointer. This might
6720 be %fp, or might be %sp+offset. */
6721 /* ??? What if offset is too big? Perhaps the caller knows it isn't? */
6722 fprintf (file, "%s+"HOST_WIDE_INT_PRINT_DEC, frame_base_name, frame_base_offset);
6725 /* Print some local dynamic TLS name. */
6726 assemble_name (file, get_some_local_dynamic_name ());
6729 /* Adjust the operand to take into account a RESTORE operation. */
6730 if (GET_CODE (x) == CONST_INT)
6732 else if (GET_CODE (x) != REG)
6733 output_operand_lossage ("invalid %%Y operand");
6734 else if (REGNO (x) < 8)
6735 fputs (reg_names[REGNO (x)], file);
6736 else if (REGNO (x) >= 24 && REGNO (x) < 32)
6737 fputs (reg_names[REGNO (x)-16], file);
6739 output_operand_lossage ("invalid %%Y operand");
6742 /* Print out the low order register name of a register pair. */
6743 if (WORDS_BIG_ENDIAN)
6744 fputs (reg_names[REGNO (x)+1], file);
6746 fputs (reg_names[REGNO (x)], file);
6749 /* Print out the high order register name of a register pair. */
6750 if (WORDS_BIG_ENDIAN)
6751 fputs (reg_names[REGNO (x)], file);
6753 fputs (reg_names[REGNO (x)+1], file);
6756 /* Print out the second register name of a register pair or quad.
6757 I.e., R (%o0) => %o1. */
6758 fputs (reg_names[REGNO (x)+1], file);
6761 /* Print out the third register name of a register quad.
6762 I.e., S (%o0) => %o2. */
6763 fputs (reg_names[REGNO (x)+2], file);
6766 /* Print out the fourth register name of a register quad.
6767 I.e., T (%o0) => %o3. */
6768 fputs (reg_names[REGNO (x)+3], file);
6771 /* Print a condition code register. */
6772 if (REGNO (x) == SPARC_ICC_REG)
6774 /* We don't handle CC[X]_NOOVmode because they're not supposed
6776 if (GET_MODE (x) == CCmode)
6777 fputs ("%icc", file);
6778 else if (GET_MODE (x) == CCXmode)
6779 fputs ("%xcc", file);
6784 /* %fccN register */
6785 fputs (reg_names[REGNO (x)], file);
6788 /* Print the operand's address only. */
6789 output_address (XEXP (x, 0));
6792 /* In this case we need a register. Use %g0 if the
6793 operand is const0_rtx. */
6795 || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
6797 fputs ("%g0", file);
6804 switch (GET_CODE (x))
6806 case IOR: fputs ("or", file); break;
6807 case AND: fputs ("and", file); break;
6808 case XOR: fputs ("xor", file); break;
6809 default: output_operand_lossage ("invalid %%A operand");
6814 switch (GET_CODE (x))
6816 case IOR: fputs ("orn", file); break;
6817 case AND: fputs ("andn", file); break;
6818 case XOR: fputs ("xnor", file); break;
6819 default: output_operand_lossage ("invalid %%B operand");
6823 /* These are used by the conditional move instructions. */
6827 enum rtx_code rc = GET_CODE (x);
6831 enum machine_mode mode = GET_MODE (XEXP (x, 0));
6832 if (mode == CCFPmode || mode == CCFPEmode)
6833 rc = reverse_condition_maybe_unordered (GET_CODE (x));
6835 rc = reverse_condition (GET_CODE (x));
6839 case NE: fputs ("ne", file); break;
6840 case EQ: fputs ("e", file); break;
6841 case GE: fputs ("ge", file); break;
6842 case GT: fputs ("g", file); break;
6843 case LE: fputs ("le", file); break;
6844 case LT: fputs ("l", file); break;
6845 case GEU: fputs ("geu", file); break;
6846 case GTU: fputs ("gu", file); break;
6847 case LEU: fputs ("leu", file); break;
6848 case LTU: fputs ("lu", file); break;
6849 case LTGT: fputs ("lg", file); break;
6850 case UNORDERED: fputs ("u", file); break;
6851 case ORDERED: fputs ("o", file); break;
6852 case UNLT: fputs ("ul", file); break;
6853 case UNLE: fputs ("ule", file); break;
6854 case UNGT: fputs ("ug", file); break;
6855 case UNGE: fputs ("uge", file); break;
6856 case UNEQ: fputs ("ue", file); break;
6857 default: output_operand_lossage (code == 'c'
6858 ? "invalid %%c operand"
6859 : "invalid %%C operand");
6864 /* These are used by the movr instruction pattern. */
6868 enum rtx_code rc = (code == 'd'
6869 ? reverse_condition (GET_CODE (x))
6873 case NE: fputs ("ne", file); break;
6874 case EQ: fputs ("e", file); break;
6875 case GE: fputs ("gez", file); break;
6876 case LT: fputs ("lz", file); break;
6877 case LE: fputs ("lez", file); break;
6878 case GT: fputs ("gz", file); break;
6879 default: output_operand_lossage (code == 'd'
6880 ? "invalid %%d operand"
6881 : "invalid %%D operand");
6888 /* Print a sign-extended character. */
6889 int i = trunc_int_for_mode (INTVAL (x), QImode);
6890 fprintf (file, "%d", i);
6895 /* Operand must be a MEM; write its address. */
6896 if (GET_CODE (x) != MEM)
6897 output_operand_lossage ("invalid %%f operand");
6898 output_address (XEXP (x, 0));
6903 /* Print a sign-extended 32-bit value. */
6905 if (GET_CODE(x) == CONST_INT)
6907 else if (GET_CODE(x) == CONST_DOUBLE)
6908 i = CONST_DOUBLE_LOW (x);
6911 output_operand_lossage ("invalid %%s operand");
6914 i = trunc_int_for_mode (i, SImode);
6915 fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
6920 /* Do nothing special. */
6924 /* Undocumented flag. */
6925 output_operand_lossage ("invalid operand output code");
6928 if (GET_CODE (x) == REG)
6929 fputs (reg_names[REGNO (x)], file);
6930 else if (GET_CODE (x) == MEM)
6933 /* Poor Sun assembler doesn't understand absolute addressing. */
6934 if (CONSTANT_P (XEXP (x, 0)))
6935 fputs ("%g0+", file);
6936 output_address (XEXP (x, 0));
6939 else if (GET_CODE (x) == HIGH)
6941 fputs ("%hi(", file);
6942 output_addr_const (file, XEXP (x, 0));
6945 else if (GET_CODE (x) == LO_SUM)
6947 print_operand (file, XEXP (x, 0), 0);
6948 if (TARGET_CM_MEDMID)
6949 fputs ("+%l44(", file);
6951 fputs ("+%lo(", file);
6952 output_addr_const (file, XEXP (x, 1));
6955 else if (GET_CODE (x) == CONST_DOUBLE
6956 && (GET_MODE (x) == VOIDmode
6957 || GET_MODE_CLASS (GET_MODE (x)) == MODE_INT))
6959 if (CONST_DOUBLE_HIGH (x) == 0)
6960 fprintf (file, "%u", (unsigned int) CONST_DOUBLE_LOW (x));
6961 else if (CONST_DOUBLE_HIGH (x) == -1
6962 && CONST_DOUBLE_LOW (x) < 0)
6963 fprintf (file, "%d", (int) CONST_DOUBLE_LOW (x));
6965 output_operand_lossage ("long long constant not a valid immediate operand");
6967 else if (GET_CODE (x) == CONST_DOUBLE)
6968 output_operand_lossage ("floating point constant not a valid immediate operand");
6969 else { output_addr_const (file, x); }
6972 /* Target hook for assembling integer objects. The sparc version has
6973 special handling for aligned DI-mode objects. */
6976 sparc_assemble_integer (rtx x, unsigned int size, int aligned_p)
6978 /* ??? We only output .xword's for symbols and only then in environments
6979 where the assembler can handle them. */
6980 if (aligned_p && size == 8
6981 && (GET_CODE (x) != CONST_INT && GET_CODE (x) != CONST_DOUBLE))
6985 assemble_integer_with_op ("\t.xword\t", x);
6990 assemble_aligned_integer (4, const0_rtx);
6991 assemble_aligned_integer (4, x);
6995 return default_assemble_integer (x, size, aligned_p);
6998 /* Return the value of a code used in the .proc pseudo-op that says
6999 what kind of result this function returns. For non-C types, we pick
7000 the closest C type. */
7002 #ifndef SHORT_TYPE_SIZE
7003 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * 2)
7006 #ifndef INT_TYPE_SIZE
7007 #define INT_TYPE_SIZE BITS_PER_WORD
7010 #ifndef LONG_TYPE_SIZE
7011 #define LONG_TYPE_SIZE BITS_PER_WORD
7014 #ifndef LONG_LONG_TYPE_SIZE
7015 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
7018 #ifndef FLOAT_TYPE_SIZE
7019 #define FLOAT_TYPE_SIZE BITS_PER_WORD
7022 #ifndef DOUBLE_TYPE_SIZE
7023 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
7026 #ifndef LONG_DOUBLE_TYPE_SIZE
7027 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
7031 sparc_type_code (register tree type)
7033 register unsigned long qualifiers = 0;
7034 register unsigned shift;
7036 /* Only the first 30 bits of the qualifier are valid. We must refrain from
7037 setting more, since some assemblers will give an error for this. Also,
7038 we must be careful to avoid shifts of 32 bits or more to avoid getting
7039 unpredictable results. */
7041 for (shift = 6; shift < 30; shift += 2, type = TREE_TYPE (type))
7043 switch (TREE_CODE (type))
7049 qualifiers |= (3 << shift);
7054 qualifiers |= (2 << shift);
7058 case REFERENCE_TYPE:
7060 qualifiers |= (1 << shift);
7064 return (qualifiers | 8);
7067 case QUAL_UNION_TYPE:
7068 return (qualifiers | 9);
7071 return (qualifiers | 10);
7074 return (qualifiers | 16);
7077 /* If this is a range type, consider it to be the underlying
7079 if (TREE_TYPE (type) != 0)
7082 /* Carefully distinguish all the standard types of C,
7083 without messing up if the language is not C. We do this by
7084 testing TYPE_PRECISION and TREE_UNSIGNED. The old code used to
7085 look at both the names and the above fields, but that's redundant.
7086 Any type whose size is between two C types will be considered
7087 to be the wider of the two types. Also, we do not have a
7088 special code to use for "long long", so anything wider than
7089 long is treated the same. Note that we can't distinguish
7090 between "int" and "long" in this code if they are the same
7091 size, but that's fine, since neither can the assembler. */
7093 if (TYPE_PRECISION (type) <= CHAR_TYPE_SIZE)
7094 return (qualifiers | (TREE_UNSIGNED (type) ? 12 : 2));
7096 else if (TYPE_PRECISION (type) <= SHORT_TYPE_SIZE)
7097 return (qualifiers | (TREE_UNSIGNED (type) ? 13 : 3));
7099 else if (TYPE_PRECISION (type) <= INT_TYPE_SIZE)
7100 return (qualifiers | (TREE_UNSIGNED (type) ? 14 : 4));
7103 return (qualifiers | (TREE_UNSIGNED (type) ? 15 : 5));
7106 /* If this is a range type, consider it to be the underlying
7108 if (TREE_TYPE (type) != 0)
7111 /* Carefully distinguish all the standard types of C,
7112 without messing up if the language is not C. */
7114 if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
7115 return (qualifiers | 6);
7118 return (qualifiers | 7);
7120 case COMPLEX_TYPE: /* GNU Fortran COMPLEX type. */
7121 /* ??? We need to distinguish between double and float complex types,
7122 but I don't know how yet because I can't reach this code from
7123 existing front-ends. */
7124 return (qualifiers | 7); /* Who knows? */
7126 case CHAR_TYPE: /* GNU Pascal CHAR type. Not used in C. */
7127 case BOOLEAN_TYPE: /* GNU Fortran BOOLEAN type. */
7128 case FILE_TYPE: /* GNU Pascal FILE type. */
7129 case SET_TYPE: /* GNU Pascal SET type. */
7130 case LANG_TYPE: /* ? */
7134 abort (); /* Not a type! */
7141 /* Nested function support. */
7143 /* Emit RTL insns to initialize the variable parts of a trampoline.
7144 FNADDR is an RTX for the address of the function's pure code.
7145 CXT is an RTX for the static chain value for the function.
7147 This takes 16 insns: 2 shifts & 2 ands (to split up addresses), 4 sethi
7148 (to load in opcodes), 4 iors (to merge address and opcodes), and 4 writes
7149 (to store insns). This is a bit excessive. Perhaps a different
7150 mechanism would be better here.
7152 Emit enough FLUSH insns to synchronize the data and instruction caches. */
7155 sparc_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
7157 /* SPARC 32-bit trampoline:
7160 sethi %hi(static), %g2
7162 or %g2, %lo(static), %g2
7164 SETHI i,r = 00rr rrr1 00ii iiii iiii iiii iiii iiii
7165 JMPL r+i,d = 10dd ddd1 1100 0rrr rr1i iiii iiii iiii
7169 (gen_rtx_MEM (SImode, plus_constant (tramp, 0)),
7170 expand_binop (SImode, ior_optab,
7171 expand_shift (RSHIFT_EXPR, SImode, fnaddr,
7172 size_int (10), 0, 1),
7173 GEN_INT (trunc_int_for_mode (0x03000000, SImode)),
7174 NULL_RTX, 1, OPTAB_DIRECT));
7177 (gen_rtx_MEM (SImode, plus_constant (tramp, 4)),
7178 expand_binop (SImode, ior_optab,
7179 expand_shift (RSHIFT_EXPR, SImode, cxt,
7180 size_int (10), 0, 1),
7181 GEN_INT (trunc_int_for_mode (0x05000000, SImode)),
7182 NULL_RTX, 1, OPTAB_DIRECT));
7185 (gen_rtx_MEM (SImode, plus_constant (tramp, 8)),
7186 expand_binop (SImode, ior_optab,
7187 expand_and (SImode, fnaddr, GEN_INT (0x3ff), NULL_RTX),
7188 GEN_INT (trunc_int_for_mode (0x81c06000, SImode)),
7189 NULL_RTX, 1, OPTAB_DIRECT));
7192 (gen_rtx_MEM (SImode, plus_constant (tramp, 12)),
7193 expand_binop (SImode, ior_optab,
7194 expand_and (SImode, cxt, GEN_INT (0x3ff), NULL_RTX),
7195 GEN_INT (trunc_int_for_mode (0x8410a000, SImode)),
7196 NULL_RTX, 1, OPTAB_DIRECT));
7198 /* On UltraSPARC a flush flushes an entire cache line. The trampoline is
7199 aligned on a 16 byte boundary so one flush clears it all. */
7200 emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode, tramp))));
7201 if (sparc_cpu != PROCESSOR_ULTRASPARC
7202 && sparc_cpu != PROCESSOR_ULTRASPARC3)
7203 emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode,
7204 plus_constant (tramp, 8)))));
7206 /* Call __enable_execute_stack after writing onto the stack to make sure
7207 the stack address is accessible. */
7208 #ifdef TRANSFER_FROM_TRAMPOLINE
7209 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
7210 LCT_NORMAL, VOIDmode, 1, tramp, Pmode);
7215 /* The 64-bit version is simpler because it makes more sense to load the
7216 values as "immediate" data out of the trampoline. It's also easier since
7217 we can read the PC without clobbering a register. */
7220 sparc64_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
7222 /* SPARC 64-bit trampoline:
7231 emit_move_insn (gen_rtx_MEM (SImode, tramp),
7232 GEN_INT (trunc_int_for_mode (0x83414000, SImode)));
7233 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 4)),
7234 GEN_INT (trunc_int_for_mode (0xca586018, SImode)));
7235 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 8)),
7236 GEN_INT (trunc_int_for_mode (0x81c14000, SImode)));
7237 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 12)),
7238 GEN_INT (trunc_int_for_mode (0xca586010, SImode)));
7239 emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, 16)), cxt);
7240 emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, 24)), fnaddr);
7241 emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, tramp))));
7243 if (sparc_cpu != PROCESSOR_ULTRASPARC
7244 && sparc_cpu != PROCESSOR_ULTRASPARC3)
7245 emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, plus_constant (tramp, 8)))));
7247 /* Call __enable_execute_stack after writing onto the stack to make sure
7248 the stack address is accessible. */
7249 #ifdef TRANSFER_FROM_TRAMPOLINE
7250 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
7251 LCT_NORMAL, VOIDmode, 1, tramp, Pmode);
7255 /* Subroutines to support a flat (single) register window calling
7258 /* Single-register window sparc stack frames look like:
7260 Before call After call
7261 +-----------------------+ +-----------------------+
7263 mem | caller's temps. | | caller's temps. |
7265 +-----------------------+ +-----------------------+
7267 | arguments on stack. | | arguments on stack. |
7269 +-----------------------+FP+92->+-----------------------+
7270 | 6 words to save | | 6 words to save |
7271 | arguments passed | | arguments passed |
7272 | in registers, even | | in registers, even |
7273 | if not passed. | | if not passed. |
7274 SP+68->+-----------------------+FP+68->+-----------------------+
7275 | 1 word struct addr | | 1 word struct addr |
7276 +-----------------------+FP+64->+-----------------------+
7278 | 16 word reg save area | | 16 word reg save area |
7280 SP->+-----------------------+ FP->+-----------------------+
7282 | fp/alu reg moves |
7283 FP-16->+-----------------------+
7287 +-----------------------+
7289 | fp register save |
7291 +-----------------------+
7293 | gp register save |
7295 +-----------------------+
7297 | alloca allocations |
7299 +-----------------------+
7301 | arguments on stack |
7303 SP+92->+-----------------------+
7305 | arguments passed |
7306 | in registers, even |
7307 low | if not passed. |
7308 memory SP+68->+-----------------------+
7309 | 1 word struct addr |
7310 SP+64->+-----------------------+
7312 I 16 word reg save area |
7314 SP->+-----------------------+ */
7316 /* Structure to be filled in by sparc_flat_compute_frame_size with register
7317 save masks, and offsets for the current function. */
7319 struct sparc_frame_info
7321 HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up. */
7322 HOST_WIDE_INT var_size; /* # bytes that variables take up. */
7323 int args_size; /* # bytes that outgoing arguments take up. */
7324 int extra_size; /* # bytes of extra gunk. */
7325 int gp_reg_size; /* # bytes needed to store gp regs. */
7326 int fp_reg_size; /* # bytes needed to store fp regs. */
7327 unsigned long gmask; /* Mask of saved gp registers. */
7328 unsigned long fmask; /* Mask of saved fp registers. */
7329 int reg_offset; /* Offset from new sp to store regs. */
7330 int initialized; /* Nonzero if frame size already calculated. */
7333 /* Current frame information calculated by sparc_flat_compute_frame_size. */
7334 struct sparc_frame_info current_frame_info;
7336 /* Zero structure to initialize current_frame_info. */
7337 struct sparc_frame_info zero_frame_info;
7339 #define RETURN_ADDR_REGNUM 15
7340 #define HARD_FRAME_POINTER_MASK (1 << (HARD_FRAME_POINTER_REGNUM))
7341 #define RETURN_ADDR_MASK (1 << (RETURN_ADDR_REGNUM))
7343 /* Tell prologue and epilogue if register REGNO should be saved / restored. */
7346 sparc_flat_must_save_register_p (int regno)
7348 /* General case: call-saved registers live at some point. */
7349 if (!call_used_regs[regno] && regs_ever_live[regno])
7352 /* Frame pointer register (%i7) if needed. */
7353 if (regno == HARD_FRAME_POINTER_REGNUM && frame_pointer_needed)
7356 /* PIC register (%l7) if needed. */
7357 if (regno == (int) PIC_OFFSET_TABLE_REGNUM
7358 && flag_pic && current_function_uses_pic_offset_table)
7361 /* Return address register (%o7) if needed. */
7362 if (regno == RETURN_ADDR_REGNUM
7363 && (regs_ever_live[RETURN_ADDR_REGNUM]
7364 /* When the PIC offset table is used, the PIC register
7365 is set by using a bare call that clobbers %o7. */
7366 || (flag_pic && current_function_uses_pic_offset_table)))
7372 /* Return the bytes needed to compute the frame pointer from the current
7376 sparc_flat_compute_frame_size (HOST_WIDE_INT size)
7377 /* # of var. bytes allocated. */
7380 HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up. */
7381 HOST_WIDE_INT var_size; /* # bytes that variables take up. */
7382 int args_size; /* # bytes that outgoing arguments take up. */
7383 int extra_size; /* # extra bytes. */
7384 int gp_reg_size; /* # bytes needed to store gp regs. */
7385 int fp_reg_size; /* # bytes needed to store fp regs. */
7386 unsigned long gmask; /* Mask of saved gp registers. */
7387 unsigned long fmask; /* Mask of saved fp registers. */
7388 int reg_offset; /* Offset to register save area. */
7389 int need_aligned_p; /* 1 if need the save area 8 byte aligned. */
7391 /* This is the size of the 16 word reg save area, 1 word struct addr
7392 area, and 4 word fp/alu register copy area. */
7393 extra_size = -STARTING_FRAME_OFFSET + FIRST_PARM_OFFSET(0);
7403 if (!leaf_function_p ())
7405 /* Also include the size needed for the 6 parameter registers. */
7406 args_size = current_function_outgoing_args_size + 24;
7408 total_size = var_size + args_size;
7410 /* Calculate space needed for gp registers. */
7411 for (regno = 1; regno <= 31; regno++)
7413 if (sparc_flat_must_save_register_p (regno))
7415 /* If we need to save two regs in a row, ensure there's room to bump
7416 up the address to align it to a doubleword boundary. */
7417 if ((regno & 0x1) == 0 && sparc_flat_must_save_register_p (regno+1))
7419 if (gp_reg_size % 8 != 0)
7421 gp_reg_size += 2 * UNITS_PER_WORD;
7422 gmask |= 3 << regno;
7428 gp_reg_size += UNITS_PER_WORD;
7429 gmask |= 1 << regno;
7434 /* Calculate space needed for fp registers. */
7435 for (regno = 32; regno <= 63; regno++)
7437 if (regs_ever_live[regno] && !call_used_regs[regno])
7439 fp_reg_size += UNITS_PER_WORD;
7440 fmask |= 1 << (regno - 32);
7447 reg_offset = FIRST_PARM_OFFSET(0) + args_size;
7448 /* Ensure save area is 8 byte aligned if we need it. */
7450 if (need_aligned_p && n != 0)
7452 total_size += 8 - n;
7453 reg_offset += 8 - n;
7455 total_size += gp_reg_size + fp_reg_size;
7458 /* If we must allocate a stack frame at all, we must also allocate
7459 room for register window spillage, so as to be binary compatible
7460 with libraries and operating systems that do not use -mflat. */
7462 total_size += extra_size;
7466 total_size = SPARC_STACK_ALIGN (total_size);
7468 /* Save other computed information. */
7469 current_frame_info.total_size = total_size;
7470 current_frame_info.var_size = var_size;
7471 current_frame_info.args_size = args_size;
7472 current_frame_info.extra_size = extra_size;
7473 current_frame_info.gp_reg_size = gp_reg_size;
7474 current_frame_info.fp_reg_size = fp_reg_size;
7475 current_frame_info.gmask = gmask;
7476 current_frame_info.fmask = fmask;
7477 current_frame_info.reg_offset = reg_offset;
7478 current_frame_info.initialized = reload_completed;
7480 /* Ok, we're done. */
7484 /* Save/restore registers in GMASK and FMASK at register BASE_REG plus offset
7487 BASE_REG must be 8 byte aligned. This allows us to test OFFSET for
7488 appropriate alignment and use DOUBLEWORD_OP when we can. We assume
7489 [BASE_REG+OFFSET] will always be a valid address.
7491 WORD_OP is either "st" for save, "ld" for restore.
7492 DOUBLEWORD_OP is either "std" for save, "ldd" for restore. */
7495 sparc_flat_save_restore (FILE *file, const char *base_reg, int offset,
7496 unsigned long gmask, unsigned long fmask,
7497 const char *word_op, const char *doubleword_op,
7498 HOST_WIDE_INT base_offset)
7502 if (gmask == 0 && fmask == 0)
7505 /* Save registers starting from high to low. We've already saved the
7506 previous frame pointer and previous return address for the debugger's
7507 sake. The debugger allows us to not need a nop in the epilog if at least
7508 one register is reloaded in addition to return address. */
7512 for (regno = 1; regno <= 31; regno++)
7514 if ((gmask & (1L << regno)) != 0)
7516 if ((regno & 0x1) == 0 && ((gmask & (1L << (regno+1))) != 0))
7518 /* We can save two registers in a row. If we're not at a
7519 double word boundary, move to one.
7520 sparc_flat_compute_frame_size ensures there's room to do
7522 if (offset % 8 != 0)
7523 offset += UNITS_PER_WORD;
7525 if (word_op[0] == 's')
7527 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7528 doubleword_op, reg_names[regno],
7530 if (dwarf2out_do_frame ())
7532 char *l = dwarf2out_cfi_label ();
7533 dwarf2out_reg_save (l, regno, offset + base_offset);
7535 (l, regno+1, offset+base_offset + UNITS_PER_WORD);
7539 fprintf (file, "\t%s\t[%s+%d], %s\n",
7540 doubleword_op, base_reg, offset,
7543 offset += 2 * UNITS_PER_WORD;
7548 if (word_op[0] == 's')
7550 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7551 word_op, reg_names[regno],
7553 if (dwarf2out_do_frame ())
7554 dwarf2out_reg_save ("", regno, offset + base_offset);
7557 fprintf (file, "\t%s\t[%s+%d], %s\n",
7558 word_op, base_reg, offset, reg_names[regno]);
7560 offset += UNITS_PER_WORD;
7568 for (regno = 32; regno <= 63; regno++)
7570 if ((fmask & (1L << (regno - 32))) != 0)
7572 if (word_op[0] == 's')
7574 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7575 word_op, reg_names[regno],
7577 if (dwarf2out_do_frame ())
7578 dwarf2out_reg_save ("", regno, offset + base_offset);
7581 fprintf (file, "\t%s\t[%s+%d], %s\n",
7582 word_op, base_reg, offset, reg_names[regno]);
7584 offset += UNITS_PER_WORD;
7590 /* Set up the stack and frame (if desired) for the function. */
7593 sparc_flat_function_prologue (FILE *file, HOST_WIDE_INT size)
7595 const char *sp_str = reg_names[STACK_POINTER_REGNUM];
7596 unsigned long gmask = current_frame_info.gmask;
7598 sparc_output_scratch_registers (file);
7600 /* This is only for the human reader. */
7601 fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
7602 fprintf (file, "\t%s# vars= "HOST_WIDE_INT_PRINT_DEC", "
7603 "regs= %d/%d, args= %d, extra= %d\n",
7605 current_frame_info.var_size,
7606 current_frame_info.gp_reg_size / 4,
7607 current_frame_info.fp_reg_size / 4,
7608 current_function_outgoing_args_size,
7609 current_frame_info.extra_size);
7611 size = SPARC_STACK_ALIGN (size);
7612 size = (! current_frame_info.initialized
7613 ? sparc_flat_compute_frame_size (size)
7614 : current_frame_info.total_size);
7616 /* These cases shouldn't happen. Catch them now. */
7617 if (size == 0 && (gmask || current_frame_info.fmask))
7620 /* Allocate our stack frame by decrementing %sp.
7621 At present, the only algorithm gdb can use to determine if this is a
7622 flat frame is if we always set %i7 if we set %sp. This can be optimized
7623 in the future by putting in some sort of debugging information that says
7624 this is a `flat' function. However, there is still the case of debugging
7625 code without such debugging information (including cases where most fns
7626 have such info, but there is one that doesn't). So, always do this now
7627 so we don't get a lot of code out there that gdb can't handle.
7628 If the frame pointer isn't needn't then that's ok - gdb won't be able to
7629 distinguish us from a non-flat function but there won't (and shouldn't)
7630 be any differences anyway. The return pc is saved (if necessary) right
7631 after %i7 so gdb won't have to look too far to find it. */
7634 int reg_offset = current_frame_info.reg_offset;
7635 const char *const fp_str = reg_names[HARD_FRAME_POINTER_REGNUM];
7636 static const char *const t1_str = "%g1";
7638 /* Things get a little tricky if local variables take up more than ~4096
7639 bytes and outgoing arguments take up more than ~4096 bytes. When that
7640 happens, the register save area can't be accessed from either end of
7641 the frame. Handle this by decrementing %sp to the start of the gp
7642 register save area, save the regs, update %i7, and then set %sp to its
7643 final value. Given that we only have one scratch register to play
7644 with it is the cheapest solution, and it helps gdb out as it won't
7645 slow down recognition of flat functions.
7646 Don't change the order of insns emitted here without checking with
7647 the gdb folk first. */
7649 /* Is the entire register save area offsettable from %sp? */
7650 if (reg_offset < 4096 - 64 * UNITS_PER_WORD)
7654 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7655 sp_str, size, sp_str);
7656 if (gmask & HARD_FRAME_POINTER_MASK)
7658 fprintf (file, "\tst\t%s, [%s+%d]\n",
7659 fp_str, sp_str, reg_offset);
7660 fprintf (file, "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7661 "\t%s# set up frame pointer\n",
7662 sp_str, size, fp_str, ASM_COMMENT_START);
7668 build_big_number (file, size, t1_str);
7669 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7670 if (gmask & HARD_FRAME_POINTER_MASK)
7672 fprintf (file, "\tst\t%s, [%s+%d]\n",
7673 fp_str, sp_str, reg_offset);
7674 fprintf (file, "\tadd\t%s, %s, %s\t%s# set up frame pointer\n",
7675 sp_str, t1_str, fp_str, ASM_COMMENT_START);
7679 if (dwarf2out_do_frame ())
7681 char *l = dwarf2out_cfi_label ();
7682 if (gmask & HARD_FRAME_POINTER_MASK)
7684 dwarf2out_reg_save (l, HARD_FRAME_POINTER_REGNUM,
7685 reg_offset - 4 - size);
7686 dwarf2out_def_cfa (l, HARD_FRAME_POINTER_REGNUM, 0);
7689 dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size);
7691 if (gmask & RETURN_ADDR_MASK)
7693 fprintf (file, "\tst\t%s, [%s+%d]\n",
7694 reg_names[RETURN_ADDR_REGNUM], sp_str, reg_offset);
7695 if (dwarf2out_do_frame ())
7696 dwarf2out_return_save ("", reg_offset - size);
7699 sparc_flat_save_restore (file, sp_str, reg_offset,
7700 gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7701 current_frame_info.fmask,
7702 "st", "std", -size);
7706 /* Subtract %sp in two steps, but make sure there is always a
7707 64-byte register save area, and %sp is properly aligned. */
7709 /* Amount to decrement %sp by, the first time. */
7710 HOST_WIDE_INT size1 = ((size - reg_offset + 64) + 15) & -16;
7712 /* Amount to decrement %sp by, the second time. */
7713 HOST_WIDE_INT size2 = size - size1;
7715 /* Offset to register save area from %sp after first decrement. */
7716 int offset = (int)(size1 - (size - reg_offset));
7720 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7721 sp_str, size1, sp_str);
7722 if (gmask & HARD_FRAME_POINTER_MASK)
7724 fprintf (file, "\tst\t%s, [%s+%d]\n"
7725 "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7726 "\t%s# set up frame pointer\n",
7727 fp_str, sp_str, offset, sp_str, size1,
7728 fp_str, ASM_COMMENT_START);
7734 build_big_number (file, size1, t1_str);
7735 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7736 if (gmask & HARD_FRAME_POINTER_MASK)
7738 fprintf (file, "\tst\t%s, [%s+%d]\n"
7739 "\tadd\t%s, %s, %s\t%s# set up frame pointer\n",
7740 fp_str, sp_str, offset, sp_str, t1_str,
7741 fp_str, ASM_COMMENT_START);
7745 if (dwarf2out_do_frame ())
7747 char *l = dwarf2out_cfi_label ();
7748 if (gmask & HARD_FRAME_POINTER_MASK)
7750 dwarf2out_reg_save (l, HARD_FRAME_POINTER_REGNUM,
7751 offset - 4 - size1);
7752 dwarf2out_def_cfa (l, HARD_FRAME_POINTER_REGNUM, 0);
7755 dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size1);
7757 if (gmask & RETURN_ADDR_MASK)
7759 fprintf (file, "\tst\t%s, [%s+%d]\n",
7760 reg_names[RETURN_ADDR_REGNUM], sp_str, offset);
7761 if (dwarf2out_do_frame ())
7762 /* offset - size1 == reg_offset - size
7763 if reg_offset were updated above like offset. */
7764 dwarf2out_return_save ("", offset - size1);
7767 sparc_flat_save_restore (file, sp_str, offset,
7768 gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7769 current_frame_info.fmask,
7770 "st", "std", -size1);
7772 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7773 sp_str, size2, sp_str);
7776 build_big_number (file, size2, t1_str);
7777 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7779 if (dwarf2out_do_frame ())
7780 if (! (gmask & HARD_FRAME_POINTER_MASK))
7781 dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, size);
7785 fprintf (file, "\t%s#PROLOGUE# 1\n", ASM_COMMENT_START);
7788 /* Do any necessary cleanup after a function to restore stack, frame,
7792 sparc_flat_function_epilogue (FILE *file, HOST_WIDE_INT size)
7794 rtx epilogue_delay = current_function_epilogue_delay_list;
7795 int noepilogue = FALSE;
7797 /* This is only for the human reader. */
7798 fprintf (file, "\t%s#EPILOGUE#\n", ASM_COMMENT_START);
7800 /* The epilogue does not depend on any registers, but the stack
7801 registers, so we assume that if we have 1 pending nop, it can be
7802 ignored, and 2 it must be filled (2 nops occur for integer
7803 multiply and divide). */
7805 size = SPARC_STACK_ALIGN (size);
7806 size = (!current_frame_info.initialized
7807 ? sparc_flat_compute_frame_size (size)
7808 : current_frame_info.total_size);
7810 if (size == 0 && epilogue_delay == 0)
7812 rtx insn = get_last_insn ();
7814 /* If the last insn was a BARRIER, we don't have to write any code
7815 because a jump (aka return) was put there. */
7816 if (GET_CODE (insn) == NOTE)
7817 insn = prev_nonnote_insn (insn);
7818 if (insn && GET_CODE (insn) == BARRIER)
7824 int reg_offset = current_frame_info.reg_offset;
7826 const char *const sp_str = reg_names[STACK_POINTER_REGNUM];
7827 const char *const fp_str = reg_names[HARD_FRAME_POINTER_REGNUM];
7828 static const char *const t1_str = "%g1";
7830 /* In the reload sequence, we don't need to fill the load delay
7831 slots for most of the loads, also see if we can fill the final
7832 delay slot if not otherwise filled by the reload sequence. */
7835 build_big_number (file, size, t1_str);
7837 if (frame_pointer_needed)
7840 fprintf (file,"\tsub\t%s, %s, %s\t\t%s# sp not trusted here\n",
7841 fp_str, t1_str, sp_str, ASM_COMMENT_START);
7843 fprintf (file,"\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7844 "\t\t%s# sp not trusted here\n",
7845 fp_str, size, sp_str, ASM_COMMENT_START);
7848 /* Is the entire register save area offsettable from %sp? */
7849 if (reg_offset < 4096 - 64 * UNITS_PER_WORD)
7855 /* Restore %sp in two steps, but make sure there is always a
7856 64-byte register save area, and %sp is properly aligned. */
7858 /* Amount to increment %sp by, the first time. */
7859 reg_offset1 = ((reg_offset - 64 - 16) + 15) & -16;
7861 /* Offset to register save area from %sp. */
7862 reg_offset = reg_offset1 - reg_offset;
7864 if (reg_offset1 > 4096)
7866 build_big_number (file, reg_offset1, t1_str);
7867 fprintf (file, "\tadd\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7870 fprintf (file, "\tsub\t%s, -%d, %s\n", sp_str, reg_offset1, sp_str);
7873 /* We must restore the frame pointer and return address reg first
7874 because they are treated specially by the prologue output code. */
7875 if (current_frame_info.gmask & HARD_FRAME_POINTER_MASK)
7877 fprintf (file, "\tld\t[%s+%d], %s\n",
7878 sp_str, reg_offset, fp_str);
7881 if (current_frame_info.gmask & RETURN_ADDR_MASK)
7883 fprintf (file, "\tld\t[%s+%d], %s\n",
7884 sp_str, reg_offset, reg_names[RETURN_ADDR_REGNUM]);
7888 /* Restore any remaining saved registers. */
7889 sparc_flat_save_restore (file, sp_str, reg_offset,
7890 current_frame_info.gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7891 current_frame_info.fmask,
7894 /* If we had to increment %sp in two steps, record it so the second
7895 restoration in the epilogue finishes up. */
7896 if (reg_offset1 > 0)
7898 size -= reg_offset1;
7900 build_big_number (file, size, t1_str);
7903 if (current_function_returns_struct)
7904 fprintf (file, "\tjmp\t%%o7+12\n");
7906 fprintf (file, "\tretl\n");
7908 /* If the only register saved is the return address, we need a
7909 nop, unless we have an instruction to put into it. Otherwise
7910 we don't since reloading multiple registers doesn't reference
7911 the register being loaded. */
7917 final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1, NULL);
7920 else if (size > 4096)
7921 fprintf (file, "\tadd\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7924 fprintf (file, "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7925 sp_str, size, sp_str);
7928 fprintf (file, "\tnop\n");
7931 /* Reset state info for each function. */
7932 current_frame_info = zero_frame_info;
7934 sparc_output_deferred_case_vectors ();
7937 /* Define the number of delay slots needed for the function epilogue.
7939 On the sparc, we need a slot if either no stack has been allocated,
7940 or the only register saved is the return register. */
7943 sparc_flat_epilogue_delay_slots (void)
7945 if (!current_frame_info.initialized)
7946 (void) sparc_flat_compute_frame_size (get_frame_size ());
7948 if (current_frame_info.total_size == 0)
7954 /* Return true if TRIAL is a valid insn for the epilogue delay slot.
7955 Any single length instruction which doesn't reference the stack or frame
7959 sparc_flat_eligible_for_epilogue_delay (rtx trial, int slot ATTRIBUTE_UNUSED)
7961 rtx pat = PATTERN (trial);
7963 if (get_attr_length (trial) != 1)
7966 if (! reg_mentioned_p (stack_pointer_rtx, pat)
7967 && ! reg_mentioned_p (frame_pointer_rtx, pat))
7973 /* Adjust the cost of a scheduling dependency. Return the new cost of
7974 a dependency LINK or INSN on DEP_INSN. COST is the current cost. */
7977 supersparc_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
7979 enum attr_type insn_type;
7981 if (! recog_memoized (insn))
7984 insn_type = get_attr_type (insn);
7986 if (REG_NOTE_KIND (link) == 0)
7988 /* Data dependency; DEP_INSN writes a register that INSN reads some
7991 /* if a load, then the dependence must be on the memory address;
7992 add an extra "cycle". Note that the cost could be two cycles
7993 if the reg was written late in an instruction group; we ca not tell
7995 if (insn_type == TYPE_LOAD || insn_type == TYPE_FPLOAD)
7998 /* Get the delay only if the address of the store is the dependence. */
7999 if (insn_type == TYPE_STORE || insn_type == TYPE_FPSTORE)
8001 rtx pat = PATTERN(insn);
8002 rtx dep_pat = PATTERN (dep_insn);
8004 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
8005 return cost; /* This should not happen! */
8007 /* The dependency between the two instructions was on the data that
8008 is being stored. Assume that this implies that the address of the
8009 store is not dependent. */
8010 if (rtx_equal_p (SET_DEST (dep_pat), SET_SRC (pat)))
8013 return cost + 3; /* An approximation. */
8016 /* A shift instruction cannot receive its data from an instruction
8017 in the same cycle; add a one cycle penalty. */
8018 if (insn_type == TYPE_SHIFT)
8019 return cost + 3; /* Split before cascade into shift. */
8023 /* Anti- or output- dependency; DEP_INSN reads/writes a register that
8024 INSN writes some cycles later. */
8026 /* These are only significant for the fpu unit; writing a fp reg before
8027 the fpu has finished with it stalls the processor. */
8029 /* Reusing an integer register causes no problems. */
8030 if (insn_type == TYPE_IALU || insn_type == TYPE_SHIFT)
8038 hypersparc_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
8040 enum attr_type insn_type, dep_type;
8041 rtx pat = PATTERN(insn);
8042 rtx dep_pat = PATTERN (dep_insn);
8044 if (recog_memoized (insn) < 0 || recog_memoized (dep_insn) < 0)
8047 insn_type = get_attr_type (insn);
8048 dep_type = get_attr_type (dep_insn);
8050 switch (REG_NOTE_KIND (link))
8053 /* Data dependency; DEP_INSN writes a register that INSN reads some
8060 /* Get the delay iff the address of the store is the dependence. */
8061 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
8064 if (rtx_equal_p (SET_DEST (dep_pat), SET_SRC (pat)))
8071 /* If a load, then the dependence must be on the memory address. If
8072 the addresses aren't equal, then it might be a false dependency */
8073 if (dep_type == TYPE_STORE || dep_type == TYPE_FPSTORE)
8075 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET
8076 || GET_CODE (SET_DEST (dep_pat)) != MEM
8077 || GET_CODE (SET_SRC (pat)) != MEM
8078 || ! rtx_equal_p (XEXP (SET_DEST (dep_pat), 0),
8079 XEXP (SET_SRC (pat), 0)))
8087 /* Compare to branch latency is 0. There is no benefit from
8088 separating compare and branch. */
8089 if (dep_type == TYPE_COMPARE)
8091 /* Floating point compare to branch latency is less than
8092 compare to conditional move. */
8093 if (dep_type == TYPE_FPCMP)
8102 /* Anti-dependencies only penalize the fpu unit. */
8103 if (insn_type == TYPE_IALU || insn_type == TYPE_SHIFT)
8115 sparc_adjust_cost(rtx insn, rtx link, rtx dep, int cost)
8119 case PROCESSOR_SUPERSPARC:
8120 cost = supersparc_adjust_cost (insn, link, dep, cost);
8122 case PROCESSOR_HYPERSPARC:
8123 case PROCESSOR_SPARCLITE86X:
8124 cost = hypersparc_adjust_cost (insn, link, dep, cost);
8133 sparc_sched_init (FILE *dump ATTRIBUTE_UNUSED,
8134 int sched_verbose ATTRIBUTE_UNUSED,
8135 int max_ready ATTRIBUTE_UNUSED)
8140 sparc_use_dfa_pipeline_interface (void)
8142 if ((1 << sparc_cpu) &
8143 ((1 << PROCESSOR_ULTRASPARC) | (1 << PROCESSOR_CYPRESS) |
8144 (1 << PROCESSOR_SUPERSPARC) | (1 << PROCESSOR_HYPERSPARC) |
8145 (1 << PROCESSOR_SPARCLITE86X) | (1 << PROCESSOR_TSC701) |
8146 (1 << PROCESSOR_ULTRASPARC3)))
8152 sparc_use_sched_lookahead (void)
8154 if (sparc_cpu == PROCESSOR_ULTRASPARC
8155 || sparc_cpu == PROCESSOR_ULTRASPARC3)
8157 if ((1 << sparc_cpu) &
8158 ((1 << PROCESSOR_SUPERSPARC) | (1 << PROCESSOR_HYPERSPARC) |
8159 (1 << PROCESSOR_SPARCLITE86X)))
8165 sparc_issue_rate (void)
8172 /* Assume V9 processors are capable of at least dual-issue. */
8174 case PROCESSOR_SUPERSPARC:
8176 case PROCESSOR_HYPERSPARC:
8177 case PROCESSOR_SPARCLITE86X:
8179 case PROCESSOR_ULTRASPARC:
8180 case PROCESSOR_ULTRASPARC3:
8186 set_extends (rtx insn)
8188 register rtx pat = PATTERN (insn);
8190 switch (GET_CODE (SET_SRC (pat)))
8192 /* Load and some shift instructions zero extend. */
8195 /* sethi clears the high bits */
8197 /* LO_SUM is used with sethi. sethi cleared the high
8198 bits and the values used with lo_sum are positive */
8200 /* Store flag stores 0 or 1 */
8210 rtx op0 = XEXP (SET_SRC (pat), 0);
8211 rtx op1 = XEXP (SET_SRC (pat), 1);
8212 if (GET_CODE (op1) == CONST_INT)
8213 return INTVAL (op1) >= 0;
8214 if (GET_CODE (op0) != REG)
8216 if (sparc_check_64 (op0, insn) == 1)
8218 return (GET_CODE (op1) == REG && sparc_check_64 (op1, insn) == 1);
8223 rtx op0 = XEXP (SET_SRC (pat), 0);
8224 rtx op1 = XEXP (SET_SRC (pat), 1);
8225 if (GET_CODE (op0) != REG || sparc_check_64 (op0, insn) <= 0)
8227 if (GET_CODE (op1) == CONST_INT)
8228 return INTVAL (op1) >= 0;
8229 return (GET_CODE (op1) == REG && sparc_check_64 (op1, insn) == 1);
8232 return GET_MODE (SET_SRC (pat)) == SImode;
8233 /* Positive integers leave the high bits zero. */
8235 return ! (CONST_DOUBLE_LOW (SET_SRC (pat)) & 0x80000000);
8237 return ! (INTVAL (SET_SRC (pat)) & 0x80000000);
8240 return - (GET_MODE (SET_SRC (pat)) == SImode);
8242 return sparc_check_64 (SET_SRC (pat), insn);
8248 /* We _ought_ to have only one kind per function, but... */
8249 static GTY(()) rtx sparc_addr_diff_list;
8250 static GTY(()) rtx sparc_addr_list;
8253 sparc_defer_case_vector (rtx lab, rtx vec, int diff)
8255 vec = gen_rtx_EXPR_LIST (VOIDmode, lab, vec);
8257 sparc_addr_diff_list
8258 = gen_rtx_EXPR_LIST (VOIDmode, vec, sparc_addr_diff_list);
8260 sparc_addr_list = gen_rtx_EXPR_LIST (VOIDmode, vec, sparc_addr_list);
8264 sparc_output_addr_vec (rtx vec)
8266 rtx lab = XEXP (vec, 0), body = XEXP (vec, 1);
8267 int idx, vlen = XVECLEN (body, 0);
8269 #ifdef ASM_OUTPUT_ADDR_VEC_START
8270 ASM_OUTPUT_ADDR_VEC_START (asm_out_file);
8273 #ifdef ASM_OUTPUT_CASE_LABEL
8274 ASM_OUTPUT_CASE_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (lab),
8277 (*targetm.asm_out.internal_label) (asm_out_file, "L", CODE_LABEL_NUMBER (lab));
8280 for (idx = 0; idx < vlen; idx++)
8282 ASM_OUTPUT_ADDR_VEC_ELT
8283 (asm_out_file, CODE_LABEL_NUMBER (XEXP (XVECEXP (body, 0, idx), 0)));
8286 #ifdef ASM_OUTPUT_ADDR_VEC_END
8287 ASM_OUTPUT_ADDR_VEC_END (asm_out_file);
8292 sparc_output_addr_diff_vec (rtx vec)
8294 rtx lab = XEXP (vec, 0), body = XEXP (vec, 1);
8295 rtx base = XEXP (XEXP (body, 0), 0);
8296 int idx, vlen = XVECLEN (body, 1);
8298 #ifdef ASM_OUTPUT_ADDR_VEC_START
8299 ASM_OUTPUT_ADDR_VEC_START (asm_out_file);
8302 #ifdef ASM_OUTPUT_CASE_LABEL
8303 ASM_OUTPUT_CASE_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (lab),
8306 (*targetm.asm_out.internal_label) (asm_out_file, "L", CODE_LABEL_NUMBER (lab));
8309 for (idx = 0; idx < vlen; idx++)
8311 ASM_OUTPUT_ADDR_DIFF_ELT
8314 CODE_LABEL_NUMBER (XEXP (XVECEXP (body, 1, idx), 0)),
8315 CODE_LABEL_NUMBER (base));
8318 #ifdef ASM_OUTPUT_ADDR_VEC_END
8319 ASM_OUTPUT_ADDR_VEC_END (asm_out_file);
8324 sparc_output_deferred_case_vectors (void)
8329 if (sparc_addr_list == NULL_RTX
8330 && sparc_addr_diff_list == NULL_RTX)
8333 /* Align to cache line in the function's code section. */
8334 function_section (current_function_decl);
8336 align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
8338 ASM_OUTPUT_ALIGN (asm_out_file, align);
8340 for (t = sparc_addr_list; t ; t = XEXP (t, 1))
8341 sparc_output_addr_vec (XEXP (t, 0));
8342 for (t = sparc_addr_diff_list; t ; t = XEXP (t, 1))
8343 sparc_output_addr_diff_vec (XEXP (t, 0));
8345 sparc_addr_list = sparc_addr_diff_list = NULL_RTX;
8348 /* Return 0 if the high 32 bits of X (the low word of X, if DImode) are
8349 unknown. Return 1 if the high bits are zero, -1 if the register is
8352 sparc_check_64 (rtx x, rtx insn)
8354 /* If a register is set only once it is safe to ignore insns this
8355 code does not know how to handle. The loop will either recognize
8356 the single set and return the correct value or fail to recognize
8361 if (GET_CODE (x) != REG)
8364 if (GET_MODE (x) == DImode)
8365 y = gen_rtx_REG (SImode, REGNO (x) + WORDS_BIG_ENDIAN);
8367 if (flag_expensive_optimizations
8368 && REG_N_SETS (REGNO (y)) == 1)
8374 insn = get_last_insn_anywhere ();
8379 while ((insn = PREV_INSN (insn)))
8381 switch (GET_CODE (insn))
8394 rtx pat = PATTERN (insn);
8395 if (GET_CODE (pat) != SET)
8397 if (rtx_equal_p (x, SET_DEST (pat)))
8398 return set_extends (insn);
8399 if (y && rtx_equal_p (y, SET_DEST (pat)))
8400 return set_extends (insn);
8401 if (reg_overlap_mentioned_p (SET_DEST (pat), y))
8409 /* Returns assembly code to perform a DImode shift using
8410 a 64-bit global or out register on SPARC-V8+. */
8412 sparc_v8plus_shift (rtx *operands, rtx insn, const char *opcode)
8414 static char asm_code[60];
8416 /* The scratch register is only required when the destination
8417 register is not a 64-bit global or out register. */
8418 if (which_alternative != 2)
8419 operands[3] = operands[0];
8421 /* We can only shift by constants <= 63. */
8422 if (GET_CODE (operands[2]) == CONST_INT)
8423 operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
8425 if (GET_CODE (operands[1]) == CONST_INT)
8427 output_asm_insn ("mov\t%1, %3", operands);
8431 output_asm_insn ("sllx\t%H1, 32, %3", operands);
8432 if (sparc_check_64 (operands[1], insn) <= 0)
8433 output_asm_insn ("srl\t%L1, 0, %L1", operands);
8434 output_asm_insn ("or\t%L1, %3, %3", operands);
8437 strcpy(asm_code, opcode);
8439 if (which_alternative != 2)
8440 return strcat (asm_code, "\t%0, %2, %L0\n\tsrlx\t%L0, 32, %H0");
8442 return strcat (asm_code, "\t%3, %2, %3\n\tsrlx\t%3, 32, %H0\n\tmov\t%3, %L0");
8445 /* Output rtl to increment the profiler label LABELNO
8446 for profiling a function entry. */
8449 sparc_profile_hook (int labelno)
8454 ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
8455 lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
8456 fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_FUNCTION);
8458 emit_library_call (fun, LCT_NORMAL, VOIDmode, 1, lab, Pmode);
8461 #ifdef OBJECT_FORMAT_ELF
8463 sparc_elf_asm_named_section (const char *name, unsigned int flags)
8465 if (flags & SECTION_MERGE)
8467 /* entsize cannot be expressed in this section attributes
8469 default_elf_asm_named_section (name, flags);
8473 fprintf (asm_out_file, "\t.section\t\"%s\"", name);
8475 if (!(flags & SECTION_DEBUG))
8476 fputs (",#alloc", asm_out_file);
8477 if (flags & SECTION_WRITE)
8478 fputs (",#write", asm_out_file);
8479 if (flags & SECTION_TLS)
8480 fputs (",#tls", asm_out_file);
8481 if (flags & SECTION_CODE)
8482 fputs (",#execinstr", asm_out_file);
8484 /* ??? Handle SECTION_BSS. */
8486 fputc ('\n', asm_out_file);
8488 #endif /* OBJECT_FORMAT_ELF */
8490 /* We do not allow sibling calls if -mflat, nor
8491 we do not allow indirect calls to be optimized into sibling calls.
8493 Also, on sparc 32-bit we cannot emit a sibling call when the
8494 current function returns a structure. This is because the "unimp
8495 after call" convention would cause the callee to return to the
8496 wrong place. The generic code already disallows cases where the
8497 function being called returns a structure.
8499 It may seem strange how this last case could occur. Usually there
8500 is code after the call which jumps to epilogue code which dumps the
8501 return value into the struct return area. That ought to invalidate
8502 the sibling call right? Well, in the c++ case we can end up passing
8503 the pointer to the struct return area to a constructor (which returns
8504 void) and then nothing else happens. Such a sibling call would look
8505 valid without the added check here. */
8507 sparc_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
8511 && (TARGET_ARCH64 || ! current_function_returns_struct));
8514 /* libfunc renaming. */
8515 #include "config/gofast.h"
8518 sparc_init_libfuncs (void)
8522 /* Use the subroutines that Sun's library provides for integer
8523 multiply and divide. The `*' prevents an underscore from
8524 being prepended by the compiler. .umul is a little faster
8526 set_optab_libfunc (smul_optab, SImode, "*.umul");
8527 set_optab_libfunc (sdiv_optab, SImode, "*.div");
8528 set_optab_libfunc (udiv_optab, SImode, "*.udiv");
8529 set_optab_libfunc (smod_optab, SImode, "*.rem");
8530 set_optab_libfunc (umod_optab, SImode, "*.urem");
8532 /* TFmode arithmetic. These names are part of the SPARC 32bit ABI. */
8533 set_optab_libfunc (add_optab, TFmode, "_Q_add");
8534 set_optab_libfunc (sub_optab, TFmode, "_Q_sub");
8535 set_optab_libfunc (neg_optab, TFmode, "_Q_neg");
8536 set_optab_libfunc (smul_optab, TFmode, "_Q_mul");
8537 set_optab_libfunc (sdiv_optab, TFmode, "_Q_div");
8539 /* We can define the TFmode sqrt optab only if TARGET_FPU. This
8540 is because with soft-float, the SFmode and DFmode sqrt
8541 instructions will be absent, and the compiler will notice and
8542 try to use the TFmode sqrt instruction for calls to the
8543 builtin function sqrt, but this fails. */
8545 set_optab_libfunc (sqrt_optab, TFmode, "_Q_sqrt");
8547 set_optab_libfunc (eq_optab, TFmode, "_Q_feq");
8548 set_optab_libfunc (ne_optab, TFmode, "_Q_fne");
8549 set_optab_libfunc (gt_optab, TFmode, "_Q_fgt");
8550 set_optab_libfunc (ge_optab, TFmode, "_Q_fge");
8551 set_optab_libfunc (lt_optab, TFmode, "_Q_flt");
8552 set_optab_libfunc (le_optab, TFmode, "_Q_fle");
8554 set_conv_libfunc (sext_optab, TFmode, SFmode, "_Q_stoq");
8555 set_conv_libfunc (sext_optab, TFmode, DFmode, "_Q_dtoq");
8556 set_conv_libfunc (trunc_optab, SFmode, TFmode, "_Q_qtos");
8557 set_conv_libfunc (trunc_optab, DFmode, TFmode, "_Q_qtod");
8559 set_conv_libfunc (sfix_optab, SImode, TFmode, "_Q_qtoi");
8560 set_conv_libfunc (ufix_optab, SImode, TFmode, "_Q_qtou");
8561 set_conv_libfunc (sfloat_optab, TFmode, SImode, "_Q_itoq");
8563 if (SUN_CONVERSION_LIBFUNCS)
8565 set_conv_libfunc (sfix_optab, DImode, SFmode, "__ftoll");
8566 set_conv_libfunc (ufix_optab, DImode, SFmode, "__ftoull");
8567 set_conv_libfunc (sfix_optab, DImode, DFmode, "__dtoll");
8568 set_conv_libfunc (ufix_optab, DImode, DFmode, "__dtoull");
8573 /* In the SPARC 64bit ABI, SImode multiply and divide functions
8574 do not exist in the library. Make sure the compiler does not
8575 emit calls to them by accident. (It should always use the
8576 hardware instructions.) */
8577 set_optab_libfunc (smul_optab, SImode, 0);
8578 set_optab_libfunc (sdiv_optab, SImode, 0);
8579 set_optab_libfunc (udiv_optab, SImode, 0);
8580 set_optab_libfunc (smod_optab, SImode, 0);
8581 set_optab_libfunc (umod_optab, SImode, 0);
8583 if (SUN_INTEGER_MULTIPLY_64)
8585 set_optab_libfunc (smul_optab, DImode, "__mul64");
8586 set_optab_libfunc (sdiv_optab, DImode, "__div64");
8587 set_optab_libfunc (udiv_optab, DImode, "__udiv64");
8588 set_optab_libfunc (smod_optab, DImode, "__rem64");
8589 set_optab_libfunc (umod_optab, DImode, "__urem64");
8592 if (SUN_CONVERSION_LIBFUNCS)
8594 set_conv_libfunc (sfix_optab, DImode, SFmode, "__ftol");
8595 set_conv_libfunc (ufix_optab, DImode, SFmode, "__ftoul");
8596 set_conv_libfunc (sfix_optab, DImode, DFmode, "__dtol");
8597 set_conv_libfunc (ufix_optab, DImode, DFmode, "__dtoul");
8601 gofast_maybe_init_libfuncs ();
8604 /* ??? Similar to the standard section selection, but force reloc-y-ness
8605 if SUNOS4_SHARED_LIBRARIES. Unclear why this helps (as opposed to
8606 pretending PIC always on), but that's what the old code did. */
8609 sparc_aout_select_section (tree t, int reloc, unsigned HOST_WIDE_INT align)
8611 default_select_section (t, reloc | SUNOS4_SHARED_LIBRARIES, align);
8614 /* Use text section for a constant unless we need more alignment than
8618 sparc_aout_select_rtx_section (enum machine_mode mode, rtx x,
8619 unsigned HOST_WIDE_INT align)
8621 if (align <= MAX_TEXT_ALIGN
8622 && ! (flag_pic && (symbolic_operand (x, mode)
8623 || SUNOS4_SHARED_LIBRARIES)))
8624 readonly_data_section ();
8630 sparc_extra_constraint_check (rtx op, int c, int strict)
8635 && (c == 'T' || c == 'U'))
8641 return fp_sethi_p (op);
8644 return fp_mov_p (op);
8647 return fp_high_losum_p (op);
8651 || (GET_CODE (op) == REG
8652 && (REGNO (op) < FIRST_PSEUDO_REGISTER
8653 || reg_renumber[REGNO (op)] >= 0)))
8654 return register_ok_for_ldd (op);
8666 /* Our memory extra constraints have to emulate the
8667 behavior of 'm' and 'o' in order for reload to work
8669 if (GET_CODE (op) == MEM)
8672 if ((TARGET_ARCH64 || mem_min_alignment (op, 8))
8674 || strict_memory_address_p (Pmode, XEXP (op, 0))))
8679 reload_ok_mem = (reload_in_progress
8680 && GET_CODE (op) == REG
8681 && REGNO (op) >= FIRST_PSEUDO_REGISTER
8682 && reg_renumber [REGNO (op)] < 0);
8685 return reload_ok_mem;
8688 /* ??? This duplicates information provided to the compiler by the
8689 ??? scheduler description. Some day, teach genautomata to output
8690 ??? the latencies and then CSE will just use that. */
8693 sparc_rtx_costs (rtx x, int code, int outer_code, int *total)
8697 case PLUS: case MINUS: case ABS: case NEG:
8698 case FLOAT: case UNSIGNED_FLOAT:
8699 case FIX: case UNSIGNED_FIX:
8700 case FLOAT_EXTEND: case FLOAT_TRUNCATE:
8701 if (FLOAT_MODE_P (GET_MODE (x)))
8705 case PROCESSOR_ULTRASPARC:
8706 case PROCESSOR_ULTRASPARC3:
8707 *total = COSTS_N_INSNS (4);
8710 case PROCESSOR_SUPERSPARC:
8711 *total = COSTS_N_INSNS (3);
8714 case PROCESSOR_CYPRESS:
8715 *total = COSTS_N_INSNS (5);
8718 case PROCESSOR_HYPERSPARC:
8719 case PROCESSOR_SPARCLITE86X:
8721 *total = COSTS_N_INSNS (1);
8726 *total = COSTS_N_INSNS (1);
8732 case PROCESSOR_ULTRASPARC:
8733 if (GET_MODE (x) == SFmode)
8734 *total = COSTS_N_INSNS (13);
8736 *total = COSTS_N_INSNS (23);
8739 case PROCESSOR_ULTRASPARC3:
8740 if (GET_MODE (x) == SFmode)
8741 *total = COSTS_N_INSNS (20);
8743 *total = COSTS_N_INSNS (29);
8746 case PROCESSOR_SUPERSPARC:
8747 *total = COSTS_N_INSNS (12);
8750 case PROCESSOR_CYPRESS:
8751 *total = COSTS_N_INSNS (63);
8754 case PROCESSOR_HYPERSPARC:
8755 case PROCESSOR_SPARCLITE86X:
8756 *total = COSTS_N_INSNS (17);
8760 *total = COSTS_N_INSNS (30);
8765 if (FLOAT_MODE_P (GET_MODE (x)))
8769 case PROCESSOR_ULTRASPARC:
8770 case PROCESSOR_ULTRASPARC3:
8771 *total = COSTS_N_INSNS (1);
8774 case PROCESSOR_SUPERSPARC:
8775 *total = COSTS_N_INSNS (3);
8778 case PROCESSOR_CYPRESS:
8779 *total = COSTS_N_INSNS (5);
8782 case PROCESSOR_HYPERSPARC:
8783 case PROCESSOR_SPARCLITE86X:
8785 *total = COSTS_N_INSNS (1);
8790 /* ??? Maybe mark integer compares as zero cost on
8791 ??? all UltraSPARC processors because the result
8792 ??? can be bypassed to a branch in the same group. */
8794 *total = COSTS_N_INSNS (1);
8798 if (FLOAT_MODE_P (GET_MODE (x)))
8802 case PROCESSOR_ULTRASPARC:
8803 case PROCESSOR_ULTRASPARC3:
8804 *total = COSTS_N_INSNS (4);
8807 case PROCESSOR_SUPERSPARC:
8808 *total = COSTS_N_INSNS (3);
8811 case PROCESSOR_CYPRESS:
8812 *total = COSTS_N_INSNS (7);
8815 case PROCESSOR_HYPERSPARC:
8816 case PROCESSOR_SPARCLITE86X:
8817 *total = COSTS_N_INSNS (1);
8821 *total = COSTS_N_INSNS (5);
8826 /* The latency is actually variable for Ultra-I/II
8827 And if one of the inputs have a known constant
8828 value, we could calculate this precisely.
8830 However, for that to be useful we would need to
8831 add some machine description changes which would
8832 make sure small constants ended up in rs1 of the
8833 multiply instruction. This is because the multiply
8834 latency is determined by the number of clear (or
8835 set if the value is negative) bits starting from
8836 the most significant bit of the first input.
8838 The algorithm for computing num_cycles of a multiply
8842 highest_bit = highest_clear_bit(rs1);
8844 highest_bit = highest_set_bit(rs1);
8847 num_cycles = 4 + ((highest_bit - 3) / 2);
8849 If we did that we would have to also consider register
8850 allocation issues that would result from forcing such
8851 a value into a register.
8853 There are other similar tricks we could play if we
8854 knew, for example, that one input was an array index.
8856 Since we do not play any such tricks currently the
8857 safest thing to do is report the worst case latency. */
8858 if (sparc_cpu == PROCESSOR_ULTRASPARC)
8860 *total = (GET_MODE (x) == DImode
8861 ? COSTS_N_INSNS (34) : COSTS_N_INSNS (19));
8865 /* Multiply latency on Ultra-III, fortunately, is constant. */
8866 if (sparc_cpu == PROCESSOR_ULTRASPARC3)
8868 *total = COSTS_N_INSNS (6);
8872 if (sparc_cpu == PROCESSOR_HYPERSPARC
8873 || sparc_cpu == PROCESSOR_SPARCLITE86X)
8875 *total = COSTS_N_INSNS (17);
8879 *total = (TARGET_HARD_MUL ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25));
8886 if (FLOAT_MODE_P (GET_MODE (x)))
8890 case PROCESSOR_ULTRASPARC:
8891 if (GET_MODE (x) == SFmode)
8892 *total = COSTS_N_INSNS (13);
8894 *total = COSTS_N_INSNS (23);
8897 case PROCESSOR_ULTRASPARC3:
8898 if (GET_MODE (x) == SFmode)
8899 *total = COSTS_N_INSNS (17);
8901 *total = COSTS_N_INSNS (20);
8904 case PROCESSOR_SUPERSPARC:
8905 if (GET_MODE (x) == SFmode)
8906 *total = COSTS_N_INSNS (6);
8908 *total = COSTS_N_INSNS (9);
8911 case PROCESSOR_HYPERSPARC:
8912 case PROCESSOR_SPARCLITE86X:
8913 if (GET_MODE (x) == SFmode)
8914 *total = COSTS_N_INSNS (8);
8916 *total = COSTS_N_INSNS (12);
8920 *total = COSTS_N_INSNS (7);
8925 if (sparc_cpu == PROCESSOR_ULTRASPARC)
8926 *total = (GET_MODE (x) == DImode
8927 ? COSTS_N_INSNS (68) : COSTS_N_INSNS (37));
8928 else if (sparc_cpu == PROCESSOR_ULTRASPARC3)
8929 *total = (GET_MODE (x) == DImode
8930 ? COSTS_N_INSNS (71) : COSTS_N_INSNS (40));
8932 *total = COSTS_N_INSNS (25);
8936 /* Conditional moves. */
8939 case PROCESSOR_ULTRASPARC:
8940 *total = COSTS_N_INSNS (2);
8943 case PROCESSOR_ULTRASPARC3:
8944 if (FLOAT_MODE_P (GET_MODE (x)))
8945 *total = COSTS_N_INSNS (3);
8947 *total = COSTS_N_INSNS (2);
8951 *total = COSTS_N_INSNS (1);
8956 /* If outer-code is SIGN/ZERO extension we have to subtract
8957 out COSTS_N_INSNS (1) from whatever we return in determining
8961 case PROCESSOR_ULTRASPARC:
8962 if (outer_code == ZERO_EXTEND)
8963 *total = COSTS_N_INSNS (1);
8965 *total = COSTS_N_INSNS (2);
8968 case PROCESSOR_ULTRASPARC3:
8969 if (outer_code == ZERO_EXTEND)
8971 if (GET_MODE (x) == QImode
8972 || GET_MODE (x) == HImode
8973 || outer_code == SIGN_EXTEND)
8974 *total = COSTS_N_INSNS (2);
8976 *total = COSTS_N_INSNS (1);
8980 /* This handles sign extension (3 cycles)
8981 and everything else (2 cycles). */
8982 *total = COSTS_N_INSNS (2);
8986 case PROCESSOR_SUPERSPARC:
8987 if (FLOAT_MODE_P (GET_MODE (x))
8988 || outer_code == ZERO_EXTEND
8989 || outer_code == SIGN_EXTEND)
8990 *total = COSTS_N_INSNS (0);
8992 *total = COSTS_N_INSNS (1);
8995 case PROCESSOR_TSC701:
8996 if (outer_code == ZERO_EXTEND
8997 || outer_code == SIGN_EXTEND)
8998 *total = COSTS_N_INSNS (2);
9000 *total = COSTS_N_INSNS (3);
9003 case PROCESSOR_CYPRESS:
9004 if (outer_code == ZERO_EXTEND
9005 || outer_code == SIGN_EXTEND)
9006 *total = COSTS_N_INSNS (1);
9008 *total = COSTS_N_INSNS (2);
9011 case PROCESSOR_HYPERSPARC:
9012 case PROCESSOR_SPARCLITE86X:
9014 if (outer_code == ZERO_EXTEND
9015 || outer_code == SIGN_EXTEND)
9016 *total = COSTS_N_INSNS (0);
9018 *total = COSTS_N_INSNS (1);
9023 if (INTVAL (x) < 0x1000 && INTVAL (x) >= -0x1000)
9041 if (GET_MODE (x) == DImode
9042 && ((XINT (x, 3) == 0
9043 && (unsigned HOST_WIDE_INT) XINT (x, 2) < 0x1000)
9044 || (XINT (x, 3) == -1
9046 && XINT (x, 2) >= -0x1000)))
9057 /* Output code to add DELTA to the first argument, and then jump to FUNCTION.
9058 Used for C++ multiple inheritance. */
9061 sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
9062 HOST_WIDE_INT delta,
9063 HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED,
9066 rtx this, insn, funexp, delta_rtx, tmp;
9068 reload_completed = 1;
9069 epilogue_completed = 1;
9071 current_function_uses_only_leaf_regs = 1;
9073 emit_note (NOTE_INSN_PROLOGUE_END);
9075 /* Find the "this" pointer. Normally in %o0, but in ARCH64 if the function
9076 returns a structure, the structure return pointer is there instead. */
9077 if (TARGET_ARCH64 && aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
9078 this = gen_rtx_REG (Pmode, SPARC_INCOMING_INT_ARG_FIRST + 1);
9080 this = gen_rtx_REG (Pmode, SPARC_INCOMING_INT_ARG_FIRST);
9082 /* Add DELTA. When possible use a plain add, otherwise load it into
9083 a register first. */
9084 delta_rtx = GEN_INT (delta);
9085 if (!SPARC_SIMM13_P (delta))
9087 rtx scratch = gen_rtx_REG (Pmode, 1);
9089 if (input_operand (delta_rtx, GET_MODE (scratch)))
9090 emit_insn (gen_rtx_SET (VOIDmode, scratch, delta_rtx));
9094 sparc_emit_set_const64 (scratch, delta_rtx);
9096 sparc_emit_set_const32 (scratch, delta_rtx);
9099 delta_rtx = scratch;
9102 tmp = gen_rtx_PLUS (Pmode, this, delta_rtx);
9103 emit_insn (gen_rtx_SET (VOIDmode, this, tmp));
9105 /* Generate a tail call to the target function. */
9106 if (! TREE_USED (function))
9108 assemble_external (function);
9109 TREE_USED (function) = 1;
9111 funexp = XEXP (DECL_RTL (function), 0);
9112 funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
9113 insn = emit_call_insn (gen_sibcall (funexp));
9114 SIBLING_CALL_P (insn) = 1;
9117 /* Run just enough of rest_of_compilation to get the insns emitted.
9118 There's not really enough bulk here to make other passes such as
9119 instruction scheduling worth while. Note that use_thunk calls
9120 assemble_start_function and assemble_end_function. */
9121 insn = get_insns ();
9122 insn_locators_initialize ();
9123 shorten_branches (insn);
9124 final_start_function (insn, file, 1);
9125 final (insn, file, 1, 0);
9126 final_end_function ();
9128 reload_completed = 0;
9129 epilogue_completed = 0;
9133 /* How to allocate a 'struct machine_function'. */
9135 static struct machine_function *
9136 sparc_init_machine_status (void)
9138 return ggc_alloc_cleared (sizeof (struct machine_function));
9141 /* Locate some local-dynamic symbol still in use by this function
9142 so that we can print its name in local-dynamic base patterns. */
9145 get_some_local_dynamic_name (void)
9149 if (cfun->machine->some_ld_name)
9150 return cfun->machine->some_ld_name;
9152 for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
9154 && for_each_rtx (&PATTERN (insn), get_some_local_dynamic_name_1, 0))
9155 return cfun->machine->some_ld_name;
9161 get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
9166 && GET_CODE (x) == SYMBOL_REF
9167 && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_DYNAMIC)
9169 cfun->machine->some_ld_name = XSTR (x, 0);
9176 /* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL.
9177 We need to emit DTP-relative relocations. */
9180 sparc_output_dwarf_dtprel (FILE *file, int size, rtx x)
9185 fputs ("\t.word\t%r_tls_dtpoff32(", file);
9188 fputs ("\t.xword\t%r_tls_dtpoff64(", file);
9193 output_addr_const (file, x);
9197 #include "gt-sparc.h"