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
497d3834
Commit
497d3834
authored
Nov 20, 2009
by
Michael Meissner
Committed by
Michael Meissner
Nov 20, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Undo part of 2009-10-23 change
From-SVN: r154380
parent
2282976b
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
92 deletions
+19
-92
gcc/ChangeLog
+9
-0
gcc/config/rs6000/rs6000.c
+5
-72
gcc/testsuite/ChangeLog
+5
-0
gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c
+0
-20
No files found.
gcc/ChangeLog
View file @
497d3834
2009
-
11
-
20
Michael
Meissner
<
meissner
@
linux
.
vnet
.
ibm
.
com
>
PR
target
/
41787
*
config
/
rs6000
/
rs6000
.
c
(
struct
machine_function
):
Revert
2009
-
10
-
23
change
to
set
VRSAVE
to
non
-
0
if
we
use
VSX
.
(
rs6000_expand_to_rtl_hook
):
Ditto
.
(
rs6000_check_vector_mode
):
Ditto
.
(
compute_vrsave_mask
):
Ditto
.
2009
-
11
-
20
Paul
Brook
<
paul
@
codesourcery
.
com
>
*
doc
/
invoke
.
texi
:
Document
ARM
-
mcpu
=
cortex
-
a5
.
gcc/config/rs6000/rs6000.c
View file @
497d3834
...
...
@@ -130,8 +130,6 @@ typedef struct GTY(()) machine_function
64-bits wide and is allocated early enough so that the offset
does not overflow the 16-bit load/store offset field. */
rtx
sdmode_stack_slot
;
/* True if any VSX or ALTIVEC vector type was used. */
bool
vsx_or_altivec_used_p
;
}
machine_function
;
/* Target cpu type */
...
...
@@ -915,7 +913,7 @@ static void rs6000_elf_encode_section_info (tree, rtx, int)
ATTRIBUTE_UNUSED
;
#endif
static
bool
rs6000_use_blocks_for_constant_p
(
enum
machine_mode
,
const_rtx
);
static
void
rs6000_
expand_to_rtl_hook
(
void
);
static
void
rs6000_
alloc_sdmode_stack_slot
(
void
);
static
void
rs6000_instantiate_decls
(
void
);
#if TARGET_XCOFF
static
void
rs6000_xcoff_asm_output_anchor
(
rtx
);
...
...
@@ -1507,7 +1505,7 @@ static const struct attribute_spec rs6000_attribute_table[] =
#define TARGET_BUILTIN_RECIPROCAL rs6000_builtin_reciprocal
#undef TARGET_EXPAND_TO_RTL_HOOK
#define TARGET_EXPAND_TO_RTL_HOOK rs6000_
expand_to_rtl_hook
#define TARGET_EXPAND_TO_RTL_HOOK rs6000_
alloc_sdmode_stack_slot
#undef TARGET_INSTANTIATE_DECLS
#define TARGET_INSTANTIATE_DECLS rs6000_instantiate_decls
...
...
@@ -13192,38 +13190,6 @@ rs6000_check_sdmode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
return
NULL_TREE
;
}
static
tree
rs6000_check_vector_mode
(
tree
*
tp
,
int
*
walk_subtrees
,
void
*
data
ATTRIBUTE_UNUSED
)
{
/* Don't walk into types. */
if
(
*
tp
==
NULL_TREE
||
*
tp
==
error_mark_node
||
TYPE_P
(
*
tp
))
{
*
walk_subtrees
=
0
;
return
NULL_TREE
;
}
switch
(
TREE_CODE
(
*
tp
))
{
case
VAR_DECL
:
case
PARM_DECL
:
case
FIELD_DECL
:
case
RESULT_DECL
:
case
SSA_NAME
:
case
REAL_CST
:
case
INDIRECT_REF
:
case
ALIGN_INDIRECT_REF
:
case
MISALIGNED_INDIRECT_REF
:
case
VIEW_CONVERT_EXPR
:
if
(
VECTOR_MODE_P
(
TYPE_MODE
(
TREE_TYPE
(
*
tp
))))
return
*
tp
;
break
;
default
:
break
;
}
return
NULL_TREE
;
}
enum
reload_reg_type
{
GPR_REGISTER_TYPE
,
VECTOR_REGISTER_TYPE
,
...
...
@@ -13664,17 +13630,11 @@ rs6000_ira_cover_classes (void)
return
(
TARGET_VSX
)
?
cover_vsx
:
cover_pre_vsx
;
}
/* Scan the trees looking for certain types.
Allocate a 64-bit stack slot to be used for copying SDmode values through if
this function has any SDmode references.
If VSX, note whether any vector operation was done so we can set VRSAVE to
non-zero, even if we just use the floating point registers to tell the
kernel to save the vector registers. */
/* Allocate a 64-bit stack slot to be used for copying SDmode
values through if this function has any SDmode references. */
static
void
rs6000_
expand_to_rtl_hook
(
void
)
rs6000_
alloc_sdmode_stack_slot
(
void
)
{
tree
t
;
basic_block
bb
;
...
...
@@ -13682,24 +13642,6 @@ rs6000_expand_to_rtl_hook (void)
gcc_assert
(
cfun
->
machine
->
sdmode_stack_slot
==
NULL_RTX
);
/* Check for vectors. */
if
(
TARGET_VSX
)
{
FOR_EACH_BB
(
bb
)
for
(
gsi
=
gsi_start_bb
(
bb
);
!
gsi_end_p
(
gsi
);
gsi_next
(
&
gsi
))
{
if
(
walk_gimple_op
(
gsi_stmt
(
gsi
),
rs6000_check_vector_mode
,
NULL
))
{
cfun
->
machine
->
vsx_or_altivec_used_p
=
true
;
goto
found_vector
;
}
}
found_vector:
;
}
/* Check for SDmode being used. */
FOR_EACH_BB
(
bb
)
for
(
gsi
=
gsi_start_bb
(
bb
);
!
gsi_end_p
(
gsi
);
gsi_next
(
&
gsi
))
{
...
...
@@ -16841,15 +16783,6 @@ compute_vrsave_mask (void)
if
(
df_regs_ever_live_p
(
i
))
mask
|=
ALTIVEC_REG_BIT
(
i
);
/* If VSX is used, we might have used a traditional floating point register
in a vector mode without using any altivec registers. However the VRSAVE
register does not have room to indicate the floating point registers.
Modern kernels only look to see if the value is non-zero to determine if
they need to save the vector registers, so we just set an arbitrary
value if any vector type was used. */
if
(
mask
==
0
&&
TARGET_VSX
&&
cfun
->
machine
->
vsx_or_altivec_used_p
)
mask
=
0xFFF
;
if
(
mask
==
0
)
return
mask
;
...
...
gcc/testsuite/ChangeLog
View file @
497d3834
2009-11-20 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c: Delete,
2009-10-23 change to set VRSAVE if VSX has been reverted.
2009-11-20 Simon Martin <simartin@users.sourceforge.net>
PR c++/38646
...
...
gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c
deleted
100644 → 0
View file @
2282976b
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-O2 -mcpu=power7" } */
/* { dg-final { scan-assembler-times "mtvrsave" 2 } } */
/* Check whether VRSAVE is set to non-zero if VSX vector operations were
used, but it should not be set if there are no vector operations. */
void
generates_vrsave
(
vector
double
*
a
,
vector
double
*
b
,
vector
double
*
c
)
{
*
a
=
*
b
+
*
c
;
}
void
no_vrsave
(
double
*
a
,
double
*
b
,
double
*
c
)
{
*
a
=
*
b
+
*
c
;
}
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