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
3cda66b8
Commit
3cda66b8
authored
Jul 15, 2010
by
Matthias Braun
Browse files
remove outdated/wrong comments from backend specs
[r27746]
parent
29464928
Changes
4
Hide whitespace changes
Inline
Side-by-side
ir/be/TEMPLATE/TEMPLATE_spec.pl
View file @
3cda66b8
...
@@ -17,8 +17,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
...
@@ -17,8 +17,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
# %nodes = (
# %nodes = (
#
#
# <op-name> => {
# <op-name> => {
# op_flags => "N|L|C|X|I|F|Y|H|c|K", # optional
# irn_flags => "R|N|I" # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# args => [
# args => [
...
@@ -45,25 +43,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
...
@@ -45,25 +43,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
#
#
# ); # close the %nodes initializer
# ); # close the %nodes initializer
# op_flags: flags for the operation, OPTIONAL (default is "N")
# the op_flags correspond to the firm irop_flags:
# N irop_flag_none
# L irop_flag_labeled
# C irop_flag_commutative
# X irop_flag_cfopcode
# I irop_flag_ip_cfopcode
# F irop_flag_fragile
# Y irop_flag_forking
# H irop_flag_highlevel
# c irop_flag_constlike
# K irop_flag_keep
#
# irn_flags: special node flags, OPTIONAL (default is 0)
# following irn_flags are supported:
# R rematerializeable
# N not spillable
# I ignore for register allocation
#
# state: state of the operation, OPTIONAL (default is "floats")
# state: state of the operation, OPTIONAL (default is "floats")
#
#
# arity: arity of the operation, MUST NOT BE OMITTED
# arity: arity of the operation, MUST NOT BE OMITTED
...
@@ -80,22 +59,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
...
@@ -80,22 +59,6 @@ $mode_fp = "mode_E"; # mode used by floatingpoint registers
#
#
# comment: OPTIONAL comment for the node constructor
# comment: OPTIONAL comment for the node constructor
#
#
# rd_constructor: for every operation there will be a
# new_rd_<arch>_<op-name> function with the arguments from above
# which creates the ir_node corresponding to the defined operation
# you can either put the complete source code of this function here
#
# This key is OPTIONAL. If omitted, the following constructor will
# be created:
# if (!op_<arch>_<op-name>) assert(0);
# for i = 1 to arity
# set in[i] = op_i
# done
# res = new_ir_node(db, irg, block, op_<arch>_<op-name>, mode, arity, in)
# return res
#
# NOTE: rd_constructor and args are only optional if and only if arity is 0,1,2 or 3
# register types:
# register types:
# 0 - no special type
# 0 - no special type
# 1 - caller save (register must be saved by the caller of a function)
# 1 - caller save (register must be saved by the caller of a function)
...
...
ir/be/amd64/amd64_spec.pl
View file @
3cda66b8
...
@@ -11,8 +11,6 @@ $arch = "amd64";
...
@@ -11,8 +11,6 @@ $arch = "amd64";
# %nodes = (
# %nodes = (
#
#
# <op-name> => {
# <op-name> => {
# op_flags => "N|L|C|X|I|F|Y|H|c|K", # optional
# irn_flags => "R|N|I" # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# args => [
# args => [
...
@@ -39,25 +37,6 @@ $arch = "amd64";
...
@@ -39,25 +37,6 @@ $arch = "amd64";
#
#
# ); # close the %nodes initializer
# ); # close the %nodes initializer
# op_flags: flags for the operation, OPTIONAL (default is "N")
# the op_flags correspond to the firm irop_flags:
# N irop_flag_none
# L irop_flag_labeled
# C irop_flag_commutative
# X irop_flag_cfopcode
# I irop_flag_ip_cfopcode
# F irop_flag_fragile
# Y irop_flag_forking
# H irop_flag_highlevel
# c irop_flag_constlike
# K irop_flag_keep
#
# irn_flags: special node flags, OPTIONAL (default is 0)
# following irn_flags are supported:
# R rematerializeable
# N not spillable
# I ignore for register allocation
#
# state: state of the operation, OPTIONAL (default is "floats")
# state: state of the operation, OPTIONAL (default is "floats")
#
#
# arity: arity of the operation, MUST NOT BE OMITTED
# arity: arity of the operation, MUST NOT BE OMITTED
...
@@ -74,22 +53,6 @@ $arch = "amd64";
...
@@ -74,22 +53,6 @@ $arch = "amd64";
#
#
# comment: OPTIONAL comment for the node constructor
# comment: OPTIONAL comment for the node constructor
#
#
# rd_constructor: for every operation there will be a
# new_rd_<arch>_<op-name> function with the arguments from above
# which creates the ir_node corresponding to the defined operation
# you can either put the complete source code of this function here
#
# This key is OPTIONAL. If omitted, the following constructor will
# be created:
# if (!op_<arch>_<op-name>) assert(0);
# for i = 1 to arity
# set in[i] = op_i
# done
# res = new_ir_node(db, irg, block, op_<arch>_<op-name>, mode, arity, in)
# return res
#
# NOTE: rd_constructor and args are only optional if and only if arity is 0,1,2 or 3
# register types:
# register types:
# 0 - no special type
# 0 - no special type
# 1 - caller save (register must be saved by the caller of a function)
# 1 - caller save (register must be saved by the caller of a function)
...
...
ir/be/ia32/ia32_spec.pl
View file @
3cda66b8
...
@@ -4,144 +4,76 @@
...
@@ -4,144 +4,76 @@
$arch
=
"
ia32
";
$arch
=
"
ia32
";
# The node description is done as a perl hash initializer with the
# following structure:
#
# %nodes = (
#
# <op-name> => {
# op_flags => "N|L|C|X|I|F|Y|H|c|K|n",
# irn_flags => "R|N"
# arity => "0|1|2|3 ... |variable|dynamic|any",
# state => "floats|pinned|mem_pinned|exc_pinned",
# args => [
# { type => "type 1", name => "name 1" },
# { type => "type 2", name => "name 2" },
# ...
# ],
# comment => "any comment for constructor",
# reg_req => { in => [ "reg_class|register" ], out => [ "reg_class|register|in_rX" ] },
# cmp_attr => "c source code for comparing node attributes",
# outs => { "out1", "out2" } # optional, creates pn_op_out1, ... consts
# ins => { "in1", "in2" } # optional, creates n_op_in1, ... consts
# mode => "mode_Iu" # optional, predefines the mode
# emit => "emit code with templates",
# attr => "additional attribute arguments for constructor",
# init_attr => "emit attribute initialization template",
# hash_func => "name of the hash function for this operation",
# latency => "latency of this operation (can be float)"
# attr_type => "name of the attribute struct",
# modified_flags => [ "CF", ... ] # optional, list of modified flags
# },
#
# ... # (all nodes you need to describe)
#
# ); # close the %nodes initializer
# state: state of the operation, OPTIONAL (default is "floats")
#
# arity: arity of the operation, MUST NOT BE OMITTED
#
# args: the OPTIONAL arguments of the node constructor (debug, irg and block
# are always the first 3 arguments and are always autmatically
# created)
# If this key is missing the following arguments will be created:
# for i = 1 .. arity: ir_node *op_i
# ir_mode *mode
#
# outs: if a node defines more than one output, the names of the projections
# nodes having outs having automatically the mode mode_T
# example: [ "frame", "stack", "M" ]
#
# comment: OPTIONAL comment for the node constructor
#
# rd_constructor: for every operation there will be a
# new_rd_<arch>_<op-name> function with the arguments from above
# which creates the ir_node corresponding to the defined operation
# you can either put the complete source code of this function here
#
# This key is OPTIONAL. If omitted, the following constructor will
# be created:
# if (!op_<arch>_<op-name>) assert(0);
# for i = 1 to arity
# set in[i] = op_i
# done
# res = new_ir_node(db, irg, block, op_<arch>_<op-name>, mode, arity, in)
# return res
#
# NOTE: rd_constructor and args are only optional if and only if arity is 0,1,2 or 3
#
# register types:
# register types:
# 0 -
no special type
$normal
=
0
;
#
no special type
# 1 -
caller save (register must be saved by the caller of a function)
$caller_save
=
1
;
#
caller save (register must be saved by the caller of a function)
# 2 -
callee save (register must be saved by the called function)
$callee_save
=
2
;
#
callee save (register must be saved by the called function)
# 4 -
ignore (do not
automatically
assign this register)
$ignore
=
4
;
#
ignore (do not assign this register)
# 8 -
emitter can choose an arbitrary register of this class
$arbitrary
=
8
;
#
emitter can choose an arbitrary register of this class
# 16 -
the register is a virtual one
$virtual
=
16
;
#
the register is a virtual one
# 32 -
register represents a state
$state
=
32
;
#
register represents a state
# NOTE: Last entry of each class is the largest Firm-Mode a register can hold
# NOTE: Last entry of each class is the largest Firm-Mode a register can hold
%reg_classes
=
(
%reg_classes
=
(
gp
=>
[
gp
=>
[
{
name
=>
"
edx
",
type
=>
1
},
{
name
=>
"
edx
",
type
=>
$caller_save
},
{
name
=>
"
ecx
",
type
=>
1
},
{
name
=>
"
ecx
",
type
=>
$caller_save
},
{
name
=>
"
eax
",
type
=>
1
},
{
name
=>
"
eax
",
type
=>
$caller_save
},
{
name
=>
"
ebx
",
type
=>
2
},
{
name
=>
"
ebx
",
type
=>
$callee_save
},
{
name
=>
"
esi
",
type
=>
2
},
{
name
=>
"
esi
",
type
=>
$callee_save
},
{
name
=>
"
edi
",
type
=>
2
},
{
name
=>
"
edi
",
type
=>
$callee_save
},
{
name
=>
"
ebp
",
type
=>
2
},
{
name
=>
"
ebp
",
type
=>
$callee_save
},
{
name
=>
"
esp
",
type
=>
4
},
{
name
=>
"
esp
",
type
=>
$ignore
},
{
name
=>
"
gp_NOREG
",
type
=>
4
|
8
|
16
},
# we need a dummy register for NoReg nodes
{
name
=>
"
gp_NOREG
",
type
=>
$ignore
|
$arbitrary
|
$virtual
},
# we need a dummy register for NoReg nodes
{
mode
=>
"
mode_Iu
"
}
{
mode
=>
"
mode_Iu
"
}
],
],
mmx
=>
[
mmx
=>
[
{
name
=>
"
mm0
",
type
=>
4
},
{
name
=>
"
mm0
",
type
=>
$ignore
},
{
name
=>
"
mm1
",
type
=>
4
},
{
name
=>
"
mm1
",
type
=>
$ignore
},
{
name
=>
"
mm2
",
type
=>
4
},
{
name
=>
"
mm2
",
type
=>
$ignore
},
{
name
=>
"
mm3
",
type
=>
4
},
{
name
=>
"
mm3
",
type
=>
$ignore
},
{
name
=>
"
mm4
",
type
=>
4
},
{
name
=>
"
mm4
",
type
=>
$ignore
},
{
name
=>
"
mm5
",
type
=>
4
},
{
name
=>
"
mm5
",
type
=>
$ignore
},
{
name
=>
"
mm6
",
type
=>
4
},
{
name
=>
"
mm6
",
type
=>
$ignore
},
{
name
=>
"
mm7
",
type
=>
4
},
{
name
=>
"
mm7
",
type
=>
$ignore
},
{
mode
=>
"
mode_E
",
flags
=>
"
manual_ra
"
}
{
mode
=>
"
mode_E
",
flags
=>
"
manual_ra
"
}
],
],
xmm
=>
[
xmm
=>
[
{
name
=>
"
xmm0
",
type
=>
1
},
{
name
=>
"
xmm0
",
type
=>
$caller_save
},
{
name
=>
"
xmm1
",
type
=>
1
},
{
name
=>
"
xmm1
",
type
=>
$caller_save
},
{
name
=>
"
xmm2
",
type
=>
1
},
{
name
=>
"
xmm2
",
type
=>
$caller_save
},
{
name
=>
"
xmm3
",
type
=>
1
},
{
name
=>
"
xmm3
",
type
=>
$caller_save
},
{
name
=>
"
xmm4
",
type
=>
1
},
{
name
=>
"
xmm4
",
type
=>
$caller_save
},
{
name
=>
"
xmm5
",
type
=>
1
},
{
name
=>
"
xmm5
",
type
=>
$caller_save
},
{
name
=>
"
xmm6
",
type
=>
1
},
{
name
=>
"
xmm6
",
type
=>
$caller_save
},
{
name
=>
"
xmm7
",
type
=>
1
},
{
name
=>
"
xmm7
",
type
=>
$caller_save
},
{
name
=>
"
xmm_NOREG
",
type
=>
4
|
16
},
# we need a dummy register for NoReg nodes
{
name
=>
"
xmm_NOREG
",
type
=>
$ignore
|
$virtual
},
# we need a dummy register for NoReg nodes
{
mode
=>
"
mode_E
"
}
{
mode
=>
"
mode_E
"
}
],
],
vfp
=>
[
vfp
=>
[
{
name
=>
"
vf0
",
type
=>
1
},
{
name
=>
"
vf0
",
type
=>
$caller_save
},
{
name
=>
"
vf1
",
type
=>
1
},
{
name
=>
"
vf1
",
type
=>
$caller_save
},
{
name
=>
"
vf2
",
type
=>
1
},
{
name
=>
"
vf2
",
type
=>
$caller_save
},
{
name
=>
"
vf3
",
type
=>
1
},
{
name
=>
"
vf3
",
type
=>
$caller_save
},
{
name
=>
"
vf4
",
type
=>
1
},
{
name
=>
"
vf4
",
type
=>
$caller_save
},
{
name
=>
"
vf5
",
type
=>
1
},
{
name
=>
"
vf5
",
type
=>
$caller_save
},
{
name
=>
"
vf6
",
type
=>
1
},
{
name
=>
"
vf6
",
type
=>
$caller_save
},
{
name
=>
"
vf7
",
type
=>
1
},
{
name
=>
"
vf7
",
type
=>
$caller_save
},
{
name
=>
"
vfp_NOREG
",
type
=>
4
|
8
|
16
},
# we need a dummy register for NoReg nodes
{
name
=>
"
vfp_NOREG
",
type
=>
$ignore
|
$arbitrary
|
$virtual
},
# we need a dummy register for NoReg nodes
{
mode
=>
"
mode_E
"
}
{
mode
=>
"
mode_E
"
}
],
],
st
=>
[
st
=>
[
{
name
=>
"
st0
",
realname
=>
"
st
",
type
=>
4
},
{
name
=>
"
st0
",
realname
=>
"
st
",
type
=>
$ignore
},
{
name
=>
"
st1
",
realname
=>
"
st(1)
",
type
=>
4
},
{
name
=>
"
st1
",
realname
=>
"
st(1)
",
type
=>
$ignore
},
{
name
=>
"
st2
",
realname
=>
"
st(2)
",
type
=>
4
},
{
name
=>
"
st2
",
realname
=>
"
st(2)
",
type
=>
$ignore
},
{
name
=>
"
st3
",
realname
=>
"
st(3)
",
type
=>
4
},
{
name
=>
"
st3
",
realname
=>
"
st(3)
",
type
=>
$ignore
},
{
name
=>
"
st4
",
realname
=>
"
st(4)
",
type
=>
4
},
{
name
=>
"
st4
",
realname
=>
"
st(4)
",
type
=>
$ignore
},
{
name
=>
"
st5
",
realname
=>
"
st(5)
",
type
=>
4
},
{
name
=>
"
st5
",
realname
=>
"
st(5)
",
type
=>
$ignore
},
{
name
=>
"
st6
",
realname
=>
"
st(6)
",
type
=>
4
},
{
name
=>
"
st6
",
realname
=>
"
st(6)
",
type
=>
$ignore
},
{
name
=>
"
st7
",
realname
=>
"
st(7)
",
type
=>
4
},
{
name
=>
"
st7
",
realname
=>
"
st(7)
",
type
=>
$ignore
},
{
mode
=>
"
mode_E
",
flags
=>
"
manual_ra
"
}
{
mode
=>
"
mode_E
",
flags
=>
"
manual_ra
"
}
],
],
fp_cw
=>
[
# the floating point control word
fp_cw
=>
[
# the floating point control word
{
name
=>
"
fpcw
",
type
=>
4
|
32
},
{
name
=>
"
fpcw
",
type
=>
$ignore
|
$state
},
{
mode
=>
"
mode_fpcw
",
flags
=>
"
manual_ra|state
"
}
{
mode
=>
"
mode_fpcw
",
flags
=>
"
manual_ra|state
"
}
],
],
flags
=>
[
flags
=>
[
...
...
ir/be/sparc/sparc_spec.pl
View file @
3cda66b8
...
@@ -13,8 +13,6 @@ $mode_fp = "mode_D";
...
@@ -13,8 +13,6 @@ $mode_fp = "mode_D";
# %nodes = (
# %nodes = (
#
#
# <op-name> => {
# <op-name> => {
# op_flags => "N|L|C|X|I|F|Y|H|c|K", # optional
# irn_flags => "R|N|I" # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# arity => "0|1|2|3 ... |variable|dynamic|any", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# state => "floats|pinned|mem_pinned|exc_pinned", # optional
# args => [
# args => [
...
@@ -57,22 +55,6 @@ $mode_fp = "mode_D";
...
@@ -57,22 +55,6 @@ $mode_fp = "mode_D";
#
#
# comment: OPTIONAL comment for the node constructor
# comment: OPTIONAL comment for the node constructor
#
#
# rd_constructor: for every operation there will be a
# new_rd_<arch>_<op-name> function with the arguments from above
# which creates the ir_node corresponding to the defined operation
# you can either put the complete source code of this function here
#
# This key is OPTIONAL. If omitted, the following constructor will
# be created:
# if (!op_<arch>_<op-name>) assert(0);
# for i = 1 to arity
# set in[i] = op_i
# done
# res = new_ir_node(db, irg, block, op_<arch>_<op-name>, mode, arity, in)
# return res
#
# NOTE: rd_constructor and args are only optional if and only if arity is 0,1,2 or 3
# register types:
# register types:
# 0 - no special type
# 0 - no special type
# 1 - caller save (register must be saved by the caller of a function)
# 1 - caller save (register must be saved by the caller of a function)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment