mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Support for "returnaddress" intrinsic
This commit is contained in:
parent
eb7e78174c
commit
0826b6d49f
4 changed files with 13 additions and 0 deletions
|
@ -92,6 +92,8 @@ namespace System
|
|||
public static extern void* StdMalloc(int size);
|
||||
[LinkName("free")]
|
||||
public static extern void StdFree(void* ptr);
|
||||
[Intrinsic("returnaddress")]
|
||||
public static extern void* GetReturnAddress(int32 level = 0);
|
||||
[CallingConvention(.Cdecl)]
|
||||
public static extern void* VirtualAlloc(int size, bool canExecute, bool canWrite);
|
||||
[CallingConvention(.Cdecl)]
|
||||
|
|
|
@ -17697,6 +17697,14 @@ void BeMCContext::Generate(BeFunction* function)
|
|||
useAltArgs = true;
|
||||
}
|
||||
break;
|
||||
case BfIRIntrinsic_ReturnAddress:
|
||||
{
|
||||
result = AllocVirtualReg(intrin->mReturnType);
|
||||
CreateDefineVReg(result);
|
||||
auto vregInfo = GetVRegInfo(result);
|
||||
vregInfo->mFrameOffset = 0;
|
||||
}
|
||||
break;
|
||||
case BfIRIntrinsic_VAArg:
|
||||
{
|
||||
auto mcListPtr = GetOperand(castedInst->mArgs[0].mValue);
|
||||
|
|
|
@ -451,6 +451,7 @@ enum BfIRIntrinsic : uint8
|
|||
BfIRIntrinsic_Or,
|
||||
BfIRIntrinsic_Pow,
|
||||
BfIRIntrinsic_PowI,
|
||||
BfIRIntrinsic_ReturnAddress,
|
||||
BfIRIntrinsic_Round,
|
||||
BfIRIntrinsic_SAR,
|
||||
BfIRIntrinsic_SHL,
|
||||
|
|
|
@ -181,6 +181,7 @@ static const BuiltinEntry gIntrinEntries[] =
|
|||
{"or"},
|
||||
{"pow"},
|
||||
{"powi"},
|
||||
{"returnaddress"},
|
||||
{"round"},
|
||||
{"sar"},
|
||||
{"shl"},
|
||||
|
@ -2684,6 +2685,7 @@ void BfIRCodeGen::HandleNextCmd()
|
|||
{ (llvm::Intrinsic::ID)-2, -1}, // or
|
||||
{ llvm::Intrinsic::pow, 0, -1},
|
||||
{ llvm::Intrinsic::powi, 0, -1},
|
||||
{ llvm::Intrinsic::returnaddress, -1},
|
||||
{ llvm::Intrinsic::round, 0, -1},
|
||||
{ (llvm::Intrinsic::ID)-2, -1}, // sar
|
||||
{ (llvm::Intrinsic::ID)-2, -1}, // shl
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue