Home | History | Annotate | Download | only in radeon
      1 //===-- AMDILUtilityFunctions.h - AMDIL Utility Functions Header --------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //==-----------------------------------------------------------------------===//
      9 //
     10 // This file provides helper macros for expanding case statements.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 #ifndef AMDILUTILITYFUNCTIONS_H_
     14 #define AMDILUTILITYFUNCTIONS_H_
     15 
     16 // Macros that are used to help with switch statements for various data types
     17 // However, these macro's do not return anything unlike the second set below.
     18 #define ExpandCaseTo32bitIntTypes(Instr)  \
     19 case Instr##_i32:
     20 
     21 #define ExpandCaseTo32bitIntTruncTypes(Instr)  \
     22 case Instr##_i32i8: \
     23 case Instr##_i32i16:
     24 
     25 #define ExpandCaseToIntTypes(Instr) \
     26     ExpandCaseTo32bitIntTypes(Instr)
     27 
     28 #define ExpandCaseToIntTruncTypes(Instr) \
     29     ExpandCaseTo32bitIntTruncTypes(Instr)
     30 
     31 #define ExpandCaseToFloatTypes(Instr) \
     32     case Instr##_f32:
     33 
     34 #define ExpandCaseTo32bitScalarTypes(Instr) \
     35     ExpandCaseTo32bitIntTypes(Instr) \
     36 case Instr##_f32:
     37 
     38 #define ExpandCaseToAllScalarTypes(Instr) \
     39     ExpandCaseToFloatTypes(Instr) \
     40 ExpandCaseToIntTypes(Instr)
     41 
     42 #define ExpandCaseToAllScalarTruncTypes(Instr) \
     43     ExpandCaseToFloatTruncTypes(Instr) \
     44 ExpandCaseToIntTruncTypes(Instr)
     45 
     46 #define ExpandCaseToAllTypes(Instr) \
     47 ExpandCaseToAllScalarTypes(Instr)
     48 
     49 #define ExpandCaseToAllTruncTypes(Instr) \
     50 ExpandCaseToAllScalarTruncTypes(Instr)
     51 
     52 // Macros that expand into  statements with return values
     53 #define ExpandCaseTo32bitIntReturn(Instr, Return)  \
     54 case Instr##_i32: return Return##_i32;
     55 
     56 #define ExpandCaseToIntReturn(Instr, Return) \
     57     ExpandCaseTo32bitIntReturn(Instr, Return)
     58 
     59 #define ExpandCaseToFloatReturn(Instr, Return) \
     60     case Instr##_f32: return Return##_f32;\
     61 
     62 #define ExpandCaseToAllScalarReturn(Instr, Return) \
     63     ExpandCaseToFloatReturn(Instr, Return) \
     64 ExpandCaseToIntReturn(Instr, Return)
     65 
     66 // These macros expand to common groupings of RegClass ID's
     67 #define ExpandCaseTo1CompRegID \
     68 case AMDGPU::GPRI32RegClassID: \
     69 case AMDGPU::GPRF32RegClassID:
     70 
     71 #define ExpandCaseTo32BitType(Instr) \
     72 case Instr##_i32: \
     73 case Instr##_f32:
     74 
     75 #endif // AMDILUTILITYFUNCTIONS_H_
     76