summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaksen <laksen@3ad0048d-3df7-0310-abae-a5850022a9f2>2015-07-07 17:02:44 +0000
committerlaksen <laksen@3ad0048d-3df7-0310-abae-a5850022a9f2>2015-07-07 17:02:44 +0000
commit8d2b4f03a27501a98b89645be2389164646942df (patch)
tree93a30770a1d86e88548ebd4bb7d03135b5ec6c91
parent6fbb70beb4055fa02fea45045b92a34e92d9b338 (diff)
downloadfpc-8d2b4f03a27501a98b89645be2389164646942df.tar.gz
Add missing ARM instructions to simple peephole optimizations and spilling_get_operation_type.
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/laksen@31198 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--intrinsics/compiler/arm/aasmcpu.pas4
-rw-r--r--intrinsics/compiler/arm/aoptcpu.pas9
2 files changed, 11 insertions, 2 deletions
diff --git a/intrinsics/compiler/arm/aasmcpu.pas b/intrinsics/compiler/arm/aasmcpu.pas
index 5f1ecbedc6..d225b74a58 100644
--- a/intrinsics/compiler/arm/aasmcpu.pas
+++ b/intrinsics/compiler/arm/aasmcpu.pas
@@ -803,7 +803,9 @@ implementation
result := operand_read;
//Thumb2
A_LSL, A_LSR, A_ROR, A_ASR, A_SDIV, A_UDIV, A_MOVW, A_MOVT, A_MLS, A_BFI,
- A_SMMLA,A_SMMLS:
+ A_QADD,
+ A_PKHTB,A_PKHBT,
+ A_SMMLA,A_SMMLS,A_SMUAD,A_SMUSD:
if opnr in [0] then
result:=operand_write
else
diff --git a/intrinsics/compiler/arm/aoptcpu.pas b/intrinsics/compiler/arm/aoptcpu.pas
index 43eab3a862..f227265ba0 100644
--- a/intrinsics/compiler/arm/aoptcpu.pas
+++ b/intrinsics/compiler/arm/aoptcpu.pas
@@ -1482,7 +1482,14 @@ Implementation
A_ORR,
A_MLA,
A_MLS,
- A_MUL:
+ A_MUL,
+ A_QADD,A_QADD16,A_QADD8,
+ A_QSUB,A_QSUB16,A_QSUB8,
+ A_QDADD,A_QDSUB,A_QASX,A_QSAX,
+ A_SHADD16,A_SHADD8,A_UHADD16,A_UHADD8,
+ A_SHSUB16,A_SHSUB8,A_UHSUB16,A_UHSUB8,
+ A_PKHTB,A_PKHBT,
+ A_SMUAD,A_SMUSD:
begin
{
optimize