Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
0e9414fd
Commit
0e9414fd
authored
Aug 27, 1992
by
Michael Meissner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allocate enough space for attr_printf; Use obstack_alloc instead of xmalloc.
From-SVN: r1974
parent
8696da34
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
25 deletions
+35
-25
gcc/genattrtab.c
+35
-25
No files found.
gcc/genattrtab.c
View file @
0e9414fd
...
...
@@ -118,6 +118,9 @@ extern rtx read_rtx ();
static
void
fatal
();
void
fancy_abort
();
/* enough space to reserve for printing out ints */
#define MAX_DIGITS (HOST_BITS_PER_INT * 3 / 10 + 3)
/* Define structures used to record attributes and values. */
/* As each DEFINE_INSN, DEFINE_PEEPHOLE, or DEFINE_ASM_ATTRIBUTES is
...
...
@@ -373,6 +376,9 @@ static void extend_range ();
char
*
xrealloc
();
char
*
xmalloc
();
static
void
fatal
();
#define oballoc(size) obstack_alloc (hash_obstack, size)
/* Hash table for sharing RTL and strings. */
...
...
@@ -1231,7 +1237,7 @@ convert_const_symbol_ref (exp, attr)
char
*
p
,
*
string
;
rtx
value
;
string
=
p
=
(
char
*
)
xm
alloc
(
2
string
=
p
=
(
char
*
)
ob
alloc
(
2
+
strlen
(
attr
->
name
)
+
strlen
(
XSTR
(
av
->
value
,
0
)));
strcpy
(
p
,
attr
->
name
);
...
...
@@ -1378,7 +1384,7 @@ get_attr_value (value, attr, insn_code)
||
insn_alternatives
[
av
->
first_insn
->
insn_code
]))
return
av
;
av
=
(
struct
attr_value
*
)
xm
alloc
(
sizeof
(
struct
attr_value
));
av
=
(
struct
attr_value
*
)
ob
alloc
(
sizeof
(
struct
attr_value
));
av
->
value
=
value
;
av
->
next
=
attr
->
first_value
;
attr
->
first_value
=
av
;
...
...
@@ -1455,7 +1461,8 @@ expand_delays ()
newexp
=
attr_rtx
(
IF_THEN_ELSE
,
condexp
,
make_numeric_value
(
1
),
make_numeric_value
(
0
));
p
=
attr_printf
(
13
,
"*delay_%d_%d"
,
delay
->
num
,
i
/
3
);
p
=
attr_printf
(
sizeof
(
"*delay__"
)
+
MAX_DIGITS
*
2
,
"*delay_%d_%d"
,
delay
->
num
,
i
/
3
);
make_internal_attr
(
p
,
newexp
,
1
);
if
(
have_annul_true
)
...
...
@@ -1465,7 +1472,8 @@ expand_delays ()
newexp
=
attr_rtx
(
IF_THEN_ELSE
,
condexp
,
make_numeric_value
(
1
),
make_numeric_value
(
0
));
p
=
attr_printf
(
18
,
"*annul_true_%d_%d"
,
delay
->
num
,
i
/
3
);
p
=
attr_printf
(
sizeof
(
"*annul_true__"
)
+
MAX_DIGITS
*
2
,
"*annul_true_%d_%d"
,
delay
->
num
,
i
/
3
);
make_internal_attr
(
p
,
newexp
,
1
);
}
...
...
@@ -1476,7 +1484,8 @@ expand_delays ()
newexp
=
attr_rtx
(
IF_THEN_ELSE
,
condexp
,
make_numeric_value
(
1
),
make_numeric_value
(
0
));
p
=
attr_printf
(
18
,
"*annul_false_%d_%d"
,
delay
->
num
,
i
/
3
);
p
=
attr_printf
(
sizeof
(
"*annul_false__"
)
+
MAX_DIGITS
*
2
,
"*annul_false_%d_%d"
,
delay
->
num
,
i
/
3
);
make_internal_attr
(
p
,
newexp
,
1
);
}
}
...
...
@@ -1735,8 +1744,8 @@ expand_units ()
!=
unit
->
issue_delay
.
max
);
if
(
unit
->
needs_conflict_function
)
{
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
11
,
"*%s_cost_%d"
,
unit
->
name
,
op
->
num
);
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
sizeof
(
"*_cost_"
)
+
MAX_DIGITS
,
"*%s_cost_%d"
,
unit
->
name
,
op
->
num
);
make_internal_attr
(
str
,
issue_exp
,
1
);
}
...
...
@@ -1939,8 +1948,8 @@ expand_units ()
}
/* Make an attribute for use in the blockage function. */
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
12
,
"*%s_block_%d"
,
unit
->
name
,
op
->
num
);
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
sizeof
(
"*_block_"
)
+
MAX_DIGITS
,
"*%s_block_%d"
,
unit
->
name
,
op
->
num
);
make_internal_attr
(
str
,
blockage
,
1
);
}
...
...
@@ -1969,13 +1978,13 @@ expand_units ()
newexp
=
operate_exp
(
RANGE_OP
,
min_blockage
,
max_blockage
);
newexp
=
simplify_knowing
(
newexp
,
unit
->
condexp
);
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
20
,
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
sizeof
(
"*_unit_blockage_range"
)
,
"*%s_unit_blockage_range"
,
unit
->
name
);
make_internal_attr
(
str
,
newexp
,
4
);
}
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
20
,
"*%s_unit_ready_cost"
,
unit
->
name
);
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
sizeof
(
"*_unit_ready_cost"
)
,
"*%s_unit_ready_cost"
,
unit
->
name
);
}
else
str
=
"*result_ready_cost"
;
...
...
@@ -2016,7 +2025,8 @@ expand_units ()
}
/* Simplifying caseexp with simplify_by_exploding doesn't win. */
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
8
,
"*%s_cases"
,
unit
->
name
);
str
=
attr_printf
(
strlen
(
unit
->
name
)
+
sizeof
(
"*_cases"
),
"*%s_cases"
,
unit
->
name
);
make_internal_attr
(
str
,
caseexp
,
1
);
}
}
...
...
@@ -2064,7 +2074,7 @@ encode_units_mask (x)
;
else
j
=
~
i
;
return
attr_rtx
(
CONST_STRING
,
attr_printf
(
4
,
"%d"
,
j
));
return
attr_rtx
(
CONST_STRING
,
attr_printf
(
MAX_DIGITS
,
"%d"
,
j
));
case
REG
:
case
QUEUED
:
...
...
@@ -2135,7 +2145,7 @@ fill_attr (attr)
else
av
=
get_attr_value
(
value
,
attr
,
id
->
insn_code
);
ie
=
(
struct
insn_ent
*
)
xm
alloc
(
sizeof
(
struct
insn_ent
));
ie
=
(
struct
insn_ent
*
)
ob
alloc
(
sizeof
(
struct
insn_ent
));
ie
->
insn_code
=
id
->
insn_code
;
ie
->
insn_index
=
id
->
insn_code
;
insert_insn_ent
(
av
,
ie
);
...
...
@@ -2263,7 +2273,7 @@ make_length_attrs ()
no_address_fn
[
i
],
address_fn
[
i
]),
new_attr
,
ie
->
insn_code
);
new_ie
=
(
struct
insn_ent
*
)
xm
alloc
(
sizeof
(
struct
insn_ent
));
new_ie
=
(
struct
insn_ent
*
)
ob
alloc
(
sizeof
(
struct
insn_ent
));
new_ie
->
insn_code
=
ie
->
insn_code
;
new_ie
->
insn_index
=
ie
->
insn_index
;
insert_insn_ent
(
new_av
,
new_ie
);
...
...
@@ -3926,7 +3936,7 @@ gen_attr (exp)
name_ptr
=
XSTR
(
exp
,
1
);
while
((
p
=
next_comma_elt
(
&
name_ptr
))
!=
NULL
)
{
av
=
(
struct
attr_value
*
)
xm
alloc
(
sizeof
(
struct
attr_value
));
av
=
(
struct
attr_value
*
)
ob
alloc
(
sizeof
(
struct
attr_value
));
av
->
value
=
attr_rtx
(
CONST_STRING
,
p
);
av
->
next
=
attr
->
first_value
;
attr
->
first_value
=
av
;
...
...
@@ -4066,7 +4076,7 @@ gen_insn (exp)
{
struct
insn_def
*
id
;
id
=
(
struct
insn_def
*
)
xm
alloc
(
sizeof
(
struct
insn_def
));
id
=
(
struct
insn_def
*
)
ob
alloc
(
sizeof
(
struct
insn_def
));
id
->
next
=
defs
;
defs
=
id
;
id
->
def
=
exp
;
...
...
@@ -4122,7 +4132,7 @@ gen_delay (def)
have_annul_false
=
1
;
}
delay
=
(
struct
delay_desc
*
)
xm
alloc
(
sizeof
(
struct
delay_desc
));
delay
=
(
struct
delay_desc
*
)
ob
alloc
(
sizeof
(
struct
delay_desc
));
delay
->
def
=
def
;
delay
->
num
=
++
num_delays
;
delay
->
next
=
delays
;
...
...
@@ -4163,7 +4173,7 @@ gen_unit (def)
if
(
unit
==
0
)
{
unit
=
(
struct
function_unit
*
)
xm
alloc
(
sizeof
(
struct
function_unit
));
unit
=
(
struct
function_unit
*
)
ob
alloc
(
sizeof
(
struct
function_unit
));
unit
->
name
=
name
;
unit
->
multiplicity
=
multiplicity
;
unit
->
simultaneity
=
simultaneity
;
...
...
@@ -4177,7 +4187,7 @@ gen_unit (def)
}
/* Make a new operation class structure entry and initialize it. */
op
=
(
struct
function_unit_op
*
)
xm
alloc
(
sizeof
(
struct
function_unit_op
));
op
=
(
struct
function_unit_op
*
)
ob
alloc
(
sizeof
(
struct
function_unit_op
));
op
->
condexp
=
condexp
;
op
->
num
=
unit
->
num_opclasses
++
;
op
->
ready
=
ready_cost
;
...
...
@@ -5211,7 +5221,7 @@ find_attr (name, create)
if
(
!
create
)
return
NULL
;
attr
=
(
struct
attr_desc
*
)
xm
alloc
(
sizeof
(
struct
attr_desc
));
attr
=
(
struct
attr_desc
*
)
ob
alloc
(
sizeof
(
struct
attr_desc
));
attr
->
name
=
attr_string
(
name
,
strlen
(
name
));
attr
->
first_value
=
attr
->
default_val
=
NULL
;
attr
->
is_numeric
=
attr
->
negative_ok
=
attr
->
is_const
=
attr
->
is_special
=
0
;
...
...
@@ -5302,7 +5312,7 @@ make_numeric_value (n)
if
(
n
<
20
&&
int_values
[
n
])
return
int_values
[
n
];
p
=
attr_printf
(
(
n
<
1000
?
4
:
HOST_BITS_PER_INT
*
3
/
10
+
3
)
,
"%d"
,
n
);
p
=
attr_printf
(
MAX_DIGITS
,
"%d"
,
n
);
exp
=
attr_rtx
(
CONST_STRING
,
p
);
if
(
n
<
20
)
...
...
@@ -5508,13 +5518,13 @@ from the machine description file `md'. */\n\n");
printf
(
"#define operands recog_operand
\n\n
"
);
/* Make `insn_alternatives'. */
insn_alternatives
=
(
int
*
)
xm
alloc
(
insn_code_number
*
sizeof
(
int
));
insn_alternatives
=
(
int
*
)
ob
alloc
(
insn_code_number
*
sizeof
(
int
));
for
(
id
=
defs
;
id
;
id
=
id
->
next
)
if
(
id
->
insn_code
>=
0
)
insn_alternatives
[
id
->
insn_code
]
=
(
1
<<
id
->
num_alternatives
)
-
1
;
/* Make `insn_n_alternatives'. */
insn_n_alternatives
=
(
int
*
)
xm
alloc
(
insn_code_number
*
sizeof
(
int
));
insn_n_alternatives
=
(
int
*
)
ob
alloc
(
insn_code_number
*
sizeof
(
int
));
for
(
id
=
defs
;
id
;
id
=
id
->
next
)
if
(
id
->
insn_code
>=
0
)
insn_n_alternatives
[
id
->
insn_code
]
=
id
->
num_alternatives
;
...
...
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