Add a MachBuffer::defer_trap method (#6011)
* Add a `MachBuffer::defer_trap` method This commit adds a new method to `MachBuffer` to defer trap opcodes to the end of a function in a similar manner to how constants are deferred to the end of the function. This is useful for backends which frequently use `TrapIf`-style opcodes. Currently a jump is emitted which skips the next instruction, a trap, and then execution continues normally. While there isn't any pressing problem with this construction the trap opcode is in the middle of the instruction stream as opposed to "off on the side" despite rarely being taken. With this method in place all the backends (except riscv64 since I couldn't figure it out easily enough) have a new lowering of their `TrapIf` opcode. Now a trap is deferred, which returns a label, and then that label is jumped to when executing the trap. A fixup is then recorded in `MachBuffer` to get patched later on during emission, or at the end of the function. Subsequently all `TrapIf` instructions translate to a single branch plus a single trap at the end of the function. I've additionally further updated some more lowerings in the x64 backend which were explicitly using traps to instead use `TrapIf` where applicable to avoid jumping over traps mid-function. Other backends didn't appear to have many jump-over-the-next-trap patterns. Lots of tests have had their expectations updated here which should reflect all the traps being sunk to the end of functions. * Print trap code on all platforms * Emit traps before constants * Preserve source location information for traps * Fix test expectations * Attempt to fix s390x The MachBuffer was registering trap codes with the first byte of the trap, but the SIGILL handler was expecting it to be registered with the last byte of the trap. Exploit that SIGILL is always represented with a 2-byte instruction and always march 2-backwards for SIGILL, continuing to march backwards 1 byte for SIGFPE-generating instructions. * Back out s390x changes * Back out more s390x bits * Review comments
This commit is contained in:
@@ -90,23 +90,23 @@ block0(v0: i64, v1: i64):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; cbz x1, #trap=int_divz
|
||||
; adds xzr, x1, #1
|
||||
; ccmp x0, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=int_ovf
|
||||
; sdiv x0, x0, x1
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; cbnz x1, #8
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x1, #0x18
|
||||
; cmn x1, #1
|
||||
; ccmp x0, #1, #0, eq
|
||||
; b.vc #0x18
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.vs #0x1c
|
||||
; sdiv x0, x0, x1
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f7(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -135,16 +135,16 @@ block0(v0: i64, v1: i64):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; cbz x1, #trap=int_divz
|
||||
; udiv x0, x0, x1
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; cbnz x1, #8
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x1, #0xc
|
||||
; udiv x0, x0, x1
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f9(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -173,18 +173,18 @@ block0(v0: i64, v1: i64):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; cbz x1, #trap=int_divz
|
||||
; sdiv x4, x0, x1
|
||||
; msub x0, x4, x1, x0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; cbnz x1, #8
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x1, #0x10
|
||||
; sdiv x4, x0, x1
|
||||
; msub x0, x4, x1, x0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f11(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -194,18 +194,18 @@ block0(v0: i64, v1: i64):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; cbz x1, #trap=int_divz
|
||||
; udiv x4, x0, x1
|
||||
; msub x0, x4, x1, x0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; cbnz x1, #8
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x1, #0x10
|
||||
; udiv x4, x0, x1
|
||||
; msub x0, x4, x1, x0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f12(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -217,10 +217,10 @@ block0(v0: i32, v1: i32):
|
||||
; block0:
|
||||
; sxtw x3, w0
|
||||
; sxtw x5, w1
|
||||
; cbnz x5, 8 ; udf
|
||||
; cbz x5, #trap=int_divz
|
||||
; adds wzr, w5, #1
|
||||
; ccmp w3, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=int_ovf
|
||||
; sdiv x0, x3, x5
|
||||
; ret
|
||||
;
|
||||
@@ -228,14 +228,14 @@ block0(v0: i32, v1: i32):
|
||||
; block0: ; offset 0x0
|
||||
; sxtw x3, w0
|
||||
; sxtw x5, w1
|
||||
; cbnz x5, #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x5, #0x20
|
||||
; cmn w5, #1
|
||||
; ccmp w3, #1, #0, eq
|
||||
; b.vc #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.vs #0x24
|
||||
; sdiv x0, x3, x5
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f13(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -268,7 +268,7 @@ block0(v0: i32, v1: i32):
|
||||
; block0:
|
||||
; mov w3, w0
|
||||
; mov w5, w1
|
||||
; cbnz x5, 8 ; udf
|
||||
; cbz x5, #trap=int_divz
|
||||
; udiv x0, x3, x5
|
||||
; ret
|
||||
;
|
||||
@@ -276,10 +276,10 @@ block0(v0: i32, v1: i32):
|
||||
; block0: ; offset 0x0
|
||||
; mov w3, w0
|
||||
; mov w5, w1
|
||||
; cbnz x5, #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x5, #0x14
|
||||
; udiv x0, x3, x5
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f15(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -312,7 +312,7 @@ block0(v0: i32, v1: i32):
|
||||
; block0:
|
||||
; sxtw x3, w0
|
||||
; sxtw x5, w1
|
||||
; cbnz x5, 8 ; udf
|
||||
; cbz x5, #trap=int_divz
|
||||
; sdiv x8, x3, x5
|
||||
; msub x0, x8, x5, x3
|
||||
; ret
|
||||
@@ -321,11 +321,11 @@ block0(v0: i32, v1: i32):
|
||||
; block0: ; offset 0x0
|
||||
; sxtw x3, w0
|
||||
; sxtw x5, w1
|
||||
; cbnz x5, #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x5, #0x18
|
||||
; sdiv x8, x3, x5
|
||||
; msub x0, x8, x5, x3
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f17(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -337,7 +337,7 @@ block0(v0: i32, v1: i32):
|
||||
; block0:
|
||||
; mov w3, w0
|
||||
; mov w5, w1
|
||||
; cbnz x5, 8 ; udf
|
||||
; cbz x5, #trap=int_divz
|
||||
; udiv x8, x3, x5
|
||||
; msub x0, x8, x5, x3
|
||||
; ret
|
||||
@@ -346,11 +346,11 @@ block0(v0: i32, v1: i32):
|
||||
; block0: ; offset 0x0
|
||||
; mov w3, w0
|
||||
; mov w5, w1
|
||||
; cbnz x5, #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
; cbz x5, #0x18
|
||||
; udiv x8, x3, x5
|
||||
; msub x0, x8, x5, x3
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_divz
|
||||
|
||||
function %f18(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -787,7 +787,7 @@ block0(v0: i64):
|
||||
; movn x2, #0
|
||||
; adds xzr, x2, #1
|
||||
; ccmp x0, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=int_ovf
|
||||
; sdiv x0, x0, x2
|
||||
; ret
|
||||
;
|
||||
@@ -796,8 +796,8 @@ block0(v0: i64):
|
||||
; mov x2, #-1
|
||||
; cmn x2, #1
|
||||
; ccmp x0, #1, #0, eq
|
||||
; b.vc #0x14
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.vs #0x18
|
||||
; sdiv x0, x0, x2
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
|
||||
@@ -83,33 +83,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #17280, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x43800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function u0:0(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
@@ -120,33 +120,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16496, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x4070000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function u0:0(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
@@ -157,33 +157,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #18304, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x47800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function u0:0(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
@@ -194,31 +194,31 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16624, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x40f0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
|
||||
@@ -237,33 +237,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #20352, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x4f800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f14(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -274,33 +274,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #24448, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu x0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x5f800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu x0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f15(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -311,33 +311,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16880, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x41f0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f16(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -348,33 +348,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #17392, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu x0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x43f0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu x0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f17(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -449,35 +449,35 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz w4, #52992, LSL #16
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz w10, #20224, LSL #16
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov w4, #-0x31000000
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov w10, #0x4f000000
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f22(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -488,35 +488,35 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz w4, #57088, LSL #16
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz w10, #24320, LSL #16
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs x0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov w4, #-0x21000000
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov w10, #0x5f000000
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs x0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f23(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -527,33 +527,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; ldr d4, [const(0)]
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16864, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; ldr d4, #0x38
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x41e0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzs w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x00, 0x00, 0x20, 0x00
|
||||
; .byte 0x00, 0x00, 0xe0, 0xc1
|
||||
|
||||
@@ -566,35 +566,35 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz x4, #50144, LSL #48
|
||||
; fmov d6, x4
|
||||
; fcmp d0, d6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz x10, #17376, LSL #48
|
||||
; fmov d20, x10
|
||||
; fcmp d0, d20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs x0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov x4, #-0x3c20000000000000
|
||||
; fmov d6, x4
|
||||
; fcmp d0, d6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov x10, #0x43e0000000000000
|
||||
; fmov d20, x10
|
||||
; fcmp d0, d20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs x0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f25(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
|
||||
@@ -527,33 +527,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #20352, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x4f800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f34(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -564,35 +564,35 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz w4, #52992, LSL #16
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz w10, #20224, LSL #16
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs w0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov w4, #-0x31000000
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov w10, #0x4f000000
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs w0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f35(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -603,33 +603,33 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov s4, #-1
|
||||
; fcmp s0, s4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz w8, #24448, LSL #16
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu x0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov s4, #-1.00000000
|
||||
; fcmp s0, s4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov w8, #0x5f800000
|
||||
; fmov s18, w8
|
||||
; fcmp s0, s18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu x0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f36(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -640,35 +640,35 @@ block0(v0: f32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz w4, #57088, LSL #16
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz w10, #24320, LSL #16
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs x0, s0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp s0, s0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov w4, #-0x21000000
|
||||
; fmov s6, w4
|
||||
; fcmp s0, s6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov w10, #0x5f000000
|
||||
; fmov s20, w10
|
||||
; fcmp s0, s20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs x0, s0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f37(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -679,33 +679,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16880, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x41f0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f38(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -716,33 +716,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; ldr d4, [const(0)]
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #16864, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs w0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; ldr d4, #0x38
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x41e0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzs w0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x00, 0x00, 0x20, 0x00
|
||||
; .byte 0x00, 0x00, 0xe0, 0xc1
|
||||
|
||||
@@ -755,33 +755,33 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; fmov d4, #-1
|
||||
; fcmp d0, d4
|
||||
; b.gt 8 ; udf
|
||||
; b.le #trap=int_ovf
|
||||
; movz x8, #17392, LSL #48
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzu x0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x2c
|
||||
; fmov d4, #-1.00000000
|
||||
; fcmp d0, d4
|
||||
; b.gt #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.le #0x30
|
||||
; mov x8, #0x43f0000000000000
|
||||
; fmov d18, x8
|
||||
; fcmp d0, d18
|
||||
; b.lt #0x30
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x34
|
||||
; fcvtzu x0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f40(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -792,35 +792,35 @@ block0(v0: f64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; b.vs #trap=bad_toint
|
||||
; movz x4, #50144, LSL #48
|
||||
; fmov d6, x4
|
||||
; fcmp d0, d6
|
||||
; b.ge 8 ; udf
|
||||
; b.lt #trap=int_ovf
|
||||
; movz x10, #17376, LSL #48
|
||||
; fmov d20, x10
|
||||
; fcmp d0, d20
|
||||
; b.lt 8 ; udf
|
||||
; b.ge #trap=int_ovf
|
||||
; fcvtzs x0, d0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; fcmp d0, d0
|
||||
; b.vc #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; b.vs #0x30
|
||||
; mov x4, #-0x3c20000000000000
|
||||
; fmov d6, x4
|
||||
; fcmp d0, d6
|
||||
; b.ge #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.lt #0x34
|
||||
; mov x10, #0x43e0000000000000
|
||||
; fmov d20, x10
|
||||
; fcmp d0, d20
|
||||
; b.lt #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; b.ge #0x38
|
||||
; fcvtzs x0, d0
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: bad_toint
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: int_ovf
|
||||
|
||||
function %f41(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
|
||||
@@ -56,7 +56,7 @@ block0(v0: i64):
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; subs xzr, sp, x0, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; block0:
|
||||
; load_ext_name x2, TestCase(%foo)+0
|
||||
; blr x2
|
||||
@@ -68,16 +68,16 @@ block0(v0: i64):
|
||||
; stp x29, x30, [sp, #-0x10]!
|
||||
; mov x29, sp
|
||||
; cmp sp, x0
|
||||
; b.hs #0x14
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; block1: ; offset 0x14
|
||||
; ldr x2, #0x1c
|
||||
; b #0x24
|
||||
; b.lo #0x2c
|
||||
; block1: ; offset 0x10
|
||||
; ldr x2, #0x18
|
||||
; b #0x20
|
||||
; .byte 0x00, 0x00, 0x00, 0x00 ; reloc_external Abs8 %foo 0
|
||||
; .byte 0x00, 0x00, 0x00, 0x00
|
||||
; blr x2
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %stack_limit_gv_call_zero(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -96,7 +96,7 @@ block0(v0: i64):
|
||||
; ldr x16, [x0]
|
||||
; ldr x16, [x16, #4]
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; block0:
|
||||
; load_ext_name x2, TestCase(%foo)+0
|
||||
; blr x2
|
||||
@@ -110,16 +110,16 @@ block0(v0: i64):
|
||||
; ldur x16, [x0]
|
||||
; ldur x16, [x16, #4]
|
||||
; cmp sp, x16
|
||||
; b.hs #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; block1: ; offset 0x1c
|
||||
; ldr x2, #0x24
|
||||
; b #0x2c
|
||||
; b.lo #0x34
|
||||
; block1: ; offset 0x18
|
||||
; ldr x2, #0x20
|
||||
; b #0x28
|
||||
; .byte 0x00, 0x00, 0x00, 0x00 ; reloc_external Abs8 %foo 0
|
||||
; .byte 0x00, 0x00, 0x00, 0x00
|
||||
; blr x2
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 168
|
||||
@@ -132,7 +132,7 @@ block0(v0: i64):
|
||||
; mov fp, sp
|
||||
; add x16, x0, #176
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; sub sp, sp, #176
|
||||
; block0:
|
||||
; add sp, sp, #176
|
||||
@@ -145,13 +145,13 @@ block0(v0: i64):
|
||||
; mov x29, sp
|
||||
; add x16, x0, #0xb0
|
||||
; cmp sp, x16
|
||||
; b.hs #0x18
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x24
|
||||
; sub sp, sp, #0xb0
|
||||
; block1: ; offset 0x1c
|
||||
; block1: ; offset 0x18
|
||||
; add sp, sp, #0xb0
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %huge_stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 400000
|
||||
@@ -163,12 +163,12 @@ block0(v0: i64):
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; subs xzr, sp, x0, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; movz w17, #6784
|
||||
; movk w17, w17, #6, LSL #16
|
||||
; add x16, x0, x17, UXTX
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; movz w16, #6784
|
||||
; movk w16, w16, #6, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
@@ -184,23 +184,23 @@ block0(v0: i64):
|
||||
; stp x29, x30, [sp, #-0x10]!
|
||||
; mov x29, sp
|
||||
; cmp sp, x0
|
||||
; b.hs #0x14
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x44
|
||||
; mov w17, #0x1a80
|
||||
; movk w17, #6, lsl #16
|
||||
; add x16, x0, x17, uxtx
|
||||
; cmp sp, x16
|
||||
; b.hs #0x2c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x48
|
||||
; mov w16, #0x1a80
|
||||
; movk w16, #6, lsl #16
|
||||
; sub sp, sp, x16
|
||||
; block1: ; offset 0x38
|
||||
; block1: ; offset 0x30
|
||||
; mov w16, #0x1a80
|
||||
; movk w16, #6, lsl #16
|
||||
; add sp, sp, x16
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %limit_preamble(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -219,7 +219,7 @@ block0(v0: i64):
|
||||
; ldr x16, [x16, #4]
|
||||
; add x16, x16, #32
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add sp, sp, #32
|
||||
@@ -234,13 +234,13 @@ block0(v0: i64):
|
||||
; ldur x16, [x16, #4]
|
||||
; add x16, x16, #0x20
|
||||
; cmp sp, x16
|
||||
; b.hs #0x20
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x2c
|
||||
; sub sp, sp, #0x20
|
||||
; block1: ; offset 0x24
|
||||
; block1: ; offset 0x20
|
||||
; add sp, sp, #0x20
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %limit_preamble_huge(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -258,12 +258,12 @@ block0(v0: i64):
|
||||
; ldr x16, [x0]
|
||||
; ldr x16, [x16, #4]
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; movz w17, #6784
|
||||
; movk w17, w17, #6, LSL #16
|
||||
; add x16, x16, x17, UXTX
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; movz w16, #6784
|
||||
; movk w16, w16, #6, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
@@ -281,23 +281,23 @@ block0(v0: i64):
|
||||
; ldur x16, [x0]
|
||||
; ldur x16, [x16, #4]
|
||||
; cmp sp, x16
|
||||
; b.hs #0x1c
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x4c
|
||||
; mov w17, #0x1a80
|
||||
; movk w17, #6, lsl #16
|
||||
; add x16, x16, x17, uxtx
|
||||
; cmp sp, x16
|
||||
; b.hs #0x34
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x50
|
||||
; mov w16, #0x1a80
|
||||
; movk w16, #6, lsl #16
|
||||
; sub sp, sp, x16
|
||||
; block1: ; offset 0x40
|
||||
; block1: ; offset 0x38
|
||||
; mov w16, #0x1a80
|
||||
; movk w16, #6, lsl #16
|
||||
; add sp, sp, x16
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
function %limit_preamble_huge_offset(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -314,7 +314,7 @@ block0(v0: i64):
|
||||
; movz w16, #6784 ; movk w16, w16, #6, LSL #16 ; ldr x16, [x0, x16, SXTX]
|
||||
; add x16, x16, #32
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; b.lo #trap=stk_ovf
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add sp, sp, #32
|
||||
@@ -330,11 +330,11 @@ block0(v0: i64):
|
||||
; ldr x16, [x0, x16, sxtx]
|
||||
; add x16, x16, #0x20
|
||||
; cmp sp, x16
|
||||
; b.hs #0x24
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
; b.lo #0x30
|
||||
; sub sp, sp, #0x20
|
||||
; block1: ; offset 0x28
|
||||
; block1: ; offset 0x24
|
||||
; add sp, sp, #0x20
|
||||
; ldp x29, x30, [sp], #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: stk_ovf
|
||||
|
||||
|
||||
@@ -23,13 +23,13 @@ block0(v0: i64, v1: i64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; adds x3, x0, x1
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; adds x3, x0, x1
|
||||
; b.lo #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0xc
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
|
||||
@@ -12,16 +12,16 @@ block0(v0: i32):
|
||||
; block0:
|
||||
; movz w2, #127
|
||||
; adds w0, w0, w2
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; mov w2, #0x7f
|
||||
; adds w0, w0, w2
|
||||
; b.lo #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
function %f1(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -34,16 +34,16 @@ block0(v0: i32):
|
||||
; block0:
|
||||
; movz w2, #127
|
||||
; adds w0, w2, w0
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; mov w2, #0x7f
|
||||
; adds w0, w2, w0
|
||||
; b.lo #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
function %f2(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -54,15 +54,15 @@ block0(v0: i32, v1: i32):
|
||||
; VCode:
|
||||
; block0:
|
||||
; adds w0, w0, w1
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; adds w0, w0, w1
|
||||
; b.lo #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0xc
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
function %f3(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -75,16 +75,16 @@ block0(v0: i64):
|
||||
; block0:
|
||||
; movz x2, #127
|
||||
; adds x0, x0, x2
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; mov x2, #0x7f
|
||||
; adds x0, x0, x2
|
||||
; b.lo #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
function %f3(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -97,16 +97,16 @@ block0(v0: i64):
|
||||
; block0:
|
||||
; movz x2, #127
|
||||
; adds x0, x2, x0
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; mov x2, #0x7f
|
||||
; adds x0, x2, x0
|
||||
; b.lo #0x10
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0x10
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
function %f4(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -117,13 +117,13 @@ block0(v0: i64, v1: i64):
|
||||
; VCode:
|
||||
; block0:
|
||||
; adds x0, x0, x1
|
||||
; b.lo 8 ; udf
|
||||
; b.hs #trap=user0
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; adds x0, x0, x1
|
||||
; b.lo #0xc
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
; b.hs #0xc
|
||||
; ret
|
||||
; .byte 0x1f, 0xc1, 0x00, 0x00 ; trap: user0
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
;; mov w10, w0
|
||||
;; movn w9, #65531
|
||||
;; adds x11, x10, x9
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x12, [x2, #8]
|
||||
;; subs xzr, x11, x12
|
||||
;; b.hi label3 ; b label1
|
||||
@@ -64,7 +64,7 @@
|
||||
;; mov w10, w0
|
||||
;; movn w9, #65531
|
||||
;; adds x11, x10, x9
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x12, [x1, #8]
|
||||
;; subs xzr, x11, x12
|
||||
;; b.hi label3 ; b label1
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
;; mov w10, w0
|
||||
;; movn w9, #65534
|
||||
;; adds x11, x10, x9
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x12, [x2, #8]
|
||||
;; subs xzr, x11, x12
|
||||
;; b.hi label3 ; b label1
|
||||
@@ -64,7 +64,7 @@
|
||||
;; mov w10, w0
|
||||
;; movn w9, #65534
|
||||
;; adds x11, x10, x9
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x12, [x1, #8]
|
||||
;; subs xzr, x11, x12
|
||||
;; b.hi label3 ; b label1
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
;; mov w13, w0
|
||||
;; movn w12, #65531
|
||||
;; adds x14, x13, x12
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x15, [x2, #8]
|
||||
;; ldr x2, [x2]
|
||||
;; add x0, x2, x0, UXTW
|
||||
@@ -64,7 +64,7 @@
|
||||
;; mov w13, w0
|
||||
;; movn w12, #65531
|
||||
;; adds x14, x13, x12
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x15, [x1, #8]
|
||||
;; ldr x1, [x1]
|
||||
;; add x0, x1, x0, UXTW
|
||||
@@ -77,4 +77,4 @@
|
||||
;; ldr w0, [x0]
|
||||
;; b label1
|
||||
;; block1:
|
||||
;; ret
|
||||
;; ret
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
;; mov w13, w0
|
||||
;; movn w12, #65534
|
||||
;; adds x14, x13, x12
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x15, [x2, #8]
|
||||
;; ldr x2, [x2]
|
||||
;; add x0, x2, x0, UXTW
|
||||
@@ -64,7 +64,7 @@
|
||||
;; mov w13, w0
|
||||
;; movn w12, #65534
|
||||
;; adds x14, x13, x12
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x15, [x1, #8]
|
||||
;; ldr x1, [x1]
|
||||
;; add x0, x1, x0, UXTW
|
||||
@@ -77,4 +77,4 @@
|
||||
;; ldrb w0, [x0]
|
||||
;; b label1
|
||||
;; block1:
|
||||
;; ret
|
||||
;; ret
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
;; block0:
|
||||
;; movn w8, #65531
|
||||
;; adds x10, x0, x8
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x11, [x2, #8]
|
||||
;; subs xzr, x10, x11
|
||||
;; b.hi label3 ; b label1
|
||||
@@ -62,7 +62,7 @@
|
||||
;; block0:
|
||||
;; movn w8, #65531
|
||||
;; adds x10, x0, x8
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x11, [x1, #8]
|
||||
;; subs xzr, x10, x11
|
||||
;; b.hi label3 ; b label1
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
;; block0:
|
||||
;; movn w8, #65534
|
||||
;; adds x10, x0, x8
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x11, [x2, #8]
|
||||
;; subs xzr, x10, x11
|
||||
;; b.hi label3 ; b label1
|
||||
@@ -62,7 +62,7 @@
|
||||
;; block0:
|
||||
;; movn w8, #65534
|
||||
;; adds x10, x0, x8
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x11, [x1, #8]
|
||||
;; subs xzr, x10, x11
|
||||
;; b.hi label3 ; b label1
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
;; block0:
|
||||
;; movn w11, #65531
|
||||
;; adds x13, x0, x11
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x14, [x2, #8]
|
||||
;; ldr x15, [x2]
|
||||
;; add x15, x15, x0
|
||||
@@ -62,7 +62,7 @@
|
||||
;; block0:
|
||||
;; movn w11, #65531
|
||||
;; adds x13, x0, x11
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x14, [x1, #8]
|
||||
;; ldr x15, [x1]
|
||||
;; add x15, x15, x0
|
||||
@@ -75,4 +75,4 @@
|
||||
;; ldr w0, [x15]
|
||||
;; b label1
|
||||
;; block1:
|
||||
;; ret
|
||||
;; ret
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
;; block0:
|
||||
;; movn w11, #65534
|
||||
;; adds x13, x0, x11
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x14, [x2, #8]
|
||||
;; ldr x15, [x2]
|
||||
;; add x15, x15, x0
|
||||
@@ -62,7 +62,7 @@
|
||||
;; block0:
|
||||
;; movn w11, #65534
|
||||
;; adds x13, x0, x11
|
||||
;; b.lo 8 ; udf
|
||||
;; b.hs #trap=heap_oob
|
||||
;; ldr x14, [x1, #8]
|
||||
;; ldr x15, [x1]
|
||||
;; add x15, x15, x0
|
||||
@@ -75,4 +75,4 @@
|
||||
;; ldrb w0, [x15]
|
||||
;; b label1
|
||||
;; block1:
|
||||
;; ret
|
||||
;; ret
|
||||
|
||||
@@ -90,4 +90,4 @@
|
||||
;; lrv %r2, 0(%r3)
|
||||
;; jg label1
|
||||
;; block1:
|
||||
;; br %r14
|
||||
;; br %r14
|
||||
|
||||
@@ -90,4 +90,4 @@
|
||||
;; llc %r2, 0(%r3)
|
||||
;; jg label1
|
||||
;; block1:
|
||||
;; br %r14
|
||||
;; br %r14
|
||||
|
||||
@@ -86,4 +86,4 @@
|
||||
;; lrv %r2, 0(%r2)
|
||||
;; jg label1
|
||||
;; block1:
|
||||
;; br %r14
|
||||
;; br %r14
|
||||
|
||||
@@ -86,4 +86,4 @@
|
||||
;; llc %r2, 0(%r2)
|
||||
;; jg label1
|
||||
;; block1:
|
||||
;; br %r14
|
||||
;; br %r14
|
||||
|
||||
@@ -405,23 +405,23 @@ block0(v0: f32):
|
||||
; movl $0x4f000000, %r8d
|
||||
; movd %r8d, %xmm3
|
||||
; ucomiss %xmm3, %xmm0
|
||||
; jae 0x2f
|
||||
; jnp 0x20
|
||||
; ud2 ; trap: bad_toint
|
||||
; jae 0x2d
|
||||
; jp 0x4c
|
||||
; cvttss2si %xmm0, %eax
|
||||
; cmpl $0, %eax
|
||||
; jge 0x4b
|
||||
; jge 0x47
|
||||
; ud2 ; trap: int_ovf
|
||||
; movaps %xmm0, %xmm4
|
||||
; subss %xmm3, %xmm4
|
||||
; cvttss2si %xmm4, %eax
|
||||
; cmpl $0, %eax
|
||||
; jge 0x45
|
||||
; ud2 ; trap: int_ovf
|
||||
; jl 0x4e
|
||||
; addl $0x80000000, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f14(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -446,24 +446,24 @@ block0(v0: f32):
|
||||
; movl $0x5f000000, %r8d
|
||||
; movd %r8d, %xmm3
|
||||
; ucomiss %xmm3, %xmm0
|
||||
; jae 0x31
|
||||
; jnp 0x20
|
||||
; ud2 ; trap: bad_toint
|
||||
; jae 0x2f
|
||||
; jp 0x57
|
||||
; cvttss2si %xmm0, %rax
|
||||
; cmpq $0, %rax
|
||||
; jge 0x56
|
||||
; jge 0x52
|
||||
; ud2 ; trap: int_ovf
|
||||
; movaps %xmm0, %xmm4
|
||||
; subss %xmm3, %xmm4
|
||||
; cvttss2si %xmm4, %rax
|
||||
; cmpq $0, %rax
|
||||
; jge 0x49
|
||||
; ud2 ; trap: int_ovf
|
||||
; jl 0x59
|
||||
; movabsq $9223372036854775808, %r8
|
||||
; addq %r8, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f15(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -488,23 +488,23 @@ block0(v0: f64):
|
||||
; movabsq $0x41e0000000000000, %r8
|
||||
; movq %r8, %xmm3
|
||||
; ucomisd %xmm3, %xmm0
|
||||
; jae 0x34
|
||||
; jnp 0x25
|
||||
; ud2 ; trap: bad_toint
|
||||
; jae 0x32
|
||||
; jp 0x51
|
||||
; cvttsd2si %xmm0, %eax
|
||||
; cmpl $0, %eax
|
||||
; jge 0x50
|
||||
; jge 0x4c
|
||||
; ud2 ; trap: int_ovf
|
||||
; movaps %xmm0, %xmm4
|
||||
; subsd %xmm3, %xmm4
|
||||
; cvttsd2si %xmm4, %eax
|
||||
; cmpl $0, %eax
|
||||
; jge 0x4a
|
||||
; ud2 ; trap: int_ovf
|
||||
; jl 0x53
|
||||
; addl $0x80000000, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f16(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -529,24 +529,24 @@ block0(v0: f64):
|
||||
; movabsq $0x43e0000000000000, %r8
|
||||
; movq %r8, %xmm3
|
||||
; ucomisd %xmm3, %xmm0
|
||||
; jae 0x36
|
||||
; jnp 0x25
|
||||
; ud2 ; trap: bad_toint
|
||||
; jae 0x34
|
||||
; jp 0x5c
|
||||
; cvttsd2si %xmm0, %rax
|
||||
; cmpq $0, %rax
|
||||
; jge 0x5b
|
||||
; jge 0x57
|
||||
; ud2 ; trap: int_ovf
|
||||
; movaps %xmm0, %xmm4
|
||||
; subsd %xmm3, %xmm4
|
||||
; cvttsd2si %xmm4, %rax
|
||||
; cmpq $0, %rax
|
||||
; jge 0x4e
|
||||
; ud2 ; trap: int_ovf
|
||||
; jl 0x5e
|
||||
; movabsq $9223372036854775808, %r8
|
||||
; addq %r8, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f17(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -748,22 +748,22 @@ block0(v0: f32):
|
||||
; block1: ; offset 0x4
|
||||
; cvttss2si %xmm0, %eax
|
||||
; cmpl $1, %eax
|
||||
; jno 0x3f
|
||||
; jno 0x39
|
||||
; ucomiss %xmm0, %xmm0
|
||||
; jnp 0x1c
|
||||
; ud2 ; trap: bad_toint
|
||||
; jp 0x3e
|
||||
; movl $0xcf000000, %edx
|
||||
; movd %edx, %xmm3
|
||||
; ucomiss %xmm3, %xmm0
|
||||
; jae 0x30
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x40
|
||||
; xorpd %xmm3, %xmm3
|
||||
; ucomiss %xmm0, %xmm3
|
||||
; jae 0x3f
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x42
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f22(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -787,22 +787,22 @@ block0(v0: f32):
|
||||
; block1: ; offset 0x4
|
||||
; cvttss2si %xmm0, %rax
|
||||
; cmpq $1, %rax
|
||||
; jno 0x41
|
||||
; jno 0x3b
|
||||
; ucomiss %xmm0, %xmm0
|
||||
; jnp 0x1e
|
||||
; ud2 ; trap: bad_toint
|
||||
; jp 0x40
|
||||
; movl $0xdf000000, %edx
|
||||
; movd %edx, %xmm3
|
||||
; ucomiss %xmm3, %xmm0
|
||||
; jae 0x32
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x42
|
||||
; xorpd %xmm3, %xmm3
|
||||
; ucomiss %xmm0, %xmm3
|
||||
; jae 0x41
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x44
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f23(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -826,22 +826,22 @@ block0(v0: f64):
|
||||
; block1: ; offset 0x4
|
||||
; cvttsd2si %xmm0, %eax
|
||||
; cmpl $1, %eax
|
||||
; jno 0x48
|
||||
; jno 0x42
|
||||
; ucomisd %xmm0, %xmm0
|
||||
; jnp 0x1d
|
||||
; ud2 ; trap: bad_toint
|
||||
; jp 0x47
|
||||
; movabsq $13970166044105375744, %rdx
|
||||
; movq %rdx, %xmm3
|
||||
; ucomisd %xmm3, %xmm0
|
||||
; ja 0x38
|
||||
; ud2 ; trap: int_ovf
|
||||
; jbe 0x49
|
||||
; xorpd %xmm3, %xmm3
|
||||
; ucomisd %xmm0, %xmm3
|
||||
; jae 0x48
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x4b
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f24(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -865,22 +865,22 @@ block0(v0: f64):
|
||||
; block1: ; offset 0x4
|
||||
; cvttsd2si %xmm0, %rax
|
||||
; cmpq $1, %rax
|
||||
; jno 0x4a
|
||||
; jno 0x44
|
||||
; ucomisd %xmm0, %xmm0
|
||||
; jnp 0x1f
|
||||
; ud2 ; trap: bad_toint
|
||||
; jp 0x49
|
||||
; movabsq $14114281232179134464, %rdx
|
||||
; movq %rdx, %xmm3
|
||||
; ucomisd %xmm3, %xmm0
|
||||
; jae 0x3a
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x4b
|
||||
; xorpd %xmm3, %xmm3
|
||||
; ucomisd %xmm0, %xmm3
|
||||
; jae 0x4a
|
||||
; ud2 ; trap: int_ovf
|
||||
; jb 0x4d
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: bad_toint
|
||||
; ud2 ; trap: int_ovf
|
||||
; ud2 ; trap: int_ovf
|
||||
|
||||
function %f25(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
|
||||
@@ -14,7 +14,7 @@ block0(v0: i8, v1: i8):
|
||||
; movq %rdi, %rax
|
||||
; cbw %al, %al
|
||||
; testb %sil, %sil
|
||||
; jnz ; ud2 int_divz ;
|
||||
; jz #trap=int_divz
|
||||
; idiv %al, %sil, %al ; trap=int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
@@ -28,12 +28,12 @@ block0(v0: i8, v1: i8):
|
||||
; movq %rdi, %rax
|
||||
; cbtw
|
||||
; testb %sil, %sil
|
||||
; jne 0x14
|
||||
; ud2 ; trap: int_divz
|
||||
; je 0x1a
|
||||
; idivb %sil ; trap: int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: int_divz
|
||||
|
||||
function %f2(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -48,7 +48,7 @@ block0(v0: i16, v1: i16):
|
||||
; movq %rdi, %rax
|
||||
; cwd %ax, %dx
|
||||
; testw %si, %si
|
||||
; jnz ; ud2 int_divz ;
|
||||
; jz #trap=int_divz
|
||||
; idiv %ax, %dx, %si, %ax, %dx ; trap=int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
@@ -62,12 +62,12 @@ block0(v0: i16, v1: i16):
|
||||
; movq %rdi, %rax
|
||||
; cwtd
|
||||
; testw %si, %si
|
||||
; jne 0x14
|
||||
; ud2 ; trap: int_divz
|
||||
; je 0x1a
|
||||
; idivw %si ; trap: int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: int_divz
|
||||
|
||||
function %f3(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -82,7 +82,7 @@ block0(v0: i32, v1: i32):
|
||||
; movq %rdi, %rax
|
||||
; cdq %eax, %edx
|
||||
; testl %esi, %esi
|
||||
; jnz ; ud2 int_divz ;
|
||||
; jz #trap=int_divz
|
||||
; idiv %eax, %edx, %esi, %eax, %edx ; trap=int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
@@ -96,12 +96,12 @@ block0(v0: i32, v1: i32):
|
||||
; movq %rdi, %rax
|
||||
; cltd
|
||||
; testl %esi, %esi
|
||||
; jne 0x12
|
||||
; ud2 ; trap: int_divz
|
||||
; je 0x17
|
||||
; idivl %esi ; trap: int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: int_divz
|
||||
|
||||
function %f4(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -116,7 +116,7 @@ block0(v0: i64, v1: i64):
|
||||
; movq %rdi, %rax
|
||||
; cqo %rax, %rdx
|
||||
; testq %rsi, %rsi
|
||||
; jnz ; ud2 int_divz ;
|
||||
; jz #trap=int_divz
|
||||
; idiv %rax, %rdx, %rsi, %rax, %rdx ; trap=int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
@@ -130,10 +130,10 @@ block0(v0: i64, v1: i64):
|
||||
; movq %rdi, %rax
|
||||
; cqto
|
||||
; testq %rsi, %rsi
|
||||
; jne 0x14
|
||||
; ud2 ; trap: int_divz
|
||||
; je 0x1a
|
||||
; idivq %rsi ; trap: int_ovf
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: int_divz
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ block0(v0: i64, v1: i64):
|
||||
; block0:
|
||||
; movq %rdi, %rcx
|
||||
; addq %rcx, %rsi, %rcx
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -43,9 +43,9 @@ block0(v0: i64, v1: i64):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rcx
|
||||
; addq %rsi, %rcx
|
||||
; jae 0x12
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x15
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ block0(v0: i32):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addl %eax, $127, %eax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -26,11 +26,11 @@ block0(v0: i32):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addl $0x7f, %eax
|
||||
; jae 0x12
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x15
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
function %f1(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -45,7 +45,7 @@ block0(v0: i32):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addl %eax, $127, %eax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -57,11 +57,11 @@ block0(v0: i32):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addl $0x7f, %eax
|
||||
; jae 0x12
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x15
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
function %f2(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -75,7 +75,7 @@ block0(v0: i32, v1: i32):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addl %eax, %esi, %eax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -87,11 +87,11 @@ block0(v0: i32, v1: i32):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addl %esi, %eax
|
||||
; jae 0x11
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x14
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
function %f3(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -106,7 +106,7 @@ block0(v0: i64):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addq %rax, $127, %rax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -118,11 +118,11 @@ block0(v0: i64):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addq $0x7f, %rax
|
||||
; jae 0x13
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x16
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
function %f3(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -137,7 +137,7 @@ block0(v0: i64):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addq %rax, $127, %rax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -149,11 +149,11 @@ block0(v0: i64):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addq $0x7f, %rax
|
||||
; jae 0x13
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x16
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
function %f4(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -167,7 +167,7 @@ block0(v0: i64, v1: i64):
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; addq %rax, %rsi, %rax
|
||||
; jnb ; ud2 user0 ;
|
||||
; jb #trap=user0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -179,9 +179,9 @@ block0(v0: i64, v1: i64):
|
||||
; block1: ; offset 0x4
|
||||
; movq %rdi, %rax
|
||||
; addq %rsi, %rax
|
||||
; jae 0x12
|
||||
; ud2 ; trap: user0
|
||||
; jb 0x15
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; retq
|
||||
; ud2 ; trap: user0
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
;; movl %edi, %r8d
|
||||
;; movq %r8, %r11
|
||||
;; addq %r11, const(0), %r11
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rdi
|
||||
;; cmpq %rdi, %r11
|
||||
;; jnbe label3; j label1
|
||||
@@ -73,7 +73,7 @@
|
||||
;; movl %edi, %r8d
|
||||
;; movq %r8, %r11
|
||||
;; addq %r11, const(0), %r11
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rdi
|
||||
;; cmpq %rdi, %r11
|
||||
;; jnbe label3; j label1
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
;; movl %edi, %r8d
|
||||
;; movq %r8, %r11
|
||||
;; addq %r11, const(0), %r11
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rdi
|
||||
;; cmpq %rdi, %r11
|
||||
;; jnbe label3; j label1
|
||||
@@ -73,7 +73,7 @@
|
||||
;; movl %edi, %r8d
|
||||
;; movq %r8, %r11
|
||||
;; addq %r11, const(0), %r11
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rdi
|
||||
;; cmpq %rdi, %r11
|
||||
;; jnbe label3; j label1
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
;; movl %edi, %r11d
|
||||
;; movq %r11, %rax
|
||||
;; addq %rax, const(0), %rax
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rcx
|
||||
;; addq %r11, 0(%rdx), %r11
|
||||
;; movl $-65536, %edx
|
||||
@@ -72,7 +72,7 @@
|
||||
;; movl %edi, %r11d
|
||||
;; movq %r11, %rax
|
||||
;; addq %rax, const(0), %rax
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rcx
|
||||
;; addq %r11, 0(%rsi), %r11
|
||||
;; movl $-65536, %edx
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
;; movl %edi, %r11d
|
||||
;; movq %r11, %rax
|
||||
;; addq %rax, const(0), %rax
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rcx
|
||||
;; addq %r11, 0(%rdx), %r11
|
||||
;; movl $-65536, %edx
|
||||
@@ -72,7 +72,7 @@
|
||||
;; movl %edi, %r11d
|
||||
;; movq %r11, %rax
|
||||
;; addq %rax, const(0), %rax
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rcx
|
||||
;; addq %r11, 0(%rsi), %r11
|
||||
;; movl $-65536, %edx
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r10
|
||||
;; addq %r10, const(0), %r10
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %r11
|
||||
;; cmpq %r11, %r10
|
||||
;; jnbe label3; j label1
|
||||
@@ -71,7 +71,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r10
|
||||
;; addq %r10, const(0), %r10
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %r11
|
||||
;; cmpq %r11, %r10
|
||||
;; jnbe label3; j label1
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r10
|
||||
;; addq %r10, const(0), %r10
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %r11
|
||||
;; cmpq %r11, %r10
|
||||
;; jnbe label3; j label1
|
||||
@@ -71,7 +71,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r10
|
||||
;; addq %r10, const(0), %r10
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %r11
|
||||
;; cmpq %r11, %r10
|
||||
;; jnbe label3; j label1
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r8
|
||||
;; addq %r8, const(0), %r8
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rax
|
||||
;; movq %rdi, %rcx
|
||||
;; addq %rcx, 0(%rdx), %rcx
|
||||
@@ -71,7 +71,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %rdx
|
||||
;; addq %rdx, const(0), %rdx
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rax
|
||||
;; movq %rdi, %rcx
|
||||
;; addq %rcx, 0(%rsi), %rcx
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %r8
|
||||
;; addq %r8, const(0), %r8
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rdx), %rax
|
||||
;; movq %rdi, %rcx
|
||||
;; addq %rcx, 0(%rdx), %rcx
|
||||
@@ -71,7 +71,7 @@
|
||||
;; block0:
|
||||
;; movq %rdi, %rdx
|
||||
;; addq %rdx, const(0), %rdx
|
||||
;; jnb ; ud2 heap_oob ;
|
||||
;; jb #trap=heap_oob
|
||||
;; movq 8(%rsi), %rax
|
||||
;; movq %rdi, %rcx
|
||||
;; addq %rcx, 0(%rsi), %rcx
|
||||
|
||||
Reference in New Issue
Block a user