Go to the first, previous, next, last section, table of contents.
-
A machine code insertion can be achieved by a call to a subprogram whose
sequence_of_statements contains code_statements.
Syntax
-
code_statement ::= qualified_expression;
-
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
-
The qualified_expression is expected to be of any type.
Legality Rules
-
The qualified_expression shall be of a type declared in package
System.Machine_Code.
-
A code_statement shall appear only within the scope of a with_clause
that mentions package System.Machine_Code.
Static Semantics
-
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
-
An implementation may place restrictions on code_statements. An
implementation is not required to provide package System.Machine_Code.
NOTES
-
(15) An implementation may provide implementation-defined pragmas
specifying register conventions and calling conventions.
-
(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.
-
(17) Intrinsic subprograms, See section 6.3.1 Conformance Rules, can
also be used to achieve machine code insertions. Interface to assembly
language can be achieved using the features in Annex B, See section B Interface to Other Languages (normative).
Examples
-
Example of a code statement:
-
M : Mask;
procedure Set_Mask; pragma Inline(Set_Mask);
-
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;
Go to the first, previous, next, last section, table of contents.