WebAssembly doesn't have non-dense jump tables, and higher-level users are better served by the facilities in lib/frontend/src/switch.rs for working with non-dense switches. This eliminates the concept of "absent" jump table entries, which were represented as "0" in the text format. Also, jump table contents are now enclosed in `[` and `]`, so that we can unambiguously display empty jump tables. Previously, empty jump tables were displayed as if they had a single absent entry.
66 lines
882 B
Plaintext
66 lines
882 B
Plaintext
; Test basic code generation for control flow WebAssembly instructions.
|
|
test compile
|
|
|
|
target i686 haswell
|
|
|
|
target x86_64 haswell
|
|
|
|
function %br_if(i32) -> i32 {
|
|
ebb0(v0: i32):
|
|
v1 = iconst.i32 1
|
|
brz v0, ebb1(v1)
|
|
jump ebb2
|
|
|
|
ebb1(v2: i32):
|
|
return v2
|
|
|
|
ebb2:
|
|
jump ebb1(v0)
|
|
}
|
|
|
|
function %br_if_not(i32) -> i32 {
|
|
ebb0(v0: i32):
|
|
v1 = iconst.i32 1
|
|
brnz v0, ebb1(v0)
|
|
jump ebb2
|
|
|
|
ebb1(v2: i32):
|
|
return v2
|
|
|
|
ebb2:
|
|
jump ebb1(v0)
|
|
}
|
|
|
|
function %br_if_fallthrough(i32) -> i32 {
|
|
ebb0(v0: i32):
|
|
v1 = iconst.i32 1
|
|
brz v0, ebb1(v1)
|
|
; This jump gets converted to a fallthrough.
|
|
jump ebb1(v0)
|
|
|
|
ebb1(v2: i32):
|
|
return v2
|
|
}
|
|
|
|
function %undefined() {
|
|
ebb0:
|
|
trap user0
|
|
}
|
|
|
|
function %br_table(i32) {
|
|
jt0 = jump_table [ebb3, ebb1, ebb2]
|
|
|
|
ebb0(v0: i32):
|
|
br_table v0, ebb4, jt0
|
|
|
|
ebb4:
|
|
trap oob
|
|
|
|
ebb1:
|
|
return
|
|
ebb2:
|
|
return
|
|
ebb3:
|
|
return
|
|
}
|