summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsofiane <sofiane@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-19 13:05:14 +0000
committersofiane <sofiane@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-19 13:05:14 +0000
commit70e6ce193936e68b15a3008ab8ecfcf93161c052 (patch)
tree0f3623095eae0f712b4aa57d809e1871900d2f28
parent98562479946d844dfef90fbd87c39fb9bb7a1920 (diff)
downloadgcc-70e6ce193936e68b15a3008ab8ecfcf93161c052.tar.gz
* config/arm/vfp.md: Move VFP instruction classification documentation
to ... * config/arm/arm.md: ... here. Update instruction classification documentation. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@200199 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.md123
-rw-r--r--gcc/config/arm/vfp.md25
3 files changed, 88 insertions, 67 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3d89e3e6834..bf364b9f764 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-06-19 Sofiane Naci <sofiane.naci@arm.com>
+
+ * config/arm/vfp.md: Move VFP instruction classification documentation
+ to ...
+ * config/arm/arm.md: ... here. Update instruction classification
+ documentation.
+
2013-06-19 Richard Earnshaw <rearnsha@arm.com>
arm.md (split for eq(reg, 0)): Add variants for ARMv5 and Thumb2.
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 42c21098db8..a342c5ef9b9 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -253,49 +253,88 @@
"mov,mvn,clz,mrs,msr,xtab,sat,other"
(const_string "other"))
-; TYPE attribute is used to detect floating point instructions which, if
-; running on a co-processor can run in parallel with other, basic instructions
-; If write-buffer scheduling is enabled then it can also be used in the
-; scheduling of writes.
-
-; Classification of each insn
-; Note: vfp.md has different meanings for some of these, and some further
-; types as well. See that file for details.
-; simple_alu_imm a simple alu instruction that doesn't hit memory or fp
-; regs or have a shifted source operand and has an immediate
-; operand. This currently only tracks very basic immediate
-; alu operations.
-; alu_reg any alu instruction that doesn't hit memory or fp
-; regs or have a shifted source operand
-; and does not have an immediate operand. This is
-; also the default
-; simple_alu_shift covers UXTH, UXTB, SXTH, SXTB
-; alu_shift any data instruction that doesn't hit memory or fp
-; regs, but has a source operand shifted by a constant
-; alu_shift_reg any data instruction that doesn't hit memory or fp
-; regs, but has a source operand shifted by a register value
-; block blockage insn, this blocks all functional units
-; float a floating point arithmetic operation (subject to expansion)
-; fdivd DFmode floating point division
-; fdivs SFmode floating point division
-; f_load[sd] A single/double load from memory. Used for VFP unit.
-; f_store[sd] A single/double store to memory. Used for VFP unit.
-; f_flag a transfer of co-processor flags to the CPSR
-; f_2_r transfer float to core (no memory needed)
-; r_2_f transfer core to float
-; f_cvt convert floating<->integral
-; branch a branch
-; call a subroutine call
-; load_byte load byte(s) from memory to arm registers
-; load1 load 1 word from memory to arm registers
-; load2 load 2 words from memory to arm registers
-; load3 load 3 words from memory to arm registers
-; load4 load 4 words from memory to arm registers
-; store store 1 word to memory from arm registers
-; store2 store 2 words
-; store3 store 3 words
-; store4 store 4 (or more) words
+; TYPE attribute is used to classify instructions for use in scheduling.
;
+; Instruction classification:
+;
+; alu_reg any alu instruction that doesn't hit memory or fp
+; regs or have a shifted source operand and does not have
+; an immediate operand. This is also the default.
+; alu_shift any data instruction that doesn't hit memory or fp.
+; regs, but has a source operand shifted by a constant.
+; alu_shift_reg any data instruction that doesn't hit memory or fp.
+; block blockage insn, this blocks all functional units.
+; branch branch.
+; call subroutine call.
+; f_2_r transfer from float to core (no memory needed).
+; f_cvt conversion between float and integral.
+; f_flag transfer of co-processor flags to the CPSR.
+; f_load[d,s] double/single load from memory. Used for VFP unit.
+; f_minmax[d,s] double/single floating point minimum/maximum.
+; f_rint[d,s] double/single floating point rount to integral.
+; f_sel[d,s] double/single floating byte select.
+; f_store[d,s] double/single store to memory. Used for VFP unit.
+; fadd[d,s] double/single floating-point scalar addition.
+; fcmp[d,s] double/single floating-point compare.
+; fconst[d,s] double/single load immediate.
+; fcpys single precision floating point cpy.
+; fdiv[d,s] double/single precision floating point division.
+; ffarith[d,s] double/single floating point abs/neg/cpy.
+; ffma[d,s] double/single floating point fused multiply-accumulate.
+; float floating point arithmetic operation.
+; fmac[d,s] double/single floating point multiply-accumulate.
+; fmul[d,s] double/single floating point multiply.
+; load_byte load byte(s) from memory to arm registers.
+; load1 load 1 word from memory to arm registers.
+; load2 load 2 words from memory to arm registers.
+; load3 load 3 words from memory to arm registers.
+; load4 load 4 words from memory to arm registers.
+; mla integer multiply accumulate.
+; mlas integer multiply accumulate, flag setting.
+; mov integer move.
+; mul integer multiply.
+; muls integer multiply, flag setting.
+; r_2_f transfer from core to float.
+; sdiv signed division.
+; simple_alu_imm simple alu instruction that doesn't hit memory or fp
+; regs or have a shifted source operand and has an
+; immediate operand. This currently only tracks very basic
+; immediate alu operations.
+; simple_alu_shift simple alu instruction with a shifted source operand.
+; smlad signed multiply accumulate dual.
+; smladx signed multiply accumulate dual reverse.
+; smlal signed multiply accumulate long.
+; smlald signed multiply accumulate long dual.
+; smlals signed multiply accumulate long, flag setting.
+; smlalxy signed multiply accumulate, 16x16-bit, 64-bit accumulate.
+; smlawx signed multiply accumulate, 32x16-bit, 32-bit accumulate.
+; smlawy signed multiply accumulate wide, 32x16-bit,
+; 32-bit accumulate.
+; smlaxy signed multiply accumulate, 16x16-bit, 32-bit accumulate.
+; smlsd signed multiply subtract dual.
+; smlsdx signed multiply subtract dual reverse.
+; smlsld signed multiply subtract long dual.
+; smmla signed most significant word multiply accumulate.
+; smmul signed most significant word multiply.
+; smmulr signed most significant word multiply, rounded.
+; smuad signed dual multiply add.
+; smuadx signed dual multiply add reverse.
+; smull signed multiply long.
+; smulls signed multiply long, flag setting.
+; smulwy signed multiply wide, 32x16-bit, 32-bit accumulate.
+; smulxy signed multiply, 16x16-bit, 32-bit accumulate.
+; smusd signed dual multiply subtract.
+; smusdx signed dual multiply subtract reverse.
+; store1 store 1 word to memory from arm registers.
+; store2 store 2 words to memory from arm registers.
+; store3 store 3 words to memory from arm registers.
+; store4 store 4 (or more) words to memory from arm registers.
+; udiv unsigned division.
+; umaal unsigned multiply accumulate accumulate long.
+; umlal unsigned multiply accumulate long.
+; umlals unsigned multiply accumulate long, flag setting.
+; umull unsigned multiply long.
+; umulls unsigned multiply long, flag setting.
(define_attr "type"
"simple_alu_imm,\
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index 1930cddb835..918db1758b5 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -18,31 +18,6 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>. */
-;; The VFP "type" attributes differ from those used in the FPA model.
-;; fcpys Single precision cpy.
-;; ffariths Single precision abs, neg.
-;; ffarithd Double precision abs, neg, cpy.
-;; fadds Single precision add/sub.
-;; faddd Double precision add/sub.
-;; fconsts Single precision load immediate.
-;; fconstd Double precision load immediate.
-;; fcmps Single precision comparison.
-;; fcmpd Double precision comparison.
-;; fmuls Single precision multiply.
-;; fmuld Double precision multiply.
-;; fmacs Single precision multiply-accumulate.
-;; fmacd Double precision multiply-accumulate.
-;; ffmas Single precision fused multiply-accumulate.
-;; ffmad Double precision fused multiply-accumulate.
-;; fdivs Single precision sqrt or division.
-;; fdivd Double precision sqrt or division.
-;; f_flag fmstat operation
-;; f_load[sd] Floating point load from memory.
-;; f_store[sd] Floating point store to memory.
-;; f_2_r Transfer vfp to arm reg.
-;; r_2_f Transfer arm to vfp reg.
-;; f_cvt Convert floating<->integral
-
;; SImode moves
;; ??? For now do not allow loading constants into vfp regs. This causes
;; problems because small constants get converted into adds.