summaryrefslogtreecommitdiffstats
path: root/gcc/config/arm
diff options
context:
space:
mode:
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>1998-07-29 14:11:16 +0000
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>1998-07-29 14:11:16 +0000
commitdafbaae9614b086c2e2d45b93c19a592b2c1e954 (patch)
treef34d4167c0c8ebad49df2756bc19ddcdfc5ee4c9 /gcc/config/arm
parent698960f125e8e0c055f2bf494d86f91a8e7ba580 (diff)
downloadppe42-gcc-dafbaae9614b086c2e2d45b93c19a592b2c1e954.tar.gz
ppe42-gcc-dafbaae9614b086c2e2d45b93c19a592b2c1e954.zip
remove earlyclobber constraint from extendqisi2_insn
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21471 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm')
-rw-r--r--gcc/config/arm/thumb.md11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/config/arm/thumb.md b/gcc/config/arm/thumb.md
index 6886b8e2496..0369bb1c6b0 100644
--- a/gcc/config/arm/thumb.md
+++ b/gcc/config/arm/thumb.md
@@ -470,7 +470,7 @@
")
(define_insn "*extendqisi2_insn"
- [(set (match_operand:SI 0 "register_operand" "=l,&l")
+ [(set (match_operand:SI 0 "register_operand" "=l,l")
(sign_extend:SI (match_operand:QI 1 "memory_operand" "V,m")))]
""
"*
@@ -484,16 +484,21 @@
{
ops[1] = XEXP (XEXP (operands[1], 0), 0);
ops[2] = XEXP (XEXP (operands[1], 0), 1);
+ output_asm_insn (\"ldrsb\\t%0, [%1, %2]\", ops);
+ }
+ else if (REGNO (operands[0]) == REGNO (XEXP (operands[1], 0)))
+ {
+ output_asm_insn (\"ldrb\\t%0, [%0, #0]\;lsl\\t%0, %0, #24\;asr\\t%0, %0, #24\", ops);
}
else
{
ops[1] = XEXP (operands[1], 0);
ops[2] = const0_rtx;
+ output_asm_insn (\"mov\\t%0, %2\;ldrsb\\t%0, [%1, %0]\", ops);
}
- output_asm_insn (\"mov\\t%0, %2\;ldrsb\\t%0, [%1, %0]\", ops);
return \"\";
}"
-[(set_attr "length" "2,4")])
+[(set_attr "length" "2,6")])
;; We don't really have extzv, but defining this using shifts helps
;; to reduce register pressure later on.
OpenPOWER on IntegriCloud