llvm.org GIT mirror llvm / release_28 include / llvm / CodeGen / RuntimeLibcalls.h
release_28

Tree @release_28 (Download .tar.gz)

RuntimeLibcalls.h @release_28

4956001
 
 
 
7ed47a1
 
4956001
 
 
 
b2ff885
4956001
 
 
 
 
 
b2ff885
 
4956001
 
 
161e897
 
fabd32d
 
 
 
4956001
 
 
15c94d0
4956001
 
dddc629
15c94d0
4956001
 
dddc629
15c94d0
4956001
 
dddc629
8983da7
15c94d0
4956001
 
5ac319a
8983da7
813090c
4956001
 
5ac319a
8983da7
813090c
4956001
 
5ac319a
8983da7
813090c
4956001
 
5ac319a
8983da7
813090c
4956001
 
5ac319a
4956001
 
 
 
 
 
007f984
161e897
4956001
 
007f984
161e897
4956001
 
007f984
161e897
4956001
 
007f984
161e897
4956001
 
007f984
161e897
4956001
 
161e897
 
4956001
 
161e897
 
7794f2a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4956001
 
007f984
 
4956001
 
007f984
 
e54be10
 
 
 
2bb1e3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d2c817e
 
 
 
4956001
 
 
927411b
 
4956001
e36bfe6
 
 
 
8aa207e
 
4956001
 
a2e9485
de0118c
 
4956001
 
a2e9485
be1ad4d
161e897
a2e9485
041cde2
161e897
a2e9485
8aa207e
 
4956001
 
a2e9485
de0118c
 
4956001
 
a2e9485
161e897
 
a2e9485
041cde2
161e897
a2e9485
4956001
 
9bed0f5
 
4956001
 
161e897
 
d91446d
 
 
 
4956001
 
ac6cece
 
4956001
 
ac6cece
 
 
 
 
 
4956001
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
991d361
 
4956001
a114baa
 
 
 
 
b0f1e17
 
 
e03262f
 
 
 
 
ef6eb9c
 
 
 
e03262f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4956001
 
b2ff885
 
 
e50ed30
b2ff885
 
 
e50ed30
b2ff885
 
 
e50ed30
b2ff885
 
 
e50ed30
b2ff885
 
 
e50ed30
b2ff885
 
 
e50ed30
4956001
 
 
 
//===-- CodeGen/RuntimeLibcall.h - Runtime Library Calls --------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the enum representing the list of runtime library calls
// the backend may emit during code generation, and also some helper functions.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H
#define LLVM_CODEGEN_RUNTIMELIBCALLS_H

#include "llvm/CodeGen/ValueTypes.h"

namespace llvm {
namespace RTLIB {
  /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
  /// the backend can emit.  The various long double types cannot be merged,
  /// because 80-bit library functions use "xf" and 128-bit use "tf".
  /// 
  /// When adding PPCF128 functions here, note that their names generally need
  /// to be overridden for Darwin with the xxx$LDBL128 form.  See
  /// PPCISelLowering.cpp.
  ///
  enum Libcall {
    // Integer
    SHL_I16,
    SHL_I32,
    SHL_I64,
    SHL_I128,
    SRL_I16,
    SRL_I32,
    SRL_I64,
    SRL_I128,
    SRA_I16,
    SRA_I32,
    SRA_I64,
    SRA_I128,
    MUL_I8,
    MUL_I16,
    MUL_I32,
    MUL_I64,
    MUL_I128,
    SDIV_I8,
    SDIV_I16,
    SDIV_I32,
    SDIV_I64,
    SDIV_I128,
    UDIV_I8,
    UDIV_I16,
    UDIV_I32,
    UDIV_I64,
    UDIV_I128,
    SREM_I8,
    SREM_I16,
    SREM_I32,
    SREM_I64,
    SREM_I128,
    UREM_I8,
    UREM_I16,
    UREM_I32,
    UREM_I64,
    UREM_I128,
    NEG_I32,
    NEG_I64,

