MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / signature

Method signature

cranelift/codegen/src/ir/libcall.rs:128–183  ·  view source on GitHub ↗

Get a [Signature] for the function targeted by this [LibCall].

(&self, call_conv: CallConv, pointer_type: Type)

Source from the content-addressed store, hash-verified

126
127 /// Get a [Signature] for the function targeted by this [LibCall].
128 pub fn signature(&self, call_conv: CallConv, pointer_type: Type) -> Signature {
129 use types::*;
130 let mut sig = Signature::new(call_conv);
131
132 match self {
133 LibCall::CeilF32 | LibCall::FloorF32 | LibCall::TruncF32 | LibCall::NearestF32 => {
134 sig.params.push(AbiParam::new(F32));
135 sig.returns.push(AbiParam::new(F32));
136 }
137 LibCall::TruncF64 | LibCall::FloorF64 | LibCall::CeilF64 | LibCall::NearestF64 => {
138 sig.params.push(AbiParam::new(F64));
139 sig.returns.push(AbiParam::new(F64));
140 }
141 LibCall::FmaF32 | LibCall::FmaF64 => {
142 let ty = if *self == LibCall::FmaF32 { F32 } else { F64 };
143
144 sig.params.push(AbiParam::new(ty));
145 sig.params.push(AbiParam::new(ty));
146 sig.params.push(AbiParam::new(ty));
147 sig.returns.push(AbiParam::new(ty));
148 }
149 LibCall::Memcpy | LibCall::Memmove => {
150 // void* memcpy(void *dest, const void *src, size_t count);
151 // void* memmove(void* dest, const void* src, size_t count);
152 sig.params.push(AbiParam::new(pointer_type));
153 sig.params.push(AbiParam::new(pointer_type));
154 sig.params.push(AbiParam::new(pointer_type));
155 sig.returns.push(AbiParam::new(pointer_type));
156 }
157 LibCall::Memset => {
158 // void *memset(void *dest, int ch, size_t count);
159 sig.params.push(AbiParam::new(pointer_type));
160 sig.params.push(AbiParam::new(I32));
161 sig.params.push(AbiParam::new(pointer_type));
162 sig.returns.push(AbiParam::new(pointer_type));
163 }
164 LibCall::Memcmp => {
165 // void* memcpy(void *dest, const void *src, size_t count);
166 sig.params.push(AbiParam::new(pointer_type));
167 sig.params.push(AbiParam::new(pointer_type));
168 sig.params.push(AbiParam::new(pointer_type));
169 sig.returns.push(AbiParam::new(I32))
170 }
171
172 LibCall::Probestack | LibCall::ElfTlsGetAddr | LibCall::ElfTlsGetOffset => {
173 unimplemented!()
174 }
175 LibCall::X86Pshufb => {
176 sig.params.push(AbiParam::new(I8X16));
177 sig.params.push(AbiParam::new(I8X16));
178 sig.returns.push(AbiParam::new(I8X16));
179 }
180 }
181
182 sig
183 }
184}
185

Callers 7

map_exception_tableMethod · 0.45
analyze_callMethod · 0.45
emit_vm_callFunction · 0.45
block_call_arg_tyMethod · 0.45

Calls 2

newFunction · 0.50
pushMethod · 0.45

Tested by

no test coverage detected