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 (TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
4936 if (DECL_PACKED (field))
4940 if (packed_p || !named)
4941 fpregs_p = 0, intregs_p = 1;
4943 /* If all arg slots are filled, then must pass on stack. */
4944 if (fpregs_p && slotno >= SPARC_FP_ARG_MAX)
4946 /* If there are only int args and all int arg slots are filled,
4947 then must pass on stack. */
4948 if (!fpregs_p && intregs_p && slotno >= SPARC_INT_ARG_MAX)
4950 /* Note that even if all int arg slots are filled, fp members may
4951 still be passed in regs if such regs are available.
4952 *PREGNO isn't set because there may be more than one, it's up
4953 to the caller to compute them. */
4966 /* Handle recursive register counting for structure field layout. */
4968 struct function_arg_record_value_parms
4970 rtx ret; /* return expression being built. */
4971 int slotno; /* slot number of the argument. */
4972 int named; /* whether the argument is named. */
4973 int regbase; /* regno of the base register. */
4974 int stack; /* 1 if part of the argument is on the stack. */
4975 int intoffset; /* offset of the pending integer field. */
4976 unsigned int nregs; /* number of words passed in registers. */
4979 static void function_arg_record_value_3
4980 (HOST_WIDE_INT, struct function_arg_record_value_parms *);
4981 static void function_arg_record_value_2
4982 (tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
4983 static void function_arg_record_value_1
4984 (tree, HOST_WIDE_INT, struct function_arg_record_value_parms *, bool);
4985 static rtx function_arg_record_value (tree, enum machine_mode, int, int, int);
4987 /* A subroutine of function_arg_record_value. Traverse the structure
4988 recursively and determine how many registers will be required. */
4991 function_arg_record_value_1 (tree type, HOST_WIDE_INT startbitpos,
4992 struct function_arg_record_value_parms *parms,
4997 /* We need to compute how many registers are needed so we can
4998 allocate the PARALLEL but before we can do that we need to know
4999 whether there are any packed fields. The ABI obviously doesn't
5000 specify how structures are passed in this case, so they are
5001 defined to be passed in int regs if possible, otherwise memory,
5002 regardless of whether there are fp values present. */
5005 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5007 if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
5014 /* Compute how many registers we need. */
5015 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5017 if (TREE_CODE (field) == FIELD_DECL)
5019 HOST_WIDE_INT bitpos = startbitpos;
5021 if (DECL_SIZE (field) != 0
5022 && host_integerp (bit_position (field), 1))
5023 bitpos += int_bit_position (field);
5025 /* ??? FIXME: else assume zero offset. */
5027 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
5028 function_arg_record_value_1 (TREE_TYPE (field),
5032 else if ((TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
5033 || (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE
5034 && (TREE_CODE (TREE_TYPE (TREE_TYPE (field)))
5040 if (parms->intoffset != -1)
5042 unsigned int startbit, endbit;
5043 int intslots, this_slotno;
5045 startbit = parms->intoffset & -BITS_PER_WORD;
5046 endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5048 intslots = (endbit - startbit) / BITS_PER_WORD;
5049 this_slotno = parms->slotno + parms->intoffset
5052 if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
5054 intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
5055 /* We need to pass this field on the stack. */
5059 parms->nregs += intslots;
5060 parms->intoffset = -1;
5063 /* There's no need to check this_slotno < SPARC_FP_ARG MAX.
5064 If it wasn't true we wouldn't be here. */
5066 if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
5071 if (parms->intoffset == -1)
5072 parms->intoffset = bitpos;
5078 /* A subroutine of function_arg_record_value. Assign the bits of the
5079 structure between parms->intoffset and bitpos to integer registers. */
5082 function_arg_record_value_3 (HOST_WIDE_INT bitpos,
5083 struct function_arg_record_value_parms *parms)
5085 enum machine_mode mode;
5087 unsigned int startbit, endbit;
5088 int this_slotno, intslots, intoffset;
5091 if (parms->intoffset == -1)
5094 intoffset = parms->intoffset;
5095 parms->intoffset = -1;
5097 startbit = intoffset & -BITS_PER_WORD;
5098 endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5099 intslots = (endbit - startbit) / BITS_PER_WORD;
5100 this_slotno = parms->slotno + intoffset / BITS_PER_WORD;
5102 intslots = MIN (intslots, SPARC_INT_ARG_MAX - this_slotno);
5106 /* If this is the trailing part of a word, only load that much into
5107 the register. Otherwise load the whole register. Note that in
5108 the latter case we may pick up unwanted bits. It's not a problem
5109 at the moment but may wish to revisit. */
5111 if (intoffset % BITS_PER_WORD != 0)
5112 mode = mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD,
5117 intoffset /= BITS_PER_UNIT;
5120 regno = parms->regbase + this_slotno;
5121 reg = gen_rtx_REG (mode, regno);
5122 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5123 = gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (intoffset));
5126 intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1;
5130 while (intslots > 0);
5133 /* A subroutine of function_arg_record_value. Traverse the structure
5134 recursively and assign bits to floating point registers. Track which
5135 bits in between need integer registers; invoke function_arg_record_value_3
5136 to make that happen. */
5139 function_arg_record_value_2 (tree type, HOST_WIDE_INT startbitpos,
5140 struct function_arg_record_value_parms *parms,
5146 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5148 if (TREE_CODE (field) == FIELD_DECL && DECL_PACKED (field))
5155 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
5157 if (TREE_CODE (field) == FIELD_DECL)
5159 HOST_WIDE_INT bitpos = startbitpos;
5161 if (DECL_SIZE (field) != 0
5162 && host_integerp (bit_position (field), 1))
5163 bitpos += int_bit_position (field);
5165 /* ??? FIXME: else assume zero offset. */
5167 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
5168 function_arg_record_value_2 (TREE_TYPE (field),
5172 else if ((TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
5173 || (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE
5174 && (TREE_CODE (TREE_TYPE (TREE_TYPE (field)))
5180 int this_slotno = parms->slotno + bitpos / BITS_PER_WORD;
5182 enum machine_mode mode = DECL_MODE (field);
5185 function_arg_record_value_3 (bitpos, parms);
5186 regno = SPARC_FP_ARG_FIRST + this_slotno * 2
5187 + ((mode == SFmode || mode == SCmode)
5188 && (bitpos & 32) != 0);
5191 case SCmode: mode = SFmode; break;
5192 case DCmode: mode = DFmode; break;
5193 case TCmode: mode = TFmode; break;
5196 reg = gen_rtx_REG (mode, regno);
5197 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5198 = gen_rtx_EXPR_LIST (VOIDmode, reg,
5199 GEN_INT (bitpos / BITS_PER_UNIT));
5201 if (TREE_CODE (TREE_TYPE (field)) == COMPLEX_TYPE)
5203 regno += GET_MODE_SIZE (mode) / 4;
5204 reg = gen_rtx_REG (mode, regno);
5205 XVECEXP (parms->ret, 0, parms->stack + parms->nregs)
5206 = gen_rtx_EXPR_LIST (VOIDmode, reg,
5207 GEN_INT ((bitpos + GET_MODE_BITSIZE (mode))
5214 if (parms->intoffset == -1)
5215 parms->intoffset = bitpos;
5221 /* Used by function_arg and function_value to implement the complex
5222 conventions of the 64-bit ABI for passing and returning structures.
5223 Return an expression valid as a return value for the two macros
5224 FUNCTION_ARG and FUNCTION_VALUE.
5226 TYPE is the data type of the argument (as a tree).
5227 This is null for libcalls where that information may
5229 MODE is the argument's machine mode.
5230 SLOTNO is the index number of the argument's slot in the parameter array.
5231 NAMED is nonzero if this argument is a named parameter
5232 (otherwise it is an extra parameter matching an ellipsis).
5233 REGBASE is the regno of the base register for the parameter array. */
5236 function_arg_record_value (tree type, enum machine_mode mode,
5237 int slotno, int named, int regbase)
5239 HOST_WIDE_INT typesize = int_size_in_bytes (type);
5240 struct function_arg_record_value_parms parms;
5243 parms.ret = NULL_RTX;
5244 parms.slotno = slotno;
5245 parms.named = named;
5246 parms.regbase = regbase;
5249 /* Compute how many registers we need. */
5251 parms.intoffset = 0;
5252 function_arg_record_value_1 (type, 0, &parms, false);
5254 if (parms.intoffset != -1)
5256 unsigned int startbit, endbit;
5257 int intslots, this_slotno;
5259 startbit = parms.intoffset & -BITS_PER_WORD;
5260 endbit = (typesize*BITS_PER_UNIT + BITS_PER_WORD - 1) & -BITS_PER_WORD;
5261 intslots = (endbit - startbit) / BITS_PER_WORD;
5262 this_slotno = slotno + parms.intoffset / BITS_PER_WORD;
5264 if (intslots > 0 && intslots > SPARC_INT_ARG_MAX - this_slotno)
5266 intslots = MAX (0, SPARC_INT_ARG_MAX - this_slotno);
5267 /* We need to pass this field on the stack. */
5271 parms.nregs += intslots;
5273 nregs = parms.nregs;
5275 /* Allocate the vector and handle some annoying special cases. */
5278 /* ??? Empty structure has no value? Duh? */
5281 /* Though there's nothing really to store, return a word register
5282 anyway so the rest of gcc doesn't go nuts. Returning a PARALLEL
5283 leads to breakage due to the fact that there are zero bytes to
5285 return gen_rtx_REG (mode, regbase);
5289 /* ??? C++ has structures with no fields, and yet a size. Give up
5290 for now and pass everything back in integer registers. */
5291 nregs = (typesize + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
5293 if (nregs + slotno > SPARC_INT_ARG_MAX)
5294 nregs = SPARC_INT_ARG_MAX - slotno;
5299 parms.ret = gen_rtx_PARALLEL (mode, rtvec_alloc (parms.stack + nregs));
5301 /* If at least one field must be passed on the stack, generate
5302 (parallel [(expr_list (nil) ...) ...]) so that all fields will
5303 also be passed on the stack. We can't do much better because the
5304 semantics of FUNCTION_ARG_PARTIAL_NREGS doesn't handle the case
5305 of structures for which the fields passed exclusively in registers
5306 are not at the beginning of the structure. */
5308 XVECEXP (parms.ret, 0, 0)
5309 = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
5311 /* Fill in the entries. */
5313 parms.intoffset = 0;
5314 function_arg_record_value_2 (type, 0, &parms, false);
5315 function_arg_record_value_3 (typesize * BITS_PER_UNIT, &parms);
5317 if (parms.nregs != nregs)
5323 /* Handle the FUNCTION_ARG macro.
5324 Determine where to put an argument to a function.
5325 Value is zero to push the argument on the stack,
5326 or a hard register in which to store the argument.
5328 CUM is a variable of type CUMULATIVE_ARGS which gives info about
5329 the preceding args and about the function being called.
5330 MODE is the argument's machine mode.
5331 TYPE is the data type of the argument (as a tree).
5332 This is null for libcalls where that information may
5334 NAMED is nonzero if this argument is a named parameter
5335 (otherwise it is an extra parameter matching an ellipsis).
5336 INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG. */
5339 function_arg (const struct sparc_args *cum, enum machine_mode mode,
5340 tree type, int named, int incoming_p)
5342 int regbase = (incoming_p
5343 ? SPARC_INCOMING_INT_ARG_FIRST
5344 : SPARC_OUTGOING_INT_ARG_FIRST);
5345 int slotno, regno, padding;
5348 slotno = function_arg_slotno (cum, mode, type, named, incoming_p,
5356 reg = gen_rtx_REG (mode, regno);
5360 if (type && TREE_CODE (type) == RECORD_TYPE)
5362 /* Structures up to 16 bytes in size are passed in arg slots on the
5363 stack and are promoted to registers where possible. */
5365 if (int_size_in_bytes (type) > 16)
5366 abort (); /* shouldn't get here */
5368 return function_arg_record_value (type, mode, slotno, named, regbase);
5370 else if (type && TREE_CODE (type) == UNION_TYPE)
5372 enum machine_mode mode;
5373 int bytes = int_size_in_bytes (type);
5378 mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
5379 reg = gen_rtx_REG (mode, regno);
5381 /* v9 fp args in reg slots beyond the int reg slots get passed in regs
5382 but also have the slot allocated for them.
5383 If no prototype is in scope fp values in register slots get passed
5384 in two places, either fp regs and int regs or fp regs and memory. */
5385 else if ((GET_MODE_CLASS (mode) == MODE_FLOAT
5386 || GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
5387 && SPARC_FP_REG_P (regno))
5389 reg = gen_rtx_REG (mode, regno);
5390 if (cum->prototype_p || cum->libcall_p)
5392 /* "* 2" because fp reg numbers are recorded in 4 byte
5395 /* ??? This will cause the value to be passed in the fp reg and
5396 in the stack. When a prototype exists we want to pass the
5397 value in the reg but reserve space on the stack. That's an
5398 optimization, and is deferred [for a bit]. */
5399 if ((regno - SPARC_FP_ARG_FIRST) >= SPARC_INT_ARG_MAX * 2)
5400 return gen_rtx_PARALLEL (mode,
5402 gen_rtx_EXPR_LIST (VOIDmode,
5403 NULL_RTX, const0_rtx),
5404 gen_rtx_EXPR_LIST (VOIDmode,
5408 /* ??? It seems that passing back a register even when past
5409 the area declared by REG_PARM_STACK_SPACE will allocate
5410 space appropriately, and will not copy the data onto the
5411 stack, exactly as we desire.
5413 This is due to locate_and_pad_parm being called in
5414 expand_call whenever reg_parm_stack_space > 0, which
5415 while beneficial to our example here, would seem to be
5416 in error from what had been intended. Ho hum... -- r~ */
5424 if ((regno - SPARC_FP_ARG_FIRST) < SPARC_INT_ARG_MAX * 2)
5428 /* On incoming, we don't need to know that the value
5429 is passed in %f0 and %i0, and it confuses other parts
5430 causing needless spillage even on the simplest cases. */
5434 intreg = (SPARC_OUTGOING_INT_ARG_FIRST
5435 + (regno - SPARC_FP_ARG_FIRST) / 2);
5437 v0 = gen_rtx_EXPR_LIST (VOIDmode, reg, const0_rtx);
5438 v1 = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_REG (mode, intreg),
5440 return gen_rtx_PARALLEL (mode, gen_rtvec (2, v0, v1));
5444 v0 = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx);
5445 v1 = gen_rtx_EXPR_LIST (VOIDmode, reg, const0_rtx);
5446 return gen_rtx_PARALLEL (mode, gen_rtvec (2, v0, v1));
5452 /* Scalar or complex int. */
5453 reg = gen_rtx_REG (mode, regno);
5459 /* Handle the FUNCTION_ARG_PARTIAL_NREGS macro.
5460 For an arg passed partly in registers and partly in memory,
5461 this is the number of registers used.
5462 For args passed entirely in registers or entirely in memory, zero.
5464 Any arg that starts in the first 6 regs but won't entirely fit in them
5465 needs partial registers on v8. On v9, structures with integer
5466 values in arg slots 5,6 will be passed in %o5 and SP+176, and complex fp
5467 values that begin in the last fp reg [where "last fp reg" varies with the
5468 mode] will be split between that reg and memory. */
5471 function_arg_partial_nregs (const struct sparc_args *cum,
5472 enum machine_mode mode, tree type, int named)
5474 int slotno, regno, padding;
5476 /* We pass 0 for incoming_p here, it doesn't matter. */
5477 slotno = function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
5484 if ((slotno + (mode == BLKmode
5485 ? ROUND_ADVANCE (int_size_in_bytes (type))
5486 : ROUND_ADVANCE (GET_MODE_SIZE (mode))))
5487 > NPARM_REGS (SImode))
5488 return NPARM_REGS (SImode) - slotno;
5493 if (type && AGGREGATE_TYPE_P (type))
5495 int size = int_size_in_bytes (type);
5496 int align = TYPE_ALIGN (type);
5499 slotno += slotno & 1;
5500 if (size > 8 && size <= 16
5501 && slotno == SPARC_INT_ARG_MAX - 1)
5504 else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT
5505 || (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
5506 && ! (TARGET_FPU && named)))
5508 /* The complex types are passed as packed types. */
5509 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD)
5512 if (GET_MODE_ALIGNMENT (mode) == 128)
5514 slotno += slotno & 1;
5516 /* ??? The mode needs 3 slots? */
5517 if (slotno == SPARC_INT_ARG_MAX - 2)
5522 if (slotno == SPARC_INT_ARG_MAX - 1)
5526 else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
5528 if (GET_MODE_ALIGNMENT (mode) == 128)
5529 slotno += slotno & 1;
5530 if ((slotno + GET_MODE_SIZE (mode) / UNITS_PER_WORD)
5538 /* Handle the FUNCTION_ARG_PASS_BY_REFERENCE macro.
5539 !v9: The SPARC ABI stipulates passing struct arguments (of any size) and
5540 quad-precision floats by invisible reference.
5541 v9: Aggregates greater than 16 bytes are passed by reference.
5542 For Pascal, also pass arrays by reference. */
5545 function_arg_pass_by_reference (const struct sparc_args *cum ATTRIBUTE_UNUSED,
5546 enum machine_mode mode, tree type,
5547 int named ATTRIBUTE_UNUSED)
5551 return ((type && AGGREGATE_TYPE_P (type))
5552 || mode == TFmode || mode == TCmode);
5556 return ((type && TREE_CODE (type) == ARRAY_TYPE)
5557 /* Consider complex values as aggregates, so care
5558 for CTImode and TCmode. */
5559 || GET_MODE_SIZE (mode) > 16
5561 && AGGREGATE_TYPE_P (type)
5562 && (unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 16));
5566 /* Handle the FUNCTION_ARG_ADVANCE macro.
5567 Update the data in CUM to advance over an argument
5568 of mode MODE and data type TYPE.
5569 TYPE is null for libcalls where that information may not be available. */
5572 function_arg_advance (struct sparc_args *cum, enum machine_mode mode,
5573 tree type, int named)
5575 int slotno, regno, padding;
5577 /* We pass 0 for incoming_p here, it doesn't matter. */
5578 slotno = function_arg_slotno (cum, mode, type, named, 0, ®no, &padding);
5580 /* If register required leading padding, add it. */
5582 cum->words += padding;
5586 cum->words += (mode != BLKmode
5587 ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
5588 : ROUND_ADVANCE (int_size_in_bytes (type)));
5592 if (type && AGGREGATE_TYPE_P (type))
5594 int size = int_size_in_bytes (type);
5598 else if (size <= 16)
5600 else /* passed by reference */
5605 cum->words += (mode != BLKmode
5606 ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
5607 : ROUND_ADVANCE (int_size_in_bytes (type)));
5612 /* Handle the FUNCTION_ARG_PADDING macro.
5613 For the 64 bit ABI structs are always stored left shifted in their
5617 function_arg_padding (enum machine_mode mode, tree type)
5619 if (TARGET_ARCH64 && type != 0 && AGGREGATE_TYPE_P (type))
5622 /* Fall back to the default. */
5623 return DEFAULT_FUNCTION_ARG_PADDING (mode, type);
5626 /* Handle FUNCTION_VALUE, FUNCTION_OUTGOING_VALUE, and LIBCALL_VALUE macros.
5627 For v9, function return values are subject to the same rules as arguments,
5628 except that up to 32-bytes may be returned in registers. */
5631 function_value (tree type, enum machine_mode mode, int incoming_p)
5634 int regbase = (incoming_p
5635 ? SPARC_OUTGOING_INT_ARG_FIRST
5636 : SPARC_INCOMING_INT_ARG_FIRST);
5638 if (TARGET_ARCH64 && type)
5640 if (TREE_CODE (type) == RECORD_TYPE)
5642 /* Structures up to 32 bytes in size are passed in registers,
5643 promoted to fp registers where possible. */
5645 if (int_size_in_bytes (type) > 32)
5646 abort (); /* shouldn't get here */
5648 return function_arg_record_value (type, mode, 0, 1, regbase);
5650 else if (AGGREGATE_TYPE_P (type))
5652 /* All other aggregate types are passed in an integer register
5653 in a mode corresponding to the size of the type. */
5654 HOST_WIDE_INT bytes = int_size_in_bytes (type);
5659 mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
5664 && GET_MODE_CLASS (mode) == MODE_INT
5665 && GET_MODE_SIZE (mode) < UNITS_PER_WORD
5666 && type && ! AGGREGATE_TYPE_P (type))
5670 regno = BASE_RETURN_VALUE_REG (mode);
5672 regno = BASE_OUTGOING_VALUE_REG (mode);
5674 return gen_rtx_REG (mode, regno);
5677 /* Do what is necessary for `va_start'. We look at the current function
5678 to determine if stdarg or varargs is used and return the address of
5679 the first unnamed parameter. */
5682 sparc_builtin_saveregs (void)
5684 int first_reg = current_function_args_info.words;
5688 for (regno = first_reg; regno < NPARM_REGS (word_mode); regno++)
5689 emit_move_insn (gen_rtx_MEM (word_mode,
5690 gen_rtx_PLUS (Pmode,
5692 GEN_INT (FIRST_PARM_OFFSET (0)
5695 gen_rtx_REG (word_mode,
5696 BASE_INCOMING_ARG_REG (word_mode) + regno));
5698 address = gen_rtx_PLUS (Pmode,
5700 GEN_INT (FIRST_PARM_OFFSET (0)
5701 + UNITS_PER_WORD * first_reg));
5706 /* Implement `va_start' for varargs and stdarg. */
5709 sparc_va_start (tree valist, rtx nextarg)
5711 nextarg = expand_builtin_saveregs ();
5712 std_expand_builtin_va_start (valist, nextarg);
5715 /* Implement `va_arg'. */
5718 sparc_va_arg (tree valist, tree type)
5720 HOST_WIDE_INT size, rsize, align;
5725 /* Round up sizeof(type) to a word. */
5726 size = int_size_in_bytes (type);
5727 rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
5732 if (TYPE_ALIGN (type) >= 2 * (unsigned) BITS_PER_WORD)
5733 align = 2 * UNITS_PER_WORD;
5735 /* Consider complex values as aggregates, so care
5736 for CTImode and TCmode. */
5737 if ((unsigned HOST_WIDE_INT) size > 16)
5740 size = rsize = UNITS_PER_WORD;
5743 else if (AGGREGATE_TYPE_P (type))
5745 /* SPARC-V9 ABI states that structures up to 16 bytes in size
5746 are given whole slots as needed. */
5748 size = rsize = UNITS_PER_WORD;
5755 if (AGGREGATE_TYPE_P (type)
5756 || TYPE_MODE (type) == TFmode
5757 || TYPE_MODE (type) == TCmode)
5760 size = rsize = UNITS_PER_WORD;
5767 incr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5768 build_int_2 (align - 1, 0)));
5769 incr = fold (build (BIT_AND_EXPR, ptr_type_node, incr,
5770 build_int_2 (-align, -1)));
5773 addr = incr = save_expr (incr);
5774 if (BYTES_BIG_ENDIAN && size < rsize)
5776 addr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5777 build_int_2 (rsize - size, 0)));
5779 incr = fold (build (PLUS_EXPR, ptr_type_node, incr,
5780 build_int_2 (rsize, 0)));
5782 incr = build (MODIFY_EXPR, ptr_type_node, valist, incr);
5783 TREE_SIDE_EFFECTS (incr) = 1;
5784 expand_expr (incr, const0_rtx, VOIDmode, EXPAND_NORMAL);
5786 addr_rtx = expand_expr (addr, NULL, Pmode, EXPAND_NORMAL);
5788 /* If the address isn't aligned properly for the type,
5789 we may need to copy to a temporary.
5790 FIXME: This is inefficient. Usually we can do this
5793 && TYPE_ALIGN (type) > BITS_PER_WORD
5796 /* FIXME: We really need to specify that the temporary is live
5797 for the whole function because expand_builtin_va_arg wants
5798 the alias set to be get_varargs_alias_set (), but in this
5799 case the alias set is that for TYPE and if the memory gets
5800 reused it will be reused with alias set TYPE. */
5801 rtx tmp = assign_temp (type, 0, 1, 0);
5804 addr_rtx = force_reg (Pmode, addr_rtx);
5805 addr_rtx = gen_rtx_MEM (BLKmode, addr_rtx);
5806 set_mem_alias_set (addr_rtx, get_varargs_alias_set ());
5807 set_mem_align (addr_rtx, BITS_PER_WORD);
5808 tmp = shallow_copy_rtx (tmp);
5809 PUT_MODE (tmp, BLKmode);
5810 set_mem_alias_set (tmp, 0);
5812 dest_addr = emit_block_move (tmp, addr_rtx, GEN_INT (rsize),
5814 if (dest_addr != NULL_RTX)
5815 addr_rtx = dest_addr;
5817 addr_rtx = XCEXP (tmp, 0, MEM);
5822 addr_rtx = force_reg (Pmode, addr_rtx);
5823 addr_rtx = gen_rtx_MEM (Pmode, addr_rtx);
5824 set_mem_alias_set (addr_rtx, get_varargs_alias_set ());
5830 /* Return the string to output a conditional branch to LABEL, which is
5831 the operand number of the label. OP is the conditional expression.
5832 XEXP (OP, 0) is assumed to be a condition code register (integer or
5833 floating point) and its mode specifies what kind of comparison we made.
5835 REVERSED is nonzero if we should reverse the sense of the comparison.
5837 ANNUL is nonzero if we should generate an annulling branch.
5839 NOOP is nonzero if we have to follow this branch by a noop.
5841 INSN, if set, is the insn. */
5844 output_cbranch (rtx op, rtx dest, int label, int reversed, int annul,
5847 static char string[50];
5848 enum rtx_code code = GET_CODE (op);
5849 rtx cc_reg = XEXP (op, 0);
5850 enum machine_mode mode = GET_MODE (cc_reg);
5851 const char *labelno, *branch;
5852 int spaces = 8, far;
5855 /* v9 branches are limited to +-1MB. If it is too far away,
5868 fbne,a,pn %fcc2, .LC29
5876 far = get_attr_length (insn) >= 3;
5879 /* Reversal of FP compares takes care -- an ordered compare
5880 becomes an unordered compare and vice versa. */
5881 if (mode == CCFPmode || mode == CCFPEmode)
5882 code = reverse_condition_maybe_unordered (code);
5884 code = reverse_condition (code);
5887 /* Start by writing the branch condition. */
5888 if (mode == CCFPmode || mode == CCFPEmode)
5939 /* ??? !v9: FP branches cannot be preceded by another floating point
5940 insn. Because there is currently no concept of pre-delay slots,
5941 we can fix this only by always emitting a nop before a floating
5946 strcpy (string, "nop\n\t");
5947 strcat (string, branch);
5960 if (mode == CC_NOOVmode || mode == CCX_NOOVmode)
5972 if (mode == CC_NOOVmode || mode == CCX_NOOVmode)
5993 strcpy (string, branch);
5995 spaces -= strlen (branch);
5996 p = strchr (string, '\0');
5998 /* Now add the annulling, the label, and a possible noop. */
6013 if (! far && insn && INSN_ADDRESSES_SET_P ())
6015 int delta = (INSN_ADDRESSES (INSN_UID (dest))
6016 - INSN_ADDRESSES (INSN_UID (insn)));
6017 /* Leave some instructions for "slop". */
6018 if (delta < -260000 || delta >= 260000)
6022 if (mode == CCFPmode || mode == CCFPEmode)
6024 static char v9_fcc_labelno[] = "%%fccX, ";
6025 /* Set the char indicating the number of the fcc reg to use. */
6026 v9_fcc_labelno[5] = REGNO (cc_reg) - SPARC_FIRST_V9_FCC_REG + '0';
6027 labelno = v9_fcc_labelno;
6030 if (REGNO (cc_reg) == SPARC_FCC_REG)
6036 else if (mode == CCXmode || mode == CCX_NOOVmode)
6038 labelno = "%%xcc, ";
6044 labelno = "%%icc, ";
6049 if (*labelno && insn && (note = find_reg_note (insn, REG_BR_PROB, NULL_RTX)))
6052 ((INTVAL (XEXP (note, 0)) >= REG_BR_PROB_BASE / 2) ^ far)
6062 strcpy (p, labelno);
6063 p = strchr (p, '\0');
6066 strcpy (p, ".+12\n\tnop\n\tb\t");
6073 /* Set the char indicating the number of the operand containing the
6078 strcpy (p, "\n\tnop");
6083 /* Emit a library call comparison between floating point X and Y.
6084 COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.).
6085 TARGET_ARCH64 uses _Qp_* functions, which use pointers to TFmode
6086 values as arguments instead of the TFmode registers themselves,
6087 that's why we cannot call emit_float_lib_cmp. */
6089 sparc_emit_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison)
6092 rtx slot0, slot1, result, tem, tem2;
6093 enum machine_mode mode;
6098 qpfunc = (TARGET_ARCH64) ? "_Qp_feq" : "_Q_feq";
6102 qpfunc = (TARGET_ARCH64) ? "_Qp_fne" : "_Q_fne";
6106 qpfunc = (TARGET_ARCH64) ? "_Qp_fgt" : "_Q_fgt";
6110 qpfunc = (TARGET_ARCH64) ? "_Qp_fge" : "_Q_fge";
6114 qpfunc = (TARGET_ARCH64) ? "_Qp_flt" : "_Q_flt";
6118 qpfunc = (TARGET_ARCH64) ? "_Qp_fle" : "_Q_fle";
6129 qpfunc = (TARGET_ARCH64) ? "_Qp_cmp" : "_Q_cmp";
6139 if (GET_CODE (x) != MEM)
6141 slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
6142 emit_insn (gen_rtx_SET (VOIDmode, slot0, x));
6147 if (GET_CODE (y) != MEM)
6149 slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
6150 emit_insn (gen_rtx_SET (VOIDmode, slot1, y));
6155 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
6157 XEXP (slot0, 0), Pmode,
6158 XEXP (slot1, 0), Pmode);
6164 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
6166 x, TFmode, y, TFmode);
6172 /* Immediately move the result of the libcall into a pseudo
6173 register so reload doesn't clobber the value if it needs
6174 the return register for a spill reg. */
6175 result = gen_reg_rtx (mode);
6176 emit_move_insn (result, hard_libcall_value (mode));
6181 emit_cmp_insn (result, const0_rtx, NE, NULL_RTX, mode, 0);
6185 emit_cmp_insn (result, GEN_INT(3), comparison == UNORDERED ? EQ : NE,
6190 emit_cmp_insn (result, const1_rtx,
6191 comparison == UNGT ? GT : NE, NULL_RTX, mode, 0);
6194 emit_cmp_insn (result, const2_rtx, NE, NULL_RTX, mode, 0);
6197 tem = gen_reg_rtx (mode);
6199 emit_insn (gen_andsi3 (tem, result, const1_rtx));
6201 emit_insn (gen_anddi3 (tem, result, const1_rtx));
6202 emit_cmp_insn (tem, const0_rtx, NE, NULL_RTX, mode, 0);
6206 tem = gen_reg_rtx (mode);
6208 emit_insn (gen_addsi3 (tem, result, const1_rtx));
6210 emit_insn (gen_adddi3 (tem, result, const1_rtx));
6211 tem2 = gen_reg_rtx (mode);
6213 emit_insn (gen_andsi3 (tem2, tem, const2_rtx));
6215 emit_insn (gen_anddi3 (tem2, tem, const2_rtx));
6216 emit_cmp_insn (tem2, const0_rtx, comparison == UNEQ ? EQ : NE,
6222 /* Generate an unsigned DImode to FP conversion. This is the same code
6223 optabs would emit if we didn't have TFmode patterns. */
6226 sparc_emit_floatunsdi (rtx *operands)
6228 rtx neglab, donelab, i0, i1, f0, in, out;
6229 enum machine_mode mode;
6232 in = force_reg (DImode, operands[1]);
6233 mode = GET_MODE (out);
6234 neglab = gen_label_rtx ();
6235 donelab = gen_label_rtx ();
6236 i0 = gen_reg_rtx (DImode);
6237 i1 = gen_reg_rtx (DImode);
6238 f0 = gen_reg_rtx (mode);
6240 emit_cmp_and_jump_insns (in, const0_rtx, LT, const0_rtx, DImode, 0, neglab);
6242 emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_FLOAT (mode, in)));
6243 emit_jump_insn (gen_jump (donelab));
6246 emit_label (neglab);
6248 emit_insn (gen_lshrdi3 (i0, in, const1_rtx));
6249 emit_insn (gen_anddi3 (i1, in, const1_rtx));
6250 emit_insn (gen_iordi3 (i0, i0, i1));
6251 emit_insn (gen_rtx_SET (VOIDmode, f0, gen_rtx_FLOAT (mode, i0)));
6252 emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_PLUS (mode, f0, f0)));
6254 emit_label (donelab);
6257 /* Return the string to output a conditional branch to LABEL, testing
6258 register REG. LABEL is the operand number of the label; REG is the
6259 operand number of the reg. OP is the conditional expression. The mode
6260 of REG says what kind of comparison we made.
6262 REVERSED is nonzero if we should reverse the sense of the comparison.
6264 ANNUL is nonzero if we should generate an annulling branch.
6266 NOOP is nonzero if we have to follow this branch by a noop. */
6269 output_v9branch (rtx op, rtx dest, int reg, int label, int reversed,
6270 int annul, int noop, rtx insn)
6272 static char string[50];
6273 enum rtx_code code = GET_CODE (op);
6274 enum machine_mode mode = GET_MODE (XEXP (op, 0));
6279 /* branch on register are limited to +-128KB. If it is too far away,
6292 brgez,a,pn %o1, .LC29
6298 ba,pt %xcc, .LC29 */
6300 far = get_attr_length (insn) >= 3;
6302 /* If not floating-point or if EQ or NE, we can just reverse the code. */
6304 code = reverse_condition (code);
6306 /* Only 64 bit versions of these instructions exist. */
6310 /* Start by writing the branch condition. */
6315 strcpy (string, "brnz");
6319 strcpy (string, "brz");
6323 strcpy (string, "brgez");
6327 strcpy (string, "brlz");
6331 strcpy (string, "brlez");
6335 strcpy (string, "brgz");
6342 p = strchr (string, '\0');
6344 /* Now add the annulling, reg, label, and nop. */
6351 if (insn && (note = find_reg_note (insn, REG_BR_PROB, NULL_RTX)))
6354 ((INTVAL (XEXP (note, 0)) >= REG_BR_PROB_BASE / 2) ^ far)
6359 *p = p < string + 8 ? '\t' : ' ';
6367 int veryfar = 1, delta;
6369 if (INSN_ADDRESSES_SET_P ())
6371 delta = (INSN_ADDRESSES (INSN_UID (dest))
6372 - INSN_ADDRESSES (INSN_UID (insn)));
6373 /* Leave some instructions for "slop". */
6374 if (delta >= -260000 && delta < 260000)
6378 strcpy (p, ".+12\n\tnop\n\t");
6389 strcpy (p, "ba,pt\t%%xcc, ");
6399 strcpy (p, "\n\tnop");
6404 /* Return 1, if any of the registers of the instruction are %l[0-7] or %o[0-7].
6405 Such instructions cannot be used in the delay slot of return insn on v9.
6406 If TEST is 0, also rename all %i[0-7] registers to their %o[0-7] counterparts.
6410 epilogue_renumber (register rtx *where, int test)
6412 register const char *fmt;
6414 register enum rtx_code code;
6419 code = GET_CODE (*where);
6424 if (REGNO (*where) >= 8 && REGNO (*where) < 24) /* oX or lX */
6426 if (! test && REGNO (*where) >= 24 && REGNO (*where) < 32)
6427 *where = gen_rtx (REG, GET_MODE (*where), OUTGOING_REGNO (REGNO(*where)));
6435 /* Do not replace the frame pointer with the stack pointer because
6436 it can cause the delayed instruction to load below the stack.
6437 This occurs when instructions like:
6439 (set (reg/i:SI 24 %i0)
6440 (mem/f:SI (plus:SI (reg/f:SI 30 %fp)
6441 (const_int -20 [0xffffffec])) 0))
6443 are in the return delayed slot. */
6445 if (GET_CODE (XEXP (*where, 0)) == REG
6446 && REGNO (XEXP (*where, 0)) == HARD_FRAME_POINTER_REGNUM
6447 && (GET_CODE (XEXP (*where, 1)) != CONST_INT
6448 || INTVAL (XEXP (*where, 1)) < SPARC_STACK_BIAS))
6453 if (SPARC_STACK_BIAS
6454 && GET_CODE (XEXP (*where, 0)) == REG
6455 && REGNO (XEXP (*where, 0)) == HARD_FRAME_POINTER_REGNUM)
6463 fmt = GET_RTX_FORMAT (code);
6465 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
6470 for (j = XVECLEN (*where, i) - 1; j >= 0; j--)
6471 if (epilogue_renumber (&(XVECEXP (*where, i, j)), test))
6474 else if (fmt[i] == 'e'
6475 && epilogue_renumber (&(XEXP (*where, i)), test))
6481 /* Leaf functions and non-leaf functions have different needs. */
6484 reg_leaf_alloc_order[] = REG_LEAF_ALLOC_ORDER;
6487 reg_nonleaf_alloc_order[] = REG_ALLOC_ORDER;
6489 static const int *const reg_alloc_orders[] = {
6490 reg_leaf_alloc_order,
6491 reg_nonleaf_alloc_order};
6494 order_regs_for_local_alloc (void)
6496 static int last_order_nonleaf = 1;
6498 if (regs_ever_live[15] != last_order_nonleaf)
6500 last_order_nonleaf = !last_order_nonleaf;
6501 memcpy ((char *) reg_alloc_order,
6502 (const char *) reg_alloc_orders[last_order_nonleaf],
6503 FIRST_PSEUDO_REGISTER * sizeof (int));
6507 /* Return 1 if REG and MEM are legitimate enough to allow the various
6508 mem<-->reg splits to be run. */
6511 sparc_splitdi_legitimate (rtx reg, rtx mem)
6513 /* Punt if we are here by mistake. */
6514 if (! reload_completed)
6517 /* We must have an offsettable memory reference. */
6518 if (! offsettable_memref_p (mem))
6521 /* If we have legitimate args for ldd/std, we do not want
6522 the split to happen. */
6523 if ((REGNO (reg) % 2) == 0
6524 && mem_min_alignment (mem, 8))
6531 /* Return 1 if x and y are some kind of REG and they refer to
6532 different hard registers. This test is guaranteed to be
6533 run after reload. */
6536 sparc_absnegfloat_split_legitimate (rtx x, rtx y)
6538 if (GET_CODE (x) != REG)
6540 if (GET_CODE (y) != REG)
6542 if (REGNO (x) == REGNO (y))
6547 /* Return 1 if REGNO (reg1) is even and REGNO (reg1) == REGNO (reg2) - 1.
6548 This makes them candidates for using ldd and std insns.
6550 Note reg1 and reg2 *must* be hard registers. */
6553 registers_ok_for_ldd_peep (rtx reg1, rtx reg2)
6555 /* We might have been passed a SUBREG. */
6556 if (GET_CODE (reg1) != REG || GET_CODE (reg2) != REG)
6559 if (REGNO (reg1) % 2 != 0)
6562 /* Integer ldd is deprecated in SPARC V9 */
6563 if (TARGET_V9 && REGNO (reg1) < 32)
6566 return (REGNO (reg1) == REGNO (reg2) - 1);
6569 /* Return 1 if the addresses in mem1 and mem2 are suitable for use in
6572 This can only happen when addr1 and addr2, the addresses in mem1
6573 and mem2, are consecutive memory locations (addr1 + 4 == addr2).
6574 addr1 must also be aligned on a 64-bit boundary.
6576 Also iff dependent_reg_rtx is not null it should not be used to
6577 compute the address for mem1, i.e. we cannot optimize a sequence
6589 But, note that the transformation from:
6594 is perfectly fine. Thus, the peephole2 patterns always pass us
6595 the destination register of the first load, never the second one.
6597 For stores we don't have a similar problem, so dependent_reg_rtx is
6601 mems_ok_for_ldd_peep (rtx mem1, rtx mem2, rtx dependent_reg_rtx)
6605 HOST_WIDE_INT offset1;
6607 /* The mems cannot be volatile. */
6608 if (MEM_VOLATILE_P (mem1) || MEM_VOLATILE_P (mem2))
6611 /* MEM1 should be aligned on a 64-bit boundary. */
6612 if (MEM_ALIGN (mem1) < 64)
6615 addr1 = XEXP (mem1, 0);
6616 addr2 = XEXP (mem2, 0);
6618 /* Extract a register number and offset (if used) from the first addr. */
6619 if (GET_CODE (addr1) == PLUS)
6621 /* If not a REG, return zero. */
6622 if (GET_CODE (XEXP (addr1, 0)) != REG)
6626 reg1 = REGNO (XEXP (addr1, 0));
6627 /* The offset must be constant! */
6628 if (GET_CODE (XEXP (addr1, 1)) != CONST_INT)
6630 offset1 = INTVAL (XEXP (addr1, 1));
6633 else if (GET_CODE (addr1) != REG)
6637 reg1 = REGNO (addr1);
6638 /* This was a simple (mem (reg)) expression. Offset is 0. */
6642 /* Make sure the second address is a (mem (plus (reg) (const_int). */
6643 if (GET_CODE (addr2) != PLUS)
6646 if (GET_CODE (XEXP (addr2, 0)) != REG
6647 || GET_CODE (XEXP (addr2, 1)) != CONST_INT)
6650 if (reg1 != REGNO (XEXP (addr2, 0)))
6653 if (dependent_reg_rtx != NULL_RTX && reg1 == REGNO (dependent_reg_rtx))
6656 /* The first offset must be evenly divisible by 8 to ensure the
6657 address is 64 bit aligned. */
6658 if (offset1 % 8 != 0)
6661 /* The offset for the second addr must be 4 more than the first addr. */
6662 if (INTVAL (XEXP (addr2, 1)) != offset1 + 4)
6665 /* All the tests passed. addr1 and addr2 are valid for ldd and std
6670 /* Return 1 if reg is a pseudo, or is the first register in
6671 a hard register pair. This makes it a candidate for use in
6672 ldd and std insns. */
6675 register_ok_for_ldd (rtx reg)
6677 /* We might have been passed a SUBREG. */
6678 if (GET_CODE (reg) != REG)
6681 if (REGNO (reg) < FIRST_PSEUDO_REGISTER)
6682 return (REGNO (reg) % 2 == 0);
6687 /* Print operand X (an rtx) in assembler syntax to file FILE.
6688 CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
6689 For `%' followed by punctuation, CODE is the punctuation and X is null. */
6692 print_operand (FILE *file, rtx x, int code)
6697 /* Output a 'nop' if there's nothing for the delay slot. */
6698 if (dbr_sequence_length () == 0)
6699 fputs ("\n\t nop", file);
6702 /* Output an annul flag if there's nothing for the delay slot and we
6703 are optimizing. This is always used with '(' below. */
6704 /* Sun OS 4.1.1 dbx can't handle an annulled unconditional branch;
6705 this is a dbx bug. So, we only do this when optimizing. */
6706 /* On UltraSPARC, a branch in a delay slot causes a pipeline flush.
6707 Always emit a nop in case the next instruction is a branch. */
6708 if (dbr_sequence_length () == 0
6709 && (optimize && (int)sparc_cpu < PROCESSOR_V9))
6713 /* Output a 'nop' if there's nothing for the delay slot and we are
6714 not optimizing. This is always used with '*' above. */
6715 if (dbr_sequence_length () == 0
6716 && ! (optimize && (int)sparc_cpu < PROCESSOR_V9))
6717 fputs ("\n\t nop", file);
6720 /* Output the Embedded Medium/Anywhere code model base register. */
6721 fputs (EMBMEDANY_BASE_REG, file);
6724 /* Print out what we are using as the frame pointer. This might
6725 be %fp, or might be %sp+offset. */
6726 /* ??? What if offset is too big? Perhaps the caller knows it isn't? */
6727 fprintf (file, "%s+"HOST_WIDE_INT_PRINT_DEC, frame_base_name, frame_base_offset);
6730 /* Print some local dynamic TLS name. */
6731 assemble_name (file, get_some_local_dynamic_name ());
6734 /* Adjust the operand to take into account a RESTORE operation. */
6735 if (GET_CODE (x) == CONST_INT)
6737 else if (GET_CODE (x) != REG)
6738 output_operand_lossage ("invalid %%Y operand");
6739 else if (REGNO (x) < 8)
6740 fputs (reg_names[REGNO (x)], file);
6741 else if (REGNO (x) >= 24 && REGNO (x) < 32)
6742 fputs (reg_names[REGNO (x)-16], file);
6744 output_operand_lossage ("invalid %%Y operand");
6747 /* Print out the low order register name of a register pair. */
6748 if (WORDS_BIG_ENDIAN)
6749 fputs (reg_names[REGNO (x)+1], file);
6751 fputs (reg_names[REGNO (x)], file);
6754 /* Print out the high order register name of a register pair. */
6755 if (WORDS_BIG_ENDIAN)
6756 fputs (reg_names[REGNO (x)], file);
6758 fputs (reg_names[REGNO (x)+1], file);
6761 /* Print out the second register name of a register pair or quad.
6762 I.e., R (%o0) => %o1. */
6763 fputs (reg_names[REGNO (x)+1], file);
6766 /* Print out the third register name of a register quad.
6767 I.e., S (%o0) => %o2. */
6768 fputs (reg_names[REGNO (x)+2], file);
6771 /* Print out the fourth register name of a register quad.
6772 I.e., T (%o0) => %o3. */
6773 fputs (reg_names[REGNO (x)+3], file);
6776 /* Print a condition code register. */
6777 if (REGNO (x) == SPARC_ICC_REG)
6779 /* We don't handle CC[X]_NOOVmode because they're not supposed
6781 if (GET_MODE (x) == CCmode)
6782 fputs ("%icc", file);
6783 else if (GET_MODE (x) == CCXmode)
6784 fputs ("%xcc", file);
6789 /* %fccN register */
6790 fputs (reg_names[REGNO (x)], file);
6793 /* Print the operand's address only. */
6794 output_address (XEXP (x, 0));
6797 /* In this case we need a register. Use %g0 if the
6798 operand is const0_rtx. */
6800 || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
6802 fputs ("%g0", file);
6809 switch (GET_CODE (x))
6811 case IOR: fputs ("or", file); break;
6812 case AND: fputs ("and", file); break;
6813 case XOR: fputs ("xor", file); break;
6814 default: output_operand_lossage ("invalid %%A operand");
6819 switch (GET_CODE (x))
6821 case IOR: fputs ("orn", file); break;
6822 case AND: fputs ("andn", file); break;
6823 case XOR: fputs ("xnor", file); break;
6824 default: output_operand_lossage ("invalid %%B operand");
6828 /* These are used by the conditional move instructions. */
6832 enum rtx_code rc = GET_CODE (x);
6836 enum machine_mode mode = GET_MODE (XEXP (x, 0));
6837 if (mode == CCFPmode || mode == CCFPEmode)
6838 rc = reverse_condition_maybe_unordered (GET_CODE (x));
6840 rc = reverse_condition (GET_CODE (x));
6844 case NE: fputs ("ne", file); break;
6845 case EQ: fputs ("e", file); break;
6846 case GE: fputs ("ge", file); break;
6847 case GT: fputs ("g", file); break;
6848 case LE: fputs ("le", file); break;
6849 case LT: fputs ("l", file); break;
6850 case GEU: fputs ("geu", file); break;
6851 case GTU: fputs ("gu", file); break;
6852 case LEU: fputs ("leu", file); break;
6853 case LTU: fputs ("lu", file); break;
6854 case LTGT: fputs ("lg", file); break;
6855 case UNORDERED: fputs ("u", file); break;
6856 case ORDERED: fputs ("o", file); break;
6857 case UNLT: fputs ("ul", file); break;
6858 case UNLE: fputs ("ule", file); break;
6859 case UNGT: fputs ("ug", file); break;
6860 case UNGE: fputs ("uge", file); break;
6861 case UNEQ: fputs ("ue", file); break;
6862 default: output_operand_lossage (code == 'c'
6863 ? "invalid %%c operand"
6864 : "invalid %%C operand");
6869 /* These are used by the movr instruction pattern. */
6873 enum rtx_code rc = (code == 'd'
6874 ? reverse_condition (GET_CODE (x))
6878 case NE: fputs ("ne", file); break;
6879 case EQ: fputs ("e", file); break;
6880 case GE: fputs ("gez", file); break;
6881 case LT: fputs ("lz", file); break;
6882 case LE: fputs ("lez", file); break;
6883 case GT: fputs ("gz", file); break;
6884 default: output_operand_lossage (code == 'd'
6885 ? "invalid %%d operand"
6886 : "invalid %%D operand");
6893 /* Print a sign-extended character. */
6894 int i = trunc_int_for_mode (INTVAL (x), QImode);
6895 fprintf (file, "%d", i);
6900 /* Operand must be a MEM; write its address. */
6901 if (GET_CODE (x) != MEM)
6902 output_operand_lossage ("invalid %%f operand");
6903 output_address (XEXP (x, 0));
6908 /* Print a sign-extended 32-bit value. */
6910 if (GET_CODE(x) == CONST_INT)
6912 else if (GET_CODE(x) == CONST_DOUBLE)
6913 i = CONST_DOUBLE_LOW (x);
6916 output_operand_lossage ("invalid %%s operand");
6919 i = trunc_int_for_mode (i, SImode);
6920 fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
6925 /* Do nothing special. */
6929 /* Undocumented flag. */
6930 output_operand_lossage ("invalid operand output code");
6933 if (GET_CODE (x) == REG)
6934 fputs (reg_names[REGNO (x)], file);
6935 else if (GET_CODE (x) == MEM)
6938 /* Poor Sun assembler doesn't understand absolute addressing. */
6939 if (CONSTANT_P (XEXP (x, 0)))
6940 fputs ("%g0+", file);
6941 output_address (XEXP (x, 0));
6944 else if (GET_CODE (x) == HIGH)
6946 fputs ("%hi(", file);
6947 output_addr_const (file, XEXP (x, 0));
6950 else if (GET_CODE (x) == LO_SUM)
6952 print_operand (file, XEXP (x, 0), 0);
6953 if (TARGET_CM_MEDMID)
6954 fputs ("+%l44(", file);
6956 fputs ("+%lo(", file);
6957 output_addr_const (file, XEXP (x, 1));
6960 else if (GET_CODE (x) == CONST_DOUBLE
6961 && (GET_MODE (x) == VOIDmode
6962 || GET_MODE_CLASS (GET_MODE (x)) == MODE_INT))
6964 if (CONST_DOUBLE_HIGH (x) == 0)
6965 fprintf (file, "%u", (unsigned int) CONST_DOUBLE_LOW (x));
6966 else if (CONST_DOUBLE_HIGH (x) == -1
6967 && CONST_DOUBLE_LOW (x) < 0)
6968 fprintf (file, "%d", (int) CONST_DOUBLE_LOW (x));
6970 output_operand_lossage ("long long constant not a valid immediate operand");
6972 else if (GET_CODE (x) == CONST_DOUBLE)
6973 output_operand_lossage ("floating point constant not a valid immediate operand");
6974 else { output_addr_const (file, x); }
6977 /* Target hook for assembling integer objects. The sparc version has
6978 special handling for aligned DI-mode objects. */
6981 sparc_assemble_integer (rtx x, unsigned int size, int aligned_p)
6983 /* ??? We only output .xword's for symbols and only then in environments
6984 where the assembler can handle them. */
6985 if (aligned_p && size == 8
6986 && (GET_CODE (x) != CONST_INT && GET_CODE (x) != CONST_DOUBLE))
6990 assemble_integer_with_op ("\t.xword\t", x);
6995 assemble_aligned_integer (4, const0_rtx);
6996 assemble_aligned_integer (4, x);
7000 return default_assemble_integer (x, size, aligned_p);
7003 /* Return the value of a code used in the .proc pseudo-op that says
7004 what kind of result this function returns. For non-C types, we pick
7005 the closest C type. */
7007 #ifndef SHORT_TYPE_SIZE
7008 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * 2)
7011 #ifndef INT_TYPE_SIZE
7012 #define INT_TYPE_SIZE BITS_PER_WORD
7015 #ifndef LONG_TYPE_SIZE
7016 #define LONG_TYPE_SIZE BITS_PER_WORD
7019 #ifndef LONG_LONG_TYPE_SIZE
7020 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
7023 #ifndef FLOAT_TYPE_SIZE
7024 #define FLOAT_TYPE_SIZE BITS_PER_WORD
7027 #ifndef DOUBLE_TYPE_SIZE
7028 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
7031 #ifndef LONG_DOUBLE_TYPE_SIZE
7032 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
7036 sparc_type_code (register tree type)
7038 register unsigned long qualifiers = 0;
7039 register unsigned shift;
7041 /* Only the first 30 bits of the qualifier are valid. We must refrain from
7042 setting more, since some assemblers will give an error for this. Also,
7043 we must be careful to avoid shifts of 32 bits or more to avoid getting
7044 unpredictable results. */
7046 for (shift = 6; shift < 30; shift += 2, type = TREE_TYPE (type))
7048 switch (TREE_CODE (type))
7054 qualifiers |= (3 << shift);
7059 qualifiers |= (2 << shift);
7063 case REFERENCE_TYPE:
7065 qualifiers |= (1 << shift);
7069 return (qualifiers | 8);
7072 case QUAL_UNION_TYPE:
7073 return (qualifiers | 9);
7076 return (qualifiers | 10);
7079 return (qualifiers | 16);
7082 /* If this is a range type, consider it to be the underlying
7084 if (TREE_TYPE (type) != 0)
7087 /* Carefully distinguish all the standard types of C,
7088 without messing up if the language is not C. We do this by
7089 testing TYPE_PRECISION and TREE_UNSIGNED. The old code used to
7090 look at both the names and the above fields, but that's redundant.
7091 Any type whose size is between two C types will be considered
7092 to be the wider of the two types. Also, we do not have a
7093 special code to use for "long long", so anything wider than
7094 long is treated the same. Note that we can't distinguish
7095 between "int" and "long" in this code if they are the same
7096 size, but that's fine, since neither can the assembler. */
7098 if (TYPE_PRECISION (type) <= CHAR_TYPE_SIZE)
7099 return (qualifiers | (TREE_UNSIGNED (type) ? 12 : 2));
7101 else if (TYPE_PRECISION (type) <= SHORT_TYPE_SIZE)
7102 return (qualifiers | (TREE_UNSIGNED (type) ? 13 : 3));
7104 else if (TYPE_PRECISION (type) <= INT_TYPE_SIZE)
7105 return (qualifiers | (TREE_UNSIGNED (type) ? 14 : 4));
7108 return (qualifiers | (TREE_UNSIGNED (type) ? 15 : 5));
7111 /* If this is a range type, consider it to be the underlying
7113 if (TREE_TYPE (type) != 0)
7116 /* Carefully distinguish all the standard types of C,
7117 without messing up if the language is not C. */
7119 if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
7120 return (qualifiers | 6);
7123 return (qualifiers | 7);
7125 case COMPLEX_TYPE: /* GNU Fortran COMPLEX type. */
7126 /* ??? We need to distinguish between double and float complex types,
7127 but I don't know how yet because I can't reach this code from
7128 existing front-ends. */
7129 return (qualifiers | 7); /* Who knows? */
7131 case CHAR_TYPE: /* GNU Pascal CHAR type. Not used in C. */
7132 case BOOLEAN_TYPE: /* GNU Fortran BOOLEAN type. */
7133 case FILE_TYPE: /* GNU Pascal FILE type. */
7134 case SET_TYPE: /* GNU Pascal SET type. */
7135 case LANG_TYPE: /* ? */
7139 abort (); /* Not a type! */
7146 /* Nested function support. */
7148 /* Emit RTL insns to initialize the variable parts of a trampoline.
7149 FNADDR is an RTX for the address of the function's pure code.
7150 CXT is an RTX for the static chain value for the function.
7152 This takes 16 insns: 2 shifts & 2 ands (to split up addresses), 4 sethi
7153 (to load in opcodes), 4 iors (to merge address and opcodes), and 4 writes
7154 (to store insns). This is a bit excessive. Perhaps a different
7155 mechanism would be better here.
7157 Emit enough FLUSH insns to synchronize the data and instruction caches. */
7160 sparc_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
7162 /* SPARC 32-bit trampoline:
7165 sethi %hi(static), %g2
7167 or %g2, %lo(static), %g2
7169 SETHI i,r = 00rr rrr1 00ii iiii iiii iiii iiii iiii
7170 JMPL r+i,d = 10dd ddd1 1100 0rrr rr1i iiii iiii iiii
7174 (gen_rtx_MEM (SImode, plus_constant (tramp, 0)),
7175 expand_binop (SImode, ior_optab,
7176 expand_shift (RSHIFT_EXPR, SImode, fnaddr,
7177 size_int (10), 0, 1),
7178 GEN_INT (trunc_int_for_mode (0x03000000, SImode)),
7179 NULL_RTX, 1, OPTAB_DIRECT));
7182 (gen_rtx_MEM (SImode, plus_constant (tramp, 4)),
7183 expand_binop (SImode, ior_optab,
7184 expand_shift (RSHIFT_EXPR, SImode, cxt,
7185 size_int (10), 0, 1),
7186 GEN_INT (trunc_int_for_mode (0x05000000, SImode)),
7187 NULL_RTX, 1, OPTAB_DIRECT));
7190 (gen_rtx_MEM (SImode, plus_constant (tramp, 8)),
7191 expand_binop (SImode, ior_optab,
7192 expand_and (SImode, fnaddr, GEN_INT (0x3ff), NULL_RTX),
7193 GEN_INT (trunc_int_for_mode (0x81c06000, SImode)),
7194 NULL_RTX, 1, OPTAB_DIRECT));
7197 (gen_rtx_MEM (SImode, plus_constant (tramp, 12)),
7198 expand_binop (SImode, ior_optab,
7199 expand_and (SImode, cxt, GEN_INT (0x3ff), NULL_RTX),
7200 GEN_INT (trunc_int_for_mode (0x8410a000, SImode)),
7201 NULL_RTX, 1, OPTAB_DIRECT));
7203 /* On UltraSPARC a flush flushes an entire cache line. The trampoline is
7204 aligned on a 16 byte boundary so one flush clears it all. */
7205 emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode, tramp))));
7206 if (sparc_cpu != PROCESSOR_ULTRASPARC
7207 && sparc_cpu != PROCESSOR_ULTRASPARC3)
7208 emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode,
7209 plus_constant (tramp, 8)))));
7211 /* Call __enable_execute_stack after writing onto the stack to make sure
7212 the stack address is accessible. */
7213 #ifdef TRANSFER_FROM_TRAMPOLINE
7214 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
7215 LCT_NORMAL, VOIDmode, 1, tramp, Pmode);
7220 /* The 64-bit version is simpler because it makes more sense to load the
7221 values as "immediate" data out of the trampoline. It's also easier since
7222 we can read the PC without clobbering a register. */
7225 sparc64_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
7227 /* SPARC 64-bit trampoline:
7236 emit_move_insn (gen_rtx_MEM (SImode, tramp),
7237 GEN_INT (trunc_int_for_mode (0x83414000, SImode)));
7238 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 4)),
7239 GEN_INT (trunc_int_for_mode (0xca586018, SImode)));
7240 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 8)),
7241 GEN_INT (trunc_int_for_mode (0x81c14000, SImode)));
7242 emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 12)),
7243 GEN_INT (trunc_int_for_mode (0xca586010, SImode)));
7244 emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, 16)), cxt);
7245 emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, 24)), fnaddr);
7246 emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, tramp))));
7248 if (sparc_cpu != PROCESSOR_ULTRASPARC
7249 && sparc_cpu != PROCESSOR_ULTRASPARC3)
7250 emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, plus_constant (tramp, 8)))));
7252 /* Call __enable_execute_stack after writing onto the stack to make sure
7253 the stack address is accessible. */
7254 #ifdef TRANSFER_FROM_TRAMPOLINE
7255 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
7256 LCT_NORMAL, VOIDmode, 1, tramp, Pmode);
7260 /* Subroutines to support a flat (single) register window calling
7263 /* Single-register window sparc stack frames look like:
7265 Before call After call
7266 +-----------------------+ +-----------------------+
7268 mem | caller's temps. | | caller's temps. |
7270 +-----------------------+ +-----------------------+
7272 | arguments on stack. | | arguments on stack. |
7274 +-----------------------+FP+92->+-----------------------+
7275 | 6 words to save | | 6 words to save |
7276 | arguments passed | | arguments passed |
7277 | in registers, even | | in registers, even |
7278 | if not passed. | | if not passed. |
7279 SP+68->+-----------------------+FP+68->+-----------------------+
7280 | 1 word struct addr | | 1 word struct addr |
7281 +-----------------------+FP+64->+-----------------------+
7283 | 16 word reg save area | | 16 word reg save area |
7285 SP->+-----------------------+ FP->+-----------------------+
7287 | fp/alu reg moves |
7288 FP-16->+-----------------------+
7292 +-----------------------+
7294 | fp register save |
7296 +-----------------------+
7298 | gp register save |
7300 +-----------------------+
7302 | alloca allocations |
7304 +-----------------------+
7306 | arguments on stack |
7308 SP+92->+-----------------------+
7310 | arguments passed |
7311 | in registers, even |
7312 low | if not passed. |
7313 memory SP+68->+-----------------------+
7314 | 1 word struct addr |
7315 SP+64->+-----------------------+
7317 I 16 word reg save area |
7319 SP->+-----------------------+ */
7321 /* Structure to be filled in by sparc_flat_compute_frame_size with register
7322 save masks, and offsets for the current function. */
7324 struct sparc_frame_info
7326 HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up. */
7327 HOST_WIDE_INT var_size; /* # bytes that variables take up. */
7328 int args_size; /* # bytes that outgoing arguments take up. */
7329 int extra_size; /* # bytes of extra gunk. */
7330 int gp_reg_size; /* # bytes needed to store gp regs. */
7331 int fp_reg_size; /* # bytes needed to store fp regs. */
7332 unsigned long gmask; /* Mask of saved gp registers. */
7333 unsigned long fmask; /* Mask of saved fp registers. */
7334 int reg_offset; /* Offset from new sp to store regs. */
7335 int initialized; /* Nonzero if frame size already calculated. */
7338 /* Current frame information calculated by sparc_flat_compute_frame_size. */
7339 struct sparc_frame_info current_frame_info;
7341 /* Zero structure to initialize current_frame_info. */
7342 struct sparc_frame_info zero_frame_info;
7344 #define RETURN_ADDR_REGNUM 15
7345 #define HARD_FRAME_POINTER_MASK (1 << (HARD_FRAME_POINTER_REGNUM))
7346 #define RETURN_ADDR_MASK (1 << (RETURN_ADDR_REGNUM))
7348 /* Tell prologue and epilogue if register REGNO should be saved / restored. */
7351 sparc_flat_must_save_register_p (int regno)
7353 /* General case: call-saved registers live at some point. */
7354 if (!call_used_regs[regno] && regs_ever_live[regno])
7357 /* Frame pointer register (%i7) if needed. */
7358 if (regno == HARD_FRAME_POINTER_REGNUM && frame_pointer_needed)
7361 /* PIC register (%l7) if needed. */
7362 if (regno == (int) PIC_OFFSET_TABLE_REGNUM
7363 && flag_pic && current_function_uses_pic_offset_table)
7366 /* Return address register (%o7) if needed. */
7367 if (regno == RETURN_ADDR_REGNUM
7368 && (regs_ever_live[RETURN_ADDR_REGNUM]
7369 /* When the PIC offset table is used, the PIC register
7370 is set by using a bare call that clobbers %o7. */
7371 || (flag_pic && current_function_uses_pic_offset_table)))
7377 /* Return the bytes needed to compute the frame pointer from the current
7381 sparc_flat_compute_frame_size (HOST_WIDE_INT size)
7382 /* # of var. bytes allocated. */
7385 HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up. */
7386 HOST_WIDE_INT var_size; /* # bytes that variables take up. */
7387 int args_size; /* # bytes that outgoing arguments take up. */
7388 int extra_size; /* # extra bytes. */
7389 int gp_reg_size; /* # bytes needed to store gp regs. */
7390 int fp_reg_size; /* # bytes needed to store fp regs. */
7391 unsigned long gmask; /* Mask of saved gp registers. */
7392 unsigned long fmask; /* Mask of saved fp registers. */
7393 int reg_offset; /* Offset to register save area. */
7394 int need_aligned_p; /* 1 if need the save area 8 byte aligned. */
7396 /* This is the size of the 16 word reg save area, 1 word struct addr
7397 area, and 4 word fp/alu register copy area. */
7398 extra_size = -STARTING_FRAME_OFFSET + FIRST_PARM_OFFSET(0);
7408 if (!leaf_function_p ())
7410 /* Also include the size needed for the 6 parameter registers. */
7411 args_size = current_function_outgoing_args_size + 24;
7413 total_size = var_size + args_size;
7415 /* Calculate space needed for gp registers. */
7416 for (regno = 1; regno <= 31; regno++)
7418 if (sparc_flat_must_save_register_p (regno))
7420 /* If we need to save two regs in a row, ensure there's room to bump
7421 up the address to align it to a doubleword boundary. */
7422 if ((regno & 0x1) == 0 && sparc_flat_must_save_register_p (regno+1))
7424 if (gp_reg_size % 8 != 0)
7426 gp_reg_size += 2 * UNITS_PER_WORD;
7427 gmask |= 3 << regno;
7433 gp_reg_size += UNITS_PER_WORD;
7434 gmask |= 1 << regno;
7439 /* Calculate space needed for fp registers. */
7440 for (regno = 32; regno <= 63; regno++)
7442 if (regs_ever_live[regno] && !call_used_regs[regno])
7444 fp_reg_size += UNITS_PER_WORD;
7445 fmask |= 1 << (regno - 32);
7452 reg_offset = FIRST_PARM_OFFSET(0) + args_size;
7453 /* Ensure save area is 8 byte aligned if we need it. */
7455 if (need_aligned_p && n != 0)
7457 total_size += 8 - n;
7458 reg_offset += 8 - n;
7460 total_size += gp_reg_size + fp_reg_size;
7463 /* If we must allocate a stack frame at all, we must also allocate
7464 room for register window spillage, so as to be binary compatible
7465 with libraries and operating systems that do not use -mflat. */
7467 total_size += extra_size;
7471 total_size = SPARC_STACK_ALIGN (total_size);
7473 /* Save other computed information. */
7474 current_frame_info.total_size = total_size;
7475 current_frame_info.var_size = var_size;
7476 current_frame_info.args_size = args_size;
7477 current_frame_info.extra_size = extra_size;
7478 current_frame_info.gp_reg_size = gp_reg_size;
7479 current_frame_info.fp_reg_size = fp_reg_size;
7480 current_frame_info.gmask = gmask;
7481 current_frame_info.fmask = fmask;
7482 current_frame_info.reg_offset = reg_offset;
7483 current_frame_info.initialized = reload_completed;
7485 /* Ok, we're done. */
7489 /* Save/restore registers in GMASK and FMASK at register BASE_REG plus offset
7492 BASE_REG must be 8 byte aligned. This allows us to test OFFSET for
7493 appropriate alignment and use DOUBLEWORD_OP when we can. We assume
7494 [BASE_REG+OFFSET] will always be a valid address.
7496 WORD_OP is either "st" for save, "ld" for restore.
7497 DOUBLEWORD_OP is either "std" for save, "ldd" for restore. */
7500 sparc_flat_save_restore (FILE *file, const char *base_reg, int offset,
7501 unsigned long gmask, unsigned long fmask,
7502 const char *word_op, const char *doubleword_op,
7503 HOST_WIDE_INT base_offset)
7507 if (gmask == 0 && fmask == 0)
7510 /* Save registers starting from high to low. We've already saved the
7511 previous frame pointer and previous return address for the debugger's
7512 sake. The debugger allows us to not need a nop in the epilog if at least
7513 one register is reloaded in addition to return address. */
7517 for (regno = 1; regno <= 31; regno++)
7519 if ((gmask & (1L << regno)) != 0)
7521 if ((regno & 0x1) == 0 && ((gmask & (1L << (regno+1))) != 0))
7523 /* We can save two registers in a row. If we're not at a
7524 double word boundary, move to one.
7525 sparc_flat_compute_frame_size ensures there's room to do
7527 if (offset % 8 != 0)
7528 offset += UNITS_PER_WORD;
7530 if (word_op[0] == 's')
7532 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7533 doubleword_op, reg_names[regno],
7535 if (dwarf2out_do_frame ())
7537 char *l = dwarf2out_cfi_label ();
7538 dwarf2out_reg_save (l, regno, offset + base_offset);
7540 (l, regno+1, offset+base_offset + UNITS_PER_WORD);
7544 fprintf (file, "\t%s\t[%s+%d], %s\n",
7545 doubleword_op, base_reg, offset,
7548 offset += 2 * UNITS_PER_WORD;
7553 if (word_op[0] == 's')
7555 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7556 word_op, reg_names[regno],
7558 if (dwarf2out_do_frame ())
7559 dwarf2out_reg_save ("", regno, offset + base_offset);
7562 fprintf (file, "\t%s\t[%s+%d], %s\n",
7563 word_op, base_reg, offset, reg_names[regno]);
7565 offset += UNITS_PER_WORD;
7573 for (regno = 32; regno <= 63; regno++)
7575 if ((fmask & (1L << (regno - 32))) != 0)
7577 if (word_op[0] == 's')
7579 fprintf (file, "\t%s\t%s, [%s+%d]\n",
7580 word_op, reg_names[regno],
7582 if (dwarf2out_do_frame ())
7583 dwarf2out_reg_save ("", regno, offset + base_offset);
7586 fprintf (file, "\t%s\t[%s+%d], %s\n",
7587 word_op, base_reg, offset, reg_names[regno]);
7589 offset += UNITS_PER_WORD;
7595 /* Set up the stack and frame (if desired) for the function. */
7598 sparc_flat_function_prologue (FILE *file, HOST_WIDE_INT size)
7600 const char *sp_str = reg_names[STACK_POINTER_REGNUM];
7601 unsigned long gmask = current_frame_info.gmask;
7603 sparc_output_scratch_registers (file);
7605 /* This is only for the human reader. */
7606 fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
7607 fprintf (file, "\t%s# vars= "HOST_WIDE_INT_PRINT_DEC", "
7608 "regs= %d/%d, args= %d, extra= %d\n",
7610 current_frame_info.var_size,
7611 current_frame_info.gp_reg_size / 4,
7612 current_frame_info.fp_reg_size / 4,
7613 current_function_outgoing_args_size,
7614 current_frame_info.extra_size);
7616 size = SPARC_STACK_ALIGN (size);
7617 size = (! current_frame_info.initialized
7618 ? sparc_flat_compute_frame_size (size)
7619 : current_frame_info.total_size);
7621 /* These cases shouldn't happen. Catch them now. */
7622 if (size == 0 && (gmask || current_frame_info.fmask))
7625 /* Allocate our stack frame by decrementing %sp.
7626 At present, the only algorithm gdb can use to determine if this is a
7627 flat frame is if we always set %i7 if we set %sp. This can be optimized
7628 in the future by putting in some sort of debugging information that says
7629 this is a `flat' function. However, there is still the case of debugging
7630 code without such debugging information (including cases where most fns
7631 have such info, but there is one that doesn't). So, always do this now
7632 so we don't get a lot of code out there that gdb can't handle.
7633 If the frame pointer isn't needn't then that's ok - gdb won't be able to
7634 distinguish us from a non-flat function but there won't (and shouldn't)
7635 be any differences anyway. The return pc is saved (if necessary) right
7636 after %i7 so gdb won't have to look too far to find it. */
7639 int reg_offset = current_frame_info.reg_offset;
7640 const char *const fp_str = reg_names[HARD_FRAME_POINTER_REGNUM];
7641 static const char *const t1_str = "%g1";
7643 /* Things get a little tricky if local variables take up more than ~4096
7644 bytes and outgoing arguments take up more than ~4096 bytes. When that
7645 happens, the register save area can't be accessed from either end of
7646 the frame. Handle this by decrementing %sp to the start of the gp
7647 register save area, save the regs, update %i7, and then set %sp to its
7648 final value. Given that we only have one scratch register to play
7649 with it is the cheapest solution, and it helps gdb out as it won't
7650 slow down recognition of flat functions.
7651 Don't change the order of insns emitted here without checking with
7652 the gdb folk first. */
7654 /* Is the entire register save area offsettable from %sp? */
7655 if (reg_offset < 4096 - 64 * UNITS_PER_WORD)
7659 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7660 sp_str, size, sp_str);
7661 if (gmask & HARD_FRAME_POINTER_MASK)
7663 fprintf (file, "\tst\t%s, [%s+%d]\n",
7664 fp_str, sp_str, reg_offset);
7665 fprintf (file, "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7666 "\t%s# set up frame pointer\n",
7667 sp_str, size, fp_str, ASM_COMMENT_START);
7673 build_big_number (file, size, t1_str);
7674 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7675 if (gmask & HARD_FRAME_POINTER_MASK)
7677 fprintf (file, "\tst\t%s, [%s+%d]\n",
7678 fp_str, sp_str, reg_offset);
7679 fprintf (file, "\tadd\t%s, %s, %s\t%s# set up frame pointer\n",
7680 sp_str, t1_str, fp_str, ASM_COMMENT_START);
7684 if (dwarf2out_do_frame ())
7686 char *l = dwarf2out_cfi_label ();
7687 if (gmask & HARD_FRAME_POINTER_MASK)
7689 dwarf2out_reg_save (l, HARD_FRAME_POINTER_REGNUM,
7690 reg_offset - 4 - size);
7691 dwarf2out_def_cfa (l, HARD_FRAME_POINTER_REGNUM, 0);
7694 dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size);
7696 if (gmask & RETURN_ADDR_MASK)
7698 fprintf (file, "\tst\t%s, [%s+%d]\n",
7699 reg_names[RETURN_ADDR_REGNUM], sp_str, reg_offset);
7700 if (dwarf2out_do_frame ())
7701 dwarf2out_return_save ("", reg_offset - size);
7704 sparc_flat_save_restore (file, sp_str, reg_offset,
7705 gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7706 current_frame_info.fmask,
7707 "st", "std", -size);
7711 /* Subtract %sp in two steps, but make sure there is always a
7712 64-byte register save area, and %sp is properly aligned. */
7714 /* Amount to decrement %sp by, the first time. */
7715 HOST_WIDE_INT size1 = ((size - reg_offset + 64) + 15) & -16;
7717 /* Amount to decrement %sp by, the second time. */
7718 HOST_WIDE_INT size2 = size - size1;
7720 /* Offset to register save area from %sp after first decrement. */
7721 int offset = (int)(size1 - (size - reg_offset));
7725 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7726 sp_str, size1, sp_str);
7727 if (gmask & HARD_FRAME_POINTER_MASK)
7729 fprintf (file, "\tst\t%s, [%s+%d]\n"
7730 "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7731 "\t%s# set up frame pointer\n",
7732 fp_str, sp_str, offset, sp_str, size1,
7733 fp_str, ASM_COMMENT_START);
7739 build_big_number (file, size1, t1_str);
7740 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7741 if (gmask & HARD_FRAME_POINTER_MASK)
7743 fprintf (file, "\tst\t%s, [%s+%d]\n"
7744 "\tadd\t%s, %s, %s\t%s# set up frame pointer\n",
7745 fp_str, sp_str, offset, sp_str, t1_str,
7746 fp_str, ASM_COMMENT_START);
7750 if (dwarf2out_do_frame ())
7752 char *l = dwarf2out_cfi_label ();
7753 if (gmask & HARD_FRAME_POINTER_MASK)
7755 dwarf2out_reg_save (l, HARD_FRAME_POINTER_REGNUM,
7756 offset - 4 - size1);
7757 dwarf2out_def_cfa (l, HARD_FRAME_POINTER_REGNUM, 0);
7760 dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size1);
7762 if (gmask & RETURN_ADDR_MASK)
7764 fprintf (file, "\tst\t%s, [%s+%d]\n",
7765 reg_names[RETURN_ADDR_REGNUM], sp_str, offset);
7766 if (dwarf2out_do_frame ())
7767 /* offset - size1 == reg_offset - size
7768 if reg_offset were updated above like offset. */
7769 dwarf2out_return_save ("", offset - size1);
7772 sparc_flat_save_restore (file, sp_str, offset,
7773 gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7774 current_frame_info.fmask,
7775 "st", "std", -size1);
7777 fprintf (file, "\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7778 sp_str, size2, sp_str);
7781 build_big_number (file, size2, t1_str);
7782 fprintf (file, "\tsub\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7784 if (dwarf2out_do_frame ())
7785 if (! (gmask & HARD_FRAME_POINTER_MASK))
7786 dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, size);
7790 fprintf (file, "\t%s#PROLOGUE# 1\n", ASM_COMMENT_START);
7793 /* Do any necessary cleanup after a function to restore stack, frame,
7797 sparc_flat_function_epilogue (FILE *file, HOST_WIDE_INT size)
7799 rtx epilogue_delay = current_function_epilogue_delay_list;
7800 int noepilogue = FALSE;
7802 /* This is only for the human reader. */
7803 fprintf (file, "\t%s#EPILOGUE#\n", ASM_COMMENT_START);
7805 /* The epilogue does not depend on any registers, but the stack
7806 registers, so we assume that if we have 1 pending nop, it can be
7807 ignored, and 2 it must be filled (2 nops occur for integer
7808 multiply and divide). */
7810 size = SPARC_STACK_ALIGN (size);
7811 size = (!current_frame_info.initialized
7812 ? sparc_flat_compute_frame_size (size)
7813 : current_frame_info.total_size);
7815 if (size == 0 && epilogue_delay == 0)
7817 rtx insn = get_last_insn ();
7819 /* If the last insn was a BARRIER, we don't have to write any code
7820 because a jump (aka return) was put there. */
7821 if (GET_CODE (insn) == NOTE)
7822 insn = prev_nonnote_insn (insn);
7823 if (insn && GET_CODE (insn) == BARRIER)
7829 int reg_offset = current_frame_info.reg_offset;
7831 const char *const sp_str = reg_names[STACK_POINTER_REGNUM];
7832 const char *const fp_str = reg_names[HARD_FRAME_POINTER_REGNUM];
7833 static const char *const t1_str = "%g1";
7835 /* In the reload sequence, we don't need to fill the load delay
7836 slots for most of the loads, also see if we can fill the final
7837 delay slot if not otherwise filled by the reload sequence. */
7840 build_big_number (file, size, t1_str);
7842 if (frame_pointer_needed)
7845 fprintf (file,"\tsub\t%s, %s, %s\t\t%s# sp not trusted here\n",
7846 fp_str, t1_str, sp_str, ASM_COMMENT_START);
7848 fprintf (file,"\tadd\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s"
7849 "\t\t%s# sp not trusted here\n",
7850 fp_str, size, sp_str, ASM_COMMENT_START);
7853 /* Is the entire register save area offsettable from %sp? */
7854 if (reg_offset < 4096 - 64 * UNITS_PER_WORD)
7860 /* Restore %sp in two steps, but make sure there is always a
7861 64-byte register save area, and %sp is properly aligned. */
7863 /* Amount to increment %sp by, the first time. */
7864 reg_offset1 = ((reg_offset - 64 - 16) + 15) & -16;
7866 /* Offset to register save area from %sp. */
7867 reg_offset = reg_offset1 - reg_offset;
7869 if (reg_offset1 > 4096)
7871 build_big_number (file, reg_offset1, t1_str);
7872 fprintf (file, "\tadd\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7875 fprintf (file, "\tsub\t%s, -%d, %s\n", sp_str, reg_offset1, sp_str);
7878 /* We must restore the frame pointer and return address reg first
7879 because they are treated specially by the prologue output code. */
7880 if (current_frame_info.gmask & HARD_FRAME_POINTER_MASK)
7882 fprintf (file, "\tld\t[%s+%d], %s\n",
7883 sp_str, reg_offset, fp_str);
7886 if (current_frame_info.gmask & RETURN_ADDR_MASK)
7888 fprintf (file, "\tld\t[%s+%d], %s\n",
7889 sp_str, reg_offset, reg_names[RETURN_ADDR_REGNUM]);
7893 /* Restore any remaining saved registers. */
7894 sparc_flat_save_restore (file, sp_str, reg_offset,
7895 current_frame_info.gmask & ~(HARD_FRAME_POINTER_MASK | RETURN_ADDR_MASK),
7896 current_frame_info.fmask,
7899 /* If we had to increment %sp in two steps, record it so the second
7900 restoration in the epilogue finishes up. */
7901 if (reg_offset1 > 0)
7903 size -= reg_offset1;
7905 build_big_number (file, size, t1_str);
7908 if (current_function_returns_struct)
7909 fprintf (file, "\tjmp\t%%o7+12\n");
7911 fprintf (file, "\tretl\n");
7913 /* If the only register saved is the return address, we need a
7914 nop, unless we have an instruction to put into it. Otherwise
7915 we don't since reloading multiple registers doesn't reference
7916 the register being loaded. */
7922 final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1, NULL);
7925 else if (size > 4096)
7926 fprintf (file, "\tadd\t%s, %s, %s\n", sp_str, t1_str, sp_str);
7929 fprintf (file, "\tsub\t%s, -"HOST_WIDE_INT_PRINT_DEC", %s\n",
7930 sp_str, size, sp_str);
7933 fprintf (file, "\tnop\n");
7936 /* Reset state info for each function. */
7937 current_frame_info = zero_frame_info;
7939 sparc_output_deferred_case_vectors ();
7942 /* Define the number of delay slots needed for the function epilogue.
7944 On the sparc, we need a slot if either no stack has been allocated,
7945 or the only register saved is the return register. */
7948 sparc_flat_epilogue_delay_slots (void)
7950 if (!current_frame_info.initialized)
7951 (void) sparc_flat_compute_frame_size (get_frame_size ());
7953 if (current_frame_info.total_size == 0)
7959 /* Return true if TRIAL is a valid insn for the epilogue delay slot.
7960 Any single length instruction which doesn't reference the stack or frame
7964 sparc_flat_eligible_for_epilogue_delay (rtx trial, int slot ATTRIBUTE_UNUSED)
7966 rtx pat = PATTERN (trial);
7968 if (get_attr_length (trial) != 1)
7971 if (! reg_mentioned_p (stack_pointer_rtx, pat)
7972 && ! reg_mentioned_p (frame_pointer_rtx, pat))
7978 /* Adjust the cost of a scheduling dependency. Return the new cost of
7979 a dependency LINK or INSN on DEP_INSN. COST is the current cost. */
7982 supersparc_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
7984 enum attr_type insn_type;
7986 if (! recog_memoized (insn))
7989 insn_type = get_attr_type (insn);
7991 if (REG_NOTE_KIND (link) == 0)
7993 /* Data dependency; DEP_INSN writes a register that INSN reads some
7996 /* if a load, then the dependence must be on the memory address;
7997 add an extra "cycle". Note that the cost could be two cycles
7998 if the reg was written late in an instruction group; we ca not tell
8000 if (insn_type == TYPE_LOAD || insn_type == TYPE_FPLOAD)
8003 /* Get the delay only if the address of the store is the dependence. */
8004 if (insn_type == TYPE_STORE || insn_type == TYPE_FPSTORE)
8006 rtx pat = PATTERN(insn);
8007 rtx dep_pat = PATTERN (dep_insn);
8009 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
8010 return cost; /* This should not happen! */
8012 /* The dependency between the two instructions was on the data that
8013 is being stored. Assume that this implies that the address of the
8014 store is not dependent. */
8015 if (rtx_equal_p (SET_DEST (dep_pat), SET_SRC (pat)))
8018 return cost + 3; /* An approximation. */
8021 /* A shift instruction cannot receive its data from an instruction
8022 in the same cycle; add a one cycle penalty. */
8023 if (insn_type == TYPE_SHIFT)
8024 return cost + 3; /* Split before cascade into shift. */
8028 /* Anti- or output- dependency; DEP_INSN reads/writes a register that
8029 INSN writes some cycles later. */
8031 /* These are only significant for the fpu unit; writing a fp reg before
8032 the fpu has finished with it stalls the processor. */
8034 /* Reusing an integer register causes no problems. */
8035 if (insn_type == TYPE_IALU || insn_type == TYPE_SHIFT)
8043 hypersparc_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
8045 enum attr_type insn_type, dep_type;
8046 rtx pat = PATTERN(insn);
8047 rtx dep_pat = PATTERN (dep_insn);
8049 if (recog_memoized (insn) < 0 || recog_memoized (dep_insn) < 0)
8052 insn_type = get_attr_type (insn);
8053 dep_type = get_attr_type (dep_insn);
8055 switch (REG_NOTE_KIND (link))
8058 /* Data dependency; DEP_INSN writes a register that INSN reads some
8065 /* Get the delay iff the address of the store is the dependence. */
8066 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET)
8069 if (rtx_equal_p (SET_DEST (dep_pat), SET_SRC (pat)))
8076 /* If a load, then the dependence must be on the memory address. If
8077 the addresses aren't equal, then it might be a false dependency */
8078 if (dep_type == TYPE_STORE || dep_type == TYPE_FPSTORE)
8080 if (GET_CODE (pat) != SET || GET_CODE (dep_pat) != SET
8081 || GET_CODE (SET_DEST (dep_pat)) != MEM
8082 || GET_CODE (SET_SRC (pat)) != MEM
8083 || ! rtx_equal_p (XEXP (SET_DEST (dep_pat), 0),
8084 XEXP (SET_SRC (pat), 0)))
8092 /* Compare to branch latency is 0. There is no benefit from
8093 separating compare and branch. */
8094 if (dep_type == TYPE_COMPARE)
8096 /* Floating point compare to branch latency is less than
8097 compare to conditional move. */
8098 if (dep_type == TYPE_FPCMP)
8107 /* Anti-dependencies only penalize the fpu unit. */
8108 if (insn_type == TYPE_IALU || insn_type == TYPE_SHIFT)
8120 sparc_adjust_cost(rtx insn, rtx link, rtx dep, int cost)
8124 case PROCESSOR_SUPERSPARC:
8125 cost = supersparc_adjust_cost (insn, link, dep, cost);
8127 case PROCESSOR_HYPERSPARC:
8128 case PROCESSOR_SPARCLITE86X:
8129 cost = hypersparc_adjust_cost (insn, link, dep, cost);
8138 sparc_sched_init (FILE *dump ATTRIBUTE_UNUSED,
8139 int sched_verbose ATTRIBUTE_UNUSED,
8140 int max_ready ATTRIBUTE_UNUSED)
8145 sparc_use_dfa_pipeline_interface (void)
8147 if ((1 << sparc_cpu) &
8148 ((1 << PROCESSOR_ULTRASPARC) | (1 << PROCESSOR_CYPRESS) |
8149 (1 << PROCESSOR_SUPERSPARC) | (1 << PROCESSOR_HYPERSPARC) |
8150 (1 << PROCESSOR_SPARCLITE86X) | (1 << PROCESSOR_TSC701) |
8151 (1 << PROCESSOR_ULTRASPARC3)))
8157 sparc_use_sched_lookahead (void)
8159 if (sparc_cpu == PROCESSOR_ULTRASPARC
8160 || sparc_cpu == PROCESSOR_ULTRASPARC3)
8162 if ((1 << sparc_cpu) &
8163 ((1 << PROCESSOR_SUPERSPARC) | (1 << PROCESSOR_HYPERSPARC) |
8164 (1 << PROCESSOR_SPARCLITE86X)))
8170 sparc_issue_rate (void)
8177 /* Assume V9 processors are capable of at least dual-issue. */
8179 case PROCESSOR_SUPERSPARC:
8181 case PROCESSOR_HYPERSPARC:
8182 case PROCESSOR_SPARCLITE86X:
8184 case PROCESSOR_ULTRASPARC:
8185 case PROCESSOR_ULTRASPARC3:
8191 set_extends (rtx insn)
8193 register rtx pat = PATTERN (insn);
8195 switch (GET_CODE (SET_SRC (pat)))
8197 /* Load and some shift instructions zero extend. */
8200 /* sethi clears the high bits */
8202 /* LO_SUM is used with sethi. sethi cleared the high
8203 bits and the values used with lo_sum are positive */
8205 /* Store flag stores 0 or 1 */
8215 rtx op0 = XEXP (SET_SRC (pat), 0);
8216 rtx op1 = XEXP (SET_SRC (pat), 1);
8217 if (GET_CODE (op1) == CONST_INT)
8218 return INTVAL (op1) >= 0;
8219 if (GET_CODE (op0) != REG)
8221 if (sparc_check_64 (op0, insn) == 1)
8223 return (GET_CODE (op1) == REG && sparc_check_64 (op1, insn) == 1);
8228 rtx op0 = XEXP (SET_SRC (pat), 0);
8229 rtx op1 = XEXP (SET_SRC (pat), 1);
8230 if (GET_CODE (op0) != REG || sparc_check_64 (op0, insn) <= 0)
8232 if (GET_CODE (op1) == CONST_INT)
8233 return INTVAL (op1) >= 0;
8234 return (GET_CODE (op1) == REG && sparc_check_64 (op1, insn) == 1);
8237 return GET_MODE (SET_SRC (pat)) == SImode;
8238 /* Positive integers leave the high bits zero. */
8240 return ! (CONST_DOUBLE_LOW (SET_SRC (pat)) & 0x80000000);
8242 return ! (INTVAL (SET_SRC (pat)) & 0x80000000);
8245 return - (GET_MODE (SET_SRC (pat)) == SImode);
8247 return sparc_check_64 (SET_SRC (pat), insn);
8253 /* We _ought_ to have only one kind per function, but... */
8254 static GTY(()) rtx sparc_addr_diff_list;
8255 static GTY(()) rtx sparc_addr_list;
8258 sparc_defer_case_vector (rtx lab, rtx vec, int diff)
8260 vec = gen_rtx_EXPR_LIST (VOIDmode, lab, vec);
8262 sparc_addr_diff_list
8263 = gen_rtx_EXPR_LIST (VOIDmode, vec, sparc_addr_diff_list);
8265 sparc_addr_list = gen_rtx_EXPR_LIST (VOIDmode, vec, sparc_addr_list);
8269 sparc_output_addr_vec (rtx vec)
8271 rtx lab = XEXP (vec, 0), body = XEXP (vec, 1);
8272 int idx, vlen = XVECLEN (body, 0);
8274 #ifdef ASM_OUTPUT_ADDR_VEC_START
8275 ASM_OUTPUT_ADDR_VEC_START (asm_out_file);
8278 #ifdef ASM_OUTPUT_CASE_LABEL
8279 ASM_OUTPUT_CASE_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (lab),
8282 (*targetm.asm_out.internal_label) (asm_out_file, "L", CODE_LABEL_NUMBER (lab));
8285 for (idx = 0; idx < vlen; idx++)
8287 ASM_OUTPUT_ADDR_VEC_ELT
8288 (asm_out_file, CODE_LABEL_NUMBER (XEXP (XVECEXP (body, 0, idx), 0)));
8291 #ifdef ASM_OUTPUT_ADDR_VEC_END
8292 ASM_OUTPUT_ADDR_VEC_END (asm_out_file);
8297 sparc_output_addr_diff_vec (rtx vec)
8299 rtx lab = XEXP (vec, 0), body = XEXP (vec, 1);
8300 rtx base = XEXP (XEXP (body, 0), 0);
8301 int idx, vlen = XVECLEN (body, 1);
8303 #ifdef ASM_OUTPUT_ADDR_VEC_START
8304 ASM_OUTPUT_ADDR_VEC_START (asm_out_file);
8307 #ifdef ASM_OUTPUT_CASE_LABEL
8308 ASM_OUTPUT_CASE_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (lab),
8311 (*targetm.asm_out.internal_label) (asm_out_file, "L", CODE_LABEL_NUMBER (lab));
8314 for (idx = 0; idx < vlen; idx++)
8316 ASM_OUTPUT_ADDR_DIFF_ELT
8319 CODE_LABEL_NUMBER (XEXP (XVECEXP (body, 1, idx), 0)),
8320 CODE_LABEL_NUMBER (base));
8323 #ifdef ASM_OUTPUT_ADDR_VEC_END
8324 ASM_OUTPUT_ADDR_VEC_END (asm_out_file);
8329 sparc_output_deferred_case_vectors (void)
8334 if (sparc_addr_list == NULL_RTX
8335 && sparc_addr_diff_list == NULL_RTX)
8338 /* Align to cache line in the function's code section. */
8339 function_section (current_function_decl);
8341 align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
8343 ASM_OUTPUT_ALIGN (asm_out_file, align);
8345 for (t = sparc_addr_list; t ; t = XEXP (t, 1))
8346 sparc_output_addr_vec (XEXP (t, 0));
8347 for (t = sparc_addr_diff_list; t ; t = XEXP (t, 1))
8348 sparc_output_addr_diff_vec (XEXP (t, 0));
8350 sparc_addr_list = sparc_addr_diff_list = NULL_RTX;
8353 /* Return 0 if the high 32 bits of X (the low word of X, if DImode) are
8354 unknown. Return 1 if the high bits are zero, -1 if the register is
8357 sparc_check_64 (rtx x, rtx insn)
8359 /* If a register is set only once it is safe to ignore insns this
8360 code does not know how to handle. The loop will either recognize
8361 the single set and return the correct value or fail to recognize
8366 if (GET_CODE (x) != REG)
8369 if (GET_MODE (x) == DImode)
8370 y = gen_rtx_REG (SImode, REGNO (x) + WORDS_BIG_ENDIAN);
8372 if (flag_expensive_optimizations
8373 && REG_N_SETS (REGNO (y)) == 1)
8379 insn = get_last_insn_anywhere ();
8384 while ((insn = PREV_INSN (insn)))
8386 switch (GET_CODE (insn))
8399 rtx pat = PATTERN (insn);
8400 if (GET_CODE (pat) != SET)
8402 if (rtx_equal_p (x, SET_DEST (pat)))
8403 return set_extends (insn);
8404 if (y && rtx_equal_p (y, SET_DEST (pat)))
8405 return set_extends (insn);
8406 if (reg_overlap_mentioned_p (SET_DEST (pat), y))
8414 /* Returns assembly code to perform a DImode shift using
8415 a 64-bit global or out register on SPARC-V8+. */
8417 sparc_v8plus_shift (rtx *operands, rtx insn, const char *opcode)
8419 static char asm_code[60];
8421 /* The scratch register is only required when the destination
8422 register is not a 64-bit global or out register. */
8423 if (which_alternative != 2)
8424 operands[3] = operands[0];
8426 /* We can only shift by constants <= 63. */
8427 if (GET_CODE (operands[2]) == CONST_INT)
8428 operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
8430 if (GET_CODE (operands[1]) == CONST_INT)
8432 output_asm_insn ("mov\t%1, %3", operands);
8436 output_asm_insn ("sllx\t%H1, 32, %3", operands);
8437 if (sparc_check_64 (operands[1], insn) <= 0)
8438 output_asm_insn ("srl\t%L1, 0, %L1", operands);
8439 output_asm_insn ("or\t%L1, %3, %3", operands);
8442 strcpy(asm_code, opcode);
8444 if (which_alternative != 2)
8445 return strcat (asm_code, "\t%0, %2, %L0\n\tsrlx\t%L0, 32, %H0");
8447 return strcat (asm_code, "\t%3, %2, %3\n\tsrlx\t%3, 32, %H0\n\tmov\t%3, %L0");
8450 /* Output rtl to increment the profiler label LABELNO
8451 for profiling a function entry. */
8454 sparc_profile_hook (int labelno)
8459 ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
8460 lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
8461 fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_FUNCTION);
8463 emit_library_call (fun, LCT_NORMAL, VOIDmode, 1, lab, Pmode);
8466 #ifdef OBJECT_FORMAT_ELF
8468 sparc_elf_asm_named_section (const char *name, unsigned int flags)
8470 if (flags & SECTION_MERGE)
8472 /* entsize cannot be expressed in this section attributes
8474 default_elf_asm_named_section (name, flags);
8478 fprintf (asm_out_file, "\t.section\t\"%s\"", name);
8480 if (!(flags & SECTION_DEBUG))
8481 fputs (",#alloc", asm_out_file);
8482 if (flags & SECTION_WRITE)
8483 fputs (",#write", asm_out_file);
8484 if (flags & SECTION_TLS)
8485 fputs (",#tls", asm_out_file);
8486 if (flags & SECTION_CODE)
8487 fputs (",#execinstr", asm_out_file);
8489 /* ??? Handle SECTION_BSS. */
8491 fputc ('\n', asm_out_file);
8493 #endif /* OBJECT_FORMAT_ELF */
8495 /* We do not allow sibling calls if -mflat, nor
8496 we do not allow indirect calls to be optimized into sibling calls.
8498 Also, on sparc 32-bit we cannot emit a sibling call when the
8499 current function returns a structure. This is because the "unimp
8500 after call" convention would cause the callee to return to the
8501 wrong place. The generic code already disallows cases where the
8502 function being called returns a structure.
8504 It may seem strange how this last case could occur. Usually there
8505 is code after the call which jumps to epilogue code which dumps the
8506 return value into the struct return area. That ought to invalidate
8507 the sibling call right? Well, in the c++ case we can end up passing
8508 the pointer to the struct return area to a constructor (which returns
8509 void) and then nothing else happens. Such a sibling call would look
8510 valid without the added check here. */
8512 sparc_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
8516 && (TARGET_ARCH64 || ! current_function_returns_struct));
8519 /* libfunc renaming. */
8520 #include "config/gofast.h"
8523 sparc_init_libfuncs (void)
8527 /* Use the subroutines that Sun's library provides for integer
8528 multiply and divide. The `*' prevents an underscore from
8529 being prepended by the compiler. .umul is a little faster
8531 set_optab_libfunc (smul_optab, SImode, "*.umul");
8532 set_optab_libfunc (sdiv_optab, SImode, "*.div");
8533 set_optab_libfunc (udiv_optab, SImode, "*.udiv");
8534 set_optab_libfunc (smod_optab, SImode, "*.rem");
8535 set_optab_libfunc (umod_optab, SImode, "*.urem");
8537 /* TFmode arithmetic. These names are part of the SPARC 32bit ABI. */
8538 set_optab_libfunc (add_optab, TFmode, "_Q_add");
8539 set_optab_libfunc (sub_optab, TFmode, "_Q_sub");
8540 set_optab_libfunc (neg_optab, TFmode, "_Q_neg");
8541 set_optab_libfunc (smul_optab, TFmode, "_Q_mul");
8542 set_optab_libfunc (sdiv_optab, TFmode, "_Q_div");
8544 /* We can define the TFmode sqrt optab only if TARGET_FPU. This
8545 is because with soft-float, the SFmode and DFmode sqrt
8546 instructions will be absent, and the compiler will notice and
8547 try to use the TFmode sqrt instruction for calls to the
8548 builtin function sqrt, but this fails. */
8550 set_optab_libfunc (sqrt_optab, TFmode, "_Q_sqrt");
8552 set_optab_libfunc (eq_optab, TFmode, "_Q_feq");
8553 set_optab_libfunc (ne_optab, TFmode, "_Q_fne");
8554 set_optab_libfunc (gt_optab, TFmode, "_Q_fgt");
8555 set_optab_libfunc (ge_optab, TFmode, "_Q_fge");
8556 set_optab_libfunc (lt_optab, TFmode, "_Q_flt");
8557 set_optab_libfunc (le_optab, TFmode, "_Q_fle");
8559 set_conv_libfunc (sext_optab, TFmode, SFmode, "_Q_stoq");
8560 set_conv_libfunc (sext_optab, TFmode, DFmode, "_Q_dtoq");
8561 set_conv_libfunc (trunc_optab, SFmode, TFmode, "_Q_qtos");
8562 set_conv_libfunc (trunc_optab, DFmode, TFmode, "_Q_qtod");
8564 set_conv_libfunc (sfix_optab, SImode, TFmode, "_Q_qtoi");
8565 set_conv_libfunc (ufix_optab, SImode, TFmode, "_Q_qtou");
8566 set_conv_libfunc (sfloat_optab, TFmode, SImode, "_Q_itoq");
8568 if (SUN_CONVERSION_LIBFUNCS)
8570 set_conv_libfunc (sfix_optab, DImode, SFmode, "__ftoll");
8571 set_conv_libfunc (ufix_optab, DImode, SFmode, "__ftoull");
8572 set_conv_libfunc (sfix_optab, DImode, DFmode, "__dtoll");
8573 set_conv_libfunc (ufix_optab, DImode, DFmode, "__dtoull");
8578 /* In the SPARC 64bit ABI, SImode multiply and divide functions
8579 do not exist in the library. Make sure the compiler does not
8580 emit calls to them by accident. (It should always use the
8581 hardware instructions.) */
8582 set_optab_libfunc (smul_optab, SImode, 0);
8583 set_optab_libfunc (sdiv_optab, SImode, 0);
8584 set_optab_libfunc (udiv_optab, SImode, 0);
8585 set_optab_libfunc (smod_optab, SImode, 0);
8586 set_optab_libfunc (umod_optab, SImode, 0);
8588 if (SUN_INTEGER_MULTIPLY_64)
8590 set_optab_libfunc (smul_optab, DImode, "__mul64");
8591 set_optab_libfunc (sdiv_optab, DImode, "__div64");
8592 set_optab_libfunc (udiv_optab, DImode, "__udiv64");
8593 set_optab_libfunc (smod_optab, DImode, "__rem64");
8594 set_optab_libfunc (umod_optab, DImode, "__urem64");
8597 if (SUN_CONVERSION_LIBFUNCS)
8599 set_conv_libfunc (sfix_optab, DImode, SFmode, "__ftol");
8600 set_conv_libfunc (ufix_optab, DImode, SFmode, "__ftoul");
8601 set_conv_libfunc (sfix_optab, DImode, DFmode, "__dtol");
8602 set_conv_libfunc (ufix_optab, DImode, DFmode, "__dtoul");
8606 gofast_maybe_init_libfuncs ();
8609 /* ??? Similar to the standard section selection, but force reloc-y-ness
8610 if SUNOS4_SHARED_LIBRARIES. Unclear why this helps (as opposed to
8611 pretending PIC always on), but that's what the old code did. */
8614 sparc_aout_select_section (tree t, int reloc, unsigned HOST_WIDE_INT align)
8616 default_select_section (t, reloc | SUNOS4_SHARED_LIBRARIES, align);
8619 /* Use text section for a constant unless we need more alignment than
8623 sparc_aout_select_rtx_section (enum machine_mode mode, rtx x,
8624 unsigned HOST_WIDE_INT align)
8626 if (align <= MAX_TEXT_ALIGN
8627 && ! (flag_pic && (symbolic_operand (x, mode)
8628 || SUNOS4_SHARED_LIBRARIES)))
8629 readonly_data_section ();
8635 sparc_extra_constraint_check (rtx op, int c, int strict)
8640 && (c == 'T' || c == 'U'))
8646 return fp_sethi_p (op);
8649 return fp_mov_p (op);
8652 return fp_high_losum_p (op);
8656 || (GET_CODE (op) == REG
8657 && (REGNO (op) < FIRST_PSEUDO_REGISTER
8658 || reg_renumber[REGNO (op)] >= 0)))
8659 return register_ok_for_ldd (op);
8671 /* Our memory extra constraints have to emulate the
8672 behavior of 'm' and 'o' in order for reload to work
8674 if (GET_CODE (op) == MEM)
8677 if ((TARGET_ARCH64 || mem_min_alignment (op, 8))
8679 || strict_memory_address_p (Pmode, XEXP (op, 0))))
8684 reload_ok_mem = (reload_in_progress
8685 && GET_CODE (op) == REG
8686 && REGNO (op) >= FIRST_PSEUDO_REGISTER
8687 && reg_renumber [REGNO (op)] < 0);
8690 return reload_ok_mem;
8693 /* ??? This duplicates information provided to the compiler by the
8694 ??? scheduler description. Some day, teach genautomata to output
8695 ??? the latencies and then CSE will just use that. */
8698 sparc_rtx_costs (rtx x, int code, int outer_code, int *total)
8702 case PLUS: case MINUS: case ABS: case NEG:
8703 case FLOAT: case UNSIGNED_FLOAT:
8704 case FIX: case UNSIGNED_FIX:
8705 case FLOAT_EXTEND: case FLOAT_TRUNCATE:
8706 if (FLOAT_MODE_P (GET_MODE (x)))
8710 case PROCESSOR_ULTRASPARC:
8711 case PROCESSOR_ULTRASPARC3:
8712 *total = COSTS_N_INSNS (4);
8715 case PROCESSOR_SUPERSPARC:
8716 *total = COSTS_N_INSNS (3);
8719 case PROCESSOR_CYPRESS:
8720 *total = COSTS_N_INSNS (5);
8723 case PROCESSOR_HYPERSPARC:
8724 case PROCESSOR_SPARCLITE86X:
8726 *total = COSTS_N_INSNS (1);
8731 *total = COSTS_N_INSNS (1);
8737 case PROCESSOR_ULTRASPARC:
8738 if (GET_MODE (x) == SFmode)
8739 *total = COSTS_N_INSNS (13);
8741 *total = COSTS_N_INSNS (23);
8744 case PROCESSOR_ULTRASPARC3:
8745 if (GET_MODE (x) == SFmode)
8746 *total = COSTS_N_INSNS (20);
8748 *total = COSTS_N_INSNS (29);
8751 case PROCESSOR_SUPERSPARC:
8752 *total = COSTS_N_INSNS (12);
8755 case PROCESSOR_CYPRESS:
8756 *total = COSTS_N_INSNS (63);
8759 case PROCESSOR_HYPERSPARC:
8760 case PROCESSOR_SPARCLITE86X:
8761 *total = COSTS_N_INSNS (17);
8765 *total = COSTS_N_INSNS (30);
8770 if (FLOAT_MODE_P (GET_MODE (x)))
8774 case PROCESSOR_ULTRASPARC:
8775 case PROCESSOR_ULTRASPARC3:
8776 *total = COSTS_N_INSNS (1);
8779 case PROCESSOR_SUPERSPARC:
8780 *total = COSTS_N_INSNS (3);
8783 case PROCESSOR_CYPRESS:
8784 *total = COSTS_N_INSNS (5);
8787 case PROCESSOR_HYPERSPARC:
8788 case PROCESSOR_SPARCLITE86X:
8790 *total = COSTS_N_INSNS (1);
8795 /* ??? Maybe mark integer compares as zero cost on
8796 ??? all UltraSPARC processors because the result
8797 ??? can be bypassed to a branch in the same group. */
8799 *total = COSTS_N_INSNS (1);
8803 if (FLOAT_MODE_P (GET_MODE (x)))
8807 case PROCESSOR_ULTRASPARC:
8808 case PROCESSOR_ULTRASPARC3:
8809 *total = COSTS_N_INSNS (4);
8812 case PROCESSOR_SUPERSPARC:
8813 *total = COSTS_N_INSNS (3);
8816 case PROCESSOR_CYPRESS:
8817 *total = COSTS_N_INSNS (7);
8820 case PROCESSOR_HYPERSPARC:
8821 case PROCESSOR_SPARCLITE86X:
8822 *total = COSTS_N_INSNS (1);
8826 *total = COSTS_N_INSNS (5);
8831 /* The latency is actually variable for Ultra-I/II
8832 And if one of the inputs have a known constant
8833 value, we could calculate this precisely.
8835 However, for that to be useful we would need to
8836 add some machine description changes which would
8837 make sure small constants ended up in rs1 of the
8838 multiply instruction. This is because the multiply
8839 latency is determined by the number of clear (or
8840 set if the value is negative) bits starting from
8841 the most significant bit of the first input.
8843 The algorithm for computing num_cycles of a multiply
8847 highest_bit = highest_clear_bit(rs1);
8849 highest_bit = highest_set_bit(rs1);
8852 num_cycles = 4 + ((highest_bit - 3) / 2);
8854 If we did that we would have to also consider register
8855 allocation issues that would result from forcing such
8856 a value into a register.
8858 There are other similar tricks we could play if we
8859 knew, for example, that one input was an array index.
8861 Since we do not play any such tricks currently the
8862 safest thing to do is report the worst case latency. */
8863 if (sparc_cpu == PROCESSOR_ULTRASPARC)
8865 *total = (GET_MODE (x) == DImode
8866 ? COSTS_N_INSNS (34) : COSTS_N_INSNS (19));
8870 /* Multiply latency on Ultra-III, fortunately, is constant. */
8871 if (sparc_cpu == PROCESSOR_ULTRASPARC3)
8873 *total = COSTS_N_INSNS (6);
8877 if (sparc_cpu == PROCESSOR_HYPERSPARC
8878 || sparc_cpu == PROCESSOR_SPARCLITE86X)
8880 *total = COSTS_N_INSNS (17);
8884 *total = (TARGET_HARD_MUL ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25));
8891 if (FLOAT_MODE_P (GET_MODE (x)))
8895 case PROCESSOR_ULTRASPARC:
8896 if (GET_MODE (x) == SFmode)
8897 *total = COSTS_N_INSNS (13);
8899 *total = COSTS_N_INSNS (23);
8902 case PROCESSOR_ULTRASPARC3:
8903 if (GET_MODE (x) == SFmode)
8904 *total = COSTS_N_INSNS (17);
8906 *total = COSTS_N_INSNS (20);
8909 case PROCESSOR_SUPERSPARC:
8910 if (GET_MODE (x) == SFmode)
8911 *total = COSTS_N_INSNS (6);
8913 *total = COSTS_N_INSNS (9);
8916 case PROCESSOR_HYPERSPARC:
8917 case PROCESSOR_SPARCLITE86X:
8918 if (GET_MODE (x) == SFmode)
8919 *total = COSTS_N_INSNS (8);
8921 *total = COSTS_N_INSNS (12);
8925 *total = COSTS_N_INSNS (7);
8930 if (sparc_cpu == PROCESSOR_ULTRASPARC)
8931 *total = (GET_MODE (x) == DImode
8932 ? COSTS_N_INSNS (68) : COSTS_N_INSNS (37));
8933 else if (sparc_cpu == PROCESSOR_ULTRASPARC3)
8934 *total = (GET_MODE (x) == DImode
8935 ? COSTS_N_INSNS (71) : COSTS_N_INSNS (40));
8937 *total = COSTS_N_INSNS (25);
8941 /* Conditional moves. */
8944 case PROCESSOR_ULTRASPARC:
8945 *total = COSTS_N_INSNS (2);
8948 case PROCESSOR_ULTRASPARC3:
8949 if (FLOAT_MODE_P (GET_MODE (x)))
8950 *total = COSTS_N_INSNS (3);
8952 *total = COSTS_N_INSNS (2);
8956 *total = COSTS_N_INSNS (1);
8961 /* If outer-code is SIGN/ZERO extension we have to subtract
8962 out COSTS_N_INSNS (1) from whatever we return in determining
8966 case PROCESSOR_ULTRASPARC:
8967 if (outer_code == ZERO_EXTEND)
8968 *total = COSTS_N_INSNS (1);
8970 *total = COSTS_N_INSNS (2);
8973 case PROCESSOR_ULTRASPARC3:
8974 if (outer_code == ZERO_EXTEND)
8976 if (GET_MODE (x) == QImode
8977 || GET_MODE (x) == HImode
8978 || outer_code == SIGN_EXTEND)
8979 *total = COSTS_N_INSNS (2);
8981 *total = COSTS_N_INSNS (1);
8985 /* This handles sign extension (3 cycles)
8986 and everything else (2 cycles). */
8987 *total = COSTS_N_INSNS (2);
8991 case PROCESSOR_SUPERSPARC:
8992 if (FLOAT_MODE_P (GET_MODE (x))
8993 || outer_code == ZERO_EXTEND
8994 || outer_code == SIGN_EXTEND)
8995 *total = COSTS_N_INSNS (0);
8997 *total = COSTS_N_INSNS (1);
9000 case PROCESSOR_TSC701:
9001 if (outer_code == ZERO_EXTEND
9002 || outer_code == SIGN_EXTEND)
9003 *total = COSTS_N_INSNS (2);
9005 *total = COSTS_N_INSNS (3);
9008 case PROCESSOR_CYPRESS:
9009 if (outer_code == ZERO_EXTEND
9010 || outer_code == SIGN_EXTEND)
9011 *total = COSTS_N_INSNS (1);
9013 *total = COSTS_N_INSNS (2);
9016 case PROCESSOR_HYPERSPARC:
9017 case PROCESSOR_SPARCLITE86X:
9019 if (outer_code == ZERO_EXTEND
9020 || outer_code == SIGN_EXTEND)
9021 *total = COSTS_N_INSNS (0);
9023 *total = COSTS_N_INSNS (1);
9028 if (INTVAL (x) < 0x1000 && INTVAL (x) >= -0x1000)
9046 if (GET_MODE (x) == DImode
9047 && ((XINT (x, 3) == 0
9048 && (unsigned HOST_WIDE_INT) XINT (x, 2) < 0x1000)
9049 || (XINT (x, 3) == -1
9051 && XINT (x, 2) >= -0x1000)))
9062 /* Output code to add DELTA to the first argument, and then jump to FUNCTION.
9063 Used for C++ multiple inheritance. */
9066 sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
9067 HOST_WIDE_INT delta,
9068 HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED,
9071 rtx this, insn, funexp, delta_rtx, tmp;
9073 reload_completed = 1;
9074 epilogue_completed = 1;
9076 current_function_uses_only_leaf_regs = 1;
9078 emit_note (NOTE_INSN_PROLOGUE_END);
9080 /* Find the "this" pointer. Normally in %o0, but in ARCH64 if the function
9081 returns a structure, the structure return pointer is there instead. */
9082 if (TARGET_ARCH64 && aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
9083 this = gen_rtx_REG (Pmode, SPARC_INCOMING_INT_ARG_FIRST + 1);
9085 this = gen_rtx_REG (Pmode, SPARC_INCOMING_INT_ARG_FIRST);
9087 /* Add DELTA. When possible use a plain add, otherwise load it into
9088 a register first. */
9089 delta_rtx = GEN_INT (delta);
9090 if (!SPARC_SIMM13_P (delta))
9092 rtx scratch = gen_rtx_REG (Pmode, 1);
9094 if (input_operand (delta_rtx, GET_MODE (scratch)))
9095 emit_insn (gen_rtx_SET (VOIDmode, scratch, delta_rtx));
9099 sparc_emit_set_const64 (scratch, delta_rtx);
9101 sparc_emit_set_const32 (scratch, delta_rtx);
9104 delta_rtx = scratch;
9107 tmp = gen_rtx_PLUS (Pmode, this, delta_rtx);
9108 emit_insn (gen_rtx_SET (VOIDmode, this, tmp));
9110 /* Generate a tail call to the target function. */
9111 if (! TREE_USED (function))
9113 assemble_external (function);
9114 TREE_USED (function) = 1;
9116 funexp = XEXP (DECL_RTL (function), 0);
9117 funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
9118 insn = emit_call_insn (gen_sibcall (funexp));
9119 SIBLING_CALL_P (insn) = 1;
9122 /* Run just enough of rest_of_compilation to get the insns emitted.
9123 There's not really enough bulk here to make other passes such as
9124 instruction scheduling worth while. Note that use_thunk calls
9125 assemble_start_function and assemble_end_function. */
9126 insn = get_insns ();
9127 insn_locators_initialize ();
9128 shorten_branches (insn);
9129 final_start_function (insn, file, 1);
9130 final (insn, file, 1, 0);
9131 final_end_function ();
9133 reload_completed = 0;
9134 epilogue_completed = 0;
9138 /* How to allocate a 'struct machine_function'. */
9140 static struct machine_function *
9141 sparc_init_machine_status (void)
9143 return ggc_alloc_cleared (sizeof (struct machine_function));
9146 /* Locate some local-dynamic symbol still in use by this function
9147 so that we can print its name in local-dynamic base patterns. */
9150 get_some_local_dynamic_name (void)
9154 if (cfun->machine->some_ld_name)
9155 return cfun->machine->some_ld_name;
9157 for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
9159 && for_each_rtx (&PATTERN (insn), get_some_local_dynamic_name_1, 0))
9160 return cfun->machine->some_ld_name;
9166 get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
9171 && GET_CODE (x) == SYMBOL_REF
9172 && SYMBOL_REF_TLS_MODEL (x) == TLS_MODEL_LOCAL_DYNAMIC)
9174 cfun->machine->some_ld_name = XSTR (x, 0);
9181 /* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL.
9182 We need to emit DTP-relative relocations. */
9185 sparc_output_dwarf_dtprel (FILE *file, int size, rtx x)
9190 fputs ("\t.word\t%r_tls_dtpoff32(", file);
9193 fputs ("\t.xword\t%r_tls_dtpoff64(", file);
9198 output_addr_const (file, x);
9202 #include "gt-sparc.h"