- (1)
 - A machine code insertion can be achieved by a call to a subprogram whose
sequence_of_statements contains code_statements.
 
(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)
 (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)
 
      (17) Intrinsic subprograms (see 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, ``Interface to Other Languages''. 
    
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;
 
 
  -- Email comments, additions, corrections, gripes, kudos, etc. to: 
 Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12