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
446ba526
Commit
446ba526
authored
May 19, 1999
by
Jan Hubicka
Committed by
Jeff Law
May 18, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* i386.c (output_float_compare): Avoid GNU-C extensions.
From-SVN: r27005
parent
829fd7e0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
113 additions
and
61 deletions
+113
-61
gcc/ChangeLog
+4
-0
gcc/config/i386/i386.c
+109
-61
No files found.
gcc/ChangeLog
View file @
446ba526
Wed May 19 02:47:11 1999 Jan Hubicka (hubicka@freesoft.cz)
* i386.c (output_float_compare): Avoid GNU-C extensions.
Wed May 19 00:34:40 1999 Jeffrey A Law (law@cygnus.com)
* version.c: Bump to distinguish mainline tree from the
...
...
gcc/config/i386/i386.c
View file @
446ba526
...
...
@@ -2995,7 +2995,8 @@ put_jump_code (code, reverse, file)
FILE
*
file
;
{
int
flags
=
cc_prev_status
.
flags
;
int
ieee
=
(
TARGET_IEEE_FP
&&
(
flags
&
CC_IN_80387
));
int
ieee
=
(
TARGET_IEEE_FP
&&
(
flags
&
CC_IN_80387
)
&&
!
(
cc_prev_status
.
flags
&
CC_FCOMI
));
const
char
*
suffix
;
if
(
flags
&
CC_Z_IN_NOT_C
)
...
...
@@ -3760,7 +3761,7 @@ notice_update_cc (exp)
if
(
stack_regs_mentioned_p
(
SET_SRC
(
XVECEXP
(
exp
,
0
,
0
))))
{
cc_status
.
flags
|=
CC_IN_80387
;
if
(
0
&&
TARGET_CMOVE
&&
stack_regs_mentioned_p
if
(
TARGET_CMOVE
&&
stack_regs_mentioned_p
(
XEXP
(
SET_SRC
(
XVECEXP
(
exp
,
0
,
0
)),
1
)))
cc_status
.
flags
|=
CC_FCOMI
;
}
...
...
@@ -4118,7 +4119,8 @@ output_float_compare (insn, operands)
int
cc0_set
=
1
;
int
i
;
if
(
0
&&
TARGET_CMOVE
&&
STACK_REG_P
(
operands
[
1
]))
if
(
TARGET_CMOVE
&&
STACK_REG_P
(
operands
[
1
])
&&
STACK_REG_P
(
operands
[
0
]))
{
cc_status
.
flags
|=
CC_FCOMI
;
cc_prev_status
.
flags
&=
~
CC_TEST_AX
;
...
...
@@ -4152,7 +4154,8 @@ output_float_compare (insn, operands)
{
output_asm_insn
(
AS2
(
fucomip
,
%
y1
,
%
0
),
operands
);
output_asm_insn
(
AS1
(
fstp
,
%
y0
),
operands
);
cc0_set
=
0
;
if
(
!
TARGET_IEEE_FP
)
cc0_set
=
0
;
}
else
output_asm_insn
(
"fucompp"
,
operands
);
...
...
@@ -4163,7 +4166,8 @@ output_float_compare (insn, operands)
{
output_asm_insn
(
AS2
(
fcomip
,
%
y1
,
%
0
),
operands
);
output_asm_insn
(
AS1
(
fstp
,
%
y0
),
operands
);
cc0_set
=
0
;
if
(
!
TARGET_IEEE_FP
)
cc0_set
=
0
;
}
else
output_asm_insn
(
"fcompp"
,
operands
);
...
...
@@ -4188,7 +4192,8 @@ output_float_compare (insn, operands)
if
(
cc_status
.
flags
&
CC_FCOMI
)
{
output_asm_insn
(
strcat
(
buf
,
AS2
(
%
z1
,
%
y1
,
%
0
)),
operands
);
cc0_set
=
0
;
if
(
!
TARGET_IEEE_FP
)
cc0_set
=
0
;
}
else
output_asm_insn
(
strcat
(
buf
,
AS1
(
%
z1
,
%
y1
)),
operands
);
...
...
@@ -4211,7 +4216,7 @@ output_float_compare (insn, operands)
&&
REGNO
(
operands
[
i
])
!=
FIRST_STACK_REG
&&
(
!
stack_top_dies
||
REGNO
(
operands
[
i
])
!=
FIRST_STACK_REG
+
1
))
{
rtx
xexp
[
i
];
rtx
xexp
[
2
];
xexp
[
0
]
=
gen_rtx_REG
(
DFmode
,
REGNO
(
operands
[
i
])
-
(
stack_top_dies
!=
0
));
output_asm_insn
(
AS1
(
fstp
,
%
y0
),
xexp
);
...
...
@@ -4236,17 +4241,19 @@ output_fp_cc0_set (insn)
rtx
next
;
enum
rtx_code
code
;
xops
[
0
]
=
gen_rtx_REG
(
HImode
,
0
);
output_asm_insn
(
AS1
(
fnsts
%
W0
,
%
0
),
xops
);
if
(
!
(
cc_status
.
flags
&
CC_FCOMI
))
{
xops
[
0
]
=
gen_rtx_REG
(
HImode
,
0
);
output_asm_insn
(
AS1
(
fnsts
%
W0
,
%
0
),
xops
);
}
if
(
!
TARGET_IEEE_FP
)
{
if
(
!
(
cc_status
.
flags
&
CC_REVERSED
))
{
next
=
next_cc0_user
(
insn
);
if
(
GET_CODE
(
next
)
==
JUMP_INSN
&&
GET_CODE
(
PATTERN
(
next
))
==
SET
if
(
GET_CODE
(
PATTERN
(
next
))
==
SET
&&
SET_DEST
(
PATTERN
(
next
))
==
pc_rtx
&&
GET_CODE
(
SET_SRC
(
PATTERN
(
next
)))
==
IF_THEN_ELSE
)
code
=
GET_CODE
(
XEXP
(
SET_SRC
(
PATTERN
(
next
)),
0
));
...
...
@@ -4271,8 +4278,7 @@ output_fp_cc0_set (insn)
if
(
next
==
NULL_RTX
)
abort
();
if
(
GET_CODE
(
next
)
==
JUMP_INSN
&&
GET_CODE
(
PATTERN
(
next
))
==
SET
if
(
GET_CODE
(
PATTERN
(
next
))
==
SET
&&
SET_DEST
(
PATTERN
(
next
))
==
pc_rtx
&&
GET_CODE
(
SET_SRC
(
PATTERN
(
next
)))
==
IF_THEN_ELSE
)
code
=
GET_CODE
(
XEXP
(
SET_SRC
(
PATTERN
(
next
)),
0
));
...
...
@@ -4295,61 +4301,103 @@ output_fp_cc0_set (insn)
else
abort
();
xops
[
0
]
=
gen_rtx_REG
(
QImode
,
0
);
if
(
cc_status
.
flags
&
CC_FCOMI
)
{
/* It is very tricky. We have to do it right. */
switch
(
code
)
xops
[
0
]
=
gen_rtx_REG
(
QImode
,
0
);
switch
(
code
)
{
case
GT
:
case
GE
:
break
;
case
LT
:
output_asm_insn
(
AS1
(
setb
,
%
b0
),
xops
);
output_asm_insn
(
AS1
(
setp
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
b0
,
%
h0
),
xops
);
break
;
case
LE
:
output_asm_insn
(
AS1
(
setbe
,
%
b0
),
xops
);
output_asm_insn
(
AS1
(
setnp
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
xor
%
B0
,
%
b0
,
%
h0
),
xops
);
break
;
case
EQ
:
case
NE
:
output_asm_insn
(
AS1
(
setne
,
%
b0
),
xops
);
output_asm_insn
(
AS1
(
setp
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
or
%
B0
,
%
b0
,
%
h0
),
xops
);
break
;
case
GTU
:
case
LTU
:
case
GEU
:
case
LEU
:
default
:
abort
();
}
}
else
{
case
GT
:
xops
[
1
]
=
GEN_INT
(
0x45
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
/* je label */
break
;
xops
[
0
]
=
gen_rtx_REG
(
QImode
,
0
);
case
LT
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x01
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* je label */
break
;
switch
(
code
)
{
case
GT
:
xops
[
1
]
=
GEN_INT
(
0x45
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
/* je label */
break
;
case
GE
:
xops
[
1
]
=
GEN_INT
(
0x05
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
/* je label */
break
;
case
LT
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x01
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* je label */
break
;
case
LE
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS1
(
dec
%
B0
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* jb label */
break
;
case
GE
:
xops
[
1
]
=
GEN_INT
(
0x05
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
/* je label */
break
;
case
EQ
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* je label */
break
;
case
LE
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS1
(
dec
%
B0
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* jb label */
break
;
case
NE
:
xops
[
1
]
=
GEN_INT
(
0x44
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
xor
%
B0
,
%
2
,
%
h0
),
xops
);
/* jn
e label */
break
;
case
EQ
:
xops
[
1
]
=
GEN_INT
(
0x45
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
cmp
%
B0
,
%
2
,
%
h0
),
xops
);
/* j
e label */
break
;
case
GTU
:
case
LTU
:
case
GEU
:
case
LEU
:
default
:
abort
();
case
NE
:
xops
[
1
]
=
GEN_INT
(
0x44
);
xops
[
2
]
=
GEN_INT
(
0x40
);
output_asm_insn
(
AS2
(
and
%
B0
,
%
1
,
%
h0
),
xops
);
output_asm_insn
(
AS2
(
xor
%
B0
,
%
2
,
%
h0
),
xops
);
/* jne label */
break
;
case
GTU
:
case
LTU
:
case
GEU
:
case
LEU
:
default
:
abort
();
}
}
return
""
;
...
...
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