To keep cross-compiling straightforward, Cretonne shouldn't have any behavior that depends on the host. This renames the "Native" calling convention to "SystemV", which has a defined meaning for each target, so that it's clear that the calling convention doesn't change depending on what host Cretonne is running on.
113 lines
2.3 KiB
Plaintext
113 lines
2.3 KiB
Plaintext
; Parsing branches and jumps.
|
|
test cat
|
|
|
|
; Jumps with no arguments. The '()' empty argument list is optional.
|
|
function %minimal() {
|
|
ebb0:
|
|
jump ebb1
|
|
|
|
ebb1:
|
|
jump ebb0()
|
|
}
|
|
; sameln: function %minimal() system_v {
|
|
; nextln: ebb0:
|
|
; nextln: jump ebb1
|
|
; nextln:
|
|
; nextln: ebb1:
|
|
; nextln: jump ebb0
|
|
; nextln: }
|
|
|
|
; Jumps with 1 arg.
|
|
function %onearg(i32) {
|
|
ebb0(v90: i32):
|
|
jump ebb1(v90)
|
|
|
|
ebb1(v91: i32):
|
|
jump ebb0(v91)
|
|
}
|
|
; sameln: function %onearg(i32) system_v {
|
|
; nextln: ebb0(v90: i32):
|
|
; nextln: jump ebb1(v90)
|
|
; nextln:
|
|
; nextln: ebb1(v91: i32):
|
|
; nextln: jump ebb0(v91)
|
|
; nextln: }
|
|
|
|
; Jumps with 2 args.
|
|
function %twoargs(i32, f32) {
|
|
ebb0(v90: i32, v91: f32):
|
|
jump ebb1(v90, v91)
|
|
|
|
ebb1(v92: i32, v93: f32):
|
|
jump ebb0(v92, v93)
|
|
}
|
|
; sameln: function %twoargs(i32, f32) system_v {
|
|
; nextln: ebb0(v90: i32, v91: f32):
|
|
; nextln: jump ebb1(v90, v91)
|
|
; nextln:
|
|
; nextln: ebb1(v92: i32, v93: f32):
|
|
; nextln: jump ebb0(v92, v93)
|
|
; nextln: }
|
|
|
|
; Branches with no arguments. The '()' empty argument list is optional.
|
|
function %minimal(i32) {
|
|
ebb0(v90: i32):
|
|
brz v90, ebb1
|
|
|
|
ebb1:
|
|
brnz v90, ebb1()
|
|
}
|
|
; sameln: function %minimal(i32) system_v {
|
|
; nextln: ebb0(v90: i32):
|
|
; nextln: brz v90, ebb1
|
|
; nextln:
|
|
; nextln: ebb1:
|
|
; nextln: brnz.i32 v90, ebb1
|
|
; nextln: }
|
|
|
|
function %twoargs(i32, f32) {
|
|
ebb0(v90: i32, v91: f32):
|
|
brz v90, ebb1(v90, v91)
|
|
|
|
ebb1(v92: i32, v93: f32):
|
|
brnz v90, ebb0(v92, v93)
|
|
}
|
|
; sameln: function %twoargs(i32, f32) system_v {
|
|
; nextln: ebb0(v90: i32, v91: f32):
|
|
; nextln: brz v90, ebb1(v90, v91)
|
|
; nextln:
|
|
; nextln: ebb1(v92: i32, v93: f32):
|
|
; nextln: brnz.i32 v90, ebb0(v92, v93)
|
|
; nextln: }
|
|
|
|
function %jumptable(i32) {
|
|
jt200 = jump_table 0, 0
|
|
jt2 = jump_table 0, 0, ebb10, ebb40, ebb20, ebb30
|
|
|
|
ebb10(v3: i32):
|
|
br_table v3, jt2
|
|
trap user1
|
|
ebb20:
|
|
trap user2
|
|
ebb30:
|
|
trap user3
|
|
ebb40:
|
|
trap user4
|
|
}
|
|
; sameln: function %jumptable(i32) system_v {
|
|
; check: jt2 = jump_table 0, 0, ebb10, ebb40, ebb20, ebb30
|
|
; check: jt200 = jump_table 0
|
|
; check: ebb10(v3: i32):
|
|
; nextln: br_table v3, jt2
|
|
; nextln: trap user1
|
|
; nextln:
|
|
; nextln: ebb20:
|
|
; nextln: trap user2
|
|
; nextln:
|
|
; nextln: ebb30:
|
|
; nextln: trap user3
|
|
; nextln:
|
|
; nextln: ebb40:
|
|
; nextln: trap user4
|
|
; nextln: }
|