# Copyright (c) 2021-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # testing of call instructions with different arguments .record B {} .function u8 B.Bhandler_unspec(B a0) { return } .function u8 B.Bhandler_short(B a0, u1 a1) { return } .function u8 B.Bhandler_short2(B a0, u1[] a1, i64 a2) { return } .function u16 B.Bhandler_long(B a0, i8 a1, i16 a2, i32 a3) { return } .function u16 B.Bhandler_long2(B a0, i8 a1, i16 a2, i32 a3, i64 a4) { return } .function u16 B.Bhandler_range(B a0, i8 a1, i16 a2, i32 a3, i8 a4, i16 a5, i32 a6) { return } .function u16 long_function(i8 a0, i16 a1, i32 a2, i8 a3, i16 a4, i32 a5, i64 a6, f32 a7) { return } # ==================== .function u8 handler_unspec() { return } .function u8 handler_short(u1 a0) { return } .function u8 handler_short2(u1 a0, i64 a1) { return } .function u16 handler_long(i8 a0, i16 a1, i32 a2) { return } .function u16 handler_long2(i8 a0, i16 a1, i32 a2, f64 a3) { return } .function u16 handler_range(i8 a0, i16 a1, i32 a2, i8 a3, i16 a4, i32 a5) { return } # ==================== .function u8 handler_unspec_ext() .function u8 handler_short_ext(u1 a0) .function u8 handler_short2_ext(u1 a0, i64 a1) .function u16 handler_long_ext(i8 a0, i16 a1, i32 a2) .function u16 handler_long2_ext(i8 a0, i16 a1, i32 a2, f64 a3) .function u16 handler_range_ext(i8 a0, i16 a1, i32 a2, i8 a3, i16 a4, i32 a5) .function u1 g(u1 a0) { call.virt B.Bhandler_unspec, v4 call.virt B.Bhandler_short, v4, v1 call.virt B.Bhandler_short2, v4, v1, v2 call.virt B.Bhandler_long, v4, v0, v1, v2 call.virt.range B.Bhandler_range, v4 # ==================== call handler_unspec call.short handler_short, v1 call.short handler_short2, v1, v2 call handler_long, v0, v1, v2 call handler_long2, v0, v1, v2, v3 call.range handler_range, v0 # ==================== initobj B.Bhandler_unspec initobj.short B.Bhandler_short, v1 initobj.short B.Bhandler_short2, v1, v2 initobj B.Bhandler_long, v0, v1, v2 initobj B.Bhandler_long2, v0, v1, v2, v3 initobj.range B.Bhandler_range, v0 # ==================== call handler_unspec_ext call.short handler_short_ext, v1 call.short handler_short2_ext, v1, v2 call handler_long_ext, v0, v1, v2 call handler_long2_ext, v0, v1, v2, v3 call.range handler_range_ext, v0 calli.dyn.short 1, v0, v0, v0 # ==================== call.acc.short handler_short, v0, 0 call.acc.short handler_short2, a0, 1 return }