�������� �������� ����� ��� �����: ���� �������� ������ ( ".md" ����) � ���� ��������� C ����������������.
".md" ���� ��� ������� ������ �������� ������� ��� ������ �������, �������������� ������� ������� (���, �� ������� ����, ��� ������ �������, � ������� ����� �������� �����������). �� ����� ����� ��������� �����������. ����� ������ ����� ����� � ������� �������� ������������, ���� ����� � ������� �� ��������� ������ ������, ������������ ���������.
��. ��������� ����� ��� ���������� � ����� ��������� C.
������ ������� ������� �������� ������������� ��������� RTL, � �������, ������� ����� ��������� �����, ������������� �� ��������, ������� �������,��� ����� ���� ��������� ��� �����, � ������� ������ ��� C ���, ����� ������������� ����� ����������, ������� ��������� ����������� � ��������� " define_insn ".
" define_insn " �������� ���������� RTL, ���������� ������ ��� ���� ���������:
��� ����������� ������ ������� ������� ��� 68000/68020.
(define_insn "tstsi"
[(set (cc0)
(Match_operand: SI 0 "general_operand" "rm"))]
""
" *
{ if (TARGET_68020 || ! ADDRESS_REG_P (operands [0]))
return \"tstl %0\";
return \"cmpl *0, %0\"; }")
��� - �������, ������� ������������� �������� ����, ���������� ��
�������� ������ ��������. ��� �� ����� �������, ��� ��� ����� insn, ��� RTL
�������� ����� ��������� �����, ����� ���� ��������� �������� �����
�������. ��� "tstsi" �������� " test a 'SImode' value" � ��������
������� ��������� RTL, ���, ����� ���������� ��������� ����� ��������,
insn ��� ����, ����� ������� ���, ����� �������, ��������� ���� �������.
������ ���������� ������� - C ���, ������� �������� ������ ������ ��� ��������, ����������� �� ���� �������� � ������������� ���� ����������, ��� �������� ������������ ���.
` "rm" ' �������� ������������ ��������. ��� �������� ����������� ����.
RTL ������ ������������, ����� ����������, ����� insns ������������� ����������� ������� � ��� ����� �� ��������. ��� ��������� ��������, RTL ������ ����� ����������, ��� ������� insn �� ������ ���������.
����������� �������� ������ ������������ ��������� � ����� �������. ������������ �������� ����������� ��������, ������� ������ ��� �������� � ��������������� insn. ��� �� ���� �������� ����������� ������������ ������ ���������, ������� ��������� ������������� � ������� ���������.
��� ��������� - placeholder ��� �������� insn � ������� N. ��� ���������� insn � ���� ����� ������� � ������� N ����� ����������. ��� ������ ������������ insn-�, ��� ������, ������������ � ���� ������� insn, ����� ����������� ��� ������� ����� N; �� ��� ������ ������������� PREDICATE, ��� ���� ������� ������� �� ����� ��������������� ������.
������ ��������� ������ ���� �������, ��������������� ������ �� ���� ��� ������� ������� �������. ��� ������� ������ �������� � ������� ����� ������� ������ ���� ��������� `match_operand'. ������ �������� ������������� � ������� ��������� � ���������� `match_operand'.
PREDICATE - ������, ������� �������� ������ �-������� � ����� �����������: ��������� � �������� �����. � ������� ������������, ������� ����� ���������� � ������ ��������� ��� �������� ���������, � M ��� �������� ������ (���� M �� ���������, ����� �������������� ����� 'VOIDmode', ������� ������ ���������� �������� ��������� ����� �����). ���� ������������ ����, �� ��� ������� ������� �� �������� ��� ������������. PREDICATE ����� ���� ������ �������, ��� ��������, ��� ��� ��������� �� ���� ��������� �������� �����, � ���������� �������� ����� ���������, ������� � ���� �������.
����� ������ PREDICATE �������� ������, �������� �� M, �� �� ������. ��������, �������� 'address_operand' ���������� M ��� ����� ������, ���������� ������� ����� ������ ���� ���������. ������ ��������� ��������� 'const_int', ���� ���� �� ����� - 'VOIDmode' .
CONSTRAINT ��������� ������������� � ������� ���������� ������ ��������� ��� �������� ��������. ( ��������� ��� ����� ��������� ���� (��. �����������::.) ).
����� ����� �� ���� �������� ����� ������������� � �����������. �������� �������� ������, ������������� �� ������ insn �������. ����������� �� ������ ������� ���� � ���� �������, �� ��� ��������� ����������� ��������� � ������, ����� insn �������������.
�� CISC �������, �������� ���������������� PREDICATE - ��� 'general_operand'. ��� ������� ��������� �������� �� ������ ������� ����������, ��������� ��� ������� ������, � ��������� �� ������� ��� ������ M.
��� ��������, ������� ������ ���� ���������, PREDICATE ������ ���� 'register_operand'. �������� ��� �� ������������� ��������� 'general_operand', ��� ��� ������ ������������ �������� ����� �������� ��-�������� ����� ��������, �� ��� ���������� �� ������ GNU CC �������������� ������, � ������������� �� ������������ �������� (���� ���������) �� �������� �� ������, � �������� �� �������� allocator ��������� ������ ��������� ��������. �� RISC �������, ������ �������� ���������� ��������� PREDICATE ���������� ������ �� �������, ������� ��������� �����������.
��� ��������, ������� ������ ���� ����������, �� ������ ���������, ��� ���� �� ������������ 'immediate_operand' ��� PREDICATE, ���� ������� �������������� ������� ������� ������� ��������� ���������, ��� � �� � ������. ����� ����������� ����� ���� ������������! ���� ����������� ��������� ������ ���������, � �������� ��������� ���-�� ���, �� ��� ������������� ����� �������� ���������� ����������.
��� ��������� - ����� placeholder ��� �������� � ������� N � ���������, ��� ������� ������ ���� ���������� 'scratch' ��� `reg' .
��� ������������ ��������, ��� ������������
(match_operand:M N "scratch_operand" PRED)
��, ��� ��������� RTL, ��� ���� ��������� ( 'scratch': M ).
���� ��������� ��������� ��������� � 'parallel' �������� ����������� `clobber', ��� �������� �������� ���� ���������� ��������� ���� 'match_scratch', ��������� ����� ��������� ��� ������� �� ����� ����������.
��� ��������� - ����� placeholder ��� �������� � ������� N, ��� ������������, ����� ������� ������ ��������� � insn ������ ��� ���� ���.
��� ���������������, 'match_dup' ��������� ����� ��� �� ��� 'match_operand': � ����������� insn ���������� �������. �� � ������������, 'match_dup' ����� ���� ��-������� - �� ���������, ��� ������� ����� N ��� ��� ��������� ����� � ������� 'match_operand' � ������� �������������, � �� ������������� ������ ��������� ����������� ���������.
���� ������� - ������������� placeholder ��� ����������� ���� ��������� RTL.
��� ���������� insn, ��� ���������� �� RTL ���������, ��� ��� ��������� ���� �� �������� �������� N, � ��� �������� ������� �� �������� OPERANDS.
��� ������ ������������, ��� ������������� ���������, ���� ������� PREDICATE ���������� �� ���� �� ��� ��������� *�* ������� OPERANDS ������������� ��������� ���������.
�����������, ��� ������� 'commutative_operator' ���������� ��������� �������: ������������� ������ ���������, ��� �������� - ���� �� ������������� �������������� ���������� RTL � ��� ����� - MODE:
int
commutative_operator (x, mode)
rtx x;
enum machine_mode mode;
{
enum rtx_code code = GET_CODE (x);
if (GET_MODE (x) != mode)
return 0;
return (GET_RTX_CLASS (code) == 'c'
|| code == EQ || code == NE);
}
����� ��������� ������� ����� ��������������� ������ ��������� RTL,
���������� �� �������������� ���������, ������������ � ���� �����
���������:
(match_operator:SI 3 "commutative_operator"
[(match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")])
����� ������ `[OPERANDS...]' �������� ��� �������, ������ ��� ���
���������, ������� ����� ����� ������������, �������� ��� ��������.
����� ���� ������� �������������, ��� �������� �������������� ��������� �������������� ��� �������� 1 � 2 �� insn. (��� ��������� ����� 'match_operand'-���.) ������� 3 �� insn ����� ��������� ������������� ����������: ����������� 'GET_CODE (�������� [3]) ����� ������, ����� ������������� �������� ��� �����������.
��� M 'match_operator'-� �������� ���������� ���� 'match_operand'-�: �� ���������� ��� ������ �������� � ������� ���������, � ��� ������� ��������� ������������ �� �������, ����� �� ���������, ������� ����� �����������, ���� ���.
��� ���������� insn, ������ �������� gen-������� ��������� �������� (�� ���� ��� ���������) ��� ���������, ������� ����� �������. ��� ������ ���� ��������� RTL, ��� ��� ��������� ���������� � ����� ��������� � ��� �������� - ��������� 1 � 2 gen-�������. ������������ ��������� 3 �� ������������; ����� �������� ������ ��� ��� ���������.
����� 'match_operator' ������������ � ������� ��� ������������ insn, �� ������ ����� �����, ���� ����� �������� 'match_operator' ���� ��� ������ ����������� ��������� insn. ��� �������� ������������� ���������, ������ ��� allocator ��������� ����� ������������� �������� 1 � 2 �� insns, ����� ������, ����� �� �� ������� ��� ��������.
�� ���������� ������� ���������� ����������� � 'match_operator' . ������� insn, ������� ������������� match_operator' ������� �� ����� ������� �����������, ������ ��� �� ������� �� ��������������� ��� �����. ������, ���� ����� ��� OPERANDS ������������� 'match_operand' ��������, ��� ����� ����� ����� ����������� �� ��� �����.
������� 'match_dup', �� ����������� ����, ��� ����������� � ���������� ������ ���������. ��� ���������� insn, ������� ����� N �� ���� ����� ����� ����������. �� � ������������, 'match_op_dup' ����� ���� ��-�������. �� ���������, ��� ������� ����� N ��� ��� ��������� 'match_operator'-��, ������������ � ������� ������������� �����, � �� ������������� ������ ��������� ����������� ���������.
���� ������� - placeholder ��� insn, ������� ������� �� ��������� `parallel' � ���������� ������ ���������. ��� ��������� ����� ��������� ������ �� ������� ������ insn �������.
��� ���������� insn, ������� ����� N ����� ���������� �� ���� �����. ��� ������������ insn, ��� �������������, ���� ���� insn - ��������� `parallel' � �� ������� ���� ����� ����������� ���������, ��� ������ ��������� SUBPAT � 'match_parallel' , ���� ������ SUBPAT ������������� ���������������� �������� 'parallel', *�* ������� PREDICATE ���������� �� ���� �� 'parallel', ������� �������� ����� insn. �� ������������ ��������� 'parallel', ������� �� ������� � `match_parallel', ����� ��������������� ��������.
������ `match_parallel' ����������, ����� ���������� ��� � ��������������� ����������� ������ � ������, ������� ����� ��������� ��������� ����� ��������� � 'parallel'. ��������:
(define_insn ""
[(match_parallel 0 "load_multiple_operation"
[(set (match_operand:SI 1 "gpc_reg_operand" "=r")
(match_operand:SI 2 "memory_operand" "m"))
(use (reg:SI 179))
(clobber (reg:SI 179))])]
""
"loadm 0,0,%1,%2")
���� ������ ���� �� 'a29k.md'. ������� 'load_multiple_operations'
���������� � 'a29k.c' � ���������, ��� ����������� �������� �
`parallel' �� ��, ��� � `set' � �������, �� ����������� ����, ��� ���
��������� �� ����������� �������� � ������ ������.
Insn, ������� ������������� ����� �������, ����� ��������� �������� ���:
(parallel
[(set (reg:SI 20) (mem:SI (reg:SI 100)))
(use (reg:SI 179))
(clobber (reg:SI 179))
(set (reg:SI 21)
(mem:SI (plus:SI (reg:SI 100)
(const_int 4))))
(set (reg:SI 22)
(mem:SI (plus:SI (reg:SI 100)
(const_int 8))))])
������� 'match_op_dup', �� ��� 'match_parallel' ������ 'match_operator'.
���� �������� ��������� - placeholder ��� �������� ����� N � ���������� "�������� ������": �������, ������� ���������� ������ ������ ������� ��������, �� ��� �������� ����������� �������� �������� ���� ����� ������, � �� �� ����������.
��������� `address' ������� �� ���������� � RTL ����, ������ � �������� ���������. � ��� ������������ ������ � �������� ���������, ������� �� ���������� ����������� ����������� ��������. ����� ����������� �������� ������������, ������ 'p' � ����������� ������ ���� ����.
M - ��� *���������� ������ ������*, � �� ��� ������. ���� ��� ������ ���� � ��� �� �� ������ ������� ������ ( 'Pmode' , ������� ������ �������� 'SImode'), ��� ��� �� ����� ������ ��� ���������; ����� �������, � ��������� 'address' �� ������� ������� ���. ���� ������� ����� ��������� ��������� �����, � ������� ������ �������� ���������� ���� ���������� ��-������� ��� ������������ ��-������� (���� PDP-10), ��������� �������, ��������, ����� ��������� � ��������� �����, � ��� ���� ������ ���� ��������� � ��������� 'address'.
'������ ������' - ��� ������, ������� ����������, ��� �������� ������������ ��� ��� ������� �������. ����� ���� ������ - ������������� ������, ������� ��������� ���������. ������ '%' ������������, ����� ���������� ����� ������ ���������; �� ����� ����� ��������������, ����� ���������� �����, ��� ��������� �������� ���������� ������� ���������� ����������.
� ����� ������� ������, '%', � �� ��� ����� N ���������, ��� ���� ������� ������� N � ���� �����.
'%' ����� �������� ����� ������ � ����� �������, ��� ���� ������� ������� �������������� ��������. ������ ������� ����� �����������, ���������� ��������, ��������� ����. �������� ������������ �������� 'PRINT_OPERAND' ����� ���������� �������������� ������� � �������������� ����������.
'%cDIGIT' ����� �������������� ��� ������ ��������, ������� �������� ���������� ��������� ��� ����������, ������� ������ ��������� ���������������� �������.
'%nDIGIT' ����, ��� � '%cDIGIT' , �� �������� ��������� ����� ������� ���������� �� ����� ��.
'%aDIGIT ' ����� ��������������, ����� �������� �������, ��� ��� ���� �� ��� ���� ������ �� ������ ������, ����������� ���������, �������������� ��� �����. ��� ����� ���� �������, ����� ��������� ���������� "��������� �����", ������ ��� ����� ��������� ���������� ��� ����� ������� �������, ����� �� ������ �������, ��� ����� ��� ���� �� ������ ������.
'%lDIGIT ' ������������, ����� �������� ' label_ref ' �� ������� ��������.
'%=' ������� ���������� ����� ��� ������ ������� �� ���� ����������. ��� ������� ��� �������� ��������� �����, ������� ����� ��������� � ������� ������ ��� ���� ���, ������������ ������������ ������� ����������.
'%' �� ������� ������� ������ ���������� ���������� ������, �� ������������ �������. ����������� �������� ������ ���� ������ : ' %% ' - ������� � ��� ���������� '%' . ������, ������������� ������ ����� ���� ���������� � ������������ 'PRINT_OPERAND' . �� ����� ������ ����������, ����� ������� ���������� ���������, � ������������ 'PRINT_OPERAND_PUNCT_VALID_P' .
������ ����� ������������ ��������� ������ ����������. ������ ����� ��� ����� ������, �������� �� ' \; ' .
����� RTL �������� ��� ��������, ������� ��-�� ����������� ������ ��������������� ���� �����, ������ ������ ������ ���������� ������ � ���� ��������, ����� �������� ������. ��������������� �������� �� ������ ���������, � ��������� ����� ����������� �������� ���, ����� ��������� ��������������� ��������� RTL ��� ������ � ������� � ������� �������.
��������� ������������� ������� ��� ���������� ����� '%', ����� ��������� �������� ����� ���������� ������� ����������� ��� ��� �� ����� ������; ��������, ����������� Motorola � ����������� MIT ��� 68000. ��������� Motorola ������� ����� � ����������� ���� ���� ��������, � �� ����� ��� MIT ��������� �� ������� �����. ��������, ��� �������� 'movel' � MIT ���������� - 'move.l' � Motorola ����������. ��� ����� ����� ���������� ������ ������������ ���� � ��� �� ���� ��������, �� � ������ �����, ��� Motorola ��������� ����� �����, ������������ ���������� ������������������ '%'. ������������ PRINT_OPERAND ��� Motorola ���������� ���������� ������������������, ����� �������� �����; ������������ ��� MIT ���������� ����������, ��� �� ���� ������ ��������.
��� ����������� ������, ������, ��������� �� ���������� ������� '*' ���� ���������� �����������, ����� ������� ������� insn, � ����� ������� ���������� ������� �� �����������. ��� �������� ��������� ������������ � �������� ������. ���� �� ������ 'define_insn' ������� ������ ������� ��������� ������ ����������, � ������� ��� ������������ ������������ - 'define_split' , �� �� ������ ������ ������������ '*' ��� ������ ������, ������ ����, ����� ��������� ������ ������, ��������� ��������� ������������ ������.
���� 'ASSEMBLER_DIALECT' ���������, �� ������ ������������ � �������� ����������� ���� '{option0 | option1 | option2} '. ��� ��������� ��������� ��������� ���������� ����� ����������. ��. ����� ������
����� ��������� ������������� ������ ������� �� ����� ����������� �� ���� �������, ���������� ��� ��������� ������� �������, ���������� � ����������� ��� ����������. ��������, ���� �������� ����� �������� �� ���� ���������; ��� ��������� ��������� ���������� ��������� ����� ��������� �������������� �������� ������.
���� ������ ���������� ������ ���������� � '@' , �� ��� - ��� ��������, ������ �� ��������� ������. (������ ������, ������� ������� � ����� ��������� ������������.) ������� ������������� ��������� ����������� ������� (��. ������������� ������������). ��������, ���� ������� ������ ����� ������������ ������� �������� 'addr' ��� �������� � ������� � ������ 'addm' , ����� �������� ������� � ������, �� �� ������ ������������ ���� �������:
(define_insn "addsi3"
[(set (match_operand:SI 0 "general_operand" "=r,m")
(plus:SI (match_operand:SI 1 "general_operand" "0,0")
(match_operand:SI 2 "general_operand" "g,r")))]
""
"@
addr %2,%0
addm %2,%0")
���� ������ ���������� ������ ���������� � '*' , �� ����� ���� �� ������
������, � ����� ��������� C, ������� ������ ��������� ������. ��� ������
������������ �������� 'return' , ����� ���������� ������ �������, �������
�� ������. ����������� ����� �������� ���������� �������� �������� C,
������� ������ ���� ������������ ��������� ������� �������. ����� ������
�������� ������� ������� ���� ������� '\' .
�������� ����� ���� ������� � ������� 'operands' ,��� ������ �������� � �- ' rtx [] ' .
����������� �������� ��������� ������� ������������� ������������� ����, ������������ �� ���, ��������� �� ���������������� ������� ������ ���������� ���������. ������ ������������ ��� ���������� �����, ������ ��� ��������� 'INTVAL' �� ������� ������ �������� ����� ������. ���� ������� ������ ����� ������� ���������� ����� � 'int' ��� ������� ������ ����� � ����, � ������� ��������� ����� ��������������, �� ��������� �� �����, ������� �� ��������� �� 'INTVAL', ����� �������. ��� ���������� �����������, �� ������ ��������� ������������ �������� ���� �����.
�������� ������� ������� ���������� � ����� ���������� �������� ��� ��������� ��������� �������, ��������� ������������ 'output_asm_insn'. ��� �������� ��� ���������: ������ ������� � ������ ���������. ������ ����� ���� 'operands', ��� ��� ����� ���� ������ ������ 'rtx' ������� �� ���������� �������� � ��������������� ��������������.
����� ������� insn ����� ��������� ��������� �����������, ����� ��������� ������������� ���� ������������ � �������� ���, ����� �� ��������� ��� ����������. ����� ��� - ���, C ��� ����� ��������� ���������� 'which_alternative ', ���������� ���������� ������� ��������, ������� ��� ���������� ������ (0 ��� �������, 1 ��� ������� ��������, � �.�.).
��������, �����������, ��� ������� ��� ���� �������� ��� ���������� ����, 'clrreg ' ��� ��������� � 'clrmem' ��� ����� ������. ���� �������� ������, ��� ������� ����� ������������ 'which_alternative ' ��� ����, ����� ������� ����� ����:
(define_insn ""
[(set (match_operand:SI 0 "general_operand" "=r,m")
(const_int 0))]
""
"*
return (which_alternative == 0
? \"clrreg %0\" : \"clrmem %0\");
")
� ��������������� ������� ������������ ��� *���������* �����������
��������� �������������, �� �� ��� ���� ����� ��������� �����
������ ���������� ������� ������������ � '@' ��������� �������:
(define_insn ""
[(set (match_operand:SI 0 "general_operand" "=r,m")
(const_int 0))]
""
"@
clrreg %0
clrmem %0")
������ 'match_operand' � ������� ������� ����� ���������� ����������� �� ��� ���������. ����������� ����� ���������, ����� �� ������� ���� � ��������, � � ����� ����� ���������; ����� �� ������� ���� ������� ������, � ����� ����� �����; ����� �� ������� ���� ���������������� ����������, � ����� ��������� �������� �� ����� �����. ����������� ����� ����� ��������� ������������ ����� ����� ����������.
����� ������� ��� ����������� - ������, ����������� ���������, ������ �� ������� ��������� ���� ��� ������������ ��������. ������� ��������� ����������� �������:
����������� ������� ������ � ����� ����� ������, ������� ������ ������ ������������.
����������� ������� ������ ������, ���� ����� - "���������". ��� ��������, ��� ���������� ���������� ������ ����� (����������, ������ �������� � ������, ��� ���������� ��� �����) ����� ���� ��������� � ������, � ��������� - ����� ���������� ����� ������.
��������, �����, ������� �������� ���������� - ���������; ������� �����, ������� �������� ������ �������� � ��������� ���� ��������� (���� ������ ��������� ���������� ��������� ��������� ����� ������ ���������, ��������������� �������); �� ������������������� ��� ����������������� ����� - �� ���������. ����� ������� ���������/��������������� ������ ����� ���� ��� �� ���� ���������� � ����������� �� ������ �������� ���������, ������� ������������ ������.
�������� �������� �� ��, ��� � �������� ������, ������� ����� ���� ���������� � ������ ���������, ������ ����������� 'o' ��������� ������ ����� ������������ ��� �������� : '<' (���� ������� ������ ����� ���������� ������) � '>' (���� ������� ������ ����� ���������� ������).
�� ��������� ������� ������. ������� �������, ����� �������, ��������������� 'm' �����������, �� �� 'o' �����������.
����������� �������� ������ � �������������� �������������� ������ (���� ������������������ ���� �������������������).
����������� �������� ������ � �������������� �������������� ������ (���� ������������������ ���� ������������������).
����������� ������� ��������, ��� �������, ��� �� ��������� � ����� ��������.
������ ������� ����� ���� ���������� �������-��������� �������� ������ ���������� ������� ���������. 'D' , 'a' � 'f' ���������� �� 68000/68020, ��� ��������� ������, ��������� ������ � ��������� � ��������� ������ ��������������.
����������� ���������������� ������������� ������� (� ���������� ���������). ���� ��� �� ���������� ���������� ���������, ��� �������� ����� �������� ������ �� ����� ����������.
����������� ���������������� ������������� ������� � ��������� �������� ��������� . ����������� ������ �� ������������ ���������, ��������� �� ����� ����������, ��� ���������, ������� ��� �����. ����������� ��� ���� ��������� ������ ������������ ������ 'n' ��� 'i' .
������ ������� � ��������� �� 'I' �� 'P' ����� ���� ���������� �������-��������� �������� ��� ���������� ���������������� ������������� ��������� � ������ �������������� ���������� � ������������ ����������. ��������, �� 68000, 'I' ��������� ��� ��������� �������� �� 1 �� 8. ��� ��������, ����������� ��� ������� ������ � �������� ������.
�������� ���������������� ������� � ��������� ������ (��� ��������� 'const_double' ), �� ������, ���� ������ ���� � ��������� ������ �� ������� ������ ��������� � ��������������� �������� �� ������� ������.
����������� ���������������� ������� � ��������� ������ (��� ��������� 'const_double').
'G' � ' H' ����� ���� ���������� �������-��������� ��������, ����� ��������� ���������������� ������������ �������� � ���������� ���������� ��������.
����������� ���������������� ������������� �������, ��� �������� �� �������� ���� �������� ����� �����.
��� ����� ���������� ��������; ���� insn ��������� ���������� ������� �� ���������, �� ��������� �� ������� ����������, �� ������� �� �� ������ ��������� � ����� ��������� ��������. ��� ������ ������������ 's' ������ 'i'. ������ ��� ��������� ������������� ������ ���.
��������, �� 68000 � fullword ������� �������� ������������ ���������������� �������; �� ���� ���������������� �������� - ����� -128 � 127, ������ ��� ���������, ���� ��������� �������� � ������� � ������������ �������. ��� ���������� ��-�� ����, ��� �������� � ������� ����� ���� ��������� � ������� ������� 'moveq'. �� ������������� ���, ���������, ��� ������ 'K' �������� ����� ����� ����� ��� ��������� �� -128 �� 127 � ����� ������� 'Ks' � ����������� ��������.
����������� ����� �������, ������ ��� ���������������� ������������� �������, ����� ���������, ������� �� �������� ������.
����������� ����� �������, ���� ���� �� �� ������������� 'general_operand'. ������ ��� ������������ � ����������� 'match_scratch ' ����� ��������� �������� ���������� �� ����� ��������� �������� ��������.
����������� �������, ������� ������������� ������������� ������ ��������. ���� ����� ������������ ������ � ��������� ������ ���� �� ������ ��������, �� ����� ������ ������ ���������.
��� ���������� '������������ �����������' � ��� ������������� �������� ��, ��� ��������� ����� ������ ���� �������, ������� ��������� ��� ����, ��������������� ���������� � RTL insn. ��������, insn �������� ����� ��� ������� �������� � ���� ������� ������ � RTL, �� �� ����������� CISC ����� ������� �������� � ���������������� ����� ������ ��� ��������, ���� �� ��� ������� �����-������:
addl #35,r12
� ���� ��������������� ������������ ��������������� ����������� . �����
�����, ��� ��������, ��������������� ���� �����, ������ �������� ����
������ ������� ������� � ���� ������ �������� �������. ����� ����,
����� ������ ���� ������, ��� ����� ��������, ������� ���������� ��
� �����������.
��, ��� �������� ������������� ���� �����, � ���������� ������ ��������, ��� ��� ��������� ���������� ��������� RTL. �� � ���������� ����������� ������� ����������� ������������ ���� ��������. ��������, '*x' ��� ������� ������� ����� ��������������� '*x++' ��� ������� ������. ��� ���������� ����������� � ����� �������, ������ ������ ������ ������ ������������ ����� �������� ������ ��� ������ ��������.
����������� �������, ������� �������� ���������� ������� ������. ��� ����� ��� ���������� "load address" � "push address".
'P' � ����������� ������ ������������� 'address_operand' ��� �������� � 'match_operand'. ���� �������� �������������� ���, ������������ � 'match_operand' ��� ��� ������ ������, ��� ������� ����� ��� �� ����������.
������� � ��������� �� 'Q' �� 'U' ����� ���� ���������� �������-��������� �������� ������ ������������ ����� ��������. �������� ������������ �������� 'EXTRA_CONSTRAINT' ���������� ������� ��� ������ �������� � ������ ����������� ��� ������ �������.
�������� ������������� ��� ����� - ���������� ��������� ���� ������ ������, ������� ������������ �� ������ insn ��������.
�� ����������� ��� ������� �����������, ����� ������� ������ �������� ('reg'); ������ ������������ �� ������� ����� � �� ���������� ��� ���������.
�������� ��� ��������� �������:
(define_insn ""
[(set (match_operand:SI 0 "general_operand" "=r")
(plus:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "r")))]
""
"...")
������� ����� ��� ��������, ���� �� ������� ������ ��������� � ���� ������, �
(define_insn ""
[(set (match_operand:SI 0 "general_operand" "=r")
(plus:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "r")))]
""
"...")
������� ����� ��� ��������, ��� �� ������� �� ���������� ����������� ������ ���� ���������. ���� �� ������������� insn ����
(insn N PREV NEXT
(set (reg:SI 3)
(plus:SI (reg:SI 6) (reg:SI 109)))
...)
������ ������� �� ���������� �� ������, ������ ��� ���� insn �� �������� ���
���������� ������������ � ������ �����. ������� ������ �� "��� ��
������ �� ������� ��������; ���������� ������ �������." ������ �������
������ �� "��, ��� ������� ��������, �� � ��� ���-�� �� ���." �� ��������
�� ������ ������������ �����������, ����� ������������� �������������� insns,
�������� ����������� ���������. ���������� ����� �� ��������� ���������
�������:
(insn N2 PREV N
(set (reg:SI 3) (reg:SI 6))
...)
(insn N N2 NEXT
(set (reg:SI 3)
(plus:SI (reg:SI 3) (reg:SI 109)))
...)
��� ��� ����, ����� �������������� ��� ������ �������, � ������ �������,
����� �����������, ������� ����� ������������ ����� ��������� RTL, �������
����� �� �������������� ��� ���� ��������. (����� ������������ �������������
��������, ������ ������� ��� ������ ��������� ���������� ��������� ��������
������ ����� �� ������� ���� ���� �������, ������� ����� ������������ ��
���������� ���������.) ����������� �� ������ *���������* ����� ���������
�������, �� ��� ������ �� ������� ���� ������� ���� �� ������������ ������
���������� �������� ���, ����� �� ������������ ������������.
������ ��������� ������� ����� ����� �������������� ������� ��������� ���������. ��������, �� 68000, ������� ����������� or ����� ���������� ������� � ���������������� �������� ������, ��� �� ��� ����� ���������� ������� ������ ���� � �������; �� ��� �� ����� ���������� ���� ������ ������ � ������.
��� ����������� �������������� ����������� ����������. ������� ����� ���� ������ ����� �������� ��� ������� ��������. ������ ����������� ��� �������� ������� �� �������� ��� ����� �������� �� ������� ��������, �������, ������� ��� ����� �������� �� �������� �������, �������, � ��� ����� �� ���������� ��������. ����� ������������ ��� ��� �������� ��� ����������� ��� � ������� ������� �� 68000:
(define_insn "iorsi3"
[(set (match_operand:SI 0 "general_operand" "=m,d")
(ior:SI (match_operand:SI 1 "general_operand" "%0,0")
(match_operand:SI 2 "general_operand" "dKs,dmKs")))]
...)
������ ������� ����� 'm' (������) ��� �������� 0, '0' ��� �������� 1
(��� �������� ������ ��������������� �������� 0), � 'dKs' ���
�������� 2. ������ ������� ����� 'd' (������� ������) ��� �������� 0,
'0' ��� �������� 1, � 'dmKs' ��� �������� 2. '=' � '%' � ������������
���������� �� ���� ���������; �� �������� ����������� � ��������� �������
(��. ������������ �������).
���� ��� �������� ������������� ������ ��������, ������� ���������. �����, ��� ������� ��������, ���������� ������������, ������� ������ ������ ���� ���������, ����� ����������� �������� ����� �������, ����� ���������� ���� �������. ����� ������ �������, ��������� ����������� �����������. ���� ���� ��������� ��������� ���������� ���������� �����������, ����� ������ ������. ��� ������ ����� ���� �������� � ������� �������� '?'� '!':
������� �������� ��������� ��������, � ������� ����������. �������� � ������, ����� �� ���� �� ��������� ����� �� ������. ���������� ����������� ����� ������� ��� ����� ������������.
�������� ��������� ����� �������� �� ��������. ���������� ��� ��� ����� ������������ ���� �������, ���� �� ����� ������� ��� ������������. �� ���� ������������ ����������, �� ����������� ����� ������ ������ �������.
����������� �������� ������ ��� ������ �����: ��� ���� ����������� ����������� ������, ��� ����� ����� ������������ ���������� � ������ ��������. ���������� ��������� �����������, ������� ���������� � insns, ������������ ������ �������, ��� �������-��������� ������� ���� 'd' � 'a' ������� ���������� ������ �������������. ������ ������� ������� � ����� ����� �������� �������� ����������. ������� ����������� 'g' � 'r' ����� ��������: ��� �������� � ������ ������ ��������. � �������� �������� ���������, ����� �������� �������� ������.
�������, �� ��������� ������� ��� �������� ������������, � ��� ������� ������� ���������. � ����� ��� ��� ������� ���� �� �����.
����� ���� ������� ������������ �����������.
��������, ��� ���� ������� � ���� ������� ������ ��� ������: ���������� �������� ������������� � ���������� ������� ����������.
��������, ��� ���� ������� ���������� ����� ��� ������ ��� � ������.
����� ���������� ������������� ��������, ����� ������������� �����������, ��������� �����, ����� �������� �������� ������� � ������� � ����� �������� �������� �� ���. '=' �������������� �����; '+' �������������� �������, ������� ��������, � ������ � �������; ��� ������ �������� ������ �������.
�������� (� ������� �� ������ �������) ��� ���� ������� ������� ������, ��� ������� ���������, ��������� ������� ��������. �������������, ���� ������� �� ����� ���������� � ��������, ������������ ��� ������� ������� ��� ��� ����� ������ ������ ������.
'&' ����������� ������ � ��������, � ������� ��� ��������. � ������������ � ������������� ����������, ������ ���� ������� ������� '&' � �� ����� ��� ������ ���. ��. ��������, 'movdf' insn �� 68000.
'&' �� ��������� ����������� ������ '=' .
���������, ��� ������� ����� ������������ ��� ����� � ���������� ���������. ��� ��������, ��� ���������� ����� ������������ ����� ����������, ���� ��� ����� ������� ������ ��������� ��� �������� ������������� �����������. ��� ����� ������������ � �������� ��� ������� ��������, ������� ������������� ����� ������ ��� ��������: ��������� ������ ����� � ���� �� ����������. �����, ��������, ������� ��� ���������� ���������� �������� �������� � 68000:
(define_insn "addhi3"
[(set (match_operand:HI 0 "general_operand" "=m,r")
(plus:HI (match_operand:HI 1 "general_operand" "%0,0")
(match_operand:HI 2 "general_operand" "di,g")))]
...)
�������, ��� ���� ����������� �������, ������ �� ��������� �������, ��� ����������� ������ ��������������. ��� ������� ������� ������ ��� ����� ����������������� ��������.
�������, ��� ��������� ������ ��� ������ ����������������� �������� ������ ��������������. '*' �� ��������� �������� ������� �� �������� �����������, �����������.
����� ���� ������: 68000 ����� ������� ��� ��������� ��������������� �������� ����� � ������� ������, � �������� ����� �������� ��������������� � ������� ����������� � ������� ������. � �� ����� ��� ����� ��� �������� ��������, ����������� �� �������� �������� ������ ����� ������, ��� ��� ����� ������, ���� ������������� �������� ���������� ����� �������������� ����. �������������, '*' ������������ ���, ����� ������ ����������� 'd' (��� �������� ������) ������������� ��� ���������� ������������ ��������.
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "general_operand" "=*d,a")
(sign_extend:SI
(match_operand:HI 1 "general_operand" "0,g")))]
...)
�� ���� �����������, �� ������ �������� ������������ � ���������� 'asm' ����������� ������ ����������, �.�. ��� ����� �������������� ������� ������. ���� �� ����� �� ������, ����������� ������� �����������, ������� ����� ����� ����� ������ ���������� �������� ��� ������ ����������. �������� ����� ������������: `m' � `r' (��� ������ � ��������� ������ ���������� ��������������; ��. ������� �����������), � `I', ������ ������, ����������� �������� ����� ������ ��� ����������� �����.
��� ������ ����������� ������, ���� 'config/MACHINE.h' ���������� �������������� �����������. ��� ����������� ������������ ������������ ��������������� ��� ��������� ������, ����� ��� ��� asm-����������; �������������, ��������� �� ����������� �� �������� ��������� ��� asm. ����������� ���������� ����� ��������� ������������:
����������� ���� �������� (������ �������� �����).
���������������� ���������� �����������, ��� �������� � ����������� ������ �������� ����� ��� ������ (������ ������� �������).
���������������� ���������� �����������, ��� ���� �������� � ��������� ������ � ��� �������� ������� ��� �������� ������� ����� (������ ������� �������).
����������� ������ ��������� ��� ������. ��� ������������ �� �����������, � ���������� ������ ��� ��������� �����.
������� � ��������� ������
���� �� ��������� �������� � ��������� ������ - 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0 ��� 10.0
��������� � ��������� ������, ������� ������������� �� ����������� 'F' ���� �������� � ��� ����
����� �����, ������� ����� �������������� ��� ���������������� ������� � ������� ��������� ������. �� ���� ����� ����� � ��������� �� 0 �� 255 � ��������� ���������� 2
����� ����� � ��������� -4095 � 4095
����� �����, ������� ������������� ����������� 'I' ���� �������� ���� (��������� ����������)
����� �����, ������� ������������� �� ����������� 'I' ���� �������� � ���� ���� (������� ����������)
����� ����� � ��������� 0 � 32
������ ������, ��� ������ ����� ��������� � ����� �������� ( ``m'' �������� ���������������� ��� `asm'-�������� )
������� constant pool
������ � ��������� �������� ��������(�����������) �����
��������� ������� 0
������� ��������� ����� ('BP')
'Q' �������
����������� ������� ����
������ ������� ��������
������ ��������
������� � ��������� ������
��������� ������� ��� 0, ������� ��� 0x100
��������� ������� ��� 0, ������� ��� 0x10000
���������, ��� ������� 24 ���� ��������� �� (1)
16 ������ ���������, ��� ������� 8 ����� ��������� �� (1)
32 ������ ���������, ��� ������� 16 ����� ��������� �� (1)
32 ������ ������������� ���������, ������� ���������� � 8 ���
��������� 0x80000000 ���, �� 29050, ����� 32 ��������� ���������, ��� ������ 16 ����� - 0.
16 ������ ������������� ���������, ������� ���������� � 8 ���.
��������� � ��������� ������ (� asm-����������, ����������� ������ �������-����������� 'E' ��� 'F')
������� ������ ������
������� � ��������� ������
'MQ' , 'CTR' , ��� 'LINK' �������
'MQ' �������
'CTR' �������
'LINK' �������
'CR' ������� ����� 0 (������� �������)
'CR' ������� (������� �������)
16-������ ��������� �� ������
���������, ��� ������ 16 ��� - 0
���������, ��� ������� 16 ��� - 0
��������� ���������� ��� ������� �����
��������� ������ ��� 31
������ �������� 2
����
���������, � ������� ���� �������� ����, �� ��������� 16 ������ �������� ���������
��������� � ��������� ������, ������� ����� ���� ��������� � ������� � ������ ����� ������� �� �����
������� ������, ������� �������� ��������� �� �������� ( 'm' �������� ���������������� ��� `asm'-���������� )
'a' , 'b' , 'c' , ��� 'd' �������
'a' , ��� 'd' ������� (��� ints � 64 ������)
������� � ��������� ������
������ ������� � ��������� ������ (������ �����)
������ ������� � ��������� ������
`a' �������
`b' �������
`c' �������
`d' �������
`di' �������
`si' �������
��������� � ��������� 0 � 31 (��� 32 ��������� �������)
��������� � ��������� 0 � 63 (��� 64 ��������� �������)
'0xff'
'0xffff'
0, 1, 2, ��� 3 (���������� c ������� 'lea' �������)
����������� 80387 ��������� � ��������� ������
������� � ��������� ������ ( ' fp0 ' � ' fp3 ' )
��������� ������� ( ' r0 ' � ' r15 ' )
���������� ������� ( ' g0 ' � ' g15 ' )
����� - ��������� ��� ���������� �������
����� ����� �� 0 �� 31
0
����� ����� �� -31 �� 0
������������ (� ��������� ������) 0
������������ (� ��������� ������) 1
������������� ������� ������ ����������
������� � ��������� ������ (���� ��������)
'Hi' �������
'Lo' �������
'Hi' ��� 'Lo' �������
������������� ������� ������ ����������
������� ��������� �������� � ������ � ��������� ������
16 ��������� ��������� �� ������ (��� �������������� ������)
����
����������� ����� 16-������ ��������� (��� ���������� ������)
��������� � ������� ������ 16 ��� - 0 (����� ���� ��������� ' lui ' )
32 ������ ���������, ������� �������, ��� ������� ��� �������� (��������� ������� - �� `I', `K', ��� `L' )
������������� 16-������ ���������
������ �������� 2
������������� 16-������ ���������
������������ (� ��������� ������) 0
������ ������ ������, ������� ����� ���� ��������� ����� ��� ����� �������� ( 'm' ����� ��������������� ��� asm-����������)
������ ������, ������� ����� ���� ��������� ����� �������� ( 'm' ����� ��������������� ��� asm-����������)
������ ������ �� ������� ������� OSF/rose PIC ( 'm' ����� ��������������� ��� asm-����������)
������� ������
������� ������
68881 ������� ����� � ��������� ������, ���� ��������
Sun FPA (������������, � ��������� ������) �������, ���� ��������
������ 16 Sun FPA ���������, ���� ��������
����� ����� � ��������� �� 1 �� 8
16 ������ �������� �����
�������� �����, ��� �������� ������� ��� 0x80
����� ����� � ��������� �� -8 �� -1
��������� � ��������� ������, �� ���������� 68881 ����������
��������� � ��������� ������, ������� ����� �������������� Sun FPA
������� � ��������� ������
�������� 13-������ ���������
����
32 ������ ��������� � ������� ������� 12 ������ (���������, ������� ����� ���� ��������� �������� 'sethi')
������������ (� ��������� ������) 0
�������� 13 ������ ���������, �����-���������������� �� 32 ��� 64 ���
������ ������, ������� ����� ���� ��������� ����� �������� ( 'm' ����� ��������������� ��� asm-����������)
���������, ��� ����� ������
����� ������, ����������� � 8 �������� �������
������ �������
��������� ������ ��������� �����, ��� ����������� �� �������� ������ �� �����. ��������, �� Vax �������, ���������� � ����� ���������, ����� ��� �� ��������� � � ����� ������ ���������. �� ����� ������� ������ ������� ������ ����� ����������� `g', ��������, ����� ���, �������� ���������� �������� ������, ������� ��������, ��� ����� ��� ���������� � ������� ������, �� ����������� ��� ���������� � ������ ������. ��� ����� �� ����������� 'p'.
��� ����� �����, ������ ����, ����� ���������� 'g' � 'p' ��� ���� �����������, �� ������ ������ �������� � ������� �������������. ����� �� ������ `""' ��� ����������� � ������ 'match_operand' . �������� ������ ����������������, ������������ ��������� `address' ����� � 'match_operand', � �� �� �������������.
����� �������� �������� ����� ������ ������ �����������, ��������� ����� ���������� ����� ���������, ��� ������ ���������� �������. ������, ������ ����� ����� ����� ����� ���������� �� ��������� � ������������; ��� �������� �������� ������ ��� �������� ����������� �������������.
��� ������� ���� ������, ������� �������� ��������� � ������ ��������� RTL �����������. ������������ ������ �� ���� ���� ������� ������� �������� ������� ��������� RTL, ��� �� ����� ������������ ���� ������� ��� ���������� ��������� ������.
����� M - ��� ��������� ���� �� ���� ��������, ��������� �������. ���� ������� ������� ���������� ������ � ���� �������� ����� �� �������� 1 � ������� 0. ��������, " movsi " ���������� ������ ������ � �����.
���� ������� 0 - " subreg " � ����� M ��������, ��� ����������� ��� ����� �������, ��� M, ������ ���� ������� ������� � ���������� ���������� �������� � ����� ��������, ��������������� ���� M. ������ �� ��������� ����� �������� �� ���������.
���� ����� �������� ���������� �� ���������� ��������. ������ ����� ������ �� ���� ���� *������* ���� ����������, ������ ��� ��� �������� ������� ������� ����������� ������ �� ������ ����� � ������.
��-������, ��� ������� ������������ �� ������ � ������� ��������� RTL. ���� ������ ������������ ����� ������������ ����������� insns, ����� ���������� �������� �� ������ ����� �� ��������� ��������. ����� �� ������ ���, ���� �� ��������� - ���������� �������, � ������ - �������, ������� ����� ������������� ������������� � �������.
�������������, ����� ������ ����� ���� ���������, ������� ������ ������������ RTL, ������� �� ��������� � ������������ � �� ��������� �� ��������� ��������� - ������� ���������, �������� �� ���������. ��������, ���� �� ������������� ������� � " define_expand ", �� � ����� ������ " define_expand " �� ������ �������� " force_reg " ��� ����� ������ ����� �������, ������� ����� �� ������������ ����� ��������������.
��� ���������� ���������� ���� ��� ����� �������� �� RISC ������, �� ������� ��� ������� ���� ����� �� ������ ������ ��������� ��������� insns � ��������� ��������� ���������. ���������� � " spur.md ", ����� ������� ��� ��� ���������� ����� ���� �������������.
� ������� ������������ ������ ������ � ������������ ������� ����� ���� �������� ��� �������. ����� ����� ����� ������� �� ���������� ����� ����� � ������� ������������. � ���� ������ � ������� ������ ������ ������, �� ����������� ������������� ��� ���, ��� ��� ����� �����. ���� �� ����������, �� �� ���������� �� ������� ���� �����. �� ������ �������� ������� ������� ������� ����� ����� ���������� � ������ �������� ������������ (���� " change_address "), ������� ����� ��� ������. �������� ��������, ��� " general_operand " �������� �������, ���� ��������� ��� � ������ ������.
���������� ���������� " reload_in_progress " (������� ������ ���� ���� ���������, ���� ���������) ����� ��������������, ����� ����������, ��������� �� ����� ����������� ���������.
���� ���������, ������� ����� ���������������, ������� �� ��������� ����� ��������� ��������, �� ������ �� RISC ������� ��� ����� ���� ������ ����������������, ������� �� �������� ���������� ���������, � �� ����� ��� �� ������ ������� ����� ������ ������ ������ ����� ���������������.
���� ������� ������� ���������, ����� ����������� ������ � ������ ��� �� ������, �� ����� ���� ����������� � �������������� " gen_reg_rtx " �� ������������. �� ��� ���������� � ������� � ����� ������������. ���� ���� ������, ����������� � ������� ��������� ����� ������������, �� ������ ���������� " SECONDARY_INPUT_RELOAD_CLASs " �, ��������, ����� " SECONDARY_OUTPUT_RELOAD_CLASs ", ����� ���������� ��, � ������������ ������� " reload_inM " ��� " reload_outM ", ����� ���������� ��. * ��.: ������ ���������::.
����������� �� " moveM " ������ ��������� ���������� ����� ���������� ������� � ����� ������ ���������� ������� ��� �������, ��� " HARD_REGNO_MODE_OK " ��������� ��� M ��� ����� ���������, � " REGISTER_MOVE_COST ", ����������� � �� �������, ���������� �������� 2.
����������� ������������ ������� " moveM " � ��������� ������ ������ � ��� ����� ���������, ������� ����� ������� �������� � ������������� ������, ������ ��� ����������� � ��������� (������� ����� ���� " SImode " ��� " DImode ") ����� ���� � ���� ���������, � ��� ����� ����� ���� � ��������� ������.
����� ����� ������� ����������� ������������ ������� " moveM " � ������������� ������ ������ � ��� ��������� � ��������� ������. � ���������, � �����, ������ ��� ���� ���, � � �� ����, ��� �� ��� �� ��� ���. ���� " HARD_REGNO_MODE_OK " ��������� �������� � ������������� ������ � ��������� � ��������� ������, �� ����������� �� ������� " moveM " � ������������� ������ ������ ���� �������������, ����� �������� ������� ������������ � ������� � ��������� ������.
������� " movM ", �� ������������, ����� ������� ������� ���������, ����� ����������� ����� ��������� 0 � 1 ���������. ������� 2 ��������� ������� �������. ��. ���������� ������������ " SECONDARY_RELOAD_CLASs " � * ��.: ������ ���������:: ..
������� " movM " �� ����������� ����, ���, ���� ������� 0 - " subreg " � ����� M ��������, ��� ������������ ��� ����� �������, " movstrictM " ������� �������������� �� ������� �������� �� ����������� �����, ������� ����������� ���� M.
��������� ��������� ���������������� ����� ������ � ���������������� ��������. ������� 0 - ������ �� ���������������� ���������, ������� 1 - ������ ������ ������, � ������� 2 - ���������: ����� ���������������� ���������.
����������� ��� �������, ������ ���� ������� ������ ������������� ����� ����� �������; �� ����������� ��, ���� �������� ����������� ���� �������� ���������������� ��������� �� ������ - ��������� �� �� ������.
�� ��������� ������� ������� ����������� �� ��, ����� ������ ������������������ ��������� ����� ���� ��������� � ������, ���� ����������� �� ��������� ��� �������� ������ ��������� ��� �� �������� ���������� ���������. ��� ����� ����� ����������� " define_expand " (* ��.: ����������� �����������::.) � ������� ���� �������, ���� ����������� �� ���������.
����������� ��������������� insn ��� " parallel " � ����������, ����������� " set " ������ �������� �� ��������������� ������ ������ (��� ����� ����� ������������� " use " ��� " clobber " ��������). ����������� " match_parallel ", (* ��.: RTL ������::.) ����� ���������� insn. ��. " a29k.md " � " rs6000.md " ��� �������� ������������� ����� ������� insn.
������� " load_multiple ", �� ��������� ��������� ���������������� ��������� � ���������������� ������ ������. ������� 0 - ������ �� ���������������� ������ ������, ������� 1 - ������ �������, � ������� 2 - ���������: ����� ���������������� ���������.
��������� ������� 2 � 1 �������, �������� ��������� � �������� 0. ��� �������� ������ ����� ��� M. ��� ����� �������������� ���� �� ������������ ������� ��� ������ �����������, ���������, ����� �������� 1 � 0 ���������� � ����� � ��� �� �����.
����������, �� ��� ������ �������������� ��������.
����������� �������� 1 � 2, ������� ����� ��� " HImode ", � ��������� " SImode " ��������� � �������� 0.
����������� ������� ��������� � ����������� ��� ������ ������.
����������� ������� ��������� � �����������, �� ��� ������������ ��������� .
��������� �������� ��������� ��������� 1 � 2, ������� ����� ����� M, � ��������� ������� �������� ���������� � ������� 0. ������� �������� ���������� ��������.
����������� ������� ��� ������������ ���������.
�������� �������, ������ � �������, � �������. ������� 1 ������� �� ������� 2, ������� ����������� � �������� 0, � ������� ����������� � �������� 3.
��� ����� � ��������, ������� ������ � �������, � �������, �������� ������� ��� " divmodM4 " �� �� ������� �������� ��� " divM3 " � " modM3 ". ��� ��������� ����������� � ������������ ����� ������, ����� � �������, � ������� �����������.
���� �������, ������� ��������� ������ ������� ��� ������ �������, ���������� � ����� ����������, ��� �������, ������� ��������� � ��, � ������, ������ ��������� ������ " divmodM4 " ��� ������ " find_reg_note " � ������ ���������� " REG_UNUSED " ��� �������� ��� ������� � ��������� ��������������� �������.
����������, �� ������ ������� ��� �����.
�������������� ����� �������� 1 ����� �� ����� �����, ���������� ��������� 2, � ����������� ���������� � �������� 0. ����� M - ��� �������� 0 � �������� 1; ��� �������� 2 ������������ �������� �������, � ���������� ����������� ������� � ����� ���� ����� ���������� �������.
������ ������� ������ � �������� , ����������� " ashlM3 ".
�������� �����, ���������������� �������� 1, � ���������� ���������� � ������� 0.
���������� ���������� �������� �������� 1 � ������� 0.
���������� ���������� ������ �� �������� 1 � ������� 0.
���������� ������� C " sqrt " ������ ���������� ���, ������� ������������� ���� ������ C " double ".
���������� � ������� 0 ������� ���� ����� ������ �������� �� ������������� � 1 ����� 1 ��������. ���� ������� 1 - ����, ������������ ����. M - ��� �������� 0; �������� 1 ��� ������������ �������� �������, � ���������� ����������� ������� � ����� ���� ����� ���������� �������.
���������� ������� C " ffs " ������ ���������� ���, ������� ������������� ���� ������ C " int ".
���������� ����������� ���������� �������� 1 � ������� 0.
���������� ������� 0 � ������� 1 � ������������� �������� ����. RTL ������� ������ ��������� ��������� �������:
(set (cc0) (compare (match_operand:M 0 ...)
(Match_operand:M 1 ...)))
���������� ������� 0 c ����� � ������������� �������� ����. RTL ������� ������ ��������� ��������� �������:
(set (cc0) (match_operand:M 0 ...))
������� " tstM " �� ������ ������������ ��� �����, ������� �� ����������
" (cc0) ", ��������� ��� �������� �� �����������, ��� ��� ��������� ��
���� ��������, ����� �������� " set " �������� �����������.
������ ��� ������ �������������� ������� " cmpM ".
������� ����������� �����. ������ �������� ������ � ������-���������� - ������ ��� ��������, � ��� ��� ����� ��� " Pmode ". ����� ������������ ������ - ������ �������, � ���� M.
��������� ������� - ��������� ����� ������������ �������� ������ � ������-����������, � ����� " const_int " rtx. ����� �������, ���� ���������� �����, ��� ��� ������ ������������� �� ������� �����, �� ����� �������� �������� 4 ��� ����� ��������.
���� �������� �� ��������� ����������� ������������ ����������� ����, ��� �������� � ��������� ����� �������������.
������� ��������� ������, � ����� ����������. ������� 0 - ���������; �� ����� ��� M. ��������� ������ �������� ������������� ��������� " movstrM ". ��� ��������� ����� ������ ������������ �������� � ������������������ �������. ����������� ������� �������� ������ �������� � ������� 0, ���� �������� ��������� ��������� ���������.
���������� ����� ������, � ����� ����������. ������� 0 - ��������� (���� M), ������� 1 - ������ " mem " �� ������ ������ ������, ������� 2 - ������ ��� ������ (������ ����) � ������� 3 - ���������, ����������� ��������� ������������ ������ ������.
����������� ������������� �������� ������� 1 (���������� ��� ���� � ������������� ������ M) � ���� � ��������� ������ N � ���������� ��������� � ������� 0 (������� ����� ��� N).
����������� ������������� ����������� ������� 1 (���������� ��� ���� � ������������� ������ M) � ���� � ��������� ������ N � ���������� ��������� � ������� 0 (������� ����� ��� N).
����������� ������� 1 (���������� ��� ���� � ��������� ������ M) � ���� � ������������� ������ N ��� ����� �� ������ � ���������� ��������� � ������� 0 (������� ����� ��� N). ��������� ���� ������� ��������� ������ �����, ����� �������� �������� 1 - ����� �����.
����������� ������� 1 (���������� ��� ���� � ��������� ������ M) � ���� � ������������� ������ N ��� ����� ��� ����� � ���������� ��������� � ������� 0 (������� ����� ��� N). ��������� ���� ������� ��������� ������ �����, ����� �������� �������� 1 - ����� �����.
����������� ������� 1 (���������� ��� ���� � ��������� ������ M) � ������ �����, ��-�������� ��������������� � ���� � ��������� ������ M, � ���������� ��������� � ������� 0 (������� ����� ��� M).
������� " fixMN2 ", �� ����������� �������� � ��������� ������ ���� M � ������ �����.
������� " fixunsMN2 ", �� ����������� �������� � ��������� ������ ���� M � ������ �����.
������� ������� 1 (���������� ��� ���� M) � ���� N � ���������� � ������� 0 (������� ����� ��� N). ������ ������ ���� ��� � ������������� ������ ��� ��� � ��������� ������.
��������� ������ ������� 1 (���������� ��� ���� M) � ���� N � ���������� � ������� 0 (������� ����� ��� N). ������ ������ ���� ��� � ������������� ������ ��� ��� � ��������� ������.
��������� ����� ������� 1 (���������� ��� ���� M) � ���� N � ���������� � ������� 0 (������� ����� ��� N). ������ ������ ���� ��� � ������������� ������.
����������� ���� ����� �� �������� 1 (�������� ��� ������ ������), ��� ������� 2 ���������� ������ � �����, � ������� 3 - ��������� ���, � ���������� ��� � ������� 0. ������� 0 ������ ����� ��� " word_mode ". ������� 1 ����� ����� ��� " byte_mode " ��� " word_mode "; ����� " word_mode " ����������� ������ ��� ���������. �������� 2 � 3 ������ ���� ��������� ��� " word_mode ".
������ ��������� RTL ���������� ��� ������� ������ � ����������� � �������� ��������� 2 � 3.
�������� �������� ���� ����������� ������ �� ������� �������������� ����� ����� ������� � ������� 0.
������� " extv ", �� ����������� ����, ��� �������� �������� ���� ����������� �����.
���������� ������� 3 (������� ������ ���� ���������� ��� " word_mode ") � ������� ���� � �������� 0, ��� ������� 1 ���������� ������ � �����, � ������� 2 - ��������� ���. ������� 0 ����� ����� ��� " byte_mode " ��� " word_mode "; ����� " word_mode " ����������� ������ ��� ���������. ��������, 1 � 2 ������ ���� ����������� ��� " word_mode ".
������ ��������� RTL ���������� ��� ������� ������ � ����������� � �������� ��������� 1 � 2.
���������� ������� 2 ��� ������� 3 � ������� 0 �������� ��������� � �������� 1. ���� ��������� �������, ������� 2 ������������ � ������� 0, ����� ������������ ������� 3.
����� ������������ ��������� �� ������ ���� ����� ��, ��� � ������������ ��������. ��������� ������, �������� sparc64, ����� �������, ������� ���������� ������������� �������� � ����������� �� ��������� ����� � ��������� ������ � ��������.
���� ������ �� ����� �������� ������ �����������, �� ����������� ��� �������.
���������� ���� ��� �������� �� ���� ����� � ������� �������� ���� �������. ������������ �������� ������� �� ����, ���� ������� COND �������. COND - ��� ���� ��������� �������� ���������, ������ ��� " eq ", " lt " ��� " leu ".
�� ���������� ���, ������� ������� ������ �����, ����� �� ������ ��������� " match_operand ". ���������� ������������� �����, ����� ��� �� ������������ � ������������ ������� ����� ����.
��������, ����������� ��� ��������� �������, ������ ����� 1 � ������� ���� ��� ������ ���� ������������. ����� ������� �� �������� � �� ������ ��������� �� �� ��������� ��������. �� ���������� ����������� �����, ����� �������� ������������, ��������� ������������ " STORE_FLAG_VALUE " (* ��.: ������::.). ���� �������� �� �������, ��� ����� �������������� ��� ���� �������� " sCOND ", �� ������ ��������� ��� �������� �� ��������� ��������.
��� �������� ����� �� ��������, �� ��� ������ ���� ������ � ������������ ������������� �������; ���� ��� �� ����� �������� ��� ������� �������, ������� ������������� ���������, ����� ����� ��������� ��� �������.
���� ��� �������� ���������, ���������� ����� ������ ������������ ���, ������� �������� ��������� 1 � ������� � ������ �������� ������� ������ ������������ ���� ��������. ���� ���� ��� ����� ����������, ��� ������������� �������, ������������ ��� ������� " sCOND ", �������������� ����, ������� ���������, ����� ������������� ��������� � 1 ��� ���� � " SImode ", �� ������ ��������� " sCOND " �������� �� ��������� ��������.
������� ��������� ��������. ������� 0 - " label_ref ", ����������� �� �����, �� ������� �������� �������. ������� ����������, ���� ���� ������� ������������� ������� COND.
��������� ������ �� ������� ������, �������� �����, � ������� ������� ��������� �������������� �������� ��������� ��������. � ���� ������ ������� " cmpM " (� " tstM ") ������ ������ ��������� ����-������ �������� � ������������ ��� ����������� insns � " define_expand " (* ��.: ���������� �����������::.) ��� �������� ��������� ��������(��������� ��������). ���� ���������� � ���������� �������� " bCOND " ������ ��������������� �������������� ��������� � ���������� �������� " cmpM " ��� " tstM ".
������, ������� ���������� ������������� ��� �������� ���� �������, ��� ��� ���, ������������ ��� ���������, ������� �� ������������ �������, ������ ����� ������������ �������������� ��������. * ��.: ������� ���������::
������������� ��������� ����� � �������� " movMODEcc " � " sCOND ".
������� ������ ������������, �� ������������ ��������. ������� 0 - ���������� �������; ������� 1 - ����� ������ ����������, ���������� � ���� (� ���� " SImode ", ���� ��� �� " const_int "); ������� 2 - ����� ���������, ������������ ��� ��������.
�� ����������� ����� ������� 2 ���������� �� �������� � ������� RTL. ��� �������� ���� ��������� RISC �����, ������� ������ ��������� ��� ���������� � ��� ����������; ��� ����� �������� �� � RTL ������ �������� 1.
������� 0 ������ ���� " mem " RTX, ��� ����� - ����� �������. �������� ��������, ������, ��� ���� ����� ����� ���� " symbol_ref " ����������, ���� ���� �� �� ��� �� �������� ������� ������ �� ������� ������. ���� ��� ����� ������������ �������� ��� ������� ������, �������� ��� ���� �������� ������ ���� " define_expand " (* ��.: ���������� �����������::.), ������� �������� ����� � ������� � ���������� ���� ������� � ������� ������.
������� ������ ������������, ������������ ��������. ������� 0 - ���������� �������, � ������� �������� ������������. ������� ��� ��� ��������, ����� ��, ��� ��� �������� ������� " call " (�� � ��������, ������������ �� ����).
������������, ������� ���������� ������� ` BLKmode ', ���������� " call " insn.
���������� " call " � " call_value ", �� ����������� ����, ��� ������������, ���� ���������� � ���� " RETURN_POPS_ARGS " ������� �� ����. ��� ������ ������������� " parallel ", ������� �������� � ��������� � �������, � " set ", ����� ������� �������������, �������� ��� ��������� �����.
��� �����, ��� " RETURN_POPS_ARGS " ����� ���� ������� �� ����, ������������� ���� �������� ����������� ����� �������, ��� ������� ��������� ����� ����� ���� ������, ���� ��� ����������.
������� ������ ������������, ������������ �������� ������ ����. ������� 0 - ���������� �������; ������� 1 - ������ ������, ��� ������ ���� �������� ��������� ������ �������; ������� 2 - ��������� ` parallel ', ��� ������ ������� - ��������� " set ", ������� ��������� ������ ������������� �������� �������� � ���� ����������.
���� ������� ������� ������ ���� ���������, ����� ������������ " __ builtin_apply " �� �������, ��� ��� ������ ������������ � ������������� ����������� ��� ���������� ������������� �������� ���������� ����������� �������. ���� ������� ������� ��������� �� �������, ������� ��������� ���������, ������� ����� ��������� ������������ �������� (�� ���� " FUNCTION_VALUE_REGNO_P " �������� ������� ��� �����, ��� ������ ��������).
������� �������� �� ������������. ��� ��� ������� ������� ������ ���� ���������� ������, ���� ��������� ������� ����� ��������� ��� ������ �� �������� �� �������.
������� �������� " movM ", ���� ������� ����� ������������ ����� ���� ��������� RTL. � ���� ������ �� ������ ������������ ������, ��� ��� �������� �� ������� ������ ���������� ��������� ������, �� ��������� ����� ������� ������� ������ ���� �������, ����� ��������� �������. ������ ��������������� ������� - ��� ��, ������� �� ������ ��������� ������� ��������� � �� ������ ������������ ����� � �����.
��� ����� �����, �������, ������������ � ���� ������� ������ ���� �������� ������, ����� " reload_completed " ������� �� ���� � ������ ������� �������� ��������� ��������. ��� ����� � ������ ��������� ������������ " leaf_function_p " ����� �������������� ��� �����������, ��������� �� ��������� ���������� � ���� ��������.
������, ������� ����� �������� ������� ��������, ������ ���������� �������, �������� ����������:
(define_insn ""
[(set (PC)
(if_then_else (match_operator
0 "comparison_operator"
[(cc0) (const_int 0)])
(return)
(pc)))]
"CONDITION"
"...")
��� CONDITION ������ - �� �� ����� �������, ��� � ��������� �
������������� ������� " return ".
������� �������� �� ������������ ��� �������� ����� . ���� ������� ������� ������ ���� ��������� ��� ��������� " __ builtin_return " �� �������, ��� ���������� ����������� �������, ����� ���������� �������� ������ ����.
������� 0 - ������ ������, ���� ������������ ��������� ������ ������� � " __ builtin_apply "; ������� 1 - ��������� ` parallel ', ��� ������ ������� - ��������� ` set ', ����������� �������������� ��������, ������������� �������� �� ����� ����������.
������ �������. ��� ��� ������� ������� ������ ���� ������ ����������, ����� ������� ������ ������� � ���� ����������. " (const_int 0) " ����� ������ ��� ��� ������� RTL.
������� ��� �������� � ������, ������� �������� ������� ���������. ��� ��� ������� ����������� �� ���� �������.
������� ��� �������� ����� �������, ������� �������� ������. ��� ������� ����� ���� ���������:
������� ��� �������� � ����������� ������. ��� - �������������� �����������, ������� ����� ��������������, ����� ��������� ������� ���������, ����� ��� ������� " casesi ".
����� ������� ��������� ��� ��������: ����� ��� ��������, � �����, ������� ������ ��������������� �������������� ������� ��������. ���� ������������ " CASE_VECTOR_PC_RELATIVE " ����������, �� ������ ������� �������� ���������, ������� �������������� �� ������ �������; �����, ��� - ���������� ����� ��������. � ����� ������ ������ ������� ����� ��� " Pmode ".
" tablejump " insn - ������ ��������� insn ����� �������� ��������, ������� �� ����������. ��� ���������� ������ �� ����� ����������� � ������������� ������� ��������, �� �� ������ ��������� �� � ������� RTL ���, ��� ����������� �������� �� ����� ������� ������� ��� ������������ ���.
����������� ����� ��������� � ��������������� ��������� �����, ������� ��� � ��� �� ������� ���� " Pmode ". �� ����������� ��� ������� �� ����� �������.
��������� ������ ������� ����������� ��������� ��� ���������� � �������������� ��������� �����. �� ���� ������� ����������� ������� �������������� ������������� �������, ��������� " define_expand " (* ��.: ���������� �����������::.), ������� ���������� ��������� insns. ��� ��� ���� ���������� � ��������������:
������� ���������� - " mem ", ������� �������� ����������� �������� �� " virtual_stack_vars_rtx ", ����� ��������� ����� ����������� ��� ������������� ����������� goto � " reg " � ������ ���� �������.
�������� (��� ���������, ���� " STACK_GROWS_DOWNWARD " �� ����������) ������� 0 �� ��������� �����, ����� ������� ������������ ��� ����������� �������������� ������.
�� ���������� ���� �������, ���� ���, ��� ������ ����������� - ���������. ��������� ������ ������� ������ �������� ���� ������������ ����� ��� ����������� �������� �������. ���������� ���� �������, ����� ������������� ��� �������� � ���������� � ��������������� ��������� �����.
������ insn ����� ��������������� ����� ��� ������ ������� �������. ����� ������������ �������, ������� ���������� ������ � �������� ��������. �������������, ����� ������������� ������� (�������, ������� ����� ��������������� ������� ���������� insns) � ����� ������� ������� (������� ���������� ������ ���, ����� ����� ����� ������������ ��) ������ ������ ���� ������� � ��������.
� ��������� ������� ������ �������������� �������� ����� ��������������, ����� ������ �������, ����� �� �� �������� ����������. ��������, 68000 ����� ������� ��� �������������� ����� � ��������� ����� � ������ ��� �������������� ����� � ��������� �����. �������, ������������� ����� ����� � ��������� ����� ����� ��������������� ����� �� ���. �� �������� ������� �������������� ����� �������, ����� ��������������, ��� �� ����� �������������� ������, ��� ������. (����� ������� ����� ����� ����� �� ���� ������������� ��� ��������� ��������� ������, ��� �� �������� ��.) ������ ������������� ������ �������������� �������� ����� ���� �� ������� ������� ��� convert-a-byte ���������� "�����", ����� ��������� ������������ ����� ������������� ���������.
������ �������� �������� ������ ����� ������������� ������� ��� ������� �� ���� �������� ��������� " bCOND ". ������ ������������� ������ ������ ����� �����
(set (PC)
(if_then_else (COND (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))
����� ����, ������ �������� �������� ������ ����� ���������� �������
��� ������ �� ��������� �������� ���������. �� �������
�������� �������� ���:
(set (PC)
(if_then_else (COND (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))
��� ����������, ������ ��� ����������� �������� ����� ���������� ������
��������� � ��������.
����� ������ ������������ ����������� " match_operator ", ����� ��������� ����� ��������, ������� ������ ���� ���������� ��� ������. ��������,
(define_insn ""
[(set (PC)
(if_then_else (match_operator 0 "comparison_operator"
[(cc0) (const_int 0)])
(pc)
(Label_ref (match_operand 1 "" ""))))]
"CONDITION"
"...")
� ��������� ������� ������ ������������ �������, ���������� �� ����, �����
��������� ���� ������ ��� ����� ���������. ��������, ����� �������
������� "sign-extend halfword" � "sign-extend byte" � ������ ���������:
(set (match_operand:SI 0 ...)
(extend:SI (match_operand:HI 1 ...)))
(set (match_operand:SI 0 ...)
(extend:SI (match_operand:QI 1 ...)))
����� ��������� �� ���������� �������� ���, ��� ��� ������� ����������
��������� ����� ��������������� ������ �������. ��������, �������� ��� �����
���������� ���������� � ������������, ����� ���, ������� ���������� ������ �
�����. ��� ���������� ����������� ��� ������ ���� ������� ��� ������ ��������
�� ��������� ����� (����� - " HImode "). ���� �� ������� ��������������
������� " QImode ", ���������� ����� �� ���� �������������, ���� ���������
���������� �� �������� ��� ����� ����.
����� ������� ���������� �������� ����� ������������, ������ ��� ��� ��������������, �� ��� ����� ������ ����������� ��� ������������������ ����������.
���� ����������� � ������� ��������� ���������, ������ ������������ ����� � ��������� ������� �������� ������� �� ���������, ����������� ������������. ���������� ��� ������ ������. ��-�� ���� ������ �� �� ������ ������������ ��������� ������� ��� ������ ���������� � ����������. ������ ����� ��� ����� �������������� �� ������ � ���� �� �������, ������� ������������ insns �������� �� �������� � �������, ��� ������ ������������ ��������� � ��������� ��������������� �������� �������.
��� ����������� ����� GNU CC ���������, ��� ������ ����� �������� ���. ��������� insn ������������� �������� ���, ��������� ��������� ��� ���������, ��� � ������������ ��������� � �������� ��������. ��������� insn ��������� ��������� ��� ������� � ���������� ��� �� ���������� ������� �������� ��� ��������. ����� insns ��������� ��������� �������� � �����������. ����� ����� ������������� �����, ���� Vax, 68000 � 32000, �������� ���� �����.
��������� ������ ����� ��������� ������� ��� ��������� � ������������ ��������� � ������ ���� ����� ������ ��������� ��������. ����� ������� ������ ��������� ���� ����� ������� � ���, ������ ������������ �� ����� ��� ��, ��� � ������, �� �������������� ������, ��� ������������ ������������ ���. � ��� �����, ����� ��������� ��� ��� ������� ���������, ����� ��������� ������ � ��������� �������, ������������ " next_cc0_user (insn) ". (���������� " insn " ��������� �� insn, ����������� � ������ ������, � ���� ������ ������ ���� � ������� �������.) ���� RTL �������, ��� ��� ������� ��� �����, ����� �������� ����������� ���������; ����� ����� �������� �������� ���������. ����� ����� ���� �������� �������, �� ������ ������������ �������� � ����������� �������� ���������.
�������, �� ������� ��� ����� ������, ����������� � ���, ��� GNU CC ������ ���������� ���� ���������������� RTL insns, �������� ���������� " note " insns, ����, ����� ���������� ��� �������, � ����, ����� ��������� ���, � ������ ��� ���� �� ����� ��� ���������.
����� ��� ���������, �� ������ ���������� ������������ ��������� �������� " NOTICE_UPDATE_CC ", ����� ������ " CC_STATUS_INIT "; ������� �������, ��� �������� ������ ���������.
��������� ������ ����� ������� �������������� ��������� � �������� � �� ����� ��������� ����. �������� �������� �������� ��� ���. ����� ��������� �����, ����� "�������" ������� ���������, �������� �� �������� � ���� ����������� ����������. ����� ��������� ��������� ������� �������������� ��������� � ��������, ���������� ��������� ������� �������������� ��������� � ��������, ������� ���������� ���������� ��������.
���� ������ ����� �������� ��� ����������� �������� ��� ������� �������������� ��������� � ��������. ��� �������������� ���������� ���� ������ ��������� � �������� ����� ���������� �������� ���� ��������. �� ����� �� ����������, ���� ����������� �� ���������. ��� ��� �� ������ ������������ ���� �� �������, ��������� ����, � ���������� � ����� ����������� ��������, ������� �� �����������.
�� ������ RISC ������� ����������� ������ �� ������������ �� ��� ������� � ��� ����� ���� �� ���� ���������� �������� ���� �������. �� ���� ������� �����������, ��� ����������� � ������������� ���� ������� ������ ������������� �������� insns, �� ���������� � ����� �������� ������ ������������. ��������, �� IBM RS/6000, ������� �������� ��� ����������� ������, ���� ������� ���� ������� �� ���������� �� ��� ������� ������ ��������� ��������. ����������� ������ �� ����� ��������� ��� �����������, ���� �� ����������� ��������� ����������� � ������������� �������� ���� �������.
�� ���� ������� �� ����������� " (cc0) ", � ����������� ������ ������� ��� ������������� ���� �������. ���� � ������ ������� ������������ ������� ���� �������, ����������� ���������� �������. ���� ��� ������� ��� ��������� ��������� ����� ���� ������� � ����� ����� �������, ��� ���� ������� ��������� ��������� �������, ����������� �������������.
�� ��������� ������� ��� ��������������� ������� �������� ����� �������� �� �������, ������� ��� ������� ��� ����������; ��������, �� 68k � Sparc ��������� ���� ������� ��������������� �� ������ �������� ��� ��������� �� ������� ��� ������������, � ������� �� ������� ������������, ��� ��� ��� ��������� ��������� ������ �������������� ��������� ������� ��������. ��� �����, ������� ���������� " (cc0) ", ��������� � ������������� ���� ������� ������ ���� �������� (���������� ������ " note " insns), �������� ������������� ������ � " cc_status ". (* ��.: ��� �������::.) ����� ����, ��������� � ������� insns ����� ���� ������� ���� �� �����, ��� ������ ������� " prev_cc0_setter " � " next_cc0_user ".
������, ��� �� ��� �� �������, ������� �� ���������� " (cc0) ". �� ���� ������� ������ ������� ������� ������������� � ��������� insns ��������� � ��������, � �������������� ������ �� ����� ��������������. ������ ����� �� ���������� �������� ��� �������� ���� �������, ����� �������� ��������� ������� �������� ���� �������.
��������, ������������, ����� ��������� �������� ���� �������, ������ ����� ���, ������� ��������� � ������ " MODE_CC ". ������ ��� ����� " CCmode ". ���� ��������� �������������� ���� (��� ��� ��������������� ������� �������� �� Sparc), ���������� ������������ " EXTRA_CC_MODES ", ����� ������ � ������ �������������� ��������� ���� (* ��.: ��� �������::.). ����� ���������� " EXTRA_CC_NAMES ", ����� ������ � ������ ����� ���� ����� � " SELECT_CC_MODE ", ����� ������� ��� �������� ���������.
���� � ������� ��������� RTL ��������, ��� ����������� ��������� ����, (��������, ���� ������ ����� ��������� ������� ��� ��������� � ������������ ���������, ������� ����������� ����������� IBM), ��� ����� ���� ���������� � ��� �����.
���� ������, ������� ������� ��������� �����, ���������� ��� �������������� ������, ������������ " SELECT_CC_MODE " ����������, ����� �������� ��� ������ �������������� ��� ���������� ���������. ������� ������ ���� �������� � �������������� ����� ����. ��� ��������� ������ ������ �������� �� Sparc, �������������� ����, �� ����� �������
(define_insn ""
[(set (reg: CC_NOOV 0)
(compare: CC_NOOV
(plus: SI (match_operand:SI 0 "register_operand" "%r")
(Match_operand:SI 1 "arith_operand" "rI"))
(const_int 0)))]
""
"...")
������������ " SELECT_CC_MODE " �� Sparc ���������� " CC_NOOVmode " ���
���������, ��� �������� - " plus ".
����� ����������� ������, ����� ��������� ��������� RTL ����� ����������� ��� ��������, ����������� ��������� �������� ��������. ��� �������� ���� ����� ����������� ��� ���������� ������, ������ �������� � ������ ��������� � �����������. � ����� ������� ���������� �������� ������������� ��� ��������� ��������� RTL � ��������� ������������ �����, ����� ��������� ����� ��������� �������� insn.
� ���������� � �������������� ����������, ����������� ��������� �����������:
(define_insn ""
[(set (match_operand:M 0 ...)
(and:M (not:M (match_operand:M 1 ...))
(match_operand:M 2 ...)))]
"..."
"...")
����������, ������� ��� "NAND" ������� ������ ������������ ���:
(define_insn ""
[(set (match_operand:M 0 ...)
(ior: M (not:M (match_operand:M 1 ...))
(not:M (match_operand:M 2 ...))))]
"..."
"...")
� ����� ������� ������������� �������� ������� ��� ������
��������� ������������� ��������� RTL.
(plus:M (plus:M X Y) CONSTANT)
� ���������� � �������� ������ " md " ���� ����� ��������� ����������� ������� - ������������� peephole �����������. Peephole ����������� - ��� ����������� " ���������� ������ ", �.�. ����� ������, ������� ����� ���������� � ������ ��� ��������� �� ����������.
���������� �� �������� �������� �� ��������� peephole �����������, ����� ����� ������ � ��������� �� ������������, ��� �� ��������� ������� ��. ��������, ������ ��� ����������������� insns, ��������� �� ����, ����� ���� o���������, ���� ���� �������, ��� ������ �� ���������� �������, ����������� � ������. ������� - ������������� peephole ����������� ����� ���������� ����� �����������.
����������� �������� �������� ���:
(define_peephole
[INSN-PATTERN-1
INSN-PATTERN-2
...]
"CONDITION"
"TEMPLATE"
" OPTIONAL INSN-ATTRIBUTES ")
��������� ��������� ������� ����� ���� ������, ���� �� �� ����������� �������
�������-������������� ���������� � ���� �������� ��������. ���� �� �������,
�� �� ������ ����������� ��� �� ��������,��� � � " define_insn ".
� ���� ������� INSN-PATTERN-1 � ��� ����� - �������, ������� �������� � ������������ ���������������� insns. ����������� ����������� � ������������������ insns, ����� INSN-PATTERN-1 ������������� �������, INSN-PATTERN-2 ������������� ����������, � ��� �����.
������ �� insns, ������������� �� peephole ������ ����� ��������������� " define_insn ". Peepholes ����������� ������ � ��������� ������, ��������������� ����� ���������� ����, � ������ �����������. �������������, ������ insn, ������� �������������� �� peephole, �� �� �������������� �� �������� " define_insn ", ������� ������ � ��������� ���� ��� ������������������ ���������� ��� �� ��������� ������� �����������.
�������� insns ����������� � " match_operands ", " match_operator " � " match_dup ", ��� ������. �������� ��, ��� ���������� ��������� ��������� �� ���� �������� insn � �����������. ���, �� ������ ��������� ������������ ��������� � ���� insns, ��������� " match_operand " � ����� insn � " match_dup " � ������.
����������� �� ��������, ������������ � �������� " match_operand " �� ����� ������� ������� �� ������������ peephole, �� ��� ����� ��������� �����, ��� ��� ��������������, ��� ���� ����������� ���������� �����, ����� ��������� �� ������ ��� ��� peephole. ���� peephole �����������, �� ����������� �� ���������, ��� ������� ������ ����������.
��������� �������� ����������� �� ���� ��������� peephole; ��� �� ������ ������ �����������, ������� ������, ��� ������� �������� �� ��������, �������������� �����������.
��� ������ ������������������ insns ������������� ��������, CONDITION �����������. ��� - ��������� C, ������� ������ ������������� �������, ��������� �� ����������� (��� �����������, ���� ��������� ������� �� ����). ���� CONDITION ������� (������� �������, ������ �����), �� ����������� ����������� � ������ ������������������ insns, ������� ������������� ��������.
������������ peephole ����������� ����������� ����� ��������� ������������� ���������. �������������, peephole ����������� ����� ���������, ����� �������� ������������� � ����� ����� ���������, ������ ������������ ��������.
������ ���������� � ��������� CONDITION ������� � ���, ����� ������ " operands[I] " ��� �������� ����� I (��� �������������� � " (match_operand I...) "). ����������� ���������� " insn ", ����� ���������� � ���������� �� ��������������� insns; ����������� " prev_active_insn ", ����� ����� �������������� insns.
��� ����������� ���������� � �������������� ������������ �� ������ ������������ CONDITION ��� �������� ������������ ������ �����, ����� ������������� ���������� �� ������������ ����� � ������ �����. ����������� ��������� C " dead_or_set_p (INSN, OP) ", ��� INSN �������� insn, � ������� ��������, ��� �� ��������, ������������ � ��������� ��� (�� �������� " insn ", ������ � �������������� " prev_nonnote_insn "), � OP - ������������� �������� (�� " operands[I] ").
���������� ������� ����������� �������� ������ ������������������ insns �� ���� ����� insn. TEMPLATE ��������� ������������� ������� ������������� ���� ��� ����� ������������� insn. �� �������� ����� ��� ��, ��� ������ " define_insn ". ���������� ��������� � ���� ������� - �� ��, ��� �������������� ��� ������������ ������������ ��� �������������� ������������������ insns.
��������� ������������� peephole ������������ �� ������ ��������������� ������-�� �� �������� insn � �������� ��������; �� ���� �� ����� ����������� ��������������� ��. ����������� peephole ������������ ���� ������ ��� ������� insn ��� ���������� ������� insn.
������������ peephole ������������ ����������� �� ����� ������ ���� ����������, ��� ��� insns, ������� ��� ����������, ������� �� ������������ � �� �������������� ������� �������.
��� ������, ������ �� ��������� �������� 68000:
(define_peephole
[(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
(set (match_operand:DF 0 "register_operand" "=f")
(match_operand:DF 1 "register_operand" "ad"))]
"FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
"*
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
#ifdef MOTOROLA
output_asm_insn (\"move.l %1,(sp)\", xoperands);
output_asm_insn (\"move.l %1,-(sp)\", operands);
return \"fmove.d (sp)+,%0\";
#else
output_asm_insn (\"movel %1,sp@\", xoperands);
output_asm_insn (\"movel %1,<url url="mailto:sp@-" name="sp@-">\", operands);
return \"fmoved sp@+,%0\";
#endif
}
")
������ ���� ����������� ����������� � ���������
jbsr _foobar
addql *4,sp
movel d1,<url url="mailto:sp@-" name="sp@-">
movel d0,<url url="mailto:sp@-" name="sp@-">
fmoved sp@+, fp0
��
jbsr _foobar
movel d1,sp@
movel d0,<url url="mailto:sp@-" name="sp@-">
fmoved sp@+,fp0
INSN-PATTERN-1 � ��� ����� �������� *�����* ��� ������ �������
" define_insn ". ������� ���� ������ ��������: ������ �������
" define_insn " ������� �� ������ ��� ���������� RTX, ����������� � ����������
������. ������, ������� ������ ����: ����� �� �� ����� �������� ����� ����
�������� ��� ������� " define_peephole ". �� ����� � " define_insn " ���������
��������, ��� ������ �������� � " parallel ". ������� �� ������ ���� ������
" parallel " � ���������� ������ ������ ���� � " define_peephole ". �����
�������, ���� ������� insn �������� ���:
(define_insn "divmodsi4"
[(set (match_operand:SI 0 "general_operand" "=d")
(div:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "dmsK")))
(set (match_operand:SI 3 "general_operand" "=d")
(mod:SI (match_dup 1) (match_dup 2)))]
"TARGET_68020"
"divsl%.l %2,%3:%0")
�� ������ ��������� ���� insn � peephole �����:
(define_peephole
[...
(parallel
[(set (match_operand:SI 0 "general_operand" "=d")
(div:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "dmsK")))
(set (match_operand:SI 3 "general_operand" "=d")
(mod:SI (match_dup 1) (match_dup 2)))])
...]
...)
�� ��������� ������� ������� ��������� ����������� ����� �������� ��� RTL ��������� �� ����� ���� ���������� ��������� insn, �� �� ����� ����������� ������������������� insns. ��� ���� ������� �����, �� ������ ������� 'define_expand', ����� ����������, ��� ������������ ������������������ RTL.
'define_expand' �������� RTL-����������, ������� �������� ����� ������� 'define_insn', ��, � ������� �� ����������, 'define_expand' ������������ ������ ��� RTL ��������� � �� ����� ���������� ������ ��� ���� RTL-insn.
RTX 'define_expand' ����� ������ ��������:
��� �� ��� � ��������� ���������� RTL insns, RTL ������ ��������� ��������, ������� ������ ���� ����������, ��� ������������� �������. � ���������, ��� ���� �������� ��� ������� ��������.
���������� �������, ������� ������ ���� ������ ��� ��������� RTL � �������, ������ ���� ������ � ������� 'mathch_operand' � ���� ������ ��������� � RTL �������. ��� ������ ���������� � ��������� �������� � �������, � ������� ������������ ����� ����. GNU CC ���������� ��� ���������� ��� ������������ �������� � �������, ���� ��� ���������, ��� �� ������� ���������� RTL ���. ���� �� ������� ��������� ����� ������ ����, �� ����������� ������ ������ ������������ 'mathch_dup'.
RTL-������ ����� ����� ��������� �� ���������� '��������', ������� �������� ���������� ���������� ��� �������, ������������� ������ � ������������������, ��������������� 'define_expand'. ���������� �������� � RTL ������� ���������� �� 'match_dup', �� ������� �� �� 'match_operand'. �������� ���������� ���������, ����� ��������� ������������� ����� �������, �� ���������� ������������ ��� ���������. ������ ����� ��� ����������� � �������, � ���������� ����������. ��� ��������� ��������� �������� � ���������� �� � ��������������� �������� '���������' ���, ����� 'match_dup' ��� �� �����.
������� ��� ����������� ������������, ������������ ��� ������������� � ���������� ����������: `DONE' and `FAIL'. ���� ��������� ����� ��� ';' �� ����� ������������ �� ��� ���������.
����������� ������������ `DONE', ����� ��������� ��� ������� ��������� RTL. ������������� RTL insn, ����������� �� ������� � ���� ������ ����� ��, ������� ��� ������������� ������ ����������� � 'emit_insn' � ���������� ����������; RTL ������ �� ����� ������������.
���������� ������� ����������. ����� ������� ������������, ��� ��������, ��� ������� �� ��� �� ���������� ��������. ����� ������������ ������ � ����������� ������� ������ ������� ��� ��������� ����, ��������� ������ �������.
����� � ��������� ����� �������������� ������ ��� �������� (��������, ���������, ��������, � �.�.) � ������� (`extv', `extzv', � `insv') �������� .
����� ���� ������ ����������� ������ ������ ��� ���� SPUR:
(define_expand 'ashlsi3'
[(set (match_operand:SI 0 'register_operand' '')
(ashift:SI
(match_operand:SI 1 'register_operand' '')
(match_operand:SI 2 'nonmemory_operand' '')))]
''
'
{
if (GET_CODE (operands[2]) != CONST_INT
|| (unsigned) INTVAL (operands[2]) > 3)
FAIL;
}')
���� ���������� ���� �� ������������ ������������� ������ ������� � �������� � �������, �� ���� �� �������� ������������ � ���� ������ 'define_insn'. ��� ������ ������ (����-���������� �� 68000), ������� ����� ����� ���������� ���� 'define_expand':
(define_expand 'zero_extendhisi2'
[(set (match_operand:SI 0 'general_operand' '')
(const_int 0))
(set (strict_low_part
(subreg:HI
(match_dup 0)
0))
(match_operand:HI 1 'general_operand' ''))]
''
'operands[1] = make_safe_from (operands[1], operands[0]);')
����� ������������� ��� RTL insn - ���� ��� �� �������� ���� ��������
�������, � ������ ��� ����, ��� �� ���������� ������� ������� � ��� ������
��������. ��� ������������������ ����������� ���� ������� ������� ���������
�� �������� ������� (�� ��� ������ ��������), ������� ��������� ����������
���������, ��� ��� �� ���. ������� 'make_safe_from' �������� �������
'operands[1]' �� ��������� ������� ���� �� ���������� � 'operands[0]'.
��� �������� � ������� ��������� ������� RTL insn.
�������, ������ ������ ������������� ������������� ����������� �������� ����-���������� �� SPUR ����� �������������� � ������� ���������� 'and' � ���������� � ����� �������� �����. �� ��� ����� �� ����� ���� ������������ � ������� 'const_int', ������ ��� �������� ��������� ������� ������ ��� ��� ����������� ������������� �� ���� ������. ������� ��� ������ ���� ����������� � ������� � ������� 'force_reg' � ����� ���� ������� ������������ � �������� 'and'.
(define_expand 'zero_extendhisi2'
[(set (match_operand:SI 0 'register_operand' '')
(and:SI (subreg:SI
(match_operand:HI 1 'register_operand' '')
0)
(match_dup 2)))]
''
'operands[2]
= force_reg (SImode, gen_rtx (CONST_INT,
VOIDmode, 65535)); ')
*���������: ���� 'define_expand' ������������ ��� ����, ��� ��
��������� ����������� �������� ��� ������� �������������� ��������, ��
��������� insn � ��������������� ������������������ �� ������ ����
'code_label',`barrier' ��� `note'. �� ������ ���� `insn', `jump_insn'
��� `call_insn'. ���� ��� �� ����� ��������� insn � �����, �� ������������
insn, ������� �������� ��������� �������� ��� � ����. ����� insn ��
���������� ����, �� ����� ������������ �� ������� � �����������.
���������� ��� ������, ����� �� ������ ����������, ��� ���������� ����������� ������� �� ����� insn. �� �������, ������� �������, ����������� � �������� (��. ���� ��������) ��� �������, ����� ������� �� �������� ��� ������������ ������. ���� �����������, ������� ������������ ��� ������ ������ ���� �������� ���������� insn � ����-��������� ���� ��������. ������, ��������� insns ����� ������������ ����� ����� �������� �������. ��� insn �� ����� ���� �������� � ���� ��������.
����� �� ������ �������� insn �� ������ ������ insn�� ������ �� ������� ������������� ����� �������� �������. ���������� - ��������� ����������, ��������� �������� ���������� ������. ���� ����������� � ���������� insns ������� ������, �� ����������� � ���������� �����������. ���� ���� ������� ������������, ��� ��������� insn ������� ������� ��� ������������ ����� ��������, �� ���������� ��� ���������.
���� �������������� insn ����� ��������� ������ (putative) insn. ���� � ������� ���������, �������� �� ��������� ���������������� ������� 'define_insn', ��� insn ��������� � ����, �� ���� �������������� �������� ������� ������� �������� � ��� �������������� insn. ������ ����� ������� ������� ������� �� ��� ������� ����� ��������� ���������� ������������. ��� �� �����, � ��������� ������ �������, ����� ��� ���������� �������� �� RISC ������ ������� ��������� � ��� insn, ������ ��������� �������� �������� �� ��� insn �������-�������.
����������� 'define_split' ������� ����������� ��� ��������� ������� insn �� ��������� ����� �������. ��� �������� �������� ���:
(define_split
[INSN-PATTERN]
'CONDITION'
[NEW-INSN-PATTERN-1
NEW-INSN-PATTERN-2
...]
'PREPARATION STATEMENTS')
INSN-PATTERN - ������� ������� ������ ���� ������, � CONDITION ��������
������� ������������, ��� � 'define_insn'. ����� insn, �������������
INSN-PATTERN � ��������������� COONDITION, ������, �� ���������� � ������ insn
�� insn NEW-INSN-PATTERN-1, NEW-INSN-PATTERN-2, � �.�.
PREPARATION STATEMENTS ������� ��� ����������, �������, ���������� ��� 'define_expand' � ����������� ������, ��� ������������ ����� RTL, prepare for the generated code or emit some insns whose pattern is not fixed. � ������� �� ��� ��������� `define_expand', ��� ��������� �� ������ ������������ ������� ����� ������ ���������. ��� ������ ������������ ���������, ��� ����� �� ������ �������� ������ � �������� �����.
������� ������������ � INSN-PATTERN � ���� ��������� �������. ���� insn ������ ���� ������ ��� ������������ ����� �������� ��� ��� ������������ insn, �� ��� ��������, ��� insn ���������. ��� ��������, ��� ��� ������ ��������������� ����� 'define_insn' � ���� `reload_completed' �� ����, ��������, ��� �� ������������� ������������ ����� 'define_insn'. � ���� ������ ����� insn-�������� ��� �� ������ ��������������� ����� 'define_insn', � ���� `reload_completed' �� ����, ������ ��� �� ������������� ������������ ���� �����������.
��� ������ ����� ������������� `define_split', ���������� ��������� ������ �� `a29k.md', ������� ��������� `sign_extend' �� `HImode' � `SImode' � ���� insn ������:
(define_split
[(set (match_operand:SI 0 'gen_reg_operand' '')
(sign_extend:SI (match_operand:HI 1 'gen_reg_operand' '')))]
''
[(set (match_dup 0)
(ashift:SI (match_dup 1)
(const_int 16)))
(set (match_dup 0)
(ashiftrt:SI (match_dup 0)
(const_int 16)))]
'
{ operands[1] = gen_lowpart (SImode, operands[1]); }')
����� ���� �������������� �������� ������� insn-�������, ��� ������
��������, ��� ������� *��* ������������� ������� `define_insn'.
������ �������������� ������ �������� ������� ��������� ��������� 'set'
� ����� �� �� ��������� 'set' ������ 'parallel', ����� �������� ����
������������� ������ ��������, ��� �� ������������ ��� ��� 'scratch' �������.
� ���� ������� ��������� ����� �����, ����� ��� ����� insn-������� ������
���� �������������. �� ��������, ������������� �� ��� ������� �����-������
'define_insn'-������������, ������� ��� �� ����� ������ ��� �������� �
'define_split' (�������, ������������ ������ 'define_split', �������
������� �� ����������� ��������������� insn).
����� ���� ������ ������ ������������� `define_split', ������ �� `rs6000.md':
(define_split
[(set (match_operand:SI 0 'gen_reg_operand' '')
(plus:SI (match_operand:SI 1 'gen_reg_operand' '')
(match_operand:SI 2 'non_add_cint_operand' '')))]
''
[(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
'
{
int low = INTVAL (operands[2]) & 0xffff;
int high = (unsigned) INTVAL (operands[2]) >> 16;
if (low & 0x8000)
high++, low |= 0xffff0000;
operands[3] = gen_rtx (CONST_INT, VOIDmode, high << 16);
operands[4] = gen_rtx (CONST_INT, VOIDmode, low);
}')
����� �������� 'non_add_cint_operand' ������������� ������ ' const_int '
������� �������� *��* ���������� ��������� insn ���������� ��������.
�������� � ������� ��������� �������� ���, ����� ��� ����� ����������
�� ����� ����������� ��������.
������ �� ���� �� ������ �����, ������� ���������� scratch �������, ���������� ��������� ��������� �������� � ������� ���������:
(define_split
[(set (match_operand:CC 0 'cc_reg_operand' '')
(compare:CC (match_operand:SI 1 'gen_reg_operand' '')
(match_operand:SI 2 'non_short_cint_operand' '')))
(clobber (match_operand:SI 3 'gen_reg_operand' ''))]
'find_single_use (operands[0], insn, 0)
&& (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
|| GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)'
[(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
(set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
'
{
/*����� ��������� �, � ������� �� ���������� � �������, �� ��� ���
������, ���� �� ��������� �� 16 ���. ����� ���������,
����� ��������� ����� ��R � �, ����� �������� ����������� ������
��������. */
int c = INTVAL (operands[2]);
int sextc = (c << 16) >> 16;
int xorv = c ^ sextc;
operands[4] = gen_rtx (CONST_INT, VOIDmode, xorv);
operands[5] = gen_rtx (CONST_INT, VOIDmode, sextc);
}')
����� �������� ��������, �� ������ ���� 'define_split', �����������
��� insns, ��������������� ���������� 'define_insn ', ��� �
�����������������. ������ ����� ���� ������ ��� ���������
'define_split'-�����������, ���� ��� ���������� insns, ������ ��� ������������.
� ���������� � �������� ������, �������������� ������� �������, ���� 'md' ����� ���������� ������ '���������' � ����� �������� ��� ������� �� ���. ������� ���������������� insn ��������� �������� ��� ������� ��������. �������� ����� ���� �������, ������������ ��� insn ���������� (has on) �������� ��� �������. ���� ������� 'NOTICE_UPDATE_CC' ����� ����� �������������� ��� ������������ ����� �������.
��������� `define_attr' ������������ ��� ����, ����� ���������� ������ �������, ��������� ������� �������. ��� �������� ���:
(define_attr NAME LIST-OF-VALUES DEFAULT)
NAME - ������, ������������ ��� ������������� ��������.
LIST-OF-VALUES �������� ���� �������, ������������ ����� ������� ������ ��������, ������� ����� ���� ��������� ��������, ���� ������ �������, ������� ���������, ��� ������� ����� �������� ��������.
DEFAULT - ��������-���������, ������ �������� ����� �������� ��� insns, ������� ������������� �������, ��� ����������� �� �������� � ���� ������� �������� ��� ����� ��������. ��. ������ Attr, ��� ����� ������� �������� ��������� default. ��. ���������� �����������, ��� ���������� �� ���������, �� ��������� �� �� ����� ���������� insn.
��� ������� ������������� ��������, ��� �������� ����������� ������� � ����� 'insn-attr.h'. ��� ��� �������, ����� ��� �������� ��������� ����� ����� ��������, ���������� ���������:
(define_attr 'type' 'branch,fp,load,store,arith' ...)
��������� ������ ����� �������� � ���� 'insn-attr.h'.
#define HAVE_ATTR_type
enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
TYPE_STORE, TYPE_ARITH};
extern enum attr_type get_attr_type ();
���� ������� ����� �������� ��������, �� 'enum' ��� �� ����� ���������,
� ������� ���������� �������� �������� ��������� 'int'.
��������� RTL, ������������, ����� ���������� ��������, ���������� ����, ��������� ����, ���� ��������� ������������� ��� �������� ����������� �������� �����. ��� ��������� ����� ��������� �����. �������-��������� ������ ����� ���� �� ��������� ����:
����� ����� I ���������� �������� ��������� ��������. I ������ ���� ���������������.
�������� ��������� �������� ����� ���� ���������� ���� � ������� 'const_int' ���� ��� ����� �����, �������������� ������� � ���������� `const_string', `eq_attr' (��.����), � `set_attr'.
������ VALUE ���������� �������� ��������� ���������. ���� VALUE ���������� ��� `'*'', �� ��� ��������, ��� �� ��������� �������� �������� ������ �������������� ��� insn, ����������� ��� ���������. `'*'' �������� �� ����� �������������� � DEFAULT-��������� 'define_attr'.
���� �������, ��� �������� ������������ - ��������, �� VALUE ������ ���� ������, ���������� ��������������� ����� ����� (������ � ���� ������ ������������ 'const_int'). �����, ��� ������ ��������� ���� �� ���������� �������� ��������.
TEST ���������� ���� ��������, ��� ������ ��������� ����. �������� ����� ��������� - TRUE-VALUE, ���� ��ST - ������ � FALSE-VALUE ���� ����.
������ ������� ����� ��������� - ������, ���������� ������ ����� ��������� � ��������� �� ��� ��������� TEST � VALUE. �������� ��������� `cond' - ��� �� �� VALUE, ������� ������������� ������� ��������� ��������� TEST. ���� ��� ��������� TEST �����, �������� ��������� `cond' - �� ���������, ������� ����������� DEFAULT.
��������� TEST ����� ����� ���� �� ��������� ����:
���� ���� �������, ���� I ������� �� ����, ����� �����.
��� ����� ������, ���� ��������������� ���������� ������� �������.
���� ���� �������, ���� N-�� ������� insn, �������� �������� �������� ������������, ����� ��� M (���� M - 'VOIDmode' �� ��� ����� ����� ������������ ) � �������, ������������ ������� PRED ���������� �� ��������� ��������, � ������ ���� �������� ������� N � ����� M (��� ����� ����� ������������, ���� PRED - ������ ������).
������� CONSTRAINTS ������������ � ������ ���� ������ �������.
��� ����� ������, ���� ��������������� ��������� �� ���� �������������� ��������� �������. (�������������� ���������, �������������� � ������� ��������� `plus', `minus', `mult', `div', `mod', `abs', `neg', `and', `ior', `xor', `not', `ashift', `lshiftrt', � `ashiftrt').
`const_int' and `symbol_ref' are always valid terms (��. ����� Insn). `symbol_ref' - ������, ���������� ��������� �� �, ������� ��������� 'int', ����������� ���������� `get_attr_...'. ������ ��� ������ ���� ���������� ����������.
NAME - ������, ������������ ��� ��������.
VALUE - ������, ������� �������� ���� ���������� ��������� ��� �������� NAME, ���� ������� �������� ����� �������, ���� ���������, �� ������� ���� '!', ���� �������. ���� VALUE �� ���������� � '!', �� ���� ���� �������, ����� �������� �������� NAME �������� insn ��������� � ������, ������������ VALUE. ���� �������� ���������� � '!', �� ���� ���� �������, ����� �������� �������� �� � ������������ ������.
��������,
(eq_attr 'type' 'load,store')
������������
(ior (eq_attr 'type' 'load') (eq_attr 'type' 'store'))
���� NAME ���������� ������� `alternative', �� �� ��������� � ��������
���������� ����������� ' which_alternative '
(* note ���������� ������ ����������::.) � �������� ������ ����
���������� ������ �������.
���� NAME ���������� ������� `alternative', �� ��� ������ �� �������� ���������� ����������� `which_alternative' (��. �������� ������) � �������� ������ ���� ��������� ����� ������. ��������:
(eq_attr 'alternative' '2,3')
������������
(ior (eq (symbol_ref 'which_alternative') (const_int 2))
(eq (symbol_ref 'which_alternative') (const_int 3)))
�������� ��������, ��� ��� ����������� ��������� ���� `eq_attr'
���������� � �������, ����� �������� ������������ �������� �������� ���
���� insns, ��������������� �������������� �������. ��� ������� �����
����� ������.
�������� ��������� `attr_flag' �������, ���� ����, ������������ � ������� NAME - ������ ��� 'insn', ������� ����������� � ��������� �����.
NAME - ������, ����������� ���� �� ������ �������������� ������, ��� ��������. ��������� ����� `forward' � `backward' ����� ���������� ����������� ��������� �������� (conditional branch). ��������� ����� `very_likely', `likely', 'very_unlikely', and `unlikely', ��� �� ���������� ������ �� ����������� ����� �������� .
���� ���� 'very_likely' �������, �� ���� 'likely' ����� �������. ���������� ��� ������ `very_unlikely' � `unlikely'.
���� ������ ��������� ���� �������� ��������� ��������, ������� ����� ���� ����������� ��� ������ (forward) ������ ������� ����������� (annul-true) ��� ��� �������� (backward) ������, ������� �� ����������� (annul-false).
(define_delay (eq_attr 'type' 'cbranch')
[(eq_attr 'in_branch_delay' 'true')
(and (eq_attr 'in_branch_delay' 'true')
(attr_flag 'forward'))
(and (eq_attr 'in_branch_delay' 'true')
(attr_flag 'backward'))])
����� `forward' � `backward' - ����, ���� ������� ����������� 'insn'
�� �������� �������� ���������.
����� `very_likely' � `likely' �������, ���� ����������� 'insn' �� �������� �������� ���������. ����� `very_unlikely' � `unlikely' �����, ���� ����������� 'insn' �� �������� �������� ���������.
'Attr_flag' ������������ ������ � ������� ������������ ����� �������� � �� ����� �������� ��� ������ �������� �����������.
��������, ����������� �������� insn, �������������� ���������� ���, ����� �� �������� ���������� � ���� insn (��� ������� `define_peephole' ������������ ���). ������ `define_insn' � `define_peephole' ����� ����� �������������� ��������, ������������ �������� ��������� ��� ��������������� insn. ��������, �� ������������� �� � ����� insn, ��������������� �������� '�� ���������', ��� ���������� � ��� `define_attr'. ������� ������������� ��������� '�� ���������', ���� ����������� ���������� �������� ������ ������-���� ��������� ����������� insn ��������, ��� ����� � ������� �� ���������� �������.
��������� �������� `define_insn' � `define_peephole' (��� ����� �� ������������) - ��� ������ ���������, ������ �� ������� ���������� �������� ������������� ��������. �������� ����� ������ ���������� �������� �������� - ��� ������������� ��������� `set', ������ ������� �������� - `attr'-���������, �������� ��� ���������������� ���������. ������ ������� `set' - ��������� �������� �������� ��������, (��. ���������).
����� �������� �������� ������� �� �������� `alternative' (�� ����, ������� �������� ��������������� ��������� � ����������� insn), ����� �������������� ��������� `set_attr_alternative '. ��� ��������� ��������������� ���� ������� ����������� ��������� ��� ���� ���������.
����� �� ��������� �������� ������������ ���������� ���������, ����� �������������� ����� ������� ��������� `set_attr', ������� ��������� ���������� ������, ������ ���� ��������� �������� �������� ���� ������ �������� �������� �� ������ �� ������ �������.
���� ������������ ����� ������ �� �������������� ������������. � ������ ������ NAME - ������, ������������ �������, ������� ����� ����������.
VALUE-STRING ���� ������, ������ ��������� �������� ��������, ���� ������, ���������� ������ ����� �������, ������ �������� ��� ������� ���������. ����� ��������� ������ ��������������� ����� ��������� � ����������� ������� insn.
�������� ��������, ��� ����� ���� ������� ���������� '*' ��� ���������� ��������, � � ����� ������ ������� ������ �������� �� ��������� ��� insns, ���������������� ����� ��������.
� ����������� �� �������� insn, �������� ����� ����� �� ������������ ��������. This is a shorthand for using a `cond' with tests on the `alternative' attribute.
������ ������� 'set' ������ ���� ����������� ���������� RTL - 'attr', ��� ������������ ������� - ������, ������ ��� ���������������� ��������. VALUE - �������� ��������.
(set_attr 'type' 'load,store,arith')
(set_attr_alternative 'type'
[(const_string 'load') (const_string 'store')
(const_string 'arith')])
(set (attr 'type')
(cond [(eq_attr 'alternative' '1') (const_string 'load')
(eq_attr 'alternative' '2') (const_string 'store')]
(const_string 'arith')))
��������� `define_asm_attributes' ������������ �������� �����������
���������, ����������� insns, ������� ������� �� asm-����������. ��� �����
��������� �����:
(define_asm_attributes [ATTR-SETS])
��� ATTR-SETS ��������� ����� ��� � ��� ����� ��������� 'define_insn' �
`define_peephole '.
��� �������� ����� ������ '�������' ���������� ��������. ��������, ��� ����� �� ���������, ��� ��� ������� ����� ���������.
������������ ��� �������� `length' �������������� ��������. ������ ���������� ����� 'asm' insn ������� � ��������� �����, ������������ � ��������� 'define_asm_attributes' �� ����� �������� ������, ������������ � 'asm' ���������, ������������ � ������ ����� ����� � ������� � newlins � ������. �������������, �������� �������� 'length', ������������� � 'define_asm_attributes' ������ ���� ������������ ��������� ������ ��������� �������� �������.
�������� ������������� �������� �� ��������� ����� ��� ������������ ������������� insn ���������. ������, insns ��������� �� '����' � �������, ������ ���������� 'type', ������������, ��� ������������� ��� ��������. ���� ������� ������ ������������ ������, ����� ���������� �������� �� ��������� ��� ������ ���������. ������ ��������� ��� �������������.
�����������, ��� �� ����� RISC ������ � ����� ������� � � ������� � ��������� ����������� ������ �������� � ������ ������. ������� �����������, ��� �� ����� ��������� ��� insns �� �����������, ������������, ����������� (�����) �������������� ��������, �������� � ��������� ������ � ��������.
������ �� �������� ������������ �������� insn �� ��� ������� � ��������� ���� ���������� ���������� ���������: ��� ������� ����� ���� ���������� �������������� (clobbered), �� ����������, ���� ������������� � ����������� �� ����������� ��������, ��� ���������� ������, ���� ������� �������������� ������������� � ���� ������� ��� �������.
����� ���� ����� ������� ����� 'md' ��� ����� ������:
(define_attr 'type' 'load,store,arith,fp,branch' (const_string 'arith'))
(define_attr 'cc' 'clobber,unchanged,set,change0'
(cond [(eq_attr 'type' 'load')
(const_string 'change0')
(eq_attr 'type' 'store,branch')
(const_string 'unchanged')
(eq_attr 'type' 'arith')
(if_then_else (match_operand:SI 0 '' '')
(const_string 'set')
(const_string 'clobber'))]
(const_string 'clobber')))
(define_insn ''
[(set (match_operand:SI 0 'general_operand' '=r,r,m')
(match_operand:SI 1 'general_operand' 'r,m,r'))]
''
'@
move %0,%1
load %0,%1
store %0,%1'
[(set_attr 'type' 'arith,load,store')])
�������� ��������, ��� �� ��������� � �������������� �������, ���
�������������� ��������, ����������� � ����������� ������ ��� �������� �����
clobber ��� �������, ��� ��� ��� ��������� ��� ������� � ��������,
���������������� �������-�������� ����������.
�� ������ ������� ������������� �������������� ���� ���������� ���������, ������ ��� ����� ����� ��������� ��������. � ����������� �������, ��������� ������� ���������� ����������. ������, ����� ��������� �� ����� ����� �������, GCC �����, ���� ����������� �������, ������� 'length', ���������. ���� ������� ������ �� ����������� ����� �������� �������� ������������ ��� ������ ������ ������ ������ � ��� `define_attr'.
� ������ �������� 'length', � ���������� ����� ����������� ��� �������������� ����� �������������� ������� :
��� ��������� ���������� � ������ �������� N �������� insn, ������� ������ ���� 'label_ref'.
��� ��������� �� ����� *��������* insn. ����� ���� �� ����� ������� �� ������� ���������� insn, �� ��� ���� �� ���������, ������ ��� ����� �������� insn ������ ���� ���������.
����� ���������� � ������ (���������� ���������� ������).
��������� ������������ ����� ��������������, ��� ����������������� ���������� �����:
����� ������������ insn-������� 'length', ��� ������������ ���������� ��������, ������� ������ ���� ��������� ������ ������� insn-� � �������. ���� �� ����������, ������������ 0.
���� ����������, �� ��� ������ �����, ����������� ��� ���������� INSN ��� ������� �� ��������� � ������� ��� ������������. LENGTH - lvalue, ���������� ���������� ����������� ����� insn-�. ��� �������� ������� ���������, ��������� ���������� ����� insn. ���� ��������� ����������, INSN �� ������ ���� insn �������� ����� (varying-length insn).
��� ������������ ������ �� ���������. ������, ����� ��� ��������� - ROMP. �� ���� ������ ������ `addr_vec' insn ������ ���� �������� �� ���, ����� �������������� ��� ����, ��� ����� ������������� ������������.
��� ������ ����������� ��������� ��������� �����, ���������� IBM 360. ���� �� ������ ����������, ��� � �������� ����� ���������� ��������� ����� �������, �� �� ����� ������� �� ����� � 4-�� �� ������, ��������� 4-������� ����������. � ��������� ������, �� ����� ��������� � 6-������� ������������������ ��� �������� ������ �� ������ � ���������� ��������.
�� ����� ������� ������� ��� ���������� ��������� ����� ���� ��������� ��� ���������:
(define_insn 'jump'
[(set (pc)
(label_ref (match_operand 0 '' '')))]
''
'*
{
return (get_attr_length (insn) == 4
? \'b %l0\' : \'l r15,=a(%l0); br r15\');
}'
[(set (attr 'length') (if_then_else (lt (match_dup 0) (const_int 4096))
(const_int 4)
(const_int 6)))])
����������� ����� `define_attr', ��� ��������� ��� �������� �� ��������� �������� '����������' ����������, ��������� �������, ���������� ���������� ��� ������� ������� �����������. ���������� �������� ����� ���� ������������ ��� ��� ����������� ����, ����� ������������� ������������. ��������:
(define_attr 'cpu' 'm88100,m88110,m88000'
(const
(cond [(symbol_ref 'TARGET_88100') (const_string 'm88100')
(symbol_ref 'TARGET_88110') (const_string 'm88110')]
(const_string 'm88000'))))
(define_attr 'memory' 'fast,slow'
(const
(if_then_else (symbol_ref 'TARGET_FAST_MEM')
(const_string 'fast')
(const_string 'slow'))))
������������ ��������������� ��� ���������� ��������� �� ����� ����������,
�.�. ��� �� ������� �� �� ����� ���������� insn-��. RTL-���������,
�������������� ��� ����������� �������� ����������� ��������, �����
������������ ����� `symbol_ref', �� �� ����� ������������ �� �����
`match_operand' �� ����� `eq_attr', ���������� insn ��������.
�������� insn ��������� ����� ���� ����������� ��� ����������� ���������� � ������ ��������, ���� �� ������� ������ ����� ����������. ���������� ������ ��������� ���� ��������, ���� �����-�� ���������� ��������� ������������� �� ���, ����������� ���, ��� ���� �� ���� ����� ���. ������������� ��������� �������� ���������� �������� � ������, ������� ����� ��������� ��������� ���������� �� ����, ��� �������� ������� ��� �����.
�� ��������� ������� ���������� ��������� �������� ����� ������������� '������������' ���������� � ����� ��������. ��� ��������, ��� ���������� �� ����� ��������� ��� ������������ ������ �������. �������������� ��� ���� ����������: �� ������� ����������, ���� ����� - ������, � ���, ������� ����������, ���� ����.
������������ ����� �������� ���������� �� ������������ ���������� ���, ��� ��������� �� ���������� � ����� �������� ��� ���, ������� ������ �� ���� ��������������� ���������� � �� ������� �� ������ ������������ ����� ������������. �������� ��������� ������ ��� ���������� ������������ ����������, ���������� �� ������.
���������� insn, ������������ � ����� ��� ����� ������ �������� ������������ ����� ��������� `define_delay'. ��� ����� ��������� �����:
(define_delay TEST
[DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
...])
TEST - �������� ���������, ������� ��������� ����������� �� ����
`define_delay' � ����������� insn. ���� �����������, �� ����� ���������
������ �������� ������������ ������ �������, ���������� ��� ������
��������. Insn, ���������� � ���� �������� N, ������ �������������
�������� ��������� DELAY-N. ANNUL-TRUE-N - ���� ���������, �������
����������, ����� insn-� ����� ���� ������������, ���� ����� - ������.
����������, ANNUL-FALSE-N ���������� ����� insn-� � ����� ��������
����� ���� ������������, ���� ����� - ����. ���� ������������� ��
�������������� ���� ������ ��������, �� ����� �������� `(nil)'.
��������, � ����� ����������� ������, ��� insn-� ��������� � ������ ������� ���� ���� ��������, ������� ����� ��������� ����� insn, �������� �� insn-�� ��������� � ������, � `md' ���� ���� �� �������� ���������:
(define_delay (eq_attr 'type' 'branch,call')
[(eq_attr 'type' '!branch,call') (nil) (nil)])
����� ���� ���������� ��������� ��������� `define_delay'. � ���� ������
������ ����� ��������� ���������� ��������� ���������� ����� ��������
� �� ������ ���� �� ������ insn-�, ��� �������� ����� ���� �� ���
�� ������ ��������� `define_delay'.
��������, ���� �� ����� ������, ��������� ���� ���� �������� ��� ��������� � ��� ��� �������, �� ������� ���� �������� �� ����� ��������� insn ��������� ��� ������, � ����� ���������� insn � ����� �������� ��� ��������� ����� ���� �����������, ���� ����� - ������, �� ����� ����������� ��� ��������� �������:
(define_delay (eq_attr 'type' 'branch')
[(eq_attr 'type' '!branch,call')
(eq_attr 'type' '!branch,call')
(nil)])
(define_delay (eq_attr 'type' 'call')
[(eq_attr 'type' '!branch,call') (nil) (nil)
(eq_attr 'type' '!branch,call') (nil) (nil)])
�� ����������� RISC ����� ������� �������, ��� ���������� ���������� ��� ������������� ����� ������. � ����� ������, ������� ��������� ������ �� ������. �� ������ ������� �������� pipeline stall, ���� ������ ��������� ������� ���� ����� ������� ��������.
����� ����, ������ ����� ����� ��������������� ����� ������������������� ������ - ������ ���� ��� ������ ����� � ���� ��� ��������� �����, � �����, ����� ��������� ��������� ��� �� �����, ����� ��������� pipeline stall.
�������� � ���� ������� ��������� ����������, ������� ������� ������ ������� ����� ����������� ������� � ��������, ����� ������������ ���������. ��� ����� ��������� ����������, ����� ���������� ������� �������� ���������� �������� ������.
��� ����� ����������� � ���� �������, ������ ��������� �� '�������������� ������', ������ �� ������� ��������� ������������� ����� ������ � ������� '������-�����-������-�����'. �������������� ������, ������� ��������� ���� ������� �� ������ ���� � ��������� ���������� �������������� � ������������� ������� (������ ����� ���������) �� ������ ���� ����������. ������������ RISC ��������������� ����� ������ ����� ��������� �������������� ������, ������� �� ����� �������� `memory'. ����� ����� 'superscalar' ���������� ����� ����� ����� �������������� ������ ��� �������� � ��������� ������, ������ �� ������� ���� ��� ������������� �������� � ���������.
������ ������������� ��������������� ������ ������� insn ������������ ���������� `define_function_unit', ������� �������� �������������� ���:
(define_function_unit NAME MULTIPLICITY SIMULTANEITY
TEST READY-DELAY ISSUE-DELAY
[CONFLICT-LIST])
NAME - ������, ������ ��� ��������������� ������.
MULTIPLICITY - ����� �����, ������������ ����� ���������� ������� � ����������. ���� ��������� ������ ��� ���� ������, �� �� ������������ ����� ����������� ����������. ������ ���� ������ ������ ��-���������� ����������� ������. (������������ ����� ������ ������, ������� ����� ��������� �������������� ������� ��� ������ ������ �������, ���������� ��-���������� ������������ � �� pipelined - ��� ������ ��������� � ��� ������ �������� � CDC 6600.)
SIMULTANEITY ���������� ������������ ����� insns, ������� ����� ����������� � ������ ������� ��������������� ������ ������������, ��� ����, ���� ������ - pipelined � �� ����� ������� �����������.
��� ����������� `define_function_unit', ���������� ��������������� ������ NAME, ������ ����� �� �� ����� ����� � �������� ��� MULTIPLICITY � SIMULTANEITY.
TEST - ���� ��������, ������� �������� insns, ����������� � ���� �����������. �������� ��������, ��� insn ����� ������������ ����� ��� ���� �������������� ������, � �������������� ������ ����� ���� ��������� � ����� ��� ����� 'define_function_unit'.
READY-DELAY - ����� �����, ������� ���������� ���������� ������, ����� �������� ��������� ������� ����� �������������� ��� ������ ��������.
? ISSUE-DELAY - ����� �����, ������� ���������� ���������� ������ ����� ����, ��� �������, ��������������� ��������� TEST �������� ������������ ���� ������, �� ���� ��� ����� �������� ����������� �������. ���� N ��������� �������� ����� ����� N-1. ����������� ������� ����� ����� ���� ���������, ���� ����� ������ ������� ����� ������� �������� READY-DELAY. ���� ������ ������������ ��������, ��������� ������� SIMULTANEITY, READY-DELAY, ISSUE-DELAY, � CONFLICT-LIST. ��� ����������� ��-pipelined ��������������� ������, � ��������� SIMULTANEITY �������� ���, ��� ������ ������, ��������� READY-DELAY ������ ������������� insn, � ������� �� �������� ISSUE-DELAY ������������.
CONFLICT-LIST - �������������� ������, ������ ���������� ���� ��������� (conflict costs) ��� ����� ������. ���� ���� ������ ���������, �� ��� - ������ ��������� ����� �������, ������� ����� ��������� � insns, ��������� ��� ���������� � NAME, ����� insn ������� ������������� TEST, ��� ������������ � NAME. ��� ������� insn � ������, ISSUE-DELAY ���������� ���� ���������; ��� insns, �������� ��� � ������, ���� - ����. ���� ���� ������ �� ���������, CONFLICT-LIST �������� �� ��������� ��� ���� ������, ������������ �������������� ������.
� ����������� ������� ���� ������ ������������, ����� �������������� ������ ��� ��������� ��������� ����� ����� pipeline-��� �������� ��������� ��� ������� ��������, �� �� ��� �����, ��� ����� ������ ������ ����� pipeline-��� ������, �� �� ������, � �.�. ���
��� ������, ���������� ������������ RISC ������, � ������� ��������� ������� �������� �� �������� � ������� ���� ������ (��������� ��������� ������� 'delay') � � ������� ������ ���� ������� �������� ����� ���� ��������� ������������. ��� ���� �� ���������� ���:
(define_function_unit 'memory' 1 1 (eq_attr 'type' 'load') 2 0)
��� ������ ��������� ����� �������������� ������, ������� ����� pipeline
���� ��������� ���� ������� ��������, �� �� ���. ����� ����
���������� ���������:
(define_function_unit
'fp' 1 0 (eq_attr 'type' 'sp_fp') 4 4 [(eq_attr 'type' 'dp_fp')])
(define_function_unit
'fp' 1 0 (eq_attr 'type' 'dp_fp') 4 4 [(eq_attr 'type' 'sp_fp')])
*���������*: ����������� �������� �������� ���������� ��������������
������� � ���������� ��� ����������� � ��������� `define_function_unit'.
������� �� �������� ��������, ��� ��� ����������� �� ����� ���������
������������� ��������� �������� "����� ���������" �����������, �������
����� insn, ������������ ����� pipeline �������. ��� insn ����� �������
�������� �������������� ��������� ��� ������� ������, ������������� �
������� �� ����������, � �� ���������� ������� ������������� ����� ���������.
�� ������������ ����� ������� ����, ��� ���������� ��������� ��������������
������� � ����� ����������� � ������������� �� �� �������������.