    // FLOATING POINT
    ADD_F32,
    ADD_F64,
    ADD_F80,
    ADD_PPCF128,
    SUB_F32,
    SUB_F64,
    SUB_F80,
    SUB_PPCF128,
    MUL_F32,
    MUL_F64,
    MUL_F80,
    MUL_PPCF128,
    DIV_F32,
    DIV_F64,
    DIV_F80,
    DIV_PPCF128,
    REM_F32,
    REM_F64,
    REM_F80,
    REM_PPCF128,
    POWI_F32,
    POWI_F64,
    POWI_F80,
    POWI_PPCF128,
    SQRT_F32,
    SQRT_F64,
    SQRT_F80,
    SQRT_PPCF128,
    LOG_F32,
    LOG_F64,
    LOG_F80,
    LOG_PPCF128,
    LOG2_F32,
    LOG2_F64,
    LOG2_F80,
    LOG2_PPCF128,
    LOG10_F32,
    LOG10_F64,
    LOG10_F80,
    LOG10_PPCF128,
    EXP_F32,
    EXP_F64,
    EXP_F80,
    EXP_PPCF128,
    EXP2_F32,
    EXP2_F64,
    EXP2_F80,
    EXP2_PPCF128,
    SIN_F32,
    SIN_F64,
    SIN_F80,
    SIN_PPCF128,
    COS_F32,
    COS_F64,
    COS_F80,
    COS_PPCF128,
    POW_F32,
    POW_F64,
    POW_F80,
    POW_PPCF128,
    CEIL_F32,
    CEIL_F64,
    CEIL_F80,
    CEIL_PPCF128,
    TRUNC_F32,
    TRUNC_F64,
    TRUNC_F80,
    TRUNC_PPCF128,
    RINT_F32,
    RINT_F64,
    RINT_F80,
    RINT_PPCF128,
    NEARBYINT_F32,
    NEARBYINT_F64,
    NEARBYINT_F80,
    NEARBYINT_PPCF128,
    FLOOR_F32,
    FLOOR_F64,
    FLOOR_F80,
    FLOOR_PPCF128,
    COPYSIGN_F32,
    COPYSIGN_F64,
    COPYSIGN_F80,
    COPYSIGN_PPCF128,

    // CONVERSION
    FPEXT_F32_F64,
    FPEXT_F16_F32,
    FPROUND_F32_F16,
    FPROUND_F64_F32,
    FPROUND_F80_F32,
    FPROUND_PPCF128_F32,
    FPROUND_F80_F64,
    FPROUND_PPCF128_F64,
    FPTOSINT_F32_I8,
    FPTOSINT_F32_I16,
    FPTOSINT_F32_I32,
    FPTOSINT_F32_I64,
    FPTOSINT_F32_I128,
    FPTOSINT_F64_I8,
    FPTOSINT_F64_I16,
    FPTOSINT_F64_I32,
    FPTOSINT_F64_I64,
    FPTOSINT_F64_I128,
    FPTOSINT_F80_I32,
    FPTOSINT_F80_I64,
    FPTOSINT_F80_I128,
    FPTOSINT_PPCF128_I32,
    FPTOSINT_PPCF128_I64,
    FPTOSINT_PPCF128_I128,
    FPTOUINT_F32_I8,
    FPTOUINT_F32_I16,
    FPTOUINT_F32_I32,
    FPTOUINT_F32_I64,
    FPTOUINT_F32_I128,
    FPTOUINT_F64_I8,
    FPTOUINT_F64_I16,
    FPTOUINT_F64_I32,
    FPTOUINT_F64_I64,
    FPTOUINT_F64_I128,
    FPTOUINT_F80_I32,
    FPTOUINT_F80_I64,
    FPTOUINT_F80_I128,
    FPTOUINT_PPCF128_I32,
    FPTOUINT_PPCF128_I64,
    FPTOUINT_PPCF128_I128,
    SINTTOFP_I32_F32,
    SINTTOFP_I32_F64,
    SINTTOFP_I32_F80,
    SINTTOFP_I32_PPCF128,
    SINTTOFP_I64_F32,
    SINTTOFP_I64_F64,
    SINTTOFP_I64_F80,
    SINTTOFP_I64_PPCF128,
    SINTTOFP_I128_F32,
    SINTTOFP_I128_F64,
    SINTTOFP_I128_F80,
    SINTTOFP_I128_PPCF128,
    UINTTOFP_I32_F32,
    UINTTOFP_I32_F64,
    UINTTOFP_I32_F80,
    UINTTOFP_I32_PPCF128,
    UINTTOFP_I64_F32,
    UINTTOFP_I64_F64,
    UINTTOFP_I64_F80,
    UINTTOFP_I64_PPCF128,
    UINTTOFP_I128_F32,
    UINTTOFP_I128_F64,
    UINTTOFP_I128_F80,
    UINTTOFP_I128_PPCF128,

