arc-protos.h: New file.

* arc-protos.h: New file.

	* arc.c: Include tm_p.h.  Add static prototypes.  Fix compile
	time warnings.

	* arc.h: Move prototypes to arc-protos.h.  Fix compile time
	warnings.

	* arc.md: Likewise.

From-SVN: r31417
This commit is contained in:
Kaveh R. Ghazi 2000-01-14 16:21:46 +00:00 committed by Kaveh Ghazi
parent 699851185a
commit 2b046bda6e
5 changed files with 175 additions and 68 deletions

View file

@ -1,3 +1,15 @@
2000-01-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* arc-protos.h: New file.
* arc.c: Include tm_p.h. Add static prototypes. Fix compile
time warnings.
* arc.h: Move prototypes to arc-protos.h. Fix compile time
warnings.
* arc.md: Likewise.
2000-01-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* dsp16xx-protos.h: New file.

View file

@ -0,0 +1,84 @@
/* Definitions of target machine for GNU compiler, Argonaut ARC cpu.
Copyright (C) 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef RTX_CODE
#ifdef TREE_CODE
extern void arc_va_start PARAMS ((int, tree, rtx));
extern rtx arc_va_arg PARAMS ((tree, tree));
#endif /* TREE_CODE */
extern enum machine_mode arc_select_cc_mode PARAMS ((enum rtx_code, rtx, rtx));
/* Define the function that build the compare insn for scc and bcc. */
extern struct rtx_def *gen_compare_reg PARAMS ((enum rtx_code, rtx, rtx));
/* Declarations for various fns used in the .md file. */
extern const char *output_shift PARAMS ((rtx *));
extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
extern int arc_double_limm_p PARAMS ((rtx));
extern int arc_address_cost PARAMS ((rtx));
extern int arc_eligible_for_epilogue_delay PARAMS ((rtx, int));
extern void arc_initialize_trampoline PARAMS ((rtx, rtx, rtx));
extern void arc_print_operand PARAMS ((FILE *, rtx, int));
extern void arc_print_operand_address PARAMS ((FILE *, rtx));
extern void arc_final_prescan_insn PARAMS ((rtx, rtx *, int));
extern int call_address_operand PARAMS ((rtx, enum machine_mode));
extern int call_operand PARAMS ((rtx, enum machine_mode));
extern int symbolic_memory_operand PARAMS ((rtx, enum machine_mode));
extern int short_immediate_operand PARAMS ((rtx, enum machine_mode));
extern int long_immediate_operand PARAMS ((rtx, enum machine_mode));
extern int long_immediate_loadstore_operand PARAMS ((rtx, enum machine_mode));
extern int move_src_operand PARAMS ((rtx, enum machine_mode));
extern int move_double_src_operand PARAMS ((rtx, enum machine_mode));
extern int move_dest_operand PARAMS ((rtx, enum machine_mode));
extern int load_update_operand PARAMS ((rtx, enum machine_mode));
extern int store_update_operand PARAMS ((rtx, enum machine_mode));
extern int nonvol_nonimm_operand PARAMS ((rtx, enum machine_mode));
extern int const_sint32_operand PARAMS ((rtx, enum machine_mode));
extern int const_uint32_operand PARAMS ((rtx, enum machine_mode));
extern int proper_comparison_operator PARAMS ((rtx, enum machine_mode));
extern int shift_operator PARAMS ((rtx, enum machine_mode));
#endif /* RTX_CODE */
#ifdef TREE_CODE
extern enum arc_function_type arc_compute_function_type PARAMS ((tree));
extern int arc_comp_type_attributes PARAMS ((tree, tree));
extern void arc_set_default_type_attributes PARAMS ((tree));
extern int arc_valid_machine_decl_attribute PARAMS ((tree, tree, tree, tree));
extern void arc_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
enum machine_mode, tree,
int *, int));
#endif /* TREE_CODE */
extern void arc_init PARAMS ((void));
extern void arc_asm_file_start PARAMS ((FILE *));
extern unsigned int arc_compute_frame_size PARAMS ((int));
extern void arc_save_restore PARAMS ((FILE *, const char *, unsigned int,
unsigned int, const char *));
extern void arc_output_function_prologue PARAMS ((FILE *, int));
extern void arc_output_function_epilogue PARAMS ((FILE *, int));
extern int arc_delay_slots_for_epilogue PARAMS ((void));
extern void arc_finalize_pic PARAMS ((void));
extern void arc_ccfsm_at_label PARAMS ((const char *, int));
extern int arc_ccfsm_branch_deleted_p PARAMS ((void));
extern void arc_ccfsm_record_branch_deleted PARAMS ((void));

