Implement jump tables.

- Add a ir::jumptable module with a JumpTableData struct representing the vector
  of destinations.
- Add an entity map of jump tables to the Function.
- Parse and write jump tables in the function preamble.
- Rewrite EBB references in jumptables after parsing.
This commit is contained in:
Jakob Stoklund Olesen
2016-07-22 11:41:30 -07:00
parent ba76f444ab
commit f054d32f50
7 changed files with 281 additions and 5 deletions

View File

@@ -43,3 +43,17 @@ ebb0(vx0: i32, vx1: f32):
ebb1(vx2: i32, vx3: f32):
brnz vx0, ebb0(vx2, vx3)
}
function jumptable() {
jt200 = jump_table 0, 0
jt2 = jump_table 0, 0, ebb10, ebb40, ebb20, ebb30
ebb10:
trap
ebb20:
trap
ebb30:
trap
ebb40:
trap
}

View File

@@ -37,3 +37,20 @@ ebb0(vx0: i32, vx1: f32):
ebb1(vx2: i32, vx3: f32):
brnz vx0, ebb0(vx2, vx3)
}
function jumptable() {
jt0 = jump_table 0
jt1 = jump_table 0, 0, ebb0, ebb3, ebb1, ebb2
ebb0:
trap
ebb1:
trap
ebb2:
trap
ebb3:
trap
}