Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
879c2e5f
Commit
879c2e5f
authored
Jul 06, 2010
by
Matthias Braun
Browse files
remove unmaintained mips backend
[r27697]
parent
6e848d7e
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
879c2e5f
...
...
@@ -157,7 +157,7 @@ AC_CONFIG_FILES([
BACKENDS=""
if test "$enable_backend" = yes; then
BACKENDS="arm ia32
mips
sparc amd64"
BACKENDS="arm ia32 sparc amd64"
fi
AC_SUBST([BACKENDS])
...
...
ir/Makefile.am
View file @
879c2e5f
...
...
@@ -517,56 +517,6 @@ $(srcdir)/be/arm/gen_arm_regalloc_if.c $(srcdir)/be/arm/gen_arm_regalloc_if.h: \
be/arm/arm_spec.pl be/scripts/generate_machine.pl
$(PERL)
$(srcdir)
/be/scripts/generate_regalloc_if.pl
$(srcdir)
/be/arm/arm_spec.pl
$(srcdir)
/be/arm
# mips backend
mips_sources
=
\
be/mips/bearch_mips.c
\
be/mips/mips_emitter.c
\
be/mips/mips_map_regs.c
\
be/mips/mips_new_nodes.c
\
be/mips/mips_scheduler.c
\
be/mips/mips_transform.c
mips_built_sources
=
\
be/mips/gen_mips_emitter.c
\
be/mips/gen_mips_emitter.h
\
be/mips/gen_mips_machine.c
\
be/mips/gen_mips_machine.h
\
be/mips/gen_mips_new_nodes.c.inl
\
be/mips/gen_mips_new_nodes.h
\
be/mips/gen_mips_regalloc_if.c
\
be/mips/gen_mips_regalloc_if.h
MAINTAINERCLEANFILES
+=
$(mips_built_sources)
BUILT_SOURCES
+=
$(mips_built_sources)
libfirm_la_SOURCES
+=
$(mips_sources)
$(mips_built_sources)
EXTRA_DIST
+=
\
be/mips/bearch_mips.h
\
be/mips/bearch_mips_t.h
\
be/mips/mips_emitter.h
\
be/mips/mips_map_regs.h
\
be/mips/mips_new_nodes.h
\
be/mips/mips_nodes_attr.h
\
be/mips/mips_scheduler.h
\
be/mips/mips_spec.pl
\
be/mips/mips_transform.h
\
be/mips/mips_util.h
$(srcdir)/be/mips/gen_mips_new_nodes.c.inl $(srcdir)/be/mips/gen_mips_new_nodes.h
:
\
be/mips/mips_spec.pl be/scripts/generate_new_opcodes.pl
$(PERL)
$(srcdir)
/be/scripts/generate_new_opcodes.pl
$(srcdir)
/be/mips/mips_spec.pl
$(srcdir)
/be/mips
$(srcdir)/be/mips/gen_mips_emitter.c $(srcdir)/be/mips/gen_mips_emitter.h
:
\
be/mips/mips_spec.pl be/scripts/generate_emitter.pl
$(PERL)
$(srcdir)
/be/scripts/generate_emitter.pl
$(srcdir)
/be/mips/mips_spec.pl
$(srcdir)
/be/mips
$(srcdir)/be/mips/gen_mips_machine.c $(srcdir)/be/mips/gen_mips_machine.h
:
\
be/mips/mips_spec.pl be/scripts/generate_machine.pl
$(PERL)
$(srcdir)
/be/scripts/generate_machine.pl
$(srcdir)
/be/mips/mips_spec.pl
$(srcdir)
/be/mips
$(srcdir)/be/mips/gen_mips_regalloc_if.c $(srcdir)/be/mips/gen_mips_regalloc_if.h
:
\
be/mips/mips_spec.pl be/scripts/generate_machine.pl
$(PERL)
$(srcdir)
/be/scripts/generate_regalloc_if.pl
$(srcdir)
/be/mips/mips_spec.pl
$(srcdir)
/be/mips
# sparc backend
sparc_sources
=
\
...
...
ir/be/bemodule.c
View file @
879c2e5f
...
...
@@ -54,7 +54,6 @@ void be_init_copystat(void);
void
be_init_daemelspill
(
void
);
void
be_init_dbgout
(
void
);
void
be_init_arch_ia32
(
void
);
void
be_init_arch_mips
(
void
);
void
be_init_arch_arm
(
void
);
void
be_init_arch_sparc
(
void
);
void
be_init_arch_amd64
(
void
);
...
...
@@ -131,7 +130,6 @@ void be_init_modules(void)
be_init_stabs
();
be_init_arch_ia32
();
be_init_arch_mips
();
be_init_arch_arm
();
be_init_arch_sparc
();
be_init_arch_amd64
();
...
...
ir/be/mips/bearch_mips.c
deleted
100644 → 0
View file @
6e848d7e
This diff is collapsed.
Click to expand it.
ir/be/mips/bearch_mips.h
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief declarations for the mips backend
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#ifndef FIRM_BE_MIPS_BEARCH_MIPS_H
#define FIRM_BE_MIPS_BEARCH_MIPS_H
#include
"../bearch.h"
typedef
struct
mips_code_gen_t
mips_code_gen_t
;
extern
const
arch_isa_if_t
mips_isa_if
;
int
mips_is_Load
(
const
ir_node
*
node
);
int
mips_is_Store
(
const
ir_node
*
node
);
#endif
ir/be/mips/bearch_mips_t.h
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief datastructures and declarations for the mips backend
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#ifndef FIRM_BE_MIPS_BEARCH_MIPS_T_H
#define FIRM_BE_MIPS_BEARCH_MIPS_T_H
#include
"debug.h"
#include
"irgopt.h"
#include
"bearch_mips.h"
#include
"mips_nodes_attr.h"
#include
"be.h"
#include
"../beemitter.h"
#include
"set.h"
typedef
struct
mips_isa_t
mips_isa_t
;
typedef
struct
mips_transform_env_t
mips_transform_env_t
;
struct
mips_code_gen_t
{
const
arch_code_generator_if_t
*
impl
;
/**< implementation */
ir_graph
*
irg
;
/**< current irg */
set
*
reg_set
;
/**< set to memorize registers for FIRM nodes (e.g. phi) */
mips_isa_t
*
isa
;
/**< the isa instance */
ir_node
**
block_schedule
;
};
struct
mips_isa_t
{
arch_env_t
arch_env
;
/**< must be derived from arch_env_t */
mips_code_gen_t
*
cg
;
};
/**
* this is a struct to minimize the number of parameters
* for transformation walker
*/
struct
mips_transform_env_t
{
dbg_info
*
dbg
;
/**< The node debug info */
ir_graph
*
irg
;
/**< The irg, the node should be created in */
ir_node
*
block
;
/**< The block, the node should belong to */
ir_node
*
irn
;
/**< The irn, to be transformed */
ir_mode
*
mode
;
/**< The mode of the irn */
mips_code_gen_t
*
cg
;
/**< The code generator */
};
#endif
ir/be/mips/mips_emitter.c
deleted
100644 → 0
View file @
6e848d7e
This diff is collapsed.
Click to expand it.
ir/be/mips/mips_emitter.h
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief declarations for the mips assembler emitter
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#ifndef FIRM_BE_MIPS_MIPS_EMITTER_H
#define FIRM_BE_MIPS_MIPS_EMITTER_H
#include
"irnode.h"
#include
"../bearch.h"
#include
"../beemitter.h"
#include
"bearch_mips_t.h"
void
mips_emit_source_register
(
const
ir_node
*
node
,
int
pos
);
void
mips_emit_dest_register
(
const
ir_node
*
node
,
int
pos
);
void
mips_emit_source_register_or_immediate
(
const
ir_node
*
node
,
int
pos
);
void
mips_emit_immediate
(
const
ir_node
*
node
);
void
mips_emit_immediate_suffix
(
const
ir_node
*
node
,
int
pos
);
void
mips_emit_load_store_address
(
const
ir_node
*
node
,
int
pos
);
void
mips_emit_jump_target
(
const
ir_node
*
node
);
void
mips_emit_jump_target_proj
(
const
ir_node
*
node
,
long
pn
);
void
mips_emit_jump_or_fallthrough
(
const
ir_node
*
node
,
long
pn
);
void
mips_register_emitters
(
void
);
ir_node
*
mips_get_jump_block
(
const
ir_node
*
node
,
long
projn
);
/** returns the label used for a block */
const
char
*
mips_get_block_label
(
const
ir_node
*
block
);
/** returns the label for the jumptable */
const
char
*
mips_get_jumptbl_label
(
const
ir_node
*
switchjmp
);
void
mips_gen_routine
(
mips_code_gen_t
*
cg
,
ir_graph
*
irg
);
#endif
ir/be/mips/mips_map_regs.c
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief Register mapping for firm nodes. Stolen from bearch_firm :)
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#include
"config.h"
#include
<stdlib.h>
#include
"mips_map_regs.h"
#include
"mips_new_nodes.h"
/* Mapping to store registers in firm nodes */
struct
mips_irn_reg_assoc
{
const
ir_node
*
irn
;
const
arch_register_t
*
reg
;
};
int
mips_cmp_irn_reg_assoc
(
const
void
*
a
,
const
void
*
b
,
size_t
size
)
{
const
struct
mips_irn_reg_assoc
*
x
=
a
;
const
struct
mips_irn_reg_assoc
*
y
=
b
;
(
void
)
size
;
return
x
->
irn
!=
y
->
irn
;
}
static
struct
mips_irn_reg_assoc
*
get_irn_reg_assoc
(
const
ir_node
*
irn
,
set
*
reg_set
)
{
struct
mips_irn_reg_assoc
templ
;
unsigned
int
hash
;
templ
.
irn
=
irn
;
templ
.
reg
=
NULL
;
hash
=
HASH_PTR
(
irn
);
return
set_insert
(
reg_set
,
&
templ
,
sizeof
(
templ
),
hash
);
}
void
mips_set_firm_reg
(
ir_node
*
irn
,
const
arch_register_t
*
reg
,
set
*
reg_set
)
{
struct
mips_irn_reg_assoc
*
assoc
=
get_irn_reg_assoc
(
irn
,
reg_set
);
assoc
->
reg
=
reg
;
}
const
arch_register_t
*
mips_get_firm_reg
(
const
ir_node
*
irn
,
set
*
reg_set
)
{
struct
mips_irn_reg_assoc
*
assoc
=
get_irn_reg_assoc
(
irn
,
reg_set
);
return
assoc
->
reg
;
}
/**
* Translates the projnum into a "real" argument position for register
* requirements dependend on the predecessor.
*/
long
mips_translate_proj_pos
(
const
ir_node
*
proj
)
{
return
get_Proj_proj
(
proj
);
}
ir/be/mips/mips_map_regs.h
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief mips register allocation interface
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#ifndef FIRM_BE_MIPS_MIPS_MAP_REGS_H
#define FIRM_BE_MIPS_MIPS_MAP_REGS_H
#include
"irnode.h"
#include
"set.h"
#include
"../bearch.h"
#include
"mips_nodes_attr.h"
int
mips_cmp_irn_reg_assoc
(
const
void
*
a
,
const
void
*
b
,
size_t
len
);
void
mips_set_firm_reg
(
ir_node
*
irn
,
const
arch_register_t
*
reg
,
set
*
reg_set
);
const
arch_register_t
*
mips_get_firm_reg
(
const
ir_node
*
irn
,
set
*
reg_set
);
long
mips_translate_proj_pos
(
const
ir_node
*
proj
);
#endif
ir/be/mips/mips_new_nodes.c
deleted
100644 → 0
View file @
6e848d7e
/*
* Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* This file may be distributed and/or modified under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in the
* packaging of this file.
*
* Licensees holding valid libFirm Professional Edition licenses may use
* this file in accordance with the libFirm Commercial License.
* Agreement provided with the Software.
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE.
*/
/**
* @file
* @brief This file implements the creation of the architecture specific firm
* opcodes and the corresponding node constructors for the MIPS
* assembler irg.
* @author Matthias Braun, Mehdi
* @version $Id$
*/
#include
"config.h"
#include
<stdlib.h>
#include
"irprog_t.h"
#include
"irgraph_t.h"
#include
"irnode_t.h"
#include
"irmode_t.h"
#include
"ircons_t.h"
#include
"iropt_t.h"
#include
"irop.h"
#include
"irvrfy_t.h"
#include
"irprintf.h"
#include
"xmalloc.h"
#include
"../bearch.h"
#include
"mips_nodes_attr.h"
#include
"mips_new_nodes.h"
#include
"gen_mips_regalloc_if.h"
/***********************************************************************************
* _ _ _ __
* | | (_) | | / _|
* __| |_ _ _ __ ___ _ __ ___ _ __ _ _ __ | |_ ___ _ __| |_ __ _ ___ ___
* / _` | | | | '_ ` _ \| '_ \ / _ \ '__| | | '_ \| __/ _ \ '__| _/ _` |/ __/ _ \
* | (_| | |_| | | | | | | |_) | __/ | | | | | | || __/ | | || (_| | (_| __/
* \__,_|\__,_|_| |_| |_| .__/ \___|_| |_|_| |_|\__\___|_| |_| \__,_|\___\___|
* | |
* |_|
***********************************************************************************/
/**
* Dumper interface for dumping mips nodes in vcg.
* @param F the output file
* @param n the node to dump
* @param reason indicates which kind of information should be dumped
*/
static
void
mips_dump_node
(
FILE
*
F
,
ir_node
*
n
,
dump_reason_t
reason
)
{
switch
(
reason
)
{
case
dump_node_opcode_txt
:
fprintf
(
F
,
"%s"
,
get_irn_opname
(
n
));
break
;
case
dump_node_mode_txt
:
break
;
case
dump_node_nodeattr_txt
:
if
(
is_mips_Immediate
(
n
))
{
const
mips_immediate_attr_t
*
attr
=
get_mips_immediate_attr_const
(
n
);
switch
(
attr
->
imm_type
)
{
case
MIPS_IMM_CONST
:
fprintf
(
F
,
" %ld "
,
attr
->
val
);
break
;
case
MIPS_IMM_SYMCONST_LO
:
fprintf
(
F
,
" lo(%s"
,
get_entity_ld_name
(
attr
->
entity
));
if
(
attr
->
val
!=
0
)
{
fprintf
(
F
,
"%+ld"
,
attr
->
val
);
}
fprintf
(
F
,
") "
);
break
;
case
MIPS_IMM_SYMCONST_HI
:
fprintf
(
F
,
" hi(%s"
,
get_entity_ld_name
(
attr
->
entity
));
if
(
attr
->
val
!=
0
)
{
fprintf
(
F
,
"%+ld"
,
attr
->
val
);
}
fprintf
(
F
,
") "
);
break
;
default:
fprintf
(
F
,
" INVALID "
);
break
;
}
}
break
;
case
dump_node_info_txt
:
arch_dump_reqs_and_registers
(
F
,
n
);
break
;
}
}
/***************************************************************************************************
* _ _ _ __ _ _ _ _
* | | | | | | / / | | | | | | | |
* __ _| |_| |_ _ __ ___ ___| |_ / /_ _ ___| |_ _ __ ___ ___| |_| |__ ___ __| |___
* / _` | __| __| '__| / __|/ _ \ __| / / _` |/ _ \ __| | '_ ` _ \ / _ \ __| '_ \ / _ \ / _` / __|
* | (_| | |_| |_| | \__ \ __/ |_ / / (_| | __/ |_ | | | | | | __/ |_| | | | (_) | (_| \__ \
* \__,_|\__|\__|_| |___/\___|\__/_/ \__, |\___|\__| |_| |_| |_|\___|\__|_| |_|\___/ \__,_|___/
* __/ |
* |___/
***************************************************************************************************/
mips_attr_t
*
get_mips_attr
(
ir_node
*
node
)
{
assert
(
is_mips_irn
(
node
)
&&
"need mips node to get attributes"
);
return
(
mips_attr_t
*
)
get_irn_generic_attr
(
node
);
}
const
mips_attr_t
*
get_mips_attr_const
(
const
ir_node
*
node
)
{
assert
(
is_mips_irn
(
node
)
&&
"need mips node to get attributes"
);
return
get_irn_generic_attr_const
(
node
);
}
const
mips_immediate_attr_t
*
get_mips_immediate_attr_const
(
const
ir_node
*
node
)
{
assert
(
is_mips_irn
(
node
)
&&
"need mips node to get attributes"
);
return
get_irn_generic_attr_const
(
node
);
}
const
mips_load_store_attr_t
*
get_mips_load_store_attr_const
(
const
ir_node
*
node
)
{
assert
(
is_mips_irn
(
node
)
&&
"need mips node to get attributes"
);
return
get_irn_generic_attr_const
(
node
);
}
/**
* Returns the argument register requirements of a mips node.
*/
const
arch_register_req_t
**
get_mips_in_req_all
(
const
ir_node
*
node
)
{
const
mips_attr_t
*
attr
=
get_mips_attr_const
(
node
);
return
attr
->
in_req
;
}
/**
* Returns the argument register requirement at position pos of an mips node.
*/
const
arch_register_req_t
*
get_mips_in_req
(
const
ir_node
*
node
,
int
pos
)
{
const
mips_attr_t
*
attr
=
get_mips_attr_const
(
node
);
return
attr
->
in_req
[
pos
];
}
/**
* Sets the IN register requirements at position pos.
*/
void
set_mips_req_in
(
ir_node
*
node
,
const
arch_register_req_t
*
req
,
int
pos
)
{
mips_attr_t
*
attr
=
get_mips_attr
(
node
);
attr
->
in_req
[
pos
]
=
req
;
}
/**
* Initializes the nodes attributes.
*/
static
void
init_mips_attributes
(
ir_node
*
node
,
arch_irn_flags_t
flags
,
const
arch_register_req_t
**
in_reqs
,
const
be_execution_unit_t
***
execution_units
,
int
n_res
)
{
ir_graph
*
irg
=
get_irn_irg
(
node
);
struct
obstack
*
obst
=
get_irg_obstack
(
irg
);
mips_attr_t
*
attr
=
get_mips_attr
(
node
);
backend_info_t
*
info
;
(
void
)
execution_units
;
arch_irn_set_flags
(
node
,
flags
);
attr
->
in_req
=
in_reqs
;
info
=
be_get_info
(
node
);
info
->
out_infos
=
NEW_ARR_D
(
reg_out_info_t
,
obst
,
n_res
);
memset
(
info
->
out_infos
,
0
,
n_res
*
sizeof
(
info
->
out_infos
[
0
]));
}
static
void
init_mips_immediate_attributes
(
ir_node
*
node
,
mips_immediate_type_t
type
,
ir_entity
*
entity
,
long
val
)
{
mips_immediate_attr_t
*
attr
=
get_irn_generic_attr
(
node
);
attr
->
imm_type
=
type
;
attr
->
entity
=
entity
;
attr
->
val
=
val
;
}
static
void
init_mips_load_store_attributes
(
ir_node
*
node
,
ir_entity
*
entity
,
long
offset
)
{
mips_load_store_attr_t
*
attr
=
get_irn_generic_attr
(
node
);
attr
->
stack_entity
=
entity
;
attr
->
offset
=
offset
;
}
static
int
mips_compare_nodes_attr
(
ir_node
*
node_a
,
ir_node
*
node_b
)
{
const
mips_attr_t
*
a
=
get_mips_attr_const
(
node_a
);
const
mips_attr_t
*
b
=
get_mips_attr_const
(
node_b
);
if
(
a
->
switch_default_pn
!=
b
->
switch_default_pn
)
return
1
;
return
0
;
}
static
int
mips_compare_immediate_attr
(
ir_node
*
node_a
,
ir_node
*
node_b
)
{
const
mips_immediate_attr_t
*
a
=
get_mips_immediate_attr_const
(
node_a
);
const
mips_immediate_attr_t
*
b
=
get_mips_immediate_attr_const
(
node_b
);
if
(
a
->
val
!=
b
->
val
)
return
1
;
return
0
;
}
static
int
mips_compare_load_store_attr
(
ir_node
*
node_a
,
ir_node
*
node_b
)
{
const
mips_load_store_attr_t
*
a
=
get_mips_load_store_attr_const
(
node_a
);
const
mips_load_store_attr_t
*
b
=
get_mips_load_store_attr_const
(
node_b
);
if
(
mips_compare_nodes_attr
(
node_a
,
node_b
))
return
1
;
if
(
a
->
stack_entity
!=
b
->
stack_entity
)
return
1
;
if
(
a
->
offset
!=