13.8 Machine Code Insertions
1
A machine code insertion can
be achieved by a call to a subprogram whose
sequence_of_statements
contains
code_statements.
Syntax
2
code_statement ::= qualified_expression;
3
A code_statement
is only allowed in the handled_sequence_of_statements
of a subprogram_body. If a subprogram_body
contains any code_statements, then within
this subprogram_body the only allowed form
of statement is a code_statement
(labeled or not), the only allowed declarative_items
are use_clauses, and no exception_handler
is allowed (comments and pragmas
are allowed as usual).
Name Resolution Rules
4
The
qualified_expression
is expected to be of any type.
Legality Rules
5
The qualified_expression
shall be of a type declared in package System.Machine_Code.
6
A code_statement shall
appear only within the scope of a with_clause
that mentions package System.Machine_Code.
Static Semantics
7
The contents
of the library package System.Machine_Code (if provided) are implementation
defined. The meaning of
code_statements is
implementation defined. Typically, each
qualified_expression
represents a machine instruction or assembly directive.
Implementation Permissions
8
An implementation may place restrictions on code_statements.
An implementation is not required to provide package System.Machine_Code.
9
15 An implementation may provide implementation-defined
pragmas specifying register conventions and calling conventions.
10/2
16 Machine code functions are exempt from
the rule that a return statement is required. In fact, return statements
are forbidden, since only code_statements
are allowed.
11
Examples
12
Example of a code
statement:
13
M : Mask;
procedure Set_Mask; pragma Inline(Set_Mask);
14
procedure Set_Mask is
use System.Machine_Code; -- assume “with System.Machine_Code;” appears somewhere above
begin
SI_Format'(Code => SSM, B => M'Base_Reg, D => M'Disp);
-- Base_Reg and Disp are implementation-defined attributes
end Set_Mask;