From e2688c432fcffff53d7d356d7530a0b139c16286 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Tue, 14 Mar 2017 20:23:22 +0000 Subject: [WebAssembly] Use LEB encoding for value types Previously we were using the encoded LEB hex values for the value types. This change uses the decoded negative value and the LEB encoder to write them out. Differential Revision: https://reviews.llvm.org/D30847 Patch by Sam Clegg llvm-svn: 297777 --- .../WebAssemblyRuntimeLibcallSignatures.cpp | 358 ++++++++++----------- 1 file changed, 177 insertions(+), 181 deletions(-) (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp') diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp index 974aa52ec5d..c02ef4a1c39 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp @@ -971,10 +971,8 @@ RuntimeLibcallNames[RTLIB::UNKNOWN_LIBCALL] = { }; void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, - RTLIB::Libcall LC, - SmallVectorImpl &Rets, - SmallVectorImpl &Params) -{ + RTLIB::Libcall LC, SmallVectorImpl &Rets, + SmallVectorImpl &Params) { assert(Rets.empty()); assert(Params.empty()); @@ -986,315 +984,313 @@ void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, case func: break; case f32_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); break; case f32_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F64); break; case f32_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I32); break; case f32_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I64); break; case f32_func_i16: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I32); break; case f64_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F32); break; case f64_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); break; case f64_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I32); break; case f64_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I64); break; case i32_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F32); break; case i32_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F64); break; case i32_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i64_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::F32); break; case i64_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::F64); break; case i64_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case f32_func_f32_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); break; case f32_func_f32_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I32); break; case f32_func_i64_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case f64_func_f64_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); break; case f64_func_f64_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I32); break; case f64_func_i64_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i16_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F32); break; case i8_func_i8_i8: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case func_f32_iPTR_iPTR: - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); break; case func_f64_iPTR_iPTR: - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); break; case i16_func_i16_i16: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i32_func_f32_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); break; case i32_func_f64_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); break; case i32_func_i32_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i64_func_i64_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i64_i64_func_f32: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Params.push_back(wasm::ValType::F32); break; case i64_i64_func_f64: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Params.push_back(wasm::ValType::F64); break; case i16_i16_func_i16_i16: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Rets.push_back(wasm::ValType::I32); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i32_i32_func_i32_i32: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Rets.push_back(wasm::ValType::I32); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i64_i64_func_i64_i64: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i64_i64_func_i64_i64_i64_i64: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i64_i64_i64_i64_func_i64_i64_i64_i64: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i64_i64_func_i64_i64_i32: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I32); break; case iPTR_func_iPTR_i32_iPTR: - Rets.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(iPTR)); + Rets.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType(iPTR)); break; case iPTR_func_iPTR_iPTR_iPTR: - Rets.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); + Rets.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); break; case f32_func_f32_f32_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); break; case f64_func_f64_f64_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); break; case func_i64_i64_iPTR_iPTR: - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType(iPTR)); break; case func_iPTR_f32: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::F32); break; case func_iPTR_f64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::F64); break; case func_iPTR_i32: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I32); break; case func_iPTR_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I64); break; case func_iPTR_i64_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case func_iPTR_i64_i64_i64_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case func_iPTR_i64_i64_i64_i64_i64_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i32_func_i64_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case i32_func_i64_i64_i64_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case unsupported: llvm_unreachable("unsupported runtime library signature"); } } -void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, - const char *Name, - SmallVectorImpl &Rets, - SmallVectorImpl &Params) -{ +void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, const char *Name, + SmallVectorImpl &Rets, + SmallVectorImpl &Params) { assert(strcmp(RuntimeLibcallNames[RTLIB::DEOPTIMIZE], "__llvm_deoptimize") == 0); -- cgit v1.2.3