1263508Sdim//===-- CodeGen/RuntimeLibcalls.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, 191263508Sdim ROUND_F32, 192263508Sdim ROUND_F64, 193263508Sdim ROUND_F80, 194263508Sdim ROUND_F128, 195263508Sdim ROUND_PPCF128, 196193323Sed FLOOR_F32, 197193323Sed FLOOR_F64, 198193323Sed FLOOR_F80, 199249423Sdim FLOOR_F128, 200193323Sed FLOOR_PPCF128, 201205218Srdivacky COPYSIGN_F32, 202205218Srdivacky COPYSIGN_F64, 203205218Srdivacky COPYSIGN_F80, 204249423Sdim COPYSIGN_F128, 205205218Srdivacky COPYSIGN_PPCF128, 206193323Sed 207193323Sed // CONVERSION 208249423Sdim FPEXT_F64_F128, 209249423Sdim FPEXT_F32_F128, 210193323Sed FPEXT_F32_F64, 211205218Srdivacky FPEXT_F16_F32, 212205218Srdivacky FPROUND_F32_F16, 213193323Sed FPROUND_F64_F32, 214193323Sed FPROUND_F80_F32, 215249423Sdim FPROUND_F128_F32, 216193323Sed FPROUND_PPCF128_F32, 217193323Sed FPROUND_F80_F64, 218249423Sdim FPROUND_F128_F64, 219193323Sed FPROUND_PPCF128_F64, 220194612Sed FPTOSINT_F32_I8, 221194612Sed FPTOSINT_F32_I16, 222193323Sed FPTOSINT_F32_I32, 223193323Sed FPTOSINT_F32_I64, 224193323Sed FPTOSINT_F32_I128, 225206083Srdivacky FPTOSINT_F64_I8, 226206083Srdivacky FPTOSINT_F64_I16, 227193323Sed FPTOSINT_F64_I32, 228193323Sed FPTOSINT_F64_I64, 229193323Sed FPTOSINT_F64_I128, 230193323Sed FPTOSINT_F80_I32, 231193323Sed FPTOSINT_F80_I64, 232193323Sed FPTOSINT_F80_I128, 233249423Sdim FPTOSINT_F128_I32, 234249423Sdim FPTOSINT_F128_I64, 235249423Sdim FPTOSINT_F128_I128, 236193323Sed FPTOSINT_PPCF128_I32, 237193323Sed FPTOSINT_PPCF128_I64, 238193323Sed FPTOSINT_PPCF128_I128, 239194612Sed FPTOUINT_F32_I8, 240194612Sed FPTOUINT_F32_I16, 241193323Sed FPTOUINT_F32_I32, 242193323Sed FPTOUINT_F32_I64, 243193323Sed FPTOUINT_F32_I128, 244206083Srdivacky FPTOUINT_F64_I8, 245206083Srdivacky FPTOUINT_F64_I16, 246193323Sed FPTOUINT_F64_I32, 247193323Sed FPTOUINT_F64_I64, 248193323Sed FPTOUINT_F64_I128, 249193323Sed FPTOUINT_F80_I32, 250193323Sed FPTOUINT_F80_I64, 251193323Sed FPTOUINT_F80_I128, 252249423Sdim FPTOUINT_F128_I32, 253249423Sdim FPTOUINT_F128_I64, 254249423Sdim FPTOUINT_F128_I128, 255193323Sed FPTOUINT_PPCF128_I32, 256193323Sed FPTOUINT_PPCF128_I64, 257193323Sed FPTOUINT_PPCF128_I128, 258193323Sed SINTTOFP_I32_F32, 259193323Sed SINTTOFP_I32_F64, 260193323Sed SINTTOFP_I32_F80, 261249423Sdim SINTTOFP_I32_F128, 262193323Sed SINTTOFP_I32_PPCF128, 263193323Sed SINTTOFP_I64_F32, 264193323Sed SINTTOFP_I64_F64, 265193323Sed SINTTOFP_I64_F80, 266249423Sdim SINTTOFP_I64_F128, 267193323Sed SINTTOFP_I64_PPCF128, 268193323Sed SINTTOFP_I128_F32, 269193323Sed SINTTOFP_I128_F64, 270193323Sed SINTTOFP_I128_F80, 271249423Sdim SINTTOFP_I128_F128, 272193323Sed SINTTOFP_I128_PPCF128, 273193323Sed UINTTOFP_I32_F32, 274193323Sed UINTTOFP_I32_F64, 275193323Sed UINTTOFP_I32_F80, 276249423Sdim UINTTOFP_I32_F128, 277193323Sed UINTTOFP_I32_PPCF128, 278193323Sed UINTTOFP_I64_F32, 279193323Sed UINTTOFP_I64_F64, 280193323Sed UINTTOFP_I64_F80, 281249423Sdim UINTTOFP_I64_F128, 282193323Sed UINTTOFP_I64_PPCF128, 283193323Sed UINTTOFP_I128_F32, 284193323Sed UINTTOFP_I128_F64, 285193323Sed UINTTOFP_I128_F80, 286249423Sdim UINTTOFP_I128_F128, 287193323Sed UINTTOFP_I128_PPCF128, 288193323Sed 289193323Sed // COMPARISON 290193323Sed OEQ_F32, 291193323Sed OEQ_F64, 292249423Sdim OEQ_F128, 293193323Sed UNE_F32, 294193323Sed UNE_F64, 295249423Sdim UNE_F128, 296193323Sed OGE_F32, 297193323Sed OGE_F64, 298249423Sdim OGE_F128, 299193323Sed OLT_F32, 300193323Sed OLT_F64, 301249423Sdim OLT_F128, 302193323Sed OLE_F32, 303193323Sed OLE_F64, 304249423Sdim OLE_F128, 305193323Sed OGT_F32, 306193323Sed OGT_F64, 307249423Sdim OGT_F128, 308193323Sed UO_F32, 309193323Sed UO_F64, 310249423Sdim UO_F128, 311193323Sed O_F32, 312193323Sed O_F64, 313249423Sdim O_F128, 314193323Sed 315198090Srdivacky // MEMORY 316198090Srdivacky MEMCPY, 317198090Srdivacky MEMSET, 318198090Srdivacky MEMMOVE, 319198090Srdivacky 320193323Sed // EXCEPTION HANDLING 321193323Sed UNWIND_RESUME, 322193323Sed 323210299Sed // Family ATOMICs 324210299Sed SYNC_VAL_COMPARE_AND_SWAP_1, 325210299Sed SYNC_VAL_COMPARE_AND_SWAP_2, 326210299Sed SYNC_VAL_COMPARE_AND_SWAP_4, 327210299Sed SYNC_VAL_COMPARE_AND_SWAP_8, 328263508Sdim SYNC_VAL_COMPARE_AND_SWAP_16, 329210299Sed SYNC_LOCK_TEST_AND_SET_1, 330210299Sed SYNC_LOCK_TEST_AND_SET_2, 331210299Sed SYNC_LOCK_TEST_AND_SET_4, 332210299Sed SYNC_LOCK_TEST_AND_SET_8, 333263508Sdim SYNC_LOCK_TEST_AND_SET_16, 334210299Sed SYNC_FETCH_AND_ADD_1, 335210299Sed SYNC_FETCH_AND_ADD_2, 336210299Sed SYNC_FETCH_AND_ADD_4, 337210299Sed SYNC_FETCH_AND_ADD_8, 338263508Sdim SYNC_FETCH_AND_ADD_16, 339210299Sed SYNC_FETCH_AND_SUB_1, 340210299Sed SYNC_FETCH_AND_SUB_2, 341210299Sed SYNC_FETCH_AND_SUB_4, 342210299Sed SYNC_FETCH_AND_SUB_8, 343263508Sdim SYNC_FETCH_AND_SUB_16, 344210299Sed SYNC_FETCH_AND_AND_1, 345210299Sed SYNC_FETCH_AND_AND_2, 346210299Sed SYNC_FETCH_AND_AND_4, 347210299Sed SYNC_FETCH_AND_AND_8, 348263508Sdim SYNC_FETCH_AND_AND_16, 349210299Sed SYNC_FETCH_AND_OR_1, 350210299Sed SYNC_FETCH_AND_OR_2, 351210299Sed SYNC_FETCH_AND_OR_4, 352210299Sed SYNC_FETCH_AND_OR_8, 353263508Sdim SYNC_FETCH_AND_OR_16, 354210299Sed SYNC_FETCH_AND_XOR_1, 355210299Sed SYNC_FETCH_AND_XOR_2, 356210299Sed SYNC_FETCH_AND_XOR_4, 357210299Sed SYNC_FETCH_AND_XOR_8, 358263508Sdim SYNC_FETCH_AND_XOR_16, 359210299Sed SYNC_FETCH_AND_NAND_1, 360210299Sed SYNC_FETCH_AND_NAND_2, 361210299Sed SYNC_FETCH_AND_NAND_4, 362210299Sed SYNC_FETCH_AND_NAND_8, 363263508Sdim SYNC_FETCH_AND_NAND_16, 364263508Sdim SYNC_FETCH_AND_MAX_1, 365263508Sdim SYNC_FETCH_AND_MAX_2, 366263508Sdim SYNC_FETCH_AND_MAX_4, 367263508Sdim SYNC_FETCH_AND_MAX_8, 368263508Sdim SYNC_FETCH_AND_MAX_16, 369263508Sdim SYNC_FETCH_AND_UMAX_1, 370263508Sdim SYNC_FETCH_AND_UMAX_2, 371263508Sdim SYNC_FETCH_AND_UMAX_4, 372263508Sdim SYNC_FETCH_AND_UMAX_8, 373263508Sdim SYNC_FETCH_AND_UMAX_16, 374263508Sdim SYNC_FETCH_AND_MIN_1, 375263508Sdim SYNC_FETCH_AND_MIN_2, 376263508Sdim SYNC_FETCH_AND_MIN_4, 377263508Sdim SYNC_FETCH_AND_MIN_8, 378263508Sdim SYNC_FETCH_AND_MIN_16, 379263508Sdim SYNC_FETCH_AND_UMIN_1, 380263508Sdim SYNC_FETCH_AND_UMIN_2, 381263508Sdim SYNC_FETCH_AND_UMIN_4, 382263508Sdim SYNC_FETCH_AND_UMIN_8, 383263508Sdim SYNC_FETCH_AND_UMIN_16, 384210299Sed 385263508Sdim // Stack Protector Fail. 386263508Sdim STACKPROTECTOR_CHECK_FAIL, 387263508Sdim 388193323Sed UNKNOWN_LIBCALL 389193323Sed }; 390193323Sed 391193323Sed /// getFPEXT - Return the FPEXT_*_* value for the given types, or 392193323Sed /// UNKNOWN_LIBCALL if there is none. 393198090Srdivacky Libcall getFPEXT(EVT OpVT, EVT RetVT); 394193323Sed 395193323Sed /// getFPROUND - Return the FPROUND_*_* value for the given types, or 396193323Sed /// UNKNOWN_LIBCALL if there is none. 397198090Srdivacky Libcall getFPROUND(EVT OpVT, EVT RetVT); 398193323Sed 399193323Sed /// getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or 400193323Sed /// UNKNOWN_LIBCALL if there is none. 401198090Srdivacky Libcall getFPTOSINT(EVT OpVT, EVT RetVT); 402193323Sed 403193323Sed /// getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or 404193323Sed /// UNKNOWN_LIBCALL if there is none. 405198090Srdivacky Libcall getFPTOUINT(EVT OpVT, EVT RetVT); 406193323Sed 407193323Sed /// getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or 408193323Sed /// UNKNOWN_LIBCALL if there is none. 409198090Srdivacky Libcall getSINTTOFP(EVT OpVT, EVT RetVT); 410193323Sed 411193323Sed /// getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or 412193323Sed /// UNKNOWN_LIBCALL if there is none. 413198090Srdivacky Libcall getUINTTOFP(EVT OpVT, EVT RetVT); 414193323Sed} 415193323Sed} 416193323Sed 417193323Sed#endif 418