Home | History | Annotate | Download | only in Ipf
      1 //++
      2 // Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
      3 // This program and the accompanying materials
      4 // are licensed and made available under the terms and conditions of the BSD License
      5 // which accompanies this distribution.  The full text of the license may be found at
      6 // http://opensource.org/licenses/bsd-license.php
      7 //
      8 // THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
      9 // WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     10 //
     11 // Module Name:
     12 //
     13 //  IpfMacro.i
     14 //
     15 // Abstract:
     16 //
     17 //  Contains the macros needed for calling procedures in Itanium-based assembly code.
     18 //
     19 //
     20 // Revision History:
     21 //
     22 //--
     23 
     24 #ifndef  _IA64PROC_I
     25 #define  _IA64PROC_I
     26 
     27 
     28 #define PROCEDURE_ENTRY(name)   .##text;            \
     29                                 .##type name, @function;    \
     30                                 .##proc name;           \
     31 name::
     32 
     33 #define PROCEDURE_EXIT(name)    .##endp name
     34 
     35 // Note: use of NESTED_SETUP requires number of locals (l) >= 3
     36 
     37 #define NESTED_SETUP(i,l,o,r) \
     38          alloc loc1=ar##.##pfs,i,l,o,r ;\
     39          mov loc0=b0
     40 
     41 #define NESTED_RETURN \
     42          mov b0=loc0 ;\
     43          mov ar##.##pfs=loc1 ;;\
     44          br##.##ret##.##dpnt  b0;;
     45 
     46 
     47 #define INTERRUPT_HANDLER_BEGIN(name) \
     48 PROCEDURE_ENTRY(name##HandlerBegin) \
     49 ;; \
     50 PROCEDURE_EXIT(name##HandlerBegin)
     51 
     52 #define INTERRUPT_HANDLER_END(name) \
     53 PROCEDURE_ENTRY(name##HandlerEnd) \
     54 ;; \
     55 PROCEDURE_EXIT(name##HandlerEnd)
     56 
     57 
     58 #define INTERRUPT_HANDLER_BLOCK_BEGIN \
     59 INTERRUPT_HANDLER_BEGIN(First)
     60 
     61 #define INTERRUPT_HANDLER_BLOCK_END \
     62 INTERRUPT_HANDLER_END(Last)
     63 
     64 
     65 
     66 #endif  // _IA64PROC_I
     67