109467b48Spatrick//==- IntrinsicsXCore.td - XCore intrinsics -*- tablegen -*-==// 209467b48Spatrick// 309467b48Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 409467b48Spatrick// See https://llvm.org/LICENSE.txt for license information. 509467b48Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 609467b48Spatrick// 709467b48Spatrick//===----------------------------------------------------------------------===// 809467b48Spatrick// 909467b48Spatrick// This file defines all of the XCore-specific intrinsics. 1009467b48Spatrick// 1109467b48Spatrick//===----------------------------------------------------------------------===// 1209467b48Spatrick 1309467b48Spatricklet TargetPrefix = "xcore" in { // All intrinsics start with "llvm.xcore.". 1409467b48Spatrick // Miscellaneous instructions. 1509467b48Spatrick def int_xcore_bitrev : Intrinsic<[llvm_i32_ty],[llvm_i32_ty],[IntrNoMem]>, 16*d415bd75Srobert ClangBuiltin<"__builtin_bitrev">; 1709467b48Spatrick def int_xcore_crc8 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], 1809467b48Spatrick [llvm_i32_ty,llvm_i32_ty,llvm_i32_ty], 1909467b48Spatrick [IntrNoMem]>; 2009467b48Spatrick def int_xcore_crc32 : Intrinsic<[llvm_i32_ty], 2109467b48Spatrick [llvm_i32_ty,llvm_i32_ty,llvm_i32_ty], 2209467b48Spatrick [IntrNoMem]>; 2309467b48Spatrick def int_xcore_sext : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 2409467b48Spatrick [IntrNoMem]>; 2509467b48Spatrick def int_xcore_zext : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 2609467b48Spatrick [IntrNoMem]>; 2709467b48Spatrick def int_xcore_getid : Intrinsic<[llvm_i32_ty],[],[IntrNoMem]>, 28*d415bd75Srobert ClangBuiltin<"__builtin_getid">; 2909467b48Spatrick def int_xcore_getps : Intrinsic<[llvm_i32_ty],[llvm_i32_ty]>, 30*d415bd75Srobert ClangBuiltin<"__builtin_getps">; 3109467b48Spatrick def int_xcore_setps : Intrinsic<[],[llvm_i32_ty, llvm_i32_ty]>, 32*d415bd75Srobert ClangBuiltin<"__builtin_setps">; 3309467b48Spatrick def int_xcore_geted : Intrinsic<[llvm_i32_ty],[]>; 3409467b48Spatrick def int_xcore_getet : Intrinsic<[llvm_i32_ty],[]>; 3509467b48Spatrick def int_xcore_setsr : Intrinsic<[],[llvm_i32_ty]>; 3609467b48Spatrick def int_xcore_clrsr : Intrinsic<[],[llvm_i32_ty]>; 3709467b48Spatrick 3809467b48Spatrick // Resource instructions. 3909467b48Spatrick def int_xcore_getr : Intrinsic<[llvm_anyptr_ty],[llvm_i32_ty]>; 4009467b48Spatrick def int_xcore_freer : Intrinsic<[],[llvm_anyptr_ty], 41097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 42097a140dSpatrick def int_xcore_in : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty],[NoCapture<ArgIndex<0>>]>; 4309467b48Spatrick def int_xcore_int : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 44097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 4509467b48Spatrick def int_xcore_inct : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 46097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 4709467b48Spatrick def int_xcore_out : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 48097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 4909467b48Spatrick def int_xcore_outt : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 50097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 5109467b48Spatrick def int_xcore_outct : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 52097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 5309467b48Spatrick def int_xcore_chkct : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 54097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 5509467b48Spatrick def int_xcore_testct : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 56097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 5709467b48Spatrick def int_xcore_testwct : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 58097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 5909467b48Spatrick def int_xcore_setd : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 60097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 6109467b48Spatrick def int_xcore_setc : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 62097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 6309467b48Spatrick def int_xcore_inshr : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty, llvm_i32_ty], 64097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 6509467b48Spatrick def int_xcore_outshr : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty, llvm_i32_ty], 66097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 6709467b48Spatrick def int_xcore_setpt : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 68097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 6909467b48Spatrick def int_xcore_clrpt : Intrinsic<[],[llvm_anyptr_ty], 70097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 7109467b48Spatrick def int_xcore_getts : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 72097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 7309467b48Spatrick def int_xcore_syncr : Intrinsic<[],[llvm_anyptr_ty], 74097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 7509467b48Spatrick def int_xcore_settw : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 76097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 7709467b48Spatrick def int_xcore_setv : Intrinsic<[],[llvm_anyptr_ty, llvm_ptr_ty], 78097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 7909467b48Spatrick def int_xcore_setev : Intrinsic<[],[llvm_anyptr_ty, llvm_ptr_ty], 80097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 81097a140dSpatrick def int_xcore_eeu : Intrinsic<[],[llvm_anyptr_ty], [NoCapture<ArgIndex<0>>]>; 82097a140dSpatrick def int_xcore_edu : Intrinsic<[],[llvm_anyptr_ty], [NoCapture<ArgIndex<0>>]>; 8309467b48Spatrick def int_xcore_setclk : Intrinsic<[],[llvm_anyptr_ty, llvm_anyptr_ty], 84097a140dSpatrick [NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>]>; 8509467b48Spatrick def int_xcore_setrdy : Intrinsic<[],[llvm_anyptr_ty, llvm_anyptr_ty], 86097a140dSpatrick [NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>]>; 8709467b48Spatrick def int_xcore_setpsc : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], 88097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 8909467b48Spatrick def int_xcore_peek : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 90097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 9109467b48Spatrick def int_xcore_endin : Intrinsic<[llvm_i32_ty],[llvm_anyptr_ty], 92097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 9309467b48Spatrick 9409467b48Spatrick // Intrinsics for events. 9509467b48Spatrick def int_xcore_waitevent : Intrinsic<[llvm_ptr_ty],[], [IntrReadMem]>; 9609467b48Spatrick 9709467b48Spatrick // If any of the resources owned by the thread are ready this returns the 9809467b48Spatrick // vector of one of the ready resources. If no resources owned by the thread 9909467b48Spatrick // are ready then the operand passed to the intrinsic is returned. 10009467b48Spatrick def int_xcore_checkevent : Intrinsic<[llvm_ptr_ty],[llvm_ptr_ty]>; 10109467b48Spatrick 10209467b48Spatrick def int_xcore_clre : Intrinsic<[],[],[]>; 10309467b48Spatrick 10409467b48Spatrick // Intrinsics for threads. 10509467b48Spatrick def int_xcore_getst : Intrinsic <[llvm_anyptr_ty],[llvm_anyptr_ty], 106097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 107097a140dSpatrick def int_xcore_msync : Intrinsic <[],[llvm_anyptr_ty], [NoCapture<ArgIndex<0>>]>; 10809467b48Spatrick def int_xcore_ssync : Intrinsic <[],[]>; 109097a140dSpatrick def int_xcore_mjoin : Intrinsic <[],[llvm_anyptr_ty], [NoCapture<ArgIndex<0>>]>; 11009467b48Spatrick def int_xcore_initsp : Intrinsic <[],[llvm_anyptr_ty, llvm_ptr_ty], 111097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 11209467b48Spatrick def int_xcore_initpc : Intrinsic <[],[llvm_anyptr_ty, llvm_ptr_ty], 113097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 11409467b48Spatrick def int_xcore_initlr : Intrinsic <[],[llvm_anyptr_ty, llvm_ptr_ty], 115097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 11609467b48Spatrick def int_xcore_initcp : Intrinsic <[],[llvm_anyptr_ty, llvm_ptr_ty], 117097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 11809467b48Spatrick def int_xcore_initdp : Intrinsic <[],[llvm_anyptr_ty, llvm_ptr_ty], 119097a140dSpatrick [NoCapture<ArgIndex<0>>]>; 12009467b48Spatrick} 121