Skip to content

Commit

Permalink
Support system delegate call (#116)
Browse files Browse the repository at this point in the history
  • Loading branch information
akiramenai committed Sep 13, 2022
1 parent e84aa0a commit f0d90be
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions llvm/lib/Target/SyncVM/syncvm-runtime.ll
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,25 @@ err:
ret {i8 addrspace(3)*, i1}* %in_res
}

define {i8 addrspace(3)*, i1}* @__systemdelegatecall(i256 %abi_params, i256 %address, i256 %p0, i256 %p1, {i8 addrspace(3)*, i1}* %in_res) personality i32 ()* @__personality {
entry:
%in_res_result_ptr = getelementptr {i8 addrspace(3)*, i1}, {i8 addrspace(3)*, i1}* %in_res, i32 0, i32 0
%in_res_flag_ptr = getelementptr {i8 addrspace(3)*, i1}, {i8 addrspace(3)*, i1}* %in_res, i32 0, i32 1
%invoke_res = invoke i8 addrspace(3)* @__delegatecall_int(i256 %abi_params, i256 %address)
to label %ok unwind label %err
ok:
store i8 addrspace(3)* %invoke_res, i8 addrspace(3)** %in_res_result_ptr
store i1 1, i1* %in_res_flag_ptr
ret {i8 addrspace(3)*, i1}* %in_res

err:
%res.2 = landingpad {i8 addrspace(3)*, i256} cleanup
%res = extractvalue {i8 addrspace(3)*, i256} %res.2, 0
store i8 addrspace(3)* %res, i8 addrspace(3)** %in_res_result_ptr
store i1 0, i1* %in_res_flag_ptr
ret {i8 addrspace(3)*, i1}* %in_res
}

define void @__sstore(i256 %val, i256 %key) {
call void @llvm.syncvm.sstore(i256 %key, i256 %val)
ret void
Expand Down

0 comments on commit f0d90be

Please sign in to comment.