mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
Added $$sysclock() builtin.
This commit is contained in:
@@ -762,6 +762,7 @@ typedef enum
|
||||
BUILTIN_MEMCOPY,
|
||||
BUILTIN_MEMSET,
|
||||
BUILTIN_SYSCALL,
|
||||
BUILTIN_SYSCLOCK,
|
||||
BUILTIN_NONE,
|
||||
NUMBER_OF_BUILTINS = BUILTIN_NONE,
|
||||
} BuiltinFunction;
|
||||
|
||||
@@ -617,6 +617,8 @@ void llvm_codegen_setup()
|
||||
intrinsic_id.umax = lookup_intrinsic("llvm.umax");
|
||||
intrinsic_id.umin = lookup_intrinsic("llvm.umin");
|
||||
|
||||
intrinsic_id.readcyclecounter = lookup_intrinsic("llvm.readcyclecounter");
|
||||
|
||||
intrinsic_id.memset = lookup_intrinsic("llvm.memset");
|
||||
intrinsic_id.memcpy = lookup_intrinsic("llvm.memcpy");
|
||||
|
||||
|
||||
@@ -4154,6 +4154,7 @@ static void llvm_emit_intrinsic_expr(GenContext *c, unsigned intrinsic, BEValue
|
||||
{
|
||||
call_args = 1;
|
||||
call_type[0] = llvm_get_type(c, expr->type);
|
||||
if (intrinsic == intrinsic_id.readcyclecounter) call_args = 0;
|
||||
}
|
||||
else if (intrinsic == intrinsic_id.memcpy)
|
||||
{
|
||||
@@ -4344,6 +4345,8 @@ unsigned llvm_get_intrinsic(BuiltinFunction func)
|
||||
case BUILTIN_UNREACHABLE:
|
||||
case BUILTIN_STACKTRACE:
|
||||
UNREACHABLE
|
||||
case BUILTIN_SYSCLOCK:
|
||||
return intrinsic_id.readcyclecounter;
|
||||
case BUILTIN_TRAP:
|
||||
return intrinsic_id.trap;
|
||||
case BUILTIN_CEIL:
|
||||
|
||||
@@ -178,6 +178,7 @@ typedef struct
|
||||
unsigned lifetime_end;
|
||||
unsigned memcpy;
|
||||
unsigned memset;
|
||||
unsigned readcyclecounter;
|
||||
} LLVMIntrinsics;
|
||||
|
||||
extern LLVMIntrinsics intrinsic_id;
|
||||
|
||||
@@ -2293,6 +2293,7 @@ static inline unsigned builtin_expected_args(BuiltinFunction func)
|
||||
case BUILTIN_UNREACHABLE:
|
||||
case BUILTIN_TRAP:
|
||||
case BUILTIN_STACKTRACE:
|
||||
case BUILTIN_SYSCLOCK:
|
||||
return 0;
|
||||
case BUILTIN_SYSCALL:
|
||||
case BUILTIN_CEIL:
|
||||
@@ -2454,6 +2455,9 @@ static inline bool sema_expr_analyse_builtin_call(SemaContext *context, Expr *ex
|
||||
case BUILTIN_TRAP:
|
||||
rtype = type_void;
|
||||
break;
|
||||
case BUILTIN_SYSCLOCK:
|
||||
rtype = type_ulong;
|
||||
break;
|
||||
case BUILTIN_SYSCALL:
|
||||
if (arg_count > 7)
|
||||
{
|
||||
|
||||
@@ -177,6 +177,7 @@ void symtab_init(uint32_t capacity)
|
||||
kw_mainstub = KW_DEF("_$mainstub");
|
||||
|
||||
builtin_list[BUILTIN_TRAP] = KW_DEF("trap");
|
||||
builtin_list[BUILTIN_SYSCLOCK] = KW_DEF("sysclock");
|
||||
builtin_list[BUILTIN_UNREACHABLE] = KW_DEF("unreachable");
|
||||
builtin_list[BUILTIN_STACKTRACE] = KW_DEF("stacktrace");
|
||||
builtin_list[BUILTIN_CEIL] = KW_DEF("ceil");
|
||||
|
||||
Reference in New Issue
Block a user