Add a calling-convention setting to the `Flags` used as part of the `TargetIsa`. This allows Cretonne code that generates calls to use the correct convention, such as when emitting libcalls during legalization or when the wasm frontend is decoding functions. This setting can be overridden per-function. This also adds "fast", "cold", and "fastcall" conventions, with "fast" as the new default. Note that "fast" and "cold" are not intended to be ABI-compatible across Cretonne versions. This will also ensure Windows users will get an `unimplemented!` rather than silent calling-convention mismatches, which reflects the fact that Windows calling conventions are not yet implemented. This also renames SpiderWASM, which isn't camel-case, to Baldrdash, which is, and which is also a more relevant name.
141 lines
3.1 KiB
Plaintext
141 lines
3.1 KiB
Plaintext
test regalloc
|
|
set is_64bit
|
|
isa x86 haswell
|
|
|
|
function u0:9(i64 [%rdi], f32 [%xmm0], f64 [%xmm1], i32 [%rsi], i32 [%rdx], i64 vmctx [%r14]) -> i64 [%rax] baldrdash {
|
|
ebb0(v0: i64, v1: f32, v2: f64, v3: i32, v4: i32, v5: i64):
|
|
v32 = iconst.i32 0
|
|
v6 = bitcast.f32 v32
|
|
v7 = iconst.i64 0
|
|
v33 = iconst.i64 0
|
|
v8 = bitcast.f64 v33
|
|
v34 = iconst.i32 0xbe99_999a
|
|
v9 = bitcast.f32 v34
|
|
v10 = iconst.i32 40
|
|
v11 = iconst.i32 -7
|
|
v35 = iconst.i32 0x40b0_0000
|
|
v12 = bitcast.f32 v35
|
|
v13 = iconst.i64 6
|
|
v36 = iconst.i64 0x4020_0000_0000_0000
|
|
v14 = bitcast.f64 v36
|
|
v44 = iconst.i64 0
|
|
v37 = icmp slt v0, v44
|
|
brnz v37, ebb2
|
|
v38 = fcvt_from_sint.f64 v0
|
|
jump ebb3(v38)
|
|
|
|
ebb2:
|
|
v45 = iconst.i32 1
|
|
v39 = ushr.i64 v0, v45
|
|
v40 = band_imm.i64 v0, 1
|
|
v41 = bor v39, v40
|
|
v42 = fcvt_from_sint.f64 v41
|
|
v43 = fadd v42, v42
|
|
jump ebb3(v43)
|
|
|
|
ebb3(v15: f64):
|
|
v16 = fpromote.f64 v9
|
|
v46 = uextend.i64 v10
|
|
v17 = fcvt_from_sint.f64 v46
|
|
v18 = fcvt_from_sint.f64 v11
|
|
v19 = fpromote.f64 v12
|
|
v54 = iconst.i64 0
|
|
v47 = icmp.i64 slt v13, v54
|
|
brnz v47, ebb4
|
|
v48 = fcvt_from_sint.f64 v13
|
|
jump ebb5(v48)
|
|
|
|
ebb4:
|
|
v55 = iconst.i32 1
|
|
v49 = ushr.i64 v13, v55
|
|
v50 = band_imm.i64 v13, 1
|
|
v51 = bor v49, v50
|
|
v52 = fcvt_from_sint.f64 v51
|
|
v53 = fadd v52, v52
|
|
jump ebb5(v53)
|
|
|
|
ebb5(v20: f64):
|
|
v63 = iconst.i64 0
|
|
v56 = icmp.i64 slt v7, v63
|
|
brnz v56, ebb6
|
|
v57 = fcvt_from_sint.f64 v7
|
|
jump ebb7(v57)
|
|
|
|
ebb6:
|
|
v64 = iconst.i32 1
|
|
v58 = ushr.i64 v7, v64
|
|
v59 = band_imm.i64 v7, 1
|
|
v60 = bor v58, v59
|
|
v61 = fcvt_from_sint.f64 v60
|
|
v62 = fadd v61, v61
|
|
jump ebb7(v62)
|
|
|
|
ebb7(v21: f64):
|
|
v22 = fadd v21, v14
|
|
v23 = fadd.f64 v20, v22
|
|
v24 = fadd.f64 v19, v23
|
|
v25 = fadd.f64 v18, v24
|
|
v26 = fadd.f64 v17, v25
|
|
v27 = fadd.f64 v2, v26
|
|
v28 = fadd.f64 v16, v27
|
|
v29 = fadd.f64 v15, v28
|
|
v30 = x86_cvtt2si.i64 v29
|
|
v69 = iconst.i64 0x8000_0000_0000_0000
|
|
v65 = icmp ne v30, v69
|
|
brnz v65, ebb8
|
|
v66 = fcmp uno v29, v29
|
|
brz v66, ebb9
|
|
trap bad_toint
|
|
|
|
ebb9:
|
|
v70 = iconst.i64 0xc3e0_0000_0000_0000
|
|
v67 = bitcast.f64 v70
|
|
v68 = fcmp gt v67, v29
|
|
brz v68, ebb10
|
|
trap int_ovf
|
|
|
|
ebb10:
|
|
jump ebb8
|
|
|
|
ebb8:
|
|
jump ebb1(v30)
|
|
|
|
ebb1(v31: i64):
|
|
return v31
|
|
}
|
|
|
|
function u0:26(i64 vmctx [%r14]) -> i64 [%rax] baldrdash {
|
|
gv0 = vmctx+48
|
|
sig0 = (i32 [%rdi], i64 [%rsi], i64 vmctx [%r14], i64 sigid [%rbx]) -> i64 [%rax] baldrdash
|
|
|
|
ebb0(v0: i64):
|
|
v1 = iconst.i32 32
|
|
v2 = iconst.i64 64
|
|
v3 = iconst.i32 9
|
|
v4 = iconst.i64 1063
|
|
v5 = iadd_imm v0, 48
|
|
v6 = load.i32 v5
|
|
v7 = icmp uge v3, v6
|
|
; If we're unlucky, there are no ABCD registers available for v7 at this branch.
|
|
brz v7, ebb2
|
|
trap oob
|
|
|
|
ebb2:
|
|
v8 = load.i64 v5+8
|
|
v9 = uextend.i64 v3
|
|
v16 = iconst.i64 16
|
|
v10 = imul v9, v16
|
|
v11 = iadd v8, v10
|
|
v12 = load.i64 v11
|
|
brnz v12, ebb3
|
|
trap icall_null
|
|
|
|
ebb3:
|
|
v13 = load.i64 v11+8
|
|
v14 = call_indirect.i64 sig0, v12(v1, v2, v13, v4)
|
|
jump ebb1(v14)
|
|
|
|
ebb1(v15: i64):
|
|
return v15
|
|
}
|