mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-30 05:29:47 +00:00
A new backend supporting AMD GPUs: Radeon HD2XXX - HD7XXX git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169915 91177308-0d34-0410-b5e6-96231b3b80d8
243 lines
10 KiB
TableGen
243 lines
10 KiB
TableGen
//===- AMDILIntrinsics.td - Defines AMDIL Intrinscs -*- tablegen -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//==-----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines all of the amdil-specific intrinsics
|
|
//
|
|
//===---------------------------------------------------------------===//
|
|
//===--------------------------------------------------------------------===//
|
|
// Intrinsic classes
|
|
// Generic versions of the above classes but for Target specific intrinsics
|
|
// instead of SDNode patterns.
|
|
//===--------------------------------------------------------------------===//
|
|
let TargetPrefix = "AMDIL", isTarget = 1 in {
|
|
class VoidIntLong :
|
|
Intrinsic<[llvm_i64_ty], [], []>;
|
|
class VoidIntInt :
|
|
Intrinsic<[llvm_i32_ty], [], []>;
|
|
class VoidIntBool :
|
|
Intrinsic<[llvm_i32_ty], [], []>;
|
|
class UnaryIntInt :
|
|
Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>], [IntrNoMem]>;
|
|
class UnaryIntFloat :
|
|
Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]>;
|
|
class ConvertIntFTOI :
|
|
Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty], [IntrNoMem]>;
|
|
class ConvertIntITOF :
|
|
Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty], [IntrNoMem]>;
|
|
class UnaryIntNoRetInt :
|
|
Intrinsic<[], [llvm_anyint_ty], []>;
|
|
class UnaryIntNoRetFloat :
|
|
Intrinsic<[], [llvm_anyfloat_ty], []>;
|
|
class BinaryIntInt :
|
|
Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
|
|
class BinaryIntFloat :
|
|
Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
|
|
class BinaryIntNoRetInt :
|
|
Intrinsic<[], [llvm_anyint_ty, LLVMMatchType<0>], []>;
|
|
class BinaryIntNoRetFloat :
|
|
Intrinsic<[], [llvm_anyfloat_ty, LLVMMatchType<0>], []>;
|
|
class TernaryIntInt :
|
|
Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
|
|
LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
|
|
class TernaryIntFloat :
|
|
Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>,
|
|
LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
|
|
class QuaternaryIntInt :
|
|
Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
|
|
LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
|
|
class UnaryAtomicInt :
|
|
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
|
|
class BinaryAtomicInt :
|
|
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
|
|
class TernaryAtomicInt :
|
|
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
|
|
class UnaryAtomicIntNoRet :
|
|
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
|
|
class BinaryAtomicIntNoRet :
|
|
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
|
|
class TernaryAtomicIntNoRet :
|
|
Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
|
|
}
|
|
|
|
let TargetPrefix = "AMDIL", isTarget = 1 in {
|
|
def int_AMDIL_abs : GCCBuiltin<"__amdil_abs">, UnaryIntInt;
|
|
|
|
def int_AMDIL_bit_extract_i32 : GCCBuiltin<"__amdil_ibit_extract">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_bit_extract_u32 : GCCBuiltin<"__amdil_ubit_extract">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_bit_reverse_u32 : GCCBuiltin<"__amdil_ubit_reverse">,
|
|
UnaryIntInt;
|
|
def int_AMDIL_bit_count_i32 : GCCBuiltin<"__amdil_count_bits">,
|
|
UnaryIntInt;
|
|
def int_AMDIL_bit_find_first_lo : GCCBuiltin<"__amdil_ffb_lo">,
|
|
UnaryIntInt;
|
|
def int_AMDIL_bit_find_first_hi : GCCBuiltin<"__amdil_ffb_hi">,
|
|
UnaryIntInt;
|
|
def int_AMDIL_bit_find_first_sgn : GCCBuiltin<"__amdil_ffb_signed">,
|
|
UnaryIntInt;
|
|
def int_AMDIL_media_bitalign : GCCBuiltin<"__amdil_bitalign">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_media_bytealign : GCCBuiltin<"__amdil_bytealign">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_bit_insert_u32 : GCCBuiltin<"__amdil_ubit_insert">,
|
|
QuaternaryIntInt;
|
|
def int_AMDIL_bfi : GCCBuiltin<"__amdil_bfi">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_bfm : GCCBuiltin<"__amdil_bfm">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mad_i32 : GCCBuiltin<"__amdil_imad">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_mad_u32 : GCCBuiltin<"__amdil_umad">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_mad : GCCBuiltin<"__amdil_mad">,
|
|
TernaryIntFloat;
|
|
def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_mad24_i32 : GCCBuiltin<"__amdil_imad24">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_mad24_u32 : GCCBuiltin<"__amdil_umad24">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_min : GCCBuiltin<"__amdil_min">,
|
|
BinaryIntFloat;
|
|
def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">,
|
|
BinaryIntInt;
|
|
def int_AMDIL_max : GCCBuiltin<"__amdil_max">,
|
|
BinaryIntFloat;
|
|
def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">,
|
|
TernaryIntInt;
|
|
def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">,
|
|
TernaryIntFloat;
|
|
def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat;
|
|
def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat;
|
|
def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt;
|
|
def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">,
|
|
TernaryIntFloat;
|
|
def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_length : GCCBuiltin<"__amdil_length">,
|
|
UnaryIntFloat;
|
|
def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">,
|
|
TernaryIntFloat;
|
|
def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">,
|
|
Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty,
|
|
llvm_v4i32_ty, llvm_i32_ty], []>;
|
|
|
|
def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">,
|
|
Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>;
|
|
def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">,
|
|
Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>;
|
|
def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">,
|
|
Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
|
|
def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">,
|
|
ConvertIntITOF;
|
|
def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">,
|
|
ConvertIntFTOI;
|
|
def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">,
|
|
Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>;
|
|
def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">,
|
|
ConvertIntITOF;
|
|
def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">,
|
|
ConvertIntITOF;
|
|
def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">,
|
|
ConvertIntITOF;
|
|
def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">,
|
|
ConvertIntITOF;
|
|
def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">,
|
|
Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
|
|
llvm_v2f32_ty, llvm_float_ty], []>;
|
|
def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">,
|
|
Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
|
|
llvm_v2f32_ty], []>;
|
|
def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">,
|
|
Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
|
|
llvm_v4f32_ty], []>;
|
|
def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">,
|
|
Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
|
|
llvm_v4f32_ty], []>;
|
|
}
|