7575 T_pint8 = LLVM. PointerType (LLVM. Int8Type ())
7676 T_pint8a2 = LLVM. PointerType (LLVM. Int8Type (), 2 )
7777
78+
79+
7880 # create functions
7981 param_types = LLVMType[convert (LLVMType, typ) for typ in arg_types]
80- llvm_f, llvm_ft = create_function (T_void, LLVMType[]; vararg= true )
81- mod = LLVM. parent (llvm_f)
82+ wrapper_f, wrapper_ft = create_function (T_void, param_types)
83+ mod = LLVM. parent (wrapper_f)
84+
85+ llvm_ft = LLVM. FunctionType (T_void, LLVMType[]; vararg= true )
86+ llvm_f = LLVM. Function (mod, " vararg" , llvm_ft)
87+ push! (function_attributes (llvm_f), EnumAttribute (" alwaysinline" , 0 ))
8288
8389 # generate IR
8490 @dispose builder= IRBuilder () begin
8591 entry = BasicBlock (llvm_f, " entry" )
8692 position! (builder, entry)
8793
8894 str = globalstring_ptr! (builder, String (fmt), addrspace= 2 )
95+ subsystem_str = globalstring_ptr! (builder, MTLLOG_SUBSYSTEM, addrspace= 2 )
96+ category_str = globalstring_ptr! (builder, MTLLOG_CATEGRORY, addrspace= 2 )
97+ log_type = LLVM. ConstantInt (T_int32, __METAL_OS_LOG_TYPE_DEBUG__)
8998
9099 # compute argsize
91100 argtypes = LLVM. StructType (param_types)
@@ -103,16 +112,11 @@ end
103112 va_start_fty = LLVM. FunctionType (T_void, [T_pint8])
104113 va_start = LLVM. Function (mod, " llvm.va_start" , va_start_fty)
105114 call! (builder, va_start_fty, va_start, [buffer])
106-
107- # invoke @air.os_log and return
108- subsystem_str = globalstring_ptr! (builder, MTLLOG_SUBSYSTEM, addrspace= 2 )
109- category_str = globalstring_ptr! (builder, MTLLOG_CATEGRORY, addrspace= 2 )
110- log_type = LLVM. ConstantInt (T_int32, __METAL_OS_LOG_TYPE_DEBUG__)
111- os_log_fty = LLVM. FunctionType (T_void, [T_pint8a2, T_pint8a2, T_int32, T_pint8a2, T_pint8, T_int64])
112- os_log = LLVM. Function (mod, " air.os_log" , os_log_fty)
113115
114116 arg_ptr = load! (builder, T_pint8, alloc)
115117
118+ os_log_fty = LLVM. FunctionType (T_void, [T_pint8a2, T_pint8a2, T_int32, T_pint8a2, T_pint8, T_int64])
119+ os_log = LLVM. Function (mod, " air.os_log" , os_log_fty)
116120 call! (builder, os_log_fty, os_log, [subsystem_str, category_str, log_type, str, arg_ptr, arg_size])
117121
118122 va_end_fty = LLVM. FunctionType (T_void, [T_pint8])
@@ -126,19 +130,17 @@ end
126130 ret! (builder)
127131 end
128132
129- wrapper_f, wrapper_ft = create_function (T_void, param_types)
130-
131- @dispose builder= IRBuilder () begin
132- entry = BasicBlock (wrapper_f, " entry" )
133- position! (builder, entry)
133+ # @dispose builder=IRBuilder() begin
134+ # entry = BasicBlock(wrapper_f, "entry")
135+ # position!(builder, entry)
134136
135- # call!(builder, llvm_ft, llvm_f, collect(parameters(wrapper_f)))
137+ # call!(builder, llvm_ft, llvm_f, collect(parameters(wrapper_f)))
136138
137- ret! (builder)
138- end
139+ # ret!(builder)
140+ # end
139141
140142
141- call_function (wrapper_f , Nothing, Tuple{arg_types... }, arg_exprs... )
143+ call_function (llvm_f , Nothing, Tuple{arg_types... }, arg_exprs... )
142144 end
143145end
144146
0 commit comments