In 32-bit mode, all function arguments are passed on the stack, not in registers. This ABI support is not complete or properly tested, but at least it doesn't try to pass arguments in r8.
100 lines
2.0 KiB
Plaintext
100 lines
2.0 KiB
Plaintext
; Test the custom legalizations.
|
|
test legalizer
|
|
isa intel
|
|
set is_64bit
|
|
isa intel
|
|
|
|
; regex: V=v\d+
|
|
; regex: EBB=ebb\d+
|
|
|
|
function %cond_trap(i32) {
|
|
ebb0(v1: i32):
|
|
trapz v1, user67
|
|
return
|
|
; check: $ebb0($v1: i32
|
|
; nextln: brnz $v1, $(new=$EBB)
|
|
; nextln: trap user67
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap2(i32) {
|
|
ebb0(v1: i32):
|
|
trapnz v1, int_ovf
|
|
return
|
|
; check: $ebb0($v1: i32
|
|
; nextln: brz $v1, $(new=$EBB)
|
|
; nextln: trap int_ovf
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap_b1(i32) {
|
|
ebb0(v1: i32):
|
|
v2 = icmp_imm eq v1, 6
|
|
trapz v2, user7
|
|
return
|
|
; check: $ebb0($v1: i32
|
|
; check: brnz $v2, $(new=$EBB)
|
|
; nextln: trap user7
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap2_b1(i32) {
|
|
ebb0(v1: i32):
|
|
v2 = icmp_imm eq v1, 6
|
|
trapnz v2, user9
|
|
return
|
|
; check: $ebb0($v1: i32
|
|
; check: brz $v2, $(new=$EBB)
|
|
; nextln: trap user9
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %f32const() -> f32 {
|
|
ebb0:
|
|
v1 = f32const 0x1.0p1
|
|
; check: $(tmp=$V) = iconst.i32
|
|
; check: $v1 = bitcast.f32 $tmp
|
|
return v1
|
|
}
|
|
|
|
function %f64const() -> f64 {
|
|
ebb0:
|
|
v1 = f64const 0x1.0p1
|
|
; check: $(tmp=$V) = iconst.i64
|
|
; check: $v1 = bitcast.f64 $tmp
|
|
return v1
|
|
}
|
|
|
|
function %select_f64(f64, f64, i32) -> f64 {
|
|
ebb0(v0: f64, v1: f64, v2: i32):
|
|
v3 = select v2, v0, v1
|
|
; check: brnz v2, $(new=$EBB)($v0)
|
|
; nextln: jump $new($v1)
|
|
; check: $new($v3: f64):
|
|
; nextln: return $v3
|
|
return v3
|
|
}
|
|
|
|
function %f32_min(f32, f32) -> f32 {
|
|
ebb0(v0: f32, v1: f32):
|
|
v2 = fmin v0, v1
|
|
return v2
|
|
; check: $(vnat=$V) = x86_fmin $v0, $v1
|
|
; nextln: jump $(done=$EBB)($vnat)
|
|
|
|
; check: $(uno=$EBB):
|
|
; nextln: $(vuno=$V) = fadd.f32 $v0, $v1
|
|
; nextln: jump $(done=$EBB)($vuno)
|
|
|
|
; check: $(ueq=$EBB):
|
|
; check: $(veq=$V) = bor.f32 $v0, $v1
|
|
; nextln: jump $(done=$EBB)($veq)
|
|
|
|
; check: $done($v2: f32):
|
|
; nextln: return $v2
|
|
}
|