diff options
| author | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-06-16 09:03:58 +0000 | 
|---|---|---|
| committer | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-06-16 09:03:58 +0000 | 
| commit | 557ed09e0ff8b858ed2311adba41b257a3b1326c (patch) | |
| tree | b083b496fda4206972122131be6cb0d213518290 /llvm/lib/CodeGen/SelectionDAG | |
| parent | 591bcad8b951b0db697285402ec6956c9d904ed3 (diff) | |
| download | bcm5719-llvm-557ed09e0ff8b858ed2311adba41b257a3b1326c.tar.gz bcm5719-llvm-557ed09e0ff8b858ed2311adba41b257a3b1326c.zip | |
Added required libcalls for PIC16 (mostly floating points to integer casting operations).
llvm-svn: 73480
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp | 16 | 
1 files changed, 16 insertions, 0 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index 134a859cebd..5b2706778a2 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -171,6 +171,8 @@ static void InitLibcallNames(const char **Names) {    Names[RTLIB::FPROUND_PPCF128_F32] = "__trunctfsf2";    Names[RTLIB::FPROUND_F80_F64] = "__truncxfdf2";    Names[RTLIB::FPROUND_PPCF128_F64] = "__trunctfdf2"; +  Names[RTLIB::FPTOSINT_F32_I8] = "__fixsfsi"; +  Names[RTLIB::FPTOSINT_F32_I16] = "__fixsfsi";    Names[RTLIB::FPTOSINT_F32_I32] = "__fixsfsi";    Names[RTLIB::FPTOSINT_F32_I64] = "__fixsfdi";    Names[RTLIB::FPTOSINT_F32_I128] = "__fixsfti"; @@ -183,6 +185,8 @@ static void InitLibcallNames(const char **Names) {    Names[RTLIB::FPTOSINT_PPCF128_I32] = "__fixtfsi";    Names[RTLIB::FPTOSINT_PPCF128_I64] = "__fixtfdi";    Names[RTLIB::FPTOSINT_PPCF128_I128] = "__fixtfti"; +  Names[RTLIB::FPTOUINT_F32_I8] = "__fixunssfsi"; +  Names[RTLIB::FPTOUINT_F32_I16] = "__fixunssfsi";    Names[RTLIB::FPTOUINT_F32_I32] = "__fixunssfsi";    Names[RTLIB::FPTOUINT_F32_I64] = "__fixunssfdi";    Names[RTLIB::FPTOUINT_F32_I128] = "__fixunssfti"; @@ -195,6 +199,8 @@ static void InitLibcallNames(const char **Names) {    Names[RTLIB::FPTOUINT_PPCF128_I32] = "__fixunstfsi";    Names[RTLIB::FPTOUINT_PPCF128_I64] = "__fixunstfdi";    Names[RTLIB::FPTOUINT_PPCF128_I128] = "__fixunstfti"; +  Names[RTLIB::SINTTOFP_I32_F8] = "__floatsisf"; +  Names[RTLIB::SINTTOFP_I32_F16] = "__floatsisf";    Names[RTLIB::SINTTOFP_I32_F32] = "__floatsisf";    Names[RTLIB::SINTTOFP_I32_F64] = "__floatsidf";    Names[RTLIB::SINTTOFP_I32_F80] = "__floatsixf"; @@ -207,6 +213,8 @@ static void InitLibcallNames(const char **Names) {    Names[RTLIB::SINTTOFP_I128_F64] = "__floattidf";    Names[RTLIB::SINTTOFP_I128_F80] = "__floattixf";    Names[RTLIB::SINTTOFP_I128_PPCF128] = "__floattitf"; +  Names[RTLIB::UINTTOFP_I32_F8] = "__floatunsisf"; +  Names[RTLIB::UINTTOFP_I32_F16] = "__floatunsisf";    Names[RTLIB::UINTTOFP_I32_F32] = "__floatunsisf";    Names[RTLIB::UINTTOFP_I32_F64] = "__floatunsidf";    Names[RTLIB::UINTTOFP_I32_F80] = "__floatunsixf"; @@ -271,6 +279,10 @@ RTLIB::Libcall RTLIB::getFPROUND(MVT OpVT, MVT RetVT) {  /// UNKNOWN_LIBCALL if there is none.  RTLIB::Libcall RTLIB::getFPTOSINT(MVT OpVT, MVT RetVT) {    if (OpVT == MVT::f32) { +    if (RetVT == MVT::i8) +      return FPTOSINT_F32_I8; +    if (RetVT == MVT::i16) +      return FPTOSINT_F32_I16;      if (RetVT == MVT::i32)        return FPTOSINT_F32_I32;      if (RetVT == MVT::i64) @@ -306,6 +318,10 @@ RTLIB::Libcall RTLIB::getFPTOSINT(MVT OpVT, MVT RetVT) {  /// UNKNOWN_LIBCALL if there is none.  RTLIB::Libcall RTLIB::getFPTOUINT(MVT OpVT, MVT RetVT) {    if (OpVT == MVT::f32) { +    if (RetVT == MVT::i8) +      return FPTOUINT_F32_I8; +    if (RetVT == MVT::i16) +      return FPTOUINT_F32_I16;      if (RetVT == MVT::i32)        return FPTOUINT_F32_I32;      if (RetVT == MVT::i64) | 

