1193323Sed//===-- CodeGen/RuntimeLibcall.h - Runtime Library Calls --------*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This file defines the enum representing the list of runtime library calls 11193323Sed// the backend may emit during code generation, and also some helper functions. 12193323Sed// 13193323Sed//===----------------------------------------------------------------------===// 14193323Sed 15193323Sed#ifndef LLVM_CODEGEN_RUNTIMELIBCALLS_H 16193323Sed#define LLVM_CODEGEN_RUNTIMELIBCALLS_H 17193323Sed 18193323Sed#include "llvm/CodeGen/ValueTypes.h" 19193323Sed 20193323Sednamespace llvm { 21193323Sednamespace RTLIB { 22193323Sed /// RTLIB::Libcall enum - This enum defines all of the runtime library calls 23193323Sed /// the backend can emit. The various long double types cannot be merged, 24193323Sed /// because 80-bit library functions use "xf" and 128-bit use "tf". 25224145Sdim /// 26193323Sed /// When adding PPCF128 functions here, note that their names generally need 27193323Sed /// to be overridden for Darwin with the xxx$LDBL128 form. See 28193323Sed /// PPCISelLowering.cpp. 29193323Sed /// 30193323Sed enum Libcall { 31193323Sed // Integer 32193323Sed SHL_I16, 33193323Sed SHL_I32, 34193323Sed SHL_I64, 35193323Sed SHL_I128, 36193323Sed SRL_I16, 37193323Sed SRL_I32, 38193323Sed SRL_I64, 39193323Sed SRL_I128, 40193323Sed SRA_I16, 41193323Sed SRA_I32, 42193323Sed SRA_I64, 43193323Sed SRA_I128, 44199481Srdivacky MUL_I8, 45193323Sed MUL_I16, 46193323Sed MUL_I32, 47193323Sed MUL_I64, 48193323Sed MUL_I128, 49224145Sdim MULO_I32, 50224145Sdim MULO_I64, 51224145Sdim MULO_I128, 52199481Srdivacky SDIV_I8, 53193323Sed SDIV_I16, 54193323Sed SDIV_I32, 55193323Sed SDIV_I64, 56193323Sed SDIV_I128, 57199481Srdivacky UDIV_I8, 58193323Sed UDIV_I16, 59193323Sed UDIV_I32, 60193323Sed UDIV_I64, 61193323Sed UDIV_I128, 62199481Srdivacky SREM_I8, 63193323Sed SREM_I16, 64193323Sed SREM_I32, 65193323Sed SREM_I64, 66193323Sed SREM_I128, 67199481Srdivacky UREM_I8, 68193323Sed UREM_I16, 69193323Sed UREM_I32, 70193323Sed UREM_I64, 71193323Sed UREM_I128, 72221345Sdim SDIVREM_I8, 73221345Sdim SDIVREM_I16, 74221345Sdim SDIVREM_I32, 75221345Sdim SDIVREM_I64, 76221345Sdim SDIVREM_I128, 77221345Sdim UDIVREM_I8, 78221345Sdim UDIVREM_I16, 79221345Sdim UDIVREM_I32, 80221345Sdim UDIVREM_I64, 81221345Sdim UDIVREM_I128, 82193323Sed NEG_I32, 83193323Sed NEG_I64, 84193323Sed 85193323Sed // FLOATING POINT 86193323Sed ADD_F32, 87193323Sed ADD_F64, 88193323Sed ADD_F80, 89249423Sdim ADD_F128, 90193323Sed ADD_PPCF128, 91193323Sed SUB_F32, 92193323Sed SUB_F64, 93193323Sed SUB_F80, 94249423Sdim SUB_F128, 95193323Sed SUB_PPCF128, 96193323Sed MUL_F32, 97193323Sed MUL_F64, 98193323Sed MUL_F80, 99249423Sdim MUL_F128, 100193323Sed MUL_PPCF128, 101193323Sed DIV_F32, 102193323Sed DIV_F64, 103193323Sed DIV_F80, 104249423Sdim DIV_F128, 105193323Sed DIV_PPCF128, 106193323Sed REM_F32, 107193323Sed REM_F64, 108193323Sed REM_F80, 109249423Sdim REM_F128, 110193323Sed REM_PPCF128, 111224145Sdim FMA_F32, 112224145Sdim FMA_F64, 113224145Sdim FMA_F80, 114249423Sdim FMA_F128, 115224145Sdim FMA_PPCF128, 116193323Sed POWI_F32, 117193323Sed POWI_F64, 118193323Sed POWI_F80, 119249423Sdim POWI_F128, 120193323Sed POWI_PPCF128, 121193323Sed SQRT_F32, 122193323Sed SQRT_F64, 123193323Sed SQRT_F80, 124249423Sdim SQRT_F128, 125193323Sed SQRT_PPCF128, 126193323Sed LOG_F32, 127193323Sed LOG_F64, 128193323Sed LOG_F80, 129249423Sdim LOG_F128, 130193323Sed LOG_PPCF128, 131193323Sed LOG2_F32, 132193323Sed LOG2_F64, 133193323Sed LOG2_F80, 134249423Sdim LOG2_F128, 135193323Sed LOG2_PPCF128, 136193323Sed LOG10_F32, 137193323Sed LOG10_F64, 138193323Sed LOG10_F80, 139249423Sdim LOG10_F128, 140193323Sed LOG10_PPCF128, 141193323Sed EXP_F32, 142193323Sed EXP_F64, 143193323Sed EXP_F80, 144249423Sdim EXP_F128, 145193323Sed EXP_PPCF128, 146193323Sed EXP2_F32, 147193323Sed EXP2_F64, 148193323Sed EXP2_F80, 149249423Sdim EXP2_F128, 150193323Sed EXP2_PPCF128, 151193323Sed SIN_F32, 152193323Sed SIN_F64, 153193323Sed SIN_F80, 154249423Sdim SIN_F128, 155193323Sed SIN_PPCF128, 156193323Sed COS_F32, 157193323Sed COS_F64, 158193323Sed COS_F80, 159249423Sdim COS_F128, 160193323Sed COS_PPCF128, 161249423Sdim SINCOS_F32, 162249423Sdim SINCOS_F64, 163249423Sdim SINCOS_F80, 164249423Sdim SINCOS_F128, 165249423Sdim SINCOS_PPCF128, 166193323Sed POW_F32, 167193323Sed POW_F64, 168193323Sed POW_F80, 169249423Sdim POW_F128, 170193323Sed POW_PPCF128, 171193323Sed CEIL_F32, 172193323Sed CEIL_F64, 173193323Sed CEIL_F80, 174249423Sdim CEIL_F128, 175193323Sed CEIL_PPCF128, 176193323Sed TRUNC_F32, 177193323Sed TRUNC_F64, 178193323Sed TRUNC_F80, 179249423Sdim TRUNC_F128, 180193323Sed TRUNC_PPCF128, 181193323Sed RINT_F32, 182193323Sed RINT_F64, 183193323Sed RINT_F80, 184249423Sdim RINT_F128, 185193323Sed RINT_PPCF128, 186193323Sed NEARBYINT_F32, 187193323Sed NEARBYINT_F64, 188193323Sed NEARBYINT_F80, 189249423Sdim NEARBYINT_F128, 190193323Sed NEARBYINT_PPCF128, 191193323Sed FLOOR_F32, 192193323Sed FLOOR_F64, 193193323Sed FLOOR_F80, 194249423Sdim FLOOR_F128, 195193323Sed FLOOR_PPCF128, 196205218Srdivacky COPYSIGN_F32, 197205218Srdivacky COPYSIGN_F64, 198205218Srdivacky COPYSIGN_F80, 199249423Sdim COPYSIGN_F128, 200205218Srdivacky COPYSIGN_PPCF128, 201193323Sed 202193323Sed // CONVERSION 203249423Sdim FPEXT_F64_F128, 204249423Sdim FPEXT_F32_F128, 205193323Sed FPEXT_F32_F64, 206205218Srdivacky FPEXT_F16_F32, 207205218Srdivacky FPROUND_F32_F16, 208193323Sed FPROUND_F64_F32, 209193323Sed FPROUND_F80_F32, 210249423Sdim FPROUND_F128_F32, 211193323Sed FPROUND_PPCF128_F32, 212193323Sed FPROUND_F80_F64, 213249423Sdim FPROUND_F128_F64, 214193323Sed FPROUND_PPCF128_F64, 215194612Sed FPTOSINT_F32_I8, 216194612Sed FPTOSINT_F32_I16, 217193323Sed FPTOSINT_F32_I32, 218193323Sed FPTOSINT_F32_I64, 219193323Sed FPTOSINT_F32_I128, 220206083Srdivacky FPTOSINT_F64_I8, 221206083Srdivacky FPTOSINT_F64_I16, 222193323Sed FPTOSINT_F64_I32, 223193323Sed FPTOSINT_F64_I64, 224193323Sed FPTOSINT_F64_I128, 225193323Sed FPTOSINT_F80_I32, 226193323Sed FPTOSINT_F80_I64, 227193323Sed FPTOSINT_F80_I128, 228249423Sdim FPTOSINT_F128_I32, 229249423Sdim FPTOSINT_F128_I64, 230249423Sdim FPTOSINT_F128_I128, 231193323Sed FPTOSINT_PPCF128_I32, 232193323Sed FPTOSINT_PPCF128_I64, 233193323Sed FPTOSINT_PPCF128_I128, 234194612Sed FPTOUINT_F32_I8, 235194612Sed FPTOUINT_F32_I16, 236193323Sed FPTOUINT_F32_I32, 237193323Sed FPTOUINT_F32_I64, 238193323Sed FPTOUINT_F32_I128, 239206083Srdivacky FPTOUINT_F64_I8, 240206083Srdivacky FPTOUINT_F64_I16, 241193323Sed FPTOUINT_F64_I32, 242193323Sed FPTOUINT_F64_I64, 243193323Sed FPTOUINT_F64_I128, 244193323Sed FPTOUINT_F80_I32, 245193323Sed FPTOUINT_F80_I64, 246193323Sed FPTOUINT_F80_I128, 247249423Sdim FPTOUINT_F128_I32, 248249423Sdim FPTOUINT_F128_I64, 249249423Sdim FPTOUINT_F128_I128, 250193323Sed FPTOUINT_PPCF128_I32, 251193323Sed FPTOUINT_PPCF128_I64, 252193323Sed FPTOUINT_PPCF128_I128, 253193323Sed SINTTOFP_I32_F32, 254193323Sed SINTTOFP_I32_F64, 255193323Sed SINTTOFP_I32_F80, 256249423Sdim SINTTOFP_I32_F128, 257193323Sed SINTTOFP_I32_PPCF128, 258193323Sed SINTTOFP_I64_F32, 259193323Sed SINTTOFP_I64_F64, 260193323Sed SINTTOFP_I64_F80, 261249423Sdim SINTTOFP_I64_F128, 262193323Sed SINTTOFP_I64_PPCF128, 263193323Sed SINTTOFP_I128_F32, 264193323Sed SINTTOFP_I128_F64, 265193323Sed SINTTOFP_I128_F80, 266249423Sdim SINTTOFP_I128_F128, 267193323Sed SINTTOFP_I128_PPCF128, 268193323Sed UINTTOFP_I32_F32, 269193323Sed UINTTOFP_I32_F64, 270193323Sed UINTTOFP_I32_F80, 271249423Sdim UINTTOFP_I32_F128, 272193323Sed UINTTOFP_I32_PPCF128, 273193323Sed UINTTOFP_I64_F32, 274193323Sed UINTTOFP_I64_F64, 275193323Sed UINTTOFP_I64_F80, 276249423Sdim UINTTOFP_I64_F128, 277193323Sed UINTTOFP_I64_PPCF128, 278193323Sed UINTTOFP_I128_F32, 279193323Sed UINTTOFP_I128_F64, 280193323Sed UINTTOFP_I128_F80, 281249423Sdim UINTTOFP_I128_F128, 282193323Sed UINTTOFP_I128_PPCF128, 283193323Sed 284193323Sed // COMPARISON 285193323Sed OEQ_F32, 286193323Sed OEQ_F64, 287249423Sdim OEQ_F128, 288193323Sed UNE_F32, 289193323Sed UNE_F64, 290249423Sdim UNE_F128, 291193323Sed OGE_F32, 292193323Sed OGE_F64, 293249423Sdim OGE_F128, 294193323Sed OLT_F32, 295193323Sed OLT_F64, 296249423Sdim OLT_F128, 297193323Sed OLE_F32, 298193323Sed OLE_F64, 299249423Sdim OLE_F128, 300193323Sed OGT_F32, 301193323Sed OGT_F64, 302249423Sdim OGT_F128, 303193323Sed UO_F32, 304193323Sed UO_F64, 305249423Sdim UO_F128, 306193323Sed O_F32, 307193323Sed O_F64, 308249423Sdim O_F128, 309193323Sed 310198090Srdivacky // MEMORY 311198090Srdivacky MEMCPY, 312198090Srdivacky MEMSET, 313198090Srdivacky MEMMOVE, 314198090Srdivacky 315193323Sed // EXCEPTION HANDLING 316193323Sed UNWIND_RESUME, 317193323Sed 318210299Sed // Family ATOMICs 319210299Sed SYNC_VAL_COMPARE_AND_SWAP_1, 320210299Sed SYNC_VAL_COMPARE_AND_SWAP_2, 321210299Sed SYNC_VAL_COMPARE_AND_SWAP_4, 322210299Sed SYNC_VAL_COMPARE_AND_SWAP_8, 323210299Sed SYNC_LOCK_TEST_AND_SET_1, 324210299Sed SYNC_LOCK_TEST_AND_SET_2, 325210299Sed SYNC_LOCK_TEST_AND_SET_4, 326210299Sed SYNC_LOCK_TEST_AND_SET_8, 327210299Sed SYNC_FETCH_AND_ADD_1, 328210299Sed SYNC_FETCH_AND_ADD_2, 329210299Sed SYNC_FETCH_AND_ADD_4, 330210299Sed SYNC_FETCH_AND_ADD_8, 331210299Sed SYNC_FETCH_AND_SUB_1, 332210299Sed SYNC_FETCH_AND_SUB_2, 333210299Sed SYNC_FETCH_AND_SUB_4, 334210299Sed SYNC_FETCH_AND_SUB_8, 335210299Sed SYNC_FETCH_AND_AND_1, 336210299Sed SYNC_FETCH_AND_AND_2, 337210299Sed SYNC_FETCH_AND_AND_4, 338210299Sed SYNC_FETCH_AND_AND_8, 339210299Sed SYNC_FETCH_AND_OR_1, 340210299Sed SYNC_FETCH_AND_OR_2, 341210299Sed SYNC_FETCH_AND_OR_4, 342210299Sed SYNC_FETCH_AND_OR_8, 343210299Sed SYNC_FETCH_AND_XOR_1, 344210299Sed SYNC_FETCH_AND_XOR_2, 345210299Sed SYNC_FETCH_AND_XOR_4, 346210299Sed SYNC_FETCH_AND_XOR_8, 347210299Sed SYNC_FETCH_AND_NAND_1, 348210299Sed SYNC_FETCH_AND_NAND_2, 349210299Sed SYNC_FETCH_AND_NAND_4, 350210299Sed SYNC_FETCH_AND_NAND_8, 351210299Sed 352193323Sed UNKNOWN_LIBCALL 353193323Sed }; 354193323Sed 355193323Sed /// getFPEXT - Return the FPEXT_*_* value for the given types, or 356193323Sed /// UNKNOWN_LIBCALL if there is none. 357198090Srdivacky Libcall getFPEXT(EVT OpVT, EVT RetVT); 358193323Sed 359193323Sed /// getFPROUND - Return the FPROUND_*_* value for the given types, or 360193323Sed /// UNKNOWN_LIBCALL if there is none. 361198090Srdivacky Libcall getFPROUND(EVT OpVT, EVT RetVT); 362193323Sed 363193323Sed /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or 364193323Sed /// UNKNOWN_LIBCALL if there is none. 365198090Srdivacky Libcall getFPTOSINT(EVT OpVT, EVT RetVT); 366193323Sed 367193323Sed /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or 368193323Sed /// UNKNOWN_LIBCALL if there is none. 369198090Srdivacky Libcall getFPTOUINT(EVT OpVT, EVT RetVT); 370193323Sed 371193323Sed /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or 372193323Sed /// UNKNOWN_LIBCALL if there is none. 373198090Srdivacky Libcall getSINTTOFP(EVT OpVT, EVT RetVT); 374193323Sed 375193323Sed /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or 376193323Sed /// UNKNOWN_LIBCALL if there is none. 377198090Srdivacky Libcall getUINTTOFP(EVT OpVT, EVT RetVT); 378193323Sed} 379193323Sed} 380193323Sed 381193323Sed#endif 382