mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
wasm: remove i64 workaround, use BigInt instead
Browsers previously didn't support the WebAssembly i64 type, so we had to work around that limitation by converting the LLVM i64 type to something else. Some people used a pair of i32 values, but we used a pointer to a stack allocated i64. Now however, all major browsers and Node.js do support WebAssembly BigInt integration so that i64 values can be passed back and forth between WebAssembly and JavaScript easily. Therefore, I think the time has come to drop support for this workaround. For more information: https://v8.dev/features/wasm-bigint (note that TinyGo has used a slightly different way of passing i64 values between JS and Wasm). For information on browser support: https://webassembly.org/roadmap/
This commit is contained in:
committed by
Ron Evans
parent
6d5f4c4be2
commit
4d2a6d2bbe
Vendored
-28
@@ -1,28 +0,0 @@
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
||||
target triple = "wasm32-unknown-unknown-wasm"
|
||||
|
||||
declare i64 @externalCall(ptr, i32, i64)
|
||||
|
||||
define internal i64 @testCall(ptr %ptr, i32 %len, i64 %foo) {
|
||||
%val = call i64 @externalCall(ptr %ptr, i32 %len, i64 %foo)
|
||||
ret i64 %val
|
||||
}
|
||||
|
||||
define internal i64 @testCallNonEntry(ptr %ptr, i32 %len) {
|
||||
entry:
|
||||
br label %bb1
|
||||
|
||||
bb1:
|
||||
%val = call i64 @externalCall(ptr %ptr, i32 %len, i64 3)
|
||||
ret i64 %val
|
||||
}
|
||||
|
||||
define void @exportedFunction(i64 %foo) {
|
||||
%unused = shl i64 %foo, 1
|
||||
ret void
|
||||
}
|
||||
|
||||
define internal void @callExportedFunction(i64 %foo) {
|
||||
call void @exportedFunction(i64 %foo)
|
||||
ret void
|
||||
}
|
||||
Vendored
-45
@@ -1,45 +0,0 @@
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
||||
target triple = "wasm32-unknown-unknown-wasm"
|
||||
|
||||
declare i64 @"externalCall$i64wrap"(ptr, i32, i64)
|
||||
|
||||
define internal i64 @testCall(ptr %ptr, i32 %len, i64 %foo) {
|
||||
%i64asptr = alloca i64, align 8
|
||||
%i64asptr1 = alloca i64, align 8
|
||||
store i64 %foo, ptr %i64asptr1, align 8
|
||||
call void @externalCall(ptr %i64asptr, ptr %ptr, i32 %len, ptr %i64asptr1)
|
||||
%retval = load i64, ptr %i64asptr, align 8
|
||||
ret i64 %retval
|
||||
}
|
||||
|
||||
define internal i64 @testCallNonEntry(ptr %ptr, i32 %len) {
|
||||
entry:
|
||||
%i64asptr = alloca i64, align 8
|
||||
%i64asptr1 = alloca i64, align 8
|
||||
br label %bb1
|
||||
|
||||
bb1: ; preds = %entry
|
||||
store i64 3, ptr %i64asptr1, align 8
|
||||
call void @externalCall(ptr %i64asptr, ptr %ptr, i32 %len, ptr %i64asptr1)
|
||||
%retval = load i64, ptr %i64asptr, align 8
|
||||
ret i64 %retval
|
||||
}
|
||||
|
||||
define internal void @"exportedFunction$i64wrap"(i64 %foo) unnamed_addr {
|
||||
%unused = shl i64 %foo, 1
|
||||
ret void
|
||||
}
|
||||
|
||||
define internal void @callExportedFunction(i64 %foo) {
|
||||
call void @"exportedFunction$i64wrap"(i64 %foo)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @externalCall(ptr, ptr, i32, ptr)
|
||||
|
||||
define void @exportedFunction(ptr %0) {
|
||||
entry:
|
||||
%i64 = load i64, ptr %0, align 8
|
||||
call void @"exportedFunction$i64wrap"(i64 %i64)
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user