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
f3684176
Commit
f3684176
authored
Nov 07, 1992
by
Richard Stallman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
entered into RCS
From-SVN: r2710
parent
a63067c2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
126 additions
and
0 deletions
+126
-0
gcc/config/elxsi/elxsi.c
+126
-0
No files found.
gcc/config/elxsi/elxsi.c
0 → 100644
View file @
f3684176
/* Subroutines for insn-output.c for GNU compiler. Elxsi version.
Copyright (C) 1987, 1992 Free Software Foundation, Inc
This port, done by Mike Stump <mrs@cygnus.com> in 1988, and is the first
64 bit port of GNU CC.
Based upon the VAX port.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "config.h"
#include "rtl.h"
extern
char
*
reg_names
[];
rtx
cmp_op0
=
0
,
cmp_op1
=
0
;
/* table of relations for compares and branches */
char
*
cmp_tab
[]
=
{
"gt"
,
"gt"
,
"eq"
,
"eq"
,
"ge"
,
"ge"
,
"lt"
,
"lt"
,
"ne"
,
"ne"
,
"le"
,
"le"
};
/* type is the index into the above table */
/* s is "" for signed, or "u" for unsigned */
char
*
cmp_jmp
(
s
,
type
,
where
)
char
*
s
;
rtx
where
;
{
rtx
br_ops
[
3
];
char
template
[
50
];
char
*
f
=
""
;
char
*
bits
=
"64"
;
if
(
GET_MODE
(
cmp_op0
)
==
SFmode
)
f
=
"f"
,
bits
=
"32"
;
if
(
GET_MODE
(
cmp_op0
)
==
DFmode
)
f
=
"f"
;
br_ops
[
0
]
=
where
;
br_ops
[
1
]
=
cmp_op0
;
br_ops
[
2
]
=
cmp_op1
;
if
(
cmp_op1
)
sprintf
(
template
,
"%scmp%s.br.%s
\t
%%1,%%2:j%s
\t
%%l0"
,
f
,
s
,
bits
,
cmp_tab
[
type
]);
else
if
(
*
f
)
sprintf
(
template
,
"fcmp.br.%s
\t
%%1,=0:j%s
\t
%%l0"
,
bits
,
cmp_tab
[
type
]);
else
if
(
*
s
)
/* can turn the below in to a jmp ... */
sprintf
(
template
,
"cmpu.br.64
\t
%%1,=0:j%s
\t
%%l0"
,
s
,
cmp_tab
[
type
]);
else
sprintf
(
template
,
"jmp.%s
\t
%%1,%%l0"
,
cmp_tab
[
type
+
1
]);
output_asm_insn
(
template
,
br_ops
);
return
""
;
}
char
*
cmp_set
(
s
,
type
,
reg
)
char
*
s
,
*
type
;
rtx
reg
;
{
rtx
br_ops
[
3
];
char
template
[
50
];
char
*
f
=
""
;
char
*
bits
=
"64"
;
if
(
GET_MODE
(
cmp_op0
)
==
SFmode
)
f
=
"f"
,
bits
=
"32"
;
else
if
(
GET_MODE
(
cmp_op0
)
==
DFmode
)
f
=
"f"
;
else
if
(
GET_MODE
(
cmp_op0
)
==
SImode
)
bits
=
"32"
;
else
if
(
GET_MODE
(
cmp_op0
)
==
HImode
)
bits
=
"16"
;
else
if
(
GET_MODE
(
cmp_op0
)
==
QImode
)
bits
=
"8"
;
br_ops
[
0
]
=
reg
;
br_ops
[
1
]
=
cmp_op0
;
br_ops
[
2
]
=
cmp_op1
;
if
(
cmp_op1
)
sprintf
(
template
,
"%scmp%s.%s
\t
%%0,%%1,%%2:%s"
,
f
,
s
,
bits
,
type
);
else
sprintf
(
template
,
"%scmp%s.%s
\t
%%0,%%1,=0:%s"
,
f
,
s
,
bits
,
type
);
output_asm_insn
(
template
,
br_ops
);
return
""
;
}
print_operand_address
(
file
,
addr
)
FILE
*
file
;
register
rtx
addr
;
{
register
rtx
reg1
,
reg2
,
breg
,
ireg
;
rtx
offset
;
retry
:
switch
(
GET_CODE
(
addr
))
{
case
MEM
:
if
(
GET_CODE
(
XEXP
(
addr
,
0
))
==
REG
)
fprintf
(
file
,
"%s"
,
reg_names
[
REGNO
(
addr
)]);
else
abort
();
break
;
case
REG
:
fprintf
(
file
,
"[%s]"
,
reg_names
[
REGNO
(
addr
)]);
break
;
case
PLUS
:
reg1
=
0
;
reg2
=
0
;
ireg
=
0
;
breg
=
0
;
offset
=
0
;
if
(
GET_CODE
(
XEXP
(
addr
,
0
))
==
REG
)
{
offset
=
XEXP
(
addr
,
1
);
addr
=
XEXP
(
addr
,
0
);
}
else
if
(
GET_CODE
(
XEXP
(
addr
,
1
))
==
REG
)
{
offset
=
XEXP
(
addr
,
0
);
addr
=
XEXP
(
addr
,
1
);
}
fprintf
(
file
,
"[%s]"
,
reg_names
[
REGNO
(
addr
)]);
output_address
(
offset
);
break
;
default
:
output_addr_const
(
file
,
addr
);
}
}
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