diff options
Diffstat (limited to 'gcc/doc/md.texi')
-rw-r--r-- | gcc/doc/md.texi | 151 |
1 files changed, 130 insertions, 21 deletions
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 57760469d33..2a5a2e12dda 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1725,6 +1725,54 @@ DF modes @end table +@item ARC ---@file{config/arc/constraints.md} +@table @code +@item q +Registers usable in ARCompact 16-bit instructions: @code{r0}-@code{r3}, +@code{r12}-@code{r15}. This constraint can only match when the @option{-mq} +option is in effect. + +@item e +Registers usable as base-regs of memory addresses in ARCompact 16-bit memory +instructions: @code{r0}-@code{r3}, @code{r12}-@code{r15}, @code{sp}. +This constraint can only match when the @option{-mq} +option is in effect. +@item D +ARC FPX (dpfp) 64-bit registers. @code{D0}, @code{D1}. + +@item I +A signed 12-bit integer constant. + +@item Cal +constant for arithmetic/logical operations. This might be any constant +that can be put into a long immediate by the assmbler or linker without +involving a PIC relocation. + +@item K +A 3-bit unsigned integer constant. + +@item L +A 6-bit unsigned integer constant. + +@item CnL +One's complement of a 6-bit unsigned integer constant. + +@item CmL +Two's complement of a 6-bit unsigned integer constant. + +@item M +A 5-bit unsigned integer constant. + +@item O +A 7-bit unsigned integer constant. + +@item P +A 8-bit unsigned integer constant. + +@item H +Any const_double value. +@end table + @item ARM family---@file{config/arm/constraints.md} @table @code @item w @@ -2067,40 +2115,52 @@ Floating point register (containing 32-bit value) Altivec vector register @item wa -Any VSX register +Any VSX register if the -mvsx option was used or NO_REGS. @item wd -VSX vector register to hold vector double data +VSX vector register to hold vector double data or NO_REGS. @item wf -VSX vector register to hold vector float data +VSX vector register to hold vector float data or NO_REGS. @item wg -If @option{-mmfpgpr} was used, a floating point register +If @option{-mmfpgpr} was used, a floating point register or NO_REGS. @item wl -If the LFIWAX instruction is enabled, a floating point register +Floating point register if the LFIWAX instruction is enabled or NO_REGS. @item wm -If direct moves are enabled, a VSX register. +VSX register if direct move instructions are enabled, or NO_REGS. @item wn -No register. +No register (NO_REGS). @item wr -General purpose register if 64-bit mode is used +General purpose register if 64-bit instructions are enabled or NO_REGS. @item ws -VSX vector register to hold scalar float data +VSX vector register to hold scalar double values or NO_REGS. @item wt -VSX vector register to hold 128 bit integer +VSX vector register to hold 128 bit integer or NO_REGS. + +@item wu +Altivec register to use for float/32-bit int loads/stores or NO_REGS. + +@item wv +Altivec register to use for double loads/stores or NO_REGS. + +@item ww +FP or VSX register to perform float operations under @option{-mvsx} or NO_REGS. @item wx -If the STFIWX instruction is enabled, a floating point register +Floating point register if the STFIWX instruction is enabled or NO_REGS. + +@item wy +VSX vector register to hold scalar float values or NO_REGS. @item wz -If the LFIWZX instruction is enabled, a floating point register +Floating point register if the LFIWZX instruction is enabled or NO_REGS. @item wQ A memory address that will work with the @code{lq} and @code{stq} @@ -7638,6 +7698,7 @@ to track the condition codes. * Attr Example:: An example of assigning attributes. * Insn Lengths:: Computing the length of insns. * Constant Attributes:: Defining attributes that are constant. +* Mnemonic Attribute:: Obtain the instruction mnemonic as attribute value. * Delay Slots:: Defining delay slots required for a machine. * Processor pipeline description:: Specifying information for insn scheduling. @end menu @@ -7657,15 +7718,17 @@ by the target machine. It looks like: (define_attr @var{name} @var{list-of-values} @var{default}) @end smallexample -@var{name} is a string specifying the name of the attribute being defined. -Some attributes are used in a special way by the rest of the compiler. The -@code{enabled} attribute can be used to conditionally enable or disable -insn alternatives (@pxref{Disable Insn Alternatives}). The @code{predicable} -attribute, together with a suitable @code{define_cond_exec} -(@pxref{Conditional Execution}), can be used to automatically generate -conditional variants of instruction patterns. The compiler internally uses -the names @code{ce_enabled} and @code{nonce_enabled}, so they should not be -used elsewhere as alternative names. +@var{name} is a string specifying the name of the attribute being +defined. Some attributes are used in a special way by the rest of the +compiler. The @code{enabled} attribute can be used to conditionally +enable or disable insn alternatives (@pxref{Disable Insn +Alternatives}). The @code{predicable} attribute, together with a +suitable @code{define_cond_exec} (@pxref{Conditional Execution}), can +be used to automatically generate conditional variants of instruction +patterns. The @code{mnemonic} attribute can be used to check for the +instruction mnemonic (@pxref{Mnemonic Attribute}). The compiler +internally uses the names @code{ce_enabled} and @code{nonce_enabled}, +so they should not be used elsewhere as alternative names. @var{list-of-values} is either a string that specifies a comma-separated list of values that can be assigned to the attribute, or a null string to @@ -7729,6 +7792,11 @@ distances. @xref{Insn Lengths}. The @code{enabled} attribute can be defined to prevent certain alternatives of an insn definition from being used during code generation. @xref{Disable Insn Alternatives}. + +@item mnemonic +The @code{mnemonic} attribute can be defined to implement instruction +specific checks in e.g. the pipeline description. +@xref{Mnemonic Attribute}. @end table For each of these special attributes, the corresponding @@ -8281,6 +8349,47 @@ forms involving insn attributes. @end ifset @ifset INTERNALS +@node Mnemonic Attribute +@subsection Mnemonic Attribute +@cindex mnemonic attribute + +The @code{mnemonic} attribute is a string type attribute holding the +instruction mnemonic for an insn alternative. The attribute values +will automatically be generated by the machine description parser if +there is an attribute definition in the md file: + +@smallexample +(define_attr "mnemonic" "unknown" (const_string "unknown")) +@end smallexample + +The default value can be freely chosen as long as it does not collide +with any of the instruction mnemonics. This value will be used +whenever the machine description parser is not able to determine the +mnemonic string. This might be the case for output templates +containing more than a single instruction as in +@code{"mvcle\t%0,%1,0\;jo\t.-4"}. + +The @code{mnemonic} attribute set is not generated automatically if the +instruction string is generated via C code. + +An existing @code{mnemonic} attribute set in an insn definition will not +be overriden by the md file parser. That way it is possible to +manually set the instruction mnemonics for the cases where the md file +parser fails to determine it automatically. + +The @code{mnemonic} attribute is useful for dealing with instruction +specific properties in the pipeline description without defining +additional insn attributes. + +@smallexample +(define_attr "ooo_expanded" "" + (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr") + (const_int 1)] + (const_int 0))) +@end smallexample + +@end ifset +@ifset INTERNALS @node Delay Slots @subsection Delay Slot Scheduling @cindex delay slots, defining |