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
b020fd92
Commit
b020fd92
authored
Nov 02, 1999
by
Nick Clifton
Committed by
Nick Clifton
Nov 02, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix compile time warnings
From-SVN: r30353
parent
f5da5c87
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
277 additions
and
95 deletions
+277
-95
gcc/ChangeLog
+12
-0
gcc/config/arm/arm.c
+1
-1
gcc/config/arm/arm.h
+16
-1
gcc/config/arm/arm.md
+50
-24
gcc/config/arm/pe.c
+4
-1
gcc/config/arm/semi.h
+5
-1
gcc/config/arm/thumb.c
+101
-33
gcc/config/arm/thumb.h
+65
-31
gcc/config/arm/thumb.md
+17
-3
gcc/config/arm/tpe.h
+6
-0
No files found.
gcc/ChangeLog
View file @
b020fd92
Tue
Nov
2
17
:
04
:
36
1999
Nick
Clifton
<
nickc
@cygnus
.
com
>
*
config
/
arm
/
tpe
.
h
:
Add
prototypes
for
exported
functions
.
*
config
/
arm
/
pe
.
c
:
Fix
compile
time
warnings
.
*
config
/
arm
/
semi
.
h
:
Fix
compile
time
warnings
.
*
config
/
arm
/
arm
.
c
:
Fix
compile
time
warnings
.
*
config
/
arm
/
arm
.
h
:
Fix
compile
time
warnings
.
*
config
/
arm
/
arm
.
md
:
Fix
compile
time
warnings
.
*
config
/
arm
/
thumb
.
c
:
Fix
compile
time
warnings
.
*
config
/
arm
/
thumb
.
h
:
Fix
compile
time
warnings
.
*
config
/
arm
/
thumb
.
md
:
Fix
compile
time
warnings
.
Tue
Nov
2
04
:
10
:
24
1999
Jan
Hubicka
<
hubicka
@freesoft
.
cz
>
Tue
Nov
2
04
:
10
:
24
1999
Jan
Hubicka
<
hubicka
@freesoft
.
cz
>
*
jump
.
c
(
jump_optimize_1
)
:
Swap
the
incscc
and
the
conditional
mode
*
jump
.
c
(
jump_optimize_1
)
:
Swap
the
incscc
and
the
conditional
mode
...
...
gcc/config/arm/arm.c
View file @
b020fd92
...
@@ -6759,7 +6759,7 @@ arm_final_prescan_insn (insn)
...
@@ -6759,7 +6759,7 @@ arm_final_prescan_insn (insn)
/* Restore recog_data (getting the attributes of other insns can
/* Restore recog_data (getting the attributes of other insns can
destroy this array, but final.c assumes that it remains intact
destroy this array, but final.c assumes that it remains intact
across this call; since the insn has been recognized already we
across this call; since the insn has been recognized already we
call recog direct). */
call recog direct).
*/
recog
(
PATTERN
(
insn
),
insn
,
NULL_PTR
);
recog
(
PATTERN
(
insn
),
insn
,
NULL_PTR
);
}
}
}
}
...
...
gcc/config/arm/arm.h
View file @
b020fd92
...
@@ -215,7 +215,7 @@ Unrecognized value in TARGET_CPU_DEFAULT.
...
@@ -215,7 +215,7 @@ Unrecognized value in TARGET_CPU_DEFAULT.
"
"
/* Default is little endian, which doesn't define anything. */
/* Default is little endian, which doesn't define anything. */
#define CPP_ENDIAN_DEFAULT_SPEC ""
#define CPP_ENDIAN_DEFAULT_SPEC "
-D__ARMEL__
"
#define CC1_SPEC ""
#define CC1_SPEC ""
...
@@ -313,6 +313,9 @@ Unrecognized value in TARGET_CPU_DEFAULT.
...
@@ -313,6 +313,9 @@ Unrecognized value in TARGET_CPU_DEFAULT.
/* Nonzero if function prologues should not load the PIC register. */
/* Nonzero if function prologues should not load the PIC register. */
#define ARM_FLAG_SINGLE_PIC_BASE (1 << 14)
#define ARM_FLAG_SINGLE_PIC_BASE (1 << 14)
/* Nonzero if all call instructions should be indirect. */
#define ARM_FLAG_LONG_CALLS (1 << 15)
#define TARGET_APCS (target_flags & ARM_FLAG_APCS_FRAME)
#define TARGET_APCS (target_flags & ARM_FLAG_APCS_FRAME)
#define TARGET_POKE_FUNCTION_NAME (target_flags & ARM_FLAG_POKE)
#define TARGET_POKE_FUNCTION_NAME (target_flags & ARM_FLAG_POKE)
#define TARGET_FPE (target_flags & ARM_FLAG_FPE)
#define TARGET_FPE (target_flags & ARM_FLAG_FPE)
...
@@ -336,6 +339,7 @@ Unrecognized value in TARGET_CPU_DEFAULT.
...
@@ -336,6 +339,7 @@ Unrecognized value in TARGET_CPU_DEFAULT.
#define TARGET_NO_SCHED_PRO (target_flags & ARM_FLAG_NO_SCHED_PRO)
#define TARGET_NO_SCHED_PRO (target_flags & ARM_FLAG_NO_SCHED_PRO)
#define TARGET_ABORT_NORETURN (target_flags & ARM_FLAG_ABORT_NORETURN)
#define TARGET_ABORT_NORETURN (target_flags & ARM_FLAG_ABORT_NORETURN)
#define TARGET_SINGLE_PIC_BASE (target_flags & ARM_FLAG_SINGLE_PIC_BASE)
#define TARGET_SINGLE_PIC_BASE (target_flags & ARM_FLAG_SINGLE_PIC_BASE)
#define TARGET_LONG_CALLS (target_flags & ARM_FLAG_LONG_CALLS)
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis.
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis.
Bit 31 is reserved. See riscix.h. */
Bit 31 is reserved. See riscix.h. */
...
@@ -393,6 +397,9 @@ Unrecognized value in TARGET_CPU_DEFAULT.
...
@@ -393,6 +397,9 @@ Unrecognized value in TARGET_CPU_DEFAULT.
{"single-pic-base", ARM_FLAG_SINGLE_PIC_BASE, \
{"single-pic-base", ARM_FLAG_SINGLE_PIC_BASE, \
"Do not load the PIC register in function prologues" }, \
"Do not load the PIC register in function prologues" }, \
{"no-single-pic-base", -ARM_FLAG_SINGLE_PIC_BASE, "" }, \
{"no-single-pic-base", -ARM_FLAG_SINGLE_PIC_BASE, "" }, \
{"long-calls", ARM_FLAG_LONG_CALLS, \
"Generate all call instructions as indirect calls"}, \
{"no-long-calls", -ARM_FLAG_LONG_CALLS, ""}, \
SUBTARGET_SWITCHES \
SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT, "" } \
{"", TARGET_DEFAULT, "" } \
}
}
...
@@ -2335,6 +2342,14 @@ void aof_add_import PROTO ((char *));
...
@@ -2335,6 +2342,14 @@ void aof_add_import PROTO ((char *));
void
aof_delete_import
PROTO
((
char
*
));
void
aof_delete_import
PROTO
((
char
*
));
void
aof_dump_imports
STDIO_PROTO
((
FILE
*
));
void
aof_dump_imports
STDIO_PROTO
((
FILE
*
));
#endif
#endif
/* Define in pe.c */
int
arm_pe_return_in_memory
PROTO
((
Tree
));
int
arm_dllexport_p
PROTO
((
Tree
));
int
arm_dllimport_p
PROTO
((
Tree
));
int
arm_dllexport_name_p
PROTO
((
char
*
));
int
arm_dllimport_name_p
PROTO
((
char
*
));
#endif
/* HAVE_CONFIG_H */
#endif
/* HAVE_CONFIG_H */
#endif
/* __ARM_H__ */
#endif
/* __ARM_H__ */
gcc/config/arm/arm.md
View file @
b020fd92
...
@@ -1667,7 +1667,8 @@
...
@@ -1667,7 +1667,8 @@
(match_operand:SI 3 "arm_rhs_operand" "rM")]))
(match_operand:SI 3 "arm_rhs_operand" "rM")]))
(match_operand:SI 1 "s_register_operand" "r")))]
(match_operand:SI 1 "s_register_operand" "r")))]
""
""
"bic%?
\\
t%0, %1, %2%S4")
"bic%?
\\
t%0, %1, %2%S4"
)
(define_insn "
*
andsi_notsi_si_compare0"
(define_insn "
*
andsi_notsi_si_compare0"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -2040,7 +2041,8 @@
...
@@ -2040,7 +2041,8 @@
[
(match_operand:SI 1 "s_register_operand" "r")
[
(match_operand:SI 1 "s_register_operand" "r")
(match_operand:SI 2 "reg_or_int_operand" "rM")]))]
(match_operand:SI 2 "reg_or_int_operand" "rM")]))]
""
""
"mov%?
\\
t%0, %1%S3")
"mov%?
\\
t%0, %1%S3"
)
(define_insn "
*
shiftsi3_compare0"
(define_insn "
*
shiftsi3_compare0"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -2052,7 +2054,8 @@
...
@@ -2052,7 +2054,8 @@
(match_op_dup 3
[
(match_dup 1) (match_dup 2)
]
))]
(match_op_dup 3
[
(match_dup 1) (match_dup 2)
]
))]
""
""
"mov%?s
\\
t%0, %1%S3"
"mov%?s
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
shiftsi3_compare0_scratch"
(define_insn "
*
shiftsi3_compare0_scratch"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -2063,7 +2066,8 @@
...
@@ -2063,7 +2066,8 @@
(clobber (match_scratch:SI 0 "=r"))]
(clobber (match_scratch:SI 0 "=r"))]
""
""
"mov%?s
\\
t%0, %1%S3"
"mov%?s
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
notsi_shiftsi"
(define_insn "
*
notsi_shiftsi"
[
(set (match_operand:SI 0 "s_register_operand" "=r")
[
(set (match_operand:SI 0 "s_register_operand" "=r")
...
@@ -2071,7 +2075,8 @@
...
@@ -2071,7 +2075,8 @@
[
(match_operand:SI 1 "s_register_operand" "r")
[
(match_operand:SI 1 "s_register_operand" "r")
(match_operand:SI 2 "arm_rhs_operand" "rM")])))]
(match_operand:SI 2 "arm_rhs_operand" "rM")])))]
""
""
"mvn%?
\\
t%0, %1%S3")
"mvn%?
\\
t%0, %1%S3"
)
(define_insn "
*
notsi_shiftsi_compare0"
(define_insn "
*
notsi_shiftsi_compare0"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -2083,7 +2088,8 @@
...
@@ -2083,7 +2088,8 @@
(not:SI (match_op_dup 3
[
(match_dup 1) (match_dup 2)
]
)))]
(not:SI (match_op_dup 3
[
(match_dup 1) (match_dup 2)
]
)))]
""
""
"mvn%?s
\\
t%0, %1%S3"
"mvn%?s
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
not_shiftsi_compare0_scratch"
(define_insn "
*
not_shiftsi_compare0_scratch"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -2094,7 +2100,8 @@
...
@@ -2094,7 +2100,8 @@
(clobber (match_scratch:SI 0 "=r"))]
(clobber (match_scratch:SI 0 "=r"))]
""
""
"mvn%?s
\\
t%0, %1%S3"
"mvn%?s
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
;; Unary arithmetic insns
;; Unary arithmetic insns
...
@@ -2990,7 +2997,7 @@
...
@@ -2990,7 +2997,7 @@
(set_attr "pool_range" "4096")])
(set_attr "pool_range" "4096")])
(define_insn "pic_add_dot_plus_eight"
(define_insn "pic_add_dot_plus_eight"
[
(set (match_operand 0 "register_operand" "+r")
[
(set (match_operand
:SI
0 "register_operand" "+r")
(plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 8)))))
(plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 8)))))
(use (label_ref (match_operand 1 "" "")))]
(use (label_ref (match_operand 1 "" "")))]
"flag_pic"
"flag_pic"
...
@@ -3879,7 +3886,8 @@
...
@@ -3879,7 +3886,8 @@
(match_operand:SI 2 "arm_rhs_operand" "rM")])))]
(match_operand:SI 2 "arm_rhs_operand" "rM")])))]
""
""
"cmp%?
\\
t%0, %1%S3"
"cmp%?
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
cmpsi_shiftsi_swp"
(define_insn "
*
cmpsi_shiftsi_swp"
[
(set (reg:CC_SWP 24)
[
(set (reg:CC_SWP 24)
...
@@ -3889,7 +3897,8 @@
...
@@ -3889,7 +3897,8 @@
(match_operand:SI 0 "s_register_operand" "r")))]
(match_operand:SI 0 "s_register_operand" "r")))]
""
""
"cmp%?
\\
t%0, %1%S3"
"cmp%?
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
cmpsi_neg_shiftsi"
(define_insn "
*
cmpsi_neg_shiftsi"
[
(set (reg:CC 24)
[
(set (reg:CC 24)
...
@@ -3899,7 +3908,8 @@
...
@@ -3899,7 +3908,8 @@
(match_operand:SI 2 "arm_rhs_operand" "rM")]))))]
(match_operand:SI 2 "arm_rhs_operand" "rM")]))))]
""
""
"cmn%?
\\
t%0, %1%S3"
"cmn%?
\\
t%0, %1%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
cmpsf_insn"
(define_insn "
*
cmpsf_insn"
[
(set (reg:CCFP 24)
[
(set (reg:CCFP 24)
...
@@ -4469,7 +4479,12 @@
...
@@ -4469,7 +4479,12 @@
(match_operand 1 "general_operand" ""))
(match_operand 1 "general_operand" ""))
(clobber (reg:SI 14))])]
(clobber (reg:SI 14))])]
""
""
"")
"
{
if (TARGET_LONG_CALLS && GET_CODE (XEXP (operands
[
0
]
, 0)) != REG)
XEXP (operands
[
0
]
, 0) = force_reg (Pmode, XEXP (operands
[
0
]
, 0));
}"
)
(define_insn "
*
call_reg"
(define_insn "
*
call_reg"
[
(call (mem:SI (match_operand:SI 0 "s_register_operand" "r"))
[
(call (mem:SI (match_operand:SI 0 "s_register_operand" "r"))
...
@@ -4484,7 +4499,7 @@
...
@@ -4484,7 +4499,7 @@
(set_attr "type" "call")])
(set_attr "type" "call")])
(define_insn "
*
call_mem"
(define_insn "
*
call_mem"
[
(call (mem:SI (match_operand 0 "memory_operand" "m"))
[
(call (mem:SI (match_operand
:SI
0 "memory_operand" "m"))
(match_operand 1 "general_operand" "g"))
(match_operand 1 "general_operand" "g"))
(clobber (reg:SI 14))]
(clobber (reg:SI 14))]
""
""
...
@@ -4500,7 +4515,12 @@
...
@@ -4500,7 +4515,12 @@
(match_operand 2 "general_operand" "g")))
(match_operand 2 "general_operand" "g")))
(clobber (reg:SI 14))])]
(clobber (reg:SI 14))])]
""
""
"")
"
{
if (TARGET_LONG_CALLS && GET_CODE (XEXP (operands
[
1
]
, 0)) != REG)
XEXP (operands
[
1
]
, 0) = force_reg (Pmode, XEXP (operands
[
1
]
, 0));
}"
)
(define_insn "
*
call_value_reg"
(define_insn "
*
call_value_reg"
[
(set (match_operand 0 "" "=rf")
[
(set (match_operand 0 "" "=rf")
...
@@ -4533,7 +4553,7 @@
...
@@ -4533,7 +4553,7 @@
[
(call (mem:SI (match_operand:SI 0 "" "X"))
[
(call (mem:SI (match_operand:SI 0 "" "X"))
(match_operand:SI 1 "general_operand" "g"))
(match_operand:SI 1 "general_operand" "g"))
(clobber (reg:SI 14))]
(clobber (reg:SI 14))]
"GET_CODE (operands
[
0
]
) == SYMBOL_REF"
"
! TARGET_LONG_CALLS &&
GET_CODE (operands
[
0
]
) == SYMBOL_REF"
"
*
"
*
{
{
return NEED_PLT_RELOC ?
\"
bl%?
\\
t%a0(PLT)
\"
:
\"
bl%?
\\
t%a0
\"
;
return NEED_PLT_RELOC ?
\"
bl%?
\\
t%a0(PLT)
\"
:
\"
bl%?
\\
t%a0
\"
;
...
@@ -4545,7 +4565,7 @@
...
@@ -4545,7 +4565,7 @@
(call (mem:SI (match_operand:SI 1 "" "X"))
(call (mem:SI (match_operand:SI 1 "" "X"))
(match_operand:SI 2 "general_operand" "g")))
(match_operand:SI 2 "general_operand" "g")))
(clobber (reg:SI 14))]
(clobber (reg:SI 14))]
"GET_CODE(operands
[
1
]
) == SYMBOL_REF"
"
! TARGET_LONG_CALLS &&
GET_CODE(operands
[
1
]
) == SYMBOL_REF"
"
*
"
*
{
{
return NEED_PLT_RELOC ?
\"
bl%?
\\
t%a1(PLT)
\"
:
\"
bl%?
\\
t%a1
\"
;
return NEED_PLT_RELOC ?
\"
bl%?
\\
t%a1(PLT)
\"
:
\"
bl%?
\\
t%a1
\"
;
...
@@ -4727,7 +4747,8 @@
...
@@ -4727,7 +4747,8 @@
(match_operand:SI 5 "reg_or_int_operand" "rI")])
(match_operand:SI 5 "reg_or_int_operand" "rI")])
(match_operand:SI 2 "s_register_operand" "r")]))]
(match_operand:SI 2 "s_register_operand" "r")]))]
""
""
"%i1%?
\\
t%0, %2, %4%S3")
"%i1%?
\\
t%0, %2, %4%S3"
)
(define_insn "
*
arith_shiftsi_compare0"
(define_insn "
*
arith_shiftsi_compare0"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -4742,7 +4763,8 @@
...
@@ -4742,7 +4763,8 @@
(match_dup 2)]))]
(match_dup 2)]))]
""
""
"%i1%?s
\\
t%0, %2, %4%S3"
"%i1%?s
\\
t%0, %2, %4%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
arith_shiftsi_compare0_scratch"
(define_insn "
*
arith_shiftsi_compare0_scratch"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -4755,7 +4777,8 @@
...
@@ -4755,7 +4777,8 @@
(clobber (match_scratch:SI 0 "=r"))]
(clobber (match_scratch:SI 0 "=r"))]
""
""
"%i1%?s
\\
t%0, %2, %4%S3"
"%i1%?s
\\
t%0, %2, %4%S3"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
sub_shiftsi"
(define_insn "
*
sub_shiftsi"
[
(set (match_operand:SI 0 "s_register_operand" "=r")
[
(set (match_operand:SI 0 "s_register_operand" "=r")
...
@@ -4764,7 +4787,8 @@
...
@@ -4764,7 +4787,8 @@
[
(match_operand:SI 3 "s_register_operand" "r")
[
(match_operand:SI 3 "s_register_operand" "r")
(match_operand:SI 4 "reg_or_int_operand" "rM")])))]
(match_operand:SI 4 "reg_or_int_operand" "rM")])))]
""
""
"sub%?
\\
t%0, %1, %3%S2")
"sub%?
\\
t%0, %1, %3%S2"
)
(define_insn "
*
sub_shiftsi_compare0"
(define_insn "
*
sub_shiftsi_compare0"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -4779,7 +4803,8 @@
...
@@ -4779,7 +4803,8 @@
(match_dup 4)])))]
(match_dup 4)])))]
""
""
"sub%?s
\\
t%0, %1, %3%S2"
"sub%?s
\\
t%0, %1, %3%S2"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
(define_insn "
*
sub_shiftsi_compare0_scratch"
(define_insn "
*
sub_shiftsi_compare0_scratch"
[
(set (reg:CC_NOOV 24)
[
(set (reg:CC_NOOV 24)
...
@@ -4792,7 +4817,8 @@
...
@@ -4792,7 +4817,8 @@
(clobber (match_scratch:SI 0 "=r"))]
(clobber (match_scratch:SI 0 "=r"))]
""
""
"sub%?s
\\
t%0, %1, %3%S2"
"sub%?s
\\
t%0, %1, %3%S2"
[
(set_attr "conds" "set")
]
)
[
(set_attr "conds" "set")
])
;; These variants of the above insns can occur if the first operand is the
;; These variants of the above insns can occur if the first operand is the
;; frame pointer and we eliminate that. This is a kludge, but there doesn't
;; frame pointer and we eliminate that. This is a kludge, but there doesn't
...
@@ -5041,7 +5067,7 @@
...
@@ -5041,7 +5067,7 @@
(set_attr "length" "8,12")])
(set_attr "length" "8,12")])
(define_insn "
*
cmp_ite0"
(define_insn "
*
cmp_ite0"
[
(set (match_operand 6 "dominant_cc_register" "")
[
(set (match_operand
:CC
6 "dominant_cc_register" "")
(compare
(compare
(if_then_else:SI
(if_then_else:SI
(match_operator 4 "comparison_operator"
(match_operator 4 "comparison_operator"
...
@@ -5073,7 +5099,7 @@
...
@@ -5073,7 +5099,7 @@
(set_attr "length" "8")])
(set_attr "length" "8")])
(define_insn "
*
cmp_ite1"
(define_insn "
*
cmp_ite1"
[
(set (match_operand 6 "dominant_cc_register" "")
[
(set (match_operand
:CC
6 "dominant_cc_register" "")
(compare
(compare
(if_then_else:SI
(if_then_else:SI
(match_operator 4 "comparison_operator"
(match_operator 4 "comparison_operator"
...
...
gcc/config/arm/pe.c
View file @
b020fd92
...
@@ -27,6 +27,7 @@ Boston, MA 02111-1307, USA. */
...
@@ -27,6 +27,7 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "flags.h"
#include "tree.h"
#include "tree.h"
#include "expr.h"
#include "expr.h"
#include "toplev.h"
extern
int
current_function_anonymous_args
;
extern
int
current_function_anonymous_args
;
...
@@ -49,7 +50,7 @@ extern int current_function_anonymous_args;
...
@@ -49,7 +50,7 @@ extern int current_function_anonymous_args;
int
int
arm_pe_valid_machine_decl_attribute
(
decl
,
attributes
,
attr
,
args
)
arm_pe_valid_machine_decl_attribute
(
decl
,
attributes
,
attr
,
args
)
tree
decl
;
tree
decl
;
tree
attributes
;
tree
attributes
ATTRIBUTE_UNUSED
;
tree
attr
;
tree
attr
;
tree
args
;
tree
args
;
{
{
...
@@ -117,6 +118,7 @@ arm_pe_merge_machine_decl_attributes (old, new)
...
@@ -117,6 +118,7 @@ arm_pe_merge_machine_decl_attributes (old, new)
return
a
;
return
a
;
}
}
#if 0
/* Check a type that has a virtual table, and see if any virtual methods are
/* Check a type that has a virtual table, and see if any virtual methods are
marked for import or export, and if so, arrange for the vtable to
marked for import or export, and if so, arrange for the vtable to
be imported or exported. */
be imported or exported. */
...
@@ -153,6 +155,7 @@ arm_check_vtable_importexport (type)
...
@@ -153,6 +155,7 @@ arm_check_vtable_importexport (type)
return 0;
return 0;
}
}
#endif
/* Return non-zero if DECL is a dllexport'd object. */
/* Return non-zero if DECL is a dllexport'd object. */
...
...
gcc/config/arm/semi.h
View file @
b020fd92
...
@@ -30,11 +30,15 @@ Boston, MA 02111-1307, USA. */
...
@@ -30,11 +30,15 @@ Boston, MA 02111-1307, USA. */
#define LINK_SPEC "%{mbig-endian:-EB} -X"
#define LINK_SPEC "%{mbig-endian:-EB} -X"
#ifndef TARGET_VERSION
#define TARGET_VERSION fputs (" (ARM/semi-hosted)", stderr);
#define TARGET_VERSION fputs (" (ARM/semi-hosted)", stderr);
#endif
#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT ARM_FLAG_APCS_32
#define TARGET_DEFAULT ARM_FLAG_APCS_32
#endif
#include "arm/aout.h"
#include "arm/aout.h"
#undef CPP_APCS_PC_DEFAULT_SPEC
#undef
CPP_APCS_PC_DEFAULT_SPEC
#define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
#define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
gcc/config/arm/thumb.c
View file @
b020fd92
...
@@ -41,8 +41,8 @@ Boston, MA 02111-1307, USA. */
...
@@ -41,8 +41,8 @@ Boston, MA 02111-1307, USA. */
int
current_function_anonymous_args
=
0
;
int
current_function_anonymous_args
=
0
;
/* Used to parse -mstructure_size_boundary command line option. */
/* Used to parse -mstructure_size_boundary command line option. */
char
*
structure_size_string
=
NULL
;
c
onst
c
har
*
structure_size_string
=
NULL
;
int
arm_structure_size_boundary
=
32
;
/* Used to be 8 */
int
arm_structure_size_boundary
=
32
;
/* Used to be 8 */
/* The register number to be used for the PIC offset register. */
/* The register number to be used for the PIC offset register. */
const
char
*
thumb_pic_register_string
=
NULL
;
const
char
*
thumb_pic_register_string
=
NULL
;
...
@@ -81,7 +81,7 @@ int
...
@@ -81,7 +81,7 @@ int
thumb_shiftable_const
(
val
)
thumb_shiftable_const
(
val
)
HOST_WIDE_INT
val
;
HOST_WIDE_INT
val
;
{
{
unsigned
HOST_WIDE_INT
mask
=
0xff
;
HOST_WIDE_INT
mask
=
0xff
;
int
i
;
int
i
;
for
(
i
=
0
;
i
<
25
;
i
++
)
for
(
i
=
0
;
i
<
25
;
i
++
)
...
@@ -94,8 +94,6 @@ thumb_shiftable_const (val)
...
@@ -94,8 +94,6 @@ thumb_shiftable_const (val)
int
int
thumb_trivial_epilogue
()
thumb_trivial_epilogue
()
{
{
int
regno
;
/* ??? If this function ever returns 1, we get a function without any
/* ??? If this function ever returns 1, we get a function without any
epilogue at all. It appears that the intent was to cause a "return"
epilogue at all. It appears that the intent was to cause a "return"
insn to be emitted, but that does not happen. */
insn to be emitted, but that does not happen. */
...
@@ -118,7 +116,7 @@ thumb_trivial_epilogue ()
...
@@ -118,7 +116,7 @@ thumb_trivial_epilogue ()
/* Return TRUE if X references a SYMBOL_REF. */
/* Return TRUE if X references a SYMBOL_REF. */
int
int
symbol_mentioned_p
(
x
)
thumb_
symbol_mentioned_p
(
x
)
rtx
x
;
rtx
x
;
{
{
register
const
char
*
fmt
;
register
const
char
*
fmt
;
...
@@ -135,10 +133,10 @@ symbol_mentioned_p (x)
...
@@ -135,10 +133,10 @@ symbol_mentioned_p (x)
register
int
j
;
register
int
j
;
for
(
j
=
XVECLEN
(
x
,
i
)
-
1
;
j
>=
0
;
j
--
)
for
(
j
=
XVECLEN
(
x
,
i
)
-
1
;
j
>=
0
;
j
--
)
if
(
symbol_mentioned_p
(
XVECEXP
(
x
,
i
,
j
)))
if
(
thumb_
symbol_mentioned_p
(
XVECEXP
(
x
,
i
,
j
)))
return
1
;
return
1
;
}
}
else
if
(
fmt
[
i
]
==
'e'
&&
symbol_mentioned_p
(
XEXP
(
x
,
i
)))
else
if
(
fmt
[
i
]
==
'e'
&&
thumb_
symbol_mentioned_p
(
XEXP
(
x
,
i
)))
return
1
;
return
1
;
}
}
...
@@ -281,7 +279,7 @@ legitimize_pic_address (orig, mode, reg)
...
@@ -281,7 +279,7 @@ legitimize_pic_address (orig, mode, reg)
static
rtx
pic_rtx
;
static
rtx
pic_rtx
;
int
int
is_pic
(
x
)
is_pic
(
x
)
rtx
x
;
rtx
x
;
{
{
if
(
x
==
pic_rtx
)
if
(
x
==
pic_rtx
)
...
@@ -413,7 +411,6 @@ add_constant (x, mode)
...
@@ -413,7 +411,6 @@ add_constant (x, mode)
enum
machine_mode
mode
;
enum
machine_mode
mode
;
{
{
int
i
;
int
i
;
rtx
lab
;
HOST_WIDE_INT
offset
;
HOST_WIDE_INT
offset
;
if
(
mode
==
SImode
&&
GET_CODE
(
x
)
==
MEM
&&
CONSTANT_P
(
XEXP
(
x
,
0
))
if
(
mode
==
SImode
&&
GET_CODE
(
x
)
==
MEM
&&
CONSTANT_P
(
XEXP
(
x
,
0
))
...
@@ -538,10 +535,7 @@ find_barrier (from)
...
@@ -538,10 +535,7 @@ find_barrier (from)
&&
GET_CODE
(
PATTERN
(
from
))
==
SET
&&
GET_CODE
(
PATTERN
(
from
))
==
SET
&&
CONSTANT_P
(
SET_SRC
(
PATTERN
(
from
)))
&&
CONSTANT_P
(
SET_SRC
(
PATTERN
(
from
)))
&&
CONSTANT_POOL_ADDRESS_P
(
SET_SRC
(
PATTERN
(
from
))))
&&
CONSTANT_POOL_ADDRESS_P
(
SET_SRC
(
PATTERN
(
from
))))
{
count
+=
2
;
rtx
src
=
SET_SRC
(
PATTERN
(
from
));
count
+=
2
;
}
else
else
count
+=
get_attr_length
(
from
);
count
+=
get_attr_length
(
from
);
...
@@ -773,7 +767,7 @@ thumb_expand_movstrqi (operands)
...
@@ -773,7 +767,7 @@ thumb_expand_movstrqi (operands)
void
void
thumb_reload_out_si
(
operands
)
thumb_reload_out_si
(
operands
)
rtx
operands
;
rtx
operands
ATTRIBUTE_UNUSED
;
{
{
abort
();
abort
();
}
}
...
@@ -819,10 +813,10 @@ is_called_in_ARM_mode (func)
...
@@ -819,10 +813,10 @@ is_called_in_ARM_mode (func)
/* Routines for emitting code */
/* Routines for emitting code */
void
void
final_prescan_insn
(
insn
)
thumb_final_prescan_insn
(
insn
)
rtx
insn
;
rtx
insn
;
{
{
extern
int
*
insn_addresses
;
extern
int
*
insn_addresses
;
if
(
flag_print_asm_name
)
if
(
flag_print_asm_name
)
fprintf
(
asm_out_file
,
"%s 0x%04x
\n
"
,
ASM_COMMENT_START
,
fprintf
(
asm_out_file
,
"%s 0x%04x
\n
"
,
ASM_COMMENT_START
,
...
@@ -871,7 +865,6 @@ thumb_exit (f, reg_containing_return_addr)
...
@@ -871,7 +865,6 @@ thumb_exit (f, reg_containing_return_addr)
int
regs_available_for_popping
;
int
regs_available_for_popping
;
int
regs_to_pop
;
int
regs_to_pop
;
int
pops_needed
;
int
pops_needed
;
int
reg
;
int
available
;
int
available
;
int
required
;
int
required
;
int
mode
;
int
mode
;
...
@@ -1284,10 +1277,9 @@ output_return ()
...
@@ -1284,10 +1277,9 @@ output_return ()
void
void
thumb_function_prologue
(
f
,
frame_size
)
thumb_function_prologue
(
f
,
frame_size
)
FILE
*
f
;
FILE
*
f
;
int
frame_size
;
int
frame_size
ATTRIBUTE_UNUSED
;
{
{
int
amount
=
frame_size
+
current_function_outgoing_args_size
;
int
live_regs_mask
=
0
;
int
live_regs_mask
=
0
;
int
high_regs_pushed
=
0
;
int
high_regs_pushed
=
0
;
int
store_arg_regs
=
0
;
int
store_arg_regs
=
0
;
...
@@ -1358,7 +1350,7 @@ thumb_function_prologue (f, frame_size)
...
@@ -1358,7 +1350,7 @@ thumb_function_prologue (f, frame_size)
&&
!
(
TARGET_SINGLE_PIC_BASE
&&
(
regno
==
thumb_pic_register
)))
&&
!
(
TARGET_SINGLE_PIC_BASE
&&
(
regno
==
thumb_pic_register
)))
live_regs_mask
|=
1
<<
regno
;
live_regs_mask
|=
1
<<
regno
;
if
(
live_regs_mask
||
!
leaf_function_p
()
||
far_jump_used_p
())
if
(
live_regs_mask
||
!
leaf_function_p
()
||
far_jump_used_p
())
live_regs_mask
|=
1
<<
14
;
live_regs_mask
|=
1
<<
14
;
if
(
TARGET_BACKTRACE
)
if
(
TARGET_BACKTRACE
)
...
@@ -1367,7 +1359,6 @@ thumb_function_prologue (f, frame_size)
...
@@ -1367,7 +1359,6 @@ thumb_function_prologue (f, frame_size)
int
offset
;
int
offset
;
int
work_register
=
0
;
int
work_register
=
0
;
/* We have been asked to create a stack backtrace structure.
/* We have been asked to create a stack backtrace structure.
The code looks like this:
The code looks like this:
...
@@ -1390,7 +1381,7 @@ thumb_function_prologue (f, frame_size)
...
@@ -1390,7 +1381,7 @@ thumb_function_prologue (f, frame_size)
{
{
/* See if the a4 register is free. */
/* See if the a4 register is free. */
if
(
regs_ever_live
[
3
]
==
0
)
if
(
regs_ever_live
[
3
]
==
0
)
work_register
=
3
;
work_register
=
3
;
else
/* We must push a register of our own */
else
/* We must push a register of our own */
live_regs_mask
|=
(
1
<<
7
);
live_regs_mask
|=
(
1
<<
7
);
...
@@ -1510,6 +1501,77 @@ thumb_function_prologue (f, frame_size)
...
@@ -1510,6 +1501,77 @@ thumb_function_prologue (f, frame_size)
}
}
}
}
/* Functions to save and restore thumb_return_addr_rtx. */
static
rtx
thumb_return_addr_rtx
=
NULL_RTX
;
struct
machine_function
{
rtx
ra_rtx
;
};
static
void
thumb_save_machine_status
(
p
)
struct
function
*
p
;
{
struct
machine_function
*
machine
=
(
struct
machine_function
*
)
xmalloc
(
sizeof
(
*
machine
));
p
->
machine
=
machine
;
machine
->
ra_rtx
=
thumb_return_addr_rtx
;
}
static
void
thumb_restore_machine_status
(
p
)
struct
function
*
p
;
{
struct
machine_function
*
machine
=
p
->
machine
;
thumb_return_addr_rtx
=
machine
->
ra_rtx
;
free
(
machine
);
p
->
machine
=
(
struct
machine_function
*
)
NULL
;
}
/* Return an RTX indicating where the return address to the
calling function can be found. */
rtx
thumb_return_addr
(
count
)
int
count
;
{
if
(
count
!=
0
)
return
NULL_RTX
;
if
(
thumb_return_addr_rtx
==
NULL_RTX
)
{
rtx
init
;
thumb_return_addr_rtx
=
gen_reg_rtx
(
Pmode
);
init
=
gen_rtx_REG
(
Pmode
,
14
);
init
=
gen_rtx_SET
(
VOIDmode
,
thumb_return_addr_rtx
,
init
);
/* Emit the insn to the prologue with the other argument copies. */
push_topmost_sequence
();
emit_insn_after
(
init
,
get_insns
());
pop_topmost_sequence
();
}
return
thumb_return_addr_rtx
;
}
/* Do anything needed before RTL is emitted for each function. */
void
thumb_init_expanders
()
{
thumb_return_addr_rtx
=
NULL_RTX
;
/* Arrange to save and restore machine status around nested functions. */
save_machine_status
=
thumb_save_machine_status
;
restore_machine_status
=
thumb_restore_machine_status
;
}
void
void
thumb_expand_prologue
()
thumb_expand_prologue
()
{
{
...
@@ -1530,7 +1592,7 @@ thumb_expand_prologue ()
...
@@ -1530,7 +1592,7 @@ thumb_expand_prologue ()
{
{
int
regno
;
int
regno
;
rtx
reg
;
rtx
reg
;
/* The stack decrement is too big for an immediate value in a single
/* The stack decrement is too big for an immediate value in a single
insn. In theory we could issue multiple subtracts, but after
insn. In theory we could issue multiple subtracts, but after
three of them it becomes more space efficient to place the full
three of them it becomes more space efficient to place the full
...
@@ -1586,6 +1648,9 @@ thumb_expand_prologue ()
...
@@ -1586,6 +1648,9 @@ thumb_expand_prologue ()
}
}
}
}
/* This should only happen with optimisation disabled. Emit the copy
*after* the stack adjust, as the unoptimised code will attempt to store
local variables at positive offsets from the frame pointer. */
if
(
frame_pointer_needed
)
if
(
frame_pointer_needed
)
{
{
if
(
current_function_outgoing_args_size
)
if
(
current_function_outgoing_args_size
)
...
@@ -1606,8 +1671,8 @@ thumb_expand_prologue ()
...
@@ -1606,8 +1671,8 @@ thumb_expand_prologue ()
emit_insn
(
gen_movsi
(
frame_pointer_rtx
,
stack_pointer_rtx
));
emit_insn
(
gen_movsi
(
frame_pointer_rtx
,
stack_pointer_rtx
));
}
}
/* if (profile_flag || profile_block_flag) */
if
(
profile_flag
||
profile_block_flag
)
emit_insn
(
gen_blockage
());
emit_insn
(
gen_blockage
());
}
}
void
void
...
@@ -1615,8 +1680,6 @@ thumb_expand_epilogue ()
...
@@ -1615,8 +1680,6 @@ thumb_expand_epilogue ()
{
{
HOST_WIDE_INT
amount
=
(
get_frame_size
()
HOST_WIDE_INT
amount
=
(
get_frame_size
()
+
current_function_outgoing_args_size
);
+
current_function_outgoing_args_size
);
int
regno
;
#ifdef THUMB_PE
#ifdef THUMB_PE
/* Naked functions don't have epilogues. */
/* Naked functions don't have epilogues. */
if
(
arm_naked_function_p
(
current_function_decl
))
if
(
arm_naked_function_p
(
current_function_decl
))
...
@@ -1635,15 +1698,20 @@ thumb_expand_epilogue ()
...
@@ -1635,15 +1698,20 @@ thumb_expand_epilogue ()
emit_insn
(
gen_movsi
(
reg
,
GEN_INT
(
amount
)));
emit_insn
(
gen_movsi
(
reg
,
GEN_INT
(
amount
)));
emit_insn
(
gen_addsi3
(
stack_pointer_rtx
,
stack_pointer_rtx
,
reg
));
emit_insn
(
gen_addsi3
(
stack_pointer_rtx
,
stack_pointer_rtx
,
reg
));
}
}
/* if (profile_flag || profile_block_flag) */
emit_insn
(
gen_blockage
());
}
}
/* Emit a USE (stack_pointer_rtx), so that
the stack adjustment will not be deleted. */
emit_insn
(
gen_rtx_USE
(
VOIDmode
,
stack_pointer_rtx
));
if
(
profile_flag
||
profile_block_flag
)
emit_insn
(
gen_blockage
());
}
}
void
void
thumb_function_epilogue
(
f
,
frame_size
)
thumb_function_epilogue
(
f
,
frame_size
)
FILE
*
f
;
FILE
*
f
ATTRIBUTE_UNUSED
;
int
frame_size
;
int
frame_size
ATTRIBUTE_UNUSED
;
{
{
/* ??? Probably not safe to set this here, since it assumes that a
/* ??? Probably not safe to set this here, since it assumes that a
function will be emitted as assembly immediately after we generate
function will be emitted as assembly immediately after we generate
...
...
gcc/config/arm/thumb.h
View file @
b020fd92
...
@@ -101,28 +101,29 @@ extern int target_flags;
...
@@ -101,28 +101,29 @@ extern int target_flags;
#define TARGET_SWITCHES \
#define TARGET_SWITCHES \
{ \
{ \
{"big-endian", THUMB_FLAG_BIG_END}, \
{"big-endian", THUMB_FLAG_BIG_END
, ""
}, \
{"little-endian", -THUMB_FLAG_BIG_END}, \
{"little-endian", -THUMB_FLAG_BIG_END
, ""
}, \
{"thumb-interwork", ARM_FLAG_THUMB
},
\
{"thumb-interwork", ARM_FLAG_THUMB
, ""},
\
{"no-thumb-interwork", -ARM_FLAG_THUMB
},
\
{"no-thumb-interwork", -ARM_FLAG_THUMB
, ""},
\
{"tpcs-frame", THUMB_FLAG_BACKTRACE}, \
{"tpcs-frame", THUMB_FLAG_BACKTRACE
, ""
}, \
{"no-tpcs-frame", -THUMB_FLAG_BACKTRACE}, \
{"no-tpcs-frame", -THUMB_FLAG_BACKTRACE
, ""
}, \
{"tpcs-leaf-frame", THUMB_FLAG_LEAF_BACKTRACE}, \
{"tpcs-leaf-frame", THUMB_FLAG_LEAF_BACKTRACE
, ""
}, \
{"no-tpcs-leaf-frame", -THUMB_FLAG_LEAF_BACKTRACE}, \
{"no-tpcs-leaf-frame", -THUMB_FLAG_LEAF_BACKTRACE
, ""
}, \
{"callee-super-interworking", THUMB_FLAG_CALLEE_SUPER_INTERWORKING}, \
{"callee-super-interworking", THUMB_FLAG_CALLEE_SUPER_INTERWORKING
, ""
}, \
{"no-callee-super-interworking", -THUMB_FLAG_CALLEE_SUPER_INTERWORKING}, \
{"no-callee-super-interworking", -THUMB_FLAG_CALLEE_SUPER_INTERWORKING
, ""
}, \
{"caller-super-interworking", THUMB_FLAG_CALLER_SUPER_INTERWORKING}, \
{"caller-super-interworking", THUMB_FLAG_CALLER_SUPER_INTERWORKING
, ""
}, \
{"no-caller-super-interworking", -THUMB_FLAG_CALLER_SUPER_INTERWORKING}, \
{"no-caller-super-interworking", -THUMB_FLAG_CALLER_SUPER_INTERWORKING
, ""
}, \
{"single-pic-base", THUMB_FLAG_SINGLE_PIC_BASE, \
{"single-pic-base", THUMB_FLAG_SINGLE_PIC_BASE, \
"Do not load the PIC register in function prologues" }, \
"Do not load the PIC register in function prologues" }, \
{"no-single-pic-base", -THUMB_FLAG_SINGLE_PIC_BASE, ""
}, \
{"no-single-pic-base", -THUMB_FLAG_SINGLE_PIC_BASE, ""}, \
SUBTARGET_SWITCHES \
SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT} \
{"", TARGET_DEFAULT
, ""
} \
}
}
#define TARGET_OPTIONS \
#define TARGET_OPTIONS \
{ \
{ \
{ "structure-size-boundary=", & structure_size_string }, \
{ "structure-size-boundary=", & structure_size_string, \
"Specify the structure aligment: 8 or 32 bits" }, \
{ "pic-register=", & thumb_pic_register_string, \
{ "pic-register=", & thumb_pic_register_string, \
"Specify the register to be used for PIC addressing" } \
"Specify the register to be used for PIC addressing" } \
}
}
...
@@ -435,7 +436,7 @@ do { \
...
@@ -435,7 +436,7 @@ do { \
#define STRUCTURE_SIZE_BOUNDARY 32
#define STRUCTURE_SIZE_BOUNDARY 32
/* Used when parsing command line option -mstructure_size_boundary. */
/* Used when parsing command line option -mstructure_size_boundary. */
extern
char
*
structure_size_string
;
extern
c
onst
c
har
*
structure_size_string
;
#define STRICT_ALIGNMENT 1
#define STRICT_ALIGNMENT 1
...
@@ -523,13 +524,13 @@ enum reg_class
...
@@ -523,13 +524,13 @@ enum reg_class
#define REG_CLASS_CONTENTS \
#define REG_CLASS_CONTENTS \
{ \
{ \
0x00000
, \
{ 0x00000 }
, \
0x000f0
, \
{ 0x000f0 }
, \
0x000ff
, \
{ 0x000ff }
, \
0x02000
, \
{ 0x02000 }
, \
0x020ff
, \
{ 0x020ff }
, \
0x0ff00
, \
{ 0x0ff00 }
, \
0x1ffff
, \
{ 0x1ffff }
, \
}
}
#define REGNO_REG_CLASS(REGNO) \
#define REGNO_REG_CLASS(REGNO) \
...
@@ -698,8 +699,17 @@ int thumb_shiftable_const ();
...
@@ -698,8 +699,17 @@ int thumb_shiftable_const ();
(OFFSET) += current_function_outgoing_args_size; \
(OFFSET) += current_function_outgoing_args_size; \
}
}
/* A C expression whose value is RTL representing the value of the return
address for the frame COUNT steps up from the current frame. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \
thumb_return_addr (COUNT)
/* Passing Arguments on the stack */
/* Passing Arguments on the stack */
/* Initialize data used by insn expanders. This is called from insn_emit,
once for every function before code is generated. */
#define INIT_EXPANDERS thumb_init_expanders ()
#define PROMOTE_PROTOTYPES 1
#define PROMOTE_PROTOTYPES 1
#define ACCUMULATE_OUTGOING_ARGS 1
#define ACCUMULATE_OUTGOING_ARGS 1
...
@@ -835,9 +845,9 @@ extern int thumb_pic_register;
...
@@ -835,9 +845,9 @@ extern int thumb_pic_register;
/* We can't directly access anything that contains a symbol,
/* We can't directly access anything that contains a symbol,
nor can we indirect via the constant pool. */
nor can we indirect via the constant pool. */
#define LEGITIMATE_PIC_OPERAND_P(X) \
#define LEGITIMATE_PIC_OPERAND_P(X) \
(! symbol_mentioned_p (X) \
(!
thumb_
symbol_mentioned_p (X) \
&& (! CONSTANT_POOL_ADDRESS_P (X) \
&& (! CONSTANT_POOL_ADDRESS_P (X) \
|| ! symbol_mentioned_p (get_pool_constant (X))))
|| !
thumb_
symbol_mentioned_p (get_pool_constant (X))))
/* We need to know when we are making a constant pool; this determines
/* We need to know when we are making a constant pool; this determines
whether data needs to be in the GOT or can be referenced via a GOT
whether data needs to be in the GOT or can be referenced via a GOT
...
@@ -1016,7 +1026,7 @@ extern int making_const_table;
...
@@ -1016,7 +1026,7 @@ extern int making_const_table;
&& GET_CODE (X) == SYMBOL_REF \
&& GET_CODE (X) == SYMBOL_REF \
&& CONSTANT_POOL_ADDRESS_P (X) \
&& CONSTANT_POOL_ADDRESS_P (X) \
&& ! (flag_pic \
&& ! (flag_pic \
&& symbol_mentioned_p (get_pool_constant (X)))) \
&&
thumb_
symbol_mentioned_p (get_pool_constant (X)))) \
goto WIN; \
goto WIN; \
}
}
...
@@ -1156,9 +1166,9 @@ extern int thumb_pic_register;
...
@@ -1156,9 +1166,9 @@ extern int thumb_pic_register;
/* We can't directly access anything that contains a symbol,
/* We can't directly access anything that contains a symbol,
nor can we indirect via the constant pool. */
nor can we indirect via the constant pool. */
#define LEGITIMATE_PIC_OPERAND_P(X) \
#define LEGITIMATE_PIC_OPERAND_P(X) \
(! symbol_mentioned_p (X) \
(!
thumb_
symbol_mentioned_p (X) \
&& (! CONSTANT_POOL_ADDRESS_P (X) \
&& (! CONSTANT_POOL_ADDRESS_P (X) \
|| ! symbol_mentioned_p (get_pool_constant (X))))
|| !
thumb_
symbol_mentioned_p (get_pool_constant (X))))
/* We need to know when we are making a constant pool; this determines
/* We need to know when we are making a constant pool; this determines
whether data needs to be in the GOT or can be referenced via a GOT
whether data needs to be in the GOT or can be referenced via a GOT
...
@@ -1231,10 +1241,10 @@ extern int making_const_table;
...
@@ -1231,10 +1241,10 @@ extern int making_const_table;
asm_fprintf ((STREAM), "\tpush {%R%s}\n", reg_names[(REGNO)])
asm_fprintf ((STREAM), "\tpush {%R%s}\n", reg_names[(REGNO)])
#define ASM_OUTPUT_REG_POP(STREAM,REGNO) \
#define ASM_OUTPUT_REG_POP(STREAM,REGNO) \
fprintf ((STREAM), "\tpop {%R%s}\n", reg_names[(REGNO)])
asm_
fprintf ((STREAM), "\tpop {%R%s}\n", reg_names[(REGNO)])
#define FINAL_PRESCAN_INSN(INSN,OPVEC,NOPERANDS) \
#define FINAL_PRESCAN_INSN(INSN,OPVEC,NOPERANDS) \
final_prescan_insn((INSN)
)
thumb_final_prescan_insn (INSN
)
/* Controlling Debugging Information Format */
/* Controlling Debugging Information Format */
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
...
@@ -1280,7 +1290,7 @@ extern int making_const_table;
...
@@ -1280,7 +1290,7 @@ extern int making_const_table;
/* The literal pool needs to reside in the text area due to the
/* The literal pool needs to reside in the text area due to the
limited PC addressing range: */
limited PC addressing range: */
#define MACHINE_DEPENDENT_REORG(INSN) thumb_reorg (
(INSN)
)
#define MACHINE_DEPENDENT_REORG(INSN) thumb_reorg (
INSN
)
/* Options specific to Thumb */
/* Options specific to Thumb */
...
@@ -1295,4 +1305,28 @@ extern char * thumb_load_double_from_address ();
...
@@ -1295,4 +1305,28 @@ extern char * thumb_load_double_from_address ();
extern
char
*
output_return
();
extern
char
*
output_return
();
extern
int
far_jump_used_p
();
extern
int
far_jump_used_p
();
extern
int
is_called_in_ARM_mode
();
extern
int
is_called_in_ARM_mode
();
extern
void
thumb_finalize_pic
();
extern
void
thumb_reorg
();
extern
void
thumb_override_options
();
extern
int
is_pic
();
extern
int
thumb_symbol_mentioned_p
();
extern
void
thumb_function_prologue
();
extern
void
thumb_function_epilogue
();
extern
void
thumb_print_operand
();
extern
void
thumb_final_prescan_insn
();
extern
int
thumb_cmp_operand
();
extern
void
thumb_expand_movstrqi
();
extern
void
thumb_expand_prologue
();
extern
void
thumb_expand_epilogue
();
extern
int
arm_valid_machine_decl_attribute
();
extern
void
thumb_init_expanders
();
#ifndef RTX_CODE
struct
rtx_def
;
#define Rtx struct rtx_def *
#else
#define Rtx rtx
#endif
extern
Rtx
thumb_return_addr
();
gcc/config/arm/thumb.md
View file @
b020fd92
...
@@ -260,6 +260,8 @@
...
@@ -260,6 +260,8 @@
{
{
switch (which_alternative)
switch (which_alternative)
{
{
default:
abort ();
case 0:
case 0:
if (REGNO (operands
[
1
]
) == REGNO (operands
[
0
]
) + 1)
if (REGNO (operands
[
1
]
) == REGNO (operands
[
0
]
) + 1)
return
\"
add
\\
t%0, %1, #0
\;
add
\\
t%H0, %H1, #0
\"
;
return
\"
add
\\
t%0, %1, #0
\;
add
\\
t%H0, %H1, #0
\"
;
...
@@ -310,6 +312,8 @@
...
@@ -310,6 +312,8 @@
"
*
"
*
switch (which_alternative)
switch (which_alternative)
{
{
default:
abort ();
case 0:
case 0:
if (REGNO (operands
[
1
]
) == REGNO (operands
[
0
]
) + 1)
if (REGNO (operands
[
1
]
) == REGNO (operands
[
0
]
) + 1)
return
\"
add
\\
t%0, %1, #0
\;
add
\\
t%H0, %H1, #0
\"
;
return
\"
add
\\
t%0, %1, #0
\;
add
\\
t%H0, %H1, #0
\"
;
...
@@ -596,6 +600,15 @@
...
@@ -596,6 +600,15 @@
;; Arithmetic insns
;; Arithmetic insns
(define_insn "negdi2"
[
(set (match_operand:DI 0 "register_operand" "=&l")
(neg:DI (match_operand:DI 1 "register_operand" "l")))]
""
"neg
\\
t%Q0, %Q1
\;
mov
\\
t%R0, #0
\;
sbc
\\
t%R0, %R1"
[
(set_attr "conds" "changed")
(set_attr "length" "6")]
)
(define_insn "adddi3"
(define_insn "adddi3"
[
(set (match_operand:DI 0 "register_operand" "=l")
[
(set (match_operand:DI 0 "register_operand" "=l")
(plus:DI (match_operand:DI 1 "register_operand" "%0")
(plus:DI (match_operand:DI 1 "register_operand" "%0")
...
@@ -603,7 +616,7 @@
...
@@ -603,7 +616,7 @@
""
""
"add
\\
t%Q0, %Q0, %Q2
\;
adc
\\
t%R0, %R0, %R2"
"add
\\
t%Q0, %Q0, %Q2
\;
adc
\\
t%R0, %R0, %R2"
[
(set_attr "conds" "changed")
[
(set_attr "conds" "changed")
(set_attr "length" "
8
")])
(set_attr "length" "
4
")])
;; register group 'k' is a single register group containing only the stack
;; register group 'k' is a single register group containing only the stack
;; register. Trying to reload it will always fail catastrophically,
;; register. Trying to reload it will always fail catastrophically,
...
@@ -649,7 +662,7 @@
...
@@ -649,7 +662,7 @@
""
""
"sub
\\
t%Q0, %Q0, %Q2
\;
sbc
\\
t%R0, %R0, %R2"
"sub
\\
t%Q0, %Q0, %Q2
\;
sbc
\\
t%R0, %R0, %R2"
[
(set_attr "conds" "changed")
[
(set_attr "conds" "changed")
(set_attr "length" "
8
")])
(set_attr "length" "
4
")])
(define_insn "subsi3"
(define_insn "subsi3"
[
(set (match_operand:SI 0 "register_operand" "=l")
[
(set (match_operand:SI 0 "register_operand" "=l")
...
@@ -1168,6 +1181,7 @@
...
@@ -1168,6 +1181,7 @@
[
(unspec_volatile [(const_int 0)
]
5)]
[
(unspec_volatile [(const_int 0)
]
5)]
""
""
"
*
"
*
extern void assemble_align ();
assemble_align (32);
assemble_align (32);
return
\"\"
;
return
\"\"
;
")
")
...
@@ -1184,7 +1198,7 @@
...
@@ -1184,7 +1198,7 @@
"ldr
\\
t%0, %a1")
"ldr
\\
t%0, %a1")
(define_insn "pic_add_dot_plus_four"
(define_insn "pic_add_dot_plus_four"
[
(set (match_operand 0 "register_operand" "+r")
[
(set (match_operand
:SI
0 "register_operand" "+r")
(plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 4)))))
(plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 4)))))
(use (label_ref (match_operand 1 "" "")))]
(use (label_ref (match_operand 1 "" "")))]
"flag_pic"
"flag_pic"
...
...
gcc/config/arm/tpe.h
View file @
b020fd92
...
@@ -224,6 +224,7 @@ do { \
...
@@ -224,6 +224,7 @@ do { \
#define RETURN_IN_MEMORY(TYPE) \
#define RETURN_IN_MEMORY(TYPE) \
((TYPE_MODE ((TYPE)) == BLKmode && ! TYPE_NO_FORCE_BLK (TYPE)) \
((TYPE_MODE ((TYPE)) == BLKmode && ! TYPE_NO_FORCE_BLK (TYPE)) \
|| (AGGREGATE_TYPE_P ((TYPE)) && arm_pe_return_in_memory ((TYPE))))
|| (AGGREGATE_TYPE_P ((TYPE)) && arm_pe_return_in_memory ((TYPE))))
extern
int
arm_pe_return_in_memory
();
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
is a valid machine specific attribute for DECL.
is a valid machine specific attribute for DECL.
...
@@ -419,3 +420,8 @@ switch_to_section (section, decl) \
...
@@ -419,3 +420,8 @@ switch_to_section (section, decl) \
extern
int
thumb_pe_valid_machine_decl_attribute
();
extern
int
thumb_pe_valid_machine_decl_attribute
();
extern
int
arm_dllexport_p
();
extern
int
arm_dllimport_p
();
extern
int
arm_dllexport_name_p
();
extern
int
arm_dllimport_name_p
();
extern
int
arm_pe_return_in_memory
();
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