    // COMPARISON
    OEQ_F32,
    OEQ_F64,
    UNE_F32,
    UNE_F64,
    OGE_F32,
    OGE_F64,
    OLT_F32,
    OLT_F64,
    OLE_F32,
    OLE_F64,
    OGT_F32,
    OGT_F64,
    UO_F32,
    UO_F64,
    O_F32,
    O_F64,

    // MEMORY
    MEMCPY,
    MEMSET,
    MEMMOVE,

    // EXCEPTION HANDLING
    UNWIND_RESUME,

    // Family ATOMICs
    SYNC_VAL_COMPARE_AND_SWAP_1,
    SYNC_VAL_COMPARE_AND_SWAP_2,
    SYNC_VAL_COMPARE_AND_SWAP_4,
    SYNC_VAL_COMPARE_AND_SWAP_8,
    SYNC_LOCK_TEST_AND_SET_1,
    SYNC_LOCK_TEST_AND_SET_2,
    SYNC_LOCK_TEST_AND_SET_4,
    SYNC_LOCK_TEST_AND_SET_8,
    SYNC_FETCH_AND_ADD_1,
    SYNC_FETCH_AND_ADD_2,
    SYNC_FETCH_AND_ADD_4,
    SYNC_FETCH_AND_ADD_8,
    SYNC_FETCH_AND_SUB_1,
    SYNC_FETCH_AND_SUB_2,
    SYNC_FETCH_AND_SUB_4,
    SYNC_FETCH_AND_SUB_8,
    SYNC_FETCH_AND_AND_1,
    SYNC_FETCH_AND_AND_2,
    SYNC_FETCH_AND_AND_4,
    SYNC_FETCH_AND_AND_8,
    SYNC_FETCH_AND_OR_1,
    SYNC_FETCH_AND_OR_2,
    SYNC_FETCH_AND_OR_4,
    SYNC_FETCH_AND_OR_8,
    SYNC_FETCH_AND_XOR_1,
    SYNC_FETCH_AND_XOR_2,
    SYNC_FETCH_AND_XOR_4,
    SYNC_FETCH_AND_XOR_8,
    SYNC_FETCH_AND_NAND_1,
    SYNC_FETCH_AND_NAND_2,
    SYNC_FETCH_AND_NAND_4,
    SYNC_FETCH_AND_NAND_8,

    UNKNOWN_LIBCALL
  };

  /// getFPEXT - Return the FPEXT_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getFPEXT(EVT OpVT, EVT RetVT);

  /// getFPROUND - Return the FPROUND_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getFPROUND(EVT OpVT, EVT RetVT);

  /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getFPTOSINT(EVT OpVT, EVT RetVT);

  /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getFPTOUINT(EVT OpVT, EVT RetVT);

  /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getSINTTOFP(EVT OpVT, EVT RetVT);

  /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or
  /// UNKNOWN_LIBCALL if there is none.
  Libcall getUINTTOFP(EVT OpVT, EVT RetVT);
}
}

#endif