Add trap codes to the Cretonne IL.
The trap and trapz/trapnz instructions now take a trap code immediate operand which indicates the reason for trapping.
This commit is contained in:
@@ -369,5 +369,5 @@ ebb1:
|
||||
|
||||
; asm: ebb2:
|
||||
ebb2:
|
||||
trap ; bin: 0f 0b
|
||||
trap user0 ; bin: 0f 0b
|
||||
}
|
||||
|
||||
@@ -861,5 +861,5 @@ ebb0:
|
||||
; asm: movl %r10d, %ecx
|
||||
[-,%rcx] v32 = uextend.i64 v13 ; bin: 44 89 d1
|
||||
|
||||
trap ; bin: 0f 0b
|
||||
trap user0 ; bin: 0f 0b
|
||||
}
|
||||
|
||||
@@ -9,22 +9,22 @@ isa intel
|
||||
|
||||
function %cond_trap(i32) {
|
||||
ebb0(v1: i32):
|
||||
trapz v1
|
||||
trapz v1, user67
|
||||
return
|
||||
; check: $ebb0($v1: i32):
|
||||
; nextln: brnz $v1, $(new=$EBB)
|
||||
; nextln: trap
|
||||
; nextln: trap user67
|
||||
; check: $new:
|
||||
; nextln: return
|
||||
}
|
||||
|
||||
function %cond_trap2(i32) {
|
||||
ebb0(v1: i32):
|
||||
trapnz v1
|
||||
trapnz v1, int_ovf
|
||||
return
|
||||
; check: $ebb0($v1: i32):
|
||||
; nextln: brz $v1, $(new=$EBB)
|
||||
; nextln: trap
|
||||
; nextln: trap int_ovf
|
||||
; check: $new:
|
||||
; nextln: return
|
||||
}
|
||||
@@ -32,11 +32,11 @@ ebb0(v1: i32):
|
||||
function %cond_trap_b1(i32) {
|
||||
ebb0(v1: i32):
|
||||
v2 = icmp_imm eq v1, 6
|
||||
trapz v2
|
||||
trapz v2, user7
|
||||
return
|
||||
; check: $ebb0($v1: i32):
|
||||
; check: brnz $v2, $(new=$EBB)
|
||||
; nextln: trap
|
||||
; nextln: trap user7
|
||||
; check: $new:
|
||||
; nextln: return
|
||||
}
|
||||
@@ -44,11 +44,11 @@ ebb0(v1: i32):
|
||||
function %cond_trap2_b1(i32) {
|
||||
ebb0(v1: i32):
|
||||
v2 = icmp_imm eq v1, 6
|
||||
trapnz v2
|
||||
trapnz v2, user9
|
||||
return
|
||||
; check: $ebb0($v1: i32):
|
||||
; check: brz $v2, $(new=$EBB)
|
||||
; nextln: trap
|
||||
; nextln: trap user9
|
||||
; check: $new:
|
||||
; nextln: return
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ ebb0(v0: i32, v999: i64):
|
||||
; Boundscheck code
|
||||
; check: $(oob=$V) = icmp
|
||||
; nextln: brz $oob, $(ok=$EBB)
|
||||
; nextln: trap
|
||||
; nextln: trap heap_oob
|
||||
; check: $ok:
|
||||
; Checks here are assuming that no pipehole opts fold the load offsets.
|
||||
; nextln: $(xoff=$V) = uextend.i64 $v0
|
||||
|
||||
Reference in New Issue
Block a user