Commit 3cda66b8 authored by Matthias Braun's avatar Matthias Braun
Browse files

remove outdated/wrong comments from backend specs

[r27746]
parent 29464928
...@@ -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)
......
...@@ -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)
......
...@@ -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 => [
......
...@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment