OSDN Git Service

Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-maccod.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                   S Y S T E M . M A C H I N E _ C O D E                  --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                                                                          --
9 --          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
10 --                                                                          --
11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
17 --                                                                          --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception,   --
20 -- version 3.1, as published by the Free Software Foundation.               --
21 --                                                                          --
22 -- You should have received a copy of the GNU General Public License and    --
23 -- a copy of the GCC Runtime Library Exception along with this program;     --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
25 -- <http://www.gnu.org/licenses/>.                                          --
26 --                                                                          --
27 -- GNAT was originally developed  by the GNAT team at  New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
29 --                                                                          --
30 ------------------------------------------------------------------------------
31
32 --  This package provides machine code support, both for intrinsic machine
33 --  operations, and also for machine code statements. See GNAT documentation
34 --  for full details.
35
36 package System.Machine_Code is
37    pragma Pure;
38
39    type Asm_Input_Operand  is private;
40    type Asm_Output_Operand is private;
41    --  These types are never used directly, they are declared only so that
42    --  the calls to Asm are type correct according to Ada semantic rules.
43
44    No_Input_Operands  : constant Asm_Input_Operand;
45    No_Output_Operands : constant Asm_Output_Operand;
46
47    type Asm_Input_Operand_List  is
48      array (Integer range <>) of Asm_Input_Operand;
49
50    type Asm_Output_Operand_List is
51      array (Integer range <>) of Asm_Output_Operand;
52
53    type Asm_Insn is private;
54    --  This type is not used directly. It is declared only so that the
55    --  aggregates used in code statements are type correct by Ada rules.
56
57    procedure Asm (
58      Template : String;
59      Outputs  : Asm_Output_Operand_List;
60      Inputs   : Asm_Input_Operand_List;
61      Clobber  : String  := "";
62      Volatile : Boolean := False);
63
64    procedure Asm (
65      Template : String;
66      Outputs  : Asm_Output_Operand := No_Output_Operands;
67      Inputs   : Asm_Input_Operand_List;
68      Clobber  : String  := "";
69      Volatile : Boolean := False);
70
71    procedure Asm (
72      Template : String;
73      Outputs  : Asm_Output_Operand_List;
74      Inputs   : Asm_Input_Operand := No_Input_Operands;
75      Clobber  : String  := "";
76      Volatile : Boolean := False);
77
78    procedure Asm (
79      Template : String;
80      Outputs  : Asm_Output_Operand := No_Output_Operands;
81      Inputs   : Asm_Input_Operand  := No_Input_Operands;
82      Clobber  : String  := "";
83      Volatile : Boolean := False);
84
85    function Asm (
86      Template : String;
87      Outputs  : Asm_Output_Operand_List;
88      Inputs   : Asm_Input_Operand_List;
89      Clobber  : String  := "";
90      Volatile : Boolean := False) return Asm_Insn;
91
92    function Asm (
93      Template : String;
94      Outputs  : Asm_Output_Operand := No_Output_Operands;
95      Inputs   : Asm_Input_Operand_List;
96      Clobber  : String  := "";
97      Volatile : Boolean := False) return Asm_Insn;
98
99    function Asm (
100      Template : String;
101      Outputs  : Asm_Output_Operand_List;
102      Inputs   : Asm_Input_Operand := No_Input_Operands;
103      Clobber  : String  := "";
104      Volatile : Boolean := False) return Asm_Insn;
105
106    function Asm (
107      Template : String;
108      Outputs  : Asm_Output_Operand := No_Output_Operands;
109      Inputs   : Asm_Input_Operand  := No_Input_Operands;
110      Clobber  : String  := "";
111      Volatile : Boolean := False) return Asm_Insn;
112
113    pragma Import (Intrinsic, Asm);
114
115 private
116
117    type Asm_Input_Operand  is new Integer;
118    type Asm_Output_Operand is new Integer;
119    type Asm_Insn           is new Integer;
120    --  All three of these types are dummy types, to meet the requirements of
121    --  type consistency. No values of these types are ever referenced.
122
123    No_Input_Operands  : constant Asm_Input_Operand  := 0;
124    No_Output_Operands : constant Asm_Output_Operand := 0;
125
126 end System.Machine_Code;