View file

@ -1,5 +1,5 @@
/* Subroutines used for code generation on the Argonaut ARC cpu.
Copyright (C) 1994, 1995, 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1994, 95, 97-99, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -36,14 +36,16 @@ Boston, MA 02111-1307, USA. */
#include "function.h"
#include "expr.h"
#include "recog.h"
#include "toplev.h"
#include "tm_p.h"
/* Which cpu we're compiling for (NULL(=base), ???). */
char *arc_cpu_string;
const char *arc_cpu_string;
int arc_cpu_type;
/* Name of mangle string to add to symbols to separate code compiled for each
cpu (or NULL). */
char *arc_mangle_cpu;
const char *arc_mangle_cpu;
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
@ -51,14 +53,14 @@ rtx arc_compare_op0, arc_compare_op1;
/* Name of text, data, and rodata sections, as specified on command line.
Selected by -m{text,data,rodata} flags. */
char *arc_text_string = ARC_DEFAULT_TEXT_SECTION;
char *arc_data_string = ARC_DEFAULT_DATA_SECTION;
char *arc_rodata_string = ARC_DEFAULT_RODATA_SECTION;
const char *arc_text_string = ARC_DEFAULT_TEXT_SECTION;
const char *arc_data_string = ARC_DEFAULT_DATA_SECTION;
const char *arc_rodata_string = ARC_DEFAULT_RODATA_SECTION;
/* Name of text, data, and rodata sections used in varasm.c. */
char *arc_text_section;
char *arc_data_section;
char *arc_rodata_section;
const char *arc_text_section;
const char *arc_data_section;
const char *arc_rodata_section;
/* Array of valid operand punctuation characters. */
char arc_punct_chars[256];
@ -80,15 +82,17 @@ static int arc_ccfsm_target_label;
arc_print_operand. */
static int last_insn_set_cc_p;
static int current_insn_set_cc_p;
static void record_cc_ref ();
void arc_init_reg_tables ();
static void record_cc_ref PARAMS ((rtx));
static void arc_init_reg_tables PARAMS ((void));
static int get_arc_condition_code PARAMS ((rtx));
/* Called by OVERRIDE_OPTIONS to initialize various things. */
void
arc_init (void)
{
char *tmp;
if (arc_cpu_string == 0
|| !strcmp (arc_cpu_string, "base"))
{
@ -108,12 +112,12 @@ arc_init (void)
}
/* Set the pseudo-ops for the various standard sections. */
arc_text_section = xmalloc (strlen (arc_text_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (arc_text_section, ARC_SECTION_FORMAT, arc_text_string);
arc_data_section = xmalloc (strlen (arc_data_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (arc_data_section, ARC_SECTION_FORMAT, arc_data_string);
arc_rodata_section = xmalloc (strlen (arc_rodata_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (arc_rodata_section, ARC_SECTION_FORMAT, arc_rodata_string);
arc_text_section = tmp = xmalloc (strlen (arc_text_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (tmp, ARC_SECTION_FORMAT, arc_text_string);
arc_data_section = tmp = xmalloc (strlen (arc_data_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (tmp, ARC_SECTION_FORMAT, arc_data_string);
arc_rodata_section = tmp = xmalloc (strlen (arc_rodata_string) + sizeof (ARC_SECTION_FORMAT) + 1);
sprintf (tmp, ARC_SECTION_FORMAT, arc_rodata_string);
arc_init_reg_tables ();
@ -127,7 +131,7 @@ arc_init (void)
}
/* The condition codes of the ARC, and the inverse function. */
static char *arc_condition_codes[] =
static const char *const arc_condition_codes[] =
{
"al", 0, "eq", "ne", "p", "n", "c", "nc", "v", "nv",
"gt", "le", "ge", "lt", "hi", "ls", "pnz", 0
@ -167,7 +171,7 @@ get_arc_condition_code (comparison)
enum machine_mode
arc_select_cc_mode (op, x, y)
enum rtx_code op;
rtx x, y;
rtx x, y ATTRIBUTE_UNUSED;
{
switch (op)
{
@ -187,6 +191,8 @@ arc_select_cc_mode (op, x, y)
case ASHIFTRT :
case LSHIFTRT :
return CCZNCmode;
default:
break;
}
}
return CCmode;
@ -238,7 +244,7 @@ unsigned int arc_mode_class [NUM_MACHINE_MODES];
enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER];
void
static void
arc_init_reg_tables ()
{
int i;
@ -309,8 +315,8 @@ arc_init_reg_tables ()
int
arc_valid_machine_decl_attribute (type, attributes, identifier, args)
tree type;
tree attributes;
tree type ATTRIBUTE_UNUSED;
tree attributes ATTRIBUTE_UNUSED;
tree identifier;
tree args;
{
@ -333,7 +339,7 @@ arc_valid_machine_decl_attribute (type, attributes, identifier, args)
int
arc_comp_type_attributes (type1, type2)
tree type1, type2;
tree type1 ATTRIBUTE_UNUSED, type2 ATTRIBUTE_UNUSED;
{
return 1;
}
@ -342,7 +348,7 @@ arc_comp_type_attributes (type1, type2)
void
arc_set_default_type_attributes (type)
tree type;
tree type ATTRIBUTE_UNUSED;
{
}
@ -374,7 +380,7 @@ call_operand (op, mode)
int
symbolic_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -393,7 +399,7 @@ symbolic_operand (op, mode)
int
symbolic_memory_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
if (GET_CODE (op) == SUBREG)
op = SUBREG_REG (op);
@ -409,7 +415,7 @@ symbolic_memory_operand (op, mode)
int
short_immediate_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
if (GET_CODE (op) != CONST_INT)
return 0;
@ -422,7 +428,7 @@ short_immediate_operand (op, mode)
int
long_immediate_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -437,6 +443,8 @@ long_immediate_operand (op, mode)
represented this way (the multiplication patterns can cause these
to be generated). They also occur for SFmode values. */
return 1;
default:
break;
}
return 0;
}
@ -450,7 +458,7 @@ long_immediate_operand (op, mode)
int
long_immediate_loadstore_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
if (GET_CODE (op) != MEM)
return 0;
@ -480,6 +488,8 @@ long_immediate_loadstore_operand (op, mode)
&& !SMALL_INT (INTVAL (XEXP (op, 1))))
return 1;
return 0;
default:
break;
}
return 0;
}
@ -644,7 +654,7 @@ nonvol_nonimm_operand (op, mode)
int
const_sint32_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
/* All allowed constants will fit a CONST_INT. */
return (GET_CODE (op) == CONST_INT
@ -658,7 +668,7 @@ const_sint32_operand (op, mode)
int
const_uint32_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
#if HOST_BITS_PER_WIDE_INT > 32
/* All allowed constants will fit a CONST_INT. */
@ -679,7 +689,7 @@ const_uint32_operand (op, mode)
int
proper_comparison_operator (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
enum rtx_code code = GET_CODE (op);
@ -759,7 +769,7 @@ void
arc_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
CUMULATIVE_ARGS *cum;
enum machine_mode mode;
tree type;
tree type ATTRIBUTE_UNUSED;
int *pretend_size;
int no_rtl;
{
@ -843,6 +853,8 @@ arc_address_cost (addr)
}
break;
}
default:
break;
}
return 4;
@ -1381,7 +1393,7 @@ arc_finalize_pic ()
int
shift_operator (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -1408,15 +1420,14 @@ shift_operator (op, mode)
/* ??? We use the loop register here. We don't use it elsewhere (yet) and
using it here will give us a chance to play with it. */
char *
const char *
output_shift (operands)
rtx *operands;
{
static int loopend_lab;
rtx shift = operands[3];
enum machine_mode mode = GET_MODE (shift);
enum rtx_code code = GET_CODE (shift);
char *shift_one;
const char *shift_one;
if (mode != SImode)
abort ();
@ -1472,6 +1483,8 @@ output_shift (operands)
/* The ARC doesn't have a rol insn. Use something else. */
output_asm_insn ("asl.f 0,%0\n\tadc %0,0,0", operands);
break;
default:
break;
}
}
/* Must loop. */
@ -1487,7 +1500,7 @@ output_shift (operands)
if (optimize)
{
if (flag_pic)
sprintf ("lr %%4,[status]\n\tadd %%4,%%4,6\t%s single insn loop start",
sprintf (buf, "lr %%4,[status]\n\tadd %%4,%%4,6\t%s single insn loop start",
ASM_COMMENT_START);
else
sprintf (buf, "mov %%4,%%%%st(1f)\t%s (single insn loop start) >> 2",
@ -1531,7 +1544,7 @@ output_shift (operands)
void
arc_initialize_trampoline (tramp, fnaddr, cxt)
rtx tramp, fnaddr, cxt;
rtx tramp ATTRIBUTE_UNUSED, fnaddr ATTRIBUTE_UNUSED, cxt ATTRIBUTE_UNUSED;
{
}
@ -1601,9 +1614,11 @@ arc_print_operand (file, x, code)
arc_condition_codes[arc_ccfsm_current_cc]);
}
else
/* This insn is executed for either path, so don't
conditionalize it at all. */
; /* nothing to do */
{
/* This insn is executed for either path, so don't
conditionalize it at all. */
; /* nothing to do */
}
}
else
{
@ -1677,7 +1692,7 @@ arc_print_operand (file, x, code)
split_double (x, &first, &second);
fprintf (file, "0x%08lx",
code == 'L' ? INTVAL (first) : INTVAL (second));
(long)(code == 'L' ? INTVAL (first) : INTVAL (second)));
}
else
output_operand_lossage ("invalid operand to %H/%L code");
@ -1882,8 +1897,8 @@ record_cc_ref (insn)
void
arc_final_prescan_insn (insn, opvec, noperands)
rtx insn;
rtx *opvec;
int noperands;
rtx *opvec ATTRIBUTE_UNUSED;
int noperands ATTRIBUTE_UNUSED;
{
/* BODY will hold the body of INSN. */
register rtx body = PATTERN (insn);
@ -2167,7 +2182,7 @@ arc_final_prescan_insn (insn, opvec, noperands)
void
arc_ccfsm_at_label (prefix, num)
char *prefix;
const char *prefix;
int num;
{
if (arc_ccfsm_state == 3 && arc_ccfsm_target_label == num

View file

@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, Argonaut ARC cpu.
Copyright (C) 1994, 1995, 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1994, 95, 97, 98, 99, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA. */
#undef PTRDIFF_TYPE
#undef WCHAR_TYPE
#undef WCHAR_TYPE_SIZE
#undef ASM_OUTPUT_LABELREF
/* Print subsidiary information on the compiler version in use. */
#define TARGET_VERSION fprintf (stderr, " (arc)")
@ -147,8 +148,8 @@ extern int target_flags;
extern char *m88k_short_data;
#define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
extern char *arc_cpu_string;
extern char *arc_text_string,*arc_data_string,*arc_rodata_string;
extern const char *arc_cpu_string;
extern const char *arc_text_string,*arc_data_string,*arc_rodata_string;
#define TARGET_OPTIONS \
{ \
@ -176,7 +177,6 @@ extern int arc_cpu_type;
Don't use this macro to turn on various extra optimizations for
`-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
extern void arc_init ();
#define OVERRIDE_OPTIONS \
do { \
@ -688,7 +688,7 @@ extern enum reg_class arc_regno_reg_class[];
#define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) \
((((MODE) == BLKmode ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) \
> BITS_PER_WORD) \
? ((CUM) + 1 & ~1) \
? (((CUM) + 1) & ~1) \
: (CUM))
/* Return boolean indicating arg of type TYPE and mode MODE will be passed in
@ -1055,7 +1055,6 @@ do { \
/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
return the mode to be used for the comparison. */
extern enum machine_mode arc_select_cc_mode ();
#define SELECT_CC_MODE(OP, X, Y) \
arc_select_cc_mode (OP, X, Y)
@ -1155,7 +1154,7 @@ arc_select_cc_mode (OP, X, Y)
#define ARC_DEFAULT_DATA_SECTION ".data"
#define ARC_DEFAULT_RODATA_SECTION ".rodata"
extern char *arc_text_section,*arc_data_section,*arc_rodata_section;
extern const char *arc_text_section, *arc_data_section, *arc_rodata_section;
/* initfini.c uses this in an asm. */
#if defined (CRT_INIT) || defined (CRT_FINI)
@ -1257,7 +1256,6 @@ do { \
/* Control the assembler format that we output. */
/* Output at beginning of assembler file. */
extern void arc_asm_file_start ();
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) arc_asm_file_start (FILE)
@ -1365,7 +1363,7 @@ do { \
/* On the ARC we want to have libgcc's for multiple cpus in one binary.
We can't use `assemble_name' here as that will call ASM_OUTPUT_LABELREF
and we'll get another suffix added on if -mmangle-cpu. */
extern char *arc_mangle_cpu;
extern const char *arc_mangle_cpu;
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, SYMREF) \
do { \
if (TARGET_MANGLE_CPU_LIBGCC) \
@ -1384,7 +1382,7 @@ do { \
/* We work around a dwarfout.c deficiency by watching for labels from it and
not adding the '_' prefix nor the cpu suffix. There is a comment in
dwarfout.c that says it should be using ASM_OUTPUT_INTERNAL_LABEL. */
extern char *arc_mangle_cpu;
extern const char *arc_mangle_cpu;
#define ASM_OUTPUT_LABELREF(FILE, NAME) \
do { \
if ((NAME)[0] == '.' && (NAME)[1] == 'L') \
@ -1519,8 +1517,12 @@ do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
/* Debugging information. */
/* Generate DBX and DWARF debugging information. */
#ifndef DBX_DEBUGGING_INFO
#define DBX_DEBUGGING_INFO
#endif
#ifndef DWARF_DEBUGGING_INFO
#define DWARF_DEBUGGING_INFO
#endif
/* Prefer STABS (for now). */
#undef PREFERRED_DEBUGGING_TYPE
@ -1593,19 +1595,16 @@ do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
is a valid machine specific attribute for DECL.
The attributes in ATTRIBUTES have previously been assigned to TYPE. */
extern int arc_valid_machine_attribute ();
#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
arc_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
/* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are
incompatible, one if they are compatible, and two if they are
nearly compatible (which causes a warning to be generated). */
extern int arc_comp_type_attributes ();
#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \
arc_comp_type_attributes (TYPE1, TYPE2)
/* Give newly defined TYPE some default attributes. */
extern void arc_set_default_type_attributes ();
#define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \
arc_set_default_type_attributes (TYPE)
@ -1618,12 +1617,6 @@ arc_set_default_type_attributes (TYPE)
since it hasn't been defined! */
extern struct rtx_def *arc_compare_op0, *arc_compare_op1;
/* Define the function that build the compare insn for scc and bcc. */
extern struct rtx_def *gen_compare_reg ();
/* Declarations for various fns used in the .md file. */
extern char *output_shift ();
/* ARC function types. */
enum arc_function_type {
ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL,
@ -1634,7 +1627,6 @@ enum arc_function_type {
#define ARC_INTERRUPT_P(TYPE) \
((TYPE) == ARC_FUNCTION_ILINK1 || (TYPE) == ARC_FUNCTION_ILINK2)
/* Compute the type of a function from its DECL. */
enum arc_function_type arc_compute_function_type ();
/* Implement `va_start' for varargs and stdarg. */

View file

@ -1,5 +1,5 @@
;; Machine description of the Argonaut ARC cpu for GNU C compiler
;; Copyright (C) 1994, 1997, 1998, 1999 Free Software Foundation, Inc.
;; Copyright (C) 1994, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@ -290,6 +290,8 @@
return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
case 3 :
return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
default:
abort();
}
}"
[(set_attr "type" "move,move,load,store")
@ -393,6 +395,8 @@
return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
case 3 :
return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
default:
abort();
}
}"
[(set_attr "type" "move,move,load,store")