mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	is to use this for architectures that have a native FMA instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134742 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			331 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			331 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- 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,
 | |
|     MULO_I32,
 | |
|     MULO_I64,
 | |
|     MULO_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,
 | |
|     SDIVREM_I8,
 | |
|     SDIVREM_I16,
 | |
|     SDIVREM_I32,
 | |
|     SDIVREM_I64,
 | |
|     SDIVREM_I128,
 | |
|     UDIVREM_I8,
 | |
|     UDIVREM_I16,
 | |
|     UDIVREM_I32,
 | |
|     UDIVREM_I64,
 | |
|     UDIVREM_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,
 | |
|     FMA_F32,
 | |
|     FMA_F64,
 | |
|     FMA_F80,
 | |
|     FMA_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
 |